- Jive Software: Clearspace Public Beta
We’re in beta. Rock.
(categories: clearspace collaboration wikis blogs blogging discussions forums beta huzzah )
Category Archives: Uncategorized
Links: 1-29-2007
- Zimbra – Blog – REST update
Cool REST / URL / machine tag stuff from zimbra.
(categories: rest machinetags zimbra api ) - Cross-domain with Flash 8
Cross domain XMLHttpRequests with Flash.
(categories: flash ajax xml crossdomain ) - Google Docs & Spreadsheets Help Center – How can I add comments to a document?
Inline comments on Google Docs. Suh-weet.
(categories: commenting comments documents inline ui design google ) - Knowing.NET – Software Productivity: The Only Two Things That Matter
Quote: “… there are only two things that we know to be inherently highly productive: well-treated talented programmers and iterative development incorporating client feedback”
(categories: engineering productivity programming ) - Gmail: Help Center – How do I use Advanced Search?
Pseudo machine tags that gmail supports for search. Includes from:, to:, subject: label:, in:, after:, etc.
(categories: tagging tags machinetags tagsearch search gmail ) - User:alex : Alex Bosworth’s Weblog : What are Machine Tags? – SWiK
More thoughts on machine tags.
(categories: machinetags tagging tags gmail del.icio.us ) - Daring Fireball: The Fish Rots From the Head
Quote: “Now that it?s (Adobe) run by a sales guy, it has turned into a company that seems more interested in the sales and marketing of its products than in the products themselves.”
(categories: leadership engineering marketing sales business adobe ) - Wired News: How Yahoo Blew It
Quote: “… At Yahoo, the marketers rule, and at Google the engineers rule. And for that, Yahoo is finally paying the price.”
(categories: business yahoo google leadership marketing engineering )
Links: 1-26-2007
- Anothr: Skype RSS Robot
Another (pun intended) instant messaging based RSS reader.
(categories: rss im tools bot agents robots notification feeds ) - Flickr: Flickr API
Quote: “Machine tags are tags that use a special syntax to define extra information about a tag.”
(categories: tagging tags metadata machinetags flickr cool for:billjive for:barrytallis ) - Flickr Photo Download: HTTP Headers & Status Codes
All that etag and if-none-match stuff I bored you with a couple weeks ago? Here it is in png format.
(categories: http etag rest 404 500 401 304 405 200 204 412 201 )
Links: 1-20-2007
- Prototype Javascript Library easing the development of dynamic web applications
New spanky looking site for prototype including (gasp!) documentation.
(categories: prototype javascript documentation ) - NewsGator – Enterprise RSS channels your information streams
Interesting that email is getting attacked by both IM (collaboration) and RSS (news). If you use IM and RSS, what do you need email for?
(categories: enterprise rss emailsucks ) - AlphaBaby
Keyboarding banging program for small kids that like to play with the keyboard but usually do nothing but rename the files on your desktop.
(categories: keyboardbanger kids mac games alphababy )
Links: 1-17-2007
- joshua’s blog: lessons learned: apache etags
ETags don’t work in a clustered Apache environment unless you mod the default Apache configuration file.
(categories: etag caching apache hosting http ) - Working around IE7s prompt bug, er feature
Unbelievable. JavaScript prompt is gone from IE7.
(categories: iesucksballs javascript prompt ie7 )
Links: 1-15-2007
- Web Worker Daily » Blog Archive How to Screw Up An Email Negotiation «
Quote: “Email?s strength is how it leaves long pauses between complete misunderstandings, allowing said misunderstandings to fester and grow until they kill the discussions outright.”
(categories: emailsucks useIM email communication workplace rules business ) - Blogging Roller: Generating JSON for your Roller blog
Create new template… learn Velocity… etc. etc. Want to generate JSON in a Clearspace blog? Append /json to any of the feeds in the system. Done.
(categories: json clearspace roller feeds )
Links: 1-13-2007
- Microsoft takes email design back 5 years – Campaign Monitor Blog
I spent a lot of time at my last job working on consumer email, Notes was always the worst. I think the HTML formatting in Outlook 2007 is going to be worse than Notes and that’s really saying something.
(categories: outlook 2007 email marketing css html )
Links: 1-9-2007
- Dare Obasanjo aka Carnage4Life – Updated: XML Has Too Many Architecture Astronauts
JSON is a better fit for Web services that power Web mashups and AJAX widgets due to the fact that it is essentially serialized Javascript objects which makes it fit better client side scripting which is primarily done in Javascript.
(categories: json javascript client xml data browser ) - Using prototype.js v1.5.0
Developer notes for Prototype 1.5 released.
(categories: prototype documentation javascript ) - Ajaxian » Browser Cache Usage: Only 40-60%?
Quote: “… 40-60% of Yahoo!?s users have an empty cache experience and ~20% of all page views are done with an empty cache. “
(categories: caching cache browser http performance )
Links: 1-3-2007
OGNL: getter and setter types must match
Yesterday I ran into a interesting bug with the WebWork application I spend my waking hours working on, at least initially I thought it was a WebWork bug. I had a WebWork action with a getter / setter combination that looked like this:
public void setUser(String username) { ... } public User getUser() { ... }
The thinking here was that if I invoked the action using a request like this:
/myaction.jspa?user=aaron
then the action would look up the user based on the given username and populate a User object, which would then be returned by the getUser() method (populating the user instance using a custom IOC interceptor would have also worked but would have been overkill in this particular case). The problem was that the setUser(String username) method was never getting called. After checking and double checking the method names and the parameter being passed, I googled around and found this email thread which discusses the very issue, saying that the problem was in fact not with WebWork, nor with it’s underlying expression engine OGNL, but rather the ‘Java reflection API semantics’. In the thread, Laurie Harper, a Struts committer, says that the:
… restriction (where getter and setter have to be of the same type) comes from the Java relection API semantics, not OGNL. A property can only have one type, so it makes sense that the getter and setter for a JavaBean property must agree on that type.
I didn’t doubt what he said, but I needed to see it with my own eyes, so I dove into the deep sea that is OGNL, reflection and JavaBeans. First I read the JavaBeans specification, which seems to back up his story: page 55 of the PDF says this:
By default, we use design patterns to locate properties by looking for methods of the form:
public <PropertyType> get<PropertyName>();
public void set<PropertyName>(<PropertyType> a);
If we discover a matching pair of “get<PropertyName>†and “set<PropertyName>†methods
that take and return the same type, then we regard these methods as defining a read-write property whose name will be “<propertyName>â€.
So the JavaBeans specification requires the getter and setter to be of the same type, but how does OGNL figure out that the I’m trying to trick it with two different types?
I found the answer by digging pretty deep: the OgnlRuntime class looks up a PropertyDescriptor for the given class (in my case the WebWork action) and then calls the getWriteMethod() on the PropertyDescriptor instance. The documentation for that method mentions that it may return null if the property can’t be written but the documentation doesn’t mention why that might happen. If you grab the source for the PropertyDescriptor class, you’ll see that the getWriteMethod() method invokes a private method findPropertyType(), which is where I finally found the culprit. It compares the return type of the getter and the parameter type of the setter and throws an IntrospectionException if the types don’t match (line 602), which the getWriteMethod() catches and then returns null, which leaves the OgnlRuntime with no method to call.
So it sounds to me like this is really a JavaBean specification requirement, not a Java reflection API semantic, but then I guess it’s all just semantics anyway right?