domingo, 14 de diciembre de 2014

Como usar order_by() y distinct() en Django

Como usar order_by() y distinct() en Django

Normalmente cuando se trata de filtrar objetos sin duplicados en Django, .distinct () se coloca al final de una lista de objetos. Esto se deshace de todos los duplicados y deja un conjunto de sólo los objetos únicos. También puede pasar nombres de campo como parámetros para dejar sólo los objetos con valores distintos en ese campo particular de la base de datos.
Esto funciona perfectamente bien hasta que intentas ordenar estos resultados también. Al principio pensé que podría intentar añadir .order_by () de la siguiente manera:

sets = CheckinSets.objects.filter(contact_info=info, date_arrived=None).distinct().order_by('-date_created')

Sin embargo, después de intentar esto, usted encontrará que .order_by() y .distinct () no funcionan bien juntos y producen un conflicto en los resultados obtenidos, así que esencialmente .order_by () anula el .distinct() y se siguen devolviendo objetos duplicados.

Solución

La solución, sin embargo, es bastante simple. El código permanece exactamente lo mismo que antes, y sólo tiene que cambiar .distinct() para .annotate() de la siguiente manera:

sets = CheckinSets.objects.filter(contact_info=info, date_arrived=None).annotate().order_by('-date_created')

Bastante simple y fácil de solucionar, ahora usted puede obtener los resultados deseados; un conjunto de objetos ordenados con valores distintos. Si lo desea, puede obtener más información sobre .annotate() en la API de Django.

sábado, 29 de noviembre de 2014

Vectorizar una imagen con Illustrator



Llamar una función en una consulta ajax según un código de estado http


Por lo general cuando realizamos una consulta ajax a través de jquery no siempre le prestamos atención a que sucede si la consulta falla, por eso es bueno saber que esto puede pasar y que jquery nos brinda alternativas para responder segun los distintos codigo de estado http. Esto es bueno a la hora de poder capturar errores y tener un feedback al respecto y mejorar la experiencia del usuario.

Pasemos al código:

$(document).on('ready', function(){
        $.ajax({
            url: /ruta/hacia/el/servidor,
            type: 'POST',
            data: {
                  usuario: "jorge"
            },
            statusCode: {
                500: function(){
                    // Hacemos algo.
                    alert("Error en el servidor");
                },
                404: function(){
                    // Hacemos algo.
                   alert("La página no esta disponible");
                }
            }
        })
        .done(function(data) {
            // Procesamos la informacion devuelta por el servidor en
            // la variable data o mostramos un mensaje.
           alert("Se proceso la petición correctamente");
        });
});

Como ven es muy sencillo capturar y realizar una acción para cada código de estado http.

fuente: Documentación oficial jquery

viernes, 28 de noviembre de 2014

Aumentar el limite de memoria utilizado por el servidor con PHP


Algunos módulos o scripts que se instalan necesitan un consumo de memoria superior al permitido por el servidor. En estos casos el error que aparece es el siguiente:
PHP Fatal errror: Allowed memory size of XXXX bytes exhausted (tried to allocate XXX bytes)…
Este problema se puede resolver de 2 formas distintas, una es modificando los parámetros del servidor y la otra es añadir características al script.
Para la primera solución es necesario disponer de acceso root al sistema (Servidor Virtual o Servidor Dedicado).
Paso 2. Abrir con un editor (por ejemplo vi) el fichero de configuración de php que se encuentra en (/etc/php.ini).
Paso 3. Modificar la variable memory_limit por el valor deseado, en este caso 64 MB:
Paso 4. Guardar la modificación, esto dependerá del editor utilizado. En el caso de vi se realizará con la tecla escape más :wq para indicar que se sale guardando la modifiación.
Paso 5. Para que el cambio tome efecto, reinciar el servicio de apache.  El reincio de servicios se puede hacer desde Plesk o desde la línea de comandos con el comando service httpd restart:
En el caso de no disponer acceso root ya que si dispone de un alojamiento compartido existen 2 soluciones:
– Modificar o crear ficheros .htaccess añadiendo la línea:

php_value memory_limit 64M

– Modificar el propio script donde se encuentra el problema y añadir la siguiente línea:

<?php ini_set('memory_limit''64M'); ?>

No todas las opciones disponibles pueden ser modificadas usando ini_set(), dependiendo de la configuración del servido.

Modernizr – Todo lo que necesitas saber


Asegura que tu sitio funciona lo mejor posible en todos los navegadores con Modernizr.

El concepto de web actual es algo estupendo. La llegada de HTML5, CSS3 y los frameworks de JavaScript como por ejemplo Jquery ha transformado completamente el mundo del diseño web. Esto permite los diseñadores crear interactividad avanzada con una facilidad que nunca habían tenido hasta ahora.
Desafortunadamente, mientras que este tópico está basado en una verdad, no podemos ignorar el pasado. Para los que trabajan diariamente como diseñadores web, hay una tarea diaria que puede ser desafiante a la par que frustrante: la compatibilidad con los navegadores no actualizados.
El problema con los antiguos navegadores es que no soportan estas nuevas características que tanto nos gustan. Puede que no funcione con el CSS que tratas de poner en tu hoja de estilos, pero podrían usar alguna propiedad más antigua. Trabajar para dar soporte a estos navegadores desactualizados puede convertirse en una tarea tan frustrante, que a veces abandonamos y dejamos de aplicar estas nuevas propiedades. Si no usas las últimas propiedades de CSS3, y te centras en etiquetas probadas y testeadas de XHTML, evitarás todos estos problemas, ¿verdad?
Uno de los mayores desafíos cuando adoptas nuevas prácticas y herramientas, es saber que navegador las soporta. Cuando antes sólo teníamos que trabajar con un par de versiones de Internet Explorer y una primera versión de Firefox, esto era mucho más rápido. Sabíamos de qué era capaz el navegador. Esto permitía a los diseñadores centrarse en el comportamiento y las capacidades de cada uno, optimizando un diseño para cada navegador.
Sin embargo hoy en día hay al menos media docena de opciones viables para escoger como navegador, y cada uno tiene varias versiones. Se ha convertido en casi imposible estar totalmente relacionado con las características de cada navegador con el que se puede acceder a tu web. Como resultado, ya no es práctico concentrarse en versiones individuales de navegadores. Pero hay una solución simple y elegante…

¿Qué es Modernizr?

Modernizr es una librería de JavaScript que te permite detectar, según que navegador se use para acceder a tu web, cómo se van a mostrar partes específicas de tu contenido y si el navegador lo soporta o no. La librería trabaja permitiéndote probar el navegador a través de una serie de test. Por ejemplo, si usas CSS transitions, puedes testear si funciona o no en el navegador, y si no lo hace, probar alternativas.
Modernizr te permite escribir código adicional CSS y JavaScript para hacer tu web visible, según las capacidades del navegador del usuario.
La librería se instala rápidamente, y es fácil de usar. Cuando una página con Modernizr carga, se crea un objeto JavaScript que contiene el resultado de los test. Las clases CSS se añaden a <html>, permitiéndote probar si una propiedad en script o CSS es compatible.
Te preguntaras que es lo que hace a esta librería tan útil. Modernizr te permite testear más de 40 nuevas propiedades, como font-facergbaCSS animationsgradientscanvas, HTML5 audio y videoalmacenamiento localWebGl… Ya no tendrás que hacer test para cada propiedad, sino todas a la vez. Sin embargo, uno de los puntos fuertes de Modernizr es que puedes testear modularmente. Sólo lo que necesitas.

¿Por qué usarlo?

Hay muchas diferencias entre usar Modernizr o el método tradicional. Por ejemplo, la forma de detectar las propiedades es más fiable. No está atado a versiones individuales de cada navegador. El usuario que está realizando todos los test de cada propiedad en cada navegador no tiene que aprender y conocer cada uno de ellos.
Con Modernizr simplemente construyes la configuración de los test una vez. Después puedes descansar, sabiendo que aunque los navegadores se actualicen y aparezcan nuevas propiedades, el diseño de tu web seguirá mostrándose igual.
Es un método mucho más conveniente para compatibilizar antiguas versiones de navegadores. La librería se ejecuta en milisegundos, e identifica las partes del contenido que no están soportadas. Además arreglas de una vez un problema que de usar otra solución tendrías que repetir (optimiza).
Modernizr te permite usar las últimas propiedades de HTML5 y CSS3 para mejorar tus diseños, sin excluir navegadores antiguos.
modernizr-modulos-descarga
Otro beneficio de Modernizr es que puedes bajarte la librería con el código de los test específicos que necesitas. Aunque si eres feliz con los más de 40 test, puedes mejorar el rendimiento usando una versión alojada de la librería (CDN).

 Cómo instalar Modernizr.


 1.- Configurar y descargar.

boton-descarga-desarrollo-modernizr

Visita la web de Modernizr http://modernizr.com/ y haz clic en el apartado del menú Download. Si quieres probar todos los test, puedes hacer clic directamente en el botón de descarga de la versión de desarrollo. Si estas creando una versión preparada para producción, selecciona las propiedades del test y haz clic en Generate! y después en Download.

2.- Añadir el Script.

Ahora que ya tienes tu versión de Modernizr, necesitas añadirlo al código fuente de tu página. Usa el siguiente código dentro de la sección <head> para asegurarte de que el módulo sea cargado tan pronto como cargue la página.

 3.- Usar la librería.

La forma más rápida de usar la librería es centrarse en estilos específicos usando los elementos HTML. Esto te permite restringir partes del código CSS a navegadores que soportan código específico. Si estas usando JavaScript en tu web, puedes probar propiedades individuales de cada objeto de Modernizar con un valor booleano – true significa que el navegador soporta la propiedad.

Usar los resultados de tus test.

Tan pronto como incluyas la librería en tu página, los test se ejecutan y el resultado se guarda en el objeto JavaScript de Modernizr, junto con una serie de elementos HTML indicando soporte para cada una de las propiedades testeadas en el test. ¿Qué hacemos con esta información?

Personalizar el CSS.

Para los cambios de CSS, es tan fácil como establecer una serie de reglas alternativas enfocadas a los navegadores que no soportan la propiedad en cuestión. Por ejemplo, podrías tener una serie de reglas con una CSS transition para navegadores que soportan la animación, y una segunda serie para los que no la soportan.
El selector CSS para esas animaciones sería:
Mientras que para los navegadores que no soportan las animaciones se aplicará:

 Personalización de Scripts.

No todo se puede manejar sólo con CSS. En el ejemplo de arriba donde creábamos una alternativa para una animación CSS, JavaScript puede ser una buena solución también. Podríamos usar una animación CSS si el navegador lo soporta, y si no lo hace usar una animación en Jquery.
Una alternativa es usar el objeto Modernizr para recuperar el estado de soporte para una propiedad en particular. En el caso de geolocation por ejemplo, puedes añadir una clausula condicional en tu script como esta:

 Personalización CSS y Script.

Si necesitas personalizar ambos, tus scripts y tu CSS, puedes usar na combinación de los métodos comentados arriba. Esto es particularmente útil si quieres usar un único archivo JavaScript y un único archivo CSS en tu web.

Cargar condicionalmente estilos y scripts.

Si eres capaz de separar tu código en secciones, añadirYepNote te permite cargar los recursos condicionalmente como resultado de cada test. El mayor beneficio es no cargar todas las opciones para cada navegador, sólo las propiedades necesarias para las propiedades no soportadas. Explicaré cómo usar YepNote con Modernizr en un nuevo post.
Mejor que reinventar la rueda cada vez que necesitas arreglar una propiedad, el equipo de Modernizr ha recopilado una lista de arreglos pre-construidos, categorizados por propiedad.

Cargar archivos CSS y JavaScript con Modernizr.

Modernizr tiene un práctico método de carga, que puedes incluir en tu web. El método puede mejorar la velocidad de descarga de tu web, además de cargar condicionalmente los recursos según las capacidades del navegador.
La sintaxis básica para cargar un archivo CSS o JavaScript usando Modernizr.load es el siguiente:
Verás que el último elemento de este objeto es un simple archivo. Si no hay test, este archivo simplemente se cargará, permitiéndote equilibrar la carga de recursos hasta que tu código se ejecute. Esto optimiza el tiempo de carga de tu web.

Crear tus propios test.

La API de Modernizr proporciona acceso directo a muchos métodos útiles que puedes usar para añadir tus propios tests.Este es el ejemplo que proporcionan en la documentación de la librería. Esto te permite añadir test para propiedades experimentales que no están disponibles en todos los navegadores.