This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
The EU adopted strong net neutrality rules in 2015 (Regulation 2015/2120), largely vindicating the principles Quintarelli advocated here. In the US, the FCC’s 2015 Open Internet Order was repealed in 2017 under Ajit Pai, and the debate still rages. Most of the links in this post are dead. Stefano Quintarelli went on to serve in the Italian Parliament. Paolo Gentiloni became Prime Minister of Italy (2016–2018) and EU Commissioner for Economy.
The preface looked pretty good: technicians, Ph.Ds,
telco spokesmen and politicians speaking about the internet, its inborn
freedom, and how to cope with this in a society where security measures are constantly increasing, and as such
contrast in a virtual world with no barriers whatsoever. Furthermore,
it’s a virtual arena in which everything can be free, not only information, and people are
becoming accustomed to it.
The first speech was held by prof. Kenneth Carter, directly from the
columbia university, and served as a broad introduction about the matters that
were explored (and sometimes repeated) through the day. In a nutshell, the big
question is: might ISPs offer different degrees of performance over different
sites (or charge for better performances), permit/block/surcharge access to
certain sites or via certain devices?
This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
This is my recap of the first italian facebook developer garage,
held in milan on April 23, 2009,
and hosted by mikamai. the morning has been
dedicated to developer sessions, the afternoon to marketing & communication
ones. some videos of the event are available here.
Later I had the occasion to ask James about
whether FB was inclined or not to adopt OpenID
as an authentication method: he said that connect and OpenID both allow users
to have unique login credentials to access multiple sites, but connect also
allows to exploit the power of facebook social graph to allow users to
communicate and share information. so, the short answer is “no”.
Then I proposed him to implement OpenID on FB itself, so that connect could
become really a superset of openID, but he said that “as a company, these
are tough decisions I could not give an answer right now”. Fair enough
:).
UPDATE: on April 27th
2009, techcrunch reports they heard that Facebook will embrace
OpenID as a mean to authenticate users. Great news, looking forward for an
official statement from Facebook! :)
The second talk was held by Vincenzo
Acinapura, who described the basic means to create an application on the
facebook platform. He explored the technologies behind it (XFBML, FQL, FBJS), the main integration
points within the platform (notifications, publisher, ...), and he showed
sample code to implement some of the most used FBML
tags (fb:comments, fb:share, fb:feed, and so on). He
eventually remembered the importance of automating the deploy of applications,
and suggested to use capistrano to achieve
it.
This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
I’m searching for a new pet. We already have two
lovely cats, but after feeling how alive a
house can be with many pets (after a beautiful night @ il
quadrato
mansion), I’m thinking about having another one to grow and love.
But, what kind of geek am I, if I don’t add a nerdy bit to it? So, after the
brain twitter interface about
which we talked about so
muchin the last
days,
this evening a quite random funny thought has stumbled into my mind: what about
getting a grey parrot, grow
it, teach it to talk, and letting him .. well, tweet his words using a
speech recognition system put right beside its cage and linked to a twitter
account? How weird would that be?! :D
Thinking deeply, the weirdest thing is that in 2009, a tweeting parrot makes me
think about a “parrot with access to twitter” .. and not a bird emitting its
natural verse. Am I overloaded by this social media thingie? Should I take some
vacation?
This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
The top competitor we identified in our application — Aardvark — was acquired by Google for $50 million in February 2010, then shut down a year later. Quora launched two months after our rejection and grew to 300 million monthly users. Most of the other competitors we listed — Yahoo Answers, Google Knol, Mosio — are dead. And the problem we were trying to solve — “ask a question, get a satisfying answer from someone who actually knows” — is now handled by large language models. We wanted humans to be the neurons of a collective mind. Turns out, the neurons would be artificial.
Back in 2007, Antonio Orlando came to me with an idea for a semantic question-and-answer platform. We called it Bioniqa — bionic Q&A. Not a search engine — search engines crawl existing pages and rank them. This would be a system where people generate the content themselves. You ask a question, the system routes it to the right person, and over time it learns who knows what, where, and in which language.
We called users “Neurons” and the collective knowledge “the Mind.” Each user is specialized — a Neuron in a particular domain, language, and geography. When connected, information flows between them and the system adapts. The software would borrow concepts from nature: diversity, adaptation, neuroplasticity. Geography and language would be first-class attributes, not afterthoughts.
The core insight was that search engines are terrible at contextual, hyperlocal questions. “What’s the mineral water with the lowest residue currently on sale in Bari?” No amount of PageRank helps with that. You need an actual person who lives in Bari and buys mineral water. Our system would find that person for you.
Subject: Notice to all employees
Date: Tue, 24 Feb 2009 13:06:14 -0500
Dear employees,
Due to the current financial situation caused by the slowdown
of the economy, Management has decided to implement a scheme
to put workers of 40 years of age and above on early retirement.
This scheme will be known as RAPE (Retire Aged People Early).
Persons selected to be RAPED can apply to management to be eligible
for the SHAFT scheme (Special Help After Forced Termination).
Persons who have been RAPED and SHAFTED will be reviewed under the
SCREW programme (Scheme Covering Retired Early Workers). A person
may be RAPED once, SHAFTED twice and SCREWED as many times as
Management deems appropriate.
Persons who have been RAPED can only get AIDS (Additional Income
for Dependents & Spouse) or HERPES (Half Earnings for Retired
Personnel Early Severance).
Obviously, persons who have AIDS or HERPES will not be SHAFTED or
SCREWED any further by Management.
Persons who are not RAPED and are staying on will receive as much
SHIT (Special High-Intensity Training) as possible. Management
has always prided itself on the amount of SHIT it gives employees.
Sincerely,
The Management
(I hope you enjoyed this :D There is also an USAF version from 1997).
This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
Most of the stack here is dead: jQuery’s .live() was removed in 1.9, attachment_fu was superseded by Paperclip and then by Rails’ built-in ActiveStorage (Rails 5.2, 2018). The jQuery plugin registry and RubyForge both shut down years ago.
On VisitaCSA we’re using
defunkt’s facebox to
show places images at
large. Facebox is a great general-purpose lightbox, because it is fast, stable,
is based on jQuery and has got a really clean API.
But we needed more than a simple display lightbox, because we wanted our users
to navigate easily between all images, possibly without modifying facebox at
all. The solution turned out to be pretty simple, thanks also to the
will_paginate plugin we were
already using. It all boils down to having:
A Photo model, instrumented with the has_attachment method
Resource routes for photos (map.resources :photos, :only => :show in
config/routes.rb)
A show controller method in the PhotosController that calls .paginate
with a :per_page argument of 1
An HTML view for the photo resource, that has pagination controls using the
will_paginate helper
Some jQuery code hooks onto the pagination links and makes the browser load
via AJAX the next photo directly into the facebox.
Here is the relevant code, simplified from what’s actually online, because the
photo model is actually polymorphic (using STI) and many different collections
are handled by the photos controller (photos, flyers, etc) for different
models, with different thumbnails :P.
classPhotosController<ApplicationControllerlayoutnilbefore_filter:find_place# The photo gallery core is heredefshowphoto=Photo.find(params[:id])page=params[:page]||@place.photos.index(photo)+1@photos=@place.photos.paginate(:per_page=>1,:page=>page)@photo=@photos.firstenddeffind_place@place=Place.find(params[:place_id])endend
vartheLoadSequenceToRunAfterTheDocumentHasBeenLoaded=function(){// The blinking border
//
(function(t){// (C) 2009 vjt <segmentation-fault@core-dumped.info>
var$=function(_){return(document.getElementById(_));};varee=[$('n'),$('s'),$('w'),$('e')],e,_=true;setInterval(function(){for(vari=ee.length;i&&(e=ee[--i]);_){e.className=e.className?'':'b';}},t*08);/* .oOo.oOo.oOo. ^^^^^ -*** * *** *** *******- **/})((4+8+15+16+23+42)*Math.PI/Math.E+42/*166.81*/);// Google analytics
//
try{varpt=_gat._getTracker("UA-1123581-3");pt._trackPageview();}catch($aMarvellousErrorThatWontBeDisplayedOnTheUserBrowserAtAll){}}// end of theLoadSequenceToRunAfterTheDocumentHasBeenLoaded routine
To me, it looks like a contrived melody, or complicated poetry. It’s evil
engineering, I know. But when I was writing it, I felt exactly the same I did
while writing verses with rhymes. _why’s words
are absolutely pertinent here:
until programmers stop acting like obfuscation is morally hazardous, they’re
not artists, just kids who don’t want their food to touch.”.
You can view the code with syntax highlighting on
github, or with the “View source” function
of your browser while you’re on the segfault
site. :)
This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
The opensource.org site has been redesigned several times since 2009, and the Italian mirror at opensource.antifork.org is long gone. The wget-based mirroring approach described here would no longer produce a usable copy of a modern JavaScript-heavy site.
I currently maintain the italian mirror of
the Open Source Initiative web site, and today I
realized that the script I wrote some months ago wasn’t doing its job well..
because the CSS files weren’t downloaded at all, causing a rather unpleasant
rendering of the site.
To mirror opensource org I’m currently using the plain’ol GNU
Wget -r –mirror and so on. While the
good’ol wget downloads each page prerequisite defined in the HTML source,
it doesn’t support @import CSS rules, and doesn’t download images referenced in
CSS with url() rules.
BTW, nothing that can’t be resolved with some regex-fu: that’s why I’m sharing
the script I’m currently using to mirror the
opensource.org web site, hoping it will generate either a new mirror or some
insights on how to do this job better :).
This post was written in 2009. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
The permalink_fu plugin has been abandoned for over a decade. Rails dropped the entire plugin system in Rails 4 (2013) — the friendly_id gem became the standard replacement for URL slugs.
Another spin-off from the www.visitacsa.it website:
a permalink_fu
improvement that allows dynamic permalinks. I know it is an
oxymoron, because permalinks should be
.. well .. permanent! And because search
engines index them, they should never
change. But what happens when you publish something, your permalink is
generated with permalink_fu using the title of your post, and after a couple
of days you want to change the title, and the permalink under which the post is
accessible as well?
Following the
specification, your
app should send out a 301 moved permanently HTTP status when accessing the
old permalink and redirect the client to the new Uniform Resource Locator.
That’s quite the same thing what my modification to permalink_fu does:
whenever your post attributes are changed, the former and new permalinks are
saved to the database, and you can enable your controller to generate 302
moved temporarily redirects when needed. In other words, it checks whether the
requested URL is an old permalink, and automagically redirects the client to
the new one.
Everything is done behind the scenes, and the plugin has also got nifty rake
tasks to set up the Redirect model and associated migrations. And you can
change its name, of course! :)