Archive of May 2011
BOTs para Twitter de MySQL
Llevo dos semanas de baja, sin poder tampoco salir de casa. Razón por la cual pensé en aprovechar el tiempo e intentar mejorar mis conocimientos en algo que nunca se me ha dado bien. La programación y más exactamente, la orientada a objetos. Así que me pillé un libro Ruby y Kindle en mano he ido aprendiendo y poniendo en funcionamiento conceptos que siempre me han sonado a chino. Si bien es cierto que sigo teniendo muchísimas deficiencias de conocimientos a nivel de programación (soy sysadmin, fuera de bash scripting casi nunca tengo que hacer nada), creo que he cogido una base que me permitirá ir mejorando poco a poco dentro de mis limitaciones ;)
Para poner en práctica todo lo aprendido, quise hacer algo relacionado con las redes sociales y MySQL. Y entonces recordé que un buen amigo y ex-compañero de trabajo llamado Saúl, también conocido como el chico SIP, programó en su día un BOT que hacía retweet de todos los hashtag #asterisk. Así que me puse manos a la obra, e intentando hacer un código lo menos sucio y guarro posible, me programé mi propio bot. El código está disponible en github, al alcance de todo el mundo que quiera mejorarlo, forkearlo... o imprimirlo y limpiarse el culo con el https://github.com/miguelangelnieto/Twitter-BOT
Ahora mismo ya hay dos bots corriendo, que son @MySQLBot_en y @MySQLBot_es. Como os podéis imaginar, el primero retweetea los mensajes de MySQL en inglés y el segundo en español. Tengo pensado montarlo también en francés y aleman. El problema es que como no entenderé los tweets, por lo que será complicado filtrar y banear usuarios indeseados. Si alguien quiere colaborar, que me avise :)
Colección de cheatsheets accesibles desde consola
Los cheatsheets suelen ser unas tablas resumen que siempre conviene tener a mano. Existen miles de CheatSheets por la web, para servicios como Apache, Mysql o aplicaciones como Vim. Por ejemplo, en http://www.cheat-sheets.org/ teneís una colección al alcance de un click. Lo que aquí voy a enseñar es un pequeño truco para que todos ellos sean accesibles desde la consola, ya que no siempre tenemos un navegador a mano :)
Aprovechando que intento aprender Ruby y los conceptos de POO, haremos uso de las Gem de Ruby para dotar de CheatSheets a nuestra shell. La Gem que nos dará la funcionalidad se llama Cheat y su instalación es sencilla:
# gem install cheat Successfully installed cheat-1.3.0 1 gem installed Installing ri documentation for cheat-1.3.0... Installing RDoc documentation for cheat-1.3.0...
Listo! :) Veamos ahora el listado de CheatSheets que disponemos:
# cheat sheets All Cheat Sheets: a2ps a2ps_page_size ack acl9 acts_as_authenticated acts_as_state_machine acts_as_taggable_on address administrateme agile alias amazon_conditions ambition android ansi apache [..]
He cortado la salida ya que hay cientos. Veamos por ejemplo, los CheatSheets de mysql_insert y rm:
# cheat mysql_insert mysql_insert: Name: 'INSERT' Description: Syntax: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] Or: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] Or: INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] INSERT inserts new rows into an existing table. The INSERT ... VALUES and INSERT ... SET forms of the statement insert rows based on explicitly specified values. The INSERT ... SELECT form inserts rows selected from another table or tables. INSERT ... SELECT is discussed further in [HELP INSERT SELECT]. URL: http://dev.mysql.com/doc/refman/5.0/en/insert.html
# cheat rm rm: rm - Remove files. Syntax: rm [] rm main purpose is to remove files. It will also take flags that will allow it to remove directories. Wild cards are allowed as well. Common Flags: -r - remove listed files and directories plus all files in those directories plus all sub-dirs and there files in listed directories, etc.. -f - don't ask if you want to remove a file. -i - ask before removing a file.
Receta fácil fácil y para toda la familia :)
Montando nuestro propio Dropbox
Los discos duros online, por ejemplo Dropbox, están de moda. Gracias a estos servicios y los clientes multiplataforma, es posible tener todos tus ficheros accesibles desde cualquier dispositivo, ya sean windows, linux, smartphones, web, etc. Los problemas de usar estos servicios suelen ser básicamente estos dos:
1- Los datos ya no los tienes tú, están en manos de empresas.
2- El tamaño que se ofrece suele ser bastante reducido.
Ahora mismo en el mundo del hosting los precios de servidores dedicados o VPS están bajando cada vez más, es facil montarte tu propia máquina con root por poco dinero al año. Y gracias a eso, te puedes montar de forma manual todo aquello que los diferentes proveedores te ofrecen. Tu correo electrónico, webmail, blog... y aquí veremos como aprovechar tu VPS para montarte tu propio Dropbox.
En el ejemplo que aquí voy a mostrar se van a utilizar los siguientes componentes:
- VPS con Archlinux
- Lighttpd como servidor web
- mod_webdav
- EncFS para el cifrado de los datos
Como vemos, la estructura será sencilla. Vamos a cambiar Dropxbox por un servidor web con soporte WebDAV. Este protocolo está soportado en prácticamente cualquier sistema operativo y existen cientos de clientes FTP que pueden trabajar con el, por lo que incluso seremos aún más multiplataforma.
Lo primero de todo, instalar lighttpd:
pacman -S lighttpd
Configuramos el módulo mod_webdav. La carpeta que indiquemos debe ser una subcarpeta del server.document-root, o de otra forma no podremos escribir:
server.modules = ("mod_webdav", "mod_auth") server.port = 80 server.username = "http" server.groupname = "http" server.document-root = "/srv/http" server.pid-file = "/var/run/lighttpd/lighttpd.pid" server.errorlog = "/var/log/lighttpd/error.log" dir-listing.activate = "disable" index-file.names = ( "index.php" ) $HTTP["url"] =~ "^/dav($|/)" { webdav.activate = "enable" webdav.is-readonly = "disable" webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db" auth.backend = "htpasswd" auth.backend.htpasswd.userfile = "/etc/lighttpd/passwd" auth.require = ( "" => ( "method" => "basic", "realm" => "webdav", "require" => "valid-user" ) ) }
Como todas las configuraciones de Lighttpd, son bastante faciles de leer. Indicamos que si la ruta a la que queremos acceder termina en /dav, se habilitará el módulo webdav para dicho acceso. El acceso no será read-only y estará protegido mediante una contraseña. Este fichero de contraseñas lo creamos con htpasswd.
Con esta configuración ya podemos acceder por webdav. Si por ejemplo usas Finder o Cyberduck de MacOS, no te funcionarán. No se la razón, pero con esas herramientas únicamente podrás crear carpetas. Triste... pero es así. Os recomiendo usar Transmit, funciona a la perfección y te permite montar el webdav como si fuese otra unidad de disco.

Bien, ya tenemos acceso webdav. Ahora lo que toca es proteger nuestros datos. Recordemos que aún estamos utilizando un VPS alojado en un hosting, por lo que nuestros datos están poco asegurados. Gracias a EncFS y FUSE podremos tener nuestros datos protegidos. EncFS, permite cifrar carpetas locales del sistema sin necesidad de crear particiones o nuevos sistemas de ficheros. En caso de que robo de disco duro o intento de acceso a los datos sin conocer la contraseña de cifrado, sería posible acceder a los datos.
El primer paso os lo podéis imaginar:
pacman -S encfs
Creamos una carpeta donde irán los datos cifrados, por ejemplo:
mkdir /root/cryptdav
Y ejecutamos:
encfs /root/cryptdav /srv/http/dav Creando nuevo volumen cifrado. Por favor, elige una de las siguientes opciones: pulsa "x" para modo experto de configuracion, pulsa "p" para modo paranoia pre-configurado, cualquier otra, o una linea vacia elegira el modo estandar. ?>
Elegimos la opción p para terminar antes. Si deseas elegir tus propias opciones de cifrado, elige x. Al finalizar nos pedirá una contraseña, que será la que necesitaremos para montar la carpeta cifrada y poder acceder a los datos.
A partir de este momento, todo lo que subamos en /srv/http/dav se cifrará en /root/cryptdav. Si hemos dejado de subir ficheros y de trabajar con la carpeta, por seguridad habrá que desmontarla, de forma que no sea posible acceder a los datos:
usermount -u /srv/http/dav
A partir de este momento, solamente tenemos accesible /root/cryptdav, pero claro, está cifrado y por lo tanto es imposible ver el contenido de la carpeta.
Si deseamos poder modificar datos, añadir ficheros o eliminarlos, será necesario volver a montarlo:
encfs /root/cryptdav /srv/http/dav Contraseña EncFS:
Listo, nos conectamos con transmit, hacemos los cambios que veamos oportunos y en caso de ser necesario, por seguridad desmontamos.








