Author name: chipx86

Galago Status – Widgets and Avatars

The past two days, I have been hacking on a new Gtk widget that will be included in libgalago-gtk. It’s a nice little subclass of a GtkEntry that includes an embedded icon, as shown below:

GalagoGtkEntry screenshot

It has a lot of work to go, but so far it’s rather nice.

Avatar development has just begun in libgalago. Avatars, aka Buddy Icons or That Little Picture of Me will be able to be pushed and received just like presence information. This is untested, but should be working by tomorrow, along with a little Gtk widget for easily displaying them.

I think the next trick is to write a general GalagoConnection API that wraps DBusConnection and allows feeds and watches to be registered to it, so that we can eliminate this one connection per feed/watch requirement Galago currently has.

Galago Status – Widgets and Avatars Read More »

Gaim Status Rewrite

I’ve been going through several drafts of the status rewrite for Gaim, to make it less AIM-centric as well as core/UI split, and more advanced. The trick is doing this in a way that doesn’t suck. By doesn’t suck, I mean that it’s a clean API that is expandable without being confusing.

Currently, the idea is to have a few main structs:

GaimStatusType – A type of status, containing the account it’s associated with (or probably just the protocol ID), the status type ID, name, parent slot (see GaimStatusSlot below), list of attributes (see GaimStatusAttr below), the primary attribute ID, whether it’s saveable, and whether it’s settable by the user in some fashion.

GaimStatusAttr – An attribute in a status type. It has an ID and a name, and the type of value it has.

GaimStatus – A specific created status, containing the type of status, the associated buddy or account, whether or not it’s active, and a hashtable of filled in values for the attributes in the status type.

GaimStatusSlot – A way of grouping statuses internally. It contains a list of status types, and a flag indicating whether or not the status types inside are all exclusive.

GaimStatusBundle – This is what is created and stored when a user defines their status (which may be an advanced mode in the UI). The status bundle has a name and a list of status IDs that map to it. This is used to, say, set an Away status, but to have it activate “Be Right Back” on MSN and Jabber, a certain away message on AIM. This is of course not something the user is going to have to do. They should be able to set away just like how they currently do.

The trick with GaimStatusBundle is to do things in a way where it supports global status types and protocol-specific ones. Although there really isn’t a distinction… It references by ID. I guess we’d just have to standardize some. I need to think about that more.

It all sounds a bit complex, but it’s pretty easy really. Each protocol plugin registers one or more slots, each with a status type. Each status type can have an attribute. When a user makes a new user-settable status, like an away message, they can build it individually for a specific account or protocol, or globally. It can be as simple as an Away type with an away message (using a standard “away” status type ID and making it global), or they can get complex and set up a scenario like one depicted above.

Status types will be able to go a bit further. Since not all status types are even settable by the user, there can be status types indicating that a user is on a mobile device, that they’re an op in a channel, or whatever. The API for those parts need to be drafted, but once in the base is in place, that shouldn’t be a big deal.

I still have a lot to fledge out. It needs to be slightly complex to be useful, but I think it’ll be manageable.

Gaim Status Rewrite Read More »

Yay Toys

I discovered last night that if you register serial numbers for both Mario and Luigi: Superstar Saga, and Super Mario Kart: Double Dash, Nintendo will send a GameCube CD containing the original Zelda and Zelda II, as well as the N64 Zelda games. Neat. It just so happens that I have those games, so I registered them. They claim it’ll take about two weeks for them to send it out. That should be fun.

My file server was running out of space (only about 800MB left for websites/cvs/e-mail and 570MB for shared files), so I went out and bought a 120GB harddrive. It’s working well so far, but I think it’s time to get a server that has more than 2 PCI slots and 4 power cables available.

Yay Toys Read More »

GalagoWatch – Presence Push

Tonight, most of the work needed for the GalagoWatch was completed. GalagoWatch is a nifty little API for saying, “I want to capture all presence info as it happens,” or “I want to capture all presence info on this service” or “on this account” or “for this user,” etc.

The API is theoretically finished, but not yet tested. I got side-tracked, and adding away status and away message support to the gaim-galago plugin, and am in the process of adding emblem support to the GalagoGtkPresenceIcon widget. Although I should really be asleep right now, I figure I’ll get that done, set the widget up with GalagoWatch support, and get most of the bugs out.

I’m told that jdub’s speech went really well. I’m hoping I can get a copy of it. It’s too bad I couldn’t be there in person to hear it 🙂

GalagoWatch – Presence Push Read More »

Back Home

I got back home today from a trip to my Dad’s house. I haven’t visited him in awhile, so I went to visit for a couple of days. We took a trip to San Francisco and just kind of walked around Fisherman’s Wharf for a bit, had a good time, and caught up on stuff.

At one point, we started heading back to the car when all of a sudden, a guy on a bike headed right toward us. He screamed to get out of the way, and my dad pulled me back just before he almost hit me. I wondered for a second what his hurry was, when all of a sudden, a black van and a black car came chasing after him, full-speed. They were out for blood. It was, to say the least, a bit odd to see.. Kind of like in the movies.

Other than that, great trip. I’m looking forward to getting back to hacking on projects, and spending time with friends.. School starts Tuesday. It should be an interesting semester.

Back Home Read More »

Galago Screenshots!

I started work today on the first Gtk widget to use Galago. It’s a simple presence indicator icon. It’s a bit hacky, as it polls every 10 seconds for new status, which can make things slower than they should be. However, the GalagoWatch API that’ll be coming in galago soon will deliver new presence and association information directly to anything that uses it, so this problem will go away soon.

Anyhow, I have a test program, and two screenshots. The first is doing a presence query for myself while I’m online and non-idle, and the second is when I’ve become idle:

Online Presence

Idle Presence

Perrty.

Galago Screenshots! Read More »

Gaim-Galago

A lot of good presence work was done on Galago today. Presence feeds can now return a list of presences for the user sent to it, which is useful on such things as IM. Say, for example, a program requests presence for user ChipX86, but neglects to specify a service or source account, since it just doesn’t care. The feeds can now return lists of presences, containing, say, Yahoo and AIM presences.

So I got tired of playing with a test presence feed, and wrote a plugin for Gaim that would provide presence information. So far, it’s working rather well, except for the fact that Gaim’s current concept of status royally sucks. I’m working on it, but am having difficulties creating an easy to use API that handles status exclusion. I talked to Kevin Stange, and he suggested using slots, which could work.

So, with that concept, protocol plugins would define one or more slots, each with an exclusion boolean flag set to TRUE or FALSE. Status types would be registered into a slot. The typical status types, such as Offline, Online/Available, Away, Extended Away, etc. would all go into an exclusive slot, while status types such as Mobile, would go into a non-exclusive slot.

The idea is to have this covering all aspects of status. The state of the user, what the user is connecting from (cell phone, etc.), and anything else. Not everything would have to be displayed. There will be type hints used for that, and prpls can still specify what to show. However, there will be a lot more flexibility in what kind of states can be chosen. Available messages will be doable for protocols that support them, for example.

Also, this will be core/UI split, which has been needed for awhile.

I should have status done within the month, if all goes well.

Depending on what happens tomorrow with my girlfriend, I may or may not start the galago-gtk widgets module in CVS. If I get something really cool, I’ll post a screenshot.

Gaim-Galago Read More »

Another Sad Day

The first news I read when I woke up was the passing of Mark Finlay. Unfortunately for me, like Ettore and Chema, I didn’t know him personally or talked to him online, but I have kept up with his blog. I had respect for him. He seemed like a really good guy, something that is backed up by all the people praising him on Planet GNOME.

I’d like to take a moment and say thank you to all of the people who bring what I use every day to reality, keep it maintained, and provide support for it. They don’t have to. None of us do, and I know open source developers see “Why haven’t you fixed my bug yet?” more often than “Thank you.” To any users of any software reading this, thank your developers. It’ll make their day, and sometimes it helps to be reminded that what they’re doing is wanted, and you never know how long they’ll be around…

Good bye Mark. Thank you.

Another Sad Day Read More »

Galago – Finally some progress!

After four days of hacking, Galago now provides enough structure for a program to act as a feed for presence information, and for others to request that information. This includes information on a user’s service, the status(es), away message, etc.

There’s currently only one method for requesting presence. It blocks until it receives a response, but there will be two more methods. The first new method for receiving presence information will be a function that takes a callback function as a parameter. The program can continue going on its merry way, and the callback will be called with the new presence information when it’s finally available.

The second new method will be to use a GalagoWatch. GalagoWatch will be used for both presence and associative information, but for now, I’ll concentrate on the presence. You initialize a GalagoWatch, feed it the information needed so it can do its queries, set a callback function, and then start it. Any time the user’s presence information changes, the callback will be called with the new information. This would be useful for widgets and such.

It’s exciting to see it come together. Once I implement those and clean up the server a bit, I’ll be writing a Gaim plugin that acts as a feed, and a widget to display status information for the user passed to the widget. Exciting 🙂

Galago – Finally some progress! Read More »

Best Bugs

I was having a chat with my brother earlier about software bugs, and I started trying to remember about the best bugs I’ve encountered in software I’ve had a hand in. Below are my list of favorite bugs that I found entertaining. I’m kind of curious as to what other people would choose for their favorites.

My favorite bug would have to be Gaim’s flying buddies. When the rewrite of the Gaim buddy list was commited, in 0.60, we had a fun little bug where the drag-and-drops weren’t completed. This triggered a Gtk bug (I think it was Gtk’s bug?) where the nodes in the GtkTreeView would fly around the screen a bit from point A (where the node originally was) to point B (where the node is now). When the buddy list was off-screen, this made it particularly fun. As these were flying around, we quickly named them Flying Buddies.

Between classes one semester, I wrote a Snake game for my TI-89 calculator. It was rather easy to do, but I had an off-by-one error that generated what I called “snake droppings.” When the snake ate one of the blocks on the screen, it would of course extend. As soon as the tail started moving again, it would leave a pixel or two behind, hence the name.

My third favorite bug was during the development of my BilliardZ game for the Sharp Zaurus SL-5×00 PDA. Occasionally when hitting a ball, a big black hole would open up on the board, and the ball would disappear in it. Playing pool with black holes littering the table is a little inconvenient. I’m still not sure what caused it, but I ended up fixing it.

Speaking of bugs, something messed up on gnome-blog. I’ve spent over an hour trying to get it working again. Works now though.

(Update: I somehow lost the top paragraph. I don’t know how, but it’s back. That should provide more context.)

Best Bugs Read More »

Scroll to Top