Activate your free membership today | Log-in

Tuesday, January 6th, 2009

SendMeHome with GWT

Category: GWT, Showcase

SendMeHome lets you to assign a unique code, called a SendMeHome ID, to any physical item. We are launching our newest feature, Stories, which connects a group of people through an item as it travels the globe. Social networks such as Facebook mainly involve users communicating with their ‘friends’, SendMeHome is unique because it uses a real-world object to tell a story that enables interaction between new and like-minded people who may otherwise have never known of each other’s existence.

Our beta users have already created stories to write a collaborative novel, share cooking tips, discuss political events, and even transport a statue to Easter Island.

The site uses GWT components and integrates with services such as good ole Google Maps. You can check out a story. Having a code associated to items is a lot of fun (read: Webkinz) and seems to be something that can be useful.

Posted by Dion Almaer at 11:37 am
4 Comments

+++--
3.6 rating from 11 votes

Tuesday, December 30th, 2008

Britain from Above

Category: Showcase

The Britain from Above BBC programme and website doesn’t seem to use the BBC library Glow but instead has nice Mootools effects on the front page and a jQuery Carousel on sub pages.

The effects made me feel like I was on a Flash site at first, but the real interest is the amazing visualizations that the programme has done.

Take a look at the Taxi’s at rush hour:

Posted by Dion Almaer at 6:11 am
1 Comment

++++-
4.1 rating from 7 votes

Tuesday, December 23rd, 2008

Speed Dial Canvas Edition

Category: Canvas, Showcase

Christian Effenberger has a Christmas contribution for us, Quickchoice:

Quickchoice is a Speed Dial clone for css transform supporting browsers.
It’s a simple and quick “public domain” implementation of Opera’s Speed Dial.
Currently useable with Safari 3.2 and probably Firefox 3.1 -
through the http-protocol.

For personal use you need to save the html file (save as) and push to
your htdocs folder (localhost) or upload via ftp to your domain!

Posted by Dion Almaer at 7:11 am
1 Comment

++++-
4.2 rating from 18 votes

Friday, December 19th, 2008

DLINK: automatic link annotation

Category: JavaScript, Showcase

David King has created a small JavaScript library dlink that styles your links to let the user know if the link is internal, external, a subdomain, an anchor on the same page, or an email link.

To setup, you can simply:

HTML:
  1.  
  2. <script type="text/javascript" src="http://oopstudios.com/dlink/dlink.js"></script>
  3.  
  4. <!-- use class=dlink -->
  5. <div class="dlink">
  6. your <a href="#">link filled</a> content...
  7. </div>
  8.  
  9. <!-- change styles
  10. a.internal  {color: #D47700;}
  11. a.external  {color: #0074D4;}
  12. a.subdomain {color: #D43500;}
  13. a.email     {color: #00B235;}
  14. -->
  15.  

Posted by Dion Almaer at 12:01 am
9 Comments

++++-
4.5 rating from 34 votes

Wednesday, December 17th, 2008

Music Player UI

Category: Showcase, UI, jQuery

Yensdesign has a nice little example of a music player UI that uses mouse gestures and key handling to give a clean experience.

Songza did a great job here, and I still use it to find songs for the kids.

Posted by Dion Almaer at 6:31 am
3 Comments

+++--
3.3 rating from 21 votes

Friday, December 5th, 2008

JSOS: jQuery based desktop

Category: Showcase, jQuery

There have been plenty of JavaScript desktop in the browsers of the years (ah WebOS!).

James Luterek has posted about the latest jQuery based desktop environment.

I started creating an operating system like user interface in JavaScript. I had intended to use it for the admin sections of my content management system(that runs this website), but through developing it I started to question it's usability and decided to discontinue development.

Features in it's current state:

  • Start Button
  • Task Bar - view open windows and set focus/minimize
  • Windows (Create, move, maximize, minimize, resize, etc.)
  • Show Desktop on right click
  • Properties (Theme Color, Text Color, Background Color, Background Image)
  • Properties saved in cookies for next visit

Still don't know how to create a new window other than a Google one, and I am never quite sure when people will use these (even fully baked). I am sure it will happen, but not until the browser platform has gotten to a point where it actually can. Calling this an "OS" is funny too ;)

Happy Friday!

Posted by Dion Almaer at 2:16 pm
15 Comments

++---
2 rating from 74 votes

Thursday, December 4th, 2008

Freckle: Time tracking with style

Category: Prototype, Scriptaculous, Showcase

Thomas Fuchs and Amy Hoy are back with another web site, this time Freckle, a new take on time tracking.

Thomas posted about it on his site and shared that it uses an early build of scripty2 which lead me to peak around on GitHub. It looks nice indeed.

You can see the evidence of Script.aculo.us throughout the UI. The calendar morphs between months as you flip around. Jumping between headers rolls around nicely (e.g. reporting mode from insertion). Inline modal popups. Nicely done.

Posted by Dion Almaer at 9:20 am
3 Comments

+++--
3.8 rating from 25 votes

Monday, December 1st, 2008

iPod Engraving Gallery and Leopard.Next DHTML

Category: Apple, Showcase

I noticed the new iPod Engraving Gallery that is a nice use of Coherent to show a slick UI with engraving suggestions.

I was also talking to a friend that has leopard beta bits and he was playing with an updated Dashcode. It appears that the Coherent library is now used for the widgets too. Yay data binding!

Posted by Dion Almaer at 8:38 am
4 Comments

++---
2.7 rating from 20 votes

Friday, November 28th, 2008

JavaScript Bra Size Calculator

Category: Examples, JavaScript, Showcase

Now this could only fly on a Friday ;)

Ed Spencer has coded up a bra size calculator in JavaScript:

One of the more mesmerizing websites I've worked on recently was for a lingerie boutique in the UK. Aside from the unenviable task of having to look at pictures of women in lingerie all day, I was also forced (forced!) to write a bra size calculator.

The theory behind bra size calculation is arcane and somewhat magical. Understanding of it does not come easily to man nor beast, so it is lucky that I, falling cleanly into neither category, have passed through pain and torment to save you the trouble.

After hours of testing he came up with the BraCalculator:

JAVASCRIPT:
  1.  
  2. var BraCalculator = {
  3.  
  4.   /**
  5.    * The string to be returned when the result could not be calculated.  Overwrite to change this
  6.    */
  7.   unknownString: "Unknown",
  8.  
  9.   cupSizes: ["A", "B", "C", "D", "DD", "E", "EE", "F", "FF", "G", "GG", "H", "HH",
  10.              "J", "JJ", "K", "KK", "L", "LL", "M", "MM", "N", "NN"],
  11.  
  12.   /**
  13.    * Returns the correct bra size for given under bust and over bust measurements
  14.    * @param {Number} underBust The measurement taken under the bust (in inches)
  15.    * @param {Number} overBust The measurement taken over the bust (in inches)
  16.    * @return {String} The correct bra size for the given measurements (e.g. 32C, 40DD, etc)
  17.    */
  18.   calculateSize: function(underBust, overBust) {
  19.     var bandSize = this.calculateBandSize(underBust);
  20.     var cupSize  = this.calculateCupSize(bandSize, overBust);
  21.    
  22.     if (bandSize && cupSize) {
  23.       return bandSize + cupSize;
  24.     } else {
  25.       return this.unknownString;
  26.     };
  27.   },
  28.  
  29.   /**
  30.    * Calculates the correct band size for a given under bust measurement
  31.    * @param {Number} underBust The measurement under the bust
  32.    * @return {Number} The correct band size
  33.    */
  34.   calculateBandSize: function(underBust) {
  35.     var underBust = parseInt(underBust, 10);
  36.     return underBust + (underBust % 2) + 2;
  37.   },
  38.  
  39.   /**
  40.    * Calculates the Cup size required given the band size and the over bust measurement
  41.    * @param {Number} bandSize The measured band size (should be an even number)
  42.    * @param {Number} overBust The measurement taken over the bust
  43.    * @return {String} The appropriate alphabetical cup size
  44.    */
  45.   calculateCupSize: function(bandSize, overBust) {
  46.     var bandSize = parseInt(bandSize, 10);
  47.     var overBust = parseInt(overBust, 10);
  48.     var diff     = overBust - bandSize;
  49.    
  50.     var result   = this.cupSizes[diff];
  51.    
  52.     //return false if we couldn't lookup a cup size
  53.     return result ? result : false;
  54.   }
  55. };
  56.  

Check it out in action

Posted by Dion Almaer at 1:33 pm
11 Comments

+++--
3.2 rating from 38 votes

Wednesday, November 26th, 2008

Drawter: Visual Web based HTML tool

Category: Showcase, Utility

Damian Wielgosik has created Drawter, a web based tool to layout pages:

Drawter is a tool written in JavaScript and based on jQuery library. It provides you the possibility to literally draw your website's code. It runs on every single web-browser which makes it really useful and helpful. Each tag is presented as a layer you have drawn.

Currently Drawter is available in Pro version, which means that it is intended for webmasters use only - knowledge of HTML and CSS is required.

Drawter is not a tool for laymen, for the time being, but the whole team behind the project is putting every effort to launch a new version called "Amateur". Soon you will be able to draw your websites without any knowledge of HTML or CSS. Launching soon, really soon.

He has a detailed screencast of the tool in action where you see how you can flip between draw and edit modes to build up your page. Nicely done!

Posted by Dion Almaer at 9:00 am
8 Comments

+++--
3.2 rating from 39 votes

Monday, November 24th, 2008

keyboardr.com: quicksilver in a web page

Category: Showcase

Julius Eckert has renamed and relaunched chosr to keyboardr.

keyboardr is a homepage. It speeds up your internet experience. And if you like, it helps you keeping your hands on the keyboard.

In the first place keyboardr is a meta-search. You get Google, Wikipedia, Youtube altogether. The instant search and the keyboard navigation are replacing the feeling of “searching” with the feeling of “launching”.

For the future we have big plans for keyboardr:

keyboardr will utilize much more webservices. Among from usual websearch services like google, we are planning to support friendfeed, delicious, twitter, flickr, google docs and many more. And in the final stage, we will have an extension system, open for any developer, to integrate any webservice into our interface. So keyboardr will be a central station for you to get all your common internet tasks done much faster.

It is a nice showcase of an Ajax and mashup application. I am curious to see if it will get uptake. Having a launcher that lives in a web page may not be enough. In comparison, Ubiquity as an addon can do so much more. You want to do the cool stuff from any page, in any application, and you want to be able to write your own extensions. keyboardr has a good start showing the FriendFeed extension, and with an open API it will be good to see what gets added.

Posted by Dion Almaer at 5:07 am
1 Comment

+++--
3.9 rating from 21 votes

Tuesday, November 18th, 2008

JS-909: Drum Machine, No Flash

Category: Showcase, Sound

Cameron Adams has another fun Javascript experiment in JS-909, a drum machine he built from scratch. It plays sound without Flash, along with a check that your browser is capable of playing sound this way, and also includes a little canvas-powered psychedelic graphics engine.

At the recent Web Directions JavaScript libraries panel, I was in charge of representing the hard-working non-library hacker. (Of which there exist approximately two in the wild.) And when it came to the final exercise – the one with the aim of blowing people's minds – there was but one thing I could do: make a drum machine. Without libraries. Without Flash.

I'm fully aware that there's much better ways of working with sound on the Web, but I'm also fully aware that I like making useless toys. The result of these two realisations? JS-909.

Sound comes via the <embed> tag, relying on native browser functions:

for (var sound in sounds)
{
var embedContainer = document.createElement("div");
embedContainer.className = "embedContainer";
document.body.appendChild(embedContainer);
embedContainer.innerHTML = soundElementString(sound, sounds[sound]);
}

I recently found it's possible to combine this no-flash sound technique with data: URLs, so you can build audio web apps without Flash and offline, running from a single file. It's all very experimental at this stage though.

Posted by Michael Mahemoff at 4:09 am
11 Comments

++++-
4.1 rating from 21 votes

Monday, November 17th, 2008

Shopping cart zoom UI

Category: Showcase

Chris Vanrensburg has added a nice little effect at Zazzle. Mouse over a product in the results, and you will see it zoom in for a closer look. Ben and I often talk about the zoomable UI that Apple uses in their store (and many others) and how it makes shoppers feel like they can see a lot more of the product and sense that they are really interacting with it. This hopefully leads to more sales as you don't get the "hmm, don't know if I can buy this online" feeling.

Chris talked to us about the features, including the implementation:

On the technical front one of the major requirements for that feature was to have little (ideally zero) impact on the page weight and load time. Criteria we considered, in this regard, included things such as:

1) not adding any extra image load to the initial page load (so, none of the larger images are loaded in initially - they are loaded on demand when the effect is activated)

2) not adding any extra DOM that would add to initial page render time (so the extra DOM node used for the zoom & pan effect for each cell is added dynamically when the effect is activated)

3) not adding too much to initial page wiring time (so, progressive wiring of cells to defer impact to when effect is activated)

4) not adding too much extra JS code (so, just efficient implementation and good code reuse satisfied this requirement).

Other UX requirements were...

1) It should be discoverable (accomplished with this implementation, because if someone's interested in something, they will contemplate going to the product page and, therefore, hover over the cells and discover the interaction).

2) Operation should feel intuitive and "lightweight" (so, no added control UI needed for the interaction). Our user testing found that users learned quickly how to pan, understood the interaction well, found it compelling, and quickly became addicted to inspecting every product that way.

3) Shouldn't create a minefield. We wanted to ensure that users wouldn't develop an aversion to the results grid (potentially disastrous for sales). We didn't want to deliver a seizure inducing experience every time the user moves their mouse from one side of the screen to the other, so there is a rest delay before the effect is activated. This is different to a hover/mouseover duration threshold, in that the user needs to have rested the mouse for a minimum amount of time (easily configurable, we used 150ms) before the effect is activated - long enough to prevent triggering as the mouse moves around, but short enough that the user doesn't become impatient.

4) We didn't want an experience that would add obscuring overlays on top off the grid and risk the user creating a clutter that might frustrate them and that they might not be able to recover from / clean up. We deliberately wanted to "contain" the experience within the real estate of each cell, to not have the interaction block other results from view (ala a lightbox UX), potentially contaminating the user's receptivity to adjacent results and potentially creating confounding data points in our conversion metrics.

Some other points...

1) Zoom level was designed to be easily configurable, but we chose 2.5 (too high a zoom and the interaction starts to feel very touchy / sensitive to mouse movement).

2) An early version of the effect switched immediately to the zoomed image with pan activated. Ultimately, we decided that the zoom in animation was key to the user understanding the effect when they experience it for the first time, and not feeling disoriented by immediately being thrust into the higher zoom level where they may lose the context for what they're seeing.

3) Immediately as the effect is activated, lowsrc is used for the zoom node so that the already loaded and cached smaller image is stretched to stand in as a proxy for the larger image while it loads (so, no waiting to load the large image before the zoom effect is initiated - it starts immediately once the mouse rest threshold is crossed).

Needless to say, search is a critical link in the flow that leads to conversion and revenue, so we didn't approach adding this feature lightly. Fortunately, we looked for - and found - other areas that could be performance optimized in the search results page to buy some budget for the new feature. That, combined with heavy emphasis on a low impact approach to the implementation, allowed us to add this enhancement to the results page while simultaneously doubling the number of results in the grid from 15 to 30, while still achieving a small performance improvement in the page.

Posted by Dion Almaer at 9:01 am
5 Comments

++++-
4.1 rating from 14 votes

Wednesday, November 12th, 2008

Yahoo! home page and YUI 3.0

Category: Showcase, Yahoo!

Nicholas C. Zakas has posted about a new Yahoo! home page that uses YUI 3.x. They are currently testing the new home page out, but having it use the latest and greatest dogfood on a web page as trafficked as the Y! home page is a big deal. Save a few bytes here or there and you are talking serious benefits. Anyway, Nicholas talks us through some of the benefits that he saw:

I felt that building on YUI 3 would make implementing our design much easier based on several goals that we had for the framework:

  1. Eliminate global dependencies. We wanted each part of the page to operate separately from all of the others. Each part should have no knowledge of what else is on the page and therefore can’t depend on objects to be globally available. The 2.x library is based on the global YAHOO object, which we would have had to abstract away; the 3.x concept of YUI instances that could be individually manipulated worked perfectly to achieve this goal.
  2. Make it small, make it fast. The Front Page can’t afford to be slow, so we needed to have as little code as possible to get everything up and running. YUI 3 impressed us with its organization into small, atomic units that allowed us to specifically include parts of the library that we wanted while eliminating parts that were unnecessary. Further, one of the goals of YUI 3 was to optimize for runtime execution and make it faster than the 2.x version. Once again, YUI 3’s approach was directly in line with the Front Page’s goals.
  3. Create version independence. From the start, we didn’t want to have dependencies on specific versions of YUI components as this can lead to maintenance issues. What we really wanted was for each part of the page to be able to use whatever version of the components that they wanted. The sandboxing feature of YUI 3 opened up the possibility of having two (or more) YUI instances each loading different versions of various components while not interfering with each other.
  4. Allow code portability. Having worked at Yahoo! for a combined five years, Steve and I knew that anything we put on a Yahoo! property could be a candidate for porting to someplace else. We knew that this possibility meant the code had to stand on its own and not make assumptions about the environment in which it was placed. We thought about the most difficult environment possible: a locked-down browser environment where the JavaScript code has no direct access to the DOM. Since YUI 3 can abstract away the DOM through its Node interface, we had the entrypoint necessary to make this requirement a reality.
  5. Be forward compatible. The project to create a new Front Page is an incredibly long one and we wanted to be as forward-looking as possible. We knew that if we created the framework on YUI 2.x that we’d be hard pressed to get time to upgrade later on. By building on YUI 3 from the start, we eliminated the need for developing an upgrade path later on.

Posted by Dion Almaer at 6:27 am
Comment here

++++-
4.2 rating from 27 votes

Thursday, November 6th, 2008

MySource Mini: 2008’s Fluxiom

Category: Showcase

Greg Sherwood sent us a link to a video showcasing MySource Mini, a web-based content management system with a super-sexy Ajax interface:

A short demonstration of the MySource Mini showing some of the amazing new features that differentiate it from other CMS products:
- True inline WYSIWYG content editing
- Inline editing of complex asset types
- Built-in graphical audit trails
- Content versioning with browser screenshots and PDF downloads
- Integrated context-sensitive help

One of the cooler features is a forth-coming open-source editor framework that allows arbitrary text nodes in the page to be edit-in-place, firing events as necessary, etc.:

Viper is different to other WYSIWYG editors in that it is not only completely written in JavaScript, but also does not use the browser's editable region. All changes are made to the DOM directly and everything has been hand-coded, right down to the flashing caret. This gives the MySource Mini a true inline editing interface where the WYSIWYG editor is integrated completely into the editing mode.

Check out the video; like Fluxiom before it, it shows just how sexy Ajax applications can be.

There's also another video that goes into more detail on the app.

Posted by Ben Galbraith at 8:00 am
5 Comments

++