Ir al contenido principal

Entradas

Polynomial regression using python

We are going to learn how to create a polynomial regression and make a prediction over a future value using python. The data set have been fetched from INE (national statistics institute) , that data is the EPA ( active population survey ), that tell us the national total (Spain), both genders. 16 and over are unemployed ( in thousands ). Example data: label serie rate 0 2002T1 0 2152.8 1 2002T2 1 2103.3 2 2002T3 2 2196.0 3 2002T4 3 2232.4 4 2003T1 4 2328.5 Data CSV can be downloaded here: https://drive.google.com/file/d/1fwvAZe7lah5DX8-DDEpmfeUDYQhKcfzG/view?usp=sharing Lets see how looks that data: Fine, as we can see the data describe a curve, so its for that because we want to use a polynomial regression. To try to approximate that curve we will use a grade 2 polynomial or...

Use django ORM standalone within your nameko micro-services

Learning about micro services with python, I found a great tool named nameko . https://www.nameko.io/ Nameko is a Python framework to build microservices that doesn't care in concrete technologies you will use within your project. To allow that microservices to work with a database, you can install into your project a wide variety of third parties, like SQLAlchemy (just like any other). To have an easy way to communicate with the database and keep track of the changes made to the models, I chose Django: I'm just learning about microservices and I want to keep focused on that. Easy to use, Django is a reliable web framework, have a powerful and well known ORM. Also using Django we will have many of the different functionalities that this framework provide. To make all this magic to work together, I developed a python package that allow you to use Django as a Nameko injected dependency: https://pypi.org/project/django-nameko-standalone/ You can found the source ...

Stop measuring time with time.clock() in Python3

If we read the time.clock() documentation ( https://docs.python.org/3/library/time.html#time.clock): Deprecated since version 3.3: The behaviour of this function depends on the platform: use perf_counter() or process_time() instead, depending on your requirements, to have a well defined behaviour. I use time.perf_counter, but feel free to use time.process_time if fits for your requirements. The main difference they have are: time.perf_counter() It does include time elapsed during sleep and is system-wide. time.process_time() It does not include time elapsed during sleep. It is process-wide by definition.

A simple python async spider (async programming with python 3.6 step 2)

As a second step learning async programming I developed a very simple spider with python 3.6 and asynchronous developing. In this case the spider request a bunch of urls. The server that is serving waits on each request. http://localhost:8000/1 The number '1' tells the number of seconds that the server should wait: http://localhost:8000/2 -> makes server wait for 2 seconds http://localhost:8000/5 -> makes server wait for 5 seconds I'm testing with a server that makes to wait my consumer, feel free to use random waits or whatever you prefer. The consumer accepts two queues, a queue for urls to retrieve, and a queue to store the results. At the moment the consumer don't store nothing at the urls queue, only retrieve the urls configured on the hardcoded urls list. More functionalities will be added in the future. In this example aiohttp==2.3.10 is used. (iospider) $ pip install "aiohttp==2.3.10" import asyncio from contextlib import ...

First approach to the python3.6 async programming, a simple consumer/producer (async programming with python 3.6 step 1)

As a first approach to the async programming I'm developing small scripts with python. The main thing I need to learn is how to develop an asynchronous consumer/producer using an async Queue and python3.6. First, a reproduction of the problem with synchronous programming, later the solution I found with async programming. Synchronous # First attempt, synchronous from queue import Queue from time import sleep , perf_counter def produce (q: Queue , n: int ): for i in range (n): print ( f'produce {i}' ) q.put(i) sleep( 0.1 ) def consume (q: Queue): for i in q.queue: print ( f'consume {i}' ) sleep( 0.1 ) start = perf_counter() q = Queue() produce(q , 10 ) consume(q) print (perf_counter() - start) # Output produce 0 produce 1 produce 2 ... # imagin that consume 7 consume 8 consume 9 2.005685806274414 It takes about 2 seconds Asynchronous # Second attempt, Asynchronous import asyncio from...

Stop python debugger exactly on the failing loop iteration

This post is for ipdb users. Is this case familiar for you?: Write a break point on your code Go into a loop Start pressing 'c' and 'n' until you found the iteration that is failing. It can works, but you can only do this ... one or two times maybe?? If you need to this frequently, this method doesn't works and you need another tool, but .... what's the tool I need? You need launch_ipdb_on_exception ... ... from ipdb import launch_ipdb_on_exception with launch_ipdb_on_exception(): for i in range ( 9 ): print (i) if i== 4 : raise Exception('Debug time!') ... # Output 0 1 2 3 4 Exception('Debug time!',) > <ipython-input-1-4f44dca149ad>(7)<module>() 5 print(i) 6 if i==4: ----> 7 raise Exception('Debug time!') ipdb> i # Note ipdb console!! 4 ipdb> c # Continues the execution In [2]: i # Ipython console again Out[2]: 4 In [3...

How to add an import to multiple python files | Añadir import a muchos ficheros python

If you want to add an import line to one or multiple python files, you can achieve this easily using the isort package. Install isort in your python environment: pip install -r isort   Now, execute the next isort command to add an import to multiple python files. Multiple options can be added to configure how isort works. For example, imagine you have some changes on your working copy that cause an error because you need an import. If you write this files into a "files.txt" file (one line per file) Example /tmp/files.txt file1.py controllers/file2.py Command line FILES=$(cat /tmp/files.txt) isort -a "from foo import bar" ${FILES} As I say before, you can mix with a lot of options, for example this is the command I use to handle line length, indentation, third parties, ... isort -ac -tc -m 3 -w 119 -i4 -up -y ${FILES} Hope you found this useful!!

PyConEs 2017 overall

In September 2017 Ebury went to PyCon Spain 2017 which took place in Cáceres (Extremadura), at the beautiful location of San Francisco’s Cultural Complex. Read on for insights on refactoring, unicode, serverless, testing factories, diversity in the work place and open source! To read more about the PyCon Spain 2017, visit this page!! : https://labs.ebury.rocks/2017/10/31/pycones-2017-overall/

Clases abstractas con python

¿Como se crean clases abstractas con python?. Voy a explicar cual es la forma correcta de definir una clase abstracta y heredar de ella. El procedimiento general es: Definir una clase abstracta utilizando una metaclase. Definir la subclase de la clase abstracta (sin herencia). Registrar esta última clase como subclase de la clase abstracta. Tomemos como ejemplo el siguiente código: from abc import ABCMeta, abstractmethod class AbstractFoo:     __metaclass__ = ABCMeta          @abstractmethod     def bar(self):         pass     @classmethod     def __subclasshook__(cls, C):         return NotImplemented class Foo(object):     def bar(self):         print "hola" AbstractFoo.register(Foo)  Lo primero que hacemos es importar del módulo abc la...

Tutorial / Manual / HOWTO Programación Android desde cero - Parte 3

Hola a todos, para comenzar esta tercera parte, que mejor que recordar que es lo que vamos a ver. La segunda parte del tutorial terminó diciendo que quedaba por ver como crear diferentes pantallas, como "registrarlas" en el programa, y como manejarnos de una a otra. Bien, pues lo primero que debemos de hacer es abrir nuestro proyecto de ejemplo de la parte anterior, o crearnos si queremos uno nuevo en blanco, yo explicare como si creásemos de nuevo otro proyecto desde 0. Desde el explorador de proyectos: click derecho -> nuevo proyecto de android Creamos el proyecto, en mi caso tutorial_android_3 , que implemente una actividad (le he dejado el nombre por defecto), como target de la api de android he puesto que se usará la versión 2.2. Una vez terminemos, deberemos de tener algo parecido a esto: Bien, en el proyecto tenemos una sola actividad que hemos llamado One_Activity. Ahora vamos a proceder a crear una segunda actividad. Para eso haremos click derecho e...

Spoof IP

Hola amigos, contaros que desde hace tiempo andaba detrás de un reto hacking en el que se pedía spoofear cierta IP, que era inválida. Como no podía ser que mi máquina tomase una ip inválida para spoofear, solo cabía esperar que en el servidor se compruebe la ip considerando la cabecera X-FORWARDED-FOR. El script en el que necesito spoofear mi ip está escrito en PHP, y en este lenguaje muchar veces los programadores comprueban la cabacera X-FORWARDED-FOR, por ejemplo: $ipString=@getenv("HTTP_X_FORWARDED_FOR"); El problema radica en que el valor de la cabecera x-forwarded-for puede ser spoofeado si se modifican las cabeceras http que se envían al servidor. Se podrían construir paquetes personalizados, pero he preferido usar alguna herramienta ya existente para facilitar la tarea (y tardar menos en pasar el reto). Instalaremos en local (por ejemplo) un proxy, y ponemos este entre nuestro navegador y la puerta de enlace escuchando en algún puerto, después se configura...

Medición de tiempo en Python

B uenas a todos, ayer me llegó un tweet en el que alguien necesitaba trabajar con conjuntos (sets) en PYTHON. Esta persona se encontró con diversas opiniones sobre como era más correcto trabajar con los conjuntos, encontrándose con que la discusión derivó a mediciones tiempos y ordenes de eficiencia (como de lento es cada método). Y aquí es donde me di cuenta que siempre elijo el mejor, pero no entro a cronometrar el algoritmo (en cuanto a las funciones a utilizar, si estás utilizando python3 deberías considerar esta entrada: https://jesusenlanet.blogspot.com/2018/08/python3-stop-measuring-time-with.html ). Así, he estado buscando las diferentes formas de medir tiempos, y me he encontrado con varias formas, diré cuales son y por que las descarto: - Medir el tiempo "a mocho" dentro del código y ensuciándolo Descartado radicalmente por ser poco elegante y propenso a que se meta la pata. - Uso de hilos con thread. Descartado debido a que según he leído, el modulo thr...

Tutorial / Manual / HOWTO Programación Android desde cero - Parte 2

En la primera parte de este tutorial, vimos como crear un proyecto, que diferencias hay entre una versión a otra, y cual es la estructura básica del proyecto en eclipse. En esta segunda parte, veremos el emulador y los modos de arranque, y cual es la manera más sencilla (para mí), de arrancarlo. También vamos a ver algo de código por primera vez :) Bien, antes de usar el emulador, tendremos que crear uno. Podremos crear tantos emuladores como queramos, para crear un emulador en eclipse: - Window -> Android SDK and AVD manager Se abrirá una ventana como la de la imagen: - Pulsar en el botón nuevo y aparecerá la ventana de diálogo que nos permitirá crear una nueva máquina virtual: - Le damos el nombre que queramos. - Después hay que darle un tamaño a la tarjeta SD, el mínimo es de 9MB, también podríamos usar un archivo en el que ya tengamos una tarjeta SD. - Yo suelo dejar marcada la casilla de snapshot, así se generará un archivo donde se guardará el emulador. ...

Tutorial / Manual / HOWTO Programación Android desde cero - Parte 1

Hola, como dice el título, comienzo a escribir una serie de artículos sobre programación en Android. Comenzaré desde cero (0), he intentaré ir adaptando los siguientes artículos tanto a intentar dar a conocer problemas con los que nos encontraremos conforme vayamos incrementando el tamaño o complejidad de nuestra aplicación, además de adentrarnos más en profundidad en los conceptos que nos vayan surgiendo. Yo explicaré para el entorno de desarrollo ECLIPSE. Los pasos para poder instalar todo lo necesario, los podéis encontrar aquí o buscando en google "como instalar eclipse y android sdk": http://www.nettaringa.com.ar/?p=2202 Bien, lo primero que vamos a hacer en esta parte, va a ser crear un nuevo proyecto basado en android, para esto, primero debemos arrancar eclipse . Una vez arrancado, le daremos a la pestaña FILE -> NEW -> ANDROID PROJECT En la ventana que aparece, deberemos de poner, de arriba a abajo: Project name : nombre del proyecto. Content s...

Recibir y simular correo en Google App Engine con Python

Para los que usan Google App Engine, tal vez necesiten alguna vez recibir/leer correos electronicos dirigidos a la aplicación, y simular los mismos durante la fase de desarrollo. Como lenguaje de programación estoy usando Python (recordar que IMAP no se puede usar desde una aplicación GAE) Bien, por defecto, la aplicación no recibirá mensajes de correo electronico, para activar este servicio, hay que configurar el archivo app.yaml de la siguiente manera: Archivo APP.YAML inbound_services: - mail En este archivo, también hay que definir cuales son las direcciones de email con las que nuestra aplicación "se mantendrá a la escucha": - url: /_ah/mail/users@appid\.appspotmail\.com script: libraries/users_mail.py login: admin - url: /_ah/mail/webmaster@appid\.appspotmail\.com script: libraries/webmaster_mail.py login: admin - url: /_ah/mail/.+ script: libraries/others_mail.py login: admin Donde appid es el nombre de nuestra aplicación. La última url /_a...