Re: [Python-es] Chatear con una maquina!

2012-08-15 Por tema Diego Uribe Gamez
Ok yo entiendo y ya lo mire, Gracias, Se que es fuerte pero quiero mantener
y adaptar la estructura de eventos en python.

El 15 de agosto de 2012 16:48, Alvaro Manrique
escribió:

> Buenas Tardes;
>
>Perdón si mi respuesta es off-topic pero si te interesa trabajar con
> javascript y manejar paquetes json para una especie de chat, creo que debes
> darle un vistazo a node.js, se que es una nueva tecnología pero estuve
> viendo el manejo de sockets y con unas pocas líneas de código se implementa
> lo que tu quieres.
> El 15/08/2012 16:43, "Diego Uribe Gamez" 
> escribió:
>
>   Disculpen que no me hice entender, voy a hablar a nivel de código y
>> me voy a enfocar en el proyecto que mencione al principio, la razón de
>> hacerlo de esta manera que la forma en la que funciona y el problema como
>> la solución para mi proyecto esta en usar jason y Gevent, porque las
>> consultas van a ser muchas y este sistema de combinado hace que la pagina
>> chatee con la maquina sin gastar muchos recursos.
>>
>> Mi problema es en acondicionar este proyecto a la idea como tal de
>> chatear con una maquina, me gusta es que tengo mucho del código a la mano y
>> la idea es adaptarme.
>>
>> El código actual:
>> ---
>> # Datos para la conexion al Socket y la IP que escucharemos
>> host = '190.145.XXX.XXX'
>> port = 33XX
>> buf = 102400
>> addr = (host, port)
>> # Creamos el Socket - (INTERNET,UDP)
>> UDPSock = socket(AF_INET,SOCK_DGRAM)
>> UDPSock.bind(addr)
>> # Bucle infinito (PROBLEMA)
>> while 1:
>> # recibir data
>> data,addr = UDPSock.recvfrom(buf)
>> ---
>> Nota: Resulta que yo estoy usando este código para capturar
>> la información que me envían a mi ip y puerto, el problema es que estoy
>> usando un bucle infinito para hacerlo y creo que esta mal, adicional
>> necesitaba que apenas llegara algun dato poder mostrarselo al usuario en la
>> pantalla, pensando en una solución me encontré con este proyecto y su demo
>> que es un chat(en python, gevent, jason y javascript), donde para mi una
>> solución es poder chatear con la maquina o mejor dicho es que apenas la
>> maquina se comunique la idea es que el usuario pueda ver la información en
>> tiempo real en la pagina web sin necesidad de recargar la pagina.
>>
>> En el código a continuación yo entiendo muchas cosas pero no estoy seguro
>> de como adaptar mi código actual a la solución del problema.
>>
>> message_new() este se encarga de crear nuevos mensajes para los
>> navegadores usando create_message y lo retorna con un json_response
>>
>> message_updates() dice que si no hay un mensaje en cache o que si el
>> mensaje del navegador(cursor) es igual al ultimo mensaje toca esperar a un
>> nuevo mensaje self.new_message_event.wait() para luego actualizar
>>
>> Código del Chat:
>> ---
>> import uuid
>> import simplejson
>> from django.shortcuts import render_to_response
>> from django.template.loader import render_to_string
>> from django.http import HttpResponse
>> from gevent.event import Event
>> import settings
>>
>>
>> class ChatRoom(object):
>> cache_size = 200
>>
>> def __init__(self):
>> self.cache = []
>> self.new_message_event = Event()
>>
>> def main(self, request):
>> if self.cache:
>> request.session['cursor'] = self.cache[-1]['id']
>> return render_to_response('index.html', {'MEDIA_URL':
>> settings.MEDIA_URL, 'messages': self.cache})
>>
>> def message_new(self, request):
>> name = request.META.get('REMOTE_ADDR') or 'Anonymous'
>> forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
>> if forwarded_for and name == '127.0.0.1':
>> name = forwarded_for
>> msg = create_message(name, request.POST['body'])
>> self.cache.append(msg)
>> if len(self.cache) > self.cache_size:
>> self.cache = self.cache[-self.cache_size:]
>> self.new_message_event.set()
>> self.new_message_event.clear()
>>  return json_response(msg)
>>
>> def message_updates(self, request):
>> cursor = request.session.get('cursor')
>> if not self.cache or cursor == self.cache[-1]['id']:
>> self.new_message_event.wait()
>> assert cursor != self.cache[-1]['id'], cursor
>> try:
>> for index, m in enumerate(self.cache):
>> if m['id'] == cursor:
>> return json_response({'messages': self.cache[index +
>> 1:]})
>> return json_response({'messages': self.cache})
>> finally:
>> if self.cache:
>> request.session['cursor'] = self.cache[-1]['id']
>> else:
>> request.session.pop('cursor', None)
>>
>> room = ChatRoom()
>> main = room.main
>> message_new = room.message_new
>> mes

Re: [Python-es] Chatear con una maquina!

2012-08-15 Por tema Alvaro Manrique
Buenas Tardes;

   Perdón si mi respuesta es off-topic pero si te interesa trabajar con
javascript y manejar paquetes json para una especie de chat, creo que debes
darle un vistazo a node.js, se que es una nueva tecnología pero estuve
viendo el manejo de sockets y con unas pocas líneas de código se implementa
lo que tu quieres.
El 15/08/2012 16:43, "Diego Uribe Gamez" 
escribió:

>  Disculpen que no me hice entender, voy a hablar a nivel de código y
> me voy a enfocar en el proyecto que mencione al principio, la razón de
> hacerlo de esta manera que la forma en la que funciona y el problema como
> la solución para mi proyecto esta en usar jason y Gevent, porque las
> consultas van a ser muchas y este sistema de combinado hace que la pagina
> chatee con la maquina sin gastar muchos recursos.
>
> Mi problema es en acondicionar este proyecto a la idea como tal de chatear
> con una maquina, me gusta es que tengo mucho del código a la mano y la idea
> es adaptarme.
>
> El código actual:
> ---
> # Datos para la conexion al Socket y la IP que escucharemos
> host = '190.145.XXX.XXX'
> port = 33XX
> buf = 102400
> addr = (host, port)
> # Creamos el Socket - (INTERNET,UDP)
> UDPSock = socket(AF_INET,SOCK_DGRAM)
> UDPSock.bind(addr)
> # Bucle infinito (PROBLEMA)
> while 1:
> # recibir data
> data,addr = UDPSock.recvfrom(buf)
> ---
> Nota: Resulta que yo estoy usando este código para capturar
> la información que me envían a mi ip y puerto, el problema es que estoy
> usando un bucle infinito para hacerlo y creo que esta mal, adicional
> necesitaba que apenas llegara algun dato poder mostrarselo al usuario en la
> pantalla, pensando en una solución me encontré con este proyecto y su demo
> que es un chat(en python, gevent, jason y javascript), donde para mi una
> solución es poder chatear con la maquina o mejor dicho es que apenas la
> maquina se comunique la idea es que el usuario pueda ver la información en
> tiempo real en la pagina web sin necesidad de recargar la pagina.
>
> En el código a continuación yo entiendo muchas cosas pero no estoy seguro
> de como adaptar mi código actual a la solución del problema.
>
> message_new() este se encarga de crear nuevos mensajes para los
> navegadores usando create_message y lo retorna con un json_response
>
> message_updates() dice que si no hay un mensaje en cache o que si el
> mensaje del navegador(cursor) es igual al ultimo mensaje toca esperar a un
> nuevo mensaje self.new_message_event.wait() para luego actualizar
>
> Código del Chat:
> ---
> import uuid
> import simplejson
> from django.shortcuts import render_to_response
> from django.template.loader import render_to_string
> from django.http import HttpResponse
> from gevent.event import Event
> import settings
>
>
> class ChatRoom(object):
> cache_size = 200
>
> def __init__(self):
> self.cache = []
> self.new_message_event = Event()
>
> def main(self, request):
> if self.cache:
> request.session['cursor'] = self.cache[-1]['id']
> return render_to_response('index.html', {'MEDIA_URL':
> settings.MEDIA_URL, 'messages': self.cache})
>
> def message_new(self, request):
> name = request.META.get('REMOTE_ADDR') or 'Anonymous'
> forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
> if forwarded_for and name == '127.0.0.1':
> name = forwarded_for
> msg = create_message(name, request.POST['body'])
> self.cache.append(msg)
> if len(self.cache) > self.cache_size:
> self.cache = self.cache[-self.cache_size:]
> self.new_message_event.set()
> self.new_message_event.clear()
>  return json_response(msg)
>
> def message_updates(self, request):
> cursor = request.session.get('cursor')
> if not self.cache or cursor == self.cache[-1]['id']:
> self.new_message_event.wait()
> assert cursor != self.cache[-1]['id'], cursor
> try:
> for index, m in enumerate(self.cache):
> if m['id'] == cursor:
> return json_response({'messages': self.cache[index +
> 1:]})
> return json_response({'messages': self.cache})
> finally:
> if self.cache:
> request.session['cursor'] = self.cache[-1]['id']
> else:
> request.session.pop('cursor', None)
>
> room = ChatRoom()
> main = room.main
> message_new = room.message_new
> message_updates = room.message_updates
>
> def create_message(from_, body):
> data = {'id': str(uuid.uuid4()), 'from': from_, 'body': body}
> data['html'] = render_to_string('message.html', dictionary={'message':
> data})
> return data
>
> def json_response(value, **kwargs):
> kwargs.setde

Re: [Python-es] Chatear con una maquina!

2012-08-15 Por tema Diego Uribe Gamez
 Disculpen que no me hice entender, voy a hablar a nivel de código y me
voy a enfocar en el proyecto que mencione al principio, la razón de hacerlo
de esta manera que la forma en la que funciona y el problema como la
solución para mi proyecto esta en usar jason y Gevent, porque las consultas
van a ser muchas y este sistema de combinado hace que la pagina chatee con
la maquina sin gastar muchos recursos.

Mi problema es en acondicionar este proyecto a la idea como tal de chatear
con una maquina, me gusta es que tengo mucho del código a la mano y la idea
es adaptarme.

El código actual:
---
# Datos para la conexion al Socket y la IP que escucharemos
host = '190.145.XXX.XXX'
port = 33XX
buf = 102400
addr = (host, port)
# Creamos el Socket - (INTERNET,UDP)
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.bind(addr)
# Bucle infinito (PROBLEMA)
while 1:
# recibir data
data,addr = UDPSock.recvfrom(buf)
---
Nota: Resulta que yo estoy usando este código para capturar
la información que me envían a mi ip y puerto, el problema es que estoy
usando un bucle infinito para hacerlo y creo que esta mal, adicional
necesitaba que apenas llegara algun dato poder mostrarselo al usuario en la
pantalla, pensando en una solución me encontré con este proyecto y su demo
que es un chat(en python, gevent, jason y javascript), donde para mi una
solución es poder chatear con la maquina o mejor dicho es que apenas la
maquina se comunique la idea es que el usuario pueda ver la información en
tiempo real en la pagina web sin necesidad de recargar la pagina.

En el código a continuación yo entiendo muchas cosas pero no estoy seguro
de como adaptar mi código actual a la solución del problema.

message_new() este se encarga de crear nuevos mensajes para los navegadores
usando create_message y lo retorna con un json_response

message_updates() dice que si no hay un mensaje en cache o que si el
mensaje del navegador(cursor) es igual al ultimo mensaje toca esperar a un
nuevo mensaje self.new_message_event.wait() para luego actualizar

Código del Chat:
---
import uuid
import simplejson
from django.shortcuts import render_to_response
from django.template.loader import render_to_string
from django.http import HttpResponse
from gevent.event import Event
import settings


class ChatRoom(object):
cache_size = 200

def __init__(self):
self.cache = []
self.new_message_event = Event()

def main(self, request):
if self.cache:
request.session['cursor'] = self.cache[-1]['id']
return render_to_response('index.html', {'MEDIA_URL':
settings.MEDIA_URL, 'messages': self.cache})

def message_new(self, request):
name = request.META.get('REMOTE_ADDR') or 'Anonymous'
forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if forwarded_for and name == '127.0.0.1':
name = forwarded_for
msg = create_message(name, request.POST['body'])
self.cache.append(msg)
if len(self.cache) > self.cache_size:
self.cache = self.cache[-self.cache_size:]
self.new_message_event.set()
self.new_message_event.clear()
return json_response(msg)

def message_updates(self, request):
cursor = request.session.get('cursor')
if not self.cache or cursor == self.cache[-1]['id']:
self.new_message_event.wait()
assert cursor != self.cache[-1]['id'], cursor
try:
for index, m in enumerate(self.cache):
if m['id'] == cursor:
return json_response({'messages': self.cache[index +
1:]})
return json_response({'messages': self.cache})
finally:
if self.cache:
request.session['cursor'] = self.cache[-1]['id']
else:
request.session.pop('cursor', None)

room = ChatRoom()
main = room.main
message_new = room.message_new
message_updates = room.message_updates

def create_message(from_, body):
data = {'id': str(uuid.uuid4()), 'from': from_, 'body': body}
data['html'] = render_to_string('message.html', dictionary={'message':
data})
return data

def json_response(value, **kwargs):
kwargs.setdefault('content_type', 'text/javascript; charset=UTF-8')
return HttpResponse(simplejson.dumps(value), **kwargs)
---

Esto un poco por encima lo entiendo, lo que no sabría es como adaptar
mi código actual a message_new?

Espero haberme hecho entender y ver si pueden darme una idea.

Gracias.


El 14 de agosto de 2012 19:20, Olemis Lang  escribió:

> On 8/14/12, Alexandro Colorado  wrote:
> > Si hay sistemas sobre jabber donde puedes crear un chat de grupo estilo
> IRC
> > donde tus servidores se conecten al irse en line

Israel Alberto Roldan Vega te invitó a Dropbox

2012-08-15 Por tema Dropbox
Israel Alberto Roldan Vega quiere que pruebes Dropbox. Dropbox te permite 
llevar tus fotos, documentos y videos a cualquier lugar y compartirlos con 
facilidad.

Comienza aquí: 
http://www.dropbox.com/el/?r=/link/20.inOX0ZPXCh/NjI0NjQ2MzE2OTc%3Fsrc%3Dreferrals_bulk9%26eh%3D736e202&b=clk:None:14740949842197482288:549:462&z=AAArV0BjuEN6EpzLd3hBpWjmlixzpoH2zebqi7kuHuoMmQ

- El equipo de Dropbox

 
Para dejar de recibir invitaciones de Dropbox, por favor visita 
http://www.dropbox.com/bl/e6cd23308061/python-es%40python.org___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Chatear con una maquina!

2012-08-15 Por tema Olemis Lang
On 8/14/12, Alexandro Colorado  wrote:
> Si hay sistemas sobre jabber donde puedes crear un chat de grupo estilo IRC
> donde tus servidores se conecten al irse en linea y esten reportando cosas
> originadas de dbus o eventos de tu servidor web.
> Lo complicado seria la
> pre-programacion para que puedas responderles con comandos para reiniciar,
> depurar, o resumir procesos.
>
> Estos proyecgtos probablemente ya existen es solo de seguir buscando, el
> detalle es saber que realmente quieres lograr.
>

a ver a ver ... si están hablando d XMPP algo debería aparecer por aquí
http://xmpp.org/xmpp-protocols/xmpp-extensions/

> 2012/8/14 Diego Uribe Gamez 
>
>> Saludos, comunidad,
>>
>> Traigo este tema bastante interesante y es que quiero chatear con una
>> maquina,

d hecho , si somos más estrictos en realidad *SIEMPRE* las máquinas
están chateando entre ellas , lo q de vez en cuando nos dejan ver unos
byte-citos ... ;)

hay muchos ejemplos de bots implementados sobre XMPP . Está Google
guru , los ex-bots de Google Wave , ...

[...]

-- 
Regards,

Olemis.

Blog ES: http://simelo-es.blogspot.com/
Blog EN: http://simelo-en.blogspot.com/

Featured article:
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/