Entradas

Mostrando entradas de 2012

El Muro de la Vergüenza

Antes que nada, disculpas a todos por no haber actualizado mi blog la última semana con la entrada sobre Arduino y la Raspberry PI. Como se imaginarán la última semana del año siempre es algo movida, sin embargo espero abrir el 2013 con la nueva entrada aprovechando que tengo algunos días libres del trabajo. Para cerrar el año, es traigo un pequeño "Muro de la Verguenza". Desde que dejé la Raspberry PI en línea (hace 7 días) con el puerto SSH abierto he tenido numerosos intentos de acceso no autorizados vía SSH. Realmente la RasPI no tiene nada interesante, sin embargo para un SPAMMER una máquina con acceso a Internet siempre es algo valioso. Ahora, es muy difícil que accedan a la RasPI si no es con un Exploit 0-Day ya que los logins de usuario/password están desactivados, sin embargo es divertido verlos intentar. Por eso les dejo "El Muro de La Vergüenza" en la siguiente dirección: Has Clic Aquí para abrir El Muro de La Verguenza La lista de accesos ...

DNS Dinámico en la Raspberry PI

Imagen
En entradas anteriores hablamos de como instalar un servidor web de manera sencilla en nuestra Raspberry PI , luego explicamos como armar un complicadísimo puente wireless y realizar la redirección de puertos en nuestro router para acceder a una página web. Sin embargo habrán notado que mi Raspberry PI es accesible desde la dirección raspi.teubi.co bajo este mismo dominio; En esta entrada les voy a explicar como pueden obtener un DNS dinámico utilizando servicios como los de no-ip.com y dyndns para poder actualizar dinámicamente la IP de su Raspberry PI o de cualquier server que tengan bajo una conexión con IP pública dinámica.

Haciendo un "puente wireless" para la Raspberry PI

Imagen
Si han estado revisando mi últimos videos, notarán como me toca trabajar literalmente "en la cocina". Sucede que junto a la cocina tenemos un pequeño comedor que es una mesita de vidrio templado que me parece maravillosa para trabajar con la Raspberry PI y el Arduino ya que tiene espacio y puedo estar cortando cosas sin miedo a rayar nada. El problema es que mi módem se encuentra en una sala de la casa que no tiene mucho espacio para trabajar así que necesitaba encontrar una forma de conectar la RasPI sin tener que sacar cableado UTP ya que primero no tengo y segundo tenía mucha pereza de comprar un dongle Wireless. Voy a explicar en esta entrada mi configuración de red por si a alguien es útil, aunque lo más probable es que termine comprando un dongle Wireless para la RasPI. Esta configuración les puede servir adicionalmente por si tienen un servidor web en otro segmento de red que no está conectado directamente al módem de Internet (en este caso mi RasPI).

Instalando Lighttpd+PHP 5+Sqlite en la RasPI

Para la serie de articulos de Arduino y Raspberry PI estaba pensando en hacer un pequeño dispositivo que se pudiera controlar vía Internet. Para ello necesito instalar un servidor web con soporte de PHP en el que pudiera programar una sencilla aplicación web. En esta corta entrada, les voy a guiar paso a paso para realizar la instalación de Lighttpd+PHP 5+Sqlite. Para ello solo van a necesitar su Raspberry PI, asegurarse de que está conectada a Internet y seguir estos sencillos pasos. Ojo, como no quiero simplemente darles una "receta de cocina" que diga "ejecuta estos comandos", intentaré comentar cada uno de los mismo, trataré de explicar que hace y para que sirve y espero que en el camino también aprendan algo de lo que están instalando en vez de seguir ciegamente los comandos que un extraño en Internet les ha dado.

Manejo de Interrupciones con Arduino

Imagen
El artículo anterior conectamos un simple display de 7 segmentos a nuestro Arduino y programamos un sencillo contador. Pero... ¿Qué tal si queremos interactuar con eventos externos? Una de las formas comunes de interactuar con cosas que suceden "fuera" de nuestro control es por ejemplo monitorear el estado de las líneas. Dentro de nuestro "loop" principal podemos leer continuamente el valor de una línea de entrada y ejecutar por medio de una condicional un código especifico en caso de que detectemos un cambio. El problema de este método es que el código se vuelve sumamente complejo cuando tenemos que monitorear muchas cosas o cuando nuestro loop principal simplemente tiene que hacer cosas que toman demasiado tiempo. En esta entrada vamos a comprender como utilizar las interrupciones externas del Arduino. Esto nos será de mucha utilidad para interactuar ya sea con el usuario o con otros dispositivos de hardware que emitan "señales" que nos permit...

Fabricando un contador simple con Arduino y un display de 7 segmentos

Imagen
Luego de la entrada sobre interconexión entre la Raspberry y el Arduino vía Serial , vamos a comenzar una serie de entradas donde construiremos distintos módulos que nos permitirán conocer las distintas funcionalidades básicas del Arduino. Luego de finalizar esta serie de artículos tendremos un pequeño módulo de pruebas que será capaz de realizar realizar algunas tareas interesantes: Desplegar información a traves de un display de 7 segmentos. Capturar eventos del usuario mediante pulsadores. Monitorear y controlar nuestro Arduino mediante la conexión serial que probamos previamente. Si bien los módulos pueden construirse por separado y prácticamente hemos cubierto la mitad del tercer punto, pensé que sería más interesante ir armando cada módulo paso a paso y luego poner todo en conjunto para ver como trabaja. En esta primera entrada vamos a hacer uso de las funciones digitalWrite para controlar un pequeño display de 7 segmentos conectado a nuestro Arduino Mega.

Conectando la Raspberry PI al Arduino vía Serial

Imagen
De bachiller, hace ya algunos años por cierto, estudié una opción técnica en electrónica. Esto fué así porque en algún momento de mi vida quise ser ingeniero electrónico (o algo que se le asemejara). Lástimosamente, esa rama de la ingeniería no tiene mucha demanda en mi país y la verdad al descubrir la computación me di cuenta que era algo en lo que no era nada malo, me gustaba bastante y actualmente es lo que me da de comer. Sin embargo, el pasar de los años no ha logrado hacer que pierda el cariño por la electrónica y esa magia especial que tiene el "inventar" o "armar" dispositivos que simplemente hagan cosas interesantes por muy pequeñas que sean. Actualmente, resulta muchísimo más facil el armado de prototipos para todos aquellos cuyo hobby o profesión sea la electrónica. En esta entrada vamos a conocer al Rasberry PI, luego al Arduino y vamos a conectarlos vía puerto serial. Al final, podrán usar esta configuración para conectar sus Arduinos (o cualquie...

Redimensionando Imágenes con PHP y GD

Una de las tareas más comunes a la hora de desarrollar aplicaciones web, es la de redimensionar las imágenes que envían los usuarios. PHP a través de la extensión GD, provee de una serie de funciones que nos facilitan este trabajo. En esta entrada explicaré un sencillo algoritmo para redimensionar manteniendo el aspecto, es decir redimensionar una imágen sin que esta se deforme. El problema: Imaginemos que ustedes han creado una super-aplicación que va a sacar a Flickr fuera de línea. Sin embargo todos sus usuarios están enviandoles fotografías de 10Mpx. ¿Como hacer para generar los thumbnails y versiones en distintos tamaños desde php? La siguiente función se encarga de redimensionar una imágen manteniendo el ancho y alto dentro de los límites especificados. Así si nuestra imagen original tiene 1600x1200 de tamaño y especificamos 800x800 en los parámetros la imagen redimensionada resultante tendrá 800x600. function resizeImage($originalImage,$toWidth,$toHeight){ /* Esta f...

Convirtiendo Gráficos Vectoriales (SVG) en PNG programáticamente

Imagen
Trabajando en unas cosas de la oficina me vi en la necesidad de desplegar la información de tendencias de precios en una página web; Sinceramente, no soy nada amigo de Flash, necesitaba algo estándar, que tuviera la posiblidad de agregar interactividad y que al mismo tiempo me permitiera trabajar directamente con los datos en vez de tener que hacer todo a mano. Buscando un poquito en google me topé con d3js - Data-Driven Documents . d3js es una biblioteca de Javascript que permite crear visualizaciones de datos de una manera un poco fuera de lo común usando Gráficos Vectoriales Redimensionables(SVG) . En esta entrada no pretendo explicar como usar d3js sino cómo resolver la siguiente pregunta que me hizo un usuario luego de ver las gráficas que había generado con esta herramienta: ¿Se puede descargar la gráfica?

¡Hello World! en Java (Estricto al paradigma OO)

Esta será una entrada super corta. Cuando uno aprende un lenguaje de programación uno de los primeros ejemplos que le dan es el famosísimo "Hello World!", Java en este aspecto no es la excepción. Sin embargo me encuentro con que el ejemplo mas sencillo realmente no es OO. public class SayHello { public static void main(String args[]) { System.out.println("Hello World!"); } }  ¿Muy lindo no? El problema es que no considera la orientación a objetos y es un simple ejemplo de programación estructurada al estilo de C. Comencemos por la función "main", esta es una simple convención. Todo programa tiene que tener un punto de entrada al iniciar su ejecución, se decidió para mantener la sintaxis similar a otros lenguajes que el punto de entrada de una clase Java fuera la función main junto con los parámetros de la linea de comandos que se guardan en el arreglo args[]. ¿Que tal si hacemos un SayHello? Realmente orientado a objetos. public cla...

Variando la intensidad de un LED en Arduino con PWM

Imagen
El día de ayer recibí mi Arduino Mega , esta es una pequeña tableta creada especialmente para hacer prototipos electrónicos. En lo personal me llamó mucho la atención porque es sumamente fácil de programar y utilizar. Si son de la gente que les encanta hacer proyectos electrónicos Arduino es una excelente solución. En esta entrada intentaré explicar una aplicación básica de Modulación del Ancho de Pulso (PWM) para el cambio de la intensidad de un LED.

Erician words

Imagen
For some reason I really liked this small problem from PSET5 from MITx 6.00x. Here is the problem definition: A word is considered erician if it contains the letters e , r , i , and c in it, in that order. For example, we would say that the following words are erician : "meritocracy", "generic", "derrick", "euphoric", "heretic", and "electric", because they each contain those four letters in the correct order. The word "rice" is not erician because the four letters appear in the wrong order. In this problem, we want you to write a more generalized function called x_ian(x, word) that returns True if all the letters of x are contained in word in the same order as they appear in x . This algorithm works merging the two strings together and comparing character by character to determine if "x" is contained within "word" . First o...

Sobre bloqueo de celulares y el libre mercado

Desde hace algunos días, se ha venido caldeando la discusión referente a la aprobación de una ley que obligue a las operadoras de servicios de telefonía celular vender los aparatos celulares desbloqueados, es decir, que puedan utilizarse con “chips” de cualquier compañía. Es difícil entender este tema sin entrar en muchos detalles técnicos, sin embargo hare algún intento por explicar como realmente los problemas que se mencionan para oponerse a esta ley se quedan pequeños comparados a las ganancias que obtendremos, en este caso un mercado muchísimo más competitivo.

git, Makefiles y versiones

Este día les traigo una entrada que es más que todo didáctica, esto lo digo porque estoy seguro que más de alguno va a decir: Mario, ¿No podías encontrar una forma más complicada de hacer esto?. Sin embargo para aquellos que utilizan git , esa entrada les podría servir como una muy breve introducción a algunas herramientas muy útiles en linux como lo son grep , cut y a la herramienta make que sirve para automatizar secuencias de comandos en general. El problema... Digamos que un día están trabajando su proyecto local y están haciendo sus commits con git . Cuando terminan de agregar nuevas características y su gran equipo de desarrollo de una sola persona (ustedes) está feliz y contento con el resultado, deciden empaquetarlo, quitar el versionado y hacer un archivo zip al estilo de MiSuperProyecto-v1.0.zip El problema es que si son perezosos como yo, no querrán estar cambiando el número de versión cada vez que hagan un nuevo cambio a su proyecto. ¿Qué tal si inventamos un poco ...

La Neutralidad de la Red y el Modelo de Servicios

¿Qué es la neutralidad de la red? No voy a entrar en detalles técnicos pero digamos simplemente que Internet es el medio de tranmisión de información (literalmente) más grande que existe en la actualidad. Es un conjunto de redes interconectadas que se encargan de transmitir información desde un punto A hasta un punto B.

Pro tip: Parse utiliza la configuración regional.

Imagen
Si algo puede salir mal... saldrá mal.     Murphy Murphy es un tipo del cual todos han escuchado y nadie nunca ha visto, algúnos tienen la teoría de que fué víctima de sus propias leyes. Si trabajan en informática me van a entender muy bien la siguiente anécdota: Imaginense en un viernes por la tarde, preparandose para salir de la oficina, su sistema que ha pasado en pruebas los últimos dos días funciona a la perfección en su maquina de pruebas y solo tienen que hacer la migración al servidor de producción.

Kate

Imagen
Jugando con Kate (Advertencia: no hay fotos de mujeres en este post) Tenía ya bastante tiempo de no usar Linux, más que todo porque el mi trabajo tengo mi alma vendida a Microsoft. Así que realmente había pasado mucho tiempo desconectado del Software Libre. Esta vez les comparto mi experiencia con Kate, un editor sumamente interesante que me encontré por accidente en mi Slackware.