De ahora en mas, me encontraran en http://blog.tomasdelvechio.com.ar
No es solo un cambio de dominio, tambien de hosting, con lo cual, este sitio quedara online unos meses mas, y luego lo daré de baja.
Hace unos meses en la lista de GRULIC se armo una discusión sobre el uso de alias sobre comandos básicos a la hora de que estos sean usado en scripts.
El hilo se llamaba una razón para no usar ‘alias ls=“ls —color”’ y quien hacia el planteo comentaba que al hacer un script, este le arrojaba un extraño error que tenia su origen en el mecanismo de alias de comandos.
Entonces se plantea como primera conclusión, que era importante no usar ese dichoso comando, alias, para los comandos, porque podía dar origen a este tipo de problemas.
Allí es el momento donde intervienen los mas experimentados en programación, y rectifican la conclusión, diciendo que el problema no es si usar o no usar el comando alias, sino que en todo script medianamente serio, no deben invocarse los comandos sin mas, como cuando estamos trabajando en el Shell sino que debe invocarse el path completo, es decir, la ruta completa del binario.
Así, por ejemplo, invocar a ls en un script no es simplemente escribiendo dicho comando, sino escribiendo /bin/ls.
En realidad, esta necesidad (la de poner la ruta completa al ejecutable) no se basa solo en el hecho del comando alias, sino que al estar llamando a un programa, si no se lo invoca con su dirección absoluta, como es bien explicado por uno de los intervinientes en la discusión:
[…] en gral. en scripts siempre es buena idea usar los paths
completos a los programas. Justamente para evitar problemas con
distintos valores de PATH (por ejemplo porque ha cambiado el usuario
que ejecuta el script) y esquivar problemas de alias en el shell
como estos.
La lectura de este hilo se dio en un contexto que por motivos de laburo yo mismo estaba probando mucho de scripts y haciendo pequeñas funcionalidades para automatizar algunas tareas.
Por eso, y como me sirvió, lo quería compartir.
La otra vez estaba instalando el Framework Symfony en Debian Sid, y me surgió un error en medio de la instalación
tomas@tomas-debian:~$ sudo aptitude install php5-symfony1.0
[sudo] password for tomas:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido... Hecho
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
php5-symfony1.0
0 paquetes actualizados, 1 nuevos instalados, 0 para eliminar y 2 sin
actualizar.
Necesito descargar 0B/2.629kB de ficheros. Después de desempaquetar se
usarán 12,7MB.
Escribiendo información de estado extendido... Hecho
(Leyendo la base de datos ... 00%
156865 ficheros y directorios instalados actualmente.)
Desempaquetando php5-symfony1.0 (de .../php5-symfony1.0_1.0.21-1.1_all.deb) ...
dpkg: error al procesar
/var/cache/apt/archives/php5-symfony1.0_1.0.21-1.1_all.deb (--unpack):
trying to overwrite '/usr/share/php/doc', which is also in package
php-pear 0:5.2.11.dfsg.1-2
dpkg-deb: el subproceso paste fue terminado por la señal (Tubería rota)
Se encontraron errores al procesar:
/var/cache/apt/archives/php5-symfony1.0_1.0.21-1.1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Un paquete no se pudo instalar. Intentado recuperarse:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido... Hecho
Inicializando el estado de los paquetes... Hecho
Me puse a investigar el error, observando el mensaje mas descriptivo:
/var/cache/apt/archives/php5-symfony1.0_1.0.21-1.1_all.deb (--unpack):
trying to overwrite '/usr/share/php/doc', which is also in package
php-pear 0:5.2.11.dfsg.1-2
dpkg-deb: el subproceso paste fue terminado por la señal (Tubería rota)
Decía que había una tubería rota en /usr/share/php/doc y entonces me dirigí allí:
tomas@tomas-debian:~$ cd /usr/share/php/doc
bash: cd: /usr/share/php/doc: No existe el fichero o el directorio
Vamos bien, pensé. Intenté ir a una carpeta superior y listar el contenido de dicho directorio:
tomas@tomas-debian:~$ cd /usr/share/php
tomas@tomas-debian:/usr/share/php$ ls
Archive Console data doc OS PEAR pearcmd.php PEAR.php
peclcmd.php Structures System.php XML
O sea, un elemento llamado doc existe en la carpeta. ¿Pero que sera?
tomas@tomas-debian:/usr/share/php$ ls -l
total 104
drwxr-xr-x 2 root root 4096 dic 22 08:13 Archive
drwxr-xr-x 2 root root 4096 dic 22 08:13 Console
drwxr-xr-x 3 root root 4096 dic 22 08:19 data
lrwxrwxrwx 1 root root 20 dic 22 08:13 doc -> ../doc/php-pear/PEAR
drwxr-xr-x 2 root root 4096 dic 22 08:13 OS
drwxr-xr-x 11 root root 4096 dic 22 08:13 PEAR
-rw-r--r-- 1 root root 14726 nov 21 18:18 pearcmd.php
-rw-r--r-- 1 root root 35783 nov 21 18:18 PEAR.php
-rw-r--r-- 1 root root 928 nov 21 18:18 peclcmd.php
drwxr-xr-x 3 root root 4096 dic 22 08:13 Structures
-rw-r--r-- 1 root root 19970 nov 21 18:18 System.php
drwxr-xr-x 2 root root 4096 dic 22 08:13 XML
Observemos entonces detenidamente la linea:
lrwxrwxrwx 1 root root 20 dic 22 08:13 doc -> ../doc/php-pear/PEAR
Esa es la tubería. Ya podemos tener una hipótesis de por donde viene el problema: La instalación de Symfony quiso hacer algo en la carpeta /usr/share/doc/php-pear/PEAR/ pero parece que esa carpeta no existe. Probemos creando a mano dicha carpeta.
tomas@tomas-debian:/usr/share/php$ sudo mkdir ../doc/php-pear/PEAR
tomas@tomas-debian:/usr/share/php$ sudo aptitude install php5-symfony1.0
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido... Hecho
Inicializando el estado de los paquetes... Hecho
Se instalarán los siguiente paquetes NUEVOS:
php5-symfony1.0
0 paquetes actualizados, 1 nuevos instalados, 0 para eliminar y 2 sin
actualizar.
Necesito descargar 0B/2.629kB de ficheros. Después de desempaquetar se
usarán 12,7MB.
Escribiendo información de estado extendido... Hecho
(Leyendo la base de datos ... 00%
156865 ficheros y directorios instalados actualmente.)
Desempaquetando php5-symfony1.0 (de .../php5-symfony1.0_1.0.21-1.1_all.deb) ...
Configurando php5-symfony1.0 (1.0.21-1.1) ...
update-alternatives: using /usr/share/php/data/symfony1.0/bin/symfony
to provide /usr/bin/symfony (symfony) in auto mode.
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido... Hecho
Inicializando el estado de los paquetes... Hecho
tomas@tomas-debian:/usr/share/php$
Era eso nomas. No se a que se debe el error en si, pero fue un caso donde el mensaje de error fue lo suficientemente descriptivo como para hallar la solución en un tiempo corto (Juro que lo soluciones en el momento, nada de buscar en Google ;-D ).
La otra vez estábamos estudiando para dejar regular la materia Base de Datos, y ayudé a una compañera con errores SQL que le iban surgiendo. Como implico de mi parte investigación y búsqueda de material, lo quería compartir.
La practica implica ejecución de sentencias DDL sobre el programa ISQL, que es el interprete de Firebird.
El error fue: Statement failed, SQLCODE = -607
El código SQL que daba el anterior error era:
CREATE TABLE T_PRODUCTOS_COMPRADOS (
IDPRO DOM_IDPK,
FECHA DOM_FECHA ,
IDT DOM_IDPK ,
IDS DOM_IDPK ,
IDP DOM_IDPK ,
CANTIDAD DOM_CANTIDAD,
PRECIO DOM_PRECIO,
CONSTRAINT PK_T_PRODUCTOS_COMPRADOS PRIMARY KEY (IDPRO, FECHA,IDT,IDS,IDP),
CONSTRAINT FK_T_PRODUCTOS_COMPRADOS FOREIGN KEY (IDPRO, FECHA) REFERENCES T_COMPRA,
CONSTRAINT FK_T_PRODUCTOS_COMPRADOS FOREIGN KEY (IDT,IDS,IDP) REFERENCES T_PRODUCTO
);
Y el error completo era:
Statement failed, SQLCODE = -607
unsuccessful metadata update
-STORE RDB$INDICES failed
-attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_5"
Diagnostico: El ante-ultimo y el ultimo FOREIGN KEY CONSTRAINT poseen el mismo nombre. Se debe cambiar el nombre de alguno de los dos.
Conclusión: Es importante que los nombres de los objetos de una DB sean descriptivos y cuidadosamente puestos.
La otra vez leía noticias por Google Reader, el lector de feeds online de Google, y encontré una opción (que debe estar hace rato pero nunca le había prestado atención) para crear un script que inserta un cuadro de enlaces compartidos en el blog.
Las opciones de personalización no son muchas, pero me parece interesante la integración de los servicios.
En este blog funciono bien, pero no encontré un esquema de colores que “combine”.
Les dejo la primer parte de un tutorial sobre Symfony, el framework PHP, que me resulto muy util para empezar a entender como funciona esta herramienta.
Interesante post de Técnicos Linux
Ya ha circulado por muchos blogs, pero como esta tan bien elaborada, postearla es casi como un reconocimiento a quienes se tomaron el trabajo.
El enlace, aquí.
Les dejo un enlace interesante sobre algunas cuestiones relacionadas con el antagonismo que día a día surge entre las discográficas y librerías tradicionales respecto a lo que progresivamente se va imponiendo en Internet.
Quiero aclarar que no soy tan positivo como la nota, dado que he visto como se están empezando a conspirar organizar los artistas que han sido beneficiarios de estos modelos trogloditas, y otros artistas que, me parece, que están siendo muy mal informados.
De algo estoy seguro: Además de perder nosotros, los consumidores de la cultura, los artistas son grandes perdedores, aunque muchos no se den cuenta. Porque el mercado de estereotipos y de popularidad moldea ideas, estilos, etc… (aunque no ellos ni muchos no se den cuenta). Lo hace lentamente, y hasta puede tolerar algún Sr. Cobranza de vez en cuando. Pero que te redefine como artista, te redefine.
Pequeño tip, que cuando se necesita nunca tengo a mano :-P :
$ dpkg -L <nombre_de_paquete>
Por ejemplo:
$ dpkg -L nautilus
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/nautilus
/usr/share/doc/nautilus/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/nautilus-connect-server.1.gz
/usr/share/man/man1/nautilus.1.gz
/usr/share/man/man1/nautilus-file-management-properties.1.gz
/usr/share/menu
/usr/share/menu/nautilus
/usr/share/applications
/usr/share/applications/mount-archive.desktop
/usr/share/applications/nautilus-computer.desktop
/usr/share/applications/nautilus.desktop
/usr/share/applications/nautilus-autorun-software.desktop
/usr/share/applications/nautilus-folder-handler.desktop
/usr/share/applications/nautilus-browser.desktop
/usr/share/applications/nautilus-file-management-properties.desktop
/usr/share/applications/nautilus-home.desktop
/usr/share/applications/network-scheme.desktop
/usr/bin
/usr/bin/nautilus-autorun-software
/usr/bin/nautilus-file-management-properties
/usr/bin/nautilus-connect-server
/usr/bin/nautilus
/usr/lib
/usr/lib/nautilus
/usr/lib/nautilus/nautilus-convert-metadata
/usr/share/doc/nautilus/AUTHORS
/usr/share/doc/nautilus/NEWS.gz
/usr/share/doc/nautilus/README
/usr/share/doc/nautilus/THANKS.gz
/usr/share/doc/nautilus/TODO
/usr/share/doc/nautilus/changelog.Debian.gz
El blog de Tomas es gestionado con TextPattern
El estilo Sangre Brillante es una creación de Jonathan Emanuel Lewenhaupt
Code is poetry