Lista de recursos Go de la semana

El primero es el muy sencillo, que no limitado, sistemas de interfaces de Go.

How to use interfaces in Go

El segundo, que no menos importante, dejando bien claro y mostrando el código en C# vs Go.

Statements are statements, and expressions are expressions (in Go)

Como siempre necesitaremos algo de depuración:

Scheduler Tracing In Go

Un proyecto, verde, pero prometedor, para (entre otros) ejecución distribuida:

hyflow-go: A geo-replicated, main-memory, highly consistent datastore

Hyflow-go hace uso de una implementación del algoritmo Paxos (E-Paxos).

E-Paxos (en Go)

(Editado) Que me quedaba uno: El como optimizar (u optimizaron) en cloudflare un proceso en Go y pasaron de 3.000 peticiones/segundo a 480.000 peticiones/segundo. Video.

Optimizing Go: from 3K requests/sec to 480K requests/sec

Imagen: Gopher by Ingrid Taylar, on Flickr

StreamTools: Una herramienta para analizar streams

Todos los días escuchamos hablar de Big Data, IoT, Smart Data, Machine Learning, semantic data, etc. Gran parte de las veces fuera de contexto o simplemente utilizadas porque “están de moda”.

Uno de los mejores ejemplos es “Big Data”, donde se habla siempre de ingentes cantidades de información, que si sistemas, plataformas, consultas, pero con el error, desde mi punto de vista, de tomar eso como información, no, no es información, son datos, datos en bruto o datos tratados, la información es la que se extrae de esos datos. Se pierden muchas veces, con el termino “Big Data” en sólo la parte de guardar ingentes cantidades de datos, replicados y en volumenes astronómicos. Eso no es “Big Data” eso es sólo hablar de una parte, la más mecánica, y la que menos aporta a lo que se busca “Información”, es sólo “almacenaje y gestión de datos”, una pata de una mesa mucho más amplia.

Entiendo el error como que se tiende a centrar más en los componentes que en la solución requerida.

Me encantan las pruebas de concepto (esas pequeñas o no tan pequeñas herramientas/soluciones para algo ya existente o nuevo pero aplicando una solución diferente) y es ahí donde he descubierto el proyecto de New York Times R&D: Streamtools.

Para New York Times R&D Streamtools se basa en tres predicciones a 3-5 años vista:

1) Los datos serán proporcionados como streams (Flujo de datos): Debido al volumen de datos estos serán obtenidos mediante “sensores” donde APIs basadas en streams prevalecerán sobre datos obtenidos de Bases de datos. En gran medida los origenes de datos “emitirán” datos. Poner una base de datos entre ese emisor y las personas/maquinas que los procesarán será algo demasiado caro (por los volúmenes).

2) El uso de streams cambiará como sacaremos conclusiones en el mundo: Siendo este cambio de paradigma el que nos haga empezar a pensar en términos de análisis, modelado, toma de decisiones y visualización.  Cada nuevo stream que llegue nos afectará instantaneamente a nuestra visión del mundo (lo puede cambiar).

3) Las herramientas adaptables nos inferirán nuevas formas de semantizar y obtener información: El analisis de datos tenderá al “Abductive Reasoning“: El investigar empezará a explorar y observar los datos y mediante hipótesis tratará de razonarlos.

Con esto en mente crearon Streamtools, una herramienta que, con un interface gráfico, permite definir y gestionar estos streams, y no sólo trabajar con ellos sino incluso definir nuevos streams a partir de datos u orígenes aparentemente “estáticos”.

68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f3539373839372f323434333539372f62316332343131652d616533392d313165332d396662342d3432396533393534383632302e676966 De esta forma se pueden marcar cada cuanto tiempo deben leer y de que sitio y el proceso de limpieza, filtros, acciones para gestionar ese stream.

Casos de uso que han puesto a modo de ejemplo son:

  • análisis de las visitas de NYT mediante un Queue para generar informes automáticos diarios.
  • Un tracker de terremotos utilizando los datos en tiempo real del USGS.
  • Un sistema para ver los “objetos” perdidos de los sistemas de tránsito de NY.
  • Disponibilidad de bicicletas de Citibike en la parada más cercana a las oficinas de NYT.

Ver ejemplos

Además de los ejemplos tenemos origenes de datos potenciales (potencial su uso) para el paradigma de Streamtools:  Data Sources

Streamtools tiene licencia Apache 2 ( Open Source ) y está hecha en Go.  Como proyecto de investigación es una plataforma para explorar nuevos algoritmos y métodos de análisis. Streamtools permite ser extremadamente expresivos (claros y visuales) a la hora de crear prototipos de analisis de datos.

Como ver si estás Logueado en WordPress desde Go

Como prueba de concepto estoy haciendo una pequeña API en Golang que, en un Apache con mod_proxy, sirve ciertos contenidos a un WordPress.

El pequeño reto, que es realmente pequeño, es saber desde esa mini aplicación en Go, y mediante la cookie wordpress_logged_in_XXXXXX quien es el usuario (si está logueado).

Para ver como compone la cookie el WP sólo hay que ver el código fuente y es así como se podría resolver en Go

Notas:

1) No compruebo el valor de Expiration en este ejemplo
2) Este código no me funcionará en el proyecto ya que cambiaré, mediante un hook en WP, el como se crea y como se valida la cookie añadiendo 2 más al método de hash ( para dar un poco de seguridad extra ): La IP del usuario validado y el Navegador utilizado (Agent), ya que considero demasiado “débil” el formato por defecto de WP.

Stop DisplayLink driver flooding logs in OS X Yosemite

To stop logging messages, like that, on Syslog:

[…]
14/12/14 10:38:24,521 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:24,561 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:24,573 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,243 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,274 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,293 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,354 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,891 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,906 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,928 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:25,945 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
14/12/14 10:38:26,017 WindowServer[235]: _CGXGLDisplayContextForDisplayDevice: No matching context for device (0x7fdf63610e10) – disabling OpenGL
[…]

Is needed to modify ASL configuration, adding, at the begining of /etc/asl.conf ,  the line:

? [CA= Message _CGXGLDisplayContextForDisplayDevice] ignore

and restarting the Syslogd

sudo killall -HUP syslogd

 

 

Desarrollar es algo más que sólo usar “componentes”

Una de las conversaciones concurrentes, en las tertulias delante de una cervecita, es la de la actual tendencia, por parte de gran parte de los “desarrolladores” de no realmente programar sobre las necesidades del cliente sino simplemente utilizar módulos/componentes/plugins/…

uso de componentes

El uso de componentes excesivos para necesidades muy simples

Esto provoca que la solución final no es más que una amalgama de elementos, muchos de ellos que no fueron diseñados para esa función y otros que realmente no son necesarios,  que no hacen más que crear la sensación de que está solucionado todo pero,  como una solución “AS IS”. De estas de no tocarlas, porque no sabemos si algo puede fallar, ni como, ni porque.

Componentes formando una solución "peligrosa"

Algunas veces la solución entraña más “peligros” de los necesarios

Uno de los ejemplos es, en WordPress, la frase “hay un plugin que lo hace”, y no nos damos cuenta que sólo adaptar ese plugin es más costoso que sólo programar a mano la parte de ese plugin que realmente utilizaremos, muchas veces es solo crear un “Custom post type” en el functions.php, y crear un par de plantillas, pero se acaba utilizando el plugin. Muchas veces modificado.

Esto se aplica muchas veces a “si yo soy muy bueno con X utilizaré X para todo”, y así nos encontramos con que muchas veces entendemos que la herramienta X es cómo una navaja suiza, y no lo es. En este punto se pondría como ejemplo: “Con Joomla se puede hacer cualquier web”, frase que también he escuchado de WordPress.

Soy de los que piensan que debemos estar aprendiendo nuevas tecnologías, no porque sean mejores que las que usamos normalmente, sino porque nos pueden aportar nuevas herramientas para presentes y futuros desarrollos.

Ejemplos:

– Hace unos años me decidí por SOLr frente a Elastic Search, entre otros porque no había un “More like this” usable, ahora utilizo más Elastic Search que SOLr.

– También hace mucho tiempo evalué Angular, era la versión 0.9.6,  y no me resultaba atractivo por los requisitos de navegador y las funcionalidades que aportaba, hoy en día es lo que utilizó todos los días.

Y así con muchos elementos, y con una clara determinación, cada problema requiere sus propias herramientas, no las mías.

Plantillas de Theme my Login personalizadas

Theme My Login, es un plugin que nos permite adaptar a nuestras necesidades todos los elementos relativos al: Registro, Entrada, … de un WordPress.

Dentro de la carpeta del plugin encontramos las plantillas en la carpeta “templates”, como es de rigor, no debemos modificar esas plantillas, podemos copiarlas a el raiz de nuestra plantilla y ahí modificarlas, momento a partir del cual esas plantillas serán las utilizadas por nuestra web, sin que una actualización del plugin afecte a los cambios realizados.

Las plantillas son:

Si no queremos llenar el raiz de nuestra plantilla de archivos y más archivos, podemos utilizar el theme-my-login-custom.php que se crea en el raiz de la carpeta wp-content/plugins y cambiar el como busca, este plugin, las plantillas. En nuestro caso queremos que estén dentro de la carpeta “login” en nuestra plantilla ( wp-content/themes/nuestraplantilla/login ), sólo para tener ordenada nuestro código.

Como comprobar la validez de un EAN13

Los EAN13 están compuestos por 13 dígitos de los cuales el último es de check. Mediante la siguiente función en php se puede comprobar si un EAN está correctamente formado:

function isValidEAN( $ean ){
	$ean =(string)$ean;
	// Debe tener 13 caracteres
	if ( strlen( $ean ) != 13 ) {
		return false ;
	} 
	$even_sum = $ean{1} + $ean{3} + $ean{5} + $ean{7} + $ean{9} + $ean{11};
	$even_sum_three = $even_sum * 3;
	$odd_sum = $ean{0} + $ean{2} + $ean{4} + $ean{6} + $ean{8} + $ean{10};
	$total_sum = $even_sum_three + $odd_sum;
	$next_ten = (ceil($total_sum/10))*10;
	$check_digit = $next_ten - $total_sum;
	$valid = substr( $ean, 0, 12 ) . $check_digit ;
	return  ( $ean  == $valid ) ;
}

Cocos2d x

A la hora de desarrollar juegos para dispositivos móviles disponemos de múltiples alternativas multiplataforma: Unity 3d, Corona, … incluso Titanium.

Una interesante solución es utilizar Cocos2D, que con su versión Cocos2DX, nos permite ahora generar nuestro juego para iOS.

Cocos2Small

Entre las plataformas que soporta están, agrupadas por lenguaje de programación:

Plataforma C++ Lua Javascript C#
Plataforma móvil iOS o o w
Android o o w
WindowsPhone7 o
WindowsPhone8 w
Bada i
BlackBerry QNX o
MeeGo i
Marmalade i
Escritorio win32 o o w
Linux o
Win8 Metro o
Mac OS X o
Navegador HTML5 ready platforms o

“o” Operativa
“i”  Soportada para no activa (no actualizada)
“w” En proceso

Para desarrollar en Mac OS X disponemos del CocosBuilder.

screenshot2

 

 

Compilar aplicaciones de Titanium Mobile desde línea de comandos

Cada uno tiene sus preferencias a la hora de editar código. Por ejemplo, para PHP utilizo Netbeans, para html Textmate, …

Para Titanium Mobile prefiero Textmate, no me hago al Titanium Studio.

Gracias a  Matt Apperson ahora disponemos de un sencillo script que nos permitirá compilar, ejecutar en el simulador y hacer la distribución de nuestras aplicaciones desarrolladas en Titanium Mobile, y este es MakeTI.

Una vez instalado en el raiz de nuestro proyecto podremos ejecutarlo en el simulador con un simple

make run

O compilarlo con otro simple:

make deploy

Todas las opciones y ayuda están en la página del proyecto en GitHub: MakeTi

Esperando la nueva versión de Notability

Siempre he utilizado bolígrafo y papel para tomar notas, transformando mi mochila en una colección de libretas y blocs de todos los tamaños y colores.

Esto ha sido así hasta que encontré varias aplicaciones, para el iPad, que permitían hacer lo mismo, escribir sobre el iPad, como si de un papel se tratase.

Tras mucho buscar y probar, al final me quedo con Notability, ya que permite, además de escribir a mano, insertar imágenes, capturas de web, figuras, … y con un precio de 0’79€, increíble.

Hace una semana he visto que está pendiente de revisión la nueva actualización de esta fabulosa app, y los cambios son realmente lo que  estaba esperando: Poder copiar y pegar, cambiar el estilo de lo que he escrito, vista y reordenación de las páginas, …

Aquí está la presentación de las novedades de esta versión.

Por culpa del video llevo una semana entrando en el App Store para ver si está ya actualizada, pero aun no, estoy como un niño pequeño, lo quiero y ahora ;-)

 

Nuevas redes inalámbricas, nuevos retos para las “telecos”

Interesante artículo de como las empresas de telecomunicaciones deben afrontar las nuevas formas inalámbricas de conectarse a Internet.

http://www.readwriteweb.com/mobile/2011/10/the-customer-connection-isnt-t.php

En el que indica que no se deben cometer los errores, ya que deben generar infraestructuras nuevas, que se han cometido en el pasado: “so start thinking about your end-user customers first and foremost”

En el siguiente artículo, comentado en el primer enlace, plantea las dificultades que acarrea esta nueva tecnología, ya que hace al consumidor/cliente más ágil a la hora de informarse y tomar decisiones.

http://knowledge.wharton.upenn.edu/article.cfm?articleid=2860

Carta abierta a ONO

“Buenos” días,

Tras el problema con el móvil, que se me había enviado uno que no se correspondía con el indicado, hoy ha llegado el mensajero, lo ha recogido y por mi parte ya consideraba el problema zanjado.

Hasta que pocos minutos despues recibo una llamada de ONO donde se me indican los productos que tengo contratados, y uno de ellos me llamó la atención, por que no sabía que era: Seguir leyendo

ONO: Cuando un cliente no es un cliente

Soy un cliente de ONO que lleva unos 5-6 años sin problemas, ahora tengo TV/Telefono/Internet 100MB, Internet Móvil…

Ultimamente solo tengo problemas, los cortes de la conexión a Internet los considero hasta asumibles, el que considero más grave es el sentirme defraudado y “estafado” (es duro el término pero es como me siento).

Hace unos días me han llamado de ONO para que me pasase a su servicio móvil, tras explicarles que apenas uso el móvil, al final me ofreciero un HTC Wildfire S, y una tarifa a la que añadimos un extra de datos (para Internet).

Hoy hacen la portabilidad y me llega el teléfono, un LG. Llamo al SAT para indicar que me han enviado un teléfono equivocado, abren una incidencia. Seguir leyendo

El extraño caso de los rankings

Está más que visto que los más grandes ningunean a los pequeños, pero eso no quita que hay momentos en los que lo hacen dando información falsa y un enlace a la verdadera.

Aquí tenemos un buen ejemplo:

La revista Computer Hoy sacó un ranking sobre ‘tiendas online de informática’, cual ha sido mi sorpresa al ver que en el top 5 de esta lista, estaban TPO Informática (el proyecto de unos emprendedores y amigos) junto con Redcoon.

La gran sorpresa estaba en que estaban en el TOP 5, entre tiendas online que pertenecen a grandes corporaciones, algo que no es malo, pero si es muy bueno que los pequeños se codeen con los grandes. Seguir leyendo