After All The Web 1.5 Was Just Fine


The recent abundance of audio and video podcasts on the blogs of many professional hobbyists makes me wonder if they really understand their medium.

If you have something to say but nothing worth to show, then why don't you simply write it?

There simply is no point sitting in front of a microphone and/or a camera just to tell us what you are too lazy to write. Let's face it, most of those little clips have nothing to do with the original idea of the podcast which was to have some fresh content to listen on the go.

I find most audio and video posts not only embarrassing for their authors but actually very disrespectful for the audience. Well, at least for the part of the audience who cares about its precious time.

First, this content is not scannable which is the golden rule of web authoring. A nice counter-example is the pretty cool video interviews at InfoQ which allow you to skim through the questions. But that doesn't solve the other problem: speech is an inherently slow medium.
An average person can read between 250 to 300 words per minute (much more with proper training) while a casual conversation (which is what most podcast sound like) has an average of 200wpm.

Those two drawbacks are enough to make sure I don't even care to click play when I encounter such an thing.

Just “because you can” or because its “new” is not argument to bloat the web with unusable content.

All the folks who are pushing audio or video content thinking that they contributed to any kind of worldwide knowledge or discussion are actually impoverishing the web as a whole. They are just spreading noise that no search engine or aggregator can make a sense of (yet, I know).

While I'm in a sarcastic mood: has anyone heard about the latest development of the semantic web lately?

For Educational Purpose


Not that I care about lame online contests but I thought it would be fun to probe the actual expertise of the self-proclaimed web specialists running the damn thing.

It took approximately 10 minutes to write a bot that votes for the only blog who deserves it. This script issues a valid vote encoded into an URL and hides behind the Google Translate cluster to pass through the IP address check. Now that's a 2.0ish mash-up, isn't it? ;)


#!/usr/bin/env ruby

require 'net/http'
require 'uri'
require 'cgi'

def who_gives_a_shit?
  (1 + rand(5)).to_s
end

params = {
  'votepushed' => 'votepushed',
  'survey' => '496',
  'answer1' => '2',
  'answer2' => who_gives_a_shit?,
  'answer3' => who_gives_a_shit?,
  'answer4' => who_gives_a_shit?,
  'answer5' => who_gives_a_shit?,
}

query_string = params.collect { |k, v| 
  "#{k}=#{CGI.escape(v)}"
}.join('&')

survey_url = 'http://www.lesoir.be'
survey_url += '/special/persoweb2006/results.shtml?' 
survey_url += query_string

proxy_url_path = '/translate?langpair=en|en&u='

proxied_vote_url_path = proxy_url_path + CGI.escape(survey_url)

Net::HTTP.get_print 'www.google.com', proxied_vote_url_path

I'm not affiliated with Mehmet or any other contestant whatsoever. I won't even run this script to fake the vote, I don't care. I just did this because:

  1. It's fun and easy
  2. It demonstrates what an online vote is worth when it's not so well implemented
  3. I'm a bad boy :)

I think I do really love doing useless things.

Trusted Computing


TSS reaches new low as morons celebrate the recent Rails incident.

I'm still having mixed feelings about the (lack of) full-disclosure on the issue, I'm still unable to tell if a mistake has been made.
Although they should have provided the URL rewriting based workaround in the first place (instead of rushing out a release and force people to upgrade their systems a partial fix), I can understand they didn't want to tell people their site is vulnerable with using simple URL without giving them any change to upgrade...

As soon as you decide to rely on a framework to build your applications, you establish a close relation of trust with the designers and maintainers of that piece of software. On that peculiar case, I have enough confidence in the skills, the experience and, ultimately, the goodwill of the Rails core to know that when I'm being told to upgrade now, I just do it.

Do you ask yourself that many questions when your OS vendor pushes a new security update? It's just a matter of trust between you and your suppliers or delegates.
The most important thing is to constantly (re)evaluate that relation if you don't want yesterday's trust to become today's blind faith...

UPDATE: More ignorance unfolds as someone posted a follow up on the 1.1.6 release. Be warned: some very graphic examples of deep cluelessness are displayed in there...

Rails Goes 1.0


The best thing that happened to this world since sliced bread has now a version number compatible with your local project manager!

Heartful congratulations to David and his hitsquad. Nice minimal redesign as well.

Playing with Rails I18N


I've been annoyed by the lack of i18n in Rails since its very inception. Building web applications for the Belgian market makes proper i18n support a requirement for any framework.

I skimmed through a bunch of plug-ins but some makes way too much assumption about the way content is organized in the application.

Fortunately things recently got easier thanks to a clever and dead simple localization module written by Thomas Fuchs of the Scriptaculous fame. It's the less intrusive solution I found so far but one thing was missing: the localization of texts stored in the model. So I rolled up my sleeves and started hacking an extension to ActiveRecord.Base.

The idea is to provide a locale-aware accessor for the fields that needs a translation. Localized text would be stored in the same table as the model (no metadata nightmare) following a simple naming convention. Let's say we have a products table with a name attribute to be localized: products.name would hold the text for the :default language, products.name_fr would then hold the french translation, products.name_nl for the dutch, and so on...

Let's start by providing a Railsish interface to this new facility:



class Product < ActiveRecord::Base
  
  # Will create a locale-aware _name accessor
  localize :name
  
end

Now you can output the localized name for any product, based on Localization.lang:


# some_view.rhtml

<%= @product._name %>

And here's the black magic:


class ActiveRecord::Base
  
  def self.localize(*attribute_names)    
    attribute_names.each { |attribute_name|    
      class_eval %{
        def _#{attribute_name}
          unless Localization.lang == :default
            localized_method = 
              "#{attribute_name}_\#{Localization.lang.to_s}"
            return send(localized_method.to_sym) 
              if respond_to?(localized_method)            
          end            
          #{attribute_name}
        end
      }
    }
  end
  
end

And voila! ;)

This worked fine for me. The column redundancy in the database may look ugly and kind of anti-DRY but Rails migrations make it a piece of cake to deal with new languages.

I should now have a look at the shiny new plug-in API...

Putting the F*cking A in Agile


I received my hardcopy of Agile Web Development with Rails a few days ago and it's definitely worth every single dime.

It's so much fun to get intimate with a technology without a learning curve! There's no need to be familiar with half a dozen APIs and application server architecture to get a clue about what is going on under the hood. You don't have to look up a new acronym or industry buzzword every couple of lines. The numerous examples won't overflow your short-term memory buffer with symbol declarations, crossreferences through useless indirection levels. I think every Java web framework user should skim through the tutorial part of this book, just to see how bad things have turned in an Enterprise world where the exceptional 5% make the other 95% totally unbearable.

Kiss your local library goodbye


Yet another step in the right direction: SafariU is a web-based platform for educators and professional trainers to build custom print books, custom online syllabi, and exchange teaching materials for computer science and information technology courses.

If you can't write, you can't code


Obie Fernandez posted an interesting set of criteria regarding an hypothetical position of Ruby on Rails developer.

There were merely any advanced technical requirements (except a 3+ months experience dealing with RoR, compare that to the usual 5+ years Java EE experience [*] requirement and you get an idea of the learning curve) but in addition to a strong sense of design ("presentation is everything") Obie would require any candidate to run a blog.

This is one of the smartest job applicant filter I've seen for a while (since the "google me" filter actually). If you meet this requirement, it means that you've got the habit to produce written material and that you're passionate enough about something to have a word to say about it. Those are two great, if not the most important, qualities of good programmers.

Blogs are a wonderful screening and profiling tool for employers, partners, clients and colleagues. Your archives have probably much more to say than demonstrating your prediction skills...

All the really great programmers I've met had a real passion for the code or at least a cause to program for. This makes a huge difference in quality and productivity if you compare the work of this kind of person with the average IT slave who's in it for the check...

[*] Most of the time those X years actually means, X times 1 year spent rebuilding the same kind of indutrial-strength highly scalable enterprise bloatware with Struts. Just kidding guys!

Obie puts the SemWeb on Rails


Interesting stuff : ontologies, the Rails way.

Reboot 7.0 - Day Two


EFF's Cory Doctorow opened the day with an excellent keynote about DRM.

  • Broadcast Flag is not capitalism, it's kleptocracy
  • Remember the role of "View Source" in the early days of the web
  • Studios exploiting the "Broadcast Flag Gap" between Europe and US to push new laws on both sides of the pond
  • Eat your competitors lunch: don't bow before content industry and deliver the technology your users want.

Nokia's director of multimedia applications Christian Lindholm gave a great speech about the future of mobile applications:

  • Mobile icons of today: laptop and monoblock phone
  • If it's not in the pocket, it's not mobile: « Everyone who owns an iPod stand up? (almost everybody in the room stands up) Now, if you have it in your pocket show it (only a few iPods show up) »
  • Think about the other 50% of the world population, females: they don't even have pockets!
  • Dominant design: monoblock, sliders, clamshell
  • New dominant design: the transformer? Is to the phone what the Lederman is to the Swiss Army knife.
  • Picture and video capture in mobile phones are a memory augmenting feature
  • Metadata enriched and timeline-based picture browsing
  • Google taught us that when the amount of data tends toward infinity, the UI shrinks to the bare minimum
  • Location metadata has to be democratized
  • The architecture: data > metadata (timestamps, ...) > superdata (relations between objects, private metadata, external, not embedded in objects) > Access Methods / Browsing / Sharing / Search > Mobile Devices / Laptops / Internet Servers / Home

Malthe Sigurdsson told us about the Skype brand:

  • Skype: application you use to talk through the internet for free and forever.
  • A Small, Big Company: 160 people in 15 countries
  • Free implies that you don't have to spend mental energy taking care of the communication costs
  • The brand is the product is the brand is ...
  • Release all the time, aggressive schedule, no PR stunts: the added value of meeting a deadline is nothing compared to the added value of getting things out fast
  • Skype has plans to further open their IM platform

Jyri Engeström gave a pretty academic talk on object-centered sociality:

  • Social network maps show how people connect but not why. What connects them? People don't connect to each other, they connect through a shared object.
  • Tagging, crafting, tuning, hacking are key features of those objects to make the network sustainable.
  • Bloggers invented a format of discussions which turned them into social objects.
  • When you think about networks, think about objects and eventually you'll think about play

Doug Bowman gave a pleasant speech about standards-based design nothing excitingly new there but it was still entertaining stuff.

Cluetrain's David Weinberger delivered an afternoon keynote entitled

The Natural Shape of Knownledge, it was pretty hairy and covered a lot of aspects but the things I remember the most were:

  • Owner of the information is no longer the owner of its categorization (power to the user)
  • Taxonomies: from trees to pile of leaves
  • Unlike blogs, most commercial sites are just afraid to link to the outside world
  • Topics get smaller (see Wikipedia articles on obscure subjects)

The talk about Social and Psychological Sides of Software Architecture was a complete catastrophe. Was anyone expecting an analogy between software and so-called brick-n-mortar architecture? I thought that this kind equivocal thinking was reserved to architects fed up building suburban homes! In addition, the speaker was actually not so good so I left the building to enjoy a bit of sun and fresh air...

Matt Webb's Fixing Broken Windows, Human perception and the user interface was smart and appealing:

  • Fix the little things first to prevent big bad things to happen
  • Things you perceive affect the way you behave on a global scale
  • When screen resets (i.e. page reload), it resets the users visual buffer
  • If something flies toward you, it pushes everything out of your mind, it grabs all your attention (bad examples includes Apple Keynote transitions and DashBoard)

But, as a coder at heart, the most thought provoking and mind blowing session was most certainly Matt's discussion about Physics and the Future of Computing.

His point was that types (and eventually schemas) must die. Use Duck Typing. It's all about aspects, capabilities, conventions, assertions, expectations, ...

One thing struck me: this whole conference was about forward thinkers and almost everyone in the room was a Python and/or Ruby developer, some more exotic languages such as IO or Haskell were mentioned as well. Oh boy, the future has never looked so bright, and Java is already out of the game. I'll certainly provided further development about these ideas within a few days as the they get digested and reprocessed...

If I had to extract 3 trends from these 2 days at Reboot, they would be:

  • Metadata
  • Simplicity
  • Skype

Reboot 7.0 - Day One


Here we go for a little round-up of the sessions I attended today...

Doc Searls delivered a very entertaining keynote covering a very wide spectrum of issues ranging from the transformation of vocabulary to free speech. The bottom line was: get up now and stand up for your rights!

Robert Scobble made a terrific job at putting everyone back to sleep. After being introduced by the host with the famous "Microsoft has no taste" Jobs quote, he tried to play it cool with a live IRC feed running on the big screen. But this presentation was plain boring: did anyone in the audience really needed an explanation of what blogs and PageRank are all about? Please, this was no Visual Basic Developers conference...

Michael Heilemann's lessons from the Kubrick template was a talk on open source design. The session was actually a bit like the template itself: not really bad but nothing groundbreaking neither.

Dina Mehta gave an uplifting talk about the rise of social and collaborative software (the combined use of Blogs, Wikis, VoIP, mobile messaging, ...) in India in the perspective of the crisis management and business development.

Ben Cerveny's presentation about games as dynamic systems model was thought provoking but maybe a bit too fast-paced at some points. I don't if it's because he was anticipating the lunch break that much or if my brain was just too slow.
Citing Nintendo as an example, Ben said that as games are getting closer to reality, the subsequent player boredom will leave even more room for abstraction and surrealism just like when photography 'killed' painting. He also gave some interesting insight about the collision - which is bound to happen - between virtual and real economies.

Jimbo Wales told the audience about the wisdom of Wikipedia and other projects from the Wikimedia Foundation. Some pretty interesting figures were shown regarding the demographics of Wikipedia editors and Wales also provided some explanation about the associated quality insurance and community processes. A very good example of how a loose system managed with a flexible policy can end up producing quality.

I was a bit disapointed by the talk about Goal-oriented and Persona-based design as the resulting overall process seems very linear and doesn't leave a lot of space for client interaction. There were some interesting ideas which could be especially useful when designing task-oriented user interfaces but I think I'll stick to the wireframe and mock-up iterative design approach.

Jason Fried of the 37signals & Basecamp fame delivered a really brilliant speech about building successful projects with small teams. Here are some random notes I took:

  • Small teams is about less for more.
  • Get rid middle/muddle managers to avoid distortion and put everyone on the frontline
  • Go for the simplest solution to lower the cost of change
  • Say no by default and let features remind themselves
  • Don't add, think about improving first
  • Every decision is temporary
  • Get your software out of the way of the user
  • Functional specs are political documents aimed at blaming people
  • No problem till it's a problem
  • Big design upfront Vs Making decisions when you have real information

Too bad, I still can't see how that kind of attitude can work with small teams embedded in larger structures ridden with system dependencies, politics, ass-guarding, job protection and fear.

David Heinemeier Hansson's Ruby on Rails talk was a nice explanation of the origins and design philosophy behind the best web development framework to date. Some of the highlights:

  • Being quick without getting dirty
  • Be it PHP or Java, it's not fun to keep fighting a language or an environment. Most programmers are not happy because they have to deal with harassing technology
  • Investment to get started is key to success
  • No academic aspirations, Rails is no revolution: patterns deja-vu (MVC, ORM, ...), shared-nothing architecture (PHP-like), familiar open-source foundations (Apache, Lighttpd, MySQL).
  • Old ideas, new context: Taking a good idea in Java to make it a great idea with Ruby.
  • Convention over Configuration: optimize the common case. It's a trade-off, flexibility doesn't mean that everything should be equally hard.
  • Choice is overrated especially in programming stack, flexibility is not free. Apple gets this. Trade some flexibility to earn a lot of productivity in return.
  • Languages of love, platforms of passion. Unlike Java, assume competence; Attract programmers caring for the craft; Motivation determines productivity. Programmers who shoot themselves in the foot with the gun the (dynamic) language offer them would be bad programmers in any language anyway.
  • Ruby on Rails is the sum of all its parts and the philosophy around it
  • Culture clash with 'Enterprise Developers' (That won't scale! But is it mature! Nobody ever got fired for...). Java people just say what C++ folks said when Java came out.
  • Ruby on Rails just steal the ideas from the 'smart guys' and give them to all those 'green programers' to play with
  • Bottomline: no single, big innovation

This conclude my report of the first day of Reboot!

Older posts: 1 2 3 ... 12