lunes, 30 de marzo de 2015

Día 61


Inseparables!!

Hasta ahora he trabajado con parámetros de configuración que iba cambiando en los valores por defecto. Ahora estoy desarrollando las pantallas de Ajustes (Settings).
Android tiene su propio sistema para diseñar pantallas de "Configuración", que facilita bastante la faena.
http://developer.android.com/guide/topics/ui/settings.html

Ahora mismo mi servicio en background emplea SQLite para almacenar los resultados de las notificaciones que van llegando desde el servidor, y otros datos de valor.
Gracias a haber definido el servicio como Service.START_STICKY, cuando el usuario cierra la aplicación, el servicio sigue funcionando, justo lo que quería!! wuahiiii!!!!
Ayer estuve enganchado hasta las 3 de la madrugada, no funcionaba el maldito servicio!!! finalmente miré el fichero de manifiesto del proyecto y me había olvidado de definirlo allí, escribí dos líneas, desplegué, funcionó y explosioné.

viernes, 27 de marzo de 2015

Día 60


El fantástico Hiro Nakamura de la serie Heroes después de usar su super poder de teletransporte!!
Hoy me he despertado un poco en plan japonés con super poderes.

Tras 60 alocados posts sobre mi proyecto de desarrollo, con tantas referencias cinematográficas como técnicas, el blog ha tenido 3.171 visitas, contadas una por una por los dos siguientes fantasmas.


Según esto en estados unidos estáis majaretas. Gracias tíos!! Y a todos los demás también!!
De hecho muchas gracias a todos, los que estáis siguiendo el blog y aquellos que cada semana os vais sumando aunque sólo sea para ver los gags visuales!

No he desvelado de qué va el proyecto, pero hay tantas tareas que en el día a día el objetivo no se atisba entre la espesura del desarrollo. (¿qué coño hago hablando como un puto mosquetero?)

Os resumo las tecnologías implicadas:

Servidor: nginx + nodejs + redis + mysql. Esta parte chicos y chicas es la que genera respuestas de tipo JSON a las aplicaciones android e ios, 
Google Cloud Messaging: es un servicio que ofrece google, que permite emitir notificaciones a los dispositivos móviles o a los servidores, es bidireccional. Emplea el protocolo XMPP.
Básicamente hace que cuando el servidor recibe algún dato por parte de un usuario, que debe ser notificado a otro usuario, envía una notificación directamente al dispositivo de ese usuario. 
Estas notificaciones son las típicas que os llegan de Whatsapp, Line, Facebook, Instagram,etc.
Amazon SES: es el servicio para enviar emails de salida. Básicamente lo empleo para dos cosas, enviar email de registro de usuarios nuevos y para email de recuperación de contraseñas.
Android
Empleo 2 servicios básicos, uno que recibe notificaciones y otro que emite notificaciones.
Empleo el UI básico de Android, con muchas RecyclerViews, ScrollableViews y estilos personalizados.
Uso SQLite para almacenar la parte más importante de datos en el cliente y las SharedPreferences para almacenar las settings básicas. Ambas colecciones en estado privado.
GSON para el parseo de los objetos JSON que envía el servidor.
IOS
Tengo la estructura básica de UI, y espero poder meterle la misma chicha que en android, en cuanto tenga finalizado al menos el 90% de la versión para Android.

He realizado muchos proyectos grandes antes, pero nunca había tenido que pelearme con tantas tecnologías distintas. Normalmente trabajaba en equipo. Echo a faltar un poco las locuras que se generan currando con equipos. 
Aunque un proyecto de este tipo genera una perspectiva global impresionante.

Como comenté ayer, creo que en 2 semanas ya podré tener a colegas y familia testeando la versión para Android y supongo que estaré como una cabra loca desarrollando la versión para IOS y corrigiendo bugs (no han salido apenas durante el desarrollo, sólo espero que los que aparezcan no me hagan correr hacia la pared y atravesarla).

Todos aquellos que tengáis dudas, sobre las tecnologías que estoy usando, temas de configuración. Componentes de UI que no os están funcionando en Android. Handlers y Callbacks de nodejs. Temas de MySQL, nginx. No preguntéis ni comentéis nada porqué soy pro-un-mundo-peor en el que se comparte cero conocimiento. Desayuno delfín y mi pijama está hecho con piel de bebé pingüino.

Ahora en serio, para cualquier cosa PREGUNTAD! Si dispongo de ese conocimiento y puedo resolveros una duda lo intentaré!!

Aquí va un consejo para cuando has decidido echarte una siesta en el segundo peor lugar del mundo.


El peor lugar del mundo, sería sobre la cara de Chuck Norris.

jueves, 26 de marzo de 2015

Día 59


Si existieran programadores bestias, auténticos tipos duros de aporrear el teclado, tendrían este aspecto.

Buenas a todos!
He tenido que ausentarme unos días por temas externos al desarrollo.
Pero he podido leer muchísimo. Habían algunos temas que desconocía como trabajan y que necesitaba, así que he aprovechado para aprenderlos.
He aprendido a usar Sqlite! Básicamente sirve para crear bases de datos locales, lo que es fantástico cuando tu aplicación no sólo tiene que almacenar settings. La manera de crear la base de datos, insertar, modificar y consultar registros tiene una sintaxis prácticamente igual al SQL clásico,  así que todo aquel que tenga nociones, puede empezar a trabajar con sqlite casi directamente.

Tras un par de semanas con mi portal caído a causa del proveedor de dominio que se negó a darme servicio únicamente de dominio (querían que contratara también hosting, unos putos locos),  www.iwokystudios.com vuelve a estar online. Para promocionar los juegos que vaya sacando.

Un buen desarrollador que conozco me recomendó una herramienta para testing de apps en nodejs, llamada Mocha. Aquí os pongo un enlace.

http://mochajs.org/

Soy cero fan del testing, pero necesito que la capa de servicios sea super consistente, así que me he propuesto aprender mocha (la semana que viene probablemente) y cada vez que finalice los servicios de una tipología, pasarles una buena dosis de tests.
Como comenté al principio, en el ordenador tengo una máquina virtual con la misma configuración que el servidor de amazon aws. De hecho empecé con nodejs en esa máquina. Cuando esté todo en producción para no tener que contratar otra micro-instancia los tests los haré en local.

Se suponía que en 60 días acabaría el proyecto, pero como ya comenté en otro posts publiqué en el blog prácticamente a diario, incluyendo muchos días en los que no he trabajado o he trabajado poco.
Soy bastante optimista sobre como está funcionando todo, así que espero tener una primera beta para Android en 2 semanas! Para que los colegas empiecen a ponerla a prueba en busca de grietas o fallos.


lunes, 23 de marzo de 2015

Día 58

Ya he diseñado las maquetas de las secciones de página web de la aplicación.
Inicialmente sólo será informativa, no tengo suficiente tiempo como para añadir la parte dinámica de la web, para gestionar las cuentas de usuario. Lo haré más adelante.
Así que básicamente serán HTML responsive, brutalmente bien diseñados, tanto que duelen los ojos.
Siendo así, los incluiré en la parte estática del servidor nginx, sin mayor complicación.

Ahora os dejo un consejo importante, prestad atención.



domingo, 22 de marzo de 2015

Día 57


Escena de Desafío total (Total recall). Arnold das miedo colega.
En esta película un tío tiene a otro que le sale de la barriga, una especie de alien enano rarísimo que por lo visto es bastante inteligente. De pequeño esa escena me daba entre miedo y curiosidad, una especie de terror que no podía dejar de mirar. Dantesco. De más mayor no podía parar de reír al ver ese monstruo raro.

Tengo un dilema total, a la hora de escoger cual es el mejor método para distribuir mis datos entre diferentes bases de datos mysql. Durante la carrera de ingeniería apenas di temas de clustering y ahora estoy improvisando con mis conocimientos de teoría de conjuntos, matemáticas básicas, chocolates y repostería.



Día 56


Hoy instalaré un módulo a nodejs que reinicia el servidor si se cae por algún fallo, o cuando cierras la sesión del PuTTy mantiene el servidor funcionando. Así que perfect!
El módulo se llama forever. Lo necesito para tener online todo el rato los nodos.

Ya os contaré qué tal funciona!

sábado, 21 de marzo de 2015

Día 55


Willem Dafoe un actor increíble que me despierta sentimientos contradictorios, me encanta como actúa pero joder cuando pone esas caras me acojona vivo.
Me pasa un poco lo mismo con java, me encanta como actúa pero cuando se pone en plan Willem Dafoe...

Empecé con los servicios básicos enviando datos sin gestión de errores. Ahora tengo un sinfín de identificadores de error, para cada situación. Esto crece y crece y crece. 
Todas las respuestas del servidor emplean JSON, en la parte de android parseo las respuestas del servidor con GSON que va realmente bien. En cambio los parámetros de la mayoría de peticiones los envío por POST, para reducir los parseos en el servidor nodejs.
AWS SES para el envío de correos está funcionando genial.

Joder ya es sábado?¿

jueves, 19 de marzo de 2015

Día 54


Cada vez veo más joven a Stan Lee, creo que le pasa como a Benjamin Button, pero con la picardía de un play boy.

Cuanto más programo en android, más noto que los que desarrollaron la parte de user interface del SDK, querían volver locos a los programadores.
Constantemente hay que hacer runOnUiThread, propagar información a través de Bundles, y escribir muchos tricks para evitar news. Casi que la metodología para implementar te pide a gritos hacer news constantemente para los componentes de UI. De hecho algunas listas requieren reinicianizarlas, ya que complican muchísimo la inyección de objetos.
Es un SDK super potente, visualmente muy atractivo y funciona muy bien, pero pienso que es de las cosas menos usables con las que he tenido que pelearme.

Así pues, si ya domináis el tema de diseño de aplicaciones web, responsive design y demás. Y os estáis planteando hacer una app con UI de usuario similar a android. Creo que Phonegap es una más que razonable buena elección.
Yo normalmente me lanzo a la parte más complicada, por aprender un poco, por eso escogí usar el SDK tanto de Android como de IOS. Pero todo se acelera muchísimo más con desarrollos basados en web y realizando la portabilidad a las webviews con Phonegap.

miércoles, 18 de marzo de 2015

Día 53


En proyectos grandes se ha puesto muy de moda las metodologías de desarrollo ágil de software.
No son más que métodos que intentan minimizar los riesgos del desarrollo e intentar acelerarlos. 
En la ingeniería del software tradicional las fases del desarrollo estaban super separadas y seguían un orden establecido. Empezabas por una especificación, en base a esa especificación se realizaba un análisis, diseño y bla bla bla. Se realizaban reuniones super tediosas e inútiles en las que todos acaban pudiendo identificar por el olor, a quien pertenecía cada pedo.

En el desarrollo ágil se da mucho peso al conocimiento de los miembros del equipo, personas más multidisciplinares con mayor autogestión. Se dice que son procesos iterativos, y que en cada iteración que no suelen durar más de 4 semanas, el software debe ser completamente funcional sobre la parte trabajada.
A muchos os sonará Scrum, que es una de las metodologías ágiles más populares. En ella, se realizan varios tipos de reuniones diferentes, todas con objetivos bastante diferentes, y en mi opinión útiles.
Una diaria (Daily Scrum) en la que se contesta a 3 preguntas, qué coño hiciste ayer, qué cojones piensas hacer para mañana y si has tenido algún jodido problema.
Después están las reuniones de cada inicio de lo que ellos llaman Sprint, en la que se planifica qué se debe hacer durante la iteración o Sprint (15 a 30 días) y quien es el guapo/a que hará cada cosa.
Los Sprints Reviews y Retrospective, y también los Scrum de Scrums, y seguro que me dejo más.

Bueno, en resumidas cuentas tenemos tropas de frikis que se pasan todo el fuc**** day reuniéndose, y desarrollando de forma ágil cual cabras montesas.

Yo desarrollando solo, mi metodología de desarrollo ágil consiste en que me subo a la mesa de un salto, rompo los platos o lo que haya y mi mujer me pregunta ¿qué cojones estás haciendo? Y según los desperfectos ocasionados, inicio un Sprint de entre 5 a 10 km.

martes, 17 de marzo de 2015

Día 52


Estoy currando como un loco, si pudiera teclearía hasta con los pies.
Desarrollo un servicio en nodejs, implemento la gestión de las respuestas en android, testeo los casos de error. Despliego la aplicación sobre dos dispositivos, compruebo que las notificaciones desencadenadas por uno le lleguen al otro, apunto los tiempos de retardo para cotejarlos con la versión sin el grueso de los logs. Tacho de la lista y paso al siguiente.

Es como el día de la marmota de Bill Murray!!!



lunes, 16 de marzo de 2015

Día 51



Lo más interesante del desarrollo de hoy ha sido proporcionar a cada cliente nuevo el servidor al que tiene que conectarse. Y si ese servidor no está disponible, ataca a otro servidor.
Lo estoy probando redirigiendo peticiones a diferentes instancias de nodejs que trabajan con distinto puerto. NGINX redirige las peticiones a cada instancia dependiendo de la id del servidor que indico en la url.

var server = app.listen(1002, function(){
console.log('Server listening on port ' + server.address().port);
});

Indicar el puerto en nodejs usando el módulo express, es tan simple como indicar el número en la función listen. En el ejemplo de arriba el servidor escucha el puerto 1002.
Ejecutar distintas instancias en distintos puertos simplemente requiere tener el javascript que funciona como punto de entrada, indicando un puerto diferente. 
Para tests esto está bien, pero lógicamente en producción lo mejor es tener cada instancia del servidor nodejs en máquinas diferentes. Y desde nginx atacar a las diferentes ip's y no a la misma ip con diferente puerto.

Chim pum.

domingo, 15 de marzo de 2015

Día 50

Usar otro teclado y sentir que pasas de 500ppm a 600ppm. Gracias Logitech.


Hace un par de años configuré que google me enviara las noticias relacionadas con Inteligencia Artificial. Desde hace meses no paran de llegarme artículos que repiten el mismo contenido, Stephen Hawking, Elon Musk, Bill Gates, entre otras celebridades ven una amenaza real en el desarrollo de una IA avanzada. Bajo mi humilde opinión, la amenaza real sigue siendo Chuck Norris.

Sobre el tema de una entidad artificial superinteligente. Para algo están los entornos de test no?
O vamos a probar Skynet en producción de primeras?

Estoy de acuerdo en que no es una buena idea enganchar una ametralladora a un roomba.
O que robots industriales ejecuten el behaviour tree de algún soldado del call of duty.
Tampoco es una gran idea eliminar el sistema manual de los paracaidas y confiar en modelos de predicción basados en redes bayesianas para que se abran automáticamente.

No sé, mis Tamagochis no solían durar más de 15 minutos sin que los reseteara.

Ahora Microsoft publica su asistente inteligente "Cortana" para que lo instalemos en nuestros móviles. Quien quiera proporcionarle todos los privilegios del móvil, para que este asistente os entienda. Confiad en que el móvil no se ponga a reproducir vídeos porno en mitad de una reunión, o que gaste todo el ancho de banda en youtube con vídeos de gatos.

Me encantaría que comentarais si estáis a favor o en contra del desarrollo de super inteligencias artificiales.

sábado, 14 de marzo de 2015

Día 49

Ahora ya estoy yendo más a saco.
Inicialmente marqué como límite para desarrollar la app en 60 días, contaba con días trabajados, pero en el blog he sacado posts cada día, incluyendo los días no trabajados.
Menos mal que esto no se lo prometí a Chuck Norris.


Voy a invertir todos mis esfuerzos para poder publicar la app antes de Mayo.

NODEJS
Como ya sabéis los que estáis siguiendo el blog, la parte de servicios la desarrollo en nodejs.
Para los que no conocéis como funciona os explico un poco. A grandes rasgos, esto es cero tutorial.

La parte de servidor se implementa en JavaScript, y toda aplicación desarrollada en nodejs tiene un punto de entrada, un fichero index.js o como queráis llamarlo, chuck_norris.js.
A la aplicación le acompaña un fichero package.json donde especificamos el archivo que será el main y que módulos va a emplear.
Los módulos pueden ser clases, funciones, frameworks previamente desarrollados por compañías u otros usuarios, para facilitar nuestra existencia.

Yo empleo principalmente los siguientes módulos: express, aws-sdk, mysql, gcm, body-parser y morgan.

Mi servidor (aplicación nodejs) se divide en varios archivos javascript:

index.js: es el main, donde se define el puerto del servidor y aunque a veces por volumen suele estar separado, aquí también defino los handlers para cada formato de url. Esto significa las funciones que se ejecutan cuando se realiza una petición a una url específica.
Algo tipo si entras en la dirección "dominio/listado_posts" llama a una función que se conecta a la base de datos y devuelve un listado con los posts en JSON. 
db.js: crea el pool de conexiones mysql y tiene las funciones para insertar, actualizar y consultar la base de datos.
cache.js: realiza las consultas a la cache de redis, es la capa que está por encima de la base de datos.
email.js: emplea el módulo aws-sdk, para enviar emails de creación de cuenta y de recuperación de cuenta a los usuarios.
gcm.js: realiza las notificaciones de tipo push a los dispositivos móviles, empleando Google Cloud Messaging.
api/"servicios de una tipología".js: tengo varios ficheros dentro de la carpeta api, cada uno para gestionar un tipo de dominio de datos de la aplicación. Por ejemplo account.js gestiona la creación de cuentas, actualización, autenticación y eliminación. 
Los servicios simples suelen dividirse en dos funciones un handler y un callback. 
El handler es la función que se llama tal y como el servidor parsea la petición del cliente y detecta que la url dispone de una función para manejar la petición y dar una respuesta.

app.post('/account/0', function (req, res) { 
        api_account.handlerNewAccount(req, res); 
});

Recibe como parámetros los objetos request y response. Request contiene los parámetros enviados por el cliente en la petición y Response es el objeto que empleamos para dar respuesta.

Una función callback dicho llanamente, es una función que pasamos como parámetro a otra función para que sea ejecutada en un momento determinado por ejemplo cuando finalice una llamada a la base de datos, el envío de un correo, una notificación push a un cliente, etc.
El concepto creo que es más fácil mediante un ejemplo.

function insert(callback, req, res){
pool.getConnection(function(err, connection) {
connection.query('INSERT INTO account SET ?', 
                         {email: req.body.email, password :req.body.password}, 
                         function(err, result) {
     callback(err,result,req,res);
     connection.release();
});
});
}

En ejemplo podéis ver una función para insertar un registro en la base de datos, si os fijáis paso como parámetro la función callback y los objetos request y response.
Aquí os pongo más o menos como sería básicamente la función callback que sería llamada al finalizar el insert en la base de datos.

function callbackNewAccount(err, result, req, res){
if(err){
res.json(err.errno);
}else{
res.json(result.insertId);
email.sendWelcomeEmail(req.body.email);
}
}

La función es llamada cuando la base de datos ya ha insertado el registro, y recoge como parámetro el resultado del query a la base de datos.

El handler que desencadena el insert sería algo parecido a esto:

function handlerNewAccount(req, res){
     db.insert(callbackNewAccount, req, res);
}

Hay algunas partes más, pero básicamente la parte de nodejs está estructurada así. 
Existen infinitas configuraciones posibles, cada cual más coherente, loca o absurda. 

En Internet tenéis varios trillones de ejemplos básicos, tipo hello world en nodejs.
Cuando tenga un rato subiré a GitHub mi versión de HelloWorld particular.


viernes, 13 de marzo de 2015

Día 48

He hecho un pequeño KitKat durante el desarrollo, para subir algunos repositorios a GitHub entre ellos mi Game Engine 2D para HTML5 basado en Canvas.
https://github.com/iwokloco
Que lo disfrutéis!

A ver si puedo competir con el Unreal Engine que ha sido liberado recientemente. (¬¬!)
Ayer mostré la mejor sonrisa de Bilbo durante el Señor de los Anillos, hoy quería enseñaros al Bilbo de joven...


Eso decía Gandalf...


Ian McKellen lo está flipando!


Después de esto no será lo mismo leer el Hobbit.

jueves, 12 de marzo de 2015

Día 47

Hoy he estado con la app en Android, gestionando los posibles errores durante el registro de nuevos usuarios. Datos incorrectos, longitud de passwords, emails válidos, problemas en el servidor durante el registro, etc. Cualquier error muestra una mensaje en una ventana de tipo dialog, para ayudar al usuario. Todo está funcionando bien!

Esto merece una sonrisa!!


Dantesco. Como apenas voy a dormir, me planteo dos opciones, seguir implementando algunos servicios de nodejs (super entretenido) o ver un peliculón, Gattaca.
Ya estoy en el sofá, así que...

miércoles, 11 de marzo de 2015

Día 46

Programar como un hindú, desarrollar durante horas, analizar todos los cambios, apoyarte sobre el ratón sin querer, que se pulse la equis y presionar enter sin leer el mensaje.


Mirarte en el espejo y parecer que te has comido a un espartano.

Esta semana parece que esté en un club de lectura de documentación. La gente de apple podría añadir dibujos graciosos para explicar los temas de gestión de memoria.
También podrían regalar camisetas de cuello alto con la compra de sus equipos.

martes, 10 de marzo de 2015

Día 45

Leyendo y leyendo y leyendo.
Hay días en los que el desarrollo se limita al estudio. Hoy es uno de esos días. 
Cuando ya dominas un lenguaje, una metodología, algoritmo o receta culinaria sueles olvidar todo el procedimiento que ha habido detrás, todas esas horas que pasaste estudiando como un loco, peleándote con conceptos ambiguos, los pequeños triunfos por entender ideas que parecían complejas y que finalmente resultaron simples. 

Hoy he estado caminando entre palabras raras. Gracias apple.

Echo a faltar el hecho de que no hayan más películas de matemáticos, ingenieros, ajedrecistas e inventores.
También hecho de menos algo tal que esto:


Este tío inventó un exoesqueleto más peligroso que afeitarse con una motosierra. Lo hizo en una cueva y con el corazón enchufado a una batería.
Por las películas de Ironman, Tony Stark parece tener más conocimientos físicos que Richard Feynman, y estar muy por encima en electrónica, programación y algoritmia que E.T (un lead programmer con aspecto de ñordo galáctico). Bravo.


lunes, 9 de marzo de 2015

Día 44

Los componentes visuales para las interficies de usuario de IOS, tienen muy buena pinta. Mañana empezaré a pelearme con la documentación de apple, hoy he estado creando dialogs en Android, no es complicado pero podrían simplificarlo.
Anteriormente mi contacto con IOS fue más bien un roce, la creación del view básico opengl, y empleé clases C++ directamente.
Espero llevarme una grata sorpresa mañana con la documentación! Una sopresa tan genial como la que se llevó Luke Skywalker!


Si te pones así al ver al ewok, no sé como te pondrás cuando sepas que el tío de cuero es tú madre.

Fue guardado como un hiper secreto la frase que decía Darth Vader después de cortarle la mano a Luke, James Earl Jones, "la voz" de Vader y Mufasa, flipó cuando leyó lo que tenía que decir. De hecho corre el rumor de que antes del pre-estreno únicamente lo sabían 5 personas. Y Chuck Norris.
Aquí os dejo una foto de "la voz".


Sí, habéis flipado eh? no os lo esperabais! ES SOPRANO!!!

domingo, 8 de marzo de 2015

Día 43

Los encargados de la UI del SDK de Android estaría muy bien que ofrecieran paquetes de retrocompatibilidad de efectos visuales para los componentes. Me conformo con un .jar para que mis futuros usuarios que empleen android 4, puedan ver los mismos efectos que los usuarios de la versión 5. (sin usar frameworks o librerías externas al sdk)
Trabajé meses haciendo un game engine en OpenGL ES 1.1, para que los usuarios desde Android 2.2 y aquellos que no tenían gpu, pudieran jugar a mis juegos! Un gran esfuerzo de retrocompatibilidad!

Queréis ver algo increíble? 


Un pésimo faquir.

Alguien sabe donde puedo comprar ese gorro? Es perfecto para romper el hielo en conversaciones de ascensor.

Estaba viendo una conferencia de Larry Page y Sergey Brin, y van los colegas y ponen la canción "asereje" de "Las Ketchup". Ok.
Lo he visto clarísimo, estos dos titanes millonarios que han revolucionado el mundo, en algún momento se reunieron para decidir qué cosas eran relevantes o no para la humanidad, qué era vital añadir en su power point tridimensional y no necesitaron palabras, fue mirarse y dijeron. "Las ketchup".

Bromas a parte es una conferencia fantástica (en el minuto 5 podréis escuchar este hit)

sábado, 7 de marzo de 2015

Día 42

Los sábados apenas trabajo, pero lo poco que he trabajado ha sido fetén!
Dos días sin ninguna incidencia o warning insignificante programando en ninguna plataforma. 
Estoy super enchufado! Me dan ganas de...


Hoy he estado leyendo un tutorial para fabricar un segway casero con arduino!! Impresionante! Deberían enseñar esto en los colegios. Lo mejor de todo es que el tutorial lo plantea como una buena práctica a partir de 12 años. Como los niños y niñas empiecen a hacer segways a esa edad, tenemos Skynet funcionando en 2 años.

Aquí tengo un culo o codo cinematográfico!

viernes, 6 de marzo de 2015

Día 41

El curro de los próximos días es bastante mecánico, ya está todo organizado para que vaya completando. Tengo que implementar los servicios que me faltan, que son muchos, pero los del core están bastante finiquitados. Y en la app tengo que ir gestionando los errores que pueda indicar el servidor en las respuestas. La mayoría de servicios son simples, pero son bastantes cosas que hay que tener bajo control. 

Después de lo alto que dejó el listón Christopher Nolan con sus tres películas de Batman... Teniendo como Bruce Wayne a  Christian Bale y un reparto bestial... Esta es la cara que se me quedó cuando me enteré.


Hoy casi la palma Harrison Ford! Ha tenido que hacer un aterrizaje forzoso con su halcón milenario. Por suerte ha tenido heridas leves pero su nave dudo mucho que vuelva a saltar al hiperespacio.
Su compañero de vuelo ha salido ileso.


jueves, 5 de marzo de 2015

Día 40

El tema del manejo de errores lo resolví momentos después de publicar el post de ayer, adapté lo que quería hacer al sistema basado en callbacks, el pool de conexiones de mysql va bastante mejor de lo que esperaba, de hecho funciona genial.

De pequeño me encantaba la serie de cosmos, era un super fan de Carl Sagan (quizás el mejor cliente de camisetas de cuello alto de todos los tiempos)! 
Este año pasado Neil Degrasse (un astrofísico que parece un cantante de Soul al estilo Barry White) retomó la serie y os la recomiendo es fantástica!
Le han dedicado bastantes memes, el tipo merece la pena!


Estás bien Neil?

En la serie, hay un concepto que nos empequeñece brutalmente, el "calendario cósmico". La idea es extrapolar en un calendario de un solo año, todo el periodo de tiempo desde que el universo invocó el "void main" hasta ahora. Y el último segundo corresponde al inicio de la cultura moderna, desarrollo tecnológico, y filmación de Star Wars.
En esta escala el tiempo que llevo desarrollando esta app, es ridículamente pequeño!


miércoles, 4 de marzo de 2015

Día 39

Hasta ahora he estado insertando, actualizando y consultando datos en mysql desde nodejs. Todo sin problemas, hasta que me he puesto con la tarea del manejo de errores... Hay mucha documentación para casos de manejo simples, si necesitas comportamientos más complejos...
Me ha vuelto loco, ha sido una mañana infernal, finalmente me he levantado de la silla, he mirado hacia la pared del fondo, he corrido como si me fuera la vida y he atravesado la pared.

El error que lanza el módulo de mysql, desaparece de la realidad, cruza el umbral del universo visible, creo que es un tema de materia oscura.


Javascript pasa los objetos por referencia, el concepto es muy similar a estar trabajando constantemente con punteros, te asigno la dirección donde está el valor, no te asigno el valor. Si alguien se carga el valor de la variable referenciada, lógicamente todas las variables que estaban mirando allí al ser consultadas, te dicen "no has entendido matrix".


Quería un control más bestia sobre el manejo de excepciones y errores. Sobretodo es vital para la versión beta, ver todo lo que está pasado, y sobretodo porqué.
Mañana lo tendré listo y sino me comeré una tableta entera de chocolate.

martes, 3 de marzo de 2015

Día 38

La app tiene varias partes editables, android propone varios diseños de action bar, la barra de edición inferior me parece una buena idea, es la que he estado implementando, combinado con las listas, creo que estoy consiguiendo una interfaz bastante intuitiva.


Disculpad.
Bruce Lee qué te pasa tío?

He añadido en el blog el gadget de encuestas, para probarlo he puesto una pregunta bastante complicada de responder en el lateral, De 400 y pico visitas desde el domingo, sólo 2 han respondido!! joajoajoa
Un éxito bestial!

No lo veo claro, tengo dudas como cuando Luke Skywalker entrenaba con Yoda.


Quizás retire el gadget, haré una encuesta para ver si debo dejar de hacer encuestas!

Tras varias semanas jugueteando con twitter y mis gags visuales los números son los siguientes, según los temas la tasa de interacción aumenta o disminuye:
- Mujeres: 7.4%
- Monos: 3%
- Gatos: 4%
- David Hasselhoff: 2.4%
- Batman y Robin : 6.9%

Entre muchos otros. Teniendo en cuenta que más o menos se publicaron a la misma hora... la gente interacciona mucho más con tweets en los que salen mujeres, o ¿BATMAN Y ROBIN?!!!!!!

Con tweets más normales, la interacción fluctúa bastante pero no suele llegar al 3%.

Aquí están los Steve's revolucionando el mundo en 1976! Quien diría 30 años después que la calle se llenaría de gente con su aspecto, hipsters con barbas tipo friki de los 70, y que estos nuevos consumidores empedernidos consumirían los productos de apple como si fueran golosinas!


En serio 99$/año publicar para IOS?

lunes, 2 de marzo de 2015

Día 37

Pulsar un botón en el móvil, ver en la consola del servidor que ha llegado una petición, consultar la consola de mysql y ver que se ha insertado con éxito, descubrir que en la caché también están los datos, mirar el móvil y que haya llegado la respuesta que esperaba. Una jornada brutal.

En serio no podían usar dos cuerdas para subir?


Me quedan 23 días, como no consiga dos clones, uno para currar y otro para hacer cafés, creo que voy a tardar un mes más de lo esperado. De todas formas sigo a tope, lo que no voy a hacer es bajar la calidad de la app por ir rápido. La app es para ayudar a la gente! A ver si acabo en 23 días o tardo un poquillo más...

Espero que Jean Claude Van Damme no me retrase. Este auténtico maestro de repartir ostias con la palma abierta ha sacado un vídeo en youtube, para que la gente cree composiciones con él. Van Damme quiere ser super viral. Después de ver como dice NO en el vídeo, creo que le debo un montaje.


Todas las mañanas dedico unos minutos a analizar lo que llevo hecho, antes de ponerme manos a la obra, ver posibles grietas, y pensar en posibles mejoras futuras. 
Soy fan de las técnicas para estimular el pensamiento lateral, como estos dos genios!


domingo, 1 de marzo de 2015

Día 36

Normalmente para gestionar la base de datos, suelo trabajar con Toad si es con Oracle o con mi favorito MySQL Workbench, pero estoy bastante holgazán, así que no he abierto los puertos de MySQL en el servidor, lo que significa que estoy trabajando directamente en la consola de mysql a través del PuTTy.
Subo por FileZilla los .sql complejos que quiero ejecutar y los cargo, creo que mañana por la mañana abriré los puertos, no puedo seguir así, parezco un prehistórico.

Hablando de tipos prehistóricos, por lo visto ya tienen el guión de Jungla de cristal 6 (Die Hard 6), se rumorea que el villano puede ser Arnold, y que volverá Samuel L. Jackson, espero que no la caguen como con la 5...


Los de blogger podrían añadir más opciones en el editor, tipo drag&drop, como componentes dinámicos, sliders, calendarios, barras de progresión, y eventos simples.

Vi un documental hace poco sobre Google, comentaban que en sus oficinas no emplean papel, tienen por todos lados pizarras de estas blancas con rotuladores, y que los developers se pasan el día haciendo fotos a estas pizarras y compartiéndolas vía chat o mail.
¿dejarlo todo para abrir una tienda de rotuladores en Silicon Valley?

Escribir en la libreta una función compleja, poner hasta los comentarios, teclearlo literalmente, que funcione y sentirte como Chev Chelios.


Ojo con el chino de puño en alto celebrándolo, ¿Hikaru Sulu de Star Trek?