Mostrando las entradas con la etiqueta geek. Mostrar todas las entradas
Mostrando las entradas con la etiqueta geek. Mostrar todas las entradas

martes, septiembre 22, 2009

Fotos de Soho v0.2

Después de un tiempo, he realizado la versión 0.2 de un script para descargar las imagenes de soho que busca ser multiplataforma, hecho en python, depende de la libreria PIL.
Para usarlo hay que crear una carpeta y alli poner el script, luego ejecutarlo como:


python2.5 soho.py


o


chmod a+x soho.py
./soho.py


Este es el código:


#! /usr/bin/env python2.5
import os, sys
from urllib2 import Request, urlopen, URLError
from PIL import ImageFile
URL = 'http://www.soho.com.co/galerias_new/mod_'
MODELO_INICIO = 205
MODELO_FINAL = 577
flag_descargar = True




def make_request(full_url):
    print 'Obteniendo imagen de %s ' % full_url 
    req = Request(full_url)
    try:
        response = urlopen(req)
    except URLError, e:
        if hasattr(e, 'reason'):
            print 'We failed to reach a server.'
            print 'Reason: ', e.reason
        elif hasattr(e, 'code'):
            print 'The server couldn\'t fulfill the request.'
            print 'Error code: ', e.code
    else:
        return response


def save_image(response, name):
    "La imagen"
    parser = ImageFile.Parser()
    parser.feed(response.read())
    image = parser.close()
    image.save(name)


while flag_descargar:
    """
    TODO: mejorar los nombres de las carpetas y de los archivos
    """
    NOMBRE_CARPETA = 'soho'
    if 1 <= MODELO_INICIO < 10:
        NOMBRE_CARPETA+='000'
    elif 10 <= MODELO_INICIO < 100:
        NOMBRE_CARPETA+='00'
    elif 100 <= MODELO_INICIO < 1000:
        NOMBRE_CARPETA+='0'
    NOMBRE_CARPETA+=str(MODELO_INICIO)
    if not os.path.exists(NOMBRE_CARPETA):
        full_url = URL+str(MODELO_INICIO)+'/f1.jpg'
        response = make_request(full_url)
        if response:
            "Esto se ejecuta si encuentra la primera foto"
            "Crea la carpeta"
            os.mkdir(NOMBRE_CARPETA)
            save_image(response, NOMBRE_CARPETA+'/f1.jpg')
            "Guarda el resto de imagenes"
            contador = 2
            while True:
                full_url = "%s%s/f%s.jpg" % (URL,str(MODELO_INICIO),str(contador))
                response = make_request(full_url)
                if response:
                    nombre_foto = '%s/f%s.jpg' % (NOMBRE_CARPETA, contador)
                    save_image(response, nombre_foto)
                    contador += 1
                else:
                    break
        else:
            MODELO_INICIO += 1
    else:
        print "YA EXISTE LA CARPETA %s" % NOMBRE_CARPETA
        if MODELO_INICIO <= MODELO_FINAL:
            MODELO_INICIO += 1
        else:
            flag_descargar = False


jueves, enero 22, 2009

Como usar el poderoso ORM de django en una aplicación de Escritorio

Alguna vez alguien me preguntaba que tan complejo seria usar el poderoso ORM de django en una aplicación de escritorio, lo cual me pareció una cuestión interesante pero debido al trabajo y la procrastinación™ lo dejé a algún lado, en estos días como ando melómano he estado dedicándole mucho tiempo a la musica, por cierto el reproductor que yo uso es Amarok, aunque también decidí probar el mpd, en fin cada cual tiene lo suyo y amarok me parece muy poderoso, probé otros mas como exaile, que intenta ser como amarok pero esta escrito en python con librerías gtk y este muy biche, entonces curioseando y por algunos errores de comportamiento en el amarok, me dio por revisar la estructura de la base de datos, y sinceramente no es lo mejor en modelos E-R, entonces quería ver que tan complejo sería hacer un nuevo reproductor de musica, principalmente que sea un frontend a los más comunes, amarok, banshee, mpd, y demás, incluso con una interfaz web al estilo ampache, pero pues obviamente en python y usando django, entonces empecé a realizar el esquema y de repente se me ocurrio la idea de tambien hacer un cliente de escritorio y volvio esta cuestión a mi.
Lo curioso del asunto es que es mucho más sencillo de lo que creia solo hay que poner tres lineas de código al inicio de nuestra aplicación:
Nota: es importante que crees el proyecto con el django-admin

import os, sys
os.environ['DJANGO_SETTINGS_MODULE']='proyecto.settings'
sys.path+=[os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]]

La primera linea importa los modulos os y sys.
La seguna pone la variable de entorno DJANGO_SETTINGS_MODULE que django buscará para saber las configuraciones del archivo settings.py y la ultima agrega al path de python el path de donde se encuentra la carpeta del projecto.

Y de esta manera ya podemos usar todo lo que nos ofrece django en una aplicación de escritorio, el ORM, los validadores, incluso los forms.

martes, septiembre 02, 2008

E-commerce y django

Pues he estado revisando mi correo, particularmente la etiqueta de django-es, y alguna persona preguntaba por como hacer comercio electrónico con django, y le recomendaron la pagina http://www.satchmoproject.com/ esta el código con licencia bsd y algunos ejemplos de paginas donde la usan, e increíblemente (solo para mi) lo usan en la tienda de la Free Software Foundation en http://shop.fsf.org/, en mi incredulidad debia comprobarlo y lo primero que se me ocurrió fue ir a http://shop.fsf.org/admin y efectivamente  allí estaba, la interfaz administrativa de django.

viernes, junio 27, 2008

domingo, junio 22, 2008

La Historia de Python

Pues he estado revisando el google reader y encontre por ahí un articulo acerca de la historia de Python, en si la historia ya la conocia incluso algunos tips como que fue desarrollado por Guido Van Rossum un dia de navidad, dato que no he podido confirmar. Bueno si quereis mas de la historia, pues como siempre la Wikipedia, pero lo interesante es que la gente de google tambien ha publicado un video hecho por Michael Ogawa donde nos da una vision grafica del desarrollo de mi amado Python.


code_swarm - Python from Michael Ogawa on Vimeo.


PDT: el video fue hecho con processing

viernes, mayo 09, 2008

SPAM

El día de hoy he leido bastante el Google Reader, y me he encontrado con bastantes noticias acerca del SPAM, que atacan google ad words por alli, que una honey pot para spammers por allá, y asi sustantivamente, pero por el momento ningún servicio es realmente eficiente pues se bloquean direcciones de correo y/o ips, pero algunas personas somos victimas de los spammers, me dio por revisar la lista de spam de mi cuenta en gmail (que no se note que le vendi mi alma al gran Hermano Google ) y encontre varios mensajes importantes que No eran SPAM, pero lo peor de todo es que mis correos son clasificados como SPAM, es decir mi cuenta de email debe estar en una blacklist o algo asi, pues me estan suplantando...

El punto es que creo que deberia existir algun heuristica semiinteligente para bloquear correos y no direcciones, me explico mejor, intentar detectar cuales correos son escritos por un ser humano comun y corriente como yo y no por un bot...

Ya pensaré en algo, por el momento seguiré enviando mensajes de SPAM con la mente :P

pdta: Será que por escribir tantas veces SPAM me estoy volviendo SPAM???

martes, mayo 06, 2008

Extra

Después del fin de semana laaargo, en el cual me desconecte de la red y solo interactue en el "mundo real", llegué hoy a mi universidad y me di cuenta que la gente de google me envio un correo, solo para decirme que ya me habilitaron la cuenta de Google App Engine, ahora a hechar codigo!!!

martes, abril 29, 2008

Hans Reiser, declarado culpable de asesinato en primer grado

Sacado de barrapunto

"Hans Reiser, desarrollador principal de los sistemas de ficheros ReiserFS y su sucesor Reiser4, ha sido finalmente declarado culpable de asesinato en primer grado de su mujer Nina. Todo lo que rodea el caso ha sido bastante extraño desde el principio, y podría servir de guión para hacer una película. Reiser conoció a Nina, una ginecóloga rusa, a través de un servicio de citas por Internet. Raiser tiene un carácter difícil y el matrimonio entró pronto en crisis. Nina engañó a su marido con Sean Sturgeon, el mejor amigo de Reiser. Hubo un proceso de divorcio muy desagradable y Nina consiguió una orden de alejamiento y la custodia de los dos hijos que en ese momento tenía el matrimonio. En septiembre de 2006, después de dejar a los niños en casa de Reiser para el fin de semana, Nina desapareció. La policía encontró pruebas que incriminaban a Reiser: apareció sangre de Nina en su coche, al que le faltaba el asiento del copiloto. Para complicar las cosas, Sturgeon, el amigo de Reiser y amante de Nina, ha confesado ser un asesino en serie que ha matado al menos a ocho personas, pero afirma que no tiene nada que ver con la desaparición de Nina. Hans Reiser afirma que todo es un complot, planeado desde el principio por Nina para quedarse con su dinero, y que Nina está ahora en Rusia, donde sus hijos viven con la abuela materna.
"

Comentario: Ahora si vale la pena usar reiserfs4 como sistema de archivos, pero aun no tiene buen soporte en debian... Le llevarán portatil a la carcel???

viernes, abril 25, 2008

ZPYSE y SPADE

En el grupo de inteligencia artificial de la universidad hemos estado
buscando frameworks para el desarrollo de un MAS (Multi-agent system),
obviamente queria hacerlo en mi lenguaje favorito y no en java, que es
el lenguaje que mas manejan en la universidad, lo incomodo es que lo
hacen como una religion mas que porque tenga ventajas como lenguaje de
"alto" nivel, pero eso no viene al caso.

El motivo de este post es que buscando por la internet, encontre un
par de enlaces interesantes acerca de este tema y por supuesto
desarrollado en el todopoderoso python, el primero es:
http://spade.gti-ia.dsic.upv.es/ SPADE (Smart Python multi-Agent
Development Environment), un entorno de desarrollo para sistemas
multiagente, ligero que usa Pyro (http://pyro.sourceforge.net/) y la
implementacion en python de jabber (http://www.xmpp.org/), es
desarrollado en la Universidad Polit�cnica de Valencia y tiene unas
cositas muy interesantes.

El segundo es aparentemente mejor y es: ZPYSE
(http://www.zope.org/Members/drapmeyer/spyse/index_html) que es un
modulo de ZOPE (www.zope.org) y se basa en spyse (The Smart Python
Simulation Environment) y tiene una arquitectura bastante interesante,
pues es un completo ambiente desde la parte de la transmicion con xml,
hasta la confianza generada por las ontologias web, este se adapta muy
bien a lo que queremos hacer en el grupo, que mas adelante les contare
eso.

Por el momento evaluarlos y escojer... subo una imagen del paper...




miércoles, abril 23, 2008

Django sites

He estado revisando sitios "powered by django" en
http://www.djangosites.org y he encontrado http://dpaste.com/ que esta
como el mas alto por votos.

pdt: este post fue escrito probando la funcionalidad de blogger de mail2blog

quicknote

Hace poco me consegui un trabajo donde debo hacerle varios cambios a una aplicacion desarrollada en python con gtk como librera gráfica llamada quicknote, lo interesante del asunto es que corre en un celular nokia 810 que esta muy coqueto, ojala me pudiera comprar uno de estos, tienen un linux propio que es derivado de debian, por lo que tiene repositorios apt y todo eso, algunos paquetes como python ya estan portados a este dispositivo, y dentro de poco daran soporte para qt.

Es muy vacano ver como las empresas de dispositivos moviles como nokia, le apuestan a linux y sobretodo a python, otra cosa interesante que alcancé a ver que tiene soporte para pygame, por lo que se pueden desarrollar juegos para este movil.

Y tiene ssh!!! el mejor amigo del hombre geek!!! (frase de Santiago Ruano)

lunes, abril 21, 2008

Mashup Facebook

Tengo muy descuidado este blog, por lo que voy a intentar retomarlo poco a poco, sobretodo para documentar en lo que he estado trabajando en python, algo de inteligencia artificial, redes neuronales, logica difusa, agentes inteligentes, etc.

Pero por el momento una geekada:
Un mashup para el google reader para las cosas de facebook usando http://pipes.yahoo.com, el pipe es http://pipes.yahoo.com/diegueus9/facebook donde deben escribir su token y su id.

martes, septiembre 18, 2007

Zen de Python

:~$ ipython
Python 2.4.4 (#2, Jul 21 2007, 11:00:24)
Type "copyright", "credits" or "license" for more information.

IPython 0.8.1 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

In [2]:

lunes, septiembre 17, 2007

Entrando en la honda del web 2.0 y django y shareslide

Hace poco en alguna clase hablaron de share slide, una pagina para compartir slides al estilo de youtube (que entraria en la definicon de web2.0 de Joyanes) , como he mirado django que es un framework para desarrollo de aplicaciones web en python decido buscar y encontré esta presentación

martes, junio 19, 2007

Mi primer muñequito en blender


Pues en un momento de desparche le pedí a alguien una introducción rápida a blender y me la dió, de lo que surgió fluber pero con alergia en la piel....

viernes, junio 08, 2007

OpenCA

Pues bien debido al trabajo final de una materia (cti3) debo manejar una entidad certificadora, en este caso el software a usar será OpenCA que gracias al dios de la pasta y a mi profesor (fue él el que la sugirió) es GPL, pues bien la idea es instalar openca, probar que este generando certificados, y lograr cuadrar una comunicacion que use estas certificaciones me imagino que nos tocará hacer alguna mini aplicacion web que use esto...

Lo primero es la instalacion de openca, pues como era de esperarse lo quiero hacer en debian :), y por hay me encontré un mini-howto para hacerlo, lo subo a este blog por si despues no encuentro el enlace y declaro que NO es de mi autoria sino de Rodrigo Daniel Roldán...

Aca esta el tutorial sacado de http://lanux.org.ar/pipermail/lista_lanux.org.ar/2006-July/002724.html

On 7/13/06, Roldyx <rroldan en drim.com.ar> wrote:
>
> Che si alguien quiere puede subir este documento a la wikipedia.
> Saludos. Roldyx.
>
> OpenCA en Debian (Por Roldyx)
>
> Que es OpenCA?
> OpenCA es una herramienta que proporciona un interface Web para poder
> administrar una Infraestructura de Clave Pública(PKI).
> http://es.wikipedia.org/wiki/PKI
> Componentes de OpenCA
> Una interface web creado en Perl.
> Openssl para operaciones criptográficas.
> Una base de datos.
>
> *Particularmente utilizaré Mysql como motor de Base de Datos.
> Software a Instalar
> *****Instalación de herramientas para la compilación*****
> apt-get install g++ gcc make
> *****Instalación de Perl y modulos necesarios*****
> apt-get install libxml-perl libxml-regexp-perl libdbi-perl perl
> perl-modules
> libldap2 libldap2-dev libdbd-mysql-perl libauthen-sasl-perl
> libcgi-session-perl libconvert-asn1-perl libdigest-md2-perl
> libdigest-md4-perl libdigest-sha1-perl libio-socket-ssl-perl
> libio-stringy-perl libmime-lite-perl libmime-perl libmailtools-perl
> libnet-server-perl liburi-perl libxml-twig-perl libintl-perl
> libnet-ldap-perl
> *****Instalación de Apache Web Server*****
> apt-get install libapache-mod-perl libapache-mod-ssl
> apt-get install apache
> dpkg-reconfigure apache
> *****Instalación de Openssl*****
> apt-get install openssl libssl-dev
>
> Instalación del OpenCA
> Descargamos el software de OpenCA Download http://www.openca.org/
> Es un archivo .tar.gz
> #cd /usr/src
> #tar xvfz openca-0.9.2.5.tar.gz
> #cd OpenCA-0.9.2.5
> #touch config_ra
> #touch config_ca
> y le damos permisos de ejecución
> #chmod 755 config_ra
> #chmod 755 config_ca
>
> Ahora editamos config_ra y copiamos y pegamos lo que esta a continuación
>
> #!/bin/sh
> make distclean
> ./configure \
> --prefix=/usr/local/openca \
> --with-web-host=localhost \
> --with-httpd-user=www-data \
> --with-httpd-group=www-data \
> --with-ext-prefix=/usr/local/openca.0.9.2 \
> --with-htdocs-fs-prefix=/var/www/ \
> --with-cgi-fs-prefix=/usr/lib/cgi-bin \
> --with-ca-organization="X-Tech" \
> --with-ca-locality="Capital Federal" \
> --with-ca-country="AR" \
> --with-module-prefix=/usr/local/openca/modules \
> --enable-dbi \
> --disable-db \
> --disable-rbac \
> --with-hierarchy-level=ra \
> --with-service-mail-account="root en localhost" \
> --with-db-type=mysql \
> --with-db-name=openca \
> --with-db-host=localhost \
> --with-db-port=3306 \
> --with-db-user=openca \
> --with-db-passwd="openca"
> make
> make install-ra
> make install-pub
> make install-node
>
> Grabamos los datos y ejecutamos
> #./config_ca
>
> Ahora editamos config_ca y copiamos y pegamos lo que esta a continuación
>
> #!/bin/sh
> ./configure \
> --prefix=/usr/local/openca \
> --with-web-host=localhost \
> --with-httpd-user=www-data \
> --with-httpd-group=www-data \
> --with-ext-prefix=/usr/local/openca.0.9.2 \
> --with-htdocs-fs-prefix=/var/www/htdocs/ \
> --with-cgi-fs-prefix=/usr/lib/cgi-bin \
> --with-ca-organization="Banco Credicoop" \
> --with-ca-locality="Capital Federal" \
> --with-ca-country="AR" \
> --with-module-prefix=/usr/local/openca/modules \
> --enable-dbi \
> --disable-db \
> --disable-rbac \
> --with-hierarchy-level=ca \
> --with-service-mail-account="root en localhost" \
> --with-dbi-type=mysql \
> --with-dbi-name=openca \
> --with-dbi-host=localhost \
> --with-dbi-port=3306 \
> --with-dbi-user=openca \
> --with-dbi-passwd="openca"
> make
> make install-ca
> make install-node
>
> Luego de grabar los datos en el archivo, ejecutamos
> #./config_ca
>
> Bien, si todo funciona como corresponde, ahora deberiamos ejecutar un par
> de
> comandos y listo.
> Configuramos la base de datos.
> #mysql -u root -p
>
> >create database openca;
> >create database openra;
> >grant all privileges on openca.* to openca en localhost identified by
> "openca";
> >grant all privileges on openra.* to openra en localhost identified by
> "openra";
> >exit;
> verificamos la BD
> #mysql -u openca -p
> >use openca;
> >show tables;
> (deberia retornar vacia (empty))
> >exit;
> #mysql -u openra -p
> >use openra;
> >show tables;
> (deberia retornar vacia (empty))
> >exit;
>
> Listo ahora retomamos con la CA...
> #cd /usr/local/openca/OpenCA/etc/
> #./configure_etc.sh
> Este comando modifica los archivos por ejemplo index.html.templates en
> index.html
> Ahora ejecutamos la CA haciendo:
> #./openca_start
> esperamos 3 segundos y listo.
> Instalamos los certificados ssl del apache.
> #mkdir /etc/apache/ssl
> #cd /etc/apache/ssl
> #openssl req -x509 -newkey rsa:2048 -keyout cakey.pem -days 3650 -out
> cacert.pem -nodes
> Con este comando creamos un CA para certificados X509 con algoritmo de
> encriptación rsa de 2048 bytes. Con el -keyout le indicamos que la clave
> privada de nuestra CA se almacene en el fichero cakey.pem y la clave
> publica -out en el cacert.pem.
> Seguidamente nos pedirá un password para nuestra CA y se lo damos. También
> nos
> pedirá una serie de datos por ejemplo país, nombre de empresa, que nos
> identifica como CA.
>
> Ahora vamos por la configuración del Apache Web Server.
>
> Editamos /etc/apache/httpd.conf
> y al final del archivo ponemos
> Listen 443
>
> SSLEngine On
> SSLCertificateFile /etc/apache/ssl/cacert.pem
> SSLCertificateKeyFile /etc/apache/ssl/cakey.pem
>
> Guardamos y reiniciamos el apache
> #/etc/init.d/apache restart
>
> Abrimos un navegador y ponemos https://localhost/
> Y deberiamos ver las carpetas correspondientes a la CA.
> Felicitaciones Enhorabuena has instalado el OpenCA.
>
> login: root
> password: root
>
> Eso es todo!! espero que les haya gustado!!
> Roldyx.
>
> Cualquier cosa roldyx at drim.com.ar
> --
> Rodrigo Daniel Roldán.
> CCNA

lunes, abril 09, 2007

Error 121 mysql

Si sale el error 121 en php se debe a que Innodb no permite que las foraneas sean nulas.

jueves, septiembre 28, 2006

Fotos de soho

Esta mañana en una clase de sistemas operativos unos compañeros estaban viendo imagenes de las viejas que salen en soho, y uno de ellos se puso en la labor de guardar una a una las imagenes... y como siempre me miraban excepticos frente al tema de linux pues decidí impresionarlos e hice en 1.5 minutos un script que bajara todas las imagenes de una modelo, en la tarde lo modifique para que las bajara todas... que es el siguiente

#! /bin/bash                                                                 
url=http://www.soho.com.co/galerias/mod_
for mod in $( seq 1 100 );do
mkdir mod_$mod
cd mod_$mod
for foto in $(seq 1 30 );do
wget -c $url$mod/f$foto.jpg
done
cd ..
done