El año pasado me uní a la celebración internacional del día del blog, y finalmente la fecha nos ha alcanzado de nuevo.
Parte de la celebración es referir cinco blogs que leo frecuentemente.
Los nominados son:
Tecnológicos
Gente
Finito.
Anotaciones de diversos temas relacionados con código abierto, metodologías de desarrollo y programación con Ruby on Rails
viernes, agosto 31, 2007
jueves, agosto 30, 2007
Casi por sorpresa
Sin mayor preámbulo, apareció en la página de descargas la versión 1.2.5 de Mono. Se encuentra disponible para casi todas las plataformas (de hecho, creo que la única que falta es Solaris).
Finito.
Finito.
Etiquetas:
community,
development,
dotnet,
milestone,
mono
viernes, agosto 24, 2007
La verda' no se puede ocultar
Hace rato posteé sobre el video de Rails vs. .NET, me pareció bueno pero lo que viene a continuación es simplemente..... ¡¡¡GENIAL!!!
Me encanta la última escena.
Finito.
Me encanta la última escena.
Finito.
Rails vs. .NET
Estos weyes de Rails Envy 'tan K's. Pa'que no se sientan desamparados los pehacheperos también le dedican uno de sus video parodias a .NET. Enjoy it!
Finito.
Finito.
Etiquetas:
crossposting,
development,
dotnet,
fun,
rails,
video
jueves, agosto 23, 2007
La construcción de los Helpers
Derivado del desarrollo de Operación PyME y un poco de sentido común aparece la tarea de construir un framework para construir más rápidamente y fácilmente la aplicación.
Se ha vuelto un concepto casi obligado el utilizar un framework de objetos de negocio pero ¿qué entendemos por esto? Un conjunto de clases que permiten modelar los objetos de un dominio y nos permitan olvidarnos de las tareas mundanas. La idea de fondo es utilizar la mayor parte de nuestra energía solucionando problemas de negocio y la menos posible en los problemas de tecnología.
Así han aparecido en el medio infinidad de frameworks con este objetivo, en todos los lenguajes y en todas las plataformas. Hasta parece que ya se ha llegado a un punto de saturación para estos proyectos. Sin embargo siguen apareciendo.
No existe el framework perfecto, como tampoco el lenguaje perfecto ni la plataforma perfecta. Y siguiendo nuestro inevitable anhelo de perfección vamos creando más proyectos tratando de solventar los errores que encontramos en otros.
No existe una metodología perfecta para construir un framework, generalmente la construcción es influenciada por el tema de moda: aspectos, programación orientada a objetos, inyección de dependencias, objetos auto-suficientes. Algunas empresas han publicado documentos para describir como han concebido y construido los frameworks que ofrecen. Entre estas últimas aparece notoriamente Microsoft.
Después de lanzar al mercado la tecnología .NET, Microsoft ha batallado duramente para posicionarla como una tecnología empresarial (cualquiera que sea su significado). Parte de esos esfuerzos ha sido el desarrollo de bibliotecas de componentes que faciliten el desarrollo de aplicaciones. El esfuerzo inicial dio como resultados los elementos que se conocieron como Application Blocks.
Estos eran conjuntos de clases con un objetivo delimitado. Lo más interesante fue que las construyeron a partir de un análisis que compartieron en forma de guías. En estos documentos exponen los elementos que se consideraron durante el diseño describiendo detalladamente los escenarios y la manera de aplicar la tecnología .NET para construir estas bibliotecas.
Estas bibliotecas fueron rápidamente adoptadas por la comunidad de desarrolladores quienes además fueron enriqueciendo con sus experiencias propias la funcionalidad de las clases incluidas e incluso se combinaron en un nuevo producto que se conoce como Enterprise Library. Sin embargo, tras la aparición del proyecto Mono, que permite la ejecución de programas desarrollados con .NET en plataformas no Windows, se incluyó en la licencia una cláusula que impide la ejecución de los Application Blocks en sistemas operativos distintos a los construidos por Microsoft.
Así que ahora, a pesar de ser elementos tan útiles, los Application Blocks no pueden ser utilizados en Linux o Mac OSX. Existen en el mundo del código abierto cada vez más proyectos basados en .NET y algunos de ellos pudieran resolver los mismos escenarios que se presentan en el diseño de las bibliotecas de Microsoft el ejemplo de inicio es log4net, una biblioteca de clases para registrar entradas en diferentes destinos que forma parte del proyecto Logging Services de la Fundación Apache.
Y también existen otros proyectos que ofrecen alternativas para los otros Application Blocks existentes sin embargo la principal ventaja de la oferta de Microsoft es la unificación que han conseguido y que en los proyectos de software libre se encuentran dispersos e inmersos en otros proyectos y una implementación sencilla, directa y única simplemente no existe.
Así que esta iniciativa (si, una más) es la de tener en un solo conjunto esta funcionalidad partiendo en primer lugar de proyectos ya existentes, como log4net, mostrando como es que se cumplen los escenarios descritos en la documentación de Microsoft y construyendo los elementos necesarios retomando código o creando nuevo para satisfacer las necesidades planteadas por las guías de referencia.
Y si no fuera suficiente... habrá más sobre el tema.
Finito.
Se ha vuelto un concepto casi obligado el utilizar un framework de objetos de negocio pero ¿qué entendemos por esto? Un conjunto de clases que permiten modelar los objetos de un dominio y nos permitan olvidarnos de las tareas mundanas. La idea de fondo es utilizar la mayor parte de nuestra energía solucionando problemas de negocio y la menos posible en los problemas de tecnología.
Así han aparecido en el medio infinidad de frameworks con este objetivo, en todos los lenguajes y en todas las plataformas. Hasta parece que ya se ha llegado a un punto de saturación para estos proyectos. Sin embargo siguen apareciendo.
No existe el framework perfecto, como tampoco el lenguaje perfecto ni la plataforma perfecta. Y siguiendo nuestro inevitable anhelo de perfección vamos creando más proyectos tratando de solventar los errores que encontramos en otros.
No existe una metodología perfecta para construir un framework, generalmente la construcción es influenciada por el tema de moda: aspectos, programación orientada a objetos, inyección de dependencias, objetos auto-suficientes. Algunas empresas han publicado documentos para describir como han concebido y construido los frameworks que ofrecen. Entre estas últimas aparece notoriamente Microsoft.
Después de lanzar al mercado la tecnología .NET, Microsoft ha batallado duramente para posicionarla como una tecnología empresarial (cualquiera que sea su significado). Parte de esos esfuerzos ha sido el desarrollo de bibliotecas de componentes que faciliten el desarrollo de aplicaciones. El esfuerzo inicial dio como resultados los elementos que se conocieron como Application Blocks.
Estos eran conjuntos de clases con un objetivo delimitado. Lo más interesante fue que las construyeron a partir de un análisis que compartieron en forma de guías. En estos documentos exponen los elementos que se consideraron durante el diseño describiendo detalladamente los escenarios y la manera de aplicar la tecnología .NET para construir estas bibliotecas.
Estas bibliotecas fueron rápidamente adoptadas por la comunidad de desarrolladores quienes además fueron enriqueciendo con sus experiencias propias la funcionalidad de las clases incluidas e incluso se combinaron en un nuevo producto que se conoce como Enterprise Library. Sin embargo, tras la aparición del proyecto Mono, que permite la ejecución de programas desarrollados con .NET en plataformas no Windows, se incluyó en la licencia una cláusula que impide la ejecución de los Application Blocks en sistemas operativos distintos a los construidos por Microsoft.
Así que ahora, a pesar de ser elementos tan útiles, los Application Blocks no pueden ser utilizados en Linux o Mac OSX. Existen en el mundo del código abierto cada vez más proyectos basados en .NET y algunos de ellos pudieran resolver los mismos escenarios que se presentan en el diseño de las bibliotecas de Microsoft el ejemplo de inicio es log4net, una biblioteca de clases para registrar entradas en diferentes destinos que forma parte del proyecto Logging Services de la Fundación Apache.
Y también existen otros proyectos que ofrecen alternativas para los otros Application Blocks existentes sin embargo la principal ventaja de la oferta de Microsoft es la unificación que han conseguido y que en los proyectos de software libre se encuentran dispersos e inmersos en otros proyectos y una implementación sencilla, directa y única simplemente no existe.
Así que esta iniciativa (si, una más) es la de tener en un solo conjunto esta funcionalidad partiendo en primer lugar de proyectos ya existentes, como log4net, mostrando como es que se cumplen los escenarios descritos en la documentación de Microsoft y construyendo los elementos necesarios retomando código o creando nuevo para satisfacer las necesidades planteadas por las guías de referencia.
Y si no fuera suficiente... habrá más sobre el tema.
Finito.
Etiquetas:
development,
dotnet,
milestone,
mono,
opensource,
opinion
miércoles, agosto 22, 2007
Uno de muchas
En este post tengo que agregar varias, varias notas.
Para la gente con la que tengo contacto más directo, principalmente por twitter esto ya no es noticia: ahora soy el flamante propietario de una Apple Macbook :P ¡Lo hice!
Ha sido una experiencia bastante rica, un ambiente agradable, un desempeño excelente y un ambiente familiar, después de todo en el fondo se trata de una variante de *nix. El único problema ha sido AirPort. Nomás no puedo configurarlo con los pinchis modems 2wire. Sucks.
Lo primero fue configurar un ambiente de desarrollo para lo cual me apoyé en los MacPorts, sin ahondar en detalles es un tipo de emerge: get code, compile, install. Easy, easy. Aún así me costó trabajo generar un ambiente para compilar Mono, cosa que conseguí hasta hoy.
Otra cosa agradable fue que resolvieron un bug que levanté en Mono, más detalles en mi blog hermano PartnerApi.
En la parte de las malas nuevas, mi ponencia fue rechazada en el EnLi ¡buaaa! ni modos :( (Sí quería ir).
Otra mala noticia es que pasó menos tiempo en línea gracias a los errores de Hellmex. Me suspendieron el servicio de banda ancha y teléfono por el desmadre que traen con el contrato desde que cambiamos de domicilio. Nomás pa'que le midan: el recibo con el nuevo número sigue llegando al domicilio anterior :S
Y pus bueno, sigo en el underground con Operación PyME. Ahora se me ha clavado la loca idea de desarrollar (bueno, seguir desarrollando) un framework que usé hace un par de años derivado de CSLA.NET y además una serie de Helpers muy similares a los famosos ApplicationBlocks; ya estaré posteando más detalles.
Finito.
Para la gente con la que tengo contacto más directo, principalmente por twitter esto ya no es noticia: ahora soy el flamante propietario de una Apple Macbook :P ¡Lo hice!
Ha sido una experiencia bastante rica, un ambiente agradable, un desempeño excelente y un ambiente familiar, después de todo en el fondo se trata de una variante de *nix. El único problema ha sido AirPort. Nomás no puedo configurarlo con los pinchis modems 2wire. Sucks.
Lo primero fue configurar un ambiente de desarrollo para lo cual me apoyé en los MacPorts, sin ahondar en detalles es un tipo de emerge: get code, compile, install. Easy, easy. Aún así me costó trabajo generar un ambiente para compilar Mono, cosa que conseguí hasta hoy.
Otra cosa agradable fue que resolvieron un bug que levanté en Mono, más detalles en mi blog hermano PartnerApi.
En la parte de las malas nuevas, mi ponencia fue rechazada en el EnLi ¡buaaa! ni modos :( (Sí quería ir).
Otra mala noticia es que pasó menos tiempo en línea gracias a los errores de Hellmex. Me suspendieron el servicio de banda ancha y teléfono por el desmadre que traen con el contrato desde que cambiamos de domicilio. Nomás pa'que le midan: el recibo con el nuevo número sigue llegando al domicilio anterior :S
Y pus bueno, sigo en el underground con Operación PyME. Ahora se me ha clavado la loca idea de desarrollar (bueno, seguir desarrollando) un framework que usé hace un par de años derivado de CSLA.NET y además una serie de Helpers muy similares a los famosos ApplicationBlocks; ya estaré posteando más detalles.
Finito.
martes, agosto 14, 2007
Misterio sin resolver
Entre mis feeds de hoy me encontré este post que refiere a este otro. ¿Cuál es la gracia? Se trata del código fuente de la página principal de Facebook (según su dicho).
Independientemente de esta situación, me parece el clásico ejemplo PHP: ininteligible, aburrido y extremadamente "verbal".
Mi punto de vista sobre un lenguaje siempre nace la capacidad de 1) representar un modelo de dominio y 2) el esfuerzo para representar éste. A lo largo de ya algunos años he conocido y trabajado con dos modelos para construir software, con n lenguajes y en n plataformas. En cualquier caso he ido saltando de lenguaje conforme apareció otro que me representara una ventaja sobre el actual tomando como referencia los numerales anteriores.
En concreto, con PHP no se obtiene ventaja de uno u otro aspecto. Y cuando volteo y me encuentro con RoR, simplemente se afirma mi punto de vista y aumenta mi duda ¿cómo es que PHP llegó a tener la difusión que goza actualmente?
Finito.
Independientemente de esta situación, me parece el clásico ejemplo PHP: ininteligible, aburrido y extremadamente "verbal".
Mi punto de vista sobre un lenguaje siempre nace la capacidad de 1) representar un modelo de dominio y 2) el esfuerzo para representar éste. A lo largo de ya algunos años he conocido y trabajado con dos modelos para construir software, con n lenguajes y en n plataformas. En cualquier caso he ido saltando de lenguaje conforme apareció otro que me representara una ventaja sobre el actual tomando como referencia los numerales anteriores.
En concreto, con PHP no se obtiene ventaja de uno u otro aspecto. Y cuando volteo y me encuentro con RoR, simplemente se afirma mi punto de vista y aumenta mi duda ¿cómo es que PHP llegó a tener la difusión que goza actualmente?
Finito.
Etiquetas:
development,
opinion,
rails,
ruby
lunes, agosto 13, 2007
Y viceversa
Tengo miedo de verte
necesidad de verte
esperanza de verte
desazones de verte.
Tengo ganas de hallarte
preocupación de hallarte
certidumbre de hallarte
pobres dudas de hallarte.
Tengo urgencia de oírte
alegría de oírte
buena suerte de oírte
y temores de oírte.
o sea,
resumiendo
estoy jodido
y radiante
quizá más lo primero
que lo segundo
y también
viceversa.
necesidad de verte
esperanza de verte
desazones de verte.
Tengo ganas de hallarte
preocupación de hallarte
certidumbre de hallarte
pobres dudas de hallarte.
Tengo urgencia de oírte
alegría de oírte
buena suerte de oírte
y temores de oírte.
o sea,
resumiendo
estoy jodido
y radiante
quizá más lo primero
que lo segundo
y también
viceversa.
Mario Benedetti
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.
¡!
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.
Etiquetas:
community,
ideas,
opensource,
opinion
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.
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:
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.
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.
Etiquetas:
development,
dotnet,
opinion,
ruby
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.
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.
Etiquetas:
development,
ideas,
linux,
opensource,
ubuntu
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:
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:
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.
luego, en el directorio donde se encuentra el código, iniciar la venerable secuencia de configurar..
... construir ...
...y probar
et voilà, c'est fini!
ahora al probar de nuevo
¡Correcto! Ahora ¿qué sigue? ¿será la próxima víctima el kernel?
Finito.
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.
Etiquetas:
development,
linux,
opensource,
ruby,
ubuntu
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í:
hasta acá:
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!
Finito.
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.
Etiquetas:
books,
development,
ideas,
opensource,
ruby
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.
Finito.
He decidido revelar el secreto de la Dieta del ChilliCoder.
Hasta con imágenes.
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.
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.
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.
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.
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.
jueves, junio 28, 2007
Comunidad .NET Edición Junio
Ayer se llevó a cabo la reunión mensual de la Comunidad .NET de la Cd. de México en el lugar acostumbrado. Excelente asistencia a pesar de el partido México vs Brasil.
Arrancó Raúl Guerrero con una introducción a Windows Communication Foundation, uno de los nuevos API's de .NET 3.0. El concepto detrás de WCF es realmente interesante. La unificación de tecnologías de integración bajo una misma API es para mi apreciación un mega-hit. Como es costumbre de Raúl llevó la presentación con una buena porción de código.
A continuación estuvo Juan José Karam que entró al detalle con .NET Remoting. Es obvio que lo suyo, lo suyo, lo suyo... quién sabe que sea, pero .NET Remoting lo maneja rete-chido.
El siguiente en la lista era Octavio Télis pero cambió su presentación por un agradable rato de intercambio de comentarios sobre tecnologías Microsoft, estrategias y se enriqueció con la participación de Arturo Garrido.
Finalmente nos retiramos de las instalaciones de InterSoftware pero en la salida del WTC nos aventamos otra "platicada/debrayada" sobre los más variados temas, principalmente el rol del arquitecto, project leader, project manager y lo comparamos de una manera extremadamente "light" contra la realidad. Karam estaba harto inspirado, de hecho alguien sugirió grabar un podcast comunitario sobre el tema. Sería estupendo.
Esta ha sido hasta la fecha la mejor reunión. Vamos por más.
Finito.
Arrancó Raúl Guerrero con una introducción a Windows Communication Foundation, uno de los nuevos API's de .NET 3.0. El concepto detrás de WCF es realmente interesante. La unificación de tecnologías de integración bajo una misma API es para mi apreciación un mega-hit. Como es costumbre de Raúl llevó la presentación con una buena porción de código.
A continuación estuvo Juan José Karam que entró al detalle con .NET Remoting. Es obvio que lo suyo, lo suyo, lo suyo... quién sabe que sea, pero .NET Remoting lo maneja rete-chido.
El siguiente en la lista era Octavio Télis pero cambió su presentación por un agradable rato de intercambio de comentarios sobre tecnologías Microsoft, estrategias y se enriqueció con la participación de Arturo Garrido.
Finalmente nos retiramos de las instalaciones de InterSoftware pero en la salida del WTC nos aventamos otra "platicada/debrayada" sobre los más variados temas, principalmente el rol del arquitecto, project leader, project manager y lo comparamos de una manera extremadamente "light" contra la realidad. Karam estaba harto inspirado, de hecho alguien sugirió grabar un podcast comunitario sobre el tema. Sería estupendo.
Esta ha sido hasta la fecha la mejor reunión. Vamos por más.
Finito.
Etiquetas:
architecture,
community,
development,
donet,
fun,
ideas,
wcf
martes, junio 26, 2007
PartnerApi Library: Por fin ve la luz
Hace algunos años fui contratado para integrar un CRM y Salesforce (se llamaba así en ese entonces). Para realizar la integración usé C# y el Enterprise API de Salesforce para llevar los datos del CRM al repositorio en línea de Salesforce. Un ejercicio harto interesante. También leí algo acerca de la PartnerApi y de ahí surgió la inquietud de utilizarla.
El objetivo que se me presentó en mi mente fue crear una biblioteca que simplificara el uso de esta PartnerApi y pues después de mmuuuucho tiempo aquí está.
Acabo de publicar el código, licenciado bajo LGPL, para que todo mundo lo revise, lo use y ojalá y contribuya a este proyecto.
Cualquier comentario, sugerencia o pregunta son bienvenidas.
Finito.
El objetivo que se me presentó en mi mente fue crear una biblioteca que simplificara el uso de esta PartnerApi y pues después de mmuuuucho tiempo aquí está.
Acabo de publicar el código, licenciado bajo LGPL, para que todo mundo lo revise, lo use y ojalá y contribuya a este proyecto.
Cualquier comentario, sugerencia o pregunta son bienvenidas.
Finito.
Etiquetas:
api,
community,
development,
dotnet,
freedom,
milestone,
opensource,
webservice
Suscribirse a:
Entradas (Atom)

