Chuletillas (y XXXXV) – Integrar comandos MySQL en un shell script

chuletaExisten diversas formas de integrar comandos de MySQL dentro de un shell script de linux. La más cómoda, creo, es utilizar el parámetro -e del cliente en línea de myql. Por ejemplo, así:

#!/bin/sh
# comandos bash...
mysql -u usuario -p -e "CREATE DATABASE ejemplo;"
#comandos bash...

Lo que pasa es que así puesto sirve de bien poco porque nos va a pedir el password de forma interactiva. Para evitarlo podemos poner la password en el propio archivo del script. No es un método elegante ni especialmente seguro, pero en entornos poco críticos sirve perfectamente:

#!/bin/sh
PASSWORD=mipassword
# comandos bash...
mysql -u usuario --password=$PASSWORD -e "CREATE DATABASE ejemplo;"
#comandos bash...

Por último, si tenemos que ejecutar varios comandos, lo más cómodo es escribirlos uno a continuación de otro en un archivo independiente (con extensión sql por claridad) y ejecutarlos usando el comando source de mysql:

#!/bin/sh
PASSWORD=mipassword
# comandos bash...
mysql -u usuario --password=$PASSWORD -e "source /opt/sripts/imysql/importar_databases.sql"
#comandos bash...
NOTA: Todo lo dicho aquí sirve igualmente para MariaDB

Nombres de fichero con marcas de tiempo o secuenciales

chuleta A veces necesitamos generar ficheros a intervalos regulares en un determinado directorio sin perder los creados anteriormente. Para hacerlo de forma automática y desde un script es necesario que los nombres de los ficheros generados sean diferentes en cada ocasión. Existen distintas formas de hacer esto. Os voy a contar mis dos favoritas con un ejemplo en el que volcamos en el fichero un listado con los procesos en ejecución en el momento de crearlo.

En el primer método creamos un fichero cuya marca distintiva es un número secuencial que empieza por el 0 y que se irá incrementando de 1 en 1. En este ejemplo los ficheros creados serán ps_0.txt, ps_1.txt, etc.

#!/bin/sh
cd /var/archivos/
numero=$(ls ps* | wc -l)
fichero=ps_$numero.txt
ps aux --sort -rss > $fichero

El segundo método usa una marca de tiempo que incluye año, mes, día, hora y minuto. Al generar el fichero en el momento de escribir este texto el nombre sería ps_20160401-17:55.txt

#!/bin/sh
cd /var/archivos/
fecha=`date +%Y%m%d-%H:%M`
fichero=ps_$fecha.txt
ps aux --sort -rss > $fichero

Script desatendido de conexión a un servidor FTP

Al contratar espacio de backup en la mayoría de las empresas de hosting la opción más habitual sigue siendo a través de FTP. Para automatizar las copias de forma desatendida necesitamos programar estas, habitualmente lanzando un script a través de cron. Si buscas un modelo para construir el tuyo puedes partir a través de este:

#!/bin/sh

HOST='ip_del_ftp_server'
USER='nombre_de_usuario'
PASSWD='password'

ftp -n -i $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /file_backups
lcd /home/administrador/file_backups
mput *
cd /mysql_backups
lcd /home/administrador/mysql_backups
mput *
quit
END_SCRIPT
exit 0

El script supone que ya tenemos los ficheros que queremos copiar en dos directorios locales: /home/adminstrador/file_backups y /home/administrador/mysql_backups. Haremos la copia en dos directorios del servidor ftp que se llaman /file_backups y mysql_backups. Los parámetros -n y -i de la conexión al servidor desactivan, respectivamente, el autologin y el modo interactivo (para evitar que el servidor ftp nos pida confirmación en cada operación de copia).

Manual de HTML, CSS (y algo de Javascript)

lenguajes Recopilación ordenada de apuntes de diferentes módulos (Lenguajes de marcas, Implementación de aplicaciones web, etc.) que, unidos, constituyen un completo manual de casi 130 páginas, válido tanto para quien quiera iniciarse en la realización de páginas web como para quien desee aprender algunos trucos avanzados (transpariencias, contorneos, menús, solapas, etc) o quiera empezar a manejar alguna de las nuevas características de HTML5 (canvas, geolocalización, etc.).

El manual se complementa con todos los ejemplos que se se citan en él y alguno más y que pueden descargarse integramente desde aquí.

Descargar “HTML & CSS”

Codelite, un IDE multiplataforma para C y C++

Binary Hacía mucho, mucho tiempo que no le dedicaba tanto tiempo a la programación como este año y lo primero que tuve que hacer fue buscarme un buen IDE para trabajar en C/C++. El principal requisito que debía de cumplir (aparte de, por supuesto, que fuese funcional y cómodo) era ser multiplataforma. Si además era software libre, mejor que mejor.

La única herramienta que conocía con estas características era Eclipse con el plugin CDT para trabajar en C/C++ pero a mi juicio resulta demasiado pesado. En otras ocasiones había trabajado con Anjuta o con Kdevelop pero el primero es demasiado sobrio y sólo funciona en GNU/Linux y el segundo es demasiado aparatoso y, aunque podría funcionar sobre windows, mis experiencias usando aplicaciones de KDE sobre el entorno de ventanitas de Redmon no han sido nada favorables hasta la fecha.

En esto estaba, cuando llegué a este hilo de Barrapunto de finales del año pasado y apartando a un lado a trolls y fundamentalistas varios me quedé con dos herramientas plenamente satisfactorias: Codelite, mi elegida, y Code::Blocks, una meritoria finalista.

Codelite

Codelite es un IDE ligero, cómodo y muy funcional, con buenas herramientas para debug, con binarios para prácticamente todas las plataformas y las distribuciones más comunes, soporte para plugins (algunos de ellos muy útiles) y con un grupo de desarrollo muy, muy, activo. A esta hora ya hay nuevos binarios para Fedora 12, Ubuntu 9.10 y OpenSuse 11.2. La verdad es que me ha dejado tan buen sabor de boca desde el primer momento que ni le he dado una oportunidad a su competidor, pero a primera vista me ha parecido que se trata de un proyecto mucho menos activo (las últimas aportaciones al proyecto son de marzo de 2008).

Opensocial

icono para cosas de google Hace tres días que ni Dios había escuchado hablar de esto. Hoy no eres nadie en la blogosfera si no has escrito media docena de posts sobre éllo. Aún sin entender del todo de lo que va, que se ha visto de todo por ahí… A mi me gusta mucho el tratamiento que le está dando Antonio Ortiz así que quien quiera leer un poco más acerca de que va esto que se pasee por Error500. La información que dan en las propias páginas del proyecto también es bastante buena. Pero lo que me ha sorprendido muchísimo es la aceptación que ha tenido de forma inmediata por parte de los programadores. El blog de Google Code suele registrar una media de 7 u 8 entradas mensuales pero en lo que va de mes, apenas tres días, ya se han registrado más de 30 nuevas entradas y todas ellas usan el api de opensocial. De continuar a este ritmo a final de mes habrá unas 300 aplicaciones nuevas lo cual es un número bastante respetable para algo tan reciente. A ver quien le sigue el ritmo ahora a Google…

Inicios con Cake PHP Framework

icono de phpTengo pendiente empezar el diseño y desarrollo de un par de aplicaciones sencillitas y estaba barajando la posibilidad de usar un framework de PHP para acelerar la parte tediosa de manejo de las bases de datos. He instalado y he estado leyendo algo de documentación de tres de ellos (PDT, Zend y Cake) y al final este último es el que más me convence. Instalar PDT ha sido tal engorro (eclipse se está convirtiendo en un verdadero monstruo, pero de feo) que me ha dejado sin energías para cogerle gusto… Y de entre Cake y Zend, ambos increíblemente sencillos de echar a andar, me ha convencido el primero por varias cosas (casi pueriles, he de reconocerlo) como que, por ejemplo, visualmente me ha entrado mucho más por los ojos (por algo tan sencillo como que aplica una hoja de estilos por defecto a los proyectos nuevos).

La instalación de un entorno de desarrollo básico es bien sencilla y mucho más usando para ello xampp. Te bajas la última versión de cake, la descomprimes sobre un directorio que cuelge de htdocs y ya. Para instalación en otros entornos hay un capítulo dedicado a ello en el manual básico.

Crear el primer “armazón” para una aplicación es también muy sencillo: basta con ejecutar desde un terminal el script bake.php que está en el directorio de cake/scripts (tal vez necesitarás instalar un interprete en línea de comandos para php) y que nos guiará de forma interactiva para crear la estructura necesaria para cake.

Otra función muy interesante es lo que llama scaffolding. Sólo tenemos que definir una variable ($scaffold) en la clase controladora de una de nuestras bases de datos para que cake cree de forma automática todo lo necesario para borrar, crear, editar o navegar por entre los registros de la misma.

Cake usa el patrón MVC (modelo-vista-controlador), una estructura que separa en tres capas el diseño de la aplicación y que es usado por otros muchos frameworks, entre ellos el omnipresente Ruby on Rails.

Los lenguajes de programación más populares

Llego a través de una referencia en un libro de java a este ranking de los lenguajes de programación más populares. La lista se elabora mensualmente en función de las referencias a dichos lenguajes en en Google, Yahoo y MSN. Está claro, dado el procedimiento usado, para el cálculo que no se trata de una categorización ni del mejor lenguaje ni del más usado sino simple y llanamente del más popular. Los detalles acerca de cómo se calcula el ranking están aquí. Y para los perezosos que no quieran entrar en la página original, esta es la tabla correspondiente a este mes de noviembre:

Los tres primeros puestos no me sorprenden en absoluto pero si lo hacen, por ejemplo, la elevada popularidad aún hoy de Visual Basic, lo escaso de C# (por debajo de Python y prácticamente la mitad de popular que Perl) y los fuertes ascensos de Ruby y, sobre todo, del lenguaje D que yo suponía en la más completa marginalidad.

ACTUALIZACI?N: Hay otro ranking complementario a este que ha confeccionado O’Really en función de las ventas de los libros de su editorial. Visto en Déjame ser.

Seguimiento de autobuses con Ajax y GoogleMaps

Veo en Ajaxian una aplicación que usa el API de GoogleMaps que me parece realmente útil. En la Universidad de Michigan realizan un seguimiento por GPS de los autobuses que dan servicio al campus universitario y trasladan las coordenadas de posición de los mismos a un mapa mediante el API de GoogleMaps. Y todo ello, por supuesto, en tiempo real

Dado que en muchas grandes ciudades los autobuses ya llevan GPS para hacer seguimientos desde las centrales (o para comunicar mediante paneles en las paradas el tiempo que les queda para llegar) hacer una aplicación como esta debería de ser relativamente sencilla. ¿Se la pedimos a Gallardón o nos esperamos a que acabe con la M-30 (y con nuestra paciencia, ya de paso…)?

¿Ad AJAX?

Muchos blogs han hecho referencia a AJAX Translator en las últimas semanas: una aplicación que permite hacer traducciones de textos entre diferentes idiomas ‘on the fly’ haciendo uso intensivo de las propiedades dinámicas de las nuevas aplicaciones web con AJAX.

Por el momento me parece más prometedora que efectiva, pero lo que si me resulta novedoso es el otro proyecto similar que Joel Parish, su autor, publicita a través de su web: un AJAX Translator con publicidad. El algoritmo que emplaza los Ads no es aún totalmente funcional (según explica Parish y podeis comprobar vosotros mismos) pero si pruebas a escribir un texto que incluya las palabras clave que el autor reseña en la entradilla de la aplicación podrás comprobar como la publicidad cambia de forma dinámica.

Teníamos Adsense, Adwords, Adblogs… y ahora Adajax. Lo que nos faltaba…