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

Aplicaciones Facebook sobre SSL

Hace unos días Facebook ha empezado a mostrar mensajes de error cuando se accedía a aplicaciones desde https, estando disponible para los desarrolladores, en la configuración de la aplicación, dos nuevos campos, para indicar las urls seguras (sobre https).

Para evitar esto debemos, claramente, añadir soporte https a nuestra aplicación, algo que si bien es sencillo, nos dará más que un quebradero de cabeza. Esto se debe a que nos encontraremos con los nuevos y vitales “bugs” con los que Facebook nos premia a todos los desarrolladores. Seguir leyendo

Optimizar las aplicaciones de Facebook más allá del código

El desarrollo de aplicaciones para Facebook nos requiere una especial optimización de estas para que funcionen en base a dos premisas muy importantes: Seguridad y rapidez.

La rapidez depende de muchos factores, desde la optimización del código hasta la plataforma sobre la que se ejecuta esta, es por esto último que todas las aplicaciones que estamos haciendo son ejecutados con varios servidores con funciones muy específicas.

– Balanceador de carga: Con una conexión a Internet de 100MB/s con un nginx para esta función.
– Servidores de Aplicaciones: Todos son replicas que se crean bajo demanda, permitiendo siempre dar una calidad de servicio óptima independientemente de la carga.
– Servidores de Datos: Los datos están centralizados en estos servidores, que también están replicados. Los datos están, dependiendo de la aplicación en diferentes servidores de bases de datos: SQL (MySQL, PostgreSQL), noSQL ( MongoDB, Membase ).

Las aplicaciones utilizan además un sistema optimizado de caché basado en un sistema de varios nodos de Memcache, reduciendo la carga de consultas a base de datos y a el API de Facebook.

La conectividad es también muy importante, de ahí que la red de Servidores de Aplicaciones tiene una conexión de 100MB/s a internet sólo para acceder a la API de Facebook, y la conectividad interna de todo el ecosistema es con una red GigaEthernet.

Las copias de seguridad se hacen con otra conexión de 100MB al servicio S3 de Amazon.

Evitando de esta forma encontrarnos con “cuellos de botella” en la red.