Planet Apache

April 27, 2006

Rich BowenCamera in the screen

I wondered how long it would be before someone embedded a camera in the screen itself. I’m a little baffled at the folks that say that this is reminscent of Big Brother. It’s a camera, folks. As with all computer peripherals, if you don’t want it on at any particular moment, turn it off. This is no different (big-brother-wise) than any other webcam, but it is significantly cooler, for anyone who has ever done video conferencing and been somewhat disconcerted by the way that the other person never quite actually looks at you.

Sylvain WallezFree Maven 2 book

Just when I was contemplating ditching Maven 2 for my current project because of too much undocumented black magic, its developers release a free book, "Better Builds with Maven".

We'll see if this helps me to understand the magic :-)

Ian Holsmangmail has made me lazy

and I’m going to have to pay the piper eventually.

I just noticed I am sitting at 32% capacity, up from about 6% that I was at 6 months ago. With all this limitless space and measly ability to only delete 50 things at a time I can see a point in the near future when I will be totally screwed.

why? well.. I have about 6000 ‘conversations’ sitting in email.. some are important, some aren’t I just use ‘search’ to find the old stuff.. it’s great. I hardly delete anything and I have a couple of mailing lists going into it which I skim through.

but what happens when my gmail gets full (probably at the end of the year) am I going to have to go on a massive diet, or will I switch my alias to another gmail account and start filling it up? . and then switch everything over to that.. talk about a PITA.

By making it so hard to delete email and discouraging people to delete them google has is going to have a whole heap of unhappy ‘fat’ inboxes in 1Q 2007.. unless it keeps on giving away more disk space.

Have you thought about what you will do when you reach 99% capacity?

when I have a spare day I’m going to just suck it into mail.app and wipe it.. diets are good!

Garrett RooneyAnother License Plate

Seen on the way to work today: NACL H20

California certainly has its share of geeky license plates...

Howard M. Lewis ShipGambling on AspectJ

Squeezed in with everything else that's going on (the end of one client project and a lot of personal and business travel), I've been working on the start of the code base that will be Tapestry 5.

I think it is going to be a monster. In a good way. More on that later.

Tapestry 5 is targetted at JDK 1.5 and above. That means annotations, and not XML, will be the rule of the day. JDK 1.5 also means the use of Doug Lea's concurrency support, now java.util.concurrent.

Further, this is a chance for me to dip my toes in the Aspect Oriented pool.

I can picture the reaction: "Howard, that's the wrong 'A'! AOP is so ... 2004? Shouldn't you be focused on Ajax?"

However, the AOP support actually aligns nicely with much that I've done with HiveMind, using Javassist. It's been interesting to see the kind of things you can do statically, at build time, using AspectJ and how they compare to what you can do dynamically, at runtime, using HiveMind. Each approach has merit in different circumstances, and I'm trying to find out exactly where the lines of demarkation are.

For example, I've been doing a lot of defensive programming. So I've been creating aspects to help with that. It's been relatively easy to write aspects that inserts null check code into each non-private method. I like the don't accept null, don't return null coding approach, and my aspect allows me to ensure that all my code works that way. Further, for the rare cases where I want to allow null, I can place a @SuppressNullCheck annotation on a class or individual method.

I could do the same thing using HiveMind ... but I'd really be restricted to applying it to HiveMind services, since it would take the form of an interceptor. Tapestry tends to have lots of data and modeling objects in memory, that would benefit from these checks as much, or more so, than the service code. AspectJ is a better fit there.

I'm also doing some interesting work to use annotations to control concurrent read/write access to my classes.

I'm finding the mix of aspects and annotations to be very powerful. I use type annotations to narrow the set of classes to be affected by the aspect, and use method annotations to include or exclude individual methods. In my case, I have a @Synchronized annotation that indicates a class can have some of its method synchronized, and I have @Synchronized.Read and @Synchronized.Write to control which methods require a read lock, and which require the exclusive write lock.

I'm pretty happy from the point of view of getting more functionality (and, more robust functionality) from less code. Aspects are another approach to doing things that I normally associate with components and layering. The gamble part is how I'll feel once I'm trying debug into and through AspectJ-generated code. It becomes a bit tricky to figure out exactly what's going on once you've let AspectJ work things over.

I've also found that AspectJ really wants to work at the method level, when some of the things I want to do (such as validating individual parameters) are done at the individual parameter level. For example, I'd like to create method advice as the combination of a particular method and a particular non-primitive parameter of that method ... but the best I can do is advise the entire method and recieve all the parameters as an object array (whether they are primitive or not).

I have found the AJDT plugins for Eclipse to be a slight bit creeky. You definately want to upgrade your Eclipse to 3.1.2 (the latest and greatest). The visualization is great (when it works), as is the visual annotations of advised methods. There are numerous annoyances when editting aspects and browsing source, and I often have to perform clean builds of my code, something I hardly ever do when not using AJDT.

Ask Bjørn HansenWeb Performance and Scalability with MySQL Slides

rwws-mysql-2006.pngWoo, that was fun! I just finished my talk half an hour ago.

I got a couple of "that was the {best,most useful} talk at the conference so far!" comments, so that alone made it worth getting up at 5.45am to fly up here!

The slides from the talk are now on the talks page of my new shiny website that Vani put together for me.

I had about 70 slides for 45 minutes (made it in 47!) so it went pretty fast, but I really think that's a lot more fun. I am sitting in the InnoDB: Designing and Configuring for Best Performance talk now and the pace is a bit too glacial for being in the last slot of the day, at least for me on too little sleep...

I'm increasingly convinced that "more content faster" is better for conference sessions.

Earlier I saw the My Second Life Runs on MySQL: War Stories from the Metaverse talk. Woah! Was there some cool stuff there or what!

The MySQL things were good (and mirroring some of my talk - a bit of confirmation is always nice), but the things about what the Second Life world can do and what people have created there were jaw-droppingly awesome. Ian, if you read this: Thank you, that was fun! :-)

Heading out for a quick dinner in a few moments and then to the airport to go back home.

Next year I'll have to make time free to come for the whole conference. Being used to OSCON it's a bit strange how everything is focused around just MySQL. I can't quite put my finger on it, but I like it this way.

Comments

Rich BowenFlickr is addicting

Someone very cool got me a Flickr Pro account, and I spent the entire evening playing with it. *Wow* it’s addicting.

Brett PorterFree Maven 2 Book Released

BetterBuildsWithMaven.jpgWell, "Better Builds with Maven" is finally out there.

http://library.mergere.com/

The book is the first about Maven 2, and was written by Maven developers myself, Jason van Zyl, John Casey, Vincent Massol, and Carlos Sanchez. The chapters include:

  • An introduction to Maven 2.0
  • Creating, compiling and packaging your first project
  • Best practices and real-world examples
  • Building J2EE Applications
  • Extending builds by creating your own Maven plugins
  • Monitoring the health of source code, testing, dependencies and releases
  • Team collaboration and utilising Continuum for continuous integration
  • Converting existing Ant builds to Maven
If you happened to get the pre-release before today, the book has been updated - you can download it again from the website.

April 26, 2006

Rich BowenAnd the winner is …

After much deliberation, I finally settled on the Trek 7.3 FX. I don’t know if this actually is in line with anyone’s recommendations, but I found your recommendations helpful anyways. I took it out for a short spin today, reinforcing what I already knew - I’m in terrible shape. I rode just over 4 miles - down to the Walmart and back - and had a peak speed of about 21mph. When I got back home, my legs felt like rubber. So I’m clearly going to have to work up to this. But I’ve determined to do this thing, and by Yuri I’m going to.

Oh, and at 12mpg, and $3 per gallon, I saved $1 on my trip down to Walmart.

Carlos SanchezBetter Builds With Maven - Free book about Maven 2

It finally went out! As I mentioned some weeks ago, there is a book about Maven 2 made by core developers, John Casey, Vincent Massol, Brett Porter, Jason Van Zyl, and myself. I think this is what the Maven community was waiting for, and I'd like to thank Mergere for the opportunity of working on it and the guts to make it available for FREE, like in free beer ;).

You can download Better Builds With Maven, and the chapters code (link is at top left corner).

Better Builds With Maven

I'd prefer a cover like this, but it didn't pass the vote, nobody understands my sense of humor ;)

Leaning Tower of Pisa

Dave BrondsemaPortal comparison: Liferay v. uPortal

For Cornerstone University's portal we decided to switch from our planned uPortal 2.5.1 implementation to use Liferay 3.6.1 instead. Several people have wondered why. Here's a few comparisons:

Feature Liferay uPortal
Customization AJAX drag & drop much more difficult, but slightly more options
User/group data integration Must use its own SQL tables (we wrote scripts to insert into those) Can map to remote SQL, LDAP, etc
Community big, but often unanswered questions in forum Smaller, seems more helpful, focused on higher-ed
Bundled portlets/channels A lot (78). We use several (RSS, menu navigation, portlet aggregrator, Wiki display, weather) Few, none of which provided much value to us
Themeing easy hard (~3 layers of abstraction)
Pretty URLs yes no
Layouts each group you are a part of has a layout (page) hierarchy; this works very well for us. We did have to write a Java utility to insert similar layouts into similar groups Don't think there is a way for heirachy of pages; each user's layout can appear different based on what groups they are in
Portlet hotdeploy yes no (?)
CAS for authentication yes yes
Installation into app server Messy; requires putting lots of jars into common Clean; the portal is just one webapp

A very good comparison of these and more portals: http://epubs.cclrc.ac.uk/bitstream/785/406.pdf

Justin Masonlinks for 2006-04-26

Tags: 

Garrett Rooneys/California/Massachusetts/

There's probably a number of people out there who I haven't told in person, but we're inching up on the actual date in question, so I suppose I might as well just put it up here for the world to see, especially since I told a bunch of people at work yesterday, so it's likely working its way through the company grapevine as we speak.

It's been a great year out here in California, but I've come to the conclusion that I'm more of an east coast person, for a number of reasons I'd be happy to share offline if anyone's interested.  As a result, I'm moving back home at the end of next month.  I'll be living in Massachusetts, first spending a few months at my parent's house on Cape Cod (it's a rough life, I know) and then moving to Boston with a bunch of friends from RPI.  Fortunately, I work for a wonderful and understanding company who is totally ok with me working remotely, so that's what I'm going to do.

The specific travel plans are that I'm going to be throwing everything I own into a little 6x7x8 shipping container on May 26th and having it driven from here to Massachusetts.  Around the same time I'll be picking Rob up from the San Jose airport so we can have one more ill advised nonstop trip across the country.  I have assured Rob that he will be back home by Tuesday morning (that weekend is Memorial Day, so we get Monday off, which is a big part of scheduling the move for that weekend) so he won't have to miss any work.  Google Maps claims we can make the drive in about 2.5 days worth of driving, but we'll just have to see how that plan goes...

So if anyone's up for helping me move the few large (but not heavy really, just bulky it turns out) items of furniture I've got from my apartment to the moving company's terminal sometime on Friday May 26th please let me know.  Volunteers will be rewarded with disgarded computer equipment and whatever else I have lying around that I don't want to bring with me to the other side of the country.

Rodent of Unusual Size (Ken Coar)Lighting up the daze


With new unpatented invisible light, yet.
Updated: Wednesday, 26 April 2006 10:46 EDT

I quite like the LED torch I picked up at Fry's at ApacheCon 2004/US. It only has two problems:

  1. It takes N-size batteries, which aren't all that common, and are oddly enough sized that rechargeables are just not on; and
  2. When it's in its belt sheathe, the switch tends to get turned on accidentally and the inside of the sheathe gets unnoticeably illuminated for days.

The first one wouldn't be such an issue if it weren't for the second one. I wouldn't need to buy batteries so often if the bloody thing didn't keep getting switched on. And it's well-enough made that I don't see any simple way to hack it. I could put the batteries in backwards, and turn them round when I wanted to use it, but that's a major PITA.

Bah.

Also in the Bah department is Google's calendar service. On the surface it looks sexy enough, but it's missing the one most important feature: the ability for J Random People to be able to view it. At the moment, in order to view someone's Google calendar, you need to be a registered Google calendar user yourself. Hence the Bah rating.

However, the calendar info is available in iCal and XML formats, so I guess I'll find/write something that can interpret one or the other of those and display it in HTML. Lovely; more calendar formatting code to write. I'm seriously hoping someone has already done a 'give the app the URL to an iCal document and it'll display the calendar' project.


Comments (2) Trackbacks (0)

Andrew SavoryMacbook benchmarking

The thread that won't die - benchmarking the Macbooks. I've now got 2gb in this machine, so it was time to re-run the tests.

With Cocoon 2.1.8 on my machine:
rm -rf build; ./build.sh webapp
[...]
BUILD SUCCESSFUL
Total time: 1 minute 11 seconds

On Maurizio's Macbook Pro, identical spec to mine:
Total time: 1 minute 21 seconds

On Gabriele's new Sony Vaio running Ubuntu:
Total time: 1 minute 30 seconds

Gianugo got hold of a 1.83GHz Macbook:
Total time: 1 minute 16 seconds

On Jeroen's Dell centrino laptop running Windows and Cocoon 2.1.9 (and no virus checker):
Total time: 1 minute 41 seconds

On Jeroen's Dell desktop running Windows and Cocoon 2.1.9 (and a virus checker):
Total time: 9 minutes 40 seconds

With Cocoon 2.1.9 on my machine:
Total time: 1 minute 23 seconds

So ... I still have a hot, vibrating, buggy laptop. But it's fast.

Steve LoughranJena User Conference

In my intermittent 'say nice things about RDF' thread, note that the Jena User Conference is up and coming in HPLabs Bristol on May 10-11.

I looked at the schedule, saw too many talks with the word ontology and have opted not to attend, but will be in the building. So, if any conf visitors want demos of smartfrog or the prototype Alpine SOAP stack, then ping me. Thursday is better for demos than Friday.

Now, remember when WS-* was up-and-coming and the Semantic Web was being dismissed as unrealistic hype?

Bertrand DelacretazGuess where?

some-planes-somewhere.jpgMaking cryptic statements about certain parts of the world seems to be commonplace for Cocoonistas these days, so here's my mystery picture. You won't break any neurons on it...

Having a busy but fun week!

Ugo CeiNetNewsWire and mandatory Newsgator subscription

netnewswireIconlarge.pngI just upgraded to the latest beta of NetNewsWire 2.1 from 2.0 since it’s a universal binary and was thinking it would be much faster on my MacBook Pro, but I had an unpleasant surprise when running it for the first time, as a pop-up box appeared telling me that “A NewsGator account is required to activate your product.”.

Huh, excuse me? I bought NetNewsWire and MarsEdit when Ranchero was still an independent company and I would gladly pay for them again in case my license doesn’t cover the upgrade from 2.0 to 2.1, but giving my full name and address to another company without even an explanation of what that’s for and, what’s more, accepting their terms of service? You got to be kidding!

OK, I will probably comply, since I basically trust Brent and will probably find the syncing feature useful, but other people might not be so trustful. How about adding an explanation before the final release?

And wouldn’t it really be possible to opt-out?

Technorati Tags: , , , , .

Garrett RooneyCamera Prices

So someone explain to me why all decent camera gear has a list price that's astronomical, but is actually sold for far less?  I mean while I think it's nice that the Canon EOS 5D sells for just 3 grand instead of the 5 grand it lists at, but if every store on the planet sells it for 3 grand, why not just have it list at 3 grand?

(Yes, if you hadn't guessed, I've been spending far too much time looking at cameras and lenses and other assorted stuff recently, spending several days watching coworkers with way too many toys take pictures at the engineering offsite will do that to you...)

Adrian SuttonAtomic Test Driven Development vs Integration Test Driven Development

The basic principle of TDD is that you write the test first and then write the code required to make that test pass. There's more to it though if you expect to see all the benefits. If you drive your development from integration tests instead of atomic tests, you'll wind up with highly coupled code again and because it grows gradually without up-front planning, it's often harder to understand.

If however, you drive your development by atomic tests, you are very strongly encouraged to decouple your code whenever possible because mocking out dependencies is so annoying and time consuming (plus the more you have to mock, the more brittle your tests tend to be).

Integration tests are essentially to success - they make sure that your atomic tests are testing the right things and that the end result you get is what you actually want. It's extremely beneficial to write acceptance and integration tests before you start writing atomic tests (see: Acceptance Test Driven Development). The design phase however has to be done with atomic tests if you want to encourage decoupling of code.

It's definitely enlightening to look back at code that has been created using integration testing instead of atomic testing and see how much more complex it looks.

Ian Holsmanopen source billing system

Hi.

well.. zilbo.com has expanded a bit, and now is generating some revenue (yay) on the consulting side.

But my problem is I now need a multi-currency aware accounting package.. I’ve been using the quickbooks which was bundled with my Mac.. and it’s been Ok, but it doesn’t handle multi-currency.. which I now need.

I had a look at some of the open source things, and Compiere looked right, but I don’t want to install oracle to get it to work.. (it hints on mysql support.. but It wasn’t obvious to me)

OpenTaps looks interesting, but it seems like it is more geared to a ecommerce site than a service/consulting firm.

What do you use?

April 25, 2006

Dan DiephouseWhine, moan - yes, integration is hard

On TheServerSide there are a bunch of wanks people, moaning yet again that SOAP and web services is too complicated. Like slashdot, the discussions on TSS quickly degrade into ignorance and childish interactions. (Hence the tone of this entry will be slightly deprecating)
Is the underlying problem here that SOAP is hard? No. Its that integration is hard. If you think that REST/POX is going to make it easier you are just crazy. Lets look at some of the things which are hard regardless:

  • Understanding the operations - for both you need to figure out the inputs and outputs. For both you’ll most likeloy have schemas.
  • Writing the operations - for both you’ll need to either construct some xml or some data transfer objects. In certain cases one will be easier than the other, and neither are specific to SOAP or POX.
  • Describing the operations - whether its documentation or a wsdl document, you need to let users know how your service works.

Although I’m sure REST people wouldn’t use operations, but close enough.

And heres a little bonus on SOAP vs REST/POX for all of you who care…
Hey you enterprisey loser, REST/POX really is easier

Is it really? Why? Its all just XML anyway.

Are you complaining about how hard it is to write a WSDL straight off the bat? Then start with code first, and work your way to a more defined WSDL.

But this is nearly irrelavent, because the actual work comes in when you design your schemas. If you have an API of any decent size, the schemas are where the majority of the work will be. And you will need a schema regardless of whether you do POX or SOAP.

But REST/POX is better - look at Amazon!
One example I’ve always seen is the Amazon API. “Look the SOAP API is barely used.” However, I think this shows when SOAP should be used and when POX/HTTP approaches should be used. Amazon has hundreds of defined schema elements. The API encompasses a huge amount of functionality. But how much does the typical user need? A small small fragment. If you’re going to use the whole API I will guarantee that the SOAP API will be easier. Yet, for a small subset, their REST API will most likely be easier.

And this does nothing at all to debunk that SOAP services aren’t effective. I can generate a .NET or Java client with ease. While some have complained about how hard these are to use, I argue that it is only hard because the API contains so much functionality and the Amazon docs largely ignore the SOAP interface.

But there are interoperability problems!

The truth is now we’ve worked out most of the interoperability problems. I can go and use WSDL, SOAP, WS-Security, WS-Addressing, and a myriad of others across platforms. Just use a decent SOAP stack.

Enough already

Can we just accept that sometimes SOAP is good and sometimes REST/POX is good? Just like sometimes Java is good and sometimes Ruby is good. Or any number of things. Anyone who looks for One Thing To Rule Them All wil most likely be left empty handed or looking like a religious fanatic.

Steve LoughranRedundancy breeds Complacency

I left work at 5:45 yesterday to discover I had a puncture. I wasnt worried, because I had a spare pump in the handlebar bag, and another one in the bottom of the pannier.

Except I didnt. For reasons that were probably valid at the time, I had removed each of these and put them away. In each case I had thought it didnt matter -there was a spare pump, but in only one of those cases was that thought correct.

There were no other bikes around with pumps and not enough life to grab a lift home, so I ended up calling home and getting the family out to rescue me. Today I drove in and brought the bike home.

I propose a new redundancy level, RAID-minus-one: in which you think you have a backup, but in fact you don't. Its worse than raid-0, where you know you have nothing, because you get complacent.

Steve LoughranApacheconEU 2006 schedule

The apachecon schedule is up as iCal URLs, URLs that import directly into gmail. If I click on the links direct outlook tries to process them and fails horribly (of course), but pasting them into google calendars works nicely, giving me a complete conference schedule. Lovely.

Henceforth, all conferences should publish .ics schedules. It'll become as essential as free WLAN links

Steve LoughranJXTA is five.

My, my, JXTA is five. That means all that P2P-is-the-future hype is five years old too. It's gone quiet since then, though Vista (build 5636 out today!) has some local subnet chat I see, and Office 2007 includes Groove.

Now that everyone has forgotten about P2P, it's time to remember that it has uses. One of the nice things is that by decoupling destinations from hostnames, and using relay sites outside the firewall, JXTA, Jabber, etc, can all do two-way comms despite the presence of firewalls.

JXTA even has bindings for other languages (python, ruby), other platforms (.net), and mobile Java. So its very interesting. I just have to insert my usualy complaint about J2SE not being at all laptop-aware, which means not actually suited for running on the next set of corporate and home user client machines. Maybe once Apple buy Sun things will change there :)

Justin MasonPeoplefeeds and Quick Aggregation

peoplefeeds is cool.

I’ve been looking for something to can aggregate my Flickr, Wordpress blog, and del.icio.us feeds into one venue where I can look up items by tag, in a single page-load.

Suprglu was my leading contender, although they weren’t there yet since they didn’t seem to support importing my blog posts with tags preserved — pretty much everything wound up tagged as “uncategorized“. disappointing. :( so I was waiting for them to fix that.

This post by Richard MacManus pointed at another couple of options; 43Things and Peoplefeeds. I hadn’t actually noticed that 43Things was doing this kind of aggregation too; unfortunately as far as I can see, they doesn’t support tag preservation and browsing, so there goes my desired feature. shame.

However, Peoplefeeds was right on target, offering a ‘Unified Tagspace’ and a ‘Search All-Personal-Content’ mechanism. It works nicely, too. Here’s my personal aggregator, combining my Flickr feed, my weblog feed, and my del.icio.us feed into one — and with a unified tag-space; here’s my ‘hiking’ tag, hitting all 3 feeds. Perfect.

One other use for this — I’ve forgotten why I was looking for one of these, but I know I did want one ;) — it can be used to make a “private planet“. If you have 3 or 4 feeds that you need to combine into one, this provides a very easy way to do that; just set up a userid at Peoplefeeds for that purpose.

Tags: 

Ben HydeJane Jacobs

Jane Jacobs has passed away.

I’ve often sorted people into two groups. Those for whom the fact that the minimum width of a sidewalk is 12 feet seems obvious v.s. those who don’t get it. Jane Jacobs was in the first group. We will miss her.

Garrett RooneyToo Much Junk Mail?

So yesterday I managed to burn out the motor on my shredder while working my way through the huge pile of junk mail I have sitting around waiting to be shredded.

The real question here, obviously, is if this implies that I get too much junk mail, that I let the junk mail pile up for too long before shredding it, or if I just should have bought a less bargain basement shredder...

Sam RubyNav Keys

Inspired by Bloglines (*), which apparently in turn was based on work by Matt Kruise, I’ve added navigational key support to Planet Intertwingly and to the index and comments pages on my weblog.

Press ‘j’ to go to the next entry, or ‘k’ to go back to the previous entry.  The space bar will page down the screen (I get that 'for free').

I’ve tested it on Firefox and IE.  Despite following these instructions, the computed page offset always seems to be zero in Opera, rendering this script useless.

(*) Note: if you are an active Bloglines user, clicking on that link will have the side effect of marking all of your feeds as having been read.  However, if you do go there, you will see that the bug I reported has been fixed.

Berin LoritschSoftware Development Magazine is Done

In their last magazine there was a letter from the editor explaining that SD has run its course. Some of the regular contributors like Scott Ambler are transfering to Doctor Dobbs Journal. Those with subscriptions to SD will be taken up by DDJ. I‘m not sure what‘s going to happen to those of us with complimentary professional subscriptions as DDJ has not offered them in the past.

This is a sad thing, because SD was one of the better magazines out there that wasn‘t language specific. It helped you weed through the different software development processes and learn what might work better for you. They were on the leading edge of getting the word out about XP and Agile development. They‘ve always been a good resource. The only comfort is that DDJ is expanding their list of articles to include what SD specialized in.

Alas SD, we will miss you.

Nóirín PlunkettThe iCal Files - ApacheCon EU 2006 Schedule

At the time of the ApacheCon planning meeting, I was on holidays. Yay, bliss and all that. Anyway, after the meeting, I set about turning the spreadsheet of talks into iCal files, in the hopes of having them ready before the conference :)

Now that speaker notifications have gone out etc, here they are. There’s a very, very chaotic-looking overall schedule, containing all of the sessions, across all of the tracks. The plenaries calendar contains the plenary sessions (duh! I just couldn’t think of a better name - this work was mind-numbing enough!), but also such useful things as coffee breaks, and lunches :)

The equally imaginatively named tutorials calendar contains the regular tutorial sessions, as well as the licensing/IP tutorials on Thursday.

And finally, there are four different calendars, roughly corresponding to the different rooms. More imaginative names - Room 1, Room 2, Room 3 and Room 4. These don’t exactly match the rooms on the official schedule, and I make no promises at this stage what room anything will be in. The reason I’ve changed them around though, is so that the httpd track is in the same iCal file on both Thursday & Friday.

These calendars are only as accurate as the information I have, but I’ll do my best to keep them up to date. Please feel free to subscribe to the iCal files, so that you can have the bright, shiny, new revisions, as I update them :)

Rodent of Unusual Size (Ken Coar)OSI and membership: Let us now be feckful


As opposed to 'feckless,' of course. What did you *think* I meant?
Updated: Tuesday, 25 April 2006 10:21 EDT
Past entreaties and exhortations having led to inconclusive discussions that dribbled away into silence, it's past time to try again. I sent the following to a couple of OSI mailing lists, and some specific interested parties. It's open to all, of course.

The OSI is currently wholly governed by a set of "trustees" in the form of its board of directors. As directors have left, replacements have been selected by the remaining directors in order to keep the board fully staffed. This model was both necessary and appropriate when the the organization was conceived and formed by the original board.

However, since then the world of open source has mushroomed far beyond what it was when the original board formed the OSI, and what was appropriate then is less so now. In particular, the size of the OSI board is much too small to be representative of the world of open source as it now exists.

The objective of moving to a membership model is to broaden the "ownership" of the OSI to include the global community of people who are investing their lives in open source. Those members then become the true trustees of the open source movement, which gives the OSI further legitimacy as representing their collective voice.

To that end, the OSI Board is soliciting proposals for a general membership structure, including specifics on how the Board should be constituted and elected. Please email your thoughts to the membership-discuss@opensource.org mailing list, where Board Member Ken Coar will moderate and collect feedback to present to the Board.

This time I will be submitting a proposal of my own as well.

The mailing list is moderated, so you need to subscribe first. Just send a message containing the sole word 'subscribe' to membership-discuss-request@opensource.org.


Comments (0) Trackbacks (0)

J Aaron FarrHaskell Kata

Define the increasing list of prime numbers. I thought to try this while reading about Python generators. Read on for a solution and an explanation.

primes = sieve [2..] where
    sieve (p:ns) = p : sieve [n | n <- ns, n `mod` p > 0]

Here we are using the sieve of Eratosthenes. First, recall that Haskell is a non-strict language. In practice, Haskell runs lazily: calculation is delayed until you need to output a value or pick a branch in a conditional. There's no reason why a non-strict language needs to be lazy. (I find the alternative quite inspiring.) An advantage of laziness is that, you can define a non-terminating list without creating a non-terminating program.

The simplest way to define a non-terminating list is to use an arithmetic sequence construct [2..]. This creates the list of integers starting at 2 and heading off toward infinity. Although arithmetic sequences are built-in, we could easily define an equivalent construct:

from i = i : from (i + 1)

Then [i..] == from i for any number i.

Starting with [2..] we pass the list of numbers through a sieve. We apply the sieve to a list of numbers such that the first p is a prime and the rest ns contains all the numbers greater than p with all the multiples of primes less than p filtered out. We want sieve (p:ns) to return the list of all primes starting at p Since we're starting at p, its at the head (p :) of the list.

To get the primes after p, we do two things. First, we sift out the numbers in ns divisible by p. Then we apply the sieve to the result. Even though sieve recurses forever, it doesn't matter because we're lazy.

The last part is the sift [n | n <- ns, n `mod` p > 0]. It uses a comprehension. List comprehension are very intuitive. For the sift, we want the each number n in the list of numbers n <- ns such that n `mod` p > 0 or in other words we want to sift out all the numbers in ns that are divisible by p.

Dave BrondsemaSetting a portlet title in a JSF webapp

Here's how you can set a portlet title in a JSF webapp. This uses the "title" preference to define what the portlet title is, but you could easily code it to get the title in other ways.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC
  "-Sun Microsystems, Inc.DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
	...
	<lifecycle>
		<phase-listener>edu.cornerstone.jsf.util.PortletTitlePhaseListener</phase-listener>
	</lifecycle>
	...
package edu.cornerstone.jsf.util;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.portlet.PortletRequest;
import javax.portlet.RenderResponse;

public class PortletTitlePhaseListener implements PhaseListener {

	public void afterPhase(PhaseEvent event) {

	}

	public void beforePhase(PhaseEvent event) {
		RenderResponse response = (RenderResponse) event.getFacesContext()
				.getExternalContext().getResponse();
		PortletRequest request = (PortletRequest) event.getFacesContext()
				.getExternalContext().getRequest();
		String title = request.getPreferences().getValue("title", null);
		if (title != null) {
			response.setTitle(title);
		}
	}

	public PhaseId getPhaseId() {
		return PhaseId.RENDER_RESPONSE;
	}

}

David Reidplaying fair

I’ve finally come to the end of the line with my adventure into motherboards with nVidia chipsets. It’s been a source of annoyance ever since I built my current desktop, but the situation hasn’t improved and I’ve finally run out of patience. The straw that broke my back was the lack of motherboard temperature monitoring. Searching round the web there appears to be no open source support for the nVidia SMBus that is fitted to my motherboard so the various utilities that run under FreeBSD (mbmon is the one I’ve trusted for a while on other machines) won’t provide the information :-( I would reccomend anyone who is contemplating buying a motherboard with any nVidia chipset to abstain if they plan on running an open source operating system.
I really think it’s time that the hardware manafacturers stopped taking us all for a ride and started to play fair. If I buy their hardware they should at least be willing to make basic specifications and technical information available. nVidia seem to be about the worst company out there, so I won’t be buying any more of their hardware. I’m sure their bottom line won’t be affected by my stance, but if enough people did it then maybe they’d sit up and take notice. Like all large companies they only truly care about profits and until those are threatened they will continue doing business the same way.

Part of the problem is knowing which companies are better and willing to work with open source communities. There really should be mroe ifnormation about the positive experiences people have, but people have a tendancy to only write about the negatives online. I guess I’m as guilty as anyone for that!

My plan is to swap out my motherboard for one that isn’t infested with nVidia chipsets. AMD64, SATA raid and PCI-e are the basic requirements - oh and made by a manafacturuer who is open and fair allowing FreeBSD to fully support it :-)

Ask Bjørn HansenGetting ready for the MySQL User Conference - The Turbo Edition

I've been following the plethora of MySQL User Conference postings over at Planet MySQL. Woah, it looks like fun!

Sadly I am missing most of it this year. I don't have time to go the whole week, so I am only making it on Wednesday to give my talk Web Performance and Scalability with MySQL.

Usually I'd worry tons about my talk, but I think it'll be lots of fun. I've been tuning and fixing up my slides and I really like how it's turning out1. Hopefully the people coming to the talk will like it too! :-)

The talk description says "fast paced", and it's not kidding. I have enough content for three talks - but then people would just have too much time to read their email and that's not what they come to the conference for, right? Right?? :-)

Anyway, I'm looking forward to it a lot, except for the part about getting up early to get to the airport. (Vani promised to take me though, yay! :-) )

1 Of course it helps building on a popular talk I've given ~4 times before ...

Comments

Andrew SavoryMore Apple trouble

More problems with the laptop - a kernel panic when trying to suspend this morning:

panic(cpu 0 caller 0x0019CAEF): Unresolved kernel trap (CPU 0, Type 0=divide error)

I'll find out this afternoon if I have a "special" laptop or not, as there'll be another identical machine in the office to compare against.

Meanwhile, Gianugo reports that a lower-spec Macbook (1.83Ghz) builds Cocoon in 1m16s, which means mine is slower than it should be. Hrmm.

Diwaker GuptaBack

Wow. Its been only 10 days, but it seems like forever since I last wrote anything here. Infact, for the past week I’ve been so cut off from the outside world, missing my lunches, not following the news (no, not even Slashdot). But its all finally over, and hopefully I will catch up with my life in the next couple of days.

In unrelated ramblings, I was really shocked by the Pramod Mahajan shooting incident. Some brother he’s got. Why is there so much violence in this world?

,

Sanjiva WeerawaranaOSI looking for ways to create a membership

The Open Source Initiative (OSI), of which I'm a board member, is seeking to expand its reach by changing to a membership model. Do you have thoughts on how that could / should be done? Please come and help sort it out .. see the full email below.

The OSI is currently wholly governed by a set of "trustees" in the form of its board of directors. As directors have left, replacements have been selected by the remaining directors in order to keep the board fully staffed.  This model was both necessary and appropriate when the the organization was conceived and formed by the original board.

However, since then the world of open source has mushroomed far beyond what it was when the original board formed the OSI, and what was appropriate then is less so now.  In particular, the size of the OSI board is much too small to be representative of the world of open source as it now exists.

The objective of moving to a membership model is to broaden the "ownership" of the OSI to include the global community of people who are investing their lives in open source.  Those members then become the true trustees of the open source movement, which gives the OSI further legitimacy as representing their collective voice.

To that end, the OSI Board is soliciting proposals for a general membership structure, including specifics on how the Board should be constituted and elected.   Please email your thoughts to the membership-discuss@opensource.org mailing list, where Board Member Ken Coar will moderate and collect feedback to present to the Board.

You can send mail to membership-discuss-subscribe AT opensource.org to subscribe to the list.

Henri YandellNext England manager...

The reports that Scolari (has managed Brazil, Portugal, Real Madrid I think, amongst others) might be the next manager of England are hilarious. Ericsson was believable - Sweden shares a lot of footballing culture with England - but a to put someone versed in the Brazilian style in charge would be crazy. Sure Mourinho and Benitez have done very well, but it's not as if they use that many English players.

Personally, I think the manager is part of the team. Therefore he should qualify to appear for his country; not move from country to country. Coaches and experts can be hired etc, but a manager should be pulling on the three-lions as much as the players.

My vote would be for Bryan Robson. He's not had a great time at West Brom, but it's not been a bad job either. Robson with whomever else is needed as his coaches (mixing some latin influence in would be no bad thing). Face it, we'll most likely qualify for the World Cups and the European Championship each time they come around - what we need (and lacked in Portugal) is someone who can fire the squad and crowd up for the important games.

Sam RubyLogistics and teamwork

Amy Hoy's Atom feed is busted.

Amy uses Typo.  Typo uses builder

Builder had a quirk.  It did not automatically escape attributes.  This has been fixed.

Typo picks up builder via rails 1.1 through the magic of svn:externals.

The version of builder in svn for rails does did not have the fixChecked in by David Heinemeier Hansson.

So... how do we go about getting builder updated in Rails 1.1, picked up by Typo, and deployed by Amy?

Apache News Online24 April 2006 - Jakarta HttpComponents HttpCore 4.0-alpha1 Now Available

Jakarta HttpComponents HttpCore 4.0-alpha1 has been released. HttpCore provides a set of low level components, which can be used to build custom client and server side HTTP services.

This release represents a complete redesign of the Jakarta Commons HttpClient 3.x API, and a significant rewrite of the core HTTP components derived from the HttpClient 3.0 code base. HttpCore will form the foundation of the future releases of Jakarta HttpClient.

This release is primarily intended for API review and use in experimental projects. The HttpCore API is still deemed unstable, and it can still undergo significant changes based on the feedback from early adopters. Please check it out and let us know what you think.

Enjoy,

----

-- Jakarta HttpComponents Team

[ Category : Apache Jakarta ] PDFXML_RSS

Ian Holsmanmacbook problems

anybody else having issues with their power connection?

since yesterday the little magnetic connector has been refusing to show it’s green/orange light even though I have it plugged in. and I have to wiggle it for it to work.

About 5 minutes ago it refused to light up no matter how much wiggling I did.

oh.. it worked again..

I guess it is time to buy a 2nd power cord ‘just in case’

combined with the extreme heat this thing generates it is very frustrating. I can get the logic board replaced.. but I don’t have a week spare (no laptop == no money coming in)

I think I might have to buy a 2nd ‘spare’ laptop for these cases.. and no.. It won’t be a apple.

April 24, 2006

Rich BowenMore bikes

I stopped at a bike store on the way home and looked at the Gary Fisher Artemis and the Trek 7.3 FX. These are much more reasonably priced than things I looked at online, and, to my inexperienced eyes, looks just as good.

I’m sure that the most difficult part will simply be the discipline to do it.

Ask Bjørn Hansen17" MacBook cheaper than the 15"

apple macbook pro 17The new 17" PowerBook MacBook Pro is cheaper than a similarly configured 15".

The 17" is $300 more when they both are in their default configurations, but if you upgrade the processor in the 15" to 2.16GHz ($300) then it's the same. Upgrade the drive to the same class as the 17" and the 15" is $100 more.

I was glad to see that the 17" still has Firewire 800. Maybe it'll come back to the 15" in a later revision?

Comments

Brian McCallister(Ruby) Corrupted by JavaScript

I have been corrupted by JavaScript. Ruby really annoyed me when I could not just add properties and functions totally willy-nilly to instances. Ruby makes it easy to reopen classes, or even instances, but it is not so obvious how to do so without creating a new scope (and hence losing your closure).

The ~standared mechanism is to do something vicious like this:

foo = "hello"
msg = "woot!"
class<<foo; self; end.send(:attr_accessor, :bar)

class<<foo; self; end.send(:define_method, :woot) { puts msg }

foo.bar = 7
foo.woot # => "woot!"

Aside from the fact that this is a vicious hack, it relies on the fact that send lets you invoke private methods (define_method) on the singleton class (more recently going by the alias of eigenclass) of foo. This is pretty much a bug and a violation of the object. It's like object rape, or something.

A nicer way to do it, to my mind, is to use anonymous modules. The really nice part of using anonymous modules is that the Module constructor takes a block which is evaluated in the context of the new module, letting you legally call private methods, like define_method.

moo = "TOOW!"
foo.extend(Module.new { attr_accessor :baz })

foo.extend(Module.new { define_method(:toow) { puts moo }} )

foo.baz = 7
foo.toow # => "TOOW!"

moo = "MOOO!!"

foo.toow # => "MOOO!!"

This has the same effect and no nasty exploitation of the send bug!

Of course, with javascript, it is just...

foo = "woot"
foo.bar = 7
foo.stuff = function(a, b, c) { a * b * c }

I still like ruby more, though ;-)

Stephane BailliezDahab bombing

Al Capone restaurantApparently there was a bombing in Dahab a few hours ago around 7:15PM. Reports are pretty vague as of now. It has been reported that the “beduin” restaurant Al Capone was destroyed which means that at least the heart of the ‘tourist’ place has been hit and 7PM is normally one the busiest time. You can see the restaurant as well as the area in the entry I posted on December 18, 2005.

I’m waiting for some more info from people I have been hanging out with from mid-december to end of february.

Update: I received an email from Fred who is in Dahab right now (I have been doing rock climbing and freediving with him at Desert Divers) giving me news about the situation:

[…]There were 3 explosions last night at 7pm, designed to catch people escaping from one to another. The first was at Capone restaurant next to the bridge, then about 20 seconds later, outside the chinese restaurant on the other side, then about 10 seconds later, outside the Ghazala supermarket at the bottom of the little shopping street.

Very nasty and surreal situation. I don’t think the western media will be able to portray what really happened as it was very shocking.[…]

Stephane BailliezWhy Apple, Google or Microsoft were not created in France ?

There was an interesting article untitled “Pourquoi Apple, Google ou Microsoft ne sont pas nés en France ?” - Why Apple, Google or Microsoft were not created in France ? - in the La Tribune newspaper, a French newspaper specialized in Economy and Finance. The selection of companies in the title might be a little bit over the top and it probably would have more appropriate to mention names such as eBay, Skype, Red Hat, JBoss, MySQL, …

Philippe Hayat, CEO himself and professor at ESSEC, one of the top French business school, sums up that France cumulates 2 majors handicaps: “France is not able to transform a technological innovation into a profitable business, nor develop small businesses (PME)”.

Hardly breaking news for anyone actually having experience with the French way of doing “business“, but still.

Some other key areas for developing companies that have been mentioned in the article:

  • Soften labor laws (more flexible employment contracts)
  • Retain talents and wealth in France (Reform the ISF - wealth tax for people having wealth greater than 732 000€)
  • Rehabilitate the no pain, no gain culture (Do not force small businesses into the 35h law)

I doubt Marc Fleury, despite having graduated from Ecole Polytechnique (which is basically enough in France to set someone’s career as a top manager for the rest of his life without moving a finger) would have been able to create and develop JBoss Inc. in France as he did in the US. That would be interesting to hear his opinion.

A typical French organization on the other hand is ObjectWeb.

Indeed, despite initial innovation (ASM, JOnAS, JOTM, C-JDBC, …), it does not seem able to take off and get to the next step (adding more projects and members does not solve that but create the illusion). The Red Hat deal in 2003 did not boost at all the JOnAS community and visibility of ObjectWeb and they were evicted in profit of JBoss AS 2 weeks ago.

Some may argue that ObjectWeb lacks PR resources, but considering the prestigious and wealthy companies such as Bull, EDF, France Télécom, Thalès, etc.. that are part of the consortium, this argument does not hold water. So there is something else..or lack of.

As François Letellier mentioned in his ObjectWebCon 06 session (PDF), there is a paradox where members would like ObjectWeb to have more visibility, yet few of them communicate about it. On the business side, members expect actually assistance or more opportunities, yet they keep ObjectWeb out of the loop for any business opportunity confirming a somewhat narcissic attitude and lack of trust. This is clearly what needs to be solved first before adding new members and serve as a dumping ground for midly successful products and alliances. A spirit where pride, teamwork and realization are the core foundation of the community.

Good luck to create such an atmosphere as it’s not easy afterwards.

NB: I’m speaking for myself (and incidently a few others as I know a fair number of people who think alike)

Rodent of Unusual Size (Ken Coar)Flickering without lightning


Yet. Lightning no doubt ensued, though.
Updated: Monday, 24 April 2006 12:09 EDT

I finally got around to uploading the photographs I took of a storm front forming and beginning to march across the landscape. Not my best photos by any means, but I couldn't let something this beautiful just go by when I had my camera in my hands. I really didn't do it justice, so use your imagination.

[One picture in the middle of the set]
Comments (0) Trackbacks (0)

Ted HustedWhat to Do if Your Code Has Few, If Any Tests?

  • What to Do if Your Code Has Few, If Any Tests?
  • Agitar Webinar with Ted Husted
  • 7 a.m. and 5 p.m. PST on Wednesday 26 April

Everyone has worked on a code base that seems to work, but has almost no test assets. Maybe you?ve had some system-level tests or functional demos that provide a quick ?health check.? But you have nothing to validate functionality or test the corner cases. As a developer in this situation, you?re flying blind. That goes double if your code is a framework or application componentry.

Ted Husted, member of the Apache Struts development team, had exactly this problem with the open source Struts framework. He?ll be presenting a webinar on his experiences with using Agitar to investigate the Struts 1.2 code base and automatically create a series of unit tests. The presentation will provide an overview of what a typical developer would experience, how they need to think about exploratory unit testing, and how to make the most quality progress with a body of code that has few if any tests.

Registration for the 7 a.m. PST webinar, or the 5 p.m. PST one, is required.

NOTE: Unlike Struts, the Agitator is not a free open source tool. The Agitator is intended for large-scale Java projects who would like to implement an automated developer testing program.

For more information about Agitar Software, visit the www.Agitar.com website

Rich BowenBike to work

Long ago, I determined that I would bike to work every day - or at least when it’s not raining.

I did this a total of twice before wimping out. The main reason I wimped out was that I had a cheap bike that didn’t gear properly, and made it extremely hard to bike efficiently.

Fast-forward about 6 or 7 years, and I’m considering it again. As I likely mentioned before, I’m looking for fuel-saving alternatives, without actually having to get rid of my gas-guzzling Jeep, which Sarah and I both love, but which we can’t afford to drive at $3 per gallon. And, since it’s paid for, it would be an enormous financial strain to trade it in and pick up a car payment.

I briefly considered a motorcycle, but the more I think about it, the more it frightens me. Yes, I expect it would be a lot of fun. But it would only take one careless move to break bone and bank.

So I’m considering investing in a real quality bike that I can ride to work 2-3 days a week. This will save $100+ a month in gas, and get me in much better shape into the bargain. It’s only 12 miles one way, so presumably I can do it in 30 minutes or less once I get in shape.

I’ve looked at several different bikes, all of which are considerably more expensive than I expected. But if it really saves me that much in gas, and if I can really discipline myself to do this 2-3 days a week, then it would more than pay for itself in savings and health benefits.

Any bikers out there willing to recommend a particular model for a 12-mile each way jaunt to work? I guess I was willing to spend about $2k on a motorcycle, so I’m willing to spend perhaps half that on a bike if it’s good enough to actually help me stay disciplined to do this thing.

Addendum:

My brother-in-law recommended the Koga-Miyata company as a good one to look at, and the Randonneur looked VERY sweet, if rather pricey. Don’t know if they are available in the US.

David Reidmore adventures from the garden

As I’ve been taking a fair few pictures recently I’ve found that the easiest way for me to start “sifting” them is to load them onto the machine and run a quick slideshow. It’s simple, quick and allows me to start getting a feeling for which pictures are worth keeping. EOG, the graphics viewer that comes with Gnome is fine and does a nice slideshow, but it doesn’t handle the EXIF headers correctly. This is a shame as the camera sets the orientation correctly in the headers and it wouldn’t be too hard for EOG to detect the setting and rotate the pictures correctly so I could simply “open and view”. f-Spot did this but it’s a mono application and so won’t run on my desktop machine. Additionally it also created a duplicate of every picture which was mildly annoying and wasteful of my precious disk space on the laptop.

EOG refused to run on my AMD64 desktop under Gnome 2.12, but after an upgrade to 2.14 it’s happy and runs nicely. It still doesn’t rotate the images for me and also doesn’t change the orientation when I save an image after using one of it’s “rotate this way” buttons. This is really annoying and strikes me as being very wrong at worst and inconsistent at best.

2.14 corrects a few of the 64-bit problems that existed under 2.12 and seems slightly faster and smoother overall.

Matthew LanghamNo ApacheCon for me

Unfortunately I've had to withdraw my ApacheCon Europe session. Due to family scheduling conflicts, it turns out that we would be leaving our 3 kids on their own for a week. And we decided that wasn't such a cool idea after all. I'm sure it will be great conference and hopefully I'll get to go to the next one.

Brian McCallisterRuby Orchestration Language Fun

After the Silicon Valley Ruby Conference I wanted to hack some at a declarative language for web service orchestration. Tests pass, but the web service bindings don't exist yet =( Right now it can be used as a nice declarative process for... er, ruby?

class TestProcess < Test::Unit::TestCase
  
  def test_example
    p = Processor::process :wombats do
      receive :message

      forward :message, :to => :provisioning, 
                        :save_reply => :provision_response
            
      forward :message, :to => :payroll
      
      if_test( proc { provision_response =~ /example/ } ) do
        transform :message, :with => :some_transformer,
                            :save_in => :transformed_message

        forward :transformed_message, :to => :server_group    
      end
                            
      forward :provision_response, :to => :helpdesk
    end    

The rest of the test case just mocks out the services needed and tests that the things works. Not as exciting but here it is for completeness =)

  
    p.services[:provisioning] = lambda do |process, msg| 
      @provision_msg = msg 
      assert process.expecting_response?
      "address@example.com"
    end
    
    p.services[:payroll] = lambda do |process, msg|
      @payroll_msg = msg
    end
    
    p.services[:server_group] = lambda do |process, msg| 
      @server_group_msg = msg
    end
    
    p.services[:helpdesk] = lambda do |process, msg|
      process.suspend
    end
    
    msg = OpenStruct.new
    
    p.start msg
    
    assert_equal @provision_msg, msg    
    assert_equal @payroll_msg, msg
    assert_equal @server_group_msg, "address@example.com"
    assert_equal p.transformed_msg, "address@example.com"
    assert p.suspended?
    
    p.resume "back from helpdesk"
    
    assert p.completed?
  end
end

For the most part I am kind of happy with it. The nasty wart of

if_test( proc { provision_response =~ /example/ } ) do
  transform :message, :with => :some_transformer,
                      :save_in => :transformed_message

  forward :transformed_message, :to => :server_group    
end

annoys me. It's needed to lazily evaluate the construct, using a real if there evaluates it at the wrong time. Astute code readers will also notice I am not testing the transform. Haven't done that yet -- will probably remove it as a first class concept if I do anything more with the code, a transform is just a local service, and services are all wrapped in ruby methods, so instead of importing the service, just provide the transform and voila, your toast is burnt.

Wish ruby continuations were migratable/serializable.

Paul Quernahttpd-2.2.2

Apache HTTP 2.2.2 is almost out. You can download and test it from here. Hopefully we will get the offical release out by mid week, after it has ran on www.apache.org for another day without problems.

Sam RubyAdding Atom support to PlanetPlanet

This weekend’s recreational programming project involved PlanetPlanet and ensuring that there is adequate support for Atom.  And there’s nothing like live data to help identify integration issues.

It turns out that upgrading to the latest Feed Parser wasn’t enough.  PlanetPlanet ignored basic information like title_detail.type.  This turned out to be relatively straightforward to add, and the result passes Phil’s tests.

Internationalization and relative URIs required no effort on my part — PlanetPlanet and the Universal Feed Parser already had these areas covered.

Along the way, I added support for Autodiscovery and the Common Feed Icon.  And produced a valid Atom feed. And adopted and adapted Planet Apache's template and style for my own use.

I then turned to XHTML support.  In order to have any hope of passing Jacques' Torture Tests, any river of news style aggregator will have to first convert all of its input into well formed XML.  Thank’s to Aaron Swartz's help, Planet Intertwingly is currently well formed, if not yet completely valid.

More information: code, results.

Ian HolsmanFruits, vegetables not as nutritious as 50 years ago

as a followup to Food additive ‘enhancements’ they add to your staples

I saw this on Jamie Zawinski’s blog today.

from the Seattle Post-Intelligencer

Donald Davis, a biochemist at the University of Texas, said that of 13 major nutrients in fruits and vegetables tracked by the Agriculture Department from 1950 to 1999, six showed noticeable declines—protein, calcium, phosphorus, iron, riboflavin and vitamin C. The declines ranged from 6 percent for protein, 15 percent for iron, 20 percent for vitamin C, and 38 percent for riboflavin.

and

Davis, who discussed his findings at a recent meeting of the American Association for the Advancement of Science meeting in St. Louis, suspects the trend in agriculture toward encouraging crops that grow the fastest and biggest is a reason for the decline. The past five decades have been marked by the “Green Revolution,” which has seen a marked increase in U.S. production and yields as farmers have turned to the fastest-growing and greatest-producing plants.

another ‘present’ we are leaving our children.

don’t get me wrong.. I’m not even a vegetarian and love eating a big mac.. but this stuff is scary.

April 23, 2006

Dan DiephouseDynamic Web Services with Groovy and XFire

Sorry to those of you that read, the XFire blog, but I thought this was cool enough to justify a cross post:

Guillaume Alleon has been doing some work on integrating Groovy and XFire. Today he announced the release of Groovy Web Services on the XFire mailing list:

I am pleased to announce the second release (aka 0.2) of GroovySOAP.

There’s a WIKI page for it at http://docs.codehaus.org/display/GROOVY/Groovy+SOAP

It’s still is the early stages but you are now able to build a web service from a Groovy Object

I especially like the client example:

import groovy.net.groovysoap.SoapServer

def proxy = new SoapClient(”http://localhost:6980/MathServiceInterface?wsdl”)

def result = proxy.add(1.0, 2.0)
assert (result == 3.0)

result = proxy.square(3.0)
assert (result == 9.0)

 No stub generation, just dynamically typed goodness! Very cool!

Ugo CeiDandelions

Did some nice macro shots today. Here’s one of the best, but there weren’t many good-looking flowers, except for dandelions.

Dandelion

Nóirín PlunkettBarbeques and Morons

I was going to write about the barbeque I had yesterday, the two new Irish girls I met who’re living downstairs for the next semester, and how lovely the weather’s been.

But it’s gotten cloudy, and I’m majorly pissed off at people who think degrading sexist remarks are ok to make, and people who would rather tell me to shut up for pulling someone up on it, than tell the person making the remarks to shut up. It’s not right, or reasonable. And “but I’m a man” isn’t an excuse. SAGE-IE is overwhelmingly male-dominated, but has a culture that marginalises the morons who make sexist remarks, rather than letting those morons marginalise the women who contribute.

That said - not all my readers are sexist idiots, and not all my readers are idiots who think it’s ok to let other idiots be sexist, as long as they’re not doing it themselves (hint: it’s not). So here’s the recipe for the super-simple, super-tasty ganache I made yesterday:

Boil 250ml cream (ideally double), by putting it in the microwave on high for approx 3 mins. Make sure it’s in a microwave-safe bowl, that’s plenty big enough (mine holds just over a pint, and was barely big enough). Alternatively, boil it in a heavy saucepan, on the hob. When it’s boiled, take it off the heat, or out of the microwave (carefully, the bowl will be hot!).

Add 300g dark (70%) chocolate, broken into small pieces. If you can find them, use chocolate chips instead - breaking it up is a serious pain in the fingers! Leave it to stand for five minutes - don’t worry about the cream getting a skin, just wait. Once your five minutes are done, slowly and carefully mix it all up, incorporating the milk cream into the chocolate until you have a wonderfully smooth, rich chocolate sauce.

Serve warm, by dipping strawberries in and enjoying :)