El fin de semana pasado tuve la oportunidad de entrevistar al líder del proyecto Turpial, Wil Alvarez. Las preguntas variaron entre personales y especificas sobre el popular cliente para identi.ca y Twitter.

Me pareció apropiado hacerle seguimiento a algunas reacciones que obtuve de compartir el vídeo tutorial de Turpial que hice hace poco. En su mayoría fueron positivas pero algunas mostraron cierto descontento con detalles del proyecto. Cuando hice énfasis en que es software Venezolano, la respuesta fue "El único venezolano allí es Wil" y la que mas se repitió era algo así como "Si fuese venezolano, su pagina estaría en castellano".

Esta primera serie de preguntas y respuestas son especificamente de Turpial como tal.



¿Hace cuanto que fue creado Turpial o de donde viene Turpial?

Turpial nace aproximadamente en noviembre de 2008. En octubre, por recomendación de Eleazar Meza (@elshaka), abrí mi cuenta de Twitter y estuve usando varios clientes para Linux de la época. Probé Mutter, Gwibber, DestroyTwitter y otros, pero ninguno cubría mis expectativas.

Para ese entonces Gwibber y Mutter carecían de muchas funcionalidades o de una interfaz simple y si bien DestroyTwitter era una de las mejores opciones, no era libre y eso me generaba cierta incomodidad. Decidí entonces desarrollar un cliente de Twitter para mi uso personal con los conocimientos de Python y Gtk que tenía actualmente. Así fue como nació el proyecto.



La gente se queja de que hay mas material en ingles que en español, entiendo que es para usar un idioma "universal". ¿Que le dirías a esa gente que se queja y como pueden colaborar a traducir?

Azrael (@AzraelCcs) redactó un artículo genial sobre este tema (en inglés) con una explicación muy acertada y varios puntos que valen la pena resaltar, así que tomaré la idea principal de su texto para responder a tu pregunta.

Turpial cada día crece más y para nosotros es importante ayudarlo a seguir creciendo y conquistando nuevos horizontes. Les guste o no, el inglés es un idioma común, tanto en ámbitos de programación como para la interacción de muchos pueblos. No podemos tener una mente tan cerrada como para pensar que el único idioma que se habla es el español ni mucho menos pretender imponer el idioma español como base para la aplicación porque, repito: les guste o no, el inglés es el idioma más hablado fuera de nuestras fronteras.

Gracias a la decisión que tomamos de pasar toda la plataforma a inglés logramos captar a nuestro gran amigo Andrea Stagi (@4ndreaSt4gi) que ha estado trabajando fuertemente con nosotros en el código de Turpial y muchas otras colaboraciones, donaciones e incluso noticias y artículos en blogs de todo el mundo.

Podemos asegurarle a la comunidad lo siguiente:

  • No nos estamos vendiendo a una corporación maligna del imperio que usará Turpial como herramienta para subyugar a los pueblos oprimidos.
  • No estamos dejando de dar soporte en español.
  • Vamos a seguir mejorando Turpial en español, inglés, portugués, chino, alemán y en todos los idiomas que podamos (con la ayuda de la comunidad).

Pueden revisar el Timeline de Turpial y se darán cuenta que respondemos preguntas en ambos idiomas pero nuestra plataforma está y seguirá estando en inglés porque en este momento somos pocas personas aportando al código de Turpial y humanamente el tiempo no nos alcanza para también traducir y mantener la plataforma.

Estamos completamente abiertos a recibir colaboraciones para traducir la plataforma, en ningún momento nos hemos cerrado a esa posibilidad, simplemente no nos alcanza el tiempo. Nuestra amiga Nathalie Colina (@Art3mis4) estuvo con ganas de aportar en esto de las traducciones, si están interesados pueden contactarla y tratar de coordinar para que empiecen cuando quieran.



Veremos Turpial en otras plataformas como moviles incluso en otros sistemas operativos? y de ser así, seguirá siendo libre?

Por supuesto. Estamos trabajando para que la versión 2 esté disponible para Windows y para Mac. Luego tenemos planes de portar Turpial 3 para Android, iPhone e incluso Chrome (y Firefox, ¿por qué no?).

Turpial es y seguirá siendo libre. Esa es nuestra consigna y es parte del Zen de Turpial.



¿Se extenderá Turpial a otras redes sociales como el chat de Facebook, IRC o algo de ese estilo?

Por los momentos el único soporte oficial que tenemos es para Twitter e Identi.ca. Sin embargo, estuvimos en conversaciones con César Cotiz para incluir soporte oficial a Plaxed y estamos analizando el soporte para Status.net. Estas dos redes muy probablemente estarán en versiones futuras.

Para el resto de redes sociales estaremos intentando habilitar un sistema de plugins que permita extender la aplicación, pero por nuestra parte no tenemos intenciones de agrandar más el core de Turpial.



¿Cual es la funcionalidades de Turpial que la gente menosprecia mas o que la mayoría desconoce?

La característica que la gente más denigra es la interfaz gráfica, sobre todo la imposibilidad de hacer clic directamente en los enlaces, hashtags o perfiles. Lamentablemente Gtk tiene sus limitaciones y tuvimos que ajustarnos a ellas, es por eso que Turpial 2.0 fue pensado con base en Webkit y así hemos venido trabajando. El cambio en apariencia es simplemente enorme.


¿Cuantas personas trabajan en este proyecto, esas que tu considerarias "Core contributors"?

Actualmente tres: Carlos Guerrero (@guerrerocarlos), Andrea Stagi (@4ndreaSt4gi) y yo (@satanas82).


¿Como pudieran identi.ca y twitter colaborar con Turpial?

Es una pregunta bastante difícil, creo que la mejor forma de colaborar con Turpial (y con cualquier cliente de terceras partes) es tratando de mantener una API estable a lo largo del tiempo y minimizando los controles o reglas que establecen para los terceros.



Aprovechando un la oportunidad aproveche de hacerle unas preguntas un poco mas personales y ya dejando a Turpial de lado, aquí les dejo esta segunda parte de la entrevista a Wil Alvarez.

¿A que edad y como aprendiste a programar?

Empecé a los 18 años. Mi sueño siempre fue hacer juegos de computadoras y por eso aprendí. En una época desarrollé unos cuantos juegos usando Pygame pero aún no siento mi sueño realizado.


¿Que es lo que mas te consume tiempo de Turpial, esas tareas que quisieras delegar?

Principalmente las que yo llamo "tareas administrativas o de relaciones públicas". Todo lo que es responder correos, atender consultas, escribir noticias, artículos de la wiki; son cosas que me gusta hacerla, sobre todo responder correos, pero el tiempo no me da para todas. Me gusta responder a los usuarios porque de esa forma se rompe un poco esa barrera entre el usuario y el programador, le demuestro a la gente que estamos a la distancia de un correo, que los escuchamos y que realmente nos interesa y nos nutren sus opiniones.


¿Trabajas en otros proyectos que nos puedas comentar un poco?

En estos momentos mi empleo me está consumiendo gran parte del tiempo así que no he podido dedicarme a otras cosas. Tengo pendientes un par de proyectos y algunos juegos (sobre todo cosas tipo frameworks) para generar aplicaciones pero todo eso está en stand-by.

¿identi.ca o Twitter?

Twitter.


¿Entiendo que actualmente estas en Argentina, como ves la movida del software libre y la comunidad por alla?

Bueno, estuve en Argentina hasta hace una semana (ahora estoy en Chile) pero la movida del SL es muy interesante, la comunidad de Python de Argentina es una de las más activas que he podido conocer y tiene un montón de desarrolladores de gran nivel (o "grosos", como dirían allá). También tienen una comunidad de Mozilla bastante activa y pues, el SL se mueve un montón allá.

En estos días me toco recuperar mi VPS vía consola remota, al revisar el /var/log/messages me di cuenta de el Out of Memory Killer (OOM Killer) había hecho de las suyas al quedarse sin memoria. Luego de analizar detenidamente los logs y me di cuenta que fue una combinación de factores, Google, Yahoo y Yandex me estaban indexando tanto este blog como unos foros de autos que alojo en este servidor al mismo tiempo.

El script para descargar torrents estaba corriendo al igual que el torrent tracker y alguien me estaba haciendo flood vía IRC en freenode puede había dejado irssi conectado.

El OOM Killer tiene un algoritmo que decide que procesos son los mejores para aniquilar sin embargo es posible manipular estos valores y dejarle saber al OOM Killer que procesos prefieres que mate primero. Para automatizar esta tarea hice un script que nos ayudara con esta tarea:

for programas in SCREEN irssi top
  do for pid_of_oomk_candidate in `pidof -x $programas`
    do echo 10 > /proc/$pid_of_oomk_candidate/oom_adj
    done
 done

Como ven el script anterior agrega 10 al OOMK score a los procesos que menos me interesan permanezcan vivos cuando me quede sin memoria mientras que el siguiente hará exactamente lo contrario, mantendrá vivo un poco mas estos procesos:

for programas in mysqld portsentry iptables
  do for pid_of_oomk_candidate in `pidof -x $programas`
    do echo -5 > /proc/$pid_of_oomk_candidate/oom_adj
  done
done

echo -17 > /proc/`pidof -s sshd`/oom_adj

En este ultimo mysql portsentry y iptables tendrán cinco puntos de ventaja en relación con el resto de los candidatos y si se fijan en la ultima linea estamos asegurándonos que sshd no sea candidato bajo ninguna circunstancia.


Automatizar el ajuste del score para el OOM Killer

Ahora unifiquemos estos dos scripts y demosle un poco mas de flexibilidad, estoy seguro que hay gente que prefiere asignarle a irssi un valor distinto de screen. Lo primero que necesitaremos es un script de configuración, vamos crearlo en /etc/candidatos_oomk.conf y el contenido se debería de ver algo así:

# Programas que queremos sacrificar, entre mas alto el valor
# mas peso tienen en la lista de candidatos.
irssi 4
SCREEN 3
smtpd 2
apache2 1

# Programas que queremos salvar, estos tendrán valores negativos
portsentry -2
mysqld -5
sshd -17

El script al que le puse de nombre oomk_adj_candidatos.sh se veria algo asi:

#!/bin/bash
CONFIGURACION="/etc/candidatos_oomk.conf"
while read programas
  do  proceso=`echo $programas |grep -v \# | grep [0-9]$| awk '{print $1}'`
  ajuste=`echo $programas |grep -v \# | grep [0-9]$| awk '{print $2}'`
  if [ -z "$proceso" ] then
    continue
  else
    echo $proceso
    for pids_proceso in `/bin/pidof $proceso`
      do echo "    echo $ajuste > /proc/$pids_proceso/oom_adj"
    done
  fi done < $CONFIGURACION

El script es simple, leemos el archivo de configuracion linea por linea separamos el nombre del proceso del ajuste que le vamos a hacer guardando cada valor en las variables $proceso y $ajuste. Evaluamos si la variable $proceso esta vacía, y de ser así seguimos con la próxima linea, de lo contrario continuamos procesando esa misma linea. Obtenemos el PID del proceso usando pidof y para cada PID vamos escribir el valor de $ajuste en su archivo oom_adj dentro de /proc.

Pueden colocar este script en su /etc/rc.local o en un cronjob y recuerden que si quieren consultar la lista de candidatos y ver como están sus scrores o saber un poco mas del tema, pueden consultar este articulo: El OOM Killer y manipulación de candidatos.

Mas de una vez he intenten ejecutar sl cuando intentan ejecutar ls para listar archivos y directorios, es un error que todos cometemos pero ¿que pasaria si sl en realidad fuese un comando?. Afortunadamente para nuestro entretenimiento hay una aplicación de nombre sl y consiste en un tren ascii que sale en el terminal cada vez al momento de ejecutar sl. Perfecto para una broma practica, instalarlo en un servidor que muchas personas usan y esperar a escuchar los cuentos.

Aquí les dejo un video que muestra como instalarlo y como se ve al momento de ejecutarlo.


En caso de que no puedas ver el video, puedes instalar esta aplicación ejecutando:

su - yum install -y sl

Como ven es inofensivo, o por lo menos menos inofensivo que un ualias a rm -Rf /*, de hecho un compañero de trabajo fue el que me comento sobre esta broma practica. La aplicación sl esta disponible para OSX a través del manejador de paquetes brew.

Uno de los juegos mas clásicos es el de Príncipe de Persia, de hecho fue uno de los que mas jugué cuando era chamo.

Hoy encontré como jugarlo de nuevo usando el emulador de DOS DOSBox. Este emulador esta optimizado para videojuegos que en un principio fueron diseñados para correr sobre MS-DOS y esto es justo lo que estamos buscando. Aproveche y les hice un vídeo de menos de 3 minutos que les explica como instalarlo, aquí se los dejo.

En caso de que no hayan captado algunos detalles en el vídeo cree un grupo de secuencias de comandos que les ayudara a dejar corriendo el juego Prince of Persia en Fedora, en mi caso estoy usando Fedora 17.

Esta seria la primera secuencia de comandos para dejar Prince of Persia instalado en nuestro Fedora.

su -
yum install dosbox -y
exit
mkdir ~/games
firefox http://www.bestoldgames.net/eng/old-games/prince-of-persia.php

Como ven lo que estamos haciendo es instalando DOSBox, creando un directorio donde tendremos nuestro juegos y abriendo FireFox en la pagina para descargar el juego como tal. Una vez en la pagina, descargamos el juego, lo copiamos a la carpeta ~/games y lo descomprimimos.

cp ~/prince*zip ~/games
cd ~/games
unzip ~/prince*zip
rm ~/prince*zip

Ahora vamos a arrancar DOSBox y una vez dentro del emulador vamos a montar ~/games como si fuese la unidad C y arrancamos el juego.

Recuerde remplazar /home/usuario/games por la ruta completa a su directorio home.

Muchos pensaron que habíamos ganado la batalla cuando derrotamos SOPA pero la realidad es que lo hemos perdido todo. Con el pretexto de proteger la propiedad intelectual, derechos de autor y "economía creativa" nos han criminalizado a todos sin excepción con la aprobación de C.I.S.P.A.

Con CISPA tu tienes que demostrar que eres inocente

El problema va mucho mas allá de poder o no compartir data como este articulo. Supongamos que bajo CISPA el dominio pablodelospalitos.info se convierte en un infractor bien sea por que es un nodo que permite a usuarios compartir contenido que puede o no tener copyright o por que tienen un modelo de negocio que la RIAA y la MPAA no le gusta (así como thepiratebay y megaupload respectivamente).

Sin importar si la nacionalidad y residencia de estas empresas y fundadores es de un país en el cual esto no es un delito, pongamos de ejemplo Dinamarca y Nuevazelanda, estos dominios serán considerados infractores, los empleados y duenhos serán perseguidos y encarcelados sin un debido proceso y los dominios a los dominios les quitan las entradas de DNS y bloquean sus IPs en algunos ISPs.

El pequeño inconveniente

El problema a la hora de esforzar CISPA esta en que las IPs 194.71.107.50 y 66.71.182.142 aun son accesibles directamente o mediante proxies.

¿Se dan cuenta del problema? Un detalle que no se comenta mucho es que los grandes de esta industria decidieron definir su contenido como "material protegido e incopiable" cuando la realidad es que su data se puede duplicar como cualquier otro tipo de data y no esta protegida. Esto es lo que hacen los computadores, leen, procesan, modifican y copian bits, así funcionan!

Afirmar que su data es "incopiable", es como decir que venden agua seca y definan que es ilegal transformarla en agua normal y corriente.

Este problema y detallito no fueron aprobados por accidente ni por falta de asesores calificados a la hora de redactar CISPA. Son una oportunidad para que las empresas de medios audiovisuales puedan interpretar esta ley a su manera y etiquetarte como culpable sin tener que demostrar que eres culpable.

Las consecuencias de CISPA

En todo país democrático se estipula que "toda persona acusada se presume inocente hasta que se demuestre con pruebas fehacientes su culpabilidad". El debido proceso deja de existir cuando te enfrentas contra la RIAA o la MPAA y su bufete de abogados que te llevaran a corte y apelaran tu defensa hasta que a ti se te acabe la plata.

Rafa Pérez comparte con nosotros su receta para preparar un VPS para empezar a desarrollar y probar Ruby. Su guia esta basada en el entorno de Fedora 15, usa Ruby Version Manager, Ruby 1.9.3 y PostgreSQL

Preparar un VPS con Fedora 15 como entorno de desarrollo de Ruby con PostgreSQL, git y RVM

Comencemos con la guia, lo primero es entrar por SSH al servidor y cambiar la clave del usuario root:

ssh root@0.0.0.0 passwd

Lo proximo es crear un usuario con el que accederemos el VPS a diario:

useradd tu_nuevo_usuario_aqui passwd tu_nuevo_usuario_aqui tu_password_complejo_aqui

Cambiar el puerto del sshd (si el hosting lo permite) y no permitir logging del root por ssh:

vim /etc/ssh/sshd_config
Port 2877 PermitRootLogin no

Donde 2877 es el puerto donde queremos que el servicio de SSH comience a escuchar.

Revisar las actualizaciones del sistema y de ser necesario instalarlas:

yum check-update yum update

A continuación instalamos mi editor de texto favorito vim:

yum install vim

Instalar git:

yum install git

Instalar RVM y vemos los paquetes requeridos:

curl -L get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm rvm requirements

Ahora instalamos los paquetes requeridos por RVM:

yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

Continuamos con la instalación de ruby:

rvm install 1.9.3

Instalar postgresql:

yum install postgresql-contrib.x86_64  postgresql.x86_64 postgresql-server.x86_64

Iniciar la base de datos:

service postgresql initdb

Modificar acceso de usuarios:

vim /var/lib/pgsql/data/pg_hba.conf

Cambiar el ident por md5 dejando las opciones default para que simplemente corra sin acceso remoto en el servidor. Cualquier duda o pregunta pueden consultarla con el autor: Rafa Pérez.

Recuerda, si quieres compartir algun articulo, solo envialo en los comentarios de Contacto.

Primer encuentro regional de saberes en Software Libre”, en
conjunto con el  “8vo Festival Latinoamericano de Instalación de
Software Libre” (FLISOL), el cual se realizará  los días 27 y  28 de
Abril del año en curso, en las instalaciones del INCES (CFS La Romana)
en la ciudad de Maracay, Estado Aragua.

Tengo ya unos días tratando de recordar y averiguar cuando fue que empecé a usar Twitter y solo consigo paginas que no me inspiran mucha confianza, que se ofrecen para darte esta información.

Revisando la documentación de la API de esta red social, conseguí como hacerlo aunque no esta explícitamente documentado. Esta información del usuario se envía cada vez que uno hace una petición por su timeline usando grep, awk, tr y curl fácilmente se puede ver cuando se creó la cuenta.

cuando fue creada una cuenta en twitter

Este script muestra cuando fue creada la cuenta además de cuantas personas sigue, cuantos lo siguen y cuantos twits ha publicado:

#!/bin/bash
curl -s "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$1&count=0" | tr ',' '\n' | grep  \"created_at\" | tail -n 1
curl -s "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$1&count=0" | tr ',' '\n' | grep -m2 -E 'friends_count|statuses_count|followers_count'

Como ven el script acepta un parámetro que para que funcione correctamente debe de ser el handle que en mi caso es orvtech, para ver mi información pueden ejecutar:

./twitter-creado.sh orvtech "created_at":"Thu Apr 12 21:35:06 +0000 2007" "friends_count":236 "statuses_count":5065 "followers_count":251

Estoy seguro que se puede optimizar incluso remplazar esas dos peticiones web por una sola y remplazar el tr, grep y el tail con una sola instrucción de awk pero solo quería demostrar como hacerlo. Si quieren aprender mas del API de twitter pueden visitar https://dev.twitter.com/docs.

Hoy resolvi como enviar procesos al fondo dentro de un loop en BASH, tal vez exista una forma mas limpia de hacerlo pero esta me funciono. Este será un tip mas para esa serie de post cortos pero que vale la pena agregar a los bookmarks.

Enviar procesos al fondo desde un loop en bash

El tip como tal realmente simple, solo tienes que incluir lo que quieras enviar al fondo dentro de llaves {}. Lo que quieras enviar al fondo debe lucir muy parecido a esto:

{ ping orvtech.com & }

Veamos este otro ejemplo.

for i in `echo $correos`
  do echo "trabajando en usuario $i"
  { crawler.sh -H $i run "grep $1 crawler.tmp" | awk -F\" '{print $2}' | awk -F\, '{print $1}' > usuarios.txt & }
done
jobs

Con el commando jobs puedes monitorear los procesos que se han enviado al fondo.

El dia de hoy ley la conversación entre un par de conocidos en twitter, planteaban que seria genial poder ver los twits favoritos de un Cheff como para hacerse una lista gourmet.

Sigue los twits favoritos de quien quieras

La logica me decía que esto ya debía de existir aunque no pude encontrar como hacerlo directo desde la pagina web, logre conseguir como obtener un feed de estos:

la URL tiene el siguiente formato https://twitter.com/favorites/<usuario>.rss que en mi caso quedaria asi: | https://twitter.com/favorites/orvtech.rss

La salida de esto será un XML que puedes leerlo fácilmente con cualquier navegador web moderno o cualquier lector de RSS feeds. Aquí les dejo como se inicio la conversación..