As some of you know I work for local.ch. I was looking for cool visualizations to do with
our data for quite a while, missing the obvious - plotting all our 3.7 million geocoded addresses in 3D using WebGL!
I'm actually quite impressed by the accuracy of the data. But go and have a look for your self.
Controls
WASD + Mouse (drag). Velocity is scaled with altitude.
Video
If you can't see the demo for some reason I uploaded a short video of the demo to youtube.
Techniques
The points are encoded in a Float32Array, then sorted and gziped using a python script. Sorting the data improves the compression ratio by over 200% so it's well worth the effort. This brings the original 100mb file down to 7mb.
The file is then loaded using XHR level 2,
which supports binary files and progress events. The points are then rendered using WebGL as GL_POINTS and additive blending is
used to give it a glow effect. In the future I might add HDR rendering and blooming.
There is no level of detail or culling performed so this will require a relatively powerful rig.
Also note that for some reason Firefox Aurora (9) seems to be quicker than Chrome Dev (16) for some mysterious reason.
I would expect all of the work to be done by OpenGL so I'm not sure about where this comes from. It could be chromes
process isolation.
Sourcecode
You can find the source code on github if you want to get into some hacking.
Note that the data belongs to local.ch and may not be used.
Some of you might remember my Chaotic Particles demo from last year. That demo was featuring 10'000 particles on a plain old 2d canvas. I decided to optimize that demo a bit in order to support 100'000 particles. I also fixed a little issue where numeric inaccuracy allowed particles to escape and made the influence map more fine grained.
Want to see the source? Just use view source and feel free to ask questions.
I think this is my favorite canvas demo I have created so far. It is an interactive drawing tool based on particle effects. It is the result of me trying to create some generative art using canvas. The techniques used
are actually pretty similar to the ones shown in my frontendconf talk on particle systems. In short:
I'm planning to play with a few improvements especially in tone mapping and controls in the future but feel free to take a look at the source on github. I hope you enjoy it.
For an upcoming canvas project I want to give the users the ability to upload
the content of the canvas to an image sharing service. When looking for a suitable
API I came across imgur.com the registration was trivial,
and they support CORS and base64/dataurl uploads, perfect!
// trigger me onclickfunctionshare(){try{varimg=canvas.toDataURL('image/jpeg',0.9).split(',')[1];}catch(e){varimg=canvas.toDataURL().split(',')[1];}// open the popup in the click handler so it will not be blockedvarw=window.open();w.document.write('Uploading...');// upload to imgur using jquery/CORS// https://developer.mozilla.org/En/HTTP_access_control$.ajax({url:'http://api.imgur.com/2/upload.json',type:'POST',data:{type:'base64',// get your key here, quick and fast http://imgur.com/register/api_anonkey:'YOUR-API-KEY',name:'neon.jpg',title:'test title',caption:'test caption',image:img},dataType:'json'}).success(function(data){w.location.href=data['upload']['links']['imgur_page'];}).error(function(){alert('Could not reach api.imgur.com. Sorry :(');w.close();});}
I finally finished my first WebGL demo. Try it and let me know how you like it.
Sourcecode
You can find the source code on github if you want to get into some hacking.
Compatibility
To run the demo you'll need a browser that supports webgl and the OES_TEXTURE_FLOAT extension. At the moment this means Google Chrome 12 or Firefox Aurora (6.0a2). The extension is needed for HDR rendering.
I finally found a way to optimize 2d canvas drawing on the iPhone 4.
Because of the retina display the canvas seems to be rescaled in a slow way
(in software?). So even though the rendering itself is relatively fast, the end
result is slow.
Setting the Viewport
The first step is to set the viewport scale to 0.5 which will result in having one pixel per css pixel.
Space Break is a html5 acrade 'ball and paddle' game written in coffee-script.
It features levels full of explosives, extra balls and even nukes.
I hope you will enjoy it.
History
Space Break started out as coffee-break - a little project I did to get into coffee script.
Because it turned out to be a lot of fun I decided to turn it into a complete game.
Technology
Space Break uses the canvas tag for rendering. The sound effects were created using csound and played using the audio tag. The graphics were made using the gimp and blender. Rake is used for controlling the asset pipeline. All the assets of the game (music, sounds, graphics) are self made - programmer art.
Browsers
Firefox 4 (3.6 kind of works), Chrome 9 and Safari (no ogg - no audio) work. Opera is crashy.
Mobile safari on the iPad also works but the frame rate is low. Could be fixed with a bit of optimization.
Twitter widgets block the loading of your page by default. So if twitter goes down it will take half of the internet with it. That of course is fail! So let's use yepnope.js to decouple them from
your page.
This will preallocate the space needed for the twitter button. You might need to tweak it depending on the button you have chosen.
Making the button fade in with css3 transitions would be another option.
Twitter Search Widget
The twitter search widget is a bit more problematic as it is using document.write(). I really wonder why they got the button so right and the other widgets so wrong. BOOOOH! If you look at the source you will find something interesting though:
if(!o.id){document.write(
It looks like somebody at twitter was aware of the fact that using document.write isn't a good idea and provided a way around it. He just didn't clearly document it. So let's use the id option to fix our problem.