Guillermo Heizenreder: Lesionado

El jueves por la noche tuve un partido con algunos compañeros del laburo y otros amigos de ellos que laburan en el Banco de Córdoba en una cancha que supuestamente era para jugar 5 contra 5. Pero era muy chica, de tierra… con partes muy rústicas por decir de una manera…

La cuestión es que entrando la última parte del partido tuve un choque con Gustavo al luchar por un balón en alto, con la mala pata que con uno de sus tapones me enganchó la costura de mi esqueta zapallita, y con el mismo movimiento después de sentir un “crash” comenzé a sentir cómo la uña del segundo dedo de mi pie derecho comenzaba a desprenderse…

No pude jugar más… el dolor era terrible. Luego de llegar a casa, bañarme  y desinfestarme como debia me tome un calmante y me fui a la cama a ver que pasaba, la cuestión que dormi entrecortado y al otro día (por ayer) me fui a trabajar, lo que me costo calzarme las zapatillas… durante el dia sentia que se me inflamaba el dedo (despues de pegarme contra la perde sin querer agrr!) y de a rato me daban puntadas de dolor y ardor, asique a la salida me fui derecho al Hopital de Clínicas.

Al llegar ahí (la primera vez que iba) le pregunté a un cana dónde era la Guardia y con toda la mala onda, me contestó. Fuí hasta ahi despues de caminar por miles de pasillos, al presentarme con la secretaria y exponer mi caso me dice:

No te podemos atender, volvé mañana, estamos viendo urgencias de Pami hoy solamente…. usted me ve cara de jovén, si ni pelo tengo … le dije… y qué pasa con este dedo que esta que explota ?.

Volvé mañana a partir de las 8:30, insistió.

A dónde iba? esa era la pregunta del millón… la llamé a mi novia y me dijo andá al Rawson ya!, encima el dedo parecian dos… de la inflamación y la uña que estaba a punto caramelo.

Al llegar ahi me anuncié con la secretaria, la cual tenia toda la onda. Me senti muy cómodo en la sala de espera… no pasaron ni 15′ minutos que me llamaron, me vio un médico que era afable en el trato y que la revisión comenzó con un chiste: quebraste el árbol al que le pegaste?, cuak!

La cuestión es que llamaron a un infectóloga para que me examinara también, y segun ellos la inflamación era solo del traumatismo, que me mandaban antibióticos por las dudas, para evitar un infección, calmantes para el dolor y algo mas para no se qué. La cuestión que la uña se me iba a caer sola, o iba a ir creciendo y elminando el mismo cuerpo la parte fea.

Al finalizar les dije: pero no es necesario una placa? porque yo veo muy hinchado a ese dedo (parecia un fósforo) y con las puntadas que me da veo estrellas.

Me sacaron la radiografía para que me quedara tranquilo, al ver estaba todo en su normalidad no paso a mayores y que en la medida que pasara el tiempo el dedo iba a volver a tu tamaño normal.

Cerrando el tema, quiero agradecer a todo el equipo que me atendió, y felicitar al personal que ahí se desempeña, porque para ser sincero nunca vi un Hospital Público que esté en tan buenas condiciones.

Se los recomiendo por cualquier Urgencia que tengan.


Juan Pedro Fisanotti: PyConAr 2010

Y pasó la PyConAr 2010!


La verdad que fue algo muy, muy bueno, desde varios puntos de vista:



Por el lado técnico fué genial aprender muchas cosas de parte de personas que tienen tantos conocimientos. El capital intelectual desplegado en la conferencia fue impresionante.
Desde profundizar en conceptos avanzados como los expuestos en la charla sobre tipado de Daniel Moisset, hasta comprender cosas que debería haber aprendido bastante antes, como unicode (Facu Batista).
La lista de cosas aprendidas sigue con docutils, empaquetado para windows, pymaemo, pygtk, los módulos de roberto, y unas cuantas más.
Y también me gustó y sirvió poder aportar mi pequeño grano de arena, con la charla de Django que espero haya salido bien :)

La verdad que con solo eso la conferencia ya valía la pena.



Pero también está el lado "comunitario", y en eso se sintió muy bien ser parte de una movida fuerte como es la de PyAr.
Esta bueno ver tanta gente comprometida por la difusión y evolución de una tecnología, al punto de regalar horas de trabajo, viajar desde lejos, compartir lo que conocen e incluso aportar económicamente a la causa, convencidos de que lo que tienen es algo que vale la pena difundir.
Viniendo de un pasado no tan lejano de estar metido en otras tecnologías (Microsoft, .Net, etc), todavía me sorprende lo que se logra con una comunidad sin estructuras jerárquicas, títulos oficiales, ni empresas que la banquen.



Y finalmente esta lo humano, el contacto de uno a uno.
Lo compartido en los momentos más informales, como el asado o la salida del sábado, es impagable. Conversaciones y debates con gente que además de ser profesionales tienen calidad humana. Gente que no tiene problemas en compartir una solución a un problema, conocimientos, consejos, junto con bromas, buena onda, y una cerveza de por medio :) (aunque yo no tome, igual me parece genial, jaja).



Así que gracias a todos los que de alguna manera ayudaron a hacer esta PyCon.
Espero ya al próximo evento, y ahora de vuelta al trajín diario, que por suerte este tiempo tiene bastante de Python en el medio (en la facu, en el trabajo fijo, y en el trabajo freelance, weeee! tengo suerte).

Guillermo Heizenreder: Feria del Libro

Desde el 01 de Agosto estoy viviendo en la ciudad de Córdoba, ciudad que me vio nacer y ahora esta comenzando a verme crecer profesionalmente. Vamos a ver si le saco las telas de arañas a este espacio para ir comentando mis actividades.

empecemos por las nuevas adquisiciones de libros, los cuales en una recorrida por la Feria del Libro pude obtener, algunos son clásicos y otros simples ediciones no buscadas, pero sí deseadas.

paul rusesabagina Mientras su país sucumbía a la violencia del genocidio ruandés de 1994. el director de hotel Paul  Rusesabagina se negó. a doblegarse a la locura que le rodeaba. Así pues. plantó cara a los asesinos con una combinación de diplomacia. adulación y embuste y dio cobijo a más de 1.200 tutsis y hutus moderados en unos momentos en que imperaban los escuadrones de la muerte y sus machetes.Esta obra ahonda en aspectos que la película. Hotel Ruanda no pudo tratar: la personal perspectiva de un hombre que se convirtió en una de las caras más conocidas y destacadas de aquel terrible conflicto. Rusesabagina cuenta por primera vez la historia de su vida: hijo de un matrimonio mixto de campesinos […]

Hay un párrafo que quiero transcribir para dar a conocer el “comienzo” de semejante locura: ¿Cuál es la causa de todo aquello? Muy sencillo, las palabras. A los padres de estas personas les habían dicho y repetido que eran más feos y más tontos que los tutsis. Les habían dicho que físicamente nunca serían tan atractivos ni tan capaces de regir los destinos del país.

Las palabras… cuánto hieren, cuánto lastiman… dagas surgidas desde los corazones llenos de odio. Capaces de generar que hermanos de una nación se vuelvan en contra con tanta atrocidad.

Tanto el libro como la película son recomendables.

Más información aquí

Richard O’BaTras la sonrisa del delfinrry era el entrenador del famoso delfín Flipper. Lo tenía todo: dinero, mujeres hermosas, coches caros… Pero estas cosas no fueren suficientes para acallar la voz de conciencia. Se dio cuenta de que los delfines son tan dóciles porque son inteligentes, y que mantenerlos en cautividad es un acto cruel. O’Barry fue arrestado varias veces cuando intentaba liberar a un delfín, pero esto no lo detuvo, y ahora dedica su vida a luchar por la libertad de estos hermosos mamíferos en todo el mundo.

Creador también del documental ganador de un Óscar The Cove, el cual es desgarrador, el cual muestra cómo es la destrucción sistemática de este maravilloso mamífero, pero también del hábitat oceánico.

Más información aquí.

Es una historia de amor entre el hombre y los delfines. Tanto el libro como el documental son recomendables.

A Sangre Fría El 15 de noviembre de 1959, en un pueblecito de Kansas, los cuatro miembros de la familia Clutter fueron salvajemente asesinados en su casa. Los crímenes eran, aparentemente, inmotivados, y no se encontraron claves que permitieran identificar a los asesinos. Cinco años después, Dick Hickcock y Perry Smith fueron ahorcados como culpables de las muertes. A partir de estos hechos, y tras realizar largas y minuciosas investigaciones con los protagonistas reales de la historia, Truman Capote dio un vuelco a su carrera de narrador y escribió “A sangre fría”, la novela que le consagró definitivamente como uno de los grandes de la literatura norteamericana del siglo xx[…]

Un crimen descuidado, visceral, terrible y difícil de digerir; no así la escritura de Capote que en una escritura fluida, minuciosamente describe los hechos sucedidos.

Recomendable.

Más información: aquí

Shinju Cuando la bella y rica dama Yukiko y el artista de humilde cuna Noriyoshi son encontrados ahogados juntos en un shinju, o suicidio ritual por amor, todos creen que el culpable es un amor prohibido. Todos salvo el recientemente nombrado yoriki Sano Ichiro. Como samurái, Sano debe obedecer o, por el contrario, deshonrar a su padre. Pero la búsqueda de la justicia le impulsa a arriesgarlo todo por descubrir la verdad.

Parece un libro interesante, siempre me gustó la cultura de los Samurai, eh leído a Takashi Matsuoka entre otros. Después les cuento como se desarrolla ésta historia. De la misma autora, hay un libro llamado Loto Negro que siempre me recomendaron pero nunca pude obtener a un precio accesible.

Más información: aquí

 

Este es un E-Book que leí hace más de un año, habla sobre las conductas y la ética seguida por los hackers reales.

El libro es interesante, menciona varias puntos llamativos, como la relación de la utilización del tiempo con el dinero y el uso del dinero como motivación.

Nunca imagine que lo iba a poder conseguir, y era el único ejemplar! estaba escondido debajo de una de las mesas con saldos a $10, que loco no?.

Recomendale.


Joaquin Sorianello: Puertos Serie Virtuales en Gnu/Linux

Hoy estaba preparando mi charla para la PyCon2010 y me vi con la necesidad de crear puertos serie virtuales, para unos ejemplos que quiero dar...

La solución fue utilizar socat:

"Socat  is a command line based utility that establishes two bidirectional byte streams and transfers data between them. Because the streams can be constructed from
       a large set of different types of data sinks and sources (see address types), and because lots of address options may be applied to the streams, socat can be  used
       for many different purposes."


La linea en cuestión:

joac@pepino ~ $ socat PTY,link=vserial1 PTY,link=vserial2


Despues, desde pyserial, por ejemplo nos conectamos con:

import serial

ser = serial.Serial("/home/joac/vserial1")

Joaquin Sorianello: Grupos vs Individuos


Ahora que empezó la primavera, y el sol pega directo en la ventana de mi pieza, ayudándome notablemente a despertar, voy a tratar de resucitar mi blog.

Grupos vs Individuos

Me gusta programar, me gustan los desafíos, y me gusta aprender cosas nuevas. Tengo una especie de lema que dice "Si lo hizo un ser humano entonces puedo entender como esta echo", quizás demasiado abarcativo (notar que dije puedo entender). Esto es un arma de doble filo, por un lado, porque aprendo cosas nuevas, pero por el otro, desvaloriza los conocimientos de los demás.

Desde que trabajo en gcoop (ver posts anteriores) no trabajo mas solo, trabajo con un grupo. Este es un fuerte cambio en el paradigma que traigo desde (el autor no logra recordar, quizás se remonte a estados fetales pre-parto), y me hizo reflexionar bastante sobre esta forma de encarar los problemas.

Cuando uno trabaja solo, la comunicación sobre las tareas es básicamente con uno mismo. Pero cuando uno trabaja en grupo, la comunicación es distinta (Pensaba hacer una analogía con una Red pero es muy de ñoño), la toma de decisiones tiene mas posturas, y es ahí donde esta la verdadera riqueza.

Creo, que no existen dos personas que piensen parecido, todos tenemos nuestras propias estructuras mentales, y reaccionamos de distintas formas, a veces muy sutiles, frente a los estímulos externos. Es común que se encuentren diferentes formas de resolver un mismo problema.

Pero no todo es color de rosa...

Creo que uno de los principales problemas mundiales, después de los realmente importantes (como que miles de niños muren de hambre día a día), es la falta de comunicación.

Y en los grupos pequeños también pasa.

Quizás la cuestión importante es que desarrollar software no es solamente uno con las manos sobre el teclado, sino, que requiere de comunicación en su mayor parte.

(Este post va a ser editado, es un boceto)

Andrés Gattinoni: Nginx como Proxy Reverso en servidor Directadmin

Apache

Apache

En esta oportunidad voy a explicar cómo instalar Nginx como proxy reverso en un servidor de hosting con Directadmin.

¿Qué es un proxy reverso?

Un proxy reverso en este caso es, básicamente, un servidor web que se interpone como una capa entre el cliente y un backend, de manera de optimizar la conexión. Típicamente el proxy es un servidor muy liviano que funciona de frontend, atiende las peticiones de los clientes HTTP y deriva el procesamiento en un backend que podría ser un servidor Apache. Según la configuración que apliquemos, un proxy nos permite introducir mayor seguridad en nuestra red, hacer balanceo de carga, hacer cache, etc.

También optimiza el manejo de memoria. Pensemos que Apache lanza un thread o proceso por cada nuevo cliente, el cual se cierra recién cuando termina la transferencia de datos. Si el cliente tiene una conexión lenta, por más que Apache funcione rápido, el proceso queda corriendo hasta que se terminen de enviar los datos. Un frontend liviano como Nginx nos permite que el proceso que espere al cliente sea mucho más liviano que uno de Apache.

Por último, como indican en sysadmin.es, un proxy Nginx nos sirve para prevenir ataques de denegación de servicio utilizando slowloris.

Un proxy reverso en un servidor de hosting

Nginx

Nginx

Los proxies se suelen utilizar en arquitecturas para servir sitios de alta demanda. En esos casos es común, por ejemplo, hacer que Apache sirva el contenido dinámico y un servidor más liviano (lighttpd o nginx) sirva contenido estático. Pero en un servidor de hosting esto no es tan sencillo, pues al alojarse varios sitios en un mismo equipo nuestra configuración debe ser lo más genérica posible para que sirva a la mayor parte de nuestros clientes. Como veremos, podemos definir algún tipo de cache, pero también tiene que ser bastante genérico para no causar problemas. Además tenemos que pensar en la integración con el panel de control que estemos usando. Yo uso Directadmin y este panel no tiene (aún) una integración nativa con otro web server que no sea Apache.

Nginx + Apache + Directadmin

La opción que les presento es para utilizar Nginx como proxy reverso, manejando las conexiones de los clientes y haciendo un muy básico cache del contenido estático. La guía está pensada para CentOS, pero en otros sistemas operativos no debería ser muy distinto.

Primero instalamos Nginx. El proceso es muy sencillo.

# cd /usr/src
# wget http://nginx.org/download/nginx-0.7.67.tar.gz
# tar zxvf nginx-0.7.67.tar.gz
# cd nginx-0.7.67
# ./configure --prefix=/usr \
              --conf-path=/etc/nginx/nginx.conf \
              --error-log-path=/var/log/nginx/error.log \
              --http-log-path=/var/log/nginx/access.log \
              --pid-path=/var/run/nginx/nginx.pid \
              --lock-path=/var/run/nginx/nginx.lock \
              --with-http_stub_status_module \
              --with-openssl=/usr/lib/openssl
# make && make install

Creamos el directorio para guardar el cache de contenido estático:

# mkdir -p /var/tmp/nginx
# chown apache:apache /var/tmp/nginx

Lo más importante es configurar Nginx. Para ello modificaremos /etc/nginx/nginx.conf para que quede algo similar a esto:

Importante: reemplazar __SERVER_IP__ por la IP del servidor y __SERVER_HOSTNAME__ por el nombre del servidor.

user  apache;
worker_processes  1;

events {
    worker_connections  8192;
}

http {
    server_tokens off;

    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  75 20;

    gzip  on;

    server_names_hash_bucket_size 64;
    reset_timedout_connection on;

    client_max_body_size 100m;

    # Main cache data
    proxy_cache_path  /var/tmp/nginx/cache  levels=1:2   keys_zone=staticfilecache:180m  max_size=500m;
    proxy_temp_path /var/tmp/nginx/proxy;
    proxy_connect_timeout 30;
    proxy_read_timeout 120;
    proxy_send_timeout 120;
    proxy_cache_key "$scheme$host$request_uri";

    server {
        listen       __SERVER_IP__:81;
        server_name  __SERVER_HOSTNAME__ _;

        #charset koi8-r;
        charset off;

        access_log off;
        #access_log  /var/log/nginx/access.log  main;

        # Main reverse proxy for most requests
        location / {
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                    proxy_pass              http://__SERVER_IP__;    # apache here

                    client_max_body_size       16m;
                    client_body_buffer_size    128k;

                    #proxy_buffering     off;
                    proxy_buffering     on;

                    proxy_connect_timeout      90;
                    proxy_send_timeout         90;
                    proxy_read_timeout         120;
                    proxy_buffer_size          8k;
                    proxy_buffers              32 32k;
                    proxy_busy_buffers_size    64k;
                    proxy_temp_file_write_size 64k;

                    error_page              502 503 /50x.html;
        }

        # Proxy cache for static files
        location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)$ {
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                    proxy_pass              http://__SERVER_IP__;    # apache here

                    client_max_body_size       16m;
                    client_body_buffer_size    128k;

                    #proxy_buffering     off;
                    proxy_buffering     on;

                    proxy_connect_timeout      90;
                    proxy_send_timeout         90;
                    proxy_read_timeout         120;
                    proxy_buffer_size          8k;
                    proxy_buffers              32 32k;
                    proxy_busy_buffers_size    64k;
                    proxy_temp_file_write_size 64k;

                    # Proxy cache data
                    proxy_cache_valid 200 120m;
                    expires 864000;
                    proxy_cache staticfilecache;

                    error_page              502 503 /50x.html;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /var/www/html;
        }

    }

}

Por supuesto esta es una configuración básica que debería adaptarse al caso específico. Es importante notar lo siguiente:

  • Nginx escucha en el puerto 81 y Apache en el 80. Esto es importante para no tener que hacer cambios en la configuración de Directadmin.
  • Se definen 3 Locations. Las primeras dos son proxies que le pasan requests al Apache esuchando en el puerto 80. La segunda aplica solamente a los requests de archivos estáticos y hace un cache en /var/tmp/nginx. Este cache es manejado siguiendo los headers HTTP correspondientes.

Ahora necesitamos instalar un módulo de Apache, mod_rpaf, para poder usar el header X-Real-IP.

# cd /usr/src
# wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
# tar zxvf mod_rpaf-0.6.tar.gz
# cd mod_rpaf-0.6
# apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Y luego agregamos esto al httpd.conf

LoadModule rpaf_module /usr/lib/apache/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 __SERVER_IP__
RPAFheader X-Forwarded-For

Reemplazando __SERVER_IP__ por la IP del servidor.

También vamos a necesitar un script para el init del Nginx. Como no encontré uno hecho, hice este:

#!/bin/bash
#
# Name: NginX, tsj5j
#
# Function:     Start up NginX
#
# chkconfig: - 85 15
# description: NginX starter

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

prog="nginx"
nginx=/usr/sbin/nginx

start () {
        echo -n $"Starting $prog: "
        $nginx
        RETVAL=$?
        return $RETVAL
}

stop () {
        echo -n $"Stopping $prog: "
        killproc $nginx
        RETVAL=$?
        return $RETVAL
}

reload () {
        echo -n $"Reloading $prog: "
        killproc $nginx -HUP
        RETVAL=$?
        return $RETVAL
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        sleep 1
        start
        ;;
  reload)
        reload
        ;;
  graceful)
        reload
        ;;
esac

exit $RETVAL;

Una vez ubicado ese contenido en un archivo /etc/init.d/nginx lo habilitamos

# chkconfig --add nginx
# chkconfig nginx on
# service nginx start

Y nos falta una única cosa. Tenemos Apache corriendo en el puerto 80 y Nginx en el 81. ¿Cómo hacemos que Nginx atienda las peticiones de nuestros clientes? Creamos una ruta en iptables para que redirija el tráfico del puerto 81 al 80:

# iptables -t nat -A PREROUTING -p tcp -s ! __SERVER_IP__ --dport 80 -j REDIRECT --to-ports 81
# service iptables save

Reemplazando __SERVER_IP__ por la IP del servidor.

Y listo, ahora nuestro Nginx va a recibir todo el tráfico HTTP y negociar con el Apache para devolverlo a los clientes.

Verificar que atienda Nginx

Comprobar que Nginx esté atendiendo las peticiones en el puerto 80 es muy sencillo de hacer con curl. Por ejemplo, probándolo contra la URL de este blog.

# curl -I http://www.tail-f.com.ar
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 18 Sep 2010 04:09:23 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Keep-Alive: timeout=20
Vary: Cookie,Accept-Encoding,User-Agent
X-Pingback: http://www.tail-f.com.ar/xmlrpc.php
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache

Como vemos el servidor que atiende es Nginx.

Referencias:

Mariano Reingart: Dos casos de como extender módulos de Linux para temas particulares

Router linux: SyncLink + HDLC + Frame Relay?


Alla por el 2000, cuando internet por banda ancha no existia (en gran medida), en el lugar donde trabajaba decidimos contratar una linea dedicada de telefónica.

Para no comprar un costoso router, la idea era conectarla directamente al servidor linux.
Inicialmente desde la empresa de comunicaciones me habían confirmado que era una linea punto-a-punto común, con protocolo PPP, entonces compramos una placa SyncLink serie sincrónica de alta velocidad para conectar al "modem" de telefonica.

Lamentablemente no funcionó, ya que en realidad el servicio se conectaba directamente a la red Frame Relay, por lo que la placa por si sola (un puerto serie), no era suficiente (por algún malentendido no nos habían enviado la información técnica correcta... menos mal que no compramos un router más caro).

Si mal no recuerdo, en su momento, Linux soportaba levantar un canal DLCI de Frame Realy (con hardware especial), pero no había un módulo con la disciplina de linea HDLC para poder hacerlo desde un dispositivo serie.

Afortunadamente, gracias a que todos los fuentes del sistema operativo estan disponibles, no fue dificil armar un controlador que permitiera establecer este tipo de comunicación (mediante una interfaz de red "especial").

Subí este driver (es un par de archivos relativamente simples, incluyendo módulo, herramienta en modo usuario, scripts de configuración y compilación), por si alguien les puede ser de utilidad, pero creo que esto ya esta soportado en el kernel (de una manera más integrada):

hldc_fr_synclink.zip


Mis disculpas por no haber sido más prolijo en su momento y haberlo documentado mejor, incluyendo los créditos completos para los autores originales de cada porción de código tomada como base.

Picotux: "microcomputador" Linux


Allá por 2005, para un proyecto de control de acceso, donde se debía controlar varios dispositivos físicos (barreras, molinetes, sensores) y lectoras de tarjetas, experimenté con Picotux, una minicomputadora con linux embebido para aplicaciones empotradas.

Dicho aparato es bastante útil, sobre todo porque la conexión de red, memoria flash y capacidad de procesamiento superan por lejos a los microcontroladores convencionales, con la ventaja de que al tener GNU/Linux no solo se pueden administrar y programar remotamente, sino que también es posible usar muchos paquetes de software libre/código abierto (servidores web, protocolos de red, lenguajes de programación, etc.).

En mi opinión, la característica más importante fue, nuevamente, poder modificar el kernel de linux (núcleo del sistema operativo), para agregar funcionalidad particular, en este caso, convertir dos puertos "TTL" (GPIO pins) en serie, para poder controlar más de una lectora.
Gracias a tener disponibles las fuentes del sistema operativo y controladores (y varios ejemplos similares), con un poco de esfuerzo fue posible desarrollar un controlador para puertos serie (UART) por software (conocido como bit-banging) a muy bajo costo (comparado a tener que desarrollarlo por hardware).

También, por si alguien les puede ser de utilidad, subí este driver (un archivo bastante sencillo):
netarm_gpio_swuart.c

Conclusión


Mi idea de comentarlo aquí es solo a modo ilustrativo, de como el linux puede hacer una diferencia cuando tenemos que solucionar cierto tipo de temas particulares.

Además, creo que es un buen punto para educación, por ejemplo en materias como Sistemas Operativos y Redes, posibilitando profundizar y mejorar los contenidos teoricos y prácticos, de manera simple, con temas concretos usando software libre.

Si bien con otros sistemas operativos (no abiertos) se puede desarrollar drivers/controladores, en general no se tiene un acceso completo al código fuente para ver como estan hechas soluciones similares o como se debe comportar en determinados casos (o directamente modificar el sistema operativo para cubrir una necesidad particular), lo que puede impactar en el presupuesto y viabilidad de una solución.

Juan Pedro Fisanotti: Netbooks, "bajo rendimiento"?

Hoy pensando me di cuenta de algo que me sorprendió un poco.

Para ubicarse:
Máquina: una netbook HP (modelo mini 1020) con un micro de 1.6 ghz, 2 gb de ram. Ni hablar que no tiene aceleradora de video ni nada por el estilo.
Sistema operativo: Ubuntu netbook edition 10.10, usando el escritorio de ubuntu normal, no el de netbook, con compiz fusion a full (muchos efectos activados).

Ahora los números:
Uso del procesador mientras...
...giro los escritorios en el cubo en 3D, con las ventanas también en 3D flotando sobre el cubo: 10%
...paso entre ventanas abiertas al estilo "albumes", en 3D: 10%
...abro GIMP (programa de edición de imágenes, estilo Photoshop): 50%
...instalo actualizaciones: 50%

¿Cómo puede ser que sobre tanta máquina si es una netbook, que en teoría es una máquina de "bajo rendimiento"?
De hecho uso esa máquina para casi todo. Para lo único que no puedo usarla es para juegos (por la falta de aceleradora).