Prueba mi nuevo juego para Android

Hoy tengo el placer de traeros Trouble In The Forest, um juego para Android que he estado desarrollando este fin de semana, desde la música a los gráficos. A lo largo de esta semana he estado puliendo algunos bugs y preparando el APK para su puesta en producción.

El juego hace uso de la API de Google Play Services, para la implementación de las funciones en la nube.

Espero que os guste y lo disfrutéis, el código fuente esta en mi github y podéis descargar el juego aquí:

Enlace a Google Play

Mi nueva app : Extreme Drum Pads

Pues parece que Julio del 2016 va a ser para mí el mes de producción, y es que en lo que va de mes he lanzado dos aplicaciones móviles. Así que os la presento por aquí:

PUBLI

Extreme Drum Pads es una app de creación musical con selección de paquetes de sonidos, pads percusivos al estilo Akai MPC y un secuenciador de audio por pasos.

DESCARGA GRATUITA:

PODÉIS DESCARGARLA PINCHANDO AQUI

Los desarrolladores que esteis interesados en alguno de los algoritmos utilizados en la aplicación no dudéis en contactarme, obviamente no voy a publicar todo el código de una aplicación en estado de producción (ya que alguno podría tener mala intención).

Y si la descargáis, valoráis o compartís la app pues me echáis un cable para el empujoncito de salida que necesita.

Hoy hablamos de Tifon

tifon_icon-web

Hoy y después de mucho tiempo sin postear, os vengo a hablar sobre tifon, un divertido foto quiz a contra reloj que hoy he subido a Google Play y puesto en producción después de bastantes horas de desarrollo.

Podéis descargarla y probarla aquí:  Descargar tifon.

Pero esto es un blog de desarrollo, así que no os preocupéis que esto no va a ser un post de publicidad ni una review, mas bien me gustaría hablar sobre ese pequeño pero importante proceso que hay desde que “terminamos” una aplicación y la ponemos en producción, ya que verdaderamente aquí es donde empieza el autentico reto, y no me refiero a la infernal adquisición de usuarios, si no mas bien a las opiniones de usuarios, los crashes de la app que puedan ir surgiendo en los distintos dispositivos que en el nuestro o los nuestros no ocurrían.

La verdad es que hay mucho trabajo por delante desde que uno empieza a desarrollar una app de verdad para android, y se tiene que lidiar con problemas por el camino con los que n se contaba, yo en mi caso con esta app he tenido muchos quebraderos de cabeza con respecto al rendimiento, optimización del manejo y las descargas de las cientas de imágenes, los terribles crashing provocados por pequeñas fugas de memoria al trabajar con bitmaps y sobre todo para estructurar la gran arquitectura de clases que consiguen que la aplicación sea escalable, mantenible y eficiente.

A todos los problemas anteriores una vez nos acercamos a producción nos topamos con las traducciones y en mi caso el tema del diseño completamente responsive que exige una app de este tipo, y por ultimo y para no demorarme mucho mas, nos queda todo el trabajo que conlleva lograr que todo esto acabe siendo una aplicación que tenga buena pinta a ojos de un usuario, que atraiga en la store de google play, y que habiendo logrado todo lo anterior los usuarios puedan dar una buena puntuación a nuestra app y no se arrepientan de haber descargado algo completamente inútil, poco profesional, lleno de publicidad asfixiante o con mas bugs que funciones por malas practicas o desconocimiento del desarrollador.

Comenta que te parece a ti que debe llevarse a cabo, tener en cuenta y como realizas tu este proceso de llevar una app a producción.

 

El programador autodidacta: la resistencia rebelde

 

STAR_WARS_FORCE_AWAKENS_sci_fi_futuristic_action_adventure_1star_wars_force_awakens_disney_warrior_1920x1080

Hoy por ser domingo, me he decidido a hablar de un tema bastante delicado, pero a diferencia de otras veces, mas que esto sea un simple articulo, me gustaría que sea un debate en el que vosotros también participaseis.

En mi caso…

Yo al igual que muchos, soy completamente autodidacta, lo que quiere decir a su vez que no he hecho la universidad. Pero también desde que tenía unos 14 años me ha encantado todo este tema, y siempre con pasión, esfuerzo y mucha paciencia he estado investigando, haciendo cosas por mi cuenta, leyendo, estudiando muchísimo etc.

El esfuerzo de ser autodidacta

¿Es ser autodidacta sinónimo de no estudiar , saltarse esa parte, e ir directamente a hacer lo que nos gusta?, definitivamente NO, es más, me atrevería a decir que nos toca estudiar incluso más, a lo mejor no estudiamos exactamente  lo mismo que un estudiante de la carrera de ingeniería del software, y posiblemente si que evitemos algunos temas de ésta que podrían ser o parecernos más o menos relevantes, según el caso. Pero si que te va a tocar estudiar por ejemplo estructuras de datos, temas de redes, funcionamiento de servidores y protocolos, bases de datos, algoritmos, código eficiente, mucho clean code, diagramas UML, multitud de lenguajes de programación, posiblemente algo de álgebra lineal y mates, y un larguísimo etc.

A todo esto hay que sumar dos grandes enemigos, el tiempo y la voluntad o las ganas de ser capaz de empezar a hacer todo esto mientras vas además trabajando para ir viviendo: exprimir el buscador de google, devorar libros sin cesar,tragarte muchísimas ponencias grabadas de la universidad, asi como cientos de conferencias o podcast , hacer mil cursos de todo,ir haciendo practicas de todos los colores, proyectillos propios, en fin el pan de cada día de un desarrollador autodidacta al 100%. Además todo esto cuesta dinero, si no en materiales como libros y cursos, en tiempo, hay días que yo en mi caso particular, cuando hecho las cuentas de las horas que llevo estudiando, investigando, resolviendo dudas las cuales no puedes preguntarle a un profesor etc, me doy cuenta que he pasado de las 16 horas, y lo peor es que esto no pasa pocas veces.

Las desventajas de mantenerse en la resistencia

Pues la primera que se me ocurre es la de buscar trabajo como programador en una empresa (hablo sobre todo en España que es donde resido), en portales de búsqueda de trabajo por ejemplo, lo primero que vas a ver es que te piden (a parte de que seas un action man, especializado en todo por supuesto), algún tipo de documento expedido por una universidad que afirme que tu has adquirido en ella tus conocimientos de action man y que garantizan que eres apto para ser contratado, o lo que es lo mismo, el titulo universitario de toda la vida. Aún así, todavia te quedan posibilidades para demostrar que tu también eres capaz de hacer algo, aunque no lleves un titulo colgado que lo acredite, pero ya es cosa de cada uno averiguarselas para hacerlo posible.

Pero técnicamente hablando…

A parte de todo esto hay otros dos puntos a tratar aquí, el primero sería las carencia que puedes tener como autodidacta que no ha hecho la universidad, que por supuesto las hay, ya que aunque muchas cosas en el sistema universitario en este contexto del desarrollo estén algo anticuadas, por supuesto que te va a dar una base muy necesaria, solida y amplia. Por ejemplo imagínate que se te va la pinza y te da por desarrollar un nuevo algoritmo de compresión, seguro que te va a costar mucho más que a una persona que sí la tenga la universidad hecha, o por ejemplo en el tema de entendimiento de gestión de proyectos, arquitectura, álgebra , derivadas etc.

Hay casos y casos, pero el segundo punto a tratar sería que obviamente hay que valorar lo que a la persona le gusta esto, la pasión, ganas y fuerza de voluntad que le pone al asunto. Ya que si has decidido ser programador, tomando la ruta que sea, y por los motivos/circunstancias que sean, toda carencia de conocimiento es suplible con la herramienta que todos hoy en día tenemos, internet y el bueno de google, pero sobre todo sin parar de estudiar.

De igual forma, no solo es así para el autodidacta, el universitario a día de hoy y en el panorama actual del desarrollo, también sale de la universidad sin saber programar (a no ser que por el camino se lo haya estado currando), sale con una gran base para comenzar eso desde luego, pero le toca ponerse a seguir estudiando al más puro estilo autodidacta, así que no somos tan diferentes al fin y al cabo.

Los problemas comunes

Pues llegados a este punto, también sería bueno comentar lo problemas comunes entre ambos perfiles, el egresado y el autodidacta.

Para mí no hay uno mejor que el otro, simplemente los harían mejores atributos como profesionales, tales como la resolución de problemas,  capacidad de buscar la ayuda adecuada en internet para tal o cual caso, el nivel de ingles con el que se maneje, la capacidad de aprender de los demás y trabajar en equipo, la humildad como profesional, en fin… para mí son muchos los factores que jugarían a la hora de juzgar a un mejor o peor profesional.

Así que todos creemos que deberíamos merecer tener oportunidades, ya que al igual que un egresado de la universidad, se ha tenido que pegar sus horas estudiando, el autodidacta habrá hecho lo mismo, y del mismo modo cada uno se ha gastado un buen dinero en su educación, aunque cada uno lo haya hecho de forma distinta.

Conclusión

En mi mas humilde opinión me gustaría decir que, yo creo que una solución es que se empiece a mirar mas a la profesionalidad de la persona que a los títulos de esta, ya que de igual manera que hay grandes profesionales de ambos lados,  los hay también malos en ambas partes. Ya que un título no siempre es una garantía. Obviamente estamos hablando de según que empresas, que a ninguno de la resistencia autodidacta se le ocurra irse a buscar curro al banco o a la administración publica,aunque si alguien le hecha valor y lo hace que venga luego y nos cuente el resultado jaja.

Ya hablando en serio y bromas a parte, si que es verdad que en muchos países y empresas la cosa esta empezando a cambiar en este sentido, pero siento que a nuestro país aun le queda mucho para madurar al respecto.

Respecto al debate..

Ya sabéis, como dije antes seria bueno que con opinión propia y respeto hacia las demás opiniones, entre todos pudiésemos debatir sobre esto, ya sea aquí o por alguna de las redes sociales por las que comparto las entradas del blog, aunque parece que en el grupo de Programadores de Google+ es donde mas participación hay con estas estas entradas.

¡Hasta pronto!

 

 

 

Javascript en el backend: texto al estilo Hacker

texto-hacker

Hoy viendo la serie de Scorpion, he visto las típicas letras al estilo hacker que aparecen de forma secuencial en una consola , y directamente he caído en la cuenta de que nunca había hecho algo por el estilo, así que sin mas preámbulo se me ha ocurrido ponerme manos a la obra, y he decidido hacer esto orientado al backend, usando NodeJS y Javascript.

Me ha llevado unos 40 minutos entre pensar el algoritmo para conseguir esto, escribirlo y escoger las funciones adecuadas para ello, pero al final el resultado a sido un programa que al ser ejecutado es capaz de tomar un archivo de texto del servidor, leer su contenido, e ir escribiéndolo en la consola de forma automática y secuencial con ese autentico estilo hacker que tanto nos gusta en las películas del tema.

código

Como se puede observar que el código utiliza tanto concurrencia, para ir escribiendo las letras de forma asíncrona, como la variante síncrona de la función readFile de NodeJS, y que al ser la versión síncrona del metodo capturamos su posible excepción en un bloque Try-Catch. La función setInterval a diferencia de la anterior si que es asíncrona, y nos serviremos de ello para ir escribiendo las letras, espacios o saltos de linea de forma secuencial , cada vez que pasen 200 milisegúndos su callback será ejecutado escribiendo un nuevo caracter .

Solo queda crear un archivo de texto llamado “archivoDeTexto.txt” y colocarlo en el mismo directorio que el script, rellenarlo con algún texto que queramos (yo he pegado el código del programa dentro del archivo y que brutal), y ejecutar el script desde la consola de comándos mediante “node nombreDelScript.js”. Una vez andando alucinaréis con el resultado, al menos yo lo he hecho.

Además os dejo aquí el link para que lo descarguéis en mi cuenta de GitHub, solo tendríais que ejecutar el archivo escribiendo: “node hacker_console.js”, debeís tener instalado NodeJS para que funcione obviamente.

Descargar proyecto en GitHub

Lo increíble de esto es ver como Node nos permite hacer cosas tan chulas con tan solo unas pocas lineas de código. Pero que os parece si lo hacéis en otro lenguaje o tecnología y compartís con los demás que sois capaces de hacer.

 

Tabulaciones o espacios: la eterna batalla

6EFGK9V

En el nuevo capitulo de la serie Silicon Valley, sacan el tema de la diferencia entre usar tabulaciones o espacios, y es que este es un tema que se ha discutido siempre mucho entre desarrolladores. He sacado una captura de pantalla de sublime text 3 en el que podéis ver  mas claramente de que estoy hablando.

Captura

En el código podemos ver que mientras una tabulación ocupa un solo caracter, el equivalente en espacios utiliza cuatro en su lugar.

Por lo tanto si nos ponemos en plan técnico sabiendo que un caracter ocupa un Byte (8 Bits),  que es lo que ocuparía una tabulación, el tamaño en bits del mismo espaciado creado a base de espacios sería el resultado de multiplicarlo por 4, lo que serían 4 Bytes y por lo tanto 32 Bits, o lo que es lo mismo, que usando espacios ocuparía  3 veces mas.

Conclusión…

Tecnicismos a parte, ¿creéis que que a día de hoy esto importa? con procesadores multinucleo y un montón de ram, no se yo si a día de hoy este tema importa tanto como hace muchos años cuando la ram era tan escasa que habia que escatimar a más no poder.

Yo soy de los que utilizan tabulaciones, si te parece comenta que te parece esto a ti, que sabes sobre esto, ya que hay muchas opiniones y argumentos distintos sobre el tema (unos dicen que una vez pasado por el compilador ya no importa, otros que hay incompatibilidades a bajo nivel cuando se usan ambos, en fin..), y ya de paso nos cuentas de que lado estas tú.

 

 

La recompensa de programar para Arduino

 

Captura

Hoy me gustaría hablar de un tema muy interesante, y es ni nada mas y nada menos que de el desarrollo con Arduino, y por que es para mí algo tan gratificante desarrollar proyectos con estas pequeñas placas.

¿QUE ES ARDUINO?

Para el que no lo conozca son pequeñas placas de robotica con las que teniendo unos pocos conocimientos de electrónica puedes programarlas para hacer cualquier cosa rara que se te ocurra, como por ejemplo las modernas impresoras 3d domesticas están basadas en un Arduino.

Se programa en un lenguaje basado en C++ así que los que programáis en Java por ejemplo no tendréis muchos problemas para empezar a hacer cosas sencillitas, aunque obviamente si os metéis en profundidad con el ya la cosa se complica más, además tiene su propio IDE muy sencillo de usar y hay por ahí muchos ejemplos y librerías.

SOBRE LA TANGIBILIDAD

Por que digo en el titulo del post eso de la recompensa…, pues bien, como programadores estamos acostumbrados a hacerlo todo para que funcione dentro de un ordenador, bueno vale últimamente ya podemos hacerlo para móviles y nos acercamos un poquito mas a lo tangible. Pero cuando desarrollas algo para una de estas placas y ves como enciendes y apagas leds con un ciclo for, o ves un pequeño robot que tu has creado y programado por el suelo de la cocina de casa, uff, esa sensación tiene pocas formas de explicarse mas que diciendo que es impresionante.

Los que seguís el blog sabréis que también tengo una pequeña debilidad por los videojuegos, hace ya varios años, me hacia mis pequeños prototipos de juegos y mis demos para una pequeña y desconocida consola portátil, la gp32 blu, una pequeña portátil específicamente creada para el homebrew, recuerdo que se programaba en Fenix, con una sintaxis que era una especie de mezcla entre Pascal y C. Recuerdo esa sensación de jugar a un juego que yo había construido y tenerlo en una pantalla en mis manos, y diréis claro, eso ya lo hago yo hoy con Android por ejemplo, pero cuando aquello eso no existía jeje.

ALGO QUE YO HAYA HECHO

Bueno sin desviarme más del tema ni ponerme nostálgico, me gustaría mostraros uno de mis pequeños proyectos con Arduino, se trata de un joystick arcade, que de verdad para el que lo aprecie, es una flipada poder volver a jugar de nuevo con uno de estos, desde luego de de open source y tenéis el código en mi GitHub, y lo mejor de todo, un programador con muuuchos años de experiencia, retoco el código del firmware que yo desarrollé de tal manera que aunque quedo poco casi inentendible y muy a bajo nivel, ha logrado reducir la latencia de respuesta de los botones a completamente CERO, por lo que la respuesta del mando ahora es brutal.

AQUÍ OS DEJO UN VÍDEO QUE HICE CON LA VERSIÓN ANTIGUA DEL FIRMWARE

Enlace al proyecto en mi GitHub

Esto es solo una de las muchas cosas que podéis hacer con estas pequeñas maravillas, y que ademas son muy económicas, por ahí he visto hasta drones hechos con ellas, o hasta alguno que ha hecho correr NodeJS dentro de una.

ALGO MÁS, PERO ESTA VEZ CON LEDS PROGRAMABLES MEDIANTE UN POTENCIOMETRO

Enlace al código fuente en mi GitHub

 

Recomendación de libro Javascript 2016

9788441537460

En este caso vuelvo a traeros otra recomendación de otro magnifico libre, de nuevo de Anaya, y ya de paso me gustaría aclarar que yo no tengo nada que ver con esta editorial, simplemente amo sus libros, ya que son muy útiles, directos y encima están en español.

Una vez dicho lo anterior, vamos al lío, hay mucho de bueno en este libro, yo ya habia programado, y mucho en Javascript, desde juegos en 3D con Unity mezclando scripts de Javascript y C#, aunque he de confesar que me decantaba por el lenguaje de microsoft para esto, hasta muchas cosillas con NodeJS, Angular etc.

La actualidad de Javascript

Y es que para empezar, mejor decir que Javascript es uno de esos lenguajes que utilizas y haces grandes cosas con el, antes de aprenderlo, si eso he dicho, al contrario de lenguajes tipados como por ejemplo Java que si no lo estudias y comprendes en profundidad no pasas de un Hello World, es un lenguaje que te permite ir aprendiendo sobre la marcha mientras lo vas usando. Pero ha llegado el punto en que ha cogido una “madurez” y tiene ya tantos frameworks y cosas para él, que para mí se hace ya inevitable estudiarlo mas profundamente, antes había hecho un par de cursos de Javascript y algunos frameworks, pero donde se ponga un libro…

Mi visión del libro

Ahora sí, vamos con el veredicto, como dije antes hay mucho de bueno entre las páginas de este gran libro, empieza desde completamente cero, cosa que agradecerán muchos, y poco a poco se va poniendo mas avanzado, respetando en todo momento que el lector haya comprendido los términos y las cosas que se van mostrando a través de los capítulos antes de ir metiendo cosas a lo loco como a veces pasa, que el lector acaba hecho un lío. Poco a poco muestra el tema de los tipos de datos, estructuras de control, bucles, incluso hay una sección super interesante en la que explica el funcionamiento del sistema binario. A parte de esto también mete algunas cosas de los navegadores, html y acaba con un apartado dedicado exclusivamente a ejercicios para practicar todo lo aprendido anteriormente a través de los capítulos anteriores.

Que he echado en falta y sí que buscaba en este libro

Pues sinceramente esperaba encontrar mas contenido sobre Ecma Script 6, o Javascript 2015 como lo conocen algunos, y es que el libro habla algo sobre esto, como por ejemplo las constantes, que ahora se pueden escribir como : “const”, y en el apartado de historia del lenguaje habla un poco sobre las versiones. Pero temas como la declaración de las nuevas variables locales “let” o cosas como “promises”, quedan fuera del alcance de este libro. Pero como ya sabréis no todo puede ser perfecto, y para suplir esto, probablemente escriba una entrada sobre estas nuevas funcionalidades disponibles en ES6 aquí en el blog, así que estad atentos.

De todos modos es un libro que sin duda os hará mejores profesionales y es una buena inversión garantizada.

Donde encontrarlo

Como siempre podéis conseguir este libro en Amazon y a un precio muy razonable.

 

La importancia de aprender

ale2.jpg

A causa de lo liado que estoy últimamente, con la escritura de un libro, desarrollando un juego para Android ,leyendo libros y haciendo cursos para adentrarme en nuevas tecnologías, el blog está teniendo menos entradas de lo normal, aún así en medio de todo esto me parece la ocasión ideal para hablar sobre este tema.

Por que los desarrolladores tenemos que estar en continuo “desarrollo”

Valga la redundancia, pero es que es completamente así, como si de un buen framework de código abierto y en continuo desarrollo se tratara, así tenemos que estar nosotros, continuamente renovándonos, y desarrollándonos como profesionales pero sobre todo sin ningún miedo a nuevas tecnologías.

Como esta la cosa…

Últimamente hay un gran “revuelo” de cambios en las tecnologías que solemos utilizar, el desarrollo en Android avanza sin cesar, el magnifico Firebase intentando hacer de backend definitivo para muchos desarrolladores (sobre todo móviles), los frameworks de Javascript cambiando continuamente, lo que funcionaba hace algunos meses posiblemente ya no y hay que actualizarlo a los nuevos métodos.

Con todo esto veo también que en el desarrollo parece que vamos cada día mas hacia la pereza y la comodidad, por ejemplo con Angular, que ya nos regala incluso AJAX, por mencionar algo, o como dije antes con Firebase que es que ya te provee hasta de un completo backend para tu aplicación (antes estuvo Parse, pero vamos a lo que vamos).

Y es que con toda esta “marea” lo mas fácil que puede pasarnos es caer en la desactualización, para mí, uno de los peores enemigos del desarrollador, yo creo que es el mejor momento para esforzarse y comenzar a devorar libros, cursos, tutoriales, y probar nuevas tecnologías, ya que de este modo lo que haremos será aprovechar todas estas comodidades que se nos están ofreciendo.

Como creo que no hay que reaccionar

Últimamente hablando con algún desarrollador sobre todo esto he llegado a ver que mucha gente tiene miedo de ponerse a estudiar e invertir tiempo en nuevos frameworks o lenguajes por el tema de que solo sean una moda pasajera, y nada mas lejos de la realidad, pero como muchos ya sabemos en esto el que llega primero gana, y lo que tenemos que hacer muchas veces pues es justamente eso, estar a la moda, y desgraciadamente eso requiere el continuo esfuerzo del estudio.

Hasta tal punto es esto que he llegado a oír algo como “no voy a salirme de java ya que eso siempre va a estar ahí, y lo otro simplemente son modas que pasan“, y que seguridad que aporta esto, pero desgraciadamente hoy la cosa no funciona así, durante años ha habido el típico perfil del tío que programa en Css, Html, algo de Javascript, y Php para el lado del servidor, y desde luego Sql para la base de datos, y desde luego no voy a ser yo quien diga que esto no es efectivo, ya que desde luego lo es, (obviamente ya estaríamos hablando de Html5 y Css3), pero a día de hoy tenemos muchas mas opciones hablando de desarrollo web por ejemplo, tenemos el stack MEAN (MongoDB-Express-Angular-NodeJS), o incluso variantes mas completas que he visto por ahí que la verdad hacen maravillas con ellas.

Aclarando la cosa un poco

NO quiero decir en ningún momento que tal o cual tecnología sea mejor que otra, de ninguna manera, simplemente doy mi punto de vista sobre el tema, el panorama actual y el por que yo creo que ahora menos que nunca debemos dejar de estudiar nuevas cosas y mantenernos en la zona de confort con lo que ya sabemos y dominamos, tampoco me meto en ningún momento con la especialización, y aunque es bueno saber también un poco de aquí y de allí, si que a día de hoy es necesario especializarse, pero si nos damos cuenta aunque nos especialicemos por ejemplo en Android, vamos a tener que acabar en algun momento desarrollando un Api Rest para consumirlo desde alguna app, un backend por ejemplo, pues ya estaríamos necesitando utilizar unas cuantas tecnologías para ello, y ya que lo hacemos, por que no hacerlo estando a la última.

Como formarnos

Pues bien, aunque últimamente esta muy de moda y yo diría ya que se ha”impuesto”, el tema de la educación online, con plataformas que todos conocemos, yo siempre recomendaré que se lean libros, ¿por que? pues por que en este tipo de cursos digamos que se enseña lo esencial, muchas cosas, pero no se llega a profundizar como lo harás con un buen libro, y buscar un buen libro de una nueva tecnología es sinónimo de libro en ingles,  yo tengo la suerte que no me molesta leer un libro en ingles la verdad, pero se que si hay gente a la que le cuesta, pero la cosa es así, por que si esperamos a que alguien de habla hispana, lea esos libros, los entienda y digiera, y al final acabe por decidirse a escribir un libro, posiblemente llegues tarde, así que a darle bien fuerte al ingles.