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.

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.

 

 

 

 

Servidor web hecho con NodeJS

nodejs_logo.jpg

Hoy os quiero compartir un servidor web que acabo de subir a mi cuenta de GitHub,  se trata de un Servidor web asíncrono, hecho con NodeJS y Javascript, con sistema de registro de log en un archivo de texto y configurado para servir paginas en formato HTML5.

El proyecto es fruto de un curso que he estado haciendo recientemente para acercarme un poco a lo de programar con Javascript del lado del servidor, solo tendríais que modificar los archivos html y/o añadir lo que queráis, esto ya a gusto del consumidor, ya que es una configuración fácilmente escalable, y con solo modificar algunas lineas de código haréis con esto lo que queráis.

Lo que puedo sacar de esto es que no puedo decir otra cosa de NodeJS más que…  “¡es una maravilla!”, además con la comodidad de estar programando en Javascript (aunque no soy un gran fanático del mismo, todo hay que decirlo, mas que nada por que es tan literalmente “liberal”,  que si te despistas un poco, el código y su organización, pueden acabar pareciéndose a una juerga universitaria o una comuna hippie).

A todas las ventajas mencionadas anteriormente, sumarle que por ejemplo para crear el backend de una app móvil (obviando el tema de Firebase o el antiguo Parse, que por cierto dejó de funcionar), es una maravilla no tener que estar aprendiendo Python o Ruby y su framework Ruby on rails por ejemplo, simplemente para hacer eso.

Tenéis el proyecto preparado en mi cuenta de GitHub aquí:

https://github.com/czazuaga/Servidor_Web_NodeJS

¿Conoces Json?

json

Hoy vamos a hablar de una de las herramientas de desarrollo mas sencillas de utilizar pero a la vez de mas utilidad que podemos encontrar a nuestra disposición, y esto es tanto que a día de hoy, el conocimiento de Json se ha convertido en un indispensable para cualquier desarrollador de hoy en día.

Bien, y que es esto de Json, pues imaginemos que para la comunicación de datos entre lenguajes de programación que no tienen nada que ver unas con otros, se ha inventado una especie de “servicio de mensajería” ligera, sencilla, rápida y eficaz. Y esto no se ha inventado con Json, antes esta Xml (y sigue estando), pero al llegar Json se ha puesto literalmente a la cabeza, debido a varios factores, como su simplicidad o por ejemplo el ahorro de escritura de código  y peso que supone, algo que se puede comprobar al comparar dos archivos (uno Xml y otro Json).

¿Que dice wikipedia?

JSON, acrónimo de JavaScript Object Notation, es un formato de texto ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript aunque hoy, debido a su amplia adopción como alternativa a XML, se considera un formato de lenguaje independiente.

¿Y como trabajamos con Json?

Pues dada la ocasión he preparado algunos ejemplos, en los que veremos su simple sintaxis y su implementación en HTML5, Javascript y también veremos como trabajar con Json cuando programamos para Android.

Implementación en HTML5 y Javascript:

La estructura de un objeto Json:

estructura_objetoEjemplos desarrollados con Sublime Text 3.

Como podéis ver, hay una simple estructura HTML5, que contiene un contenedor “div”y un script Javascript con una referencia al div “contenedor”. Bien pues ese “var objeto”  que veis es la declaración del objeto Json, tan sencillo como eso, y en el codigo html que metemos en la etiqueta del contenedor un poco mas abajo, estamos realizando la llamada a las parejas {“clave”:”valor”} que tenemos dentro de nuestro objeto Json.

Salida del ejemplo anterior:

estructura_objeto_out

Trabajo con números:

numeros_json

Ejemplo mas simple y sencillo aún, esta vez vemos como trabajar con tipos de dato numéricos. En este caso se puede observar que el objeto Json, solo tiene un atributo.

Salida en el navegador:

numeros_json_out.PNG

Strings en Json:

strings_json

Este ejemplo a mi parecer no necesita de mucha explicación.

Salida de la ejecución del código en el navegador:

strings_json_out

Trabajo con arrays en Json:

array_json.PNG

Se puede observar que aquí ya se complica un poco la cosa, pero nada del otro mundo, quizás la estructura de declaración del array en Json sea algo distinta a lo que acostumbramos a ver en diferentes lenguajes de programación (obviando que Json no es uno de ellos). Cabe decir que los objetos son completamente flexibles en cuanto a términos de anidación se refiere, con lo que podríamos por ejemplo meter varios objetos dentro de otros, aunque útil en muchos casos, también podría tender a romper esa “sencillez” de legibilidad que Json de forma natural nos proporciona.

Salida del navegador:

array_json_out

Desde luego estos ejemplos son a modo didáctico,  y esta no es la forma habitual de trabajar con Json en un entorno profesional, todo ha sido a modo local, en el día a día se trabajaría con archivos “.json” albergados en un servidor,  e importaríamos desde una Url en nuestro código Javascript dentro de nuestro html o trabajaríamos con Jquery o Ajax para parsear los datos de los archivos Json, ya que estos son, digamos”codificados” y enviados a través de la red hasta su destino en forma de simples cadenas de texto, de unos cuantos caracteres, y luego una vez recibidos son decodificados, así que os invito a investigar y profundizar en como trabajar con Json de este modo. Aunque en el siguiente ejemplo, en Android veremos como hacer esto, aunque de modo local, si que veremos el proceso de codificado y decodificado de los objetos Json.

Implementación en Android:

Preparando la interfaz gráfica.

Xml

Creamos con Xml una sencilla interfaz de usuario, la cual consta únicamente de un TextView con un Id para identificarlo desde nuestra clase Java.

Creando la clase java y los imports de la misma:

imports

Creamos nuestra activity e importamos las clases JSONException y JSONObject de la cual nos serviremos para crear, trabajar y parsear nuestros objetos Json de forma nativa dentro de Android.

onCreate

en el método onCreate identificamos nuestro TextView y creamos una instancia de la clase JSONObject, ya solo queda meter los atributos dentro esta instancia la cual será nuestro objeto Json,  hay que hacer esto dentro de una estructura “try-catch” ya que podria lanzar una excepción.

codificar

A continuación he creado un método “codificar” que devuelve un String a partir de nuestro objeto Json. Y es justamente lo que mencionaba en los ejemplos de Javascript, ahora nuestro objeto esta contenido dentro de una cadena de caracteres.

decodificar

Ahora podemos ver como he creado un método “decodificar” que hace justo lo que su nombre describe, recibe un String que contiene un objeto Json codificado y devuelve otro String, pero esta vez ya decodificado.

La ejecución del código daría esta salida:

android_out

Como podéis ver es bastante simple el uso de Json, pero aún más es útil, a día de hoy Json ya esta integrado de forma nativa en prácticamente todos los lenguajes  de programación, los cuales, al igual que hemos visto en android, incluyen sus propias clases para trabajar con él. Además muchos sistemas modernos como por ejemplo el backend Firebase o la base de datos no relacional MongoDB también se basan en Json para trabajar, por lo tanto podemos estar seguros de que es una apuesta garantizada el estudiarlo.

Con esto despido el articulo de hoy, espero que os haya sido de utilidad y que os haya gustado.

 

 

 

 

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.

Crear e importar librerías propias en Android Studio

Como_crear_e_importar_librerias_en_Android_First_Frame.png

Como creare e importar nuestras propias librerías en Android

Del mismo modo que vimos como hacer esto en Java 8, hoy veremos como también podemos crear ,exportar, e importar nuestras propias librerías (o de terceros) en Android Studio, en el camino nos daremos de narices con Gradle, asi que trastearemos un poco con él y sincronizaremos nuestro proyecto para poder trabajar con nuestras librerias.

Si te gusta lo que estamos haciendo hoy, mantente atento, ya que estoy preparando un curso intensivo sobre Gradle para desarrollo en Android, incluyendo su sintaxis en el lenguaje Groovy , actualizado a 2016 y en español (que si habéis buscado no hay prácticamente ninguno..). Lo encontrareis gratis, como siempre, y sera publicado aquí y en mi canal de Youtube.

 

De momento.. :

 

Como crear e importar librerías en Java 8

Como_crear_e_importar_librerias_en_java_First_Frame.png

Aprovecha las ventajas

Gracias al paradigma de programación de lenguajes  Java, la OOP o programación orientada a objetos, tenemos un montón de posibilidades y herramientas a nuestro alcance, tales como la herencia, encapsulación, polimorfismo etc. Y podemos aprovechar todas la mencionadas antes en conjunto,  para crear librerías propias que nos abrirán la puerta a la autentica reutilización de código.

Reutilización de código

Una de las cosas yo siempre intento perseguir como programador  en el día a día, y transmitir a través del blog, pero sobre todo en los tutoriales y ejemplos prácticos que voy grabando en vídeo, es la reutilización de código, por que se traduce en limpieza, menos costes en cuanto a tiempo de desarrollo, (lo que se traduce en dinero al fin y al cabo). Pero el verdadero ahorro no vendrá en el desarrollo en el que se creen las librerías, si no en los próximos desarrollos.

Caso práctico

Supongamos por ejemplo que estamos desarrollando aplicaciones como freelancer, y nos suelen encargar trabajos que al final nos damos cuenta que tienen en común ciertos algoritmos, y partes a nivel de código muy parecidas entre sí. Pues una vez resuelto un problema, seria estúpido no volver a repetir la formula y crearla de nuevo.

Pues bien, si lo hacemos bien, incrustando estas soluciones en una librería propia, de ahí en adelante (en un nuevo software) posiblemente no tardes mas de 5 minutos y no ocuparas mas que unas cuantas lineas de código en resolver el mismo problema, el cual te llevó unas 6 horas resolver y acabo con una estructura, digamos un tanto a bajo nivel.

¿Y como hacemos esto en Java?

Hoy veremos como podemos crear nuestras propias librerías de clases en Java 8 y como importar librerías distribuidas en .Jar, ya sean creadas por nosotros mismos o de terceros.

Integrar Github con Android Studio

Git+Android.png

Hoy vamos a estar viendo como integrar Git y la plataforma Github con el Ide Android Studio,  y asi lograr trabajar en perfecta armonía con estas dos herramientas de desarrollo mientras programamos para Android y sin salir de nuestro Ide.

Crearemos repositorios, commits, push, y clonaremos otros ya creados, desde el servidor a nuestro lugar de trabajo y además conseguiremos hacer todo ello cómodamente, sin escribir una sola linea de comando, y encima sin tener que salir de nuestro entorno de desarrollo en ningún momento.

Tal vez el vídeo de hoy sea algo largo, pero creedme si os digo que si habitualmente trabajáis con el sistema de control de versiones Git (si no, es muy buen momento para empezar a hacerlo), desarrolláis para android, y no los tenéis integrados entre sí,  este vídeo os va a resultar muy pero que muy útil, y os ahorrará un montón de tiempo y trabajo instantáneamente, pero sobre todo lo hará a la larga.