Re: [Python-es] Pasar un Script a Servicio Web

2023-11-20 Por tema Chema Cortes
Buenas,

Tal como sugiere *Lasizoillo*, una buena alternativa es usar ssh, pero sin
dejar de usar python. No me queda claro dónde se ejecuta el script python,
si en los clientes o en el servidor.

Si la idea es que los clientes puedan ejecutar tareas en servidores, una
buena combinación es usar *Invoke* y *Fabric*. Invoke para crear tareas
automatizadas basadas en línea de comandos y Fabric para distribuir estas
tareas en una red de servidores a través de SSH. Es una combinación muy
simple, más fácil de lo que parece.

   - Invoke: https://www.pyinvoke.org
   - Fabric: https://www.fabfile.org/

Siempre depende de lo que hagas, pero la ventaja de usar Invoke/Fabric es
que te facilita muchísimo el mantenimiento de estas tareas.

Sobre crear un interface gráfico para lanzar tareas de sistema, últimamente
veo más recomendable las TUIs (*Text User Interface*). Con una terminal
moderna puedes crearte interfaces bastante funcionales, incluso usables con
ratón.

En python tienes *Textual*: https://textual.textualize.io/, mucho más
sencillo que tener que meterte a programar una web.

Si más adelante necesitas que funcione como página web basta con ejecutar
el tui con *textual-web* (https://github.com/Textualize/textual-web).

Saludos.


El vie, 10 nov 2023 a las 3:31, lasizoillo ()
escribió:

> Buenas,
>
> Has pensado en usar ssh?
>
> Puedes crear un user que en vez de shell ejecute tu script para no dar
> acceso a la consola a los usuarios.
>
> Con las interacciones que necesitas te va a ser un dolor hacerlas en web
> si no has trabajado con ello antes. Es muy posible (hay alguna alternativa
> para evitarlo) que cada ciclo de ejecutar y preguntar cosas al usuario
> acabe convirtiéndose en una llamada diferente a un endpoint web al que le
> pases alguna forma de mantener estado que no quieras perder entre
> diferentes llamadas (un identificador de sessión en la que se guardan los
> datos en servidor o generar campos hidden desde la respuesta web anterior
> para evitar estado en el server reenviando datos o...).
>
> Si no tuvieras interacciones algo como hug sería una forma sencilla de
> tener un script cli y un servicio http compartiendo código
> https://www.hug.rest/. Teniendo interacciones, algo que es trivial en un
> script CLI no lo es tanto en un servicio web.
>
> Un abrazo,
>
> Javi
>
>
> El jue, 9 nov 2023 a las 12:22, Pixu Kideak ()
> escribió:
>
>> Buenos días,
>>
>> Tengo un script en Python3 que puedo ejecutarlo en una máquina GNU/Linux
>> sin problema desde consola; bueno realmente es una concatenación de
>> distintos scripts.
>>
>> Es un programa iterativo que a medida que se va ejecutando, pregunta al
>> operador por el valor de ciertas variables y éste las va metiendo; en
>> función del valor de esas variables el script realiza una cosa u otra.
>>
>> Me gustaría poder hacer funcionar este script en una red interna, que
>> desde cualquier máquina de la red, se pudiera llamar al script *(sin que
>> tenga que instalar en todos los equipos Python, sus dependencias y demás)*
>> .
>>
>> Entiendo que para ello debería de crear un Servicio Web y en la máquina
>> dónde tengo el script tener un Servidor Web; pero no tengo muy claro cómo
>> se podría hacer todo esto.
>>
>> ¿Alguien tiene experiencia en convertir un script a un Servicio Web?
>>
>> Otra posibilidad puede ser dockerizar el script, pero creo que es más
>> correcta la opción del Servicio Web.
>>
>> Un saludo y gracias.
>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] error al importar pot

2022-07-21 Por tema Chema Cortes
El mar, 19 jul 2022 a las 20:57, criss () escribió:

> Gracias, efectivamente el problema estaba en la codificación. Si alguien
> sabe como codificar en utf-8 directamente desde pygetext se lo agradecería.
>

¿Qué versión de python estás usando?

A partir de Python 3.5, pygettext autodetecta la codificación de los
ficheros de entrada para *escapar* los caracteres no-ascii. Pero puedes
usar el parámetro -E/--escape para forzar a que lo haga.


Saludos.

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] error al importar pot

2022-07-19 Por tema Chema Cortes
El dom, 17 jul 2022 a las 20:30, criss () escribió:

> Hola.
>
>
> generé un archivo pot con la herramienta pygetext, sin embargo cuando lo
> abro desde poedit para generar la compilación, me arroja dos errores
> uno que dice sucesión de multibytes incompleta y otro que dice sucesión
> de multibytes inválida, ¿qué significa esto?
>
>
Seguramente no tengas bien la cabecera *Content-Type* del fichero .pot. Por
defecto, poedit espera que el fichero esté codificado en ascii. Si hay
texto en UTF8, tienes que decírselo con una cabecera como ésta:

Content-Type: text/plain; charset=UTF-8\n

Edita el fichero .pot y corrige la cabecera. Desconozco modo alguno de
hacer que pygettext configure correctamente la cabecera.

Saludos.



>
> Saludos.
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] encriptar script

2022-04-26 Por tema Chema Cortes
El sáb, 23 abr 2022 a las 2:20, Juan carlos Rebate ()
escribió:

> buenas comunidad, necesito ayuda con un tema, necesito dos cosas:
> 1 portabilizar un script
> 2 encriptar un script.
> es decir necesito que el script se pueda compilar a binario para poder
> ejecutarlo independientemente de la versión que se tenga, al mismo
> tiempo al ser compilado se pueden tapar datos sensibles de api.
> he leido acerca de freeze pero no tiene una buena documentación en la
> wiki al menos no en mi caso, encuentro el script freeze.py, lo invoco
> dandole como parametro mi script python3 freeze.py miscript.py pero no
> hac nada.
> también lei sobre el módulo compileall pero no tiene sentido ya que
> eso compila a pyc y he visto que el 99 por cien de los descompiladores
> lo descompila, otro que lei es cython pero esta obsoleto, no se
> actualiza desde 2020 segun la web, lo unico que parece actual es
> py2exe pero en los foros donde lo descubri no lo recomiendan,
> recomiendan cython o freeze.
> alguien conoce otra forma? aviso no se c solo python por lo tanto no
> puedo usar c para integrar el interprete en un binario por mi cuenta
>
>
Échale un ojo a pyarmor:
https://github.com/dashingsoft/pyarmor

En la documentación te explica cómo usarlo para ofuscar el código,
empaquetar con pyinstaller o compilar con nuitka o cpython.:
https://pyarmor.readthedocs.io



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Dichoso GRPC en Python

2022-03-21 Por tema Chema Cortes
Hola a todos:

Sin conocer mucho de GPRC, parece que no estás usando precisamente la nueva
AsyncIO API del GRPC para que te funcione asyncio.

Revisa la documentación en
https://grpc.github.io/grpc/python/grpc_asyncio.html

Saludos.


El sáb, 19 mar 2022 a las 16:22, Miguel de Dios Matias (<
tres.14...@gmail.com>) escribió:

> Buenas.
>
> Me estoy haciendo unos POC en python sobre GRPC porque un compa del
> curro lo quiere meter.
>
> Y ya casi tengo (después de mucho sufrimiento...me da que no tiene
> muchs comunidad y esta medio abandonado GRPC salvo en Golang) todos
> los posibles formas de comunicación.
>
> Pero me queda la que el request sea un stream, bueno a medias, porque
> sincrona (que se quede clavado el client.py enviando mensajes si) pero
> asyncrona, naranjas de la china.
>
> Mi último intento fallido es:
>
> test.proto
> -
> syntax = "proto3";
>
> message Saludo {
>   string nombre = 1;
>   int32  segundo = 2;
> }
> message Respuesta {
>   string frase = 1;
>   int32 segundo = 2;
> }
> service Saluda {
>   // Sends a greeting
>   rpc buenosdias (stream Saludo) returns (stream Respuesta) {}
> }
> -
>
> client.py
> ---
> import grpc
> from concurrent import futures
>
> # Generate pb2 and bp2_grpc generated python files
> # python3 -m grpc_tools.protoc --proto_path=. --python_out=.
> --grpc_python_out=. ./*.proto
>
> import test_service_pb2_grpc
> import test_pb2
>
> from datetime import datetime
> from time import sleep
>
> import asyncio
> from uuid import uuid4
>
> class MyIterator:
> def __init__(self, start=0):
> self.num = start
>
> def __iter__(self):
> return self
>
> def __next__(self):
> sleep(2)
> nombre = uuid4()
> print(nombre)
> return test_pb2.Saludo(nombre=f'{nombre}',
> segundo=datetime.now().second)
>
>
> class AsyncIterator:
> def __aiter__(self):
> return self
>
> async def __anext__(self):
> await asyncio.sleep(2)
> nombre = uuid4()
> print(nombre)
> return test_pb2.Saludo(nombre=f'{nombre}',
> segundo=datetime.now().second)
>
>
> if __name__ == '__main__':
> print("TEST CLIENT GRPC")
>
> server_uri = 'localhost:50053'
> print(f"CONNECT TO: {server_uri}")
> with grpc.insecure_channel(server_uri) as channel:
> stub = test_service_pb2_grpc.SaludaStub(channel)
> # ~ saludo = test_pb2.Saludo(nombre=f'{uuid4()}',
> segundo=datetime.now().second)
> # ~ stream_connection = stub.buenosdias(iter((saludo,saludo)))
> stream_connection = stub.buenosdias(MyIterator())
> for response in stream_connection:
> response_dict = {k.name: getattr(response, k.name) for k
> in response.DESCRIPTOR.fields}
> print(f"CLIENTE RECEIVED: {response_dict}")
>
> --
>
> Con un iterador "sincrono" funciona pero se queda o llamando con un
> iterador de 1 elemento puest también y solo se clava 1 vez pero si
> meto:
> stream_connection = stub.buenosdias(AsyncIterator())
>
> Falla.
>
> Saludos.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] webbrowser no abre mi navegador por defecto

2022-01-11 Por tema Chema Cortes
El mié, 5 ene 2022 a las 15:46, criss () escribió:

> Tengo configurado en el sistema por defecto a firefox, sin embargo,
> cuando uso la instrucción webbrowser.open("dirección web"), la misma se
> abre en internet explorer (núnca lo uso). Entiendo que podría setear a
> webbrowser para que abra con firefox, pero me interesa que detecte bien
> el navegador por defecto de cada usuario para que abra con chrome,
> firefox, edge o el que tenga configurado cada uno.
>

¿Es posible que sea porque no incluyes el protocolo (https://) en la url?
Windows lanzará distintas aplicaciones por defecto según sea el protocolo
de la url. Si no se indica protocolo, siempre te lanza el explorer.

La forma que hay en windows para forzar que lance el navegador por defecto
sería:

webbrowser.get('windows-default').open(url)


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Necesito una pequeña ayuda sobre la librería yt-dlp

2021-11-24 Por tema Chema Cortes
El mar, 23 nov 2021 a las 16:27, Héctor J. Benítez Corredera (<
facturasxebo...@gmail.com>) escribió:

> Buenas desesperado de no encontrar una respuesta acudo a ustedes.
>
>
>
> Bien necesito extraer los comentarios de unos videos de Youtube y no me
> vale la API de Google ya que es para una aplicación y bueno prefiero no
> depender de dicha API.
>
>
>
> E estado buscando tanto en Github en las isos como por todo internet y no
> doy con la clave.
>
>
>
> Se que yt-dlp permite extraer los comentarios de un video pero por más que
> lo intento no lo consigo.
>
>
>
> Por lo que e estado leyendo usando la librería de manera aplicación así lo
> obtendría:
>
>
>
> yt-dlp --write-comments --extractor-args
> "youtube:comment_sort=top;max_comments=3;max_comment_depth=1"
> --skip-download
>
>
>
> Bien lo que me interesa es realmente usarlo desde Python pero no encuentro
> información por ninguna parte de como pasarle los parámetros para obtener
> los comentarios en la devolución del JSON.
>
>
>
> Bien el obtener los datos del video lo hago así:
>
>
>
> import yt_dlp as youtube_dl
>
> url = "https://www.youtube.com/watch?v=HqGykxomWIc;
>
> opciones = {'ignoreerrors': True, 'quiet': True, 'extract_flat':
> 'in_playlist', 'dump_single_json': True}
>
> with youtube_dl.YoutubeDL(opciones) as ydl:
>
> r = ydl.extract_info(url, download=False)
>
> print(r)
>
>
>
> Bien sé que con getcomments se obtienen pero por más que se lo pongo en
> opciones y valor True no me devuelve los comentarios en el json.
>
>
>
> Esta librería yt-dlp la verdad que todavía no la domino y sigo
> estudiándola pero estoy atrancado en esto y la verdad no encuentro
> información y su documentación pues la verdad en Github me parece un poco
> liosa más que cuando le doy en que se agrego la extracción de comentarios
> no me da nada de información.
>
>
>
> Este el repo:
>
>
>
> https://github.com/yt-dlp/yt-dlp
>
>
>
> En definitiva que trae muchas cosas que la original Youtube.-dl no traía y
> estoy más perdido…
>
>
>
> Muchas gracias a quien pueda echarme un poco de luz y a ser posible si
> pudieseis ponerme un pequeño código de extracción de comentarios quedaría
> agradecido.
>
>
>
> De nuevo y por adelantado mil gracias.
>
>
>
> Cordiales saludos
>
>
>
A veces, cuando no hay documentación, la documentación es el código.

En el fichero YoutubeDL.py están las opciones que puedes usar. Entre otras,
se ve que hay que usar la opción "getcomments" para extraer los
comentarios, y que se debe usar la opción "writeinfojson" si queremos que
se escriba a un fichero.

En tu código, obtienes la información de vídeo o vídeos, pero falta el
procesado posterior. Como no quieres descargar el vídeo, hay que usar la
opción "skip_download".

Todo junto:

import yt_dlp as youtube_dl


url = "https://www.youtube.com/watch?v=HqGykxomWIc;

opciones = {

'ignoreerrors': True,

'quiet': True,

'extract_flat': 'in_playlist',

'dump_single_json': True,

'getcomments': True,

'writeinfojson': True,

'skip_download': True,

}


with youtube_dl.YoutubeDL(opciones) as ydl:

r = ydl.extract_info(url, download=False)

ydl.process_info(r)



En realidad, ya habíamos indicado que no descargara el vídeo, por lo que se
podría haber hecho en un sólo paso:

with youtube_dl.YoutubeDL(opciones) as ydl:

ydl.extract_info(url)




-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] conversión de hora local a UTC

2021-11-23 Por tema Chema Cortes
El mar, 23 nov 2021 a las 9:14, Jose Caballero ()
escribió:

>
> Hola,
>
> La opción de Chema me da error. Es posible que no sirva para python 2.7
>
> >>> from dateutil import tz
> >>> dir(tz)
> ['EPOCHORDINAL', 'TZFILES', 'TZPATHS', 'ZERO', '__all__',
> '__author__', '__builtins__', '__doc__', '__file__', '__license__',
> '__name__', '__package__', '_ttinfo', '_tzicalvtz', '_tzicalvtzcomp',
> 'datetime', 'gettz', 'os', 'parser', 'relativedelta', 'rrule',
> 'struct', 'sys', 'time', 'tzfile', 'tzical', 'tzlocal', 'tzoffset',
> 'tzrange', 'tzstr', 'tzutc', 'tzwin', 'tzwinlocal']
>
>
No sé bien el error que te pueda dar, pero estaba comprobado con python 2.7
y no daba problemas.

En el listado que muestras están las funciones gettz y tzutc, que son las
que empleo en el código (tz.UTC is tz.tzutc()).

Es posible que dependa de cómo gestione el sistema operativo la zonas
horarias y que pytz lo tenga más en cuenta.




> La opción de Juan Carlos sí parece funcionar bien.
>
> Muchas gracias a ambos.
> Un saludo,
> Jose
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] conversión de hora local a UTC

2021-11-17 Por tema Chema Cortes
El mié, 17 nov 2021 a las 12:25, Juan Carlos Coruña ()
escribió:

> Una de las formas que se ocurre es esta:
>
> from datetime import datetime
>
> from dateutil.relativedelta import relativedelta
>
>
>
> import pytz
>
>
>
> # tomamos un datetime arbitrario
>
> now = datetime.now(tz=pytz.timezone('Europe/Madrid'))
>
>
>
> next_monday = now + relativedelta(weekday=0)
>
> next_monday = next_monday.replace(hour=12, minute=30, second=0,
> microsecond=0)
>
>
> next_monday.astimezone(tz=pytz.UTC)
>
> Pero hay más variantes.
>
>
Con dateutil no necesitas usar pytz:

from datetime import datetime
from dateutil.relativedelta import relativedelta
from dateutil import tz

# tomamos un datetime arbitrario
now = datetime.now(tz=tz.gettz('Europe/Madrid'))

next_monday = now + relativedelta(weekday=0)
next_monday = next_monday.replace(hour=12, minute=30, second=0,
microsecond=0)

next_monday.astimezone(tz=tz.UTC)




-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Ejecutar 2 notebooks con un script o app

2021-05-26 Por tema Chema Cortes
El jue, 20 may 2021 a las 15:32, Augusto Theaux ()
escribió:

> Muchas gracias por tomarse el tiempo para responderme, necesito hacer un "
> tablero " para que el usuario seleccione un botón y ahí se ejecute el
> script, esto es posible. Estuve buscando algún ejemplo, pero hasta ahora no
> encontre, habia pensado en Flask.
> Pido disculpas, recien estoy empezando con python,
>
>
¿Seguimos hablando de jupyter o de otra cosa?

jupyter notebook usa su propio servidor web, tornado, pero igual no es
adecuado para un entorno de producción. Con ipywidgets, puedes crear
notebooks interactivos de modo que ejecute el código que quieras al pulsar
un botón o con cualquiera de los elementos gráficos que te facilita:

https://medium.com/@jdchipox/how-to-interact-with-jupyter-33a98686f24e

Saludos.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Ejecutar 2 notebooks con un script o app

2021-05-19 Por tema Chema Cortes
El sáb, 15 may 2021 a las 20:46, Augusto Theaux ()
escribió:

> Buenas,
>
> Tengo 2 Jupyter notebooks con sus respectivas fuente de datos (.csv).
> Necesito hacer un script o aplicación web, para cargar cada archivo y
> ejecutar las notebooks.
> Alguien hizo esto alguna vez.
>

Los notebooks se pueden tratar igual que si fueran scripts de python. Con
jupytext  puedes sincronizar ficheros
notebooks, scripts de python y ficheros markdown para usar la versión que
mejor te venga en cada ocasión.

Por ejemplo: asocia estos dos notebooks a sus correspondientes scripts
python e importar estos scripts desde otro notebook o desde otro script
python.

Supongo que será suficiente para lo que pides.



>
> Muchas gracias
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Problemas con entornos Windows de 32 bits y 64 bits y elevar un CMD con privilegios de Administrador.

2021-05-09 Por tema Chema Cortes
Buenas,

A ver si lo entiendo: has instalado python 32 en un windows 64bits para
ejecutar NVDA, utilidad que usa librerías de 32 bits. No dices qué versión
de python, ni si tienes otras instalaciones de python (que podrían ser de
64 bits).

El fallo que comentas que te da python es cuando intentas ejecutar sfc
/scannow que, interpreto, no tiene relación alguna con NVDA. Por
 lo que veo, es muy común que falle esta utilidad de escaneo de archivos,
por lo que no se puede achacar ni a python ni a que sea de 32 bits.

Te recomiendo que primero intentes hacer funcionar sfc sin usar python.
Revisa este artículo:


https://mundowin.com/la-proteccion-de-recursos-de-windows-no-pudo-iniciar-el-servicio-de-reparacion/

También consulta esta referencia sobre cómo forzar el uso de python 32bits
o 64bits en windows:

  https://docs.python.org/3/whatsnew/3.7.html#windows-only-changes

Saludos.


El vie, 7 may 2021 a las 22:22, Héctor J. Benítez Corredera (<
facturasxebo...@gmail.com>) escribió:

> Buenas, me contesto por si a alguien le puede servir.
>
>
>
> Esto explica mejor que yo lo que quería hacer, realmente desactivar el
> redireccionamiento del sistema de archivos.
>
>
>
> Esta la fuente.
>
>
>
> https://code.activestate.com/recipes/578035-disable-file-system-redirector/
>
>
>
> Muchas gracias.
>
> El 07/05/2021 a las 2:07, Chema Cortes escribió:
>
>
> El jue, 6 may 2021 a las 20:18, Héctor J. Benítez Corredera (<
> facturasxebo...@gmail.com>) escribió:
>
>> winpath = os.path.join(os.environ['SystemRoot'], "SysNative", "cmd.exe")
>> # Esta es la que debería funcionar en 32 bits
>>
>> #winpath = os.path.join(os.environ['SystemRoot'], "system32", "cmd.exe")
>> Esta es la que funciona en 64 bits pero no en 32 bits
>>
>> #winpath = os.path.join(os.environ['SystemRoot'], "SysWOW64", "cmd.exe")
>> No funciona
>>
>>
>>
>> ejecutaAdmin(winpath, "/c" + "sfc /scannow" + "")
>>
>
>
> Esta parte la ejecuta python, que es de 64 bits. No necesita emular nada,
> por lo que siempre accede a "system32".
>
> Creo que estás confundido con el funcionamiento de las aplicaciones 32
> bits en win 64 bits. Todas las aplicaciones están programadas para acceder
> a system32, sean de 32 ó 64 bits. Es el sistema operativo quien deriva
> luego las aplicaciones de 32 bits a sysWOW64 de forma transparente.
> SysNative sería un truco para que las aplicaciones de 32 bits accedan a las
> DLLs de 64 bits que de verdad se encuentran en system32. Ni python ni
> cmd.exe se ejecutan en modo 32 bits; es NVDA la que entra en modo emulación
> 32 bits cuando es ejecutada por una CPU x64.
>
> Dicho esto, no entiendo qué problema tienes para ejecutar NVDA. A todos
> los efectos, se debería comportar como una aplicación de 64 bits normal
> ¿Da algún error o no funciona como se espera?
>
>
>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> https://blog.ch3m4.org
> Buscador Python Hispano: http://busca.ch3m4.org
> <https://blog.ch3m4.org/pages/busqueda-python-es/>
>
> ___
> Python-es mailing 
> listPython-es@python.orghttps://mail.python.org/mailman/listinfo/python-es
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Problemas con entornos Windows de 32 bits y 64 bits y elevar un CMD con privilegios de Administrador.

2021-05-06 Por tema Chema Cortes
El jue, 6 may 2021 a las 20:18, Héctor J. Benítez Corredera (<
facturasxebo...@gmail.com>) escribió:

> winpath = os.path.join(os.environ['SystemRoot'], "SysNative", "cmd.exe") #
> Esta es la que debería funcionar en 32 bits
>
> #winpath = os.path.join(os.environ['SystemRoot'], "system32", "cmd.exe")
> Esta es la que funciona en 64 bits pero no en 32 bits
>
> #winpath = os.path.join(os.environ['SystemRoot'], "SysWOW64", "cmd.exe")
> No funciona
>
>
>
> ejecutaAdmin(winpath, "/c" + "sfc /scannow" + "")
>
>

Esta parte la ejecuta python, que es de 64 bits. No necesita emular nada,
por lo que siempre accede a "system32".

Creo que estás confundido con el funcionamiento de las aplicaciones 32 bits
en win 64 bits. Todas las aplicaciones están programadas para acceder a
system32, sean de 32 ó 64 bits. Es el sistema operativo quien deriva luego
las aplicaciones de 32 bits a sysWOW64 de forma transparente. SysNative
sería un truco para que las aplicaciones de 32 bits accedan a las DLLs de
64 bits que de verdad se encuentran en system32. Ni python ni cmd.exe se
ejecutan en modo 32 bits; es NVDA la que entra en modo emulación 32 bits
cuando es ejecutada por una CPU x64.

Dicho esto, no entiendo qué problema tienes para ejecutar NVDA. A todos los
efectos, se debería comportar como una aplicación de 64 bits normal
¿Da algún error o no funciona como se espera?



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] "unfold" listas de nombres

2021-03-22 Por tema Chema Cortes
Supongo que lo que buscas es imitar la "*brace expansion*" (expansión de
llaves) que hace bash (lo de *unfold* lo dejaría más para tratamiento de
streams).

Si no vas a usar nada complicado, te lo puedes programar tú mismo usando
expresiones regulares. Si quieres algo hecho, mírate el módulo *braceexpand*
:

https://pypi.org/project/braceexpand/

Saludos.

El dom, 21 mar 2021 a las 10:56, Jose Caballero ()
escribió:

> Hola,
>
> perdón por un título tan poco descriptivo. Es parte de mi problema, no
> sé cómo explicarlo, y por tanto no se me ocurre cómo buscarlo en
> google. Seguro que alguien ya lo ha hecho antes, pero no acabo de
> encontrar las palabras claves (key words) para hacer una búsqueda
> eficiente en google :)
>
> Si alguien sabe de alguna web donde esté resuelto y me lo puede
> indicar, antes de que yo pierda el tiempo intentando hacerlo con una
> implementación mediocre, me ahorraría mucho tiempo.
>
> Necesito convertir una "string" como ésta:
>
> foo_{01,03,06}_bar
>
> en:
>
> foo_01_bar
> foo_03_bar
> foo_06_bar
>
> y una "string" como la siguiente:
>
> foo_{01..06}_bar
>
> en:
>
> foo_01_bar
> foo_02_bar
> foo_03_bar
> foo_04_bar
> foo_05_bar
> foo_06_bar
>
> Cualquier ayuda es más que bienvenida.
> Un saludo,
> Jose
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Integridad de pip

2021-02-08 Por tema Chema Cortes
El lun, 8 feb 2021 a las 9:16, Javier Morales de Lucas ()
escribió:

> Mi una duda sobre los módulos que se instala por pip es la siguiente,
> quisiera saber qué proceso que tiene para un módulo se  incluya en el
> repositorio. Me refiero quién o qué organismo revisa eso módulos y su
> integridad. Ya sé que el código de cada módulo es puede revisar pero existe
> alguna entidad que se encargue de este tipo de cuestiones. Soy un profano
> en la materia y puede que la pregunta sea absurda aún así.
> Gracias
>

Como se puede leer en la documentación de pypi.org: PyPi está gestionado
por el proyecto Warehouse, bajo el auspicio del grupo independiente
PyPA (*Python
Packaging Authority*), y con soporte del grupo de trabajo PackagingWG (*Python
Packaging Working Group*) de la PSF (*Python Software Foundation*).

El proyecto Warehouse tiene un sistema de avisos de seguridad que procesan
voluntarios de la PyPA. Recientemente, febrero de 2020, se añadió al
proyecto un sistema heurístico para la detección de *malware*.

Enlaces:

   - https://pypi.org/help/#maintainers
   - https://www.pypa.io
   - https://warehouse.readthedocs.io/
   - https://warehouse.readthedocs.io/security.html
   - https://warehouse.readthedocs.io/development/malware-checks.html

Para reportar problemas de seguridad:

   - https://pypi.org/security/


Saludos.



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] En busca del libro

2021-01-15 Por tema Chema Cortes
El vie, 15 ene 2021 a las 11:55, Javier Morales de Lucas ()
escribió:

> Llevo buscando un buen libro sobre Python hace semanas y estoy lleno de
> dudas el nivel medio alto. Bueno lo explico la mayoría de libros que han
> pasado por mis manos llevan mucha paja, otros son muy básico , aunque a
> veces y no siempre me sorprendo con líneas de código no siempre es así.
> Busco un libro lo más completo posible que se hable de una forma clara.
> Nivel medio alto
> ¿ Cuál me recomendáis ?
>
>
Te recomendaría "Pro Python 3: Features and Tools for Professional
Development" de J. Burton Browning & Marty Alchin, Ed. Apress (
https://doi.org/10.1007/978-1-4842-4385-5). Explica técnicas de
programación para ser más productivo y creativo, además de explicar la
filosofía detrás del lenguaje y de la comunidad python en general.

Como complemento: "Modern Python Standard Library Cookbook" de Alessandro
Molina (
https://www.packtpub.com/product/modern-python-standard-library-cookbook/9781788830829).
Es una referencia con bastantes ejemplos de los módulos de la librería
estándar, dedicando un capítulo por tema para hacer más fácil encontrar un
tema concreto.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Parcial Import ??

2021-01-06 Por tema Chema Cortes
El mié, 6 ene 2021 a las 17:02, Miguel Sanchez ()
escribió:

> Hola buenas (y felices Reyes):
>
>
> Tengo una classe con un montón de atributos y métodos.
>
> Esta clase es la clase "base" de otras.
>
> Las clases derivadas no necesitan algunos de los métodos o atributos de la
> clase base.
>
> El tema de los métodos lo he solucionado con mixin pues sólo son 4 métodos
> los afectados.
>
> El tema de los atributos no lo tengo tan claro. He visto varias soluciones
> (especialmente en SO), pero me he decido por una propia.
>
> He definido una propiedad sin métodos para los atributos que quiero
> "anular" en la clase derivada.
>
> La cosa queda más o menos así:
>
>
> class Base():
>
> def __init__(self, **kwargs):
> self.a = {}
> ...
>
>
> class A(Base):
>
> def __init__(self,  **kwargs):
> super().__init__(**kwrgs)
> ...
>
> a = property()
>
>
> Esto consigue (aparentemente) el efecto que busco y cuando se intenta usar
> el atributo "a" en una instancia de la clase "A" obtengo un error del tipo
> AttributeError unreadable attribute, lo que me vale.
>
> Entiendo que una instancia de "A" sigue teniendo realmente el atributo "a"
> aunque no lo pueda leer ni modificar.
>
> La pregunta es: ¿Esta forma de hacer las cosas me puede dar algún problema
> en el futuro (algo distinto de lanzar una exception AttributeError claro)?
> ¿Hay formas más pythónicas de hacer esto?
>
>
Lo pythónico sería no tener problemas con que sean visibles los atributos y
métodos de la clase padre (*Python es un lenguaje explícito*).

Los atributos que se inicializan en la clase padre te los puedes cagar sin
más en la hija:

class A(Base):
def __init__(self, **kwargs):
super().__init__(**kwargs)
del self.a

Otra cosa son los métodos, en realidad objetos del tipo *descriptor*
pertenecientes a la clase padre. No son parte de la instancia, por lo que
no puedes eliminarlos de esta ni de la subclase, únicamente puede conseguir
que produzca una excepción.

Se puede hacer de varios modos, pero la más sencilla es crear un método que
produzca la excepción:

class Base:
def method(self):
...

class A(Base):
def method(self):
raise NotImplementedError


Pensando en los motivos por los que no quieres ver atributos/métodos,
sospecho que puede ser porque trabajas con un IDE que te muestra demasiadas
opciones al autocompletar los atributos. Hoy en día hay algunas
herramientas que aplican AI a la selección de atributos, capaces de
priorizar las que cree que son más relevantes a tu modo de programar. Por
ejemplo: Kite 

Saludos.

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Un problema del futuro en el presente

2020-12-17 Por tema Chema Cortes
El jue, 17 dic 2020 a las 16:33, Miguel Sanchez ()
escribió:

> Hola:
>
>
> Estoy haciendo pruebas de unas classes que he creado, para ver como
> funcionan en concurrencia.
>
> Estoy usando concurrent.futures (python 3.9.1) y no tengo mucha
> experiencia (ninguna) con ese módulo.
>
> He encontrado algo que no entiendo:
>
>
> import concurrent.futures
> import time
>
> def espera():
> time.sleep(5)
> return 'fin'
>
>
> with concurrent.futures.ThreadPoolExecutor(max_workers=None) as executor:
> future_to_hazlo = {executor.submit(espera): 'la función espera'}
> for future in concurrent.futures.as_completed(future_to_hazlo):
> quien = future_to_hazlo[future]
> try:
> print(f'{quien} terminó con {future.result(3)}')
> except Exception as exc:
> print(f'{quien} ha generado una excepcion: {exc}')
> if future.done():
> del future._exception
>
>
> Esto no debería lanzar una excepción TimeoutError???
>
>
Los *futuros* se completan en el iterador .as_completed(), y es ahí donde
debería estar el timeout. Para cuando se ejecuta future.result(3) el futuro
ya está resuelto y de nada sirve añadir un timeout.

Saludos.





>
> Saludos y gracias por la ayuda
>
>
> Miguel
>
>
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Cotilleos

2020-12-17 Por tema Chema Cortes
El mié, 16 dic 2020 a las 12:51, Miguel Sanchez ()
escribió:

> Hola:
>
> En relación con el error de pip:
>
> This API has been temporarily disabled due to unmanageable load and will
> be deprecated in the near future. Please use the Simple or JSON API instead.
>
> Es un problema técnico o un sabotaje industrial???
>

En el error que da pip te lo dice:

xmlrpc.client.Fault: https://status.python.org/incidents/grk0k7sz6zkp

Por lo que parece, sólo afecta a las búsquedas, no  a la descarga e
instalación de paquetes.



>
> y por cierto... lo de  Simple or JSON API cómo se usa??
>
>
Saludos desde pip 20.3.1 ;)
>
>
Cuando falla el *endpoint* de XMLRPC, pip usaba https://pypi.org/simple/,
lo que suponía descargas enormes en json. Lo han debido quitar de las
últimas versiones de pip.

Supongo que puedes volver a una versión de pip anterior y esperar a que lo
arreglen.


PD: con 'poetry search' parece que funcionan las búsquedas.

Saludos.





> Miguel
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Lio con lista que contiene diccionarios

2020-08-13 Por tema Chema Cortes
El jue., 13 ago. 2020 a las 8:59, Victor Ramirez ()
escribió:

> Hola Javier,
>
> Una opción interesante podría ser crear una clase para esos datos y luego
> imprimir con el formato que quieras:
>
> class Banco:
> def __init__(self, element):
> self.nombre = element.get('nombre')
> self.isbn = element.get('ISBN')
> self.valor_raspado = element.get('valor_raspado')
> def __str__(self):
> return "{} - {}".format(self.nombre, self.isbn)
>
> lista_bancos = []
> for element in fondos_coleccion:
> banco = Banco(element)
> lista_bancos.append(banco)
> # Con el objeto banco podemos imprimir lo que queramos de forma
> sencilla
> print(banco)  # nos imprime el resultado de la función __str__
> print(banco.isbn)  # imprimimos solo los isbn
>
> Si es solo para tratar los datos esos y no tiene pensamiento de crecer,
> igual no tiene sentido, pero si vas a trabajar bastante con los datos y a
> futuro puede que crezca, esta opción podría ser interesante.
>
>
Una mejor alternativa sería usar *dataclasses:*







*@dataclassclass Coleccion:nombre: strisbn: strvalor: float*

*def __str__(self):return f"{self.nombre[:25]:25} -
{self.isbn}"*

coleccion = [Coleccion(*d.values()) for d in fondos_coleccion]
for col in coleccion:
print(col)
Resultado:

Bankinter Indice Japon, F - ES0114104039
BankinterTecnología R FI  - ES0114797030


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] [Consulta] Kivi, archivo .kv

2020-07-01 Por tema Chema Cortes
El mié., 24 jun. 2020 a las 1:09, Lemarchand Barker (<
lemarchand8...@gmail.com>) escribió:

> Hola, estoy viendo a ver si puedo amigarme con algún framework. Si bien
> uso algo básico de tkinter, estoy viendo kivy y tengo una duda que es
> sencilla.
> Tengo el código en .py y ahora siguiendo el tuto tuve que crear un archivo
> .kv, mi pregunta es sobre esto, el .kv; a grandes rasgos; sería como la
> hoja de estilo del html? Gracias
>
> Por lo que pone en la documentación, Kv es un lenguaje para *declarar *los
widgets que usa tu aplicación y enlazarlos con los *callbacks *definidos en
tu código python. Tiene pintas de SCSS, pero hace más cosas. Técnicamente,
es un DSL (*Domain-specific Language*) similar al lenguaje yaml con código
python empotrado.

Varios frameworks UI utilizan lenguajes declarativos que facilitan el
diseño visual y su desacople del resto del código. Lo normal es cargar
estos ficheros declarativos al arrancar la aplicación para crear los widgets*.
*De este modo, se puede modificar el diseño sin tocar el código de la
aplicación.


Saludos.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] IDEs que corran bloques de guión

2020-05-14 Por tema Chema Cortes
El jue., 14 may. 2020 a las 14:10, kikocorreoso vía Python-es (<
python-es@python.org>) escribió:

> ‐‐‐ Original Message ‐‐‐
> On Monday, 11 de May de 2020 18:44, Darío vía Python-es <
> python-es@python.org> wrote:
>
> Hola! ¿cómo están? tengo una consulta respecto a si conocen algún IDE en
> el que se pueda correr bloques del programa, tal como lo hace spyder.
> Pregunto porque habitualmente usaba spyder3 pero últimamente se está
> cerrando abruptamente o incluso no abre, además de que consume muchos
> recursos. Actualizé también a la versión 4 con anaconda pero enlentece
> demasiado a la pc que va para el decenio.
>
>
> Las últimas versiones están corrigiendo muchas cosas del rendimiento. La
> 4.1.2 creo que es la última y está yendo bastante bien y ha eliminado
> bastantes de los problemas anteriores.
>
> Ahora estoy usando geany (una maravilla, compila todo) y también eclipse
> pero no tienen esta opción verdaderamente util para python.
>
>
> VSCode te permite correr celdas:
> https://code.visualstudio.com/docs/python/jupyter-support-py#_jupyter-code-cells
> Una versión libre de la telemetría de MS: (https://vscodium.com/)
>

Otra opción con vscode es la extensión code-runner, capaz de ejecutar
bloques de código en varios lenguajes:
https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner



>
> En PyCharm tienes este plugin:
> https://plugins.jetbrains.com/plugin/7858-pycharm-cell-mode (pero si
> quieres algo ligero PyCharm no será tu amigo).
>
> JupyterLab/Jupyter notebook creo que también te permite algo parecido:
> https://jupyterlab.readthedocs.io/en/stable/user/code_console.html
> (puedes guardar el notebook como fichero py y tienes toda la interactividad
> de las celdas. Nuevamente, no creo que sea una opción ligera).
>
> Otras opciones son usar lo que estás usando, Geany/Notepad++/Vim/..., para
> editar código y tener una consola de IPython al lado para ir pegando código
> y ejecutándolo de forma interactiva. Esta última opción será la más ligera.
>
> Saludos.
>
>
> Saludos!
> Darío
> -
>
> Sent with ProtonMail  Secure Email.
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Tutorial online para colaborar en software libre

2020-05-06 Por tema Chema Cortes
El mar., 5 may. 2020 a las 11:33, Marc Garcia ()
escribió:

> Si, esta lista está moderada, y creo que el mensaje llegó después de que
> hicieramos el evento.
>
> En otro mensaje que supongo que todavía no ha llegado, he mandado el link
> a peertube donde hemos subido la sesión. Para la próxima vez intentaré
> mandar el mensaje de aviso con más días de antelación, para que llegue a
> tiempo. Disculpas.
>

Hola, Marc.
Siento el retraso en la moderación. No es una lista con mucha actividad,
así que los avisos de moderación pueden quedarse días en espera. Esta
espera ocurre normalmente con el primer correo que envías. Los siguientes
llegarán a la lista sin esperas.
Saludos.



>
> On Tue, May 5, 2020 at 10:14 AM sergi  wrote:
>
>> Hola marc, he recibido el correo el 3 de mayo¡?¡?, se va a repetir hay
>> esta el video grabado ?
>>
>>
>> saludos
>>
>> Missatge de Marc Garcia  del dia dg., 3 de maig
>> 2020 a les 10:53:
>>
>>> Por si alguien tiene interés en colaborar en proyectos de software
>>> libre, y no sabe por donde empezar, esta tarde/noche voy a estar dando un
>>> tutorial práctico online sobre el tema.
>>>
>>> El tutorial va a ser 100% práctico, y está pensado para que los
>>> participantes vayan siguiendo los pasos, y hagan las primeras
>>> contribuciones mientras se aprenden los conceptos.
>>>
>>> Va a ser a la 13h en Ciudad de México, 15h en Buenos Aires, 20h en
>>> Madrid...
>>>
>>> Más info:
>>> https://twitter.com/datapythonista/status/1254892940452921344?s=19
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>
>>
>> --
>> || Sergi ||
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Zen para un backend en alta disponibilidad y alta carga

2020-04-21 Por tema Chema Cortes
El mar., 21 abr. 2020 a las 12:53, J. Pablo Martín Cobos ()
escribió:

> Buenas,
>
> He escrito un pequeño manifiesto que me gustaría compartir con la
> comunidad.
>
> Espero que os guste yos entretenga en estos días de confinamiento.
>
> Si alguno está interesado en contribuir puede hacer un fork y un pull
> request.
>
> Español:
> https://goinnn.github.io/zen-of-high-load-and-high-availability-backend/index-es.html
> Inglés:
> https://goinnn.github.io/zen-of-high-load-and-high-availability-backend/index.html
> 
>
>
Interesante. Lo único que veo que hablas de tareas en primer y segundo
plano. No sé si te referies a la prioridad de tareas, con el servidor web
como tarea más prioritaria, o vas más por distinguir entre tareas síncronas
y asíncronas, ya que también hablas de activar *timeouts*.
Lo que no he visto nada sobre *resiliencia*. ¿Qué pasa cuando tienes
que *amputar
un brazo* para mantener la alta disponibilidad? ¿O qué pasa cuando se
empieza a rechazar peticiones por la alta demanda?
La *resilencia* es fundamental para un sistema de alta disponibilidad. Por
si te sirve de comparación, echa un vistazo al *Manifiesto de Sistemas
Reactivos*: https://www.reactivemanifesto.org/es



-- 

>
> Pablo Martín Cobos
> Ingeniero informático
> Desarrollador Python/Django
> 652 53 37 36
> goi...@gmail.com
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Reemplazando Jinja2 con f-strings

2019-07-18 Por tema Chema Cortes
El jue., 18 jul. 2019 a las 2:23, AGTUGO () escribió:

> La raz'on es eliminar esa dependencia porque nadie de mis colaboradores
> conoce Jinja2, y en este momento no cuentan con el tiempo para entenderlo.
> Pero bueno eso ya es otro tema. Pero s'i la mejor soluci'on sigue siendo
> Jinja
>

Respondiendo a la pregunta primera, las *f-strings* también se pueden crear
con triples comillas (eg: f"""void {saludo}{{std::cout << "{saludo}\n"}};"""
).

Pero con cuidado. En tu cadena tienes un caracter de fin de línea. Lo
recomendable es usar cadenas *raws* para evitar sorpresas:

rf"""void {saludo}{{std::cout << "{saludo}\n"}};"""

Las *f-strings* tienen sus limitaciones, que algo se mejorará con los
llamados *f-literals*. De todos modos, no se resuelven los problemas de
seguridad, inherentes al modo en que se formatean las strings.

Si realmente buscas un reemplazo de Jinja para impacientes, mírate los
*Templates[1]*. El código anterior se vería así:

from string import Template

code = Template("""void ${saludo}{std::cout <<
"${saludo}\n"};""").substitute(saludo="hola")

Dentro de lo simple que parece, como primer argumento del *.substitute* se
puede pasar un *mapping (aka diccionario)* que puedes programar como un
objeto cuyo método __getitem__ procese la sustitución como necesites.

Por ejemplo:

class Upper(dict):
 def __getitem__(self, s):
 return s.upper()

upper = Upper()
code = Template("""void ${main}{std::cout <<
"${saludo}\n"};""").substitute(upper)

Da como resultado:

void MAIN{std::cout << "SALUDO\n"};

Si aún así se queda corto, también se puede derivar la clase Template para
adaptarla mejor todavía. Por ejemplo, para cambiar delimitadores, cambiar
la expresión regular para detectar patrones a sustituir, etc.

Por ejemplo, para usar delimitadores '%% ... %%' y '%%[ ... ]%%':

class T(Template):
pattern = r"""
  %%(?:
(?P%%)|  # repetición del delimitador
(?P\w+?)%%  |  # encontrado patrón %%
\[(?P.+?)\]%%  |  # encontrado patrón %%[
(?P^$)   # inválido salto de línea
  )
"""
El delimitador %%..%% encierra únicamente palabras, mientras que %%[..]%%
puede delimitar cualquier cosa:

code = T(r"""void %%main%%{std::cout << %%[value % 5]%%};"""
).substitute(upper)

dará

void MAIN{std::cout << VALUE % 5};



[1]: https://docs.python.org/3.7/library/string.html#template-strings




>
> On Tue, Jul 16, 2019 at 12:49 AM lasizoillo  wrote:
>
>> Buenas,
>>
>> Creo conveniente leer esto antes que nada
>> http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/
>>
>> El mar., 16 jul. 2019 a las 7:27, Sergio Fernández ()
>> escribió:
>>
>>> Un f-string es código, no un string. Yo no seguiría ese camino... es una
>>> mala idea y potencialmente un riesgo.
>>>
>>> ¿Por qué no seguir con Jinja?
>>>
>>
>> Correcto, son potencialmente un riesgo, pero como ponen en el ejemplo
>> sobre todo porque implican extender string.Formatter y que incluso el
>> código que no use f-strings puede verse afectado por el cambio :-O
>>
>>
>>> On Mon, Jul 15, 2019, 20:05 AGTUGO  wrote:
>>>
 Dada la evaluación dentro de los f-strings, parece natural reemplazar
 los lenguajes de plantillas, como Jinja2 con f-string, con simplemente unos
 ajustes, excepto:


>> No, no resulta natural reemplazar un lenguaje de plantillas por algo que
>> no te ofrece una sandbox, sentencias de control, separación entre el parseo
>> del template (se realiza una sola vez y se cachea) y su uso, template
>> loaders personalizables,...
>>
>> Otra cosa es que en tu caso particular no utilices casi nada de lo que te
>> ofrece el sistema de plantillas y puedas quitarte una dependencia extra.
>> Pero creo que sería un caso bastante alejado de la norma.
>>
>>
>>> Convertir de manera limpia los strings a f-strings.

 La única manera que he encontrado es usar eval, ¿Alguien tiene una idea
 mejor?

>>>
>> Usar string.Formatter, pero si y solo si no te vas a disparar en el pié
>> al hacerlo.
>>
>>
>>>
 Resultado deseado = void hola{ std::cout << "hola\n"};
 F-string para generarlo = f"void{saludo}{{std::cout << "{saludo}\n"}};"
 Ejemplo Jinja = void {{saludo}}{std::cout <<"{{saludo}}\n"};"

 --
 Arturo Muñoz
 ___
 Python-es mailing list
 Python-es@python.org
 https://mail.python.org/mailman/listinfo/python-es

>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>
>
> --
> Arturo Muñoz Tolosa
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas 

Re: [Python-es] ¿Cómo generar una distribución aleatoria?

2019-07-10 Por tema Chema Cortes
El dom., 7 jul. 2019 a las 18:23, Jose Caballero ()
escribió:

>
> Por cierto, por motivos que no vienen al caso, en el curro estamos
> atascados con python2.7 hasta que nuestro centro de trabajo renueve el
> contrato con RedHat para EL 8.
> O sea que aún no he necesitado aprender python3. Viendo el código de
> Chema...
> ¿Ahora hay que declarar los tipos? ¿Han convertido python en C++? En fin,
> parece que tendré que investigarlo.
>
>
Python sigue teniendo *tipado dinámico*. El tipado es una ayuda ("*type
hint*") para algunas herramientas de análisis estático como *mypy *y otras
herramientas de *refactorización*. Nada qué ver con el *tipado estático *de
C++. Incluso cuando declaras sobrecarga de funciones (decorador @overload),
la función que se llama siempre es la última que definida, como siempre
pasaba en python si declaras más de una función con el mismo nombre.

La ventaja del tipado opcional es que se puede detectar más tempranamente
cualquier llamada a una función con argumentos de tipo erróneo. Si tienes
en cuenta que casi todas las funciones en los módulos de la librería
estándar ya definen sus tipos, la ayuda para el programador es muy grande.
IDEs como Visual Code es capaz de darte ayuda visual y señalar errores de
tipado a medida que escribes el código.

PD: Python 2 tiene sus días contados. Pronto dejaran de darle soporte
herramientas como pip. No lo dejéis estar.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ¿Cómo generar una distribución aleatoria?

2019-07-06 Por tema Chema Cortes
Repito el código por si no se ve bien la identación del anterior mensaje:

from random import randint
from functools import partial

# única función random que se permite usar
rand5 = partial(randint, 1, 5)

# yapf: disable
# matriz de conversión
conv = [
[1, 2, 3, 4, 5],
[6, 7, 1, 2, 3],
[4, 5, 6, 7, 1],
[2, 3, 4, 5, 6],
[7, 0, 0, 0, 0]
]
# yapf: enable


def rand7() -> int:
"""
Generador aleatorio de números en rango [1,7]
a partir de randint(1,5)
"""

res = 0
while not res:

# tomamos dos números aleatorios en el rango [1,5]
(a, b) = (rand5(), rand5())

# buscamos su correspondencia en el rango [1,7]
res = conv[a - 1][b - 1]

return res


El sáb., 6 jul. 2019 a las 18:19, Chema Cortes ()
escribió:

> El jue., 4 jul. 2019 a las 0:47, lasizoillo ()
> escribió:
>
>> Buenas,
>>
>> Tras leer el correo de Chema me puse a pensar en cuantos bits de
>> información se podía obtener de randint(1,5) y cuantos necesitaba
>> randint(1,7) y me dio por pensar que era ln2(5) y ln2(7). Lo cual
>> seguramente es incorrecto (las mates no son lo mío), pero aun siendo una
>> estimación menor que el ideal propuesto por Chema de 1.4 llamadas es mayor
>> al usado en la solución de Mario (1). Así que había pensado en hacer unos
>> tests de aleatoriedad sobre esa solución demasiado bonita para ser cierta,
>> pero gracias por adelantarte.
>>
>> ¿Se deberían descartar todas las soluciones que hagan menos de 1.2 o 1.4
>> llamadas a randint(1,5) para calcular randint(1,7)?
>>
>>
> Yo muchas veces hablo más por intuición, por lo que considera ese límite
> como una estimación.
>
> Los estados definidos con randint(1,7) tienen más información que los
> definidos por randint(1,5), de ahí la estimación de 1.4 (=7/5) (puedes
> calcularlo en bits, pero sale lo mismo). Como 5 y 7 son primos entre sí, no
> es posible establecer una relación directa de estados. Dicho de otro modo:
> no existen n y m, números enteros, de modo que se cumpla la igualdad 5**n
> == 7**m. Siempre será necesario despreciar casos iniciales para que la
> distribución resultante sea más o menos uniforme.
>
> Analizando la solución propuesta anteriormente: para un valor de
> randint(1,7) es necesario llamar 3 veces a randint(1,5), con una
> probalidadad de repetir llamada de 3/5 + 1/8 = 29/40 ~= 0.72, probabilidad
> que es bastante alta.
>
> Una posible mejora sería hacer sólo dos llamadas, 25 casos posibles, y
> "mapearlos" con 21 estados de randint(1,7). Quedarían 4 casos sin mapear.
> La probabilidad de repetir tirada sería 4/25 ~= 0.16 que está bastante
> mejor.
>
> El código quedaría así:
> from random import randint
> from functools import partial
>
> # única función random que se permite usar
> rand5 = partial(randint, 1, 5)
>
> # yapf: disable
> # matriz de conversión
> conv = [
> [1, 2, 3, 4, 5],
> [6, 7, 1, 2, 3],
> [4, 5, 6, 7, 1],
> [2, 3, 4, 5, 6],
> [7, 0, 0, 0, 0]
> ]
> # yapf: enable
>
>
> def rand7() -> int:
> """
> Generador aleatorio de números en rango [1,7]
> a partir de randint(1,5)
> """
>
> res = 0
> while not res:
>
> # tomamos dos números aleatorios en el rango [1,5]
> (a, b) = (rand5(), rand5())
>
> # buscamos su correspondencia en el rango [1,7]
> res = conv[a - 1][b - 1]
>
> return res
> Pero aún se puede hacer mejor. Podemos mapear los 125 estados posibles de
> 3 llamadas de randint(1,5) con 98 (2*7**2) estados de randint(1,7). La
> probabilidad de tener que repetir la tirada sería de 0.216, algo peor que
> en el caso anterior. Pero que el número de llamadas necesarias se reduzca a
> 1.5 nos acercaría bastante al límite ideal.
>
> Como este caso es algo más largo, lo dejo disponible como gist, incluyendo
> un test de uniformidad por probar algo:
>
> https://gist.github.com/chemacortes/3d66daf14b2ebd2190cd50d969defaed
>
> Una prueba completa de aleatoriedad es bastante compleja. Hay un artículo
> sobre criptografía bastante bueno sobre el tema en:
>
> https://www.incibe-cert.es/blog/comprobando-aleatoriedad
>
>
>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> https://blog.ch3m4.org
> Buscador Python Hispano: http://busca.ch3m4.org
> <https://blog.ch3m4.org/pages/busqueda-python-es/>
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ¿Cómo generar una distribución aleatoria?

2019-07-06 Por tema Chema Cortes
El jue., 4 jul. 2019 a las 0:47, lasizoillo ()
escribió:

> Buenas,
>
> Tras leer el correo de Chema me puse a pensar en cuantos bits de
> información se podía obtener de randint(1,5) y cuantos necesitaba
> randint(1,7) y me dio por pensar que era ln2(5) y ln2(7). Lo cual
> seguramente es incorrecto (las mates no son lo mío), pero aun siendo una
> estimación menor que el ideal propuesto por Chema de 1.4 llamadas es mayor
> al usado en la solución de Mario (1). Así que había pensado en hacer unos
> tests de aleatoriedad sobre esa solución demasiado bonita para ser cierta,
> pero gracias por adelantarte.
>
> ¿Se deberían descartar todas las soluciones que hagan menos de 1.2 o 1.4
> llamadas a randint(1,5) para calcular randint(1,7)?
>
>
Yo muchas veces hablo más por intuición, por lo que considera ese límite
como una estimación.

Los estados definidos con randint(1,7) tienen más información que los
definidos por randint(1,5), de ahí la estimación de 1.4 (=7/5) (puedes
calcularlo en bits, pero sale lo mismo). Como 5 y 7 son primos entre sí, no
es posible establecer una relación directa de estados. Dicho de otro modo:
no existen n y m, números enteros, de modo que se cumpla la igualdad 5**n
== 7**m. Siempre será necesario despreciar casos iniciales para que la
distribución resultante sea más o menos uniforme.

Analizando la solución propuesta anteriormente: para un valor de
randint(1,7) es necesario llamar 3 veces a randint(1,5), con una
probalidadad de repetir llamada de 3/5 + 1/8 = 29/40 ~= 0.72, probabilidad
que es bastante alta.

Una posible mejora sería hacer sólo dos llamadas, 25 casos posibles, y
"mapearlos" con 21 estados de randint(1,7). Quedarían 4 casos sin mapear.
La probabilidad de repetir tirada sería 4/25 ~= 0.16 que está bastante
mejor.

El código quedaría así:
from random import randint
from functools import partial

# única función random que se permite usar
rand5 = partial(randint, 1, 5)

# yapf: disable
# matriz de conversión
conv = [
[1, 2, 3, 4, 5],
[6, 7, 1, 2, 3],
[4, 5, 6, 7, 1],
[2, 3, 4, 5, 6],
[7, 0, 0, 0, 0]
]
# yapf: enable


def rand7() -> int:
"""
Generador aleatorio de números en rango [1,7]
a partir de randint(1,5)
"""

res = 0
while not res:

# tomamos dos números aleatorios en el rango [1,5]
(a, b) = (rand5(), rand5())

# buscamos su correspondencia en el rango [1,7]
res = conv[a - 1][b - 1]

return res
Pero aún se puede hacer mejor. Podemos mapear los 125 estados posibles de 3
llamadas de randint(1,5) con 98 (2*7**2) estados de randint(1,7). La
probabilidad de tener que repetir la tirada sería de 0.216, algo peor que
en el caso anterior. Pero que el número de llamadas necesarias se reduzca a
1.5 nos acercaría bastante al límite ideal.

Como este caso es algo más largo, lo dejo disponible como gist, incluyendo
un test de uniformidad por probar algo:

https://gist.github.com/chemacortes/3d66daf14b2ebd2190cd50d969defaed

Una prueba completa de aleatoriedad es bastante compleja. Hay un artículo
sobre criptografía bastante bueno sobre el tema en:

https://www.incibe-cert.es/blog/comprobando-aleatoriedad



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ¿Cómo generar una distribución aleatoria?

2019-07-03 Por tema Chema Cortes
El mié., 3 jul. 2019 a las 4:09, lasizoillo ()
escribió:

> Buenas,
>
> Lo primero sería acotar cual es realmente el problema. En una entrevista
> de trabajo alguien tiene que desentrañar si eres apto o no para un puesto y
> esa aptitud puede tener varias facetas:
> - Eres capaz de poner en duda los requisitos y plantear alternativas
> mejores para la empresa
> - Eres capaz de resolver problemas lógicos
> - Ante un problema que muy posiblemente no sabes por dónde cogerlo...
> ¿cómo vas a reaccionar? te enfadarás, tratarás de colar una solución
> erronea, asumirás que no sabes hacer eso pero plantearás estrategias para
> atacar el problema, ...
>
> Así que lo primero negociaría si realmente no se puede simplificar el
> enunciado porque lo que realmente se quiere evaluar el conocimiento técnico
> o recursos para atacar este problema. Si les vale ser capaz de poner en
> duda requisitos peregrinos eso que me ahorraría. Si quiere una solución
> técnica pasaría a atacar el problema, reconociendo que no sé la solución a
> priori, y pensaría en voz alta algunas cosas evidentes:
> - Una sola llamada a la función randint(1,5) no tiene información
> suficiente para hacer el equivalente a randint(1,7)
> - No puedo sumar 7 "tiradas" de randint(1,5) y dividir entre 5 porque la
> distribución no sería plana.
> - Al no ser una potencia de dos no puedo convertir a binario la función
> randint(1,5) y codificar los bits del número. Ejemplo 1 y 3 es un 0, 2 y 4
> es un 1 y 5 vuelvo a calcular. 2^3=8, por lo que tres bits de tiradas
> binarias me darían números del 0 al 7, no del 1 al 7.
>

Te dejas el caso de que no sea resoluble, a pesar de tener un enunciado tan
sencillo.

Lo primero que podemos pensar es que necesitamos 7 tiradas de [1,5] para
tener 5 tiradas de [1,7].

Representamos este cambio de dominios por una matriz 7 x 5. Todos los
elementos están a cero, excepto un elemento de cada fila que asignamos
aleatoriamente a 1. Por ejemplo:

[[0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 0, 0, 1],
 [0, 0, 1, 0, 0],
 [0, 0, 0, 0, 1],
 [1, 0, 0, 0, 0],
 [0, 0, 1, 0, 0]]

Es imposible asegurar que en cada columna haya un único elemento a 1.
Alguna columna puede tener todos sus elementos a cero y, al menos, habrá
alguna columna que tendrá más de un 1 seguro.

Por tener una imagen del problema: es como tirar un dado y que algunas
veces no sale nada, y en otras salen dos números o más.




>
> Ahora diría en alto lo que me parece una solución válida que me ha venido
> a la cabeza: lo mismo que con la función randint(1,5) desechaba cuando
> salía 5 para simular tiradas de cara o cruz, puedo eliminar cuando el
> resultado de calcular 3 bits me da un número que equivale a 0. Pensaría si
> cumple con las restricciones del enunciado (creo que si) y pasaría a una
> implementación rápida.
>
> def rand_0_1() -> int:
>  while True:
>   num = randint(1, 5)
>   if num==5:
>   continue
>   return num % 2
>
> def randint_1_7() -> int:
>  while True:
>   num = rand_0_1() * 4 + rand_0_1() * 2 + rand_0_1()
>   if num:
>  return num
>

El truco está en que quitar un elemento de una distribución uniforme deja
una distribución uniforme de los elementos que quedan.

En tu caso, a randint(1,5) le quitas el 5, lo que equivale a randint(1,4),
y lo usas para construir un randint(0,1) . Por otro lado, implementas un
randint(0,7) al que le quitas el cero, lo que equivale a randint(1,7), que
es lo que se buscaba.

Un efecto añadido es que no se sabe cuántas llamadas son necesarias hacer a
randint(1,5) para obtener un elemento de randint(1,7). Cómo poco haces 3
llamadas. El ideal sería hacer 1.4 llamadas por resultado obtenido (1.4 ==
7/5). El nuevo reto podría ser ahora minimizar el número de llamadas
necesarias.




>
> Le comentaría que lo suyo sería hacer una función de test para quedarme
> tranquilo con que el resultado es correcto y poder refactorizar en el
> futuro si se me ocurre una solución mejor. Escucharía si quiere dejarlo
> aquí o si quiere ver la función que haga el test (que no es trivial, pero
> tampoco demasiado complicada). Pero la función de test ya se escapa a tu
> propuesta ;-)
>
> Un saludo,
>
> Javi
>
>
> El mié., 3 jul. 2019 a las 1:50, Jose Caballero ()
> escribió:
>
>> Hola,
>>
>> a un colega le han preguntado durante una entrevista de trabajo lo
>> siguiente:
>> ¿cómo generar una distribución plana de enteros aleatorios, del 1 al 7,
>> usando únicamente random.randint(1,5)?
>> O sea, sin usar ninguna otra función que genere números aleatorios.
>>
>> Y he pensado en proponer el reto aquí, a ver lo que los miembros de la
>> lista sugieren.
>>
>> Un saludo,
>> Jose
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> ___
> Python-es mailing list
> Python-es@python.org
> 

Re: [Python-es] lñibrería de audio 3d

2019-05-30 Por tema Chema Cortes
El jue., 16 may. 2019 a las 1:18, Miguel Barraza (<
miguelbarraza2...@gmail.com>) escribió:

> Buenas grupo, estoy desarrollando un audiojuego (juego accesible para
> ciegos en audio), con pygame en python 3.7. estoy teniendo algunos
> problemas para encontrar una librería de audio con posicionamiento 3d: a
> que me refiero con esto, que pueda reproducir un audio en loop y
> posicionarlo en algun punto 3d, que no solo se escuche de izquierda a
> derecha, si no detrás, adelante, arriba, abajo, etc.
> las que vengo probando son: libaudioverse, pyglet, y openAl, este ultimo
> me cuesta un poco mas porque la documentación y ejemplos son un poco
> escasos.
>
> ¿conocen alguna otra librería que me pueda ayudar?.
>

Te refieres al audio binaural y HRTF. Existe mucho desarrollo experimental
sobre el tema, pero lamentablemente sin un interface sencillo que permita
hacerte tus propias creaciones sin conocer la teoría subyacente.

Puedes probar con el Binaural Toolkit que puede usarse con python:
VISR (*Versatile Interactive Scene Renderer Framework*):
http://www.s3a-spatialaudio.org/

Otro muy sencillo, programado en python, y con un interface gráfico para
posicionar las fuentes de sonido:
Audio3d: https://github.com/felixpfreundtner/audio3d
Otro hecho en python, experimental y con desarrollo activo:
Spatial Audio (spaudiopy): https://github.com/chris-hld/spaudiopy

Y aunque esté algo obsoleto, también tienes algo de documentación en
castellano de nuestros colegas argentinos:
"Manipulación de audio 3D en python orientado a juegos":
http://interorganic.com.ar/josx/audio3d.pdf

Por descontado decir que no he probado ninguno de ellos, por lo que no
aseguro que funcionen.


Saludos.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] FW (1): q1

2019-04-30 Por tema Chema Cortes
El lun., 29 abr. 2019 a las 20:01, Mario Lacunza ()
escribió:

> Alguien puede dar de baja a este spammer?
>

Hecho.
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Es coconut solamente azucar sintactico?

2019-04-27 Por tema Chema Cortes
El vie., 26 abr. 2019 a las 18:14, Francesc Alted ()
escribió:

> Yo también me alegro que los lenguajes funcionales se empiecen a tomar en
> serio en ámbitos cada vez más amplios.  No acabo de estar totalmente con
> Chema cuando dice en su blog que las construcciones funcionales estan
> siendo arrinconcadas en Python; personalmente, uso mucho los
> iteradores/generadores, que estan considerados como constructos
> funcionales, y que creo que estan en la base de muchas librerias Python.
>

Como siempre digo, los paradigmas en programación depende de la actitud del
programador. El lenguaje ayuda bastante, pero es el programador quién hace
el esfuerzo.

Efectivamente, los iteradores/generadores son el fundamento de muchas
librerías y su uso debería ser obligado. Pero si usas un iterador para
crear otro al puro estilo funcional, ¿se puede evitar que un error
interrumpa la cadena de iteradores? ¿se podrían paralelizar (incluso
ignorando que existe GIL)?

Para la primera pregunta, no he visto cómo. Para la segunda, Futures.

En mi blog hablaba en pasado. Hoy en día, todos los lenguajes se ven
obligados a introducir características funcionales, incluso java. Pero
visto lo que se ha tardado en dejar atrás python2, reconozco que se me
agota la paciencia.


> De todas maneras habrá que seguir con mucho interés a Chema en lo que se
> prevé como una prometedora serie de artículos sobre coconut en su blog:
> https://blog.ch3m4.org/2019/04/16/que-es-un-coconut/ (aunque esperemos
> que las apariciones de Enrique y Ana no se prodiguen demasiado ;-)
>

Prometo que será la última aparición de Enrique y Ana :-P


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Es coconut solamente azucar sintactico?

2019-04-27 Por tema Chema Cortes
El sáb., 27 abr. 2019 a las 4:08, Mario R. Osorio ()
escribió:

> ¿Me pueden informar cuál es el blog de Chema?
>

https://blog.ch3m4.org

Lo pongo al final de los mensajes ↓

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Es coconut solamente azucar sintactico?

2019-04-26 Por tema Chema Cortes
El vie., 26 abr. 2019 a las 4:39, AGTUGO () escribió:

> Perdon la traduccion de syntatic sugar pero es lo que se me ocurri'o. Lo
> que mas esperaba de coconut es verificaci'on de tipos en funciones, no hay.
> El objetivo es escribir mas claro el programa con estilo funcional? Aveces
> uso decoradores para revisar los tipos, solamente cuando es necesario
> pensaba que coconut podria ahorrarme la molestia.
>
>
Yo no lo consideraría como *syntatic sugar*. Aunque opcional, puedes
activar el modo estricto y las comprobaciones de tipos con mypy. Lo único a
tener en cuenta es que la versión de python objetivo (*target*) debe tener
soporte para notación de tipos para que mypy lo procese. O sea, debes usar
un target superior a 3 en lugar del target universal que usa por defecto:

https://coconut.readthedocs.io/en/latest/DOCS.html#allowable-targets

Aunque no necesitas coconut. Para chequear tipos puedes usar algún linter
con mypy en el IDE que uses (por ejemplo, visual code con pylama).


Por seguir con coconut, tiene comprobación de patrones, tanto en asignación
como en definición de función. Por ejemplo, se puede definir la función
factorial como:

def factorial(0) = 1
@addpattern(factorial)def factorial(n is int if n > 0) =
range(1, n+1) |> reduce$(*)

No tienen *returns*, casi podría decirse que son funciones lambdas. Pero
implícitamente saldrá un error si el argumento no es cero o un entero
positivo, por lo que hace bastante más que una simple función lambda.

Por otro lado, el reduce se está aplicando parcialmente con el operador
multiplicación. Se podría hacer igual con reduce, partial y mul que puedes
"rescatar" de algunos módulos donde han sido exiliados en python. Pero en
coconut son entidades de primer orden que, además, puedes combinar con
otras inexistentes en python como la evaluación perezosa de listas (lazy
lists) o el procesamiento paralelo (útil en monads).


Saludos.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Metaprogramando c++ con python ejemplo en lua

2019-04-17 Por tema Chema Cortes
El mar., 16 abr. 2019 a las 22:43, AGTUGO () escribió:

> Hola lista de python,
>
> Realmente no se si es offtopic, pero despu'es de auto-generar c'odigo con
> python para varios lenguajes (entre ellos c++, c, makefiles, Corba IDL,
> etc.) uno se pregunta si se puede automatizar m'as.
> Actualmente utilizo python para parsear codigo c y c++ con ayuda de
> librer'ias, para usarlos como input y generar c'odigo (c++, IDL) usando
> templates, yo en particular uso JINJA2, siento que es lo suficientemente
> simple para no complicar demasiado los templates, no tengo ninguna
> preferencia pero me parece descente. Ahora me gustar'ia no usar templates
> si no hacer un framework para facilitar la creacion de codigo c++.
>

La metaprogramación se usa, normalmente, para facilitar la creación y
mantenimiento de código. Distinguiría algunos tipos:

   - abstracciones: por ejemplo, los ORMs que generan internamente código
   SQL (eg: alchemy)
   - generadores: como SIP que genera *bindings* para conectar python con
   librerías C/C++
   - transpiladores: como typescript cuyo compilador genera código para
   varias versiones de javascript
   - macros: expansiones del lenguaje como los macros que tiene rust
   - DSL (*domain-specific language*): aunque no es metaprogramación, se
   parece. Son comunes en ruby o lua.

Sin duda los transpiladores para javascript son los más usados hoy en día.
Para python podría destacar coconut que puede generar código python para
py2, py3 y pypy. También hay generadores de código C para crear extensiones
python como cython o pyrex.


>
> http://lua-users.org/wiki/CppMetaprogramming #Esto es el ejemplo en lua
> de metapromacion
>
> He usado un poco de lua para experimentar como lo muestra el link, lo cual
> me parece excelente. A pesar de que lua es un gran lenguaje, la
> integraci'on con algunas herramientas en mi caso espec'ifico es una labor
> titanica, me pregunto si hay alguien que este haciendo algo as'i aqu'i o
> conozcan algo similar para python, en cualquier lenguaje. Ahora algunas
> cosas que he hecho en python en modo  de experimentaci'on es definir la
> estructura de mi proyecto, y el codigo que conecta todo antes de empezar a
> escribir todo es auto-generado, no me tengo que preocupar de que las cosas
> no esten conectadas y dise;o pruebas genericas para probar las interfaces
> desde antes.
>

Sin ninguna duda, lua es el mejor lenguaje para metaprogramación.
Desconozco qué herramientas se puedan usar con lua, pero me temo que no es
un lenguaje suficientemente popular. Seguramente tengas más suerte con
algún lenguaje *lispoide *como scheme o racket (mírate fulmar para racket).



> Saben si esta pr'actica es com'un? me parece una forma natural de trabajar
> con lenguajes est'aticos, si cambio el nombre de un archivo no me tengo que
> preocupar de cambiarlo en todos los lugares donde esta referenciado, el
> esqueleto del proyecto se hace al inicio y se hace m'as f'acil a;adir la
> l'ogica despues, a'un tengo problemas por solucionar pero se va facilitando
> con el tiempo.
>
> Realmente me recuerda a algunas IDEs pero con la ventaja de que es mucho
> m'as personalizable.
>
>
En mi opinión, la generación de código está bien para crear el esqueleto de
un proyecto. Pero más allá, la posibilidad de regenerar el código después
implica que no debe alterarse ese código generado, lo que supone una
sobrecarga en la especialización de clases. En el mantenimiento son más
recomendable usar las herramientas de refactorización ya incorporadas en
algunos IDEs.

Herramientas para generar el esqueleto de un proyecto hay muchas. Por
nombrar algunas: angular-cli para aplicaciones angular, giter8 para
proyectos scala o pyscaffold para python. Así mismo, muchos frameworks
incluyen sus propios generadores (eg: django).

Un último consejo: dale una oportunidad a rust y sus macros como
alternativa a C++.

Saludos.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Operadores de comparacion como input de funcion para evitar comparaciones hardcoded

2019-04-12 Por tema Chema Cortes
El vie., 12 abr. 2019 a las 13:57, AGTUGO () escribió:

> En este caso cada regla se aplica a un elemento específico del registro,
> pero la posición siempre es la misma en todos los registros.
>

Me había perdido entre renglones y listas.

Entonces es más simple:

rules = (rule1, rule2, rule3)
sels = (2, 5, 6)

def pred(register):
return all(rule(register[idx])
   for rule,idx in zip(rules, sels))

De todos modos, se puede hacer de muchas formas. Y complicarlo de muchas
formas también.




>
> On Fri, Apr 12, 2019, 3:01 AM Chema Cortes  wrote:
>
>>
>> El vie., 12 abr. 2019 a las 2:32, AGTUGO () escribió:
>>
>>>
>>> Excelente respuesta, aunque no entiendo bien la parte de anidar los
>>> fors, ahi estas aplicando todas las reglas en todos los elementos del
>>> registro. Perdon por la respuesta rapida,
>>>
>>
>> He intentado *imitar* el código que habías puesto. No obstante, lo
>> lógico es que cada regla se aplique a todo el registro y que de ahí
>> seleccione los elementos que necesite comprobar.
>>
>>
>>
>>
>>>
>>> On Wed, Apr 10, 2019 at 4:18 AM Chema Cortes  wrote:
>>>
>>>> El mié., 10 abr. 2019 a las 4:21, AGTUGO () escribió:
>>>>
>>>>> Hola Lista de python es espa;ol,
>>>>>
>>>>> Espero que les guste el formato de mi pregunta con comentarios
>>>>>
>>>>> import operator as op
>>>>> from operator import itemgetter
>>>>>
>>>>> # Tengo que analizar varios CSVs y las "celdas" deben de cumplir
>>>>> ciertas reglas
>>>>> # en caso de que sea as'i todo el rengl'on es de utilidad y se guarda
>>>>>
>>>>
>>>>
>>>> En román paladino: quieres filtrar líneas de un texto CSV cuyos campos
>>>> cumplan una serie de reglas.
>>>>
>>>> Intenta identificar cuáles son los *invariantes* del proceso y
>>>> desacoplar lo que se pueda. En este caso concreto, el procesado línea a
>>>> línea de un fichero no debería depender de las reglas a aplicar ni de qué
>>>> elementos concretos se van a chequear. Lo mejor es asumir que en el
>>>> procesado del fichero únicamente aplicar una regla por línea. Con ello, el
>>>> trabajo se reduce a combinar varias reglas en una sola:
>>>>
>>>> rules = (rule1, rule2, rule3)
>>>> sels = (2, 5, 6)
>>>>
>>>> def pred(register):
>>>> selector = itemgetter(*sels)
>>>> return all(rule(ele)
>>>>for rule in rules
>>>>for ele in selector(register))
>>>>
>>>>
>>>> A su vez, el fichero de reglas puede asumir que siempre actúa sobre un
>>>> registro de elementos (una lista). Según como sea, puedes sacar estas
>>>> reglas a otros ficheros con la idea de poder cambiar fácilmente de reglas
>>>> cambiando unos ficheros por otros.
>>>>
>>>> Yendo más allá, podrías tener una colección de reglas predefinidas y
>>>> crear con ellas conjuntos (RuleSets), y asociar un RuleSet para cada
>>>> ficheros CSV.
>>>>
>>>> Las combinaciones son innumerables y se puede complicar todo lo que se
>>>> quiera.
>>>>
>>>>
>>>>
>>>> --
>>>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>>>> https://blog.ch3m4.org
>>>> Buscador Python Hispano: http://busca.ch3m4.org
>>>> <https://blog.ch3m4.org/pages/busqueda-python-es/>
>>>> ___
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>
>>>
>>>
>>> --
>>> Arturo Muñoz Tolosa
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>
>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> https://blog.ch3m4.org
>> Buscador Python Hispano: http://busca.ch3m4.org
>> <https://blog.ch3m4.org/pages/busqueda-python-es/>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Operadores de comparacion como input de funcion para evitar comparaciones hardcoded

2019-04-12 Por tema Chema Cortes
El vie., 12 abr. 2019 a las 2:32, AGTUGO () escribió:

>
> Excelente respuesta, aunque no entiendo bien la parte de anidar los fors,
> ahi estas aplicando todas las reglas en todos los elementos del registro.
> Perdon por la respuesta rapida,
>

He intentado *imitar* el código que habías puesto. No obstante, lo lógico
es que cada regla se aplique a todo el registro y que de ahí seleccione los
elementos que necesite comprobar.




>
> On Wed, Apr 10, 2019 at 4:18 AM Chema Cortes  wrote:
>
>> El mié., 10 abr. 2019 a las 4:21, AGTUGO () escribió:
>>
>>> Hola Lista de python es espa;ol,
>>>
>>> Espero que les guste el formato de mi pregunta con comentarios
>>>
>>> import operator as op
>>> from operator import itemgetter
>>>
>>> # Tengo que analizar varios CSVs y las "celdas" deben de cumplir ciertas
>>> reglas
>>> # en caso de que sea as'i todo el rengl'on es de utilidad y se guarda
>>>
>>
>>
>> En román paladino: quieres filtrar líneas de un texto CSV cuyos campos
>> cumplan una serie de reglas.
>>
>> Intenta identificar cuáles son los *invariantes* del proceso y
>> desacoplar lo que se pueda. En este caso concreto, el procesado línea a
>> línea de un fichero no debería depender de las reglas a aplicar ni de qué
>> elementos concretos se van a chequear. Lo mejor es asumir que en el
>> procesado del fichero únicamente aplicar una regla por línea. Con ello, el
>> trabajo se reduce a combinar varias reglas en una sola:
>>
>> rules = (rule1, rule2, rule3)
>> sels = (2, 5, 6)
>>
>> def pred(register):
>> selector = itemgetter(*sels)
>> return all(rule(ele)
>>for rule in rules
>>for ele in selector(register))
>>
>>
>> A su vez, el fichero de reglas puede asumir que siempre actúa sobre un
>> registro de elementos (una lista). Según como sea, puedes sacar estas
>> reglas a otros ficheros con la idea de poder cambiar fácilmente de reglas
>> cambiando unos ficheros por otros.
>>
>> Yendo más allá, podrías tener una colección de reglas predefinidas y
>> crear con ellas conjuntos (RuleSets), y asociar un RuleSet para cada
>> ficheros CSV.
>>
>> Las combinaciones son innumerables y se puede complicar todo lo que se
>> quiera.
>>
>>
>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> https://blog.ch3m4.org
>> Buscador Python Hispano: http://busca.ch3m4.org
>> <https://blog.ch3m4.org/pages/busqueda-python-es/>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>
>
> --
> Arturo Muñoz Tolosa
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Operadores de comparacion como input de funcion para evitar comparaciones hardcoded

2019-04-10 Por tema Chema Cortes
El mié., 10 abr. 2019 a las 4:21, AGTUGO () escribió:

> Hola Lista de python es espa;ol,
>
> Espero que les guste el formato de mi pregunta con comentarios
>
> import operator as op
> from operator import itemgetter
>
> # Tengo que analizar varios CSVs y las "celdas" deben de cumplir ciertas
> reglas
> # en caso de que sea as'i todo el rengl'on es de utilidad y se guarda
>


En román paladino: quieres filtrar líneas de un texto CSV cuyos campos
cumplan una serie de reglas.

Intenta identificar cuáles son los *invariantes* del proceso y desacoplar
lo que se pueda. En este caso concreto, el procesado línea a línea de un
fichero no debería depender de las reglas a aplicar ni de qué elementos
concretos se van a chequear. Lo mejor es asumir que en el procesado del
fichero únicamente aplicar una regla por línea. Con ello, el trabajo se
reduce a combinar varias reglas en una sola:

rules = (rule1, rule2, rule3)
sels = (2, 5, 6)

def pred(register):
selector = itemgetter(*sels)
return all(rule(ele)
   for rule in rules
   for ele in selector(register))


A su vez, el fichero de reglas puede asumir que siempre actúa sobre un
registro de elementos (una lista). Según como sea, puedes sacar estas
reglas a otros ficheros con la idea de poder cambiar fácilmente de reglas
cambiando unos ficheros por otros.

Yendo más allá, podrías tener una colección de reglas predefinidas y crear
con ellas conjuntos (RuleSets), y asociar un RuleSet para cada ficheros CSV.

Las combinaciones son innumerables y se puede complicar todo lo que se
quiera.



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Desplegar desarrollos en distintos servidores

2019-03-27 Por tema Chema Cortes
El vie., 22 mar. 2019 a las 11:11, Pixu Kideak ()
escribió:

> Buenos días,
>
> Estoy aprendiendo Python, he realizado algún script que utiliza algunas
> librerias de terceros que los he puesto en marcha con PIP y tengo
> funcionando el programa en un servidor.
> Me gustaría saber cual es la mejor manera para poder hacer funcionar el
> desarrollo en otros servidores con distintas arquitecturas (x32, x64) y
> distintos sistemas operativos.
>
> En un principio he pensado que podría instalar Python y las librerias en
> los distintos servidores y después copiar los scripts; pero quiero pensar
> que existe alguna manera de automatizar este proceso o realizarlo de manera
> más elegante.
>
>
Al usar distintas arquitecturas, dependerá mucho de los módulos que vayas a
instalar y si requieren de librerías del sistema aparte de las que usa
python.

Como norma principal: nunca modifiques el entorno python del sistema
operativo. Cambiar las versiones de python y sus módulos podrían afectar al
funcionamiento del sistema. Crea entornos virtuales tal como te comenta
Ángel Lis en otro mensaje. Lo bueno de un entorno virtual es que puedes
poder la versión de python que necesites (por ejemplo, usar python 3.6 en
tu aplicación mientras el sistema sigue usando python 2.7).

Para crear entornos virtuales, te recomiendo conda 4.6. Es un instalador de
paquetes python que también instala dependencias, librerías nativas e,
incluso, librerías de R y ruby. El módulo menv (que te recomienda Ángel
Lis) está bien para instalar paquetes 100% python, pero tiene dos graves
incovenientes:

   1. Requiere de un entorno de desarrollo para compilar algunas
   dependencias
   2. La lista de paquetes que saca pip freeze puede ser difícil de
   reproducir de un sistema operativo a otro

Crear un entorno de desarrollo en linux no es mayor problema; pero si usas
windows puede que tengas dificultades para que compilen cierto ciertos
módulos.
En cuanto a la lista de paquetes que genera pip freeze, puede ser demasiado
extensa. Lo normal es que tu aplicación sólo dependa de unos pocos
paquetes, y el resto sea parte del sistema.

Conda dispone de librerías ya compiladas para los sistemas operativos
habituales. Además minimiza el listado de paquetes a instalar para recrear
un entorno.

Ejemplo de una sesión:
$ conda create -n mientorno python==3.6 flask
$ conda activate mientorno
(mientorno) $ python
>>>

Para recrear el entorno en otra máquina. En origen:
$ conda env export -n mientorno > environment.yml

En la otra máquina:
$ conda env create -f environment.yml

Para los despliegues (y control remoto) recomiendo fabric+invoke. El uso de
Ansible y similares lo veo más para cuando se tiene un gran número de
entornos a gestionar (aunque también es factible usar fabric por encima de
ansible para hacer más simple su uso).

[conda]: https://conda.io
[invoke]: https://www.pyinvoke.org/
[fabric]: http://www.fabfile.org/


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] metodo mas pythonico para strings multilinea con variables largas

2019-03-16 Por tema Chema Cortes
El sáb., 16 mar. 2019 a las 2:47, AGTUGO () escribió:

> Objetivo de esta discusi'on no es llegar a un "depende del gusto" , el
> objetivo es determinar con las guias de estilo disponibles, que es lo mas
> pythonico. Saludos.
>
>
Según el Zen de Python: "There should be one-- and preferably only one
--obvious way to do it."
Me temo que en este caso tenemos demasiadas formas de hacer una misma cosa.

Hay una discusion similar aqui
> https://stackoverflow.com/questions/10660435/pythonic-way-to-create-a-long-multi-line-string
> pero el nombre de la variable es corto
>
>
> # El problema es que tengo que partir muchas veces  el string cuando la
> variable tiene
> #un nombre muy largo a pesar del inconveniente que esto representa estoy a
> favor
> #de nombres descriptivos para las variables
>
> # lo que quiero evitar es partir muchas veces la linea
> #Aclaro que esto ya es pythonico pero quiero ahorrar espacio.
> this_is_a_very_long_variable =  "this is my really, really, really,
> really, really, really," \
> "really, really,
> really  really, really, really, really, really," \
> " really long string
> that I'd like to shorten."
>
> #Esta Solucion me parece adecuada, solo el inconveniente de escribir la
> diagonal
> #en cada caso, ganamos espacio y agregamos identacion para identificar que
> es parte
> #del string
>
> this_is_a_very_long_variable =  \
> "this is my really, really, really, really, really, really," \
> "really, really, really  really, really, really, really, really," \
> " really long string that I'd like to shorten."
>
> #Mi metodo favorito hasta ahora, no hay necesidad de agregar una diagonal
> en cada
> #linea, me molesta un poco visualmente el parentesis (supongo que para eso
> no hay solucion)
>
> this_is_a_very_long_variable =  (
> "this is my really, really, really, really, really, really,"
> "really, really, really  really, really, really, really, really,"
> " really long string that I'd like to shorten.")
>
>
Atendiendo a las reglas de estilo (PEP8): "The preferred way of wrapping
long lines is by using Python's implied line continuation inside
parentheses, brackets and braces". O sea, la preferida sería la última que
has puesto con los paréntesis. No entiendo porqué te molesta el paréntesis.
La mayoría de los IDEs ya se encargan de cerrar el paréntesis y las
comillas mientras escribes, por lo que es bastante cómodo. Visualmente se
puede confundir con una tupla, eso sí. El carácter de continuación ('\')
está desaconsejado últimamente y sólo habría algún caso para el que siga
siendo práctico.



> #esto agrega saltos de linea y me parece una solucion muy fea porque no
> hay identacion
> #no es realmente una solucion pero es para ver si la de ideas a alguien.
>
> this_is_a_very_long_variable = \
> """this is my really, really, really, really, really, really,
> really, really, really  really, really, really, really, really,
> really long string that I'd like to shorten."""
>
>
No es lo mismo una string en varias líneas que una string multilínea. Sin
tener en cuenta que los saltos de línea, el margen se podría haber resuelto
al estilo scala, quitándolo al final:

this_is_a_very_long_variable = """
|this is my really, really, really, really, really, really,
|really, really, really  really, really, really, really, really,
|really long string that I'd like to shorten.""".*stripMargin*

Los IDEs de scala facilitan la escritura añadiendo automáticamente el
margen al saltar de línea. En python no queda más remedio que crear una
función para que lo haga, o bien, usar expresiones regulares:

import re

strip_margin = re.compile("\n\W*\|")

this_is_a_very_long_variable = strip_margin.sub('', """
|this is my really, really, really, really, really, really,
|really, really, really  really, really, really, really, really,
|really long string that I'd like to shorten.""")

Saludos



> --
> Arturo Muñoz
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging

2018-11-29 Por tema Chema Cortes
El mié., 28 nov. 2018 a las 9:43, Chema Cortes ()
escribió:

>
>
> El mar., 27 nov. 2018 a las 8:13, Angel Lis ()
> escribió:
>
>> Hola Jose,
>> el problema que describes es la razon de por que existe el metodo
>> copy.copy() y copy.deepcopy()
>> de la documentacion:
>>
>> https://docs.python.org/2.7/library/copy.html
>>
>> """
>>
>>- A *shallow copy* constructs a new compound object and then (to the
>>extent possible) inserts *references* into it to the objects found in
>>the original.
>>- A *deep copy* constructs a new compound object and then,
>>recursively, inserts *copies* into it of the objects found in the
>>original.
>>
>>
>> """
>>
>> Y para el objeto logging:
>>
>>
>> https://docs.python.org/2.7/library/logging.html?highlight=logging#thread-safety
>> """
>> The logging module is intended to be thread-safe without any special
>> work needing to be done by its clients. It achieves this though using
>> threading locks; there is one lock to serialize access to the module’s
>> shared data, and each handler also creates a lock to serialize access to
>> its underlying I/O.
>> """
>>
>> En este caso, probablemente deberas usar un copy() en vez de deepcopy.
>> Espero haberte ayudado.
>>
>>
> El módulo 'logging' usa locks para bloquear los hilos que no es
> conveniente duplicar, de ahí que saque el error.
>
> Aún así, se puede aprovechar el funcionamiento que tiene 'deepcopy' para
> evitar duplicar componentes que ya ha copiado en su intento de replicar
> toda la estructura de un objeto. Tiene un segundo argumento para pasarle el
> diccionario con el que "*memoizar*" los componentes ya duplicados. Si a
> este argumento añadimos aquellos componentes que no queremos duplicar ya
> debería funcionar:
>
> c = C()
> mem = { id(c.log):  c.log }
> x = copy.deepcopy(c)
>
> id(c) == id(x)  # False
> id(c.log) == id(x.log)  # True
>
>
Me había dejado el diccionario como segundo argumento:

c = C()
mem = { id(c.log):  c.log }
x = copy.deepcopy(c, mem)


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org
<https://blog.ch3m4.org/pages/busqueda-python-es/>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] copy.deepcopy() falla cuando el objeto a copiar tiene logging

2018-11-28 Por tema Chema Cortes
El mar., 27 nov. 2018 a las 8:13, Angel Lis () escribió:

> Hola Jose,
> el problema que describes es la razon de por que existe el metodo
> copy.copy() y copy.deepcopy()
> de la documentacion:
>
> https://docs.python.org/2.7/library/copy.html
>
> """
>
>- A *shallow copy* constructs a new compound object and then (to the
>extent possible) inserts *references* into it to the objects found in
>the original.
>- A *deep copy* constructs a new compound object and then,
>recursively, inserts *copies* into it of the objects found in the
>original.
>
>
> """
>
> Y para el objeto logging:
>
>
> https://docs.python.org/2.7/library/logging.html?highlight=logging#thread-safety
> """
> The logging module is intended to be thread-safe without any special work
> needing to be done by its clients. It achieves this though using threading
> locks; there is one lock to serialize access to the module’s shared data,
> and each handler also creates a lock to serialize access to its underlying
> I/O.
> """
>
> En este caso, probablemente deberas usar un copy() en vez de deepcopy.
> Espero haberte ayudado.
>
>
El módulo 'logging' usa locks para bloquear los hilos que no es conveniente
duplicar, de ahí que saque el error.

Aún así, se puede aprovechar el funcionamiento que tiene 'deepcopy' para
evitar duplicar componentes que ya ha copiado en su intento de replicar
toda la estructura de un objeto. Tiene un segundo argumento para pasarle el
diccionario con el que "*memoizar*" los componentes ya duplicados. Si a
este argumento añadimos aquellos componentes que no queremos duplicar ya
debería funcionar:

c = C()
mem = { id(c.log):  c.log }
x = copy.deepcopy(c)

id(c) == id(x)  # False
id(c.log) == id(x.log)  # True




> Un saludo.
>
> PD: Yo tampoco tengo tildes en el teclado
>
> El lun., 26 nov. 2018 a las 23:30, Jose Caballero (<
> jcaballero@gmail.com>) escribió:
>
>> Hola,
>>
>> tengo una clase C, a cuyos objetos puedo, en principio, hacer copias
>> con copy.deepcopy().
>> Sin embargo, cuando a la clase C le agrego logging en el __init__ [1],
>> ya no funciona [2].
>> ?No me queda mas remedio que copiar el objeto "manualmente"?
>> ?O existe alguna forma limpia de evitar este problema?
>>
>> Gracias por adelantado.
>> Un saludo, y perdon por la falta de tildes.
>> Jose
>>
>>
>> [1]
>> def __init__(self):
>>   self.log = logging.getLogger()
>>   logStream = logging.StreamHandler()
>>   
>>   self.log.addHandler(logStream)
>>
>> [2]
>>  File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
>> y = _reconstruct(x, rv, 1, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct
>> state = deepcopy(state, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy
>> y = copier(x, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict
>> y[deepcopy(key, memo)] = deepcopy(value, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
>> y = _reconstruct(x, rv, 1, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct
>> state = deepcopy(state, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy
>> y = copier(x, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict
>> y[deepcopy(key, memo)] = deepcopy(value, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy
>> y = copier(x, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 230, in _deepcopy_list
>> y.append(deepcopy(a, memo))
>>   File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
>> y = _reconstruct(x, rv, 1, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct
>> state = deepcopy(state, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy
>> y = copier(x, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict
>> y[deepcopy(key, memo)] = deepcopy(value, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
>> y = _reconstruct(x, rv, 1, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 334, in _reconstruct
>> state = deepcopy(state, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 163, in deepcopy
>> y = copier(x, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 257, in _deepcopy_dict
>> y[deepcopy(key, memo)] = deepcopy(value, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 190, in deepcopy
>> y = _reconstruct(x, rv, 1, memo)
>>   File "/usr/lib64/python2.7/copy.py", line 329, in _reconstruct
>> y = callable(*args)
>>   File "/usr/lib64/python2.7/copy_reg.py", line 93, in __newobj__
>> return cls.__new__(cls, *args)
>> TypeError: object.__new__(thread.lock) is not safe, use
>> thread.lock.__new__()
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>
>
> --
> --
> Àngel Lis.
> 

Re: [Python-es] ¿pexpect se puede capturar la salida de un ejecutable con ncurses? ¿Y enviar las pulsaciones de teclado?

2018-09-25 Por tema Chema Cortes
El lun., 24 sept. 2018 a las 16:30, Miguel de Dios Matias (<
tres.14...@gmail.com>) escribió:

> Buenas.
>
> Ando pegándome en intentar "encapsular" un ejecutable (un viejo roguelike)
> que saca la salida en ncurses y se interacciona con pulsaciones de teclado.
>
> Me he hecho un script sencillo en ncurses para probar (este espera la
> pulsación y muestra la tecla pulsada y si es q se sale).
>

¿Exactamente, qué esperabas que hiciera? Las entradas y salidas estándar
funcionan con buffers, no son adecuadas para programas interactivos.

De alguna forma tendrás que exponer el interface curses de la aplicación
para que sea accesible por tu script de testing.


>
> 
> import sys,os
> import curses
>
> def draw_menu(stdscr):
>k = 0
>while (k != ord('q')):
>   stdscr.clear()
>   height, width = stdscr.getmaxyx()
>   stdscr.addstr(0, 0, "HOLA {}".format(k))
>   stdscr.refresh()
>
>   k = stdscr.getch()
>
> def main():
>curses.wrapper(draw_menu)
>
> if __name__ == "__main__":
>main()
> 
>
> Y he probado con popen, pexpect y me falta sacrificar una cabra...no lo
> saco, aquí mis intentos infructuosos:
>
> 
>
> """
> ps -A | grep cata
> xdotool search --pid 3819
> xdotool key --window 50331670 q
> """
>
> """
> from subprocess import Popen, PIPE
>
> #p = Popen('./test5.py', stdin=PIPE, stdout=PIPE, shell=True)
> #p = Popen('./test5.py', shell=True)
> p = Popen('./test2.py')
>
> print(p.pid)
>
> sleep(100)
>
> # p.stdin.close()
> # p.stdout.close()
> # p.wait()
>
> """
>
>
> # ~ import pexpect
>
> # ~ child = pexpect.spawn("./test5.py")
> # ~ child.send('a')
> # ~ child.send('b')
> # ~ child.interact()
>
>
> # ~ import sys
> # ~ import pexpect
> # ~ child = pexpect.spawn('./test5.py', logfile=open("/tmp/file", "wb"))
> # ~ child.logfile = open("/tmp/file", "wb")
> # ~ child.expect(pexpect.EOF)
> # ~ child.send('a')
> # ~ child.send('q')
> # ~ child.interact()
>
> """
>
> https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux
> spawn
> fout = file('output.txt', 'w') child.logfile = fout
> """
>
> import sys
> from time import sleep
> import pexpect
> child = pexpect.spawn('./test5.py')
> child.logfile = open("/tmp/file", "wb")
> sleep(2)
> child.send('a')
> print(child.read())
> # ~ child.send('q')
> 
>
> Por si alguien le interesa el karma en stackoverflow, tengo la misma
> pregunta por allí, si contesta le voto positivo:
>
>
> https://stackoverflow.com/questions/52377179/open-a-process-and-catch-stdout-and-send-custom-keypress
>
> Y también por si alguno le ha picado la curiosidad tengo también un
> mensaje en el foro de referencia de videojuegos libres:
>
>
> https://forum.freegamedev.net/viewtopic.php?f=3=8113=47af7f6dfc9848160f9ca27791a045f1
>
> Saludos.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] implementacion del metodo dict.get()

2018-09-17 Por tema Chema Cortes
https://github.com/python/cpython/blob/dbdee0073cf0b88fe541980ace1f650900f455cc/Objects/dictobject.c#L2743-L2775


El lun., 17 sept. 2018 a las 23:15, Jose Caballero (<
jcaballero@gmail.com>) escribió:

> Hola
>
> alguien tiene por casualidad un link, o referencia a fichero y linea,
> donde esta la implementacion del metodo get() de los diccionarios?
> Tengo curiosidad por ver como esta implementado, pero no me aclaro con
> el codigo fuente. Hace ya demasiados agnos que no toco C
> :(
>
>
> Muchas gracias. Y perdon por la ausencia de tildes.
> Saludos,
> Jose
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ayuda

2018-09-14 Por tema Chema Cortes
El jue., 13 sept. 2018 a las 21:11, GEIS AUGUSTO GARCIA ROMERO (<
geist...@gmail.com>) escribió:

> Muy Buenas Listeros PY por favor pueden colaborarme con esto.
>
> UnicodeEncodeError: 'ascii' codec can't encode character '\xed' in
> position 501: ordinal not in range(128)
>

Hola, Geis:

Con lo poco que cuentas sólo podemos decirte que es un error con la
codificación de caracteres. Añade algo del código y, sobre todo, la versión
de python usas.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] suma de multiplos de 3 y 5

2018-09-04 Por tema Chema Cortes
El lun., 3 sept. 2018 a las 21:12, AGTUGO () escribió:

> """
> Problema tomado de
> https://projecteuler.net/problem=1
>
>
> If we list all the natural numbers below 10 that are multiples
> of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.
> Find the sum of all the multiples of 3 or 5 below 1000.
>
> Si listamos todos los numeros naturales menores a 10 que son
> múltiplos de 3 o 5 obtenemos 2, 5, 6 y 9. La suma de los múltiplos es 23.
> Encuentra la suma de los múltiplos de 3 o 5 menores de 1000.
>
>
> """
>
> """
> Este es mi aporte de código no esta diseñado para ser eficiente,
> el objetivo es jugar con el lenguaje. Ojalá puedan compartir
> una visión interesante de como resolver este problema.
> Si tienen una forma más eficiente de hacer el set o más elegante también
> es bienvenido.
> Saludos.
> """
>
> import itertools
> begin = 0
> end = 1000
> multiples= (3,5)
>
> x = [range(begin,end,i) for i in multiples]
> x = sum(set(itertools.chain(*x)))
>
> print(x)
>
>
Con este tipo de retos, es interesante que sea lo más simple posible. En el
enunciado sólo pide la suma, no es preciso guardar ninguno de los
resultados intermedios.

Lo más simple sería:

def euler001(n: int) -> int:
return sum(i for i in range(1, n) if i%3 == 0 or i%5 ==0)

... que es una forma concisa de poner lo que propone agus en otro mensaje.

Una forma más efectiva, aunque muy poco "escalable" en caso de que fueran
más múltiplos a considerar:

def euler001(n: int) -> int:
return sum(range(3, n, 3)) + sum(range(5, n, 5)) - sum(range(15, n, 15))


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Euler project

2018-09-04 Por tema Chema Cortes
El lun., 3 sept. 2018 a las 3:14, AGTUGO () escribió:

> Hola pythoneros,
>
> Para mantenerme en forma resuelvo de vez en vez problemas de
> https://projecteuler.net, aunque ahí en los foros usan todos los
> lenguajes, sería interesante discutir un problema a la semana para ver
> estilos y métodos. Objetos, comprensión de listas, cython, numpy,
> multithreaded, pandas, etc. Aunque no sé si aquí sea el lugar indicado pero
> me encantaría que así fuera. Saludos.
>
>
La finalidad de esta lista es hablar de cualquier cosa relacionada con
python. No veo problema en poder discutir aquí las soluciones de los retos
del proyecto Euler. Lo único que te pediría es que en el asunto indiques de
algún modo el tema del que se trata, por ejemplo añadiendo el número del
reto como EULER-001 o similar para quién prefiera ignorar estos mensajes.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] herencia multiple comportamiento con diferentes argumentos

2018-08-23 Por tema Chema Cortes
El jue 23/08/2018, 4:46, AGTUGO  escribió:
>
> La implementación en scala se puede leer muy fácilmente sin conocer el
lenguaje. Es interesante ver cómo hay varios lenguajes para la jvm, lástima
que jython nunca despegó del todo. de conclusión de esto es que no me
encanta super() ya que solo es un next del mro casi como si fuera un
iterador. Veré cómo lo hace smalltalk ya que siempre es interesante ver
cómo implementan cosas.
>
> El caso donde me parece útil usar un adaptador, es cuando usas una clase
que no puedes modificar y aunque no haya sido pensada así .
>
> class Moveable:
> def __init__(self, x, y):
> self.x = x
> self.y = y
> def draw(self):
> print('Drawing at position:', self.x, self.y)
>
>
>
> class MoveableAdapter(Root):
> def __init__(self, x, y, **kwds):
> self.movable = Moveable(x, y)
> super().__init__(**kwds)
> def draw(self):
> self.movable.draw()
> super().draw()
>
> class MovableColoredShape(ColoredShape, MoveableAdapter):
> pass
>
> MovableColoredShape(color='red', shapename='triangle',
> x=10, y=20).draw()
>
> Solo me parece útil cuando por alguna razón no puedes modificar esas
clases. Por ejemplo: trabajo cooperativo o arquitectura dependiente de la
clase que no quieres modificar. No sé si sea lo más elegante pero me parece
práctico.

Tal como te decía, el adaptador debe adaptar todos los métodos, no basta
con el método __init__.

Imagina que ColoredShape cambia la signatura del método draw y que
MovableColoredShape lo defines al revés:

class MovableColoredShape( MoveableAdapter, ColoredShape ):
 pass

Cuando el adaptador invoque el método draw del super dará error, porque la
clase ColoredShape espera argumentos que no le estaría pasando.

>
> ________
> El mar., 14 de ago. de 2018 6:41 PM, Chema Cortes 
escribió:
>>
>>
>>
>> El lun., 13 ago. 2018 a las 16:58, AGTUGO () escribió:
>>>
>>> Después de estudiar tu respuesta Chema, cómo dices kwargs es necesario.
Y después de revisar la documentación de Python hace referencia a esta
excelente guía
https://rhettinger.wordpress.com/2011/05/26/super-considered-super/
>>>
>>> Pone ejemplos de cómo usar adaptadores para clases que no están
diseñadas para ser cooperativas, y el adaptador puede ser la clase base que
sea necesaria. Como dices **kwargs es la única manera.
>>>
>>> Si no puedes modificar la clase de la cual quieres heredar de manera
multiple y no esta diseñada para ser cooperativa; pues un adaptador y ya
está.
>>>
>>
>> Si el fin de usar herencia múltiple era tener código más fácil de
reutilizar y mantener, precisamente los adaptadores consiguen el efecto
contrario. En el ejemplo que has puesto, no sólo habría que adaptar el
método __init__, sino también, por si acaso, los demás métodos heredados
como sería el método 'draw'. Además está el problema de las clases
colaborativas a medias, aquellas que usan 'super' para propagar la cadena
de llamadas, pero que en sus métodos no han considerado usar kwargs. Los
adaptadores no sirven para estos casos.
>>
>> No sabría darte una solución general que valga en todos los casos. Por
comparar, pongo un gist con la reescritura en scala del mismo ejemplo.
Scala no tiene herencia múltiple, por lo que hay que ser explícito en el
orden de llamadas de los métodos heredados. Al menos los errores se
corrigen antes de ejecutar el código:
>>
>> https://gist.github.com/chemacortes/f1796931088e406060543894c9f45d52
>>
>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
>> Buscador Python Hispano: http://busca.ch3m4.org
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] herencia multiple comportamiento con diferentes argumentos

2018-08-14 Por tema Chema Cortes
El lun., 13 ago. 2018 a las 16:58, AGTUGO () escribió:

> Después de estudiar tu respuesta Chema, cómo dices kwargs es necesario. Y
> después de revisar la documentación de Python hace referencia a esta
> excelente guía
> https://rhettinger.wordpress.com/2011/05/26/super-considered-super/
>
> Pone ejemplos de cómo usar adaptadores para clases que no están diseñadas
> para ser cooperativas, y el adaptador puede ser la clase base que sea
> necesaria. Como dices **kwargs es la única manera.
>
> Si no puedes modificar la clase de la cual quieres heredar de manera
> multiple y no esta diseñada para ser cooperativa; pues un adaptador y ya
> está.
>
>
Si el fin de usar herencia múltiple era tener código más fácil de
reutilizar y mantener, precisamente los adaptadores consiguen el efecto
contrario. En el ejemplo que has puesto, no sólo habría que adaptar el
método __init__, sino también, por si acaso, los demás métodos heredados
como sería el método 'draw'. Además está el problema de las clases
colaborativas a medias, aquellas que usan 'super' para propagar la cadena
de llamadas, pero que en sus métodos no han considerado usar kwargs. Los
adaptadores no sirven para estos casos.

No sabría darte una solución general que valga en todos los casos. Por
comparar, pongo un gist con la reescritura en scala del mismo ejemplo.
Scala no tiene herencia múltiple, por lo que hay que ser explícito en el
orden de llamadas de los métodos heredados. Al menos los errores se
corrigen antes de ejecutar el código:

https://gist.github.com/chemacortes/f1796931088e406060543894c9f45d52


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
https://blog.ch3m4.org
Buscador Python Hispano: http://busca.ch3m4.org

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] herencia multiple comportamiento con diferentes argumentos

2018-08-13 Por tema Chema Cortes
El lun., 13 ago. 2018 a las 8:02, AGTUGO () escribió:

> Estimada Lista de Python en español:
>
> Repasando un poco los conceptos de herencia multiple ya que no la uso
> mucho no recuerdo el porque del siguiente comportamiento, no entiendo
> porque paso por el iniciador de Second. De antemano muchas gracias. La idea
> de llamar los init de las clases Third y Second es pasarle argumentos
> diferentes y no tener que modificar Second y Third con **kwargs como
> argumento.
>
> class First(object):
> def __init__(self):
> print("first")
>
> class Second(First):
> def __init__(self):
> super(Second,self).__init__()
> print("second")
>
> class Third(First):
> def __init__(self):
> super(Third,self).__init__()
> print("third")
>
> class Fourth(Third,Second):
> def __init__(self):
> Third.__init__(self)
> #   Second.__init__(self)
> print("Forth")
>
> print(First.__mro__)
> print(Second.__mro__)
> print(Third.__mro__)
> print(Fourth.__mro__)
>
> #//root = tk.Tk()
> #//app = Window(root)
> #//root.mainloop()
>
> nieto = Fourth()
>
> _
>
> Salida:
>
> (, )
> (, , )
> (, , )
> (, ,  '__main__.Second'>, , )
> first
> second
> third
> Forth
>
> Siguiendo los pasos de la ejecución:

- Se crea una instancia de Fourth
- En la inicialización, se "fuerza" la ejecución del método __init__ en
Third
- En el método __init__ de Third, se invoca el método __init__ del
super(Third, self)

¿Quién es "super" aquí? Como 'self' es una instanacia de Fourth, se usa su
MRO: (Fourth, Third, Second, First, object), o sea, super es el siguiente a
Third en la secuencia, que sería Second.

- Se invoca el método __init__ de Second

El problema que se te plantea se conoce por "herencia múltiple
colaborativa". Para que funcione, los métodos invocados han de aceptar
cualquier número de argumentos, ignorando aquellos que no vaya a usar.

Lamentablemente, la herencia múltiple se suele usar más como "mixin" para
encadenar interfaces. Este tipo de uso no debería tener "inicializadores",
o bien usar una estructura de datos común que vendría a ser algo similar a
los argumentos **kwargs de la herencia múltiple colaborativa.

Mi consejo es que siempre uses **kwargs si piensas hacer interfaces que se
combinen por herencia múltiple.

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] proteccion de codigo

2018-04-06 Por tema Chema Cortes
Como moderador de la lista, creo que este tipo de comentarios sobran. Si
quieres criticar cualquier opinión, que sea con argumentos, nunca perdiendo
la netiqueta.



El jue., 5 abr. 2018 a las 5:53, Hiko hitokiri ()
escribió:

> yo creo dos cosas o que no tienes ni puñetera idea de programación, o solo
> tienes ganas de estar mamando, por que decir yo voy a hacer el sistema
> desde cero para que no tenga nada da esa impresión, y en estos tiempos
> intentar esconder código  demuestra no saber nada sobre desarrollo, ni
> seguridad.
>
> El 4 de abril de 2018, 18:45, Mario Lacunza  escribió:
>
>> Para eso mejor desarrollas un software Desktop...
>>
>> Enviado desde mi celular LG
>>
>> El mié., 4 de abr. de 2018 19:42, Daπid  escribió:
>>
>>>
>>>
>>> 2018-04-05 2:06 GMT+02:00 Mario Lacunza :
>>>
 Hola,

 a ver entre #1 y #3 tienes un problema de diseño, si estás haciendo un
 sistema web el cual corre por ende en el servidor q TU debes controlar para
 q quieres protegerlo? si lo q tu vendes me imagino será el acceso al
 mismo.. o lo q pretendes es vender el sistema web server completo para q
 cualquiera lo instale en SU servidor? esto último de nuevo es la peor forma
 de llevarlo a cabo.

>>>
>>> No necesariamente. Puedes distribuir una manylinux wheel compilada con
>>> Cython. El usuario sólo necesitaría instalar unos pocos paquetes, y a
>>> correr.
>>>
>>> Como te han dicho no hay sistema seguro, sólo demoras el tiempo q a
 alguien le lleve descompilarlo, para evitarlo, véndele servicios agregados
 a tu sistema, actualizalo constantemente ofrece soporte especializado, etc
 hay muchas vias indirectas de evitar q te descompilen el software.

>>>
>>> Tampoco hay que exagerar. Dependiendo de cómo de interesante y caro sea
>>> el proyecto, el código C generado por Cython es de por sí extremadamente
>>> complejo:
>>>
>>>   {
>>>   double __pyx_temp_scalar = 0.0;
>>>   {
>>>   Py_ssize_t __pyx_temp_extent = __pyx_v_marginal_.shape[0];
>>>   Py_ssize_t __pyx_temp_idx;
>>>   double *__pyx_temp_pointer = (double *) __pyx_v_marginal_.data;
>>>   for (__pyx_temp_idx = 0; __pyx_temp_idx < __pyx_temp_extent;
>>> __pyx_temp_idx++) {
>>> *((double *) __pyx_temp_pointer) = __pyx_temp_scalar;
>>> __pyx_temp_pointer += 1;
>>>   }
>>>   }
>>>   }
>>>
>>> Y esto es antes de pasarlo por GCC. ¿Alguien se atreve a descifrarlo?
>>> (Solución más abajo)
>>>
>>> En uno de mis códigos, elegido al azar, 232 líneas de Python se
>>> convierten en 29560 de C.
>>>
>>>
>>> Hay otras herramientas, pero no las conozco, yo uso Cython por
>>> velocidad, pero sé que hay quien lo usa para ofuscar.
>>>
>>>
>>>
>>> /David.
>>> 
>>> Solución: poner a 0 todos los elementos de un array unidimensional.
>>> Exactamente, marginal_[:] = 0
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>>
>
>
> --
> hiko_hitokiri no pidas que el mundo te trate de una manera cuando tu no le
> das el mismo trato a los demás
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Generar Codigo Fuente

2018-02-26 Por tema Chema Cortes
El 24 de febrero de 2018, 17:13, Mario Lacunza 
escribió:

> Hola,
>
> una ayuda con este tema: necesito generar archivos de código de otros
> lenguajes (php, js, etc) usando Python, como son la mayoría iguales quiero
> automatizarlo, sólo cambian ciertas palabras en las mismas directivas, como
> el nombre de un función etc. Así teniendo una lista de palabras a
> reemplazar mi código debe crear los archivos, rellenarlos del código
> correcto y cambiar los nombres de función/otras en cada uno.
>
> Cuál es la mejor forma de hacer ésta última parte?
>
>
Creo que la forma más sencilla que tienes es usar uno de los estupendos
sistemas de plantillas que tiene python. Por ejemplo, jinja:
http://jinja.pocoo.org/



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Obtención de Sumandos para un Target a partir de una colección de valores

2018-02-09 Por tema Chema Cortes
El 8 de febrero de 2018, 23:26, Manuel A. Estevez Fernandez <
stvz...@gmail.com> escribió:

> Hola gracias por tu sugerencia.
>
> Lo que necesito es por ejemplo:
>
> para el ID 1 el target es 100,
>
> entonces ¿cuáles son los números del ID 1 que puedan sumar 100 ?
> 20, 30, 50, 15, 45, 60
> 20 + 30 + 50 = 100
>

Sin conocer la naturaleza de los datos, para una primera aproximación se
podrían obtener todas las combinaciones posibles de los valores y comprobar
si alguna suma el valor objetivo:

from itertools import combinations

combs = (lst for n in range(1, len(valores))
  for lst in combinations(valores, n)
  if sum(lst)==target)

res = next(combs, None)

Obtienes la primera combinación que sume el valor objetivo, o None si no
encuentra ninguna combinación. Se puede pensar alguna optimización más del
algoritmo según si los datos están ordenados o si supieras en qué rango se
mueven.

En cuanto a usar procesos, es fácil particionar el problema agrupando los
datos por ID (ya lo tienes hecho para generar el diccionario). El módulo
multiprocessing facilita mucho las cosas (Ahora no tengo tiempo para
ponerte un ejemplo).



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Licencia lgplv3 y mit

2017-07-18 Por tema Chema Cortes
El mar., 18 jul. 2017 a las 0:55, Andres Gonzalez (<
andresgonzalez.sistemas2...@gmail.com>) escribió:

> Muchas gracias Chema por tu ayuda, ahora que me das una observación cago
> en cuenta que no especifiqué mucho del proyecto,la idea es realizar una.
> Software contable, pongo entonces mis inquietudes por si es posible recibir
> orientación al respecto:
>
> 1) al ser pyside lgplv3 puedo usar entonces sqlalchemy que es MIT?
>

Afirmativo

Pero no son licencias de uso, por lo que no tiene mucho sentido que
preguntes si se pueden "usar". Digamos más bien que ambas librerías se
pueden distribuir juntas.



> 2)lo que se entrega al usuario final sería tanto el ejecutable como el
> código realizado de parte mía de lo que hace referencia a pyside como de
> sqlalchemy? A esto te refieres cuando dices "Supongo que tan sólo vas a
> distribuir tu propio código (que sería lo recomendable)"?
>

Entiendo que por ejecutable te refieres a crear un EXE para windows. La
LGPL te pide que la librería esté claramente separada del resto no-GPL, por
ejemplo como un fichero DLL. Por otro lado, si a tu código le aplicaras la
licencia GPL, entonces no tendrías ningún problema en distribuir todo como
GPL (incluso la librería MIT).

A lo que me refería como "recomendable" es que pongas las dos librerías
como dependencias que se instalan aparte de tu código, idealmente como un
entorno virtual con el que sea más controlable las versiones instaladas. De
este modo no tienes que distribuir nada junto con tu código y, por tanto,
no le afecta ninguna licencia de código abierto (con la excepción de la
licencia Affero).



>
>
> Pido disculpas por si es una pregunta muy básica o por si fue respondida
> de manera indirecta y no lo entendí
>
>
> Quedo agradecido.
>
>
> El 17 jul. 2017 7:42 a. m., "Chema Cortes" <pych...@gmail.com> escribió:
>
> El dom., 16 jul. 2017 a las 21:20, Andres Gonzalez (<
> andresgonzalez.sistemas2...@gmail.com>) escribió:
>
>> Hola compañeros de la lista una pequeña pregunta, son compatibles las
>> licencias lgplv3 y mit para utilizar en un proyecto Python, específicamente
>> voy a usar pyside y orm sqlalchemy.
>>
>>
> Rápidamente: MIT es compatible con casi todo. LGPL es compatible mientras
> no se mezcle. Si distribuyes código GPL, todo es GPL (incluso si llevas
> código MIT).
>
> Supongo que tan sólo vas a distribuir tu propio código (que sería lo
> recomendable). En este caso, ninguna de las dos licencias, MIT ó LGPL, ni
> tampoco la licencia de python, PSF, te obligan a elegir una licencia
> específica para tu código. Hazlo en función de cómo consideres obtener
> colaboradores para el proyecto.
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://blog.ch3m4.org <http://ch3m4.org/blog>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org <http://ch3m4.org/blog>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Licencia lgplv3 y mit

2017-07-17 Por tema Chema Cortes
El dom., 16 jul. 2017 a las 21:20, Andres Gonzalez (<
andresgonzalez.sistemas2...@gmail.com>) escribió:

> Hola compañeros de la lista una pequeña pregunta, son compatibles las
> licencias lgplv3 y mit para utilizar en un proyecto Python, específicamente
> voy a usar pyside y orm sqlalchemy.
>
>
Rápidamente: MIT es compatible con casi todo. LGPL es compatible mientras
no se mezcle. Si distribuyes código GPL, todo es GPL (incluso si llevas
código MIT).

Supongo que tan sólo vas a distribuir tu propio código (que sería lo
recomendable). En este caso, ninguna de las dos licencias, MIT ó LGPL, ni
tampoco la licencia de python, PSF, te obligan a elegir una licencia
específica para tu código. Hazlo en función de cómo consideres obtener
colaboradores para el proyecto.
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ¿libro o tutorial de "refactoring" recomendable?

2017-04-21 Por tema Chema Cortes
El vie., 21 abr. 2017 a las 1:50, Jose Caballero ()
escribió:

> Hola,
>
> ¿algún libro o web sobre "python code refactoring" que alguien quiera
> recomendar especialmente?
> Un búsqueda en google da miles de resultados. Por eso quisiera saber
> si alguien tiene alguna recomendación en particular.
>
>
Para aprender a refactorizar, lo mejor es empezar por mejorar el estilo del
código. Uno de los mejores manuales python para ello es "The Hitchhiker’s
Guide to Python!", que tienes accesible para su consulta en:
http://docs.python-guide.org

Pero si lo que buscas son ejemplos, en el manual de Pycharm te explican
unos cuantos:
https://www.jetbrains.com/help/pycharm/2017.1/refactoring-source-code.html


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Conocimientos

2017-03-27 Por tema Chema Cortes
El lun., 27 mar. 2017 a las 14:16, Narcis Garcia (<informat...@actiu.net>)
escribió:

> Sr. del LG G4, todos tenemos parte de razón, aunque hay quien lo enfoca
> desde el punto de vista de los derechos de quienes no son informados (o
> inconcretamente) de las cosas, y hay quien lo enfoca desde un punto de
> vista exclusivamente comercial o empresarial.
>
> ¿Ves a menudo la mención de una «nube» diciendo a quién pertenece la
> misma? Yo trataba de aclarar un *detalle* del mundo real.
>
>
Existen "nubes" privadas que cada empresa puede montar con servidores
propios o contratados por todo el mundo, existen "nubes" públicas cuyos
servidores están localizados en España para así cumplir con la Ley de
Protección de Datos española,... El término "nube" no se caracteriza por
usar servidores "ocultos". Otra cosa distinta es que los usuarios de las
aplicaciones en la nube desconozcan dónde se encuentran sus datos, algo que
las leyes europeas están tratando de arreglar.



>
> El 27/03/17 a les 13:33, Mario Lacunza ha escrit:
> > Estás bien equivocado. Primero TODOS los servidores de Internet son
> > remotos. En informática de define como remoto a un servidor corriendo
> > fuera de tu red local.
> >
> > Segundo puedes saber sobre TODOS los servidores a quien pertenecen,
> > dónde están localizados, q os corren y un largo etc de información,
> > claro hay q saber cómo obtenerla.
> >
> > El término nube o cloud en inglés define el paradigma de sistemas
> > distribuidos lo cual nada tiene q ver con tú idea de ocultar la
> > pertenencia del servidor, te aconsejo usar Google y la Wikipedia para
> > informarte mejor.
> >
> > Enviado desde mi LG G4
> >
> > El 27 mar. 2017 4:02 AM, "Narcis Garcia" <informat...@actiu.net
> > <mailto:informat...@actiu.net>> escribió:
> >
> > Quiero matizar un detalle de lo que diferenció Chema Cortés:
> > - Lo que se ejecuta en un servidor, se ejecuta en un computador
> remoto.
> > - Lo que se ejecuta en la «nube», se ejecuta en un servidor oculto*
> >
> > (*) Oculto sólo a efecto de no decir a quién pertenece. Usar el
> término
> > «nube» es parecido a usar el término «máscara» o «indefinido».
> >
> >
> > El 26/03/17 a les 20:17, Chema Cortes ha escrit:
> > > El dom., 26 mar. 2017 a las 15:29, Johnny Alonso
> > > (<johnny.alonso.quint...@gmail.com
> > <mailto:johnny.alonso.quint...@gmail.com>
> > > <mailto:johnny.alonso.quint...@gmail.com
> > <mailto:johnny.alonso.quint...@gmail.com>>>) escribió:
> > >
> > > De nuevo muchas gracias a todos, ya empecé a estudiar HTML5 y
> > CCS3,
> > > hasta
> > > aquí estático y bonito como indica Narcis.
> > >
> > >
> > > Bonito, sí; pero estático sólo en parte. Con CSS3 se pueden
> construir
> > > animaciones e interaccionar con el usuario, sin usar javascript.
> > Este es
> > > un mundo más para diseñadores que para programadores, y precisa de
> > > bastante dedicación hasta dominar sus posibilidades. Para
> facilitar su
> > > uso por diseñadores han salido varios frameworks como bootstrap.
> En su
> > > mayoría usan javascript para obtener mayores efectos.
> > >
> > >
> > >
> > > Ahora bien, sí JavaScript es un
> > > lenguaje de progresión que permite darle dinamismo a la
> página, me
> > > surgen
> > > las siguientes preguntas:
> > > ¿Hay que instalar algo en el sistema del cliente o en el
> servidor?
> > > A groso modo ¿qué sería posible hacer con él y cuál es su
> alcance
> > > (cliente
> > > y/o servidor)?
> > >
> > >
> > > El navegador sólo entiende html, css y javascript. No obstante, los
> > > programadores no escriben directamente en estos lenguajes. Lo
> habitual
> > > es programar las webs con otros lenguajes y generar luego los
> ficheros
> > > que luego se enviarán al navegador del cliente para que los
> visualize.
> > > Las combinaciones son casi infinitas, desde generar todos los
> ficheros
> > > en un servidor antes de enviarlos al cliente, hasta enviar
> > únicamente el
> > > fichero javascript al cliente para que él genere el html y css.
> > >
> > > Este año será el año en el que los navegadores interpreten
> webassembly
>

Re: [Python-es] [JOB] Oferta de trabajo en modalidad de teletrabajo

2017-03-26 Por tema Chema Cortes
Como moderador de la lista, os pediría dejar aquí este tema. Si os apetece
seguir discutiendo temas laborales, salariales o sindicales, no hay
problema en abrir un nuevo hilo como "offtopic".

Las "normas" sobre cómo publicar ofertas de empleo quedan incorporadas a la
información de la lista para que estén presentes en el futuro.

Muchas gracias por vuestra colaboración.

-- Chema Cortés

El dom., 26 mar. 2017 a las 22:25, Mario Lacunza ()
escribió:

> Ya q me citas, puedes decirme q es "BIBA"?
>
>
> Enviado desde mi LG G4
>
> El 26 mar. 2017 14:57, "Miguel de Dios Matias" 
> escribió:
>
>
>
> El 24/3/2017 18:29, "Mario Lacunza"  escribió:
>
> Sino te gusta no envíes tu CV, yx sino sabes ESAS condiciones siempre se
> negocian en privado.
>
>
> "BIBA" el espíritu sindical y la lucha por unos derechos dignos.
>
> Como cuenta un compañero en el hilo hay una reglas simples, ya bastante
> apesta páginas como LinkedIn con becarias y becarios de ADE creyéndose
> dioses magnánimos por ofrecer contratos de esclavitud para sus jefecillos.
>
> Un poco de orgullo por favor y por contra recordar que no meamos colonia
> que si yo trabajo bien es porque tengo compañeros como el personal de
> limpieza que me tienen limpio el puesto, tengo compañeros que atienden al
> teléfono a los clientes...
>
> ...y después tengo comerciales y jefes que...se llevan el dinero en
> limpio...
>
>
> Enviado desde mi LG G4
>
> El 24 mar. 2017 11:36 AM, "Narcis Garcia" 
> escribió:
>
> «Salario según valía» significa que no desean exponerse a crítica, y no
> desean sujetarse a criterios legales de igualdad salarial.
> Tratar lo que más interesa al trabajador en privado permite simular una
> negociación que no es tal.
>
> Esto podría ser una oferta de trabajo semánticamente, pero en realidad
> es una demanda de trabajo sin oferta de salario. Además, a destajo.
>
>
> El 24/03/17 a les 15:03, Alberto Barrionuevo ha escrit:
> > Hola:
> >
> > Somos un grupo de empresas españolas dedicadas a la consultoría y
> > programación con software libre. Estamos operando desde 1998 y estamos
> > ahora buscando programadores Python para formarlos en Odoo/Tryton y/o en
> > Django, e incluso en sistemas (tenemos dos centros de cálculo en
> > propiedad que administramos íntegramente por nosotros y construidos
> > íntegramente con software libre). También hacemos trabajos de periciales
> > informáticas y de seguridad informática, aunque entiendo que esto no
> > aplicaría aquí.
> >
> > Ofrecemos trabajo estable a largo plazo, formación, teletrabajo, muy
> > buen ambiente, entorno hacker y cultura de software libre, montones de
> > software libre y un montón por aprender del resto de compañeros hasta
> > desarrollar carrera de consultor informático sobre todo para entornos
> > empresariales (principalmente trabajamos para sector privado).
> >
> > Salario según valía y condiciones, pero creciente en función de la
> > productividad. Inglés bastante recomendable para poder desarrollarse
> > profesionalmente en los proyectos más interesantes, y titulación
> > universitaria o, alternativamente bastante experiencia técnica
> demostrable.
> >
> > Actualmente tenemos compañeros en Málaga, Coruña, Mallorca, Madrid,
> > Córdoba, Granada y en Venezuela, aunque en el pasado hemos tenido en más
> > ciudades españolas (Bilbao, Barcelona,...) y hasta en Cuba.
> >
> > También nos valdría gente trabajando en el extranjero, pero tienen que
> > dominar a nivel conversacional fluido el español y/o el inglés.
> >
> > Por favor, los interesados que manden sus currículos a r...@virtua.es
> >
> > Gracias,
> >
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Conocimientos

2017-03-26 Por tema Chema Cortes
El dom., 26 mar. 2017 a las 15:29, Johnny Alonso (<
johnny.alonso.quint...@gmail.com>) escribió:

> De nuevo muchas gracias a todos, ya empecé a estudiar HTML5 y CCS3, hasta
> aquí estático y bonito como indica Narcis.


Bonito, sí; pero estático sólo en parte. Con CSS3 se pueden construir
animaciones e interaccionar con el usuario, sin usar javascript. Este es un
mundo más para diseñadores que para programadores, y precisa de bastante
dedicación hasta dominar sus posibilidades. Para facilitar su uso por
diseñadores han salido varios frameworks como bootstrap. En su mayoría usan
javascript para obtener mayores efectos.



> Ahora bien, sí JavaScript es un
> lenguaje de progresión que permite darle dinamismo a la página, me surgen
> las siguientes preguntas:
> ¿Hay que instalar algo en el sistema del cliente o en el servidor?
> A groso modo ¿qué sería posible hacer con él y cuál es su alcance (cliente
> y/o servidor)?
>

El navegador sólo entiende html, css y javascript. No obstante, los
programadores no escriben directamente en estos lenguajes. Lo habitual es
programar las webs con otros lenguajes y generar luego los ficheros que
luego se enviarán al navegador del cliente para que los visualize. Las
combinaciones son casi infinitas, desde generar todos los ficheros en un
servidor antes de enviarlos al cliente, hasta enviar únicamente el fichero
javascript al cliente para que él genere el html y css.

Este año será el año en el que los navegadores interpreten webassembly (una
especie de subconjunto de javascript), lo que abre las puertas a futuros
compiladores de otros lenguajes a webassembly sin pasar por código
javascript, similar a los lenguajes que hay para JVM.


> ¿Qué es JQuery y para qué sirve?
>

Una conocida librería javascript para mejorar la experiencia de usuario
(GUI).


> ¿En dónde encaja Python, cual es la razón?
>
>
Como ya te han dicho, las aplicaciones webs van a dar paso a las apps para
móviles. Estas apps tendrán una parte cliente que se ejecuta en el móvil y
otra remota que se ejecutará en un servidor o, más probable, en la "nube".
Es en esta segunda parte donde python puede tener mejor cabida. Existe
mucho caos sobre cómo serán las aplicaciones del futuro, incluso abogan por
que sean "isomórficas", la misma aplicación javascript tanto en cliente
como en servidor y así unificar todo en un único desarrollo. Pero la verdad
es que no hay nada demostrado que haga a un lenguaje como lo único
necesario con el que se pueda programar todos los elementos implicados en
una aplicación web (ni siquiera java).

Mi consejo es que no te obsesiones demasiado por estar al día, ya que lo
que es hoy está de moda, puede quedar obsoleto en poco tiempo. Empieza por
algún framework para python que esté bien documentado como django, aunque
déjame recomendarte web2py para empezar a entender cómo se programaban
webs. Puede que, para cuando ya hayas aprendido a usarlo, haya salido
python para webassembly y tengamos un nuevo paradigma para programar
aplicaciones.
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Control de tiempo entre conmutaciones de 0 y 1

2017-03-21 Por tema Chema Cortes
El mar., 21 mar. 2017 a las 14:04, Rolando Paz ()
escribió:

> Hola Ricardo
>
> Gracias por tu correo.
>
> De que otra forma se podria realizar esto?
> Otro lenguaje de programación?
>

Más importante que el lenguaje de programación sería la plataforma usada.
Para tener un control muy preciso de tiempos habría que usar sistemas de
tiempo real como RT-Linux.

En cuanto a lenguajes de programación, se usa C o ensamblador, aunque es
posible usar rust e incluso una versión de python modificada,
micropython.org, que funciona en su propio hardware, pyboard.

En cualquier caso, los sistemas operativos modernos tienen en cuenta las
interrupciones a la hora de calcular el tiempo real transcurrido. En lugar
de controlar tú mismo los tiempos de ejecución, delega en el sistema
operativo. Por ejemplo, creando un hilo que se ejecute a intérvalos fijos.

Pero me parece que lo que tienes entre manos es más un ejercicio teórico y
que nada importan las tolerancias en los tiempos de ejecución.



>
> Saludos
>
>
> El 21 de marzo de 2017, 0:48, Ricardo Cárdenes  > escribió:
>
> Hola Rolando,
>
> Antes de corregirte el código... ¿Estás seguro de que quieres usar Python
> para esto? Si la tolerancia que tienes para los tiempos es grande, ok, pero
> si no, te recomendaría que usases otra cosa. Y sobre todo, no usar
> time.sleep, claro. Con eso puedes acumular unos retrasos enormes en el
> código.
>
> Saludos,
> Ricardo
>
> 2017-03-20 18:05 GMT-10:00 Rolando Paz :
>
> Hola a todos de nuevo...
>
> Ahora regreso con un pequeño código:
>
> import time
>
> start_time = time.time()
> #tiempo total en segundos, como ejemplo 10.
> tiempo_total = 10
> #numero de conmutaciones generadas, como ejemplo 4.
> conmutaciones = 4
> for offset in range(tiempo_total):
> while (time.time() - start_time) < offset:
> time.sleep(0.01)
> #lo siguiente realiza una conmutacion entre 0 y 1.
> count = 0
> for i in range(conmutaciones):
> count = (count + 1) % 2
>  print count
>
> Lo que hace este código es conmutar entre 0 y 1, tantas veces como se
> defina en "conmutaciones", durante el tiempo establecido en "tiempo_total".
>
> La salida es la siguiente.
>
> 0
> 1
> 0
> 1
>
> Estoy tratando de entender cómo usar este código para controlar los
> tiempos que se definen en la imagen adjunta, es decir:
>
> T1 = tiempo durante el cual la conmutacion es 1
> T0 = tiempo durante el cual la conmutacion es 0
> Tiempo Total = tiempo total de las conmutaciones
>
> Agradecería cualquier comentario sobre como poder controlar los tiempos
> anteriores.
>
> Saludos y gracias
>
> Rolando P.
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] [fdt] Buscando ayuda para wxdevc++

2017-03-15 Por tema Chema Cortes
El mar., 14 mar. 2017 a las 12:50, Caballero-Negro Cantos (<
rafaelcan...@hotmail.com>) escribió:

>  Buenas a todos
>
>
> Perdonad, no sé si he indicado bien el fuera de tema, porque no he
> encontrado las normas de la lista.
>
> Estoy intentando programar en wxdevc++, evidentemente con C++, y estoy
> teniendo problemas de configuración con este ide.
>
> ¿Alguno podría indicarme alguna lista o foro (preferiría lista) en
> español, sobre C++ donde pudiesen ayudarme con este ide?
>

Desconozco qué recursos hay para este IDE, pero te recomendaría que te
pasaras por Stack Overflow en español. Además de preguntas sobre temas de
programación, también se admiten preguntas sobre IDE y configuraciones de
herramientas de desarrollo. Asegúrate de leer los consejos sobre cómo hacer
buenas preguntas:

http://es.stackoverflow.com/



>
>
> Saludos y gracias, y perdonad por el fuera de tema.
>
>
> Rafa
>
>
>
> ---
> El software de antivirus Avast ha analizado este correo electrónico en
> busca de virus.
> https://www.avast.com/antivirus
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ¿alguna librería para ACLs particularmente recomendable?

2017-03-08 Por tema Chema Cortes
El mié., 8 mar. 2017 a las 13:26, Jose Caballero (<jcaballero@gmail.com>)
escribió:

>
>
>
>
> On Mar 8, 2017, at 3:35, Chema Cortes <pych...@gmail.com> wrote:
>
> El mar., 7 mar. 2017 a las 20:07, Jose Caballero (<
> <jcaballero@gmail.com>jcaballero@gmail.com>) escribió:
>
> Hola,
>
> estoy buscando por una librería (o paquete,...) para ACLs (Access Control
> List).
> Una búsqueda en google me da varias opciones. Pero no me queda claro
> el nivel de soporte que tienen, o si son proyectos abandonados, etc.
>
> Si alguien tiene experiencia con alguna en particular que quiera
> recomendar, soy todo oídos.
>
>
> Depende bastante del sistema operativo que uses, del servicio de
> directorio y en dónde aplicas las ACLs: ficheros, redes, correo, cloud,...
> No te podría decir nada que sirva en general.
>
> Más que buscar un módulo independiente, busca entre los módulos python
> disponibles para el controlador de accesos que uses.
>
>
>
> Pues es verdad. Mis disculpas por ser tan vago en la descripción.
>
> En realidad no es para ficheros. Se trata de controlar quién puede o no
> puede hacer un PUT/POST/GET de datos en llamadas http. Esos datos son
> campos en documentos JSON. Estos documentos JSON tienen una estructura
> interna que es isomórfica a un sistema de ficheros (o sea, un "tree").
> Quiero añadirle los permisos de lectura y escritura a los nodos de ese
> "tree".
>

No sé si es algo particular, pero me suena bastante a AWS S3. Si es así, el
módulo más recomendable es 'boto'.

Aquí un tutorial en español:
http://cloud.acens.com/tutorial-aws-sdk-para-acceso-a-cloud-storage/



>
> Jose
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org <http://ch3m4.org/blog>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] ¿alguna librería para ACLs particularmente recomendable?

2017-03-08 Por tema Chema Cortes
El mar., 7 mar. 2017 a las 20:07, Jose Caballero ()
escribió:

> Hola,
>
> estoy buscando por una librería (o paquete,...) para ACLs (Access Control
> List).
> Una búsqueda en google me da varias opciones. Pero no me queda claro
> el nivel de soporte que tienen, o si son proyectos abandonados, etc.
>
> Si alguien tiene experiencia con alguna en particular que quiera
> recomendar, soy todo oídos.
>
>
Depende bastante del sistema operativo que uses, del servicio de directorio
y en dónde aplicas las ACLs: ficheros, redes, correo, cloud,... No te
podría decir nada que sirva en general.

Más que buscar un módulo independiente, busca entre los módulos python
disponibles para el controlador de accesos que uses.




> Muchas gracias,
> Jose.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] capturar error

2017-02-27 Por tema Chema Cortes
El vie., 24 feb. 2017 a las 16:26, Gonzalo V () escribió:

> Amigos, una consulta cortita
>
> tengo un error que es así:
> Traceback (most recent call last):
>   File
> "C:\Users\note\AppData\Local\Programs\Python\Python35-32\alumnos.py", line
> 16, in 
> vot=par.find_next().get_text()
> AttributeError: 'NoneType' object has no attribute 'find_next'
>
>
>
> try:
> par=soup.find(string=re.compile(alumno))
> vot=par.find_next().get_text()
> titulo=soup.find('titulo').get_text()
>
> except AttributeError as e:
>if e.args=='NoneType':
>print('adasd')
> sé capturar el AttributeError pero no sé como capturar solo el NoneType
> para que haga algo si eso ocurre.
> si no está el alumno, levanta Nonetype, pero no sé como capturarlo¿cómo se
> hace?
>
>
Las excepciones no almacenan ninguna información sobre las circunsancias
que las han originado. Aún es más, los mensajes que usan no son parte de la
API de python, por lo que ni siquiera es seguro que no cambien en una
futura versión de python. Ahora te dice que el objeto que da error es de
tipo NoneType, pero no tendría obligación de decirte nada.

Las excepciones son poco más que objetos con los identificar de qué
situaciones de error puedes recuperar la ejecución, y dejar el resto que
sigan su curso. Si has identificado el tipo de error (AttributeError) lo
que toca ahora es saber si ha sido algunos de los objetos que vigilas.

Aunque no sea nada elegante, no queda más remedio que comprobar que cada
búsqueda efectivamente devuelve algún resultado antes de trabajar con ella,
lo que impide el encadenamiento normal de operaciones como quieres hacer
(algo que en lenguajes funcionales se resuelve muy bien con monads). La
mejor manera de "encadenar" operaciones que puedan fallar es usando
expresiones if..else:

par = soup.find(string=re.compile(alumno))
vot = par.find_next() if par else None
text = vot.get_text() if vot else None
if text is None:
   print("No hay resultados")




>
> Saludos,
> Gonzalo
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] scrapear un javascript

2017-01-30 Por tema Chema Cortes
Ahora mismo, alrededor de javascript se ha montado un ecosistema tan arcano
que es dificil darte ideas generales que puedan aplicarse en cualquier
caso. Lo único que se puede hacer es esperar a que el navegador acabe por
mostrar todo el contenido y, aún así, nunca estarás seguro de que lo que
muestre no haya sido adaptado a tu situación geográfica, perfiles sociales
o, simplemente, que te hayan vetado tu IP por parecer un bot.

La idea del scraping es obtener información de una web que no es ofrecida
de otra manera. Lo ideal es que hubiera una API para obtener esta
información. (En Europa se empieza a ofrecer esta información desde las
administraciones públicas mediante opendata/opengov)

Si no has tenido suerte y, además, sigues empeñado en extraer la
información mediante python, mi consejo es usar webdriver (como te decía
lasizoillo), pero hazlo mediante Selenium. Aunque es más un framework para
diseñar pruebas de páginas webs, también hay quien lo usa para hacer
scraping. En los siguientes artículos puedes ver el proceso desde las
pruebas iniciales hasta definir un sistema de producción que funciona
mediante phantomjs (como también te decía lasizoillo):

http://thiagomarzagao.com/2013/11/12/webscraping-with-selenium-part-1/
http://thiagomarzagao.com/2013/11/14/webscraping-with-selenium-part-2/
http://thiagomarzagao.com/2013/11/15/webscraping-with-selenium-part-3/
http://thiagomarzagao.com/2013/11/16/webscraping-with-selenium-part-4/
http://thiagomarzagao.com/2013/11/17/webscraping-with-selenium-part-5/



El dom., 29 ene. 2017 a las 16:35, Gonzalo V () escribió:

> gracias javi, muy útil tu respuesta. ¿que más se debería saber cómo para
> tener un camino más certero?
>
> El 27 ene. 2017 8:26 AM, "lasizoillo"  escribió:
>
> Buenas,
>
> Para hacer scraping en sitios que abusan de javascript, siempre que no
> tengas unos criterios de eficiencia excesivos (en plan quiero un
> millón de requests hechas para mañana) y no te importe que el scraper
> use demasiada memoria, yo tiraría por echarle un vistazo a webdriver.
> Haces las pruebas manejando un chrome o un firefox y si todo va bien
> pasas a controlar un navegador headless como phantomjs.
>
> Te obliga a aprender tecnologías, pero a la larga te ahorra tiempo.
>
> Otra opción es investigar que hace ese javascript para simular su
> comportamiento con tu scraper. Googleando un poco tiene pinta que es
> una cosa tipo de .net y que hay ejemplos de como lidiar con ello:
>
>
> http://toddhayton.com/2015/05/04/scraping-aspnet-pages-with-ajax-pagination/
>
> http://stackoverflow.com/questions/23885771/scraping-with-dopostback-with-link-url-hidden
>
> Con la información que das tampoco se ser más concreto. Espero que te
> sea de utilidad.
>
> Un saludo,
>
> Javi
>
>
> El día 27 de enero de 2017, 5:33, Gonzalo V  escribió:
> > Hola amigos.
> > Estoy scrapeando un sitio web publico con urllib y beautifulsoup4 y hay
> unos
> > tab o lenguetas que se llenan a través de javascript. ¿cómo podría
> obtener
> > esa información?
> > este es el link, el href
> >   > id="ctl00_mainPlaceHolder_btnVotaciones"
> >
> href="javascript:__doPostBack(ctl00$mainPlaceHolder$btnVotaciones,)">Votaciones
> >
> > y no lo puedo abrir con urllib.request.urlopen
> >
> > alguien sabe cómo?, han tenido algún problema similar?
> >
> >
> >
> > Saludos,
> > Gonzalo
> >
> > ___
> > Python-es mailing list
> > Python-es@python.org
> > https://mail.python.org/mailman/listinfo/python-es
> >
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Extendiendo de dict

2016-11-01 Por tema Chema Cortes
El lun., 31 oct. 2016 a las 16:13, Nicolas lino ()
escribió:

>
> Buenas.
>
> Tengo una duda. Estoy armando una clase, que extiende de dict, la idea es
> agregar una funcionalidad mas para editar el diccioario.
>
>
> class TestObject(dict):
>
> def __init__(self, init={}):
>dict.__init__(self, init)
>self._setMessage()
>
> def _setMessage(self):
> self = self['message']
>
>
> La idea es tomar solo una parte del message en el init. El tema es que no
> se como hacer el override del objeto. el self = self['message'] no estaria
> funcionando para re escribir el objeto.
>
> Alguien sabe si es correcto lo que estoy queriendo hacer? O en que le
> estoy errando?
>

Contrariamente a la intiuición, los diccionarios se inicializan al crear la
instancia, en lo que sería el método __new__:

class TestObject(dict):

def __new__(cls, init={}):
message = init.pop("message", {})
self = super().__new__(cls, init)
self.message = message
return self



>
>
> Muchas gracias.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Consulta con Python y MSSSQL

2016-10-26 Por tema Chema Cortes
El mié., 26 oct. 2016 a las 16:31, Abel Muñoz ()
escribió:


 Buenas todos,

Llevo un tiempito adentrandome en este maravilloso mundo de Python, y he
estado haciendo mis programillas.. Ahora estoy haciendo un programa
Python-Microsoft SQL y me surge esta duda:

Como puedo realizar esta consulta hipotetica: (Tengo una tabla y quiero
pasar sus registros para otra)
En MSSQL: *Select TablaVieja.campo1 INTO tablaNueva FROM TablaVieja*,
funciona bien; pero en python, me da error:

Fragmento de mi código
.
.
.
sqlTemp = ( *'Select TablaVieja.campo1 INTO tablaNueva FROM TablaVieja* ')

try:
cursor.execute(sqlTemp) except:
print "Error"

sys.exit (1)


Alguien que me ayude



Bienvenido, Abel.

Ayudaría saber qué error es el que se produce. Saca el execute del bloque
try..except y dinos qué error en concreto te da.


___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


[Python-es] [ADMIN] Sobre el uso de esta lista

2016-10-23 Por tema Chema Cortes
Hola a todos:

Acabo de comprobar que se ha perdido el FAQ que había en wikidot donde
teníamos algunas recomendaciones sobre cómo hacer preguntas en esta lista y
que se envíaba como primera referencia a los nuevos suscritores (
http://python-es-faq.wikidot.com/como-preguntar). No sé si este FAQ era
útil para alguien, pero voy a quitar esta referencia mientras no tengamos
algo que lo sustituya.

Aprovecho para volver a insistir en que estaría bien que alguien más se
incorporara al equipo de administradores. Más que nada, no somos eternos y
habría que pensar en gente nueva que vaya tomando el relevo para dar
continuidad a esta lista. Con el poco tráfico que hay en la lista, no
requiere dedicar casi tiempo.

Saludos,
Chema Cortés
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es


Re: [Python-es] Sqlalchemy

2016-10-13 Por tema Chema Cortes
El jue., 13 oct. 2016 a las 10:49, monoBOT (<monobot.s...@gmail.com>)
escribió:

> Fuera del tiesto pero el ORM de django permite ajustar los modelos para
> adaptarse a tablas existentes ... es tedioso pero una vez lo tienes
> funcionando va bastante bien, aunque tiene las limitaciones típicas de un
> ORM.
>

Es posible hacer que un ORM utilice las tablas existentes (en djando ORM,
managed=False ). Pero si necesitas sincronizar tablas, por ejemplo para que
los usuarios de la web sean los mismos que los que usan otras aplicaciones,
entonces tienes que entrar a saco a programar la base de datos. El ORM no
es una ayuda para este caso.



> Pero la solución de ir SQL a pelo siempre la tienes disponible
>
> El 13 de octubre de 2016, 8:38, Chema Cortes <pych...@gmail.com> escribió:
>
>
>
> El mar., 11 oct. 2016 a las 20:52, GEIS AUGUSTO GARCIA ROMERO (<
> geist...@gmail.com>) escribió:
>
> Gracias Men, resulta que estoy trabajando con flask y lo conecte a oracle
> y todo bien, pero al tratar de usar Sqlalchemy para hacer un select a
> alguna tabla nada de lo que intento funciona, y es que todo lo que
> encuentro habla es desde crear la base de datos y las tablas, insertar y
> actualizar pero nada que hable de un select cuando ya se tiene la base de
> datos.
>
>
> No sé si habrá cambiado mucho, pero dejé de usar sqlalchemy hace tiempo
> precisamente por este motivo. Todas las tablas necesitan clave única bien
> definida y relacionada, y sobre todo no usar tipos de datos incompatibles
> con otros gestores BD. Creo recordar que sqlalchemy tenía alguna forma de
> importar un esquema de base de datos que iba más o menos bién, pero siempre
> era conveniente dejar que fuera él quien creara las tablas a su gusto.
> También era posible forzar tú mismo las consultas SQL a hacer, pero le
> quita sentido al uso de un ORM.
>
> En resumen, lo que aprendí es que no hay que usar un ORM para explotar
> datos de un sistema que no se haya creado con el mismo ORM. ...Y diría que
> es un problema general de los ORMs.
>
> En mi caso, opté por crearme mis propias clases, tirar de DB-API y no
> salirme de la compatibilidad de tipos de datos que daba JDBC (usando
> jython).
>
>
>
> 2016-10-11 12:17 GMT-05:00 Charly Román <chack14r...@gmail.com>:
>
> ¿Cuál es tu duda o comentario?
>
> Charly Román
> Software Developer
> http://croman.mx
>
> El 11 de octubre de 2016, 10:00, GEIS AUGUSTO GARCIA ROMERO <
> geist...@gmail.com> escribió:
>
> Muy Buenos Días Comunidad, alguien que halla trabajdo Sqlalchemy con
> Oracle.
>
> --
> "Es mejor luchar y haber perdido que quedarse con la duda de lo que pudo
> haber sido." Geis. Ingeniero en Sistemas y Tecnologo en Electronica e
> Instrumentacion
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
>
> --
> "Es mejor luchar y haber perdido que quedarse con la duda de lo que pudo
> haber sido." Geis. Ingeniero en Sistemas y Tecnologo en Electronica e
> Instrumentacion
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://blog.ch3m4.org <http://ch3m4.org/blog>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
>
> --
> *monoBOT*
> Visite mi sitio(Visit my site): monobotsoft.es/blog/
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org <http://ch3m4.org/blog>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Sqlalchemy

2016-10-13 Por tema Chema Cortes
El mar., 11 oct. 2016 a las 20:52, GEIS AUGUSTO GARCIA ROMERO (<
geist...@gmail.com>) escribió:

> Gracias Men, resulta que estoy trabajando con flask y lo conecte a oracle
> y todo bien, pero al tratar de usar Sqlalchemy para hacer un select a
> alguna tabla nada de lo que intento funciona, y es que todo lo que
> encuentro habla es desde crear la base de datos y las tablas, insertar y
> actualizar pero nada que hable de un select cuando ya se tiene la base de
> datos.
>

No sé si habrá cambiado mucho, pero dejé de usar sqlalchemy hace tiempo
precisamente por este motivo. Todas las tablas necesitan clave única bien
definida y relacionada, y sobre todo no usar tipos de datos incompatibles
con otros gestores BD. Creo recordar que sqlalchemy tenía alguna forma de
importar un esquema de base de datos que iba más o menos bién, pero siempre
era conveniente dejar que fuera él quien creara las tablas a su gusto.
También era posible forzar tú mismo las consultas SQL a hacer, pero le
quita sentido al uso de un ORM.

En resumen, lo que aprendí es que no hay que usar un ORM para explotar
datos de un sistema que no se haya creado con el mismo ORM. ...Y diría que
es un problema general de los ORMs.

En mi caso, opté por crearme mis propias clases, tirar de DB-API y no
salirme de la compatibilidad de tipos de datos que daba JDBC (usando
jython).


>
> 2016-10-11 12:17 GMT-05:00 Charly Román :
>
> ¿Cuál es tu duda o comentario?
>
> Charly Román
> Software Developer
> http://croman.mx
>
> El 11 de octubre de 2016, 10:00, GEIS AUGUSTO GARCIA ROMERO <
> geist...@gmail.com> escribió:
>
> Muy Buenos Días Comunidad, alguien que halla trabajdo Sqlalchemy con
> Oracle.
>
> --
> "Es mejor luchar y haber perdido que quedarse con la duda de lo que pudo
> haber sido." Geis. Ingeniero en Sistemas y Tecnologo en Electronica e
> Instrumentacion
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
>
>
> --
> "Es mejor luchar y haber perdido que quedarse con la duda de lo que pudo
> haber sido." Geis. Ingeniero en Sistemas y Tecnologo en Electronica e
> Instrumentacion
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Documentación sobre AST

2016-10-06 Por tema Chema Cortes
El jue., 6 oct. 2016 a las 13:16, Kiko () escribió:

> Hola a todos.
>
> ¿Alguien conoce algún tutorial, documentación, capítulo de libro,... donde
> se muestre cómo trabajar con el módulo ast?
>
> Ya he localizado varios de ellos:
> -Docs oficiales
> -Green tree snakes
> -Capítulo 9 del Python Cookbook de Beazley y Jones
>
> Estoy pensando en algo más extenso y con ejemplos explicados haciendo
> referencia a la gramática de las expresiones, declaraciones,...
>

Es bastante duro manejar en crudo los árboles sintácticos más allá de
realizar algunas pruebas de concepto. Te recomiendo algún sistema de
"macros" como Macropy[1]. Está desarrollado por Li Haoyi, todo un figura en
metaprogramación.

[1]: https://github.com/lihaoyi/macropy


>
> Gracias.
>
> Saludos.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] [JOB] Reglas para la publicación de ofertas de trabajo

2016-10-04 Por tema Chema Cortes
¡Hola a todos!

Me parece correcto, sobre todo el requerir que las ofertas sean concretas,
nada de "reclutadores de cerebros".

Cosas que añadiría:

- Localización del puesto de trabajo, sobre todo para empresas con varias
sedes, y si se contempla la modalidad de teletrabajo.

- Las respuestas y consultas sobre las ofertas de trabajo no deben enviarse
a la lista, sino directamente al contacto especificado en la oferta.


Saludos.



El mar., 4 oct. 2016 a las 16:15, Juan Luis Cano ()
escribió:

> ¡Hola pythonistas!
>
> Estas son unas directrices que hemos preparado para recibir ofertas de
> empleo a través de nuestras listas de correo.
>
> En primer lugar, queremos dejar claro que hay sitios específicos para
> publicar ofertas de empleo del sector tecnológico, y que nos consta que
> funcionan bastante bien. Personalmente, os podemos recomendar:
>
> - Betabeers , por supuesto. Obligada cita
> mensual. Algunos de nosotros hemos encontrado buenos trabajos gracias a
> ellos :). Precio más que razonable para el resultado obtenido.
>
> - Jobandtalent , empresa
> española, con un enfoque muy interesante de "match" entre empresa y
> empleado.
>
> - Linkedin , el gigante del
> empleo. Todo el mundo está en Linkedin.
>
> - StackOverflow Careers , el alfa y el
> omega del desarrollador. Cada vez se ven más ofertas de trabajo para
> empresas españolas.
>
> Dicho esto, si además te apetece publicar una oferta de empleo en nuestra
> lista, hemos pensado en aplicar una serie de reglas de obligado
> cumplimiento para todos (nosotros los primeros).
>
> - El asunto del correo que envíes debe comenzar por [JOB].
>
> Con esta medida queremos asegurarnos de que, todo aquel que no está
> interesado en ofertas de empleo, puede simplemente filtrar este correo.
>
> - La oferta debe incluir la descripción de la empresa, con enlaces reales
> a la misma. Idealmente, a su web corporativa, perfil en Linkedin o
> similar. Si se incluye enlace a la sección de "empleos" de la web,
> perfecto.
>
> Con esta medida queremos evitar el efecto "empresa multinacional líder en
> el sector y en plena expansión busca personas para...". Seas una startup,
> una PYME, una consultora o una multinacional, dinos quién eres.
>
> - La oferta debe incluir descripción precisa del puesto de trabajo, con
> las responsabilidades a adquirir y el perfil concreto deseado, no un
> listado de "buzzwords" sacadas de Linkedin. Si buscas ninjas/rockstars
> expertos en PHP, Python, Ruby, Java, C#, Angular, NodeJS, Bash, Photoshop,
> Illustrator, CSS, iOS, Android, BigData, AWS, Azure y configuración de
> redes... no nos interesa.
>
> Con esta medida queremos evitar charcuteras que recluten ingenieros al
> peso para venderlos a terceros como "expertos en...".
>
> - La oferta debe incluir sueldo, o al menos rango salarial (con sentido,
> nada de "entre 20K y 60K").
>
> Con esta medida queremos evitar el efecto "sueldo según valía", propio de
> empresas que entienden el mercado laboral como un regateo de mercadillo. Si
> sabes lo que buscas, y cuánto dinero puedes emplear en contratar a una
> persona para ese puesto, puedes publicar perfectamente el rango que ofreces.
>
> Como corolario a este último punto, si lo que estás buscando es un freelance
> para un trabajo concreto, preferimos que publiques un medio de contacto
> para que las personas interesadas te pueden enviar un presupuesto
> personalizado. Con esto pretendemos evitar el "efecto Elance", en el que el
> trabajo se oferta mediante subasta inversa, y se la queda el freelance más
> barato.
>
> Con todas estas reglas te habrás ganado automáticamente el respeto de la
> comunidad, y por tanto nosotros nos comprometemos a cambio de tu buen hacer
> a respetar tu elección de nomenclatura y bandas salariales.
>
> Para terminar, os ponemos algunos ejemplos de cómo consideramos que se
> debe publicar una oferta de empleo:
>
> - Oferta para desarrollador Java en Otogami
> , la niña bonita de los
> Camaradas del Metal, David Bonilla  y
> Jeroclo , el Espartano. Puesto ya cubierto.
>
> - Oferta para desarrollador frontend en Smartvel
> , donde
> es CTO el Pythonista multitarea Carlos Hernando (aka Chernie)
> 
>
> - Oferta para arquitecto de software en Ahorro.net
> , startup
> madrileña referencia para los ahorradores.
>
> - Ofertas para formador en Pronoide ,
> ¿os apetece haceros formadores? :)
>
> Esto es todo, por ahora. Esperamos que os sirva de ayuda y, entre todos,
> construyamos una industria tecnológica saludable :)
>
> ¡Saludos!
> 

Re: [Python-es] De paquetes y de huevos

2016-09-30 Por tema Chema Cortes
El vie., 30 sept. 2016 a las 12:29, Antonio Beamud Montero (<
antonio.bea...@gmail.com>) escribió:

> El 30/09/16 a las 11:49, Chema Cortes escribió:
>
> El vie., 30 sept. 2016 a las 10:53, Antonio Beamud Montero (<
> antonio.bea...@gmail.com>) escribió:
>
>
>>
>> Para eso necesitaría meter las mismas versiones que llevan las distintas
>> distribuciones, y poder crear un virtualenv ubuntu12.04 (por ejemplo),
>> instalando ahí con pip las mismas versiones que se instalan via apt-get en
>> ubuntu 12.04...
>>
>>
> Si entiendo bien, pretendes mantener versiones distintas según las
> distintas distribuciones de linux. Es completamente una locura. Si ya es
> complicado mantener versiones para distintas plataformas, ampliar el
> espectro a todas las posibles configuraciones es imposible. Por lo menos
> tendrás versiones distintas para python2 y python3, además de versiones
> diferentes de otras librerías principales (gtk2/gtk3, qt4/qt5,
> mysql/mariadb,).
>
>
> Si, bueno, no para todas las distros de linux, solo 2 o 3, realmente poder
> ir probando posibles migraciones.
> Tengo experiencia en la pesadilla que supone mantener para varias distros,
> pero es impepinable por ahora...
>
>
>
> Este problema es común a todos los lenguajes de programación y la solución
> es docker. No sé porqué lo has descartado tan pronto. Si no te parece
> liviano coreOS o rancherOS, es que no tenemos el mismo concepto de
> "liviano". Hoy en día, incluso se puede asociar la ejecución de un
> contendor docker con la carga de un módulo python, similar a lo que sería
> la carga de una librería dinámica, pero sin los problemas de dependencias
> con librerías del sistema. Por ahí va el futuro de python y de muchos otros
> lenguajes, aunque no sabría decirte si será docker, rkt u otro mejor.
>
>
> Descarté máquinas virtuales y docker en su día, porque tengo mucha
> dependencia de la GPU (a través de opencl). En máquinas virtuales he tenido
> muchos problemas cuando he probado (todo muy experimental), y medir los
> tiempos necesito que todo sea cuando más cercano al metal mejor... Repecto
> a docker, lo desestime por la experiencia con las máquinas virtuales...
>
>
Aunque a veces van asociados, docker no es una máquina virtual. La
confusión viene de que docker corre nativamente en linux (de 64 bits), por
lo que se necesitan máquinas virtuales en mac y windows. Pero si trabajas
en linux, no necesitas virtualizar nada, tan sólo lanzar docker como
servicio (y con rkt ni eso).

Cuando usas virtualenv, juegas con el PATH del entorno para posicionar unas
versiones de módulos sobre otras; con docker, juegas con el sistema de
ficheros BTRFS para posicionar unos directorios por encima de otros. Si
buscas algo más cercano al metal, docker parece mejor preparado que
virtualenv.


>
> La conclusión a la que he llegado, es que lo más sencillo en mi caso
> sería, poder generar un virtualenv, con una plantilla de los paquetes que
> incluye una distribución en concreta, meter mi soft, lanzar los tests y ver
> donde da problemas. Si puedo adaptarlo para que funcione sin problemas en
> varias distros sin necesidades especiales, mejor, e intentar generar
> paquetes para esa distro... El único coñazo es tener que instalar la distro
> (o buscar el listado de paquetes en la web), sacar los de python de los que
> dependo, sus versiones y crear el virtualenv con él... Sino darle la
> oportunidad a docker, para distribuirlo...
>

Mi recomendación es que te lo hagas tú. Instala distintas distribuciones,
instalas las dependencias que necesitas y genera el listado de
dependencias. Con conda, es bastante sencillo generar los listados de
dependencias y clonar entornos virtuales.


>
> Un saludo.
>
>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://blog.ch3m4.org <http://ch3m4.org/blog>
>
>
> ___
> Python-es mailing 
> listPython-es@python.orghttps://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org <http://ch3m4.org/blog>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] De paquetes y de huevos

2016-09-30 Por tema Chema Cortes
El vie., 30 sept. 2016 a las 10:53, Antonio Beamud Montero (<
antonio.bea...@gmail.com>) escribió:

>
> Intento evitar todo eso, mezclar paquetes/librerías instaladas via apt-get
> y las instaladas via pip.
> Imagina que la distribución instala via apt-get un paquete paqX, que
> depende de la librería >=lib1.3. Tu ahora instalas tu egg que depende de la
> librería lib2.9 (que hace cambios en el api de la lib), esa aplicación paqX
> te puede empezar a dar problemas, porque resuelve dependencias contra la
> lib2.9 (incluso peores casos donde no se especifica en los requerimientos
> que versión necesita para funcionar).
> Esto es precisamente lo que intento evitar, y lo que me gustaría es poder
> simular todas las dependencias que tienen una distribución, y poder probar
> paquetes que no están en la distribución para ver que resuelve bien
> dependencias y no genera conflictos.
>
> No hay ningún drama, la idea final es que intento no mezclar paquetes
> instalados con apt-get y con pip, porque al final, lo que quiero es poder
> crear paquetes para las distribuciones que se instalen via apt-get, pero
> antes quiero probar todo en un entorno ligero via virtualenv. (no se si me
> explico).
>
> Para eso necesitaría meter las mismas versiones que llevan las distintas
> distribuciones, y poder crear un virtualenv ubuntu12.04 (por ejemplo),
> instalando ahí con pip las mismas versiones que se instalan via apt-get en
> ubuntu 12.04...
>
>
Si entiendo bien, pretendes mantener versiones distintas según las
distintas distribuciones de linux. Es completamente una locura. Si ya es
complicado mantener versiones para distintas plataformas, ampliar el
espectro a todas las posibles configuraciones es imposible. Por lo menos
tendrás versiones distintas para python2 y python3, además de versiones
diferentes de otras librerías principales (gtk2/gtk3, qt4/qt5,
mysql/mariadb,).

Este problema es común a todos los lenguajes de programación y la solución
es docker. No sé porqué lo has descartado tan pronto. Si no te parece
liviano coreOS o rancherOS, es que no tenemos el mismo concepto de
"liviano". Hoy en día, incluso se puede asociar la ejecución de un
contendor docker con la carga de un módulo python, similar a lo que sería
la carga de una librería dinámica, pero sin los problemas de dependencias
con librerías del sistema. Por ahí va el futuro de python y de muchos otros
lenguajes, aunque no sabría decirte si será docker, rkt u otro mejor.
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Consulta modulo time

2016-09-28 Por tema Chema Cortes
El mié., 28 sept. 2016 a las 19:24, David Samaniego ()
escribió:

> Gente buenas tardes, alguien conoce si el modulo time.time() tiene alguna
> forma de devolver el tiempo en segundos y con una resolución de
> nanosegundos, por ejemplo en esta forma:
>
> 1474598062.006464887
>
> Con python lo máximo que muestra es en microsegundos:
>
> 1475078312.658745
>
> Alguna idea?
>
>
No te fíes, esa es una rpresentación de un número real. Prueba a
convertirlo a entero y verás más decimales:

>>  int(time.time()*10**9)

1475086265855814656






> Gracias de antemano.
>
> Saludos
> Sebastián
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org 
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Servidores web en python

2016-09-26 Por tema Chema Cortes
El lun., 26 sept. 2016 a las 11:27, Antonio Beamud Montero (<
antonio.bea...@gmail.com>) escribió:

> El 25/09/16 a las 13:51, Chema Cortes escribió:
> > Se puede dar un buen servicio con apache, pero conseguir que sea
> > escalable es complicado. Mientras, nginx se adapta muy bien a los
> > incrementos de demandas, sobre todo si se trata de enviar streams de
> > datos.
> Hola Chema, ¿en que casos crees que apache no escala bien? Hasta ahora,
> los casos que me he encontrado yo, no eran problema de apache, sin el
> backend detrás de él.
>

Creo que @lasizoillo ha contestado a la pregunta.

La respuesta corta es que apache va bien para ejecuciones cortas, mientras
que nginx es más adecuado para ejecuciones largas.

Yo especificafa el caso de envío de streams, que puede ser para enviar
vídeo, pero que también puede verse como el típico chat o red social tipo
twitter o de visualización de cotizaciones de bolsa. Puedes
superdimensionar un sistema de nodos apache para que tenga workers
suficientes que den respuesta a todas las conexiones que reciba. Por
supuesto, por culpa de la programación de los backends, estos workers
degeneran y empiezan a sufrir bloqueos y a quedarse sin memoria. Se
configuran para que los workers se "autosuiciden" al cabo de un número de
conexiones (MaxConnectionsPerChild) y liberen los recursos que quedaban
bloqueados. Pero ¿qué pasa cuando dedicas una conexión a un stream que
requiere de una conexión más larga? ¿o como dice lasiozillo, si estas
sufriendo una situación similar a un ataque slowloris porque las conexiones
de tu cliente son excesivamente lentas? El worker degenera sin remedio, lo
que va dejando pocos workers disponibles en el pool para nuevas conexiones,
lo que reduce la capacidad de respuesta del servidor. Hay muy pocos que
programen conscientemente de los problemas que tendrán sus programas en
ejecuciones largas.

Con un servidor asíncrono, como nginx, puedes dedicar una conexión a cada
cliente y crear "continuaciones" (corrutinas) que son bastante livianas y
cuyo proceso se ajusta a la capacidad de proceso que tenga tu máquina,
asegurando su escalabilidad. Se puede decir que nginx puede responder a
cualquier número de peticiones concurrentes que se le haga, aunque sea muy
lentamente. Basta aumentar el número de nodos para mejorar la respuesta. Al
igual que apache, también una mala programación puede tumbar el servidor
nginx. Pero si realizas una buena programación asíncrona, que evite
bloqueos y use operaciones atómicas (CAS), se consigue una ejecución
bastante pacífica de un gran número de procesos simultáneos.

-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://blog.ch3m4.org <http://ch3m4.org/blog>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Servidores web en python

2016-09-25 Por tema Chema Cortes
El sáb., 24 sept. 2016 a las 17:54, ALEJANDRO ZAPIOLA ()
escribió:

> Perdón se mando antes de lo esperado el correo anterior.
>
> Maximiliano creo que mas que comparar con apache o nginx podrias comparar
> con Node o Django y las ventajas sobre ellos. Este Tornado trae una manera
> de trabajar parecida a Nodejs y es muy interesante y recomendable.
>
> @chema cortez no entendi esta parte: "supongo que si conoces tanto nginx
> sabrás las ventajas que tiene para crear aplicaciones responsiva"
> ¿Cuando te referis a responsiva es adaptar a distintos dispositivo o
> porque?
>
>
Hay cierta confusión generalizada con el concepto de "responsivo". Por un
lado está el "diseño responsivo", que delega en la parte cliente el ajuste
de sus funcionalidades al tamaño de la pantalla. Por otro lado tendríamos
los "diseños adaptativos", donde el servidor envía distintas páginas según
las características del dispositivo (algo que está muy penalizado por los
buscadores).

Pero cuando pienso en "aplicaciones responsivas" lo hago según se entiende
en el "Manifiesto Reactivo"[1], "centradas en ofrecer tiempos de respuesta
rápidos y consistentes, estableciendo límites superiores fiables para
conseguir una calidad de servicio constante".

Se puede dar un buen servicio con apache, pero conseguir que sea escalable
es complicado. Mientras, nginx se adapta muy bien a los incrementos de
demandas, sobre todo si se trata de enviar streams de datos.

[1]: http://www.reactivemanifesto.org/



> @Horacio Mayo con mod_wsgi que es un modulo de apache podes correr
> proyectos en django.
>
> @Alvaro Manrique, yo uso wsgi con un proyecto en producción ya sea con un
> Web Services Rest y distintos Sistema Web y anda excelente, te lo
> recomiendo porque te estas perdiendo una excelente experiencia ;) .
>
> Saludos Cordiales
>
> El 24 de septiembre de 2016, 12:44, ALEJANDRO ZAPIOLA
> escribió:
>
>> Hola gente,
>>
>> Maximiliano creo que mas
>>
>> El 24 de septiembre de 2016, 12:04, Alvaro Manrique<
>> sanreikaj.fo...@gmail.com> escribió:
>>
>>> Para usar Apache con python se usa mod_wsgi, vi que un compañero
>>> recomienda mod_python pero tengo entendido que está descontinuado, o me
>>> estoy perdiendo de algo?
>>>
>>> Realmente es lo más común para Django usar Apache con el mod que te digo.
>>>
>>> --
>>> Alvaro Manrique
>>> Programador
>>>
>>> El sept. 24, 2016 7:31 AM, "Horacio Mayo"  escribió:
>>>
 Aca consulto algo ¿Apache soporta Django?

 Recuerdo en una PyconEs que no lo recomendaban, pero era una charla de
 hace como tres años.

 On Sep 22, 2016 11:10 PM, "miguel zamora m."  wrote:

> Puedes hacer que tu apache corra python y luego puedes ejecutar
> cualquier framework web escrito en python flask es muy bueno para aprender
> despues todos son la misma base
>
> mod python en apache2
>
>
> https://tresubresdobles.wordpress.com/2011/04/06/habilitar-python-para-apache-en-ubuntu/
>
> Yo lo he probado y funciona bien debes configuras los modulos de
> apache correctamente y probar
>
> tipos de proyectos que quieras usarlo depende de muchos factores.
>
>
>
>
>
>
> El 22 de septiembre de 2016, 21:35, Maximiliano Zapata Marín <
> mzap...@openmailbox.org> escribió:
>
>> Hola compas que tal?
>>
>> Me estoy iniciando en la programación con python, tengo experiencia
>> instalando y administrando ambientes web con NGINX y Apache (Nginx me 
>> gusta
>> mucho) y revisando entre la web me encontré con un servidor web escrito 
>> en
>> python llamado Tornado. ¿Alguien tiene alguna experiencia que contar con
>> el? ¿Para que tipo de proyecto lo recomendarían? ¿Se puede comparar con
>> Apache o Nginx?
>>
>> Gracias!
>>
>> --
>> Maximiliano Zapata Marín
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
>
>
> --
> Miguel Zamora M.
> Programador en Computacion e Informatica
> 08-1351249
> mzmp...@gmail.com
> Santiago-Chile
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
 ___
 Python-es mailing list
 Python-es@python.org
 https://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/


>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: 

Re: [Python-es] Servidores web en python

2016-09-23 Por tema Chema Cortes
El vie., 23 sept. 2016 a las 3:51, Maximiliano Zapata Marín (<
mzap...@openmailbox.org>) escribió:

> Hola compas que tal?
>
> Me estoy iniciando en la programación con python, tengo experiencia
> instalando y administrando ambientes web con NGINX y Apache (Nginx me
> gusta mucho) y revisando entre la web me encontré con un servidor web
> escrito en python llamado Tornado. ¿Alguien tiene alguna experiencia que
> contar con el? ¿Para que tipo de proyecto lo recomendarían? ¿Se puede
> comparar con Apache o Nginx?
>
>
Tornado es un framework web bastante usado para programación asíncrona, muy
similar al modo en que funciona asíncronamente nginx. Entre otros sitios
donde se usa, quizás el más habitual sea con Jupyter-notebook, a veces más
conocido por ipython, uno de los "cores" de ejecución posibles que tiene,
pero que tiene muchísimos más. Al ser jupyter una herramienta tan común,
casi se puede asegurar que todo el mundo tiene tornado instalado en sus
equipos sin saberlo.

No es cosa de contarte cómo trabajar con concurrencia, pero supongo que si
conoces tanto nginx sabrás las ventajas que tiene para crear aplicaciones
responsivas. Al igual que otros lenguajes, hace ya tiempo que python está
introduciendo el asincronismo mediante futures, asyncio y cambios en la
sintáxis. Si ves la documentación de tornado, te explica modos de
combinarlo con el módulo asyncio que lo hacen idóneo para su uso en
backends.

Pero si buscas otros usos más tradicionales para desarrollo web, mírate el
wsgi, una especie de API genérica que permite desacoplar tu aplicación del
servidor web que la vaya a ejecutar. Siguiendo esta API, tu aplicación web,
usando el framework que quieras (eg: tornado, flask, django,...) podrá
ejecutarse después en nginx o en apache casi sin cambios.



> Gracias!
>
> --
> Maximiliano Zapata Marín
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Equivalente en fastcgi

2016-09-15 Por tema Chema Cortes
El mié., 14 sept. 2016 a las 19:07, Juan M. Puertas ()
escribió:

> ​Hola amigos.
> Ya que ahora no se pueden hacer CGIs en Python como vimos en temas
> anteriores. Por lo que he leído aquí:
> http://unaaldia.hispasec.com/2016/07/colega-donde-esta-mi-proxy.html esto
> no afecta a fastcgi.
> Pero no encuentro documentación sobre cómo hacer las cosas con fastcgi,
> por ejemplo me gustaría saber cual es el equivalente para recibir
> argumentos enviados desde HTML. En CGI es así:
>
> form = cgi.FieldStorage()
>
> ¿Cómo se hace con fastcgi?
> Gracias :-)
>
> ​
>

Lo recomendable sería usar WSGI para desacoplar la aplicación web de la
infraestructura que vaya a dar el servicio. Con WSGI puedes usar fastcgi
entre otras alternativas. El interface WSGI se implementa como un
"callable" con dos argumentos: un diccionario similar al usado en CGI y un
callback (reponse) para las cabeceras de respuesta. Como retorno, se
devuelve un iterable que genera el "body" de la página.

Así de corrido, podría ser similar a ésto:

import cgi
def app(environ, start_response):form =
cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)

response_body = [' ... ']


response_headers = [
('Content-Type', 'text/plain'),
('Content-Length', str(len(response_body)))
]

start_response('200 OK', response_headers)
for line in response_body:

yield line

if __name__ == '__main__':
from flup.server.fcgi import WSGIServer
WSGIServer(app).run()

En la documentación oficial tienes un howto con un apartado que te explica
cómo ejecutar una aplicación wsgi con fastcgi:
https://docs.python.org/3.5/howto/webservers.html#fastcgi-and-scgi


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Pulso por segundo (pps)

2016-09-01 Por tema Chema Cortes
El mié., 31 ago. 2016 a las 9:40, Jordi Funollet ()
escribió:

> Si lees la señal PPS (la cual te dice con mucha precisión cuando empieza
> el segundo) y lanzas un script en Python pierdes todo lo ganado: la
> latencia que te va a introducir el script Python va a ser mucho mayor
> que la precisión conseguida con PPS.
>
> Creo que el uso más habitual de la señal PPS es tener un tiempo muy
> preciso en el sistema operativo, via NTP. No te valdria eso? Cual es el
> problema que quieres resolver?
>

Desde el desconocimiento concreto de cómo funciona una rasp3, bien
programada no debería sufrir ningún problemas de latencia para registrar
lecturas del gps cada segundo (a no ser que lo quieras para guiar misiles).

Dedicando un hilo de ejecución al registro de la señal gps y otro al
filtrado de los datos registrados, aún te sobrarían 3 cores para hacer lo
que quieras. Lo que desconozco es cómo registrar la señal gps (y que creo
que es lo que interesaba a David).



>
> --
> Jordi Funollet Pujol
> http://www.linkedin.com/in/jordifunollet
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Ayuda con QtCore.QThread

2016-07-27 Por tema Chema Cortes
El mar., 26 jul. 2016 a las 0:17, PeonBlanco83 ()
escribió:

> Hola lista espero y todos se encuentren bien.
>
> necesito un poco de ayuda no puedo resolver como detener el thread.
>
> tengo el siguiente código de una interface (principal).
>
> def pushButton5(self):
>
>   self.worker = HILOS() (inicio el thread (HILOS))
>
>   self.worker.start()
>
> def hilos_stop(self):
>
>   self.worker.terminate() (detener el thread (HILOS))
>
>
> dentro de la clase HILOS mando llamar una funcion(MACHANDO(self)).
>
> class HILOS(QtCore.QThread):
>
> #to_log = pyqtSignal(TAR)
> def __init__(self):
> super(HILOS, self).__init__()
> self.daemon=True
> #self.start()
>
> def run(self):
> MACHANDO(self)
>
> dentro de la función MACHANDO(self):
>
> def MACHANDO(self):
>
> for z1 in range(10):
> *ejecuto consultas y escrituras a sqlite*
> time.sleep(2)
> PRINCIPAL.hilos_stop(self)< después de terminar mis consultas quiero 
> detenerlo o destruirlo ya que la informacion la muestro en un tableview
>
> y en ese paso es donde no encuentro como 
> hacerlo
>
>
> espero y me puedan ayudar.
>
>
Con este código no me queda nada claro qué es código operativo y qué son
meras indicaciones cuando pones HILOS, PRINCIPAL, MACHADO,...

Si lo interpreto bien, quieres que el padre "termine" el hilo hijo. Pero es
algo que no hace falta forzar, basta que el con que el hilo termine.

Si quieres que el PRINCIPAL cierre activamente el hilo hijo, crea algún
tipo de aviso para que lo vea el PRINCIPAL. Mi método favorito es mediante
una cola 'deque' por la que los hilos mandarían avisos al hilo principal.
Pero tienes otras alternativas como signals, semáforos, etc.




>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Cerrar sesiones serversocket

2016-07-13 Por tema Chema Cortes
El mar., 12 jul. 2016 a las 23:12, David Samaniego ()
escribió:

> Buenas tardes.
>
> Tengo escrito en python una aplicación cliente servidor que esta
> implementado con sockets y SocketServer UDP.
>
> La aplicación cliente envía un paquete de datos cada segundo, el servidor
> lo recibe, cambia una información y la devuelve al cliente.
>
> Todo funciona normal, pero el problema es que el servidor se encuentra
> detrás de un firewall; tiene las reglas de entrada habilitadas y todo pero
> de alguna manera empieza a dejar conexiones (sesiones) abiertas y conforme
> sigue corriendo el proceso, las sesiones van aumentando de manera rápida y
> hace que el firewall empiece a trabajar más de la cuenta.
>
> La pregunta es: como podría hacer para que en cada respuesta no quede la
> sesión abierta en el firewall?
>
> Mi agradecimiento de antemano ante cualquier tipo de ayuda o idea.
>
>
Con lo que cuentas poco se puede saber. Supongo que en el cliente cierras
el socket, bien explícitamente con .close(), bien dentro de un gestor de
contexto (sentencia 'with'). Fuerza el cierre inmediato de la conexión con
un .shutdown() antes de cerrar el socket.





> Saludos
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Oferta de empleo

2016-07-01 Por tema Chema Cortes
El vie., 1 jul. 2016 a las 11:39, Juan Luis Cano ()
escribió:

> Chema, ¿se podrían incluir esas normas, así como unos requisitos
> **mínimos** para poner ofertas de empleo, en la página principal de la
> lista? O sea: que tengan cuanta más información mejor, porque si no sucede
> como ha pasado aquí, que no se especifica ni de qué es el puesto, ni qué
> tecnologías se usan, ni si se considera trabajo remoto, ni si se
> proporciona visado, ni cuál es el salario, ni cuáles son las condiciones.
> 
>

¿Página principal? Tenemos puesto un enlace a un wiki que no sabría decirte
quiénes lo actualizan. Habría que mirarlo.

Por otro lado, creo recordar que una vez hablamos aquí de los "requisitos
mínimos" para las ofertas de trabajo y no llegamos a un acuerdo. Desde
entonces estoy esperando a que se ponga en marcha la sección de la web de
Python-ES de ofertas de empleo. Mientras tanto, habrás notado que te voy
redirigiendo a tu cuenta de presidente2016 algunas ofertas que me van
llegando para que decidas cómo publicitarlas entre los socios :P.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Oferta de empleo

2016-07-01 Por tema Chema Cortes


Unas aclaraciones:

Si bien esta lista no tiene una temática claramente definida y todo lo
relativo a python es siempre bienvenido, las ofertas de empleo se han
venido considerando hasta ahora como "offtopic".

Los mensajes que anuncien ofertas de trabajo deberían dejar claro que se
trata de un "offtopic" (normalmente, con un "[OT]" en el asunto) y derivar
a los interesados a contactar a través de otros medios, ya sea por correo
privado o a través de algún servicio de empleo "online", y evitar molestias
al resto de suscritores.

Como moderador, agradecería que se sigan respetando la normas de
convivencia y de netiqueta como siempre se ha hecho hasta ahora en esta
lista.

-- Chema Cortés



El vie., 1 jul. 2016 a las 7:39, Maikel Enrique Pernía Matos (<
perniama...@infomed.sld.cu>) escribió:

> Alvaro:
>
> Interesante tu email, ¿podrías ofrecer más detalles, pues me interesa la
> oferta?
>
> Saludos
> Maikel
>
>
> El jue, 30-06-2016 a las 09:23 -0400, Alvaro Manrique escribió:
> > Buenos Días;
> >
> >
> > Reconocida empresa de Rep. Dominicana solicita programador tiempo
> > completo, in house para desarrollos web.
> >
> >
> > Interesados escribirme al privado.
> >
> >
> > Saludos
> >
> > --
> > Alvaro Manrique
> > Programador
> > ---
> > ___
> > Python-es mailing list
> > Python-es@python.org
> > https://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
>
>
>
> --
> Este mensaje le ha llegado mediante el servicio de correo electronico que
> ofrece Infomed para respaldar el cumplimiento de las misiones del Sistema
> Nacional de Salud. La persona que envia este correo asume el compromiso de
> usar el servicio a tales fines y cumplir con las regulaciones establecidas
>
> Infomed: http://www.sld.cu/
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Mayusculas y minusculas en una secuencia

2016-05-24 Por tema Chema Cortes
El mar., 24 may. 2016 a las 3:28, alito () escribió:

> Hola a todos:
>
> Tengo un pequeño codigo que no se como hacer que sea iterativo, yo se
> que para ustedes es fácil pero para mi se me ha complicado un poco.
>
> Quiero convertir a mayusculas una region determinada de una secuencia.
> La region esta en la primera linea y la region de la secuencia que
> quiero cambiar esta en la segunda linea.
>
> Logro que lea la region y posteriormente cambie a mayusculas la region,
> pero cuando son varias regiones me da por separado las secuencias y no
> en la misma secuencia.
>
>
Cuesta entender lo que quieres si no aclaras mejor los términos que usas.

Cuando te refieres a "secuencias", mejor que digas "cadenas de caracteres"
o, directamente, "strings". Las "secuencias" suelen ser algo similar a
listas que se procesan de modo secuencial.

Por lo que se ve, en la primera línea tienes parejas de números que
delimitan las regiones que quieres cambiar, mientras que en la segunda
estaría la cadena a cambiar.



> Mi código esta asi:
>
>  for line in x:
>
> inp = open("archivo", "r")
>
>  x = inp.readlines()
>  l1 = x[0].strip().split(",")
>  l2 = x[1].strip()
>  for j in range(1,len(l1)-1):
>  reg = l1[j].split("-")
>  reg1 = int(reg[0])
>  reg2 = int(reg[1])
>  c1 = l2[:(reg1-1)] + l2[(reg1-1):reg2].upper() + l2[(reg2):]
>  print str(reg1) + " - " + str(reg2)
>  print c1
>
>
Lo que no entiendo es qué era 'x' antes de entrar en el bucle for, que
luego cambias dentro del bucle. Algo está mal en este código.

Pero estudiando el código, guardas la línea a cambiar en 'l2' y usas 'c1'
como espacio temporal donde cambiar una región a mayúsculas. Si lo que
quieres es cambiar varias regiones, basta con que uses 'l2' en lugar de
'c1', de modo que en cada iteración se irán cambiando a mayúsculas cada una
de las regiones. Basta imprimir 'l2' al final del bucle.



> Este es un ejemplo de un archivo sin que se haya convertido a mayusculas:
>
> #region 1-15, 17-20, 30-45
>
>
> estaeslasecuenciaquemegustariaqueestuvieraenmayusculascadavezqueelprogramaencuentrelasregionesindicadas
>
>
> Este es un ejemplo de como me gustaria que quedara el archivo una vez
> que se corra el programa:
>
> #region 1-15, 17-20, 30-75
>
>
> ESTAESLASECUENcIAQUemegustarIAQUEESTUVIERAENMAYUSCULASCADAVEZQUEELPROGRAMAencuentrelasregionesindicadas
>
> Agradezco su ayuda
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Paython trabaja en memoria?

2016-05-12 Por tema Chema Cortes
El jue., 12 may. 2016 a las 21:57, Francesc Alted (<fal...@gmail.com>)
escribió:

> 2016-05-12 18:10 GMT+02:00 Chema Cortes <pych...@gmail.com>:
>
>> El jue., 12 may. 2016 a las 10:51, Javier Sangalo (<jjsang...@gmail.com>)
>> escribió:
>>
>>> muchas gracias!
>>> No tengo ningun problema en particular, tan solo que me hen hecho esa
>>> pregunta y no estaba seguro de que responder jeje.
>>>
>>
>> La diferencia entre trabajar con datos en memoria en lugar de en disco
>> supone un factor multiplicativo de x20. Con los nuevos discos SSD
>> mejora bastante bajando a unos x1. Vamos, que es muy recomendable tener
>> todos los datos en memoria, aunque sea como matrices dispersas (sparse
>> matrices), con el fin de operar más rápido sin pasar por disco. Tanto R
>> como numpy tienen técnicas para optimizar el espacio ocupado en memoria.
>>
>
> Supongo que estás citando números de latencia.  Aunque la cifra para
> discos duros es más o menos correcta, la que das para SSDs está bastante
> desfasada.  Actualmente puedes comprar SSDs SATA con latencias de entre 40
> y 100 us sin hacer un gran desenbolso.  Teniendo en cuenta que las
> latencias típicas de la RAM son de 0.1 us, la diferencia es ('solo') de
> entre 500x y 1000x.  Para los discos SSD de PCIe, las latencias son
> bastante más bajas, y ya se pueden ver tarjetas a buen precio con latencias
> de 2 y 10 us (e incluso de menos de 1 us, como las de
> http://www.violin-memory.com/, aunque estas ya son *muy* caras).
>
> Respecto a las diferencias en ancho de banda las cosas van bastante más
> ajustadas, y los discos SSD SATA que saturan el bus (~520 MB/s) son muy
> habituales, mientras que los SSD PCIe pueden llegar hasta 2 GB/s.  Compara
> esto con la RAM que va entre 10 GB/s a 20 GB/s (en ordenadores modernos).
> Añade compresión ultra-rápida para mejorar el ancho de banda de I/O y se ve
> claro que estamos asistiendo a una verdadera revolución que cambiará (está
> cambiando) la manera de guardar y efectuar cálculos con datos.
>
> Hablé justamente de esto en mi charla de PyData Madrid del mes pasado:
>
> https://speakerdeck.com/francescalted/new-computer-trends
>
> Francesc
>

Tienes toda la razón, me había quedado desfasado. Hasta ahora sólo
consideraba los SSDs para acelerar los sistemas críticos (eg: sistemas
oracles), pero con lo que dices ya empiezan a ser muy interesantes para
realizar cálculos masivos.

Incluso me puedo imaginar ya realizable un viejo deseo: que la persistencia
de los datos se independice de la vida de la aplicación. O visto de otro
modo, los datos no se mueven, se mueven las aplicaciones (pensando siempre
en programación funcional).



>
>
>>
>> Pero no siempre es la mejor opción. A veces tu datos vienen como streams
>> de datos desde algún servidor web o desde algún nodo de la base de datos.
>> En estos casos, los tiempos invertidos en traerte los datos pueden ser
>> mucho mayor que el que inviertes escribiendo/leyendo del disco local, con
>> lo que puedes usar el disco como almacenamiento secundario para liberar
>> RAM. Es en parte lo que hace Hadoop para poder procesar colecciones de
>> datos enormes (aunque luego venga Spark y pulverize los tiempos de proceso
>> cacheándolo todo en RAM).
>>
>> Una comparativa tecnológica e histórica de los tiempos de latencia:
>>
>> https://gist.github.com/jboner/2841832
>> http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html
>>
>>
>>
>>>
>>> El 12 de mayo de 2016, 10:40, Kiko <kikocorre...@gmail.com> escribió:
>>>
>>>>
>>>> El 12 de mayo de 2016, 10:23, Javier Sangalo <jjsang...@gmail.com>
>>>> escribió:
>>>>
>>>>> Buenos días,
>>>>>
>>>>> Me surge una duda, R trabaja en memoria con el inconveniente que tiene
>>>>> si no dispones de suficiente memoria ram, pero...y Python? trabaja de la
>>>>> misma forma?
>>>>>
>>>>>
>>>> Sí. R, Python y el resto del universo. Tendrás que encargarte de
>>>> gestionar la memoria. Hay formas más o menos eficientes de hacerlo. Si
>>>> describes un poco mejor tu problema relacionado con Python quizá te puedan
>>>> ofrecer mejor ayuda.
>>>>
>>>>
>>>>> Gracias!
>>>>>
>>>>> ___
>>>>> Python-es mailing list
>>>>> Python-es@python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>

Re: [Python-es] Paython trabaja en memoria?

2016-05-12 Por tema Chema Cortes
El jue., 12 may. 2016 a las 10:51, Javier Sangalo ()
escribió:

> muchas gracias!
> No tengo ningun problema en particular, tan solo que me hen hecho esa
> pregunta y no estaba seguro de que responder jeje.
>

La diferencia entre trabajar con datos en memoria en lugar de en disco
supone un factor multiplicativo de x20. Con los nuevos discos SSD
mejora bastante bajando a unos x1. Vamos, que es muy recomendable tener
todos los datos en memoria, aunque sea como matrices dispersas (sparse
matrices), con el fin de operar más rápido sin pasar por disco. Tanto R
como numpy tienen técnicas para optimizar el espacio ocupado en memoria.

Pero no siempre es la mejor opción. A veces tu datos vienen como streams de
datos desde algún servidor web o desde algún nodo de la base de datos. En
estos casos, los tiempos invertidos en traerte los datos pueden ser mucho
mayor que el que inviertes escribiendo/leyendo del disco local, con lo que
puedes usar el disco como almacenamiento secundario para liberar RAM. Es en
parte lo que hace Hadoop para poder procesar colecciones de datos enormes
(aunque luego venga Spark y pulverize los tiempos de proceso cacheándolo
todo en RAM).

Una comparativa tecnológica e histórica de los tiempos de latencia:

https://gist.github.com/jboner/2841832
http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html



>
> El 12 de mayo de 2016, 10:40, Kiko  escribió:
>
>>
>> El 12 de mayo de 2016, 10:23, Javier Sangalo 
>> escribió:
>>
>>> Buenos días,
>>>
>>> Me surge una duda, R trabaja en memoria con el inconveniente que tiene
>>> si no dispones de suficiente memoria ram, pero...y Python? trabaja de la
>>> misma forma?
>>>
>>>
>> Sí. R, Python y el resto del universo. Tendrás que encargarte de
>> gestionar la memoria. Hay formas más o menos eficientes de hacerlo. Si
>> describes un poco mejor tu problema relacionado con Python quizá te puedan
>> ofrecer mejor ayuda.
>>
>>
>>> Gracias!
>>>
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Empleo en OVH (España)

2016-05-11 Por tema Chema Cortes
El mié., 11 may. 2016 a las 10:01, Pixu Kideak ()
escribió:

> Buenos días,
>
> He entrado en OVH (Madrid) y he visto que estaban buscando gente con
> conocimiento de Python; me he acordado de la lista.
>
> Por si alguno esta interesado:
> https://www.ovh.com/ca/en/careers/world.xml?ref=devops-es=es
>

Sólo por comentar esta frase:

"tu misión será desarrollar servicios, con kickstarted por nuestro
departamento de I + D y ponerlos a disposición de todo el mundo "

Da la idea de que busquen freelancers, con compromiso, pero sin relación
laboral con la empresa, y con pago a través de micromecenazgo (kickstarted).

Espero estar equivocado en la interpretación de la oferta, pero parece que
el sector informático aún puede ir a peor en este país.



>
>
> Un saludo,
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Insertar registros cada segundo

2016-05-03 Por tema Chema Cortes
El mar., 3 may. 2016 a las 17:41, David Samaniego ()
escribió:

> Hola buena tarde, dispongo de un script  que realiza un una consulta smnp
> y la informacion la inserta en una tabla mysql. El tema es que necesito que
> cada consulta snmp se lo realice cada 1 segundo, ya que tiene que guardar
> los tiempos para analizarlos porteriormente.
> Lo que estaba haciendo para probar es lanzar un crontab que ejecute el
> script, pero el tiempo minino es un minuto, así que no se me ocurre como
> hacer para que cada insert lo haga en el tiempo que necesito. (Creo que
> debo hacer un bucle que itere cada 1 segundo hasta 60  y que cuando termine
> lo vuelva a ejecutar el crontab para que se vuelva a repetir.
>
> Alguna sugerencia de como puedo llevar a cabo la idea??
>
> Agradezco cualquier comentario.
>

Para darte una respuesta adecuada, se necesitaría saber qué versión de
python estás usando y en qué plataforma usas.

La solución "clásica" de usar time.sleep no es la recomendada en
aplicaciones multihilo. Es mejor usar soluciones más "responsibles" como
event.wait (suponiendo que estés usando python3).

Mi consejo en que uses threading.Timer con python2; y el módulo sched
(valores por defecto) con python3. (En la documentación de sched para
python2 te explica cómo usar Timer).

y si puedes elegir, python3.

Por otra parte, supongo que no tienes probado lo de insertar datos cada
segundo en una tabla mysql. Si estás pensando en lanzar varios scripts para
traerte datos de distintos dispositivos, el bloqueo/desbloqueo de registros
o tabla para insertar datos podría ser un problema. Yo no juntaría en el
mismo script la extracción de datos snmp con la inserción de datos en la
base de datos.



-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] convertir el output de "date" a EPOCH

2016-04-17 Por tema Chema Cortes
El sáb., 16 abr. 2016 a las 10:14, monoBOT ()
escribió:

> Parece según la documentación que solo admite éstos TZ:
>
>
> (empty), UTC, EST, CST
>
> Yo me miraría el módulo http://pytz.sourceforge.net/
>
>
La documentación lo indica como ejemplo, pero debería reconocerse cualquier
otro TZ.

Lo que sí que pone la documentación del módulo 'datetime'
 es una tabla sobre cómo
convertir entre distintas representaciones que aclara algo el misterio:

>From To Use seconds since the epoch struct_time
 in UTC
gmtime() 
seconds since the epoch struct_time
 in local
time localtime()
 struct_time
 in UTC
seconds since the epoch calendar.timegm()

struct_time 
in local time seconds since the epoch mktime()


>
>
> El 15 de abril de 2016, 17:02, Jose Caballero 
> escribió:
>
>> Hola,
>>
>> tengo la sensacion de que es una pregunta simple, pero llevo 2 horas
>> buscando en google y no lo encuentro  :(
>>
>> Necesito convertir un "string" a segundos desde el epoch.
>> En principio seria facil, salvo por el hecho de que no se a priori la
>> zona.
>> El string puede ser
>>
>> "Fri Apr 15 11:32:19 EDT 2016"
>>
>> o podria ser
>>
>> "Fri Apr 15 15:32:19 UTC 2016"
>>
>>
>> Yo creia que %Z entiende la "time zone". Pero me encuentro con esto:
>>
>>
>>
>> >>> from datetime import datetime
>>
>> >>> d1 = datetime.strptime("Fri Apr 15 11:32:19 EDT 2016", '%a %b %d
>> %H:%M:%S %Z %Y')
>> >>> d2 = datetime.strptime("Fri Apr 15 15:32:19 UTC 2016", '%a %b %d
>> %H:%M:%S %Z %Y')
>>
>> >>> print d1.utctimetuple()
>> time.struct_time(tm_year=2016, tm_mon=4, tm_mday=15, tm_hour=11,
>> tm_min=32, tm_sec=19, tm_wday=4, tm_yday=106, tm_isdst=0)
>> >>> print d2.utctimetuple()
>> time.struct_time(tm_year=2016, tm_mon=4, tm_mday=15, tm_hour=15,
>> tm_min=32, tm_sec=19, tm_wday=4, tm_yday=106, tm_isdst=0)
>>
>> >>> print d1.strftime("%s")
>> 1460734339
>> >>> print d2.strftime("%s")
>> 1460748739
>>
>>
>> Yo hubiese esperado el mismo resultado, al ser ambas fechas la misma
>> (una en UTC y la otra en EDT).
>>
>> ?que me esta faltando?
>>
>>
>> Muchas gracias por adelantado.
>> Jose
>>
>> P.S. perdon por la falta de tildes.
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>
>
>
> --
> *monoBOT*
> Visite mi sitio(Visit my site): monobotsoft.es/blog/
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Desconexión de SQLAlchemy

2016-04-06 Por tema Chema Cortes
El lun., 4 abr. 2016 a las 14:19, kausdiv () escribió:

> Hola..
>   Tengo una pequeña aplicación basada en SQLAlchemy.
>
> La base de datos es MySql en un dominio de internet.
>
> El problema que tengo es que con muchísima frecuencia se desconcecta la
> aplicación del servidor. (cada 2 minutos aprox. sin pedir datos)
> Cuando lo conecto a SQLite esto no pasa.
>
> No se si es un problema del servidor de MySql o  de la configuración de
> SQLAlchemy.
>
>
Este tipo de "desconexiones" es típico de los SGDBs; no parece problema de
SQLAlchemy. Es raro que se desconecte en un periodo tan corto, ya que lo
normal es que se desconecten después de 1 hora o mucho más.

¿Qué parámetros usas en la conexión?¿Sólo te ocurre con SQLAlchemy?¿Has
mirado el parámetro 'connect_timeout' del servidor mysql?

SQLAlchemy permite "renovar" las conexiones para evitar que se corten:
http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#connection-timeouts




> Tampoco se como comprobar si se mantiene la conexión o si se ha perdido.
>
> Actualmente se que se ha perdido porque no se abren los elementos que
> solicito, y en consola sale el mensaje de desconectado.
>
> Saludos.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] mplutils - simplificar matplotlib en algunos aspectos

2016-02-22 Por tema Chema Cortes
Hola,

Es una idea muy interesante. De hecho creo que no uso tanto matplotlib por
lo complicado que se me hace algunas veces.

No creo que pueda contribuir con mejoras de uso, pero sí que he visto
algunas posibles mejoras en el código. ¿Quieres recibir sugerencias
mediante pull-requests?


El lun., 22 feb. 2016 a las 19:54, Kiko () escribió:

> Hola.
>
> [Disculpas por el cross-posting].
>
> Matplotlib es una librería que me encanta y que uso prácticamente a
> diario. Pero, como muchas otras personas, suelo hacer cosas simples y
> cuando quiero hacer algo más sofisticado me las veo y me las deseo para
> poder realizarlo de forma sencilla.
>
> Es por ello que he armado un pequeño repo esta mañana llamado mplutils [1]
> donde se incluyen una serie de funcionalidades que ayudan a simplificar
> ciertos aspectos (de momento está muy enfocado en los axes). Dentro del
> repo tenéis un notebook donde se muestran algunas de las cosas
> implementadas [2].
>
> Tengo una lista de ideas para implementar relacionadas con colores
> (daltonismo, paso de color a B/N), manejo de los axis y los ticks,
> implementar algunos tipos de gráficas no incluidas de serie, promover
> buenas prácticas en la creación de gráficos científicos,...
>
> La idea de este correo es preguntar a la comunidad qué aspectos les
> resultan más complicados cuando hacen determinado gráfico con matplotlib
> para ver si podemos encontrar una forma de simplificarlo.
>
> Gracias por las respuestas/críticas/ideas.
>
> Saludos.
>
> [1] https://github.com/kikocorreoso/mplutils
> [2]
> http://nbviewer.jupyter.org/github/kikocorreoso/mplutils/blob/master/notebooks/Examples_of_use.ipynb
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] add-ons para firefox

2016-02-12 Por tema Chema Cortes
El vie., 12 feb. 2016 a las 12:12, cheis () escribió:

>
> estoy intentado hacer un pequeño plugin para firefox y despues de mirar
> he visto que javascript parece ser el leguaje dominante pero tambien
> exise algo llamado PyXPCOM
>
>  Alguien de la lista tiene experiencia en plugins para firefox ?
>  es viable utilizar python para eso (lo preferiria mil millones de
>  veces antes que js)
>

Nadie parece querer programar en js, pero es obligado hasta que las
alternativas experimentales puedan ser usables. Todo lo que puedas utilizar
en su lugar, será incompleto y fustrante.

En estos momentos, lo que parece funcionar mejor son los "transpilers" que
convierten a javascript código escrito en otros lenguajes. Algunos
navegadores ya vienen con modos de ejecución optimizado para el código que
generan algunos de estos transpilers, lo que podría verse como una
"preview" de lo que será el futuro.

Haría tres grupos de transpilers:

1) los basados en emscripten (C -> LLVM -> JS). Utiliza un grupo reducido
de instrucciones (asm.js) y está soportado por firefox y edge. Sería el
mejor candidato para integrarlo con PyPy (ej: http://pypyjs.org/).

2) la solución google (GCC-Google Closure Compiler) más adecuado para
lenguajes OOP, sobre todo los usados en JVM (eg: java, clojure, scala,...).
Optimizado en tamaño y para la V8 (engine de chrome).

3) restos de soluciones. Destacaría Kotlin, el lenguaje javoide de Idea con
el que está hecho IntelliJ, Pycharm, etc. capaz de compilar a bytecode y a
js. Pero habría muchos otros.

En resumidas cuentas: mucha paciencia




>
>  gracias
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Fw: new important message

2016-02-07 Por tema Chema Cortes
El dom., 7 feb. 2016 a las 15:28, Mauricio Baeza ()
escribió:

>
>
> El 07/02/16 a las 00:27, marcelobarb...@arnet.com.ar escribió:
>
> Hello!
>
>
>
>
> ¿Tenemos moderador en esta lista?
>

La respuesta rápida es NO, nadie se ha ofrecido para moderar ni para ser
administrador de esta lista. Simplemente es cuestión de suerte que no haya
más spam.

La respuesta larga es que los administradores moderamos el primer envío a
la lista para evitar spammers y errores de novato (eg: netiqueta). Una vez
pasado el filtro del primer envío, los envíos llegan a la lista sin
moderación alguna. Es la solución que menos trabajo supone y que ha
funcionado bastante bien.

Por otra parte, he vuelto a activar el flag de moderación de Marcelo
Barbero.



>
>
> GRacias
>
>
> --
> ___
> Todo lo que no podemos dar nos posee...
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Heredar paquetes en conda

2016-02-05 Por tema Chema Cortes
El jue., 4 feb. 2016 a las 19:18, Pablo Rodríguez Robles (<
pablordr...@gmail.com>) escribió:

> Buenas tardes a toda la lista.
>
> Habitualmente uso conda como gestor de paquetes y environments. Intento
> utilizar siempre Python 3+ pero como sabéis esto no es tan fácil
> dependiendo de lo que queramos hacer. Así que mis envs no utilizan siempre
> las mismas versiones.
>
> En concreto estos son los envs que tengo en el portátil:
>
>
> *$ conda info -e*
>
> # conda environments:
> #
> django   /Users/Pablo/anaconda/envs/django
> scipy *  /Users/Pablo/anaconda/envs/scipy
> visual   /Users/Pablo/anaconda/envs/visual
> ml   /Users/Pablo/anaconda/envs/ml
> root /Users/Pablo/anaconda
>
>
> El caso es que estoy configurando emacs para Python y necesito instalar
> jedi y flake8 y me preguntaba si puedo hacer una instalación común de estos
> paquetes. Es decir, que los envs hereden de otro.
>

Hace poco que se habló de un tema parecido:
https://mail.python.org/pipermail/python-es/2015-November/036092.html

No es aconsejable que se rompa el aislamiento de cada entorno, pero siempre
puedes usar ficheros .pth para incluir módulos de un entorno en la ruta de
búsquedas de otro (en el hilo de mensajes anterior se explicaba cómo).



>
>
> Un saludo,
> Pablo
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Escritura en archivos binarios

2016-01-27 Por tema Chema Cortes
El mié., 27 ene. 2016 16:12, Pixu Kideak  escribió:

> "
> yo intentaría leer el fichero en memoria, cambiaría alli los datos y luego
> volvería a escribir el fichero. Los discos no pueden escribir "un byte".
>
> "
> Cuando se esta realizando la asignación archivo = open(ficheroLeer, 'r+b')
> ¿no se estaría trabajando contra el objeto "archivo" qué está en memoria?
> O por el contrario, ¿te refieres a volcar todo el contenido del fichero en
> una lista y trabajar contra ésta; una vez finalizado volcar de nuevo el
> contenido de la lista al fichero?
>

No hace falta bajar tanto de nivel. Lo más seguro es que Python sobrescriba
el fichero completo en disco, pero eso no debe preocuparte.

Lo que si es importante es saber si usas python3. Los ficheros binarios
usan el tipo bytes y, por lo que dices, no lo estas usando.


> Un saludo y gracias,
>
> 2016-01-27 16:00 GMT+01:00 Juan Ignacio :
>
>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>> byte".
>>
>> 2016-01-27 14:40 GMT+00:00 Pixu Kideak :
>>
>>> Buenos días,
>>>
>>> Estoy trabajando con ficheros binarios pero tengo una duda.
>>>
>>> Lo primero que hago en mi programa es buscar un valor en el fichero, a
>>> partir de esa posición  muevo el puntero X posiciones y me interesaria
>>> escribir cierto valor binario y/o HEX en esa posición.
>>>
>>> He intentado con:
>>>
>>> ficheroLeer = '/ruta/mi/fichero.bin'
>>> archivo = open(ficheroLeer,'r+b')
>>> ...
>>> archivo.seek(1) #Esta es la posición en la que me interesa modificar el
>>> contenido.
>>> archivo.write(21) #Digamos que quiero escribir ! - que HEX es 21 - en
>>> esa dirección.
>>>
>>> Pero no consigo escribirlo puesto que parece que write recibe sólo
>>> variables de tipo str.
>>>
>>> ¿Cómo podría escribir HEX21 en el fichero?
>>>
>>> Un saludo y gracias por vuestra ayuda ;-)
>>>
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Juan Ignacio Rodríguez de León
>> Móvil: 605 890514
>> E-Mail: euriba...@gmail.com
>> http://www.elornitorrincoenma 
>> scarado.com/ 
>> http://descon2.com/
>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Escritura en archivos binarios

2016-01-27 Por tema Chema Cortes
El mié., 27 ene. 2016 a las 16:29, Pixu Kideak (<pixukid...@gmail.com>)
escribió:

> Estoy con la versión Python 3.5.0
>

with open(ficheroLeer, 'r+b') as f:
f.seek(1)
f.write(bytes([21])

Según lo que sea, también podrías usar "literarles":

with open(ficheroLeer, 'r+b') as f:
f.seek(1)
f.write(b'\x15')




>
>
> 2016-01-27 16:21 GMT+01:00 Chema Cortes <pych...@gmail.com>:
>
>>
>>
>> El mié., 27 ene. 2016 16:12, Pixu Kideak <pixukid...@gmail.com> escribió:
>>
>>> "
>>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>>> byte".
>>>
>>> "
>>> Cuando se esta realizando la asignación archivo = open(ficheroLeer,
>>> 'r+b') ¿no se estaría trabajando contra el objeto "archivo" qué está en
>>> memoria?
>>> O por el contrario, ¿te refieres a volcar todo el contenido del fichero
>>> en una lista y trabajar contra ésta; una vez finalizado volcar de nuevo el
>>> contenido de la lista al fichero?
>>>
>>
>> No hace falta bajar tanto de nivel. Lo más seguro es que Python
>> sobrescriba el fichero completo en disco, pero eso no debe preocuparte.
>>
>> Lo que si es importante es saber si usas python3. Los ficheros binarios
>> usan el tipo bytes y, por lo que dices, no lo estas usando.
>>
>>
>>> Un saludo y gracias,
>>>
>>> 2016-01-27 16:00 GMT+01:00 Juan Ignacio <euriba...@gmail.com>:
>>>
>>>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>>>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>>>> byte".
>>>>
>>>> 2016-01-27 14:40 GMT+00:00 Pixu Kideak <pixukid...@gmail.com>:
>>>>
>>>>> Buenos días,
>>>>>
>>>>> Estoy trabajando con ficheros binarios pero tengo una duda.
>>>>>
>>>>> Lo primero que hago en mi programa es buscar un valor en el fichero, a
>>>>> partir de esa posición  muevo el puntero X posiciones y me interesaria
>>>>> escribir cierto valor binario y/o HEX en esa posición.
>>>>>
>>>>> He intentado con:
>>>>>
>>>>> ficheroLeer = '/ruta/mi/fichero.bin'
>>>>> archivo = open(ficheroLeer,'r+b')
>>>>> ...
>>>>> archivo.seek(1) #Esta es la posición en la que me interesa modificar
>>>>> el contenido.
>>>>> archivo.write(21) #Digamos que quiero escribir ! - que HEX es 21 - en
>>>>> esa dirección.
>>>>>
>>>>> Pero no consigo escribirlo puesto que parece que write recibe sólo
>>>>> variables de tipo str.
>>>>>
>>>>> ¿Cómo podría escribir HEX21 en el fichero?
>>>>>
>>>>> Un saludo y gracias por vuestra ayuda ;-)
>>>>>
>>>>> ___
>>>>> Python-es mailing list
>>>>> Python-es@python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Juan Ignacio Rodríguez de León
>>>> Móvil: 605 890514
>>>> E-Mail: euriba...@gmail.com
>>>> http://www.elornitorrincoenma
>>>> <http://www.elornitorrincoenmascarado.com/>scarado.com/
>>>> <http://www.elornitorrincoenmascarado.com/>
>>>> http://descon2.com/
>>>>
>>>> ___
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>> --
>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>> http://ch3m4.org/blog
>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Escritura en archivos binarios

2016-01-27 Por tema Chema Cortes
El mié., 27 ene. 2016 a las 17:28, Chema Cortes (<pych...@gmail.com>)
escribió:

> El mié., 27 ene. 2016 a las 16:29, Pixu Kideak (<pixukid...@gmail.com>)
> escribió:
>
>> Estoy con la versión Python 3.5.0
>>
>
> with open(ficheroLeer, 'r+b') as f:
> f.seek(1)
> f.write(bytes([21])
>
> Según lo que sea, también podrías usar "literarles":
>
> with open(ficheroLeer, 'r+b') as f:
> f.seek(1)
> f.write(b'\x15')
>

Creo que he tomado mal los valores hexadecimales de la pregunta original.
Para escribir un '!' en un fichero binario se usaría directamente b'!'

with open(ficheroLeer, 'r+b') as f:
    f.seek(1)
    f.write(b'!')



>
>
>
>
>>
>>
>> 2016-01-27 16:21 GMT+01:00 Chema Cortes <pych...@gmail.com>:
>>
>>>
>>>
>>> El mié., 27 ene. 2016 16:12, Pixu Kideak <pixukid...@gmail.com>
>>> escribió:
>>>
>>>> "
>>>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>>>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>>>> byte".
>>>>
>>>> "
>>>> Cuando se esta realizando la asignación archivo = open(ficheroLeer,
>>>> 'r+b') ¿no se estaría trabajando contra el objeto "archivo" qué está en
>>>> memoria?
>>>> O por el contrario, ¿te refieres a volcar todo el contenido del fichero
>>>> en una lista y trabajar contra ésta; una vez finalizado volcar de nuevo el
>>>> contenido de la lista al fichero?
>>>>
>>>
>>> No hace falta bajar tanto de nivel. Lo más seguro es que Python
>>> sobrescriba el fichero completo en disco, pero eso no debe preocuparte.
>>>
>>> Lo que si es importante es saber si usas python3. Los ficheros binarios
>>> usan el tipo bytes y, por lo que dices, no lo estas usando.
>>>
>>>
>>>> Un saludo y gracias,
>>>>
>>>> 2016-01-27 16:00 GMT+01:00 Juan Ignacio <euriba...@gmail.com>:
>>>>
>>>>> yo intentaría leer el fichero en memoria, cambiaría alli los datos y
>>>>> luego volvería a escribir el fichero. Los discos no pueden escribir "un
>>>>> byte".
>>>>>
>>>>> 2016-01-27 14:40 GMT+00:00 Pixu Kideak <pixukid...@gmail.com>:
>>>>>
>>>>>> Buenos días,
>>>>>>
>>>>>> Estoy trabajando con ficheros binarios pero tengo una duda.
>>>>>>
>>>>>> Lo primero que hago en mi programa es buscar un valor en el fichero,
>>>>>> a partir de esa posición  muevo el puntero X posiciones y me interesaria
>>>>>> escribir cierto valor binario y/o HEX en esa posición.
>>>>>>
>>>>>> He intentado con:
>>>>>>
>>>>>> ficheroLeer = '/ruta/mi/fichero.bin'
>>>>>> archivo = open(ficheroLeer,'r+b')
>>>>>> ...
>>>>>> archivo.seek(1) #Esta es la posición en la que me interesa modificar
>>>>>> el contenido.
>>>>>> archivo.write(21) #Digamos que quiero escribir ! - que HEX es 21 - en
>>>>>> esa dirección.
>>>>>>
>>>>>> Pero no consigo escribirlo puesto que parece que write recibe sólo
>>>>>> variables de tipo str.
>>>>>>
>>>>>> ¿Cómo podría escribir HEX21 en el fichero?
>>>>>>
>>>>>> Un saludo y gracias por vuestra ayuda ;-)
>>>>>>
>>>>>> ___
>>>>>> Python-es mailing list
>>>>>> Python-es@python.org
>>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Juan Ignacio Rodríguez de León
>>>>> Móvil: 605 890514
>>>>> E-Mail: euriba...@gmail.com
>>>>> http://www.elornitorrincoenma
>>>>> <http://www.elornitorrincoenmascarado.com/>scarado.com/
>>>>> <http://www.elornitorrincoenmascarado.com/>
>>>>> http://descon2.com/
>>>>>
>>>>> ___
>>>>> Python-es mailing list
>>>>> Python-es@python.org
>>>>> https://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>> ___
>>>> Python-es mailing list
>>>> Python-es@python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>> --
>>> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
>>> http://ch3m4.org/blog
>>>
>>> ___
>>> Python-es mailing list
>>> Python-es@python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
> --
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Abrir varios archivos con "open"

2016-01-03 Por tema Chema Cortes
names = [ "bram_{}{}".format(sufijo, i) for sufijo in ("aa","bb","cc") for
i in range(0,5) ]
files = { fname:open(fname,"r") for fname in names }

El lun., 4 ene. 2016 a las 5:08, Ignacio Rodríguez ()
escribió:

> Sip, mi error! Debí haberlo mandado con append, mil disculpas.
>
> Saludos
>
> Ignacio Rodríguez
> SugarLabs at Facebook
> 
>
> El 3 de enero de 2016, 21:59, Rolando Paz escribió:
>
>> Creo que encontré la solución con esto:
>>
>> bram_aa = []
>> bram_cc = []
>>
>> for i in range(0,5):
>> bram_aa.append(open("bram_aa%s"%i,"r"))
>> bram_cc.append(open("bram_cc%s"%i,"r"))
>>
>> Gracias igualmente...
>>
>> Saludos
>>
>> Rolando Paz
>>
>> El 3 de enero de 2016, 18:42, Rolando Paz  escribió:
>>
>>> Hola Ignacio
>>>
>>> Hice esto:
>>>
>>> bram_aa = []
>>> bram_cc = []
>>>
>>> for i in range(0,5):
>>> bram_aa[i] = open("bram_aa%s"%i,"r")
>>> bram_cc[i] = open("bram_cc%s"%i,"r")
>>>
>>> print 'este es el contenido de bram_cc2 =',bram_cc2
>>>
>>> y el error que aparece es este:
>>>
>>> Traceback (most recent call last):
>>>   File "plot_artecorr_4bram_auto_promedio.py", line 39, in 
>>> bram_aa[i] = open("bram_aa%s"%i,"r")
>>> IndexError: list assignment index out of range
>>>
>>> que opinas?
>>>
>>> El 3 de enero de 2016, 18:25, Ignacio Rodríguez 
>>> escribió:
>>>
 Hola, yo usaría algo así

 bram_aa = []
 bram_bb = []
 bram_cc = []
 for i in range(0,5):
 bram_aa[i] = open("bram_aa%s"%i,"r")
 bram_bb[i] = open("bram_bb%s"%i,"r")
 bram_cc[i] = open("bram_cc%s"%i,"r")

 Y luego simplemente los "llamas" bram_aa[0], bram_bb[0], bram_cc[0]



 Ignacio Rodríguez
 SugarLabs at Facebook
 

 El 3 de enero de 2016, 21:17, Rolando Paz escribió:

> Hola a todos de nuevo...
>
> Una carpeta contiene estos 10 archivos:
>
> bram_aa0
> bram_aa1
> bram_aa2
> bram_aa3
> bram_aa4
>
> bram_cc0
> bram_cc1
> bram_cc2
> bram_cc3
> bram_cc4
>
> Lo que quiero lograr hacer es algo parecido a esto:
>
> for i in range(0,5):
> bram_aa = [open("bram_aa%s"%i,"r")]
> bram_cc = [open("bram_cc%s"%i,"r")]
>
> Sin embargo, con este for lo que logro es que la variable bram_aa tome
> el ultimo valor iterado, es decir que bram_aa = bram_aa4 y bram_cc =
> bram_cc4, y lo que me gustaría es que se crearan todas las variables.
>
> En esencia lo que quiero es abrir cada uno de los diez archivos, sin
> embargo no quiero colocar paralelo las 10 ordenes "open" por separado.
>
> bram_aa0=open("bram_aa0","r")
> bram_aa1=open("bram_aa1","r")
> bram_aa2=open("bram_aa2","r")
> etc
>
> Cualquier ayuda se los agradeceré
>
> Feliz Año 2016!
>
> Saludos
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>

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


>>>
>>
>> ___
>> Python-es mailing list
>> Python-es@python.org
>> https://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] python y msql y error con microsoft Visual C++ 10 (vcvarsall.bat)

2015-12-22 Por tema Chema Cortes
El mar., 22 dic. 2015 a las 13:33, Gonzalo V (<gvm2...@gmail.com>) escribió:

> Gracias Chema,
> soy medianamente novato en esto. ¿Que es ODBC/ADO?
>

ODBC es un sistema estandarizado de conexión a base de datos (similar al
JDBC que existe para Java). Es multiplaforma, aunque se usa sobre todo en
windows.

Para instalar ODBC en windows para mysql:
https://dev.mysql.com/downloads/connector/odbc/

ADO sería una API de alto nivel y más eficiente que conectar con ODBC. Si
tienes instalado python para windows, como parte de las extensiones pywin32
se incluye el módulo adodbapi que ofrece una api DB-API2 (PEP-0249,
estándar en python) para acceso a cualquier base de datos a través de ODBC.

Hacía tiempo que no miraba estos temas. A la versión de adodbapi que lleva
pywin32-219 le faltan algunos ficheros. Mejor que te instales adodbapi
mediante pip.





>
> Saludos,
> Gonzalo
>
> El 21 de diciembre de 2015, 22:13, Chema Cortes <pych...@gmail.com>
> escribió:
>
>>
>>
>> El lun., 21 dic. 2015 a las 23:01, Gonzalo V (<gvm2...@gmail.com>)
>> escribió:
>>
>>> amigos, creen que esto pueda servir
>>> https://www.microsoft.com/en-us/download/details.aspx?id=44266
>>>
>>> ??
>>>
>>
>> Está empaquetado para python 2.7, pero tendría que valer también para
>> python3 si le añades los ficheros de cabecera.
>>
>> Hace mucho que no había visto la web de microsoft.com y no estoy seguro
>> de dónde encontrar el viejo compilador.
>>
>> Pero mira éste blog:
>>
>> http://blog.ionelmc.ro/2014/12/21/compiling-python-extensions-on-windows/#for-python-3-4
>>
>> Insito en recomendarte que evites compilar tú mismo el módulo para
>> windows. Prueba antes a usar ODBC/ADO.
>>
>>
>>
>>
>>>
>>> Saludos,
>>> Gonzalo
>>>
>>> El 21 de diciembre de 2015, 17:03, Gonzalo V <gvm2...@gmail.com>
>>> escribió:
>>>
>>>> Hola chema
>>>> El visual c10 se descarga de la página de microsoft?
>>>>
>>>> saludos,
>>>> desde un móvil.
>>>> El dic 21, 2015 9:45 p.m., "Chema Cortes" <pych...@gmail.com> escribió:
>>>>
>>>>>
>>>>>
>>>>> El lun., 21 dic. 2015 a las 19:28, Gonzalo V (<gvm2...@gmail.com>)
>>>>> escribió:
>>>>>
>>>>>> python 3.4 stable , pip esta acutalizado, pero parece que la joda es
>>>>>> más profunda
>>>>>>
>>>>>> http://stackoverflow.com/questions/28251314/error-microsoft-visual-c-10-0-is-required-unable-to-find-vcvarsall-bat
>>>>>>
>>>>>> Exploraré lo que dice kiko, aunque me da temor seguir instalando
>>>>>> cosas, ustedes saben que windows cuando cae, cae como piano y hay que
>>>>>> formatear, etc...
>>>>>> me interesaría moverme a linux pero utilizo vba para excel.
>>>>>>
>>>>>>
>>>>> Las wheels disponibles son para python2.7 . pip intenta recompilar el
>>>>> paquete para python3, para lo que necesitarás instalar el paquete de
>>>>> desarrollo (python-dev, no recuerdo en windows si se instala por defecto o
>>>>> no) y el visualC 10 gratuito (que no equivale al visual studio 2015 por
>>>>> problemas de licencias).
>>>>>
>>>>> El fichero vcvarsall.bat asigna las variables de entorno para que
>>>>> funcione el compilador.
>>>>>
>>>>> Posiblemente, te resulte difícil si nunca has hecho algo similar.
>>>>> Mejor, prueba con algún repositorio no-oficial de wheels:
>>>>>
>>>>> http://www.lfd.uci.edu/~gohlke/pythonlibs/
>>>>>
>>>>>
>>>>>
>>>>>> Saludos,
>>>>>> Gonzalo
>>>>>>
>>>>>> El 21 de diciembre de 2015, 14:15, Juan Luis Cano <
>>>>>> juanlu...@gmail.com> escribió:
>>>>>>
>>>>>>> On 2015-12-21 18:42, Kiko wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> El 21 de diciembre de 2015, 18:27, Gonzalo V <gvm2...@gmail.com>
>>>>>>> escribió:
>>>>>>>
>>>>>>>> necesito conectarme a mysql a través de Django. La documentación
>>>>>>>> dice que debo usar el modulo mysqlclient. le hago pip y me sale el 
>>>>>>>> error
>>>

  1   2   3   4   5   >