jueves, 6 de julio de 2017

Tuneando el control de concurrencia optimista.

Supongamos que tenemos una entidad en nuestro sistema llamada "Cliente" que se compone de los atributos [Nombre - Apellido -  EsVIP]. Si modelamos esto en un sistema de persistencia con concurrencia optimista nos quedaría así:

Nombre    - varchar(50)
Apellido   - varchar(50)
EsVIP      - bit
stamp       - rowvewsion

donde stamp es un valor que siempre cambia cuando la entidad ha sufrido algún cambio en persistencia.

Como aquí hablamos de concurrencia no me voy a meter en el tema del estancamiento de datos. Para eso les remito a la esta entrada. La gestión del estancamiento de datos no debe basarse en el campo stamp.

Los pasos que vamos a seguir serán los siguientes:
  1. Rehidratamos la entidad desde persistencia.
  2. Le aplicamos los cambios respetando las reglas e invariantes del dominio.
  3. Intentamos persistir la entidad aplicando el control de persistencia.

viernes, 24 de febrero de 2017

Paralelización con RxJava

Para los que no lo sepan: Rx es monohilo por defecto. 

Un entorno multihilo rompe un stream secuencial inmutable; puesto que deja de ser secuencial.

Aun así, todavía hay posibilidad (y potencial) de ejecutar procesos en paralelo.

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.