|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - DRiMeR
Páginas: [1]
1
« en: Miércoles 26 de Agosto de 2009, 16:16 »
Buenas. He estado mirando por toda la web de RockBox, pero sólo he encontrado algunos enlaces que daban error, y un pdf para aprender a Usar el Firmware. Pero yo lo que quería es saber si hay algun manual, referencia, glosario de APIs, o algo... para hacer algun pequeño programa que funcione en RockBox. He etado viendo el codigo fuente de algunos de los plugins que vienen ya con RockBox, como el del Sodoku, pero es tan extenso... pff no sé por donde meterle mano, y ni si quiera si me serviría de mucho.
2
« en: Domingo 7 de Junio de 2009, 11:12 »
Pues he estado mirando el código, y si no lo estoy interpretando mal, simplemente te limitas a calcular una constante (seg) y se la sumas a cada valor del mensaje en claro, no??
Es decir... que si criptoanalizas un poquito, podrías ver que hay ciertos patrones repetitivos... unos valores se repetirían más que otros (como por ejemplo las vocales). Entre toda esa información y haciendo unos cálculos estadísticos, se podría ver con que probabilidad aparece cada valor, y comparando eso con las probabilidades de aparecer que tiene cada letra en español, seguramente se podría descifrar. E incluso sin hacer la parte estadística, se podría buscar alguna posible asociación entre los valores del mensaje cifrado y las letras del español, e ir viendo si se producen pares o tripletas de letras que puedan darse en las palabras del idioma (por ejemplo, "pqr" sería descartado).
Otra cosilla en la que me he fijado, y si estoy en lo correcto, pides una contraseña, pero sólo empleas sus 4 primeros caracteres para calcular esa constante, no?? Es decir, que por fuerte ylarga que fuera la contrasña daría igual, porque eso no lo estás teniendo en cuenta.
3
« en: Martes 19 de Mayo de 2009, 10:12 »
He tenido que implementar el algoritmo del RC4 en python para unas prácticas. Y como ahora suelo meterme aquí más a menudo, os lo dejo por si le interesa a alguien. Aunque seguramente ya esté implementado en alguna librería jejej #!/usr/bin/env python import unicodedata def ini_caja(clave): S = range(256) K = range(256) j = 0 for i in range(256): if (j==len(clave)): j = 0 K[i] = ord(clave[j]) j = j+1 j = 0 for i in range(255): j = (j+S[i]+K[i])%256 aux = S[i] S[i] = S[j] S[j] = aux return S def rc4(nomfich, nomdest, clave): S = ini_caja(clave) dest = open(nomdest, 'w') data = open(nomfich, 'r') data.seek(0,2) tam = data.tell() data.seek(0,0) i, j = 0, 0 while(data.tell() < tam): i = (i+1)%256 j = (j+1)%256 aux = S[i] S[i] = S[j] S[j] = aux t = (S[i] + S[j])%256 O = S[t] b = data.read(1) w = O ^ ord(b) dest.write(chr(w))
Salu2.
4
« en: Lunes 18 de Mayo de 2009, 17:29 »
Ok, muchas gracias. Ahora todo me cuadra más... ejejej
SAlu2.
6
« en: Lunes 18 de Mayo de 2009, 16:04 »
Es verdad, así me funciona. el raise y el except los he dejado sin la cadenay perfecto.
Pero y si quisiera distinguir entre varios tipos de excepciones?? Como por ejemplo, una que se produzca durante el manejo de archivos, y otra durante la conexión a una web. Son ejemplos... no quiero hacer nada de eso, pero es que ya me gustaría saberlo.
Un saludo. Y gracias.
7
« en: Lunes 18 de Mayo de 2009, 11:13 »
Pues haciendo la primera clase que intento hacer en python, me ha surgido una duda. Es simplemente, que cuando he definido un método dentro de la clase, quería comprobar que se hubieran "instanciado" algunos atributos,y en caso negativo lanzar una excepción. El hecho de comprobar los atributos me va bien, pero al lanzar la excepción lo he hecho así: Y en el programa principal, tengo un: try: v.metodo() except 'NoInicializado'
Y esto me funciona! Pero Python me lanza el siguiente error: DeprecationWarning: raising a string exception is deprecated
Esto es grave?? O debería hacerlo de otra forma?
8
« en: Miércoles 6 de Mayo de 2009, 11:57 »
Buenas. Estoy escribiendo una parte de un programa en python, pero me da un fallo de segmentación, y revisando el código, he pensado que quizá es porque utilizo muchos objetos temporales (sobretodo listas), y no los destruyo. La verdad es que no lo había pensado, pero nunca he visto nada así en los scripts que he leido por internet. He estado buscando y he leído que no es necesario destruirlos, porque python lo hace automáticamente.
Pero lo que yo quiero saber es cuándo lo hace, y cómo, y si yo puedo destruirlos para evitar consumir memoria que me pueda dar fallos de segmentación.
Un saludo.
9
« en: Lunes 27 de Abril de 2009, 19:16 »
Hola otra vez. Por fin lo he conseguido! Ya he conseguido pasar cualquier cosa a binario. Tal y como lo estaba haciendo, me servía sólo para caracteres, porque el string.atoi admite sólo bases desde 2 hasta 36, así que aunque me hubiera conformado con leer archivo que contuvieran texto, los símbolos (?, =, !, etc..) me hubieran fastidiado. El código me ha quedado así: def aBinario(n): if(n<0): raise ValueError, "Entero negativo no valido" cad=[] b=struct.unpack('B', n) b=b[0] for i in range(8): cad.append(b & 1) b = b >> 1 return cad
El truco está en el unpack, y en que me lo convierte de forma que en vez de devolvermelo como una lista normal, he tenido que coger el primer elemento, que es donde pone el elemento convertido en forma de lista. Muchas gracias por vuestra ayuda, como veis en el código, me ha ayudado bastante tener el código de NRM como guía (no tenía ni idea de que existiera el >> para mover los bits). Cuando termine la aplicación la colgaré por aquí  Un saludo.
10
« en: Lunes 27 de Abril de 2009, 16:25 »
Sí, está bien ese script. Pero lo que hace es abrir dos imágenes para tocarlas e introducir una en la otra. A mí lo que me interesa es meter otro tipo de información binaria, que ni si quiera tenga por qué ser texto. He ahí la necesidad de operar a nivel de bits.
11
« en: Lunes 27 de Abril de 2009, 10:37 »
Pues a ver, ya he probado ese codigo, y lo he amoldado un poquito para que en vez de hacerme un string, me haga una lista ^^ Pongo el código aquí y comento un error que me da y no sé cómo meterle mano: #!/usr/bin/env python import string def aBinario(n): if(n<0): raise ValueError, "Entero negativo no valido" out='' while(n): out = str(n & 1) + out n = n >> 1 cad=[] for i in range(len(out)): cad.expand(out[i]) return cad def leefich(nomfich): f = file(nomfich, 'r') n=0 f.seek(0,2) tam = f.tell() f.seek(0,0) fich_cad=[] while(f.tell()<tam): b = f.read(1) fich_cad.extend(aBinario(b)) return fich_cad if __name__ == "__main__": datos = leefich('a.txt') print datos
Eso me lanza el siguiente error en la línea 11: TypeError: unsupported operand type(s) for &: 'str' and 'int'Lo he intentado solucionar poniéndola así: out = str(int(n) & 1) + out
He supuesto por el error que necesitaba que el operando fuera entero. Pero es que de esta forma me lanza este otro error: ValueError: invalid literal for int() with base 10: 'a'Yo supongo que lo del 'a' será porque lo ha leido del fichero (a.txt solo contiene una a). Pero lo de la base 10... es que ya no sé que es eso, porque supuestamente, si le hago el casting a int, ya está en base 10, no??
12
« en: Lunes 27 de Abril de 2009, 09:21 »
Anda!! Más o menos comprendo ese código, y creo que eso es lo que buscaba (o parecido), pero lo tengo que probar en cuanto pueda (en este PC no está Python instalado).
Lo que pretendo leyendo el fichero bit a bit es hacer una pequeña parte de una aplicación que estoy escribiendo para Criptografía. Y en esta parte en concreto, lo que quiero hacer es leer un bit del archivo, y según sea 0 o 1, modificar el pixel de una imagen, o no modificarlo. Esto es básicamente para esconder esa información dentro de la imagen.
Entonces, lo que haré luego, es utilizar esta función confomre vaya leyendo bytes del archivo, y concatenar todos los valor que me devuelva para obtener una lista de todos los bits leidos.
Así luego me será más comodo, en vez de intentar hacerlo todo del tirón (aunque consumirá más memoria).
Luego os digo si me funciona. Gracias por la ayuda, NRM.
13
« en: Sábado 25 de Abril de 2009, 12:17 »
Actalizo mi duda. Creo que he conseguido "algo" xDD Lo que estoy intentando, en vez de leer bit a bit, es leer byte a byte, y hacer una conversion al byte para verlo como entero, y así podría sacar qué ceros y unos hay ahí, dentro del byte. El código que tengo ahora mismo es el siguiente: import string def leebits(nombre): #"nombre" es el nombre del fichero en cuestion f = file(nombre, 'r') n=0 f.seek(0,2) tam = f.tell() f.seek(0,0) # en "tam" ya tengo el tamano en bytes del fichero para controlar cuando llego al final while (f.tell() < tam): b = f.read(1) # leo un solo byte print string.atoi(b,10) print 'n' print cuentabits("img.png")
Teóricamente, estoy usando bien el método atoi, o al menos así es como yo entiendo que se usa. Aún así, no se me convierten bien a entero en base decimal. Si consiguiera hacer eso, el resto ya sería cuestión de convertir el número decimal a binario. Es un proceso correcto, no?? A ver si voy a estar haciendo todo esto, y luego resulte que no funcione por algún motivo :S Un saludo.
14
« en: Viernes 24 de Abril de 2009, 19:08 »
Buenas. He estado guiándome todo el rato con la documentación de python, y a la hora de abrir, leer, desplazarme y cerrar ficheros legibles no he tenido ningún problema. Pero ahora querría hacer una cosa un poco diferente. Sería cuestión de ver los bits del fichero, porque son datos no legibles.
He visto en la documentación que el único parámetro que le puedo pasar al .read() es el número de bytes, pero a partir de ahí ya no he encontrado nada útil.
A ver si me podeís ayudar, ya sea diciendome como leer bit a bit, o bien cómo tratar los bytes y poder ver el contenido no legible que haya cargado desde el fichero.
La verdad es que siempre he querido aprender hacer esto desde que empecé a dar mis primeros pasos con C, pero nunca me puse a mirar bien cómo iba, y aunque supiera hacerlo en C ahora... no creo que me fuera de mucha ayuda :S
Un saludo.
15
« en: Miércoles 22 de Abril de 2009, 19:22 »
De acuerdo, gracias por el consejo. Lo haré de esa otra forma entonces.
Respecto al instanciador... estoy acostumbrado a utilizar el nombre "constructor" xDD Procuraré quedarme con los nombres para llamar a cada cosa como se llama.
SAlu2.
16
« en: Miércoles 22 de Abril de 2009, 18:45 »
Qué bien!! Me funciona!! Muchísimas gracias Edo. Mi fallo era que no sabía bien como poner la exntensión, el import, etc.. Entonces mi módulo se llamaba sólo coche, y el import me fallaba. Ahora sí, le he puesto su extensión correspondiente, y en el main, lo he puesto como import coche. Madre mía, era una tontería, pero como nunca lo he hecho, así me iba xDD Ya de paso, he logrado comprender realmente la diferencia entre el from - import, y el import, porque he visto que en tu código, el constructor lo usas así: mercedez = coche.Coche(0, 'Mercedez Benz', 15)
Efectivamente, así me funciona, pero haciendólo de esta otra forma, también me funciona: #main.py ...... from coche import * ...... c = Coche('bmw', 0, 50)
Ahí es donde realmente he entendido lo que había leido antes. Un saludo y muchas gracias por la ayuda.
17
« en: Miércoles 22 de Abril de 2009, 17:54 »
Lo acabo de probar como has dicho, pero sigue sin funcionarme. También he pensado en probar en vez de import coche, ponerle un from coche import *. No pensaba que fuera a funcionar, pero por si las moscas.
Lo que no me gustaría es tener que tocar el PATH de la máquina, porque el programa lo voy a tener que estar llevano siempre encima en el pendrive, y si voy a tener que hacerlo así, cada vez que vaya a usar un ordenador de la universidad voy a tener que hacerlo (y puede que no tenga los permisos necesarios, no estoy seguro).
No se si será muy importante o no, pero se me había olvidado dar un par de detalles para aclararlo más. El archivo donde he escrito mi clase se llama coche, con minúscula, y la clase es Coche, con la mayúscula. También, en el archivo coche, he escrito la línea !/usr/bin/env python. Lo he probado con la línea y sin la línea, y siempre me da el mismo error:
ImportError: No module named coche
Quizá por ahí esté el fallo, no??
18
« en: Miércoles 22 de Abril de 2009, 17:20 »
Buenas. Estoy intentando familiarizarme lo más rápido posible con Python para hacer unas prácitcas de criptografía.
La verdad es que me está costando menos de lo que esperaba (será que tampoco estoy buscando cosas muy rebuscadas por ahora), pero aún así me he quedado atascado con el tema de las clases.
Me he creado una clase muy simple que se llama Coche, con sus atributos "velocidad", "nombre" y "temperatura" (por poner algo) y algunos métodos como "acelera" y "frena" para ver que todo encaja.
Mientras lo tenía todo en el mismo script, todo lo que he ido probando me ha funcionado bien. Sin embargo, ha sido intentar separarlo en dos archivos, y ya no consigo que funcione de ninguna forma. Y lo único que he encontrado han sido cosas sobre las librería de python, la diferencia entre el FROM - IMPORT, el IMPORT, y el X=__import__(), y algunas cosas un tanto raras que no he entendido.
Espero que me sepais indicar cómo se hace esto. Si no me equivoco, sería una especie de import "coche.py" en el programa principal, que le he llamado main.py, pero no sé exactamente con qué sintaxis, o de qué forma se consigue esto.
Gracias de antemano. Un saludo.
19
« en: Sábado 31 de Enero de 2009, 10:40 »
No estoy muy seguro, porque hace ya tiempo que no uso expresiones como esas en el scanf, pero creo que te sobra una "s". El código que has puesto es el siguiente: sscanf(ptr,"%[^=]s=%s",Var,Value);
Y yo diriía que debería ir así: sscanf(ptr,"%[^=]=%s",Var,Value);
Porque al usar los [], no hace falta indicar que va a ser una cadena, y el sscanf espera que haya una S, y como no la hay, no sigue leyendo más carácteres. Que yo recuerde era así. Espero que te sirva de ayuda. Un saludo.
20
« en: Viernes 23 de Enero de 2009, 12:32 »
Hombre... es que siempre he tenido la estructura por un las, y luego el tipo de dato por otro. Por eso me ha extrañado que en el código declarase el "struct racional", y luego las variables las declarase como racional. Te pongo un ejemplo de cómo lo hago yo, para que entiendas por qué he preguntado eso: struct animal_rep { unsigned int n_patas; unsigned int n_ojos; char nombre[20]; };
Eso sería la estructura, la representación por así decirlo, y luego lo que hago es declarar mi tipo de dato, que va a tener esa estructura: typedef struct animal_rep Tanimal;
Y para declarar una bariable, sería de las dos formas siguientes: Tanimal a1; struct animal_rep a2;
Como siempre lo he hecho así, pues me ha llamado la atención que en el código de meana, se saltase el struct.
21
« en: Viernes 23 de Enero de 2009, 12:22 »
es el tipico ejercicio de maquina de turing.
si son de tamaño distinto no son iguales.
por cada elemento del array 1 , buscalo en el aray 2 , y si coincide, borra el elemento del array 2 y continua. al final, encontraras, o bien un elemento que no esta en el array 2 (distintos) o bien acabaras el array1 (iguales).
Pero quizá no le interesa borrar los elementos del vector, no? Para eso, mejor copiarlo en otro array temporal donde sí podria ir borrando. Y ya puestos, si ese array temporal está ordenado.... sería más rápido buscar los elementos. Voy a escribir mi propuesta en pseudocodigo: FUNCION vectores_iguales(int v1[tam1], int v2[tam2]) : ENTERO int v_aux[tam1] int i int elem int encontrado=1 SI (tam1 != tam2) DEVOLVER 0 PARA i=0 HASTA tam-1 elem = v2[i] insercionBinaria(v_aux, elem) FINPARA //ya tenemos v_aux ordenado i = 0 MIENTRAS i<tam-1 Y encontrado encontrado = busquedaBinaria(v_aux, v1[i]) i = i+1 FINMIENTRAS DEVOLVER encontrado FIN_FUNCION
Sé que se podría hacer de otras muchas maneras, y que quizá me he complicado un poco la vida... pero para vectores muy grandes, sí podría ser eficiente.
22
« en: Viernes 23 de Enero de 2009, 11:54 »
Acabo de ver una cosa curiosa en ese código. Y quizá sea que siempre he programado en C, y no en C++, pero... "racional", veo que es una estructura, no un tipo de dato. A la hora de declarar "r1", "r2" y "r3", no tendría que ser con struct racional r1, r2, r3; ? O bien, declarar el tipo de dato con lo siguiente: typedef struct{ int numerador; int denominador; } racional;
Estoy en lo correcto, o eso cambia de C a C++??
Páginas: [1]
|
|
|