01.25.08

Conociendo un poco de Java

Publicado en Java a 1:57 pm por minibota

Hoy hice una “pequeña” disertacion sobre Java en la XI Cyber ILCOMP 2008. Para los que deseen obtener la presentacion, la hago disponible por aca. Conociendo Java

Muchas gracias a mi muñeca que me ayudo a prepararla hasta altas horas de la noche =)

01.20.08

Colorear sintaxis de python en vim

Publicado en Python a 4:43 pm por minibota

Y despues de esos nacatamales comentados en el post anterior me dedique a disfrutar una buena siesta. Sucede que durante la siesta tuve una pesadilla: estaba editando codigo python con el vim y no me coloreaba la sintaxis! Si te pasa eso y tienes ubuntu, prueba esto:

sudo aptitude install vim-python

sudo vim /etc/vim/vimrc

… y descomenta la linea que dice “syntax on”.

Por cierto que existe una version GTK del Vim:

sudo aptitude install vim-gnome

gvim

Dulces sueños.

Nacatamales! :D

Publicado en Fuera de tema tagged , a 2:28 pm por minibota

Naca… queee? Alguno por ahi estara pensando “seguro es la ultima tendencia tecnologica! como es que no lo se?”… pero no!, no es un lenguaje de programacion, tampoco una tecnica ni siquiera el ultimo sistema operativo open source basado en Unix; nada de eso.

El nacatamal es una comida de mi pais [Nicaragua, tierra de lagos y volcanes... y nacatamales]. Asi que este post es totalmente fuera del tema del blog, sin embargo, tenia que hablar de esto hoy. “Que paso?, ahora se cree cocinero?”; no, apenas y puedo preparar una sopa instantanea [maruchan], asi que no les dare la receta del nacatamal, para eso tienen google.

Entonces?… pues que resulta que me acabo de comer 2 deliciosos, corrijo… riquisimos nacatamales; y no cualquier nacatamal, sino que eran esos ricos nacatamales preparados por doña Blanquita Rios (la doñita). No se ni como describir la experiencia de comerse uno de esos, pero, el tiempo que se toma en servir el plato lo siento tan largo como el tiempo que siente un niño esperando el año entero la navidad!

Algunos expertos clasifican los nacatamales en dos tipos: los de pollo y los de cerdo. Pero se equivocan, no conocen; realmente existen unicamente 2 tipos: los de “la doñita” y… los otros.

Ojala pudieran probarlos. Es cierto que ella no invento la receta, pero, a quien le importa?, tampoco Alba Edison invento la bujia! Si Alba Edison perfecciono la bujia, entonces, la doñita perfecciono el nacatamal! Es asi de sencillo. Cuando alguno  de ustedes venga por mi pais, que me avise… yo invito!

Y ahora me disculpan, pero tengo que hacer digestion (dormir la siesta). Salud!

01.15.08

CherryPy 3

Publicado en Python tagged , , , a 2:59 pm por minibota

Muy de moda se han puesto los llamados “frameworks de desarrollo web” y con justa razon. El uso de un “framework” te ahorra mucho trabajo, te permite programar con mas rapidez, realizar un trabajo mas consistente, le da estructura a tu aplicacion y, como si fuera poco, al seguir el “estandar” del framework que utilices, tendras todo un batallon de programadores alrededor del mundo dispuestos a brindarte soporte [mayoritariamente] gratuito ante cualquier problema (algo que nunca falta).

Definir “web framework” es una tarea demasiado complicada. A veces he tratado de hacerlo; buscando ayuda con la teoria caigo en la ya clasica wikipedia que dice:

En el desarrollo de software, un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado.

Si, claro que si, pero, dile esto a alguien que nunca ha usado uno y veras como aclaras sus dudas! (Sarcasmo). Veamos que dice un poco mas adelante en el mismo articulo:

Los Frameworks son diseñados con el intento de facilitar el desarrollo de software, permitiendo a los diseñadores y programadores pasar más tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional. Por ejemplo, un equipo que usa Apache Struts para desarrollar un sitio web de un banco puede enfocarse en cómo los retiros de ahorros van a funcionar en lugar de preocuparse de cómo se controla la navegación entre las páginas en una forma libre de errores. Sin embargo, hay quejas comunes acerca de que el uso de frameworks añade código innecesario y que la preponderancia de frameworks competitivos y complementarios significa que el tiempo que se pasaba programando y diseñando ahora se gasta en aprender a usar frameworks.

Correcto, muy cierto. Asi que, para entender de una vez el concepto de “framework” empecemos gastando un poco de tiempo en aprender uno, CherryPy. (Si quieres una lista bastante completa de web frameworks existentes, en distintos lenguajes, visita: http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks)

Nota aparte: Tambien existen un par de frameworks destinados a desarrollar “aplicaciones de escritorio”, en vez de web, como Spring RCP (Java + Swing) y GnuEnterprise (Python + GTK; muy prometedor este proyecto, les recomiendo leer su documentacion, empezando por aqui)

Por que usar CherryPy?

Esta es una pregunta interesante. Hubo algun momento en el que me dedique a investigar sobre frameworks escritos en Python y realmente que existen muchos, entre los que sobresalen Django, Turbogears y Plone (evolucion de Zope).

En mi investigacion llegue a darme cuenta de que un framework generalmente se compone de las siguientes piezas:

  • Controlador (controller)
  • Motor de plantillas (template engine)
  • Persistencia (ORM: Object-Relational Mapper)
  • Validacion de formularios
  • Mensajeria
  • Conjunto de Widgets (no se en español, si alguien me dice, por favor!)
  • Librerias javascript

Resulta que en el mundo maravilloso de Python podemos encontrar todas estas piezas por separado y con mucha variedad en cada uno. Veamos:

  1. Controlador: Cherrypy, Webpy, mod_python (este ultimo mas bien serviria de base para hacerte el tuyo).
  2. Motor de plantillas: Aqui si que hay muchas; Mako (mi preferido, no dejen de dar click en el link y ver el ejemplo que aparece en la pagina principal!), Kid, Cheetah, Genshi, PSP, Clearsilver, ZTL, SimpleTAL,… etc… etc.
  3. ORM: SQLObject y SQLAlchemy
  4. Validacion de formularios: FormEncode… y creo que aqui no hay duda.
  5. Mensajeria: PyRO
  6. Widgets: ToscaWidgets

Y seguro que hay muchisimas cosas mas rodando por ahi. Sucede que hay 2 tipos de frameworks: primero, los que crean su propio controlador, plantillas y todo lo demas (como Django), y, segundo, los que sirven como pegamento para herramientas ya existentes (TurboGears).

Por ejemplo, TurboGears usa por defecto el motor de plantillas Kid (aunque ahora agregaron una capa de abstraccion para las plantillas a la que denominaron Buffet que te permite utilizar casi cualquier motor de plantilla de tu preferencia; todavia no lo he probado, talvez algun dia lo haga y lo comente mejor), como ORM usa SQLObject, como widgets los ToscaWidgets y como controlador… ah!, CherryPy.

-”…entonces, CherryPy es un framework o un simple controlador?”

Mas arriba dije que ibamos a aprender a utilizar un framework llamado CherryPy y ahora les digo otra cosa, lo se. Les dire, en esencia es un simple controlador, pero, talvez la verdadera importancia de aprender sobre CherryPy es que podemos elegir el resto de piezas a nuestro antojo!

Talvez a mi no me gusta el motor de plantillas que trae Turbogears y prefiera Mako… y asi podria ir cambiando pieza por pieza. Talvez a mi me gusta la combinacion CherryPy (controlador) + Mako (plantillas) + SQLAlchemy (persistencia) + FormEncode (validacion) + ToscaWidgets (widgets) + JQuery (javascript). Lo ven? Y esta es la formula que vamos a ir desarrollando en este “pequeño cursito”; o sea que pronto tendremos nuestro “framework a la medida”. Primero haremos el ejemplo con CherryPy, luego le agregamos Mako al ejemplo y mas adelante probamos con SQLAlchemy,.. y asi hasta que estemos listos para lanzarnos en grande con un proyecto.

Instalar CherrPy en Ubuntu 7.10

Utilizo Ubuntu 7.10, asi que muchas veces me voy a referir como suponiendo que utilizan el mismo sistema operativo. Si no es asi, lo siento, tendran que averiguar como hacer algunos detalles en el sistema operativo que usen.

Instalar en Ubuntu el CherryPy3 es cuestion de rascarse la panza:

sudo aptitude install python-cherrypy3

Listo! Si no estas convencido de que se haya instalado correctamente puedes abrir la consola de python y escribir “import cherrypy”; si no te lanza un error quiere decir que todo esta bien. Fijense en este ejemplo:

minibota@minibota-laptop:~$ python
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import cualquiercosa
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: No module named cualquiercosa
>>> import cherrypy
>>>

Si no tuvieras CherryPy instalado te sucederia lo mismo que me ocurrio al hacer “import cualquiercosa”.
Primer ejemplo con CherryPy

01.11.08

Hello world!

Publicado en Fuera de tema a 4:52 am por minibota

¿Qué mejor manera de empezar un blog de informática? Tiene que ser el ya clásico Hello World!

section .datamsg db “¡Hola Mundo!”, 0Ah
len equ $ – msgsection .text

global _start

_start:
mov eax, 04h
mov ebx, 01h
mov ecx, msg
mov edx, len
int 80h
mov eax, 01h
mov ebx, 00h
int 80h

…claro, en NASM (ensamblador x86 open source) y hasta con salto de linea seguramente pero tengo que ser sincero que a eso no le entiendo, asi que aqui lo escribo mejor en Python:

print “hello world!”

…y como algunos prefieren algo orientado a objetos (aunque en este caso no hay necesidad, pero que se den su gusto), aquí va en Java:

public class HolaMundo
{
public static void main(String[] args)
{
System.out.println(“¡Hola, mundo!”);
}
}

En fin, lo que quiero decir es que les doy la bienvenida a este pequeño rincón en donde intentaremos aprender un poco de informática. Y digo poco porque el campo informático es grande y yo apenas conozco algo de Linux (en especial Ubuntu), Java y Python, de lo cual intentaré compartir con todos ustedes lo que pueda transmitir.

Hola mundo!