Uncategorized

Solución definitiva a los dolores de espalda y vista cansada

En la universidad nos enseñan matemáticas, inteligencia artificial, lógica digital, programación, negocios, derecho informático, pero nunca nos enseñan acerca de la importancia de un espacio cómodo para trabajar.

Durante más de 10 años estuve trabajando con una mala postura. En promedio por mi profesión, dedico más de 8 horas diarias frente a un monitor, escribiendo cientos de líneas de código, forzando la vista y adoptando malas posturas.

Desde hace un par de años he sufrido de dolor de espalda intenso y en muchas ocasiones dolor de cabeza y vista cansada. Sin embargo, eso se terminó desde que aprendí las técnicas esenciales para lograr una buena postura frente al monitor, por ello el día de hoy decidí compartir con ustedes algunas técnicas que podrían beneficiarles totalmente, desde mi más humilde opinión. (No soy un fisioterapeuta ni nada por el estilo)

 

1. Selección de una Silla Egonómica 

Siempre que voy a realizar una toma de decisión me gusta analizar siempre las opciones, para elegir la mejor. El caso fue el mismo al buscar una silla ergonómica, encontré que las mejores sillas son las Herman Miller y existe una gran variedad de las mismas, sin embargo son excesivamente caras, las más “económicas” las encontrarán arriba de los $25,000 MXN ($1,100 USD).

Estas sillas tienen respaldos ergonómicos y respaldo para los brazos, las posibilidades de ajuste son infinitas, por lo cuál se adecuan a cualquier tipo de cuerpo y tamaño. Sin embargo, buscando un poco más encontré otro tipo de sillas ergonómicas sin respaldo. Investigando un poco más encontré que algunos fisioterapeutas las recomiendan, ya que ayudan a corregir la mala postura y a la larga esto trae grande beneficios.

Por otra parte, estas sillas sin respaldo tienen algunos puntos negativos y es que actualmente se encuentran aún en una fase muy temprana de mejora, por lo que no encontrarás una silla que se adapte a cualquier estatura, es decir, puede que a alguna persona de 1,80 le quede perfecto, mientras que a una de 1,85 le resulte bastante incomoda.

Otro punto a considerar es la cantidad de horas que pasaras frente a una computadora, si pasas más de 4 horas, yo en lo personal recomendaría más una silla con un buen respaldo.

Si buscas algo económico yo recomiendo plenamente la marca Giannelli, puedes elegir una Silla Ejecutiva Ergonómica, misma que cuenta con brazos abatibles.

IMG_2768.JPG

2. Posición del Monitor

El segundo punto crucial a considerar a la hora de mejorar nuestra postura ante el monitor, será conocer la posición del monitor con respecto a la cabeza.

La posición nunca deberá ser vertical, lo ideal es inclinar el monitor ligeramente hacía atrás, con el objetivo de no forzar la vista. Yo durante muchos años, utilicé el monitor vertical y en efecto, tenía mucha fatiga visual.

La silla deberá contar con soporte para los brazos, preferentemente elegir un modelo que tenga brazos abatibles para poder hacer movimientos de descanso.

La distancia ideal entre el monitor y tus ojos debe ser entre 65cm a 70cm, para lograr una nitidez, principalmente en los textos. Una menor distancia puede producir mareos y vista cansada.

Soporte lumbar para evitar hacer la espalda recta, tener un respaldo con soporte lumbar además permitirá distribuir el peso del cuerpo a lo largo de la espalda.

IMG_5634.JPG

Siguiendo mis recomendaciones previas podrán mejorar su calidad en sus jornadas laborales y sobre todo disminuir o incluso anular por completo los dolores de espalda, cabeza y problemas de vista cansada.

Además si trabajamos en la noche podemos intentar bajando el brillo lo más que podamos, al punto en que la vista se sienta cómoda.

No olvidemos cada 20 minutos mirar a un objeto que se encuentre a más de 6 metros de distancia para descansar la vista y cerrar los ojos unos pocos segundos. Una técnica que me ha funcionado bastante es la Técnica Podomoro, de la cuál probablemente mencione en futuros articulos.

Por las noches, si utilizan Mac OS X podemos activar el modo Night-Mode el cuál realmente ayuda bastnate.

 

Por el momento estas son mis recomendaciones, desde que he cambiado mis hábitos me siento mucho mejor a lo largo del día, los dolores de espalda y de cabeza han desaparecido y mis horas productivas han incrementado.

Espero poder ayudar a más de uno, por lo que ayudarán mucho compartiendo este articulo. ¡Espero leer sus comentarios!

Anuncios
Uncategorized

ZafoApp – Alcohol a domicilio –

En esta ocasión quiero dar a conocer una aplicación que desarrollé para las plataformas IOS y Android. El objetivo, ayudar a las personas a adquirir sus bebidas preferidas a mitad de la madrugada, sin tener que arriesgarte ni salir de casa.

Para ello, como siempre, decidí utilizar la última tecnología que nos permitiera construir un proyecto modular que fuese completamente escalable.

Esta aplicación está integrada con diferentes tecnologías y nos permite realizar pagos con tarjeta de débito y crédito, además de conectarse con nuestros repartidores en tiempo real para que tus bebidas nunca lleguen tarde.

Los invito a descargar mi aplicación y dejarnos su valiosa retroalimentación, con la cuál podemos ser mejores cada día.

http://zafoapp.com

Solo mayores de 18

http://zafoapp.com

Uncategorized

Nativescript VS React Native

INTRODUCTION

A little over a year ago I had a client, who wanted to digitize his business through his own mobile application. To develop native applications I used for a couple of years Titanium SDK. However, as we know, in the field of ICT from time to time new technologies appear that make many of our projects obsolete and it is our obligation as professionals in the area to update us.

During our talks and agile methodologies, we entered into what technology would be the most appropriate to carry out its huge project. So I researched day and night on the trends and the best technologies to make native apps, including Swift in the case of IOS and Java for Android.

NATIVESCRIPT

After an arduous investigation we decided to use Nativescript, because we had already worked for a year with Angular 2 and Typescript. Once we started studying Nativescript, we discovered that it was amazing to be able to program using the same technology that we used to build our Web projects, which greatly simplified our developments. Although to tell the truth, not everything was easy, at first we had many headaches during the learning curve. Many compilation errors, incompatibility of libraries, constant updates in tns-core-modules, lack of documentation.

In the end, we really delayed finishing the application, but our biggest advantage came when the customer started asking for many changes and updates. We were really easy to do, because of the power of Typescript that allows large projects to be ordered.

Unfortunately, the development is a little slow and there are very few libraries, but on the other hand, the Nativescript community is growing constantly, even I have created a couple of modules myself and contributed some bugs.


REACT

A couple of months ago, I decided to try React Native, since a couple of friends recommended it a lot. I must say that I was very surprised since I found 3 times more support in buying with Nativescript.

The disadvantage for me is in not being able to fully utilize Angular 2 + Typescript, since in very large projects our developers could have multiple conflicts.

On the other hand I found modules to do a million things.

Also the speed with which the changes in the simulator are cool is spectacular, it is really similar to programming a web system.

Over the next few months, I’ll be investigating more about good practices, with the goal of achieving more organized projects using React Native, I’m sure my next project will be using this technology.


CONCLUSIONS

Both technologies seem to me excellent and with a great community. However, for the moment I will continue to use Nativescript to complete a couple of outstanding projects, due to the reuse of modules, today, the needs of customers and investors demand a lot of agility and above all quality in our developments and all new technology requires A learning curve based on a lot of practice.

I would love to know your experiences with any of these technologies. Leave me your comments.

Peace

 

javascript

Protoboard virtual con Javascript

Buenos días estimados.

Hace tiempo, durante mi estancia en la universidad, llevé la materia de Lógica Digital, debo admitir que sufrí bastante en esa clase, pelar cables jamás fue de mis cosas preferidas. Aunque claro, aprendí muchísimas cosas interesantes.

Recuerdo que ese semestre fue un tanto complicado, una semana antes de la entrega final del proyecto final, extravié mi material de laboratorio, incluyendo mi Protoboard y las cosas no andaban bien económicamente, por lo que decidí poner una solución y desarrollar mi propio Protoboar Virtual, utilizando Javascript.

Durante un día entero de arduo desarrollo, construí la estructura del tablero lógico, cada pieza, cada circuito, los leds, botones, el flujo de paso de la energía y ejecuté las pruebas para garantizar que todo funcionara correctamente.

La herramienta permite agregar todos los cables y circuitos integrados (compuertas lógicas) que requieran.

También incluí los diagramas de cada compuerta lógica. Para visualizarlos, basta con dar doble clic sobre el identificador de cualquier circuito asignado al tablero lógico.

El resultado final se encuentra disponible en el siguiente enlace y puede ser utilizado por todos.

http://protoboard.ml

Captura de pantalla de 2016-08-05 10:47:39

Así que ya saben, a desarrollar sus propias herramientas. La satisfacción y el aprendizaje al hacer las cosas tu mismo, no tiene precio.

Siéntanse libres de utilizar mi material virtual.

Saludos

NodeJS

NodeJS + Passport: Programando y configurando un módulo de autenticación (login) desde cero

¡Muy buenas noches amigos!

Hoy me pidieron un sistema de multinivel el cuál voy a desarrollar desde cero utilizando por supuesto las tecnologías de punta y para ello como todo buen sistema básico requiere un módulo de autenticación para acceder a zonas confidenciales dependiendo los diferentes privilegios.

Por ello al hacer el levantamiento de requerimientos decidí utilizar NodeJS con Express no solo por su alta escalabilidad sino por su increíble seguridad y esto gracias a módulos tan bien trabajados como lo es el caso de Passport.

En su página oficial podemos observar que su implementación es tan sencilla como hacer esto:

app.post('/login', passport.authenticate('local', { successRedirect: '/',
                                                    failureRedirect: '/login' }));

Como podemos observar en el previo código el Middleware que pasamos es un método de passport llamado authenticate y recibe dos parámetros el primero es el nombre del tipo de autenticación, para nuestro ejemplo utilizamos un login Local es decir utilizando una tabla común en nuestra base de datos y nuestro segundo parámetro es un objeto de opciones, como vemos en este ejemplo esta muy claro pues solo recibe la URL de redirección en caso de que el usuario acceda exitosamente al sitio o en caso omiso su redirección al mismo login.

Pero, ¿además de esto que otra cosa necesitamos?

Bien pues lo siguiente que necesitamos es configurar Passport para ello utiliza lo que se denominan Strategies que nos sirven para verificar tanto el usuario como contraseña delegando de la librería OAuth.

La configuración de las estrategías (Strategies) de Passport son configuradas utilizando el método use().

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

Este ejemplo introduce un concepto importante que Strategies requiere el cuál es conocido como verify callback, en caso de que el usuario sea válido:

return done(null, user);

Y en caso de que la autenticación falle:

return done(null, false);

Adicionalmente podremos incluir el paso de un parámetro con un mensaje de error:

return done(null, false, { message: 'Incorrect password.' });

Finalmente sí una excepción ocurre, por ejemplo en caso de que la conexión a la base de datos falle podemos utilizar:

return done(err);

En una aplicación Connect o Express Passport requiere ser inicializado con passport.initialize();

Y si tu aplicación usa login persistente, utilizaremos passport.session();

app.configure(function() {
  app.use(express.static('public'));
  app.use(express.cookieParser());
  app.use(express.bodyParser());
  app.use(express.session({ secret: 'keyboard cat' }));
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(app.router);
});

SESIONES

En una típica aplicación web, las credenciales utilizadas para autenticar a un usuario serán solo transmitidas durante el request de login. Sí la autenticación sucede exitosamente, una sesión debe ser establecida y mantenida vía una cookie en el navegador del usuario.

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

Esto hace que en nuestro parámetro req.user se almacene la información del usuario actual cuando este se encuentre logrado con lo cuál podremos utilizar esto a nuestro favor en cada ruta protegida que requiera autenticación.

USUARIO Y CONTRASEÑA

La mayoría de los sitios utilizan un sistema de login con usuario y contraseña por lo cuál passport nos ofrece una estrategia que realiza esto y la podemos instalar vía npm:

$ npm install passport-local

Su configuración es bastante simple:

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

Como podemos observar dentro de new LocalStrategy esta recibe una función anónima con tres parámetros, nombre de usuario, contraseña y un callback.

Como podemos observar en esta publicación el uso de sesiones y login con NodeJS es muy sencillo y realmente seguro, gracias a Passport tenemos a nuestra disposición multiples Strategies que nos permiten ahorrarnos mucho trabajo al implementar una solución eficiente de seguridad para cualquier sistema que desarrollemos.

Espero haber sido claro y ya saben si existen dudas pueden escribir en la publicación.

¡Pasen excelente noche!

Uncategorized

forEach no lo es todo

Muchos de nosotros utilizamos durante mucho tiempo cuando comenzamos a programar en Javascript los clásicos ciclos for, después con el paso del tiempo descubrimos la existencia de forEach para recorrer arrays y encontramos que su rendimiento era más eficiente. Sin embargo, existen dos métodos bastante útiles que solemos olvidar: every() y some().

Array.prototype.forEach

Supongamos que tenemos un objeto del tipo:

var obj = [1,2,3,4,5,6,7,34,9,10,20,10,8,5,23,40,21,9,0];

Y queremos encontrar el elemento 34 simplemente recorriendo todo el arreglo con forEach sería algo así:

obj.forEach(function(number){
  if(number==34){
    alert('Se encontró el número 34');
  }
});

Sin embargo, que pasa si queremos terminar de recorrer el resto del arreglo al encontrar al número, la solución no es tan sencilla ya que nuestro método forEach seguirá leyendo el arreglo hasta llegar a su fin.

obj.forEach(function(number){
  if(number==34){
    alert('Se encontró el número 34');
    return false; // No funcionará
    break;  // Esto tampoco
  }
});
// print = [1,2,3,4,5,6,7,34,9,10,20,10,8,5,23,40,21,9,0]

Array.prototipe.some()

Aquí es donde some entra en juego, el método some() permite recorrer un objeto y permite “romper el ciclo” enviando un parámetro de retorno diferente de falso y por el contrario el método every() termina de leer el arreglo cuando el retorno de la función es falso por lo que podemos hacer algo así:

obj.some(function(number){
  if(number==34){
    alert('Se encontró el número 34');
    return true;
  }
});
// print = [1,2,3,4,5,6,7,34]

Esto en algoritmos más complejos donde se quieren aprovechar los recursos al máximo es muy eficiente y más si se combina con métodos de ordenamiento.

Esto es en base a mi experiencia desarrollando sobre todo al renderizar infinidad de objetos utilizando HTML5 canvas. Espero compartan sus experiencias y conocimientos con nosotros.

¡Hasta la próxima!

NodeJS, Titanium Appacelerator, Titanium SDK

Build native mobile applications from Web Interface

Gracias a NodeJS y Titanium SDK logré programar un módulo que genera código, compila y genera una aplicación nativa para Android desde una interface Web.

De esta manera podemos lograr por ejemplo que un usuario pueda diseñar sus propias aplicaciones desde una interface Web sin necesidad de contar con conocimientos de programación, todo de forma automatizada. Imaginen las posibilidades de brindar al usuario un Front-End donde seleccioné su fondo, logotipo, y sus elementos que su app tendrá, algo similar al o que http://es.goodbarber.com realiza y en cuestión de segundos tendrá su app lista para ser enviada a las tiendas móviles para su aprobación y su posterior descarga.

A continuación dejo el experimento que hice funcionando a la perfección:


REQUISITOS

Para lograr esto necesitamos:

  • Instalar y configurar apropiadamente el CLI de Titanium SDK así como el de Alloy en caso de que nuestro proyecto lo utilice
  • NodeJS su última versión

SERVIDOR COMPILADOR

Y eso es todo, lo siguiente que requerimos crear un server.js que se encargué de compilar nuestra aplicación y generar el .APK a descargar para ello nuestro server.js será muy simple:


var sys = require('sys')
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) }
exec("titanium build --platform ios --project-dir /Users/Yamilquery1/Documents/Titanium_Studio_Workspace/appbuilder", puts);

Como podemos observar el código es muy sencillo, requiere importar syschild_process para poder acceder a los procesos del sistema en este caso invocamos el comando titanium build con sus respectivos parámetros incluyendo el directorio donde se encuentra nuestra aplicación móvil.


CONFIGURACION DE APLICACION DESDE INTERFACE

En la siguiente parte viene lo interesante, desde una interfaz Web podemos crear por decirlo un formulario con los parámetros de configuración de nuestra aplicación móvil, es decir, fondo de pantalla, módulos con los que contará, titulo, logotipo, etc.

Una vez que el usuario envíe el formulario por un método POST podemos crear una ruta que genere un archivo JSON dentro del directorio de nuestra aplicación móvil junto con las imágenes que han sido subidas en el previo formulario. De este modo es nuestra aplicación móvil lee dicho archivo de configuración JSON y toma las imágenes almacenadas en su directorio para ser compilada en un auténtica aplicación móvil nativa en cuestión de segundos.

Espero sus comentarios y si alguien se anima a ponerlo en marcha espero comparta por aquí sus experiencias.

¡Saludos!