Aprende TDD con Java en 18 minutos

En esta ocasión os traigo un vídeo de 18 minutos, tiempo en el que os muestro el flujo de trabajo TDD (Test Driven Development), ocuparemos Java y el framework para el desarrollo de pruebas unitarias JUnit, todo ello en el cómodo entorno de desarrollo integrado eclipse, aunque servirá para cualquier otro IDE.

Anuncios

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ú.