Consol: Dia 1


Empezamos el dia bastante bien, con una platica de Alvaro López sobre como han ido desarrollando cherokee, y sus nuevas características para la version 0.6, de hecho dió el anuncion de la primera beta de la versión 0.6 que será liberada el 1 de marzo.

Luego pasamos a ver una platica de computo científico, que en general hablaba de las posibilidades que existen en el software libre para hacer computo paralelo (mpi, mpich, openMP, open mosix).

Y ahorita despues de una hamburguesa estamos esperando a que nos pasen el archivo de blender para empezar el taller de animación, 🙂 se me hizo entrar

Más tarde la actualización de como me fué en el taller

Pues estuvo chido, realmente me sirvio para acordarme de los comandos basicos, pero la verdad me abrieron los ojos un poco mas sobre la maravilla de blender..

Hasta mañana



Semana divertida


Esta semana empieza y termina el consol 2007, andaré por ahí los 4 dias (martes a jueves), y el miercoles estaré dando mi platica de administración de red con Debian, luego publicaré la presentacion, primero necesito terminarla 🙂

También andarán mis excompañeros de trabajo Ivan y Beto con un par de talleres sobre desarrollo web.

Espero que este divertido el asunto, y espero ver algunas caras conocidas por allá…

Nos vemos mañana a las 10 en la fac de ing. de la UNAM !!



django: Todo hecho fácil


Django es la neta del planeta para mi 🙂

Lo conocí gracias a un comentario del “buena voz mother fucker” hace unos meses, y como python es mi lenguaje favorito cuando se trata de aprender algo nuevo, pues inmediatamente me puse a checar ese nuevo “framework” y en cuestión de horas estaba totalmente enamorado :P.

Cuando se trata de programar en Python, simplemente no soy bueno, durante un par de años he hecho cosas sencillas, incluso con Glade y GTK, y recuerdo cuando estaba en tmz que me avente un “servidor de chat” muy simple, que tiempos aquellos, pero simplemente no soy muy productivo escribiendo Python, así que a veces me toma muchas horas hacer algo sencillo, de hecho luego sacando cuentas el numero de lineas por hora que escribo llega a ser muy cercano a 1 !! pero siempre quedo contento porque a pesar de terminar con muy pocas lineas, siempre logro tener algo que, al menos para mi, se ve muy elegante, y hace exactamente lo que quiero.

Y volviendo a Django, simplemente es asombroso lo que se puede hacer con tan poco conocimiento, voy a exponer unas cuantas lineas de un sistema pqueño que estoy haciendo para guardar datos de usuarios en la red, es realmente simple, pero preferí hacerlo en Python/Django que en PHP que es mi lenguaje más productivo en general (para web casi exclusivamente), y la razón de la elección fué que Django me permite hacer trivialmente varias tareas: autenticación, localización (traducción), separación MVC (al estilo Django, pero muy elegante), portabilidad en la base de datos, uso de plantillas, URL bonitos, y como dicen en su sitio, “no me repito”, o sea, las cosas se hacen de la mejor manera para que sea trivial reproducirlas cuantas veces sea necesario sin mucho código (one-liners seria la “palabra correcta”), y además de todo me crea un panel de control en el que puedo editar datos a placer.

Como antecedente, me tomo unas 4 a 6 horas hacer lo que voy a escribir aqui, y este es el resumen de programación:
Lineas Archivo (wc -l)
10 urls.py
37 base/models.py
8 base/urls.py
40 base/views.py
95 total

en las plantillas tengo mas de 130 lineas, pero pues ni vale la pena contar eso porque el gaste de HTML puede ser arbitrario, depende de cuando diseño le quieras meter, y que tan hábil seas para hacerlo de manera elegante.

En realidad esta no es la aplicación terminada, solo hice un ejemplo que necesito para reproducirlo para todas las tablas que sean necesarias, este ejemplo es un listado paginado, con soporte de todo lo que dije arriba.

No quiero irme sobre todos los detalles de la configuración (settings.py) de la aplicación, simplemente voy a remitirme a la parte del listado paginado.

en una “sub aplicación” de la aplicación principal tengo este url.py:


from django.conf.urls.defaults import *
from iplist.base import models, views

urlpatterns = patterns('',
(r'^$', 'iplist.base.views.myview'),
(r'^view/$', views.object_list, {'model': models.People}),
)

Lo que hace es definir 2 listados parecidos, el segundo por medio de las vistas genéricas que proporciona Django (generic.views), ambos paginan, pero el segundo es realmente elegante y portable, mientras que el primero es una vista a una sola tabla en particular.

Este es el archivo view.py, que contiene las 2 vistas en cuestion:


from django.template import Context, loader
from django.contrib.auth.decorators import login_required
from iplist.base.models import People
from django.core.paginator import ObjectPaginator, InvalidPage

from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic import list_detail

@login_required
def myview(request):
people_list = ObjectPaginator(People.objects.all().order_by('name'), 3)
t = loader.get_template('base/list.html')
try:
page = int(request.GET.get('page'));
except:
page = 0
print page, people_list.pages
if (page < people_list.pages ):
c = Context({
'people_list': people_list.get_page(page),
'page': page,
'has_next': people_list.has_next_page(page),
'has_prev': people_list.has_previous_page(page),
'next_page': page+1 ,
'prev_page': page-1 ,
'paginator': people_list,
})
return HttpResponse(t.render(c))
else:
return HttpResponseRedirect('/list/')

@login_required
def object_list(request, model):
try:
return list_detail.object_list(
request,
queryset = model.objects.all().order_by('name'),
template_name = 'base/%s_list.html' % model.__name__.lower(),
paginate_by = 3,
)
except:
return HttpResponseRedirect('/list/view')

Las primeras lineas de “import” son necesarias para la vista de la tabla People paginada, los ultimos 2 “import”s son los que se necesitan para la vista genérica, de hecho el último contiene 2 funciones necesaria para la primera vista, y otra para la segunda, y la linea que importa login_required se usa en los 2 (5 contra 3 imports!).

En la primera vista usamos la herramienta de paginación de Django, y seleccionamos una tabla sobre la cual vamos a iterar en la plantilla, después tenemos que tomar la plantilla y alimentarla con los datos necesarios. Aquí un detalle importante, las plantillas no pueden accesar a métodos, solo accesan valores, arreglos, etc, por lo que es necesario alimentar bastante, en ves de por ejemplo pasar el objeto people_list con todas sus capacidades.

La segunda vista/clase/funcion/como-quieras-llamarle toma el parametro “page” automáticamente de GET, pagina, y manda los parámetros relevantes a la plantilla (pagina proxima, numero total de paginas, de registros, etc) con solo agregar “paginate_by” a la funcion list_detail.object_list.

NOTA: la linea precediendo a cada función hace necesario estar logueado con un usuario para ver la vista, las tablas y sistema de autenticacion los creo Django por mi, si quieres tener una forma de logueo solo creas una plantilla básica y agregas una linea a url.py y listo ! todo lo demás Django lo hace sin ayuda 🙂

De tal manera que esta plantilla (templates/base/people_list.html) hace todo lo que se esperaría de una lista paginada:


{% load i18n %}
{% extends "base.html" %}

{% block title %}{% trans "Generic List" %}{% endblock %}

{% block content %}
{% for entry in object_list %}
<div style="border:1px solid black;">
<h1>{{ entry.name }}</h1>
<p>{{ entry.comments }} ({{ entry.department }})</p>
</div>
{% endfor %}
{% if has_previous %}
<a href="?page={{ previous }}">&lt;</a>
{% else %}
{% trans "No Previous Page" %}
{% endif %}
|
{% if has_next %}
<a href="?page={{ next }}">&gt;</a>
{% else %}
{%trans "No More Pages" %}
{% endif %}
<br />
{% endblock %}

a través del segundo patrón en el url.py que puse arriba, y si notan todos los textos están marcados para traducción (notar la primera linea, es importante que sea así), pero para no hacer el cuento muy largo eso lo dejo para otro post (si es que lo llego a hacer :P).

Y dejo aquí la plantilla de la vista “no genérica”:


{% load i18n %}

{% extends "base.html" %}

{% block title %}{% trans "Another Testing Template" %}{% endblock %}

{% block content %}
{% for entry in people_list %}
<div style="border='1px';">
<h2>{{ entry.name }}</h2>
<p>{{ entry.comments }}</p>
</div>
{% endfor %}
{% if has_prev %}
<a href="?page={{ prev_page }}">&lt;</a>
{% else %}
{% trans "No Previous Page" %}
{% endif %}
|
{% if has_next %}
<a href="?page={{ next_page }}">&gt;</a>
{% else %}
{%trans "No More Pages" %}
{% endif %}
{% endblock %}

En conclusión, podemos lograr en 11 lineas de programación tener una función que nos pagina, y protege con autenticación el listado de cualquier tabla, ya que el nombre de la tabla lo mandamos a través de un parámetro en una linea de url.py, de tal manera que podemos hacer cuantos querramos y reutilizar la misma vista, y al final solo tenemos que crear plantillas personalizadas para cada vista, ya que cada tabla tienen campos diferentes, o no ?? 🙂

O en otras palabras, copias una linea en url.py, le cambias lo esencial, y copias la plantilla y haces lo mismo, igual y quieres un diseño totalmente diferente para cada listado :), y es todo, volvemos aún mas aburrido el trabajo del desarrollador web ! y le ahorramos un buen de tiempo, ni siquiera tiene que aprender struts !!

Hasta la proxima

P.D. Notaron la elegancia de la validación para page ?? es o no bonito Python ??



kqemu


En un mundo listo para aceptar y abrazar la virtualizacion, kqemu ha sido liberado con GPL!

QEMU es una herramienta tipo vmware, que simplemente funciona magnificamente, pero nunca ha logrado ser tan rapida como vmware, yo nunca he usado kqemu pq no era libre, pero ahora estoy en camino de instalarlo 🙂

Por si alguno ha estado escondido el ultimo año, si no sabes de virtualización en esta época simplemente no eres nadie en el ambiente de administracion de sistemas/servidores/redes/etc, ahora todo esta orientado a virtualizacion y almacenamiento remoto (san, nas, etc), así que los que aspiren a ser muy chidos tienen una tarea extra para los pocos tiempos libres que les queden 🙂



La controversia de Gentoo en servidores


En slashdot encontré un artículo que habla de las desventajas de usar Gentoo en servidores, en síntesis se necesita mucho tiempo de mantenimiento según el cuate que escribió el articulo original.

Como usuario de Gentoo por algunos años, tengo algo de experiencia en lo que significa la administración de esta distribución, y me queda muy claro que conviene y que no conviene de ella.

El punto mas importante de Gentoo es FLEXIBILIDAD, por lo que en cuestión de dependencias nadie puede competir contra él. Gentoo te permite tener un sistema corriendo con exactamente lo que quieres, si decides que no quieres contaminación de la biblioteca Qt, simplemente configuras en /etc/make.conf la variable USE con -qt y listo ! cualquier paquete que tenga la opción de no usar Qt va a ser compilado sin esta biblioteca, y así con cualquier cosa, si quieres que todo lo que pueda usar mysql en vez de postgres, puedes lograrlo “automáticamente” con las banderas correctas en USE.

Otro punto crítico, pero de verdad importante, en el sentido de: no puedo enfatizarlo suficiente, necesitas hacerme caso cuando configures esto…. etc, es el uso de ACCEPT_KEYWORDS=”~x86″, la explicación en make.conf es suficientemente explicita, pero seguramente muchos usuarios novatos, o que simplemente no quieren entender o no la toman en cuenta.

ACCEPT_KEYWORDS=”~arch” es equivalente a estar en una combinación de testing/unstable en Debian, los paquetes son funcionales (donde ~arch puede ser la arquitectura particular de tu máquina, ie ~x86) pero NO SON ESTABLES, si quieres estar al filo de la navaja vas a querer configurar esta variable, pero tienes que estar consciente de lo que significa. Cualquier servidor en producción debería estar en estable, y con Gentoo no es la excepción, los servidores no deberían tener esta variable habilitada, en primer lugar para no estar compilando cientos de paquetes cada vez que actualizas, y en segundo lugar y mas importante, para que tu sistema sea estable y confiable !

Y por último, la política de Gentoo es darte el máximo control de los paquetes, por lo que es necesario dedicarle cierto tiempo a revisar si las actualizaciones te están ofreciendo nuevas características que puedan ser interesantes o necesarias, por lo que tienes que ejecutar etc-update después de cada actualización para ver si es necesario meterle mano a alguna configuración en particular, los que usan Debian estan un poco acostumbrados a esto, pero Gentoo lo hace especialmente importante, es mucho mas común que Gentoo ofrezca cambios a la configuración de los paquetes, pero un administrador que no sea novato tiene la capacidad de hacer este trabajo bastante rápido, sobre todo si no deja sin actualizar su servidor durante meses, sin embargo es un trabajo necesario, y sin él las cosas pueden salir bastante mal en la siguiente reiniciada del servidor.

En conclusión, Gentoo es una distribución robusta y flexible, pero al mismo tiempo exigente, y no es definitivamente adecuada para los que quieren tocar lo menos posible los sistemas, es para los que quieren estar muy cerca del filo de la navaja, y quieren el máximo control de todo lo que esta instalado.

Pero es totalmente posible tener Gentoo en producción, siguiendo reglas básicas y conociendo los servicios que ofrecemos, y como mantenerlos y configurarlos si es necesario :), ahí está el detalle.

Yo prefiero no usar Gentoo en servidores, y de hecho desde que soy productivo para la sociedad ni siquiera uso Gentoo en el trabajo, pq prefiero dedicar mi tiempo a otras cosas (como bloguear !) que administrar Gentoo, Debian es menos exigente con mi tiempo, y el tiempo en el que Debian inestable era inestable ha quedado atrás, para mi ya no hay justificación en usar Gentoo sobre Debian.



Consol 2007


Pues aunque mi ponencia sigue en “por Aceptar” estoy asumiendo que va a ser aceptada 🙂

El miercoles 14 de Febrero (que día!) voy a hablar sobre como administrar una red con Debian, espero abarcar bastante en 2 horas, y ser lo suficientemente claro para que la gente entienda que es relativamente fácil hacer casi todas las tareas necesarias con las herramientas de Debian, y pues realmente lo importante está en los detalles, hay que saber mucho para poder administar fácil 🙂

Tambien va a andar Duke12 y Bonovoxmofo por allá, no se si vaya a poder entrar a sus talleres, pero por lo menos espero saludar a los excompañeros de trabajo y amigos

Animense a asistir, es bastante económico, y es donde se centra toda la raza del Software Libre de México, con algunos extranjeros tambien, ya hace 2 años me aceptaron una platica y no pude ir por que estaba enferma mi nenita Deborah, y el año pasado por el cambio de chamba no pude apuntarme ni de asistente, pero este año vamos con todo !! hasta permiso para asistir los 4 días tengo ya!!

Espero que me vaya bien en el consol, y espero ver a muchos conocidos por ahi.

Calendario extraoficial



Mas globalización !


Este tampoco se trata de globalizacion, pero el titulo atrae gente 🙂

En mi exploración matutina de la web, me encontré con una página interesante que me llevó a otra página interesante hecha por google: gapminder

En ella podemos ver porque varios de mis amigos como Kwame están en USA 🙂

Simplemente en los últimos 20 años no hemos avanzado casi nada económicamente, no así nuestra expectativa de vida, mientras que USA se mantiene aumentando la expectativa de vida más constantemente, pero su ingreso per capita simplemente da gusto, siempre ha sido mas de 3 veces mas grande que el nuestro !, y la separación va aumentando con el tiempo.

En esa pagina pueden hacer comparativas interesantes de varios indicadores, por si alguien mas se quiere deprimir por vivir en México (y algunos otros paises 🙂

Vivimos más tiempo en la pobreza !! que orgullo !! el PAN debe estar haciendo mucho para mantener este avance, de eso estoy seguro.



Globalización y cambio global


El título nada mas es para llamar la atención.

El las últimas semanas/meses en especial se ha hablado mucho de los cambios climáticos que se esperaban en siglos, y que aparentemente va a ser mas pronto :), incluso hay una película que habla del tema, y lo mas sosprendente es que Al Gore es el “actor principal”, y aunque existe algo de incertidumbre y contraincertidumbre, lo cierto es que viendo la realidad de las ciudades capitales en nuestro país, no se necesita ser muy detallista para darse cuenta de que de verdad las cosas han cambiado, y desgraciadamente con el aumento de población la contaminación (no solo del aire) es un detalle que los adolescentes simplemente no toman en cuenta, y junto con sus padres contribuyen a no solo hechar humo al aire que todos respiramos, sino a quemar basura, tirarla en la calle, y provocar que no solo sea incomodo vivir en la civilización, sino muchas veces desagradable.

Ya voy para un año trabajando en el DF, y aún cuando la situación no es insoportable (no podrían vivir 20 millones si así fuera), es realmente sorprendente que exista gente como yo, que en su realidad es mejor venir a trabajar aca, a pesar del trafico, la contaminacion, las horas de viaje diario, etc, a estar en una ciudad mas tranquila.

La globalización simplemente nos pone en una situación ridícula, en la que para luchar por mantener a la familia signifique incluso contribuir a contaminar mas la ya de por si contaminada capital del país.

Aunque suene ridículo, y pŕacticamente nadie lea mi blog :), por favor hay que contribuir a disminuir la contaminacion, ahorren agua, ahorren combustibles, planten arbolitos, enseñenle a sus hijos a respetar la tierra y a las personas, necesitamos mas conciencia, por favor los que puedan impulsen la educacion !! de preferencia gratuita, veamos el ejemplo de USA, con educacion privada han llegado muy lejos tecnológicamente, pero moralmente estan por los suelos, muy poca gente tiene acceso a la educación allá, y las universidades están llenas de inmigrantes.

Hagamos algo por el planete, por el futuro, por nuestros hijos y hermanos menores, debemos darnos a nosotros mismos una vida digna en la vejez, no quiero estar lamentándome de lo insensible que es el ser humano en unas décadas.

Hagamos algo diferente esta semana !



DRM: Noruega pone el ejemplo


Es estos tiempos de competencia “leal”, y anti-pirateria, el pan de cada día es ver campañas en contra del “uso ilegal” de musica, video, literatura, etc.

El “iPod” ha hecho historia, y ha logrado ser el mayor éxito en este ambiente, pero Apple no contaba con la astucia de Noruega, ya que el “instituto del cosumidor” de este país ha declarado que el hecho de que los iTunes no solo están protegidos por DRM, sino que solo se pueden oír el un iPod, y no en otra cosa hace que estos (los iTunes) sean ilegales!

Buena jugada, lo que no me queda claro es si es verdad esto, hasta donde habia leido, Apple ha licenciado las patentes de iPod (o lo necesario) para que otras compañias hagan iPods “piratas”, e incluso ha llegado a recomendar no comprarlos, a pesar de que ellos mismos licenciaron a las compañias la posibilidad de competir ! 🙂

En fin, es buen momento para emigrar a Europa, donde la legislación a tomado un camino y sentido fresco, no como en prácticamente toda América (si, eso incluye a los de arriba y los de abajo).

Buen día !

via: slashdot



Re: Are we evenly distributed?



Ayer vi un post de Gunnar que habla de la distrubución de “formas de pensar” en la comunidad de Debian, y para demostrar que estoy de acuerdo con él, hoy llené el cuestionario y pues efectivamente caigo por ahi.