Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió “ayudar al prójimo”, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme.
Por tal motivo, y ante un requerimiento del primer tipo (como “ayuda memoria”) quiero publicar algo que frecuentemente utilizo (o que cuando no es tan frecuente mi fragil memoria olvida):
¿Cómo hacer un loop infinito en un intérprete de comandos (sh, ksh o similar)?
Pongamos unas comillas al “infinito”, todo concluye al fin, nada puede escapar a un Ctrl+C o a un break (produce un abandono inmediato) dentro del bucle.
La respuesta al título de esta publicación es muy sencilla, conectarse a MySQL desde C se realiza mediante una API provista por el mismo proveedor de base de datos.
La API de C es ditribuida con MySQL, no es más que una librería (libmysqlclient) que interfacea entre el programa y la base de datos.
La documentación provista por MySQL es muy completa (MySQL C API), no obstante, fiel a nuestra costumbre iremos a un ejemplo sencillo y concreto.
Las publicaciones al blog son cada vez más esporádicas, no por eso poco importantes. Es decir, aveces prefiero publicar poco y útil antes que periódico e inservible.
En este caso, quiero aportar a este blog (mi humilde base de conocimientos) una forma muy sencilla de eliminar archivos de más de N de días de antigüedad en forma automática (ideal para ejecutar por el programador de tareas), algo muy útil para purgar logs o borrar temporales inútiles. En mi caso, fue utilizado para eliminar imágenes periódicas de una cámara IP (JPEG posting) que al final del día unía en un video diario.
Luego de buscar y buscar y estando a punto de escribir un Windows shell script bastante artesanal me encontré con FORFILES, un comando de Windows, que permite de una forma sencilla de seleccionar uno o más archivos y ejecutar un comando sobre los mismos.
¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión.
Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (ifconfig, grep, cut, awk, wget, sed)
Casi dos meses después de la última publicación, es necesario dar “señales de vida” del blog, que nunca fue discontinuado… pero que se mantuvo en “pausa” por falta de “inspiración”
Y para volver, que mejor que con un clásico: hacer “cosas” desde la terminal (hoy estoy muy “comillero”)
A las publicaciones de tiempo atrás de Center IM, mp3blaster y Lynx hoy aprenderemos a enviar tweets desde la terminal utilizando cURL-
cURL es una herramienta, que muy probablemente tengas instalado en tu GNU/Linux o BSD, que nos permite enviar a una datos a una URL utilizando los protocolos HTTP, HTTPS, FTP, FTPS, etc.
sed es un “editor de textos” para el filtrado y la transformación de textos. Escribo “editor de texto” entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con “flujos”, la diferencia con los editores de textos clásicos (interactivos) es que sed acepta como entrada estándar un archivo o cualquier otro stream; resultado que es procesado y devuelto a la salida estándar (vea más acerca de stdin, stdout y stderr aquí)
Este es otro de mis pequeños scripts que suelo utilizar y/o adaptar para diferentes circunstancias. Un script sencillo, escrito para Korn Shell pero fácilmente portable a Bash u otro similar.
Para ser ciertos, más que scripting, este ejemplo es una clase de find, un comando tan potente que casi que nos permite “programar” con find
Antes de pasar a ver el código, comento un poco la necesidad que dió origen a este pequeño ejemplar para que tu puedas interpretarlo y, por que no, adaptarlo a tu necesidad.
La cuestión es así, mis aplicaciones y procesos sin logs no tienen razón de ser, todo se loguea, con fines de detectar anomalías, ver errores de software e incluso para hacer auditorias.
Las disputas “religiosas” acerca de los Sistemas Operativos no son sanas (a menos que se hagan bajo un marco de broma, como lo suelo hacer yo en mi desempeño profesional
).
Creo que todos debemos coincidir en que los extremos no son buenos ¿no? por lo tanto, que Gnome tenga portado su editor de textos y tantas otras de sus aplicaciones a Windows no significa ninguna ofensa, ni traición, ni nada de ello. Al contrario, desde mi punto de vista esto es hasta una ventaja, pues muchos usuarios de Windows o Linux (que en sus hogares utilicen un Sistema Operativo y en su trabajo otro) pueden utilizar sus aplicaciones favoritas an uno u otro SO.Entonces… para algunos casos, lo que importa son las aplicaciones, no los Sistemas Operativos.
En mi caso, entre estas aplicaciones que uso en uno y otro SO son Gimp, Dia, MySQL Workbench, Google Chrome, Firefox, etc. Y a este listado ahora se le suma Gedit.
Algo muy poco atractivo para muchos programadores que llegan a C/C++ luego de hacer experiencia en otros lenguajes es la asignación de memoria dinámica (punteros, mallocs y reallocs).
Repasemos un poco de teoría y luego veamos un ejemplo sencillo e indoloro
Leyendo una publicación a la que hago referencia al final del artículo, creí una buena oportunidad para hacer un acercamiento a la familia de lenguajes basados en XML, más específicamente XSL y más específicamente aún XSLT.
XSL, representa lo las siglas Extensible Stylesheet Language (lenguaje de hojas de estilo extensible), la T que agrega XSL (XSLT) correndonde a “Transformations”. Otros lenguajes de la familia son XSL-FO (Formatting Objects) y XPath o XML Path Language (no basado en XML) y utilizado para refererise a porciones o ramas de un documento xml específicando su path.
XSLT nos permite describir la forma en que serán formateados o transformados los archivos codificados en XML para ser mostrados.
Debido a la creciente manipulación de archivos XML, no está de más conocer un poco de XSLT para poder recuperar información de nuestros archivos pero de una forma elegante para su visualización.