Showing posts with label Pidgin. Show all posts
Showing posts with label Pidgin. Show all posts

Wednesday, 27 October 2010

Fun at the GSoC Mentors Summit

Last weekend was the GSoC Mentors Summit. As a mentor for the Pidgin, Finch and libpurple project, I attended for the first time this year.

It was pretty interesting and a lot of fun, but I have to say I didn't really feel like much of a geek there! Everyone's either got an iPhone or a Droid, and they've all done awesome stuff. Can you say you've worked on WordPress, used by millions of websites, or Apache, serving even more websites, or RTEMS, running several space exploration instruments and other consumer products, or who knows what else?

Nevertheless, it wasn't like I was totally unknown. There were quite a few people who use Pidgin, even one or two using Finch. Oh, and some Mac users using Adium (using libpurple), too.

The flight was fine, but the weather was a bit disappointed. It would have been nicer to explore a bit more, but at least I got to eat a ton of chocolate. I'll try and write a longer re-cap later.

Friday, 21 May 2010

Coming soon, to a Pidgin near you...

Direct connections for MSN! What do I mean? Just take a look at the screenshot below.

What's that? You don't see it? Just take a look at how fast it's going. Yes, that's right; it's not a pitiful 10KiB/s, but about an order of magnitude faster.

It all started with this little patch on trac. But it required a lot of work to get it going. I must have made at least 60 commits just fixing things and getting it to cooperate with aMSN and the official client. I think it should be good now, but you can always disable it in the Account options. It even makes buddy icon and custom emoticon loading faster.

Anyway, I promised I would say something about 2.7.1, and here you go. Direct connections will be in 2.7.1. In fact, I'm just about to push all the revisions.

Monday, 17 May 2010

Branchifying Revisions in Monotone

Have you ever started committing things in Monotone and then realized "This should probably go in a separate branch"? It's somewhat difficult to fix that. You can add a new branch cert, but the old one won't go away.

I wrote a little script based on a mailing list message I saw. It removes the old branch cert, and adds the new one, moving forward along revisions. It even changes merges with "the rest" into propagate messages instead. There are limitations, though. It only works with linear history (but if you've been working alone, that shouldn't be a problem) and it requires mtn 0.45 (since it uses the binary cert format.) Of course, it goes without saying that if you've shared any of your changes with someone else, then this is pointless (or you'd have to change everyone's database.)

It's pretty short. Make sure those SQL statements don't break up when you copy it.

#!/bin/bash

set -e

DB=db.mtn
KEY='someone@domain.com'
START=0123456789abcdef0123456789abcdef01234567

OLD_BRANCH='com.domain.main'
NEW_BRANCH='com.domain.fancy-stuff'

prev=
curr=$START
while [ -n "$curr" ]; do
    echo "Changing revision $curr"

    mtn --db=$DB db execute \
      "DELETE FROM revision_certs WHERE hex(revision_id) = upper('$curr') AND name = 'branch';"
    mtn --db=$DB -k$KEY cert $curr branch $NEW_BRANCH

    parents=`mtn --db=$DB automate parents $curr`
    if [ `echo "$parents" | wc -l` -eq 2 ]; then
        # Fix a merge
        echo "Fixing merge for $curr"
        mtn --db=$DB db execute \
          "DELETE FROM revision_certs WHERE hex(revision_id) = upper('$curr') AND name = 'changelog';"
        other=`echo "$parents" | sed -e "/$prev/d"`
        mtn --db=$DB -k$KEY cert $curr changelog \
"propagate from branch '$OLD_BRANCH' (head $other)
            to branch '$NEW_BRANCH' (head $prev)"
    fi

    prev=$curr
    curr=`mtn --db=$DB automate children $curr`
done

Wednesday, 12 May 2010

Pidgin 2.7.0 Released!

So it seems like I only post about minor releases (as opposed to micro), but I promise that I'll definitely say something about 2.7.1.

Anyway, Pidgin 2.7.0 should be released pretty soon now. You may or may not know that the release versions are dictated by API/ABI requirements. A minor release means we've added API. I wouldn't say there are tons of new user-visible features in this release, but definitely some developer-related things.

Most importantly, we dropped support for old GTK+ and GLib, requiring 2.10.0 and 2.12.0 respectively. Visibly, that means we can't support Windows 98 anymore, but I think we can say that's an acceptable loss by now. For development purposes, though, that means a ton of code that can be removed. It means a lot less code that needs to be maintained. We also were able to upgrade some things like from EggTrayIcon to GtkStatusIcon, which is better at integrating into the notification area.

Don't worry; it wasn't all development changes. We've also got integrated Mood setting. This interfaces to ICQ and XMPP, so I don't know too much about it. More in my area, MSN gained support for file transfer previews, which show up in the request window and the conversation.

There are quite a few other changes that I don't really even know about, so you might want to check the ChangeLog.

Monday, 3 May 2010

Mentoring a student for GSoC

So last week the accepted proposals for GSoC were announced. Pidgin was given 4 slots.

First up, we have Ivan Komarov working on improving ICQ. I don't really use ICQ, so I can't say much, but if you do, hopefully there'll be a lot of great things coming out of it that will be useful to you. Next up is Adam Fowler working on a better chat log viewer. People really seem to complain about what we have now and at the very least, it's kind of slow once you have a lot of logs, so there should be room for some good improvements there. And then we have Gilles Bedel working on detachable libpurple sessions. I'm not sure how often I'd use it, but every once in a while, I feel like checking in on Pidgin from the laptop and it's a very painful process through SSH and D-Bus. This project should make that sort of thing much simpler. Finally, we have Jorge VillaseƱor Salinas working on refactoring MSN.

So that last one is the one I'm mentoring. Personally, I've been wanting to re-write bits and pieces of the MSN prpl for a while now, but I've never had the time to get around to it. Jorge's already done some great work getting custom smiley support working for Pidgin 2.5.0. I'm sure he'll have no problem re-working the MSN prpl. I'm looking forward to getting a more structured and (hopefully) well-designed prpl which should make development a lot easier and quicker.

Wednesday, 10 February 2010

XMPP, meet Facebook...

So, it seems the Facebook has finally added support for logging in to their Chat via XMPP. This is, of course, awesome so people stop asking about it, but also terrible since it took them so darn long. That meant a lot of horrible hacks just to get it working in the interim. (No offence Eion, I just mean the scraping, not the code.)

This announcement comes straight from the developer blog. You need to have set up a username (which you can check here). Casey's blog has all the screenshots you need to figure it out. The only downside is it doesn't use encrypted streams.

The biggest problem, though? Having to organize a few hundred buddies into their correct contacts.

Friday, 21 August 2009

Voice & Video

Sooo, Pidgin supports voice and video now.

It's only on XMPP (aka Google Talk), and only on Linux, but hopefully that will change soon. I hear it's a real pain to get all the farsight/gstreamer dependencies compiled for Windows right now.

And here's hoping we can get MSN support soon, too. I'm not too sure how well farsight supports it though.

Saturday, 18 April 2009

GTK+ 3.0 for Pidgin

A little while ago, grim posted a link about preparations for GTK+ 3.0. I started a bit of work on it in a separate branch.

So far, it hasn't been too much trouble. I managed to fix single includes in the main branch, and all deprecated functions in libpurple core too. Finch was super-easy and required almost no work. What was left was the Pidgin UI.

The main Pidgin UI required a bit more work. Replacing GtkOptionMenu with GtkComboBox was pretty simple, just a couple preprocessor checks needed. Using GtkTooltip instead of GtkTooltips was also pretty painless, but there's still one matter left. The headline text that goes in the buddy list for mail notification used to do a hack with the tooltip to colour it correctly. At the moment, it ends up grey because I'm not sure how to get it working.

There are still a couple big changes left. I still really don't know how to write UI Manager stuff, and it's hard to find good examples. It only has to be done twice, for the buddy list and for the conversation window, but I'm not sure how much that really means. Fortunately, we are not heavily GNOME dependant, so that's probably the biggest change.

Tuesday, 19 August 2008

Pidgin 2.5.0 Released!

Look, Pidgin 2.5.0 is out!

And yes, we have MSNP15 support. That means offline message support, sending custom smileys, server-side aliasing, buddy embleming and a whole bunch of other goodies. Hylke made some nice updates to the icon theme that looks cleaner, I think. Though I'm not sure whether I like the new pigeon yet. I hope with all that testing those Adium guys did, there won't be too many problems. Some people aren't as optimistic, but we'll see how it goes. :P

Oh, and guess what? I'm a developer, too!

Monday, 14 July 2008

MSNP15 in Pidgin

So, look at that, MSNP15 is now in Pidgin's main branch. Well actually, it was committed over 23 hours ago. But unlike John, I wasn't going to say it was done until the GObjectification branch had the update as well.

While it would be great to take credit for the whole thing (but I wouldn't, because I'm not that sort of person), there have in fact been several contributors. Let's take a look at that now, shall we, with these graphs from ViewMTN. Yes, I realize they're kind of small, but full size would make this really long and you can always click on them.

MSNP13 started way back when on the im.pidgin.soc.2006.msnp13 branch (though it wasn't actually on MTN). This was done by Ma Yuan for GSoC in 2006. Several new and interesting features were implemented then. Receiving OIM's was one of the first new features. Adding contacts from the Yahoo! network was soon added, as well. One of the most requested features, personal status messages, was added not long after. There were also various changes made under the hood to support the new protocol, such as SOAP processing code. Unfortunately, some of that code was in need of cleanup, and in fact some parts went against the original MSN protocol plugin's design. In the end, this code was not yet ready to be merged.

I don't think much happened after that until the next year. Richard and Ka-Hing did some work in ticket #148 to get things up to standard. This work resulted in the new im.pidgin.cpw.khc.msnp14 branch. As you can tell from that graph there, it involved quite a bit of branching off to get things cleaned up. For a month or two, this branch only really had updates from trunk applied to it. There were some minor updates made to fix bugs. Around May, Stu began making several changes. These fixed a variety of bugs, and closed several tickets. Partial updates were found to be buggy, so the full contact list would be used for the time being.

Again, this branch sat with no commits except for propagating from trunk. There was then yet another MSN GSoC project for 2007. This time the project was written by Carlos Silva. Besides cleaning up the code, there were several other goals such as direct file transfers, transfer of winks and voice clips, and the like. There were several fixes made in this time that took care of quite a few major bugs and tickets. In this case, the MSNP14 branch was propagated to trunk in mid-September, but it did not compile by default. In this regard, it looks like the major objective was complete, but the next biggest objective was not. Even this merged code did not make it into the next few releases, because they were branched from trunk earlier for some other reasons. In the background, Ka-Hing had started work in im.pidgin.cpw.khc.msnp14.soap which involved much cleanup to the SOAP code. This was merged at around November.

Some time around this point, I started hacking minor things in Pidgin. Using whatever documentation I could get out of msnpiki, I updated libpurple to be able to login with SSO on MSNP15. This involved a couple other cipher changes as well. While that was all fine and dandy, it did nothing about the various other problems in the code. Around December, Sean noticed these things, and I was promoted to a "Crazy Patch Writer". While Gary took care of committing the cipher stuff, Ka-Hing and I worked with my code, cleaning up some things that weren't ready yet. Soon after, we got some help from Masca and Maiku reporting bugs and making fixes.

At the beginning of June this year, Richard gave me push access, and I started my own branch at im.pidgin.cpw.qulogic.msn. This had all the MSNP15 changes, of course, as well as anything new I came across and decided to work on. One of the biggest bugs was renewing ticket tokens for all the SOAP operations. It turns out no-one had figured that out before, so I had to reverse-engineer it myself. oSpy was a great help in achieving this. Dimmuxx, an Adium user, also started some unofficial Adium builds with code from my branch. This turned out to be a great help in testing out the code. Not only did Dimmuxx test out token updating by staying connected for 24+ hours, the Adium users helped unearth quite a few bugs. If it weren't for them, I'm sure I wouldn't have found all of them. Lately, I've been doing a lot of cleanup. The debug messages in the MSN plugin were all prefixed with various names, from plain old "msn", to stuff like "MSN-OIM", "msn_switchboard", to just "msg". There was also a lot of dead code due to the MSN servers dropping commands along the way from MSNP9 to MSNP15. Anyway, here's the final merge (the middle hexagon), along with a propagate to the GObjectification branch to the right.

So, with what does that leave us? Well, Pidgin now supports MSNP15, ahead of most other MSN clients of which I know. Assuming there are no critical problems, this code should be in 2.5.0. Of course, there are still some other items that need to be done. Fast file transfers using direct connections (#247) do not work yet, though they are in msn-pecan by Felipe. Winks, sound clips, ink, and all those other items (#393) are not yet ready. There doesn't even exist code for things like shared folders, though I am not aware of a client that does support that fully, anyway. Nevertheless, I can't wait for 2.5.0 to be released!