jueves, julio 26, 2007

¡Ahora si se va a acabar el mundo!

En el feed de Port 25, encuentro el anuncio de nueva Comunidad Open Source en Microsoft.

¡!

Sip, leyeron bien. Open Source y Microsoft sin ningún vs. de por medio.

Resulta que los chicos y chicas de Redmond, después de casi un año de Port 25, de participar en la mayoría de las grandes conferencias de Open Source, de ayudar a morir a un proyecto (NDoc vs. Sandcastle), de litigar en contra de un ¿ex-?-MVP por publicar un proyecto Open Source que "infringe" una licencia, de anunciar que Linux viola patentes de Microsoft, de..... ¡ash! ya me cansé....

En su FAQ reconocen al movimiento Open Source como una metodología de desarrollo. Mantienen su postura frente a la propiedad intelectual, patentes, copyright, trademark como partes importantes del ciclo de innovación de la industria de las TI's. Muestran a sus partners que trabajan con proyectos Open Source (incluyendo Novell).

Entonces, ¿cuál es el punto? ¿son o no son? Realmente no han cambiado de fondo. ¿será solo un escenario rosa? ¿será que sienten la presión de casos donde se ha dejado atrás toda la infraestructura Microsoft? ¿será que el mundo se va a acabar?

El de ellos, más tarde que temprano, pero sin duda.

Finito.

miércoles, julio 25, 2007

Ayer todavía te cargaba en mis brazos

Y hoy casi me miras a los ojos.

Féliz cumpleaños Jorge Alberto.

Finito.

lunes, julio 23, 2007

IronRuby para todos

John Lam, ha hecho publica la primera liberación de IronRuby.


Soporta la integración con las bibliotecas estándar de .NET, para usarlas se debe incluir lo siguiente:
require 'mscorlib'
require 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

Tomar nota en que se está especificando el nombre calificado del assembly.

También se pueden usar clases aún sin haberlas incluido, como sigue:

Window = System::Windows::Forms::Window
Han hecho comparaciones contra Ruby 1.8.6 y reportan al menos un desempeño equiparable en relación a las bibliotecas, en las llamadas a métodos dicen ser más rápidos. Sin embargo, parece ser que hay algunos problemas de desempeño cuando se levantan excepciones.

Considero este anuncio importante desde el momento en que mostraron Silverlight lo acompañaron de un demo de IronRuby. Hace unos meses, Scott Hanselman comentaba acerca del distanciamiento de Microsoft y los Alpha Geeks. No sé si esta liberación es bluffing para recuperar Alpha Geeks o realmente Microsoft tiene interés en Ruby.

Finito.

domingo, julio 22, 2007

¡Qué se acabe la envidia!

Después del ejercicio de hace unos momentos, me quedé nawebe@ando un rato más (¡qué raro!) y encontré un algo harto interesante: apt-build.

Creo que no soy el único que le da cosquillas eso de ajustar como un guante tus aplicaciones, así que inventaron ese instalador. Si no les ha caído el veinte o si no leyeron el post anterior, éste comando sirve para descargar el paquete de código fuente, compilarlo e instalarlo en tu sistema.

Bueno, es domingo de web@ y de "father in the works" así que solo dejo los siguientes links pa'que se entretengan un rato.

http://julien.danjou.info/article-apt-build.html
http://cronopios.net/Traducciones/apt-build.es.html
http://www.esdebian.org/article.php?story=20050104002515330
http://mundogeek.net/archivos/2007/05/12/apt-build-optimizando-los-paquetes-para-nuestra-maquina/
http://gentoo-wiki.com/Safe_Cflags
http://www.ubuntu-es.org/index.php?q=node/1265

Finito.

Compilando paquetes en Ubuntu

Una de las cosas que más me interesa de Gentoo, es la adaptabilidad al host. Esto es, al compilar cada paquete en el host, este queda lo más afinado posible. Pero.... sigo teniendo en mi laptop Ubuntu.

Algo que me irritaba de pequeña pero constante manera era ver en la terminal el siguiente mensaje:

$ ruby -v
ruby [i486-linux]

Así que para probar esto de la compilada de paquetes de código fuente, mi primera víctima fue Ruby.

¿Cómo hacerle?

De inicio hice un directorio para guardar ahí todo lo relacionado:

~/src/ruby

a continuación descargué los paquetes de código fuente. Si bien aparecen decenas de paquetes lib*-ruby, realmente solo me fuí por el núcleo.

apt-get source ruby1.8 irb1.8 rdoc1.8

luego, en el directorio donde se encuentra el código, iniciar la venerable secuencia de configurar..

configure --prefix={your prefix} --enable-pthread --enable-install-doc --enable-shared

... construir ...
make

...y probar

make check

et voilà, c'est fini!

sudo make install

ahora al probar de nuevo

$ ruby -v
ruby 1.8.5 (2006-08-25) [i686-linux]

¡Correcto! Ahora ¿qué sigue? ¿será la próxima víctima el kernel?

Finito.

viernes, julio 20, 2007

Otro script con Ruby

Y heme aquí, otra vez dándole al scripting con Ruby.

Ahora la tarea encomendada fue convertir un archivo CSV a un simple archivo XML.

Esto es de aquí:

20117252110,11.103.2.14
020126252110,11.102.2.24
020201052151,172.16.47.14
020301022151,11.44.2.14
020401052151,11.43.2.14
...


hasta acá:

<ruteo>
<ruta>
<clave_presupuestal>20117252110</clave_presupuestal>
<direccion_ip>11.103.2.14</direccion_ip>
</ruta>
</ruteo>


Entonces ¿qué hice? Lo primero fue recurrir a un par de libros. La biblia de Ruby: Programming Ruby y Enterprise Integration with Ruby. Además de encontrar en línea la documentación de la biblioteca estándar en ruby-doc.org. Así encontré felizmente que como todo lenguaje que se precie de ser moderno, la biblioteca estándar viene con clases para manejar XML. Dado... ¡a tirar código!


# traemos el conjunto de clases para el manejo de XML
require 'rexml/document'

# vamos a crea rutas
class Ruta
# esto es increible, con este método se crean las propiedades de lectura/escritura
attr_accessor :direccion_ip, :clave_presupuestal

# el constructor
def initialize(clave_presupuestal, direccion_ip)
@clave_presupuestal = clave_presupuestal
@direccion_ip = direccion_ip
end

# el método que hace la chamba
def to_xml
ruta = REXML::Element.new('ruta')

# creamos los elementos y les asignamos valor
# las @variables tienen alcance únicamente en esta clase
ruta.add_element('clave_presupuestal').add_text(@clave_presupuestal)
ruta.add_element('direccion_ip').add_text(@direccion_ip)

# regresamos el elemento XML que acabamos de crear
ruta
end

# solo para probar
def to_s
@direccion_ip + " " + @clave_presupuestal
end
end

class Ruteador

def initialize
# creamos el documento y el nodo raíz
@doc = REXML::Document.new
@ruteo = REXML::Element.new("ruteo")
end

def lee_informacion(nombre_archivo)
f = File.open(nombre_archivo, "r+")

# leemos el archivo línea x línea y lo guardamos
# en el array @lista cool!
@lista = f.readlines()
f.close
end

# este método hace la chamba
def convierte
# el arreglo con los datos convertidos desde CSV
@convertido = Array.new

# iterators! un regalo del cielo
# y code blocks!
@lista.each do |line|
# recortamos cada línea y la separamos entre cada coma ','
clave_presupuestal, direccion_ip = line.chomp.split(',')

# esto es simplemente hermoso
# agregamos al arreglo @convertido un nuevo objeto Ruta
# pero chequen: no 'add' method, use '<<' instead
@convertido << Ruta.new(clave_presupuestal, direccion_ip)
end
end

# ahora, a escupirlo....
def escribe_xml(nombre_archivo)

# otra vez iterators & code blocks <- this rulz!
@convertido.each do |entry|
# ¿recuerdadn Ruta.to_xml?
@ruteo.add_element(entry.to_xml)
end

# agregamos el nuevo objeto al documento
@doc.add_element(@ruteo)

# y a ponerlo por escrito
f = File.open(nombre_archivo, 'w+')

# esto también es chulo de bonito, chingao!
@doc.write(f, 0)
f.close
end
end

# a poner todo a trabajar
ruteo = Ruteador.new

ruteo.lee_informacion("rutas.csv")
ruteo.convierte
ruteo.escribe_xml("demo")


Finito.

jueves, julio 19, 2007

La dieta del ChilliCoder

En febrero empecé un tratamiento para bajar de peso con muy buenos resultados. Tanto así que mucha gente me ha felicitado y a la vez aprovecha la ocasión para preguntar el método.

He decidido revelar el secreto de la Dieta del ChilliCoder.

Hasta con imágenes.

La carne es un excelente medio para controlar el peso (del animal sacrificado).

Sacrificios que debe hacer uno para ser féliz.

Finito.

miércoles, julio 18, 2007

Otra aplicación web

Gracias al blog de Marcos Cobeña me encontré esta interesante aplicación: Gliffy.

Ahora resulta que podemos hacer diagramas tipo Visio o Dia en nuestro navegador. ¡Excelente! Ultimamente me había inclinado por aplicaciones de escritorio y consideraba las aplicaciones web para puro entreteniento o cosas superficiales, pero al irme haciendo cliente de las aplicaciones y servicios Google me voy despegando del escritorio.

Manejo proyectos con Google Code. Comparto documentos con Google Docs. Manejo mis listas de acciones con Google Notebook. Leo mis feeds con Google Reader. Mi correo electrónico es GMail. Y ahora hago mapas mentales con bubbl.us y diagramas con Gliffy.

¿Cuál es la ventaja? En primer lugar la ubicación transparente. No más memorias flash o discos duros externos. En casi cualquier computadora puedo trabajar. A cualquier hora.

¿Desventajas? Depender de una conexión a internet. O sufrir si es una conexión lenta. El riesgo siempre latente de no tener la ultimisisisisima versión en la mano y obvio, de que alguien más o algo más se la pase parseando o scanneando todos mis pensamientos vertidos.

Hasta ahora han sido más ventajas pero no deja de sorprenderme. Bien dice Thomas Friedman en su libro "La tierra es plana": internet es una de las aplanadoras.

Finito.

martes, julio 10, 2007

bubbl.us - free web application for brainstorming online

bubbl.us - free web application for brainstorming online

Ya había encontrado en un post noticias sobre sitios web que ofrecen el servicio de mapas mentales. No los había tomado mucho en cuenta hasta que empecé a usar con más frecuencia Google Docs y su capacidad de compartir documentos. Sin embargo Google Docs solo soporta documentos tradicionales: hoja de cálculo y texto :(

En una rápida búsqueda en San Google encontré Mindomo, que era el sitio acerca del que leí y encontré también este otro bubbl.us. Hice el trámite para registrarme en los dos y simple y sencillamente bubbl.us me encantó. Muy a la Library Thing lo único que tienes que hacer es dar tu correo, nombre de usuario y contraseña y voilà! ¡Estás inscrito y listo para usar el servicio! Y es así, en cuanto di Submit apareció el canvas y empecé a dibujar mi mapa mental.

Mindomo por otra parte, te envía un correo de confirmación y en lo que escribo este post sigue cargando su "canvas".

Obvia cual fue mi decisión ¿cierto?

Finito.

miércoles, julio 04, 2007

Scripteando con Ruby

Hoy tuve que procesar un archivo de direcciones ip para contabilizar el número de conexiones desde cada dirección. Cosa simple ¿no?

Seguramente en las herramientas de todos los días (shell) lo hubiera conseguido en algunos minutos. Habrá quien lo resuelva en unas cuantas líneas de Perl, tal vez Python o whatever.

Sin embargo tuve la linda ocurrencia de hacerlo con Ruby. ¡¿Ruby?! ¿No solamente es para hacer aplicaciones web y frameworks? Pues no, creo que no.

Por alguna referencia encontré Everyday scripting with Ruby. No he comprado el libro pero el título me motivó para hacer esta prueba. ¿Puede ser Ruby un lenguaje que compita contra Perl? Muchos de los scripts de administración se construyen religiosamente con Perl o en mi caso mayormente con shell. Pero quisé probar Ruby en algo que no fuera el hype de Rails.

Realmente el problema es sencillito. Pero la experiencia es harto interesante. De inicio conseguir ayuda. ri es terriblemente práctico. Respuestas concisas, precisas y macizas. Luego la experiencia iterativa e interactiva. Vas ejecutando, encontrando errores y corrigiendo (al menos a este nivel de experiencia) lo cual es altamente ¿didáctico?. Aparece un error y corres a ri para confirmar si lo que quisiste hacer se puede. Te das cuenta del error, corriges y va de nuez.

Si bien existen pruebas unitarias, es un punto que lo veo más asociado a desarrollo de aplicaciones. En este momento no veo que tanta utilidad pudieran tener para los scripts de administración.

Fue padre. Si, lo acepto. Me tardé más tiempo de lo que requiere la tarea pero valió la pena. Voy a buscar la manera de hacerlo más seguido. De hecho, voy a solicitar que instalen Ruby en los Solaris. A ver si no se me paniquean. :D

Finito.