Planet IM

May 14, 2008

Galaxy Dark

I got a free bar of the new Galaxy Dark with my shopping yesterday, which is basically a dark chocolate (50%) version of a Galaxy bar. Well, I say that, but...

The smooth Galaxy way to enjoy dark chocolate... deeply smooth, intensely delicious and not at all bitter.

This should be called Galaxy Fail. It looks like dark chocolate but is pumped with sugar so it has a weird sickly sweet taste, nothing like the creamy taste of the original Galaxy. I predict this product will be binned soon.

May 13, 2008

GTD and clarity

I’ve recently been bitten by the GTD bug. I’m not exactly a disorganized person—I generally do get stuff done. What attracted me to the system is the core idea of striving for clarity of thought by eliminating (brain) clutter.

I’ve always loved the feeling that I get when I lose myself to a particularly challenging or fun piece of coding. It’s that state of mind where you lose track of the passage of time and focus all your energies on turning ephemeral ideas into billions of electronic pulses. There is a clarity of thought in that state, and I would love to experience it more often.

The problem is, there is always clutter and noise. So, the logical question is, how does one eliminate these things and encourage a more constant state of clarity?

For myself, I’ve found that GTD is at least a starting point. It provides a framework on which to capture actions and ideas in a way that shunts the responsibility for tracking stuff from my brain to a more reliable store. As I’ve been consistently doing this for the past week, my list of actions/projects has grown far more rapidly than I would have ever thought. The amount of stuff that we juggle in our heads is truly prodigious—no wonder the average attention span in our society is under 3 minutes.

playing chess with a livejournal account

Someone asked about using Chesspark with other XMPP or Jabber accounts and I thought I would make a quick post on how to do it with livejournal. Any XMPP account will work the same as livejournal, so you do not have to limit yourself.

First, if you have a livejournal account, you will need to create a Chesspark account using your livejournal username.

See the following urls :
http://www.chesspark.com/faq/#general-5
http://www.chesspark.com/join/

I used this one, so the username I put in the form field was thetofu@livejournal.com
Note the '@livejournal.com' , you will need to add this when creating and logging into the account.

Now here is the only part where it may get confusing. You have to enter a Chesspark password. This can and should be different from your livejournal password. It is used to access the Chesspark website and not the live game server. This will be changed soon and support for openid is in the works. So fill in your Chesspark password, but remember to use your livejournal password on the next part.

Next we want to play some games. To get to the live game server you can use the web or download a client.
Web: http://www.chesspark.com/play/
Download: http://www.chesspark.com/download/

Going to the play url or starting up the Chesspark application you will be presented with a login screen.
Here you will enter your full livejournal username and password. ( NOTE: not your Chesspark password from above).

So, I enter thetofu@livejournal.com and my livejournal password and I am off! Playing Chesspark with my livejournal account!

So, how does this work? Well, Chesspark is XMPP based and can communicate with other XMPP chat servers. Livejournal has XMPP chat and when you log in with a Chesspark client you are actually logging into livejournal.com. After that you can communicate via livejournal to Chesspark and do anything you like as if you were on the Chesspark server.

I hope this helps and have fun!

Today's Second Geohack

I managed to wangle a Fire Eagle invitation this morning, so over lunch I grabbed the Python API Kit and threw it at the sample Gypsy client.

$ ./gypsy-fireeagle.py 00:0B:0D:88:A4:A3
got 51.861145 0.156275
Updated FireEagle

The first line is me running my script (this one is 64 lines, but it is half whitespace), telling it where my GPS is. The second line is the current position that my rather cheap and nasty GPS determined. The third line tells me that Fire Eagle has been updated with those coordinates.

Suffice to say I'm very impressed with Yahoo's geocoding software. My GPS never settles to an accurate reading and will happily jitter around a 20 metre wide circle for hours, but the location Fire Eagle is reporting me at is two doors away. I'm not exaggerating: it says number 9 on my street when it should be number 5. That is some incredibly accurate mapping they have.

Today's Geohack

Following hot on the heels of Yahoo's announcement of their Internet Location Platform, I wrote a quick 20-line Python hack to convert from latitude and longitude to a place name. Because the ILP doesn't yet expose the ability to go from a position to a WOEID we have to ask the Flickr web services to do this first (as Flickr is owned by Yahoo this is using the same backend). Once we have the WOEID, it can be then be looked up on the ILP and useful information obtained. Example speak more than words:

$ python geohack.py 
Using position 51.872330 0.161950
Got WOEID 12775
Got town Bishop's Stortford

Now to write a GeoClue provider which will fill in the locality information from the position. Long-term grand plans involve integrating all of this geo magic into Postr, somehow.

NP: Third, Portishead

May 12, 2008

Fire Eagle Invitation?

Does anyone out there on the Intarwebs work for Yahoo, or have a friend who works at Yahoo? I'd really like to give this Fire Eagle thing a go, specifically integrating Gypsy and GeoClue with Fire Eagle, but it's invitation only at the moment...

Update: I now have an account!

GUPnP Basics, Part 1

For the last few days I've been learning more about UPnP and testing it with the few devices I have around the house. One of these is a cheap ADSL router, which apparently has the lamest UPnP stack on in existence. It does however support the WAN IP Connection interface, so you can use UPnP to get the external IP address and manipulate the port mapping. I'll skip over the horrific security violations this involves, because it's a useful demonstration that the majority of people will be able to test.

Today we'll start simple and get our external IP address using GUPnP. The first thing to be done is to create a Control Point, which in the UPnP model handles discovery of resources, be them devices or services (a device can have multiple services). When creating a control point you can specify the URN of the resource you want to target. In this case we want all services providing WANIPConnection so we'd use urn:schemas-upnp-org:service:WANIPConnection:1. If you want to browse for all services then use ssdp:all (SSDP being the Simple Service Discovery Protocol).

static GMainLoop *main_loop;

int
main (int argc, char **argv)
{
  GError *error = NULL;
  GUPnPContext *context;
  GUPnPControlPoint *cp;
  
  /* libsoup requires threading, so we have to initialise it */
  g_thread_init (NULL);
  g_type_init ();

  /* Default GLib context, default host IP, default port */
  context = gupnp_context_new (NULL, NULL, 0, &error);
  if (error) g_error (error->message);

  /* Create a control point targeting WAN IP Connection services */
  cp = gupnp_control_point_new
    (context, "urn:schemas-upnp-org:service:WANIPConnection:1");
  /* The service-proxy-available signal is emitted when any services which match
     our target are found */
  g_signal_connect (cp,
		    "service-proxy-available",
		    G_CALLBACK (service_proxy_available_cb),
		    NULL);
  
  /* Tell the control point to start searching */
  gssdp_resource_browser_set_active (GSSDP_RESOURCE_BROWSER (cp), TRUE);

  /* Enter the main loop */
  main_loop = g_main_loop_new (NULL, FALSE);
  g_main_loop_run (main_loop);

  /* Clean up */
  g_main_loop_unref (main_loop);
  g_object_unref (cp);
  g_object_unref (context);
  
  return 0;
}

static void
service_proxy_available_cb (GUPnPControlPoint *cp,
                            GUPnPServiceProxy *proxy)
{
  /* ... */
}

Now we have an application which searches for the service we specified and calls service_proxy_available_cb for each one it found. Now, to get the external IP address we need to invoke the GetExternalIPAddress action. This action takes no in arguments, and has a single out argument called "NewExternalIPAddress". Yes, the naming scheme is stupid. GUPnP has a set of methods to invoke actions -- which will be very familiar to anyone who has used dbus-glib -- where you pass a NULL-terminated varargs list of (name, type, value) tuples for the in arguments, then a NULL-terminated varargs list of (name, value, return location) tuples for the out arguments. A simple implementation would be as follows.

static void
service_proxy_available_cb (GUPnPControlPoint *cp,
                            GUPnPServiceProxy *proxy)
{
  GError *error = NULL;
  char *ip = NULL;
  
  gupnp_service_proxy_send_action (proxy,
				   /* Action name and error location */
				   "GetExternalIPAddress", &error,
				   /* IN args */
				   NULL,
				   /* OUT args */
				   "NewExternalIPAddress",
				   G_TYPE_STRING, &ip,
				   NULL);
  
  if (error == NULL) {
    g_print ("External IP address is %s\n", ip);
    g_free (ip);
  } else {
    g_printerr ("Error: %s\n", error->message);
    g_error_free (error);
  }
  g_main_loop_quit (main_loop);
}

Note that _send_action blocks until the service has replied. If you need to make non-blocking calls then use gupnp_service_proxy_begin_action which takes a callback.

So, that is searching for services and invoking actions in GUPnP. Next time I'll cover subscribing to state variables, and routers which can't count.

NP: Folk But Not Folk, Various

May 09, 2008

All Tigase projects publicly available

Recent Minichat addition on the Tigase website raised lots of questions about access to the source code.

Following those requests we have listed all the projects Tigase team works on and all the source codes are now publicly available. You can go to the projects page and browse all the published projects.

Please note, most of the project trackers are in initial state and the web content might be missing. You can, however access the project source codes, bug tracking system and see the roadmap. We are working hard on adding missing elements.

Your comments as always are very welcomed.

read more

May 07, 2008

I'm getting married! Plus other stuff

So I've been somewhat quiet after my last post, but I've been pretty busy. Working and stuff around the house have taken their toll, and I've been stepping away from oss projects that I feel I've contributed what I can to. I've already stepped down from Adium, and I'll be stepping down from Perian soon.

In general there's just not enough time in the day for everything I want, hence the stepping away. The Growl project itself hasn't been where I want it to be, and that's my fault due to the fact that I'm the one who's providing leadership for the project (along with the Lead Dev), so I'm going to work at getting that up to snuff.

So, that's what's happening with me and oss projects. I'm not totally gone from the others, but I'm only around when someone needs to ask me a question.


Now then, on to the subject. I'm getting married! She's pretty awesome (obviously, I'm marrying her), and funny too. Like last night, we registered for the wedding, and she just kinda took the gun and ran around scanning, I lost her for about 15 minutes in target, and 30 minutes in bed bath and beyond (you can see the Target bridal registry here and the Bed Bath and Beyond bridal registry here). Eventually I found her looking for me while I was looking for her, it was comical.


We've got most things planned out already. My cake is going to be pretty sweet, and hers is just plain awesome. The wedding is in the beginning of September, so if anyone happens to want to come, just shoot me an email and I'll get you the info.

Overall, I'm happier now than I have been in the last 3-4 years. People at work see a noticable difference that they comment on a lot. Life is great.

May 06, 2008

IntelliJ... Can we talk about this?

IntelliJ, why do you insist on bleeding memory relentlessly as I use you? I should not see your usage increasing by 3 megs every second. Sure garbage cleanup is taking care of it, but geez...

 

Supposedly this was supposed to be fixed in 7.0.3. I'll get back up with JetBrains when I have the patience to do so. Generally it doesn't seem to cause any real problems, it's just damned bizarre! See attached movie clip for fun. ;)

New chatback styles

New chatback badge style examples
One line basic:
Two line basic:
Hyperlink and status icon: Chat with Itala

We recently added the ability to create Google Talk chatback badges in several new styles. These options are available by clicking on the “Styles” drop down menu when creating a chatback badge. Examples of the new types of formats can be seen on the right.

The two borderless versions of the badge make it easier to fit into your page and customize the appearance as you like. You can just paste the code where you want the link to appear. If you want to further tweak the appearance, you can add some style parameters: Add fontfamily and fontsize to choose a specific font or size, and textcolor and linkcolor to set the colors using a hexadecimal RRGGBB value. You can add these parameters to either the new badge URL or to the iframe's src URL in the generated HTML. You can also use the h and w parameters to specify the height or width of the badge.

For example, &fontfamily=courier%20new&fontsize=13&linkcolor=000000&textcolor=880000 will give you Courier New 13 with black for the link text and dark red for the rest of the text. Here is an example of how this looks with the classic badge:

In addition to providing more flexibility in terms of appearance, chatback can now be used on web sites that don’t allow frames. For these sites, use the new HTML version of the badge. This version can’t display a status messages but it will show your status as a colored circle anywhere you can embed an image. And if you can’t embed an image (like in an email message), you can use the hyperlink by itself or just the URL.

To create a badge, visit http://www.google.com/talk/service/badge/New or, if you are a Google Apps user, visit http://www.google.com/talk/service/a/DOMAIN/badge/New replacing DOMAIN with the name of your domain.

Bruce Leban
Software Engineer

More Social Networks

A while ago I listed some social networks where I exist. I've thought of a few more since then. I use all of these less than the other ones, but here goes:

  • Flickr - A fantastic web site for posting and sharing pictures. One of it's major competitors is Google Picasa, which is also pretty good. I hit the 200 picture limit for a free account, so I don't put all my pictures up here. Instead I put them on my personal website.
  • Mugshot - Some sort of social network aggregator. I don't really use this. I think maybe I signed up because it's made by Red Hat?
  • MySpace - I don't use this, either. It's so much fun to make fun of how low quality everything is! For example, if you enter an incorrect password when signing in the error message is "You must be logged-in to do that!" WTF?
  • Plaxo - The original idea is that it was a big shared address book where you updated your address and everyone else got the update. I think you can sync it with addresses books in Outlook and the OS X thing and probably cell phones and stuff. They also do the social network aggregation thing now.
  • Yelp - A web site for reviewing stores. I don't write reviews very often. Mostly because they don't let me out very often.
  • YouTube - I've recently started favoriting music I like so it's easy to listen to. I think this performance is pretty awesome.

May 04, 2008

BlatherSource has moved to Clearspace!

Yes that's right, Clearspace. Those familiar with Clearspace might be thinking to themselves ... are you nuts? Clearspace is a -beast- for just a blog! Well, you're probably right. However, I like it, I work with it, and I've been interested in writing some plugins for it for a long time now. The thing is, without actually running it live anywhere for myself, I never give any priority to writing said plugins. Now I have a solid reason to. =)

 

So what exactly -is- BlatherSource nowadays since I moved all of my projects away from it? Well, for alll practical purposes it's my playground. I continue to use this blog for posts related to my projects, XMPP, that sort of thing. I'll be running a number of services at this site. for example, I'm now offering public XMPP services here. If you are so inclined, feel free to register with blathersource.org. As the author of the IM Gateway plugin, there's a good chance this will be the first place I upload new versions for testing, and if a number of folk start using the service here, it'll help me get a window into what errors might show up. If folk start having problems that I'm having trouble dulicating myself, hopefully I can get said folk to register at blathersource.org and "demo" the misbehaving accounts to me and such. And just in general, if you are looking for a place to house your XMPP account, you are quiet welcome to register it here.

 

I'll post more details on the XMPP services at a later date, but anyone is welcome to register now if they are so inclined. I'm not sure what else I'm going to run here just yet. I got a general purpose dedicated server from Hosting And Designs. I've been quite pleased with it so far! I hosted my previous web services at Modevia, who were wonderful! However, I decided I wanted to run more services beyond just web services, and also needed to feed my old sysadmin bug since I no longer do that for my job. =)

 

Anyway, I'm excited for my new site. Who knows, maybe it'll get me posting more. Probably not, but it's wishful thinking.

 

May 03, 2008

Mimicking Jaiku with Psi

The day before yesterday, Peter Saint-Andre sent out a couple of Jaiku invites to all Jabber Google Summer of Code students and their mentors, including me. Never having looked at microblogging before, I toyed around with it a bit, and it quickly reminded me that I still had something on my Psi wish-list for a while now: a flat, live log of all Jabber events in your network. Since I had a long weekend, I quickly coded up a prototype, and hooked it into Psi.

The result looks a bit like this:

If you know Jaiku, you’ll probably notice that this looks very similar to the Jaiku web interface. Besides status messages, there are all kinds of (extended) presence events from your contacts, such as the currently playing tune or his/her current mood. Groupchat (`channel’ in Jaiku) and directed messages are interleaved with the events, and get a hyperlink which, when clicked, opens up the corresponding groupchat or chat dialog. This type of event log allows you to have a good overview of everything that is happening in your Jabber network. And if your log gets cluttered with groupchat events, you can always disable groupchat events (or any other type of event) at the top of the dialog, with a more compact log as a result. Finally, just as with the Jaiku Jabber bot, you can quickly reply to the last event from a certain user at the bottom of the dialog. 

When will this prototype be production-ready, you ask? Well, I’m actually not planning to invest any more time in it in the near future. The reason is that Aleksey Palazchenko (aka AlekSi) will create a brand new history system for Psi for his Google Summer of Code project. I’m pretty sure his new history system will enable us to get a global live history of events, together with filtering based on type. And if we still need some extra functionality, we could always create a plugin.

HDTV Converter Box Coupons

Analog TV will stop being broadcast in the US on February 17th, 2009. The FCC has a program where you can get a coupon for a discount on an HDTV converter box that will let you receive HDTV and watch it on your normal television. If you watch broadcast TV then you should consider applying for a coupon. I'm not sure, but I think it's a $40 discount.

May 01, 2008

Improving Psi’s roster

For a while now, Psi users have been requesting several changes and additions to the roster (or `contact list‘). These requests include grouping contacts into meta-contacts, nested roster groups, and displaying user avatars in the roster. We have been postponing all these changes to the roster as much as possible, because none of us wanted to touch the roster code, for reasons I’ll explain below. This year, Psi is fortunate enough to have Adam Czachorowski (aka Gislan), a student from the Google Summer of Code, to work on roster improvements.

So far, the major cause of all Psi developers staying clear from doing substantial roster changes is probably the fact that all roster-related classes are very tightly coupled to each other. This has several consequences: 

  • It’s hard to get a good understanding of which piece of code does what, since there is no separation of logic between the different classes, and none of them work without the other one.
  • The code is very fragile: if you change one tiny piece, you might break something completely different. Moreover, it’s hard to tell what you broke, since the functionality is spread out across the different classes.
  • The code is untestable: Since there is no decent separation of the roster logic (i.e. the structure of the roster) and the roster user interface (i.e. how it is shown), it has been impossible so far to create some form of automated tests for the roster code. Because of the tight coupling between the various classes, it is impossible to test each part of the roster functionality in isolation, making unit testing impossible. Given that the roster is the most central part of the Psi user interface, it is actually unacceptable that we have no form of testing whether it (still) functions correctly.
  • There can be no reuse of any of the roster code in other parts of the UI (such as the list of participants in the MUC dialog), or even for other IM clients that are based on the back-end of Psi.

Because of these fundamental issues, a complete makeover of the roster code is in order. More specifically, we want to have a clear separation of anything that has to do with UI, and the actual logic of the roster. Additionally, we want the (untestable) UI layer to be as thin as possible, pushing as much down to the logic layer as we can. Finally, we want to achieve a full coverage of the logic layer using only unit tests.

What Gislan will exactly do in his Google Summer of Code project still has to be worked out in detail. He will be responsible for a major part (if not all) of the roster rewrite, and get some new functionality in there as well (since that will be a breeze with the new code). You can follow his progress on his blog, and get more detailed technical information on the project page for his GSoC project.

msn-pecan 0.0.12 released


It has been a while since the last release mostly because of personal stuff (moving, trips, lack of Internet), but now everything is back to normal.

This release features a considerable number of bug fixes and support for OS X thanks to Christiano Farina Haesbaert. One step closer to Adium support ;)

Also notable is a very nasty bugfix (potentially many bugs) in Win32 (g_print needs to be more portable).

Also, the source code got a new home at github.

Fixes include:
16: Pango markup injection on personal messages
17: build fails on OSX 10.5.2
19: Nudges
26: Crash on idle
33: wrong include in io/cmd.h

Download from the usual place, at Google Code.

Enjoy :D

Free Review Board Hosting for Summer of Code

Google Summer of Code 2008 is on, and soon students will begin coding, which means mentors will be reviewing code. While the Review Board project is not a participating project in this year’s Summer of Code, we felt Review Board could help with the whole process, improving things for both the students and the mentors.

Starting today, and for the duration of this year’s Summer of Code, we at the Review Board project would like to supply up to 30 projects with free Review Board hosting at gsoc.review-board.org. We’ll handle maintenance of the server, support, and provide assistance to get students and mentors set up.

Doing code reviews with Review Board is simple and saves time over reviewing standard raw diffs, with features such as a powerful diff viewer with syntax highlighting and inline commenting, interdiffs, status reports, and support for a wide variety of revision control systems. We believe it can be as effective a tool for open source development as Bugzilla and Trac have become.

Th Summer of Code server is intended for Summer of Code-related changes only. While we’d love to provide hosting for projects in general, we have limited resources. However, should your project decide to set up its own Review Board server in the future, we’ll be able to assist in migrating your Review Board history to your new server.

If you’re interested in trying out Review Board for your Summer of Code project, you can find out how to apply on our Summer of Code Hosting page.

To learn more about Review Board and how it works, you can look at our project website or watch our presentation from this year’s LugRadio Live USA.

April 29, 2008

EphyDeli 0.3

EphyDeli is a Python extension for Epiphany that adds Post To Delicious menu and toolbar items for posting the current page to Del.icio.us. I know of several people who use it frequently and the last release was in 2006, so I've obviously mastered the Unix philosophy well here! This release was caused by those mean old Epiphany developers changing the API, many thanks to Thibauld Nion for noticing this and sending a patch.

To download it you can either grab the tarball or fetch the bzr tree.

April 28, 2008

Ford GT --> Cycling --> North Carolina --> Sweet Tea

I saw a Ford GT while biking today. That's the second one I've ever seen. I saw the first one a year and a half ago, in the same area (near the corner of Sand Hill Rd and Junipero Serra Blvd in Palo Alto, CA, USA). The two cars were painted the same (white with two thick blue stripes running along the top from front to back), so it's possible it was the same car. According to Wikipedia there were only 4038 Ford GTs produced, and MSRP was $139,995.

One of the reasons I like biking in that area is because there are usually luxury sports cars driving around. Another reason is because the Santa Cruz mountains are beautiful. There's usually a cool fog flowing through the lush underbrush, the coast redwoods, and the eucalyptus.

Once when I was biking in NC a cop drove past me in the opposite direction, and I instinctively looked down at my speedometer to check how fast I was going. It made me chuckle.

Sweet Tea is pretty awesome, but you don't come across it too much in California. But I've been introduced to Pearl Milk Tea (also called Bubble Tea). It's a beverage that's created by taking your standard black or green tea, mixing in flavored sugary syrup, optionally mixing in milk, and optionally mixing in little tapioca balls. At first I thought the tapioca balls were nasty, but they've kinda grown on me, probably because they're soaked in sugar. I recently got a vanilla black tea (no milk) with pearls, and it reminded me a lot of sweet tea. If you're a fellow southeast to west coast transplant you should try it. They probably have it in New York, too.

April 25, 2008

Installing Minichat on your website

We have made Minichat available just to demonstrate new stuff we are working on, to do some tests and collect your opinions. The feedback we have got exceeded our expectations. The most common question was: Can I/how can I install it on my website?

Installing the Minichat on your website is very simple so I am putting here instructions for all of you who want to include the Minichat client on your website and allow visitors to chat with you.

Just to remind you - this code is still under development and will be updated and changed very often. It may even stop working temporarily or permanently. We can even intentionally block certain users or IP addresses if we discover any abuse. If you are ready for this and still want to have it continue reading...

read more

Dear Blog

I've been crazy busy. Here are some bullet points:

  • Finished a version of meebo that uses libpurple 2.4.1. Up until now we've been using Gaim 1.5.0. The new code is very stable, it just needs a few bug fixes and lots more testing. But it's so much cleaner. I spent a little over 70 hours working on this the week of March 31st. And I've probably spent around 600 hours working on this since I started on December 22nd, 2007.
  • Wrote an IM program for the Google Android platform, with help from Jim from Meebo. Google Android is an open application platform for cell phones. Android phones aren't out yet, but they will probably start coming available late this year. We submitted this to the Android Developer Challenge. I'll write more about this later. Combined Jim and I probably spent around 120 hours working on this.

  • Went bouldering last week at Bishop with Emily, Toro, Sandy, and some other people from the Sunnyvale Planet Granite climbing gym. I absolutely love the Happy Boulders and the Sad Boulders. We also went to the Buttermilks, but I can do without those. The bouldering was good, and the company was great, but holy cow I could do without the insane wind and sand and ground that you can't hammer a tent stake into.
Last updated: May 14, 2008 03:02 PM