"...'fire' does not matter, 'earth' and 'air' and 'water' do not matter. 'I' do not matter. No word matters. But man forgets reality and remembers words. The more words he remembers, the cleverer do his fellows esteem him. He looks upon the great transformations of the world, but he does not see them as they were seen when man looked upon reality for the first time. Their names come to his lips and he smiles as he tastes them, thinking he knows them in the naming."
-- Siddartha, _Lord_of_Light_ by Roger Zelazny
lunes, 26 de noviembre de 2007
martes, 6 de noviembre de 2007
A que paquete pertenece este archivo?
Este comando lo encontré hoy y hace algo que varias veces necesité hacer y no sabia como. Lo que hace es decirnos a que paquete pertenece un archivo instalado (gentoo only :). Aparentemente funciona con otros usuarios además de root.
portageq owners / <filename>
Ejemplo:
> portageq owners / /usr/bin/libusb-config
dev-libs/libusb-0.1.12-r1
/usr/bin/libusb-config
portageq owners / <filename>
Ejemplo:
> portageq owners / /usr/bin/libusb-config
dev-libs/libusb-0.1.12-r1
/usr/bin/libusb-config
jueves, 13 de septiembre de 2007
#ident - Identificando revision de fuentes en binarios (C/C++)
La directiva #ident o #pragma ident dentro de un fuente C o C++ nos permite asignar una identificación en forma de texto a dicho fuente. Esta identificación se incorporara dentro del binario al momento de compilar, lo que nos permite, combinado con un sistema de control de versión, identificar exactamente que archivos fuente forman parte de un binario. Esto es particularmente util en entornos de trabajo donde existen varios grupos que modifican fuentes dentro del mismo repositorio (desarrollo, soporte, etc.) y el producto tiene varios clientes en producción.
Ejemplo 1 (manual):
#ident "ejemplo.cpp v1.23 (2007-09-12)"
En este caso el texto es generado manualmente por el programador, y este es el encargado de actualizar la versión cuando se modifica el fuente. El problema de esta forma de usar el #ident es que es muy fácil modificar el fuente y olvidar actualizar la versión y fecha.
Ejemplo 2 (svn):
#ident "$Id$"
Suponiendo que nuestros fuentes esten versionados con Subversion (svn), se puede solucionar fácilmente el problema del ejemplo anterior utilizando tags de svn:keywords. De esta manera el svn se encarga automáticamente de mantener actualizados los datos con cada commit.
Lo único que tenemos que haces es agregar el tag $Id$ como muestra el ejemplo y ejecutar el comando:
svn propset svn:keywords Id ejemplo.cpp
De esta manera el tag sera convertido automáticamente por svn a algo similar a lo siguiente:
#ident "$Id: ejemplo.cpp 429 2007-09-12 21:40:25Z pepito $"
Como se puede ver, tenemos (en orden): el nombre del fuente, el numero de revisión, la fecha y hora del commit y el usuario que lo realizo.
En base a esto, es muy fácil hacer un programita que recorra los binarios en busca del string '$Id: ' y nos muestre el resultado.
Ejemplo 3 (svn/SCCS):
#ident "@(#)$Id$"
Una buena opción para no tener que hacer el programa que busque los tags es utilizar el comando what de SCCS (Source Code Control System) o su contraparte GNU, el CSSC (Compatibly Stupid Source Control).
Para esto debemos modificar ligeramente el #ident agregando adelante el string '@(#)', que es lo que el comando what usa para buscar los comentarios que va a mostrar.
Esto es especialmente recomendable si los equipos donde va a correr nuestro sistema de producción son SunOS/Solaris o algún otro Unix, ya que en general se suele encontrar el comando what en estos sistemas operativos.
Si tenemos la directiva #ident de esta manera en todos nuestros fuentes y headers, la salida del comando what sera algo similar a:
> what bin/ejemplo
bin/ejemplo:
SunOS 5.9 Generic May 2002
$Id: ejemplo.cpp 429 2007-09-12 21:40:25Z pedro $
$Id: ejemplo.h 410 2007-09-10 20:12:02Z jose $
$Id: func_adic.cpp 139 2007-01-01 11:20:45Z juanito $
$Id: defines.h 13 2006-05-10 18:34:55Z pepito $
Buscando informacion sobre este tema, lei en algún lado que hay que agregar la opción -fident a la linea de compilación para que el #ident sea tenido en cuenta. Con gcc esto no parece ser necesario, no se con otros compiladores.
Referencias:
Libro Control de versiones con Subversion - Traduccion al español del libro oficial de svn (version 1.1/1.2)
Ejemplo 1 (manual):
#ident "ejemplo.cpp v1.23 (2007-09-12)"
En este caso el texto es generado manualmente por el programador, y este es el encargado de actualizar la versión cuando se modifica el fuente. El problema de esta forma de usar el #ident es que es muy fácil modificar el fuente y olvidar actualizar la versión y fecha.
Ejemplo 2 (svn):
#ident "$Id$"
Suponiendo que nuestros fuentes esten versionados con Subversion (svn), se puede solucionar fácilmente el problema del ejemplo anterior utilizando tags de svn:keywords. De esta manera el svn se encarga automáticamente de mantener actualizados los datos con cada commit.
Lo único que tenemos que haces es agregar el tag $Id$ como muestra el ejemplo y ejecutar el comando:
svn propset svn:keywords Id ejemplo.cpp
De esta manera el tag sera convertido automáticamente por svn a algo similar a lo siguiente:
#ident "$Id: ejemplo.cpp 429 2007-09-12 21:40:25Z pepito $"
Como se puede ver, tenemos (en orden): el nombre del fuente, el numero de revisión, la fecha y hora del commit y el usuario que lo realizo.
En base a esto, es muy fácil hacer un programita que recorra los binarios en busca del string '$Id: ' y nos muestre el resultado.
Ejemplo 3 (svn/SCCS):
#ident "@(#)$Id$"
Una buena opción para no tener que hacer el programa que busque los tags es utilizar el comando what de SCCS (Source Code Control System) o su contraparte GNU, el CSSC (Compatibly Stupid Source Control).
Para esto debemos modificar ligeramente el #ident agregando adelante el string '@(#)', que es lo que el comando what usa para buscar los comentarios que va a mostrar.
Esto es especialmente recomendable si los equipos donde va a correr nuestro sistema de producción son SunOS/Solaris o algún otro Unix, ya que en general se suele encontrar el comando what en estos sistemas operativos.
Si tenemos la directiva #ident de esta manera en todos nuestros fuentes y headers, la salida del comando what sera algo similar a:
> what bin/ejemplo
bin/ejemplo:
SunOS 5.9 Generic May 2002
$Id: ejemplo.cpp 429 2007-09-12 21:40:25Z pedro $
$Id: ejemplo.h 410 2007-09-10 20:12:02Z jose $
$Id: func_adic.cpp 139 2007-01-01 11:20:45Z juanito $
$Id: defines.h 13 2006-05-10 18:34:55Z pepito $
Buscando informacion sobre este tema, lei en algún lado que hay que agregar la opción -fident a la linea de compilación para que el #ident sea tenido en cuenta. Con gcc esto no parece ser necesario, no se con otros compiladores.
Referencias:
Libro Control de versiones con Subversion - Traduccion al español del libro oficial de svn (version 1.1/1.2)
Etiquetas:
C,
C++,
programacion,
tech,
tips
miércoles, 27 de junio de 2007
QOTD
Under heaven all can see beauty as beauty only because there is ugliness.
All can know good as good only because there is evil.
Therefore having and not having arise together.
Difficult and easy complement each other.
Long and short contrast each other:
High and low rest upon each other;
Voice and sound harmonize each other;
Front and back follow one another.
Therefore the sage goes about doing nothing, teaching no-talking.
The ten thousand things rise and fall without cease,
Creating, yet not.
Working, yet not taking credit.
Work is done, then forgotten.
Therefore it lasts forever.
All can know good as good only because there is evil.
Therefore having and not having arise together.
Difficult and easy complement each other.
Long and short contrast each other:
High and low rest upon each other;
Voice and sound harmonize each other;
Front and back follow one another.
Therefore the sage goes about doing nothing, teaching no-talking.
The ten thousand things rise and fall without cease,
Creating, yet not.
Working, yet not taking credit.
Work is done, then forgotten.
Therefore it lasts forever.
Suscribirse a:
Entradas (Atom)