Ir al contenido principal

Entradas

Mostrando entradas de 2013

Error undefined symbol: PyUnicodeUCS2

Hace poco actualicé mi versión de ubuntu, tras lo cual me encontré con algunos errores en mis aplicaciones implementadas con Django. Resulta que el sistema unicode que utilizaba el sistema antes era el UCS2, y la versión de python que tengo compilada para Django también, pero al actualizar el sistema se ha cambiado a UCS4, por lo que algunas de mis aplicaciones ofrecen ese error tan feo: undefined symbol: PyUnicodeUCS2 en concreto para el módulo pycrypto. Podemos ver que tipo de sistema unicode utiliza nuestra versión de python con este sencillo script: /ruta/instalacion/python -c "import sys; print sys.maxunicode > 65536 and 'UCS4' or 'UCS2'" Si efectivamente vemos que utiliza UCS2, tendremos que volver a compilar nuestra versión de python con el siguiente parámetro: --enable-unicode=ucs4 y tras esto volver a reinstalar el módulo afectado, en mi caso pycrypto (con pip por ejemplo). Tras esto ya debería volver a funcionar nuestra aplicació

Codificación de ficheros

Algunos comandos para comprobar la codificación de ficheros y modificarla: - Ver codificación file --mime-encoding prueba.html - Cambiar codificación (de iso-8859-1 a utf8) iconv -f iso-8859-1 -t utf8 prueba.html > nuevo_prueba.html - Cambiar codificación sobre el mismo fichero (uso de sponge, para lo cual habrá que instalar sudo apt-get install moreutils) iconv -f iso-8859-1 -t utf8 prueba.html | sponge prueba.html sponge permite redirigir las salida de un comando que se ejecuta sobre un fichero sobre el mismo fichero.

blockdiag

Blockdiag nos permite generar diferentes tipos de diagramas desde ficheros de texto.  Un pequeño ejemplo sacado de la página oficial ( http://blockdiag.com/en/blockdiag/examples.html ) sería el siguiente: blockdiag { // Set labels to nodes. A [label = "foo"]; B [label = "bar"]; // And set text-color C [label = "baz"]; // Set labels to edges. (short text only) A -> B [label = "click bar", textcolor="red"]; B -> C [label = "click baz"]; C -> A; }   Una vez que lo tenemos guardado (por ejemplo prueba.diag) generaremos el diagrama de la siguiente manera: blockdiag --no-transparency prueba.diag y obtendremos en la misma ruta un fichero llamado prueba.png: Para su instalación, puede se que nos de algún error si ya tenemos instalado PIL, por lo que para curarnos en saludo podemos hacer esto: pip uninstall PIL pip uninstall pillow pip install pillow --upgrade pip install

Django_evolution

A la hora de hacer cambios en el modelo de datos de nuestras aplicaciones django, siempre se nos plantean los problemas que tenemos que subsanar a mano en las tablas de la bbdd.  Para estos problemas conocía South, pero según que tipo de campos tengamos en nuestro modelado, hay veces que no nos sirve al 100%.  Hace poco he descubierto django_evolution, el cual sí que funciona a la perfección y es muy simple de utilizar. Para su instalación: pip install django_evolution Lo añadimos a INSTALLED_APPS y luego simplemente: python manage.py syncdb Cuando hagamos una modificación en el modelo de datos: python manage.py evolve --hint --execute Para más información: http://django-evolution.googlecode.com/svn/trunk/docs/evolution.txt

Modificación de inlines.js de Django

Buenas, por si a alguien le interesa, he realizado una modificación del fichero inlines.js (el encargado de los formularios inlines de Django). Resulta que para una aplicación donde tenia muchos formularios inlines (tanto apilados como tabulados) me resultaba un tanto engorroso tener que desplazarme hasta el final para poder pinchan en el enlace "Añade otro ..." y añadir un nuevo registro. Así que he modificado dicho fichero para añadir este enlace al principio y al final, y con un autodesplazamiento de la página para que enfoque el nuevo registro. Este sería el aspecto para un formulario inlines tabulado, donde tiene muchos registros, y podemos ver que aparece el enlace para añadir tanto arriba: como abajo: Adjunto el patch para aplicar tanto para la versión ampliada como a la minified. patch_inlines.js patch_inlines.min.js