Local browsing with CoolIris

UPDATE: You can simply use CoolIris 1.10 for the same purpsose

Full-Screen, 3D — Cooliris transforms your browser into a lightning fast, cinematic way to browse online photos and videos. Our “3D Wall” lets you fly through thousands of items in the blink of an eye on an infinitely expandable wall. To enjoy Cooliris on Google Images, Facebook, YouTube, Flickr, and hundreds of other sites, click the Cooliris icon that appears when you mouse over media on the supported site. Or enjoy Cooliris anytime by clicking the browser toolbar icon. See http://www.cooliris.com/product for details.

I was looking for an app that let me browse through my image gallery Apple style – PhotoFlip, but there seems to be none, unless I download Safari :-/. I don’t want a new browser right now, so I turned to the next best thing: CoolIris. Somehow I vividly recall this is a project started from Microsoft Research but I can’t find any trace of Microsoft there. Maybe the Cooliris team doesn’t like Microsoft in the end. 😛

Well, at least I expected it to be able to automatically detect links to picture on a page and then let me view them. It supported Flickr and Google Images off-screen loading, which is much more complicated than a list.

What a shame it doesn’t.

I’m not the only person looking for a “standalone CoolIris” to view my files, the CoolIris forum is filled with similar requests but the best response they can give is “wait” and an “CoolIris Lite” in which the effect is much simple and you seems to have to add files manually.

No problem, I can fix that.

I tried the “quick” option from the developer’s site but that turned out to be the more complicated option since I have to generate both the expression and the gallery for it to work, so I tried the full option: I created a C# application that will read files from the directory you want, write two files “media.htm” and “media.rss” to the output directory.

  • Media.htm contains one picture to activate the CoolIris icon on the toolbar, links to media.rss.
  • Media.rss is the feed that lists the files which will let CoolIris know the full list of images.

The core part of the application follows

            // Read jpg and jpeg from target directory
            string[] Files = Directory.GetFiles(textBox1.Text, "*.jp*");
            // Prepare the feed
            StreamWriter writer = new StreamWriter(textBox2.Text + "media.rss");
            writer.WriteLine("<?xml version="1.0" encoding="UTF-8" standalone="yes"?>");
            writer.WriteLine("<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss" xmlns:atom="http://www.w3.org/2005/Atom">");
            writer.WriteLine("<channel>");
            writer.WriteLine("<title>Generated photos</title>");
	        writer.WriteLine("<link>file:///" + textBox2.Text.Replace("\","/") + "</link>");
            writer.WriteLine("<description>Photos from my trip to Africa.</description>");
            int Counter = 1;
            foreach (string FileName in Files)
            {
                FileInfo Item = new FileInfo(FileName);
                writer.WriteLine("<item>");
                writer.WriteLine("		<title>" + Item.Name + "</title>");
                writer.WriteLine("		<link>" + "file:///" + FileName.Replace("\","/") + "</link>");
                writer.WriteLine("		<guid>img " + Counter.ToString() + "</guid>");
                writer.WriteLine("		<media:description>" + Item.Name + "</media:description>");
                writer.WriteLine("		<media:thumbnail url="file:///" + FileName.Replace("\","/") + "" />");
                writer.WriteLine("		<media:content url="file:///" + FileName.Replace("\","/") + "" type="image/jpeg" />");
                writer.WriteLine("	</item>");
                writer.WriteLine("");
            }
            writer.WriteLine("</channel>");
            writer.WriteLine("</rss>");
            writer.Close();
            //Prepare the HTML file
            writer = new StreamWriter(textBox2.Text + "media.htm");
            writer.WriteLine("<html>");
            writer.WriteLine("  <head>");
            writer.WriteLine("    <link rel="alternate" href="media.rss" type="application/rss+xml" title="" id="gallery" />");
            writer.WriteLine("  </head>");
            writer.WriteLine("  <body>");
            foreach (string FileName in Files)
            {
                FileInfo Item = new FileInfo(FileName);
                writer.WriteLine("<a href="" + "file:///" + FileName.Replace("\", "/") + "">");
                writer.WriteLine("<img alt="[Image]" src="" + "file:///" + FileName.Replace("\", "/") + "" class="photo">");
                writer.WriteLine("</a>");
                break;
            }
            writer.WriteLine("  </body>");
            writer.WriteLine("<html>");
            writer.Close();
            //Open the HTML file with the default browser, hopefully it's the one with CoolIris installed
            System.Diagnostics.Process.Start(textBox2.Text + "media.htm");

Application interface

Fill in the directory containing the pictures you want to view in the first text box, the second could be your temp directory. Click generate to generate the files mentioned above and open them in your default browser, click the CoolIris to activate CoolIris (this extra step is required because I don’t know how to call CoolIris on a file directly; the “Launch CoolIris” application seems to open Cooliris.com only).

I also made a command line interface with which you can call the app with 2 parameters. The first will go to “Directory” and the second to “Output”. If you run the app this way it will generate, open the file and then close itself.


Result

Download the application

Requirements:

  • .NET Framework 2.0
  • CoolIris enabled browser

Tumblelogs

Tumblelog is a term coined in 2005[1] to denote blogs which favor short posts, most of the time sharing only a single item. I encountered the first such blog on 2007[2] but it didn’t really impressed me. Not until last night, when I was shown a comic translation blog [3]. Tumblelogs are just great for the purpose! It allowed instant sharing of daily comic (one thing jumps right in my thoughts: there is a bookmarklet somewhere) without any comments, category or other hassles. On the other hand, perhaps the comic blog above is too simple it don’t tell us where the comics come from, nor mention Garfield’s author (so I’m not condoning it at all, just an example).

It’s also worth a note to distinguish between tumblelog and microblog. While microblog is primarily aimed at status updates, it also allows you to post multimedia content like tumblelog. But your status could change anytime, anywhere, so you’ll need an equivalent update convenience (e.g. mobile updates). On the other hand, tumblelogs are designed to share content, and as you may encounter most content while surfing, think bookmarklet and email-to-post. You can see the gap between two services is not big, and as this article is being written, more features are being stuffed to twitter (that’s why its interface has turned in to a big bunch of text instead of one line of status :P)

Okay, too much ranting again. I only wanted a short review about current tumblelog services when I started writing!

Tumblr

Not the first Tumblelog software, but the first one is currently down so I can’t test it :P.

Tumblr seems to be the most popular tumblelog service around. Clean interface, but there are only a few themes available. None looked good enough for me :/. The theme installation from theme garden worked erratic somehow. For the functionality, Tumblr is pretty good, it pulls the page to its server after you add it with the bookmarklet; analyze the page to find contents you may want to blog about on the page.

Tumblr could be linked with twitter so that all twitter updates will be copied to your Tumblr and vice versa. Also, you can import feeds, bookmark from social bookmarks and posts from other blogging services (thus Tumblr could also act as a bridge to let your twitter followers know when you write a post or bookmark something).

Media could be uploaded to Tumblr but there is a 10MB file size limit (I’m unsure what the storage limit is, see quote below). If you want to post bigger stuff, you are on your own.

Tumblr retains the right to create limits on use and storage in its sole discretion at any time with or without notice. [Terms of service]

The bookmarklet is in the “Goodies” tab; there you’ll also find your email-to-post address, iPhone app and third party apps. The dashboard interface is a little clumsy, functions are distributed on tabs, sidebar, and a menu; but that doesn’t seem to limit Tumblr’s popularity.

You can customize the theme with HTML and CSS. You can also attach your Tumblr to your domain as long as you are able to modify A records (it took a really long time to propagate through the nameservers so you may be unable to view your blog for one or two days if you use this). There are APIs available, but I haven’t looked to see what they can do (yet).

Soup.io

Quite a competitor for Tumblr, most of the features are the same. The interface has more web 2.0 slides and fades, but the page still refreshes to update itself so I’m still not completely satisfied with this service. It allows you to import from more services (say furl or weheartit) but its bookmarklet isn’t as good. It will only detect media on popular sites; it does not analyze the page so it’s very likely that you’ll have to prepare a link to the media first.

The basic theme structure seems to be fixed. However you are allowed to theme it with CSS

Gelato

Seeing Tumblelogs in action somewhat annoy me why such a small amount of content take a whole page load? Isn’t some AJAX to flip pages are better? Then I went to the usual developer’s craze wanting to develop a whole new service that satisfies my every need, since the above are hosted by the blog provider. And as paranoid as a user may be, leaving data on a stranger’s server just doesn’t bring a nice feeling :P.

Fortunately, thank to the free culture (as in free beer :P), someone must have done the job for you! In this case it’s Pedro Santana: from Gelato’s homepage you can download the source (latest at the time of writing: 0.95).

Pretty close clone of Tumblr. To the average user Gelato only provides basic features. You can blog, change the theme, use the bookmarklet but that’s all. The advantage is you have full control over it. Its template share similarities with WordPress.

Still no AJAX for page transition, which I’m pretty disappointed since it advertised itself “built upon AJAX”. But I don’t think that would be a problem though, you have the source of a working Tumblelog!

Location service emulation on popular platforms

This post in a nutshell: How to run GPS emulation with several mobile platform and a short evaluation of each.

Windows Mobile

On Windows Mobile 5, you get a “GPS” settings applet but there is no GPS emulation tool. The attached documentation (GPS sample) state that you’ll need a real GPS device for the sample to work (and remember to configure it for develapment!); then I downleaded a new version hoping for better support. The first thing I noticed touching the WM6 SDK is the vast amount of tools added: Cellular network emulator, package tools, test framework, and of course among them: a GPS emulator. Looks like Microsoft has finally started to fear Sun.

The GPS emulator is in WM6 SDK folderGPS. Access the CAB file from your device to install it. Additionally, the settings.exe can only be run inside the device and is the same things as the GPS applet. The documentation is still vague, but the tool works.

Here’s the interesting bit: The WM6 FakeGPS work perfectly well on WM5, so you don’t need the new (and huge) SDK to work on location services, just copy the FakeGPS from someone who installed (it’s around 1MB)

The data file structure is pretty clueless, but I may eventually figure that out after some more searching :/

$GPGLL,36000.0000,N,72000.0000,E,000023.998,V*1A
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPRMC,000023.998,V,36000.0000,N,72000.0000,E,0.000000,,101102,,*30
$GPGGA,000024.998,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*78
$GPGLL,36000.0000,N,72000.0000,E,000024.998,V*1D

What left to be wondered is, why GPS is taken out of Smartphone and available only for PocketPC? While it’s true that a phone ‘s functionalities are not as easily extended with cards and stuff like a PDA but some of them can locate themselves; or Microsoft thinks 3G should not include location services? Oh well…

Symbian

Given the previous experiences with Symbian, I expected this platform to be the hardest to configure. Looks like I worried too much :). You can select the emulated location service from the phone’s settings. Just go to settings / general / positioning and select simulation, choose settings on this mode to choose emulation data.

Symbian’s emulator can read 2 types of data: the one Windows Mobile used above (nmea.nme is included with the demo) and .sps files. Sps files seem to define non-deterministic movement, like this:

Horizontal accuracy=10;
Vertical accuracy=16;
TimeToFix min=2;
TimeToFix max=7;
Powerup time=5;
Longitude=23.9385;
Latitude=61.5285;
Speed=0;
Course=113.9;
Deterministic=0;

Getting the sample application running is pretty easy too. They even have 4 more examples for this topic and each comes with detailed information on how the classes work.

J2ME

The most straightforward platform! The Location service example is there (called CityGuide), Location and landmark service is built-in with the emulator. To simulate movement, from the emulator choose MIDlet/External events, toward the bottom you’ll see the “Location” group, click Browse to select the path file (City guide comes ready with a path file, citywalk.xml), press play and you are on the move!

The data file is different from both of the above platforms, which belongs to some kind of standard, which is good but to me J2ME’s xml is the best! It’s the cleanest and most human-readable data. Ph34r the power of XML!

<waypoint time="6500" latitude="14.394759972655674" longitude="50.10266737954043" altitude="310" />
<waypoint time="1500" latitude="14.395190022566581" longitude="50.102641304996304" altitude="310" />
<waypoint time="1500" latitude="14.395487422916618" longitude="50.10265163602227" altitude="310" />
<waypoint time="1500" latitude="14.395935213738783" longitude="50.10265925148049" altitude="310" />

I think the landmark tool is build for some purpose, but clearly the sample work well without any tweaking by this tool.

Toy box

After finishing 7 years worth of Megatokyo drawings (you might have seen from the last post :P), I decided to wrap things up and finished polishing my toybox

It’s a collection of stuff I code from time to time. They were usable before, but wasn’t integrated and their look was so Web 1.0, I always wanted to “renew” them a little, now I am finally in the right condition to get it done :).

At the time of this post, my toy box contains:

You may read more about them from their page. If you have any comment for them, you can leave them here

Mikrypto

Splash screen

Is the name of my latest school project in cryptography; possibly the fastest project ever: only 10 hours from concept to realization with all the functionality in place. It would be great if I were in the mood to document it. But unfortunately that is not the case right now. Other than some problem with XML Serialization (specifically serialization order control and serialize to stream), the project went smoothly. The version below is a little more polished than the version I turned in.

So what does this do? In short: It let you encrypt files and send to friends who also used this application. Upon account creation, you are given a key pair (which you can access using the export function); you are free to give your key to others and vice versa. If you want to send a file to someone, just encrypt the files choosing that one as the recipient, send the file to (s) he, the receiver logins to his/her account, hit decrypt and BOOM! Files appear!

Though the process is simple, way too simple that you don’t even have to enter a password to encrypt files, it is still not cryptographically feasible for anyone to decrypt the encrypted file. Even you, the one who encoded that file(s) to send wouldn’t be able to decode it without knowing the recipient’s account detail.

If that sounds interesting, give it a try

(If you are confused, read the Vietnamese usage instruction in the PDF file)