jueves, 22 de diciembre de 2016

Visualizador de algoritmos

Una cucada que se han montado estos señores para ver como rulan los algoritmos paso por paso y una buena colección de algoritmos ya montados. Seguro que algo nuevo puedes aprender aunque lleves la tira de años programando.

http://algo-visualizer.jasonpark.me/

martes, 23 de agosto de 2016

Matices en la programacion asíncrona en .NET

Me han pedido de forma personal que explique ciertos matices con respecto a la programación asíncrona en .NET que pueden no estar del todo claros para algunos interesados en el tema. Voy a poner un poco de código al que iremos evolucionando y analizando sus resultados.

jueves, 11 de agosto de 2016

Programación reactiva II.

En la entrada anterior puse un ejemplo de programación reactiva. Ese ejemplo no es de muy buena calidad pero creo que ayuda mucho a obtener la mentalidad que hay que adoptar para la programación orientada a eventos.

Los problemas principales del ejemplo anterior son dos:
  1. La variable estática isRunning para filtrar el stream de eventos de scroll hace que me sangren los ojos cada vez que la veo. Es chapucero como sincronizador de hilos de ejecución y agrega una dependencia sin contexto en el método updateGrid; y el contexto importa; y mucho; si se quiere evitar tener una asquerosa bola de lodo como código fuente.
  2. No tenemos control sobre el índice de elementos a recuperar (---0---100---200---300--->) y eso no es bueno puesto que en un entorno real es necesario un máximo (aunque sólo sea para evitar un overflow) y probablemente más cosas, como decrementarlo, saltar directamente a una página no secuencial, etc.
En esta entrada toca hacer lo mismo pero un poco más pro. Al fin y al cabo necesitamos seguir ignorando eventos mientras cargamos la rejilla y necesitamos un stream con el índice de los elementos a recuperar para que se integre con los demás streams.

miércoles, 10 de agosto de 2016

Programación reactiva.

Pues estoy aquí, enredando con Reactive Extensions (Rx) en .NET y la verdad es que me gusta bastante. La inmutabilidad de los Observables y la programación funcional son conceptos encantadores para arquitecturas orientadas a eventos.

Antes de poner algo de código tonto para satisfacer mi ego me gustaría comentar ciertos detalles que voy descubriendo a medida que me pego con esto.


viernes, 22 de julio de 2016

Herramientas a cascoporro

Aquí un señor se ha currado una lista bien clasificada con herramientas útiles para devOps...

http://www.devopsbookmarks.com/

Un par de herramientas para el blogger programador

Cuando escribes en un blog sobre informática, y sobre todo cuando escribes sobre programación, lo más normal es que de vez en cuando queramos meter bloques de código. Obviamente no os estoy descubriendo la rueda si os digo que existen herramientas para facilitar esta tarea...

¿siiiii?¡Hala, no fastidies!¿De verdad?...

A ver, esto no es más que una entrada un poco tontuela de retroalimentación; más que nada para saber lo que estoy usando y dónde puedo encontrarlo... SyntaxHighlighter por ejemplo, es una herramienta de código abierto, escrita en JavaScript que nos permite mostrar en nuestras entradas sobre programación esas bonitas ventanitas llenas de código con la sintaxis puesta en plan bonito, con sus colores y tal...

En nuestro caso concreto, dado que Blogger tiene sus limitaciones y restricciones, para poder tenerlo al uso en este blog tuvimos que editar la plantilla e introducir todas las referencias necesarias al servidor que proporciona esta herramienta. Al margen de las explicaciones que puedas encontar en la web de alexgorbatchev.com, este es el código que metimos en nuestra plantilla:

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/> 
      <link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCSharp.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPython.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushRuby.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/> 
      <script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPerl.js' type='text/javascript'/> 
      <script language='javascript'> 
        SyntaxHighlighter.config.bloggerMode = true;
        SyntaxHighlighter.config.clipboardSwf = &#39;http://alexgorbatchev.com/pub/sh/current/scripts/clipboard.swf&#39;;
        SyntaxHighlighter.all();
      </script>

Como se ver es básicamente una colección de referencias a las diferentes sintaxis aceptadas (las llaman brush), a las hojas de estilo y al JavaScript que dibuja la ventana... ¡Gracias Alex Gorbatchev!

Cuando estamos editando una entrada y queremos poner un bloque de código, vamos a la vista HTML y pegamos nuestro código entre las etiquetas <pre> y </pre>. Una de las propiedades que tiene el atributo CLASS de esta etiqueta es brush. El valor de brush será alguna de las diferentes sintaxis con las que colorearemos nuestro bloque de código:

<pre class="brush:java">
public class Hello {
  public static void main(String[] args) {
    System.out.println("Así pinto el código Java");
  }
}
</pre>

AQUÍ están todas las sintaxis admitidas actualmente por SyntaxHighlighter.

Otra herramienta online que suelo utilizar es este parser, para convertir cualquier bloque de código a HTML. Esto es porque Blogger, por cuestiones de seguridad, no deja introducir determinados fragmentos de código cuando estás escribiendo un post (estos de Google se ponen muy quisquillosos con eso de las inyecciones de código...). Si lo parseamos a HTML y lo metemos entre las etiquetas del SyntaxHighlighter ya tenemos nuestra bonita y didáctica ventanita con nuestro ejemplo de código fuente.

miércoles, 4 de mayo de 2016

La culpa es del informático

Esta mañana me he levantado con este artículo y hoy no me apetecía callarme. El escrito hace referencia al personal informático de la Administración, aunque imagino que es extrapolable a cualquier empresa, sobre todo a aquellas donde las TICs no son la base del negocio y la informática no es más que esa oscura alquimia que ayuda a alcanzar unos objetivos mediante retorcidas artes... Al principio se muestra comprensivo, suave y solidario: pero mediado el texto nos mete la puntilla, eso sí, sin perder cierto tono condescendiente y conciliador... 


sábado, 30 de abril de 2016

Mi nuevo bot de Telegram.

Feedbooks public domain catalog. Browse, search, share and download on Telegram chats.
https://telegram.me/eBukBot

A LindekIn en Android no le gustan las url de telegram. Copia el enlace y pegalo en tu navegador web.

miércoles, 20 de abril de 2016

El ransomware de moda, Cryptolocker.

Últimamente estoy recibiendo muchas consultas sobre éste programa malicioso. Intentaré hacer un pequeño resumen de cómo nos podemos infectar, qué hace el virus, porqué no se puede 'deshacer' y que podemos/debemos hacer si nos infectamos.
  1. ¿Cómo nos podemos infectar?

    Las vía más común es un correo electrónico que tratará de engañarnos para que descarguemos un archivo adjunto o para que hagamos clic en un enlace para descargarlo. El archivo será un ejecutable o un documento de MS Office.
    • El ejecutable puede llevar un icono para confundir al usuario, como si fuese un pdf o similar, pero al intentar abrirlo, Windows nos advertirá de que es un programa y de que puede dañar nuestro equipo.
    • El documento de MS Office tendrá Macros y al abrirlo seguramente saldrá un mensaje de aviso de que las macros pueden ser dañinas y que si las queremos activar.
    En cualquiera de los casos, es necesario que el usuario ignore los avisos y se infecte él mismo.    

  2. ¿Qué hace el Virus?

lunes, 18 de abril de 2016

Programación defensiva y consultas en diferido.

   Como somos la mar de profesionales y nunca nos fiamos de la información que se nos pasa en los parámetros de una función, dedicamos parte de nuestro tiempo en la programación defensiva. Cosas que comúnmente, en la  programación defensiva, se ponen al principio de la llamada de una función pueden ser:
  1. Comprobar la existencia de valor.
  2. Comprobar el tipo en caso de herencias.
  3. Comprobar el rango del valor.
  4. Comprobar la plausibilidad del valor, si es posible.
   Esto son solo 4 ejemplos de la cantidad de cosas que se pueden controlar.


miércoles, 30 de marzo de 2016

Publicado en GitHub

He publicado el web scraper tontuelo que me hice para el canal de difusión de telegram. Siempre se puede aprender algo echándole un vistazo o enseñar algo creando un fork y puleando.

https://github.com/jlvaquero/AECOSANConsumerAlerts


viernes, 12 de febrero de 2016

Promesitas titas titas...!

Casi cualquiera que haya trasteado un poco con JavaScript y principalmente con NodeJS es casi seguro que se ha encontrado con el patrón promesa y lo ha usado para quitarse anidaciones infinitas e infiernos de callbacks en operaciones asíncronas.

El patrón en sí mola y es una buena idea aunque, como todo, también depende de la implemetación que se use para que te de más o menos funcionalidades.

¿Pero cómo funciona por dentro este patrón?

martes, 9 de febrero de 2016

Transponiendo tablas en T-SQL con la cláusula PIVOT.

¿Cuántas veces, buscando soluciones para algún problema -navegando por Internet- damos con un código que modificamos y logramos poner a funcionar, aunque no sepamos muy bien cómo? Algo así como "¡ey! pues esto funciona pero ¿Podría implementarlo desde cero ahora que he visto la solución?... Espera, ¿Por qué he puesto esto aquí?...". A mi no me pasa, pero conozco a un amigo... Bueno, venga, sí que me ha pasado alguna vez, por ejemplo con la cláusula PIVOT de T-SQL... He tenido que usarla un par veces (al menos), sin prestarle nunca mucha atención, así que en la siguiente ocasión volvía a perder demasiado tiempo buscando por la red soluciones a medias. Por lo tanto, como viene siendo habitual cuando escribo estas parrafadas, espero que esta entrada sirva para ayudarme a entenderlo del todo o -al menos- para encontrar una referencia más directa la próxima vez que lo necesite (y bueno, a lo mejor es útil para alguien más...).

Transponer datos de una tabla -o pivotar datos de una tabla- es básicamente cambiar datos de filas a columnas (o viceversa). Pero en qué mundo descabellado y cruel podría ser necesario hacer una cosa así, os preguntaréis...; bueno, existe un modelo relacional de almacén de datos que se usa en entornos muy cambiantes que añaden o eliminan columnas en las tablas a lo loco o entidades que registran un montón de atributos. Se llama modelo EAV (o Entity-Attribute-Value). Este diseño consiste esencialmente en almacenar los datos en un formato de "atributo-valor". Uno de los mayores problemas que presenta este modelo es la dificultad para visualizar y presentar los datos. Imaginemos un ejemplo muy tonto:

lunes, 25 de enero de 2016

¡España busca talento!

He recibido, a través de LinkedIn, un glorioso mensaje de un reclutador IT que da vergüencita.
En xxxxxx Barcelona buscamos Java Bosses, ¿te sumas?
Hola, Jose Luis: Me ha llamado la atención tu experiencia en entornos Java descrita en la matriz de conocimientos y creo que podrías ser nuestro próximo Java Boss! En xxxxxx Barcelona creemos en el concepto "right people, right place", y por eso queremos contar contigo. Si te identificas con valores como la confianza, la transparencia, la autonomía, la libertad en toma de decisiones y sobre todo el buen rollo en el trabajo, xxxxxx es el lugar donde compartir teclado! Si quieres saber más, no dudes en responder a este mensaje o directamente en mi dirección personal "xxxx.xxxxx.xxxxx@xxxxxx.com" y hablamos sobre tus intereses y aspiraciones profesionales. ¿Te sumas?

jueves, 14 de enero de 2016

Mi nuevo proyecto mascota.

Alertas de consumo Servicio de notificación de alertas de productos no alimenticios. Fuente: aecosan. Contacto: alertasconsumotelegram@gmail.com 
Hecho con Node.js. Suscribiros bastardillos!

miércoles, 13 de enero de 2016

Aplana tu código asíncrono en JavaScript

Debido al modelo asíncrono y de loop de eventos de NodeJS, en ciertas ocasiones nos encontramos con una situación en la que tenemos una terrible pirámide de callbacks y acabamos en lo que la gente llama "callback hell".