sábado, 29 de octubre de 2011

Mercurial: La vía fácil




Presentación de Igor Támara en el Campus Party Colombia 2011 en la que nos habla sobre Mercurial, también se puede encontrar en la página web de su autor: igor.tamarapatino.org

domingo, 23 de octubre de 2011

Cuida tus pensamientos

Cuida tus pensamientos 
porque se volverán palabras. 
Cuida tus palabras 
porque se transformarán en actos.
Cuida tus actos 
porque se harán costumbre. 
Cuida tus costumbres
porque forjarán tu carácter. 
Cuida tu carácter 
porque formará tu destino.
 y tu destino, será tu vida.

 >> Mahatma Gandhi

martes, 18 de octubre de 2011

HTML5Pattern: Herramienta para probar patrones en formularios HTML5


HTML5Pattern es una web que nos brinda una lista de algunos patrones de datos comunes a ingresar en formularios, los cuales podemos utilizar con HTML5.

Tenemos algunos patrones como los de una tarjeta de crédito, fechas, IP's, ..  ; así como la opción de probar nuestros propios patrones en línea.

>> HTMLPattern

domingo, 16 de octubre de 2011

Django: Ignorar validación de ChoiceField

Sucede que en Django, un  campo ChoiceField requiere que se le entregue una lista de las opciones a mostrar, las cuales se otorgan por medio del atributo choices.

from django.forms import ChoiceField
list_of_choices = (
    (1, 'Choice 1'),
    (2, 'Choice 2'),
    (3, 'Choice 3'),
    # ...
    (n, 'Choice n'),
)
class MyForm(forms.Form):
    my_choice_field = ChoiceField(choices = list_of_choices)

Entonces, cuando nosotros enviamos nuestra opción en el formulario, Django comprueba que sea una opción válida, pero existen situaciones en las que esta auto-validación no es lo que deseamos, por ejemplo, en caso de que usemos un 'Selector dinámico' que obtiene sus campos a través de Ajax.


En esta situación, lo que podemos hacer es crear un nuevo campo que herede de ChoiceField, pero que incluya una validación personalizada, sobre-escribiendo a la que viene por defecto, lo que nos quedaría de la siguiente manera:
from django.forms import ChoiceField

class LazyChoiceField(ChoiceField):
    def __init__(self, choices=(), required=True, widget=None,
                 label=None, initial=None, help_text=None,
                 *args, **kwargs):
        super(LazyChoiceField, self).__init__(required=required,
        widget=widget, label=label, initial=initial,
        help_text=help_text, *args, **kwargs)

    def valid_value(self, value):      
        # aqui va nuestra nueva validacion
        # en caso de ser correcta, retorna True
        return True

opciones = (
    (1, 'Choice 1'),
    (2, 'Choice 2'),
    (3, 'Choice 3'),
    # ...
    (n, 'Choice n'),
)

class MyForm(forms.Form):
    my_choice_field = LazyChoiceField(choices = opciones)

>> Visto en: ikraftsoft

jueves, 13 de octubre de 2011

Django: Usar un FormWizard en una Vista


En caso de que se deseara incluir un formulario creado con FormWizard en una vista (para agregarle un @login_required por ejemplo), podríamos crear una vista como la siguiente:
@login_required
def view_form_wizard(request):
    
    # Ajustamos un diccionario con datos iniciales
    # En este caso, estamos pre-llenando informacion
    # solo para el 1er formulario.
    initial = {0: {'first_name': request.user.first_name,
                   'last_name': request.user.last_name,
                   'email': request.user.email,
                  },
              }

    # Se crea el FormWizard
    form = EditFormWizard([FirstForm, SecondForm,], initial=initial)

    # Llamamos al FormWizard, enviándole el context y el request
    return form(context=RequestContext(request), request=request)
Y en nuestro archivo urls.py, llamos a esta vista, como siempre.

>> Visto en: Ten.Ynottony

martes, 11 de octubre de 2011

Koan: En manos del destino

Un gran guerrero japones llamado Nobunaga decidio atacar al enemigo pese a tener solo una decima parte de los hombres de que disponia este. El sabia que la victoria seria suya, pero sus soldados dudaban. De camino, hicieron una parada en una hermita Shinto, y dijo a sus hombres: "Despues de visitar el altar, lanzare una moneda. Si sale cara, ganaremos. Si sale cruz, perderemos. El destino nos tiene en su mano."
Nobunaga entro al altar y ofrecio una silenciosa plegaria. Despues salio y lanzo una moneda al aire delante de sus hombres. Salio cara. Sus hombres tenian tantas ganas de luchar que ganaron la batalla facilmente. "Nadie puede cambiar el destino.", le dijo su ayudante despues de la batalla. "Desde luego que no.", dijo Nobunaga, mostrandole una moneda trucada, que tenia cara a ambos lados.

>> Visto en: cincinato.org

Libro: Fundamentos de jQuery



Fundamentos de Jquery es un libro en español, bajo licencia Creative Commons que nos introduce a JavaScript, Jquery y Ajax entre otros temas.

El libro se encuentra en un repositorio de GitHub, y su versión en PDF la podemos obtener de la carpeta /libro/pdf del reporitorio.

>> librojquery.com

domingo, 9 de octubre de 2011

HTML5 Test: !Comprueba tu navegador!


Sitio web que nos dice detalla cada característica de HTML5 ha sido o no implementada en nuestro navegador, además de ello incluye una comparativa con los otros navegadores.

Como dato adicional, Chrome es el navegador que alcanza un puntaje más alto.

>> HTML5Test

Instalar TortoiseHG en Ubuntu


Agregamos los repositorios e instalamos:
sudo add-apt-repository ppa:mercurial-ppa/releases
sudo add-apt-repository ppa:tortoisehg-ppa/releases
sudo apt-get update
sudo apt-get install tortoisehg tortoisehg-nautilus
>> Visto en:  blog.ragingfx.com

sábado, 8 de octubre de 2011

Cita

"Debido a que no sabemos cuándo moriremos, pensamos en la vida como un pozo inagotable. Sin embargo, todo pasa sólo un cierto número de veces y, en realidad, muy pocas. ¿Cuántas veces más recordarás una tarde de la niñez, una tarde que se volvió una parte tan profunda de tu ser, que no concibes la vida sin ella? Tal vez cuatro o cinco veces más. Tal vez ni siquiera eso. ¿Cuántas veces más verás salir la luna llena? Tal vez veinte. Sin embargo, todo parece ilimitado". Paul Bowles
>> Visto en wikicitas

Usuario y contraseña por defecto en Plone



Después de buscar un poco:
Para Windows (desconozco si es de la misma manera para linux): el usuario por defecto es admin, la contraseña por defecto es admin.

sábado, 1 de octubre de 2011

Herramientas para escoger colores que 'combinen'


De escritorio:

>> Agave -> para Gnome

Web:

>> ColorSchemeDesigner

>> Kuler

Pencil 1.3


Evolus Pencil, aplicación OpenSource que permite realizar maquetas GUI se actualizó para permitir su uso desde Firefox 4 a Firefox 7.

>> Evolus Pencil