Personal tools

python

Nov 12, 2014

Scraping cheap airline tickets

It all started with a bet long time ago. One of my friends couldn't believe that it is actually possible nowadays to travel around the world with low-cost airlines.

Because the term low-cost airline is difficult to define we have agreed that we should bet on something easy to check - like the ticket price per kilometer. After some rough checks the bet was on: travel around the world, flying always in one direction (west or east) for less than €0.03 (3 euro cents) per kilometer (imagine Bologna-New York trip for less than €180).

TL;DR

I think I won. With some python help and many hours of coding I was able to find all the necessary tickets and stay below the price criterion. I have learnt a lot about airlines sales strategy... and something about ant colony optimization algorithm. The trip starts on November 15th, maybe you will meet me in the following months ;-)

Problem

Now the long story. Searching for cheap plane ticket is relatively easy task if you have strict dates and simple route (one or two stops). It starts to be more complicated if you want to stop in 3 places. But what if you have 6 stops or more? None of the existing online tools allows you to make such a query (if you know one - let me know). Things get more fuzzy if you don't have specific dates and just want to travel cheap. Searching manually is not an option: ticket price is likely to change daily and number of possible queries is quite big, I mean really big. Imagine you want to take 5 stops and search with margin of ± 10 days. It gives you 9765625 queries (5^10). Grabbing that data directly from airline database is also not doable. There is no standard approach, most of the small companies have their own system - others use providers that are much too expensive for a single user.

Sooner or later you will start to write a script.

read more

Oct 01, 2014

Cookiecutter: uno strumento per sfornare nuovi progetti a raffica

Ecco come hanno creato veramente i cloni

Cookiecutter: uno strumento per sfornare nuovi progetti a raffica

Come un bravo pasticciere, con gli stampini giusti si possono creare nuovi progetti facilmente e con semplici comandi. Io ci ho provato con Flask ed è venuto buonissimo.

Ho già parlato diverse volte di come la vita del programmatore migliora notevolmente con il riuso di codice (gli snippets per Sublime Text) e l'utilizzo di strumenti che velocizzano alcuni processi, come la creazione di un nuovo progetto (se vi ricordate, avevo scritto dell'ottimo mr.bob).

I generatori automatici di template non servono solamente a creare una struttura di base in un solo comando, ma sono anche molto utili per rispettare i vari standard e le best practices imposti dai vari framework e linguaggi.

Per un progetto personale (sì, la solita applicazione di gestione del Fantacalcio che ogni anno rifaccio per sperimentare cose nuove) avevo la necessità di creare un'applicazione Flask da zero.

Avevo bisogno di qualcosa di abbastanza strutturato, quindi ho iniziato a documentarmi sul pattern da utilizzare per suddividere i vari moduli.
Essendo pigro (e abituato ai vari Paste e mr.bob), però, mi sarebbe piaciuto anche trovare qualche strumento che facesse tutto da solo.

Ho trovato diversi modelli già pronti su github, dove bastava semplicemente clonarli e iniziare a lavorare, ma alla fine ho optato per provare un template ad hoc creato per Cookiecutter. Da buona tartaruga rossa non potevo scegliere uno strumento più azzeccato, per mantenere alta la nostra fama di mangioni!

read more

Sep 10, 2014

Play these (Python) strings until my fingers are raw

What Do You Want from Me

Play these (Python) strings until my fingers are raw

Filed Under:

This blog post is about the tricky task of subclassing immutable types in Python. Once you get it right, you will end up with superpowered objects

In one project I had to subclass the Python string type (namely str) in order to get some additional features.

Why I decided to do that?

Because I needed something:

  • supporting almost all the methods of the standard strings
  • with some custom attributes, additional methods
  • that could be compared and mixed with strings.

I had almost no choice. But subclassing str is a task that should be handled with special care because it is a so called immutable type.

read more

Apr 30, 2014

Pyinter: come gestire intervalli di tempo con Python

Peace on Earth

Pyinter: come gestire intervalli di tempo con Python

Filed Under:

Evitare overbooking? Trovare momenti liberi o individuare eventi che ricadono tra due istanti di tempo? Inutile spaccarsi la testa o reinventare la ruota

Perché Pynter

La libreria gestisce oggetti rappresentabili sotto forma di un intervallo matematico: in soldoni e senza essere troppo rigorosi, un intervallo è qualcosa che ha un inizio e una fine. Vien da sé che per descrivere oggetti come appuntamenti, prenotazioni ed eventi è perfetta!

Di librerie simili ce ne sono molte su PyPI, ad esempio:

read more

Apr 24, 2014

Integrare la validazione pyflakes in zest.releaser

Lo Zen Python: raggiungere il codice perfetto!

Integrare la validazione pyflakes in zest.releaser

Filed Under:

Ci sono molti strumenti di validazione del codice Python. Vediamo come integrare uno di questi (pyflakes) all'interno del nostro processo di rilascio

Tempo fa avevo mostrato tutti i modi con cui è possibile gestire i rilasci del vostro codice Plone/Python, terminando l'articolo con un plugin per zest.releaser, uno degli strumenti che più utilizziamo.

Di quanto zest.releaser sia utile, ben pensato ed estendibile, ne ho già parlato a sufficienza nel precedente articolo e non voglio ripetermi.
Oggi andiamo avanti nel processo di rendere il vostro codice migliore, introducendo un altro plugin: rt.zestreleaser.pyflakes.

read more