<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Vita di un sys-admin &#187; Programmazione</title>
	<atom:link href="http://blog.angelofailla.com/category/informatica/programmazione/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.angelofailla.com</link>
	<description>Storie, esperienze e pensieri da Dublino.</description>
	<lastBuildDate>Sun, 14 Aug 2011 22:11:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Highlight text on the fly thanks to terminfo and sed.</title>
		<link>http://blog.angelofailla.com/2011/06/27/highlight-text-on-the-fly-thanks-to-terminfo-and-sed/</link>
		<comments>http://blog.angelofailla.com/2011/06/27/highlight-text-on-the-fly-thanks-to-terminfo-and-sed/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 18:36:02 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[highlight]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[terminfo]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=2337</guid>
		<description><![CDATA[A colleague today was looking for a way to pipe something to a command that highlights particular strings of text, keeping intact the stdin, similar to what you can see on some modern distros, ie Gentoo. Grep is not the way as it only prints the lines which contain the pattern that we are looking [...]]]></description>
			<content:encoded><![CDATA[<p>A colleague today was looking for a way to pipe something to a command that highlights particular strings of text, keeping intact the stdin, similar to what you can see on some modern distros, ie Gentoo.</p>
<p>Grep is not the way as it only prints the lines which contain the pattern that we are looking for.</p>
<p>While there are a bunch of tools that can do that, like supercat, etc. I felt no need to install additional packages for something you can do with few lines of bash and knowing terminal capabilities.</p>
<p>Therefore I wrote this small script, put it in the PATH env variable. The script uses sed and makes use of the terminfo database and of the terminal capabilities to color the text, here it is in case you find it useful:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">red</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span>tput bold;tput setaf <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">normal</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span>tput sgr0<span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> line; <span style="color: #000000; font-weight: bold;">do</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$line</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;s/\($1\)/<span style="color: #007800;">$red</span>\1<span style="color: #007800;">$normal</span>/&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></td></tr></table></div>

<p>If you don&#8217;t like red just read `man tput` and read <a href="http://wiki.bash-hackers.org/scripting/terminalcodes">this link</a> about terminal codes.</p>
<p>Example of usage:</p>
<p><a href="http://blog.angelofailla.com/wp-content/uploads/2011/06/highlight.jpg"><img src="http://blog.angelofailla.com/wp-content/uploads/2011/06/highlight.jpg" alt="" title="highlight" width="607" height="284" class="aligncenter size-full wp-image-2343" /></a></p>
<p>It also accept regexps (in sed syntax, not perl syntax), for example:</p>
<p><code><br />
$ sudo tail -f /var/log/system.log | highlight [Ss]potify<br />
</code></p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=2337&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2011%2F06%2F27%2Fhighlight-text-on-the-fly-thanks-to-terminfo-and-sed%2F&amp;title=Highlight%20text%20on%20the%20fly%20thanks%20to%20terminfo%20and%20sed." id="wpa2a_2"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2011/06/27/highlight-text-on-the-fly-thanks-to-terminfo-and-sed/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RSS-Bot</title>
		<link>http://blog.angelofailla.com/2011/01/20/rss-bot/</link>
		<comments>http://blog.angelofailla.com/2011/01/20/rss-bot/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 23:06:22 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=2231</guid>
		<description><![CDATA[Ho scritto questa cazzata un po&#8217; di tempo fa a lavoro nel tentativo (non riuscito) di migliorare un po&#8217; di comunicazione interna intra-dipartimentale e rendere l&#8217;azienda un posto piu&#8217; geek dove lavorare. Serviva un luogo dove tutti potessero stare per lavorare insieme a delle robe, con un bot che stampasse nei diversi canali ticket di [...]]]></description>
			<content:encoded><![CDATA[<p>Ho scritto questa cazzata un po&#8217; di tempo fa a lavoro nel tentativo (non riuscito) di migliorare un po&#8217; di comunicazione interna intra-dipartimentale e rendere l&#8217;azienda un posto piu&#8217; geek dove lavorare. Serviva un luogo dove tutti potessero stare per lavorare insieme a delle robe, con un bot che stampasse nei diversi canali ticket di nagios, jira e altre robe basate su RSS feed. Non doveva essere ne&#8217; Skype, ne&#8217; qualcosa XMPP based (perche&#8217; le stanze in XMPP sono un casino da creare). Ho proposto il classico server IRC + questo bot. Cosa c&#8217;e&#8217; di meglio di IRC? <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <strong>La proposta non e&#8217; stata recepita ovviamente&#8230;</strong></p>
<p>Magari a qualcuno serve e/o puo&#8217; prenderci spunto per fare qualcosa di migliore o diverso ma sempre basato su irc, ho messu su un po&#8217; di codice (non che sia poi il massimo) sul mio <a href="https://github.com/pallotron/rssbot">GitHUB a questa URL</a>.</p>
<p>Il bot legge un file YAML dove si possono specificare una serie di feed rss che poi possono essere associati a piu&#8217; canali, in modo tale che quando qualcosa di nuovo viene postato su un feed il bot printi un summary su ogni canale a cui e&#8217; associato.</p>
<p>Il codice e&#8217; molto basic, giusto un proof of concept che ho messo su&#8217;, e non vuole essere niente di performante, infatti dopo un po&#8217; di feed le prestazioni fanno un po&#8217; schifo <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Immagino che per tanti feed tocchi passare ai thread. Magari glieli aggiungo, oppure magari provo a farlo in Python visto che sto imparando&#8230;</p>
<p>Uso un CPAN module chiamato <a href="http://search.cpan.org/~hinrik/Bot-BasicBot-0.84/lib/Bot/BasicBot.pm">Bot::BasicBot</a>, basta solo estendere la sua classe e implementare il proprio codice per avere qualcosa di basic.</p>
<p>Alla prossima</p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=2231&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2011%2F01%2F20%2Frss-bot%2F&amp;title=RSS-Bot" id="wpa2a_4"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2011/01/20/rss-bot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SPQR</title>
		<link>http://blog.angelofailla.com/2010/12/18/spqr/</link>
		<comments>http://blog.angelofailla.com/2010/12/18/spqr/#comments</comments>
		<pubDate>Sat, 18 Dec 2010 00:09:52 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[English posts]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[romans]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=2040</guid>
		<description><![CDATA[I&#8217;ve been programming Perl for a while now, but I&#8217;ve seen lot of people around me (even Perl enthusiasts) getting very excited about Python. In Newbay it&#8217;s used mainly for automated and performance tests, but some times also for some system engineering automation. I can understand them, Python seems to be a pretty cool language, very clear and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been programming Perl for a while now, but I&#8217;ve seen lot of people around me (even Perl enthusiasts) getting very excited about Python.</p>
<p>In Newbay it&#8217;s used mainly for automated and performance tests, but some times also for some system engineering automation.</p>
<p>I can understand them, Python seems to be a pretty cool language, very clear and rigorous when compared to Perl, which tend to be messy (depending on the coder).</p>
<p>Python seems also to have more stuff into the default distribution which comes pre-installed on every Linux/Unix box. You already have http and xml libraries without the necessity of installing stuff (with Perl for example you don&#8217;t have LWP or any XML dom library by default and you have to install them through CPAN or your packaging system).</p>
<p>Also, with Jython is easier to interface with Java based stuff like JMS, etc. In the pat I&#8217;ve used some awful hacks using <a href="http://search.cpan.org/~patl/Inline-Java-0.52/Java.pod">Inline::Java</a> , they were working but, you know, they looked really scary.</p>
<p>I still do like Perl though, for doing simple and quick hacks, one-liners, etc.And I will probably continue to use it.</p>
<p>I&#8217;m currently reading this <a href="http://diveintopython.org/">Diving into Python</a> book, which is free to download or view online.</p>
<p>My colleague Brano has always tried to evangelize me, with no success so far (because of my chronic laziness), but today he gave me a nice puzzle which took me a couple of hours to solve <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>I&#8217;m sharing it with you just in case you fancy the idea to solve it too. Feel free to send me the result at<br />
pallotron (at) freaknet (dot) org <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>It&#8217;s called <strong>roman.py</strong>, it contains two functions called <strong>roman2dec</strong> and <strong>dec2roman</strong>, they should convert integers into roman numbers and viceversa.</p>
<p>Brano gave it to me with the excuse that, because I&#8217;m Italian, I should be pretty used with romans numbers and it wouldn&#8217;t take too much to solve it <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>I started in the afternoon while at work, it took a 1 hour and half to me to figure out the algo for the dec2roman function, I don&#8217;t consider myself a math genius so excuse me if I was slow <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>The roman2dec was a bit of a challenge, but after 3 glasses of nice white wine (<a href="http://www.vinicorvo.it/vinibianchi/glicine.htm">Corvo Glicine</a>) I started seen the pattern and I&#8217;ve nailed it <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In vino veritas! ahaha!</p>
<p>You have to write the code of the two functions so that the all unit tests pass (there are also negatives tests that you should take care of), here is the code. Just copy paste in a file called <strong>roman.py</strong> and execute it with <strong>python roman.py</strong>, enjoy!</p>
<p>I&#8217;ll publish my script in a week or so (just to give you the time to play with it, PLEASE DO NOT CHEAT <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">unittest</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># your global variables can go here, too ;)</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> roman2dec<span style="color: black;">&#40;</span>roman<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">assert</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>roman, <span style="color: #008000;">str</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'Expected string argument'</span>
    <span style="color: #808080; font-style: italic;"># your code goes here</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> dec2roman<span style="color: black;">&#40;</span>dec<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">assert</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>dec, <span style="color: #008000;">int</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'Expected integer argument'</span>
    <span style="color: #808080; font-style: italic;"># your code goes here</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> RomanTests<span style="color: black;">&#40;</span><span style="color: #dc143c;">unittest</span>.<span style="color: black;">TestCase</span><span style="color: black;">&#41;</span>:
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> testSimple<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">assertEqual</span><span style="color: black;">&#40;</span>roman2dec<span style="color: black;">&#40;</span><span style="color: #483d8b;">'XXIV'</span><span style="color: black;">&#41;</span>, <span style="color: #ff4500;">24</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertEqual</span><span style="color: black;">&#40;</span>roman2dec<span style="color: black;">&#40;</span><span style="color: #483d8b;">'mcmxcix'</span><span style="color: black;">&#41;</span>, <span style="color: #ff4500;">1999</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertEqual</span><span style="color: black;">&#40;</span>dec2roman<span style="color: black;">&#40;</span><span style="color: #ff4500;">13</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'XIII'</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertEqual</span><span style="color: black;">&#40;</span>dec2roman<span style="color: black;">&#40;</span><span style="color: #ff4500;">78</span><span style="color: black;">&#41;</span>, <span style="color: #483d8b;">'LXXVIII'</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> testInvalid<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.<span style="color: black;">assertRaises</span><span style="color: black;">&#40;</span><span style="color: #008000;">ValueError</span>, roman2dec, <span style="color: #483d8b;">'IIII'</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertRaises</span><span style="color: black;">&#40;</span><span style="color: #008000;">ValueError</span>, roman2dec, <span style="color: #483d8b;">'VX'</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertRaises</span><span style="color: black;">&#40;</span><span style="color: #008000;">ValueError</span>, roman2dec, <span style="color: #483d8b;">'VV'</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertRaises</span><span style="color: black;">&#40;</span><span style="color: #008000;">ValueError</span>, roman2dec, <span style="color: #483d8b;">'IC'</span><span style="color: black;">&#41;</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">assertRaises</span><span style="color: black;">&#40;</span><span style="color: #008000;">ValueError</span>, dec2roman, -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> testExhaustive<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">4000</span><span style="color: black;">&#41;</span>:
            <span style="color: #008000;">self</span>.<span style="color: black;">assertEqual</span><span style="color: black;">&#40;</span>roman2dec<span style="color: black;">&#40;</span>dec2roman<span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>, i<span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> testExhaustive2<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        letters = <span style="color: black;">&#40;</span><span style="color: #483d8b;">'I'</span>, <span style="color: #483d8b;">'V'</span>, <span style="color: #483d8b;">'X'</span>, <span style="color: #483d8b;">'L'</span>, <span style="color: #483d8b;">'C'</span>, <span style="color: #483d8b;">'D'</span>, <span style="color: #483d8b;">'M'</span><span style="color: black;">&#41;</span>
        first_example = <span style="color: #008000;">None</span>
        count = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">xrange</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">8</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">8</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">8</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">8</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>:
            rom = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:             <span style="color: #808080; font-style: italic;"># do { ... } while i&gt;0</span>
                rom += letters<span style="color: black;">&#91;</span>i <span style="color: #66cc66;">%</span> <span style="color: #ff4500;">7</span><span style="color: black;">&#93;</span>
                i /= <span style="color: #ff4500;">7</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> i<span style="color: #66cc66;">&lt;</span>=<span style="color: #ff4500;">0</span>: <span style="color: #ff7700;font-weight:bold;">break</span>
&nbsp;
            <span style="color: #ff7700;font-weight:bold;">try</span>:
                dec = roman2dec<span style="color: black;">&#40;</span>rom<span style="color: black;">&#41;</span>
                roman = dec2roman<span style="color: black;">&#40;</span>dec<span style="color: black;">&#41;</span>
                <span style="color: #ff7700;font-weight:bold;">if</span> rom <span style="color: #66cc66;">&lt;&gt;</span> roman:
                    <span style="color: #ff7700;font-weight:bold;">if</span> first_example <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
                        first_example = <span style="color: #483d8b;">'%s != %s (decimal %d)'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>rom, roman, dec<span style="color: black;">&#41;</span>
                    count += <span style="color: #ff4500;">1</span>
            <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ValueError</span>, e:
                <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: black;">assertEqual</span><span style="color: black;">&#40;</span>count, <span style="color: #ff4500;">0</span>, <span style="color: #483d8b;">'Accepted %d invalid roman numbers (e.g. %s)'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>count, first_example<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    <span style="color: #dc143c;">unittest</span>.<span style="color: black;">main</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p><strong>[Update]:</strong></p>
<p>There much more invalid roman numbers that you have to check, the quiz has been updated above <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ﻿</p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=2040&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2010%2F12%2F18%2Fspqr%2F&amp;title=SPQR" id="wpa2a_6"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2010/12/18/spqr/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Evviva YAML! Abbasso XML!</title>
		<link>http://blog.angelofailla.com/2009/08/06/evviva-yaml-abbasso-xml/</link>
		<comments>http://blog.angelofailla.com/2009/08/06/evviva-yaml-abbasso-xml/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 15:19:15 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[yaml. perl]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=1522</guid>
		<description><![CDATA[Ultimamente le mie vicessititudini perliste mi hanno portato a scoprire YAML. Ho sempre pensato che XML sia una merda che puo&#8217; andare bene per i programmi ma non e&#8217; molto umano. YAML puo&#8217; essere usato per molte robe al posto di XML. Io ad esempio lo sto usando per file di configurazione. Ad esempio questo [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente le mie vicessititudini <a href="http://it.wikipedia.org/wiki/Perl">perliste</a> mi hanno portato a scoprire <a href="http://yaml.org/">YAML.</a></p>
<p>Ho sempre pensato che XML sia una merda che puo&#8217; andare bene per i programmi ma non e&#8217; molto umano.</p>
<p>YAML puo&#8217; essere usato per molte robe al posto di XML. Io ad esempio lo sto usando per file di configurazione. Ad esempio questo piccolo fiel di configurazione qui sotto:</p>
<pre>
$ cat mm.conf.yml
---
hosts:

    - hostname: localhost
      port: 2812

    - hostname: linutop
      port: 2812
      username: admin
      password: monit
</pre>
<p>Puo&#8217; essere parsato e schiafatto in un bel hash tree solo con queste poche linee di codice:</p>
<pre>
open (TEST, $f);
$file .= $_ while(<TEST>);
close TEST;
$cfg_file = Load($file);
</pre>
<p>Quello che vedrete nel hashref sara&#8217; cosi&#8217;:</p>
<pre>
$VAR1 = {
          'hosts' => [
                       {
                         'hostname' => 'localhost',
                         'port' => '2812'
                       },
                       {
                         'password' => 'monit',
                         'hostname' => 'linutop',
                         'port' => '2812',
                         'username' => 'admin'
                       }
                     ]
        };
</pre>
<p>In XML lo stesso file potrebbe essere scritto cosi&#8217;:</p>
<pre>
< ?xml version="1.0" encoding="UTF-8"?>
<hosts>
  <host hostname="localhost" port="2812"/>
  <host hostname="localhost" port="2812" username="admin" password="monit"/>
</hosts>
</pre>
<p>O chissa&#8217; in quali altri modi astrusi&#8230;<br />
Come vedete YAML e&#8217; molto piu&#8217; leggibile di XML.<br />
Fico vero?</p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=1522&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2009%2F08%2F06%2Fevviva-yaml-abbasso-xml%2F&amp;title=Evviva%20YAML%21%20Abbasso%20XML%21" id="wpa2a_8"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2009/08/06/evviva-yaml-abbasso-xml/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Io ti odio!</title>
		<link>http://blog.angelofailla.com/2009/02/14/io-ti-odio/</link>
		<comments>http://blog.angelofailla.com/2009/02/14/io-ti-odio/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 11:19:39 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Irlanda]]></category>
		<category><![CDATA[Lamentazioni]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[odio]]></category>
		<category><![CDATA[oneliner]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=1318</guid>
		<description><![CDATA[Caro collega, stavolta lo scrivo qui: ieri ti ho odiato, per l&#8217;ennesima volta! Quando il nostro collega DBA indiano e&#8217; venuto da me chiedendomi: «Angelo, come faccio ad inserire una stringa &#8220;NAME&#8221; su un file &#8220;tmp.log&#8221; da 1 GB tra la quarta e la quinta colonna con VI/VIM?» Tu hai sentito&#8230; ti sei voluto alzare&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Caro collega,</p>
<p>stavolta lo scrivo qui: ieri ti ho <strong>odiato</strong>, per l&#8217;ennesima volta!</p>
<p>Quando il nostro collega DBA indiano e&#8217; venuto da me chiedendomi:</p>
<blockquote><p>«Angelo, come faccio ad inserire una stringa &#8220;NAME&#8221; su un file &#8220;tmp.log&#8221; da 1 GB tra la quarta e la quinta colonna con VI/VIM?»</p></blockquote>
<p><strong>Tu hai sentito&#8230; ti sei voluto alzare&#8230; con quell&#8217;aria da saccente&#8230; *dovevi* intrometterti&#8230; il tuo istinto da &#8220;nerdone-primo-della-classe-so-tutto-io&#8221; ti ha fatto venire alla mia scrivania mentre io scrivevo il one-liner perl necessario alla magia, consigliandomi di poterlo fare cosi&#8217; e coli&#8217;&#8230; con sed piuttosto che con awk, e blabla&#8230;</strong></p>
<p style="text-align: center;"><strong><a href="http://blog.angelofailla.com/wp-content/uploads/2009/02/nerd.jpg"><img class="size-full wp-image-1320 aligncenter" title="nerd" src="http://blog.angelofailla.com/wp-content/uploads/2009/02/nerd.jpg" alt="nerd" width="300" height="370" /></a><br />
</strong></p>
<p>Non e&#8217; stato sufficiente che ti dicessi di farti i cazzi tuoi&#8230; dovevi gareggiare&#8230; dovevi farti sputtanare&#8230; e dopo 2 minuti hai avuto anche la sfacciataggine di mandare una email al collega col subject &#8220;sed version&#8221;, scrivendo questa zozzeria:</p>
<pre>$ cat tmp.log | sed 's/^\(\W*\w\+\W\+\w\+\W\+\W*\w\+\)/\1 fff/g'</pre>
<p>Ma ti ho punito con la eleganza del Perl:</p>
<pre>$ perl -lpne 's/^((\w+\W+){3})/$1NAME /;' tmp.log</pre>
<p><strong>Sei old! OLD! Mettitelo in testa. Guarda quella linea, e&#8217; ILLEGGIBILE. Con tutte quelle sequenze di escape!<br />
</strong></p>
<p><strong>Peccato che il DBA abbia scelto il tuo sed. In questo mondo non c&#8217;e&#8217; giustizia.<br />
</strong></p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=1318&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2009%2F02%2F14%2Fio-ti-odio%2F&amp;title=Io%20ti%20odio%21" id="wpa2a_10"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2009/02/14/io-ti-odio/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Come ti estendo l&#8217;homebanking col Perl</title>
		<link>http://blog.angelofailla.com/2009/01/31/come-ti-estendo-lhomebanking-col-perl/</link>
		<comments>http://blog.angelofailla.com/2009/01/31/come-ti-estendo-lhomebanking-col-perl/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 15:32:21 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[cpan]]></category>
		<category><![CDATA[moduli]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[www::mechanize]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=1296</guid>
		<description><![CDATA[Ireland, 1 year. Sono al giro di boa del primo anno. Non faro&#8217; il solito post commemorativo del tipo &#8220;questo giorno un anno fa ero all&#8217;aeroporto ignaro del futuro&#8221;. Forse lo faro&#8217; dopo. Accontentati di quello che avevo scritto un mese fa. Piuttosto festeggio con un bel rilascio su CPAN.org dei miei sforzi informatici delle [...]]]></description>
			<content:encoded><![CDATA[<p>Ireland, <strong>1 year.</strong></p>
<p><strong>Sono al giro di boa del primo anno.</strong> Non faro&#8217; il solito post commemorativo del tipo &#8220;questo giorno un anno fa ero all&#8217;aeroporto ignaro del futuro&#8221;. Forse lo faro&#8217; dopo. Accontentati di quello che avevo scritto <a href="2008/11/25/riflessioni-a-ruota-libera-senza-uno-scopo-particolare/">un mese fa.</a> Piuttosto festeggio con un bel rilascio su <a href="http://www.cpan.org">CPAN.org</a> dei miei sforzi informatici delle ultime 2 settimane, per provare quanto sia sensato il fumetto di <a href="http://xkcd.com/519/">xkcd.com</a> : cioe&#8217; che <strong>abbia piu&#8217; senso una settimana incasinando col <a href="http://it.wikipedia.org/wiki/Perl">Perl</a> che 900 ore di corso universitario o 400 ore di compiti a casa <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p><a href="http://xkcd.com/519/"><img class="alignnone size-full wp-image-1297" title="11th_grade" src="http://blog.angelofailla.com/wp-content/uploads/2009/01/11th_grade.png" alt="11th_grade" width="535" height="333" /></a></p>
<p>Cosi&#8217;, dopo 2 settimane di programmazione piu&#8217; o meno autistica, ho rilasciato una prima release usabile: il modulo si chiama <a href="http://search.cpan.org/~pallotron/Finance-Bank-IE-PermanentTSB/">Finance::Bank::IE::PermanentTSB</a>, e si aggiunge al namespace Finance::Bank, accanto ad altri moduli dello stesso tipo.</p>
<p>Il modulo permette di stampare da riga di comando il saldo di tutti i conti correnti bancari collegato all&#8217;homebanking di PermanentTSB.</p>
<pre>pallotron@terminus ~ $ ptsb -b
Parsing configuration file...

You need a passphrase to unlock the secret key for
user: "Angelo Failla &lt;afailla@newbay.com&gt;"
2048-bit ELG-E key, ID F83D3FCA, created 2008-02-18 (main key ID B68B318D)

gpg: encrypted with 2048-bit ELG-E key, ID F83D3FCA, created 2008-02-18
      "Angelo Failla &lt;afailla@newbay.com&gt;"

Connecting...

-----------------------------------------------------------
|       Account name | Acc. # |     Balance |   Available |
-----------------------------------------------------------
| Switch Current A/C |   0220 |      135.35 |      235.35 |
|          Visa Card |   2667 |     -419.66 |       80.34 |
-----------------------------------------------------------</pre>
<p>Ovviamente i dati dell&#8217;output sono taroccati <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Lo script e&#8217; anche in grado di stampare l&#8217;estratto conto basandosi su range temporale, regular expression (per matchare la description), e condizioni matematiche (tipo &lt;300, &gt;=2000, etc).</p>
<p>L&#8217;idea del modulo mi e&#8217; venuta dopo che ho scoperto <strong>la potenza di <a href="http://search.cpan.org/~petdance/WWW-Mechanize-1.54/lib/WWW/Mechanize.pm">WWW::Mechanize.</a></strong> E&#8217; un modulo Perl che permette di <strong>automatizzare l&#8217;interazione con un sito web</strong>: gestisce la navigazione attraverso pagine, i click, la gestione delle form, il fill out delle form, etc. C&#8217;e&#8217;<strong> qualche pazzo che l&#8217;ha usato per scriversi bot che tengono d&#8217;occhio aste di Ebay</strong> o che effettuano <strong>operazioni periodiche su Ogame</strong> (famoso gioco alla Warcraft, ma online; ci giocavo 2 anni fa, ma poi ne sono uscito pulito!).</p>
<p>Il miglior modo per imparare qualcosa quando programmi e&#8217; di solito scrivere qualcosa che ti serva veramente. Cosi&#8217; mi sono detto: <em>«devo scrivere qualcosa che mi serva veramente e nel frattempo mi possa servire per imparare il modulo e rispolverare altre cose del Perl».</em></p>
<p><strong>Noi sistemisti siamo pigri e non amiamo fare le stesse cose ripetutamente</strong>, e, dove possibile (quasi dovunque!), ci piace automatizzare <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Se poi possiamo avere tool command line per fare le cose piu&#8217; disparate sicuramente non disdegniamo.</p>
<p>Il sito di PermanentTSB e&#8217; una chiavica, non fa grafici e istogrammi del conto, non salva/esporta gli estratti conto in file CSV, non tiene dati piu&#8217; vecchi di 6 mesi! Un invito a nozze per rimediare a cio&#8217; con WWW::Mechanize!</p>
<p>D&#8217;apprima ho iniziato scrivendo un modulo per familiarizare con le librerie, obiettivo: &#8220;inserire da command line, le ore lavorate nel sistema di time tracking aziendale&#8221;. Devo dire che lo script e&#8217; stato molto apprezzto a lavoro visto che per inserire anche un solo record nella interfaccia aziendale si devono cliccare milioni di volte, e il sistema non e&#8217; a prova di errore!</p>
<p>Queste due settimane mi sono servite a:</p>
<ul>
<li>rispolverare Perl;</li>
<li>imparare la programmazione dei package/moduli;</li>
<li>capire come funziona la comunita&#8217; CPAN;</li>
<li>imparare WWW::Mechanize;</li>
<li>imparare come funzionano le test unit in Perl usando <a href="http://search.cpan.org/~mschwern/Test-Simple/lib/Test/More.pm">Test::More</a> e <a href="http://search.cpan.org/~chromatic/Test-MockObject">Test::MockObject</a>;</li>
<li>imparare come funziona <a href="http://git-scm.com/">git</a>, il sistema di versioning creato da <a href="http://it.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a> usato dalla comunita&#8217; di sviluppo del <a href="http://it.wikipedia.org/wiki/Linux">Kernel Linux.</a> Veramente fico per velocita&#8217; e completezza di opzioni e feature. Meglio di subversion/cvs.</li>
</ul>
<p>In piu&#8217; e&#8217; servito a coprire anche un po&#8217; di spazi vuoti che ultimamente sto avendo a lavoro. <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Alla prossima!</p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=1296&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2009%2F01%2F31%2Fcome-ti-estendo-lhomebanking-col-perl%2F&amp;title=Come%20ti%20estendo%20l%26%238217%3Bhomebanking%20col%20Perl" id="wpa2a_12"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2009/01/31/come-ti-estendo-lhomebanking-col-perl/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Migliorare la pagina &#8220;archive&#8221; di WordPress.</title>
		<link>http://blog.angelofailla.com/2008/08/08/migliorare-la-pagina-archive-di-wordpress/</link>
		<comments>http://blog.angelofailla.com/2008/08/08/migliorare-la-pagina-archive-di-wordpress/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 20:43:16 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Libero]]></category>
		<category><![CDATA[Tempo libero]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=967&#038;langswitch_lang=en</guid>
		<description><![CDATA[E&#8217; venerdi&#8217;. Che cosa fa uno Venerdi&#8217; in Irlanda? Va a riempirsi di birra! Per poi finire cosi&#8217;: Beh io questa volta passo. Mi avevano invitato indirettamente ad un leaving party al Pravda ma ho deciso di rimanere a casa, per vari motivi, uno di questi motivi e&#8217; che mi trovavo in the middle di [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; venerdi&#8217;. Che cosa fa uno Venerdi&#8217; in Irlanda? Va a riempirsi di birra! Per poi finire cosi&#8217;:</p>
<p><a href="http://blog.angelofailla.com/wp-content/uploads/2008/08/drunk-man-falls-hurts-head-hoboken.jpg"><img class="aligncenter size-full wp-image-968" title="drunk-man-falls-hurts-head-hoboken" src="http://blog.angelofailla.com/wp-content/uploads/2008/08/drunk-man-falls-hurts-head-hoboken.jpg" alt="" width="420" height="300" /></a></p>
<p>Beh io questa volta passo. <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Mi avevano invitato indirettamente ad un leaving party al Pravda ma ho deciso di rimanere a casa, per vari motivi, uno di questi motivi e&#8217; che mi trovavo in the middle di una sezione di hacking molto proficua di wordpress.</p>
<p>Ieri sera ero in chat con una amica che vuole trasferirsi, e le ho detto di consultare il blog per consigli, scorrendo le pagine mi sono ricordato di cose successe anni fa, e anche di curiosi foto ritocchi, specie gli ultimi post prima di partire. <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Questa situazione mi e&#8217; servita da inpulso oggi pomeriggio, mentre ero al lavoro, per installare, fra un cosa e l&#8217;altra da fare, un nuovo plug-in per la pagina <a href="/archive/">archive</a>. Si chiama <a href="http://justinblanton.com/projects/smartarchives/">smartarchives</a>.</p>
<p>Che cos&#8217;e'? Niente di meglio della descrizione sulla home page ufficiale:</p>
<blockquote><p>Smart Archives is a rather simple <a href="http://wordpress.org/">WordPress</a> plugin that will allow you to display your archives in a much &#8220;cleaner&#8221; format.  You can see it in action on my <a href="http://justinblanton.com/archives/">archives page</a>. You&#8217;ll notice that everything on the page is hyperlinked (years, months, posts) and that all of the respective links are future-proofed.</p></blockquote>
<p>Il problema di questo plug-in e&#8217; che mantiene le stesse impostazioni del blog, quindi nel mio caso 5 post per pagina, e ordinamento discendente. Io volevo, solo per la pagina /archive/, un ordinamento normale, ascendente, e nessun limite sul numero di post. In piu&#8217; volevo anche la data accanto ad ogni post che si vede nella root page di /archive.</p>
<p>Cosa ho fatto?</p>
<p>Dopo qualche oretta di lettura di documentazione per gli sviluppatori di wordpess, che tralaltro ho trovato molto completa (rispetto a quando ho iniziato ad usare wordpress nel 2005), ho prodotto le seguenti linee di codice che ho inserito nel file functions.php del mio tema.</p>
<pre>function pallotron_nopaging($query) {
   if ( !is_home() &#038;&#038; !is_feed() &#038;&#038; '' == $query->get('nopaging') ) {
      $query->set('nopaging', 1);
      $query->set('order', 'asc');
   }
}

add_action('parse_query', 'pallotron_nopaging');</pre>
<p>Per completare l&#8217;opera ho dovuto fare anche un po&#8217; di modifiche al plugin, cambiando delle clausole di order by da DESC ad ASC (il default):</p>
<pre>ORDER BY post_date");</pre>
<p>E due cicli for che diventano cosi&#8217; (commentato la vecchia linea):</p>
<pre>//for ($currentMonth = 12; $currentMonth >= 1; $currentMonth--) {
for ($currentMonth = 1; $currentMonth <= 12; $currentMonth++) {</pre>
<p>Adesso i lettori possono navigare la pagina archive e vedere tutte le cazzate scritte da Ottobre 2005 a ora.</p>
<p>References:</p>
<p><a href="http://codex.wordpress.org/Query_Overview">http://codex.wordpress.org/Query_Overview</a><br />
<a href="http://justinblanton.com/projects/smartarchives/">http://justinblanton.com/projects/smartarchives/</a><br />
<a href="http://codex.wordpress.org/Developer_Documentation">http://codex.wordpress.org/Developer_Documentation</a><br />
<a href="http://codex.wordpress.org/Conditional_Tags">http://codex.wordpress.org/Conditional_Tags</a></p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=967&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2008%2F08%2F08%2Fmigliorare-la-pagina-archive-di-wordpress%2F&amp;title=Migliorare%20la%20pagina%20%26%238220%3Barchive%26%238221%3B%20di%20WordPress." id="wpa2a_14"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2008/08/08/migliorare-la-pagina-archive-di-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Monitoring SSL certificate expiration with Nagios</title>
		<link>http://blog.angelofailla.com/2008/07/17/monitoring-ssl-certificate-expiration-with-nagios/</link>
		<comments>http://blog.angelofailla.com/2008/07/17/monitoring-ssl-certificate-expiration-with-nagios/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 10:49:42 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[English posts]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[expiration]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/?p=873</guid>
		<description><![CDATA[Hi Lads, This is a post for nerds so I&#8217;m writing it in English. If you don&#8217;t understand English or technical stuff please close this page I&#8217;m at work and I&#8217;ve just finished to write a Nagios script to monitor expiration date of a SSL certificate. I wanna share it with you. To have the [...]]]></description>
			<content:encoded><![CDATA[<p>Hi Lads,</p>
<p>This is a post for nerds so I&#8217;m writing it in English. If you don&#8217;t understand English or technical stuff please close this page <img src='http://blog.angelofailla.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
I&#8217;m at work and I&#8217;ve just finished to write a Nagios script to monitor expiration date of a SSL certificate.</p>
<p>I wanna share it with you.</p>
<p>To have the script working properly you just need to install OpenSSL and let the <span>openssl</span><br />
command be in your PATH environment.</p>
<p>This is the usage:</p>
<pre>
Usage:
check_ssl_cert.sh hostname port [warningdays]
</pre>
<p>Warning days default value is 30 days.</p>
<p>Some examples:</p>
<pre>[afailla@terminus ~]$  /usr/local/nagios/bin/check_ssl_cert.sh google.com 443
OK: Certificate is valid for 289 days expires on May  2 17:02:55 2009 GMT

[afailla@terminus ~]$  /usr/local/nagios/bin/check_ssl_cert.sh google.com 443 400
CRITICAL: Certificate will expire in 289 days on May  2 17:02:55 2009 GMT</pre>
<p>Download the script <a href="http://blog.angelofailla.com/wp-content/uploads/2008/07/check_ssl_cert.sh">here</a> and enjoy it.</p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=873&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2008%2F07%2F17%2Fmonitoring-ssl-certificate-expiration-with-nagios%2F&amp;title=Monitoring%20SSL%20certificate%20expiration%20with%20Nagios" id="wpa2a_16"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2008/07/17/monitoring-ssl-certificate-expiration-with-nagios/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>ARGHHHHHHHHHHHHH!</title>
		<link>http://blog.angelofailla.com/2008/01/04/arghhhhhhhhhhhhh/</link>
		<comments>http://blog.angelofailla.com/2008/01/04/arghhhhhhhhhhhhh/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 09:39:17 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Lamentazioni]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[depressione]]></category>
		<category><![CDATA[incompetenza]]></category>
		<category><![CDATA[lamentazione]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/2008/01/04/arghhhhhhhhhhhhh/langswitch_lang/en</guid>
		<description><![CDATA[Senior Testing Engineer: potresti dirmi come faccio ad aggiornare la jvm su una macchina?Angelo (pallotron) Failla: basta installare la nuova jvm sul disco e cambiare le variabili di ambiente&#8230; Senior Testing Engineer: ok e per installare la jvm ? Angelo (pallotron) Failla: scarichi la jvm, chmod +x file &#38;&#38; ./file, leggi lo schermo, e poi [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Senior Testing Engineer</strong>: potresti dirmi come faccio ad aggiornare la jvm su una macchina?<strong>Angelo (pallotron) Failla</strong>: basta installare la nuova jvm sul disco e cambiare le variabili di ambiente&#8230;</p>
<p><strong>Senior Testing Engineer</strong>: ok e per installare la jvm ?</p>
<p><strong>Angelo (pallotron) Failla</strong>: scarichi la jvm, chmod +x file &amp;&amp; ./file, leggi lo schermo, e poi aggiorni le variabili di ambiente&#8230;</p>
<p><strong>Senior Testing Engineer</strong>: ok</p></blockquote>
<p>Dopo un po&#8217;&#8230;</p>
<blockquote><p><strong>Senior Testing Engineer</strong>: puoi venire?</p></blockquote>
<p>Non aveva impostato JAVA_HOME alla nuova directory della jvm, ne&#8217; il PATH per avere $JAVA_HOME/bin/&#8230;</p>
<p>Glielo dico e torno a sedere&#8230; dopo un po&#8217;:</p>
<blockquote><p><strong>Senior Testing Engineer</strong>: puoi venire? se faccio java -version mi spunta ancora la versione vecchia!</p></blockquote>
<p>Mi rialzo, vado a vedere, aveva messo &#8220;:$JAVA_HOME/bin/&#8221; alla fine della catena dei PATH&#8230; e la shell gli prendeva con precedenza il comando java di default dentro&#8221;/usr/bin/java&#8221; &#8230;</p>
<p>ARRRRRRRRRRRRRRRRRRRGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHH!!!!!!!!</p>
<div style="text-align: center"><img src="http://blog.angelofailla.com/wp-content/uploads/2008/01/argh.jpg" alt="Sorry, but this post is not available in English" /></div>
<p>Sentirsi dire questo da un Senior&#8230; con 6 anni di esperienza&#8230; e&#8217; abbastanza deprimente&#8230;</p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=660&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2008%2F01%2F04%2Farghhhhhhhhhhhhh%2F&amp;title=ARGHHHHHHHHHHHHH%21" id="wpa2a_18"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2008/01/04/arghhhhhhhhhhhhh/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lavorando ad un nuovo embedded&#8230;</title>
		<link>http://blog.angelofailla.com/2007/12/05/lavorando-ad-un-nuovo-embedded/</link>
		<comments>http://blog.angelofailla.com/2007/12/05/lavorando-ad-un-nuovo-embedded/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 08:31:26 +0000</pubDate>
		<dc:creator>pallotron</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Lavoro]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[labview]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[splashy]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.angelofailla.com/2007/12/05/lavorando-ad-un-nuovo-embedded/</guid>
		<description><![CDATA[Esattamente lo stesso mese di qualche anno fa, 2005, (vedere il post a riguardo su questo blog), realizzai un sistema embedded basato su Linux per un cliente. La richiesta del committente era la realizzazione di un sistema che fosse collegato ad un PLC, a sua volta collegato a macchine di taglio lamiera, per la ricezione [...]]]></description>
			<content:encoded><![CDATA[<p>Esattamente lo stesso mese di qualche anno fa, 2005, (<a href="/2005/11/10/pubblicato-il-gentoo-embedded-developer-howto/">vedere il post a riguardo su questo blog</a>), realizzai un sistema embedded basato su Linux per un cliente.</p>
<p>La richiesta del committente era la realizzazione di un sistema che fosse collegato ad un PLC, a sua volta collegato a macchine di taglio lamiera, per la ricezione di dati e allarmi dalla macchina di taglio, e la successiva scrittura di questi dati su un RDBMS centralizzato.</p>
<p>Il sistema embedded era munito di LCD con risoluzione 640&#215;480 e touchscreen per l&#8217;interazione.</p>
<p>All&#8217;avvio il sistema doveva aprire un browser (javascript capable) che doveva puntare ad una webapplication scritta da un&#8217;altra azienda, che serviva per pilotare le macchine.</p>
<p>Realizzai qualcosa in un mesetto:</p>
<ul>
<li>l&#8217;embedded in se&#8217;: kernel + file system layout minimale + busybox + dropbear (ssh) + xorg + opera 9 (versione minimal): circa 100mb facendo un lavoro certosino di taglio di file inutili. Il dom dell&#8217;embedded era di 128MB</li>
<li>un daemon scritto in C che leggeva la seriale, parsava i dati (mi sono divertito con gli operatori bit a bit, grazie al K&amp;R, per estrapolare gli allarmi dai char letti sulla seriale), ed utilizzava unixODBC per scriverli sul server MS SQL Server (?!?!**##%%$) della applicazione web fatta dall&#8217;altra azienda</li>
</ul>
<p>Ne&#8217; risulto&#8217; un bel lavoro.<br />
Dall&#8217;inizio avevo cercato di evitare Xorg e di usare qualcosa tipo links2 in modalita&#8217; framebuffer, ma l&#8217;applicativo web di terze parti faceva uso massivo di Javascript&#8230;<br />
Poi provai con Dillo, ma anche li il supporto Javascript era penoso.<br />
Poi provai con Firefox, funzionava ma chiedeva troppo tempo al boot&#8230;<br />
Poi sono approdato a Opera9! Opera e&#8217; davvero un bel browser, molto personalizzabile, forse piu&#8217; facilmente di Firefox perche&#8217; basta editare il file opera.ini.<br />
Date un occhio a <a href="http://del.icio.us/pallotron/opera">http://del.icio.us/pallotron/opera</a>.</p>
<p>Opera9 aveva gia&#8217; una funzionalita&#8217; di kiosk mode interna, senza bisogno di installare addon come nel caso di Firefox.</p>
<p>Questo lavoro produsse la pubblicazione di un <a href="http://www.pallotron.net/docs/howtos/gentoo_embedded/it/html_it/">howto da me scritto</a> che illustrava come usare il portage di Gentoo Linux per realizzare sistemi embedded. E&#8217; ancora un valido documento. Ho visto che molta gente approda ad esso cercando con Google. Ne realizzai anche una versione English.In questi giorni mi sono trovato nella situazione di dover realizzare un altro embedded. Nel frattempo la mia considerazione di <a href="http://www.gentoo.org">Gentoo</a> e&#8217; andata scemando. Per una serie motivi che se volete possiamo discutere.BTW mi sono messo all&#8217;opera per vedere che strumenti offre <a href="http://www.debian.org">Debian</a> per realizzare lo stesso lavoro.Premetto che sia l&#8217;embedded precedente che quello odierno sono basati su cpu x86 compatibili. No ARM.</p>
<p>Quindi per realizzare un sistema usabile e funzionante non si deve fare cross-compiling delle applicazione per la CPU target.</p>
<p>Debian mi ha permesso di essere molto piu&#8217; spedito nella creazione di questo nuovo embedded. Ho utilizzato debootstrap, dando comandi simili a questi:</p>
<p><code>main # mkdir -p /opt/lenny-root<br />
main # debootstrap lenny /opt/lenny-root http://ftp.debian.org/debian/<br />
[ ... attendere prego ... ]</code></p>
<p>Alla fine del processo otterrette un sistema debian standard minimal (in questo caso la relase lenny) nella directory prescelta.</p>
<p>A questo punto mountare /proc, copiare /etc/hosts e chrottarsi:</p>
<p><code>main # mount proc /opt/lenny-root/proc -t proc<br />
main # cp /etc/hosts /opt/lenny-root/etc/hosts<br />
main # chroot /opt/lenny-root /bin/bash</code></p>
<p>A partire da questo punto ho installato il software necessario al cliente usando apt.<br />
Ho installato Firefox, Xorg, dropbear, Splashy, ed un RPM della National Instruments fornitomi dal cliente che installa un envoirnment chiamato <a href="http://www.ni.com/labview/">Labview</a> che include anche un plugin di Firefox.</p>
<p>E&#8217; un ambiente molto utilizzato da 20 anni in automazione industriale:</p>
<blockquote><p>For more than 20 years, NI LabVIEW graphical development has revolutionized the development of scalable test, measurement, and control applications. Regardless of experience, engineers and scientists can rapidly and cost-effectively interface with measurement and control hardware, analyze data, share results, and distribute systems.</p></blockquote>
<p>Il cliente ha gia&#8217; scritto applicazione LabVIEW, il terminale embedded deve puntare all&#8217;applicazione di monitoring della infrastruttura automatizzata.</p>
<p>Il cliente voleva anche che il processo di boot non mostrasse tutte le scritte tipiche del boot dei kernel UNIX. Ma qualcosa di grafico con una barra di scorrimento, qualcosa alla Ubuntu/Windows.</p>
<p>L&#8217;ho realizzata con <a href="http://splashy.alioth.debian.org/wiki/">Splashy.</a><br />
E&#8217; stato sufficiente installarlo, leggere la documentazione, realizzare delle bmp con pochi colori come questa, con le immagini da usare, configurare qualche file di xml per definire colori della barra ed i comportamenti.</p>
<p>Mentre che c&#8217;ero ho anche utilizzato lilo in modalita&#8217; grafica con immagine bmp e menu&#8217; di scelta dove l&#8217;utente al boot puo&#8217; scegliere se partire con lo splash, senza splash (per vedere i messaggi del kernel), oppure in una modalita&#8217; &#8220;configurazione&#8221;.</p>
<p>La modalita&#8217; &#8220;configurazione&#8221; viene usata per configurare l&#8217;apparecchio.<br />
In pratica a dopo il boot, e dopo aver effettuato il login uno script in .bashrc legge la command line del kernel leggendo /proc/cmdline ed eventualmente esegue uno script bash che fa domande sulla configurazione e poi scrive i file che deve scrivere&#8230;</p>
<p>Il filesystem dell&#8217;embedded e&#8217; cosi&#8217; organizzato:</p>
<ul>
<li>/ in read only</li>
<li>/usr compressa con squashfs</li>
<li>una partizione /rw di pochi mega in read write</li>
</ul>
<p>In totale tutto sta in 164MB. OK non proprio dimensioni embedded, ma in realta&#8217; questo non e&#8217; proprio un embedded nel vero termine della parola&#8230; e&#8217; piu&#8217; un dispositivo da affiancare ad una macchina di taglio, e poi dovendo anche avere Xorg&#8230; Considerato che il dom che ho a disposizione e&#8217; di 256MB direi che vado tranquillo, ma sono convinto che con un po&#8217; di lavoro certosino fatto di strace, ldd, e altri tool posso minimizzare di molto!<br />
Ed ora pappatevi un video che ho girato l&#8217;altra notte mentre ci lavoravo, in questo video il sistema impiega ben 4&#8217;30&#8243; dall&#8217;accensione elettrica al caricamento di una pagina di test con un plugin Labview. Ma nel momento in cui scrivo sono riuscito a ridurre il tempo di caricamento a soli 2&#8217;20&#8243;&#8230; purtroppo l&#8217;embedded che ho e&#8217; solo 166mhz&#8230; 129MB di ram&#8230; e si sa firefox non e&#8217; che sia leggerissimo&#8230; beh casomai il cliente optera&#8217; per ferragglia piu&#8217; prestante.</p>
<p><embed src="http://blog.angelofailla.com/flowplayer/FlowPlayer.swf?config=%7Bembedded%3Atrue%2CbaseURL%3A%27http%3A%2F%2Fwww%2Evitadiunsysadmin%2Enet%2Fflowplayer%27%2CinitialScale%3A%27fit%27%2CplayList%3A%5B%7BoverlayId%3A%27play%27%7D%2C%7Burl%3A%27http%3A%2F%2Fwww%2Evitadiunsysadmin%2Enet%2Fvideos%2Fembedded%2Eflv%27%7D%5D%7D" scale="noscale" bgcolor="111111" type="application/x-shockwave-flash" allowscriptaccess="always" allownetworking="all" pluginspage="http://www.macromedia.com/go/getflashplayer" height="350" width="468"></embed></p>
<img src="http://blog.angelofailla.com/?ak_action=api_record_view&id=606&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.angelofailla.com%2F2007%2F12%2F05%2Flavorando-ad-un-nuovo-embedded%2F&amp;title=Lavorando%20ad%20un%20nuovo%20embedded%26%238230%3B" id="wpa2a_20"><img src="http://blog.angelofailla.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.angelofailla.com/2007/12/05/lavorando-ad-un-nuovo-embedded/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

