<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Programming on Michele Bologna</title>
    <link>https://www.michelebologna.net/categories/programming/</link>
    <description>Recent content in Programming on Michele Bologna</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Wed, 28 Dec 2016 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.michelebologna.net/categories/programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>git: deleting remote tracked branches</title>
      <link>https://www.michelebologna.net/2016/git-deleting-remote-tracked-branches/</link>
      <pubDate>Wed, 28 Dec 2016 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2016/git-deleting-remote-tracked-branches/</guid>
      <description>&lt;p&gt;Since I&amp;rsquo;m always &lt;em&gt;DuckDuckGo-ing&lt;/em&gt; for these information, I&amp;rsquo;ll set a note here for future reference and for all of you, fellow readers.&lt;/p&gt;&#xA;&lt;p&gt;Situation: one (or more) remote-tracked git branches got deleted (either locally or remote). You are in either one of the two cases following:&lt;/p&gt;</description>
    </item>
    <item>
      <title>git tip: multiple identities</title>
      <link>https://www.michelebologna.net/2016/git-tip-multiple-identities/</link>
      <pubDate>Fri, 19 Aug 2016 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2016/git-tip-multiple-identities/</guid>
      <description>&lt;p&gt;If you are using git version control for personal and work repositories, it is &lt;em&gt;tricky&lt;/em&gt; to change your email address (in &lt;code&gt;~/.gitconfig&lt;/code&gt;) to properly use the correct email before committing to a repo (this is what I do, depending on the nature of the repo: personal repo -&amp;gt; personal email, work repo -&amp;gt; work email).&lt;/p&gt;</description>
    </item>
    <item>
      <title>ZeroTurnaround&#39;s Java Tools and Technologies Landscape Report 2016</title>
      <link>https://www.michelebologna.net/2016/zeroturnarounds-java-tools-and-technologies-landscape-report-2016/</link>
      <pubDate>Sat, 16 Jul 2016 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2016/zeroturnarounds-java-tools-and-technologies-landscape-report-2016/</guid>
      <description>&lt;p&gt;As of every year, ZeroTurnaround released the &lt;a href=&#34;http://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;yearly report of their survey about Java and Java-related technologies among professional developers&lt;/strong&gt;&lt;/a&gt;. I find this report very interesting, and I usually compare (or &lt;em&gt;discover&lt;/em&gt;) existing technology solutions.&lt;/p&gt;</description>
    </item>
    <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>Spotify puzzles: round one</title>
      <link>https://www.michelebologna.net/2015/spotify-puzzles-round-one/</link>
      <pubDate>Sat, 16 May 2015 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2015/spotify-puzzles-round-one/</guid>
      <description>&lt;p&gt;Some time ago I came across &lt;a href=&#34;https://web.archive.org/web/20160413202413/https://labs.spotify.com/puzzles/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Spotify puzzles&lt;/a&gt;, a website in which Spotify&amp;rsquo;s engineers list a series of CS problems and gather solutions from interested people.&lt;/p&gt;&#xA;&lt;p&gt;The interesting idea is that all solutions should be sent via mail, and an honorable (automated) judge tests the solution and sends the feedback.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chocolatey: apt-get per Windows</title>
      <link>https://www.michelebologna.net/2014/chocolatey-apt-get-per-windows/</link>
      <pubDate>Sat, 13 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2014/chocolatey-apt-get-per-windows/</guid>
      <description>&lt;p&gt;Quando faccio il setup di una macchina con sistema operativo Windows, sento la mancanza di &lt;em&gt;apt-get&lt;/em&gt; (per chi mastica Debian/Ubuntu) o &lt;em&gt;yum&lt;/em&gt; (Red Hat/Fedora) per installare rapidamente programmi in una semplice istruzione.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gli showcases di GitHub: un link da bookmarkare!</title>
      <link>https://www.michelebologna.net/2014/gli-showcases-di-github-un-link-da-bookmarkare/</link>
      <pubDate>Sat, 07 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2014/gli-showcases-di-github-un-link-da-bookmarkare/</guid>
      <description>&lt;p&gt;Oggi ho trovato un link molto interessante su &lt;strong&gt;&lt;a href=&#34;https://github.com/showcases/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub: gli showcases&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.michelebologna.net/images/2014/06/github_showcases.png&#34; alt=&#34;Github showcases&#34; title=&#34;github_showcases.png&#34;&gt;Si tratta di una pagina ospitata dal famoso sito di social coding che permette di conoscere ed esplorare alcuni progetti software opensource e - &lt;em&gt;perché no&lt;/em&gt; - prendere spunti di organizzazione e metodologie di un progetto. I progetti sono catalogati per topic per una più facile consultazione, ed è molto ben fatto ed organizzato.&lt;/p&gt;</description>
    </item>
    <item>
      <title>git-flow: il modello di git workflow che utilizzo</title>
      <link>https://www.michelebologna.net/2013/git-flow-il-modello-di-versioning-che-utilizzo/</link>
      <pubDate>Sat, 23 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2013/git-flow-il-modello-di-versioning-che-utilizzo/</guid>
      <description>&lt;p&gt;Dopo aver letto l&amp;rsquo;interessante presentazione &amp;ldquo;&lt;a href=&#34;https://zachholman.com/talk/how-github-uses-github-to-build-github/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;How GitHub uses GitHub to build GitHub&lt;/em&gt;&lt;/a&gt;&amp;rdquo;, ho deciso di dare un&amp;rsquo;occhiata al modello di workflow chiamato &lt;strong&gt;git-flow&lt;/strong&gt; [che si basa, ovviamente, sull&amp;rsquo;utilizzo di git]. In sintesi:&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTML5 e CSS avanzato: una guida per (re)-impararli</title>
      <link>https://www.michelebologna.net/2013/html5-e-css-avanzato-una-guida-per-re-impararli/</link>
      <pubDate>Thu, 29 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2013/html5-e-css-avanzato-una-guida-per-re-impararli/</guid>
      <description>&lt;p&gt;Nonostante HTML5 sia ancora un &lt;em&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Html5#Standardization_process&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;release candidate&lt;/a&gt;&lt;/em&gt; al momento della scrittura di questo post, molte delle peculiarità del linguaggio sono supportate dai browser più evoluti (Chrome, Safari, Firefox, Opera ed IE10).&lt;/p&gt;</description>
    </item>
    <item>
      <title>iOS Bootcamp al TAG di Bergamo</title>
      <link>https://www.michelebologna.net/2013/ios-bootcamp-al-tag-di-bergamo/</link>
      <pubDate>Thu, 28 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2013/ios-bootcamp-al-tag-di-bergamo/</guid>
      <description>&lt;p&gt;Ieri sera ho partecipato all&amp;rsquo;incontro &amp;ldquo;&lt;strong&gt;iOS Bootcamp&lt;/strong&gt;&amp;rdquo; organizzato dalla community di &lt;em&gt;&lt;a href=&#34;https://pragmamark.org/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;#pragma mark&lt;/a&gt;&lt;/em&gt; presso il &lt;a href=&#34;https://talentgarden.org/en-it/campus/italy/bergamo-ubi-banca/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;TAG&lt;/em&gt; di Bergamo&lt;/a&gt;. Non era la prima volta che frequentavo il &lt;em&gt;TAG&lt;/em&gt;: un luogo dove incontrare giovani startupper e persone interessanti con cui discutere di tecnologia ed innovazione in un ambiente stimolante e creativo.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tutte le novità di Java 7</title>
      <link>https://www.michelebologna.net/2013/tutte-le-novita-di-java-7/</link>
      <pubDate>Sun, 10 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2013/tutte-le-novita-di-java-7/</guid>
      <description>&lt;p&gt;A metà 2011 è stata rilasciata la versione 7 di &lt;strong&gt;&lt;a href=&#34;https://java.oracle.com/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Java&lt;/a&gt;&lt;/strong&gt; [nickname &lt;em&gt;Dolphin&lt;/em&gt;]. Due sono le grandi novità di questo rilascio:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java è ora marchiata Oracle (che ha acquisito Sun)&lt;/li&gt;&#xA;&lt;li&gt;La reference implementation è ora &lt;a href=&#34;http://openjdk.java.net/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;OpenJDK&lt;/a&gt; (l&amp;rsquo;implementazione open-source di Java), mentre per le passate versioni rimane HotSpot, la versione di Sun Oracle.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Le novità più interessanti, dal punto di vista delle API, sono:&lt;/p&gt;</description>
    </item>
    <item>
      <title>zsh: perché non utilizzo bash</title>
      <link>https://www.michelebologna.net/2012/zsh-perche-non-utilizzo-bash/</link>
      <pubDate>Sat, 08 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/zsh-perche-non-utilizzo-bash/</guid>
      <description>&lt;p&gt;Su tutte le macchine Linux e OSX che amministro non uso come shell di default la bash; uso invece &lt;strong&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Zsh&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;zsh&lt;/a&gt;&lt;/strong&gt;, perché:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;zsh si offre di completare anche le opzioni e i parametri dei programmi più usati;&lt;/li&gt;&#xA;&lt;li&gt;zsh fa spelling correction dei comandi digitati, chiedendo interattivamente se volete correggere il comando;&lt;/li&gt;&#xA;&lt;li&gt;zsh offre una customizzazione più spinta della bash (vedremo tra poco il mio prompt);&lt;/li&gt;&#xA;&lt;li&gt;zsh condivide la history tra più sessioni attive contemporaneamente;&lt;/li&gt;&#xA;&lt;li&gt;zsh è già installata, di default, su OSX (ed è nei repo di Ubuntu, percui basta un aptitude install zsh).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Se questi vantaggi non dovrebbero bastare, ecco il mio prompt:&lt;/p&gt;</description>
    </item>
    <item>
      <title>FizzBuzz reloaded: le differenze tra Java e Ruby</title>
      <link>https://www.michelebologna.net/2012/fizzbuzz-reloaded-le-differenze-tra-java-e-ruby/</link>
      <pubDate>Tue, 27 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/fizzbuzz-reloaded-le-differenze-tra-java-e-ruby/</guid>
      <description>&lt;p&gt;Tempo fa vi ho parlato di &lt;a href=&#34;https://www.michelebologna.net/2012/03/fizzbuzz-una-sfida-per-programmatori/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FizzBuzz&lt;/a&gt;, un quiz spesso posto ai programmatori alle prime armi.&lt;/p&gt;&#xA;&lt;p&gt;Una variante è la seguente:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sommare tutti i numeri da 1 a 200 che non sono multipli di 4 e di 7&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>viaggiatreno-scraper: una libreria Ruby per accedere a viaggiatreno/trenitalia</title>
      <link>https://www.michelebologna.net/2012/viaggiatreno-scraper-una-libreria-ruby-per-accedere-a-viaggiatrenotrenitalia/</link>
      <pubDate>Sat, 22 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/viaggiatreno-scraper-una-libreria-ruby-per-accedere-a-viaggiatrenotrenitalia/</guid>
      <description>&lt;p&gt;Un po&amp;rsquo; per divertimento e un po&amp;rsquo; perché volevo approfondire la mia conoscenza di &lt;strong&gt;Ruby&lt;/strong&gt; e delle &lt;strong&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Regex&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;regex&lt;/a&gt;&lt;/strong&gt;, oltre che delle espressioni &lt;strong&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Xpath&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;XPath&lt;/a&gt;&lt;/strong&gt;, ho deciso di rilasciare una libreria opensource Ruby che ho creato. Permette infatti di accedere ai dati di &lt;a href=&#34;http://viaggiatreno.it/viaggiatreno/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;viaggiatreno&lt;/a&gt; che espone gli orari dei treni di Trenitalia in tempo reale.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript Scope Quiz</title>
      <link>https://www.michelebologna.net/2012/javascript-scope-quiz/</link>
      <pubDate>Wed, 05 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/javascript-scope-quiz/</guid>
      <description>&lt;p&gt;Se vi state cimentando nell&amp;rsquo;apprendimento di &lt;a href=&#34;https://en.wikipedia.org/wiki/Javascript&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Javascript&lt;/a&gt;, vi segnalo l&amp;rsquo;interessante &lt;strong&gt;&lt;a href=&#34;https://web.archive.org/web/20190131122423/http://madebyknight.com:80/javascript-scope/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Javascript Scope Quiz&lt;/a&gt;&lt;/strong&gt;, che vi metterà alla prova sugli &lt;em&gt;scope&lt;/em&gt; delle variabili. Il quiz non è difficile, ma vi aiuta a capire le particolarità di Javascript per quanto riguarda gli scope, come questa domanda:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Impariamo git con un semplice tutorial</title>
      <link>https://www.michelebologna.net/2012/impariamo-git-con-un-semplice-tutorial/</link>
      <pubDate>Thu, 30 Aug 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/impariamo-git-con-un-semplice-tutorial/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;GitHub&lt;/a&gt;, il social hoster di codice open source più famoso degli ultimi anni, ha messo a disposizione un semplice tutorial per imparare le basi di &lt;a href=&#34;https://git-scm.com/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;git&lt;/a&gt;, il &lt;a href=&#34;https://en.wikipedia.org/wiki/Source_Control_Management&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;SCM&lt;/a&gt; ideato da Linus Torvalds e lo standard &lt;em&gt;de facto&lt;/em&gt; dei progetti open source.&lt;/p&gt;</description>
    </item>
    <item>
      <title>jVisualVM: il profiler Java incluso nella JDK</title>
      <link>https://www.michelebologna.net/2012/jvisualvm-il-profiler-java-incluso-nella-jdk/</link>
      <pubDate>Sat, 21 Jul 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/jvisualvm-il-profiler-java-incluso-nella-jdk/</guid>
      <description>&lt;p&gt;Mi sono recentemente trovato a dover fare del profiling di prestazioni di un software Java SE. Tra le varie &lt;a href=&#34;https://en.wikipedia.org/wiki/List_of_performance_analysis_tools#Java&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;opzioni che avevo a disposizione per il profiling in ambito Java&lt;/a&gt;, ho scelto &lt;strong&gt;&lt;a href=&#34;https://visualvm.github.io/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;jVisualVM&lt;/a&gt;&lt;/strong&gt;&lt;a href=&#34;https://visualvm.github.io/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;/a&gt; inizialmente perché già incluso nella JVM (a partire dalla versione 1.6, tutte le Sun Java JDK includono il profiler).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aggiornare tutte le Ruby gems installate</title>
      <link>https://www.michelebologna.net/2012/aggiornare-tutti-le-ruby-gems-installate/</link>
      <pubDate>Fri, 11 May 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/aggiornare-tutti-le-ruby-gems-installate/</guid>
      <description>&lt;p&gt;Per aggiornare le gem installate suggerisco di:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Aggiornare la versione di &lt;a href=&#34;https://rubygems.org/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;RubyGems&lt;/a&gt; installata:&lt;code&gt;gem update --system&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Aggiornare tutte le gemme installate: &lt;code&gt;gem update&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Rimuovere la versione &amp;ldquo;obsoleta&amp;rdquo; delle gemme installate: &lt;code&gt;gem cleanup&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Può capitare che ci siano dei problemi di dipendenze durante la fase di cleanup:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aggiornare tutti i package Python installati con pip</title>
      <link>https://www.michelebologna.net/2012/aggiornare-tutti-i-package-python-installati-con-pip/</link>
      <pubDate>Wed, 02 May 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/aggiornare-tutti-i-package-python-installati-con-pip/</guid>
      <description>&lt;p&gt;Per aggiornare tutti i package Python installati, suggerisco di usare &lt;a href=&#34;http://www.pip-installer.org/en/latest/index.html&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pip&lt;/a&gt; nel seguente modo:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Aggiorno pip all&amp;rsquo;ultima versione (suppongo di avere easy_install): &lt;code&gt;easy_install -U pip&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Estraggo la lista dei pkg installati e li aggiorno uno per uno: &lt;code&gt;pip freeze --local | cut -d = -f 1 | xargs pip install -U&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Come mandare un segnale SIGINT (Ctrl-C) ad un programma che gira nella console di Eclipse</title>
      <link>https://www.michelebologna.net/2012/come-mandare-un-segnale-sigint-ctrl-c-ad-un-programma-che-gira-nella-console-di-eclipse/</link>
      <pubDate>Thu, 19 Apr 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/come-mandare-un-segnale-sigint-ctrl-c-ad-un-programma-che-gira-nella-console-di-eclipse/</guid>
      <description>&lt;p&gt;Quando si sviluppa un programma che deve girare ininterrottamente nella console, non ci sono problemi se si lancia il programma da console e lo si termina tramite la più classica delle combinazioni: Ctrl-C. Ma come si termina lo stesso programma se lo si è lanciato da Eclipse?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installare più plugin contemporaneamente su Eclipse</title>
      <link>https://www.michelebologna.net/2012/installare-piu-plugin-contemporaneamente-su-eclipse/</link>
      <pubDate>Thu, 29 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/installare-piu-plugin-contemporaneamente-su-eclipse/</guid>
      <description>&lt;p&gt;Eclipse è il mio IDE preferito per tutti gli sviluppi. Per migliorare le funzionalità di Eclipse, utilizzo alcuni plugin che semplificano il processo di sviluppo (ma dei plugin che utilizzo ve ne parlerò in un altro post). Un piccolo accorgimento che mi è stato utile è quello di installare più plugin contemporaneamente (dopo l&amp;rsquo;installazione di un plugin, Eclipse richiede un riavvio):&lt;/p&gt;</description>
    </item>
    <item>
      <title>FizzBuzz: una sfida per programmatori</title>
      <link>https://www.michelebologna.net/2012/fizzbuzz-una-sfida-per-programmatori/</link>
      <pubDate>Thu, 08 Mar 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/fizzbuzz-una-sfida-per-programmatori/</guid>
      <description>&lt;p&gt;Un quesito che viene spesso richiesto ai programmatori è quello di scrivere un programma &lt;a href=&#34;https://rosettacode.org/wiki/FizzBuzz&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;FizzBuzz&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Write a program that prints the numbers from 1 to 100. But for multiples of three print &amp;ldquo;Fizz&amp;rdquo; instead of the number and for the multiples of five print &amp;ldquo;Buzz&amp;rdquo;. For numbers which are multiples of both three and five print &amp;ldquo;FizzBuzz&amp;rdquo;.&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>AJAX per applicazioni web: la mia recensione</title>
      <link>https://www.michelebologna.net/2012/ajax-per-applicazioni-web-la-mia-recensione/</link>
      <pubDate>Wed, 11 Jan 2012 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2012/ajax-per-applicazioni-web-la-mia-recensione/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.michelebologna.net/images/2011/08/ajax_applicazioni_web.jpg&#34; alt=&#34;ajax_applicazioni_web&#34; title=&#34;ajax_applicazioni_web.jpg&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Nell&amp;rsquo;epoca del Web 3.0 ho letto questo libro che tratta (a grandi linee, come vi spiegherò tra poco) di AJAX, la &lt;em&gt;enabling technology&lt;/em&gt; del Web 2.0.&lt;/p&gt;&#xA;&lt;p&gt;Ma cos&amp;rsquo;è AJAX? È un insieme di tecnologie (tra cui Javascript e XML) che permettono lo scambio di dati tra client e server in modo asincrono, permettendo di realizzare le cosiddette RIA (Rich Internet Applications, come Gmail).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linguaggio C, seconda edizione (K&amp;#038;R): la mia recensione</title>
      <link>https://www.michelebologna.net/2011/linguaggio-c-seconda-edizione-kr-la-mia-recensione/</link>
      <pubDate>Tue, 27 Dec 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/linguaggio-c-seconda-edizione-kr-la-mia-recensione/</guid>
      <description>&lt;p&gt;In pochi giorni ho letto una pietra miliare dei libri della programmazione, il famoso K&amp;amp;R (dagli autori Kernighan &amp;amp; Ritchie); si tratta del libro più famoso per quanto riguarda la programmazione C.&lt;/p&gt;</description>
    </item>
    <item>
      <title>require_relative in ruby 1.9 e la retrocompatibilità con ruby 1.8</title>
      <link>https://www.michelebologna.net/2011/require_relative-in-ruby-1-9-e-la-retrocompatibilita-con-ruby-1-8/</link>
      <pubDate>Mon, 12 Dec 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/require_relative-in-ruby-1-9-e-la-retrocompatibilita-con-ruby-1-8/</guid>
      <description>&lt;p&gt;A partire da ruby 1.9 è obbligatorio utilizzare l&amp;rsquo;istruzione:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;require_relative &#39;pkg&#39;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;affinché venga importato il modulo &amp;lsquo;pkg&amp;rsquo; presente nella &lt;em&gt;stessa&lt;/em&gt; directory in cui è presente il modulo che stiamo scrivendo. Mi spiego meglio: dato un modulo ruby detto &amp;lsquo;pkg&amp;rsquo;, se vogliamo importarlo in un altro file (chiamiamolo &amp;lsquo;foo&amp;rsquo; per semplicità), dobbiamo scrivere:&lt;/p&gt;</description>
    </item>
    <item>
      <title>gitignore: un filtro per escludere i file da non versionare in un repository git</title>
      <link>https://www.michelebologna.net/2011/gitignore-un-filtro-per-escludere-i-file-da-non-versionare-in-un-repository-git/</link>
      <pubDate>Tue, 06 Dec 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/gitignore-un-filtro-per-escludere-i-file-da-non-versionare-in-un-repository-git/</guid>
      <description>&lt;p&gt;Prima di fare un push su un repository git è importante avere configurato il &lt;strong&gt;gitignore&lt;/strong&gt;, ovvero specificare quali files non devono essere versionati in un repository git. A titolo di esempio: i file .&lt;a href=&#34;https://docs.python.org/release/1.5.1p1/tut/node43.html&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;pyc&lt;/a&gt;, o più in generale i prodotti della compilazione di un qualsiasi file di sorgente; versionare questi files, infatti, &lt;em&gt;non ha senso&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PHP5 e MySQL, la guida: la mia recensione</title>
      <link>https://www.michelebologna.net/2011/php5-e-mysql-la-guida-la-mia-recensione/</link>
      <pubDate>Wed, 24 Aug 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/php5-e-mysql-la-guida-la-mia-recensione/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.michelebologna.net/images/2011/08/php_mysql_guida.jpg&#34; alt=&#34;php_mysql_guida&#34; title=&#34;php_mysql_guida.jpg&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Per ripassare le mie nozioni di PHP5, ho deciso di leggere il libro di McGraw-Hill, &amp;ldquo;&lt;strong&gt;PHP5 e MySQL, la guida&lt;/strong&gt;&amp;rdquo;, composto da circa 1100 (!) pagine. Perché proprio PHP? Peché, PHP è un linguaggio di successo, sebbene non venga presentato nei migliori dei modi (&amp;ldquo;è un linguaggio per principianti&amp;rdquo;). Ecco almeno 4 ragioni per cui conoscere PHP è un plus:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java: come scrivere un build.xml di ant per compilare e pacchettizzare (WAR/EAR)</title>
      <link>https://www.michelebologna.net/2011/java-come-scrivere-un-build-xml-di-ant-per-compilare-e-pacchettizzare-warear/</link>
      <pubDate>Tue, 19 Jul 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/java-come-scrivere-un-build-xml-di-ant-per-compilare-e-pacchettizzare-warear/</guid>
      <description>&lt;p&gt;Come sapete, tutti i Java application server (come ad es. Tomcat) richiedono il deploy di un applicativo sottoforma di un pacchetto EAR. Ma come è composto un pacchetto EAR?&lt;/p&gt;&#xA;&lt;p&gt;Un pacchetto EAR non è altro che un file jar (che a sua volta è un file zip) che contiene al suo interno:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pressman &amp;#8211; &amp;#8220;Principi di Ingegneria del Software&amp;#8221; &amp;#8211; quarta edizione: la mia recensione</title>
      <link>https://www.michelebologna.net/2011/pressman-principi-di-ingegneria-del-software-quarta-edizione-la-mia-recensione/</link>
      <pubDate>Thu, 14 Jul 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/pressman-principi-di-ingegneria-del-software-quarta-edizione-la-mia-recensione/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.michelebologna.net/images/2011/06/principi_ingegneria_sw.jpg&#34; &gt;&lt;img src=&#34;https://www.michelebologna.net/images/2011/06/principi_ingegneria_sw-225x300.jpg&#34; alt=&#34;&#34; title=&#34;principi_ingegneria_sw&#34;&gt;&lt;/a&gt;Ad un paio di anni di distanza dal corso di &amp;ldquo;Ingegneria del Software&amp;rdquo; frequentato all&amp;rsquo;università, ho deciso di rileggere il libro di Roger Pressman, &amp;ldquo;Principi di Ingegneria del Software&amp;rdquo;, che nel frattempo era avanzato fino alla quarta edizione.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Online JavaScript Deminifier</title>
      <link>https://www.michelebologna.net/2011/online-javascript-deminifier/</link>
      <pubDate>Thu, 23 Jun 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/online-javascript-deminifier/</guid>
      <description>&lt;p&gt;Se vi trovate a dover debuggare del codice JavaScript che è &lt;em&gt;minified&lt;/em&gt; (per ottimizzare il trasferimento viene applicato il minifying, ovvero vengono tolti tutti gli spazi &lt;em&gt;inutili&lt;/em&gt; nel codice), dovete passare per un deminifier/unminified (o beautifier). In ogni caso, un tool che vi permetta di leggere il codice JavaScript senza &amp;ldquo;&lt;em&gt;incrociare gli occhi&lt;/em&gt;&amp;rdquo;.&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>Misurare la quantità di codice di un progetto</title>
      <link>https://www.michelebologna.net/2011/misurare-la-quantita-di-codice-di-un-progetto/</link>
      <pubDate>Tue, 26 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/misurare-la-quantita-di-codice-di-un-progetto/</guid>
      <description>&lt;p&gt;In questo post affronto un argomento abbastanza delicato: come si misura la &lt;em&gt;quantità di codice&lt;/em&gt; di un progetto?&lt;/p&gt;&#xA;&lt;p&gt;La soluzione più immediata è quella di contare le linee di codice (&lt;em&gt;Source Lines of Code&lt;/em&gt;, &lt;a href=&#34;https://en.wikipedia.org/wiki/Source_lines_of_code&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;SLOC&lt;/strong&gt;&lt;/a&gt;). Un esempio che ho personalmente applicato per contare le righe di codice di un progetto Java a partire dalla root del progetto, usando gli strumenti che Linux ci mette a disposizione: &lt;code&gt;find . -type f -name *.java | xargs wc -l&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>QR Codes e la Google Chart API</title>
      <link>https://www.michelebologna.net/2011/qr-codes-e-la-google-chart-api/</link>
      <pubDate>Fri, 22 Apr 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/qr-codes-e-la-google-chart-api/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.michelebologna.net/materiale/qr/about.png&#34; alt=&#34;&#34; title=&#34;about-qr&#34;&gt;Piccola intro: i QR Codes sono analoghi ai &amp;ldquo;normali&amp;rdquo; codici a barre, ma rappresentano un&amp;rsquo;evoluzione: possono contenere più dati (a parità di dimensione) e possono essere letti da una serie più ampia di dispositivi, come gli smartphone (su iOS segnalo l&amp;rsquo;ottima e gratuita &lt;a href=&#34;https://apps.apple.com/us/app/qr-reader-for-iphone/id368494609&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;QR Reader for iPhone&lt;/a&gt;). Dopo aver scaricato un lettore di QR Codes per il vostro smartphone, fate una fotografia all&amp;rsquo;oggetto qui accanto: il browser del vostro telefonino vi porterà nella pagina più visitata di questo sito&amp;hellip;&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>Python: scriviamo un quine</title>
      <link>https://www.michelebologna.net/2011/python-scriviamo-un-quine/</link>
      <pubDate>Tue, 01 Mar 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/python-scriviamo-un-quine/</guid>
      <description>&lt;p&gt;Una sfida che intriga molti programmatori è quella di scrivere un &lt;strong&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Quine_%28computing%29&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;em&gt;quine&lt;/em&gt;&lt;/a&gt;&lt;/strong&gt;, ovvero quello di scrivere un programma che stampi il proprio sorgente.&lt;/p&gt;&#xA;&lt;p&gt;Partiamo con la definizione più semplice, e man mano aggiungiamo i vincoli necessari. Un programmatore furbo potrebbe stampare il contenuto del sorgente semplicemente aprendolo e stampando il contenuto:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Eclipse: impostare un template per l&#39;inserimento di un Logger log4j</title>
      <link>https://www.michelebologna.net/2011/eclipse-impostare-un-template-per-linserimento-di-un-logger-log4j/</link>
      <pubDate>Tue, 22 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/eclipse-impostare-un-template-per-linserimento-di-un-logger-log4j/</guid>
      <description>&lt;p&gt;Mi capita spesso, in Eclipse, di inserire il codice per abilitare il logging di una classe tramite log4j:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;private static Logger logger = Logger.getLogger(Klass.class);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Utilizzano i templates, una funzionalità di Eclipse, possiamo evitare di riscrivere tutte le volte questa semplice istruzione. Per impostare un template, in Eclipse, è sufficiente recarsi su: Window &amp;gt; Preferences &amp;gt; Java &amp;gt; Editor &amp;gt; Templates e creiamo un nuovo template.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Come aggirare i captcha tramite OCR</title>
      <link>https://www.michelebologna.net/2011/come-aggirare-i-captcha-tramite-ocr/</link>
      <pubDate>Mon, 07 Feb 2011 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2011/come-aggirare-i-captcha-tramite-ocr/</guid>
      <description>&lt;p&gt;Segnalo questa &lt;a href=&#34;http://www.moioli.net/progetti/aggirare-captcha-4/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;serie di articoli scritti da Silvio&lt;/a&gt; che spiegano come aggirare i captcha, ovvero i &lt;em&gt;fastidiosi&lt;/em&gt; test somministrati da una macchina ad un umano per sapere se il &amp;ldquo;testato&amp;rdquo; è una macchina o un umano (un test di Turing al contrario?).&lt;/p&gt;</description>
    </item>
    <item>
      <title>UML Distilled, guida rapida al linguaggio di modellazione standard (terza edizione): la mia recensione</title>
      <link>https://www.michelebologna.net/2010/uml-distilled-guida-rapida-al-linguaggio-di-modellazione-standard-terza-edizione-la-mia-recensione/</link>
      <pubDate>Mon, 06 Dec 2010 00:00:00 +0000</pubDate>
      <guid>https://www.michelebologna.net/2010/uml-distilled-guida-rapida-al-linguaggio-di-modellazione-standard-terza-edizione-la-mia-recensione/</guid>
      <description>&lt;p&gt;Per rispolverare la mia preparazione in &lt;em&gt;ingegneria del software&lt;/em&gt;, ho deciso di leggere la &lt;em&gt;terza&lt;/em&gt; edizione di &lt;strong&gt;UML Disti****lled&lt;/strong&gt;, scritta dall&amp;rsquo;autorevole &lt;a href=&#34;https://en.wikipedia.org/wiki/Martin_Fowler&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Martin Fowler&lt;/a&gt;; in passato ho letto la seconda edizione, ma i libri di Fowler sono una lettura sempre piacevole e sopratutto utile. &lt;img src=&#34;https://www.michelebologna.net/images/2010/12/IMG_0015.jpg&#34; alt=&#34;&#34; title=&#34;UML_Distilled_terza_edizione&#34;&gt; Il libro è condensato (solo 155 pagine) ma pregno di argomenti e tecniche utili. Innanzitutto, specifico subito che il libro si basa sulla specifica &lt;a href=&#34;https://en.wikipedia.org/wiki/Unified_Modeling_Language#UML_2.x&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;&lt;strong&gt;UML2&lt;/strong&gt;&lt;/a&gt; e in particolare presenta una descrizione chiara e concisa sulle tecniche fondamentali e utili a chi si occupa di progettazione del software. Le tecniche sono presentate in modo semplice e descrittivo, corredati da un paio di esempi per ogni tecnica. Inoltre, si illustrano i punti di forza e debolezza di ogni tecnica. Oltretutto, per ogni tecnica è presente una sezione che spiega quando è utile utilizzare una determinata tecnica piuttosto che un&amp;rsquo;altra. Ad esempio, i diagrammi di package sono utili nella progettazione di sistemi di grande scala per documentare le dipendenze tra i componenti più importanti. Al termine di ogni capitolo, Fowler introduce un repertorio di esercizi corredati di soluzione. A mio avviso, le tecniche più utili tra quelle presentate sono:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
