The Anatomy of an ITOP App
February 3rd, 2010Toronto
February 2nd, 2010Linux Favorite Extra Apps
January 22nd, 2010I recently bought a netbook and installed Ubuntu Netbook Remix. This is a list of my favorite applications I added to the default installation:
Graphics:
- GIMP: Image editor;
- Inkscape: SVG editor;
- gThumb: Image resizer;
- Xsane: Image scanner.
- pdftk: PDF editor.
Internet & Netwok:
- Skype: Landline caller;
- Samba: File and printer sharer.
Sound & Video:
- Audacity: Sound editor;
- RecordMyDesktop: Screen recorder;
- FFmpeg: Video editor;
- WinFF: FFmpeg frontend;
- VLC: Video player;
- Ubuntu-Restricted-Extras: Proprietary video, sound, flash formats.
Web Development:
- Apache: Web server;
- MySQL: Database;
- PHP: Script language;
- PhpMyAdmin: Database frontend;
- Drupal: CMS;
- ExtJS: JavaScript library;
- Firebug: Bug tracking for Firefox;
- FireFTP: FTP for Firefox;
- CVS, SVN, Git: Version-control system.
Language Support:
- Portuguese (language-support-pt);
- French (language-support-fr).
iContent
January 20th, 2010One of the main features of the upcoming Drupal 7 is the ability to add custom fields to content types in a user-friendly way. For example, one might add a content type called Recipe, where it has the following fields: Title, Ingredients, Instructions and Photo. On earlier versions of Drupal, such content type had to be hard-coded by a web programmer. With Drupal 7, a webmaster may create it with a few clicks.
Now imagine a generic content type called iContent that could be transformed into anything instantly by the average user. This content type would include all available types of fields (text, number, date, file, etc) with an unlimited cardinality (i.e. the fields could be repeated if necessary).
So let us suppose a user wants to enter a Recipe. He selects the iContent and starts building the structure on the fly. He adds the Title, then the Ingredients, later the Instructions, and finally a Photo. Now, he might want to enter a Movie. So he adds a Title, then the Director, later the Duration, then the Release Date, the Genre, a Picture, and finally the Plot. He might want to save both the Recipe and Movie structures for later use as templates. But notice that only one content type was necessary to build such different content structures.
This is a simple idea, but a very powerful one. It makes us rethink how we create information today. Email, for example. You only have the option to enter the Title and the Body. No other fields are allowed, with the exception of Attachments, which provide the flexibility we are looking for since it has an unlimited cardinality. Why not extend that same flexibility to the other fields? Blogs are another example. Imagine how much richer would the Web be (semantically) if blogs had this kind of flexibility?
London, Ontario
January 18th, 2010Me and Debbie are currently living in London, ON. This is part of her Ph.D. program. She is continuing her research on Math Education at the University of Western Ontario. We rented a room in a ranch house 400 meters from where she works, so this is nice given all the snow we have outside. Here is a photo of Debbie in the frontyard of our new home and in the backyard with her first snowgirl:
2*Drupal(Camp)^2
November 3rd, 2009The 2nd edition of Drupal(Camp)^2 took place over this weekend, with many presentations covering the most exciting topics in the Drupal community: Open Atrium, Features, Drush, Aegir, Simpletest, Coder, Devel, Views, Zen, Localize and, of course, ISS.
I look forward to DrupalCon Brazil 2010!
HTTP and the Push Model
October 22nd, 2009The Real-time Web seems to be the buzz of the moment, and there has been quite a debate comparing HTTP, XMPP and related technologies (Comet, Web sockets). Generally HTTP is associated with the Pull model, while XMPP is associated with the Push model. But it’s very well possible to design an architecture that follows the Push model using HTTP.
Let’s see an example to illustrated the point: Nick and Debbie are friends and they have subscribed to each other’s feed to receive updates. Their feeds are hosted on different servers.
In the Pull model, Nick has to poll Debbie’s server every time to check for updates from Debbie, and vice-versa.
In the Push model, the flow goes something like this:
- Debbie publishes a new entry on her server (Push);
- Debbie’s server lets Nick’s server know that Debbie has published a new entry (Push);
- Nick polls his own server to receive updates (Pull).
Notice that the second step is a Push implemented in HTTP. Nick’s server didn’t have to poll Debbie’s server every time to check for updates.
In essence, this is what RSSCloud and PubSubHubBub are trying to accomplish: promoting an architectural design that follows the Push model using HTTP. ISS implementation on top of Drupal is also promoting this.
Yes, the third step is still the Pull model, but so what? Polling is only performed when the user is online and active, and strategies like the sessionLink can help determine how frequently the client has to poll.
What impact on usability, performance and scalability would there be if the third step could be implemented using Push technology? Does it justify all the effort it would take to push this Push technology into all browsers? Wouldn’t it be easier to just bring the clients closer to the heart of the Internet (i.e. providing end-to-end connectivity by making them addressable) and let them benefit from Push technology using HTTP as usual?
Regarding the ISS implementation on top of Drupal, when a user syndicates an entry to a channel, all friends that are subscribed to this channel are notified (even if they are from a different server). The notification to a different server is done via the Services module.
Since ISS encourages a more decentralized social network and the ISS policies limits who gets notified, this helps in terms of performance and scalability. The speed at which information propagates will only be limited by the speed of the social network to filter information, which guarantees a high quality and very personalized stream of information for each individual.
TagCloud and TagLink in JSON
October 21st, 2009I’ve been working with JSON for quite a while now, and the more I use it, the more I love it.
The great majority of standards use XML, and ISS is no different. But we need to evolve.
As such, this is an example of how the tagcloud and taglink would be in JSON:
{"data":{
"iss":{
"science":{
"tagcloud":{
"year":["2006","2007","2008"],
"syndicated":["0,0,0,0,0,0,4,23,45,32,34,31",
"32,44,53,23,43,32,34,64,34,21,35,23",
"43,23,34"]},
"taglink":{
"base":"http:\/\/nick.iss.im\/category\/science",
"incoming":["http:\/\/debbie.iss.im\/category\/environment",
"http:\/\/ribas.iss.im\/category\/work",...],
"outgoing":["http:\/\/penny.iss.im\/category\/science",
"http:\/\/ribas.iss.im\/category\/nature",...]}
},...
}
}}
What do you think? Feedback is welcome!
Photos from Minas Gerais
August 24th, 2009Photos from Congonhas, Ouro Preto, and Belo Horizonte:
Ext JS 3.0 Released
July 7th, 2009The Ext JS 3.0 was just released! To me, this is the best JavaScript library ever! And I’m glad that it’s open source.
The most important improvement of this release was a clear separation of the Widgets from the Core. The Ext Core provides object-oriented mechanisms for handling the DOM, Events and Ajax. The Widgets contemplate Windows, Layouts, Toolbars, Buttons, Menus, Trees, Grids and Forms. New to this release was support for Charts, which is done via Flash. There is no official support for Audio and Video, but many interesting Flash media players fill in the gap.
So congratulations to the Ext team! Thank you for the outstanding work! This is truly a step forward towards a richer Web!










