Friday, December 28, 2018

Lo que nos deja el 2018

Un año más y como ya es una costumbre mi pobre blog recibe solo uno o dos posts. 

¿Qué puedo decir del 2018 profesionalmente? 

- He profundizado mis habilidades como Full Stack Developer, usando Net Core de Microsoft, Angular 4 y sucesivos, etc.

- He profundizado mis habilidades para el cloud
 Trabaje mucho más profundo para Microsoft Azure usando varios de sus servicios.

- Aprendí Laravel (un server side framework) y lo he utilizado durante 3 meses para un cliente. 

- Aun no a nivel de experto, pero he estado utilizando Vue.js como alternativa a Angular y Element.io como alternativa a Bootstrap. Ambas son muy buenas alternativas.

- Me he actualizado en el estado de arte en Machine Learning y Computer Vision. Comencé un curso de nivel básico/intermedio (aún en proceso)

¿En lo personal?

- Trabaje por mejorar los parámetros de salud, incrementar el nivel de ejercicios semanal, mejorar la alimentación y perder un poco de peso. Todo con muy buenos resultados.

- Dedique más tiempo a mi familia y trabajamos en las metas más alineados que nunca.

¿Cuales son mis metas para el 2019?

- Asimilar y trabajar en el cloud de Amazon (AWS). Después de conocer Azure y GAE le toca el turno al más utilizado hoy por hoy. 

- Continuar asimilando y aprendiendo a usar las herramientas de Machine Learning y Computer Vision.

- Continuar trabajando en la comunicación en idioma Ingles.


- Continuar disfrutando de mi familia y pasear más a menudo.







x

Thursday, February 1, 2018

El placer de aprender

El año 2017 fue un año bastante monótono, opaco, y con falta de emociones profesionales.

Desde que comenzó el 2018 me he estado enfocando en mis metas para este año y entre ellas esta asimilar una nueva tecnología orientada preferiblemente a aplicaciones mobiles.

De momento he seleccionado React y React Native como alternativas a Angular y Xamarin para aplicaciones webs y aplicaciones nativas multi-plataforma.

La elección la he realizado basado en la lectura de varios artículos y en una encuesta sobre el estado de arte de las tecnologías Javascript al final del 2017.

Aun no se si es la correcta pero lo importante es que he recordado cuánto se disfruta aprendiendo algo nuevo o modos nuevos de hacerlas. 

Es no poder dormirte sin terminar de leer un artículo, aunque te den la 1:00 AM y tengas que levantarte temprano al siguiente dia.

Es volver a abrir la laptop a las 11:OO PM para terminar de escribir un código de ejemplo que se te habia quedado a medias en la tarde.

Es no querer parar hasta terminar el curso y convertirte en un experto en el tema, je je.

Es volver a disfrutar la profesión, es, en resumen, volver a ser yo.

Lo que me dejó el 2017

Otro año más y no tuve tiempo para escribir en mi blog. Acabo de abrirlo y veo que lo último escrito es de hace ya 2 años!! Como es posible? Pero bueno, es lo que hay.

Obligadamente tengo que comenzar con esta pregunta:

Qué me dejó este año 2017?

Creo que poco, y quizás mucho. Poco desde el punto de vista tecnológico y mucho desde el punto de vista humano.

Tecnologías


No recuerdo haber aprendido tecnologías nuevas este año, aunque si retomé y perfeccioné algunas, por ejemplo:

  • Volví a trabajar intensivamente en Server Side/API con Visual Studio y .Net Framework.
  • Volví a trabajar intensivamente en SQL Server, actualizandome en el Estado de Arte.
  • Perfeccione mis habilidades en Angular JS.

Humano


Desde el punto de vista humano si que tuve muchas nuevas experiencias aunque no todas positivas, pero si algo es cierto es que se aprende mucho más de las negativas.

Unos de los “clientes” durante el 2017 fue particularmente complejo. Visitando sus oficinas e interactuando con su equipo vi y experimenté situaciones que en 20 años en la profesión jamás había vivido.

  • Vi lo que es una oficina en la cual no me gustaria trabajar jamás.
  • Vi lo que es un equipo disfuncional.
  • Vi como uno o dos miembros mal enfocados, o simplemente enfocados únicamente en sus intereses personales, son capaces de contaminar a todos el resto de los miembros de un equipo y hacer la vida profesional allí muy complicada. Incluso es increible cuan rápido son capaces de contaminar a miembros nuevos que se integran. Si a lo anterior sumamos arrogancia y un poco de mediocridad pues ya podemos imaginar el resultado.
  • Vi lo perjudicial que puede resultar un líder incapacitado y sin transparencia en su gestión.
  • Vi como ellos comenzaban muchas cosas pero no terminaban ninguna. Es como que su meta era estar entretenidos con cualquier cosa nueva por hacer, o incluso agregar cada vez más funcionalidad a los proyectos en vez de terminar y entregar funcionando las que ya tienen en proceso.

Yo no se si habrá sido suerte en mi vida profesional pero nunca había visto esas cosas a un nivel tan alarmante.

Juro que por primera vez en 20 años sentí que levantarme e ir a trabajar era un castigo.

Eso me enseñó muchas cosas:

  • Que el dinero nos hace a veces desviarnos un poco de los principios. Aunque digamos que no, preferimos el dinero del cliente aunque no nos haga feliz (no yo directamente en este caso, pero igual aplica la moraleja)
  • Que el ambiente de trabajo es fundamental, que hoy se un poquito más a donde NO iria nunca a trabajar.
  • Que hay que tener muchisimo cuidado con las miembros que contratas para tu equipo. Un equipo funcional no es necesariamente uno plagado de egos (suponiendo que fuera el caso).

Otra cosa que me propuse durante el 2017 y lo cumplí fue dedicarle más tiempo a mi familia y a mi disfrute personal, a viajar, a hacer deportes y a no sobrecargarme de trabajo. Fue como un año sabático para alguien acostumbrado a una altísima carga de trabajo como yo.

Para este 2018 ya tengo mis metas bien definidas y he comezado a trabajar en ellas y obtener resultados más rápido de lo esperado, pero ya sera para el siguiente articulo de fin de año que hable más de ello.


Friday, February 5, 2016

Mi resumen profesional del 2015

Hoy es 5 de Febrero por lo que el título de este artículo es algo contradictorio, anticuado quizás, o cuando menos: pasado de tiempo.

Sí, es cierto, pero como ya he dicho antes, el tiempo para escribir en mi blog es directamente proporcional al tiempo libre que tengo. Si vemos que el último artículo escrito fue a mediados del 2015 pues dará una idea exacta de cuan ocupado he estado.

Así que al menos toca hacer un resumen del año anterior, por lo menos en lo profesional.

Cuando a finales de Diciembre me pregunté qué es lo que había sucedido en mi vida profesional, de pronto solo me vino a la memoria que había sido mas bien un año de consolidación, sin muchas cosas nuevas.

Eso medio que me frustró momentáneamente pero cuando analicé bien a fondo el caso pues nada mas alejado de la realidad. El 2015 fue un año cargado de retos y que vino a llenar importantes lagunas en mis conocimientos (y eso que ya quedan pocas, ja ja, que modestia!).

Por ejemplo, fue un año en que comencé a usar periódicamente productos y plataformas de Apple. Estuve utilizando parcialmente durante todo el año una laptop Mac, usando su plataforma de desarrollo XCode, y en general todo lo asociado al desarrollo de una aplicación mobile, su distribución en TestFligh, etc. Si antes de este año me preguntaban algo de ello pues ni idea, para que mentirles.

Ya con esto hubiera "justificado el salario" pero hubo mucho más:

- Trabajé por primera vez con la plataforma de NodeJS para hacer una servicio web.

- Utilicé por primera vez MongoDB, un gestor de datos orientado a "no relacional" (al menos en mi definición personal).

- Aprendí y utilicé a fondo el framework de Bootstrap. Toda su filosofía me ha servido para aplicarla a varios productos.

- Profundice muchísimo mis habilidades en AngularJS, CSS3, HTML5.

- Retomé mi relación con los servicios del cloud de Microsoft. Por ejemplo Azure, que fue uno de los principales, pero no se queda atrás el uso del servicio gratuito de Repositorio Git de Visual Studio que se convirtió en mi favorito, free es free, je je. Con azure puedes tener una plataforma de desarrollo totalmente free al menos durante la etapa de desarrollo de un proyecto. No necesitas comprar dominios, hosting, etc, para montar live un website.

- Retome en menor medida el desarrollo para Android.

- Por ultimo, y no menos importante, aprendí y usé durante todo el año el framework Cordova para desarrollar aplicaciones mobiles híbridas y multi-plataforma.

La mayoría de estas tecnologías tienen una fuerte tendencia al alza y se están imponiendo en el mercado profesional. Juntas incrementaron exponencialmente mi background profesional durante el 2015 y eso me hace muy felíz y aun mas competente.




Thursday, July 30, 2015

Windows 10: Valió la pena la espera?

Mucho tiempo ha pasado desde que Microsoft (MS) "anunció que no fallaría nuevamente" en su producto insignia: Windows. Fueron muchas las frustraciones de los usuarios con Windows 8 al punto que las compañias comenzaron a vender Laptops con la version 7 nuevamente. Microsoft estaba, y aun está, bajo la observación estricta de la comunidad y otro fallo con su Sistema Operativo Windows podría suponer una debacle irreversible.

Finalmente, luego de tanta espera, ha llegado Windows 10 y el momento de hacer su primera evaluación.

Lo primero es que jamás he instalado una versión de Windows desde el momento en que sale porque desgraciadamente nos ha acostumbrado a no confiar en el producto "recien horneado". No obstante, por alguna extraña razón (o no tan extraña) estaba ansioso por instalarlo.

Una vez instalado y luego de una rápida revisión, cuáles son mis primeras impresiones?

La corta:

El producto me ha causado muy, pero muy buena impresión.

La larga:

Creo que como la version del 95 y XP, hitos en su momento, Windows 10 obtendrá la misma categoría. Creo que MS han encontrado nuevamente el camino para hacer las cosas bien diseñadas y orientadas al objetivo.

Proceso de Instalación:

  • Luego de la descarga inicial el proceso de actualizar es simple para cualquier nivel de usuario final (avanzado o no).
  • Todos las aplicaciones han quedado funcionando perfectamente.
  • Incluso los íconos de mi antiguo escritorio han quedado en su lugar anterior.
  • Una de las cosas mas importantes para mi es que voy a recuperar gran parte de mi espacio en Disco Duro, ocupado en un 30%, por el diabólico mecanismo de actualizaciones de Windows que luego de descargadas y ejecutadas no se pueden eliminar fisicamente.

Interfaz General:

El "look and feel" es realmente muy bueno, entre ellos:

  • El regreso natural del botón de Inicio y el rediseño de su contenido.
  • La incorporacion de nuevos elementos a la lista de recientes, incluido las ultimas URL a las que ha navegado.
  • La ubicación bastante funcional de la barra de busqueda, ahora al lado del botón de Inicio, unido a su mejor funcionamiento (aunque tengo que probarlo mejor).
  • El antiguo Panel de Control ha sido totalmente rediseñado (para mi de lo mejor) quedando con mucha visibilidad y muy instuitivo, al estilo de las interfaces de Tablets y Telófonos.

Nuevos productos:

Solo he tenido la oportunidad de abrir Edge, el nuevo navegador de Windows 10 que promete acabar con todos los dolores de cabeza de su predecesor Internet Explorer. Desde el punto de vista de rendiemiento y compatibilidad con los nuevos estandares de la web (CSS3, HTML5, etc) no lo he podido probar.
Lo que si he probado es un par de herramientas que trae incluida para compartir y copiar contenido web y lucen bien útiles e interesantes.

Mi recomendación final?

Instalarlo en cuanto le sea posible. La unica forma de acabar con todos los arrastres del pasado de Windows y sus Exploradores es recomenzando desde cero y esta es una muy buena oportunidad.

No tiene que esperar por su turno en la cola, puede ir directamente al sitio de MS y descargarse una aplicacioncita para hacer la actualización cuando desee. Aqui puede encontrar lo que necesita para no esperar su "turno al bate".



Wednesday, July 15, 2015

Are PhoneGap and Cordova the same?

No, they are not!.

Maybe you can think that I'm totally crazy and wrong, right?
All the time we can read things like "Phonegap is using Cordoba as its core" and bla, bla, bla. And..., yes, it's right.

But today I got very confused (wasting a lot of time) when I tried to add the Android platform to the project in two different computers: in a Mac (where we previously had created the iOS platform version), and in a PC, but the results were incompatible!.

My first impression was: Bahh, evidently these computers have different SO and have different Phonegap versions. As the people used to say: the more probably cause is that the Mac is more updated than the PC.

But not, the real cause was that we had generated the project on Mac using Cordoba CLI, and today I was trying to obtain "similar results" but using Phonegap CLI instead of Cordoba in the PC. The results: I got different project's files.

So, I installed both in my PC: Cordoba and PhoneGap to create the same project with each one, but surprise: they are not generating the same content!. Their file' structures are completely incompatible, at point that they do not recognize each other content as a valid project folder.

Take a look at this image:



Are you seeing the same like me? How many differences you can detect? I'm going to help you, just count the files and folders marked in yellow color.

So, my conclusion is: they have many compatibles stuff, but No, they are not the same.

You should to decide which one to use. For example, Ionic framework selected Cordoba. Me? I'm going to do the same.



Thursday, March 12, 2015

Unit Testing in Javascript and Angular

Each day we develop more and more web apps where the source code is 80% JavaScript. The Server side component becomes a mere data service, usually a simple RESTful service. The amount of classes and logic in the Client side is getting larger, and more complex each time, and evidently they are more likely to fail with each update of the code.


To decrease the possibility of failures in our applications there is a paradigm called Test-driven development, based on unit tests.


I believe that, nowadays, all developers have heard something about Unit Testing (UT). If this is your first time then you could start by reading some of the following links:




It is very likely that you are among those who have used Unit Tests while developing in the server side, but I’d bet you have never used Unit Tests in the Client side of your applications, specifically in Javascript and AngularJS.


Right?


If so, don’t worry, here I'll try to introduce you to this fascinating world.


The tools for UT are widespread in the Server side, either in .Net or Java you can find solutions. IDEs like Visual Studio, Eclipse and others, integrate perfectly with the Unit Testing tools and facilitate the creation and execution of Unit Tests.


But what’s happening on the other side of the fence?


This is a question that I‘ve been wondering for a long time. I confess I tried to read about this a couple of years ago and I finished a little bit disappointed. At least where I read, the generalized comments were about projects that have been abandoned, and I couldn’t find anything else interesting enough.


I think these projects were not receiving the required attention, perhaps for a cost problem, perhaps because almost everybody was doing well without using Unit Testing on Javascript, or simply perhaps because still the predominating applications had more than 70% of their source code in the Server side.


But personally, I am having a strong feeling that the development cycle is incomplete, it's like having a table with only three legs.


You can argue that so far, the table is working fine with only three legs...


And yes, it's true, but nobody will deny that supporting the table with four legs will give it more support and will make it stronger.


Observing the development of Angular during the last year I have begun to note that many of their code's examples are making use of unit testing. I went again over the subject and I'm greatly surprised.


The Unit Testing tools for Javascript and Angular have evolved very much, they are as flexible and powerful as their counterparts in the Server side. Even more, there are managers of projects and dependencies for the Client side with the same style of Maven and Gradle for the Server side.


Some of the main tools are:




However, we can create unit tests without any of the tools mentioned above. We can use one of the more evolved frameworks nowadays: Jasmine.


Jasmine is a powerful and flexible framework for unit tests in Javascript with as much or more flexibility than any of the ones that we use on the Server side. It has a very simple and intuitive syntax.


I can remember at least two or three recent projects where I’ve had to build a sort of "hand made" page to test the Angular components, either services or controllers. Well, not anymore, this is past history.


We also have the ngMock angular module that offers support for all the tasks related to unit tests on Angular's components.


There is a "seed" project in GitHub, ready to be used, including many of these tools pre-configured. In all honesty I think that, despite the facilities offered by this project, it’s too heavy and might not fit your development environment.


I actually prefer to use a pure and clean version of Jasmine. I was looking in GitHub for a cleaner boilerplate project but I haven't really found one containing exactly what I want, or maybe I got tired of looking. So, I have created a basic project containing only the required Jasmine's libraries and a couple of examples with Unit Test for Javascript and Angular. https://github.com/deisbel/angular-jasmine-standalone-seed


What are the most important elements of Jasmine that we need to use? - Only a few:


- A copy of the jasmine-standalone libraries.
This translates to just download the libraries from the Jasmine website and add them to the project's root folder.


- Create unit tests.
This is just writing tests using the Jasmine "language" and saving them in a file with extension .js. You can save these files mixed among others belonging to your app's source code or in a separate folder in the project's root folder.


- Add a simple html page in charge of running the tests, by default named SpecRunner.html.
Requesting the page from any browser is all you need to do to see the results. This page should be updated to add a reference to each test file that you have created and you want to run.


- If you also want to test components of your application defined in Angular (such as Services, Filters, and Controllers) you also must add references to angular and angular-mock libraries.


To show how simple is to write a file to create a test we will use the following Person class, serving us as target for our unit tests.




We are going to create three simple tests to verify that the Person's properties are always properly instantiated, and also, to ensure that the full name of the person is correctly created. These tests are pretty simple, but good enough for our purpose: illustrating how easy can be the process.


How should we define our SpecRunner.html file to execute all of these test?


It should look like this:




So far, I've shown you the less complex cases, only for a pure Javascript class, but how can I create unit tests for my Angular app components?


It's enough by adding a couple more references to our SpecRunner.html page, one for angular.js and another for angular-mocks.js.


Also, you can see that we added two more references, one for the file where an Angular controller is defined and another for the file where the unit tests for that controller are created. The content for each file is below:






If you refresh the SpecRunner.html page to execute again the tests you will see these results:




You can add more files containing classes and tests as you need them.


After reading this article you don’t have any more excuses to ignore unit testing in the Client side, and we can finally add the fourth leg to our table, achieving more reliable apps, happier users and clients.


To deepen in the topic I give you the main links:




To download the project and collaborations:
https://github.com/deisbel/angular-jasmine-standalone-seed