I’m home alone this weekend (and most of the coming week), as Tuxa is in the Açores on business.
So what does this mean?
Well, first off it means that I have already posted twice on the blog.
Then it means that I’m preparing to spend the whole weekend programming (working and hacking).
It’s a terrible day outside, rainy and foggy (and remember this isn’t the UK or anything like that so this actually counts as bad weather) and it feels like just the perfect kind of day to fill up a huge mug with a good tea blend and code the day away.
Boy, what I geek I am…
It really is true that we are our own worst critics.
This past week when I set up to produce the latest episode of my podcast I had a couple of ideas about possible line-ups for the show but when I finally set down to record it none of them felt quite right.
The line-ups are OK, but I find that I need to be on the right mood for each show’s selection or it just doesn’t come out right.
Anyway, after digging around a bit on my covers collection and fiddling around on my notebook for episode concepts I hadn’t worked on yet, I decided it was high time I did the “They Do It To Themselves” episode. On this show I featured only artists covering their own songs. An obvious criterium if you think about it, but one I felt could produce something interesting.
Well, I recorded the show, got it into my iPod for the “routine inspection” the next day and I left with mixed feelings about it.
On one side I felt like it was a fun and entertaining show but on the other I felt like it wasn’t really quite up to par with the other episodes and I wasn’t quite sure if people would actually like it (and by people I mean “a fair number of people”, there are always those who don’t like a given episode, it’s just the way it works).
On the next day I listened to the show on the car, while driving to work and I felt like it wasn’t really all that great, I felt like I hadn’t done quite what I expected to do with it when I first thought up the concept a while back and I was almost sure most people wouldn’t like it.
But then I didn’t have the time to go over and record a whole new show, so I decided to just put it out and roll with it (I had already missed the previous week’s show —for the first time— so I didn’t want to delay it again).
And then the comments started coming in (mostly private comments, people still don’t use the blog comments much on this podcast) and I found out that mostly they loved it!
I received more enthusiastic comments about this show than I had received in a month or so. And even if the last few weeks have been slow due to people being away on vacation, the intensity of the comments was really an indicator that they really really liked it!
I almost didn’t release it and now people are loving it. Go figure!
I must listen to it again in a few weeks and judge it with a fresh ear myself and see what it is about it that tickles so many people’s fancies.
Heh…
Well that’s it, the EuroOSCON 2006 is nearly over (I’m at the last talk I plan to attend right now) and it has been good.
I’ve put a few notes of some of the talks I attended in my [/notebook] and while they’re basically just that —notes taken during a lecture— maybe someone will be interested in them.
I’m flying home today and I’ll be arriving late (technically I’m betting that I’ll arrive tomorrow) so I’ll miss my podcast day. Oh well…
This is at as far as conferences go this year and I must say that for my particular needs YAPC::Europe::2006 was actually a bit better than EuroOSCON 2006.
Technorati Tags: EuroOSCON, EuroOSCON06, EuroOSCON2006, Conference, OpenSource
These are the notes I’ve taken during the talks on the fourth and final day of the 2006 edition of the O’Reilly European Open Source Convention (better known as EuroOSCON 2006).
You can get to the index page for my notes on this conference here.
Speaker: Damian Conway
In Perl6 we have @bitmap = (0) x 256;_ becomes _@bitmap = 0 xx 256; and many other things, but for Perl5 we have List::Maker
for (<@list>)
for (< ^@list> ) (count down)
my @list = <1, 4, ..30: !/13/>; (1 to 30, 3 by 3, but not 13)
my @list = <yada yeda 'hello world' hello>;
my @list = < 46d >;
Extensible by using the add_handler funcion
New version up on CPAN in a day or two
Examples:
use Contextual::return;
sub yada (){
...
if (LIST) return X;
if (ARRAY) return Y;
}
...
return
LIST { @list }
BOOL { 1 }
STR { "hello" }
VOID { die "huh?" }
return FAIL; => if it is called in a BOOLEAN context return undef, else die. This means that open FH 'file'; now dies (as it should) because I’m not checking the return valueSpeaker: Brad Neuberg
Augmenting The Human Intellect - Paper to read (1962!!)
Tools for thinking:
Systems Thinking
Capabilities (all 5 parts of the systems have capabilities)
Look at tools and humans holistically
Technorati Tags: EuroOSCON, EuroOSCON06, EuroOSCON2006
These are the notes I’ve taken during the talks on the third day of the 2006 edition of the O’Reilly European Open Source Convention (better known as EuroOSCON 2006).
You can get to the index page for my notes on this conference here.
Speaker: Peter Saint-Andre
Speaker: Tor Nørretranders
Technorati Tags: EuroOSCON, EuroOSCON06, EuroOSCON2006
I’ve moved my blog (again) to include it in my new (more structured and integrated) site.
You can read about the reasons, process, new system etc right over here.
Welcome to the all-new NunoNunes.org.
Well… ok, not all new then, I didn’t actually change the layout design, that’l come next.
These are the notes I’ve taken during the talks on the second day of the 2006 edition of the O’Reilly European Open Source Convention (better known as EuroOSCON 2006).
You can get to the index page for my notes on this conference here.
Speaker: Brian Suda
(missed some of the initial content, must link to slides which are on-line on the speaker’s website)
(Ex: hAtom) If it is in HTML it is easier to later convert it to other things, the semantics are all in HTML, human-readable, and then a “semantic cook” comes in and transforms it into whatever you want
Provides “Unix piping for the Web”:
Basically allows us to maintain everything (people, calendars, …) in a single format —HTML— by “overloading” the HTML markup elements such as span, class, …
Speaker: Greg Stein
Up now:
Coming soon:
Speaker: Schuyler Erle
Using MetaCarta technology for nothing (or close to).
Speaker: Frank Mantek
http://code.google.com/apis/gdata/
Technorati Tags: EuroOSCON, EuroOSCON06, EuroOSCON2006
These are the notes I’ve taken during the tutorials on the first day of the 2006 edition of the O’Reilly European Open Source Convention (better known as EuroOSCON 2006).
You can get to the index page for my notes on this conference here.
Speaker: John Paul Ashenfelter
It is mandatory to talk to everyone involved and make them agree (or at least understand what they consider) to the common terms. Each person may have a different idea of what something like an “order” means. You must make them agree to a single, common definition.
Metadata is king!
Most of the work is business stuff, not technical…
Dimension tables may be huge (as in tens or maybe even more than 100 columns). This is normal even if it feels really wrong to the database guy in us and the benefits are worth it. In this case “redundant is good”.
Federated tables exist since MySQL 5.0.3 and provide “link”-like access between tables.
“Archive” table type (engine ?) compresses the data on the fly with zlib. It is extremely bad for data warehousing usage because every search implies a full-table scan as there it implements no indexes.
UUID() function - may be used instead of a simple sequence and generates universally unique IDs.
PostgreSQL has an OLAP engine (table type?) and so it may be more interesting than MySQL for some types of usage.
Speaker: Kathy Sierra
People are only passionate if they are really good at it. Passion creates a higher resolution experience (passionate people experience things much deeper and get a whole lot more out of things they’re passionate about)
The goal: try to get the users through the following milestones as fast as possible: beginner (sucks), regular (OK), expert (passionate, high-resolution experience). One big problem is that regular users tend to stay there, tend not to upgrade (makes them get back in the beginner “suck” zone) and companies tend to think it is OK to have most users as regular users
People are/become passionate about the goal (making images, skiing, …), not the tool (photoshop, the skis, …). “What can I do with this” vs “How do I use this”
Creating passionate users does not necessarily mean that you mak them kick ass in your product. You can teach/help them get better at something tangentially related to your product and if they get really good at it, they’ll end up being passionate about your product. See “Misattribution of arousal” (the brain relates a good/bad feeling to everything that’s related to the experience —the whole context— not just to the thing/action itself)
The brain’s irracional “crap filter” still thinks that things like programming languages, subjects, etc are really not important, for it the really important things are saving our live from tigers or reproducing.
What does the brain care about?
What does the brain not care and forget?
So you have to link things that the brain cares about to the things you want it to pay attention to
Simple example: “conversational beats formal” every time! Why? There is no definite answer to that question yet, but the current hypothesis is that when the tone is conversational the brain is tricked into thinking that he is taking part in a conversation and he is wired to participate in it and so it pays attention
You need to talk to the brain, not just the mind
Create a compelling “vision” for what it will feel like when the user is kicking ass in it’s activity. “Why is it worth going through the pain of being a novice and regular user until I get to expert user?”. Before the user uses the product he must know why that is cool
Is there a clear path to being an expert user? Are we helping them getting there? Do they see that there is a path and a way?
“Why?”, “Who cares?” “So what?”: when you answer all those questions you can answer your user’s questions about why they should use your application/product
Documentation and information transference:
If users are to become power users then they have to stay with it. We must try to keep them interested, get them and keep them as much as possible in a flow state
The flow state (“I’m in the flow!”) requires a linear relationship between challenge and knowledge and skill
Many things create arousal in the brain (discovery, challenge, narrative, growth, thrill, sensation, …)
We must not break the flow of the users. We must enchant the users and keep them enchanted.
What breaks the flow? Microsoft Bob, complicated dials, weird menus…
Create a continuing challenge to the users, creating “levels” (or making them very explicit if they already exists implicitly) so that they can see and feel their evolution
User Experience Spiral: Interaction -> Payoff -> Motivation benefit -> Back to Interaction
The Tribe: passionate users create “tribes” that they feel proud of announcing to the world that they belong to. T-shirt first development (make sure you have ways for your users to state their tribe)
Giving users something to talk about. Easter eggs, The Dark Side Of The Rainbow… Give experienced users some knowledge that makes them “something more” than others. “Insider information” is social currency.
Community: Passion builds community and community builds passion.
Technorati Tags: EuroOSCON, EuroOSCON06, EuroOSCON2006
These are the notes I’ve taken during and about the 2006 edition of the O’Reilly European Open Source Convention (better known as EuroOSCON 2006).
They are really just unstructured tidbits to help me recall things latter on, when I’m going over the materials, but it may have some sort of value for someone else…
Technorati Tags: EuroOSCON, EuroOSCON06, EuroOSCON2006
This is a plugin that I concocted for enabling the usage of the Haloscan on a Blosxom site.
It is perfectly possible to add this functionality just by tweaking the flavour templates, of course, but this makes it easier to use and also makes it possible to port existing sites to Blosxom and easily maintain the comments that may already exist.
It also allows for the individual turning on or off of both comments and trackbacks on a per-story basis.
I’ll probably add a zipped file with the plugin somewhere on the site, but for now the code is displayed right here on this page.
# Blosxom Plugin: haloscan
# Author: Nuno Nunes (nuno@nunonunes.org)
# Version: v0.02 2006-09-15
# Documentation: See the relevant sections of this file or type: perldoc haloscan
package haloscan;
# --- Configurable varables -------------------
#
# What is your account name on haloscan (the one that should appear
# on the javascript in the 'head' section of the HTML page)?
$haloscan_id = 'nunonunes' unless defined $haloscan_id;
#
# Message to display if comments are not allowed on a story.
$comments_closed_message = 'Comments are closed for this page'
unless defined $comments_closed_message;
#
# Message to display if trackbacks are not allowed on a story.
$trackbacks_closed_message = 'Trackbacks are closed for this page'
unless defined $trackbacks_closed_message;
#
# ---------------------------------------------
# Use $haloscan::head in your head template.
# Use $haloscan::comments and $haloscan::trackbakcs in your story template.
#use strict;
use vars qw{ $header $comments $trackbacks };
sub start {
1;
}
sub head {
my ($pkg, $dir, $head_ref) = @_;
$header = qq{<script type="text/javascript" src="http://www.haloscan.com/load/$haloscan_id"> </script>};
1;
}
sub story {
my ($pkg, $path, $filename, $story_ref, $title_ref, $body_ref) = @_;
my $story_id = $permalink::story;
$story_id =~ s/$blosxom::url//;
$story_id = $meta::haloscanstoryid
if defined $meta::haloscanstoryid;
my $comments_allowed = 1;
$comments_allowed = 0
if (defined $meta::haloscancomments && $meta::haloscancomments =~ /^n/i);
my $trackbacks_allowed = 1;
$trackbacks_allowed = 0
if (defined $meta::haloscantrackbacks && $meta::haloscantrackbacks =~ /^n/i);
if ($comments_allowed) {
$comments = qq{<a href="javascript:HaloScan('$story_id');"><script type="text/javascript">postCount('$story_id');</script></a>};
}
else {
$comments = $comments_closed_message;
};
if ($trackbacks_allowed) {
$trackbacks = qq{<a href="javascript:HaloScanTB('$story_id');"><script type="text/javascript">postCountTB('$story_id');</script></a>};
}
else {
$trackbacks = $trackbacks_closed_message;
};
1;
}
1;
=head1 NAME
Blosxom Plug-in: haloscan
=head1 SYNOPSIS
Integrates the comment and trackback service provided by Haloscan
(http://haloscan.com/) into blosxom.
Requires the permalink plugin and knows how to work with the meta plugin
if it is installed.
=head1 INSTALLATION
Fill in the configurable variables according to the instructions and
put the file in your plugin directory (just like any other plugin).
If you whish to use the meta plugin together with this one make sure
that the it is run before this one (renaming meta to 00meta and this
one to 99haloscan does the trick --read the bloxsom plugin documentation
if you need further assistance).
You need to have the pemalink plugin installed for this one to work and
it must run before this one does. You can use the same scheme as defined
for the meta plugin to that effect.
=head1 CONFIGURATION
Fill in the variables in the Configurable varables section of this file
according with the descriptions (which should hopefully be self-explanatory)
and if you have any doubts check out the usage section bellow.
=head1 USAGE
After having set up an account on Haloscan and filled in all the variables to
be configured just put the $haloscan::header in your head flavour template
anywhere inside the HEAD HTML element.
Then, on your story flavour template, drop the $haloscan::comments and
$haloscan::trackbacks variables wherever you want them to appear and that's it!
Both comments and trackbacks are enabled by default for all stories.
Should you wish to control this behaviour, you can do so on a story-by-story
basis using the meta plugin and assigning the meta-variables
meta-haloscancomments and meta-haloscantrackbacks variables as exemplified
below:
----------
My great story's name
meta-haloscancomments: no
meta-haloscantrackbacks: yes
meta-haloscanstoryid: 1115
This is a really interesting story...
----------
For any one of the meta-haloscancomments and meta-haloscantrackbacks variables,
any value starting with the letter n turns it off and anything else (including
not setting the vriable at all) turns it on.
The meta-haloscanstoryid variable allows you to retain story IDs for specific
stories in case you're porting from a different blogging system or if you want
your Haloscan story IDs to be generated some other way.
These three variables (meta-haloscancomments, meta-haloscantrackbacks and
meta-haloscanstoryid) are optional.
=head1 BUGS
Bug reports and comments may be sent to blosxom_haloscan.feedback@nunonunes.org.
=head1 CHANGELOG
2006-09-16 - Added the ability to import storyIDs from a meta-variable.
2006-09-15 - First implementation.
=head1 LICENSE
This Blosxom Plug-in
Copyright 2006, Nuno Nunes
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
“Can this be true? Is this guy talking about moving away from Movabletype and into Blosxom in this day and age?”
I sure am and I did do it. If you want to know more about the move just read on!
Simplicity. That’s the name of the game.
Movabletype is a fine platform for blogging, to be sure —I’ve used it for my blog for many years now and I still use it for some other blogs I’m involved with on a technical decision-making capacity— but I’ve gotten a little fed-up with a few things about the way it works.
First off, Movabletype is very complex, and getting more so as time goes by.
Each new version adds more features and, of course, introduces the added complexity necessary to support those features.
Blosxom is a script and a bunch of (totally optional, of course) plugins written in Perl (yes, this brings out the rabid squirrel in me).
This is an indirect problem. Spam —both on comments and track-backs alike— is a plague that infests all types of blogs and Six Appart do their best to cope with it, but at the end of the day the solutions they provide all depend on a lot of work for their users, either because people have to always catch up with their software’s latest release (or else lose the protection afforded by the previous version) or because even if users are in fact on the cutting edge, there is still the inherent mechanism of detection and protection that is built upon users being spammed, acting on it and that information being fed back to a master server and then scattered to other users so as to allow these later ones to be protected from the new spam.
Anyway it is always a lot of work for people getting targeted with new spam waves (as I find myself being for some reason I cannot fathom —it’s not as if I am a big time blogger or anything like that)…
This problem got so annoying in fact, that I decided to “outsource” the feature to professionals and right now I’m using Haloscan for all my feedback, both comment and track-backs.
Of course this could be easily integrated on my Movabletype platform, but if I’m not going to use this feature than it stops counting as a factor for the platform.
The Movabletype upgrade cycle I’ve mentioned before is annoying for multiple reasons. Not only because I have to do it in order to get the latest spam-protection afforded by the platform I can’t just let the software be, but also because each new version traditionally brings along with it a new licensing model that get closer each time to losing the free customers’ bit, which is definitely a must for me.
One of my main reasons for wanting to change platforms is the model that Movabletype (and most other blogging packages out there) follow of a server hosted somewhere which not only displays the content but is also used for editing it.
This is fine for a lot of uses but I don’t like to have to be on-line to edit my blog. I know there are several programs that allow me to create and edit content off-line and later “replay” the actions on to the server (I actually use one of them, namely ecto), but this only allows me to edit the content and preview it for HTML entity correction sort of thing, not for real publishing as it will appear later on the server.
Also the fact is that I still feel a lot more confortable just editing text files around (be it in my laptop or in the server via ssh) and I do believe this kind of interaction with the site will allow me to write if not more stuff, than at the very least better stuff —more thought out and relevant.
So for all these reasons and more, I’m now on Blosxom and, so far, I’m quite pleased.
As I mentioned yesterday, a few packages caught my attention during the last few days at YAPC and yesterday during the afternoon and evening I took advantage of it being a lighter day (conference-wise) and decided to check out two of them.
First off a took a look at Plagger. Now instead of using the handy pre-packaged versions out there, I went the “fanatic CPAN hardcore user” way (as the author puts it) and let me tell you, you have to have at least some degree of fanaticism to go through with it alright! Oh and it is true what was said during the conference: installing Plagger —the CPAN way— sure does keep your computer warm! :-)
But hey, I got through with it and then it was all a matter of trying out a few configuration recipes to get the hang of things and after that mashing some options together to see how it all worked out.
And let me tell you, it works out beautifully! Plagger is so powerful it is hard to describe and the plugin system wins out yet again. You can setup an aggregator to feed you news and events to your email in a couple of minutes, full of bells and whistles. Oh and doing a “plannet” type of site couldn’t be easier! Put that together with a myriad notification systems (IRC, Growl, …) and a powerful filtering system and, well, it really rocks!
The only problem I see with it is that you do have to occasionally look at the source code of some modules to really understand what’s going on there and what you can actually do with them. Documentation is something that this project sorely needs and I fear that until there is such documentation it will continue to be mostly the province of Perl hackers!
If you wish to take a look at the presentation on the subject given at YAPC, you can find it here and be sure to check out the neat examples which work (almost!) out of the box.
Also check out the architecture of the thing, it really helps you figure out how to use things to create the specific aggregator you wish.
The other piece of Perl I tried out yesterday was KinoSearch.
I’ve had the need for search on a site come up a little while ago but hadn’t yet had the opportunity of going through the available modules on CPAN and now it seems like I won’t need to. Yay YAPC! :-)
I was fortunate enough to attend two talks on the subject and from the first one I got the feeling that there were two packages which could possibly interest me —Search::Xapian and KinoSearch. It seems like Search::Xapian is the more powerful of the two but it lacks in documentation and is really hard to use.
Then there was the second talk which focused specifically on KinoSearch and I was amazed at what I saw there, so I decided to go and try it out.
Installing it was a breeze (straight out of CPAN, of course) and using it was ridiculously easy!
I mean, I just copied and pasted the examples straight out of perldoc, tweaked what I needed to in order for my case to work (fortunately I have a fairly up-to-date copy of the site on my laptop), ran it and voilá! A fully working (fast!) index of the whole site!
Now of course they were right in the presentation when they said it can be a bit of a hog when it comes to disk space —it took 2.6M to index a full 2.7M of text!!— but then I used it straight out of the examples so maybe I can get it to be a bit more civil disk space-wise with a bit more tweaking…
And now to get some breakfast, pack my stuff and go out to see a bit more of the city until it is time to get on the train to Stratford for the rest of the vacation. Oh I see it’s raining quite a bit out there… How very typical! :-)
This is just a quick post with a list of cool stuff I found out about (or was reminded of) during YAPC::EU::2006 and will want to review later, in no particular order.
Lots more to report when I digest my notes but this is the list that comes to mind right now.