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!

 

 

 

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.

 

Google vence a Oracle en los tribunales

oracle_google

Todos sabéis que no suelo escribir sobre cosas que no tengan relación directa con la programación o el desarrollo de software, y aunque lo parezca este tampoco va a ser el caso, aunque esta entrada es a modo de noticia, mas adelante veréis su relación directa con el desarrollo.

Hoy me he levantado con una muy buena noticia, yo y seguro que también muchos otros Android Developers, y es que a parecer tras dos intensas semanas de juicio, Google y su magnifico producto Android (el cual ya os habréis dado cuenta que viene de la mano con este blog), han acabado por resultar inocentes antes las acusaciones de Oracle por haber utilizado “ilegalmente” 37 Apis de Java y reclamando a Google la friolera cantidad de 9.300 millones de dolares, dictando el jurado que Android no infringe ningún derecho de autor propiedad de la empresa Oracle.

Así que los que estamos a favor del desarrollo de software libre estamos hoy de enhorabuena, ya que es un pasito adelante que se ha dado en contra del lo que llamamos software privativo, esto no quiere decir que estemos, ni mucho menos cerca de un mundo en el que predomine el software libre.

¿En que nos hubiese afectado esto a los desarrolladores?

Pues bien, si no me equivoco o estoy mal informado, Google a causa del apretón de cuello por parte de Oracle llego a la conclusión de tener que usar Open JDK para las futuras versiones del sistema operativo. Lo que seguramente nos acabaría complicando, y bien, la vida por un lado a los desarrolladores, y también seguramente pondría patas arriba la lucha por la compatibilidad contra el mayor problema de Android, la fragmentación.

 

 

 

 

Libro Patrones de diseño en Java

10675646_835459986485488_1379608178837703410_n.png

Recomendación del Libro Patrones de diseño en Java

Pues hoy os quería traer una recomendación de una joya de libro que llevo leyendo algún tiempo, y sí, he dicho tiempo, ya que este libro no es un libro para leerse y aprenderlo o memorizarlo, posiblemente alguna que otra cosa, pero no todo desde luego.

Se trata de un libro largo y pesado de leer si vas a “iterarlo”, pero no se trata de eso, simplemente se trata de repasarlo un poco e intentar de entender los conceptos de algunos de los útiles patrones de diseño de software que contiene. Y una vez hecho esto, tiene un indice dividido en las tres categorías de patrones de diseño que ya vimos anteriormente, lo que es muy útil, ya que viéndonos en la situación de necesitar uno de ellos para afrontar el diseño de la arquitectura de un nuevo software, un nuevo modulo o incluso al aplicar refactoring, solo tendremos que buscar en la categoría que mas nos convenga en ese caso.

Dicho lo anterior no nos queda mas remedio que darnos cuenta de que estamos ante una poderosa herramienta con la que lidiar con nuestros problemas sel día a día como desarrolladores de software.

Recomendación: libro Android 2016

9788441536807

Desarrollo de aplicaciones para Android 2016

Hoy me gustaría recomendaros un libro muy bueno que compré en Amazon a finales del año pasado, un libro muy completo, bien explicado, y que te invitara a conocer el corazón del sistema operativo móvil  de moda. Además esta actualizado y muy enfocado a la versión 5.0 lollipop en adelante,  incluye contenido sobre wearables y material design.

Sin duda un pedazo de libro que merece ser tenido en cuenta, con él se logra comprender el funcionamiento de cosas que no se suelen tener en cuenta al aprender a desarrollar para Android, como por ejemplo puede ser la herramienta de automatización de tareas Gradle.

El autor es Joan Rivas Lequerica y  la editorial Anaya multimedia,  la cual tiene unos libros de programación que no tienen desperdicio (que por cierto son mis favoritos, esto podréis comprobarlo a lo largo del tiempo en esta sección del blog).

Próximamente recomendaré mas libros útiles en esta sección, así que permaneced atentos..

Arquitectura del Software: patrones de diseño

patrones.png

Patrones de diseño: que son y para que sirven

¿Que son?

según la wikipedia:

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.

Bien, dicho esto, podemos deducir que un patrón de diseño sera un cierto tipo de patron a seguir el cual nos servirá como la base a la solución de un problema, y que bien nos vendrá, pues ciertamente es a lo que nos dedicamos en el día a día, a resolver problemas.

En muchas ocasiones habrás oído la expresión “reinventar la rueda”, pues bien en este caso, no puede venir mas a cuenta, y es que cuando planteamos el diseño de la arquitectura de un software, a veces encontramos problemas de estructuración muy comunes, y si alguien ya encontró la solución, y ademas esta probadisimo que funcionó a lo largo del tiempo y vida del software y para colmo podemos acceder a la información de como implementarla en nuestro caso, pues seria contraproducente no aprovecharla. Ademas de esto nos servirá para “entendernos” con otros programadores al poder usar un lenguaje común a referirnos a ciertas estructuras entre clases.

Mas ventajas…

Además, seguir estos patrones al estructurar un software, nos va a garantizar, la estabilidad del software a nivel de estructuración, escabilidad y sobre todo mantenibilidad a lo largo de la vida del mismo. Lo que por ejemplo en el caso de una empresa ahorrará a la larga grandes cantidades de dinero y tiempo.

¡¡Mas detalles por favor!!

Principalmente los patrones de diseño se dividen en tres categorías y nos ayudaremos de ellas a la hora de seleccionar el que mas nos convenga en nuestro caso partiendo de saber que es lo que queremos hacer:

  • Patrones creacionales (diseñados para facilitar la creación de objetos):
  • Patrones de estructuración (nos facilitaran la estructuración entre clases)
  • Patrones de comportamiento (para estructuración de datos y los objetos, y distribuir el procesamiento y los algoritmos entre sí )

¿Y como seleccionamos e implementamos uno de ellos?

Pues bien llegado el caso, lo primero que deberíamos hacer seria, intentar investigarlos un poco e intentar comprender como funcionan, hay muchos libros e información sobre el tema, que ya os recomendare algun libro que yo tengo en otra sección.

  • Paso 1: primero decidir si realmente nuestro software necesitaría seguir un patrón o no, y es que si va a ser algo muy sencillo, pues tampoco es muy necesario.
  • Paso 2: seleccionar cual de las tres categorías podría estar mas acorde con la solución a nuestro problema.
  • Paso 3: leer la descripción de cada patrón de la categoría.
  • Paso 4: una vez tengamos es mas “cualificado para la tarea” lo estudiaremos y analizaremos bien, a nivel de diagramas Uml y de ejemplos de diferentes implementaciones.
  •  Paso 5: y aquí viene el reto, lograr adaptar la implementación del patrón a nuestro propio caso y necesidad.

 

Cursos certificados gratuitos

132

Realiza cursos certificados de forma gratuita

Hoy os quiero traer una recomendación sobre una pagina web llamada Activate que descubrí hace algun tiempo que, en conjunción con google  está ofreciendo cursos gratuitos, tanto online como presenciales, relacionados con la tecnología, marketing e internet.

¿Pero es cierto esto?

Pues por fortuna la respuesta es sí, yo mismo hice este año uno para probar la plataforma y la verdad es que ha sido muy satisfactorio para mi. Hice un curso de 40 horas de programación de aplicaciones móviles impartido y certificado por la Universidad Complutense de Madrid, y la verdad es que el contenido del curso es de muchísima calidad, aunque si es cierto que alguna cosilla estaba algo anticuada, como por ejemplo en el modulo de programación para dispositivos Apple, aún se da el lenguaje Objetive-C, el cual ya ha sido reemplazado por Swift.

¿Y el resultado?

En mi caso, después de hacer los 6 modulos de contenido útil y muy variado, y aprobar los exámenes, uno por cada modulo y uno final, recibí el siguiente certificado acreditativo de la Universidad Complutense:

Certificado

podéis registraros y realizar los cursos disponibles aquí:

http://www.google.es/landing/activate/formate/?gclid=CjwKEAjwxoG5BRCC7ezlzNmR8HUSJAAre36jXHrD3RdAmJpDYyRA1WPyDwyL-9dtZ-Y5TmELuRRW5RoCw_Pw_wcB