martes, 17 de octubre de 2017

Laravel

¿Qué es Laravel?

Es un framework para aplicaciones web con una elegante sintaxis. Nos ofrece componentes no tan básicos para intenta eliminar cierta parte del desarrollo, facilitando las tareas más comunes que se utilizan en la mayoría de proyectos web, tales como la autenticación, enrutamiento, sesiones y caché. Es necesaria la versión 5.5 o superior de PHP. Y usaremos Composer para su instalación.

Laravel está construido para la última versión de PHP, aunque se puede usar a partir de la versión 5.5. Cuenta con algunos componentes para desarrollo, algunos ofrecen funciones básicas muy útiles como por ejemplo soporte para autenticación y una unidad de pruebas. Cuenta con ORM propio, llamado Eloquent. Usa el motor de plantillas Blade. Es bastante sencillo construir una API REST full. Tiene un sistema de rutas, las cuales hay que definir previamente. La instalación mediante Composer. Gran comunidad de desarrollo y buena documentación.

Laravel también cuenta con una comunidad considerable en español, aunque no tan grande porque no ha tenido mucho fomento en la comunidad de habla hispana.

Codeigniter vs Laravel Trends 
Laravel comienza a desplazar a CodeIgniter por mucho e inicia a tener mucha presencia en Europa y asia, un framework que comienza a tener una gran apertura.

Laravel tiene una instalación un poco más tediosa, por ejemplo, la necesidad de usar Composer para instalar Laravel es un pequeño atraso ante su competencia, puede ser un impedimento a la hora de usar Laravel en un hosting normal y corriente. Y una forma de programar un poco más estricta en cuanto al patrón MVC.

Por supuesto si estás empezando en el mundo del desarrollo web te aconsejo encarecidamente que empieces aprendiendo PHP y CodeIgniter pero si ya dominas el segundo y estas dispuesto a comenzar con algo más interesante. Continuemos.

Metodología

La principal metodología que debemos manejar para utilizar Laravel viene siendo la de MVC (Modelo Vista Controlador) ya que es la base del desarrollo en este framework y en muchos más. En donde también necesitamos comprender que todo inicia cuando definimos nuestras primeras rutas, que es en donde parte todo el desarrollo de Laravel.

Las rutas vienen siendo las URL de nuestro sistema, luego estas rutas se enlazan con nuestro Controlador. Y en nuestros controladores podemos enviar variables a nuestras Vistas y también podemos consultar nuestros Modelos que son los objetos que estan enlazados a nuestras tablas de nuestra base de datos.

mvc1

¿Tecnologías para comenzar a trabajar con Laravel?

  • Composer: es una herramienta para la gestión de las dependencias en PHP. Nos permite declarar las bibliotecas  que necesitaremos en nuestros proyectos y de cuales libreras depende y Composer nos ayudara a (instalar / actualizar) de una manera sencilla y practica.
  • Blade: es un motor de plantillas, Blade es simple pero potente y esta integrado ya en Laravel. A diferencia de otros motores de plantillas de PHP, Blade no restringe el uso de código PHP normal en sus vistas. De hecho, todas las vistas se compilan en código PHP simple y son guardados hasta que sean modificadas con esto no generar lentitud en la carga de tu aplicación utilizando Blade. Los archivos de vista de Blade utilizan la extensión de archivo .blade.php y normalmente se almacenan en el directorio Resources / views.
  • Artisan: es la interfaz en línea de comandos (shell) que se incluye con Laravel. Proporciona una serie de comandos útiles que nos ayudaran  mientras se construye su aplicación. Por ejemplo cuando queremos crear una tabla en nuestra base de datos se realizar con migraciones de Laravel (algo que veremos más adelante) y esto funciona por la vía de Artisan desde consola.
  • Configuración de variables de entorno: algo muy bueno de Laravel son sus variables de entorno ya que es útil tener diferentes valores de configuración basados en el entorno de la aplicación o sea en donde ejecuta la misma. Por ejemplo, es posible que desee utilizar un controlador de caché diferente en ambiente de desarrollo que en el de producción. Para que esto simple laravel utiliza la biblioteca DotEnv PHP. En una instalación nueva laravel, el directorio raíz de la aplicación contendrá un archivo .env.example. Si instala a través de laravel composer, este archivo automáticamente se cambiará el nombre a .env. De lo contrario, se debe cambiar el nombre del archivo de forma manual.
  • PHP namespaces: aunque cualquier codigo válido de PHP puede estar contenido dentro de un namespace, sólo los siguientes tipos de códigos se ven afectados por los espacios de nombres: clases, interfaces, funciones y constantes. Los namespaces se declaran usando la palabra clave namespace. Un archivo que contiene un namespace debe declarar el namespace en la parte superior del archivo antes de cualquier otro código – con una excepción: la palabra clave declare.
  • Json: JavaScript Object Notation, es un formato ligero de intercambio de datos. Leerlo y escribirlo es simple para humanos, mientras que para las máquinas es simple interpretarlo y generarlo.
  • Git: para una mejor explicación detallada sobre Git puedes verla aqui, Git es importante para Laravel ya que mucho de los desarrollos de distintas librerías las encontraras en repositorios con esta tecnología así que es importante conocerla a fondo. También puedes ver nuestra guía Como utilizar Git en un Hosting compartido en caso de que lo necesites.



martes, 21 de febrero de 2017

NodeJS primer package.json

Comenzando un nuevo proyecto

Cuando comenzamos un nuevo proyecto usando node.js es necesario crear un archivo llamado package.json. Éste es una especie de manifiesto que a su vez contiene el listado de todas las dependencias que usará tu proyecto.

La mejor manera de gestionar los paquetes instalados localmente es crear un archivo package.json, esto nos permite:
  1. Documentar los paquetes que usa nuestro proyecto.
  2. Especificar la versión del paquete específica que usará nuestro proyecto.
  3. Permite compartir nuestras dependencias con otros desarrolladores.
 Los requisitos mínimos para crear un package.json deben ser como mínimo nombre (mínusculas y sin espacios) y versión.

Existen dos formas para iniciar un package.json:

1. Crear  uno nuevo [ npm init ]



2. Cargar uno ya existente en caso que lo haya [ npm init --yes ]
 

Una vez definido el archivo package.json, podrás agregar en él las dependencias y agregar una lista de todo lo que necesites:
"dependencies": {
  "express": "*",
  "grunt": "*",
  "bower": "*"
}
De este modo quedara:

 
Ahora procedemos a instalar los paquetes listados en package.json y sus dependencias
npm install
Se generara un directorio que contendra todos los modulos de las dependencias y paquetes "node_modules"


Tambien se puede instalar paquetes individualmente con el siguiente comando:
npm install –-save nombre_paquete_nuevo
De igual forma desisntalarlos y borrarlos del package.json:
npm uninstall –-save nombre_paquete
Si quieres instalar algo una versión especifica del paquete:
npm install algunpaquete@1.1.0
O en su defecto instalar directamente desde un repositorio en git
npm install git://github.com/blured/mipaquete.git
Otra forma de instalar paquetes es haciéndolo de forma global. Ésta es comúnmente usada para paquetes que proveen funcionalidad desde la línea de comando como son grunt, bower, yeoman, entre otros.

Tomemos como ejemplo el paquete JSHint, el cual es un analizador de código JavaScript que nos permite mostrar puntos en el que tu código no cumpla unas determinadas reglas establecidas de “código limpio“. Para instalar el mismo globalmente, ejecutamos el comando install agregando el atributo –g y con privilegio root.
sudo npm install -g jshint 


Para conocer la ruta donde se almacenan todas estas librerías con ámbito global, podemos hacer uso del comando prefix y del marcador global -g, de la siguiente manera:
sudo npm install -g jshint 
NPM permite gestionar las dependencias de tus proyectos y las versiones que necesitas. Como es sabido, los proyectos de código abierto se mueven activamente y cambian frecuentemente de versión. El package.json puede ser configurado para controlar este tipo de cambios.

Los números de versión normalmente contienen 3 elementos:
  • Versión principal cuando rompe con funcionalidades anteriores, por ejemplo: 2.0.0
  • Versión menor con nuevas características que no rompen las existentes, por ejemplo: 1.1.0
  • Lanzamiento del parche con correcciones de errores y otros cambios menores, por ejemplo 1.0.1
Si no está seguro qué versión utilizar, agregue el comodín * y ejecute el comando npm update –save, el cual veremos más adelante en este tutorial.
npm update --save
Para ver todos los paquetes instalados localmente, utilice el comando ls y añada el atributo –l para una descripción breve. Para visualizar los paquetes instalados globalmente agregue el atributo –g.
npm ls -l
Para chequear qué paquete puede ser actualizado local y globalmente, ejecute lo siguiente:
npm outdated
npm outdated -g --depth=0
 Para llevar localmente un paquete a una versión mayor a la actual, ejecute lo siguiente:
npm update
 Para realizarlo globalmente, agregue el atributo -g




lunes, 20 de febrero de 2017

Qué es NPN y como funciona

¿Qué es?

NPM (node package manager) es el gestor de paquetes javascript, es el manejador de paquetes por defecto de NodeJS por excelencia. Gracias a él, tenemos casi cualquier librería disponible a tan solo una linea de comando de distancia, permitiéndonos utilizarla en cuestión de segundos.

Desde la versión 0.6.3 de Node.js npm es instalado automáticamente con el entorno. npm se ejecuta desde la linea de comandos y maneja las dependencias para una aplicación. Escrito enteramente en JavaScript  permite a los usuarios instalar aplicaciones NodeJS que se encuentran en el repositorio.

En los ultimas años javascript ha tomado gran importancia, pasando de ser utilizado solamente para simples validaciones de formularios del lado del cliente, a ser el responsable de la puesta en marcha de servidores con NodeJS y demás.

¿Cómo funciona? 

Esta una herramienta de línea de comandos que permite gestionar todas las dependencias de una aplicación hecha en NodeJS.

Cuando usamos NodeJS rápidamente tenemos que instalar módulos nuevos (librerías) ya que Node al ser un sistema fuertemente modular viene prácticamente vacío. Así que para la mayoría de las operaciones deberemos instalar módulos adicionales. Esta operación se realiza de forma muy sencilla con la herramienta NPM.

Es un poco distinto a otros gestores de paquetes que podemos conocer, porque los instala localmente en los proyectos. Es decir, al descargarse un módulo, se agrega a un proyecto local, que es el que lo tendrá disponible para incluir. Aunque también existe la posibilidad de instalar los paquetes de manera global en nuestro sistema.


viernes, 17 de febrero de 2017

Introducción al NodeJS

Muy bien, aquí escribiendo después de algún tiempo y a petición de un viejo amigo que requeria un poco de NodeJS y como funcionaba ya que la distancia nos ha alejado le dije que retomaria el blog para ayudarle un poco con sus problemas además que mis primeros post del año. De momento les explicare ¿Qué es? ¿Cómo funciona? ¿Para qué sirve?

En el transcurso de los días iremos viendo temas con pequeños ejemplos.

¿Qué es?

NodeJS es un entorno de ejecución para JavaScript construido con el motor de JavaScript V8 de Chrome. Node usa un modelo de operaciones E/S sin bloqueo y orientado a eventos, que lo hace liviano y eficiente esta tecnología es lo que permite trabajar con Javascript del lado del servidor. 

El ecosistema de paquetes NPM (node package manager) es el gestor de paquetes javascript de NodeJS por excelencia. (En la semana publicare una entrada de como funciona)

Node es un programa que puede hacer todo lo que hace Apache (con algunos módulos), pero que también puede hacer mucho más, al ser una plataforma JavaScript extensible desde la cual usted puede construir.

Tan importante como entender lo que Node es, tambien es importante entender lo que Node no es. Node no es simplemente un reemplazo de Apache que instantáneamente vaya a hacer más escalable su aplicación Web PHP. Eso no podría estar más lejos de la verdad. Node está creciendo extremadamente rápido, la comunidad se esta involucrando bastante y rapidamente tanto así que se está creando una gran cantidad de módulos y este crecimiento podría generar un amplio negocio muy pronto.

¿Cómo funciona?

El motor V8 de Javascript de Google está diseñado para correr en un navegador y ejecutar el código de Javascript de una forma extremadamente rápida esto permite ejecutar procesos desde el servidor abriendo un nuevo abanico de posibilidades en cuanto al mundo de desarrollo se refiere.


Node trabaja con un único hilo de ejecución que es el encargado de organizar todo el flujo de trabajo que se deba realizar. Node gestiona todas sus tareas de una forma asincrona para evitar que se pierda el número de tarea que va o si se bloquea por x o y razón no pierda el hilo.

Para poder trabajar de una forma óptima se delega todo el trabajo en un pool de threads. Este pool de threads esta construido con la librería libuv la cual dispone de su propio entorno multithread asíncrono. Por lo tanto Node.js envia todo el trabajo al pool.


Libuv realizará a través de alguno de sus threads el trabajo encomentado. Una vez que el trabajo haya sido completado libuv emitirá un evento que será recibido por Node.

Recibido el evento una función de callback se encargará de terminar de procesarlo. Por eso cuando trabajamos con Node practicamente toda la programación es asíncrona y se parece tanto a las clásicas llamadas AJAX.


A muchos programadores se les ha hecho creer que la programación orientada a objetos es el diseño perfecto de programación y que no deben usar nada más. Node utiliza lo que se conoce como modelo de programación orientado por eventos.

¿Para qué sirve?

Está extremadamente bien diseñado para situaciones en que usted esté esperando una gran cantidad de tráfico y donde la lógica del lado del servidor y el procesamiento requeridos, no sean necesariamente grandes antes de responder al cliente. 

Algunos ejemplos podrian ser:

Una API RESTful. Un servicio Web que proporcione una API RESTful toma algunos parámetros, los interpreta, arma una respuesta y descarga esa respuesta (usualmente una cantidad relativamente pequeña de texto) de vuelta al usuario. Esta es una situación ideal para Node, porque puede construirse para que maneje decenas de miles de conexiones. 
Tampoco requiere una gran cantidad de lógica y básicamente sólo busca valores de una base de datos y los reúne como una respuesta. Como la respuesta es una pequeña cantidad de texto y la solicitud entrante es una pequeña cantidad de texto, el volumen de tráfico no es alto, y una máquina probablemente puede manejar las demandas de API de incluso la API de la más ocupada de las empresas.

Fila de Twitter. Piense en una compañía como Twitter que recibe tweets y los escribe en una base de datos. Literalmente hay miles de tweets llegando cada segundo y la base de datos posiblemente no puede seguir el ritmo del número de escrituras necesarias durante los horarios pico de uso. Node se convierte en una pieza clave de la solución a este problema. 
Node puede manejar decenas de miles de tweets entrantes. Luego puede escribirlos rápida/fácilmente en un mecanismo de cola en memoria (memcached, por ejemplo), desde donde otro proceso separado puede escribirlos en la base de datos. El rol de Node en esto es reunir rápidamente el tweet y pasar esta información hacia otro proceso responsable de escribirlo.
Comparado con un servidor PHP normal que intente manejar escrituras en la base de datos misma, cada tweet podría causar una pequeña demora mientras se escribe en la base de datos, dado que el llamado de base de datos estaría bloqueando. Una máquina con este diseño sólo podría manejar 2.000 tweets entrantes por segundo, debido a la latencia de base de datos. A un millón de tweets por segundo, usted estaría hablando de 500 servidores. Node, en cambio, maneja cada conexión y no causa bloqueo, permitiéndole capturar tantos tweets como se le puedan arrojar. Una máquina nodo capaz de manejar 50.000 tweets por segundo, y usted estaría hablando de sólo 20 servidores. 

Estadísticas de videojuegos. Si usted alguna vez jugó un juego como Call of Duty on-line, algunas cosas le habrán llamado la atención inmediatamente cuando observó las estadísticas del juego, principalmente el hecho de que deben estar rastreando toneladas de información sobre el juego para poder producir tal nivel de estadísticas. Luego, multiplique esto por los millones de personas que lo juegan en cualquier momento, y tendrá una idea de la inmensa cantidad de información que se genera con bastante rapidez. Node es una buena solución para este escenario, porque puede capturar los datos que están generando los juegos, hacer un mínimo de consolidación con ellos y luego ponerlos en una fila para escribirlos en una base de datos. 
Parecería algo tonto dedicar todo un servidor a rastrear cuántas balas disparan las personas en los juegos, lo cual podría ser el límite útil si usted utilizara un servidor como Apache, pero parecería menos tonto si en lugar de ello usted pudiera dedicar un solo servidor a rastrear casi todas las estadísticas de un juego, como usted puede llegar a hacerlo con un servidor que ejecute Node.

miércoles, 20 de abril de 2016

Unity

Unity es un motor de juegos muy popular con una gran cantidad de recursos disponibles y a mi pensar la comunidad más activa de los ultimos tiempos. 

En este blog tratare de compartir mis habilidades básicas para desarrollar juegos 2D sencillos que yo hago por hobby pero pienso ir aplicando en nuevos proyectos. Les dare los conceptos básicos para que ustedes se pongan las pilas y con ayuda de la imaginación hagan cosas fantasticas.
  • Compartire los conceptos necesarios para el desarrollo de un programador en Unity:
    • Crear la escena principal de un juego
    • Agregar código que defina el comportamiento de los personajes
    • Reflejar el estado del juego en elementos de interfaz 
    • Publicar demo en la web
Necesitaremos tanto recursos gráficos como de audio así que comparto algunos sitios.

Graficos:
Sonidos:
Y aqui el link para descargar Unity http://unity3d.com/es/get-unity/download/archive
Estare publicando por semana información :D

viernes, 5 de febrero de 2016

Lectura ADC Raspberry Pi (GPIO) con un MCP3202 o MCP3008

No todo en la electronica son unos y ceros (1-0) tambien tenemos dispositivos, sensores, medicion de voltajes, corrientes que van desde el 0 en adelante. Desafortunadamente en la Raspberry Pi no hay un una entrada donde conectemos directamente algo analogo y no lo lea pero afortunadamente tenemos algo llamado SPI, lo cual nos permite la lectura de 2 puertos dentro GPIO en la Raspberry Pi para obetener datos análogos (CE0 y CE1).

Elementos de SPI

SCLK - Serial CLocK 
CE   - Chip Enable (Chip Select) (Dos puertos CE0 y CE1) 
MOSI - Master Out Slave In 
MISO - Master In Slave Out 

Sin embarho el SPI master driver esta deshabilitado por default en la raspberry, pero es muy fácil habilitarlo, solo tenemos que teclear una línea de código en la consola para quitarlo de la lista negra o bien hacerlo desde raspi-config.

Manual:

- sudo sed -i 's/blacklist spi\-bcm2708/\#blacklist spi-bcm2708/g' /etc/modprobe.d/raspi-blacklist.conf
- sudo reboot

Automático:

- sudo raspi-config

Una vez habilitado tenemos los siguientes pines del GPIO funcionales.

 MOSI P1-19, MISO P1-21, SCLK P1-23, CE0  P1-24 y CE1  P1-26

Ya tenemos habilitado el SPI, lo que para empezar a hacer pruebas necesitamos los siguiente:
  1. MCP3202 ó MCP3008
  2. Python y Python-dev
  3. Spidev 
Para instalar python python-dev realizar:
sudo apt-get install python-dev python






Para instalar spidev:

- git clone git://github.com/doceme/py-spidev
- cd py-spidev/
- sudo python setup.py install

Recordemos que el MCP3202 es un chip de 2 canales codificado a 12 bits por lo tanto vamos a estar leyendo valores de 0 - 4095 y el MCP3008 es un chip de 8  canales codificado  a 10 bits teniendo valores desde 0 - 1023. Eso se evalua en el código para la manipulación de datos. Los chips deben conectarse de la siguiente manera.

 
Rojo: V+
Negro: GND
Naranja: CLOCK
Amarillo: MOSI
Azul: MISO
Violeta: CE

Los canales es donde va a entrar la línea de lo que queremos medir y vamos a manipular tanto el canal como el puerto CE que deseamos medir mediante el siguiente script:

Para crear el script creamos un archivo con extensión .py

Con esto podemos a jugar con los numeros de los canales o de los CE para ver y entender el funcionamiento correcto.

Espero que les haya servido, realmente es una excelente herramienta para hacer medicion de sensores ya que por lo regular estos nos arrojan numeros que van de 0 en adelante.






lunes, 25 de enero de 2016

Setting locale failed Raspbian

Molesto mensaje de error de region, idioma, lenguaje y configuración de teclado en Raspbian a la hora de hacer instalciones.

Si tienes el siguiente problema con las propiedades locales:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory

locale: Cannot set  to default locale: No such file or directory

La solución es la siguiente, desde consola configura lo siguiente.  (en_US.UTF-8 lo puedes cambiar a tu preferencia)

$ export LANGUAGE=en_US.UTF-8
$ export LANG=en_US.UTF-8
$ export LC_ALL=en_US.UTF-8
$ sudo locale-gen en_US en_US.UTF-8 en_US en_US.UTF-8
$ sudo locale-gen en_US.UTF-8
$ sudo dpkg-reconfigure locales

Saludos.