Meta-Markets and deliciousChecker

Aug 18, 2007 | Processing / Java, Software, Web dev

I’ve recently been playing with the excellent Meta-Markets.com site set up by the talented Burak Arikan. Essentially Meta-Markets is a virtual stock market for trading socially networked capital. If you have a hot blog, a popular Flickr stream or were the first poster of an essential del.icio.us bookmark you can offer it for trade through an IPO, just as if it were a company.

Each user starts out with a capital of 25 “buraks”, which can be used to buy shares in traded commodities in any of the 6 given “markets”: Flickr, Facebook, del.icio.us, Feedburner, Digg and YouTube. By offer an IPO of your own social capital you accumulate value that can be used for further trade. Ultimately the system will also include auctions and payment of dividends to stock holders.

You can make an IPO of any del.icio.us bookmarks of which you were the first poster. Finding out exactly which these are can be a drag, since del.icio.us does not provide an overview of this info. Even using the del.icio.us API won’t give you the needed information, the only way is to use the del.icio.us URL history feature. Needless to say, this can get tedious when done manually.

To address the issue I’ve hacked up a tool I call deliciousChecker. It downloads your bookmarks and then proceeds to check their posting history using HTTP calls to the history page. del.icio.us will block offensive applications that make repeated API calls, so deliciousChecker only downloads the bookmarks when there’s been an update. There is also a 15 second default delay between HTTP calls, it’s not recommended to go lower than this since Yahoo will think you’re a denial-of-service attack.

The code is written in Processing using the delicious-java and Apache Commons HttpClient libraries. The source is included, but for non-Processing users I’ve also provided precompiled applications for Mac, Windows and Linux. You must edit the “delicious.conf” config file to add your username and password.

The application can be exited safely by pressing the escape key. It also auto-saves the database with regular intervals. Upon exit (whether from interruption or upon completion) the application writes a HTML file with your bookmarks, indicating which ones were first posted by you as well as how many other users have saved them.

Downloads

More online storage…

Jul 18, 2007 | Software, Web dev

Following up on my post a few days ago about online storage: I just rechecked the Box.net web site only to discover that they have increased their prices rather than drop them. 5 GB is now $7.95/month or $79.95/year. 15 GB is $19.95/month or $199.95 per year. I might be willing to pay that – if we were talking about 100 GB of storage.

I’ve looked around at other solutions, but haven’t found any that seem really appealing. I’d be happy to hear suggestions or any feedback about your own experiences.

Writing WordPress plugins…

Jul 15, 2007 | Open source, Web dev

I generally try to avoid tinkering too much with the insides of WordPress, but if I did I would read Devlounges How to Write a WordPress Plugin first. It’s even available as a nicely downloadable PDF.

Yesterday I needed to delve into Arne Brachhold’s Del.icio.us plugin to figure out how to add proper titles for links from main or archive pages. It was a dirty hack, but I got it working somehow. If you need to know, it involved hacking his Javascript and I’d be happy to share if you ask.

Online storage & uploading woes

Jul 9, 2007 | Flickr, Software, Web dev

The idea of storing data online is sexy. It means easy sharing of files, pseudo-backup and access-everywhere all rolled into one. I’ve been using Box.net for a year now, with mostly good experiences. It’s got a well-designed dynamic interface, it makes sharing extremely easy and the service is very stable. I do have a few complaints though:

  • The space you get is small. 5 GB for $5/month is not a lot. They have a bigger plan at 15 GB at $15/month (== $180/year), which hardly seems like a bargain.
  • The interface looks great, but is sometimes a little tricky for complex file operations such as moving lots of files around. It’s got a great search function though.
  • Most importantly: Uploading can sometimes be painful, requiring the use of either a popup applet or a built-in Flash tool. Navigating the file structure from these tools seems like it’s harder than it should be, with slow GUI response times.

Essentially, I’ve been wanting a file browser-like interface for uploading, with immediate folder navigation. Box.net has promised for a long time that they would release an uploading app that works outside the web browser, but has not delivered so far. I like their service and I’m not looking to switch, but I just wish it’d be easier to use…

To the rescue: Fire Uploader, a Firefox extension that supports FTP-style uploading to Box.net, Flickr, Picasa and YouTube. Browsing my Box.net account, creating a new folder and uploading a bunch of images was a snap. It supports downloading as well, but unfortunately not moving files.

It remains to be seen how stable Fire Uploader is in dealing with huge files and broken uploads, but so far it’s looking really good. Upcoming versions might add site-specific functions such as setting permissions, as well as new services to upload to. If it supported moving files it could almost be a complete Box.net GUI replacement.

For Flickr uploading, Fireflix is useful, but a little clunky. For FTP transfers, I like FireFTP, another great Firefox extension. It allowed me to finally do away with clunky FTP software, and do it all inside the browser. I love that that the browser becomes an environment for getting things done.

DIGG releases public API

Apr 21, 2007 | Open source, Web dev

DIGG announced the launch of the public DIGG API yesterday. I’m not a DIGG fan myself, but it is a major service so the launch is significant.

The API should enable more visualizations along the lines of the popular Swarm and Bigspy visualizations. This is clearly part of the interest on DIGG’s part, as they have also announced a DIGG API Visualization contest. Entries must use the Flash toolkit provided by DIGG.

You can read more about the launch on the DIGG blog. Basic API concepts are fleshed out here.

del.icio.us wants to know..

Apr 5, 2007 | Web dev

…what you like and don’t like about them. If you want to share, go answer their survey. As a loyal long-time user I just did it, it only takes about 2 minutes.

It seems like del.icio.us is at a crucial juncture right now. They have a loyal user base and a ton of data, but the web site feels clunkier by the day. Not because it’s actually getting worse, but because it’s not getting any better. A better design for presentation and navigation is desperately needed. del.icio.us director makes the site a bit more usable, but I can’t help but wonder why the core team hasn’t tried to do even better than that.

As it stands, I use del.icio.us every day through the excellent Firefox extension, but I barely ever visit the site. It simply doesn’t help me very much to do so. Yahoo or no Yahoo, I’d love to see del.icio.us regain their cutting edge. I mean, they almost single-handedly made tags the killer app of Web 2.0.

Read more about the thoughts of the del.icio.us team on overdue New Year’s resolutions.

Stikkit API in PHP

Mar 29, 2007 | Code, Web dev

I’ve started using Stikkit for my to-do lists. I like that it allows you to write mixed content in a single note, so that you can keep dates, contacts, to-dos and little notes all in the same framework. It’s not perfect yet, but it works for me. With the recent launch of the Stikkit API things should get even more interesting.

Here’s a quick demo of how to access your most recent Stikkits in PHP (requires PHP 5, HTTP_Request and Services_JSON):

<?php
// stikkit.php
// Marius Watz - http://workshop.evolutionzone.com

require_once "PEAR/HTTP/Request.php";
require_once "JSON/JSON.php";

$req =& new HTTP_Request("http://api.stikkit.com/stikkits?api_key=xxxx");
$req->setMethod(HTTP_REQUEST_METHOD_GET);
$req->addHeader("Accept", "application/json, */*");
$response = $req->sendRequest();

if (PEAR::isError($response)) echo $response->getMessage();
else {
  $json = new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
  $value = $json->decode($req->getResponseBody());
  printNestedArray($value);
}

function printNestedArray($a) {
  echo "<ul>";
  if(is_array($a))  {
    foreach ($a as $dbkey => $value) {
      echo "<li>".htmlspecialchars("$dbkey: ");
      if (is_array($value)) {
        printNestedArray($value);
      } else if(!is_object($value)){
        echo "'". chop($value);
      }
    }
  }
  else echo "$a</li>";
  echo "</ul>";
}
?>

, , , ,

Flickr stats: Group Trackr

Mar 20, 2007 | Flickr, Web dev

Forgot one Flickr stats tool: Group Trackr. It tracks membership numbers and pictures posted over time. It doesn’t need the massive amount of requests that would be needed to do the same for a user’s photostream. The results can be posted as a static image on web sites etc.

Here is the Processing Flickr group:

Graph with growth statistics for Flickr group: Processing

, , , ,

Flickr tools

Mar 19, 2007 | Flickr, Theory, Web dev

I’ve been monkeying around with Flickr tools. I’ve even been getting my hands dirty with phpFlickr, a library that implements the API in classic friendly PHP style.

The API is powerful and well thought out, but can also be frustrating. Multiple HTTP requests are needed to get certain pieces of information. I’m sure there are good reasons, saving bandwidth being the main one. I do wish there was more statistics functionality. As it stands there are only views, favorite and comment counts, with no history of activity.

Getting the view count requires authentication, which is slightly tricky but doable. More annoyingly, Flickr only yields the view count when using , which gives detailed info on single images one at the time. The more light-weight would have been more convenient. One might wonder if Flickr wants to discourage stats applications.

Some tools for an easy Flickr life:

  • phpFlickr is a slick and transparent PHP implementation of the API. There’s little to simplify the basic API, but it lends itself easily to adding some Flickr magic to any web application.
  • FlickrAide is interesting but experimental. It provides statistics, information about contacts and other details that can’t be seen so easily from Flickr. It’s a little unstable, and probably heavy-handed on its interactions with Flickr. But it gives an idea of what could be done with statistics etc. PC only.
  • Portable Flicka is a good backup tool, particularly if you have more than 1000 images in your account. I tend to backup high-res images on Flickr for easy retrieval, this makes it even easier. PC only.
  • Flickr Leech is a web interface for wallowing in Flickr’s “interestingness”. Not for people who are already showing signs of Flickr addiction, but good for avoiding flicking through sets page by page.

More can be found on The Great Flickr Tools Collection.

Rome, feeds and un-Digg-able RSS

Nov 4, 2006 | Flickr, Open source, Processing / Java, Software, Web dev

I’m currently writing a monster application doing indexing of feeds from blogs, del.icio.us, Flickr, Digg etc. It’s been a bit of a learning curve, but using the excellent and comprehensive Rome library has made it a great deal easier than it might otherwise have been. Rome handles Atom feeds as well as the various confusing RSS variants.

Making sense of feeds is often tricky, as different publishers can use various tags in different ways, or even add their own by introducing custom namespaces. The use of namespaces (which Rome supports through a plugin system) is a promising way of adding custom information, but not without its problems.

Having completed indexing of Flickr, del.icio.us and plain vanilla feeds, I turned to Digg feeds. Imagine my surprise to find out that not only is their advertised namespace (http://digg.com/docs/diggrss/) in fact offline, but they don’t even use it properly in their main RSS feeds.

http://digg.com/rss/containerscience.xml correctly specifies xmlns:digg=”http://digg.com/docs/diggrss/”, but http://digg.com/rss/index.xml specifies xmlns:digg=”docs/diggrss/”. And that just happens to be their main RSS feed. I know it seems niggling to complain, but it messes with the Module I’ve written to handle their tags and seems a tad careless. Oh well, guess I’ll just skip that feed.

More information about Rome, Digg etc:

, , , , , , , , , ,