JCeb's Blog

Programación, investigación, proyectos, vida y mas…

Archive for the ‘Uncategorized’ Category

If corto en python

with 3 comments

Seguramente si programaron en C utilizaron el if corto, ¿cual es ese?, bueno es esto:

saludo = lang=='es' ? 'HOLA' : 'HI'

Lo anterior es equivalente a:

saludo = ''
if(lang=='es'){
    saludo = 'HOLA'
}
else{
    saludo = 'HI'
}

Bueno en python existe un if corto igualmente, solo que un poquito diferente:

saludo = 'HOLA' if lang=='es' else 'HI'

Lo anterior equivale a:

saludo = ''
if lang=='es':
    saludo = 'HOLA'
else:
    saludo = 'HI'

Written by JCeb

6 junio, 2011 at 11:35 pm

Publicado en Uncategorized

Tagged with , , , ,

Django con Jquery form y un image field latoso

with 3 comments

Ahora que andamos desarrollando la nueva versión de pikhub, andamos procurando un codigo hermoso, por lo que agregamos a nuestros javascripts uno llamado jquery.form, el plugin está bien chingon, te permite hacer peticiones por ajax sin necesidad de definir los parametros que solicita jquery y la petición por ajax la puedes armar a apartir de tu form.

Por ejemplo:

#!html
<form id="profile_form" class="ajax" 
action="/settings/profile/" method="post" 
enctype="multipart/form-data">
    {%csrf_token%}
    {{user_form.as_table}}
    {{profile_form.as_table}}
    <input type="submit" value="{%trans 'Enviar'%}" />
</form>

#!javascript
$('form.ajax').submit(function(){
        $(this).ajaxSubmit({
            dataType:  'json',
            success:  function(json){
                alert(json.message);
            }
        });
        return false;
    });

Y el codigo es generico pero hay un pequeño detalle, si dentro de los campos del formulario hay un imagefield y si tienes una versión del jquery.form del 2009 o 2010, la cosa no funcionará correctamente. Pero si en cambio tienes la versión 2011, todo funciona perfectamente, pero te diré que no es tan facil como parece, seguramente pensaras ah pues como es una petición por ajax, solo bastara con que en mi vista(views.py) haga esto:

@login_required
def profile(request):
    user = User.objects.get(username=request.user.username)
    profile = user.get_profile()
    profile_form = ProfileForm(instance=profile)
    alert = _(u'Datos guardados').encode('utf-8')
    user_form = UserForm(instance=user)
    if request.POST:
        user_form = UserForm(request.POST, instance=user)
        profile_form = ProfileForm(request.POST, request.FILES, instance=profile)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
        else:
            alert = _(u'Datos incorrectos, intenta de nuevo').encode('utf-8')
    if request.is_ajax():
        json_obj = {'message' : alert, 'avatar':user.get_profile().avatar.url}
        return HttpResponse(json.dumps(json_obj))
    args = {
        'profile_form':profile_form,
        'user_form':user_form
    }
    return render('settings_profile.html', args, context_instance=rc(request))

El código permite que el formulario responda a HttpRequest y a XMLHttpRequest o ActiveXObject, gracias a la función is_ajax().

Pero permiteme desilusionarte, si esperas que al guardar tu formulario con una imagen en él, te va a responder satisfactoriamente, te sentaras a esperar porque jamas te responderá jeje. Esto debido a que jquery.form manda la imagen por medio de un iframe invisible para nosotros, un trucaso, pero hay que saber como tratarlo, por lo tanto, si deseamos que todo funcione bien, habrá que agregar un campo como comodin a nuestro formulario, en mi caso lo agregue con javascript, usando j2h.js(https://bitbucket.org/julianceballos/j2h/src/9c468b91cec7/j2h.min.js), de la siguiente forma:

$('#profile_form').append($.j2h('input',{
        'type':'hidden',
        'name':'xhr',
}));
$('#profile_form').submit(function(){
        $(this).ajaxSubmit({
            dataType:  'json',
            success:  function(json){
                alert(json.message);
            }
        });
        return false;
});

Así si el javascript está activado el formulario se irá con un campo de más oculto que se llama xhr.
Luego en la vista(views.py) solo habrá que revisar que ese campo existe y si existe quiere decir que estamos enviando por ajax los datos y jquery.form está haciendo sus trucos para subir la imagen sin recargar la página. Por lo que la vista queda:

@login_required
def profile(request):
    user = User.objects.get(username=request.user.username)
    profile = user.get_profile()
    profile_form = ProfileForm(instance=profile)
    alert = _(u'Datos guardados').encode('utf-8')
    user_form = UserForm(instance=user)
    if request.POST:
        user_form = UserForm(request.POST, instance=user)
        profile_form = ProfileForm(request.POST, request.FILES, instance=profile)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
        else:
            alert = _(u'Datos incorrectos, intenta de nuevo').encode('utf-8')
    if request.POST.__contains__('xhr'):
        json_obj = {'message' : alert, 'avatar':user.get_profile().avatar.url}
        return HttpResponse(json.dumps(json_obj))
    args = {
        'profile_form':profile_form,
        'user_form':user_form
    }
    return render('settings_profile.html', args, context_instance=rc(request))

Y listo ahora todo debe funcionar perfectamente.

Written by JCeb

19 mayo, 2011 at 6:04 pm

Publicado en Uncategorized

Pikhub en línea

with one comment

El día de antier pusimos pikhub en línea en http://pikhub.com, tuvimos un buen apoyo por parte de amigos cercanos y otros no tan cercanos, pero que a final de cuentas dieron un banderazo a pikhub, actualmente se tienen 2964 piks(Fotos) unidas, 152 usuarios y 69 usuarios :). Aún no hemos hecho una campaña de difusión másiva porqué queremos atender algunos detalles antes de invitar al mundo XD jeje. Seguimos trabajando para tener un sistema mejor y así ya empezar a captar usuarios como se debe. Saludos.

Written by JCeb

7 abril, 2011 at 3:42 pm

Publicado en Uncategorized

pikhub

with one comment

Hola, me mantuve alejado del blog mucho tiempo, he puesto en peligro el título, pero creo que es por algo que vale mucho la pena, actualmente estoy trabajando en http://pikhub.com, un sitio para la unión de fotografías de diferentes personas que asistieron a un evento determinado, pikhub se conecta actualmente a flickr y facebook. Actualmente Pikhub está abajo, hemos hecho la migración de un VPS para pruebas que teníamos con sandino networks http://sandino.net a amazon web services http://aws.amazon.com/es/.

Con la migración a este servicio estaremos mejor preparados para hacer que pikhub explote y comience a captar la mayor cantidad de usuarios :).

¿Cual es la diferencia de pikhub con otros servicios de fotografía?, bueno en primer pikhub actualmente no almacena fotografías, pero si se conecta a los servicios de fotografía más importantes como Flickr, Facebook, proximamente Picasa y luego armaremos una dinámica para poder unir tambien twitter. Pikhub obtiene de estas redes sociales las fotografías y las muestra en una sola pantalla para la comodidad de las personas que asistieron a algún evento. Las personas pueden ver los eventos que otras personas han creado y entrar a ellos, siempre y cuando las personas no los pongan como privados. Sin duda estamos reinventando la forma de compartir fotografías y seguiremos haciendolo, queremos ser la fototeca más grande en internet y creo que vamos por buen camino.
Ya somos conocidos en silicon valley, estamos en la primer etapa de la empresa, pero sin duda seguiremos creciendo hasta competir contra los servicios de los cuales actualmente dependemos y en eso estamos.

Desde el Lunes estamos encuartelados terminando detalles del sistema, migrando a amazon y reestructurando ciertos aspectos del sistema, proximamente anunciare en mi blog la fecha oficial de lanzamiento de pikhub.com en su primer versión internacional :). Haremos fiesta de lanzamiento y todo como debe ser para la clase de producto que hemos realizado.

Best regards.

Written by JCeb

1 abril, 2011 at 4:03 am

Publicado en Uncategorized

Proyecto ganador?, si creo!

leave a comment »

He estad algo retirado del blog, pero es debido a que he estado trabajando los últimos meses en varías cosas que me han robado tiempo para poder escribir algo en este tan querido blog mío. Bueno el chiste es que entre las cosas que ando haciendo, inicié una empresa y creo que definitivamente el proyecto con el que comenzamos es una excelente forma de generar riqueza, lo que desemboca en generar empleos y muchas otras cosas de las cuales me sentiré orgulloso si resultan.

El proyecto es algo ambicioso y no muy complicado, más que nadaes complicado por la parte de análisis del sistema y el desarrollo de la manera más eficiente de realizarlo, definitivamente este proyecto desafías varías cosas que había pensado en alguna ocasión, tuve la oportunidad de poner todos mis conocimientos en este proyecto, trabajar con 3 sistemas operativos al mismo tiempo, preocuparme de sobre manera en la compatibilidad con navegadores tanto para sistemas de escritorio como para moviles, definitivamente creo que este proyecto ha valido mucho la pena y apenas es la primer versión y solo nos llevó 2 meses hacerlo a mí y al maravilloso equipo que formó parte de este sueño; muchisimas cocas, códigos estirados, reducidos y muchas risas y suposiciones de como se va a comportar el público cuando lo utilice, definitivamente levantará mucha expectativa pues gracias a dios aún no existe una herramienta similar, este ser supremo está reteniendo seguramente las mentes de las demás personas para que nosotros podamos tomar la delantera. Este es el proyecto debo decirlo donde he puesto muchisimo cuidado en los detalles y he explorado muchas cosas que dije jamás hacer jaja, pero todo sea porqué funcione y lo haga de la mejor manera posible, el sistema no es perfecto, pero definitivamente es bueno y es útil. Bueno ya veremos, no he “revelado” para que será ni como funciona, pero pronto lo haré saber en mi blog. Gracias por leer este post. Saludos a quienes lo lean.

Written by JCeb

4 febrero, 2011 at 8:02 pm

Publicado en Uncategorized

Nacnati A.C.

with one comment

Hola, el mótivo de este post es para platicarles un poco de lo que estoy trabajando en mi parte altruísta con una asociación civil que hemos creado con la sede en Mérida, Yucatán, MX.

El objetivo de nuestra asociación civil es localizar productos de Software Libre a los diferentes idíomas nacionales, realizar actividades de promoción de estos productos y a su vez generar programas en colaboración con instituciones públicas y privadas para su implementación en la sociedad.

Como primer proyecto de nuestra asociación civil hemos realizado un proyecto en conjunto con Mozilla México, la localización de Firefox a Nahuatl, Maya, Zapoteco y Tarahumara. Este proyecto pretende llevar este navegador a las 4 primeras variantes lingüísticas seleccionadas de las 364 en total.

Necesitamos del apoyo de instituciones de gobierno, iniciativa privada, de educación entre otras muchas para que sea posible este esfuerzo.

Cómo parte de esta busqueda de apoyos hemos inscrito el proyecto a Iniciativa México, donde puedes visitarla y si deseas otorgarnos votos para que quedemos entre unas de las iniciativas más populares.

Apoyanos con un voto: http://bit.ly/firefox-imx

Para más información puedes visitar la página de nacnati en:

http://nacnati.org.mx

Written by JCeb

17 agosto, 2010 at 4:58 pm

Publicado en Uncategorized

Módulo SQLite para Jetpack nueva implementación

with one comment

Hola amigos, he desarrollado un pequeño módulo como ayer comenté, los amigos de mozilla Labs han dado opiniones al respecto y sin duda el manejar consultas asincronas es uno de los temas más relevantes hoy en día, por lo que el equipo de Firefox ha estado modificando ciertas bibliotecas para ofrecer esta posibilidad en el navegador.
Bueno debido a ello los amigos de labs me han solicitida si se puede que las consultas en el módulo pudieran ser asincronas y por supuesto que se puede, así que ahora la implementación es un poquito diferente ;).

var sql = require("sqlite")

sql.connect("jceb.sqlite");

sql.execute("create table features(id integer primary key autoincrement, name text);");

sql.execute('insert into features(name) values("hola");');

sql.execute("select * from features;",function(result,status){
  for(var i=0;i<result.rows;i++){
    for(var j=0;j<result.cols;j++){
      console.log(result.data[i][j]);
    }
  }
});

Si se dan cuenta lo único que cambia es que ahora al hacer execute con una consulta que devuelva resultados, se tiene que agregar una función que nos ayuda a manejar la solicitud asincrona, es decir al agregar esta función ya no habrá el caso en que se pierda la información porqué no la leímos en el momento apropiado.

Para más información:
https://wiki.mozilla.org/Labs/Jetpack/Reboot/JEP/121

Visiten http://mozilla-mexico.org

Written by JCeb

7 agosto, 2010 at 2:56 am

Publicado en Uncategorized