awesome


Pues finalmente me puse a experimentar con otra cosa que no sea KDE en mi escritorio, a ver si gano puntos con mi cuate kwame.

Ya he visto otras opciones, y nunca me he acomodado completamente con ninguna como con KDE, pero pues ahora estoy tratando de minimizar el uso de memoria en mi escritorio bajandole el tono a las aplicaciones que corro.

Que mejor manera de bajar el uso de memoria que no-usar-un-desktop-manager-tan-grande-como-KDE !!

Mi apuesta va por awesome, que es una reescritura de “DWM”, y en general creo que trata de hacer mejor las cosas que ion.

En Debian unstable esta el paquete 2.3 de awesome, que no esta mal, pero la version de desarrollo tiene muchas mejoras, entre ellas es mucho mas robusta la configuracion, usa “lua”, lo que sea que eso singnifica.

Para instalar la version de desarrollo hay que bajarla por git (yeah baby!) y compilarla, tiene un buen de dependencias que hay que instalar libxcb*-dev, y varias cosas mas, me da flojerota ir a ver cada una.

El royo mas grande que tuve que decifrar es como mapear una tecla no muy util a la tecla de windows, la lap que uso no tiene tecla de windows (nunca pense que pudiera ser una desventaja), asi que tuve que chutarme todo un round con xmodmap, hasta que me di cuenta que la tecla que estaba tratando de mapear (Fn en un teclado de IBM) es atrapada por BIOS cuando tratas de combinarla !! YAI!!, asi que cuando me di cuenta del detalle, ya habia pasado 1 dia, y muchos intentos de hacerla funcionar, asi que tuve que mapear el control de la derecha como tecla de windows para poder usar awesome en su esplendor.

Estoy escribiendo esto desde awesome corriendo firefox, pidgin, y una terminal

Para eliminar KDE tengo que substituir varias aplicaciones importantes:

  • kmail => esa estuvo relativamente sencilla, configure mutt con imaps y pa’ mandar los correos usa nbsmtp (no-brainer smtp)
  • konqueror => pues igual, en vez de tratar de usar lo minimo firefox, ahora es el unico que uso
  • konsole => tuve que aprender a usar screen, tiene sus detalles, pero me agrada, ya era hora que aprendiera a usarlo realmente
  • amarok => ese si no lo he sustituido, realmente me cuesta, me gusta christine, ya lo he blogueado, pero hay varias cosas de amarok que adoro
  • KDM => todavia no lo quito, me agrada loguearme a traves de una cosa bonita, pero no se que voy a hacer al respecto, de cualquier manera es muy ligero, no afecta
  • widgets => pues el reloj de awesome no me funciona, me esta dando el timestamp, el system tray funciona pero no es tan completo como en un DM de verdad
  • funcionalidad => hago todo lo normal, curiosamente nunca me ha gustado tener todo maximizado, y ahorita lo estoy haciendo, cambio de habitos y nada mas

Todavia hay detalles, como el layout del teclado, que no es “exactamente” lo que necesito, en KDE era sencillo escoger el latinoamericano, y todas las teclas funcionaban correctamente, ahora no se como hacerlo directamente en xorg, porque las alternativas que he probado estan peor que el que tengo ahora, que no pone acentos correctamente (por eso no hay acentos en este post !! si claro).

En fin, la cosa se ve bien, mucho ahorro de recursos, espero que sirva pa que la bateria me dure mas de las 2 horas y media que me estaba durando.



Firefox 3


http://www.spreadfirefox.com/worldrecord

Que esperas ?? ya bajaste hoy, en este momento FF3 ??

Adelante



so much for microbloging


Pues como dicen, el mundo ya se va a acabar, twitter estuvo sufriendo un rato hoy, hasta que finalmente se cayo (por mantenimiento), y acto seguido todo mundo se va a plurk para tumbarlo tambien !!

Excelente no ?



bash history meme reloaded



$ history|awk '{a[$2]++} END{for(i in a){printf "%5d\t%s\n",a[i],i}}'|sort -rn|head
90 vi
50 cd
40 ls
34 python
33 sudo
21 ll
14 man
14 apt-cache
13 perl
12 mv

No había notado que ahora estoy editando tanto, vim siempre ha sido mi editor favorito, pero la vez anterior estaba en tercer lugar, por lo demás parece que ahora estoy haciendo más cosas “administrativas”, seguro la mayoría de los sudos son “sudo apt-get …”, python aparece en los primeros lugares !! eso si es sorpresa, perl también aparece!!, konqueror desapareció, ahora lo uso casi exclusivamente a traves de “alt-F2”. Otra cosa es que ya no bajo tanta cosa, ultimamente solo he usado el bittorrent para bajar algun disco que le hace falta a mi aipo.



Python y (mp3info) ID3V2


Siguiendo con la ardua tarea de modificar los metatags de mp3 para que al meterlos al aipo no me creen una denegación de servicio por hueva.

Como estoy metiendo un par de colecciones que usan múltiples artistas, pues como que no es agradable que ahora las listas categorizadas por artista o por disco tengan en vez de unas 20 entradas, como 200, en 200 artistas o discos es prácticamente imposible encontrar rápidamente lo que a uno se le antoja oír.

Pero resulta ser que por alguna sospechoza razón el gtkpod prefiere los tags ID3v2 que los ID3v1, y pues resulta que el modulito de perl no sabe escribir correctamente los de la versión 2, así que rápidamente dí un googlaso a un modulo similar en python, y taraaaaaaaaaaaaan, así me quedó el script en python

from mutagen.easyid3 import EasyID3                                                                                         
from string import strip
import re

file = open("tt.txt")
for line in file:
line = line[:-1]
ch = EasyID3(line)
p = re.compile('\(|\)')
line = p.sub('-', line)
p = re.compile(r'\-')
x = p.split(line)
n = strip(x[0])
a = strip(x[1])
t = strip(x[2])
y = strip(x[3])
ch["title"] = a + " - " + t
ch["album"] = "100 Gratest Dance Hits of the 90's"
ch["artist"] = "100 Gratest Dance Hits of the 90's"
ch["tracknumber"] = n
ch["date"] = y
ch["genre"] = "Pop"
ch.save()

Unas cuantas líneas ahorradas porque en python existe strip, que hace el trim “bilateral”.

mmmm, pos ta chido, me pregunto cuando voy a pasar de escribir cosas de menos de 100 lineas a hacer algo que realmente valga la pena.



Perl y mp3info


Bajé unos mp3 de rolas de los 90’s, pero sucede que no traía ninguna informacion en los metadatos, pero la información necesaria estaba en el nombre del archivo, así que me puse a hacer un script que sacara los datos del nombre de archivo para imprimir la linea necesaria para ejecutar en shell y actualizar de golpe todos los archivos, pero resulta que varias canciones tenían una comilla, y cositas por el estilo, por lo cual había que escapar los caracteres correctamente para poder ejecutar el dichoso “script”, y pues lo lógico, si estas usando perl, seguro debe haber un módulo para actualizar la información de mp3, y pues lo busqué y simplemente sustituyendo una linea por otra ya pude actualizar los tags de los mp3, pa poder subirlos al aipo y que tengan sentido en el astuto sistema de organización del mismo 🙂

Seguro hay una mejor manera de “sacar la información” de la cadena (nombre del archivo), pero no la conozco :P, así que esto funciona, y bien.

#!/usr/bin/perl
use MP3::Info;
# Declare the subroutines
sub trim($);

open(TT, "tt.txt");
while( $record = <TT> ) {
chop $record;
@cols = split(/-/, $record);
$n = trim($cols[0]);
$a = trim($cols[1]);
@tmp = split(/\(/,$cols[2]);
$t = trim($tmp[0]);
@tmp2 = split(/\)/,$tmp[1]);
$y = $tmp2[0];
set_mp3tag($record, $t, $a, "Top 100 90's", $y, "GaRaGeD", "Pop",$n);
}
close(TT);
exit 0;

# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
# Files in tt.txt are in this format
# 001 - Nirvana - Smells Like Teen Spirit (1992).mp3


Mis aplicaciones favoritas v 2.0


Pos continuando con el post anterior que se quedó muy corto, aqui van otras aplicaciones chidas y que uso con cierta frecuencia

K3b ! por supuesto !!, gracias por despertarme Quique !, esta es una de las aplicaciones más chidas de KDE, te permite quemar CDs o DVDs, copiarlos, sacar imágenes, etc, todo lo que necesitas hacer con un quemador lo puedes hacer con K3b, excepto crear carátulas, creo que eso no lo hace, la verdad nunca he hecho algo así ni tenido un CD que haga eso. Hasta los que odia KDE usan k3b ! 😛

Klipper es otra aplicacion de KDE que es muy extremadamente demasiado útil, el copy/paste estilo *nix es la neta, pero mantener un historial de lo que se ha copiado es simplemente chidisimo

TCPDump entrandole a lo de redes no puedes ignorar a tcpdump, una persona normal realmente no entiende casi nada de lo que escupe tcpdump, pero con un poco de intuición es muy sencillo depurar y encontrar problemas de redes con tcpdump en vivo, y ni se diga de sniffear tráfico para analizarlo despues (no lo hagan en casa).

Wireshark antes etereal, es el complemento ideal para TCPDump cuando necesitas analizar tráfico con detalle, te permite decodificar un monton de protocolos, y analizar de manera muy flexible cualquier archivo de tráfico con formato de libpcap/tcpdump, tambien puede sniffear en vivo, y es muy recomendable para usuarios de windows por ejemplo, por su sencillez de uso.

Ettercap sigue dentro del tema, es un sniffer y decodificador de protocolos muy bueno, es relativamente sencillo de usarse, y tiene monadas como ARP poisonig, puedes hacer Man-in-the-Middle, etc, una excelente herramienta para script kiddies como yo.

LaTex es otra de esas cosas que nadie entiende, pero que son muy útiles, es el editor de textos para masoquistas, pero la verdad es muy bueno, y sobre todo usa texto plano !!, en la era de los formatos para documento que nadie puede abrir en un editor plano, LaTex sigue siendo una de las mejores opciones si quieres que tus textos mantengan un formato sin tener que hacerlo manualmente, y tambien puedes hacer presentaciones (Beamer !!), en fin, es chido, y puedes mantener los archivos de LaTex en un repositorio con todas sus ventajas (Puedes hace run diff !!).

Diffutils complementa todo lo que tiene que ver con código, texto, o similares, es un conjunto de herramientas indispensable para cualquiera que escriba código leible por humanos.

OpenSSH no podía quedarse olvidado !!, no se como se me pasó, es la neta del planeta en lo que a comunicación y transferencia de archivos se refiere, que tiempos aquellos en los que podríamos ver lo que hacían todos por telnet no ??

Rsync es lo que le falta a cualquier protocolo de transferencia de archivos (o copia), permite sincronizar los archivos entre 2 sitios con cierta inteligencia, y es flexible en cuanto al protocolo de transferencia, realmente una belleza.

Apache es otra de esas cosas que no entiendo como se me pasaron, si me acordé de mysql y no de apache !!, bueno pues es EL servidor para Web, hace todo lo imaginable, en teoría Cherokee es casi tan bueno, y con algunas características extras, pero nunca lo he usado 😛

mmm, seguro se me pasan algunas otras, lo curioso es que hasta ahorita, todas las aplicaciones que he mencionado en estos 2 post las uso prácticamente diariamente (wireshark es una de las excepciones), pero uno dá por sentado que están ahí, que ya ni se acuerda, en fin, otra que me viene a la mente ahorita es todo lo relacionado con GCC !!, el compilador de gnu, soporta un buen de lenguajes, es bastante bueno, permite desde debugueo hasta optimización a diferentes niveles,mmmm, creo que va a haber un v 3.0 de este post.



Validación de HTML y dojo


Antes que nada, necesito agrandar mi lista de software favorito :), Enrique y Alejandro fueron tan amables de hacerme ver que esta extremadamente corta en cuestión de herramientas importantes, espero hacerlo mañana !

Y entrando en tema, la validación de HTML es algo que muchos valoramos !! (valga la rebusnancia cacofónica), en el principio de los días WWW-eros se creó un lenguaje para crear la forma de comunicación más importante que tenemos actualmente, la web; este lenguaje implementó los elementos necesarios para hacer tareas tales como insertar texto, títulos, columnas, imágenes, y todo tipo de material multimedia.

Ese lenguaje era bastante burdo, pero fué mejorando relativamente rápido, uno de los grandes pasos fué la inclusión de las hojas de estilo (CSS, Cascade style sheets) para separar vista de presentación, recuerdo la famosa frase de que “el HTML violaba la definición de un documento”, o algo así.

Se empezaron a crear definiciones cada vez mas formales y robustas de lo que ahora conocemos con HTML y el nuevo y mejor XHTML, no solo tenemos definiciones muy formales de como representar los datos de una página y su estilo (HTML y CSS respectivamente), sino que ahora tenemos incluso un gran estandar de comunicacion e interacción hacia lo que se conoce como DOM (Document Object Model) a través de otro lenguaje más, el JavaScript (que dijeron ?? ActionScript ?? pues no, pero se parecen y son como hermanos).

Pero llegó la era 2.0 de la Web !!, ahora no nos conformamos con páginas estáticas, ni siquiera con páginas dinámicas en contenido, ahora queremos que las “aplicaciones web” sean amigables, colaborativas, mashupeables (sin albur), etc.

Que pasa, que o usamos flash para hacer aplicaciones contenidas en un archivo SWF (con herramientas propietarias, y todo lo malo que implica eso), o usar JavaScript y todo su poder para agregarle a las paginitas algo de color, belleza, y movimiento, sin dejar atras usabilidad, rapidez y flexibilidad.

Creo que es la introducción más larga a un blogaso que he escrito en mi vida.

Bueno, siguiendo, obviamente en cuanto apareció la dichosa nueva era del Web 2.0, aparecieron muchas herramientas (bibliotecas) para facilitar el trabajo de crear las páginas bajo la nueva tendencia.

Uno de los más populares, probablemente no el más, es Dojo, que incluye todo lo necesario para hacer AJAX, widgets, layouts, effects, 😛 ya me pasé con el spanglish.

El asunto con Dojo es que graciosamente deciden crearse todo un sistema de creación de efectos y herramientas visuales y funcionales que depende nada más ni nada menos que de la inclusión de un atributo a los tags de HTML, en concreto “dojoType”. Es una forma muy sencilla de crear toda clase de cosas de manera sencilla (el parser de dojo hace el trabajo de localizar los elementos que debe transformar) pero automáticamente invalida no solo XHTML, sino tambien cualquier definición oficial de HTML.

Pero ese no es el fin del mundo, es totalmente posible crear páginas validas (en cuanto a [X]HTML) pero implica un pequeño detalle, hay que programar la creación de todos los elementos !!, ahhhhh, ahora resulta que si tengo que saber JavaScript para hacer una página correcta.

En realidad no es demasiado tedioso hacer la creación de elementos con programación, sobre todo si nos importa mucho crear páginas que sean válidas bajo los estándares de web, pero es un hecho que es más latoso que simplemente irte por la vía rápida y crear todo en el sencillo HTML.

Veamos un ejemplo sencillo, vamos a crear una página con una sola sección que va a contener una tabla tipo “Grid” con todas las bondades que tiene, obviamente le vamos a meter datos, los datos vendrán de un archivo que devuelve json (al estilo django, de ahí lo saqué) que puede representar de manera sencilla la salida de cualquier consulta a una base de datos a través de django (cualquier otro método requiere modificaciones muy sencillas).

Si tienes git, puedes correr “git clone http://garaged.homeip.net/samples/dojosample.git” para bajar el ejemplo, hay que sustituir el link en “my_media/dojo” por un directorio que tenga dojo descomprimido (debe contener dojo,dijit, dojox, util), o puedes bajar el zip.

Usando los atributos de dojo (extrañosa a HTML) podemos simplemente crear un layout directamente en el body:


<body class="tundra">

<div dojoType="dijit.layout.BorderContainer" design="headline"
style="border: 2px solid black; width: 90%; height: 90%; padding: 10px; margin: auto auto auto auto; vertical-align: center;" >
<div dojoType="dijit.layout.ContentPane" region="center" style="width: 100%; height: 100%">
<div id="grid" dojoType="dojox.Grid" structure="layout" title="Tab 2"></div>
</div>
</div>

</body>

Dentro del contenedor ya estamos definiendo un “Grid”, que va a tomar su formato de celdas de un arreglo que se llama “layout”, eso lo definimos en un archivo con JavaScript que llamamos en los headers (grid.js).


var layout = [ {
cells: [[
{name: 'Id'}, {name: 'From'}, {name: 'To'}, {name: 'Spam?'}, {name: 'Score'}
]]
}];

Con ello tenemos ya definido un esquema en el que existe un contenedor principal, que tiene un “hijo” que aloja un “grid” el cual tiene 5 columnas, los datos se cargan con el resto del JavaScript en “grid.js”.


dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.grid.Grid");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them

var data_json = new Array();
function getData(url){
dojo.xhrGet({
url: url,
handleAs: "json",
load: makeGrid // smart function call !
});
}

dojo.addOnLoad(function(){
getData("./data.json");
});

function makeGrid(data, ioArgs) {
var i;
for (i=0 ; i<data.length-1; i++ ) {
data_json[i] = [
data[i].pk,
data[i].fields.from_add,
data[i].fields.to_add,
data[i].fields.spam,
data[i].fields.score
]
}
var Model = new dojox.grid.data.Objects(null, data_json);
dijit.byId("grid").setModel(Model);
}

que entre otras cosas hace lo necesario para que se cargue dojo, y se haga el "parseo" del HTML para cambiar todos los tags que tengan un "dojoType" por el correspondiente "widget". Luego por medio de "dojo.addOnLoad" desencadenamos el proceso que trae el archivo data.json y con un tratamiento nada cesudo se convierte en datos que son procesados para ser incluidos en el "Grid".

En el archivo index.html completo puedes ver que tambien se cargan varios archivos CSS que son indispensables para general la tabla en el formato correcto, y muchoas otras monadas que se hacen por debajo del agua automáticamente.

Este ejemplo fué hecho rompiendo el estandar de HTML, insertamos tags que tienen el atributo "dojoType", el cual no es aceptado, y por tanto la página no es válida segun el estandar.

Ahora veamos un diff de la página creando todo "programaticamente" con JavaScript.


--- index.html 2008-05-29 17:26:00.000000000 -0500
+++ index-programatic.html 2008-05-29 17:25:31.000000000 -0500
@@ -9,23 +9,20 @@
@import "./my_media/dojo/dojo/resources/dojo.css";
@import "./my_media/dojo/dijit/themes/tundra/tundra.css";
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
+ #grid { width: 100%; height: 100%; }
+ #container { border: 2px solid black; width: 90%; height: 90%; margin: auto auto auto auto; vertical-align: center;}
</style>

<script type="text/javascript" src="./my_media/dojo/dojo/dojo.js"
- djConfig="parseOnLoad: true" ></script>
- <script type="text/javascript" src="./my_media/js/grid.js"></script>
+ >
+ </script>
+ <script type="text/javascript" src="./my_media/js/grid-programatic.js"></script>



</head>
-<body class="tundra">
+<body>

-<div dojoType="dijit.layout.BorderContainer" design="headline"
- style="border: 2px solid black; width: 90%; height: 90%; padding: 10px; margin: auto auto auto auto; vertical-align: center;" >
- <div dojoType="dijit.layout.ContentPane" region="center" style="width: 100%; height: 100%">
- <div id="grid" dojoType="dojox.Grid" structure="layout" title="Tab 2"></div>
- </div>
-</div>

</body>
</html>

Notablemente ya no necesitamos el "parseOnLoad" y además el body quedó vacío!

Es porque vamos a hacer todo con JavaScript (mmm, sin palabras). Veamos el diff para grid.js

--- grid.js      2008-05-29 16:55:02.000000000 -0500                                       
+++ grid-programatic.js 2008-05-29 16:54:15.000000000 -0500
@@ -1,7 +1,5 @@
dojo.require("dijit.layout.BorderContainer");
-dojo.require("dijit.layout.ContentPane");
dojo.require("dojox.grid.Grid");
-dojo.require("dojo.parser"); // scan page for widgets and instantiate them

var data_json = new Array();
function getData(url){
@@ -17,6 +15,11 @@
});

function makeGrid(data, ioArgs) {
+ var layout = [ {
+cells: [[
+ {name: 'Id'}, {name: 'From'}, {name: 'To'}, {name: 'Spam?'}, {name: 'Score'}
+ ]]
+ }];
var i;
for (i=0 ; i<data.length-1; i++ ) {
data_json[i] = [
@@ -27,13 +30,23 @@
data[i].fields.score
]
}
- var Model = new dojox.grid.data.Objects(null, data_json);
- dijit.byId("grid").setModel(Model);
+ var cont = new dijit.layout.BorderContainer(
+ { "design": "headline",
+ "id": "container"
+ }
+ );
+ document.body.appendChild(cont.domNode);
+ var newGrid = new dojox.Grid(
+ { "id": "grid",
+ "structure": layout,
+ "region": "center"
+ }
+ );
+ dijit.byId("container").addChild(newGrid);
+ Model = new dojox.grid.data.Table(null, data_json);
+ dijit.byId('grid').setModel(Model);
+ newGrid.render();
+
}

-var layout = [ {
-cells: [[
- {name: 'Id'}, {name: 'From'}, {name: 'To'}, {name: 'Spam?'}, {name: 'Score'}
- ]]
-}];

Ahora el arreglo "layout" que define las columnas del "Grid" está en la funcion que lo hace, ya no necesitamos que sea accesible desde fuera de esta función.

Secuencialmente en la función "makeGrid" creamos un contenedor (ya no se hace en HTML), y le insertamos un hijo que va a ser el Grid, luego alimentamos ese Grid con los datos que traemos por medio de AJAX (por si no se notó) y finalmente llamamos al "render" de la tabla.

Con estos cambios, que aunque no son demasiado complicados, si requieren de más cesos, principalmente porque NO HAY DOCUMENTACIÓN de como hacer BorderContainer programacionalmente todavía en dojo, así que uno se tiene que chutar amablemente el código en JavaScript y entenderlo lo suficiente como para aprender a hacer lo que hace el parseador de los BorderContainer en dojo.

Con esto doy por terminado el día, y como nota hay que poner un

en el body para que valide, aparentemente un body vacío no es válido !! aún así no se logra validar 100% !! jajajaja

Cabe mencionar que herramientas como scriptaculous y meteora hacen todo programáticamente, por lo que en una de esas es preferible usarlas, pero a mi me gusta dojo 😛



Axis of Justice


Esto es algo que me hace sentir muy mal, porque soy un hipócrita como muchos, me parece que las cosas estan muy mal, pero no hago nada.

Axis of Justices es un sitio que mantienen Serj Tankian (vocalista de System of a Down) y Tom Morello (Guitarrista de Rage Against the Machine y Audioslave) dedicado a hacer conciencia sobre un monton de injusticias que se dan contra gente que poco puede hacer para defenderse.

Yo siempre he tenido ese sentimiento de que las cosas están tan mall porque no hacemos nada para mejorarlas, y este tipo de actividades es de lo poco que se puede hacer sin violencia, pero desgraciadamente tambien muy pocas personas lo hacen. Michael Moore por ejemplo es de los pocos que ha hecho “popular” el activismo, y bueno, claro está geenpeace.

Obviamente he sido testigo de la molestia que es el simple hecho de pedir un sueldo justo, y sobre todo hablar del tema con compañeros de trabajo, con lo cual me queda claro porque la mayoría no hacemos nada por mejorar la vida de los demás, porque la nuestra puede acabar peor 🙂

En fin, ojalá que algun día encuentre la fuerza para ser mas activo, y tratar por lo menos de hacer ruido, la fé es lo último que se pierde, y tengo fe en que el mundo puede cambiar.

p.d. Todo esto resultado de una sencilla plática sobre música



Mis aplicaciones favoritas


Obviamente son libres (como en la cerveza de europa y otros lugares donde si es libre)

Soy un gran admirador del Software Libre (SL) (chequen que voy a tratar de escribir lo más correctamente que puedo) y afortunadamente pocas veces tengo que enfrentarme al mundo propietario, con excepción de cuando me piden ayuda para algo de windows (por qué las personas pensaran que si te dedicas a las compus debes saber todo sobre cualquier aplicación de windows?) y el diario uso de mi “aipo touch”, porque no solo “odio” (en realidad si lo odio, las comillas están demas) tambien a la mac la odio, y el aipo es chidisimo, y en general el sistema puede ser decente si lo ves de un punto de vista positivo, pero no me gusta, y odio las políticas de esa empresa para crear aplicaciones (lástima que todavia no hay un linux instalable pal aipo).

Mi vida diaria gira en torno a linux y *nix en general, aunque el 99% del tiempo gira en torno a Linux realmente. En los como 8 años que tengo de usarlo he aprendido un monton de cosas, probablemente la más importante en mi vida es vivir usando Linux, solo tengo que usar otros sistemas operativos cuando de plano linux no está accesible o no puede hacer lo que quiero en ese momento (itunes y juegos prácticamente).

Y bueno, entre lo que más me gusta del SL, normalmente sobre Linux, están:

KDE !! que maravilla de cosa, adoro el eyecandy, yo no soy de los que andan haciendo trucos con screen todo el día, yo prefiero un escritorio con muchas aplicaciones para lo que sea, y que se pueda modificar a mi gusto y que se vea bonito incluso si no lo modifico.

Firefox es otra de esas cosas que agradezco en el mundo, es bastante bueno, sobre todo si usas windows, lo primero que hago cuando estoy usando una máquina con windows es instalarle el firefox.

Konqueror !! está incluido en KDE, pero es un mundo por si solo, es mi navegador favorito, realmente firefox lo uso para acceder a las aplicaciones de google que uso (blogger, gmail, reader, etc). Es un navegador muy bueno, por ejemplo su soporte del estandar de CSS es mejor que el de FF, pero en javascript se queda un poco abajo, aunque no mucho realmente.

Pidgin es mi mensajero multi protocolo, he usado otros, pero es el que más me gusta, y el que he usado desde hace bastantes años. Tiene ciertas deficiencias contra otros mensajeros (no soporta voz ni video) pero nunca uso esas características realmente.

Vim es mi editor favorito, prefiero un editor robusto a un sistema operativo que carezca de editor :P, la verdad es que es una maravilla, estoy seguro que emacs es una maravilla tambien, pero nunca lo usé realmente, empecé con vim y así sigo, tiene tantas cosas que cuando aprendes lo suficiente, no quieres volver atras.

Subversion y Git son los 2 sistemas para manejo de versiones que uso, realmente empecé a usar Git hace como 1 mes si acaso, por que ya había visto demasiados comentarios buenos, y la famosa plática de Linus en google al respecto, y la verdad es que si es una maravilla, todavía uso SVN y me sigue gustando, pero es muy obvia la superioridad de Git.

PHP es el primer lenguaje decente que aprendí a usar realmente, antes que PHP había usado otros lenguajes “viejitos”, y el que mejor sabía era fortran, pero realmente aprendía programar como gente decente con PHP (que paradoja no ?), gracias a PHP aprendí mucho de la lógica de programación y despues pude entender mucho mejor lenguajes como Perl y Python, y bueno, con la introducción a la POO que tuve con PHP (es obvia la deficiencia en profundidad) aprendí a entender C++ por ejemplo, o Java, aunque no podría hacer ni el hello world en ellos, los puedo leer y entender, e incluso modificar 🙂 a pesar de que no se ni la introduccion de ellos.

MySQL aunque no es un verdadero RDBS segun los expertos, es como PHP para mi, me enseñó muchisimo, y con MySQL he podido hacer todo lo que he necesitado de una base de datos hasta ahora.

GTKPod este es un salva vidas, gracias a libgpod y gtkpod no tengo que reiniciar la compu en windows para poder hecharle archivos al aipo, hagame el refabron cabor !! pq tiene que ser necesario ??? por qué ???

Amarok este es el claro ejemplo de que la lista no es por algun orden en particular, Amarok es definitivamente mi aplicación favorita para oír música, tambien me gusta Christine pero si hay varias características que no tienen y que encuentro demasiado atractivas en Amarok.

Bash es mi “shell” favorito, no es que conozca demasiados realmente, empecé con el histórico “sh” en unix, luego el csh, tcsh, y luego en linux con bash, y ahí me quedé, probablemente si me pusiera a explorar zsh me gustaría igual o más, pero nunca me he dado el tiempo.

Python definitivamente mi lenguaje favorito, soy fanatico de las cosas sencillas, prefiero dedicarle 1 día a programar una rutina que pueda reusar en todo lo que se aplique, a programar un monton de lineas que funcionan pero que no van a ser genéricas, python me permite hacer eso, todavía me falta muchisimo por aprenderle, pero es una maravilla.

Django está hecho en Python, y está bien hecho !!, es mi ambiente favorito para desarrollo web, lástima que ya no me dedico a eso, pero sigo aprendiendo a usarlo.

Dojo es otra de esas herramientas que uno aprende a adorar, es una biblioteca de JavaScript que sirve casi para lo que sea, desde embellecer una página, ponerle “widgets”, AJAX, etc. Es una verdadera belleza para desarrollo web, hay cosas similares, pero a mi me gusta dojo.

Smarty es la neta si se trata de algo más que plantillas en web con PHP, es una herramienta muy amigable y flexible, nunca he visto algo que me acomode mejor para desarrollo web con PHP.

ADOdb es otra herramienta muy útil para PHP, tambien hay un port para Python, pero en Python hay cosas mejores realmente.

Kmail no puede quedarse sin mención, es mi cliente de correo favorito, por supuesto la integración con KDE tiene mucho que ver, pero no solo es eso, es su rapidez, funcionalidad, flexibilidad, etc, es una aplicación realmente muy completa para manejar correo electrónico.

Estoy seguro que se me pasan varias importantes, luego actualizo este post si recuerdo algo que valga la pena 😛