Archivo de la categoría: Tecnología

La moda de los “smartwatch”

El pasado 9 de septiembre Apple presentó el Apple Watch y como siempre se han caracterizado por la innovación de sus productos no podían quedarse atrás en la ola de “smartwatches” que han sido presentados en los últimos meses top 5 smartwatches CES 2014.

El verdadero detonante de esta revolución fue el Pebble con una increíble campaña de kickstarter que inició el 10 de abril del 2012 con una meta de $100,000 que fue alcanzada el 18 de mayo y superada hasta llegar a la suma de $10,266,845. Básicamente es un reloj con pantalla E-Ink que se conecta por bluetooth a android o iphone y que mediante apps personalizadas que usan las capacidades del teléfono muestran información relevante, como el app de correr que muestra tiempo, distancia recorrida y velocidad usando el gps del teléfono. Para entenderlo mejor no hay como el video:

La idea de usar el poder de procesamiento del teléfono eliminaba muchas limitantes para un reloj de pulsera “inteligente”. El fenómeno smartwatch apenas iniciaba… Antes del pebble existieron otros productos similares que fracasaron por el “momento” de la tecnología disponible.

Ahora existen algunas compañías con productos terminados o con rumores de que trabajan en relojes inteligentes. Incluyen Acer, Apple, BlackBerry, Foxconn/Hon Hai, Google, LG, Microsoft, Qualcomm, Samsung, Sony, Toshiba, HP, HTC, Huawei, Motorola, Lenovo, Nokia.

Pebble Steel

  • pebble steelHasta 7 días de batería
  • Resistente al agua
  • E-Ink: se lee con claridad a la luz del día
  • Controles para música
  • Fitness tracking
  • Notificaciones

$249
pebble steel

 

 

 

Moto 360

Moto 360 - smart watch

  • Actualizaciones automáticas: muestra info durante el día basado en la ubicación como clima, vuelos, tráfico.
  • Comandos de voz
  • Podómetro y medidor de ritmo cardíaco
  • Recarga inalámbrica

$249.99
moto 360

 

Samsung gear 2

Samsung gear 2

  •  Pantalla Super AMOLED
  • Cámara de 2 megapixeles
  • Resistente al polvo y al agua
  • Funciones de control remoto para el televisor
  • Podómetro y medidor de ritmo cardíaco

$199
samsung gear 2

 

Apple Watch

Apple Watch

  • Retina Display
  • Sistema operativo iOS
  • Tres ediciones: Watch, Watch Sport y Watch Edition
  • Acelerómetro y medidor de ritmo cardíaco

$349
apple watch

 

 

Inclusive Google ha presentado Android Wear, su versión de android para “wearables”, es el sistema operativo que utiliza el Moto 360.

Flutter Wireless – Arduino y Radio Frecuencia hecho fácil

Hacer proyectos con arduino es sencillo, pero a mi personalmente siempre se me ocurre enviar toda la información de los sensores a un servidor cada minuto para luego desplegar en un página web una gráfica con los datos.

Lo difícil de hacer eso es sacar la información del arduino y llevarla al servidor. Ethernet, WiFi, Bluetooth, Radio Frecuencia, todas son opciones válidas pero algunas son más costosas que otras. Por ejemplo, el shield de arduino para ethernet es más costoso que una placa Arduino UNO. Por otro lado, la opción más barata, radio frecuencia, es la que requiere mayor complejidad en la implementación porque al final solo tienes señalas de RF en el aire que deben ser captadas por el receptor en la frecuencia y momento apropiada, mucho enredo.

Flutter Wireless es un proyecto opensource que ofrece el precio económico de la radio frecuencia con la facilidad y “seguridad” del Ethernet. Es un dispositivo arduino que incorpora encriptación y un protocolo para enviar y recibir datos. Se explica mejor en el video:

Lo único malo que tiene es que su lanzamiento será hasta abril del 2014 por lo que toca esperar.

Para más información sobre Flutter Wireless ir a su sitio web.

Midiendo temperatura y humedad con arduino

Hace tiempo que tenía esta guía pendiente. En la oficina configuré un arduino UNO con un sensor de humedad y temperatura RHT03 para responder a la pregunta ¿por qué tengo tanto calor en este momento?

Materiales

  • Arduino UNO
  • Sensor RHT03, también conocido como DHT-22

    Sensor humedad y temperatura
    Sensor humedad y temperatura
  • 6 cables para conexiones
  • Resistencia 4.7K
  • Protoboard

Conexión

El sensor tiene 4 pines. Visto de frente, de izquierda a derecha

  1. VCC (3 a 5V)
  2. Salida de datos
  3. No usar
  4. GND

Por lo que la conexión es sencilla:

  • VCC a 5V del arduino.
  • GND a GND
  • Salida de datos al pin digital 7 en este caso, puede usarse otro pin.
  • Conectar además la resistencia de “Salida de datos” a VCC

Código

Para leer los valores del sensor se requiere una librería. En mi caso utilicé la que sirve para DHT-11 y DHT-22 que se encuentra al final de DHTLib

Instalar la librería

Se crea una nueva carpeta en el directorio de libraries de arduino /usr/share/arduino/libraries en mi caso. Se copian los archivos dht.h y dht.cpp en el directorio.

Sketch

El programa lee la salida del sensor cada 10 segundos. La frecuencia mínima de lectura es de 2 segundos para los sensores DHT. En el loop se despliega el resultado de temperatura y humedad que se obtuvo del sensor.

Para ver el resultado yo utilizo screen que muestra la salida del serial de arduino.

$screen /dev/ttyACM0 115200
captura pantalla temperatura y humedad con arduino dht
captura pantalla temperatura y humedad con arduino dht

Cualquier duda o comentario son bienvenidos.

Openvz sin bash history al usar vzctl enter

OpenVZ Linux Containers logo
OpenVZ Linux Containers

Todos los comandos que se ejecutan en la terminal de un container al ingresar mediante vzctl enter terminan en /dev/null por lo que no es posible encontrarlos luego en el history. Para solucionarlo agrega al archivo ~/.bash_profile

HISTFILE=~/.bash_history

Esto va a corregir la variable HISTFILE cada vez que se ingresa a un container mediante vzctl enter

Las herramientas de software que usan tus redes sociales favoritas | Facebook

Cada vez que iniciamos un nuevo proyecto de software nos preguntamos que herramientas usar para asegurarnos que sea exitoso. Las redes sociales más populares del momento tienen mucho en común, además de millones de usuarios, son adictivas para muchos y ciertamente exitosas, algo que no tienen en común es el conjunto de tecnologías que utilizan.

A continuación, la primera parte de un recorrido por algunos de los lenguajes, frameworks y software de servidores que se usan para mantener corriendo los sitios de redes sociales que usamos a diario.

Facebook

Iniciemos por el gigante de las redes sociales Facebook. Antes de entrar en detalle debemos recordar que Mark Zuckerberg comenzó a desarrollar facebook en enero del 2004, que para efectos de tecnologías y frameworks, muchas cosas han cambiado.

PHP, Memcache y MySQL

Lenguaje de programación PHP, o será C++? la verdad, el código está escrito en PHP pero se ejecuta el resultado de compilar C++. La base de datos es la que los geeks amamos (un poco menos luego de que la adquiriera Oracle), principalmente por su velocidad. Para manejar objetos distribuidos en memoria y mejorar el rendimiento incluyen Memcached a la fórmula.

Al respecto de MySQL, no utilizan nunca un join en producción por dos razones, consumen mucho CPU y la información está distribuida.

Referencias

HipHop for PHP

PHP no es lo más rápido del planeta, aunque algunos piensen que es la pomada canaria del software en la actualidadEn Facebook para poder incrementar el rendimiento de PHP, en lugar de escribir las funciones críticas en C++ como extensiones de php y para asegurarse de mantener el código altamente accesible a los ingenieros (PHP es realmente fácil de aprender, en comparación con C++) decidieron entonces crear una herramienta que reescribiera el código PHP a C++.

El proceso de pasar de PHP a C++ requería compilar el código usando gcc y con esto se perdía la capacidad de programar -> ejecutar que se tiene con PHP. Por lo que HipHop evolucionó de manera que el código lo convierte a bytecode ejecutado en una máquina virtual.

Para mejorar aún más el rendimiento, el bytecode se transforma a lenguaje máquina nativo.

Referencia

 Varnish

Además de usar memcache para mejorar la respuesta de la base de datos, utilizan Varnish. Es un acelerador de aplicación web o  acelerador de HTTP con balance de carga, soporte de Gzip, entre otras características. En Facebook se utiliza principalmente para las fotografías.

Referencia

Hackathons

hackathon en facebook

Facebook además de hacer un uso exhaustivo de herramientas de software libre, y de contribuir a ellas, mantiene una cultura de hackathons que usa para desarrollar nuevas funcionalidades para los usuarios. Cosas como el chat de facebook o el link de eventos en tu perfil se han desarrollado durante un hackathon.

Para conocer la lista completa de herramientas para desarrolladores y del software que utiliza la red social Facebook, visita https://developers.facebook.com/opensource/

¿Cuál lenguaje de programación debo usar para mi sitio o aplicación web?

En el sitio de The CTO Network encontré un diagrama interesante sobre como escoger la tecnología necesaria para tu nuevo empredimiento web. Algunas recomendaciones son algo obvias, si vas a hacer un app móvil para android ocupas java y para iOS ocupas Objetive C. Pero es algo más claro para sitios web, si es un blog wordpress o tumblr, si es estático, si vas a vender en línea, si vas a hacer el próximo Amazon, en fin, les dejo la gráfica.

diagrama para escoger el lenguaje de programación a usar para sitio o aplicación web

Usando el servidor web nginx

Recientemente cambié el hosting del sitio web de un shared hosting a un VPS. La verdad no tenía intensiones de pagar una alta suma de dinero, lo que significa que la opción de VPS debía tener una cantidad relativamente baja de RAM, en mi caso 512Mb que aunque suene poco con los costos actuales de los módulos de memoria, es suficiente para mantener funcionando un servidor web, con su respectiva base de datos y algunos servicios adicionales. Si usas LAMP los procesos que consumen más memoria son mysql y apache2. Adicionalmente apache utiliza MPM prefork para php. Prefork es la mejor solución para aislar cada petición que se realiza al servidor web brindando más estabilidad. Pero al mismo tiempo, al crearse una copia del proceso padre se duplica el uso de memoria y es común que se usen varios procesos hijos precargados para mejorar la respuesta del servidor. Esto me conduce al propósito de este artículo…

Migrando apache al servidor web nginx

El VPS corre Ubuntu Server por lo que el proceso de configuración aplica para Ubuntu.

Instalar nginx

La instalación es tan sencilla como ejecutar el siguiente comando

sudo apt-get install nginx

Nginx y php

Para que funcione con php necesitamos una interfaz FastCGI, para esto instalamos php5 FPM server. En apache, mod_php maneja las peticiones de php, lo que hace esencialmente es cargar todo php y las bibliotecas requeridas por cada petición de alguna página php. PHP-FPM funciona como un servidor web de php y se mantiene corriendo permanentemente por lo que no se recarga con cada petición.

sudo apt-get install php5-fpm

Por defecto, PHP-FPM está configurado para usar sockets TCP en lugar de sockets UNIX, para obtener mejores resultados es preferible utilizarlo con socket UNIX. Esto se hace editando el archivo /etc/php5/fpm/pool.d/www.conf

Se incluyen algunas otras variaciones a la configuración ya que para utilizar sockets UNIX basta con la primera línea.

listen = /var/run/php5-fpm.sock
listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
user = www-data
group = www-data
pm = static
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500

Luego en el archivo de configuración de nginx que se encuentra en /etc/nginx/nginx.conf agregamos dentro de la sección http lo siguiente

upstream php {
        	server unix:/var/run/php5-fpm.sock;
	}

Reiniciar servicios PHP-FPM Y NGINX

Para hacer efectivos los cambios en la configuración se reinician los servicios modificados

sudo service php5-fpm restart
sudo service nginx restart

Es probable que debas detener apache porque ambos servidores trataran de usar el puerto 80.

Hecho esto solo queda probar la configuración. Esto lo hacemos utilizando alguna otra aplicación web que tengamos corriendo con apache o cualquier sitio que requiera apache y php. Lo vamos a probar configurando un host virtual con wordpress.

Configuración de servidor virtual nginx para wordpress

En nginx es posible hacer esto de manera similar a apache, hay un directorio sites-available para los sitios disponibles y otro llamado sites-enabled para los habilitados. Se puede crear entonces un archivo en /etc/nginx/sites-available/wordpress que contendrá la configuración necesaria.

server {
        ## Your website name goes here.
        server_name localhost;
        ## Your only path reference.
        root /var/www/wordpress;
        ## This should be in your http block and if it is, it's not needed here.
        index index.php;
 
	access_log /var/www/wordpress/access.log;
	error_log /var/www/wordpress/error.log;
 
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
 
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }
 
        location / {
                # This is cool because no php is touched for static content. 
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?$args;
        }
 
        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi_params;
                fastcgi_intercept_errors on;
                fastcgi_pass php;
        }
 
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Algunas lineas se explican por si mismas pero vamos a analizar las mas relevantes

server_name

Es la forma de definir servidores virtuales, de esta manera el mismo servidor nginx puede albergar múltiples dominios. Indicamos un nombre estático, un dominio dominio.com o un subdominio sitio.dominio.com

root

La ruta en el directorio de archivos donde se encuentra el sitio

access_log y error_log

Nginx mantiene archivos de bitácora para accesos y para errores. Por defecto, en la dirección /var/log/nginx encuentras las bitácoras de todo el servidor, lo que quiere decir que guarda accesos y errores de cada sitio virtual. Agregando esas directrices en la configuración del sitio virtual del ejemplo se logra que el servidor guarde archivos separados de bitácora para este sitio en la dirección que se especifique.

location

Location aparece varias veces y esto es porque permite distintas configuraciones basado en el URI. Pueden ser strings literales o expresiones regulares. En el ejemplo se usa para cosas como evitar agregar a bitácoras las peticiones del favicon.ico, indicar cuando expiran los archivos estáticos y como deben manejarse los archivos de php.

Al final del proceso contamos con un servidor web nginx configurado para usar php5-fpm que a su vez funciona con sockets UNIX para un mejor rendimiento y una reducción en el uso de memoria RAM de nuestro servidor.

Referencias