Nigel Hamilton | 16 Mar 07:41 2006

[The Goo Blog] Goo Wobble

On the weekend I wondered if re-implementing the IDE-like features of The Goo was really a good idea? Was I wasting my time? Reinventing the wheel? Am I nuts?

So I downloaded "Eclipse", the IDE of the moment, and installed the Perl EPIC plugin. The raison d'etre of The Goo is to help programmers stick Things together, and there is one feature I simply can't do without: the ability to traverse the structural associations in your program. For example, I often want to traverse the inheritance hierarchy - what's in the superclass? When I clicked on the "Outline View" in Eclipse it took me no further than the program itself. I'm sure the class browser is more impressive for Java programs but for Perl programs I came to a deadend fast. :-(

I don't know about you but my programs hardly ever work in isolation - they always involve other Things. When I write a program I often have to context switch between these Things (e.g., program -> output, program -> file, program -> database, program -> log, program -> shell, program -> other programs etc). The Goo should help you to make all these context switches - fast.

So I closed Eclipse, noted the stream of uncaught Java exceptions in my console, and jumped back into the bosom of The Goo. No more wobbles.

Posted by Nigel Hamilton to The Goo Blog at 3/16/2006 08:13:00 AM
Nigel Hamilton | 11 Mar 11:06 2006

[The Goo Blog] The Goo at

We are now starting to heavily rely on The Goo at Lots of tasks, ideas, bugs, etc. have been filed into the Care[O]Meter. I can now see at a glance what's happening across all team members and what I need to do too. We are more productive, communication overhead is lower, and nothing is "falling off the radar".

I haven't used the "I feel like ..." functionality as much as I had hoped but this is because I have too many tasks with a high care factor! Maybe when the pace slows down feelings can come back into the equation? But will it ever? The harsh reality is, some tasks just need doing, whether you feel like it or not. Hmmm. I still want to design a human-friendly, task management system and emotions matter - more design coming soon.

The "strategic" and "tactical" functions of The Goo are working well but we have lost "operational" functions while migrating from the console-based Goo to the web/console-based Goo. I'm really missing the ability to view my current trail, traverse backlinks, automate Perl module making and test making. What am I going to do about this? Check out the Goo related tasks in my CareOMeter:

Posted by Nigel Hamilton to The Goo Blog at 3/11/2006 11:33:00 AM
Nigel Hamilton | 16 Feb 11:56 2006



 	I've finally had time to get Uwe's Catalyst version working! :-)

 	It only took 1/2 an hour to get all the modules installed and 
started. Catalyst does a good job of telling you what's going on including 
timing the transaction:

[Thu Feb 16 10:51:29 2006] [catalyst] [debug] 
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] * Request 19 (0.052/s) 
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] 
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] Found sessionid 
"dcc4bc2b00b51da9985a465a02cf3f7939353ac9" in cookie
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] "GET" request for 
"thing/edit/241" from ""
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] Path is "thing/edit"
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] Arguments are "241"
[Thu Feb 16 10:51:29 2006] [catalyst] [debug] Restored session 
[Thu Feb 16 10:51:34 2006] [catalyst] [debug] Rendering template 
[Thu Feb 16 10:51:34 2006] [catalyst] [info] Request took 4.359979s 
| Action                                                           | Time 
| /auto                                                            | 
0.000999s |
| /thing/edit                                                      | 
4.336160s |
| /end                                                             | 
0.005652s |
|  -> Goo::View::TT->process                                       | 
0.004506s |

 	So rendering the edit page is taking 4.35 seconds? Any ideas? This 
should take < 1 sec.

 	I'm trying to decide on going with Catalyst or our own bespoke 
webserver: Sparky. I'd rather go with Catalyst but it must be quick.


Nigel Hamilton
Turbo10 Metasearch Engine

email:	nigel@...					4 Ivory Wharf
tel:	+44 (0) 207 450 0221 					4 Elephant Lane
fax:	+44 (0) 207 232 4867					London SE16 4JD
________________________________________________________________________________		Search Deeper. Browse Faster.

Nigel Hamilton | 12 Feb 15:49 2006

[The Goo Blog] Sparky powering The Goo?

Sparky is a lean, mean webserving machine I developed for Turbo10 and Trexy. I found configuring and performance tuning Apache + mod_perl so painful I ended up writing my own webserver!

Sparky is doing a great job of serving millions of hits per day for Turbo10 and Trexy. It's faster than mod_perl, consumes much less memory, has few prerequisites and is written in pure Perl. Last week I added POST request handling so Sparky now serves The Goo too.

The next phase in the development of Sparky is to fuse its currently separate Request and Response objects into a Context object (ala Catalyst). But I'm not sure how far I should go? Should I emulate the Catalyst dispatch mechanism too? Will this retrofit easily with Uwe Voelker's Catalyst port of The Goo?

I don't want to make yet another Catalyst (e.g., Jifty) but Sparky can't help but benefit from distilling the lessons learnt from these frameworks and others (CGI::Application, CGI::Prototype etc). Hmmm. No matter what happens I need to improve Sparky for Turbo10 and Trexy and a new Context object with a simple dispatch mechanism is definitely on the cards.

The Goo on the other hand will have its own application-specific dispatch mechanism no matter what underlying webserver is used. Given a 'Thing' in a URL (e.g., goo.cgi?, we need to look up its type (e.g., Perl 5 Thing), the action to be performed (e.g., p -> profile) and dispatch to the appropriate handler (e.g., Goo::Thing::pm::Perl5Profiler).

Each Goo user will also need to run a local "Goo Server" to access local files (i.e., a local file finder) and a light weight standalone server like Sparky is required here. Hmmm. Stay tuned ...

Posted by Nigel Hamilton to The Goo Blog at 2/12/2006 02:32:00 PM
Nigel Hamilton | 12 Feb 09:40 2006

[The Goo Blog] Finding Files and Doing Things

I've integrated the file finder with the Care-O-Meter. This means I can jump to a file quickly. Here is the latest screenshot of the Care-O-Meter (see the file finder on the right):

This means I need a separate form for updating the locations of Things in the filesystem:

Cool. Now I don't have to bother about remembering where something is located - no more tiresome directory traversals - up, down, up, up, down. The Goo automatically looks in these locations when it sticks Things together.

Posted by Nigel Hamilton to The Goo Blog at 2/12/2006 10:29:00 AM
Nigel Hamilton | 31 Jan 09:46 2006

[The Goo Blog] Goo URLs? Yes, please.

Hypertext is the original system for traversing associations between Things.

In a previous blog entry (Goo URLs? No Thanks) I mentioned that I didn't want to encumber The Goo with having to address Things using http://really_long_unambiguous_urls/that/are/a/pain/to/type. But The Goo sticks Things together by association and hypertext offers the path of least resistance!

For example, ideally I want to browse my Perl code in hypertext and then jump straight to an editor and then jump back again as quickly as possible (to minimise context switching). A recent patch by Jonas Fonescu to the Elinks browser unfortunately didn't quite do what I needed but he suggested an even better solution: Goo URLs!

To enable your own protocol in Elinks all you need to do is add this to ~/.elinks/elinks.conf:
set = "/home/search/dev/goo %u"
set = "/home/search/dev/goo %u"
I now have Goo URLs! This means if I want to edit a given method I can use a URL like this:
Clicking on this URL launches an external text editor (e.g., nano, vi, emacs etc), starting at the appropriate line and means I can edit the file in place and jump back out again - quick!

It turns out the same method works in Firefox too. If you search on Trexy you will find my search trails for "firefox registered protocol". But here is a summary of what I found. To add a new protocol to Firefox do the following:
  1. Type "about:config" in the location bar.
  2. Right click, select New --> String.
  3. Name of string should be: ""
  4. Value should be the path to your executable: "/home/search/dev/"
This activates goo:// URLs in Firefox. I use KDE on Linux so I need to launch a window to wrap the application with a shell script (e.g., /home/search/dev/
# launch the editor in a new window
/usr/bin/konsole -e /home/search/dev/goo "$1"
This means the Goo can be fully integrated with a graphical browser (Firefox) and a console based browser (Elinks) too.

There is now no technical impasse to traversing from high level tasks and ideas all the way down to editing, compiling and testing a small Perl script buried in the file system. Cool! ;-)

Posted by Nigel Hamilton to The Goo Blog at 1/31/2006 09:49:00 AM
Nigel Hamilton | 28 Jan 13:51 2006

[The Goo Blog] Care-O-Meter Feedback

The team has been using the Care-O-Meter for a week and thanks to their feedback I've made quite a few changes:
  • private emotions - how you feel about doing a job/task is now kept private
  • free text searching - you can search all Things for keywords
  • you can choose to notify a specific email address when the status of a Thing changes
More changes are on their way!

Posted by Nigel Hamilton to The Goo Blog at 1/28/2006 02:35:00 PMt>
Nigel Hamilton | 28 Jan 07:38 2006

[The Goo Blog] More New Goo ...

I haven't posted a blog entry recently because my CareOMeter has filled up with lots of Things with a high care factor - sadly Goo blog entries are being pushed down. But today I feel like doing one!

Goo developments continue. I've written a file finder for quickly finding Things in GooSpace. Here is a screen shot.

The motivations for this are:
  • reduce context switching - I need to jump from the CareOMeter to the underlying files as quickly as possible
  • reduce the need to navigate hierarchical directories - no more up, down, up, up, down and all the context switching that entails - just jump to the file I want!
  • simplify the .goo configuration files - we now no longer need to store locations per Thing
  • quickly resolve filename clashes that are found in multiple locations
  • gracefully handle mapping Perl::Module::Names to the underlying file
Each user has a list of directory locations in which to look for file Things and I've made a design decision to store this in the database instead of flat configuration files. Goo actions will also be stored in a MySQL database along with the each user's trail.

In the next week I hope to hook up with elinks so I can find a file and then edit it in place and then jump back to the CareOMeter.

Posted by Nigel Hamilton to The Goo Blog at 1/28/2006 07:59:00 AM
Nigel Hamilton | 17 Jan 08:00 2006



 	It's great to see everything that's happened since I've been away.

 	Uwe had a "power" Friday night and it seems we're well on the road 
to a Catalyst version of the Care-O-Meter. It's looking really good and 
I'm learning lots about Catalyst / TT etc.

 	Marcel is plowing away on the Thing Registry and 
downloading/install subsystem.

 	So it's all coming along! ;-)

 	I'm going to start getting the development environment back by 
bridging care-o-meter -> elinks -> nano/emacs -> perl .. and this will 
then feedback into the refactoring that needs to happen when old-Goo meets 
new-Goo (Catalyst, elinks, database things etc). So there's lots of design 
knots to be tied back together but I'm sure there's a way.


p.s. there may be a FireFox extension that can perform local CGI execution 
/ call external editor in-situ - if not we could always make one - 
this means people who want to stay in a "graphical" environment could.


Nigel Hamilton
Turbo10 Metasearch Engine

email:	nigel@...					4 Ivory Wharf
tel:	+44 (0) 207 450 0221 					4 Elephant Lane
fax:	+44 (0) 207 232 4867					London SE16 4JD
________________________________________________________________________________		Search Deeper. Browse Faster.

Marcel Holan | 16 Jan 12:15 2006

Thing Download Management Progress


after a hacking weekend, there are modified cgi files for the
server-side Thing download management.

This has been done:

 - set up a SVN repo here locally for that codebase
 - use lib fixes; DB setup; DB fixes in code => got the files running locally
 - changed name->myid in all relevant cgi scripts; better email validity
   check; use Common::Regexp to check URLs;
   lookup-thing-registry.cgi returns all things if no param given.
 - bindParam efficiency tweaks

 - installed Common::Regexp on Tried to install
   Bundle::CPAN (1.83), but there were some glitches. Theres some
   crufty Perl 5.8.0 on that RHEL3 machine. Maybe we should use the
   newer and faster /usr/local/bin/perl (5.8.7)?
 - changed the myid on database, dropped thing table
   (all via webmin)

I have the svn locally on my notebook, but it should really be
somewhere internally accessible for others too. Nigel, Sven: Please
tell me when you want the repository. Until then please refrain from
changing source under ~goo/web/things/ directly, it might get

Currently in the works:

 - testing Archive::Zip and Archive::Any, will use whichever will
   allow us the most portable packing solution.
 - working on interaction goo -i and lookup-thing-registry.cgi
 - also, the download-thing.cgi should get notification when "goo -i"
   really issues a download.


Nigel Hamilton | 12 Jan 07:31 2006

Care-O-Meter Alpha

Hi Guys,

 	I just checked the alpha version into subversion:

 	Uwe, I had a change of heart about thing_ids and decided that by 
convention the presentation layer should retain the type (e.g., bug.1212, 
task.2323) but internally we should go with an auto_increment column 
(i.e., thing_id mediumint unsigned).

 	Which means we now only have *one* table and less "funky" factor:

 	I've created the table in the database  <at> and am trying 
to hook up goo.cgi to apache there. If I don't get it hooked up all you 
need to do is point your webserver at: goo.cgi.

 	Uwe, good luck with the Catalyst version. It would be great if you 
could help all of us get up to speed with Catalyst. Could you please keep 
a developers log of how you go about doing the conversion? This will help 
us understand how Catalyst works.

 	Good luck! I'm off snow skiing for the next four days but I'm 
looking forward to adding new functions and learning more when I get back.