<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9031922773224056133</id><updated>2011-10-11T23:50:00.867+01:00</updated><category term='Windows Mobile'/><category term='Kindle'/><category term='Build-Depends-Indep'/><category term='continuous integration'/><category term='Microsoft'/><category term='dh-make-perl'/><category term='books'/><category term='development'/><category term='Amazon'/><category term='hashes'/><category term='perl'/><category term='Test::More'/><category term='e-readers'/><category term='apt-get'/><category term='prove'/><category term='POE'/><category term='regexp'/><category term='Expectations'/><category term='Test::Harness prove'/><category term='curl'/><category term='Tate'/><category term='software development'/><category term='Lexicon'/><category term='audio codecs'/><category term='base64'/><category term='Putty Session Manager'/><category term='shell'/><category term='conffiles'/><category term='debian'/><category term='Hudson'/><category term='grep-status'/><category term='tdd'/><category term='eclipse'/><category term='vim'/><category term='dpkg info'/><category term='Ruby on Rails'/><category term='Facebook'/><category term='order of ignorance'/><category term='iPod Touch'/><category term='CPAN'/><category term='sh'/><category term='linux'/><category term='reading'/><category term='tab completion'/><category term='emacs'/><category term='Italy'/><category term='Internet'/><category term='MySQL'/><category term='vi'/><category term='cloud computing'/><category term='perlcritic'/><category term='security'/><category term='cell phone'/><category term='Tahar Ben Jelloun'/><category term='data privacy'/><category term='debuild'/><category term='&quot;Perl Best Practices&quot;'/><category term='MS'/><category term='bash'/><category term='Tate Modern'/><category term='PHP'/><category term='LAST_INSERT_ID'/><category term='iPhone'/><category term='twitter'/><category term='reprepro'/><category term='PHPUnit'/><category term='https'/><category term='unit testing'/><category term='Putty'/><category term='Verizon'/><category term='Windows MarketPlace for Mobile'/><category term='Literature'/><category term='project management'/><category term='epic'/><category term='ITU'/><category term='TAP::Harness::JUnit'/><category term='Encapsulation'/><category term='G.729'/><category term='AppStore'/><category term='perl 6'/><title type='text'>/var/log/giacomo.log</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-4974654083105363374</id><published>2011-03-05T19:25:00.004Z</published><updated>2011-03-05T19:42:35.911Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Expectations'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='PHPUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>It's not that hard to manage expectations (with Perl)</title><content type='html'>Developers with a background in &lt;span style="font-weight:bold;"&gt;Ruby on Rails&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;PHP &lt;/span&gt;are familiar with the concepts of mocking objects and setting expectations on them.&lt;br /&gt;&lt;br /&gt;The good news is that these powerful techniques for unit testing are available for &lt;span style="font-weight:bold;"&gt;Perl &lt;/span&gt;as well. Should I add you can find them on &lt;a href="http://www.cpan.org/"&gt;CPAN&lt;/a&gt;?&lt;br /&gt;&lt;br /&gt;Before an example though, just a simple explanation about the topic.&lt;br /&gt;&lt;br /&gt;Unit testing &lt;a href="http://en.wikipedia.org/wiki/Unit_testing"&gt;“is a method by which individual units of source code are tested to determine if they are fit for use”&lt;/a&gt; (Wikipedia). It’s a common practice to &lt;span style="font-weight:bold;"&gt;perform unit testing in isolation&lt;/span&gt;; in other words you focus testing on the source code, limiting as much as possible the interaction across modules or systems.&lt;br /&gt;&lt;br /&gt;It’s almost always practically impossible to test a class without instantiating other classes on which it depends or interacts. What can be done is &lt;span style="font-weight:bold;"&gt;mocking objects&lt;/span&gt;: creating “empty objects” that emulate the external behaviour of real objects. They must be able to “fool” the class under test and allow the creation of an exhaustive set of tests around it.&lt;br /&gt;&lt;br /&gt;Since the class under tests “expects” the other classes to do something, here comes the term &lt;span style="font-weight:bold;"&gt;expectation&lt;/span&gt;: the unit test expects that the class under test uses the mock object by calling a specific method, optionally in a specific order and optionally with specific arguments and return values.&lt;br /&gt;&lt;br /&gt;An example with &lt;span style="font-weight:bold;"&gt;PHPUnit&lt;/span&gt;, where the class under test Person depends on a class Company, which is mocked:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$company = $this-&gt;getMock(‘Company’);&lt;br /&gt;$person = new Person();&lt;br /&gt;$person-&gt;setCompany($company);&lt;br /&gt;$company-&gt;expects( $this-&gt;atLeastOnce() )-&gt;method(‘giveLaptop’);&lt;br /&gt;$this-&gt;assertTrue($person-&gt;startFirstDay());&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In this silly example, we are testing Person, and we want to verify that on the first day of work with a company, that person has a laptop assigned.&lt;br /&gt;Person is actually instantiated, but Company, possibly a bigger and more complicated class, with other dependencies, is just mocked.&lt;br /&gt;What we check is that inside Person::startFirstDay(), there’s at least one call to Company::giveLaptop().&lt;br /&gt;&lt;br /&gt;As mentioned at the beginning of this article, expectations are available on Perl too, with the module &lt;a href="http://search.cpan.org/~steveha/Test-Expectation-0.06/lib/Test/Expectation.pm"&gt;Test::Expectation&lt;/a&gt;. The equivalent of the example before could be:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;my $person = new Person();&lt;br /&gt;my $company = Test::MockObject-&gt;new();&lt;br /&gt;&lt;br /&gt;$person-&gt;setCompany($company);&lt;br /&gt;&lt;br /&gt;it_is_a('Company');&lt;br /&gt;&lt;br /&gt;it_should "give a laptop", sub {&lt;br /&gt;        Company-&gt;expects('giveLaptop');&lt;br /&gt;        is(1, $person-&gt;startFirstDay());&lt;br /&gt;};&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;(Note that Test::Expectation uses internally &lt;a href="http://search.cpan.org/~mschwern/Test-Simple-0.98/lib/Test/More.pm"&gt;Test::More&lt;/a&gt; with a plan, so if you’re using Test::Expectation AND Test::More you can’t set a plan with the latter, as perl will complain that there’s already a plan set by the former)&lt;br /&gt;&lt;br /&gt;Unfortunately Test::Expectation is not available as a standard debian package, so if needed you may debianize it (just download, untar, dh-make-file and debuild. I wrote  &lt;a href="http://varloggiacomolog.blogspot.com/2009/10/debianize-perl-module.html"&gt;this article with some basic instructions&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Disclaimer:&lt;br /&gt;- The code in this article can't work as is, i.e. it needs modules to be installed and configured, and more lines to include those modules.&lt;br /&gt;- The code in this article has not been tested, and it doesn't come with &lt;span style="font-weight:bold;"&gt;any warranty&lt;/span&gt;&lt;br /&gt;- I'm not implying that a company should provide each employee with a laptop during their first day&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-4974654083105363374?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/4974654083105363374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/03/how-to-manage-your-expectations-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/4974654083105363374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/4974654083105363374'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/03/how-to-manage-your-expectations-with.html' title='It&apos;s not that hard to manage expectations (with Perl)'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1722257931764898853</id><published>2011-03-05T12:33:00.005Z</published><updated>2011-03-05T12:57:02.732Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ITU'/><category scheme='http://www.blogger.com/atom/ns#' term='G.729'/><category scheme='http://www.blogger.com/atom/ns#' term='audio codecs'/><title type='text'>A gentle introduction to G.729</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/G.729"&gt;G.729&lt;/a&gt; is an 8 Kpbs audio codec, standardized by &lt;a href="http://www.itu.int/ITU-T/"&gt;ITU&lt;/a&gt;, and called also CS-ACELP: Coding of Speech using &lt;a href="http://en.wikipedia.org/wiki/ACELP"&gt;Coniugate-Structure Algebraic-Code-Excited Linear Prediction&lt;/a&gt;, as that’s the algorithm used for audio compression.&lt;br /&gt;&lt;br /&gt;It has two extended versions: G.729A (optimized algorithm, slightly lower quality) and G.729B (extended features, higher quality), and it's popular in the VoIP world because combines very low bitrate with good quality (but alas is not royalty-free).&lt;br /&gt;&lt;br /&gt;G.729A takes as input frames of voice of &lt;span style="font-weight:bold;"&gt;10 msec&lt;/span&gt; of duration, sampled at &lt;span style="font-weight:bold;"&gt;8KHz&lt;/span&gt; and with each sample having &lt;span style="font-weight:bold;"&gt;16 bit&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;This gives a frame size of 80 samples:&lt;br /&gt;8000 sample/sec * 10 * 10e-3 sec/frame = &lt;span style="font-weight:bold;"&gt;80 samples/frame&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The output is 8 Kbps, so each encoded frame is represented by 10 Bytes:&lt;br /&gt;8000 bit/sec * 10 * 10e-3 sec/frame = 80 bit/frame = &lt;span style="font-weight:bold;"&gt;10 Bytes/frame&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Quality&lt;/span&gt;&lt;br /&gt;Considering its bit rate, G.729 has an excellent perceived quality (&lt;a href="http://en.wikipedia.org/wiki/Mean_opinion_score"&gt;MOS&lt;/a&gt;).&lt;br /&gt;Under normal network conditions G.729A has &lt;span style="font-weight:bold;"&gt;MOS 4.04&lt;/span&gt; (while G.711 u-law, 64 kbps, has 4.45)&lt;br /&gt;Under stressed network conditions G.729A has &lt;span style="font-weight:bold;"&gt;MOS 3.51&lt;/span&gt; (while G.711 u-law, 64 kbps, has 4.13)&lt;br /&gt;Perfect quality has MOS 5.&lt;br /&gt;&lt;br /&gt;G.729 doesn’t support (reliably) &lt;a href="http://www.faqs.org/rfcs/rfc2833.html"&gt;DTMF (RFC 2833)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Algorithm delay and complexity&lt;/span&gt;&lt;br /&gt;The delay between input and encoded output is 15 msec: 1 frame (10 msec) + 5 msec required by the look-ahead prediction algorithm.&lt;br /&gt;&lt;br /&gt;Not surprising, such a low bitrate associated with high quality, G.729 has relatively high complexity, &lt;span style="font-weight:bold;"&gt;15&lt;/span&gt; (while G.711 has 1, and on the other extreme side, G.723.1 has 25).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;VAD and CNG&lt;/span&gt;&lt;br /&gt;G.729B has been extended with VAD (Voice Activity Detection, which causes silence suppression), and generates CNG (Comfort Noise Generation) packets. This helps the receiving end in two key elements:&lt;br /&gt;1. Recover synchronization in condition of high latency network&lt;br /&gt;2. Generate Comfort Noise (which in case of silence from the transmitting end, tells the receiver that the call is still up)&lt;br /&gt;&lt;br /&gt;Next to come, a gentle description of ACELP and G.723.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1722257931764898853?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1722257931764898853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/03/gentle-introduction-to-g729.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1722257931764898853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1722257931764898853'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/03/gentle-introduction-to-g729.html' title='A gentle introduction to G.729'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-5176197555355412225</id><published>2011-03-01T18:48:00.008Z</published><updated>2011-03-01T19:15:27.875Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Test::Harness prove'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Test::More'/><category scheme='http://www.blogger.com/atom/ns#' term='Hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Test::Harness, or a lesson about wheels not to be reinvented</title><content type='html'>Let’s say you have your unit tests in place, using something not particularly esoteric as &lt;a href="http://search.cpan.org/~mschwern/Test-Simple-0.98/lib/Test/More.pm"&gt;Test::More&lt;/a&gt;. Good.&lt;br /&gt;&lt;br /&gt;Now you want something to give some color to your output, so &lt;span style="font-weight:bold;"&gt;green is Good&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;red is Bad&lt;/span&gt; and you have a quicker feedback.&lt;br /&gt;&lt;br /&gt;Time ago I wrote a quick shell script to run all the unit tests, interpret the output (in TAP format), print on screen some color output and stop the tests if something fails.&lt;br /&gt;&lt;br /&gt;The core was:&lt;br /&gt;&lt;blockquote&gt;function check_test_result() {&lt;br /&gt;        red='\e[0;31m'&lt;br /&gt;        green='\e[0;32m'&lt;br /&gt;        end='\033[0m'&lt;br /&gt;&lt;br /&gt;        result=`perl $1`;&lt;br /&gt;&lt;br /&gt;        echo "$result"&lt;br /&gt;&lt;br /&gt;        perl -e '{ my $input = join(" ", @ARGV); if ($input =~ /not ok/m) { exit 0; } exit 1; }' $result&lt;br /&gt;&lt;br /&gt;        if [ $? -eq 0 ]&lt;br /&gt;        then&lt;br /&gt;            echo -e "$red Not all tests passed. FAILURE$end"&lt;br /&gt;            exit -1&lt;br /&gt;        else&lt;br /&gt;            echo -e "$green All tests passed. SUCCESS$end"&lt;br /&gt;        fi&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This works as soon as the unit tests fail (printing ‘not ok…’), but doesn’t quite work if something else is wrong (and you see the typical “your test died just after…” at the end).&lt;br /&gt;&lt;br /&gt;Rather than improving this script, I was looking for a low hanging fruit, and eventually the easiest way I've found is to use &lt;a href="http://search.cpan.org/~andya/Test-Harness-3.23/bin/prove"&gt;Test::Harness prove&lt;/a&gt;, which BTW has color output by default.&lt;br /&gt;&lt;br /&gt;So instead of the above (which needs also a few more lines to get the list of .t files), I can just use:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ prove -v t/*.t&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I mentioned Test::Harness &lt;span style="font-style:italic;"&gt;prove&lt;/span&gt; in &lt;a href="http://varloggiacomolog.blogspot.com/2010/10/test-reports-on-hudson-in-30-seconds.html"&gt;this post too&lt;/a&gt;, where I was using the JUnit module to convert from TAP to JUnit format, and get some nice code coverage report on &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-5176197555355412225?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/5176197555355412225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/03/testharness-or-lesson-about-wheels-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5176197555355412225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5176197555355412225'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/03/testharness-or-lesson-about-wheels-not.html' title='Test::Harness, or a lesson about wheels not to be reinvented'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-4389209529353895418</id><published>2011-02-28T18:18:00.002Z</published><updated>2011-02-28T18:23:12.196Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='Build-Depends-Indep'/><title type='text'>Build-Depends-Indep is useless</title><content type='html'>The words in the title are not mine, but only a quote from &lt;a href="http://wiki.debian.org/Build-Depends-Indep"&gt;Debian Wiki&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;However, if you're reading a debian/control file and wondering what &lt;span style="font-weight:bold;"&gt;Build-Depends-Indep&lt;/span&gt; means, starting from the assumption that it is useless may help.&lt;br /&gt;&lt;br /&gt;Otherwise you can follow the rule to put in &lt;span style="font-weight:bold;"&gt;Build-Depends&lt;/span&gt; all those packages that are absolutely necessary to build architecture-dependent files, while the rest goes into &lt;span style="font-weight:bold;"&gt;Build-Depends-Indep&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-4389209529353895418?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/4389209529353895418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/02/build-depends-indep-is-useless.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/4389209529353895418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/4389209529353895418'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/02/build-depends-indep-is-useless.html' title='Build-Depends-Indep is useless'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1840781769400283174</id><published>2011-02-26T11:35:00.003Z</published><updated>2011-02-26T11:52:47.636Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Perl Best Practices&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='perlcritic'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Use the Warnings, Luke</title><content type='html'>Browsing &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt; on perl-related topics, I have two main considerations:&lt;br /&gt;1. Answers are typically very good, concise and useful&lt;br /&gt;2. Questions are submitted with code that doesn't have 'warnings' enabled&lt;br /&gt;&lt;br /&gt;I'd say that a considerable portion of the questions submitted would not be posted, or would be less generic, if authors used 'use warnings;' in their code.&lt;br /&gt;&lt;br /&gt;Then add a pinch of the great &lt;span style="font-style:italic;"&gt;perl critic&lt;/span&gt;, and possibly only half of the questions would really be submitted.&lt;br /&gt;&lt;br /&gt;If you're using perl, or plan to use it, I strongly recommend to:&lt;br /&gt;1. &lt;a href="http://perldoc.perl.org/warnings.html"&gt;Always set 'use warnings;'&lt;/a&gt;&lt;br /&gt;2. Always submit your code to &lt;a href="http://search.cpan.org/dist/Perl-Critic/"&gt;perl critic&lt;/a&gt; (and keep a copy of &lt;a href="http://oreilly.com/catalog/9780596001735"&gt;Perl Best Practices&lt;/a&gt; handy).&lt;br /&gt;3. First create the tests, then write the code. That's the only reasonable way (unless you're working on a one-liner for a quick admin task). &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD is your friend&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See more on Perl Critic &lt;a href="http://varloggiacomolog.blogspot.com/2010/10/need-some-constructive-criticism-on.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1840781769400283174?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1840781769400283174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/02/use-warnings-luke.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1840781769400283174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1840781769400283174'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/02/use-warnings-luke.html' title='Use the Warnings, Luke'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-2043340245569155843</id><published>2011-02-01T12:49:00.003Z</published><updated>2011-02-01T12:58:10.168Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='grep-status'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>debian - cleaning up stale configuration files</title><content type='html'>As suggested in &lt;a href="http://raphaelhertzog.com/2011/01/31/debian-cleanup-tip-1-get-rid-of-useless-configuration-files/"&gt;Debian Cleanup Tip #1: Get rid of useless configuration files&lt;/a&gt;, it's worth using &lt;a href="http://man.he.net/man1/grep-status"&gt;grep-status&lt;/a&gt; to retrieve information about configuration files left behind a package removal or upgrade.&lt;br /&gt;&lt;br /&gt;For example, on my Squeeze VM:&lt;br /&gt;&lt;blockquote&gt;$ grep-status -n -sPackage -FStatus config-files&lt;br /&gt;libjack-jackd2-0&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You can confirm with 'dpkg -l' that's a package in 'rc' status:&lt;br /&gt;&lt;blockquote&gt;$ dpkg -l | grep libjack-jackd2-0&lt;br /&gt;rc  libjack-jackd2-0                    1.9.6~dfsg.1-2               JACK Audio Connection Kit (libraries)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;You may probably want to remove definitely those configuration files; just purge the package. For example:&lt;br /&gt;&lt;blockquote&gt;$ dpkg -P libjack-jackd2-0&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;See also about debian configuration files, &lt;a href="http://varloggiacomolog.blogspot.com/2010/09/configuration-files-important.html"&gt;an important assumption Debian takes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-2043340245569155843?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/2043340245569155843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/02/debian-cleaning-up-stale-configuration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2043340245569155843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2043340245569155843'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/02/debian-cleaning-up-stale-configuration.html' title='debian - cleaning up stale configuration files'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-2441023757529512281</id><published>2011-01-12T13:43:00.002Z</published><updated>2011-01-12T13:45:56.867Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Putty'/><category scheme='http://www.blogger.com/atom/ns#' term='Putty Session Manager'/><title type='text'>Recommended tool: Putty Session Manager</title><content type='html'>If you have more than a few entries on putty, you may consider using &lt;a href="http://puttysm.sourceforge.net/"&gt;Putty Session Manager&lt;/a&gt;.&lt;div&gt;You can organize your sessions in folders (and start all the sessions inside a folder with a click).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please leave a comment if you know something better!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-2441023757529512281?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/2441023757529512281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/01/recommended-tool-putty-session-manager.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2441023757529512281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2441023757529512281'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/01/recommended-tool-putty-session-manager.html' title='Recommended tool: Putty Session Manager'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-5514896027631927224</id><published>2011-01-10T17:29:00.002Z</published><updated>2011-01-10T17:34:23.138Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='tab completion'/><category scheme='http://www.blogger.com/atom/ns#' term='sh'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>debian, tab completion failing</title><content type='html'>Not a big deal, but since the solution to this problem wasn't immediate to find, it's probably worth writing it down.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Symptom&lt;/b&gt;: when you try to tab complete a command, you see a message like this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;vi /et-sh: &lt;( compgen -d -- '/et' ): No such file or directory&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Cause&lt;/b&gt;: You're using sh, not bash, so even if tab completion is enabled on ~/.bashrc, it won't be available to you.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Solution&lt;/b&gt;: change the default shell for the current user from sh to bash with&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;chsh -s /bin/bash&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-5514896027631927224?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/5514896027631927224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/01/debian-tab-completion-failing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5514896027631927224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5514896027631927224'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2011/01/debian-tab-completion-failing.html' title='debian, tab completion failing'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1981995074286952444</id><published>2010-11-12T11:36:00.003Z</published><updated>2010-11-12T11:46:16.980Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Encapsulation'/><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Perl Best Practices&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='perl 6'/><title type='text'>Inside-Out Objects for Perl – I’m not convinced</title><content type='html'>&lt;p class="MsoNormal"&gt;When I’ve found &lt;b&gt;Inside-Out Objects&lt;/b&gt; not only mentioned but suggested inside &lt;a href="http://oreilly.com/catalog/9780596001735"&gt;Perl Best Practices&lt;/a&gt; (see "Always Use Fully Encapsulated Objects" section) I thought: “Cool, here’s a solution to enforce encapsulation on Perl classes. This was badly needed”. But then, the list of advantages wasn’t too exciting, while the drawbacks were quite scary… &lt;a href="https://www.socialtext.net/perl5/index.cgi?inside_out_object"&gt;See for example this analysis&lt;/a&gt;.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;To simplify the problem, note that all I want is: “a mechanism to prevent an object attribute to be read or changed from outside the object”. In Java, C++, PHP, you just declare that class attribute as &lt;b&gt;private&lt;/b&gt;. Simple. (Python has a form of “privatization by obfuscation” that I don’t really like, but it may be better than what Perl does – which is nothing).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Perl (5) is not a full OO programming language, just a procedural language that has got some additions to allow for OO dynamics, but still I'm surprised I can't "protect" object attributes...  Getting back to Inside-Out Objects, &lt;a href="http://perlmonks.org/index.pl?node_id=515650"&gt;the best analysis I’ve found is from perlmonks&lt;/a&gt; in 2005.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I agree with the points raised by &lt;a href="http://perlmonks.org/index.pl?node_id=313108"&gt;jhedden&lt;/a&gt; (however I find points 1, 2, 3 and 9 “less strong” than the others): &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Hash-based objects are the standard. Using a different object API may lead to maintainability issues.&lt;/li&gt;&lt;li&gt;Inside-out object classes aren't compatible with hash-based object classes.&lt;/li&gt;&lt;li&gt;Inside-out objects are just another kludge on top of Perl's already kludgy OO mechanisms.&lt;/li&gt;&lt;li&gt;I haven't had any problems using hash-based objects. The encapsulation and compile-time checking advantages of inside-out objects aren't important enough to induce me to use them.&lt;/li&gt;&lt;li&gt;The encapsulation provided by inside-out objects is unenforcable because the source code is available.&lt;/li&gt;&lt;li&gt;Inside-out objects require a DESTROY method, and I don't what to have to remember to write one each time I create an inside-out class.&lt;/li&gt;&lt;li&gt;There are too many alternative inside-out object support modules that aren't compatible with each other.&lt;/li&gt;&lt;li&gt;I'm leery of the 'magic' the inside-out object support modules do 'under the covers'. There may be bugs or they may lead to unexpected problems when interacting with other modules.&lt;/li&gt;&lt;li&gt;I tried module Foo::Bar, and had problems with it so I gave up on trying to use inside-out objects.&lt;/li&gt;&lt;li&gt;You can't serialize inside-out objects either in general, or using Data::Dumper or Storable.&lt;/li&gt;&lt;li&gt;Inside-out objects are not thread-safe because they usually use refaddr as the key for storing object data.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;                      &lt;p class="MsoNormal"&gt;I was hoping perl 6 will eventually solve the problem of private attributes (which is all I want here) and &lt;a href="http://en.wikibooks.org/wiki/Perl_6_Programming/Classes_And_Attributes"&gt;it seems I’m lucky&lt;/a&gt;:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p class="MsoNormal"&gt;Attributes are defined with the has keyword, and are specified with a special syntax:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;class MyClass {&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;has $!x;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;has $!y;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;}&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The ! twigil specifies that this variable is an attribute on an object and not a regular variable.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Attributes are private, but you can easily add an accessor for it, that is a method of the same name that can be called from the outside of the class and returns the value of the attribute. These accessors are automatically generated for you if you declare the attribute with the . twigil instead:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;class MyClass&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;has $.x;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun:yes"&gt;   &lt;/span&gt;has $.y;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;}&lt;/p&gt;  &lt;p class="MsoNormal"&gt;When you assign to an attribute from within the class, you still have to use the ! form.&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoNormal"&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;Do I like that syntax? I do not. Do that mechanism satisfy my need? Yes, thank you.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Another reason to look forward to Perl 6.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1981995074286952444?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1981995074286952444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/11/inside-out-objects-for-perl-im-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1981995074286952444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1981995074286952444'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/11/inside-out-objects-for-perl-im-not.html' title='Inside-Out Objects for Perl – I’m not convinced'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1494708161837148525</id><published>2010-10-29T13:21:00.003+01:00</published><updated>2010-10-29T13:35:53.625+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debuild'/><category scheme='http://www.blogger.com/atom/ns#' term='TAP::Harness::JUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='Hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='CPAN'/><category scheme='http://www.blogger.com/atom/ns#' term='dh-make-perl'/><category scheme='http://www.blogger.com/atom/ns#' term='prove'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Test reports on Hudson in 30 seconds (well, let's say quickly)</title><content type='html'>There are so many articles on how to generate test reports on &lt;a href="http://hudson-ci.org/"&gt;Hudson&lt;/a&gt; for perl modules or applications, that I thought it was somehow complicated. It's not.&lt;div&gt;&lt;br /&gt;&lt;div&gt;The underlying problem is that Hudson has support for test results in &lt;a href="http://www.junit.org/"&gt;JUnit&lt;/a&gt; format. To solve this you need to convert from TAP to JUnit the test results.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course there are some pre-requirement:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Your perl code must have tests (duh)&lt;/li&gt;&lt;li&gt;You must have Hudson set up to run those tests&lt;/li&gt;&lt;li&gt;You need to install &lt;a href="http://search.cpan.org/~lkundrak/TAP-Harness-JUnit-0.32/lib/TAP/Harness/JUnit.pm"&gt;TAP::Harness::JUnit&lt;/a&gt; on the building box&lt;/li&gt;&lt;li&gt;You need to install '&lt;a href="http://linux.die.net/man/1/prove"&gt;prove&lt;/a&gt;' on the building box&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then all you have to do is add this command in the shell script you execute to run the tests:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;b&gt;prove --harness=TAP::Harness::JUnit&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;and configure the "Publish JUnit Test Result Reports" section of your project to point to the resulting XML file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;No mumbo jumbo&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since TAP::Harness::JUnit is not available as a debian package, if you need to install it properly, just follow the usual procedure to generate debian packages from CPAN modules:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;wget http://search.cpan.org/CPAN/authors/id/L/LK/LKUNDRAK/TAP-Harness-JUnit-0.32.tar.gz&lt;/li&gt;&lt;li&gt;tar -pzxvf TAP-Harness-JUnit-0.32.tar.gz&lt;/li&gt;&lt;li&gt;dh-make-perl TAP-Harness-JUnit-0.32/&lt;/li&gt;&lt;li&gt;cd TAP-Harness-JUnit-0.32&lt;/li&gt;&lt;li&gt;debuild&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;There you go.&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1494708161837148525?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1494708161837148525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/test-reports-on-hudson-in-30-seconds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1494708161837148525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1494708161837148525'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/test-reports-on-hudson-in-30-seconds.html' title='Test reports on Hudson in 30 seconds (well, let&apos;s say quickly)'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-5749461715073983944</id><published>2010-10-23T22:37:00.004+01:00</published><updated>2010-10-23T22:52:50.183+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='Kindle'/><category scheme='http://www.blogger.com/atom/ns#' term='reading'/><title type='text'>A rather serious matter – deciding what to read</title><content type='html'>&lt;p class="MsoNormal"&gt;If you are not interested in the full post, the concept of it is: &lt;b&gt;“What are the 500 books that are worth reading before I die?”&lt;/b&gt; What do you recommend?&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Here’s the full post:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’m a keen reader since I was a child, and I’ve recently become an enthusiastic user of &lt;a href="http://www.amazon.co.uk/Kindle-Wireless-Reading-Display-Generation/dp/B002LVUWFE/ref=sa_menu_kdp32"&gt;Kindle&lt;/a&gt;.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Infinite (well, I know they are finite, but allow me this mathematically inconsistent emphasis) opportunities have suddenly become available: I can have thousands of books on my Kindle in seconds. Kindle books cost less their paper version, and often are even free (what’s slightly concerning is how easily you can buy a Kindle book: you just click on a button and your Amazon account is charged automatically - that’s why I set up a password to lock the device).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Anyway the point of this post is about decisions: what to read.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Let’s start with estimating how much I can read in my life, to give more sense on what follows. I need about one month to read a technical book of 400-500 pages, about two weeks to read an interesting novel of 200-300 pages.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’m not sure I should consider technical books as a separate topic, because I typically like them, and so they are relevant not only for my job but in general for me (or I just can’t manage to read them, so the time spent is 0).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;For sure, they require considerably more time than novels (mainly because it’s more “studying” than “reading”).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’ll leave them out to focus more on “what I should read as a human being, rather than as engineer”, and to simplify my point.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So in a month I could read 2-3 interesting books. Holidays will probably tend to increase the average, but first I don’t have so many holidays, and second there are working months in which I don’t find the time to read as much as I’d like.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Let’s say 2 books/month. It’s 24 per year; 20 with a more conservative estimate.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;20 books per year means that from today until I die – depending on how things go – I could read from 0 (damn double decker on a Sunday morning) to about 800 books.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you just refer to some “1000 books to read before you die” articles, you see that I already can’t read 200 of them (I think I can safely remove the “Love” section for now though), and still there are thousands of options out there. Furthermore, each year new books worth reading are published – let’s say between 5 and 10? This means that even if I want to keep reading books that are really worth the time, I have to pick up now only about 600 existing books. 500 makes it a nicer number.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So the question is: &lt;b&gt;“What are the 500 books that are worth reading before I die?”&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;What do you suggest?&lt;/p&gt;&lt;p class="MsoNormal"&gt; (hint: consider that 40 good books will keep me quiet for a couple of years, so no need to completely drain your energies on the other 460 for the moment).&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I know what books I liked so far though: I’ll write a separate post on it.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-5749461715073983944?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/5749461715073983944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/rather-serious-matter-deciding-what-to.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5749461715073983944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5749461715073983944'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/rather-serious-matter-deciding-what-to.html' title='A rather serious matter – deciding what to read'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-9013401454857170591</id><published>2010-10-16T18:44:00.003+01:00</published><updated>2010-10-16T19:02:41.088+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tahar Ben Jelloun'/><category scheme='http://www.blogger.com/atom/ns#' term='Literature'/><category scheme='http://www.blogger.com/atom/ns#' term='Tate Modern'/><title type='text'>A forgotten note</title><content type='html'>Almost a year ago I attended "&lt;a href="http://www.tate.org.uk/modern/eventseducation/talksdiscussions/20810.htm"&gt;Literature and Freedom : Writers in Conversation&lt;/a&gt;", a discussion hosted by &lt;a href="http://www.tate.org.uk/modern/"&gt;Tate Modern&lt;/a&gt; which presented among the others &lt;a href="http://en.wikipedia.org/wiki/Tahar_Ben_Jelloun"&gt;Tahar Ben Jelloun&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I wish I took more notes during that discussion, but this afternoon I found one - I'd rather write it here before losing even that piece of paper:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;Behind every work of fiction lies a tragedy.&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's probably something you may easily believe reading "This blinding absence of light", which definitely impressed me this Spring, and I faced like a long work of poetry rather than a novel.  &lt;a href="http://www.guardian.co.uk/books/2004/jul/24/featuresreviews.guardianreview14"&gt;Here's a review from The Guardian&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-9013401454857170591?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/9013401454857170591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/forgotten-note.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/9013401454857170591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/9013401454857170591'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/forgotten-note.html' title='A forgotten note'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1082436535669607188</id><published>2010-10-16T17:27:00.005+01:00</published><updated>2010-10-16T17:59:11.298+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;Perl Best Practices&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='perlcritic'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='CPAN'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='continuous integration'/><title type='text'>Need some constructive criticism on your code? Ask perlcritic.</title><content type='html'>&lt;a href="http://search.cpan.org/dist/Perl-Critic/lib/Perl/Critic.pm"&gt;perlcritic&lt;/a&gt; is "a static source code analysis engine", a CPAN module which can also be used as a &lt;a href="http://search.cpan.org/~elliotjs/Perl-Critic-1.109/bin/perlcritic"&gt;command&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;An example:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;$ perlcritic -severity 3 src/AModule.pm&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Subroutine does not end with "return" at line 24, column 1.  See page 197 of PBP.  (Severity: 4)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Return value of eval not tested. at line 32, column 5.  You can't depend upon the value of $@/$EVAL_ERROR to tell whether an eval failed..  (Severity: 3)&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;As you can see you can get extremely useful information about the sanity of your code and how much it complies to good coding practices. There are 5 different severity levels (being 5 the "less critic").&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;Most Policy modules are based on &lt;a href="http://oreilly.com/catalog/9780596001735"&gt;Damian Conway's book Perl Best Practices&lt;/a&gt; (&lt;b&gt;PBP&lt;/b&gt;), but it's not limited to it.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;I run perlcritic (using typically severity 3) automatically on all the source code files, every time I run the unit tests and/or build a package, in order to get as soon as possible a valuable feedback after code changes. &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;Since the same build scripts are used by a CI tool, &lt;b&gt;I'm tempted to make the build fail if policies at level 4 or 5 are violated&lt;/b&gt; (as I do whenever even a single unit test fails), but I'm still not sure.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;Anyway &lt;b&gt;I strongly recommend this tool to anyone writing perl code&lt;/b&gt;, even if they are just scripts with a few lines (which are very likely to grow in the future, as a law on the increase of code complexity in the time - which I can't recall now - says ;-) ).&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;Personally, even if I don't agree 100% on what PBP recommends, I'd rather follow it and have a documented approach than do what I prefer (maybe just because I'm used to it) without a specific, well-documented reason.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;If you just want to have a quick look, &lt;a href="http://www.perlcritic.org/"&gt;upload some perl code here&lt;/a&gt;, and see what feedback you get.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: medium; "&gt;A note on the term &lt;b&gt;constructive criticism&lt;/b&gt;: I chose it in the title as a mere translation from something I could have written in Italian, but then reading &lt;a href="http://en.wikipedia.org/wiki/Criticism#Constructive_criticism"&gt;its definition on Wikipedia&lt;/a&gt; I think I've learned something more. Here's a quote:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;blockquote&gt;Constructive criticism, or constructive analysis, is a compassionate attitude towards the person qualified for criticism. [...] the word constructive is used so that something is created or visible outcome generated rather than the opposite.&lt;/blockquote&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1082436535669607188?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1082436535669607188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/need-some-constructive-criticism-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1082436535669607188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1082436535669607188'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/need-some-constructive-criticism-on.html' title='Need some constructive criticism on your code? Ask perlcritic.'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-7784579977145334260</id><published>2010-10-06T21:26:00.004+01:00</published><updated>2010-10-06T21:40:08.025+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hashes'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Merging hashes with Perl - easy but (maybe) tricky</title><content type='html'>Merging hashes with Perl is extremely easy: you can just "list" them.&lt;div&gt;For example try this:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;use strict;&lt;/div&gt;&lt;div&gt;use warnings;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;use Data::Dumper;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;my %hash1 = ('car' =&gt; 'FIAT', 'phone' =&gt; 'Nokia');&lt;/div&gt;&lt;div&gt;my %hash2 = ('laptop' =&gt; 'Dell', 'provider' =&gt; 'Orange');&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;my %mergedHash = (%hash1, %hash2);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;print "hash1: " . Dumper(\%hash1);&lt;/div&gt;&lt;div&gt;print "hash2: " . Dumper(\%hash2);&lt;/div&gt;&lt;div&gt;print "merged hash: " . Dumper(\%mergedHash);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;You'll see that %mergedHash contains the result of merging the two hashes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is the simplest but not most efficient way to do it:&lt;a href="http://docstore.mik.ua/orelly/perl/cookbook/ch05_11.htm"&gt; here Perl Cookbook presents a different method&lt;/a&gt;, which uses less memory - interesting if you're merging big hashes (and have memory constraints).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now the tricky bit is that you can have this merge even when maybe you don't expect it...&lt;/div&gt;&lt;div&gt;For example add this code to the previous lines:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;div&gt;useHashes(%hash1, %hash2);&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;sub useHashes {&lt;/div&gt;&lt;div&gt;   my(%hashInput1, %hashInput2) = @_;&lt;/div&gt;&lt;div&gt;   &lt;/div&gt;&lt;div&gt;   print "hashInput1: " . Dumper(\%hashInput1);&lt;/div&gt;&lt;div&gt;   print "hashInput2: " . Dumper(\%hashInput2);&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What would you expect? Try it out.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What actually happens is that the two hashes are merged inside the call to useHashes(), and all works as if useHashes() received a single argument (the merged hash), instead of two separate arguments (the two original hashes).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-7784579977145334260?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/7784579977145334260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/merging-hashes-with-perl-easy-but-maybe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7784579977145334260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7784579977145334260'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/10/merging-hashes-with-perl-easy-but-maybe.html' title='Merging hashes with Perl - easy but (maybe) tricky'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-6227440577704352293</id><published>2010-09-27T11:50:00.003+01:00</published><updated>2010-09-27T12:04:10.413+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='conffiles'/><title type='text'>Configuration files: an important assumption debian takes</title><content type='html'>It took me more than expected (and in fact someone found it for me) to explain why a file installed by a debian package and not listed inside debian/conffiles was handled as a standard configuration file.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The file is installed in a subdirectory of /etc/, so &lt;i&gt;intuitively&lt;/i&gt; you may assume it must be considered as a configuration file, although this wasn't clearly stated in a document until I read this from &lt;a href="http://www.debian.org/doc/maint-guide/ch-dother.en.html"&gt;Debian New Maintainer's Guide&lt;/a&gt; , chapter 5:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;Since debhelper V3, dh_installdeb(1) will automatically flag any files under the /etc directory as conffiles, so if your program only has conffiles there you do not need to specify them in this file. For most package types, the only place there is (and should be conffiles) is under /etc and so this file doesn't need to exist.&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The conclusion is that if you install a file in a subfolder of /etc/, you don't need to list it inside debian/conffiles.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: 18px;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-6227440577704352293?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/6227440577704352293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/09/configuration-files-important.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6227440577704352293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6227440577704352293'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/09/configuration-files-important.html' title='Configuration files: an important assumption debian takes'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-3605727588404040480</id><published>2010-09-25T20:56:00.004+01:00</published><updated>2010-09-25T21:02:33.564+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='order of ignorance'/><title type='text'>Order of Ignorance</title><content type='html'>&lt;div&gt;This is a concept that I've always found interesting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This evening I recalled it and found a blog article with other classifications of order of ignorance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is the version I already knew:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;0OI: I have Zeroth Order Ignorance (0OI) when I know something and can demonstrate my lack of ignorance in some tangible form, such as by building a system that satisfies the user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1OI: Lack of Knowledge. I have First Order Ignorance (1OI) when I don’t know something and I can readily identify that fact.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;2OI: Lack of Awareness. I have Second Order Ignorance (2OI) when I don’t know that I don’t know something. That is to say, not only am I ignorant of something (I have 1OI), I am unaware of that fact.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;3OI: Lack of Process. I have Third Order Ignorance (3OI) when I don’t know of a suitably efficient way to find out that I don’t know that I don’t know something. So I am unable to resolve my 2OI.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my words:&lt;/div&gt;&lt;div&gt;&lt;b&gt;Level 0&lt;/b&gt;: I know the problem and I can solve it because I've already done it before.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Level 1&lt;/b&gt;: I know the problem but I don't know how to solve it.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Level 2&lt;/b&gt;: I don't know I have a problem.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Level 3&lt;/b&gt;: I don't know how to identify if I have a problem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The new (for me) concept &lt;a href="http://www.agilemanagement.net/Articles/Weblog/ClassifyingUncertaintyRev.html"&gt;I was reading about, applies a similar concept to uncertainty&lt;/a&gt; :&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;Variation is where assigned cause has been eliminated and only chance cause exists within a known and understood system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Foreseen Uncertainty is where there are identifiable risks and understood issues which affect the delivery of the project but the basic market for the deliverable is understood and the business model or go-to-market strategy is understood. However, there is sufficient uncertainty that assignable cause variation will be observed and must be dealt with through aggressive issue log management.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unforeseen Uncertainty will feel out of control most of the time and what gets delivered won't be exactly what the customer wanted or when they wanted it. This could be because the software development is happening with a new paradigm of tools or method - when teams start using MDA or DSLs for example - but it may also occur in new markets where the business model is not understood and the degree of variation cannot be predicted. The answer is to iterate frequently and plan adaptively. It is primarily this class of project which Doug DeCarlo addresses with his Extreme Project Management method.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, there is Chaos, the land where we don't know what we don't know and we are trying to find out - neither the market, the business model, the customer base, the product features, or the technology are understood. It's the land of research projects.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my words:&lt;/div&gt;&lt;div&gt;&lt;b&gt;Variation&lt;/b&gt;: No uncertainty. You know the market and what to push on it.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Foreseen uncertainty&lt;/b&gt;: You know what problems can arise and you're ready to face them.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Unforseen uncertainty&lt;/b&gt;: What you deliver is different than what you've planned because uncertainties moved your scope.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Chaos&lt;/b&gt;: You don't know what to do and how to do it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I could decide, I'd choose to work in a scenario where I have Order of Ignorance 1 (I know the problem but I need to learn how to solve it) and Forseen Uncertainty, as I find it the most interesting to be in.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I know what your question might be at this point: "It's Staurday night and the most exciting thing you can do is... write this post?".&lt;/div&gt;&lt;div&gt;Well, you can classify your plans for a Saturday night in 4 different categories...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-3605727588404040480?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/3605727588404040480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/09/order-of-ignorance_25.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3605727588404040480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3605727588404040480'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/09/order-of-ignorance_25.html' title='Order of Ignorance'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-3577871127550423792</id><published>2010-08-10T11:58:00.003+01:00</published><updated>2010-08-10T12:15:55.193+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Programming: the first thing to learn</title><content type='html'>&lt;div&gt;Many of us had courses, attended lectures and speeches on programming. Many of us read (even many) programming books, and regularly read articles and blogs about programming.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Have you ever thought of what should have been the first thing to learn in programming? The usual "variables, operators, data structures, classes, templates, metaprogramming, ..." or something else?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've come to the conclusion that the most important thing, the first thing to learn, the one that if you're not familiar with you shouldn't even keep studying programming, is the answer to this question: &lt;b&gt;"How can I verify my code works?"&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If I was a teacher, right before writing my name on the blackboard (yes, this is how I like it to imagine it), I'd write this: "How can I verify my code works?".&lt;/div&gt;&lt;div&gt;And I'll spend the entire lesson waiting for someone to come up with a reasonable solution. If nobody goes close to it, I'd assign it as an essay for the following lesson.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The concept I want to stress here is simple: &lt;b&gt;The Code You Write Must Be Automatically Testable&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;Emphasis on: Testable.&lt;/div&gt;&lt;div&gt;Emphasis on: Automatic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. &lt;b&gt;At any given moment&lt;/b&gt;, you must be able to launch a script and verify that your code works as expected, while the result of the verification is automatically checked (refer to &lt;a href="http://en.wikipedia.org/wiki/Unit_testing"&gt;Unit Testing&lt;/a&gt;). &lt;b&gt;Better if the script is fast&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;2. &lt;b&gt;Before&lt;/b&gt; changing your code, you must first write the tests to verify your changes will do what you expect (this is called &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD, Test Driven Development&lt;/a&gt; - there are many interesting and well written articles on this topic). Those tests will fail: your job will be making them pass.&lt;/div&gt;&lt;div&gt;3. You &lt;b&gt;must not &lt;/b&gt;commit changes when some of the tests fail.&lt;/div&gt;&lt;div&gt;4. You &lt;b&gt;must not&lt;/b&gt; build a package when some of the tests fail.&lt;/div&gt;&lt;div&gt;5. You &lt;b&gt;must not&lt;/b&gt; be happy until all your tests pass.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(As a collateral note, you should beware of programming languages that don't provide mature and well maintained tools for unit testing.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What happens if you don't follow this approach? Well, you will be able to write your code, have fun with it, pass your exams or even get paid for it, but sooner or later you'll end up with one or more of these questions:&lt;/div&gt;&lt;div&gt;"When did I break this?"&lt;/div&gt;&lt;div&gt;"How happened I didn't realize this wasn't working?"&lt;/div&gt;&lt;div&gt;"Now what else am I going to break if I add this new feature?"&lt;/div&gt;&lt;div&gt;"How can I test those 10K lines of code, without touching them?"&lt;/div&gt;&lt;div&gt;"How comes the testing guys never invite me for a beer?"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Inside the brilliant &lt;a href="http://oreilly.com/catalog/9780596527358"&gt;Head First - Software Development&lt;/a&gt;, you find the description of this simple process: &lt;/div&gt;&lt;div&gt;1. Write the tests&lt;/div&gt;&lt;div&gt;2. Make the code work&lt;/div&gt;&lt;div&gt;3. Refactor&lt;/div&gt;&lt;div&gt;4. Back to 1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the Perl side, "&lt;a href="http://www.extremeperl.org/bk/home"&gt;Extreme Perl&lt;/a&gt;" gives a pragmatic view of testing.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Things start to get more complicated when the application you're writing has to interact with other "external" entities, which may be even &lt;b&gt;remote&lt;/b&gt;. I'll write on this in the future.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-3577871127550423792?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/3577871127550423792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/08/programming-first-thing-to-learn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3577871127550423792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3577871127550423792'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/08/programming-first-thing-to-learn.html' title='Programming: the first thing to learn'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-2155141882865057620</id><published>2010-08-06T10:20:00.002+01:00</published><updated>2010-08-06T10:40:21.344+01:00</updated><title type='text'>Perl modules: from a new idea to a debian package in one minute</title><content type='html'>Time ago I wrote something about &lt;a href="http://varloggiacomolog.blogspot.com/2009/10/debianize-perl-module.html"&gt;debianizing a perl module&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're not applying it to a tar downloaded from CPAN or in general a third party module, but on your own module, then you may find it useful to build the module's dir structure using &lt;i&gt;&lt;a href="http://search.cpan.org/~petdance/Module-Starter-1.54/lib/Module/Starter.pm"&gt;module-starter&lt;/a&gt;&lt;/i&gt; (installed with libmodule-starter-perl).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The CPAN page for &lt;i&gt;module-starter&lt;/i&gt; contains a simple description on how to use it and &lt;a href="http://www.kiffingish.com/2010/08/another-perl-project.html"&gt;this post&lt;/a&gt; has interesting comments on even easier ways to achieve the same result (using &lt;a href="http://dzil.org/"&gt;dzil&lt;/a&gt; for example).&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In summary this is what you need to do:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ module-starter --module=My::AModule --author="Giacomo Vacca" --email="giacomo.vacca@email.email" --builder=Module::Install&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Inside the created dir (My-AModule):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ perl Makefile.PL&lt;/div&gt;&lt;div&gt;$ make&lt;/div&gt;&lt;div&gt;$ make test&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(I'm not running &lt;i&gt;make install&lt;/i&gt; on purpose)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Outside of My-AModule:&lt;/div&gt;&lt;div&gt;$ &lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;dh-make-perl My-AModule/&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;(builds the debian dir using the current configuration)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;Inside My-AModule:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;$ &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;debuild&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;or&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;$ &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;debuild -us -uc&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;if you don't want to sign the deb.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre; "&gt;Then I just suggest to have &lt;a href="http://packages.debian.org/search?keywords=dput"&gt;dput&lt;/a&gt; configured and upload the package to your repo.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-2155141882865057620?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/2155141882865057620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/08/perl-modules-from-new-idea-to-debian.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2155141882865057620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2155141882865057620'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/08/perl-modules-from-new-idea-to-debian.html' title='Perl modules: from a new idea to a debian package in one minute'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-6292286689425675003</id><published>2010-04-16T11:59:00.003+01:00</published><updated>2010-04-16T12:08:22.258+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='CPAN'/><category scheme='http://www.blogger.com/atom/ns#' term='dh-make-perl'/><title type='text'>Building a debian package for a CPAN module, and a known issue</title><content type='html'>The good news is that building a debian package from the source of a CPAN module is easy, thanks to the &lt;a href="http://www.debian-administration.org/articles/78"&gt;dh-make-perl&lt;/a&gt; tool.&lt;div&gt;The bad news is that the configuration of dh-make-perl can lead to the generation of a debian package containing unneeded files, and as a collateral effect preventing package installation as the files belong to more than one package.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example you can end up with something like:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;dpkg: error processing /var/cache/apt/archives/scnlibpoe-filter-stomp-perl_0.01_all.deb (--unpack):&lt;/div&gt;&lt;div&gt;&lt;b&gt; trying to overwrite `/usr/lib/perl/5.8/perllocal.pod', which is also in package scnlibpoe-component-client-stomp-perl&lt;/b&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.debian-administration.org/articles/78#comment_9"&gt;Somebody suggests a change in the configuration file used by dh-make-perl&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The same result can be achieved by applying this change to your &lt;b&gt;debian/rules&lt;/b&gt; file:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;--- debian/rules        (revision 32211)&lt;/div&gt;&lt;div&gt;+++ debian/rules        (working copy)&lt;/div&gt;&lt;div&gt;@@ -51,8 +51,11 @@&lt;/div&gt;&lt;div&gt;-       rmdir --ignore-fail-on-non-empty --parents $(TMP)/usr/lib/perl5&lt;/div&gt;&lt;div&gt;+       rm -rfv $(TMP)/usr/lib&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-6292286689425675003?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/6292286689425675003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/04/building-debian-package-for-cpan-module.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6292286689425675003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6292286689425675003'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/04/building-debian-package-for-cpan-module.html' title='Building a debian package for a CPAN module, and a known issue'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1258420937234111188</id><published>2010-04-13T18:00:00.004+01:00</published><updated>2010-04-13T18:15:33.933+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='reprepro'/><title type='text'>Creating (easily) a local debian repo</title><content type='html'>The goal is to &lt;b&gt;make my life easier&lt;/b&gt; when the same package may go to different distributions.&lt;div&gt;This is not useful per se, but it becomes so when you use &lt;b&gt;custom distributions names&lt;/b&gt; to distinguish separate product branches.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Let's assume you have an application &lt;i&gt;app&lt;/i&gt;, which has different flavours, for example &lt;i&gt;alpha&lt;/i&gt; and &lt;i&gt;beta&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;You may want to have two separate debian repos for &lt;i&gt;app&lt;/i&gt;, one called &lt;i&gt;alpha &lt;/i&gt;and one called &lt;i&gt;beta&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;Hosts within environment A may refer to the &lt;i&gt;alpha &lt;/i&gt;repo, while hosts in another environment, let's say environment B, may want to refer to the &lt;i&gt;beta &lt;/i&gt;repo.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This keeps the small or big differences in &lt;i&gt;app &lt;/i&gt;isolated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, assume &lt;i&gt;app &lt;/i&gt;reaches a point when the only difference between A and B is the distribution name, so you can have the same version for the &lt;i&gt;alpha &lt;/i&gt;and &lt;i&gt;beta &lt;/i&gt;repo: how can you avoid building the package twice? Is there a way to make both repos happy?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These are the questions that led me to the need of having a&lt;b&gt; local debian repo&lt;/b&gt;, to experiment a little on this topic (I know I should read all the &lt;b&gt;Debian Policy docs&lt;/b&gt; and come up with one, single, incontrovertible answer. But I prefer the empirical way, sometimes).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far I've just created a local repo using &lt;a href="http://mirrorer.alioth.debian.org/"&gt;reprepro&lt;/a&gt;, and following &lt;a href="http://alioth.debian.org/scm/viewvc.php/*checkout*/mirrorer/docs/manual.html?revision=HEAD&amp;amp;root=mirrorer"&gt;this easy tutorial&lt;/a&gt;. I'll update this post with a simple procedure to build your own repo and some results on how to manage the distributions (although I must admit that in this particular moment I expect a simple solution to be:&lt;/div&gt;&lt;div&gt;1. Just stick both distributions inside debian/changelog&lt;/div&gt;&lt;div&gt;or&lt;/div&gt;&lt;div&gt;2. Add a Provides directive to debian/control&lt;/div&gt;&lt;div&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1258420937234111188?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1258420937234111188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/04/creating-easily-local-debian-repo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1258420937234111188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1258420937234111188'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2010/04/creating-easily-local-debian-repo.html' title='Creating (easily) a local debian repo'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-5720610217442409812</id><published>2009-11-27T16:39:00.001Z</published><updated>2009-11-27T16:52:44.625Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>All you want to know about development on Debian</title><content type='html'>... and you never dared asking. &lt;a href="http://www.debian.org/doc/devel-manuals"&gt;Enjoy&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-5720610217442409812?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/5720610217442409812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/11/all-you-want-to-know-about-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5720610217442409812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5720610217442409812'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/11/all-you-want-to-know-about-development.html' title='All you want to know about development on Debian'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-3815716960300421773</id><published>2009-11-13T12:29:00.002Z</published><updated>2009-11-13T14:11:17.977Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='regexp'/><title type='text'>mysql and regular expressions</title><content type='html'>The first time I needed to have some kind of complex select statement, I started to pray about the ability to use regular expressions with mysql.&lt;br /&gt;&lt;br /&gt;Easy as it may be: use &lt;span style="font-weight: bold;"&gt;REGEXP&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;SELECT * FROM db.ip_addresses WHERE ip_address REGEXP '^192\.168\.0\.(133|135)$';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.1/en/regexp.html"&gt;See the official documentation and details here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-3815716960300421773?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/3815716960300421773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/11/mysql-and-regular-expressions.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3815716960300421773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3815716960300421773'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/11/mysql-and-regular-expressions.html' title='mysql and regular expressions'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-7056700292460823130</id><published>2009-11-06T14:12:00.002Z</published><updated>2009-11-06T14:15:00.272Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><title type='text'>Now save and quit... doh!</title><content type='html'>If you like me are annoyed by the "recording" feature on vim (or better, by the way you can accidentally start it), then you may find at least useful to learn how it can be actually used.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blog.smr.co.in/linux/vim-recording/"&gt;This post explains it&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-7056700292460823130?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/7056700292460823130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/11/now-save-and-quit-doh.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7056700292460823130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7056700292460823130'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/11/now-save-and-quit-doh.html' title='Now save and quit... doh!'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-7323628982256407321</id><published>2009-10-26T14:11:00.003Z</published><updated>2009-10-26T14:17:16.032Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='vi'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='epic'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Most used Perl editors</title><content type='html'>I've seen this poll too late, although it's interesting that the most used Perl editor is the &lt;span style="font-weight: bold;"&gt;vi family&lt;/span&gt; (where I'd belong) with 34%, followed not very closely by &lt;span style="font-weight: bold;"&gt;Emacs&lt;/span&gt; (13%).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Eclipse + EPIC&lt;/span&gt; got only 6%...&lt;br /&gt;&lt;br /&gt;The full poll results &lt;a href="http://answers.polldaddy.com/poll/2150554/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-7323628982256407321?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/7323628982256407321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/10/most-used-perl-editors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7323628982256407321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7323628982256407321'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/10/most-used-perl-editors.html' title='Most used Perl editors'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-5522740982827223045</id><published>2009-10-20T17:18:00.003+01:00</published><updated>2009-10-20T17:24:30.162+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='CPAN'/><category scheme='http://www.blogger.com/atom/ns#' term='dh-make-perl'/><category scheme='http://www.blogger.com/atom/ns#' term='POE'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Debianize a Perl module</title><content type='html'>What a good day.&lt;br /&gt;&lt;br /&gt;Not only I've got a new laptop from the company, but I've found also an extremely useful tool to build a debian package from a perl module: &lt;a href="http://www.debian-administration.org/articles/78"&gt;dh-make-perl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You just need to do 2 things:&lt;br /&gt;&lt;br /&gt;- Run &lt;span style="font-style: italic; font-weight: bold;"&gt;dh-make-perl&lt;/span&gt; on the untarred module directory (this creates the necessary debian dir and files).&lt;br /&gt;- Inside the module directory, run &lt;span style="font-style: italic; font-weight: bold;"&gt;debuild&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Very nice. Now I wonder why most of the &lt;a href="http://www.cpan.org/"&gt;CPAN&lt;/a&gt; and &lt;a href="http://poe.perl.org/"&gt;POE&lt;/a&gt; components don't come with a debian package...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-5522740982827223045?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/5522740982827223045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/10/debianize-perl-module.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5522740982827223045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5522740982827223045'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/10/debianize-perl-module.html' title='Debianize a Perl module'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-2283088302199277798</id><published>2009-10-08T18:03:00.002+01:00</published><updated>2009-10-08T18:06:35.243+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dpkg info'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>When was that package installed?</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;You can check the date from the output of:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;ls /var/lib/dpkg/info/*.list -lh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Just | grep the name of the package you're interested to.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;See &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://lists.netisland.net/archives/plug/plug-2008-02/msg00205.html"&gt;this&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; for important details.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-2283088302199277798?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/2283088302199277798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/10/when-was-that-package-installed.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2283088302199277798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2283088302199277798'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/10/when-was-that-package-installed.html' title='When was that package installed?'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-3097633786673784181</id><published>2009-07-17T18:42:00.001+01:00</published><updated>2009-07-17T18:42:52.976+01:00</updated><title type='text'>My favourite photographer</title><content type='html'>&lt;a href="http://www.egglestontrust.com/"&gt;http://www.egglestontrust.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-3097633786673784181?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/3097633786673784181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/07/my-favourite-photographer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3097633786673784181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3097633786673784181'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/07/my-favourite-photographer.html' title='My favourite photographer'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-9183651735885637410</id><published>2009-07-17T18:37:00.003+01:00</published><updated>2009-07-17T18:41:43.219+01:00</updated><title type='text'>debian policy for init scripts</title><content type='html'>It could be useful to add your /etc/init.d/ script to debian/conffiles to avoid overwriting local changes.&lt;br /&gt;Sometimes sysadmins change the init scripts and with this little tip you can help them in case of package upgrades.&lt;br /&gt;&lt;br /&gt;From the &lt;a href="http://www.debian.org/doc/debian-policy/"&gt;Debian Policy Manua&lt;/a&gt;l:&lt;br /&gt;&lt;blockquote&gt;"The /etc/init.d scripts must be treated as configuration files, either (if they are present in the package, that is, in the .deb file) by marking them as conffiles, or, (if they do not exist in the .deb) by managing them correctly in the maintainer scripts (see Configuration files, Section 10.7). This is important since we want to give the local system administrator the chance to adapt the scripts to the local system, e.g., to disable a service without de-installing the package, or to specify some special command line options when starting a service, while making sure their changes aren't lost during the next package upgrade. "&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.debian.org/doc/debian-policy/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-9183651735885637410?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/9183651735885637410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/07/debian-policy-for-init-scripts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/9183651735885637410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/9183651735885637410'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/07/debian-policy-for-init-scripts.html' title='debian policy for init scripts'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-5862250519701586463</id><published>2009-07-17T18:26:00.003+01:00</published><updated>2009-09-04T10:37:13.724+01:00</updated><title type='text'>Using externals with SVN</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UPDATE: You need to specify the directory you want to create when setting the external property. No need to create the dir before propset: it'll be done automatically when you 'svn up'&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Create somewhere in the SVN repo the directory you want to use as external (let's call it SVNEXTURL)&lt;br /&gt;- Go in the working copy where you want to have an external reference and:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;svn propset svn:externals 'newlocaldir&lt;new local="" dir=""&gt; SVNEXTYURL' .&lt;/new&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where &lt;span style="font-style: italic;"&gt;newlocaldir&lt;/span&gt;&lt;new local="" dir=""&gt; is the name of the directory being created by SVN during this operation.&lt;br /&gt;Quotes are needed.&lt;br /&gt;Note the '.'&lt;br /&gt;&lt;br /&gt;- and then&lt;br /&gt;&lt;span style="font-style: italic;"&gt;svn up&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Enjoy!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Problem&lt;/span&gt;: if you're using a version of svn-buildpackage older than 0.6.24 (debian), it won't work with external references. You can upgrade to &gt;= 0.6.24 or apply locally the patch described here:&lt;br /&gt;&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363003"&gt;http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=363003&lt;/a&gt;&lt;/new&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-5862250519701586463?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/5862250519701586463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/07/using-externals-with-svn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5862250519701586463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/5862250519701586463'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/07/using-externals-with-svn.html' title='Using externals with SVN'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-6083610409453293932</id><published>2009-05-18T18:36:00.002+01:00</published><updated>2009-05-18T18:43:32.405+01:00</updated><title type='text'>Lessons learnt #1</title><content type='html'>Not a real surprise, but useful to write it down...&lt;br /&gt;&lt;br /&gt;- If you have data that varies depending on the platform or environment you're using, be sure to have it in a separate file, marked as config file (for example using debian/conffiles if you build debian packages)&lt;br /&gt;&lt;br /&gt;- Be sure to have a clear way to handle dependencies - Write them down and whenever possible use automated tools, as debian/control if applicable)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-6083610409453293932?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/6083610409453293932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/lessons-learnt-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6083610409453293932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6083610409453293932'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/lessons-learnt-1.html' title='Lessons learnt #1'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-7804194458596495602</id><published>2009-05-14T23:25:00.003+01:00</published><updated>2009-05-14T23:38:48.604+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='cell phone'/><title type='text'>I'm cellphone only</title><content type='html'>Now that I think about it, it's since 2000 that I don't have a fixed telephone line in the house where I live. Cell phone and ADSL or 3G data connection meant to replace it (with some limitations in terms of &lt;span style="font-weight:bold;"&gt;service availability&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;emergency calling&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;It's probably a known trend: &lt;a href="http://arstechnica.com/telecom/news/2009/05/survey-one-in-five-us-households-are-cellphone-only.ars#"&gt;in the US 20% of people have made the same choice&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And look how many families are adopting &lt;span style="font-weight:bold;"&gt;wireless phone services only&lt;/span&gt;! I'll write on this topic and on interesting solutions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.voipblog.it/il-20-degli-americani-ha-abbandonato-la-linea-fissa-per-usare-solo-il-cellulare-2741.html"&gt;VOIPBLOG.IT&lt;/a&gt; reported it in Italian.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-7804194458596495602?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/7804194458596495602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/im-cellphone-only.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7804194458596495602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7804194458596495602'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/im-cellphone-only.html' title='I&apos;m cellphone only'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-8705179099601936428</id><published>2009-05-14T22:50:00.003+01:00</published><updated>2009-05-14T23:10:30.302+01:00</updated><title type='text'>2700 blogs available on the Kindle Store (and a digression)</title><content type='html'>Quite amazing to see how many blogs you can subscribe to from the Kindle Store.&lt;br /&gt;Prices go from 0 to $1.99.&lt;br /&gt;&lt;br /&gt;By the way, digging a little bit in the past (March 2008), I've found an interesting rumor from Apple about a &lt;a href="http://blogs.zdnet.com/Apple/?p=1786"&gt;tablet from Mac&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;A little birdy tells me that Apple will announce a 12 or 13-inch tablet in the fall of this year. Most likely in the September or October time frame.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.appleinsider.com/articles/07/01/11/unofficial_mac_tablet_draws_record_crowd_at_macworld_high_res_photos.html"&gt;That was rumored one year earlier as well&lt;/a&gt; (January 2007).&lt;br /&gt;&lt;br /&gt;I could go even further in the past, but &lt;a href="http://www.theregister.co.uk/2009/01/01/jumbo_ipod/"&gt;the good news seems to be that this time&lt;/a&gt;, eventually, we'll get the mega tablet from Mac on the next Fall... maybe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-8705179099601936428?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/8705179099601936428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/2700-blogs-available-on-kindle-store.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8705179099601936428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8705179099601936428'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/2700-blogs-available-on-kindle-store.html' title='2700 blogs available on the Kindle Store (and a digression)'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-26605021398519294</id><published>2009-05-13T18:09:00.003+01:00</published><updated>2009-05-14T22:49:38.595+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='curl'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='apt-get'/><category scheme='http://www.blogger.com/atom/ns#' term='https'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>curl for HTTPS (and Twitter)</title><content type='html'>&lt;a href="http://curl.haxx.se/"&gt;curl&lt;/a&gt; is a powerful library available on different platforms - I use it on Linux&lt;a href="http://www.debian.org/"&gt; debian&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can use it just to get http pages, or to post data and get a response from a server.&lt;br /&gt;HTTPS is available too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;An example:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;curl -k --data @request.xml https://127.0.0.1/service&lt;br /&gt;&lt;br /&gt;posts the XML data contained by request.xml using a HTTPS connection (and ignoring invalid certificates, option '&lt;span style="font-weight: bold;"&gt;-k&lt;/span&gt;' - just for testing purposes).&lt;br /&gt;&lt;br /&gt;This is a more interesting usage: it's nice to get info from &lt;span style="font-weight: bold;"&gt;Twitter&lt;/span&gt; or even send messages ("update your status") with just a command line:&lt;br /&gt;&lt;br /&gt;Get status:&lt;br /&gt;curl http://twitter.com/users/show.xml?screen_name=giavac&lt;br /&gt;&lt;br /&gt;Send a message:&lt;br /&gt;curl -u user:password -d "status=describing how to use the Twitter API" http://twitter.com/statuses/update.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;To install curl on debian:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;apt-get install libcurl3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(install dependencies too, and I suggest to include libcurl3-gnutls-dev)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-26605021398519294?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/26605021398519294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/curl-for-https-and-twitter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/26605021398519294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/26605021398519294'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/curl-for-https-and-twitter.html' title='curl for HTTPS (and Twitter)'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-6987564001951592920</id><published>2009-05-12T19:35:00.003+01:00</published><updated>2009-05-12T19:44:41.032+01:00</updated><title type='text'>How many different tea times do you have?</title><content type='html'>Just realized that in UK you can refer to the "last or almost last meal of the day" as &lt;a href="http://en.wikipedia.org/wiki/Tea_%28meal%29"&gt;"Tea"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This just makes sense, considering that while driving you have to keep the left, but on the escalator you have to keep the right if you're standing, and the left if you're walking.&lt;br /&gt;&lt;br /&gt;Not mentioning that your weight can be measured in stones, but in the gym weights are in pounds OR kilos, while when you buy food they use ounces.&lt;br /&gt;&lt;br /&gt;I'll have a twentieth of gallon of tea before going home for the tea...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-6987564001951592920?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/6987564001951592920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/how-many-different-tea-times-do-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6987564001951592920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/6987564001951592920'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/how-many-different-tea-times-do-you.html' title='How many different tea times do you have?'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-7957007045296788636</id><published>2009-05-12T19:34:00.003+01:00</published><updated>2009-05-12T19:44:58.057+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Italy'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>41.5% of Italians don't use Internet</title><content type='html'>...even if &lt;span style="font-weight: bold;"&gt;Facebook&lt;/span&gt; looks very crowded!&lt;br /&gt;&lt;br /&gt;Source &lt;a href="http://www.ansa.it/opencms/export/site/visualizza_fdg.html_960930123.html"&gt;IlSole24Ore&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-7957007045296788636?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/7957007045296788636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/415-of-italians-dont-use-internet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7957007045296788636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/7957007045296788636'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/415-of-italians-dont-use-internet.html' title='41.5% of Italians don&apos;t use Internet'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-8849506917672938428</id><published>2009-05-10T21:13:00.004+01:00</published><updated>2009-05-10T21:35:57.632+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPod Touch'/><category scheme='http://www.blogger.com/atom/ns#' term='Tate'/><title type='text'>Touching art with an iPod</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_n-iYS2kTIKY/Sgc6hAA8rPI/AAAAAAAAEG4/MPNSopMvzfQ/s1600-h/IMG_3113_small.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_n-iYS2kTIKY/Sgc6hAA8rPI/AAAAAAAAEG4/MPNSopMvzfQ/s320/IMG_3113_small.JPG" alt="" id="BLOGGER_PHOTO_ID_5334296622257712370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Positively  surprised to experience that the so-called audio guides have been replaced by iPod Touch at Tate Modern.&lt;br /&gt;&lt;br /&gt;Advantages are:&lt;br /&gt;- You can see movies and pictures together with the audio presentations&lt;br /&gt;- Easier to use - no need to enter a number to select an argument&lt;br /&gt;- Lighter&lt;br /&gt;&lt;br /&gt;Disavantages:&lt;br /&gt;- Even if you're a Tate member, and you're paying for the guide, you have to leave an ID...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-8849506917672938428?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/8849506917672938428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/touching-art-with-ipod.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8849506917672938428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8849506917672938428'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/touching-art-with-ipod.html' title='Touching art with an iPod'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_n-iYS2kTIKY/Sgc6hAA8rPI/AAAAAAAAEG4/MPNSopMvzfQ/s72-c/IMG_3113_small.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-8587579804940429394</id><published>2009-05-09T23:52:00.004+01:00</published><updated>2009-05-10T00:15:26.529+01:00</updated><title type='text'>e-readers and advertising on newspapers</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_n-iYS2kTIKY/SgYNrsskrkI/AAAAAAAAEGw/CgMGl5nlWio/s1600-h/IMG_3127_small.JPG"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 267px; height: 400px;" src="http://3.bp.blogspot.com/_n-iYS2kTIKY/SgYNrsskrkI/AAAAAAAAEGw/CgMGl5nlWio/s400/IMG_3127_small.JPG" alt="" id="BLOGGER_PHOTO_ID_5333965853050580546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Yesterday I wrote a &lt;a href="http://varloggiacomolog.blogspot.com/2009/05/kindle-dx-cool-but-expensive-and-wont.html"&gt;quick note on Kindle DX&lt;/a&gt;, the new e-reader from Amazon, and today on The Independent I've found an article titled "Hold the front page: newspapers have a future" (see picture, taken this afternoon from Tate Modern).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Statistics say clearly that advertising in newspapers is going down rapidly (starting well before the 2008 internation crisis), so in this area, like on the web, there's more and more focus on context advertising. Less costs, higher conversion rates.&lt;br /&gt;&lt;br /&gt;e-readers can be, more than just an interesting gadget, a tool to access "custom" advertising and ad-hoc contents. It would be nice to read your favorite magazine, select some additional content, find deals on what you're interested in and... buy it straigth away!&lt;br /&gt;&lt;br /&gt;But I was also thinking: is an e-reader really needed? Or maybe manufacturer of mobile devices, already accessing Internet via WiFi and 3G, should just provide a big, plug&amp;amp;play screen, optimized for reading? Rather than spending 350P for the Kindle DX, I'd spend half of it for a portable screen to attach to an iPhone...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-8587579804940429394?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/8587579804940429394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/e-readers-and-advertising-on-newspapers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8587579804940429394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8587579804940429394'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/e-readers-and-advertising-on-newspapers.html' title='e-readers and advertising on newspapers'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_n-iYS2kTIKY/SgYNrsskrkI/AAAAAAAAEGw/CgMGl5nlWio/s72-c/IMG_3127_small.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-9199118184442561911</id><published>2009-05-08T16:51:00.004+01:00</published><updated>2009-05-08T16:53:41.907+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e-readers'/><category scheme='http://www.blogger.com/atom/ns#' term='Amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='Kindle'/><title type='text'>Kindle DX - Cool but expensive, and won't replace books (I hope)</title><content type='html'>The title says almost everything I wanted to write about the new Amazon e-reader.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://news.bbc.co.uk/1/hi/technology/8036436.stm"&gt;detailed article from BBC News&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;When the prices will start dropping&lt;/span&gt;, I'll take it into serious account.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-9199118184442561911?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/9199118184442561911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/kindle-dx-cool-but-expensive-and-wont.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/9199118184442561911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/9199118184442561911'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/kindle-dx-cool-but-expensive-and-wont.html' title='Kindle DX - Cool but expensive, and won&apos;t replace books (I hope)'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-177422498609600915</id><published>2009-05-08T11:13:00.003+01:00</published><updated>2009-05-08T11:20:35.610+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AppStore'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows MarketPlace for Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='MS'/><title type='text'>VoIP banned from MS MarketPlace (MS style)</title><content type='html'>That's the way MS wants to compete on the Mobile applications against the AppStore: &lt;span style="font-weight: bold;"&gt;banning VoIP from the allowed applications&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It's the 4th point in their &lt;a href="http://developer.windowsmobile.com/resources/en-us/MarketplaceProhibitedApplicationTypes.pdf"&gt;Prohibited Application Types document&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Topic followed through &lt;a href="http://www.voipblog.it/skype-e-voip-su-3g-vietati-nel-windows-mobile-marketplace-2734.html"&gt;VOIPBLOG.it&lt;/a&gt; and &lt;a href="http://www.thestandard.com/news/2009/05/06/windows-mobile-marketplace-bans-skype-flash-carrier-ads"&gt;thestandard.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-177422498609600915?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/177422498609600915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/voip-banned-from-ms-marketplace-ms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/177422498609600915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/177422498609600915'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/voip-banned-from-ms-marketplace-ms.html' title='VoIP banned from MS MarketPlace (MS style)'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1354560985718389013</id><published>2009-05-07T14:51:00.003+01:00</published><updated>2009-05-07T14:57:12.430+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='data privacy'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Where cloud computing is going</title><content type='html'>Just finished reading &lt;a href="http://thingsilearn.wordpress.com/2009/05/06/why-cloud-computing-is-the-future-or-how-the-cloud-ate-my-laptop/"&gt;an interesting article by Paul Bennet on Cloud Computing&lt;/a&gt;.&lt;br /&gt;It really looks like we're going in that direction, with security and data privacy as key points.&lt;br /&gt;Furthermore, in UK as well you can get notebooks for free with a monthly data contract!&lt;br /&gt;The OS is not a problem, however the availability of VPN clients will be extremely important.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1354560985718389013?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1354560985718389013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/wheres-cloud-computing-is-going.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1354560985718389013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1354560985718389013'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/wheres-cloud-computing-is-going.html' title='Where cloud computing is going'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-1833367634523710022</id><published>2009-05-06T12:28:00.002+01:00</published><updated>2009-05-06T12:38:44.882+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='LAST_INSERT_ID'/><title type='text'>MySQL - Last INSERT id</title><content type='html'>&lt;span style="font-family:verdana;"&gt;If you want to know which is the ID of the last INSERT been made from the current connection, when auto_increment is active, use this:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;SELECT LAST_INSERT_ID();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;A few lines in non-optimized perl:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                  my $sel_last = "SELECT LAST_INSERT_ID();";&lt;br /&gt;                  my $sth = $dbh-&gt;prepare($sel_last)&lt;br /&gt;                                    or die "Couldn't prepare statement: " . $dbh-&gt;errstr;&lt;br /&gt;&lt;br /&gt;                  $sth-&gt;execute()&lt;br /&gt;                                or die "Couldn't execute statement: " . $sth-&gt;errstr;&lt;br /&gt;&lt;br /&gt;                  my @data;&lt;br /&gt;                  while (@data = $sth-&gt;fetchrow_array())&lt;br /&gt;                  {&lt;br /&gt;                             print "Last ID was.... $data[0]";&lt;br /&gt;                  }&lt;br /&gt;&lt;br /&gt;&lt;p style="font-family: verdana;" class="MsoNormal"&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html"&gt;More details here&lt;/a&gt; for the MySQL statement and &lt;a href="http://www.perl.com/pub/a/1999/10/DBI.html"&gt;here for the perl DBI&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-size:8;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;code style="font-family: verdana;" class="literal"&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-1833367634523710022?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/1833367634523710022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/mysql-last-insert-id.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1833367634523710022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/1833367634523710022'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/05/mysql-last-insert-id.html' title='MySQL - Last INSERT id'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-8957856517163441950</id><published>2009-04-30T23:53:00.003+01:00</published><updated>2009-05-01T00:03:26.647+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Verizon'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>MS and Verizon to fight the iPhone</title><content type='html'>&lt;span style="font-family: verdana;"&gt;'Pink' is the code name for a new mobile device aiming to compete with the iPhone.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;&lt;span style="font-weight: bold;"&gt;Key points&lt;/span&gt; are:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;- Touchscreen (surprise)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;- More powerful OS (extending Windows Mobile)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;- More applications (maybe with the same iPhone Apps approach?)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;- An online store (Windows Marketplace for Mobile)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;- WiFi (in collaboration with Verizon Wireless)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;News from the &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://online.wsj.com/article/SB124093915558664239.html"&gt;Online Wall Street Journal&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;, reported in Italian for &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.ilsole24ore.com/art/SoleOnLine4/dossier/Tecnologia%20e%20Business/speciale-cellulari/news/smartphone-microsoft.shtml?uuid=b9b0727e-3431-11de-a78b-d6a7e2afd043&amp;amp;DocRulesView=Libero"&gt;IlSole24Ore&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-8957856517163441950?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/8957856517163441950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/ms-and-verizon-to-fight-iphone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8957856517163441950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/8957856517163441950'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/ms-and-verizon-to-fight-iphone.html' title='MS and Verizon to fight the iPhone'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-393196122553430416</id><published>2009-04-30T16:13:00.004+01:00</published><updated>2009-04-30T23:44:28.517+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='base64'/><title type='text'>base64 encoding/decoding</title><content type='html'>One of the biggest problems nowadays is to being able to encode or decode to/from &lt;a href="http://en.wikipedia.org/wiki/Base64"&gt;base64&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Jokes apart, if you need to quickly check a base64 string, try this &lt;a href="http://www.opinionatedgeek.com/dotnet/tools/Base64Encode/Default.aspx"&gt;encoder&lt;/a&gt; or this &lt;a href="http://www.opinionatedgeek.com/dotnet/tools/Base64Decode/"&gt;decoder&lt;/a&gt; (&lt;span style="font-style: italic;"&gt;mind the note before using them&lt;/span&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-393196122553430416?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/393196122553430416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/base64-encodingdecoding.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/393196122553430416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/393196122553430416'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/base64-encodingdecoding.html' title='base64 encoding/decoding'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-3942132412541520414</id><published>2009-04-29T17:37:00.003+01:00</published><updated>2009-04-29T18:01:14.681+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Lexicon'/><title type='text'>Facebook Lexicon</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Pretty nice application for Facebook - It enables you to see statistics on keywords on the public walls.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Give a look to it here: &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.facebook.com/lexicon/"&gt;http://www.facebook.com/lexicon/&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; and try for example: "&lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;brawn, ferrari&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;" or "&lt;span style="font-style: italic;"&gt;iphone, ipod&lt;/span&gt;".&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-3942132412541520414?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/3942132412541520414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/facebook-lexicon.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3942132412541520414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/3942132412541520414'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/facebook-lexicon.html' title='Facebook Lexicon'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9031922773224056133.post-2800550852570219031</id><published>2009-04-28T13:57:00.001+01:00</published><updated>2011-03-08T10:21:13.706Z</updated><title type='text'>Let's start again</title><content type='html'>&lt;span style="font-family: verdana;"&gt;It's been a while since my last blog post - I haven't published anything for more than a year, so recently I've decide to close &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://the-presence-of-presence.blogspot.com/"&gt;my old blog&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; and open  a new one (this one).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Feel free to subscribe to this blog, contact me, leave your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9031922773224056133-2800550852570219031?l=varloggiacomolog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://varloggiacomolog.blogspot.com/feeds/2800550852570219031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/lets-start-again.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2800550852570219031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9031922773224056133/posts/default/2800550852570219031'/><link rel='alternate' type='text/html' href='http://varloggiacomolog.blogspot.com/2009/04/lets-start-again.html' title='Let&apos;s start again'/><author><name>Giacomo</name><uri>http://www.blogger.com/profile/15806655752624396579</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://1.bp.blogspot.com/_n-iYS2kTIKY/TMrCbgPKeeI/AAAAAAAAEl4/z934AjDKdho/S220/GV_BW.jpg'/></author><thr:total>0</thr:total></entry></feed>
