Yahoo Acquires Zimbra

Zimbra Today, Zimbra announced today that they have been acquired by Yahoo! for $350 million. Zimbra was bound to be acquired by someone and the acquisition by Yahoo! wasn’t an overly surprising move as it has had a tendency to pick up Web 2.0 and Ajax Web Apps over the past few years. It will be great to see where Zimbra (which is an amazing application) goes with the resources that Yahoo! brings to the table.

This purchase is interesting seeing how Plymouth State University, my place of employment, just finished an implementation this summer. With such a large organization backing Zimbra now, it will be interesting how licensing will change over the years. We can always hope that the changes will be minimal…but as always, change is inevitable.

Regardless, the two companies in bed together isn’t too scary of a thought and I look forward to seeing things unfold!

Ultimate Web 2.0 Collaborative Game: Eat Poop U Cat

Via Ajaxian a few days ago, I was re-introduced to a great party game that I have played with pen and paper a couple times in my life. The game results in off the wall drawing and serious laughs and it has found it’s way to the web in a collaborative game of sweet humorous action.

EatPoopUCat is the name of the game. Funny name? Yeah, well this game goes by many. You may know this game as: Fax Machine; The Paper Game; Pictophone; The Picture Sentence Game; The Sentence Game; Paper Telephone; Sentence Picture; Telephone Pictionary; Descriptionary; Writesy Drawsy; Cricket Cricket I’m On Fire; or Moneyduck.

The game works like so: Someone comes up with a sentence or phrase. That phrase goes to another person who draws a picture of the phrase. That picture goes to the next person who writes a phrase to the picture (without seeing the first phrase). Rinse and repeat. The web-based game works the same, you type a phrase in a box and hit submit, or you draw right on the site or upload a picture from your compy. Easy as that! Here’s an example result of a game I participated in:

Phrase 1:For your children, go straight to the wall and jump it like a gazelle


Phrase 2: It was a bright sunny day and kids were playing in the frontyard


Phrase 3: Outside the bar, Phil was roughed up by some plug-uglies who beaned him in the head with a volleyball.


Phrase 4: If the beer and power cords don’t get you, the low flying soccer balls surely will.


Final Phrase:He has 3 choises: Drink 2 Beers, throw Frisbee-pizzas or be a human bridge for the electricity.

It’s pretty cool how the phrases/pictures change as it gets passed from person to person. In addition to the ability to do the above, each ‘story’ can be commented on and rated. Plus, for pictures or interpretations you can give “kudos” to the author/artist. Oh! And as you participate in different threads, you can keep tabs on the statuses of those strips that you have done.

Lastly, for those of you that are Web 2.0 geeks, the site is Ajaxified with a combination of Google Web Toolkit, Amazon S3, and Amazon EC2, along with an in browser drawing utility that uses the Canvas element. Pretty snazzy. I’ve already wasted a great deal of time in the evenings on this site and many more to come!


Flock Flock is awesome. For now I’ve made the switch from Firefox to Flock’s Beta v0.7. What is Flock? Well, Flock is the expert on themselves so here’s their description:

The web, and the way people engage online, has evolved dramatically over the past decade. We still see a lot of room for the browser to keep pace with everything that’s going on on the web. Providing a fast, safe and simple browsing experience is very important, but at Flock we are also trying to look more broadly at how the web browser can enrich users’ online experience.

For this release, and for at least the next year or so, we are primarily focused on supporting the social dimension of the web, and on bringing information closer to the user. Right now this includes a heavy emphasis on the photo experience (from upload through discovery to notification), RSS support, dramatic improvements to the search box (including a new take on favorites), and blogging.

Casey over at MaisonBisson posted about Flock back in October when the Flock preview first came out (v0.1 or something). I saw Casey’s post and decided to give Flock a whirl. I was mildly impressed and saw that Flock had potential. Its big problems at the time were related to memory leaks and sluggishness. That seems to be resolved and they’ve done wonders to their ‘features.’

Social Bookmarks

Beautiful. Flock lets you use or Shadows as your bookmarking tool. So anything you bookmark can be accessed from anywhere you go (whether through Flock or at the bookmarking site). Your bookmarks can be tagged right from the browser as well as marked as public or private.

Social Images

Flock integrates with Flickr and Photobucket and a sexy manner. The browser literally becomes an uploading/browsing agent for images. They’ve a nice drag and drop interface with a photo bar that you can place above your tabs. Check it out:

Flock Flickr

Its slick, intuitive and has many Flickr features (I can’t speak for Photobucket as I do not have an account there).

Text & Misc. Images

Another sexy aspect of Flock is the ability to highlight and drag text and images URLs from anywhere and store them for later. Once you’ve placed something in that Text and Image bar you can browse, drag and drop the data into the browser or external applications. In addition to the dragging and dropping of the data, you can simply right-click the data and select the blog option.

Flock Text


Flock being a Web 2.0 browser (as its being toted), it cannot forget blogging. You can set your browser up to post to your blog (using a WYSIWYG editor). You can post to blogs hosted by: WordPress, TypePad, Moveable Type, LiveJournal, Drupal, and Blogger. The blogging tool supports any blog that uses Moveable Type, Blogger, MetaWebLog, and Atom APIs. Snazzy tool, but I’m happy with the web-based editing of my blogs for now.


There’s a nice news aggregator as part of Flock. Looks decent…but I’ll stick to my own home-grown aggregator.


If you use the browser search tool, Flock goes a step further and as you type it’ll grab items from your history, favorites, and the top five searches from Yahoo!. Pretty sexy stuff. Be sure to add Blingo to your search list!


Because Flock is based off of Firefox, many of the extension run for it! So you can still have the must haves. I definately wouldn’t be using Flock otherwise.


I like Flock for now. It looks promising, the features are nice and it looks pretty sexy too. Get it at

MasterWish – Practicing What I Preach

masterwish MasterWish, my labor of love (created with my friends Zach Tirrell and Jon Emmons) is my playground for Ajax and Web 2.0 experiments.

If you haven’t been acquainted with the site, its a wishlist site with a schlew of features. The high point is the ability to secure down lists and grant access to specific buddy groups. I’m pleased to say that we have gained a decent member base in the past 8 months and I am also happy to say that things are going to change around shortly!

MasterWish was built using SAJAX as the tool of choice for Ajax communication but as I’ve mentioned in the past, I am a Prototype convert. My knowledge of Ajax, JSON, and general application structure has been morphing so much in recent weeks that I have held off in completely revamping the wish list site.

Things are changing. I have begun the work to implement the following:

  • Creation of more “hackable” Web Service APIs using SOAP and REST
  • Representation of data using both XML and JSON
  • Ajax powered by Prototype
  • Sweet DOM manipulation powered by
  • Separation of Layout and Logic with event:Selectors
  • and of course, we’re already doing: Server-Side Templating for greater separation of Layout and Logic.

Sign up. Stay tuned. Get gifts.

Thumbstack – A Web-Based Presentation Application

thumbstackA while back, my pal Zach posted about S5, “A Simple Standards-Based Slide Show System.” Now, its important to note that S5 is trying to set up a standard and not develop a full blown application. S5 seems to be a solid foundation…all it really needs is a slick editor and I’m sold.

Well, as I’ve been waiting for and S5 editor to come along, Thumbstack has come along instead and I’ll be content goofing around with that for a while. While Thumbstack isn’t built off of the S5 standard, it is a sold web implementation of presentation software complete with a decent draggable presentation builder…themable to boot! (although the available themes are dumb right now, that’s sure to improve). The editor is a div based-DHTML pumped-Ajax integrated layout; the presentation itself seems to be Flash. Interesting stuff.

It shows promise, but there are a few things it lacks that I hope to see:

  • More themes
  • Slide transitions and animations (nothing too crazy, basic will do fine)
  • Export to Powerpoint
  • Ctrl+S to save
  • While viewing a presentation, right clicking should give a contextual menu.

I’ll be keeping an eye on Thumbstack. Google recently bought Writely, which means they are interested in web-based Office software. They’ve got Gmail, an upcoming Calendar, a Word Processor, and a Webpage Builder. All they need now are solid presentation and spreadsheet applications. The race is on.

Google Acquires Writely

Back in October I was extremely excited about Writely. It has been a few months and my love for the word processing application grows each time I use it. I wrote:

The gist of this application is that its a Word Processor online! You can type documents (much like you can with MS Word or through a web interface. The application has an auto-save, hot keys, exporting to HTML and Word, HTML editing and the ability to publish to blogs! Oh, and the sweet part about it…you tag your documents and can distribute them with other users.

Writely is an excellent product and, like most other web 2.0 applications out there, larger companies caught notice. This time, rather than Yahoo acquiring this web 2.0 app like it did Flickr and; Google made this acquisition. There is now a Google Writely team. Jen Mazzon, a Writely developer posted this on the official Google Blog:

For the last five months, I’ve been part of a Silicon Valley startup called Upstartle, which makes Writely, a collaborative word processor that runs in a web browser. Well, as of Monday, I’m happy to say that I, and the rest of the Writely team, are now part of Google.

The Writely team seems happy with the acquisition (as I would be). Sadly, if you are interested in creating a Writely account, you’ll have to wait until they re-open account registration…which they plan to do once they’ve re-located to Google. The good news? Those that already have accounts will still be able to use them as is. Also those that have existing accounts can still add collaborators to documents despite the closed account creation process. Sexy.

And if you’re curious:

Here are our “top 10” reasons why being part of Google is fantastic for Writely and the Writely team:

10. Writely is like a caterpillar that we hope to make into a beautiful butterfly at Google!
9. We love Google’s philosophy and values — especially “Focus on the user.”
8. We’re as passionate as Google is about respecting users’ privacy.
7. Many of our users are already Google fans using other Google services.
6. Being at Google will help us do more great things faster.
5. Some people didn’t feel comfortable trusting a tiny startup with their documents…and we’re no longer a tiny startup.
4. We like lava lamps and they’re pretty much standard decor at Google.
3. Three words: Free Googleplex lunches
2. As fun as it’s been to launch a popular, global, 24×7 Web service, it’ll be nice to take a vacation once in a while!
…and the number one reason???
1. We’ll be able to bring Writely to not just thousands but millions of users — the more, the merrier

Google Calendar Coming Down the Pipe

googlecl2.gif I knew it was coming, but when will it get here? I’m talking about Google’s Calendar a.k.a. Google CL2. It seems as if the calendar may come sooner than later, as google is leaving bread crumbs hanging around that point in the direction of a calendar app. Here’s a blurb from (where I first read about this sweet news):

I can’t see the links show up in Gmail itself yet, but if you go you can select which links to show. And when you go to the calendar url ( it gives you the login box, but if you try to login it gives you an invalid request page.

I’ve no clue what Google CL2 has in store, but I’m hoping for something on par with Zimbra‘s integrated calendar. I speculate that it will be hand-in-hand with Gmail, it will be Ajaxified, and I can only hope it has RSS features. Just another sweet tool to be added to Google’s list of services!

Multimedia – Web 2.0

web2.jpgO’Reilly has a document on “What is Web 2.0?“. For class on Tuesday, please read the article as it really encapsulates the movement in web application design/architecture.

The important topics discussed are:

  • Web as a Platform
  • Harnessing Collective Intelligence
  • Data is the Next Intel Inside
  • End of the Software Release Cycle
  • Lightweight Programming Models
  • Software Above the Level of a Single Device
  • Rich User Experiences

Of particular note is the comparison between a Web 1.0/Web 2.0 comparisons:

Web 1.0 Web 2.0
DoubleClick –> Google AdSense
Ofoto –> Flickr
Akamai –> BitTorrent –> Napster
Britannica Online –> Wikipedia
personal websites –> blogging
evite –> and EVDB
domain name speculation –> search engine optimization
page views –> cost per click
screen scraping –> web services
publishing –> participation
content management systems –> wikis
directories (taxonomy) –> tagging (“folksonomy”)
stickiness –> syndication

Prototype Makes Javascript Painless

prototype.gifPrototype is an excellent tool but lacking in documentation, causing me to fumble around and *gasp* look at the source code. As any developer knows, when reviewing code there is a chance that you may miss something or ignore what doesn’t seem interesting. In doing so, you may miss some sweet features that you would otherwise use.

I did stumble upon some Prototype Cheat Sheets that have helped immensely in exposing functions that existed in Prototype that I had no clue were there. Desipte the exposure of function names, I was at a loss for what some of them did. Luckily, there is an article over at that documents many of those functions! The documentation is fairly solid so I HIGHLY reccommend checking it out. Here’s one of the features of Prototype that I had seen the function but hadn’t a firm understanding on what it did:

Tries a number of functions in order. If the first fails, it attempts the second, and so on.

function getXmlNodeValue(xmlNode){
	return Try.these(
		function() {return xmlNode.text;},
		function() {return xmlNode.textContent;)

Hugely cool. In addition, Ajaxian – which seems to be my source for many things Ajax – has pointed me towards this article over at SitePoint. I was aware of a number of the points mentioned in that SitePoint article, but a few stood out as super sexy. Here’s the juicy tidbits:

Prototype adds a great method to Number, too. Say goodbye to your for loops!

// alerts "1", "2", "3" ... "50"
(50).times(function(n) { alert(n); });

This does the same as a foreach in PHP. I’ve been looking for something like this!

// alerts "a is at 0" then "b is at 1" then "c is at 2"
["a", "b", "c"].each(function(item, index) {
 alert(item + " is at " + index);

Iterating over childNodes in the DOM
By default, even though nodes are represented in Array-like form, they do not have Enumerable available to them automatically. Here’s how to do it:

// add Enumerable to childNodes
var children = $A($("mydiv").childNodes);

// sets class="highlighted" for all child nodes of "mydiv"
children.each(function(child) {
 child.setAttribute("class", "highlighted");

Here’s one I found while digging around in the Prototype code that the article solidified my understanding:

Periodically does an Ajax.Updater call!

new Ajax.PeriodicalUpdater("mydiv", "hello.php", {
 // initial number of seconds interval between calls
 frequency : 1,
 decay : 2

The decay option allows you to give your server a bit of a break if it’s returning a lot of identical responses. Essentially, every time PeriodicalUpdater makes a request, it compares the results with what the server returned last time. If the values are the same, it multiplies the interval by the decay value. So, for the above example, it would make the next request two seconds later, then four seconds later, and so on, until it received a different result from the server. At that point, the interval would be reset to one second.

Register global event handlers that are triggered for each and every AJAX request that happens on the page.

 onCreate : showLoader,
 onComplete : hideLoader

Look Ma, Cross-Domain Scripting!

Ajax, as I’ve stated time and time again, is sweet. So what is problem? XMLHTTPRequest requires that the called scripts that execute server side and return information to the client must reside on the same domain. This has irked me time and time again during my exploration and experimentation of the Web 2.0 world.

Enter JSON Web Services and dynamic script tags. This beauty allows for Ajax-like communication across domains without requiring page loads. Right right right…so how do you use it? Read on…

First, lets clarify what JSON (JavaScript Object Notation) is. Wikipedia explains that JSON is just a way to structure object data in a way that is easily interpreted…primarily with JavaScript. Here’s some examples from Wikipedia:

JSON Example:

bork({"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}

Which is the same as this XML Example:

<menu id="file" value="File">
    <menuitem value="New" onclick="CreateNewDoc()" />
    <menuitem value="Open" onclick="OpenDoc()" />
    <menuitem value="Close" onclick="CloseDoc()" />

So…if JSON just the data representation part of things, how does it work similarly to Ajax?

Now we’re getting into the Web Services side of things. The quick answer: When you dynamically create <script> tags on a page, the JavaScript source is executed immediately. Now, as most experimental web developers may well know, you can reference remote JavaScript source in a <script> tag. Which means….if you dynamically create a script tag that references a source on another domain, and that source outputs JSON, you are as good as gold!

Here’s the step by step: (I use a JavaScript Object I found over at Dan Theurer’s Blog for the dynamic adding of script elements…it helps avoid duplicate script tags).

First, lets make the remote file that outputs JSON. (obviously, most cases will have the data dynamically generated…but I’ll use a static example as the generation of this data is trivial)

file: remote_file.php

< ?php
echo 'bork({"Image": { "Width":500, "Height":250, "Title":"Giant Cow", "Thumbnail":{"Url":"", "Height": 75, "Width": 150}}});';

Here’s the html file we want the user to see/interact with:

file: client.html

<script src="js/jsr_class.js" type="text/javascript"></script>
<script type="text/javascript">
function addScript()
  var obj=new JSONscriptRequest('');      
  obj.buildScriptTag(); // Build the script tag      
  obj.addScriptTag(); // Execute (add) the script tag
}//end addScript

function bork(data)
  var text='';

    text='Image Title: ' + data.Image.Title + '<br />';
    text+='Width: ' + data.Image.Width + '<br />';
    text+='Height: ' + data.Image.Height + '<br />';
    text+='Thumbnail Data: ' + data.Image.Thumbnail.Url;
    text+=' (' + data.Image.Thumbnail.Width + 'x' + data.Image.Thumbnail.Height + ')<br />';
}//end bork
<a href="#" onClick="addScript(); return false;">Click to Get Stuff</a>
<div id="output"></div>

Thats all there is to it! Simple and slick. Is My New Best Friend

Ajax is great. DOM manipulation is sexy. I’m fairly new to the Ajax world having only developed with with it since July. MasterWish was my guinea pig and continues to be my playground for all things Web 2.0. Luckily, my manager Ken is pumped up about this whole Web 2.0/Ajax thing which has allowed me to experiment with my projects at work as well and PSU should expect to see some sweet apps roll out over the next year!

Since July, I’ve been developing my Ajax applications and examples using SAJAX (Simple Ajax), a PHP/Javascript framework for Ajax development. It was great at first glance…a lot easier than building Asynchronous Javascript transactions from scratch. But despite its ease, it was a bit clunky. Last week I was stumbling around the web looking for anything new to suck up and found a beauty of a tool. is a Javascript Effects and Control framework developed by Thomas Fuchs, a software architect living in Vienna, Austria who, like me, was disappointed by current web application frameworks that made no sense to him. His framework is 3 things: Easy to Use, Simple, and Easy to Use. His libraries – built off of the Ajax framework, Prototype – blow SAJAX out of the water! Let me give you an example to, say, update a news title on an article (I won’t include the HTML markup as that is trivial):

Here’s what needs to be done to build a SAJAX call:

Step 1: Create a SAJAX Call Function

function x_updateTitle()
	sajax_do_call('/process_ajax.php',"x_updateTitle", x_updateTitle.arguments);

Step 2: Create a server side function to handle the update

< ?php
function x_updateTitle($news_id,$news_title)
	//do some database calls to update the title;

Step 3: Edit the server side SAJAX file (process_ajax.php) and add x_updateTitle to the list of valid call functions

< ?php

Step 4: Call the SAJAX Javascript function from somewhere (in an onClick, onSubmit or something)

<a onClick="x_updateTitle(1, document.getElementById('news_title').value, 'callbackFunction');">asdfdf</a>

Here’s the equivalent in
Step 1: Create a server side function to handle the update

< ?php
function x_updateTitle($news_id,$news_title)
	//do some database calls to update the title;

Step 2: Call the Javascript function from somewhere (in an onClick, onSubmit or something)

<a onClick="new Ajax.Request('/process_ajax.php', { asynchronous:true, parameters:'news_id=1&news_title=$(\'news_title\')', onSuccess:callbackFunction });">asdf</a>

Thats it! Its a big difference. Thats just the tip of the iceberg. has many features for implementing Drag and Drop with one line of Javascript code; fancy display/hide functions; dynamic DOM Element creation/deletion; field autocompletion; and various other visual effects. It slick. And to top it off, the website is pretty sweet! Luckily the documentation is excellent and is in wiki format. As Plymouth State moves into the Web 2.0 world, I’ll be pushing for to be our Ajax standard. I have seen the light and it is good.

Ajax, More Than A Buzz Word

Ajax the development technique, not to be confused with Ajax the cleaning solution, is taking the web by storm. What is it?

Ajax stands for Asynchronous Javascript And XML. Its an architectural methodology on the interactions between a number of different technologies in a way that provides a more seamless user experience between user-to-server communication.

There are tons of blogs and articles out there that rant and rave of its use as savvy site designers implement Ajax into their web applications, and rightly so. However, through my blog skipping and digg watching I have seen numerous complaints of “OMG, Ajax is stupid….its just a fad/buzzword/etc” or “Ajax is just overhyped, don’t know why people use it!!” I have a couple words that describe those people: cynical, ignorant and, well…squirrel handed. Wake up people. Ajax isn’t a fad, its an architectural change in the way that web applications function. A focus on application speed and uninterrupted user interaction.

What’s so great about it? Why do I pee my pants with glee every time I use a web app that makes use of the technology?

I’m a developer. I’ve been developing database driven web applications for a number of years now and have seen the clear line between a desktop application and a web application. Desktop applications are highly interactive and responsive to the user, where web apps (in the past), were fairly static locations (however dynamic the content) to provide information/entertainment to the user, where user interaction required page loads in order to store information to a database/write to a file.

Next came Flash, an excellent tool but tends to require a much more artistic flare and is much more time consuming with general maintenance than its worth.

The reason Ajax is so sexy is that it bridges the gap.

The average-Joe browser may not be aware when they stumble upon a site that makes good use of Ajax, but that average Joe can feel something right about it. To the avid browser, however, an Ajax site is more readily obvious; you can interact with elements on a page and save settings without reloading; pages are highly resposive to user input with minimal wait times.

Gmail and Google Maps were the applications that really brought Ajax into the limelight. (They weren’t the first, just the first major apps). The world saw what Google could do and followed suit. The world saw that it was good. The Ajax revolution was born. It has birthed a whole new breed and boom on the internet, bringing forward a multitude Ajax enabled sites and applications:

And thats just the tip of the iceberg. I look forward to what will become of our expectations of web applications. You won’t see me sitting idle during this evolution. I will be innovating and participating all along the way.

Amazon Tags!

About Time! According to CNet, Amazon is heading down the road of tagging. This is great news in my book. I’m a follower of the Web 2.0 movement and have really been turned onto the idea of folksonomy (tagging) by products like Flickr and thus have recently brought MasterWish on board with tagging.

While many people out there have used tagging in Flickr, Gmail, MasterWish and various other web 2.0 apps…there are still many out there that express their opinions on tagging as “Tagging…WTF is that?!”. Having a large web company such as Amazon with its HUGE following jump on the band wagon with tagging will help bring folksonomy to the masses.

While exciting that this is happening, Amazon is slowly rolling tags out to their users as evidenced in this excerpt of the CNet article:

The idea, apparently, is to slowly experiment with tags and to give users some power over how certain Amazon products–books, for example–are categorized.

For now […] only about half of Amazon’s users can even see tags on the site.

Its only a matter of time before folksonomy will cease to be a buzz word and start appearing in the english dictionary. Everybody and their brother will know of tagging and the world will be a happier, easier to search place. I can only hope

MasterWish Enters the Web 2.0 World

MasterWish has been my labor of love for the past 6 months. The site – create by Zachary Tirrell, Jon Emmons, and myself – was opened to the public (in beta mode) in the middle of September.

Over the past month, we’ve been pretty excited about the whole Web 2.0 craze. The initial release was fairly solid but it lacked a few key elements to make it a 2.0 application. The three of us have wanted to bring MasterWish fully into the Web 2.0 world, so with a great deal of planning and even more coding, I am comfortable to say that MasterWish is now a fairly solid Web 2.0 application.

MasterWish has:

  • Folksonomy Features (tagging)
  • Easy item adds via a Favelet
  • Ajax for quick and easy assignments of items to lists, buddies to groups, buddies to your buddy list, copying items from other people, etc.
  • Buddies/Contacts
  • Group-Level access to Categorized Wish Lists
  • Fine-grained access control on your user information (so you can distribute information to people on a case by case basis). Here are some things you can distribute to other users:
    • Real Name
    • Address
    • E-mail
    • Many clothing sizes (shirt, bra, inseam, ring, head, etc)
    • Color Preference
    • etc.

Currently we are working on a very sweet feature to allow for collaborative lists. This will make wedding registries a LOT easier and my office at Plymouth State (which currently uses MasterWish for book orders) will be able to create an office wishlist and allow multiple users to contribute.

Christmas is coming around the corner, so if you haven’t checked it out for your wishlist needs, you should do so. You definately won’t regret it…and your family will thank you for it!