Spotify puzzles: round two

Some months ago, I began challenging myself with Spotify puzzles: at that time I was dealing with an easy problem; now, the difficulty has increased. The round two consists in the typical “Selection problem“: given an array of values, find the max (or min) k values. I decided to still use Python and to use … Continue reading Spotify puzzles: round two

Fun with Python powered telnetd honeypot

Reason: hardening, serendipity and curiosity As you already know, in the past weeks I hardened all of my boxes: while doing it, I flushed all iptables/ipfw rules, changed the default policy to DROP and take it from there to enable every rule as soon as I need it. Whilst Ubuntu uses ufw as a fronted … Continue reading Fun with Python powered telnetd honeypot

Formattare i decimali con Python

Un problema che ho recentemente risolto usando Python e la logica binaria prevedeva di stampare i numeri binari usando lo stesso numero di cifre [ad esempio: nel caso di 8 bit, stampare le parole di 4 bit anteponendo zero per quattro volte]. Tecnicamente, gli zero a sinistra sono ininfluenti ma servono per uniformare la formattazione, … Continue reading Formattare i decimali con Python

django: come fare il deploy di un’applicazione su Apache

Una volta che avete terminato lo sviluppo di un’applicazione basata su django, è il momento di installarla in produzione. Nel mio caso, ho utilizzato django 1.3.1 e ho scelto di utilizzare Apache e mod_wsgi. Vediamo come fare il deploy passo-passo: Fortunatamente mod_wsgi richiede Apache mpm-worker (anziché il meno performante prefork) che su Debian/Ubuntu è facilmente installabile tramite sudo apt-get … Continue reading django: come fare il deploy di un’applicazione su Apache

Sviluppare applicazioni web con Django: la mia recensione

Spinto dalla curiosità, mi sono deciso ad imparare il framework Django, basato su Python, per sviluppare applicazioni web. In particolare, mi sono procurato il libro di Marco Beri “Sviluppare applicazioni web con Django”, edito da Apogeo. Comincio subito col dire che il prezzo è decisamente alto (32 Euro), nonostante il libro sia del 2009. Il libro … Continue reading Sviluppare applicazioni web con Django: la mia recensione

Python: scriviamo un generatore di Fibonacci ricorsivo (e poi iterativo) ed analizziamone la complessità asintotica

Tralasciando la parte matematica su cui potete trovare un’esauriente (ed interessante) spiegazione su Wikipedia, la serie di Fibonacci si definisce: F(n) = F(n-1) + F(n-2) per n > 1, e F(1) = 1 e F(0) = 0 Scriviamo un generatore di questa serie in Python: #!/usr/bin/python # fib(n) = fib(n-1)+fib(n-2) # fib(0) = 0 # … Continue reading Python: scriviamo un generatore di Fibonacci ricorsivo (e poi iterativo) ed analizziamone la complessità asintotica

Python: scriviamo un HTTPS downloader simile a wget (con urllib2, optparse e getpass)

Per ragioni di semplicità di utilizzo e immediatezza (e anche per imparare qualcosa di nuovo), la settimana scorsa ho dovuto scrivere un downloader da linea di comando simile a GNU wget, ma con alcuni requisiti personalizzati: l’accesso alla pagina di download è protetto da userid e password (autenticazione HTTPDigestAuth); il protocollo di accesso è HTTPS; una … Continue reading Python: scriviamo un HTTPS downloader simile a wget (con urllib2, optparse e getpass)

Scambiare il contenuto di due variabili int senza utilizzare una variabile temporanea: XOR swap

Una domanda interessante che mi è stata posta è: “com’è possibile scambiare il contenuto di due variabili senza utilizzare una variabile temporanea?”. Infatti, per scambiare il contenuto di due variabili, di solito si utilizza una variabile temporanea (vediamo un esempio in Python): a = 13 b = 17 c = a a = b b … Continue reading Scambiare il contenuto di due variabili int senza utilizzare una variabile temporanea: XOR swap

Python e il metodo setdefault

Note to self (pun intended): questo post rappresenta una sorta di appunto mentale per ricordarmi il funzionamento di setdefault in Python, visto che puntualmente mi trovo ad utilizzarlo. setdefault è utilizzato sui dizionari (dict) e permette di impostare una chiave di default durante una set. Mi spiego meglio con un esempio: >>> D {1: ‘leonard’, … Continue reading Python e il metodo setdefault

Trenitalia e Viaggiatreno: come implementare un servizio “fai da te” per avere le informazioni dello stato di un treno via SMS

Da quando sono diventato un pendolare (per lavoro), ho iniziato a (ri)frequentare assiduamente le stazioni ferroviarie e i treni di Trenitalia. Dopo un paio di settimane passate sui treni, mi sono accorto di un servizio interessante: il sito Viaggiatreno: il sito contiene le informazioni sui treni (informazioni in tempo reale sullo stato di un treno … Continue reading Trenitalia e Viaggiatreno: come implementare un servizio “fai da te” per avere le informazioni dello stato di un treno via SMS