» tagged pages
» logout

sorted by: recent | see : popular
Content Tagged with Page + showcase

Tripeedo: Command line for travel

Tripeedo is a new little site that uses Prototype to power a command line for travel. You just type in where you want to go and when, and it will launch you into a search. I really enjoy the command line interfaces, and much prefer them to the long forms that travel sites put up for you. The calendar components normally always suck.

Tripeedo is a showcase of the wundrbar that has been customized for the world of travel.

Ajax: Ajaxian

Radiohead + Open Data = JavaScript + Canvas Visualizations of their work

I work on Google Code. Hearing that Radiohead was going to release data with progressive licensing and wanted to do so on Google Code was awesome.

Now we see how cool it is that the data is open. People like Jacob Seidelin are doing interesting things with it.

In this case, Jacob has created amazing visualizations of the data using JavaScript and Canvas:

I figured it would be a nice little experiment to try visualizing this data using JavaScript and Canvas so I went and did just that. The data is simply point clouds, meaning a whole bunch of points with x,y,z values (and intensity) for each frame. The data on Google Code is about 800 MB, so obviously a bit of trimming had to be done. You can't expect 30 fps with Javascript doing with this kind of data, so I've only used every 5 frames giving us a framerate of 6 fps, not great but acceptable. Then the actual points, each frame has about 12,000 points. No way this will render with 6 fps in any browser, so again I've taken only 10% of the points. Additionally, I've tried to filter away the noise around Thom Yorke's head since that took up a good deal of points. The interesting bit is him singing, anyway. In the end, we have a dataset of about 4 MB (converted to a JS array) for the one minute clip they released.

Now the data is in a more manageable state and the visualization can begin. It's not as good as the real thing, obviously, but I think it's ok (it's best when you look at Thom in profile). The audio clip is as usual played via SoundManager 2 which also gives us free timing information to sync the rendering to. I've played around and made a few different effects that you can toggle on and off (by pressing keys 1-9). While it is playing you can also rotate around the vertical axis by moving the mouse horizontally over the video. Also try clicking/doubleclicking.

Great publicity for Radiohead too. When you are first to do something, that is often the case.

Ajax: Ajaxian

Domize: Visualize your domains

Domize

Anson Parker has created Domize another in the line of Ajax domain utilities. Here is what Anson had to say about it:

It is the fastest as-you-type
domain name look-up tool for web and iPhone users. Queries are
encrypted over SSL for security and privacy. Domize is really head and
shoulders above its peers in allowing you to quickly scout out an
available name.

It also has some cool innovations. The entire site is delivered in one
request for non-IE visitors ("data:" urls for images) and additional
functionality is only brought in after the page load (e.g. Google
Analytics). I used a cool technique to modify the stylesheet at the
bottom of the page through JavaScript and keep the whole thing valid
strict xhtml.

Domize also offers preview thumbnails of unavailable domains, which is
a great help in seeing "neighbors" of the domain you're interested in
as well as letting you quickly see whether a domain is owned by a
squatter or legitimate site.

Ajax: Ajaxian

Creativescrape: Thomas and Amy team up again

Creativescrape

Thomas Fuchs and Amy Hoy have teamed up again for a micro-app called Creativescrape "an inspration utility for those moments when you just seem to be braindead. It comes with a OS X screensaver for your enjoyment."

All via 188 lines of fun living on top of Prototype and Script.aculo.us.

Ajax: Ajaxian

iPhone Web Goodies: Drag and Drop with Touch, Resize and Rotate with Gestures

The video above shows a simple showcase application that Neil Roberts of SitePen created and wrote about.

He testing out the new APIs such as the touch API where he worked with drag and drop:

JAVASCRIPT:
  1.  
  2. node.ontouchmove = function(e){
  3.   if(e.touches.length == 1){ // Only deal with one finger
  4.     var touch = e.touches[0]; // Get the information for finger #1
  5.     var node = touch.target; // Find the node the drag started from
  6.     node.style.position = "absolute";
  7.     node.style.left = touch.pageX + "px";
  8.     node.style.top = touch.pageY + "px";
  9.   }
  10. }
  11.  

And resizing and rotation with the Gestures API:

JAVASCRIPT:
  1.  
  2. var width = 100, height = 200, rotation = ;
  3.  
  4. node.ongesturechange = function(e){
  5.   var node = e.target;
  6.   // scale and rotation are relative values,
  7.   // so we wait to change our variables until the gesture ends
  8.   node.style.width = (width * e.scale) + "px";
  9.   node.style.height = (height * e.scale) + "px";
  10.   node.style.webkitTransform = "rotate(" + ((rotation + e.rotation) % 360) + "deg)";
  11. }
  12.  
  13. node.ongestureend = function(e){
  14.   // Update the values for the next time a gesture happens
  15.   width *= e.scale;
  16.   height *= e.scale;
  17.   rotation = (rotation + e.rotation) % 360;
  18. }
  19.  

Some readers might have noticed that a gesture is just a prettier way of looking at touch events. It’s completely true, and if you don’t handle things properly, you can end up with some odd behavior. Remember to keep track of what’s currently happening in a page, as you’ll probably want to let one of these two operations “win” when they come in conflict.

Ajax: Ajaxian

The Pencil Project

Pencil Project

José Jeria pointed us to a great looking XUL application that allows you to sketch GUI's and then export them to PNG:

With the power of the underlying Mozilla Gecko engine, Pencil turns your excellent Firefox 3 browser into a sketching tool with just a 400-kilobyte installation package.

Pencil will always be free and can run on virtually all platforms that Firefox 3 supports.

Always good to see people using the power of XUL that still has features that I hope to see HTML get.

Ajax: Ajaxian

The Pencil Project

Pencil Project

José Jeria pointed us to a great looking XUL application that allows you to sketch GUI's and then export them to PNG:

With the power of the underlying Mozilla Gecko engine, Pencil turns your excellent Firefox 3 browser into a sketching tool with just a 400-kilobyte installation package.

Pencil will always be free and can run on virtually all platforms that Firefox 3 supports.

Always good to see people using the power of XUL that still has features that I hope to see HTML get.

Ajax: Ajaxian

Our Signal: Page Cloud Visualization of Digg, Reddit, Delicious, Hacker news

Our Signal

Our Signal takes Digg, Reddit, Delicious, and Hacker News and creates a full page cloud visualization using jQuery.

The size of the box reflects the popularity, and the color lets you know the acceleration of that popularity. If the color is warm, it is on the rise, and vice versa for cool colors.

I like seeing alternative visualizations, but I have to admit I am not a huge fan of tag cloud style views. You?

Ajax: Ajaxian

Implementing infinite scrolling with jQuery

Umut Muhaddisoglu has implemented the infinite scrolling pattern that Wikia Search has in place this week.

There have been other implementations, but this is a clean one using jQuery, and works by:

  • When user scrolls down and hits the bottom a function is called
  • This function gets the last DIV ID of the datagrid
  • Send a query with this DIV ID
  • Return the results and add them to the end of the datagrid.

You can check out the demo on Umut's DNS Pinger service by scrolling down. The parts of this demo are:

The HTML structure to build on:

HTML:
  1.  
  2. <div class="wrdLatest" id=9>content</div>
  3. <div class="wrdLatest" id=8>content</div>
  4.  

The function to put a loading icon in, and then fill it out with new content:

JAVASCRIPT:
  1.  
  2. function lastPostFunc()
  3. {
  4.     $(’div#lastPostsLoader’).html(’<img src="bigLoader.gif"/>’);
  5.     $.post("scroll.asp?action=getLastPosts&lastID=" + $(".wrdLatest:last").attr("id"),   
  6.  
  7.     function(data){
  8.         if (data != "") {
  9.         $(".wrdLatest:last").after(data);           
  10.         }
  11.         $(’div#lastPostsLoader’).empty();
  12.     });
  13. };
  14.  

The scroll detection:

JAVASCRIPT:
  1.  
  2. $(window).scroll(function(){
  3.         if  ($(window).scrollTop() == $(document).height() - $(window).height()){
  4.            lastPostFunc();
  5.         }
  6. });
  7.  

Ajax: Ajaxian

Acrobat.com: PDF and Flash sitting in a tree

Acrobat.com

Ever since Macromedia and Adobe merged, we have been waiting for a day where PDF and Flash played really nice together, and today is the day. Very symbolic for the folks from the companies before the merge.

As TechCrunch says:

At the same time Adobe is launching Acrobat.com, it is releasing Acrobat 9—a major upgrade to one of its anchor desktop apps. the big news here is that for the first time, Adobe’s PDF-creating desktop software will supports Flash. So people can now create documents with embedded Flash movies from YouTube, or developers can design entire new skins for electronic documents using Adobe’s Flex framework—the same programming tool they use to create Web applications.

PDF documents made with Acrobat 9 also support collaboration among multiple authors and reviewers over the Internet, making them connected documents. Best of all, they no longer take forever to load. The next step is for Adobe to make it easy to turn any PDF into a Web page, and vice versa.

Acrobat.com Services

This is the biggest news for me. Acrobat.com itself is a very nice integration of Buzzword, ConnectNow, PDF, and Share. It feels quite snappy (despite the "loading..."), and there are a lot of nice animations of course. A good showcase for Flex.

Ajax: Ajaxian

Addressbook: An example of the Form History Pattern

One of the examples that Ben and I give in our State of Ajax talk at Google I/O today revolves around form history.

We were thinking about the case for Undo on the Web that Aza Raskin is proposing and it got us thinking about the usage patterns of form data.

An example that got me was the Address Book application on the Mac. I find myself storing past addresses in the general "Notes" section at the bottom, but what if history was built into the system so I could go back in time? This could be a nice metaphor in general that goes beyond undo.

I took this use case and put together a working example that uses Gears to store the history locally so it can be speedy through the history.

The slider component comes from Script.aculo.us, and you can check out all of the code.

In the video below I show the application in action and then do a quick code walk through:


This is just the beginning of course. A slider if fun, but it would probably be more usable if it was simply left and right arrows that click through the versions, or at least putting tacks onto the slider.

Ajax: Ajaxian

dojo.workers: a showcase

dojo.workers

Pete Higgins of Dojo has created a nice example, dojo.workers, that puts together coverflow with Dijit and some dojo.query animations.

He even takes out his frustrations with IE 6 as he creates a branch that looks like this ;)

JAVASCRIPT:
  1.  
  2. var newp = function(){
  3.  // IE6 branch of this demo
  4.  window.location.href = "http://" +
  5.   (confirm("Is it 2008?") ?
  6.    "webkit.org" : "mozilla.org") +
  7.   "/";
  8. }
  9.  
  10. // setup our branch launch:
  11. dojo.addOnLoad((dojo.isIE && dojo.isIE <7 ? newp : init));
  12.  

Ajax: Ajaxian

inputEx: JSON form builder

inputEx is "a javascript framework to build fields and forms" created by Eric Abouaf. The framework uses a JSON format to describe a form, such as:

JAVASCRIPT:
  1.  
  2. {
  3.         "fields" : [
  4.                 {
  5.                         "type" : "group",
  6.                         "inputParams" : {
  7.                                 "fields" : [
  8.  
  9.                                 ],
  10.                                 "name" : "",
  11.                                 "tooltipIcon" : false,
  12.                                 "value" : {
  13.  
  14.                                 },
  15.                                 "optionsLabel" : "Options"
  16.                         }
  17.                 }
  18.         ],
  19.         "optionsLabel" : "Options"
  20. }
  21.  

which you can build with the help of the builder application.

Check out the getting started guide and if you like to build an application that looks like:

JAVASCRIPT:
  1.  
  2.    init: function() {
  3.       this.buildTree();
  4.       this.initContextMenu();
  5.       this.buildForm();
  6.       this.initEvents();
  7.       this.queryData();
  8.    }
  9.  

rather than HTML, then this could be the tool for you!

inputEx

Ajax: Ajaxian

Persevere: JSON Storage / Application Server

Kris Zyp of Sitepen has released Persevere:

An open source set of tools for persistence and distributed computing using intuitive standards-based JSON interfaces of HTTP REST, JSON-RPC, JSONPath, and HTTP Channels. The core of the Persevere project is the Persevere Server. The Persevere server includes a Persevere JavaScript client, but the standards-based interface is intended to be used with any framework or client.

The Persevere Server is an object storage engine and application server
(running on Java/Rhino) that provides persistent data storage of dynamic
JSON data in an interactive server side JavaScript environment. It is
currently in beta, and boasts a very solid feature set that should
interest JavaScript, Dojo and Ajax developers:

  • Create, read, update, and delete access to persistent data through
    a standard JSON HTTP/REST web interface
  • Dynamic object persistence - expando objects, arrays, and
    JavaScript functions can be stored, for extensive JavaScript persistence
    support
  • Remote execution of JavaScript methods on the server through
    JSON-RPC for a consistent client/server language platform
  • Flexible and fast indexed query capability through JSONPath
  • Comet-based data monitoring capabilities through HTTP Channels
    with Bayeux transport plugin/negotiation support
  • Data-centric capability-based object level security with user
    management, Persevere is designed to be accessed securely through Ajax
    with public-facing sites
  • Comprehensive referencing capabilities using JSON referencing,
    including circular, multiple, lazy, non-lazy, cross-data source, and
    cross-site referencing for a wide variety of object structures
  • Data integrity and validation through JSON Schema
  • Class-based data hierarchy - typed objects can have methods,
    inheritance, class-based querying
  • Pluggable data source architectures - SQL tables, XML files,
    remote web services can be used as data stores
  • Service discovery through Service Mapping Description

You can check out a live Persevere data grid demo that auto-syncs the grid using JS such as this:

JAVASCRIPT:
  1.  
  2. var persevereStores = dojox.data.PersevereStore.getStores(); // persevere stores are auto-generated
  3. customerStore = persevereStores.Customer; // and get the Customer store
  4. dataModel = new dojox.grid._data.DojoData(null,null,{/*rowsPerPage:12,*/store:customerStore,query:"",clientSort:true});
  5.  
  6. addItem = function() {
  7.         // need to specify the parent because the customerStore is hierarchical and the grid model will
  8.         // call newItem without any info who the parent
  9.         //customerStore.parentId="0.examples.customers";
  10.         grid.addRow({firstName: "firstName", lastName: "lastName",created:dojo.date.stamp.toISOString(new Date,{zulu:true})});
  11. }
  12.  

Ajax: Ajaxian

OpenKM: Open Source Document Management

OpenKM is a multi-platform application for document management based on GWT, JBoss, and Jackrabbit (the content repository API).

Version 2.0 has been released, which you can test drive to see the application-style interface. The new features in 2.0 include: the previsualization of multimedia elements as images and videos, an improved an rewritten administration interface, a centralized management of templates, an exclusive area to allow users to store their private documentation, a tool for massive import and output data from ZIP files, searches by date ranks as well as translations to more languages.

However, one of the more relevant functions to mention is the indexing of the most common types of files: text, Office, Office 2007, OpenOffice, PDF, HTML, XML, MP3, JPEG, etc.

OpenKM

Ajax: Ajaxian

Wii Darts: Powering Ajax applications with Wii controllers

Ben and I gave a presentation at JavaOne on what's new with Ajax. Since this was JavaOne, we skewed a little more than we normally would to Java topics, and one of them was using the new Java Plugin, that has great new features such as being able to take a running applet out of the web page, and having it continue to live after shutting down the browser. Java is running out of process here, which also helps the "Java crashing the entire browser" problem.

Anyway, back to our demo. For some context, last year at JavaOne had us performing Guitar Hero on stage, so we knew that we had to use a gaming console in some way. This year it had to be the Wii, but instead of using the console, we decided to just use the controllers.

Wouldn't it be cool to control a Web page using the controllers? We thought so, and we set to it. You can talk to the Wiimotes via Bluetooth, so we needed a stack that would allow us to do just that. Java has a bluetooth stack. We could get an applet to talk to the Java stack. Hmm.

It actually took quite some time to test out the various stacks out there. In the end we went with a native system called Wiiuse that a lot of Wii hackers use. There is a wrapper library called Wiiusej that gave us exactly what we needed.

A quick test later and we had an application that was talking between the remote and the program. It turns out that the main controller sees a series of IR lights that are in the Wii sensor bar, and this allows you to simulate the system with any decent IR source. In the presentation room the big lights that shine on stage were strong enough to act as a sensor bar so we won't even have to use it. We can just point out to the crowd.

Anyway, back to the application. We then wrote a Java class that acts as a state machine for what the remote is doing. It understands the movements, which buttons are pushed, how fast you are moving the device. With this data we could build a simple darts game. With the state machine Java code, and an Applet wrapper that exposed the information, we were ready to get to the Ajax side of the house.

We painted a darts board onto the screen and then had JavaScript start polling the Applet for information via JSObject (As simple as: document.nameofapplet.pollmethod()). This turned out to be more stable than talking the other way, even though it meant we were polling instead of being entirely event driven. When the JavaScript code polled the applet it would pass back a data structure with the data for the coordinates of the remote, and whether the dart had been fired (button A to fire, button B to reload). We would move the dart image on the screen as you move the remote, and when fired we kicked off an animation to fire the dart at the board.

At first, it was all too simple. You setup the shot and it would get the right area every time. Not a fun game. We then decided to add some simple physics to the Ajax game. We took into account the velocity of the throw (if weak it would fall down) and how straight your shot was. If you wiggle around, the dart will not be accurate.

Anyway, this was a lot of fun, and shows that as much as we mock Java applets, if we forget about using them as fancy blink tags, and instead think of them as more extension points, maybe there is life for them.

The video below shows you a demo of the application, the source code with an explanation, and more details.


Ajax: Ajaxian

Apple Store: New Effects

I was perusing the Apple Store, getting ready for the dream dual-announcements of iPhone 3G + Macbook Pro, when I saw a new effect. When you go to a product page, there is now an enlarge link that zooms in the given products. You can click on them to go even closer, and then you can mouse around to see every nook and cranny. Double click to get back out, or close to go all the way back.

Take a peak:


Thanks to view source, it appears that Coherent, the library we just talked about, is in use here. Makes sense for a Cocoa style databinding tool to be in use at Apple!

Ajax: Ajaxian

Events Compatibility Tables

PPK has published new event compatibility tables that test the event registration models (traditional, W3C and Microsoft) as well as event bubbling and capturing.

There is a lot of data here on the quirks of the various browsers.

Event Compatibility Tables

Ajax: Ajaxian

Twistori: Telling a story with Tweets and Script.aculo.us

Twistori

Twistori is a fun little site created by Amy Hoy and Thomas Fuchs. As you would expect, design is a key part of the application, and the Prototype / Script.aculo.us combo pull off the work.

The site pulls in live data on various topics (love, hate, think, believe, feel, wish) via the real-time twitter search tool summize.

In related Twitter news, I created a Greasemonkey script Twitter Translate that auto-translates foreign text to your language inside Twitter.

For more Ajax news, you can follow me @dalmaer or our new @ajaxian account.

Ajax: Ajaxian

TPHP: Your home page can be a JavaScript command line

Vishal Shah has put together TPHP, which stands for "The Perfect Home Page". It is just an HTML page with a bunch of JavaScript in it, that acts as a command line to a lot of things.

You can type in special codes to do smart things like search wikipedia, access domain tools, or what have you.

Of course, this is primitive compared to something like Enso, which was made open source when the team went to Mozilla. It is also now running on Mac and Linux, and it has the feeling that it could be a nice companion to the browser as a command line.

TPHP

Ajax: Ajaxian

The Twubble with Bob Lee

Bob Lee is a co-worker of mine at Google (He is actually the lead on core Java APIs for Android), and he happened to create a cool little GWT application called Twubble, which he explains:

If you use Twitter, Twubble can look at your existing friends' friends and recommend new people for you to follow. It's a stupid simple idea, but I think the execution and fun factor have won people over.

I wrote Twubble in a couple nights of hacking in bed after the kid went to sleep. I used the latest Google Web Toolkit milestone which supports Java 5 (flawlessly from my experience). I was writing Javascript code (server and client side) for years before I ever got into Java, but I have to say, you'd be crazy to write AJAX apps any other way than GWT nowadays.

This is Bob's first GWT application, so I wanted to sit down and talk to him about why he built the application, his experience with GWT, how he integrated with Twitter, and any other nuggets of information that I could get out of him:


Ajax: Ajaxian

Mad Mimi: WYSIWYG Email Marketing

When I hear "email marketing" I can't help but think spam, but it is a legit tool too, and the latest tool in the pack is Mad Mimi.

Mad Mimi launched this week and consists of "state-of-the-art UI design makes for layouts that are easier to
create -– and easier to read – than emails generated by Constant Contact, Emma and others, who rely on rigid templates and cluttered,
dated layouts."

Mad Mimi's "modules-based" interface allows users to add picture and text fields, drag them around and add captions, links and dividers. Embedded constraints gently guide the layout, keeping the "designer" from getting into trouble, but providing more plasticity than templates.

The result: a fluid, flexible user interface, and clean, fashionable "Mimi-generated" promotions that represent a fresh approach to email marketing – at a subscription price that trumps the competition.

When I saw that Tobie Langel was on the team, I had to check it out. When you give it a spin you will be able to add images, and then use them to build out your email. There are some really nice subtle features such as the undo support.

Mad Mimi

Ajax: Ajaxian

Mosaic Image Builder with Ajax

Andy Na has posted about building mosaic pictures using binary ajax techniques.

You can check out the demo in action.

The library allows you to do this via:

JAVASCRIPT:
  1.  
  2. var demo = new MosaicBuilder("60x45" /* image name prefix */, 23 /* number of image files */);
  3. demo.buildMosaic("60x45.bmp" /* image name */);
  4.  

The library uses the BinFileReader.js library to be able to work with binary files with Ajax.

Ajax: Ajaxian

Appcelerator on App Engine

I had a funny feeling that we would see frameworks and tools starting to support Google App Engine. Appcelerator has added support into their SDK, so you can now create an App Engine project.

They just ported Tejus’s appTunes demo to the App Engine and deployed it at http://apptunes.appspot.com.

The example uses embedded Flex components and sound.

If you take a look at the source, you will see the declarative markup that Appcelerator goes for:

HTML:
  1.  
  2. <body style="visibility:hidden" on="l:app.compiled then visible">
  3.     <div id="header">