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).



Envidio a .nz !


En la visita diaria por los noticierons geeks, me encontré esta nota en slashdot que habla de una iniciativa de retroalimentacion de la policia de Nueva Zelanda, en la que pusieron un wiki para que el publico en general pueda editar las leyes que desean que se apliquen, o modificar las existentes segun entiendo, claro, no es que se acepten tal cual, van a ser evaluadas, pero no deja de ser un gran paso para recibir opinion (de la gente que tenga acceso a internet 🙂

Entre las propuestas interesantes que salieron en la discusión está este hilo con la invaluable respuesta de Siberwulf (921893) : Its a wiki! Go in and edit it to say “tops” instead of “shirts”!

web 2.0 rules !! 😛



(Geek == Tonto)


Hace mucho que no pongo nada aqui, y no pude resistir el poner mi comentario sobre una nota bastante chusca (y tonta) que vi en slashdot sobre una chica que estudia en el MIT (no en la unam, o en la UACH, o UNISON, el MIT !), que se le ocurrió la gran idea de ir a un aeropuerto con un diseño que se hizo que daba el gataso de dispositivo electrónico “peligroso” para los guardias.

Chequen las fotos de su camiseta aqui

Es increible como las ganas de llamar la atención, combinado con ser geek pueden hacer a una persona hacer cosas tan estupidas no?

Será por eso que no llegué al MIT ? no soy suficientemente geek ?



Ser o no ser


Cuando alguien se comporta contradictoriamente, la mejor opción es sentarse a observar con una sonrisa el show cómico…

Todos los mexicanos que usamos SL por mas de 1 mes hemos de conocer a nuestro héroe favorito Migue de Icaza, pero uno no puede más que decepcionarse cuando el héroe nacional contemporáneo dedica tiempo y dinero a promover (indirectamente se puede decir ? yo creo que es muy directamente) todo lo que hace M$

Pero no se trata de lo que yo pienso, mejor hay que leer a los verdaderos geeks



Sobre el asunto windows vs SL (Software Libre) (primera nota)


Como primera nota voy a comentar un asuntillo que salió hace unos días, nada más ni nada menos que netcraft diciendo que ISS está ganadole terreno a Apache !, sin embargo hay quien pone en tela de juicio el resultado del análisis, comparandolo contra lo que securityspace tiene al respecto.

Es bastante raro realmente que de buenas a primeras IIS esté ganando terreno, pero el arreglo con godaddy es una buena razón para que de repente esté servidor tenga tanta popularidad entre los sitios de internet, por lo que podemos darle el beneficio de la duda a netcraft, pero no deja de sorprender a muchos que incluso haya sido tan valiente como para mencionar que en un futuro no tal lejano IIS podría superar a Apache. El tiempo dirá

Por otro lado, se ha hablado mucho de que Vista es bueno o malo, dependiendo de quien opina :), pero no podemos dejar a un lado el “‘ultimo detalle” de desempeño de la red si estas escuchando música :)… La pregunta que me queda es: ¿Por qué MS toma decisiones tan malas con respecto al sistema operativo y sigue teniendo éxito con ello ?

Todos los sistemas operativos tienes bugs, y todos los programas también, pero implementar nuevas características que hacen que lo que funcionaba ya no funcione simplemente es tonto, que tiene que ver la red con el sonido ?? (Respuesta: DRM)



Primer post


Soy un hue…von y no habia vuelto a instalar mi blogsito, pero intento hacerlo ahora

No se que voy a hacer aqui, en realidad lo que mas me interesa es tener una galeria de fotos, y tal vez bloguear de vez en cuando…



Sistema Operativo Seguro: La nueva definición


Todos sabemos que el nuevo y brillante sistema operativo de M$ es también proclamado el “mas seguro” (como sus antecesores de esta decada).

Y es claro para la mayoría que no es posible hacer un sistema seguro 100%, y mucho menos clamar que es “muy seguro” por tener DRM, firmado de binarios, o como le querramos decir a lo que está intentando ahora hacer M$.

Y para los que les gusta el tema, seguramente saben que Rutowska ha estado presentando trabajos y pláticas sobre como no es posible, y de hecho ha tenido algunos “ataques” diciendo que no está en lo correcto.

Pues se le hizo realidad la teoría y uno de sus cuates presentó una prueba (PoC) de que está en lo cierto.

Veremos si este detallito discreto y pequeño le sigue dando el empuje necesario a los sistemas operativos libres, y por ende al SL en general.

Mejor programa bien, que meter ofuscación al sistema (bloat?)



(Dear lazy web) Alternativas para crear codigo PHP para web de manera segura


Todos los que hacen algún tipo de desarrollo para web saben que los problemas que conlleva están en varios niveles: (in)compatibilidad de los navegadores a nivel de HTML, JavaScript y CSS, problemas de seguridad como XSS (cross site scripting) e inyecciones SQL.

Para todo hay trucos, y por ejemplo la incompatibilidad de los navegadores en cualquiera de los niveles se puede corregir tal vez a un 90% en la mayoría de los navegadores (los 4 mas populares :), sin embargo, los problemas de seguridad pueden ser incluso mas importantes, o mas preocupantes.

En los últimos días he estado pensando en como podría lograrse un método o conjunto de herramientas (funciones y clases) que permitan escribir código PHP para web sin que sea posible un ataque SQLi o XSS, y sin tener que hacer a mano las validaciones.

Una alternativa es NO USAR PHP, con python/django es posible hacer todo eso y más, pero estoy intentando reescribir una aplicación ya hecha en PHP, que va a seguir siendo mantenida por programadores de PHP (en teoría) y que además tiene un esquema de base de datos ya definido (no es un problema para usar django realmente).

He estado dándole vueltas al asunto durante los últimos días, como es usual perdiendo el tiempo en vez de actuar :), pero si sería chido conocer una alternativa robusta para hacer las cosas de la “manera correcta™”.

Por lo pronto creo que voy a darle un poco por el lado de django, pero si alguien llega a leer esta nota, y además sabe de una alternativa interesante para PHP (2 requisitos complicados de cumplir) por favor comunícamelo con señales de humo, email, respuesta aquí, o como se pueda.



Sabes que el mundo está mal…


Cuando es un éxito de taquilla el hecho de que una empresa como Dell venda PCs con Ubuntu.

Que demonios pasó con aquel tiempo en el que podía uno sin problemas comprar una PC SIN SISTEMA OPERATIVO !!

La globalización sin duda, snipers ya se están tardando !