|
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.
Temas - edurne
Páginas: [1]
1
« en: Martes 7 de Junio de 2005, 09:27 »
Hola a todos!
He vuelto a mis andadas con python después de una temporadita haciendo un programa sencillo en php y html... el problema es que mi programa tiene que calcular algunos valores estadísticos y es muy lento. Me gustaría saber si hay alguna forma de comunicar php con python, mandarle los parámetros necesarios, y que sea python quien calcule esos valores para después visualizarlos en la página que he hecho con php.
Otra cosita... para calcular estadísticas y cosas de estas... he leído que se usa el stats.py, pero realmente no entiendo qué tiene que ver:
strip_dirs () add (filename[, ...] sort_stats (key[, ...] etc, etc, etc....
yo solo quiero calcular una varianza a partir de unos datos de mi base de datoss!!! (conexión a la cual, he hecho antes de querer llamar a python para que calcule, sino antes, con el php).
Gracias a todos por vuestro tiempo, un saludo, Edurne.
2
« en: Lunes 30 de Mayo de 2005, 12:27 »
Hola a todos, he creado una paginilla web mediante php, html y css. Al final, el fin de la página es visualizar una gráfica que se crea mediante la salida estándar . Esta gráfica puede aparecer directamente en pantalla :
header("Content-type: image/png"); $name = tempnam("/tmp","SMTUPLOT"); $out = fopen($name,"w"); fputs($out, $plotstr); fclose($out); passthru("gnuplot ".$name); unlink($name);
o en un documento pdf:
header("Content-type: application/pdf"); $pargnuplot = tempnam("/tmp","SMTUPLOT"); $ps = tempnam("/tmp","PS_"); $out = fopen($pargnuplot,"w"); fputs($out, "set output \"".$ps."\"\n"); fputs($out, $plotstr); fclose($out); exec("gnuplot ".$pargnuplot); unlink($pargnuplot); passthru("ps2pdf ".$ps." -"); unlink($ps);
El problema me surge, porque quiero visualizar la gráfica y un cuadro de texto que contenga algunos datos que podrian ser de interés a la hora de analizar dicha imagen. Me han dicho que se hace con multipart, pero no tengo ni idea de cómo hacerlo y por la red no encuentro información clara, ni sobre lo que creo que estoy buscando.
Muchas gracias por vuestra ayuda! Saludos, Edurne.
3
« en: Jueves 26 de Mayo de 2005, 12:05 »
Hola a todos!!! durante un tiempo estuve muy centrada con mi compañera intentando determinar exactamente qué queríamos que hiciera nuestro proyecto. Después de eso y de mucho marear a los profesores...creemos que lo tnemos claro, pero nuestro programa en C es tan grande que es imposible verificarlo entero, así que por fin vamos a comprar el hardware y a verificar por partes, para así tener más claro como actuar con los registros (que nos parece un poco locura).
Alguno de vosotros tiene información precisa de cómo se guardan los datos de un reloj de tiempo real en la memoria?? de cómo se tratan esos datos para por ejemplo restar dos fechas (para llevar un contaje de tiempo) o para visualizarlo en una lcd???
Os estaría muy agradecida. Esta misma noche pongo lo que vamos consiguiendo por si a alguien le puede ayudar, y por supuesto por si vosotros me podeis ayudar.
Saludos desde España de una alumna un poco desesperada ya con esto!! jeje.
4
« en: Jueves 26 de Mayo de 2005, 09:07 »
Hola a todos:
Estoy trabajando en un proyecto y quiero visualizar unas gráficas previamente generadas con gnuplot. La gráfica la creo correctamente y en la página doy dos opciones: verla en la pantalla, o verla mediante un pdf por si el usuario quiere imprimirla, guardarla o lo que sea. Fijo un tamaño amplio de la imagen para que se vea bien. Si sale en pantalla no hay problemas, pero a la hora de generar el documento pdf a un tamaño grande también, solo se ve una parte de la gráfica, las barras de desplazamiento no me dejan moverme para verla totalmente, de hecho, si disminuyo el tamaño veo el trozo que veía antes en grande solamente. ¿Alguien puede ayudarme con mi problema? El código que utilizo para esto es:
if ($vista == "documento") { header("Content-type: application/pdf"); $pargnuplot = tempnam("/tmp","SMTUPLOT"); $ps = tempnam("/tmp","PS_"); $out = fopen($pargnuplot,"w"); fputs($out, "set output \"".$ps."\"\n"); fputs($out, $plotstr); fclose($out); exec("gnuplot ".$pargnuplot); unlink($pargnuplot); passthru("ps2pdf ".$ps." -"); unlink($ps); } else { header("Content-type: image/png"); $name = tempnam("/tmp","SMTUPLOT"); $out = fopen($name,"w"); fputs($out, $plotstr); fclose($out); passthru("gnuplot ".$name); unlink($name); } ?>
Saludos y gracias por vuestra ayuda
5
« en: Viernes 15 de Abril de 2005, 12:04 »
Hola!!! por favor... estoy desesperada, ahora sí que no puedo avanzar... tengo que hacer un fichero con una serie de fechas y datos... hasta ahí no hay problema. El problema es que después quiero representarlo con el gnuplot, y la fecha debe ser un número. Por eso tengo que pasarla a epoch. El problema es que de donde saco la fecha, sólo me da año-mes-dia y hora-minuto-segundo. Y por lo que he visto por ahí.... me harían falta también el día de la semana, el día del año que es y alguna cosilla más.
Cómo puedo calcular esos segundos sin los datos que me faltan??? alguien conoce alguna forma???
Muchas gracias!!
6
« en: Jueves 14 de Abril de 2005, 12:40 »
Hola, alguien sabe cómo recorrer una base de datos y crear un fichero solo con los elementos que me interesen?? es para después crear una gráfica con esos datos. Gracias si alguien puede ayudarme!!
7
« en: Martes 12 de Abril de 2005, 12:18 »
Si alguien sabe cómo relacionar estos programas.... se lo agradecería. Mi intención es: desde python, acceder o abrir el programa gnuplot y poder pasarle una serie de variables, que éste capte y mediante ellas que dibuje las gráficas pertinentes. Sabéis si hay mucho problema en hacerlo?? Mil gracias.
8
« en: Lunes 11 de Abril de 2005, 13:08 »
Hola a todos! parece que el foro ha comenzado con aceptación y con preguntas fuertes!! espero que también haya gente como yo que plantee dudas y respuestas más sencillas. Ánimo a todos con sus proyectos! Saludos, Edurne.
9
« en: Viernes 8 de Abril de 2005, 10:57 »
Hola a todos otra vez!! Como no domino ni el ensamblador ni el lenguaje C, de momento lo perfecto para mí sería combinar los dos. Si programo en CCS sé que puedo combianarlo, pero no sé si puedo hacer lo mismo programando en ensamblador. Supongo que no, pero agradecería que me respondiérais.
En caso de hacerlo en CCS, podría hacer la mayor parte del programa en ensamblador?? qué tendría que declarar como primeras líneas de código?? el problema es, que en este lenguaje los cambios de banco se hacen automáticamente, y en ensamblador hay que hacerlo manualmente, me equivoco? entonces.... tengo que definir los registros como si fuera a tratarlos en CCS y luego en las líneas de código ensamblador tratarllos como si no los hubiera declarado antes?
Ayuda por favor.f Muchas gracias por adelantado por vuestro tiempo. Un saludo. Edurne!
10
« en: Miércoles 6 de Abril de 2005, 12:28 »
Hola a todos!! Hace tiempo que no puedo escribiros, pero ahora ya tengo algo más claras las cosas. Me voy enterando del funcionamiento del pic, y lo que es mejor, empiezo a entender poco a poco esas laaaaaaaaaaaargas hojas de características!! Solo me ha surgido una duda. Un profesor me ha comentado que si programo el pic con el lenguaje CCS (programación en C orientada a los pic, verdad??) que necesito dos programas para poder compilar adecuadamente. Me ha parecido entenderle que por las pruebas que ha hecho él, uno no funciona sin el otro, puede ser??? tampoco me hagan mucho caso, porque no le entendí demasiado bien. Me pueden resolver la duda? Muchas gracias una vez más!!! Saludos. Edurne.
11
« en: Viernes 1 de Abril de 2005, 10:31 »
Hola de nuevo. Volví a perfeccionar mi servidor, y todo marcha bien, salvo un error que no entiendo. El programa funciona correctamente, si meto los datos correctos, almacena lo que deseo, si meto datos incorrectos, intenta comprobarlos 5 veces hasta que finalmente me da el mensaje de fallo. Sin embargo, haga lo que haga, siempre sale en la pantalla del servidor el siguiente mensaje:
Traceback (most recent call last): File "./servidorcompleto.py", line 250, in ? server = SocketServer.TCPServer(('khaos',port), BaseRequestHandler) File "/usr/lib/python2.1/SocketServer.py", line 329, in __init__ self.server_bind() File "/usr/lib/python2.1/SocketServer.py", line 340, in server_bind self.socket.bind(self.server_address) socket.error: (98, 'Address already in use')
Éste es mi servidor:
#!/usr/bin/python
from pyPgSQL import PgSQL import SocketServer import sys, os, string from syslog import * import md5 import whrandom import time
def conectar_db(): global cnx try: #syslog(LOG_DEBUG,'\nConectando a la base de datos...') cnx = PgSQL.connect(user ='kemdb', host ='khaos', database ='smtu') syslog(LOG_DEBUG,'\nConectado a la base de datos, comprobando datos recibidos...') except PgSQL.Error: sys.exit(1)
def crear_configuracion(): conf = '%c%c%c%c%c' %(3,5,0x23,0xc2,5) return conf
def crear_challenge(): id = whrandom.randint(0,255) syslog(LOG_INFO,'id_cliente:'+str(id)) a = whrandom.randint(0, 255) syslog(LOG_INFO, 'challenge_value=a:'+str(a)) challenge_value = '%c%c%c%c%c%c' % (whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255)) len_cha = len(challenge_value) value_size =1 name = 'mrpfd' len_name = len(name) length =11+len_name lengthb = length >> 8 challenge = '%c%c%c%c%c' % (1,id,length,lengthb,len_cha) challenge += challenge_value+name return challenge #print 'identidad:', challenge[1:2] #print 'challenge_value:', challenge[5:11]
def analizar_nombre_response(cursor, response, error_com): global nombre nombre = response[21:] #print 'nombre recibido de la respuesta: ', nombre query="select * from idip where nombre='" + nombre + "'" syslog(LOG_DEBUG,query) try: cursor.execute(query) except PgSQL.Error: error_com =1 syslog(LOG_ERR,'error al buscar usuario en base de datos') #sys.exit() dat = cursor.fetchall() #syslog(LOG_DEBUG,'\nLocalizando datos...') n = 0 for elemento in dat: n = n+1 if n >= 2: duplicado = 1 error_com = 0 datos = 'duplicado' return (duplicado, datos, error_com) elif n == 0: duplicado = 0 error_com = 0 datos = '' return (duplicado, datos, error_com) else: duplicado = 0 error_com = 0 dato= dat[0] datos = dato[0] return (duplicado, datos, error_com)
def localizar_nombre_db(datos): if datos == '': syslog(LOG_ERR,'\nNo se encuentra en la base de datos ') encontrado = 0 return encontrado else: syslog(LOG_DEBUG,'\nLocalizado en la base de datos') encontrado = 1 return encontrado
def buscar_contrasena(datos, cursor, error_com): query = "select password from idip where nombre='" + datos + "'" #syslog(LOG_DEBUG,query) try: cursor.execute(query) except PgSQL.Error: #sys.exit() syslog(LOG_ERR,'\nError al buscar la contrasea') error_comunicacion = 1 contr = cursor.fetchall() #print contr contras = contr[0] return (contras[0], error_com)
def comprobar_encriptamientos(response, password): response_value = response[5:21] cadena = challenge[1]+password+challenge[5:11] #print 'cadena a la que voy a aplicar yo el md5 formada por id+passw de la db+challengevalue: ', cadena value = md5.new(challenge[1]+password+challenge[5:11]).digest() hexvalue = md5.new() hexvalue.update(challenge[1]+password+challenge[5:11]) imprimir = hexvalue.hexdigest() syslog(LOG_INFO,imprimir) if value == response_value: exito = 1 syslog(LOG_DEBUG,'\nSuccess') else: exito = 0 syslog(LOG_DEBUG,'\nFailure') return exito
def funcion_success(response): success = '%c' % (3)+ response[1]+ '%c%c' % (0x18, 0x00)+ 'success' #print success return success
def funcion_failure(response): failure = '%c' % (4)+ response[1]+ '%c%c' % (0x1b, 0x00) + 'failure' #print failure return failure
def almacenar_ip_date_validez(self, cursor, nombre, password, error_com): dirip = string.split(self.client_address[0], '.') ip = string.atoi(dirip[0]) ip <<= 8 ip |= string.atoi(dirip[1]) ip <<= 8 ip |= string.atoi(dirip[2]) ip <<= 8 ip |= string.atoi(dirip[3]) syslog(LOG_INFO, 'ip en su valor verdadero es: %x' %ip) strip = str(ip) strvalidez = str(1) query ="update idip set ip ='" + strip + "'where nombre='" + nombre + "'and password='" + password + "'" #syslog(LOG_DEBUG, query) error = 0 try: cursor.execute(query) except PgSQL.Error: syslog(LOG_ERR,'\nError al actualizar ip') #sys.exit() error_com = 1 query = "update idip set date ='" + time.asctime() + "'where nombre='" + nombre + "'and password='" + password + "'" #syslog(LOG_DEBUG, query) error = 0 try: cursor.execute(query) except PgSQL.Error: syslog(LOG_ERR, '\nError al actualizar la fecha') #sys.exit() error_com =1 query = "update idip set validez ='" + strvalidez + "'where nombre='" + nombre + "'and password='" + password + "'" #syslog(LOG_DEBUG, query) try: cursor.execute(query) except PgSQL.Error: syslog(LOG_ERR, '\nError al actualizar la validez') #sys.exit() error_com = 1 query = "select * from idip where nombre='" + nombre + "' and password ='" + password + "'" #syslog(LOG_DEBUG, query) error = 0 try: cursor.execute(query) except PgSQL.Error: syslog(LOG_ERR, '\nError al visualizar los datos') #sys.exit() error_com =1 datos = cursor.fetchall() syslog(LOG_INFO, '\nLos datos introducidos son: '+str(datos)) return error_com
def desconectar (cursor, cnx): cursor.close() cnx.commit() cnx.close() syslog(LOG_DEBUG, '\nDesconectado de la DB')
def chap_simple(self): global cursor global response global challenge global conf conf = crear_configuracion() self.request.send(conf) challenge = crear_challenge() self.request.send(challenge) response = self.request.recv(1024) cursor = cnx.cursor() error_comunicacion = 0 cuenta_errores = 1 while cuenta_errores !=0 and cuenta_errores <6: duplicado, datos, error_comunicacion = analizar_nombre_response(cursor, response, error_comunicacion) #print 'datos, o nombre a buscar en la db:', datos #print 'error de comunicacin antes de ver duplicado:', error_comunicacion if error_comunicacion == 0: if duplicado == 1: syslog(LOG_ERR, '\nSe ha encotrado a ms de un usuario con el mismo nombre.') #self.request.send('\nError') error_comunicacion = 1 cuenta_errores = cuenta_errores +1 else: encontrado = localizar_nombre_db(datos) if encontrado ==1: password, error_comunicacion = buscar_contrasena(datos, cursor, error_comunicacion) if error_comunicacion == 0: if password == []: syslog(LOG_ERR, '\nHa habido algn error al tomar el password') error_comunicacion = 1 cuenta_errores = cuenta_errores +1 else: exito = comprobar_encriptamientos(response, password) if exito ==1: success = funcion_success(response) self.request.send(success) error_comunicacion = almacenar_ip_date_validez(self, cursor, nombre, password, error_comunicacion) syslog(LOG_DEBUG, ' actualizando ip, fecha y validez...') if error_comunicacion == 0: cuenta_errores = 0 else: cuenta_errores = cuenta_errores +1 else: cuenta_errores = cuenta_errores +1 else: cuenta_errores = cuenta_errores +1 else: cuenta_errores = cuenta_errores + 1 #self.request.send('\nError, no localizado en la base de datos') else: cuenta_errores = cuenta_errores +1 print "cuenta_err = ",cuenta_errores,"\n" if cuenta_errores == 6 or cuenta_errores == 0: failure = funcion_failure(response) self.request.send(failure) desconectar(cursor, cnx) else: pass
class BaseRequestHandler(SocketServer.BaseRequestHandler): def handle(self): conectar_db() chap_simple (self) #if cuenta_errores == 0: break while 1: puerto = sys.argv[1] port = int(puerto) #print "argv[1]=",puerto,"\n" server = SocketServer.TCPServer(('',port), BaseRequestHandler) #server.BaseRequestHandler #server.handle_request() server.serve_forever()
y éste es mi cliente:
#!/usr/bin/python from pyPgSQL import PgSQL import SocketServer import sys, os, string import md5 import whrandom import socket def comprobar_nombre_contrasena(so, cuenta_errores): while cuenta_errores !=0 and cuenta_errores <6: nombre = raw_input('Usuario:') contrasena = raw_input('Contrasea:') if len(nombre)>20 or len(contrasena)>20 or nombre == '' or contrasena == '': cuenta_errores = cuenta_errores + 1 else: for letra in nombre: error_nombre = 0 if letra in string.uppercase or letra in string.digits: pass else: error_nombre = error_nombre +1 for nuevaletra in contrasena: error_contrasena = 0 if nuevaletra in string.uppercase or nuevaletra in string.digits: pass else: error_contrasena = error_contrasena +1 if error_nombre == 0 and error_contrasena == 0 : cuenta_errores = 0 else: cuenta_errores = cuenta_errores +1 return (cuenta_errores, nombre, contrasena) def crear_response(so, contrasena, nombre, challenge): response_length=21+len(nombre) response_lengthb=response_length>>8 if response_length > 65535: #print '\nError' so.close() else: id = challenge[1] #print 'id recibida del challenge: ', challenge[1:2] cadena=challenge[1]+contrasena+challenge[5:11] #print 'cadena para hacer en md5 de la respuesta formada por: id+contrasea+challengevalue: ', cadena value=md5.new(challenge[1]+contrasena+challenge[5:11]).digest() hexvalue=md5.new() hexvalue.update(challenge[1]+contrasena+challenge[5:11]) imprimir = hexvalue.hexdigest() response = '%c%c%c%c%c' %(2, id, response_length, response_lengthb, 16) + value + nombre return response puerto = raw_input('Puerto:') port = int(puerto) so = socket.socket(socket.AF_INET, socket.SOCK_STREAM) so.connect (('', port)) configuration = so.recv(2048) challenge = so.recv(2048) cuenta_errores = 1 error = 1 cuenta_errores, nombre, contrasena = comprobar_nombre_contrasena(so, cuenta_errores) if cuenta_errores == 0: response = crear_response(so, contrasena, nombre, challenge) #print 'response mandada formada por: code+id+long+valuesize+value+name: ', response so.send(response) resultado = so.recv(1024) code = ord(resultado[0]) if code == 3: print 'success' elif code == 4: print 'failure' else: print 'fallo al recibir estado' so.close()
Si alguien me puede ayudar me sería muy útil. Gracias!! Saludos, Edurne
12
« en: Viernes 18 de Marzo de 2005, 09:35 »
Hola!! me gustaría que me dijérais dónde puedo encontrar información o ejemplos de aplicación de la librería libglade. Estoy muy perdida, en glade ya he hecho mi pequeña interfaz, sencilla, y con algunas dudas a la hora de asignar señales a los botones, pero más o menos entiendo. El problema es a la hora de pasar a python y completarlo, porque solo puedo usar la librería libglade y no tengo ni idea de por dónde cogerlo. Me podéis ayudar?? Gracias!!! Edurne.
13
« en: Lunes 7 de Marzo de 2005, 11:03 »
Hola a todos! después de hacer mi servidor y después de mucho marear la perdiz, ha llegado el momento de implementar un interfaz de usuario sencillo. Creo que voy a hacerlo con gtk, el problema es que no sé dónde puedo encontrar todas las instrucciones o documentación completa para empezar con ello. De momento estoy echando un vistazo a algunos ejemplos.
Si alguien puede ayudarme, se lo agradecería mucho! Saludos.
14
« en: Viernes 4 de Marzo de 2005, 09:49 »
Hola a todos!!! finalmente, después de analizar nuestro proyecto y plantearnos usar un pic 16f877, vimos que las patillas se nos quedaban muy cortas. Intentamos incluso multiplexando varias entradas y salidas... pero se nos ocurrió algo mucho más sencillo.
Con uno de los pic vamos a controlar la lcd, el teclado matricial y la temperatura exterior e interior de la casa(y vamos a visualizarlo constantemente). Y en función de en qué estado se encuentre (lectura de un código introducido por el teclado), una patilla configurada como salida del primer pic, se configurará como entrada del otro. De esta manera, para controlar el resto de las funciones que queremos automatizar en la casa...se simplifica mucho.
Mi compañera y yo hemos pensado que como los pic hacen labores independientes, aunque sí que se comunican, pero no escrupulosamente, no será necesario que estén sincronizados. Creemos que simplemente los programas que grabemos en cada pic van a ser independientes aunque a la salida, antes de la etapa de potencia, usemos puertas lógicas para relacionar salidas de un pic y del otro, no???
Al final, la pregunta es sencilla, más o menos leyendo lo que he intentado explicar lo más claro posible... estáis de acuerdo conmigo en que en este proyecto no es requisito imprescindible en que los dos pic vayan sincronizados??? y en caso de sí ser necesario... alguien puede decirme cómo hacerlo??
Gracias a todos por vuestro tiempo y vuestra ayuda!!!
15
« en: Lunes 28 de Febrero de 2005, 09:19 »
Holaaa!! ya conseguí hacer mi servidor como deseaba. He utilizado el protocolo md5 y aunque sé que no se pueden transformar los mensajes de md5 para que sean entendibles (claramente ese es el fin del encriptamiento....) me gustaría visualizar la cadena de md5 en hexadecimal. Lo he intentado con infinidad de instrucciones, pero no tengo claro si al transformar una cadena a md5, lo que resulta es otro string, porque parece que las instrucciones para un string no valen en este caso. Esto es lo que tengo:
value=md5.new(challenge[1:2]+contrasena+challenge[5:11]).digest() print 'value resultado de aplicar el md5 a la response:', value for c in range (0,len(value)-1): print '%02X' % int(value[c])
pero me da el siguiente error:
value resultado de aplicar el md5 a la response: `¤ÞDãÕxÊò×þþ!M Traceback (most recent call last): File "<stdin>", line 1, in ? File "cliente.py", line 64, in ? crear_response() File "cliente.py", line 53, in crear_response print '%02X' % int(value[c]) ValueError: invalid literal for int():
Y si en lugar de eso, pongo simplemente:
value=md5.new(challenge[1:2]+contrasena+challenge[5:11]).digest() print 'value resultado de aplicar el md5 a la response:', value string.atoi(value, 2)
el error es el siguiente: value resultado de aplicar el md5 a la response: `¨ëjanyÂÔ4#t~¸·9 Traceback (most recent call last): File "<stdin>", line 1, in ? File "cliente.py", line 63, in ? crear_response() File "cliente.py", line 52, in crear_response string.atoi(value, 2) File "/usr/lib/python2.1/string.py", line 214, in atoi return _int(s, base) ValueError: invalid literal for int(): `¨ëjanyÂÔ4#t~¸·9
Si alguien me puede ayudar se lo agradecería, qué tipo de resultado da el md5.new('').digest()?? cómo puedo cambiarlo a hexadecimal si es que se puede para visualizar esos caracteres de forma legible??
16
« en: Jueves 24 de Febrero de 2005, 16:04 »
Hola a todos!!! Lo primero de todo, presentarme, soy Edurne, y creo que nos vamos a ver mucho por aquí a partir de ahora!! Estoy empezando mi proyecto fin de carrera y tengo que utilizar un pic. Aún no tengo claro si utilizaré el 16f873 o el 16f877, porque estamos simplificando las cosas todavía... Vamos a tener que controlar unas cuantas cosillas con el pic, y leyendo vuestras discusiones parece que hasta puede llegar a ser divertido programarlos, pero no las tengo todas conmigo. Sí, sé lo que es un Pic, y sé que vale para infinidad de cosas, pero pocos conocimientos más. Hemos decidido mi compañera y yo que vamos a programarlo en C, ya que en ensamblador nos parece una locura todavía mayor. Allá van algunas preguntas, a ver si alguno de vosotros me puede ayudar! Lo primero.... tengo las hojas de características de mi pic (218 páginas!!!! jejeje) y la verdad, es que no tengo nada claro por dónde cogerlo. Ya sabemos más o menos qué es lo que queremos que haga nuestro diseño, y más o menos tenemos también el diagrama de flujos bastante claro. Pero es hora de ponerse a programar y no sabemos por dónde. Tenemos conocimiéntos muy básicos de programación en C, y hemos bajado también el manual en castellano de programación de pic en C (CPPS puede ser?? ahora mismo no lo tengo a mano). El caso es que veo que hablais de módulos, y un montón de cosas. La idea que yo tenía era de: inicializar variables, habilitar registros, declarar funciones, y un void main. Pero eso de los módulos... cómo funciona?? os referís a las aplicaciones específicas de los pic... como convertidores, entradas analógicas, timers.....??? Aquí es donde me pierdo un poco. Siguiendo los consejos que habeis dado aquí algunos de vosotros, vamos a utilizar un DS1307 para visualizar calendario y reloj... espero que seamos capaces. Pero veo que se utiliza por el puerto serie I2C...una pregunta que me viene a la cabeza es.... el cristal que se pone a este integrado es el mismo que se le pone al pic??? Y básicamente es esto... os agradecería si me pudiérais introducir un poco en vuestro mundo, el cuál me gusta... pero asusta también. Siento si os he aburrido mucho, pero era necesario haceros esta introducción, a partir de ahora prometo ser más breve!!!! Muchísimas gracias a todos!!!! Edurne.
17
« en: Jueves 24 de Febrero de 2005, 11:11 »
Hola a todos!!! soy nueva en este foro, y en la programación en general. Esto manejando el lenguaje Python, pero hay poca gente que colabora en sus foros. Tengo un problemilla y me consta que en C se maneja muy parecido si no es exactamente igual. Mi problema es que quiero hacer una cadena que ocupe un número determinado de bytes, para lo que la almaceno mediante char, el problema es que a la hora de representar por ejemplo el int 5420, lógicamente no puedo hacerlo con un solo caracter. Pero no sé cómo hacerlo!!! esto es lo que tengo puesto:
challenge_value='%c%c%c%c%c%c' % (whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255),whrandom.randint(0, 255)) name ='servidor' length=11+len_name lengthb = length >> 16 challenge='%c%c%c%c%c%' %(1,id,length,lengthb,len(challenge_value))+challenge_value+name
lo que quiero es: primero crear un número aleatorio que puede tener hasta 6 cifras como entero, así que pongo seis char y asigno a cada uno un número aleatorio. Hasta aquí perfecto. El nombre es fijo, siempre 'servidor' con lo cual, al ser ya una cadena, no me da problemas. Pero la madre del cordero llega con la longitud. En este caso es fija porque name es un valor fijo, como acabo de decir, pero en mi programa 'name' puede variar, con lo cual la longitud puede variar, y tiene que ocupar 2 bytes como máximo. Este código no funciona, me dice al ejecutarlo, que a %c solo puedo asignarle int y char, y eso ya lo sé, pero no encuentro el fallo!!!
Os agradecería mucho si pudiérais ayudarme, estoy atascada y no puedo continuar.
Gracias otra vez!!!
18
« en: Jueves 17 de Febrero de 2005, 11:38 »
Hola a todos, ya quedó atrás mi necesidad de la instrucción de las mayúsculas, ya que no era imprescindible para que funcionara mi servidor. Sería interesante, pero no absolutamente necesario. Ahora estoy encriptando el programilla con CHAP y ésto me ha llevado a manejar md5. La verdad es que estoy bastante perdida, y con las librerías de la página de python no me aclaro demasiado. También he conseguido unas hojas de explicación del protocolo CHAP pero no termina de aclararme bien cómo funcionan estas cosas. Sí, soy lo más novato del mundo mundial, pero poco a poco voy tirandillo, jejeje. Si alguien conoce algún manual o algo que explique md5 para tontos.... se lo agradecería eternamente.
Muchas gracias a todos. Edurne.
19
« en: Miércoles 16 de Febrero de 2005, 09:17 »
Hola a todos! ya conseguí hacer mi servidor. Me costó, pero finalmente...lo hice. Ahora ando con algo parecido, pero más sencillo. Me ha surgido una duda, no encuentro por ningún sitio la instrucción que me interesaría. Os comento;
tengo que capturar un nombre, o contraseña o lo que sea, vamos, una cadena de caracteres, y quiero que solo sean letras mayúsculas de la a A a la Z o números, y no sé cómo ponerlo. Conocéis alguna instrucción que sea algo así?: for caracter in nombre_introducido: if caracter in (una lista o algo así de caracteres prohibidos): print 'error' else: ... ...
o algo así: for caracter in nombre_introducido: if caracter != (.....):
Lo que me gustaría saber es eso, cómo indicar que si el carácter es distinto a mayúsculas o números, que me dé mensaje de error. Había pensado en hacerlo comparando el caracter introducido con el mismo convertido a mayúscula, para que si coinciden esté bien y si no mal, pero resulta que caracteres como el guión bajo, comillas, etc.... son iguales en mayúsculas que minúsculas, por lo que ya no me vale.
Os agradecería mucho que me respondiérais y me diérais alguna pista.
20
« en: Jueves 3 de Febrero de 2005, 10:26 »
Esto es una locura para mi!!! sigo atascada haciendo el servidor. Soy la novata por excelencia!!! estoy probando con distintos códigos, intentando hacer cosillas, pero es imposible. Ande meto la instrucción Thread(gropu=None, target=None, name=None, args=(), kwargs={})????? qué hago con el target??? Los manuales no me dicen nada, estoy empezando a odiar esto!!!! Esto es lo que tengo: import SocketServer import thread import threading class BaseRequestHandler(SocketServer.BaseRequestHandler): def handle(self): print 'la direccion del cliente es:', self.client_address print 'el servidor al que se ha conectado es:', self.server print self.request fichero=open('servidor.txt', 'w') self.request.send('ehlo\n') fichero.write('ehlo\n') b=self.request.recv(128) fichero.write( fichero.close() print'el contenido de la conversaci�n con el servidor es:' fichero=open('servidor.txt', 'r') for line in fichero.readlines(): print line fichero.close() class Threading(threading.Thread): def __init__(self): threading.Thread.__init__(self) def run(self): print 'el nombre del thread1 es:', thread1.getName() print 'el nombre del thread2 es:', thread2.getName() print 'el nombre del thread3 es:', thread3.getName() print 'el nombre del thread4 es:', thread4.getName() print 'threading active count:', threading.activeCount() print "the thread1's daemon flag is:", thread1.isDaemon() print "the thread2's daemon flag is:", thread2.isDaemon() print "the thread3's daemon flag is:", thread3.isDaemon() print "the thread4's daemon flag is:", thread4.isDaemon() print 'el thread1 esta:1 vivo, 0 muerto -->', thread1.isAlive() print 'el thread2 esta:1 vivo, 0 muerto -->', thread2.isAlive() print 'el thread3 esta:1 vivo, 0 muerto -->', thread3.isAlive() print 'el thread4 esta:1 vivo, 0 muerto -->', thread4.isAlive() while 1: thread1=Threading() thread2=Threading() thread3=Threading() thread4=Threading() thread1.start() thread2.start() thread3.start() thread4.start() thread1.join() thread2.join() thread3.join() thread4.join() server=SocketServer.TCPServer(('',2222), BaseRequestHandler) server.serve_forever() y esto es lo que sale nada más importar el módulo: el nombre del thread1 es: Thread-15 el nombre del thread2 es: Thread-16 el nombre del thread3 es: Thread-17 el nombre del thread4 es: Thread-18 threading active count: 5 the thread1's daemon flag is: 0 the thread2's daemon flag is: 0 the thread3's daemon flag is: 0 the thread4's daemon flag is: 0 el thread1 esta:1 vivo, 0 muerto --> 1 el thread2 esta:1 vivo, 0 muerto --> 1 el thread3 esta:1 vivo, 0 muerto --> 1 el thread4 esta:1 vivo, 0 muerto --> 1 el nombre del thread1 es: Thread-15 el nombre del thread2 es: Thread-16 el nombre del thread3 es: Thread-17 el nombre del thread4 es: Thread-18 threading active count: 4 the thread1's daemon flag is: 0 the thread2's daemon flag is: 0 the thread3's daemon flag is: 0 the thread4's daemon flag is: 0 el thread1 esta:1 vivo, 0 muerto --> 0 el thread2 esta:1 vivo, 0 muerto --> 1 el thread3 esta:1 vivo, 0 muerto --> 1 el thread4 esta:1 vivo, 0 muerto --> 1 el nombre del thread1 es: Thread-15 el nombre del thread2 es: Thread-16 el nombre del thread3 es: Thread-17 el nombre del thread4 es: Thread-18 threading active count: 3 the thread1's daemon flag is: 0 the thread2's daemon flag is: 0 the thread3's daemon flag is: 0 the thread4's daemon flag is: 0 el thread1 esta:1 vivo, 0 muerto --> 0 el thread2 esta:1 vivo, 0 muerto --> 0 el thread3 esta:1 vivo, 0 muerto --> 1 el thread4 esta:1 vivo, 0 muerto --> 1 el nombre del thread1 es: Thread-15 el nombre del thread2 es: Thread-16 el nombre del thread3 es: Thread-17 el nombre del thread4 es: Thread-18 threading active count: 2 the thread1's daemon flag is: 0 the thread2's daemon flag is: 0 the thread3's daemon flag is: 0 the thread4's daemon flag is: 0 el thread1 esta:1 vivo, 0 muerto --> 0 el thread2 esta:1 vivo, 0 muerto --> 0 el thread3 esta:1 vivo, 0 muerto --> 0 el thread4 esta:1 vivo, 0 muerto --> 1 y luego, cuando me conecto al supuesto servidor, solo me sale esto: la direccion del cliente es: ('127.0.0.1', 39561) el servidor al que se ha conectado es: <SocketServer.TCPServer instance at 0x81155ac> <socket object, fd=15, family=2, type=1, protocol=0> el contenido de la conversación con el servidor es: ehlo ehlo y yo lo que quiero es: que pueda conectarme de varios sitios a la vez. Se supone que para eso se usan los threads, no???? Voy a mandar este lenguaje y la informática en general a la..........Qué horror! Una ayudita, por favor.... Mil gracias, Edurne.
21
« en: Viernes 28 de Enero de 2005, 09:33 »
Hola a todos! aunque os pueda parecer mentira... parece que voy consiguiendo algo con el servidor. Ya se conecta, pero ahora el problema es que quiero que acepte varias conexiones a la vez. Sí, se que se hace con el threading, pero tampoco encuentro ningún sitio donde lo expliquen bien, soy yo o no hay manuales tan claros para principiantes como yo??? Mi duda es sencilla: en un manual creí entender que para crear un hilo se utiliza: thread(group=None, target=None, name=None, args=(), kwargs={}) y que luego se utilizan el run, start, y el resto de instrucciones. Pero es que en otro manual, me pareció entender que esa línea de código se utiliza para definir la clase!! y me perdí. Al final, buscando ejemplos como una loca encontré un par de cosillas, pero sigo sin saber dónde poner esa linea de código. También me pareció entender que target tiene que tener el nombre de aquella acción que quiero que se ejecute, esto es asi? tengo que definir primero la acción en algún sitio y luego nombrarla en el target, o directamente se redefine run y ahí es donde describo las acciones que quiero que haga?? Muchas gracias por vuestra atención al menos!! Un saludo desde Bilbao. Adjunto el código que tengo escrito por el momento. Está mal seguro porque no me imprime en pantalla nada de los threads, así que.... seguiré probando cosillas hasta que esto funcione.
22
« en: Viernes 28 de Enero de 2005, 09:32 »
Hola a todos! aunque os pueda parecer mentira... parece que voy consiguiendo algo con el servidor. Ya se conecta, pero ahora el problema es que quiero que acepte varias conexiones a la vez. Sí, se que se hace con el threading, pero tampoco encuentro ningún sitio donde lo expliquen bien, soy yo o no hay manuales tan claros para principiantes como yo??? Mi duda es sencilla: en un manual creí entender que para crear un hilo se utiliza: thread(group=None, target=None, name=None, args=(), kwargs={}) y que luego se utilizan el run, start, y el resto de instrucciones. Pero es que en otro manual, me pareció entender que esa línea de código se utiliza para definir la clase!! y me perdí. Al final, buscando ejemplos como una loca encontré un par de cosillas, pero sigo sin saber dónde poner esa linea de código. También me pareció entender que target tiene que tener el nombre de aquella acción que quiero que se ejecute, esto es asi? tengo que definir primero la acción en algún sitio y luego nombrarla en el target, o directamente se redefine run y ahí es donde describo las acciones que quiero que haga?? Muchas gracias por vuestra atención al menos!! Un saludo desde Bilbao. Adjunto el código que tengo escrito por el momento. Está mal seguro porque no me imprime en pantalla nada de los threads, así que.... seguiré probando cosillas hasta que esto funcione.
23
« en: Lunes 24 de Enero de 2005, 10:41 »
Cómo interpreto los mensajes de error de python2.0?? qué quieren decir estos mensajes, que tengo que definir en mi programa todo esto?
Si yo hago un servidor así:
from socket import * >>> so=socket(AF_INET, SOCK_STREAM) >>> so.bind(('', 1051)) >>> so.listen(5) >>> cliente, direccion=so.accept()
entonces, se queda esperando una conexión. Sin embargo, para hacer lo mismo con SocketServer he puesto:
import SocketServer class BaseRequestHandler: def handle(self): self.request() cliente=self.client_address print self.server serv=SocketServer.TCPServer(('', 1055), BaseRequestHandler) serv.serve_forever() print cliente cliente.send('ehlo edurne') cliente.recv(128)
Sé que estará mal, pero es que no entiendo cómo usar las clases. La cuestión es que al conectarme como cliente me sale el siguiente mensaje y me gustaría interpretarlo por mi misma. Podriais darme alguna pista?
Exception happened during processing of request from ('127.0.0.1', 32899) Traceback (most recent call last): File "/usr/lib/python2.1/SocketServer.py", line 221, in handle_request self.process_request(request, client_address) File "/usr/lib/python2.1/SocketServer.py", line 240, in process_request self.finish_request(request, client_address) File "/usr/lib/python2.1/SocketServer.py", line 253, in finish_request self.RequestHandlerClass(request, client_address, self) TypeError: this constructor takes no arguments
Muchas gracias.
24
« en: Lunes 24 de Enero de 2005, 10:19 »
Muchas gracias por la respuesta. El problema es que ya estoy intentando manejar los manuales pero no me aclaran mucho las cosas. Sé que puedo hacer un servidor super sencillo, escuchar como quien dice, con las instrucciones socket.bind, socket.listen y socket.accept, pero cuando veo ejemplos usan las instrucciones de SocketServer y las clases, y no termino de entender por qué las usan de esa manera o por qué las definen como lo hacen. Sé que son para aceptar, por ejemplo, varias peticiones a la vez, pero no encuentro en ningún manual las especificaciones de cada instrucción y me estoy volviendo loca. Si alguien sabe por favor dónde puedo encontrar información detallada de las clases, o ejemplos explicados, os lo agradecería etername. Muchas gracias. Edurne.
25
« en: Jueves 20 de Enero de 2005, 15:54 »
Hola, soy nueva en python, de hecho, soy nueva en la programación en general, pero tengo que logar hacer un servidor con este lenguaje. Sé que las instrucciones son las de socket y SocketServer, pero no entiendo muy bien cómo, cuáles y para qué utilizar cada una de ellas, o dónde encontrar un manual que lo explique claramente. Os agradecería mucho si pudiérais explicarme a groso modo cuál es la diferencia entre BaseRequest, MyRequest.... y cómo se utilizan. ¿Por qué no puedo hacer un servidor simplemente con socket.bind, socket.listen y socket.accept? (solo aplicado a TCP).Como véis, yo sí que soy novatas, y de las de verdad!!!muchas gracias por todo.
Páginas: [1]
|
|
|