Planet Apache

December 15, 2008

Carlos SanchezTravel: Los Angeles - Madrid - Cairo

Very busy last weeks, and unfortunately had to postpone the blog entries about Amazon and other stuff we are working on (very cool if you have to ask me ;) ) but it will come, after well deserved vacations that are taking me from Los Angeles to Madrid to Egypt, three continents in two days, not a bad record. After that I will spend around a week in Madrid before going to Coruña for New Year.

Also I didn't find the time to blog about ApacheCON US in New Orleans, where I talked about Q4E and Eclipse IAM, Maven Integration for Eclipse. It was a blast, in a great place in downtown, walking distance from the french quarter, Bourbon street, Frenchmen,  and all the interesting places to see. We helped rebuild a fence for a house damaged during Katrina, and enjoyed Sunday walking around and taking pictures.

Greenwood Cemetery Garden District Saint Louis Cathedral Jackson square panorama Loyola university tram

More New Orleans pictures

Justin MasonLinks for 2008-12-15

J. Chris AndersonTemplate Functions

There’s a feature coming down the CouchDB pipeline (no code yet, still planning) that will allow developers to generate HTML (or other mime-type) values from JSON documents. The output must run independently of any session information so it can be completely cacheable based on document ETag.

The function will receive a document and an argument and return an object with the response body and mime-type information. CouchDB will handle the bookkeeping of managing ETags etc.

This is cool because it will make serving Atom feeds and other non-JSON document representations simpler and more efficient. It will also be easier to build search-accessible web documents (as right now Google etc aren’t really into running your Ajax code to see what the app does, before they can index it).

Anyway, pretty excited about the possibilities this opens up for unobtrusive CouchDB web-apps. I’m sure I’ll keep you posted as things develop.

In other news – it really is icy and snowy in Portland this week. Kinda fun (and I found a new pizza joint I can walk to for lunch) so plus one for geography I guess.

Rahul AkolkarRuby in a chair

Congratulations Sam!

Its an exciting time to be there :-)

Apache Wicket Community NewsGerman Wicket book

Just like most open source communities, Wicket is a global community. And with global communities come books in various languages. Wicket in Action is the third published Wicket book in english, and there has been one in chinese. Today I found the announcement of a german Wicket book which is simply called “Wicket“. Its subtitle [...]

Vikas MayurGetting a breather ...

My cousin will be in India this week. I will also be going home for just over a week. This would be a chance to meet all of my family members together after a period of over 3 years.

Apache News Online15 December 2008 - Apache Cayenne 3.0M5 Now Available

Milestone 5 marks another set of major achievements for the Apache Cayenne ORM library. A successful GSoC project resulted in lots of very useful improvements to the Cayenne Modeler. It is looking better than ever, with time saving features such as autocomplete, copy/paste, syntax colouring and much more. Cayenne core has had a host of bug fixes to ROP and EJBQL in particular, but also fixes and new features across many areas. Database reverse engineering is also considerably improved.

As always, continue to use Cayenne 2 if you want a stable release with a proven history, however Cayenne 3 is in use in a number of live commercial deployments with great success and stability. As we getting closer to the final 3.0 release, there aren't any API changes in 3.0M5, so upgrading from 3.0M4 should be painless. We recommend all users of 3.0 milestones upgrade to this release. If you are upgrading from 2.x, then please read the release notes (Guide to 3.0).

M5 Release notes

Download

Please send us your feedback, bug reports and feature requests. We've enjoyed creating this release and we hope it helps you create exciting websites, applications and tools.

[ Category : Apache Cayenne ] PDFXML_RSS

Martijn DashorstTapestry 5 has been released

It’s taken a while (3 years?) but finally the Tapestry community has elected to release Tapestry 5 to the general public. Congratulations to all involved.

Edward J. YoonType in my name in Google

His name is wesley gibson. (Wanted 2008) And, My name is Edward J. Yoon (윤진석)
According to google search engine, my name is related with NHN.

I'm write under various names (e.g. edward, udanax, 윤진석,..., etc), However, Since I have no activities on local communities, My korean name (윤진석) and ID (Udanax) are dying out so I guess the information of the number of times search query happened used for related keywords.

Sam RubyCo-Chair HTML WG

Michael(tm) Smith: effective January 5, there will be a change in the leadership for the HTML Working Group. Sam Ruby has been appointed as a new co-chair by the W3C Director, Tim Berners-Lee, and will be joining Chris Wilson in that role next month; at that time, I’ll be returning to my previous role as the W3C staff contact for the group.

While my primary focus will be inward, let me first get something out of the way: I’ve talked to Steve Holbrook (IBM’s AC representative) and Roland Merrick (XHTML2 co-chair) and each of us personally would like to see the XHTML2 and HTML groups brought together or at least the overlaps removed.

I’m not overly concerned about events, access keys, or even an additional forms model.  If these efforts seek to address different requirements, they can attract their own constituencies.  Or not.  In any case, the web is a big place.

No, my concern is the active development of two incompatible vocabularies being served with the same media type and being defined in the same XML namespace.  A difference in DOCTYPE does not address my concern.

Edward J. YoonGoogle adds 'promote' and 'remove' buttons to search results

Google adds 'promote' and 'remove' buttons to search results. The commenting is also possible. I wild guess that it may be a system for collecting vote, which can be used for many kinds of application (e.g. find an dead links, personalized applications, ..., etc).

David ReidOnline Prints

Does anyone have any experiences with getting prints made from pictures on demand using any of the online services?

I’m looking for a service that can accept orders via a website from a number of people, all with different addresses and so on.

Oh, and the prints should be of a reasonable quality :-)

Bertrand DelacretazA Sling-based blog in 46 lines of code


That’s the topic of my first post at dev.day.com. It’s a simple introduction to the “take the J out of JCR” Sling features.

      

Bernd FondermannSpeaking at JAX'09

At the JAX'09 conference in Mainz end of April next year I'll be giving three talks on the whole, wow. One will be about Apache Lucene. The second will be a short talk about Apache Hadoop, a project which will be hard to fit into 30 minutes.

And I'm especially excited to be able to speak about XMPP again, after the FastFeathertalk I gave at ApacheCon EU 08.

By the way, ApacheCon EU 09 is one month before the JAX and still nothing to be heard about the accepted sessions...

Brian McCallisterReal World Haskell, for Jon

A while back I told Jon that if he wrote something useful with Haskell I'd learn it. He proceeded to do something usful with it, so I have started working my way through the (excellent, so far) Real World Haskell.

So far, I like the language, but I haven't done anything useful with it.

December 14, 2008

Trustin Lee중고 NAS 내놓습니다.

고가라 그런지 팔릴 생각을 안하는군요. 어쩔 수 없이 블로그에 올리게 되었네요. 양해 부탁합니다. ㅡㅡ;

제품은 2 주 밖에 사용하지 않은 Netgear ReadyNAS NV+ RND4250 1TB (500GB x 2) 입니다. 기업용 고내구성 시게이트 500GB 하드 디스크 두 개가 기본 장착되어 있습니다. 동급 최고의 성능을 자랑하는 제품으로 개인 사정상 아쉽게 내놓게 되었습니다. 상태는 아주 깨끗합니다.

간단히 말씀드리면 랜 포트에 연결해서 사용하는 파일 서버지만, 그 외에도 다양한 기능을 내장하고 있습니다. 자세한 상품 정보는 다나와 에서 확인하시고, 구매를 원하시는 분들께서는 옥션 상품 페이지 에서 입찰 또는 즉시 구매해 주시면 감사하겠습니다.

Adam JackiPhone Dev Camp (Boulder)

I went to iPhone Dev Camp in Boulder yesterday.

I’d not been to anything like this before, and I really didn’t know what to expect. I was apprehensive and concerned that I was way too much of a Mac newbie (let alone iPhone newbie) to be able to keep up, and that I had no right being in that room. I was more a of newbie than most, but the group was patient/open & welcoming, the presentations clear, and I found the “day of awesomeness” so awesome that I ended up rearranging firm plans to allow me to stay all day. I’d recommend this event to newcomers and experts alike.

Joe Pezzillo gave a “Hello World” introduction talk (three small versions of the same app in 1 hour) to give folks an introduction to Xcode, the iPhone SDK, and working with each. Okay, so I already felt comfortable that I knew enough to participate in the day, and went to the “performance tools” talk by Kendall Gelner. There I was quickly brought back down to earth as I couldn’t keep up, but I was at least exposed to what tools to use for what problem solving, and hopefully the things learned will return when I need them.

Kendall’s presentation on how to use the Interface Builder to created a TableViewCell UI using the graphical interface builder was practical and immediately useful. I was able to wire this technique into my application while watching him on the big screen, (monkey see/monkey do), and I was done as the presentation was over. I’d found this Interface Builder tutorial useful in the past, but watching usage live & interactive was excellent. Thank you Kendall!

I was worried I was lowering the IO in the room when I asked a lot of my memory management questions during Joe Pezzillo’s talk on the topic, but I do think it was valuable to cover for a number of the others (this simple things has some complications.) I understood the concepts of an incrementing/decrementing a “retain counter” but hadn’t picked up on autorelease draining the pool at the end of a run loop cycle. That mental picture really helps.

Kendall’s talk on debugging was more than just informative, it was fun. Having the debugger talk values using the voice synthesizer (log, ‘ignore’ to not stop, ‘talk’ the values) was both ‘annoying’ but fun, and possibly useful; one could watch the app run quickly & know values/changes w/o having to stop/view the console log. The technique of break/do something/ignore [to log values & keep going] was valuable, and “po” (print object) useful.

Kenji Hollis spoke on tools for agile development, and it was good to see the openness to sharing general tips/tricks/tools. Maybe this is something I can contribute at future camps.

Kendall’s sqlite3 presentation was a good basic introduction although I had to leave before it was running. I suspect that the “copy database from root to a writable copy in documents” was the cause of the problem (i.e. an empty DB had already been copied) ‘cos I’ve hit problems like this before. Otherwise the presentation was much nicer (simpler) than the SQLiteBooks sample on the iPhone Dev Center.

Throughout the day I picked up as much from seeing how other folks used and configured their development environment, and worked with the tools, as I did from the talks. A double whammy of value. That, and the small (sometimes throwaway) comments that just made things click. Properties w/ retain automatically “release old, retain new”, I’d not picked up from the docs. Valuable. Debug log @(unsigned int)[self retainCount]@, simple but valuable. Remove your code from what it is a delegate for [say in viewWillDisappear] to reduce risks of unintentional circular retains. Autorelease pools are pools of pointers, not a chunk of memory; one could retain something in a pool, yet release that pool, and it is still valid. Put a global break point on objc_exception_throw to get stack traces on exceptions. Things like __weak are Mac not iPhone (so be careful when porting or reviewing code from Mac for iPhone.) There were more…

I had to leave before the random Q&A session which I really wish I could have stayed for. If anybody reading this was able to stay for that please let me know what I missed.

I’d really like to thank all of the (roughly 15-20) participants of this day for their time, their patience, their expertise and their enthusiasm. Joe Pezzillo (who stayed late to help us with core animations) and Kendall Gelner presented the most, and for that I am very grateful & thank them. Thanks also to Danny Newman and TechStars for organizing/hosting.

I’ll be going to coming events in the hope that by then I can pay back some of what I gained. I also know I’ll learn something & meet some good people.

David N. Weltonlangpop update

One of the things I have noticed running http://www.langpop.com is that, pulling data from different sources, the odds are surprisingly hight that at any given point in time, one of the sources will be out of wack, often in a subtle way that's hard to see in the results. For instance, in the December 2nd run, the Amazon results were a bit wonky, and Delicious has been gradually falling out of the Yahoo search results (weird, that). I decided to go with screen scraping for Delicious, even though, frustratingly, Delicious can't tell the difference between C, C++ and C#, so while we wait and hope that that gets fixed, those languages are all going to show nearly identical results. I have updated the site.

Nick KewApache HTTPD 2.2.11


The latest and greatest release of the Apache webserver is now available for download. Thanks to Rüdiger for rolling it.

Version 2.2.11 is a minor update on its predecessor 2.2.10.  There are no new security fixes.  There are some very minor new features that will be of interest to a minority of users.  For developers, the mod_rewrite API is made official: this effectively corrects an oversight in earlier versions.  But mostly, it fixes a moderate number of bugs.

If you’re responsible for an Apache server, and use Apache’s own sources rather than a third-party package, you should at least visit the website and take a look at the change log, so you can make an informed decision whether you need the upgrade.

      

Rob DaviesProgress FUSE Open Source Team still Growing ...

Its been a hectic couple of months as we try and find our feet in Progress - but the Progress folks have done their best to make us feel part of their family.  Progress has some great SOA technology, and we've been having some good cross-pollination of ideas with the Sonic folks and pulling together development plans so we can leverage Apama, Actional, Mindreef etc. We've been growing the number

Ted Husted

Profiling the Four Quadrants of Highly Effective Toltecs

As is our habit, VanDamme Associates introduced its latest bundle of newbies to a team building workshop provided by Unlmited Coaching Solutions. In preparation for the training, we were asked to answer a long (and annoying) series of questions in an online survey, which all took the format.

Select the one phase that best describes you at work.

  • I like challenges.
  • I like interacting with people.
  • I tend to be relaxed and easy going.
  • I tend to have high standards.

When training day came around, the delightful woman leading the session presented us with the result of our surveys. The training had headlined a self-actualization model called "The Four Agreements", but, as it turns out, the training also covered our Dominance, Influence, Steadiness, and Conscientiousness, or DiSC, behaviorial dimensions. The notion is that each of us have the four DiSC qualities in varying degrees. Team communication goes awry when someone with a high Dominance dimension interacts with someone with a high Conscientiousness dimension. One person is focussed on function, and another is focussed on form. Reasoning that would convince one person, fails to convince the other, and people end up taking past one another.

  • Dominance - relating to control, power and assertiveness
  • Influence - relating to social situations and communication
  • Steadiness - relating to patience, persistence, and thoughtfulness
  • Conscientiousness - relating to structure and organization

The DiSC behavioral model was pioneered by William Moulton Marston in 1928 (who also created the polygraph and the Wonder Woman comic book), and refined by other researchers over the years. The Unlimited Coaching package includes a bar chart showing each of our four DiSC qualities in relation to one another, and pages of predictive advice based on the how those qualities interact. I can't speak for anyone else, but the result of my own DiSC assessment is just plain spooky. I'd love to have a set of these for the wife and kids :)

Meanwhile, to keep things even more interesting, the training included a run down of the Four Agreements, as promised. Coined by a Mexican surgeon, Miguel Ruiz, who returned to his family's Toltec roots after a near-death experience, the Four Agreements are designed to help us live happier, more productive lives.

1. Be impeccable with your word.
2. Don't take it personally.
3. Don't make assumptions.
4. Always do your best.

As principles go, the 4As are quite nice, and even strangely complementary to the DISC assessment.

As a longtime dabbler in self-improvement texts, I'm a huge fan of Stephen Covey's the Seven Habits of Highly Successful People. Covey mentions that many behavioral models have four key focal points, such as the biblical qualities of Heart, Mind, Soul and Strength. Since we have four DiSC dimension and four habits, let's try mapping the two together.

Marston Ruiz
Dominance Don't take it personally,
Influence Be impeccable with your word.
Steadiness Always do your best.
Conscientiousness Don't make assumptions.

Hmmm. Covey recently added an 8th habit ("Teach the habits."). Each of the habits is considered to be either a public habit or a private habit. If we combine the public and private habits into one, we are left with, waddyaknow, Four Habits. Let's map all four systems together.

Bible Marston Covey Ruiz
Heart Influence Be Proactive. Think win/win. Be impeccable with your word.
Mind Conscientiousness Begin with the end in mind. Seek first to understand and then to be understood. Don't make assumptions.
Strength Dominance Put first things first. Synergize! Don't take it personally.
Soul Steadiness Sharpen the saw. Teach the habits. Always do your best.

Going back to my DiSC assessment, from a Biblical perspective, I now see that I'm a high Strength, with nearly equal measures of Heart and Mind, followed by a healthy dose of Soul. Somehow, that's comforting.

PS: For extra credit, try adding your own mappings for the four physical dimensions: Width, Height, Length, and Time :)

Ted Husted

Google Notebook: My Documents meets Notepad

Back in the 20th century, I tried every PIM (Personal Information Manager) that I could beg, buy, or borrow: Sidekick, Outlook, Time and Chaos, Goldmine, the list goes on. On my technology memorabilia shelf, I still have a copy of Ecco (right next to a copy of Clarion). Eventually, I gave up the the search for a PIM El Dorado, and devolved to use a series of plain-old Notepad text files, organized by week. The Notepad advantage being I could just jot things down without worrying about pigeon holes.

Lately, instead of my trusty Notepads, I find myself turning toward Google Notebook . I remember trying it some time ago, and it failed to satisfy. I don't remember why, but trying it again this year, it's been working well for me. Maybe because I'm using it as a PIM, rather than a surfing tool.

The Notebook paradigm is a hearty step up from a plain-old text file. We can create any number of "Notebooks", each of which contains one or more Notes. Each note is essentially a simple text file, but with some simple formatting options, like bullets, links, and fonts (oh my!). A Notebook can have zero or more Sections that contain zero or more Notes. A Google Notebook account can contain any number of Notebooks, and we drag Notes or Sections between Notebooks.

Like most Google critters, Notebook lives on the cloud. (Meaning the good news is that I don't have to back it up myself, and the bad news is that I don't have my own backups.) Being on the cloud, Notebook offers sharing options, much like Google Sites or Google Documents. I haven't tried to share a notebook with anyone yet (but knowing VanDamme Associates, and our penchant for sharing, eventually I will!).

Two other organizational features (that I literally just noticed) are comments are labels. The comment feature provides a secondary tab where a collaborator can add a remark without editing the main Note text. Essentially, the label feature is a persistent search. We can list arbitrary labels to apply to any given note. As soon as we do, the labels panel is updated with the name of the label and the number of notes that use it. Selecting a label from the panel open a search result, listing the approptiate notes.

Whenever some bit of data comes along, and I need a place to tuck it away, I can pull up my Google Notebook and bang it in. Later, if I want to transfer the data to another artifact, up comes the Notebook, and out goes the Note.

Plain-old weekly text files do provide one great feature: Auto-archiving. Each week, I opened up a new text file and started with a clean slate. With the Notebook, I may need to do some occasional housekeeping to keep my data stream tidy. Film at 11 ...

If you have any Google Notebook experiences, or PIM stories to share, feel free to post a comment!

Ted Husted

Forget Lesko, bookmark usa.gov

If you have a hankering for quick access to US government services, surf on by usa.gov. Originally, FirstGov.gov, the nation's portal has evolved from a special project to a regular appropriation of the US Congress. Positioned as the US government's answer to Google, the mission of usa.gov is to help find existing resources. Other US government sites create content, and usa.gov exposes it.

Ironically, a great way that usa.gov exposes content is by creating it. The site features a daily blog called "Gov Gab " that is the handiwork of a handful of federal employees who work the Office of Citizen Services and Communications at the U.S. General Services Administration. The blogs mix a health dose of links with personal and professional anecdotes.

For those of us who surf to edit, other sites of note include the FTC's Computers and The Internet section and the Usabilty.gov site. The former hosts vital advice on Internet security and privacy, and the later catalogs essential tips on creating easy to use sites.

For more about of award-winning and best-of-breed constituent portals, visit the Center for Digital Government and ComputerWorld's Best E-Government Sites.

"What a country!"

Ted Husted

YUI Test - The New Kid on Block

One of the great features of the Ektron content management system platform is that it plays well with other technologies. At VanDamme Associates, we often mix custom JavaScript and AJAX elements into our Ektron solutions.

Ektron itself is no stranger to AJAX, and it even bundles a tweaked version of JQuery in the standard distribution. One good tool for testing JavaScript, that Ektron has blogged about, is the venerable JsUnit framework. While JsUnit is a solid tool, there are drawbacks.

  • Although JsUnit has been available since 2001, it's still the love child of a sole developer.
    JsUnit's release schedule is irregular. (Release 2.2 has been in "beta" for over two years now.)

Look Ahead

Happily, there's a new kid on the block: YUI Test. YT is bundled with the Yahoo! User Interface Library (YUI). To quote the YUI site:

"YUI Test is a testing framework for browser-based JavaScript solutions. Using YUI Test, you can easily add unit testing to your JavaScript solutions. While not a direct port from any specific xUnit framework,YUI Test does derive some characteristics from nUnit and JUnit."

Key features of YUI Test include:

  1. Rapid creation of test cases through simple syntax.

  2. Advanced failure detection for methods that throw errors.

  3. Grouping of related test cases using test suites.

  4. Asynchronous tests for testing events and Ajax communication.

  5. DOM Event simulation in all A-grade browsers.

YUI Test has been available since July 2007 (YUI 2.3.0), and made "GA" grade in February 2008 (YUI 2.5.0). The YT framework was created by Yahoo! engineer Nicholas C. Zakas. It's regularly released and maintained with the rest of the library, and its distributed under the library's BSD license. (All together, there seem to be about sixteen developers on the YUI team, maintaining about thirty components).

(!) Note that YUI Test can be used to test any JavaScript code -- the application doesn't need to be based on YUI to use YUI Test.

One of the pleasures of YUI Test is that it can use the YUI TestLogger as a test harness.

TestLogger is a subclass of YUI Logger, which can be used for general-purpose JavaScript logging and debugging, giving us two great capabilities in one flexible component. YUI Test can also be used in collaboration with the new YUI Profiler (another Zakas creation) to create performance-based tests.

Trip the Rift

Unit testing conventional, classical code often relies on exercising the "API Contract". If we pass certain parameters to method, the method should return a certain result, or raise a certain exception. Since, JavaScript is event-driven, in order to determine the outcome of a method, we often need to know what events it raises. Meanwhile, in an Ajax application, there can be a disconnect between when a method is called and when the event is ultimately reaised. YUI Test helps us bridge the gap with a "wait/resume" feature. A test can subscribe to an event, and call "resume" in the event handler. When the test reaches the point where an action might take an indeterminate amount of time, we can call "wait", and the test continues when the event fires.

For example, here's a test that calls a time-consuming animiation routine. The test registers an event handler, starts the animation, and waits for the event to fire. When the animation completes, the test confirms that the routine accomplished the expected result.

<div id="testLogger"></div> <div id="testDiv" style="position:absolute;width:10px;height:10px"></div> <script type="text/javascript"> YAHOO.namespace("example.yuitest"); YAHOO.example.yuitest.AsyncTestCase = new YAHOO.tool.TestCase({ name : "Animation Tests", testAnimation : function (){ var Assert = YAHOO.util.Assert; var YUD = YAHOO.util.Dom; var myAnim = new YAHOO.util.Anim('testDiv',

{ width: { to: 400 } }, 3, YAHOO.util.Easing.easeOut);
myAnim.onComplete.subscribe(function(){ this.resume(function(){ Assert.areEqual(YUD.get("testDiv").offsetWidth,

400, "Width of the DIV should be 400.");
}); }, this, true); // Start the animation and wait for the resume function myAnim.animate(); this.wait(); } }); YAHOO.util.Event.onDOMReady(function (){ var logger = new YAHOO.tool.TestLogger("testLogger"); YAHOO.tool.TestRunner.add(YAHOO.example.yuitest.AsyncTestCase); // Run the tests when DOM is ready YAHOO.tool.TestRunner.run(); }); </script>

Not every test needs to use wait/resume, but, when we do, it's an indispensible feature.

Be Assertive

Asynchronous or not, essentially, unit testing is about making assertions. We unit test by invoking a method and passing in known parameters and observing the outcome. We might expect the method to return a simple value, or another object, like a Date Type, with certain attributes set to certain values. Or, we might expect the method to fail and raise an exception, or to succeed and raise and event.

Since we're talking JavaScript, YUI not only supports all the usual assertions, but type cohersion to boot.

<script type="text/javascript">

var oTestCase = new YAHOO.tool.TestCase({

name: "TestCase Name",

testEqualityAsserts : function () {

var Assert = YAHOO.util.Assert;

Assert.areEqual(5, 5); //passes

Assert.areEqual(5, "5"); //passes

Assert.areNotEqual(5, 6); //passes

Assert.areEqual(5, 6, "Five was expected."); //fails

}

});

</script>

For more precise testing, YUI Test provides for Sameness Assertions.

<script type="text/javascript">

var oTestCase = new YAHOO.tool.TestCase({

name: "TestCase Name",

testSamenessAsserts : function () {

var Assert = YAHOO.util.Assert;

Assert.areSame(5, 5); //passes

Assert.areSame(5, "5"); //fails

Assert.areNotSame(5, 6); //passes

Assert.areNotSame(5, "5"); //passes

Assert.areSame(5, 6, "Five was expected."); //fails

}

});

</script>

Since JavaScript is loosely typed, asserting data types is a common need. YUI Test provides assertions for all the usual suspects; Array, Boolean, Function, Number, Object, String. To close the loop, an isTypeOf assertion interprets the data type as string.

<script type="text/javascript">

var oTestCase = new YAHOO.tool.TestCase({

name: "TestCase Name",

testTypeOf : function () {

var Assert = YAHOO.util.Assert;

Assert.isTypeOf("string", "Hello world"); //passes

Assert.isTypeOf("number", 1); //passes

Assert.isTypeOf("boolean", true); //passes

Assert.isTypeOf("number", 1.5); //passes

Assert.isTypeOf("function", function(){}); //passes

Assert.isTypeOf("object", {}); //passes

Assert.isTypeOf("undefined", this.blah); //passes

Assert.isTypeOf("number", "Hello world", "Value should be a number."); //fails

}

});

</script>

A companion assertion, isInstanceOf, can be used to evaluate object types (Array, Function, Object). Other assertions are available for evaluating JavaScript-isms like NaN, Undefined, and truthiness.

Finally, YUI Test also supports date and time assertions, forced failures, skipping tests, and test suites.

Push the Envelope

Aside from exposing the usual xUnit API, YUI Test goes a step further, and provides support for UserActions and Asyncronous Tests.

  • User Actions are simulated user-initiated events that can be used to test how scripts react to mouse or keyboard events.
  • Asyncronous Tests can be programmed to pause for a certain amount of time (while an out of process action occurs), or to pause until an event handler in the test script calls a "resume" method.

Whether you've outgrown JsUnit, or whether you're finally ready to start unit testing JavaScript for the first time, be sure to give YUI Test a try.

More about YUI Test

More about JsUnit

More about Open Source Testing Tools

Ted Husted

Testing: Ajax Applications

On October 7, about two dozen RIT Computer Science students came for Salvatore's famous Buffalo Wing Pizza, but stayed for the scintillating tales of Ajax testing derring do.

Of those present only a few had Ajax experience. (Not surprising, since Ajax is not part of the formal curriculium!) Happily, Ajax 101 was included in the talk (just for that eventuality). The presentation is available through SlideShare. The presentation covers several of my favorite testing tools, including:
The lively crowd raised a number of good questions, including:
  • Is YUI Unit better than JsUnit?
  • Does social networking require Ajax?
  • Are shoes required at VanDamme Associates?
Answers: Yes, No, Sometimes

Edward J. YoonThe game

If the man who have no authority attain fame, people will take advantage of him. You have to remember this -- If you can't spot the sucker after 30 minutes, you are the sucker.

Jeremy QuinnIn Safe Hands [Flickr]

sharkbait posted a photo:

In Safe Hands

My youngest god-child Bonnie with her dad, it's her first birthday party.

I love her expression, she's looking at me making silly faces, holding the camera off to one side.

Davanum SrinivasBlueTwit Firefox sidebar (supports Twitter too)

here are some screen shots of what i was working on the side:

Davanum Srinivas[Websphere] Article on securing web services using ws-security and policies in WAS7

here’s the link: http://www.ibm.com/developerworks/webservices/library/ws-offload/?ca=drs-&ca=dgf-my here are the highlights: Deploying and configuring a secure Web service using asymmetric encryption. Using Rational Application Developer to import a sample EAR file and [...]

Ted Husted

Ajax Experience 2008, Day 2, Return of the YUI

My AM presentation turned out to be a lively event. The audience of twenty-odd souls was a mix of Struts 1 and Struts 2 users, and several had already started using Ajax in their applications. The balance of the audience seem pleasantly surprised at how easy it can be to use Ajax with "conventional" framework. The talk centered on a Ajax JSP tag library called "Ajax TagParts". The creator, Frank Zammetti, a friend of mine, and he was kind enough to join me on the stage for a special bonus demonstration of JSONP (or "JSON with padding"). In only a few lines of code, Frank hooked up with Yahoo maps and popped up any given ZIP code. Another special guest was Bill Scott of NetFlicks, who has been busily moving some of their assets to Struts 2 this year. After the talk, Bill, Frank, and some others stuck around to exchange war stores.

The highlight of my afternoon was "Test Driven Development with YUI Test" with Nicholas Zakas, who created the library. My first talk tomorrow also covers YUI Test, so this talk was a must-see for me. At one point, the presentation mentioned the Selenium testing tool, which prompted a question about how to automate unit testing with JavaScript (thanks Mike!). Nicholas remarked "That's a good question!", and mentioned that there was another testing presentation tomorrow. Not one to miss an opportunity, I jumped in with a quick overview. Hopefully, that bit of marketing might draw a few more folk away from Crockford's "Good Parts" talk!

Everything has been running smoothly, though one snag is that I managed to lose a dental cap this afternoon. On the plus side, the loss might encourage me to speak more slowly, to avoid scratching my lip on the rough edges. Happily, Adobe TV is only capturing the slides, and not my newly gapful grin!

Ted Husted

Ajax Experience 2008, Day 3, At Your Service

The highlight of my testing tools talk turned out to be my new-best-friend, Hudson, an extensible continuous integration server. The talk was in one of the 90-minute slots, so I split the agenda between reviewing some of the available tools and demoing a simple-but-complete continuous integration workflow. (By complete, I mean that on every checkin, we build the distribution and run a suite of both unit and integration tests.) Originally, the demo was to include YUI Test, Selenium, and Cruise Control. At the last minute I switched in Hudson for Cruise Control.

Setting up Hudson has to be the easiest/hardest thing I've ever done. (The previous runner-up being using iBATIS for Query-By-Example database searches.) Most CI servers are designed to run as standalone critters. Hudson runs as a standard Java web application, and it is configured using a web UI. (A clean and elegant UI, I might add.) The totally cool part is that the server can be installed by dropping the hudson.war into our favorite Java container ... or running it standalone from the command line!

Download the WAR, run

> java -jar hudson.war

and up pops Hudson, at your service, ready for configuration. (The one prerequesite being a recent Java executable on your system path.)

By default, Hudson stores its jobs in your home directory (even on Windows), so once it's running, you can just have at it. Tell Hudson where to checkout your project from SVN or CVS, check a box or two, and you are good to go. (Other SCMs also supported) For extra credit, you can indicate an Ant file to run along with Hudson's default build. (Other build systems also supported.) Fill out a few more fields in the web UI, and you'll be getting an email nag whenever the build or test suite fails.

With a continuous integration server in place, the remaining trick is to export Selenium tests to JUnit (or C#, or Ruby, or Python) to run both acceptance tests and any JavaScript unit tests. While running YUI Unit won't trigger a JUnit failure out-of-the-box, we can use Selenium to watch for the outcome of the tests on the test logger. If "Failed:0" doesn't materialize, then we know the YUI test failed.

Summing up: If you have a chance to go to Ajax Experience 2009, I'd say: "take it". The organizers always manage to come up with a nice mix of introductory and advanced presentations, many by the people who are creating the technologies we use -- people like Brendan Eich, Nicholas C. Zakas, and John Resig, to name a few. Even better, it's a great chance to mingle with other real-live developers all trying to do the very same things you are trying to do. (And then discovering your organization isn't so backward, after all!)

Eran ChinthakaCan We Trust Clouds?

I attended Microsoft unconference during eScience 2008 and we had a discussion on Cloud vs Grids. After all the funny arguments like cloud == grid?, people talked about the trust in the cloud, which I think is an interesting issue.
Can a company put their valuable data on the cloud? I think it is not a direct Yes or No. If you already have applications hosted within your environment, your data is already vulnerable to attacks. Hackers can still come and get in to your data or database. So putting your data in to cloud will transfer the responsibility to the cloud provider.
I agree that big companies like Amazon, Google and Microsoft are hot targets than your domain, but don't you think that they have better security solutions than individual domains? One of the advantages of clouds is economies of scale and may be cloud providers can leverage on the economies of scale to provide better security. At the same time they might not like to see some one suing them, hurting their image. All these companies must have thought well before becoming a provider and I assume they have better methods for protection.
Another dimension to this problem is whether a different user, using the same provider, can access someone else's data. I think this is a simple authorization problem which the providers must have already thought of. Especially with Amazon, with VMs, I think its kinda hard to do that. I guess most of the time, we will get a sand box with any provideer, with tons of restrictions to access outside of it.
Next problem is can you trust the cloud provider itself? Well, I think that is something a company should consider before selecting a provider. Of course with top providers there won't be a problem like this. I don't think Amazon won't do that. Oh wait ... where is your mail account? Gmail, hotmail or Yahoo isn't it? Seems you believe in those providers for a long time. But if you are using a fairly new or unknown provider, then definitely this is an issue.

Ted Husted

Ajax Experience 2008, Day 1, Microsoft to ship jQuery with Visual Studio

I'm attending the Ajax Experience in Boston this week. The big news here is that Microsoft will be shipping jQuery with Visual Studio, promising that it will be a stock version, and not yet-another fork of infamy. At AE 2008, John Resig, jQuery creator (and RIT alumnus), mentioned that Microsoft "would not be getting a free pass". Any patches submitted by a Microsoft engineer will receive the same scrutiny as any other. (Historical footnote: back in the day, when IBM first started to use the Apache HTTP server, the very first patch submitted by an IBM engineer was in fact rejected. OSS developers are a tough bunch!)

Elsewhere, people are hailing the m$(jQuery) announcement as a sign that "The war between business models is over. Open source has won." Microsoft has been warming up to open source for some time now. The Ajax libraries in ASP.NET are already open source, Microsoft is now aplatinum sponsor of the Apache Software Foundation, and here at the Ajax Experience, where open source rules, Microsoft is spreading the love by hosting a cocktail party for 300 hardcore JavaScript enthusiasts.

Techno-politics aside, the jQuery news bodes well for Ektron and VanDamme Associates. Ektron already bundles a customized version of jQuery, and we are coming to rely on jQuery for added value features, like streaming media. Of course, there are "interesting times" ahead, as we all try to stay on the same jQuery page.

Meanwhile, Day One at the conference has been a series of lively tutorials and scintillating keynotes. (Seriously, Ajax folks are a fun crowd!) The smorgasbord of presentations starts tomorrow, with one of mine launching at the crack of 9am. (Meaning: I have to keep a clear head despite the Microsoft party tonight!)

Aaron and Jenny FarrGrounded

There are a number of reasons to feel restless in Hong Kong. This city, a dense hubbub of activity, lends itself to flighty feelings. Every time I walk to the pier, it’s common to see people loading all of their belongings onto the ferry, moving to who knows where. A teacher friend of mine told me that at least 25 students from each international school in Hong Kong have vacated in the last few months due to recent economic woes. Even before the global meltdown, Hong Kong has always been a transient place.

Last night Aaron and I had a long chat about why I personally feel so restless in Hong Kong. Here goes:

1. We never planned on making Hong Kong our permanent home.

When we moved to Asia, we told friends and family that we would stay abroad for two to five years. We’ve been away for two years already, and we are definitely staying for one more. Beyond that is anyone’s guess. Where will we move to next? I better go to Temple Street Night Market and ask a fortune teller for that information.

Because we haven’t considered living here for many years, this effects us physically. I try not to buy many household items. I don’t want the cost of moving things to where we’re going next. So anything I buy here will most likely be sold or given away in a year or two. This leaves us with a hodge podge of decorations and furnishings around the house. Some of our things have been selected from the rubbish bins by our flat, which is a common way to recycle in Asia. Asian dumpster diving doesn’t have the same dirty connotation that it does in the US.

2. I am a fish out of water.

It’s not hard to read from these blog postings that I just don’t fit in here. Of my many ex-pat friends, hardly any of them have Chinese friends. The Chinese have an entirely different take on relationships. The idea of acquaintances is less common and is entirely replaced by deep and life long relationships. More often than not, when you have a Chinese friend, you should be willing to live and die for them, not ask to go out for dinner every now and again.

So, all of my friends are foreign ex-pats. I don’t have any friends that are born and raised in Hong Kong. This certainly doesn’t foster a grounded feeling to this area.

3. We don’t have proper Hong Kong IDs.

Getting visas through your own business is a big hassle. It takes paperwork, and proper finances, and more paperwork, and interviews, etc. Aaron and I have been working on this for almost a year now, and we keep thinking that there is a light at the end. But we still don’t have the IDs nestled in our wallets. This means that we can’t enjoy the fast lanes at airport immigration, or use the library, or benefit from the super cheap medical care. It’s hard to feel grounded to a place that we aren’t permanently admitted to.

4. We are young.

Or maybe I should say that I am young, since Aaron just turned 30! I’m finding it difficult admitting that in 2 years I will be three decades old. But, in all seriousness, 30 is young. And being that we have but little earthly possessions, and the world to explore, it’s easy to feel restless.

Coming to Asia opened my eyes to the world beyond the US. I have traveled in and through every US state. I know my own country very well. But what about the Middle East, Europe, Africa? ...and the list goes on. Aaron and I want to see the world. We’ve had such a small taste of Asia and feel it a shame to stop our travels here.

5. We dearly miss extended family.

It’s quite a predicament to have such wanderlust while fostering close family connections. I admit, I miss my sisters the most sometimes. They hold some of my most precious secrets and being away from them for so long has left a bit of an empty spot in my life. Even beyond my sisters, I have such close relationships to my own parents and brother, and aunts, uncles, and cousins. In Hong Kong we have come-and-go friends from around the world, but don’t have the security of Grandma or Uncle Joe right down the road (or at least a shorter plane ride than 15 hours.)

Don’t get me wrong…we really enjoy our adventure. Hong Kong is an extremely livable place, with all the comforts a modern city can offer. I’m simply trying to come to terms with my own inability to spread some much needed roots.


Piñata 3

December 13, 2008

Ted Husted

Haromonizing the Good Parts

"Sometimes a step backward is a step in the right direction ..."

Over the summer, there have been two loosely related events on the JavaScript landscript: ECMAScript Harmony and JavaScript: The Good Parts.

ECMAScript Harmony

In the land of JavaScript, the "tyranny of the installed base" rules supreme. A key frustration of JavaScript developers is that platform innovations are metered by the glacial rate at which the marketplace upgrades browser clients.

Ironically, JavaScript pundits have been equally concerned about there being too much innovation in the ECAMScript 4 specification. The new specification includes ambitious notions like packages, namespaces and early binding.

In August, the working group met in Oslo and arrived at a new focus for the future of JavaScript, dubbed the ECMAScript Harmony project. The core of ES Harmony can be expressed in a set of four goals.

  1. Focus work on ECMAScript 3.1 with full collaboration of all parties, and target two interoperable implementations by early next year.
  2. Collaborate on the next step beyond ECMAScript 3.1, which will include syntactic extensions but which will be more modest than ECMAScript 4 in both semantic and syntactic innovation.
  3. Some ECMAScript 4 proposals have been deemed unsound for the Web, and are off the table for good: packages, namespaces and early binding. This conclusion is key to Harmony.
  4. Other goals and ideas from ECMAScript 4 are being rephrased to keep consensus in the committee; these include a notion of classes based on existing ES3 concepts combined with proposed ECMAScript 3.1 extensi

For more about ECMAScript Harmony, visit John Resig's blog.

JavaScript: The Good Parts

Admist the ES4 turmoil, workers at both Mozilla and Yahoo! have advocated moderation. John Resig, of Mozilla, went on a ES4 speaking tour to raise awareness, and Douglas Crockford, of Yahoo!, brought out JavaScript: The Good Parts, a testament to the doctine of "less is more".

In "The Good Parts", Crockford walks through both the good and the bad of JavaScript, pointing out best practices to embrace and design flaws to avoid. While Crockford tries to "accentuate the positive", one can't help but notice that many best practices are driven by design flaws.

Some Design Flaws

  • Reliance on global variables weakens the resiliency of programs [p25].
  • Inner variables set to functions are bound to the global object (not the "this" of the outer function) [p28].
  • Arguments are not really an array [p31].
  • Support for block syntax implies a block scope, but there is no block scope [p36].

Some Best Practices

  • Reduce your global footprint to a single name (like YUI's YAHOO namespace) [p26].
  • Throw exceptions when a mishap is detected [p32].
  • Declare all variables used in a function at the top of the function body [p36].
  • Use the module pattern to eliminate the use of global variable [p41].

Crockford is presenting a talk on the Good Parts at the Ajax Experience 2008 in Boston on September 29th. Sadly, his talk is up against my own talk "Ajax Testing Tool Review". I just hope someone shows up for mine ...

Preaching to the Choir

At VanDamme Associates, we make good use of John Resig's JQuery library and Yahoo's YUI library in our Ektron-based web applications. Together, these packages already deliver the same utility that an overly-ambitous ES4 might provide. A kinder, gentler ES4 means a more stable and robust development environment for us and our clients. To quote a famous, if fictional, engineer: "The more they fancy up the plumbing, the easier it is to gum up the works."

Ted Husted

Ajax Experience 2008 - More Ted, 'nuff said

I'll be giving three -- count 'em three -- presentations at the Ajax Experience at the end of September. Two talks are Struts-related reprisals form last year, and the third talk, new this year!, dives into popular tools for testing Ajax applications.

Hope to see you there!

Ajax Testing Tool Review

Not long ago, testing Ajax components meant play-testing a page by hand. Today, there are a growing number of tools we can use to simplify and automate Ajax testing.

In this session we will cover when to test, what to test and how to test Ajax components. You learn how to create automatic tests with various tools, including YUI Test, OpenQA Selenium and TIBCO Test Automation Kit, and how to use Ajax testing tools with IDEs and Continuous Integration systems.

In this session, you will learn:

  • When, where and how to test Ajax components;
  • How to create automatic tests with various tools;
  • How to use Ajax testing tools with IDEs and Continuous Integration systems.

Struts on Ajax: Retrofitting Struts with Ajax Taglibs

Struts is Java's most popular web framework. Ajax is the web's hottest user interface. What happens when we put Struts on Ajax?

In this session, we stir some Ajax wizardry into a conventional Struts application, without all the sweat and bother of writing our own JavaScript. Struts 1 and Struts 2 both support Ajax taglibs that look and feel just like ordinary JSP tags. If it's just a little bit of Ajax that you want, these tags will get you around the learning curve in record time.

During the session, we will cover

  • Using the Java Web Parts taglib with Struts 1
  • Using the Ajax YUI plugin with Struts 2

Who should attend: Struts developers who would like to utilize Ajax with existing applications, and Ajax developers who would like to utilize Struts as a backend.

To get the most from this session, some familiarity with Struts or a similar framework is helpful.

To register, visit Ajax Experience site.

Ajax on Struts: Coding an Ajax Application with Struts 2

Ajax is the web's hottest user interface. Struts is Java's most popular web framework. What happens when we put Ajax on Struts?

In this session, , we look at writing a new Struts 2 application from square one, using the Yahoo User Interface (YUI) Library on the front end, and Struts 2 on the backend. YUI provides the glitz and the glamour, and Struts 2 provides the dreary business logic, input validation, and text formatting.

During the session, we will cover

  • How to integrate an Ajax UI with Struts 2
  • Basics of the Yahoo User Interface (YUI) Library
  • Business services Struts can provide to an Ajax UI

Who should attend: Ajax developers who would like to utilize Struts as a back-end, and Struts developers who would like to utilize Ajax as a front-end.

To get the most from this session, some familiarity with an Ajax library, like YUI or Dojo, is helpful.

Visit the Ajax Experience site to register.

Ted Husted

"The Dark Side of the Internet" Lecture, Tuesday, June 24th at 6PM in Rochester NY

On Tuesday, June 24, at 6:00 pm, the BlueTie Unlimited Bandwidth Lecture Series will host Mr. Scott Forbes as our guest lecturer. This lecture will deal with the prevention of the dangers found on the Internet including topics such as; SPAM/Chain Letters,Virus/hackers, Hoax/Urban Legends, Identity theft, cyber-terrorism, cyber-bullies, and ebay/internet scams. Mr. Forbes has over 30 years experience in the Information Technology field and currently teaches IT at Nazareth College where he includes Internet security as part of his curriculum.

Please join us at the BlueTie Campus, 1050 Pittsford-Palymra Road, Pittsford NY on June 24th. Refreshments will be served and seating is limited. Please RSVP 585-586-2000 if you plan on attending.

Ted Husted

Apache Struts Tops OpenLogic's Open Source Leaders List with a 71% Share

"Hibernate and Struts topped the list with more than 71 % of customers using each. JasperReports is the only newcomer to the list this year ..."

FULL STORY ...

More marketing than statistical science, but it's nice to hear that Struts is still on top. :)

Ted Husted

Sun Snaps Up Database Firm, MySQL

"Sun Microsystems elbowed into the enterprise database market Wednesday with the announcement of a proposed $1 billion acquisition of MySQL, an open-source database software company."

For more see, the Forbes article.

You know, one thing that MySQL buys Sun is experience in making money from GPL software. Now that Java is Sun's ticker symbol, perhaps they are ready to create more Java revenue. Maybe it's not about becoming a "database" company, but about becoming a "GPL" company.

Ted Husted

Building Struts 2 Apps without XML GlueCode

TheServerSide has kindly published an article I wrote a while back about the SmartURLs plugin.

I'll be updating this piece for the new Conventions plugin, now in the Apache Struts Sandbox, which merges ZeroConfig and CodeBehind with SmartURLs. Film at 11 ...

Ted Husted

Happy Holidays from our friends at TheServerSide.com

Back in October, I was invited to present a couple of talks on Struts at the Ajax Experience in Boston. Now available through TheServerSide.com is the recording from one of the two, "Struts on Ajax: Retrofitting Struts with Ajax Taglibs".

The slides for both Ajax Experience presentations are also available at Struts University.

Lately, I placed a couple of other Struts 2 articles with TheServerSide. The first was a general introduction to Struts 2 that is part of the AboutObject Struts and JSF eguide. Coming sometime soon is a second piece about the SmartURLS plugin for Struts 2.0. (SmartUrls is being merged with the CodeBehind plugin for Struts 2.1). Film at 11 :)

In related news, my second Agitar article finally saw the light of day on the Sys-Con Media site. If you are maintaining code that you didn't write, or didn't write recently, Agitar is the quickest way to generate enough tests to "turn fear to boredom".

Ted Husted

Ajax on Struts or Struts on Ajax?

I'll be giving two presentations at the Ajax Experience in Boston next month. Both talks are Struts-related. The first is about coding an Ajax application with Struts 2 using a plain-vanilla Ajax library. The other is about using Ajax-enabled taglibs with Struts 1 and Struts 2.

Here's the official skinny:

Ajax on Struts: Coding an Ajax Application with Struts 2

Thursday, October 25, 2007, 6:00pm - 7:00pm

Ajax is the web's hottest user interface. Struts is Java's most popular web framework. What happens when we put Ajax on Struts?

In this session, , we look at writing a new Struts 2 application from square one, using the Yahoo User Interface (YUI) Library on the front end, and Struts 2 on the backend. YUI provides the glitz and the glamour, and Struts 2 provides the dreary business logic, input validation, and text formatting.

During the session, we will cover

  • How to integrate an Ajax UI with Struts 2
  • Basics of the Yahoo User Interface (YUI) Library
  • Business services Struts can provide to an Ajax UI

Who should attend: Ajax developers who would like to utilize Struts as a back-end, and Struts developers who would like to utilize Ajax as a front-end.

To get the most from this session, some familiarity with an Ajax library, like YUI or Dojo, is helpful.

Visit the Ajax Experience site to register.

Struts on Ajax: Retrofitting Struts with Ajax Taglibs

Friday, October 26, 2007

Struts is Java's most popular web framework. Ajax is the web's hottest user interface. What happens when we put Struts on Ajax?

In this session, we stir some Ajax wizardry into a conventional Struts application, without all the sweat and bother of writing our own JavaScript. Struts 1 and Struts 2 both support Ajax taglibs that look and feel just like ordinary JSP tags. If it's just a little bit of Ajax that you want, these tags will get you around the learning curve in record time.

During the session, we will cover

  • Using the Java Web Parts taglib with Struts 1
  • Using the Ajax YUI plugin with Struts 2

Who should attend: Struts developers who would like to utilize Ajax with existing applications, and Ajax developers who would like to utilize Struts as a backend.

To get the most from this session, some familiarity with Struts or a similar framework is helpful.

To register, visit Ajax Experience site.

Ted Husted

ApacheCon US 2007 Early Bird Price Extended!

If you haven't registered for ApacheCon US 2007 yet, good news: The Early Bird discount has been extended! You now have until 22 September to get the very best price!

Three Struts events are scheduled this year:

Also of interest (among many others!):

Hope to see you there!

Ted Husted

Three new Struts 2 books available for pre-order

Ian Roughley's mini-book, "Starting with Struts 2", available in print and as a free PDF since May, is about to be joined by three new books about Struts 2.

Coming in October is "Struts 2 Design and Programming: A Tutorial" by Budi Kurniawan. Budi's Struts 1 book is rated "four stars" based on reader reviews at Amazon.

Coming in November is "Practical Apache Struts 2 Web 2.0 Projects" by Ian Roughley, an Apress book. As mentioned, Ian is also the author of "Starting with Struts 2" (available now!).

Looking down the road a bit, "Struts 2: The Complete Reference" by James Holmes is scheduled for release in June 2008. James is also the author of "Struts 1: The Complete Refererence", which may be the most up to date Struts 1 book.

To order any of these books, please visit the Apache Bookstore site. All commissions for books ordered through the Apache Bookstore site are donated back to the Apache Software Foundation.

If you do plan on ordering any of these books, please consider pre-ordering today. Pre-orders do affect a book's ranking, which will help us get the Struts 2 word out!

Ted Husted

FrSIRT Alert does NOT apply to Struts 1.x !!!

In July, the Apache Struts group issued a security fix to Struts 2 to eliminate a remote code exploit. The exploit was based on a problem with a Struts 2 dependency (XWork). Since Struts 1 does not use XWork, Struts 1 is not vulnerable to the exploit.

Unfortunately, a recent security alert mis-described the problem as affecting all versions of Apache Struts prior to 2.0.9. This is NOT accurate. No version of Struts 1 is affected by this security issue. The only affected versions of Apache Struts are 2.0.0 through 2.0.8. Period.

We've updated the Apache Struts website to clarify the scope of the exploit and asked FrSIRT to correct their alert to exclude Struts 1.x.

There are many reasons why someone might want to migrate from Struts 1 to Struts 2, but this security alert is not one of them!

Ted Husted

Eight Habits of Highly Effective Programmers

Next to the gospel, my favorite self-help book is the Seven Habits of Highly Effective People. The Habits apply to any endeavor, and I like to say that the Seven Habits is the first book any novice programmer should read. To help underscore why, here's my humble homage to brother Steven Covey: The Eight Habits of Highly Effective Programmers.

  • Estimate (or Be Proactive)

Programmers invent the future. It's often hard for us to know how long something will take, because, often, we've never done this exact thing before. In the fictional series Star Trek, engineer Montgomery Scott would triple his estimates, so as to seem like a miracle worker. Software engineers often have to triple estimates just to be in the right ballpark!

Educators tell us that feedback is essential for learning. Before starting any programming task, write down an estimate first. After the task is done, compare your estimate with the actual result. Of course, all engineers are optimists, otherwise we couldn't be engineers. But, with practice, we can learn what factor to apply to our internal estimates to match external events. (As implied, my factor is three!)

An easy way to get started with estimates is to keep a standup journal. Every day before starting work, jot down the most important task you did the last working day and the most important thing you hope to do today. Over time, you will develop a basis for comparing estimates with outcomes.

  • Test First (or Begin with the End in Mind)

Most projects budget at least some time for testing. Many projects schedule this time at the end, after the rest of the work is done. Tests serve two purposes. Run today, tests prove that our code works. Run tomorrow, tests prove that our code still works. Test-last development dilutes the value of tests. The earlier tests are written, the sooner they can tell us that the our code still works. Tests are most valuable when written before we write the implementation. By writing the test first, we define what our code needs to do to succeed. As a result, we write only the code we need to write, no more, no less.

  • Iterate (or Put First Things First)

Creating effective software is a learning process. Each release addresses old needs and exposes new needs. Many software products are written for small workgroups, or focus groups of representative users. The sooner we deliver a product that the group can review, the sooner we can verify that established needs are being met, and the sooner we can identify new needs. Early verification is important, since programmers often misinterpret needs and write great code that solves the wrong problem. Writing code is easy. Identifying what code to write is hard. Early iterations help us create a positive feedback loop, so we can deliver better applications.

  • Narrate (Seek first to understand, then to be understood)

Many teams define an application through a series of use cases, or plain-language workflows. To "set the stage", a use case might begin with a narrative that describes one common instance of the workflow. The narrative often refers to a prototypical user and includes details of how that user would use the system under specific circumstances. By describing the workflow in plain language, from the user's perspective, we can establish a dialog. Use cases help developers understand what clients want, and also help clients better understand what developers need to know to implement the workflow.

Next time: Habits 5 thru 8 ...

Ted Husted

JSF Redux

The Expert Group for JSF 2.x is now forming, and people continue to consider whether JSF is the right choice.

To recap my own comments ...

Here's the thing: The vast majority of web applications are intranet application that we build in six to twelve weeks to serve a handful of users.

In a small-group intranet environment, server/bandwidth efficiency is not the limiting factor. The overriding concern is whether the application helps the people using it become more efficient. Do our people get more work done by using the application? Since we may be talking about five or twenty-five people connecting to a server on the next floor in the same building, scalability, in an environment like this, literally doesn't matter. We still need a reasonable response time, but, often, people will forgive a slightly-longer response time for a more helpful user interface.

Of course, not all of us are building small-group intranet applications. If we have thousands of users who hit the application occasionally, from all over the world, our non-functional requirements can be quite different. Or, if we have a small group of users, but those users are working on the space shuttle, again, our requirements are going to be different. Different requirements imply different solutions.

There's an old saw: Do you want it Fast, do you want it Right, or do you want it Soon? Pick any two.

For an intranet application, we might choose Right and Soon. (If it's not right, no one will use it.) For an Internet application, we might pick Fast and Soon. (If it's not fast, no one will use it.) For a space shuttle application, Fast and Right would more important than time to market (and we wouldn't even use web technology!).

For an intranet application, JSF can be an excellent choice -- if you have a group of developers that like working with Swing/VB type technology. For an Internet application, Struts can be an excellent choice -- if you have a group of developers that like working with standard web technology.

But, make no mistake, in final analysis, it's the developers that will make the difference. So, either use the technology that your team likes, or hire developers that like to use your technology. :)

In the realm of physics, in order to get any work done, we've had to resort to two separate, and seemingly contradictory, theories. Quantum theory is useful for calculations at an atomic scale, and general relativity is useful for calculations on a planetary scale. Either works fine on their own, and we don't hesitate to put each to good use, but we've yet to find a way to reconcile the two.

In my experience, the same principle applies to web development. Techniques that work well for small intranet applications may not work as well for busy Internet applications, and vice versa. When it comes to the craft of web development, one size does not fit all.

Vive la difference!

Ted Husted

Eight Habits of Highly Effective Programmers (5-8)

Last time, we covered habits 1-4: Estimate (Be Proactive), Test-First (Begin with the End in Mind), Iterate (Put First Things First), and Narrate (Seek first to understand, and then to be understood).

  • Refine (Think Win/Win)

Stable requirements are the holy grail of software development. If we do pursue the myth of stable requirements, clients and developers both lose. We may ship what the requirements describe, but we probably won't ship what the client really wants and needs.

When building business applications, a better approach is successive refinement. Rather than try to define in detail the application all at once, we first define and implement a key workflow. Through a series of iterations, we continue to extend and refine the workflows that comprise the application. The goal of each iteration is to provide client with functioning application that does useful work.

Successive refinement encourages clients and developers to act as collaborators, rather than adversaries, wrangling over requirements.

  • Reuse (Synergize)

A worker is only as good as his or her tools. As we create software that works, we look for ways to reuse that code in other projects. Few applications have totally unique requirements. Every application overlaps with the next. If arrange a codebase so that reusable components are separated from unique components, we usually increase cohesion and decrease coupling, creating software that is easier to change, extend, and reuse. By writing software so that it is easy to use more than once, we often create software that is easier to use even once.

  • Refactor (Sharpen the Saw)

Techniques like Test-First and Iterate help us write good code quickly, but great code still takes time and effort. As we verify that code is effective and relative, we can use our tests to help us refactor, or improve the design of existing code.

Well-designed code is easy to test and easy to change. Because we know new features will be easy to add, well-designed code doesn't need "hooks" for future development. Code becomes an asset that pays dividends today and tomorrow. Refactoring is another win/win, since it helps us create better code today and happier clients tomorrow.

  • Mentor

It's said that we never truly understand a task until we teach it to someone else. Teaching creates a dialog between instructor and student. When the dialog is healthy, both student and instructor benefit. Teaching forces us to organize and prioritize our own knowledge, clarifying the task in our own minds. Clever students often ask questions we never thought to ask, and in finding the answers, we ourselves come to learn more. For me, writing this article is a case in point!


To learn more about programming best practices, see The Pragmatic Programmer and Software Craftsmanship. Be guided by the humble observation of an extreme programmer: "I'm not a great programmer. I'm a good programmer with great habits."

For a similar treatment of the "12 Steps", see "12 steps to stellar software (usability) design".

Ted Husted

Husted Tops Thirty

While in Salt Lake City last week, I dropped by the Utah Java Users Group meeting and gave my 33rd public presentation, my fourth appearance this year. I usually run about six presentations or courses a year. I'm already on the hook for The Ajax Experience (Boston) in October, and ApacheCon (Atlanta) in November, so it's shaping up to be a busy year.

The UJUG gig was a last-minute thing. I was already in town to present a three day training course, so we dropped by, and the organizer, Chris Maki, setup up a special event for me during the "Break Out" session at the end. It had already been a busy night covering both SunSPOT robots, Java FX, and Java Scripting, but, even so, several stalwart Strutites hung around for the "special guest appearance". I ran through the better part of my Building Struts 2 Applications session, and answered a number of excellent questions.

I've been doing Struts presentations for six years now. The first, in June 2001, was a one-day "train the trainers" gig for an agency in Atlanta. Struts 1.0 was barely out the door, and before they asked, I had never thought of doing onsite Struts consulting. So, I had no slides, and no projector. We just met in a room with a flipchart, and hovered around my laptop for code demonstration, but at the end of the day, everyone there knew a lot more about Struts (including me!).

That sort of thing went on for several years. People would call and ask me to come out and work with their development team. We'd whip up an agenda, and, along the way, I started to build a library of slides, based on the what each team wanted to cover. Many times, we'd refine the agenda as we went, and I'd be creating or refining sessions in my hotel room the night before.

Eventually, I got tired of doing everything on the fly, and developed an actual training course. Being bloody-minded, my Struts University courseware is open source, just like Struts itsef. Right now, there are two tracts for the MailReader Training Course, one for teams new to Struts 2 and another for teams that are migrating from Struts 1. The base course is the same, but I change the initial presentation, as well as how the material is presented.

I've given the course several times now, and it seems to be working well. It's a 50/50 mix of lecture and labs. The labs are designed to build the MailReader example application, use case by use case. We follow Agile principles, so each lab is an iteration that leaves us with a functioning application at the end.

I enjoy holding the courses, but I don't actually enjoy traveling. I do it, but I don't like it. Of course, it would be much more convenient if people would come here to Rochester NY. I did do a class here last summer, but it's hard to know when to set a date. If anyone might be interested in coming to Rochester in December or May, or somewhere in between, let me know. At The Ajax Experience and ApacheCon, I'll be speaking on Migrating to Ajax, so if that might be of interest as a full course, either here or there, let me know that too.

Emmanuel LecharnyHilarious ...

Excerpt from this site :

"Our sophisticated proprietary automation and unparalleled client service delivers an enhanced execution that is virtually unmatched in our industry"

"
One of the critical ingredients in creating the added value..."

"
The firm uses a variety of futures, options, and other instruments to hedge its positions and limit its risks"

"
...these highly prudent risk management policies protect the interests of clients as well."

"...
the firm can customize client reports and deliver them electronically in whatever format best meets the needs of clients"

"...
has one of the most sophisticated disaster recovery facilities found anywhere in the securities industry"

"...
maintains a fully equipped and staffed facility located near LaGuardia Airport" (With a plane ready to fly away ?)

And, best of the best :

"
The owner's name is on the door"

"Bernard Madoff has a personal interest in maintaining the unblemished record of value, fair-dealing, and high ethical standards that has always been the firm's hallmark".

Ted Husted

The ASF Turns Fifty

Between July 2006 and June 2007, the Apache Software Foundation (ASF) created thirteen new projects, bringing the total number of ASF software projects to just over fifty.

In June, the ASF Board of DiThe rectors promoted Jakarta Commons subproject to a top-level Apache Project. Over the past year, three other Jakarta subprojects -- Velocity, Turbine, and POI -- were promoted to top-level projects in 2006/2007. Other newly created projects include Apache Shale, Apache Tiles, Apache Santuario, Apache MINA, Apache Cayenne, Apache Felix, Apache OpenEJB, Apache OpenJPA, Apache Open for Business, and Apache Labs. Seven of the new projects were developed as part of other ASF projects, and then promoted to top-level projects, five projects are new to the foundation, and one was developed internally as a new top-level project.

Apache Velocity (velocity.apache.org) is a Java-based template engine. The Velocity Engine is a mature product, in distribution since 2001. In addition to the core Velocity Engine, the new Apache Velocity project offers five other related products. The latest addition is Velocity DocBook Framework (DBF), a framework for creating high-quality online or print documentation. DBF (velocity.apache.org/docbook) simplifies rendering DocBook files by combining Apache Ant, Java, and the Velocity Engine into a unified toolset.

Apache Turbine (turbine.apache.org) is a servlet-based web application framework. Turbine and Velocity share common roots, and like Apache Velocity, Apache Turbine is a mature product dating back to 2001. Turbine works well with both Velocity templates and JavaServer Pages, and supports a services-oriented architecture.

Apache POI (poi.apache.org) provides a set of pure Java APIs for working with Microsoft OLE 2 documents, which includes Microsoft Word and Microsoft Excel. POI is in its third major release series. In addition to Java support, POI also provides bindings for the popular Ruby language. Like Velocity and Turbine, Apache POI is another mature codebase in development since 2001.

Apache Shale and Apache Tiles are spin-offs from the Apache Struts project. Apache Shale (shale.apache.org) is a modern web application framework, fundamentally based on JavaServer Faces. The Shale codebase was originally created in 2004 by Craig McClanahan, who also founded Apache Struts.

Apache Tiles (tiles.apache.org) is a templating framework for use with web applications. Originally an Apache Struts feature, Tiles has been broadened into a standalone framework. Both Apache Struts and Apache Shale provide Tiles support as a standard option.

Formerly known as XML Security, Apache Santuario (santuario.apache.org) provides implementations of the W3C standard XML-Signature Syntax and XML Encription Syntax. Libraries are now available for use with Java or C++ applications. Before being promoted to a top-level project, Santuario was part of the Apache XML project. The original Java codebase was a commercial product, donated to the foundation in 2001.

Apache MINA (mina.apache.org) provides a unified API for transport types, byte buffers, message objects, and codecs, along with stream-based IO support and a Java Filter interface. The MINA codebase (Multipurpose Infrastructure for Network Applications) began as a merger of the Netty network application framework with a Staged Event Driven Architecture (SEDA). Today, it is a core dependency of the Apache Directory project. Apache MINA also powers point of sale terminals, multiplayer games, and other network systems.

Apache Cayenne (cayenne.apache.org) is an object relational mapping (ORM) framework for Java that combines many of the best features of Apache iBATIS and Hibernate, and then adds a sophisticated GUI modeling tool. Cayenne was first developed by ObjectStyle, LLC., and donated to the ASF in 2006. The codebase has been actively developed since 2001, and Apache Cayenne is now in its second major release series, with version 3.0 in development. An exciting feature of Apache Cayenne 3.0 will be a Java Persistence API (JPA) provider.

Apache Felix (felix.apache.org) is a community effort to implement OSGi-related technologies. OSGi technology targets embedded devices and home services gateways, but it is ideally suited for any project that is interested in principles of modularity, component-oriented, and/or service-orientation. Among other things, OSGi technologies can be used as an alternative to Java Management Extension (JMX).

Apache OpenEJB (openejb.apache.org) is a modular, configurable, and extendable EJB Container System and EJB Server. Over the last seven years, the OpenEJB group worked with two other open source hosts, Exolab and CodeHaus, before coming to the ASF in 2006. The current release of Apache OpenEJB supports the Enterprise JavaBeans 3.0 specification. The product ships with both a EJB container system and its own lightweight EJB server. Apache OpenEJB can also be embedded into Apache Tomcat to create "a no holds-barred EJB server".

Apache OpenJPA (openjpa.apache.org) is a feature-rich implementation of the persistence part of Enterprise Java Beans 3.0, also known as the Java Persistence API (JPA). OpenJPA can be used as a stand-alone POJO persistence layer, or it can be integrated into any EJB3.0 compliant container and many lightweight frameworks. The OpenJPA codebase was originally developed by BEA and later donated to the foundation in 2006. OpenJPA is already being used by ActiveMQ, BEA, Apache Camel, Apache Geronimo, Apache Ode, Apache OpenEJB, Spring, and IBM WebShere, among others.

Apache Open for Business (ofbiz.apache.org) is an enterprise automation package that includes tools for Enterprise Resource Planning (ERP), Customer Relationship Management (CRM), Software Configuration Management (SCM), Materials Resource Planning (MRP), and more. OFBiz was originally created in May 2001 and soon attracted an international base of developers, contributors, and users before joining the foundation in 2006. Today, OfBiz powers a wide variety of ecommerce sites, including 1-800-flowers.com and totes-isotoner.com.

While many ASF projects were created elsewhere, another new project, Apache Labs (labs.apache.org), is designed as a place where ASF committers can experiment with new ideas. In the Apache Labs, our committers can innovate and collaborate, without the worry of building a community first. Today's labs -- which may be tomorrow's projects -- range from new approaches to creating virtual communities to experiments in new web protocols.

The Apache Software Foundation (www.apache.org) is a not-for-profit corporation that supports the Apache community of open-source software projects. While the foundation's infrastructure is funded through a combination of sponsorships and donations, the foundation itself is composed of individual, unpaid volunteers. ASF projects are characterized by a collaborative, consensus-based development process, an open and pragmatic software license, and a desire to create high quality software.

Ted Husted

Struts 2.0.9 General Availability Release with Important Security Fix

[Apache Struts Group] Apache Struts 2.0.9 is now available for download.

This release includes an important security fix regarding a remote
code exploit. For more information about the exploit, visit the
security bulletins page.

  • ALL DEVELOPERS ARE STRONGLY ADVISED TO UPDATE TO STRUTS 2.0.9 OR
    XWORK 2.0.4 IMMEDIATELY!

For other changes included in Struts 2.0.9, see the release notes.

Jeremy QuinnKnots [Flickr]

sharkbait posted a photo:

Knots

Long exposure from the anchor winch.
Our first night moored up with the whole regatta in Falmouth Harbour.

Rich BowenChimera

From the Weekend Wordsmith

Chimera
December 12, 2008

That's how it works:
One's sanity depends
on the sanity of others,
and folks with no point
of reference drift irretrievably
into the abyss, forever
pursuing their chimerical vision
of goodness and light.

Jeroen ReijnWatch out! Hippo ECM is coming!

Beta The past 3 months have been crazy. You might already have read it somewhere on the world wide web, but if you haven't, we're very close too a first official release of our new ECM product.

It was September when Arjé did his announcement of Hippo ECM and CMS 7 and it has come a long way since. More features have been added and the product has grown a lot since then. Hippo CMS 7 is still in a beta phase, but that won't be for long.

The next couple of weeks I'll try to share my experience, some thoughts and plugins, which I'm in the process of creating. For now I'll go for a short introduction on what's new and how you can compare it to version six.

Rich BowenThe Bremen Town Musicians

Here's another bedtime story for my beloved children and their cousins.

The Bremen Town Musicians (6 minutes, 3MB)

David N. WeltonStartups and Work: Europe vs the US

Michael Arrington of Techcrunch comments on the US vs Europe in terms of startups:

Joie De Vivre: The Europeans Are Out To Lunch

It's a pretty rough and coarse-grained view of things, but there's a grain of truth there.

I've written about this a little bit before. It's something that I feel qualified to talk about, having lived and worked in both the US and Europe (Italy and Austria to be precise), and in that time, generally gravitated towards startups.

Here's my quick take on a list of what's good and bad about each. Please note that these are of course not true for everyone, that things are changing, but are still things I think are generally true, even when I could think of several counterexamples for some of them myself. Also, it's very important to keep in mind how diverse "Europe" is, so most of what I write is really about Italy, and to a much smaller degree, Austria. I'd be very curious to hear your own experiences in the comments.

Europe

Bad

  • Less of a startup culture and mentality. It's more typical to get a "job for life" and hang on to it for all you're worth. Many Italians are tremendously creative, industrious, inventive people, but are going to find it more difficult to express that in some form of business.

  • The side effects of this mean that there are fewer people to talk with, and network with, fewer potential employees willing to risk a startup, and so on. For instance, people are at times more suspicious of a new company - both clients and suppliers.

  • As I mentioned in my other article, it takes a lot more money to get started in many European countries - something like 10,000 Euro in Italy. Other places like the UK are cheaper, and apparently Germany is introducing some legislation to ease the burden on new companies. I really hope this changes in Europe because it's such an easy change to make: don't extract money from companies until they're making it.

  • More bureaucracy. I think that higher taxes, once you are profitable, might be worth paying for the social system you get in Europe, but the cost of sorting out paperwork falls inordinately on smaller, newer companies. Big, established firms can hire people to deal with all the rules and regulations, and probably have contacts in the government that can help them out in some cases. Smaller firms are the ones whose time is really going to be wasted running around to different offices trying to figure out what they have to do.

  • Smaller, fragmented markets. Localization is not a lot of fun in some ways, and trying to translate everything into all the languages of the European Union is a huge undertaking. In the US, you get a huge market with just English and the US Dollar. Even beyond language issues, the culture changes less in the US from place to place, meaning that you have a more homogeneous target.

  • Lack of acceptance of failure, both culturally and institutionally. If you go bankrupt in Italy, it's a very serious problem. Apparently (although this is second hand, I'm not 100% sure of it - maybe someone can confirm whether it's actually true?), you can even lose the right to vote. Plenty of people in the US try several times before they get it right.

Good

  • Even if your undertaking fails, you still have health care. Likewise, there are other bits and pieces of social support (that change from country to country) that mean you're probably not going to land quite so hard on your rear if things go wrong.

  • Lots of smart, educated people. I never lacked for plenty of smart people to talk shop with in Padova, and didn't miss the California bay area at all from that point of view. Open source is really big in Europe - perhaps, in part, because for many people it's a better avenue for their talents than creating a business, when doing so is difficult and less common.

  • Work/life balance. Sorry Mike, but the amount of people who are truly going to strike it rich is pretty small. If they want to work hard, great, but it's nice to have some other options, in terms of good, lasting friendships (rather than everything revolving around work), knowing plenty of people from outside your field, people living in and belonging to a community (how many people spend their whole lives in the bay area?). When I moved from San Francisco to Padova in 2000, I went from a world gone mad with money and the dot com craze to one where there were rich and poor, families, young people, old people, and many people who were not working for some dot com. That's not to say that people don't work quite hard in Italy - two hour lunches are a thing of the past for most anyone I know.

  • Smaller fragmented markets can be an advantage, too. By the time some valley-based startup finally gets around to noticing that languages other than English exist, it's possible to capture a smaller market. Ok, so you won't be the next Google that way, but there's good money to be had in doing so.

  • In some ways, the staid, established, don't rock the boat way of doing things in some industries may present big opportunities for outsiders to come in and pull the carpet out from under everyone. This is especially true of internet/web companies that can get started quickly and cheaply.

US

Bad

  • If you're not careful, you can get completely sucked in to work - your life revolves around it, your friends are mostly work friends, and if something happens to your job, a lot of that goes poof. This is especially true in places like the bay area, where so many people are 'transients' - just there for a few years, without any real roots in the area. This is ok if you'll potentially make a big pile of money, but long term it's unhealthy.

  • Less of a sense of building for the long term. Personally, I don't want a "job for life", but I think there is some value in loyalty (the genuine sort, not the sort created by legally not being able to lose a job) between employer and employee that has been lost in the US. Being able to count on someone growing with your company, and as an employee, knowing that your company will do what it can to help you out even in tough times are things that capture some value. The US seems to be heading towards a "Coasian" world where everyone is a freelancer, and while that efficiency is hard to deny, I wonder what is lost in the process.

  • The competition is tough. Sure, it is in Europe too, but in Europe everyone may compete quite hard during the year, but still all take that one month vacation (although that is becoming a bit less common, especially amongst people my age), whereas in the US almost no one gets that kind of benefit - even if you wanted to take unpaid time off, people would look askance at that kind of behavior. That said, if you need to stay open in, say, August, in Italy, to compete, you are in big trouble, because for many businesses it's simply impossible because it's a chain reaction: all your suppliers and clients shut down, so you really have no choice.

Good

  • There are certainly bureaucratic obstacles in the US, but are much more maneageable, and don't hit smaller/newer companies quite so badly.

  • It's cheap to get started. As per my other article, the actual state filing fee in Oregon for an LLC is $55, and that's all you really need.

  • The culture is definitely there, especially in the right places like the Bay Area, but even in plenty of others.

  • You aren't bound to employees for life, and it's easy to find freelancers. I know I'm contradicting myself, but I think it's actually a complex issue, and there are definite advantages to not having people who expect or at least want to find that job for life.

  • A large target market. Go online in one state, and you can, for the most part, deal with customers all over the US, in one language.

  • Things turn around faster. I have more of a sense that when there are problems, they get fixed. Companies (the debacle of the automakers notwithstanding) are more often allowed to fail, or at least put in Chapter 11. Sometimes this means that when things are bad, they get really bad, but also turn around and get better sooner.

Conclusions

An interesting example of all this from my own experience was Linuxcare. The company was, culturally, a Bay Area startup, with the headquarters in San Francisco, founded by very startup oriented guys (one of whom, Dave Sifry, went on to do technorati, and is currently working on yet another venture). However, most of the actual open source talent was in our satellite offices, in Australia, Italy and Canada, places where, perhaps, people were not so distracted by the prospect of "make money fast!!! hurry!!!" that they had time to work, learn, and create some really great open source code.

To be honest, I find myself torn. Business-wise, I prefer the US. However, outside of that, there's a lot to be said for Europe. I also think that some of what's good about business in the US is coming to Europe, albeit slowly in some cases, in Europe. People my age here can see what's going on elsewhere, and try and copy what they like. A lot of what's good about Europe, though, might be more difficult to import into the US, especially the livability of the cities.

In any case, I can conclude that it's a complex, difficult topic best discussed over a glass of wine.

Tetsuya KitahataAGEL KOREA NOW AVAILABLE

Agel Korea is now in launching. This could be a good chance for people in Korea, Mail to korea@talents.jp (without subject and contents - mail please) and get the info. Good luck.

Shane CurcuruI take back my night is dark posting

Wow - what you get for not reading the news is not realizing that about one million of your fellow New Englanders are still out of power from yesterday’s ice storm. Between that and reading tales of woe in Boston-area commutes (just heavy rain here, not ice), I’m really thankful we stayed around home today!

I thank the gods for the sea breeze. We live close enough to the coast around Boston that we get Boston weather, which is notably different from Metrowest weather a mere 6 miles to the west. Summers are cooler, and winters are warmer than just on the other side of the ring of hills. Hey, isn’t there a historical/geographical name for this ring of hills (most of them drumlins)?

Score one for Ning - some locals have created the Ice Storm Help Network already. Neat. Sadly, if your power is out, it’s unlikely you’ll be able to participate in the network, at least sans iPhone. And even then, I wouldn’t be surprised about cell towers being out.

As for us, we got our christmas tree this morning at Mahoney’s in Winchester, and the weather was cool but nice. They have all the usual holiday displays and plants - it’s actually a great place to walk around in the winter, since you can meander through the warm greenhouse when it’s cold outside. And this year they have a couple of really cute displays of stuffed animals from Hansa. Not only are the stuffed animals very detailed (and cute), they’re laid out in a couple of spots complete with plants all around, almost like a jungle (in potting supply greenhouse) or christmas wonderland. It took a while to get our little one away from all the fun.

December 12, 2008

Philippe M. ChiassonGozer's got a wordle!

... just like everybody else. Looks like everybody is doing it, so here is my wordle

Gozer's Wordle