Django Book en español

24 03 2008

Hace exactamente 10 días me puse a estudiar Django, y me topé con que toda la documentación, ejemplos y tutoriales están en inglés. Después de hacer el primer tutorial básico quería un poco más y me fui a leer el libro.

Después de leer un rato, me cansé ya que al estar en inglés me cuesta demasiado, no tanto por el hecho de traducir o interpretar lo que dice, sino que me cuesta llevar un buen ritmo. Entre lo que tipeo en la máquina, lo que pruebo, el diccionario y demás me distraía mucho.

Propuse en la lista de Django Español y Python Argentina traducir este libro (que por lo poco que había leído –hasta el capítulo 4–) está muy bueno.

Se engancharon bastantes con la idea, asi que para que podamos colaborar todos y de paso para aprender, puse un Trac en mi servidor. Para esto me ayudó Guille, la verdad que salió andando en un par de horas, lo hicimos todo por ssh desde la casa de él. Muy divertido :)

La página del Trac es ésta, cualquiera que tenga intensiones de colaborar se puede sumar al proyecto, no hacen falta casi nada, un poco de ganas nomás.

Después de comenzar algunos párrafos, nos dimos cuenta que era muy tedioso sacar el texto original de la página de oficial, asi que nos pusimos en campaña para buscar los .rst (reStructuredText) ya que este es libre –alguien los debía tener–. Entonces mandé un mail a la lista de Django-es y pregunté por esto. A las pocas horas Jacob Kaplan-Moss, uno de los autores del libro, nos escribe a la lista ofreciendo los fuentes originales. Enseguida nos pusimos a chatear con él y con el otro autor del libro, Adrian Holovaty, por IRC y ellos nos dieron todo su apoyo. Incluso nos dijeron que cuando esté listo lo van a alojar en http://www.djangobook.com/es ¿Qué más querés papá?





Jugando al Cliente-Servidor

12 03 2008

Esta semana se me terminó la joda. El lunes empezaron las clases en la facultad y yo de colgado no fui porque no sabía cuando empezaban, asique fui el martes (ayer) por primera vez. Hoy teníamos una clase de práctica de una materia que todavía no dimos la teoría asique no tuvimos clases.

Pensando en esto, que ya no iba a tener más vacaciones, me puse las pilas con la otra máquina que tenía en casa para dejarla funcionando como un servidor. ¿Servidor de qué? De cualquier cosa, lo que necesite en el momento, algo. Ésta ya tiene historia, porque es la que tiene la instalación de Ubuntu hecha por red.

Lo primero que se me ocurrió, fue pasar toda la música al servidor y que todas las pc de la casa la utilicen de ahí, así no hay temas repetidos, lo que implica el doble de espacio de almacenamiento. Pero antes que nada configuré el servidor ssh para poder realizar todo esto.

SERVIDOR NFS

Para compartir la música, tenía dos posibilidades, o al menos son las que conozco yo: NFS o Samba. Opte por NFS porque con Samba ya había tenido varios problemas. Ahora sí, los usuario de Windows no sé como van a hacer para sacar archivos de acá por el momento.

NFS es tan simple configurarlo que me llevó 2 o 3 minutos. Primero instalé el paquete
nfs-kernel-server, y agregué la carpeta que quería compartir a /etc/exports con una sóla línea:

/home/humitos/Música    10.0.0.5(rw,sync)

Moví toda mi música ahí, y luego le dije a la máquina cliente (la que utilizo habitualmente) que me monte, en mi carpeta donde toda la vida tuve la música, esa carpeta que se encuentra en la red. En el archivo /etc/fstab agregué una línea:

silvita:/home/humitos/Música /home/manuel/musica nfs rsize=8192,wsize=8192,timeo=14,intr

No tuve que cambiar ninguna configuración en Amarok ni nada por el estilo, es como si esa carpeta estaría en mi máquina y nunca hubiese pasado nada. Eso es lo bueno de poder montar lo que se te raje en dónde se te raje, y no andar creando unidades de disco remotas en X:\ por ejemplo.

Nota: la máquina servidor se llama silvita y el cliente michifus. Sí ¿Y qué?

AMULE-WEB

Lo segundo fue poner amule-web. Esto sirve para poder gestionar el aMule desde cualquier lado mediante un explorador web. Buscar, pausar, conectar, desconectar, cambiar configuraciones, etc.

Primero instalé el paquete amuled que me instaló algunas cosas más, no recuerdo bien, pero eran dependencias extricta, no sugerencias ni recomendaciones. Que en fin son lo mismo, pero Ubuntu hace la diferencia.

Ejecuté amuled, me creó los archivos de configuraciones y demas. Cerré el demonio con CTRL+C ejecuté este comando:

$ echo -n CONTRASEÑA | md5sum | cut -d ' ' -f 1
d287200e83ee04f67294de90dd72f9c6
$

y edité el archivo ~/.aMule/amuled.conf:

AcceptExternalConnections=1
ECPassword=CONTRASEÑA

En la sección [WebServer]:

Enabled=1
Password=CONTRASEÑA

Abrí los puertos 4662 TCP, 4665 UPD, 4672 UPD y 46711 TCP, corrí el demonio nuevamente y ¡listo! ahora se puede acceder desde cualquier lado ingresando http:/host.ejemplo:4711

Fuente: usrweblog

APACHE

Lo que sigue (configuración de torrentflux) necesita tener configurado Apache, aunque yo no lo hice en este orden, me parece que es mejor primero instalar Apache y luego TorrentFlux o por menos al mismo tiempo.

Lo que cambié en la configuración que trae por defecto apache, fue agregar dos líneas al archivo /etc/apache2/apache2.conf para poder compartir al mundo (internet) las carpetas public_html de los home de cada uno de los usuarios. Al final de todo el archivo puse esto:

UserDir public_html
UserDir enabled all

Lo que hace es habilitar el módulo UserDir para que se puedan compartir estas carpetas. Aunque todavía no le indiqué que tiene que cargar el módulo (para que esto funcione). Esto se hace creando un link simbólico, yo lo hice así:

$ cd /etc/apache2/mods-enabled
$ sudo ln -s /etc/apache2/mods-available/userdir* .
$ sudo /etc/init.d/apache2 restart

Fuente: huevas, apache

TORRENTFLUX

TorrentFlux es un cliente bittorrent desarrollado en PHP al cual le doy la misma utilidad que al amule-web. Poder gestionar las descargas desde cualquier lado. La verdad que está buenísimo, es multi-usuario, se puede hacer lo mismo que en cualquier cliente bittorrent o más…

Para instalarlo seguí esta guía, que no voy a reproducir porque está demasiado bien explicado aunque esté en inglés, es ir tipeando comandos en la consola, casi como un click en Siguiente-Siguiente.

XDMCP

¿Qué es esto? No tengo la más mínima idea, pero está buenísimo. Es como un ssh -X pero en vez de redireccionar sólamente una ventana tenés todo el escritorio de forma remota. Estuve leyendo algo en wikipedia, y demás webs. Siempre me había preguntado porqué el Kubuntu traía algo que decía al inicio de la sesión “Remote Login”, que de hecho no tiene porqué estar en inglés.

Pero bueno, busqué y encontré al toque, en menos de 15 minutos lo tenía funcionando. ¿Qué hice? busqué este archivito en la máquina servidor (silvita) /etc/gdm/gdm.conf y cambié un parámetro:

[xdmcp]
Enable=true

Reinicié el servidor porque no sabía como reiniciar sólo esto de gdm (supongo que con un CTRL+ALT+BACKSPACE se solucionaba) volví al cliente, michifús, puse en kde que quería iniciar una sesión nueva y que sea de remota. Al toque me apareció un item en la lista, doble click y voilá, estaba en el login de la otra pc. Asique ahora tengo en CTRL+ALT+F7 mi sesión de KDE en mi máquina y en CTRL+ALT+F9 tengo una sesión de GNOME en el servidor. Lero lero!





Resumiendo días

20 12 2007

Ultimamente no tengo tiempo para nada, asique no me estaba sentando a escribir algún que otro post sobre qué estoy haciendo, o investigando. Esto se debe a que estuve rindiendo una materia de la facultad, dando clases particulares de Python a unos chichos de secundaria, trabajando para Diego (un amigo), peleando con la generación de códigos de barras y demás.

Konqueror

Hace un tiempo me dí cuenta que además de no ser compatible con Gmail, este maravilloso navegador, gestor de archivos y demás, tampoco es compatible con WordPress en su totalidad. No me deja escribir / editar mis post de la forma “What you see is what you get” (Lo que ves es lo que es obtienes -creo que se dice así-), como a los post los venía escribiendo con el Kate y reStructuredText a esto no lo había notado.

Swiftfox

Hace un par de días se me actualizó el Swiftfox a la versión 3.0b3pre; con lo que noté que anda un poco más rápido que antes y dicen que consume menos memoria RAM que antes. A decir verdad, no sé cuanto consumía antes, sé que era mucha, pero no recuerdo cuanto… Ahora lo tengo con 6 solapas abiertas y consume algo así como 71124 kBytes. No me parece poco.

También noté, que puedo pegar con el botón del medio del mouse (como en cualquier aplicación de linux) lo que tengo en el portapapeles de la última selección en la ventana de edición del post. Esto antes no se podía porque aparecía las flechitas de scroll.

Otra cosa, todos los plugins que tenía instalados no son compatibles con esta nueva versión, incluso quise instalar el diccionario Spanish (Argentina) y me dijo que no es compatible con esta versión. Lo cual es bastante malo.

Está bien, estoy de acuerdo con que todavía no es la versión final, pero… ¿Porqué Swiftfox se me actualizó a una versión que no es la final y tiene algunos problemas?

Código de barras

Para el trabajo que estoy haciendo con Diego, necesitábamos de alguna manera generar el código de barra de los productos del negocio. Buscando en Google, preguntando en la lista de PyAr y por otros lados también, caí en una receta de Python la cuál genera el código EAN que queramos. Este tiene algunas limitaciones a mi entender: no puedo generar códigos con letras y como necesitaba esto, lo descarté. Igualmente me fijé como estaba hecho. Levantaba una letra que tenía internamente codificada y luego utilizaba PIL (Python Image Library) para generar un .gif con el código.

Funciona muy bien. Otra restricción que tiene es que el código debe ser de 12 digitos, o 13 si este trae el bit de comprobación, el cuál mediante un algoritmo indica si el código está bien formado o no. Y como los códigos que necesitaba era de una cantidad variable de dígitos tampoco me servía…

Preguntando bastante en la lista de PyAr (se deben acordar de algunos familiares míos :) ) logré hacer el código que realmente necesitaba: escribir cualquier cantidad de caracteres y de cualquier tipo y obtener un código de barra. Lo que hice está muy orientado por Facundo quién me pasó un ejemplo de cómo usar la Font libre de Code39 con PIL, que no tenía mucha idea.

Probando, investigando, reinventando un poco la rueda, peleando con el lector de códigos de barras (que no me quizo agarrar el teclado y el lector al mismo tiempo) llegué a la versión del código que funciona. Esto es, al programa le paso el código que quiero que genere y me guarda en el directorio actual un PNG con ese código. Ejemplo de uso:

[manuel] [~]$ python barras.py "*ABC123*"
*ABC123*
[manuel] [~]$

Ahora en *ABC123*.png tengo el código listo para imprimir. También hice que abajo del código de barras aparezca de forma legible para los humanos el código por si el lector no lo lee. Para esto utilicé una fuente cualquiera, que después cambiaré por una un poco más linda.

Curso de Python

Ayer miércoles, fue la tercer clase que tube con los chicos del curso de Python. Yo les había dado una guía de ejercicios para que hagan en sus casas y un trabajo práctico también. Hacía una semana más o menos que no los veía, y no hicieron casi nada. Sólo 5 ejercicios. Asique les pedí que me expliquen cómo lo habían hecho a algunos y cuales eran las dudas que tenían con respecto a los que no puedieron hacer. La verdad que la hora se pasó volando y alcanzamos a hacer bastante poco, por lo que les dije que si querían se podían quedar un poco más haciendo los ejercicios que les había dado y yo mientras programaba un poco

Me hicieron algunas preguntas, y como estábamos en horario fuera de la clase, los obligué a buscar en Google y a preguntar en el canal de PyAr :D .Entraron, saludaron, preguntaron, y me dijeron que había muy buena onda en ese lugar y que sabían una cantidad los que estában ahí. Espero que se copen con Python y sigan estudiando, que les halla servido lo que intenté enseñarles y aprueben la materia.

Facultad

El martes pasado rendí por segunda vez Sistemas y Organizaciones, una materia de primer año de mi facultad. Con la cual tuve problemas durante los cuatro años que hace que estoy estudiando. Aunque esa materia es una lotería, y a decir verdad, no importa cuanto sepas, sino si pegás un examen en el cual estén un poco menos soretes. El exámen es multiplechoice, son 50 preguntas, las que contestás mal restan, y algunas otras cositas más.

Cuando me dijeron que era multiplechoice, casi que me quedé tranquilo, porque no podía ser muy complicado. Pero bueno, el tema es que no es difícil el exámen, tenés que estar bien concentrado y no dejar llevarte por lo que está en lo que vos estudiaste y sabés que es así. Sino que tenés que pensar como piensan ellos, ponerte en el lado de ellos, pensar como el profesor: “La respuesta verdadera para esta pregunta es la b), pero la mas-verdadera es la d)”; entonces tenés que poner la d).

¿Cómo puede ser esto? No sé, pero en casi todas las respuestas hay dos que son verdaderas, según ellos hay una que es más verdadera. Bueno, eso me dijeron al menos hace dos semanas, la primera vez que la rendía y saqué un 2 con 32 correctas, sobre 35 que se necesita para aprobar. Osea tenía un 64% aprobado del exámen, pero esta matería única en la facultad y en su género se aprueba con 70%.

La segunda vez que la rendí se puede decir que entendí este concepto de mas-verdadera. Si te fijás bien en cada una de las respuestas hay dos que son verdaderas, pero hay una que está un poco más completa la respuesta. Igualmente dicen el concepto de formas totalmente diferentes, y en muchas preguntas me hubiese gustado tener un diccionario ahí.

Además juegan con los nervios de uno porque hacen una pregunta o afirmación y ponen “marque la correcta” o “marque la incorrecta“. Imaginate a la pregunta número 40, pensando cuál es la más verdadera y que sé yo que otra cosa (esas cosas que uno piensa cuando está un final: “Que lindo sería estar en casa con el aire”), sinceramente llega un punto en el que te confunden. Encima también juegan con la doble negación, un ejemplo sencillo de esto: “¿Cuáles de los siguientes conjuntos de partes no es un sistema? (indique lo incorrecto)”. Más de uno caemos en estas trampas…

Cumpleaños

Ayer fue mi cumpleaños, aunque no parezca tengo 22 añitos recién. Si ya sé, estoy de vuelta, pero bueno algún día tendré plata y me pondré botox :) . El sábado no juntamos en mi casa con algunos amigos y amigas a comer unas hamburguesas y tomar algo, después salimos. A ver que tal se pone esto; el año pasado me llovió de una forma increible.

Hoy es el cumple de Juanjo, un amigo de la facultad, al cual ya estoy llegando tarde… Asique me voy para allá.





Hosting nuevo - Vida nueva

19 11 2007

¡Mission acomplished! Hace un rato que termino de mudarme. No está demás decir que en PyAr (Python Argentina) hay gente que tiene muy buena onda con la respuesta de los mails que uno manda a la lista. Pero además, tienen buena onda en otros sentido también.

A través del canal de irc de pyar (#pyar en freenode.net) conocí a StyXman (o StucKman); que quitando el problema de doble personalidad que tiene, es uno a los que hago referencia arriba.

Muy sutilmente, hace un par de días (dos exactamente :P ) me ofreció hosting en su servidor casero. Le dije que lo iba a pensar y que era mejor que lo charlemos por mails, ya que yo tenía demasiadas dudas al respecto. ¿Cómo era el servicio? ¿Qué tengo que hacer? ¿Cuanto tengo de subida? ¿Cuanto de bajada? Que sé yo, una cantidad de preguntas que creo que cualquier persona que va a un hosting algo bastante distinto a lo que es Google, tiene en su cabeza.

Bueno, después de un par de mails de idas y vuelvas, nos pusimos de acuerdo. Arreglamos para empezar a hacer las cosas hoy (ya ayer) por la tarde. Enseguida me creó una cuenta para poder acceder por ssh, si bien yo tengo conocimiento sobre esto, tuve que recurrir a mis artículos anteriores sobre este comando, para refrescar algunos conceptos.

Bajé todos los repositorios de Google, como comenté en mi post anterior. Pero al final tuve que modificar algunas cosas en esta mudanza. Cuando bajé los repositorios de google lo hice con el comando:

$ svk mirror //local http://<proyecto>.googlecode.com/svn/

Lo cual me dí cuenta que está mal. Porque esto te crea una carpeta local en el repositorio y dentro de ella te manda todas las otras (trunk, branches, tags). Entonces a la hora de hacer el svnadmin load me quedaban carpetas indeseadas. Asique busqué un rato, y me dí cuenta que el error era el //local pero en casi todos los ejemplos que ví en internet estaba así y no explicaba mucho el porqué. Por lo que yo lo dejaba así cayadito.

Lo que hice en un principio fue bajar todos los repositorios de google a mi máquina, para luego subirlos por ssh al servidor. Después me avivé y me dije: ¿Porqué no ejecutar mi script de Python que me baja todos los proyectos en el servidor? Ya sabía que tenía Python en el servidor asique iba a funcionar, lo único es que me faltaba el comando svk, pero enviando un sólo mensaje al administrador del servidor en pocos minutos tenía lo que necesitaba instalado.

Bueno la cuestión es que después de un par de horas tenía todo andando en el servidor mal llamado mio. En cuanto al llamado por StyXman hacia mi persona como “iluso”, no tiene idea de lo que está diciendo. En el mismísimo momento en el que se fue a dormir, busqué todas las pass del sistema y empecé a cambiar todo tipo de configuraciones de la máquina adaptándola a mis necesidades. Ja! En realidad todavía no sé ni como cambiar la clave que me dió por defecto de mi cuenta de usuario :( . Ya veremos, todo se aprende… tampoco busqué.

“Asique bueno”, diria alguna persona que conozco. En cuanto tenga todo bien configurado se los comunico a mis amigos co-desarrolladores de algunos proyectos para empezar a meterles pilas a este repositorio.

Me gustan varias cosas de esto. Para empezar sé como están funcionando algunas cosas ahí, y soy mi propio administrador de los repositorios, osea, no dependo de google si quiero borrar el repositorio a la mierda cuando quiero (hace un par de semanas hice un “Delete proyect” en google y todavía está ahí :( ), hacer mis backups, subir cosas, bajar cosas… que sé yo. Por lo menos hasta que me reten, me echen o pase algo. Por algo dicen que no todo es color de rosas, pero esto pinta bastante bien.

Vamos a ver cómo se va desarrollando con el tiempo esto, espero no tener ningún problema y no complicarle la vida a StyXman, o a su alma gemela StucKman, haciendo cagadas…