Mi día en el ENLi

Pos el sabado andube por Puebla (por primera vez en mi vida), dando una plática en el ENLi.

En general me fué decente, me temía que el tiempo no me alcanzara (2 horas) y creo que terminé dando toda la platica en 1:20 minutos, no se si realmente se entendió lo que quería decir 🙂

Como me tocó llegar cuando Sandino ya andaba haciendo de las suyas, todo mundo andaba crudo, y la cosa empezó medio retrasada, en general ya los organizadores no traían ganas de estar ahí, sino de irse a descansar :), pero todo estuvo bien, luego de mi plática me fuí a ver a Sandino hechar madres mientras le partía su mandarina en gajos al ubuntu pero dejando gentoo funcional.

Ya en la clausura andaba Alvaro Lopez dando su cátedra de lo que es el SL, y todo el royo filosófico que ya muchos nos tenemos mas que masticado, y la verdad es que pude notar que a la gente simplemente le encanta oir sobre el tema, claro mucho de quorum eran mujeres viendolo a él sin importar lo que decía, pero en general el royo del SL está muy “in”.

Pos ahí terminó la cosa, como andaba medio desubicado, en cuanto me dieron mi reconocimiento agarré camino pa’ la central y me devolví a Cuernavaca bien cansado, despues de una semana muy mal dormida (tambien asistí al BIF)

En un ratin mas voy a poner la plática aqui por si alguien tiene algun interés.

La elegancia de Django

O la evidencia de que hay un ser supremo que nos ayuda a hacer las cosas bien


@login_required
def object_list(request, model, page):
try:
request.GET['filter']
qry_set = model.objects.filter(
Q(name__contains=request.GET['filter'])|
Q(user__contains=request.GET['filter'])|
Q(ipaddr__contains=request.GET['filter']),
).order_by('name')
return list_detail.object_list(
request,
queryset = qry_set,
template_name = 'base/%s_list.html' % model.__name__.lower(),
paginate_by = 50,
page = page,
extra_context = { 'filter': request.GET['filter'] },
)
except:
return render_to_response('base/empty_list.html')

object_list = cache_page(object_list, 300)

En realidad parte de este codigo no me gusta mucho, pero es suficientemente bonito (IMNSHO) como para comentarlo un poco (dada la escases de temas en mi cabeza).

Incluso viendo el código, antes de publicarlo logré una optimización bastante tonta (un doble try innecesario).

Básicamente esta “vista” devuelve una pantalla vacía (con un <input>) si no está definida la variable “filter” en el GET de HTTP, si está definida busca en 3 campos la cadena que viene de esa variable y devuelve una lista, que en este caso se presenta como una tabla.

Lo bonito de esta vista, es que sin grandes malabares, puros “one-liners” incluye autenticación, caché, y paginación.

Los urls que alimentan los argumentos de la funcion son:


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


urlpatterns = patterns('',
(r'^$', views.object_list, {'model': models.ipdata, 'page': 0}),
(r'^page/(?P[0-9]+)/$', views.object_list, {'model': models.ipdata}),
)

El primero manda “page=0” dado que estamos en la primera página, el segundo manda la página correspondiente segun el URL. Y obviamente mandamos el modelo que queremos que se utilice para esta búsqueda. Podríamos lograr que la funcion “object_list” (que es una vista genérica de django), fuera mas portable si no tuvieramos que buscar sobre columnas específicas, pero en este caso particular no es posible fácilmente, por la especificidad de los campos de búsqueda.

Ya lo demás es crear una plantilla, que no tiene ningun chiste, los valores de cada columna se pueden ciclar con algo como esto: {% for entry in object_list %} … {% endfor %}

Hay detalles, como el hecho de que no hay una funcion en python para verificar si una variable o arreglo está definido, por ello el try:, y por otro lado el detalle de que no puedo hacer mas portable la funcion genérica, porque cada modelo que la tendría columnas con nombres diferentes,y querriamos buscar sobre columnas diferentes (en teoria).

Tal vez haya una forma de hacerla mas portable, si a alguien se le ocurre por favor no dude en decirmela (probablemente mandando un arreglo en el urls.py de las columnas a buscar).

La bendita virtud de elegir

Pensando en que sería bueno bloggear, el fin de semana estaba pensando en como la gente se casa con algo y simplemente lo adopta para bien o para mal.

Pasa en todos los ámbitos, desde el matrimonio, la ciudad en la que vivimos, el trabajo que tenemos, el estilo de vestir, hasta el sistema operativo que usamos en las computadoras.

Yo no soy muy diferente, y enfocándonos a lo informático, estoy casadisimo con usar Linux y a usar en él KDE.

Pero aún así, no deja de ser sorprendente como es que el mundo está totalmente rendido a los pies del software propietario que rodea a Windows… Estamos de acuerdo que windows es fácil de usar, pero no es el único ambiente que lo es, ni siquiera es el más fácil si lo evaluamos estrictamente.

Vamos, simplemente vista ahora tiene su “motor” para alojar antivirus y firewall, que te permite tener mas de un antivirus !! hagame usted el refabron cabor (perdon catón por robartela), como puede una empresa decir que su nuevo producto es el mas estable de la historia, si ahora no nomas necesita para vivir un antivirus, sino que ahora te permite tener mas de uno para “mayor seguridad”, no es posible, no y no !!

Es cierto que las migraciones siempre son dolorosas, pero por ejemplo si el IMSS (visto en cofradia) logra deshacerse de la necesidad de tener windows, porque no puede todo el mundo ?

La clave en mi opinión está en la decisión, en vez de pensar en esquemas de migración paulatina, hay que pensar en ahorrase todas las licencias de un solo golpe, empezar de cero, e importar lo que haya que importar a los nuevos formatos, nuevas bases de datos, etc.

Que requiere trabajo, es cierto, pero yo cambiaria todo por dejar de tener los problemas que se tienen usando windows. Desgraciadamente es un hecho que los propios administradores o usuarios expertos de windows están convencidos de que hacen lo mejor que pueden, sin darse cuenta que hay alternativas menos problematicas, mas robustas y flexibles.

En fin, ya dije mucho y no dije nada.

Cambien a SL !!, no todo en la vida es M$ (ni linux para fines practicos).