December 09, 2004
New Weblog
My weblog has moved. You may now find it here at netzooid.com. The new feed.December 06, 2004
Open Xource Antipatterns
OpenXource has rcently opened its doors (virtually). It is the creation of Bob McWhirter of The Codehaus fame. They provide "opensource strategy consultation and assistance with fostering communities around client's commercial offerings." Their Crossings articles are a great analysis whats right and wrong with companies in the world of open source. My favorites are the anti-patterns. For instance, the Ignore Established Tools pattern (a.k.a. "That's not how we do it around here."):
A firm decides that opening one of its products would benefit the community and also provide a nice marketing boost from the resulting press releases. The executives sign off on the initiative. The legal department scrubs the code and applies a useful license. The engineering department removes offensive comments from the code. And eventually, it is dropped into CVS and a press announcement is flung far and wide. After the initial announcement, traffic to the project site spikes, and then falls off, leaving a ghost town.
We could probably all name a company which we thought fit this bill. Luckily organizations such as Apache and The Codehaus have helped established a standard for participation in the open-source world. Yet, many projects fail when trying to establish communities or establish a business around opensource. Most organizations don't have any expertise on how to open-source and how to particpate in the open-source world. Hopefully Bob and OX will help them achieve their goals while also benefitting the larger community.
Blue Stripes and the Berlin Wall
The Morning News has a great photo article called The Lost Border. Its an interview with photographer Brian Rose and includes several great pictures of the wall in Germany before it went down as well as some from afterward. He mentions the stark difference between East and West Germany. When I was in Berlin I was surprised that you could still tell a difference somewhat (although thats rapidly changing). I was also surprised how little of the Berlin wall was actually left.
If you do nothing else, check out this photo taken in 1987. That blue and black striped sweater would be so hip today....
December 05, 2004
Tune Tag Fixes
There is now a new Tune Tag update which actually works since Amazon broke things when they changed their schema. Download here. For those who don't know what Tune Tag is:Tune Tag is a Windows iTunes add-on which can:
- Download artwork for you automatically from amazon.
- Link you directly to amazon.com for the album of the curreont song on (even those on internet radio!)
- Allow you to tag songs (particularly those on internet radio) via del.icio.us to remember them later. See this tag for some examples that I've book marked.
Delegates in Java
I've been using C# to do various things (like Tune Tag - due for an update) and I really like the language features that it offers. One of the ones I miss most in java is delegates. Delegates make it easy to listen for events. Instead of having to implement an interface, I can just add my method which listens for the event to the delegate. An example:
public delegate void Logger(string msg);
public void addDelegate()
{
FigureHandler += this.myLoggerMethod;
}
public void myLoggerMethod(String msg)
{
// do some logging!
}
However, implementing delegates in java is a little bit unwieldy. Until now....
Beehive makes it easy to do delegate style things in Java with their "events" concept. I've used it to make an asynchronous web service client. In Beehive there is the concept of a control. Basically it is just a component of some sort. On the control interface you can declare events. I have a EndInvokeCallback event (full source here:
@EventSet
public interface EndInvokeCallback
{
public void endInvoke( XmlObject[] response, XmlObject[] responseHeaders );
public void handleFault( XFireFault fault );
}
The "@EventSet" annotation means simply that its an event that a control can listen for. Then, when I'm creating a client I just add a method and declare an "@EventHandler" which signifies that I want to listen for the event:
@EventHandler(field="client",eventSet=XFireClientControl.EndInvokeCallback.class,eventName="endInvoke")
public void endInvoke( XmlObject[] response, XmlObject[] responseHeaders )
{
// do something
}
Beehive takes care of the rest for you through some code generation. There's a lot more in the Beehive distribution which is pretty cool, so take a look. You can find information about the XFire Beehive client control here.