1 comentario

compartir archivos con python

El día de hoy tuve que respaldar una información de un equipo con windows, el cual no me dejaba accesar a varios directorios, mi solución mas fácil fue utilizar un live CD con linux para poder recuperarla, pero resulta que el equipo en cuestión no soportaba las distribuciones que tenia, entonces me decidí por descargar lubuntu el cual es significativamente mas ligero que mi primer opción (Ubuntu), mientras se descargaba me puse a investigar algunas opciones para recuperar informacion y me encontre con un modulo de python muy interesante, con el cual se puede montar un servidor web para compartir archivos de una manera muy facil y rapida, solo entras a un directorio desde la consola y ejecutas lo siguiente:

$ python -m SimpleHTTPServer

con esto se inicia el servidor web por defecto en el puerto 8000, el cual lo podemos cambiar al final de la instrucción, ahora solo basta abrir cualquier navegador y poner en la dirección la ip de la maquina y el puerto para poder navegar entre los sub directorios y descargar los archivos que ahí se encuentren, como dije antes: fácil y rápido!! 😀

Anuncios
Deja un comentario

consulta a columnas concatenadas en Django

Para poder realizar una consulta sobre varias columna como si fueran una sola con Django:

Class Alumno(models.Model):
    nombre = models.CharField(max_length=45)
    paterno = models.Charfield(max_length=45)
    materno = models.CharField(max_length=45)

si quisieramos realizar una consulta y tuvieramos el nombre completo  ‘Juanito Perez Garcia’

nombre_completo = 'Juanito Perez Garcia'
alumno = Alumno.objects.extra(
where=["CONCAT(nombre,' ',paterno,' ',materno) = '%s'"%nombre_completo]
)

Con esto podriamos encontrar coincidencias sin tener que hacer cosas como dividir el nombre, solo una cosa, el hacer esto implica que el rendimiento se vea un poco afectado en la consulta.

saluoos.

5 comentarios

redireccion despues de login en Django

…para no olvidarlo 😛

Una de las funcionalidades básicas de todo sistema de autenticación web es la redireccion despues de iniciar sesión, cuando se inicia desde la url de login nos manda a una url definida en el sistema, pero cuando accedemos a una url distinta y nos solicita iniciar sesión lo que normalmente esperamos es que después de iniciar sesión nos regrese  a la pagina en que estabamos. La app auth de Django cuenta con esta característica.

Funciona de la siguiente manera:

cuando la función login() recibe una petición tipo POST busca un identificador llamado ‘next’ para redirigir al terminar la autenticación, cuando no la encuentra busca la variable LOGIN_REDIRECT_URL en el settings la cual tiene por default ”/accounts/profile/”.

La variable ‘next’ es proporcionada por la misma función, entonces solo tenemos que agregar lo siguiente en el form de login:

<input type=”hidden” value=”{{next}}” name=”next” >

saluuos

3 comentarios

case sensitive MySQL

En dias pasados tuve que echar a andar un sistema en linux, el cual esta hecho en php – Flex, con WebOrb para conectarlos y que utiliza MySQL para la base de datos, anteriormente corria en windows sobre wamp, pues aparentemente todo esta bien al principio hasta que algunas funcionalidades no se ejecutaban como debieran.

El proceso de encontrar cual era el error fue algo fustrante ya que como tienes varias tecnologias integradas me imaginaba mil cosas(configuración, problema de versiones, etc.), lo primero fue checar el log de apache el cual me decia que habia errores con variables no declaradas y ademas con una función; ‘mysql_fetch_array’ para ser exactos, el hecho es que no me explicaba porque el codigo se estaba ejecutando bien en windows pero en linux no, lo cual se me hizo muy raro, pase un par de dias tratando de encontrar cual era el bendito error hasta que en un foro me comentaron hacerca de algo que se llama case sensitive y que en ocaciones causaba problemas con posgreSQL, entonces me puse a investigar y resulto que si, he aqui el resultado:

Pues resulta que el mysql en windows por default no distingue entre mayusculas y minusculas en nombres de campos y tablas en una consulta, pero linux si, (esto me recuerda al detalle de manejo de directorios en ambas plataformas), asi que la solución era cambiar esta variable para que en linux tambien lo ignorara, si alguna vez les pasa hagan lo siguiente:

1. primero paramos el servicio de mysql
$ sudo  /etc/init.d/mysql stop2. editamos el archivo de my.cn y buscamos el apartado [mysqld]
$  vim /etc/mysql/my.cn

3. agregamos lo siguiente:
lower_case_table_names = 1

4. volvemos a iniciar el servicio de mysql y listo.
$ sudo /etc/init.d/mysql start

aqui un poco mas de información al respecto.

Conclusion, si vamos a utilizar consultas en crudo en una aplicación, tratar de siempre poner los nombres tal cual fueron creados, o mejor aun, no hacer un “tutifruti” de nombres :S.

saluuoos.

4 comentarios

por wey

El día de ayer me propuse renombrar todos los capítulos de una de mis series favoritas de anime (Bleach) ya que cuando quería ver alguno (no me importa que ya los haya visto como 20 veces :P) tenia que andar buscando entre todos ellos ya que no tienen un orden los nombres, pero dada la cantidad de capítulos pues hiba a llevarme un buen de tiempo, así que como buen coder huevon me dispuse a hacer un script en python para renombrarlos sin chistar. Igual me tarde para poder extraer el numero de un capitulo y diferenciarlo del resto del nombre y poder ponerle uno estandard pero la satisfacción y el hecho de que lo podría usar en otra momento valian el esfuerzo.

El DETALLE es que cometí 2 errores garrafales, uno peor que el anterior :(…
1.- no contemple la extensión de los archivos(tenia .avi, .mp4, etc)
2.- asumi que el script estaba bien y lo ejecute en la carpeta original sin hacer un previo backup :S

resultado:
lloriquear porque perdí toodooos los archivos de la carpera T_T

en cuanto se me pase la tristeza y arregle lo de las extensiones (y claro lo pruebe) lo subo para que alguien mas pueda utiizarlo, sniff 😦 mis capitulooos T_T

P.D. tampoco estoy tan wey, si tenia un respaldo pero no incluia los ultimos 4 meses :(, downloading …. 😛

Deja un comentario

calaverita a los moviles

La calaca esta mañana estaba muy enojada,
pues su iphone y la alarma la dejaron retrasada,
ahora tiene un robotsito verde, sabe que es mejor,
que no se quedara dormido el si es madrugador.

feliz puente de muertos 😛

8 comentarios

sencillo cifrado vernam en python

Este es un programita de una tarea escolar para cifrar y descifrar utilizando el metodo de vernam que consiste en aplicar la operacion XOR sobre el texto a cifrar y una llave, tambien incluye una funcion para generar una llave numerica pseudoaleatoria de la misma longitud del texto a cifrar, sencillo pero “junciona” :), python es en verdad perfecto para esta clase de tareas, me tomo mas tiempo en buscar como obtener el codigo ascii de un caracter que codificar el programa, aun puede ser mejorado pero p’a empezar esta bien 😉

# -------------------------------
# sencillo script para cifrado de vernam
# y generar llaves numericas

import random

def get_randomkey(text):

    """ genera una llave numerica pseudoaleatoria
    de la misma longitud del texto a cifrar  """

    start = '1'
    end = '9'

    for i in range(0, len(text) - 1):
        start += '0'
        end += '9'

    #print "start: ", start
    #print "end: ", end

    key = random.randint(int(start), int(end))

    return str(key)

def crypt(text, key):
    ''' cifra/descifra un texto utilizando operacion XOR'''
    new_text = ""

    for i, c in enumerate(text):
        code = ord(c)
        xor = code ^ ord(key[i])
        new_text += chr(xor)

    return new_text

if __name__ == '__main__':
    print "cifrado de vernam (XOR)"
    print "( 1 ) Cifrar"
    print "( 2 ) Descifrar"
    option = 0

    while option <> "1" and option <> "2":
        option =  raw_input("teclee una opcion valida: ")

    if option == "1":
        text = raw_input("Texto a cifrar: ")
        key = get_randomkey(text)
        text = crypt(text, key)
        print "texto cifrado: ", text
        print "clave para descifrar: ", key

    elif option == "2":
        text = raw_input("Texto a descifrar: ")
        key = raw_input("clave: ")
        text = crypt(text, key)
        print "texto descifrado: ", text

tengo un problema con el indentado, pero en cuanto lo resuelva actualizo el post 🙂