<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python on Michele Bologna</title>
    <link>https://www.michelebologna.net/tags/python/</link>
    <description>Recent content in Python on Michele Bologna</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 02 Feb 2016 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.michelebologna.net/tags/python/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Spotify puzzles: round two</title>
      <link>https://www.michelebologna.net/2016/spotify-puzzles-round-two/</link>
      <pubDate>Tue, 02 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2016/spotify-puzzles-round-two/</guid>
      <description>&lt;p&gt;Some months ago, &lt;a href=&#34;https://www.michelebologna.net/2015/05/spotify-puzzles-round-one/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;I began challenging myself with &lt;strong&gt;Spotify puzzles&lt;/strong&gt;&lt;/a&gt;: at that time I was dealing with an easy problem; now, the difficulty has increased. The round two consists in the typical &amp;ldquo;&lt;em&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Selection_algorithm&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Selection problem&lt;/a&gt;&lt;/em&gt;&amp;rdquo;: given an array of values, find the max (or min) &lt;code&gt;k&lt;/code&gt; values. I decided to still use Python and to use its &lt;strong&gt;heapq&lt;/strong&gt; module to store values in a binary max-heap data structure, and then remove exactly &lt;code&gt;k&lt;/code&gt; values from the top of the heap. This approach will guarantee that the total time complexity of the algorithm will be &lt;code&gt;O(n log k)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fun with Python powered telnetd honeypot</title>
      <link>https://www.michelebologna.net/2015/fun-with-python-powered-telnetd-honeypot/</link>
      <pubDate>Fri, 04 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2015/fun-with-python-powered-telnetd-honeypot/</guid>
      <description>&lt;h2 id=&#34;reason-hardening-serendipity-and-curiosity&#34;&gt;&#xA;  Reason: hardening, serendipity and curiosity&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#reason-hardening-serendipity-and-curiosity&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link to heading&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link to heading&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;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 &lt;a href=&#34;https://help.ubuntu.com/community/UFW&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;ufw&lt;/a&gt; as a fronted for iptables, Fedora uses &lt;a href=&#34;https://fedoraproject.org/wiki/FirewallD&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;firewalld&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Formattare i decimali con Python</title>
      <link>https://www.michelebologna.net/2012/formattare-i-decimali-con-python/</link>
      <pubDate>Mon, 05 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/formattare-i-decimali-con-python/</guid>
      <description>&lt;p&gt;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, e in gergo sono chiamati &lt;em&gt;leading zeros&lt;/em&gt;. Questo ragionamento non vale solo per i numeri in binario, ma per tutti i casi in cui si vuole formattare l&amp;rsquo;output di Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>django: come fare il deploy di un’applicazione su Apache</title>
      <link>https://www.michelebologna.net/2012/django-come-fare-il-deploy-di-unapplicazione-su-apache/</link>
      <pubDate>Tue, 28 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/django-come-fare-il-deploy-di-unapplicazione-su-apache/</guid>
      <description>&lt;p&gt;Una volta che avete terminato lo sviluppo di un&amp;rsquo;applicazione basata su django, è il momento di installarla in produzione. Nel mio caso, ho utilizzato django 1.3.1 e ho scelto di utilizzare &lt;a href=&#34;https://httpd.apache.org/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Apache&lt;/a&gt; e &lt;a href=&#34;https://code.google.com/p/modwsgi/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;mod_wsgi&lt;/a&gt;. Vediamo come fare il deploy passo-passo:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sviluppare applicazioni web con Django: la mia recensione</title>
      <link>https://www.michelebologna.net/2011/sviluppare-applicazioni-web-con-django-la-mia-recensione/</link>
      <pubDate>Wed, 30 Nov 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/sviluppare-applicazioni-web-con-django-la-mia-recensione/</guid>
      <description>&lt;p&gt;Spinto dalla curiosità, mi sono deciso ad imparare il &lt;strong&gt;framework &lt;a href=&#34;https://en.wikipedia.org/wiki/Django_%5c%28Web_framework%5c%29&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Django&lt;/a&gt;&lt;/strong&gt;, basato su Python, per sviluppare applicazioni web. In particolare, mi sono procurato il libro di &lt;a href=&#34;https://beri.it/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Marco Beri&lt;/a&gt; ``&lt;strong&gt;Sviluppare applicazioni web con Django&lt;/strong&gt;&amp;rsquo;&amp;rsquo;, edito da Apogeo. Comincio subito col dire che il prezzo è decisamente alto (32 Euro), nonostante il libro sia del 2009.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python: scriviamo un generatore di Fibonacci ricorsivo (e poi iterativo) ed analizziamone la complessità asintotica</title>
      <link>https://www.michelebologna.net/2011/python-scriviamo-un-generatore-di-fibonacci-ricorsivo-e-poi-iterativo-ed-analizziamone-la-complessita-asintotica/</link>
      <pubDate>Tue, 14 Jun 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/python-scriviamo-un-generatore-di-fibonacci-ricorsivo-e-poi-iterativo-ed-analizziamone-la-complessita-asintotica/</guid>
      <description>&lt;p&gt;Tralasciando la parte matematica su cui potete trovare un&amp;rsquo;esauriente (ed interessante) spiegazione su Wikipedia, la &lt;a href=&#34;https://it.wikipedia.org/wiki/Successione_di_Fibonacci&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;serie di Fibonacci&lt;/a&gt; si definisce:&lt;/p&gt;&#xA;&lt;p&gt;F(n) = F(n-1) + F(n-2)&lt;/p&gt;&#xA;&lt;p&gt;per n &amp;gt; 1, e F(1) = 1 e F(0) = 0&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python: scriviamo un HTTPS downloader simile a wget (con urllib2, optparse e getpass)</title>
      <link>https://www.michelebologna.net/2011/python-scriviamo-un-https-downloader-simile-a-wget-con-urllib2-optparse-e-getpass/</link>
      <pubDate>Thu, 02 Jun 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/python-scriviamo-un-https-downloader-simile-a-wget-con-urllib2-optparse-e-getpass/</guid>
      <description>&lt;p&gt;Per ragioni di semplicità di utilizzo e immediatezza (e anche per &lt;em&gt;imparare qualcosa di nuovo)&lt;/em&gt;, la settimana scorsa ho dovuto scrivere un downloader da linea di comando simile a GNU &lt;a href=&#34;https://www.gnu.org/software/wget/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;wget&lt;/a&gt;, ma con alcuni requisiti personalizzati:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scambiare il contenuto di due variabili int senza utilizzare una variabile temporanea: XOR swap</title>
      <link>https://www.michelebologna.net/2011/scambiare-il-contenuto-di-due-variabili-int-senza-utilizzare-una-variabile-temporanea-xor-swap/</link>
      <pubDate>Tue, 19 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/scambiare-il-contenuto-di-due-variabili-int-senza-utilizzare-una-variabile-temporanea-xor-swap/</guid>
      <description>&lt;p&gt;Una domanda interessante che mi è stata posta è: &amp;ldquo;com&amp;rsquo;è possibile scambiare il contenuto di due variabili &lt;em&gt;senza utilizzare una variabile temporanea&lt;/em&gt;?&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Infatti, per scambiare il contenuto di due variabili, di solito si utilizza una variabile temporanea (vediamo un esempio in Python):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python e il metodo setdefault</title>
      <link>https://www.michelebologna.net/2011/python-e-il-metodo-setdefault/</link>
      <pubDate>Fri, 25 Mar 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/python-e-il-metodo-setdefault/</guid>
      <description>&lt;p&gt;Note to &lt;em&gt;self&lt;/em&gt; (pun intended): questo post rappresenta una sorta di appunto mentale per ricordarmi il funzionamento di &lt;code&gt;setdefault&lt;/code&gt; in Python, visto che puntualmente mi trovo ad utilizzarlo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;setdefault&lt;/code&gt; è utilizzato sui dizionari (&lt;code&gt;dict&lt;/code&gt;) e permette di impostare una chiave di default durante una set. Mi spiego meglio con un esempio:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Trenitalia e Viaggiatreno: come implementare un servizio &#34;fai da te&#34; per avere le informazioni dello stato di un treno via SMS</title>
      <link>https://www.michelebologna.net/2010/trenitalia-e-viaggiatreno-come-implementare-un-servizio-fai-da-te-per-avere-le-informazioni-dello-stato-di-un-treno-via-sms/</link>
      <pubDate>Fri, 21 May 2010 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2010/trenitalia-e-viaggiatreno-come-implementare-un-servizio-fai-da-te-per-avere-le-informazioni-dello-stato-di-un-treno-via-sms/</guid>
      <description>&lt;p&gt;Da quando sono diventato un pendolare (per lavoro), ho iniziato a (ri)frequentare assiduamente le stazioni &lt;strong&gt;ferroviarie&lt;/strong&gt; e i treni di &lt;strong&gt;Trenitalia&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.flickr.com/photos/23681443@N05/4611971337/&#34; title=&#34;station.&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;img src=&#34;https://farm5.static.flickr.com/4051/4611971337_4d468f8f49_t.jpg&#34; alt=&#34;station.&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dopo un paio di settimane passate sui treni, mi sono accorto di un servizio interessante: il sito &lt;strong&gt;&lt;a href=&#34;http://www.viaggiatreno.it&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Viaggiatreno&lt;/a&gt;: il sito contiene le informazioni sui treni (informazioni in tempo reale sullo stato di un treno come ritardo o anticipo, ora prevista di arrivo e fermate già effettuate).&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python: come ordinare un dizionario [dict] per chiave o per valore</title>
      <link>https://www.michelebologna.net/2009/python-come-ordinare-un-dizionario-dict-per-chiave-o-per-valore/</link>
      <pubDate>Mon, 07 Dec 2009 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2009/python-come-ordinare-un-dizionario-dict-per-chiave-o-per-valore/</guid>
      <description>&lt;p&gt;In Python, i dizionari (dict) sono una struttura dati associativa che associa una chiave ad un valore (k, v):&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;d = {}&#xA;d[&amp;#39;bart&amp;#39;] = &amp;#39;marge&amp;#39;&#xA;d[&amp;#39;maggie&amp;#39;] = &amp;#39;homer&amp;#39;&#xA;d[&amp;#39;milhouse&amp;#39;] = &amp;#39;nelson&amp;#39;&#xA;d[&amp;#39;lisa&amp;#39;] = &amp;#39;skinner&amp;#39;&#xA;&amp;gt;&amp;gt;&amp;gt; d&#xA;{&amp;#39;maggie&amp;#39;: &amp;#39;homer&amp;#39;, &amp;#39;lisa&amp;#39;: &amp;#39;skinner&amp;#39;, &amp;#39;bart&amp;#39;: &amp;#39;marge&amp;#39;, &amp;#39;milhouse&amp;#39;: &amp;#39;nelson&amp;#39;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Esistono due modi di ordinare un dizionario:&lt;/p&gt;</description>
    </item>
    <item>
      <title>10 cose da fare dopo aver installato Ubuntu Intrepid 8.10</title>
      <link>https://www.michelebologna.net/2009/10-cose-da-fare-dopo-aver-installato-ubuntu-intrepid-810/</link>
      <pubDate>Mon, 23 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2009/10-cose-da-fare-dopo-aver-installato-ubuntu-intrepid-810/</guid>
      <description>&lt;p&gt;Ultimamente ho reinstallato Linux sulla mia macchina principale, dopo anni in cui lo tenevo relegato in una virtual machine in VMWare. La scelta della distribuzione è ovviamente caduta su Ubuntu Intrepid 8.10.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python: uno script per eliminare i file Thumbs.db e le cartelle .DS_Store</title>
      <link>https://www.michelebologna.net/2008/python-uno-script-per-eliminare-i-file-thumbsdb-e-le-cartelle-ds_store/</link>
      <pubDate>Tue, 09 Sep 2008 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2008/python-uno-script-per-eliminare-i-file-thumbsdb-e-le-cartelle-ds_store/</guid>
      <description>&lt;p&gt;Windows XP crea automaticamente un file, chiamato Thumbs.db, in tutte le cartelle che visita per salvarne la visualizzazione (dettagli, anteprima, etc.). La stessa cosa fa OSX, creando addirittura (!) una cartella dal nome .DS_Store, contenente gli stessi attributi.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python: come mandare un e-mail con GMail TLS/SSL</title>
      <link>https://www.michelebologna.net/2008/python-come-mandare-un-e-mail-con-gmail-tlsssl/</link>
      <pubDate>Mon, 11 Aug 2008 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2008/python-come-mandare-un-e-mail-con-gmail-tlsssl/</guid>
      <description>&lt;p&gt;Mi è capitato di dover mandare un e-mail da uno script Python: quale provider utilizzare? Ovviamente GMail!&lt;/p&gt;&#xA;&lt;p&gt;Per questioni di spam, alcuni server SMTP non permettono di inviare e-mail senza essersi prima autenticati; nel caso di GMail, il protocollo per l&amp;rsquo;invio di mail non è il semplice SMTP in chiaro, bensì SMTP con autenticazione via TLS/SSL.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python in 10 minuti</title>
      <link>https://www.michelebologna.net/2007/python-in-10-minuti/</link>
      <pubDate>Sun, 15 Jul 2007 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2007/python-in-10-minuti/</guid>
      <description>&lt;p&gt;E&amp;rsquo; da un bel po&amp;rsquo; di tempo che mi piacerebbe imparare il &lt;strong&gt;&lt;a href=&#34;https://python.org&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Python&lt;/a&gt;&lt;/strong&gt;. Tra l&amp;rsquo;altro, le &lt;a href=&#34;https://www.python.org/about/apps/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;applicazioni&lt;/a&gt; &lt;strong&gt;basate&lt;/strong&gt; su questo linguaggio di programmazione sono molto numerose.&lt;/p&gt;&#xA;&lt;p&gt;Ieri ho trovato &lt;a href=&#34;https://web.archive.org/web/20091230045759/http://www.poromenos.org:80/tutorials/python&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;quest&amp;rsquo;articolo molto interessante&lt;/strong&gt;&lt;/a&gt;: propone di insegnare Python in soli 10 minuti!&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
