MentorCruise

La comunicación instantánea

Recientemente Jon  “maddog” Hall publicó un artículo acerca de las nuevas modalidades de comunicación. Interesamente reflexionaba que en los tiempos en que no existía ni siquiera el teléfono, y las comunicación se hacían mediante correo tradicional.  En aquellos tiempos, las personas tenían mucho más tiempo para revisar lo que escribían.

Cuenta que

Otro delirio de Lilita

No conforme con sus ya conocidas profecías cataclísmicas, Lilita Carrió una vez abrió su boca para decir una sandez ante un par de marionetas que hacen las veces de periodistas en TN.

No se cansa de la cantidad de dislates que emite, como decir que Menem al lado de Kirchner parece Illia y aun de coquetear con un colombiano pelirrojo que repite slogans vacíos.

Esta vez dijo palabras más, palabras menos,  que un día la gente dejó de pensar en Alemania y Hitler ganó por el 60%.

Lo más terrible es que el par de payasos no objetaron (¿será por ignorancia) nada en absoluto. Y el televidente incauto probablemente cree esa fábula.

En primer lugar, ni Hitler ni el nazsimo surgieron de un día al otro, la gente no dejó de pensar repentinamente. Fue una acción meticulosa de quince años, de parte de personas tan disciplinadas y constantse como malvadas. (PORQUE LA DISCPLINA Y LA CONSTANCIA POR SI SOLAS PUEDEN RESULTAR MERAMENTE UNA BASURA).

En segundo lugar, el nazismo nunca consiguió el 60% de los votos en Alemania, no fue algo tan lineal ni de ribetes infantiles tal como Carrió suele inundar sus declaraciones cada vez más absurdas. El 5 de enero de 1933 el nazismo ganaba por el 43,9% de los votos y aun así no obtenía la mayoría parlamentaria. Mucha gente perdió la vida o fue al exilio luchando para evitar que ese régimen dictatorial se cristalice, realizando un sacrificio que ridiculiza actitudes como la de esta señora visitando el programa de Todo Negativo.

 

Sistemas de Construcción de Paquetes (Parte 1)

Dentro de los sistemas de construcción de paquetes en los sistemas estilo Linux, el más conocido de ellos el GNU Build System, aka autotools.

Las autotools tienen la reputación de ser difíciles y abrumadoramente barrocas. Es por eso que han surgido sistemas alternativos siendo tal vez la más más popular cmake.

Es por ello que me propuse hacer una estadística, tal vez bastante rudimentaria acerca de los sistemas de construcción de paquetes.

Lo primero que hice fue ejecutar algo como esto:

repoquery -a --disablerepo=livna,rpmfusion-free,rpmfusion-free-updates --source | uniq | shuf -n 101 | sed ‘s/.src.rpm//g’ | xargs yumdownloader --source

Con esto se consigue una muestra de 101 paquetes de los repositorios oficiales de Fedora 14.

Los paquetes son:

ailurus-10.10.3-1.fc14.src.rpm
alsa-oss-1.0.17-4.fc12.src.rpm
aplus-fsf-4.22.4-19.fc12.src.rpm
ar9170-firmware-2009.05.28-2.fc13.src.rpm
azureus-4.5.1.0-1.fc14.src.rpm
bitfrost-1.0.10-1.fc14.src.rpm
bwidget-1.9.0-1.fc13.src.rpm
cfitsio-3.250-5.fc14.src.rpm
congruity-14-1.fc13.src.rpm
dogtag-pki-ra-ui-1.3.2-1.fc14.src.rpm
drascula-international-1.0-3.fc12.src.rpm
dump-0.4-0.8.b43.fc14.src.rpm
dumpet-2.1-1.fc14.src.rpm
dx-4.4.4-16.fc14.2.src.rpm
easystroke-0.5.3-2.fc14.src.rpm
eblook-1.6.1-10.fc14.src.rpm
eclipse-jgit-0.10.1-1.fc14.src.rpm
emacs-common-tuareg-1.45.6-9.fc12.src.rpm
emacs-common-w3m-1.4.398-0.4.20100714cvs.fc14.src.rpm
emacspeak-29.0-3.fc12.src.rpm
fedora-packager-0.5.5.0-2.fc14.src.rpm
FlightGear-2.0.0-4.fc14.src.rpm
fmtools-2.0.1-2.fc13.src.rpm
func-0.25-3.fc14.src.rpm
gambas2-2.22.0-1.fc14.src.rpm
gbirthday-0.6.5-2.fc14.src.rpm
gedit-plugins-2.31.6-1.fc14.src.rpm
gfs-pyrsos-fonts-20090618-3.fc13.src.rpm
globus-gatekeeper-5.5-2.fc14.src.rpm
globus-gram-job-manager-10.59-2.fc14.src.rpm
globus-gram-job-manager-setup-sge-2.5-1.fc14.src.rpm
gmm-4.0.0-1.fc14.src.rpm
gnomeradio-1.8-6.fc14.src.rpm
html2text-1.3.2a-6.fc13.src.rpm
i3lock-1.0-4.20100320git.fc14.src.rpm
isync-1.0.4-6.fc12.src.rpm
javasqlite-20100727-1.fc14.src.rpm
kdetv-0.8.9-13.fc12.src.rpm
kmid2-2.3.0-2.fc14.src.rpm
lcms2-2.1-1.fc14.src.rpm
libfreebob-1.0.11-6.fc12.src.rpm
libgalago-0.5.2-9.fc12.src.rpm
libmusicbrainz3-3.0.3-2.fc14.src.rpm
libotr-3.2.0-5.fc14.src.rpm
lilypond-2.13.39-3.fc14.src.rpm
makebootfat-1.4-11.fc14.src.rpm
man-pages-cs-0.18.20090209-9.fc14.src.rpm
metromap-0.1.2-5.fc14.src.rpm
mono-basic-2.6.2-1.fc14.src.rpm
mysql-5.1.55-1.fc14.src.rpm
mysql-connector-c++-1.1.0-0.4.bzr895.fc14.src.rpm
nedit-5.5-23.fc14.src.rpm
nemiver-0.7.3-3.fc14.src.rpm
nntpgrab-0.6.91-2.fc14.src.rpm
nogravity-2.00-11.fc13.src.rpm
ocaml-lacaml-5.4.7-2.fc13.src.rpm
ogre-1.6.4-5.fc13.src.rpm
openjpeg-1.3-10.fc14.src.rpm
orage-4.6.1-2.fc13.src.rpm
pam_abl-0.2.3-8.fc12.src.rpm
perl-Catalyst-View-PDF-Reuse-0.03-4.fc14.src.rpm
perl-CGI-Session-4.35-5.fc14.src.rpm
perl-Color-Calc-1.061-2.fc14.src.rpm
perl-Inline-0.46-1.fc14.src.rpm
perl-Mixin-Linewise-0.003-2.fc14.src.rpm
perl-MooseX-MethodAttributes-0.24-1.fc14.src.rpm
perl-Net-FTPServer-1.122-9.fc14.src.rpm
perl-Net-Patricia-1.19-1.fc14.src.rpm
perl-Package-Stash-XS-0.19-1.fc14.src.rpm
perl-Regexp-Assemble-0.34-5.fc14.src.rpm
perl-String-Escape-2010.002-4.fc14.src.rpm
perl-Text-Kakasi-2.04-13.fc14.src.rpm
perl-UNIVERSAL-exports-0.05-8.fc14.src.rpm
php-gettext-1.0.9-2.fc13.src.rpm
php-pear-CodeGen-1.0.7-3.fc14.src.rpm
postal-0.70-6.fc14.src.rpm
pyclutter-gtk-0.10.0-2.fc14.src.rpm
pyflakes-0.4.0-4.fc14.src.rpm
python-billiard-0.3.1-2.fc14.src.rpm
python-rabbyt-0.8.3-2.fc14.src.rpm
python-zope-sqlalchemy-0.6-1.fc14.src.rpm
redir-2.2.1-4.fc12.src.rpm
rhncfg-5.9.22-2.fc14.src.rpm
R-nws-1.7.0.1-1.fc14.src.rpm
rubygem-shotgun-0.4-1.fc14.src.rpm
R-zoo-1.6-3.fc14.src.rpm
sarai-fonts-1.0-9.fc14.src.rpm
sblim-cmpi-params-1.2.6-1.fc13.src.rpm
scim-1.4.9-6.fc13.src.rpm
shed-1.15-5.fc12.src.rpm
sugar-tamtam-0-0.6.20100201git.fc14.src.rpm
Thunar-1.0.2-3.fc14.src.rpm
veusz-1.9-2.fc14.src.rpm
vhd2vl-2.3-1.fc14.src.rpm
virt-what-1.3-3.fc14.src.rpm
w3m-0.5.2-18.fc14.src.rpm
wannier90-1.2-2.fc13.src.rpm
writer2latex-1.0.2-3.fc14.src.rpm
ws-jaxme-0.5.1-4.4.fc12.src.rpm
xmlfy-1.5.3-1.fc14.src.rpm
xpaint-2.9.8.1-1.fc14.src.rpm

Esta historia continúa

Autotools: Detrás de los famosos 3 pasos

La mayoría de los usuarios con conocimiento intermedios (o más) en Linux y sistemas similares habrá alguna vez compilado alguna vez un paquete con la siguiente secuencia de comandos:

./configure

make

make install

Lo que tal vez no muchos conocen es qué herramientas permiten realizar eso y menos aun como se hace para construir los famosos archivos con extensión .tar.gz o .tar.bz2.

Autotools

Se conoce popularmente como autotools al GNU Build System, es decir al conjunto de herramientas para construir paquetes instalables de software.

Si bien un aplicación o una librería puede ser instalada – al menos en principio – a partir de un relativamente sencillo Makefile, tiene en principio dos grandes limitaciones, puede resultar poco flexible para el usuario instalador y puede resultar poco portable.

Las autotools se usan para estandarizar el proceso de instalación. Si bien la curva de aprendizaje de estas herramientas es algo empinada, proporciona una sistematización en la instalación de software a partir de código fuente.

Si bien se han creado con el tiempo algunos sistemas de construcción de paquetes alternativos en los sistemas operativos Linux y similares, es la suite preferida de una gran cantidad de proyectos open source.

De ahí que la secuencia de instalación ./configure && make && make install sea ampliamente conocido por los usuarios de sistemas operativos estilo Linux.

Componentes principales de autotools

autoconf

Crea el célebre script de alta portabilidad configure a partir de un archivo de macros M4. El script configure permite:

  • Personalizar la compilación (por ej: deshabilitar soporte para mysql)
  • Verificar que los archivos necesarios para compilar están presentes en el sistema
  • Imprimir mensajes descriptivos en cada caso
  • Crear un archivo Makefile

automake

Es un script de perl que a partir de un archivo “template” crea un archivo Makefile.in que genera archivos que permite crear archivos Makefile compatibles con GNU Coding Standards.1

libtool

Simplifica la creación de librerías (en particular de las dinámicas). Esta herramienta permite crear un nivel de abstracción del tipo de host que se está utilizando y permite al usuario compilar librerías con el mismo método de los tres pasos nombrados con anterioridad.

Resumen

Muy sintética y simplificadamente, la tarea del “maintainer” del paquete es crear de manera consistente archivos configura.ac (para autoconf), Makefile.am (para automake), además de echar mano de ser necesario de marcos M4 para resolver la realización de una tarea (por ejemplo verificar la existencia un determinado header).

Es un sistema que apunta a ser lo más portable posible y hacer previsible y flexible la tarea de instalar paquetes fuente al usuario.

El objetivo principal es hacerle la vida más fácil al usuario antes que al maintainer.

Desde luego, el usuario final rara vez compilará un programa. Sin embargo, crear un paquete instalable a partir del código fuente es el paso previo para crear paquetes ya compilados generalmente en formato RPM o Debian, dependiendo de la distribución. Y las autotools juegan un rol importante en esa etapa intermedia.

Los famosos 3 pasos

1http://www.gnu.org/prep/standards/standards.html

Licencia de Creative Commons
Usuario final: ¿A qué nos referimos? is licensed under a Creative Commons Atribución-CompartirDerivadasIgual 2.5 Argentina License. La manera de reconocer los créditos es citando la URL de este sitio.

Usuario final: ¿A qué nos referimos?

Si hay un término complicado es el de usuario final. Más que nada porque suena realmente mal. La denominación usuario final tiene un fuerte transfondo impuesto por la sociedad de consumo: se refiere a una persona que meramente usa algo, se sirve de algo como el último eslabón de una cadena de producción, a la cual el no aporta aparentemente nada.

La palabra final también tiene tal vez cierta connotación trágica, algo terminal, algo que inevitablemente finaliza allí.

Por otro lado, es difícil encontrar otros términos alternativos, ya que en general hacen alusión a una carencia, por ejemplo,

  • Usuario no técnicos
  • Usuarios no-desarrolladores
  • Usuarios no-programadores
  • Usuarios sin conocimientos técnicos

Todos esas designaciones tal vez tengan alguna connotación peyorativa.

Por supuesto, sería injusto culpar al usuario porque no aporta nada a la cadena de producción del software. El usuario puede mediante el uso del software realizar un aporte a la sociedad de la que el solo él es capaz: por ejemplo, un científico usando un programa de análisis matemático.

Asimismo, pretender que quien usa una herramienta participe en el hacer de aquella sería absurdo, si quiero usar un destornillador, no quiero que nadie me exija a que participe en su fabricación.

Sin embargo, si la fabricación del destornillador produce una herramienta que contiene un producto tóxico o contaminante del medio ambiente, como usuario, ¿no tendré un grado de responsabilidad?

¿Y si hay una empresa que pretende monopolizar la fabricación de destornilladores?

Trasladando este caso al software: la mayoría de las computadoras se vende con software cuyo código fuente (dicíendolo burdamente: la receta) conoce solamente la empresa que ha impuesto un monopolio. Cada vez que alguien usa ese tipo de software, no sabe exactamente que es lo que realidad está haciendo. ¿Y si afecta la privacidad del usuario? ¿Cómo toca esto al denominado usuario final?

Licencia de Creative Commons
Usuario final: ¿A qué nos referimos? is licensed under a Creative Commons Atribución-CompartirDerivadasIgual 2.5 Argentina License. La manera esperada de dar crédito es citando esta fuente.

Sistemas de construcción de paquetes

De 100 paquetes de fedora, 39 usan autotools.

26 Development/Libraries
13 System Environment/Libraries
9 Development/Languages
9 Applications/Internet
7 Applications/System
4 User Interface/Desktops
3 User Interface/X
3 System Environment/Daemons
3 System Environment/Base
3 Development/Tools
3 Applications/Multimedia
3 Amusements/Games
2 Applications/Text
2 Applications/Productivity
2 Applications/File
1 User Interface/X Hardware Support
1 Development/Libraries/Java
1 Applications/Publishing
1 Applications/Engineering
1 Applications/Emulators
1 Applications/Editors
1 Applications/Databases

 

Cosas sorprendentes con ViM

Sorpresa 1

Abrir directamente un archivo en un determinado número de  linea, por ejemplo: línea 247:

vim +247 /ruta/al/archivo

Sorpresa 2

Ejecutar un comando en modo Ex al abrir un archivo:

vim +:set nu /ruta/al/archivo

Sorpresa 3

Con Vim se puede volver al estado que tenía el archivo 10 minutos atrás con el comando en el comando en modo ex:

:earlier 10m

Por supuesto, se puede volver al futuro con:

:later 10m

¿Qué pasa si no se pone ‘m’? En eseo caso se retrocede o avanza la cantidad de ediciones especificada.

Sorpresa 4

Convertir un archivo en html en modo ex se hace así:

:TOhtml

El resultado se puede ver aquí es un ejemplo de un archivo Makefile.in convertido a HTML.

Sorpresa 5

Editar un archivo de manera remota:

vim ftp://remotehostname.com/myfile

Make the difference

Make no solamente sirve para compilar programas, sino para muchas otras cosas, por ejemplo usando un Makefile con este contenido en un directorio de fotos:

scpimg: *.png *.jpg

scp $? server:/var/www/gallery

touch scpimg

Cada vez que hay nuevas imágenes se suben a un servidor.

Obviamente se supone que el make está en una crontab y que se usa ssh con clave pública. ¿Qué otro uso interesante de make podría haber?

Más información

Documentación de GNU Make

Aliases en Ubuntu

Realmente, me parece absurdo que una distribución con el target al cual Ubuntu se supone que está destinado no tenga un alias para el comando rm.
Leo algunos comentarios en Ubuntu Brainstorm y me hacen gracia los argumentos en contra de agregar  la famosa línea en el perfil de bash. Si la excusa es que los usuarios no técnicos no usarán la shell y que los usuarios geeks saben crear los suyos propios, entonces que venga sin ningún alias directamente. De paso, ya que hablamos de conocimientos, no es tan complicado si queremos hacer lo opuesto es decir omitir el alias, sencillamente tengo que hacer:

‘rm’ archivo.ext

Lleva mucho menos tiempo que crear un alias. De nada.