Sat Aug 29:01:41 EDT 2010
De iOS de Apple al Android de Google
Llego la hora de renovar el contrato con mi proveedor de servicio telefónico, por lo cual me tome la molestia de echar mis numero y los resultados fueron impactantes. La diferencia entre mi ex-proveedor de servicios (AT&T) y mi Actual proveedor de servicios (Sprint) después de un contrato de 24 meses es de $1,889.86 poniendo ambos planes como ilimitados para 2 personas.
Por un lado en AT&T tengo el iPhone cosa que me llamaba mucho la atención pero al mismo tiempo sentía curiosidad por Android. Lo que me ayudo a tomar la decisión fue la diferencia de costo entre ambos planes, tuve que hacerme la pregunta valen estos dos iPhones casi $1.9K por solo el privilegio de usarlos?, la respuesta es clara, ningún teléfono los vale por lo que me decidí por irme con Sprint y remplazar mi iPhone 3GS y el Motorola Razor de mi novia con dos HTC Evo4.
La primera impresión.
Aun me falta probarlos un poco mas, pero por lo pronto esto es lo que note de inmediato: El Evo4 se siente sin duda alguna un teléfono mas barato, se nota la diferencia en acabados, materiales y diseño comparado con el iPhone. El sistema operativo es simplemente inferior desde el punto de vista de un usuario final (o un noob). entiendo perfectamente por que un usuario final elegiría un iPhone sobre un HTC Evo4 con Android. Después de un par de días me di cuenta de lo restrictivo que es el iPhone, de toda la libertad que ofrece Android y de lo rapido y poderoso que es el Evo4 como hardware, nunca volvería a un teléfono basado en iOS después de tener una semana con mi Android. Estoy muy contento con el switch que hice (sin contar con la plata que me estoy ahorrando).
Lo que si tengo que aclarar es que aun lo veo que le falta ser un poco mas intuitivo, recuerdo que mi curva de aprendizaje con el iPhone fue mucho mas corta (minutos) que con el Android... son teléfonos que dificilmenté los recomendaría a usuarios finales pero sin duda alguna con los ojos cerrados a mis colegas.
Mon Aug 16 22:57:31 EDT 2010
Los zombis podrian estar consumiendo tu procesador en este instante
Un proceso zombie es un proceso que ha completado su ejecución pero aun tiene una entrada en la tabla de procesos. Esta entrada aun es necesitada para permitir la lectura del estado de su estado de salida. El Termino zombie se deriva de la definición de un muerto viviente (se acuerdan de esa película?). Para ponerlo en términos simples y un poco mas técnicos, un proceso hijo ha terminado pero aun no se ha eliminado de la tabla de procesos y el comando kill no tiene efectos sobre él.
Indentificarlos es fácil, podemos ejecutar el comando ps y buscamos cuales procesos tienen una "z" en la columna "STAT". Los procesos zombie que permanecen por un periodo mas que corto por lo general es señal de un bug en el proceso padre. Ahora bien, si el zombie aun existe después de que el proceso padre ha terminado esto por lo general indica un bug en el sistema operativo.

Un procesos zombi no es un problema tan grave, el problema se agrava si el computador va a ser sometido a fuertes cargas pues puede ser que se multipliquen. A pesar de que los zombis no consumen memoria un incremento acelerado de estos podría traer consecuencias a la hora de que el sistema operativo se le acaben los PID a asignar.
Una vez que el padre haya matado el zombi el processo ID (PID) y la entrada en la tabla de procesos puede ser reutilizada, pero si este falla, el zombi permanece en la tabla de procesos.
Para eliminar un zombi del sistema, se le debe enviar la señal SIGCHLD al padre usando el comando kill. En caso de que el padre se reuse a eliminar el zombi de la tabla de procesos podríamos intentar matando el proceso padre. Algo que debemos tomar en cuenta es que cuando un proceso pierde a su padre, 'init' pasar a ser su nuevo padre y este se encarga de limpiar periódicamente la tabla de procesos de los zombis cuyos padres sean init.
Tema vinculado: La sobre-asignación de memoria lograda con memory_overcommit.
Thu Aug 12 00:15:18 EDT 2010
Comparte un archivo via torrents con tu propio tracker
Hoy tenia la necesidad de compartir un archivo de 1,1GB con un grupo de amigos y no quería usar el ancho de banda de mi servidor por completo para esto así que decidí usar torrents. El torrent es un protocolo para compartir archivos con la peculiaridad de que todo lo que descargas por este medio, durante el transcurso de su descarga, estará siempre disponible para ser descargado por otro. Ya en el articulo "Descargas automatizadas de torrents en el NSLU2" toque el tema de los torrents en el NSLU2, esta vez les voy a comentar un poco de como crear un torrent tracker y como crear el torrent como tal.
El Tracker
Un tracker es un server (en este caso mi NSLU2) que contiene la información necesaria para que los peers se conecten con otros peers coordinando la comunicación entre ellos. Los trackers son el único punto de encuentro al cual los clientes requieren conectarse para poder comunicarse y poder iniciar una descarga. En nuestro caso usaremos el que trae el kit de utilidades bittornado.
bttrack.py viene incluido con bittornado, yo use el siguiente comando con estos flags para levantar mi servicio de torrent tracker:
nohup /usr/bin/bttrack.py --port 6969 --dfile ~/dstate.txt --logfile ~/tracker.log &
Así de simple como se ve, invoco el script de python y le paso los siguientes parámetros:
--port: El puerto en el que va a escuchar.
--difile: El archivo con la información mas reciente de las descargas.
--logfile: El archivo de registros de las actividades del tracker.
El *.torrent
El archivo torrent es un poco mas complejo pero igual fácil de crear, usando btmakemetafile que también esta incluido en bittornado podemos crear el archivo tan solo con proporcionarle el hiper vinculo del tracker y el nombre del archivo que queremos compartir como se puede ver aquí:
btmakemetafile.py http://orvtech.com:6969/announce --comment "http://www.orvtech.com/latest/torrent" guardianes_de_chavez.mp4
El parámetro --comment simplemente nos permite agregarle un comentario al torrent.
Hacerlo publico
Hay muchas formas de hacerlo publico, solo basta con enviar el archivo *.torrent a las personas que queremos que descarguen el archivo, publicarlo en tu blog personal o subirlo a uno de estos sitios que sirven para buscar torrents, en mi caso use TPB el cual tiene la particularidad que toma el *.torrent que tu creaste y agrega otros 2 trackers a el (http://tracker.thepiratebay.org/announce y http://tracker.openbittorrent.com/announce)
UPDATE Viernes Agosto 13, 2010: Un bug en el tracker.
Al parecer mi version de bttracker no es del todo compatible con mi versión de python, y el proceso muere después de mas de un par de horas con un error referente a la incompatibilidad con el modulo SHA. Por ahora he decidido hacer un pseudo whatchdog para vigilar que el tracker este siempre arriba.
Modifique el script a esto:
while true
do if pidof -x bttrack.py > /dev/null
then sleep 2
else /usr/bin/bttrack.py --port 6969 --dfile ~/dstate.txt --logfile ~/tracker.log
fi
done
Como ven es un loop infinito que constantemente pregunta por el PID del proceso, de no encontrarlo simplemente ejecuta de nuevo el comando.
Luego descargo una versión mas nueva de bittornado a ver si esto soluciona el problema.
páginas de interés:
TheShad0w's experimental bittorrent client (BitTornado)
Pagina del proyecto bittorrent.org
Mon Aug 9 16:11:47 EDT 2010
Flash en el iPhone en tres pasos
Es en realidad algo muy fácil de hacer, consiste en un paquete del repositorio Alemán/Austriaco benm.at para Cydia.
- Abre Cydia > Manage > Sources
- Edita las fuentes y agrega http://repo.benm.at
- Busca Frash e instala tanto el paquete como el addon para sbsettings.
Listo!, ahora puedes ver contenido en formato flash (no es que haga falta, HTML5 es el nuevo estándar). Para ver este contenido debes hacer 'click' en el. El proceso tarda unos 2 minutos o menos y no es compatible con teléfonos 3G o mas antiguos. Aquí adjunto unas imagenes:
Articulos Vinculados:
Reparar mobileterminal en iOS4.0 para el iPhone
El NSLU2 como puente para tener PUSH de un servidor IRC en el iPhone
Recolectar emails de comunidades en internet.
Desde hace un par de años me llamo la atención como se colaron a internet los correos electrónicos de miles de internautas afectos al actual gobierno venezolanor. Revisando los comentarios y usando google me pude dar cuenta que la fuente podría ser alguna comunidad web (foro) orientada específicamente a usuarios oficialistas, no veo otra forma de asociar una dirección de correo electrónica con una tendencia política.
Para duplicar estos resultados escribí un script que permite obtener estos emails y se adapta a cualquier comunidad que use phpBB como software para foros. echemos un vistazo.
TEMP_URL="/tmp/spider_url.tmp"
MAX_SLEEP=1
TMP_EMAILS="/tmp/spider_emails.tmp"
CONFIG=$1
EMAIL_OUTPUT="/tmp/emails.txt"
rm -f $TEMP_URL
rm -f $TMP_EMAILS
rm -f $EMAIL_OUTPUT
for COMUNIDAD in `cat $CONFIG`
do
COMUNIDAD_URL=`echo $COMUNIDAD | awk -F, '{print $1}'`
PERFILMIN=`echo $COMUNIDAD | awk -F, '{print $2}'`
PERFILMAX=`echo $COMUNIDAD | awk -F, '{print $3}'`
PERFIL=$PERFILMIN
while [ "$PERFIL" -lt "$PERFILMAX" ]
do echo "http://$COMUNIDAD_URL/profile.php?mode=viewprofile&u="$PERFIL
PERFIL=`expr $PERFIL + 1`
done
done | sort -R | grep -i [a-z] >> $TEMP_URL
for URL_DE_PERFIL in `cat $TEMP_URL`
do curl -s --referer `shuf -n1 $TEMP_URL` $URL_DE_PERFIL |\
grep -i "@" | \
sed -e 's/</ /g' -e 's/>/ /g' -e 's/\:/ /g' -e 's/\=/ /g' -e 's/&/ /g' | sed s/\"/\ /g |\
tr ' ' '\n' | \
grep "@" | sort | uniq | tr 'A-Z' 'a-z'
SEGUNDOS=$[ ( $RANDOM % $MAX_SLEEP ) + 1 ]
sleep $SEGUNDOS
done >> $TMP_EMAILS
cat `echo $TMP_EMAILS` | grep -i -E '[a-zA-Z0-9_]*@[a-zA-Z0-9]*\.*\.(com|edu|net|org|info|ve)' | sort | uniq > $EMAIL_OUTPUT
El script toma información que es publica y la filtra hasta obtener una cadena que semejé una dirección de correo electrónico, como pueden ver en las siguientes imagenes el perfil de los usuarios son públicos y es predecible cual es la URL de estos perfiles ya que son numerados de forma secuencial.
Al ejecutar el script no arroja ninguna salida, tendríamos que hacer un cat a $EMAIL_OUTPUT como lo vemos aquí:

Si se fijan el el script el recibe un parámetro cuando lo ejecutamos, ese parámetro es la ruta a un archivo que va a contener la información de la URL del foro a escanear, el primer perfil a escanear y el ultimo perfil, todo separado por comas sin espacios en blanco (comunidad,minimo,maximo) el archivo se vería algo así:
www.noticierodigital.com/forum,1001,1010 aporrealos.com/forum,1000,1020
Para llegar a cual es el perfil numero del perfil del ultimo usuario registrado por demos jugar en nuestro navegador web con el parámetro u=17015 y cambiar ese numero por uno mas alto hasta que recibamos una pantalla de error del foro diciendo que ese perfil no existe.

Evitando Patrones.
Si volvemos al script que publique, pueden ver que tome algunas medidas para evitar crear patrones el archivos de registro (log files) alterando el orden de los perfiles y cambiando aleatoriamente el tiempo a esperar entre visita y visita a los perfiles adicionalmente estoy enviando un 'referrer' perteneciente a estas comunidades con cada petición HTTP.
El producto final de este script es una lista de direcciones de correo, una dirección por linea y luce así:
ferminmittilo@gmail.com ivanmarcanolopez@hotmail.com jjguillen@cantv.net monje902@hotmail.com psichofra@hotmail.com
Este script no funciona con todos los foros phpBB, algunos requieren una sesión valida para acedar la pagina de los perfiles. En la segunda parte de este script (que publicare en los próximos días) usare este mismo script pero implementando cookies, sesiones, proxies y recurriendo a la cache de algunos buscadores web.
UPDATE: El script corre sin problemas en el iPhone asi que se puede ejecutar desde cualquier parte que se tenga internet bien sea vía Edge, 3G o WIFI. Aquí una captura de pantalla y un video de el script con algunas modificaciones después de ejecutarse:
Thu Jul 29 12:24:30 EDT 2010
Mas de 170 millones de registros de Facebook expuestos en un torrent de mas de 2.8GB.
El día de ayer salio la noticia de que en los torrents estaba circulando un archivo con mas de cien mil registros de facebook cosa que me llamo la atención. Cinco minutos mas tarde ya estaba descargando este archivo y 2 horas mas tarde me estaba llevando la sorpresa de que son solo nombres y URLs, información pública concentrada en un grupo de archivos.

Perfecto para aquellos interesados en crear scripts y atacar específicamente vía brutforce estos perfiles. Si aun no lo han descargado, pueden hacerlo de thepiratebay.org y si la curiosidad los mata aquí tienen 10 lineas de cada archivo para que tengan una idea de su contenido:
El script:
for X in `ls *.bz2` do echo $X bzcat $X | head -n 100 | tail -n 10 echo "---------------------------------------------" done
El producto:
facebook-first.l-withcount.txt.bz2 40265 jasonc 39901 davidd 39717 johnk 39634 scottm 39481 ryanb 39388 scotts 39188 chrisd 39093 kevinb 38983 chrisg 38881 mattb ---------------------------------------------
facebook-firstnames-withcount.txt.bz2 192998 jeremy 192256 debbie 191329 christine 190512 rebecca 189062 kathy 187478 jay 183156 sandra 181704 andrea 180265 megan 179456 lauren ---------------------------------------------
facebook-f.last-withcount.txt.bz2 27522 aahmed 27426 agupta 27301 jlopez 26912 mdavis 26887 jmartinez 26758 arodriguez 26729 bwilliams 26705 vkumar 26543 jjackson 26445 cmiller ---------------------------------------------
facebook-lastnames-withcount.txt.bz2 90871 ahmad 90245 hughes 89172 bennett 89105 love 88912 kim 88332 mohamed 88071 gomez 87216 mendoza 86555 gray 86346 richardson ---------------------------------------------
facebook-names-original.txt.bz2 157 vk vinki 157 yean 19 lazio 19 1b emin yilmaz 1b 1bsalih yilmaz1b 1dlfred ogbonmwan 1fc140d9 1o sankalp rajan garg 1o smart stunt 1o 1u amarjot kaur 1u ---------------------------------------------
facebook-names-unique.txt.bz2 david miller vinod kumar sameer khan rahul singh karen smith senthil kumar alex smith mary smith michael miller richard smith ---------------------------------------------
facebook-names-withcount.txt.bz2 3048 david miller 3046 vinod kumar 3021 sameer khan 3010 rahul singh 2954 karen smith 2934 senthil kumar 2934 alex smith 2921 mary smith 2901 michael miller 2886 richard smith ---------------------------------------------
facebook-urls.txt.bz2 http://en-us.facebook.com/people/-AR-Alinea-Doza/100000264666779 http://en-us.facebook.com/people/-AR-Marchan/100000029667593 http://en-us.facebook.com/people/-ARPaettyBoy-Paeston-/1396447251 http://en-us.facebook.com/people/-ARaiin-Amiir/1329674643 http://en-us.facebook.com/people/-ARichKidd-Bell/725782861 http://en-us.facebook.com/people/-ARiich-Kiid-Pierre-Kdsshinout-Page-two/100000978229535 http://en-us.facebook.com/people/-Aa-Xdie/1603519156 http://en-us.facebook.com/people/-AaMior-Ahmad-/100000384112127 http://en-us.facebook.com/people/-Aaachh-Mcloughlin/100001042156076 http://en-us.facebook.com/people/-Aaaoqantazz-Lexhii/1029276376 ---------------------------------------------
Reparar mobileterminal en iOS4.0 para el iPhone
Desde que actualicé a iOS4.0 no he podido usar la aplicación MobileTerminal pues al abrirla esta se cierra como al segundo. Investigando un poco mas logre conseguir el error ejecutando Terminal desde BASH vía SSH, el error es el siguiente:
# mobile terminal se cierra ./Terminal dyld: Symbol not found: _OBJC_CLASS_$_UITile Referenced from: /private/var/stash/Applications/Terminal.app/./Terminal Expected in: /System/Library/Frameworks/UIKit.framework/UIKit
Hoy me puse a jugar un rato y encontré la solución al problema. Lo primero es entrar vía ssh a nuestro iphone. luego eliminamos la aplicación:
rm -Rf /var/stash/Applications/Terminal.app
Cambiamos al directorio de las aplicaciones y descargamos la ultima versión de la pagina del proyecto mobileterminal:
cd /var/stash/Applications/ wget http://mobileterminal.googlecode.com/files/Terminal-426-unstable.zip
Descomprimimos el archivo y arreglamos los permisos:
unzip Terminal-426-unstable.zip rm -f Terminal-426-unstable.zip cd Terminal.app chmod 644 -R ./* chmod ugo+x Terminal
Si intentamos abrir la aplicación ahora igual nos va a dar error, primero debemos hacer un respring y listo. Aquí les dejo unas capturas de pantalla del nuevo terminal.
Articulos vinculados:
Flash en el iPhone en tres pasos
Acceso remoto via SSH a mi AppleTV
Sun Jul 18 22:59:54 EDT 2010
Acceso remoto via SSH a mi AppleTV
Instale mediante un pendrive USB un parche que permite el acceso remoto a mi AppleTV vía SSH, el mismo parche instala una serie de aplicaciones como Boxee, bin utils y unas modificaciones al menú de la interfaz gráfica que permite la instalación de plugins (como Perian) y otras aplicaciones.
La razón principal de esto es mas que todo para poder instalar XBMC y una serie de plugins y scripts para este que permiten organizar automaticamente la librería de películas. El pluging no solo permite renombrar y organizar de acuerdo a el nombre real de este vídeo, temporada y episodio si no también descarga automaticamente los subtítulos e información adicional al vídeo. Aquí les dejo un vídeo de el AppleTV iniciando desde el USB patchstick (el pendrive que preparamos) e instalando todo lo necesario.
Proximamente buscare de instalar macports o el portage de gentoo si es posible. Quiero migrar este site así como linuxevolution.org al AppleTV.
Galería Vinculada: Instalando sshd en el appletv
AppleTV, el futuro remplazo de mi NSLU2
Por ahora no he jugado mucho con el Apple TV, tan solo unos minutos esta mañana, en cuestión de minutos lo conecte al TV, prendió y logre configurar para que se conecte a la red inalámbrica de la casa. Este sera el reemplazo de mi servidor NSLU2 en un par de meses. Por su puesto no podian faltar las fotos:
Las características técnicas del equipo son:
| Procesador: | Intel 1.0 GHz "Crofton" Processor |
| Gráficos: | NVIDIA GeForce Go 7300 (64 MB VRAM) |
| Memoria: | 256 Mb de 400 MHz DDR2 SDRAM |
| Disco duro: | 160 GB hard disk |
| Conectividad: | USB 2.0, receptor infrarrojo, HDMI y Vídeo por componentes. |
| Networking: | 10BASE-T/100BASE-T Ethernet, 802.11 b, g, n wireless networking (AirPort) |
| Salida: | 1080p/1080i 60/50 Hz (pero la resolución máxima de vídeo es de 720p) |
| Audio: | S/PDIF digital audio óptico, RCA analógico de sonido estéreo |
| Alimentación: | Fuente de alimentación universal 48W |
| Dimensiones: | 197x197x28 mm (7.7x7.7x1.1 in) |
| Peso: | 1.09 kg (2.4 libra) |
A simple vista, mas de ocho veces la cantidad de memoria que tiene mi NSLU2 (que por cierto aloja esta pagina web), casi ocho veces mas poder de procesamiento, disco duro interno vía IDE que ya de por si es mucho mas rápido que USB 2.0, lo puedo conectar al TV y ver en HD las películas, photos, y demás contenido multimedia que descargue vía torrents. Todo esto por $108 puesto en mi casa.
Galería vinculada: Fotos del AppleTV y el NSLU2.
Artículos Vinculados:
Descargas automatizadas de torrents en el NSLU2.
El NSLU2, Especificaciones técnicas..





