tag:blogger.com,1999:blog-25761869127224334452024-03-14T05:32:18.052-04:00The Flaming BankerA banker and Pidgin developer from Ohio rants endlessly, starts flame wars, and has been given a blog. This can't be good...John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comBlogger53125tag:blogger.com,1999:blog-2576186912722433445.post-29452421562154793772012-11-11T23:58:00.000-05:002012-11-11T23:58:14.492-05:00Pidgin and the Impending Shutdown of Windows Live Messenger<br />
So, Microsoft recently announced that they’ll terminate the Windows Live Messenger service in favor of Skype in early 2013. We’ve been getting a number of questions about what this means for Pidgin. Quite honestly, we don’t know. At this point, all we know is that China will still be able to use Windows Live Messenger. That leads us to believe that the servers providing MSNP service will remain active and maintained for some period of time after the announced shutdown, but it’s not clear whether or not that will be the case. It’s also not clear if the servers supporting China’s continued use of WLM will be accessible to non-Chinese IP space. Even further, it’s not clear if the recently-launched XMPP interface to the WLM network will remain functional. We don’t support that yet though, as it requires some authentication magic we don’t implement. Even if we implement support for the authentication this XMPP gateway requires, it could end up being a waste of time, as it could get shut down at any time, either before or after the rest of WLM.<br />
<br />
And before anyone goes there, we can’t support Skype. There is no documentation of the protocol available to us, nor is there code we can borrow from a cleanly reverse-engineered alternative implementation. All that exists is SkypeKit, whose license agreement explicitly forbids its use in open-source software. The license also forbids use in “server applications” which precludes doing something like wrapping a simple closed-source XMPP daemon around SkypeKit. It is not currently possible to legally support Skype, so we won’t try.<br />
<br />
The bottom line is we have no idea what the announcement means for Pidgin or any other alternative clients yet. We’ll all just have to wait and see.<br />
John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-8300301283700382282011-08-28T13:01:00.005-04:002011-08-28T14:44:13.812-04:00Major Changes AfootWell, it's been about forever since I last bothered to post anything here. Since my last post, we've released several times, introducing and fixing a bunch of bugs. Now, however, we're shifting our focus to new development of a sort that we don't do often—compatibility breakage and big internal changes. This means that our main development effort is now in working toward Pidgin and libpurple 3.0.0. I'm going to try to explain some of the work going on for the benefit of anyone who reads my ramblings, so here goes.
<br />
<br /><h2>Versioning</h2>First of all, there seems to be some confusion about how Pidgin and libpurple version numbers work. I'd like to try to clear some of that up.
<br />
<br />Pidgin, Finch, and libpurple use what's called “<a href="http://semver.org">Semantic Versioning</a>.” That is, each part of the version number has a particular meaning for users and developers. We chose this scheme to assist plugin developers in knowing when significant changes would require effort on their part to maintain compatibility with current Pidgin and/or libpurple versions. It also helps our users by letting them know when their existing plugins will stop working. So, how does this semantic versioning work? Let's look at the format of our version numbers and find out.
<br />
<br />Pidgin, Finch, and libpurple version numbers have three components, separated by dots. At the time of this writing, 2.10.0 is the current version number. These components are called major (currently 2), minor (currently 10), and micro or patch (currently 0). Let's look at what each means.
<br /><ul><li><b>Major</b>: the major version doesn't change often. The last time we changed it was in 2007 with the release of Pidgin 2.0.0, and before that was in 2004 with 1.0.0 when we started using semantic versioning under our previous name. Whenever this number changes, we've made changes to Pidgin, Finch, or libpurple that break compatibility with every UI and plugin that currently exists. Usually this means that we've removed something from the API exposed to plugins and UI's, or that we've changed something about a function (its name, arguments, return type, or the header file it's in). Sometimes plugins or UI's can just be recompiled when this happens; other times they need maintenance to become compatible with the new release. Additionally, the major version <i>never</i> decreases. It will <i>always</i> increase when it changes.</li><li><b>Minor</b>: the minor version changes more frequently than the major version, but generally less often than the micro or patch version. Whenever the minor number increases, we've added things to our API that do not break compatibility with existing plugins or UI's. A prime example of this is adding the voice and video support we added in 2.6.0. We added a bunch of stuff to the existing API, but didn't change anything that would cause a break in backward compatibility with existing plugins and UI's. When the minor version decreases (gets set back to 0), it means that the major version has changed, and the whole cycle starts over.</li><li><b>Micro</b> or <b>patch</b>: The patch version changes with almost every release. When this version increases, it means that we haven't touched API at all; instead we've done nothing but fix bugs or add small features that don't affect compatibility with plugins or UI's. When this version decreases (gets set back to 0), it means that the minor version has changed.</li></ul>
<br />Related to all this, and important only for plugin and UI developers (so skip this paragraph if you're not a developer!), is the behavior of the <code>PURPLE_VERSION_CHECK</code> macro. Many developers expect <code>PURPLE_VERSION_CHECK(2, 5, 0)</code> or similar to expand to a statement that evaluates to <code>1</code> or <code>TRUE</code> in the case of building against libpurple 3.0.0. This, however, is <i>not</i> the case. Because our major versions are incompatible with each other, we have intentionally written <code>PURPLE_VERSION_CHECK</code> to fail if the major version is not an exact match. We understand this can be confusing and inconvenient, and we sincerely apologize for that, but we're not going to change it.
<br />
<br />What all this means is that if the first number (major version) changes, you're going to need to update your plugins when you upgrade Pidgin, Finch, and libpurple. If the second (minor version) or third (micro version) numbers change, it means you need to upgrade Pidgin, Finch, and libpurple, but your existing plugins will still work. No matter what the Pidgin, Finch, and libpurple version numbers are, you should always be using the newest version.
<br />
<br /><h2>Structure (“struct”) Hiding</h2>This paragraph is for those who aren't programmers. Feel free to skip it if you don't care about it. Pidgin is written in the C language. C has a type system, which means that if you declare a variable (imagine this as a box somewhere in your computer's memory) you can store only one type of data in it. A structure, or struct in C parlance, is a type made up of other types arranged sequentially. This is pretty easy to picture if you think of Lego blocks--stack a red block, a blue block, a green block, a yellow block, and a white block on top of each other and connect them together and you now have a structure made out of Lego blocks. It's pretty similar in C, except that you're telling the compiler to assemble something out of sequential boxes of memory instead of little plastic blocks.
<br />
<br />Pidgin uses structs everywhere. We use them to represent things like your buddies, conversations, accounts, etc. Currently in Pidgin 2.10.0, most of the structs are in the public API—that is, anyone can directly access the members of the structs and do whatever they like. This is all fine and well, but it means that if our code changes such that a particular struct needs to grow significantly by the addition of new members, we can't always do that without breaking backward compatibility. (Yes, we included padding in a number of our structs, but we've burned through the padding in several of them, and although there are ways to work around it, I and a few other developers don't like them.) It also means that if we discover, for example, that switching the order of members in a struct allows the compiler to improve its optimizations or if we think a different order makes more logical sense for those of us reading and maintaining the code, we absolutely can't do this without breaking compatibility. We also can't rename members of structs for the same reason—it breaks compatibility with existing plugins, UI's, etc.
<br />
<br />Because having these structs in the public API limits us so much, we're striving to hide as many of them as possible. By hiding, we mean that we're removing the struct definitions from the header files and moving them to the .c files, thus making them private. Plugin and UI authors will still be able to reference the “objects” with pointers, passing them to functions and operating on them with the appropriate sections of our public API, but no longer will the members of the structs be directly accessible outside of the .c files that define the functions that interact with them. For example, we have a PurpleRoomlist struct in libpurple/roomlist.c and libpurple/roomlist.h. For 3.0.0, the struct definition is in roomlist.c; thus the individual members are not directly accessible outside roomlist.c, even in other parts of libpurple. This “hiding” of the strcuts allows us significant internal flexibility in each file to modify the struct as we see fit.
<br />
<br /><h2>Clean-Slate API Documentation</h2>Because we generally change so much each time we increase our major version number, the API documentation can get a bit confusing if we keep doing <code>@since</code> tags and whatnot in our doxygen documentation. Our general overall feeling is that we prefer just starting with a clean slate at each new major version. This means that each time we do a new major version, all existing <code>@since</code> tags will disappear, any functions marked as <code>@deprecated</code> will be removed, renamed, or replaced as described in the <code>@deprecated</code> statement, and so on. We realize this decision may make some things more difficult for some plugin and UI authors, and we apologize for that, but our aim is to have overall cleaner documentation for everyone.
<br />
<br /><h2>Merging of Old Projects</h2>Over the years that we've participated in Google's Summer of Code program, we've accumulated a number of branches that have been sitting for quite some time. Most of these need some form of TLC and integration work. We want to try to incorporate at least some of them into 3.0.0 so we can finally benefit from the fruits of the students' labor. Most notably, we've been talking about merging the webkit integration branch into what will become 3.0.0. Eventually, this would allow the support of Adium's message styles, although it may not happen right away.
<br />
<br />Another project of notable interest is some of the logging changes that went on in a previous Summer of Code project. One of our new Crazy Patch Writers took some of that work and made some progress on it; we don't know if this will make it for 3.0.0 or not yet, but it would be nice to have some of the features, such as non-blocking log writing.
<br />
<br /><h2>Other Changes As Wanted</h2>We may decide to make other changes since a major version change gives us the opportunity to break so much. There have been a number of ideas floated, ranging from supporting that XDG directory spec that I can't stand to doing away with the xml files in .purple and replacing them with something else (with what, in particular, has not seriously been discussed). There is a whole range of possibilities of things we could do for 3.0.0; it's just a matter of one of us wanting it and sitting down to write it.
<br />
<br />So everyone should stay tuned, as we'll be making more and more changes over the course of the 3.0.0 development cycle. We don't yet know when we'll be releasing 3.0.0—this is another one of our famous “when it's ready, and not a minute before” time frames. We do know, however, that it will change a lot!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-81131249212330159522011-02-23T20:42:00.002-05:002011-02-23T20:50:00.060-05:00Current AIM IssuesOver the last couple hours, we've had nearly everyone and his/her brother in #pidgin asking about connections to AIM causing a certificate prompt. The specific prompt is for bos.oscar.aol.com. The issue here appears to be that AOL has let the certificate expire. Because our certificate validation is more strict than some other applications, Pidgin users will get this prompt at every connection until AOL installs an updated certificate.<br /><br /><div>To resolve the prompt, you can make one of a couple choices. You can choose to trust that the connection is fine even though the certificate is expired and click Accept, or you can take the safe route and click Reject until AOL replaces the certificate.</div><div><br /></div><div>To reiterate, this is not a Pidgin problem, but an AIM server problem.</div>John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-79811505621476891452011-02-04T22:36:00.000-05:002011-02-04T22:36:13.259-05:00Complex Transient Statuses for Quick Effect<div><br />In an <a href="http://theflamingbanker.blogspot.com/2009/02/saved-statuses-for-fun-and-profit.html">earlier post</a>, I discussed how to take advantage of Pidgin's "saved status" feature. After seeing some recent confusion in #pidgin about our status features, I decided it would be a good idea to give a quick overview on how to take advantage of a feature I never use--creating statuses (including complex statuses) from the status selector on the buddy list window.<br /><br />The status selector feels like it's been around forever. Prior to this, we had a rather horrible interface to "status" whereby you could either globally set all accounts to "away" or go to each individual account and configure a given status (away, do not disturb, vacation, etc.). All this was done via a single menu. For those of you who don't remember it, let me just say that it <span style="font-weight: bold; "><span style="font-style: italic; ">sucked</span></span>. Someone (I think it was Sean Egan) threw that whole UI out the window and came up with the current status selector that reminds me a lot of the old Windows ICQ 99 client that had a pretty similar status selector. Ours is a bit more sophisticated, though.<br /><br />The simple use of the status selector is fairly obvious--pick a status and type a message. In fact, this is what the majority of our users do when they change statuses. This is what is called a transient status. What most people don't know, however, is that you can create complex statuses, such as having your MSN account set to "Busy" while your AIM account is set to "Invisible." Let's give a quick example.<br /><div><br /></div><div>I have a number of accounts in Pidgin. Let's say I want to have my pidgin.im XMPP account set to "Available" but the rest of my accounts set to "Away" to create a simplistic scenario that's really easy for me to snag a screenshot of. To do this, I'll go to the status selector and select "New status..." like in this picture:</div></div><div><br /></div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG7lx8AUH74Y0Uvyk1QiIlwg2i1nyELz4mx1J2xeM_9T3VnaJszpJ1NopSCp7cvKhBWY_WtJ9l7xZQ6ZRGPVJCrAZEb9SDC0PqFe5hg_IAtm2vzFJYb2fb7HkXO45lIlnPw-w023dCeik/s1600/pidgin-status-selector.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 316px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG7lx8AUH74Y0Uvyk1QiIlwg2i1nyELz4mx1J2xeM_9T3VnaJszpJ1NopSCp7cvKhBWY_WtJ9l7xZQ6ZRGPVJCrAZEb9SDC0PqFe5hg_IAtm2vzFJYb2fb7HkXO45lIlnPw-w023dCeik/s320/pidgin-status-selector.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5570038826206974226" /></a><div><br /></div><div>Then I'll see this window, where I've already gone and entered a title for the status. This is the name you'll see in the status selector and in the middle section of the status selector's menu. If I wanted a message to go with the away status, I'd enter it here now, as well.</div><div><br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNbpCqzDPEd5QcoOvjMvaXU2Rzu7Z1OOyudW7lD3WFvZNabEdZ3wRDZTYU6-8SgjEx1QHQduu7jTnATiXrsxjmYd8PidbGqJ6Tc4hJGKcpktsw71emTeYNKNjYAxtyEgT1ygwustqOlko/s1600/pidgin-simple-status-dialog.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNbpCqzDPEd5QcoOvjMvaXU2Rzu7Z1OOyudW7lD3WFvZNabEdZ3wRDZTYU6-8SgjEx1QHQduu7jTnATiXrsxjmYd8PidbGqJ6Tc4hJGKcpktsw71emTeYNKNjYAxtyEgT1ygwustqOlko/s320/pidgin-simple-status-dialog.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5570040372845334034" /></a><div><br /></div><div>Since I want most of my accounts to be away, I'll leave the "Status" selection as "Away." As you can see, I have my mouse pointer over "Use a different status for some accounts," which when expanded will allow me to set statuses for individual accounts, like so:</div><div><br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3ZwlguRKnnDP9B5Hc5Kpxc0GmFdjJnCZhs5nZ8pl0tynpgmoSRe5dcO-uZ4dq2P-1iV0A1BMUZHCTcr-MqJ_zibwlh5tk5ZgcQbzzo8VT7Ib9MSj9pDcmLYDmFlnduie4O1mXDIUj1s/s1600/pidgin-complex-status-dialog.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 265px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb3ZwlguRKnnDP9B5Hc5Kpxc0GmFdjJnCZhs5nZ8pl0tynpgmoSRe5dcO-uZ4dq2P-1iV0A1BMUZHCTcr-MqJ_zibwlh5tk5ZgcQbzzo8VT7Ib9MSj9pDcmLYDmFlnduie4O1mXDIUj1s/s320/pidgin-complex-status-dialog.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5570041075259016098" /></a><br /><div>I found my pidgin.im account in the list already, so I'll check the box in the "Different" collumn. That brings me to a new window:</div><div><br /></div><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOIzMX_TkZHpxA-9uA71PmLXlc7HanCG2FukLmuLIyPrs0SnP98ye3Hwx6nbYmwfKvERII1vhr0hyphenhyphenUXRs8Qpg52iiPH5189Icqr3Njez9P4Omxzkv6arBrZF9sD5S-P-UMP1QwfH8jvL0/s1600/pidgin-account-status.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 99px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOIzMX_TkZHpxA-9uA71PmLXlc7HanCG2FukLmuLIyPrs0SnP98ye3Hwx6nbYmwfKvERII1vhr0hyphenhyphenUXRs8Qpg52iiPH5189Icqr3Njez9P4Omxzkv6arBrZF9sD5S-P-UMP1QwfH8jvL0/s320/pidgin-account-status.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5570042186342442914" /></a><div><br /></div><div>Now I want my pidgin.im account to be available, so I'll accept what I see. If I wanted a message here, I'd type it in the "Message:" box. When I'm happy with what I have, I'll click OK. Notice that the "Status" column in the previous window changes to reflect what you selected for the individual account.</div><div><br /></div><div>Since I'm happy with what I have, I'll now click "Use", which applies the status. If I wanted to make this a saved status that is saved permanently, I could click the "Save" button or the "Save & Use" button if I wanted to also immediately apply it when saving.</div><div><br /></div><div>That's all there is to it!</div>John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-45810509712179490742010-10-26T00:36:00.004-04:002010-10-26T01:06:32.636-04:00Death of a thousand ticketsWell, by now it's obvious to the world that I kicked Pidgin 2.7.4 out of the nest last week. Although that release included some nice new features for ICQ users, lots of bug fixes, and some remote crash fixes, it's not without its share of problems. Those problems are producing a bunch of duplicate tickets for us to deal with, so I thought it might be a good idea to post about them here just in case anyone bothers to read my rambling.<br /><br />The first problem is the AIM/ICQ chat bug. When using a multi-user chat on AIM or ICQ, no messages can be sent. You'll get an error stating your message was too long. This was an unintended side effect of merging the work of one of our Summer of Code students. Ivan accidentally removed a line of code that he shouldn't have. Yes, you read that right--a single line of code. Apparently it was pretty important! Ivan restored that line and things will be working as they should in 2.7.5 when we release it.<div><br /></div><div>The second problem is an old one that's come back with a vengeance. This one is an ICQ issue where messages that contain <> disappear because they're treated as HTML tags. This seems to be specific to combinations of Pidgin and other non-official clients. Pidgin recently gained some new ICQ protocol-level features related to formatted messages; some non-official clients, including older versions of Pidgin, don't handle it gracefully. At this point, we've done all we can do about it; the other clients will have to step up and make fixes to handle the messages correctly now.<br /><div><br /></div><div>The next problem is another wonderful ICQ encoding bug. I'm not sure if this one is a side effect of Ivan's work or not, but Ivan did do a lot of work on encoding problems on ICQ. We all thought things were improving, but apparently there are still a few odd cases (and a crapton of stupid ICQ clients that should be purged from existence) in which our handling of encodings just isn't quite right. We're aiming to have this fixed for 2.7.5, but it's not quite done yet.</div></div><div><br /></div><div>Is it obvious I wish ICQ would just disappear immediately and permanently?</div><div><br /></div><div>The last "big" problem that seems to be cropping up is a crash related to MSN file transfers. When using direct-connect file transfers, somewhere along the line we do something stupid internally that causes a crash. We thought we had it fixed for 2.7.4, but alas it still exists. We're looking into it and hope to get it fixed soon. In the meantime, it's pretty easy to prevent the crash--edit your MSN account and turn off the direct-connect file transfers. It's an option on the advanced tab of the account editor.</div><div><br /></div><div>At any rate, since we know about these bugs already, please, <i>please</i>, <i><b>please</b></i><b><i> DON'T</i></b> open new tickets about them!</div>John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-85705480096586687132010-06-25T22:36:00.003-04:002010-06-25T23:37:06.548-04:00The Proxy ConundrumAs many of you Yahoo users out there know, Pidgin 2.7.0 and 2.7.1 introduced a challenge for you. In certain proxied environments, many of you can't connect. Quite frankly, (mostly) it's my fault. Let's start by explaining what I've done.<div><br /></div><div>In Pidgin 2.7.0 I made some seemingly innocent changes to the Yahoo protocol plugin that I thought would magically make some problems go away. These changes make us mimic the official Yahoo client better. Very early in the connection process (in fact, it's the first step), the official clients request a specific URL from a Yahoo web server. The server's response tells the client what messaging server to connect to. The client reads that address and connects to it, then goes along its merry way. So I made our Yahoo plugins do this, once I determined the correct URL's for both Yahoo and Yahoo Japan. Everything was great when I tested.</div><div><br /></div><div>But there's my mistake--<i>I</i> tested it. I don't run a proxy server--I'm an IT nerd, but I'm not <i>that much</i> of an IT nerd. So, I allowed this to be released, not knowing there were problems in environments with restrictive proxies. It came back to bite me hard, as I backported this stuff to Adium's build of libpurple 2.6.something for one of their beta releases and several users started complaining about being unable to connect. Then we got a couple tickets of our own. At first, I was stumped, until a user who was willing to almost bend over backwards to assist us came along.</div><div><br /></div><div>This user worked in an environment where two separate proxy servers were in use. One handled HTTP and HTTPS traffic and the other handled IM protocols. It took me quite a while to finally wrap my head around his problem, but once I did (with the help of my fellow developer Etan Reisner), I was able to start solving the problem. It turns out I actually had two problems on my hands, but at first it seemed like none of it was the fault of our code.</div><div><br /></div><div>The first problem is that Pidgin allows configuring proxies in two places--the "Proxy" tab shown when editing an account and the "Proxy" tab in Preferences--but does not allow specifying what ports or services are handled by each proxy. This ordinarily isn't such a big issue, except that I went to the extreme of creating an option for Yahoo accounts to help some users with weird proxies that don't handle SSL at all. This option is used to determine whether to send an HTTPS request (like Yahoo uses for login) to the account's configured proxy or to the global proxy configured in Preferences. When I did this for 2.6.0, I created a new utility function for URL requests that allowed specifying the account the request was for. If the magic value NULL is passed to this function, the request will use the global proxy instead of the account proxy. This allows our proxy code to route the request to the appropriate proxy. Being the idiot I can be on occasion, I set <i>all</i> URL requests in the Yahoo plugins to use the account proxy server no matter what. This is where the user's problem came in--his IM proxy doesn't do HTTP at all. Once Etan and I agreed on how to fix it, I changed the SSL option I mentioned earlier to act on <i>both</i> HTTP and HTTPS requests. I supplied our user the test build. It still didn't work, but the debug log showed some interesting new info.</div><div><br /></div><div>Again, it took some head-bashing to understand what was going on, and I still wasn't the one who figured it out. In the meantime, I decided to implement a quick hack to make users at least be able to connect temporarily while we figured out what was really broken in our proxy code. The quick hack was to implement a worst-case, last-resort connection to a previously known messaging server. Unfortunately, I could implement this only for Yahoo, not for Yahoo Japan, as the Japan network appears to no longer has a single canonical hostname by which to refer to the messaging servers. I am, however, positive that even on the regular Yahoo network, this hack will eventually break, which is why I resisted it in the first place. After a couple quick bugfixes brought to light by the user's further testing, we had a working fallback mechanism.</div><div><br /></div><div>Once this was done, Daniel Atallah, one of our co-lead developers, realized that the second problem our helpful user had was our own proxy code's fault--for some stupid reason, we would never authenticate to an HTTP proxy if we were making an HTTP request on the standard HTTP port (80). Daniel implemented some quick fixes to make our URL requesting code behave better in these proxy situations, thus (we hope) finally solving this problem completely.</div><div><br /></div><div>All these fixes will end up in Pidgin 2.7.2. We're not sure yet when we're going to release that, but we're hoping it's soon, as we have some fixes for other annoying bugs, such as the famous MSN direct connection crash.</div><div><br /></div><div>Now, after reading all this, some of you might think, "Why don't they just use libproxy?" Truthfully, that's probably a good idea. There are two reasons we haven't done this yet. First, we looked at this over two years ago. <i>At that time</i>, we were led to believe libproxy didn't handle all the proxy types we did. We were corrected on that, but I, at least, missed that correction being posted. (Sorry, sometimes I'm blind, especially if something like that is buried in a flood of other ticket mails.) I suspect I'm not the only developer who did. Secondly, we're all creatures of habit. As the old saying goes, "if it ain't broke, don't fix it." Well, quite honestly, it's not broken for us as developers! Mainly that's because either we don't use proxies or any proxies in our way don't do any of the crazy stuff we ran into in this case. If it's not broken for us, we don't have much incentive to go hacking stuff up to support new libraries that solve problems we don't experience. I know that sounds like a lame excuse to a lot of you, and I can understand how it seems that way. But if we don't experience the problem, it's hard to test that we've fixed it, and we could in fact be making matters far <i>worse</i> for everyone else.</div><div><br /></div><div>All this said, we probably should support libproxy. I've been thinking about how we could do this in a quick and effective manner, and so far I've come up with a few ideas that don't feel like they work very well. I think this is a perfect case where code should talk, or at least provide an example. So, I invite people who would like to see us support libproxy to write patches. Actively engage us on our development mailing list (<a href="mailto:devel@pidgin.im">devel@pidgin.im</a>), talk with us in <a href="irc://irc.freenode.net/pidgin">#pidgin on irc.freenode.net</a>, or drop by our XMPP MUC (<a href="xmpp:devel@conference.pidgin.im?join">devel@conference.pidgin.im</a>). Or, do some combination of the three. I can't promise we'll be the most valuable resources during the process, but we do at least try.</div><div><br /></div><div>Now supporting libproxy is one thing. Actually being able to do useful stuff with the information libproxy gives us is another thing entirely. Our actual proxy connection code is, shall we say, a bit sub-par. Quite frankly, it sucks, even ignoring the crappy configuration portions. While supporting libproxy is nice and may solve a lot of our proxy problems, I guarantee it won't solve them all. Ideas and patches to fix this are greatly appreciated too.</div><div><br /></div><div>I look forward to hearing from those of you inclined to help!</div>John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-50988256016537552062010-05-13T22:13:00.002-04:002010-05-13T22:40:20.826-04:00Pidgin 2.7.0: Movin' on UpWell, I finally managed to kick Pidgin 2.7.0 out the door, as most of you are surely aware of by now. There are several important things to note about this release:<br /><ul><li>AIM and ICQ clientLogin issues have been resolved. You <span style="font-style: italic;">should</span> be able to now use both clientLogin and SSL together.</li><li>Our internal libgadu has been upgraded from something from the stone age to something much, much more current. This solves the issues that (primarily) Windows users had with not being able to communicate with new (> 17,000,000) Gadu-Gadu numbers.</li><li>Our Yahoo and Yahoo Japan plugins now retrieve connect server information directly from Yahoo, just like the official clients do. This took me way too much time to implement, but I believe I've implemented a fairly stable and maintainable method to retrieve this information. During this process, I learned a lot about how Yahoo's authentication works and made some improvements there too that will make us look much more like the official client on the wire during authentication.</li><li>ICQ now has X-Status support! It took far longer than it should have--I originally wanted this in for 2.6.0 but it was nowhere near ready.</li><li>Minimum GTK+ and GLib requirements are now 2.10.0 and 2.12.0, respectively. This allowed us to drop some 3800 lines of code, much of which was the result of needing to bundle certain GTK+ widgets so Pidgin could function on platforms with ancient GTK+. This also makes use of many of glib's convenience functions much more convenient.</li><li>The Windows installers have changed to be less obnoxious with respect to GTK+. We no longer install a system-wide copy of GTK+ and instead install GTK+ locally to the Pidgin installation. This may disrupt some GTK+ theming. The other big thing is that now, the default installer will download GTK+ and optionally the debug symbols (so there's no longer a special debug installer needed for crash reports!). There's also an offline installer that, while almost double the size of the default installer, I prefer to use. This offline installer includes GTK+ and the debug symbols. I prefer to call it the everything-but-the-kitchen-sink package (the kitchen sink in this case being spell checking support, which still must be downloaded).<br /></li></ul>Of course, any release I had a major role in is bound to have problems. I built the Windows installers this time around, and did not know that I needed to do extra work to make the online installer function. Thus, many of you complained (and complained, and complained some more!) that the installer didn't work. Even after Daniel fixed this for me, we still saw complaints. If the online installer does not work for you, try the offline installer. I tested the offline installer and it worked for me. I forgot, however, to test the online installer. I was more interested in getting the release out in order to (I thought) minimize complaints.<br /><br />Additionally, after I cut the tarballs for 2.7.0, several bug fixes rolled in that will be delayed until 2.7.1. Among these are a couple minor annoyance fixes for MSN and XMPP. And today fixes for more bugs rolled in, including two for Bonjour and a fix for the taskbar entry (window) flashing on Windows. I plan to push out Pidgin 2.7.1 in a couple weeks to resolve these, and hopefully more, problems.<br /><br />In the mean time, enjoy!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-3862121708494920502010-04-30T01:12:00.004-04:002010-04-30T01:46:03.558-04:00Plugin Authors: Save Your Users' Sanity!OK, maybe I'm being a bit sensationalist there, but it's my blog, so I'm allowed! Anyway, on to the subject matter.<br /><br />Recently we've seen a few users in #pidgin (and I've received some emails too) with some strange issues that result from plugins doing things they really <span style="font-style: italic;">shouldn't</span> but can anyway. I'm going to run down a small punch list of items for you, as plugin authors, to do to prevent your users having hard-to-diagnose issues.<br /><ul><li>Never use printf() in a plugin. This causes terminal disruption for Finch users and is a bad idea in general. It will probably behave unpredictably on Windows and/or in other UI's too. We provide a debugging API to avoid this kind of stuff. Instead of printf(), use purple_debug_info() or purple_debug_misc(). You can see the debug output (even during initial startup) if you run 'pidgin -d', even on Windows and even if your Pidgin is built without '--enable-debug'. For Finch, you can do 'finch -d 2> finch_debug.txt' to get your debug info.</li><li>Don't lie about UI requirements. If you use GTK+, you're a Pidgin plugin, not a "core" (or libpurple) plugin. If you use GNT (or if you're really brave and use ncurses directly), you're a Finch plugin. There are plenty of examples in the Pidgin and Purple Plugin Pack source trees that show you how to properly declare your UI dependency. The UI requirement is designed specifically so that plugins requiring a specific UI can't be loaded by, and thus cause problems for, other UI's. Sure, it's possible to make a UI-agnostic plugin that requires GTK+, but I guarantee it will cause at least one or two Finch users unnecessary problems.<br /></li><li>Install your binaries to the correct place. If you're installing a Pidgin plugin, install to $prefix/lib/pidgin, not $prefix/lib/purple-2. If you're installing a Finch plugin, install to $prefix/lib/finch. This will prevent other UI's from needlessly trying to probe your plugin and is just general courtesy. (Note that this particular item doesn't apply to plugins for Pidgin on Windows at the moment, but may be important later.)</li><li>If your plugin is a protocol plugin, you absolutely are not allowed to touch UI-specific code at all. That means no GTK+, no GNT, no XUL, etc. If you need UI elements, use the request API libpurple provides. If the request API doesn't cut it, there are other approaches you can take, such as having two plugins, one of which does the actual protocol work and the other providing the UI. A better approach, though, is helping us identify where the request API is lacking so we can improve it. We know our API's aren't perfect, so when someone can show us a concrete reason why we're deficient, we will <span style="font-style: italic;">try</span> to fix that deficiency.</li></ul>Please check your plugins for these problems and help your users have a more pleasant experience with your plugins!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-77865718981023163282010-04-27T19:03:00.003-04:002010-04-27T19:27:54.614-04:00Time flies...It feels like it's been forever since I stepped up on the soapbox to say something. This time it's just a relatively short update.<br /><br />As is very commonly known, Pidgin was accepted as a mentoring organization for the Google Summer of Code again this year. This year, Google has given us the privilege of mentoring four students. While less than we hoped for (we'd wanted five), we certainly can't complain about the projects we were able to accept.<br /><br />First up is an MSN project manned by Jorge Villasenor Salinas, who some may recognize as having helped implement custom emoticon support for Pidgin 2.5.0. His project is to rewrite the SLP layer of the MSN plugin, simplify the other parts of the plugin, and overall make the plugin much easier to maintain and extend. I'm sure he'll be trying to squeeze some new features into his project if time allows.<br /><br />Next up is one of my personal favorite projects for this year. Gilles Bedel will be working on detachable sessions. This is something a number of us have wanted for a long time, but just haven't quite gotten around to making it happen. The idea here is that we can have a daemon (service for the Windows-inclined among us) running in the background and connect to it with Pidgin or Finch at will. I feel that this is perhaps the most ambitious project this year, but the benefits it could reap are worth it.<br /><br />Adam Fowler is going to rewrite the log viewer in Pidgin. This particular project will likely be the only project that visibly changes Pidgin this year. We've received a lot of complaints and suggestions over the years focusing on our log viewer. We know it's deficient in a lot of ways, and that's what Adam's project aims to resolve. I'm confident we'll get a lot of positive feedback about this project once it's complete.<br /><br />And last, but not least, is Ivan Komarov's ICQ project. Ivan's aim is to beat our ICQ implementation into shape. As most of our non-US ICQ users can confirm, our interaction with the service could use some improvements. While Ivan has proposed a nice wide range of things to fix, even just a few of them being completed would make a huge difference for our international users.<br /><br />So, from all of us developers, and we hope from our users too, good luck to our students!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-42742250917035992182010-01-31T23:14:00.003-05:002010-01-31T23:29:43.296-05:00On The Subject of Bugs, or Help Wanted and Needed!As bug master for Pidgin, I bear a lot of the responsibility for triaging bugs--getting them assigned to the appropriate developers, weeding out the invalid bugs, etc. I admit that lately I’ve not been doing such a good job at this. I’ve been ignoring Pidgin so I could relax and unplug somewhat after the stress of work. Thankfully, in my increased absence, my fellow developers, particularly Paul, Daniel, and Elliott, have been picking up the slack. All the while, however, not much has changed as far as actual ticket resolution goes.<br /><br />As much as I hate quoting numbers, let’s take a look at some (as of 2010-01-31, 0500 UTC) to get an idea of scope:<br /><ul><li>Historical ticket count: 11270</li><li>Currently open tickets: 1818</li><li>Open bugs: 958</li><li>Open bugs awaiting response from reporter: 11</li><li>Bugs that can’t be fixed until we’re ready for 3.0.0: 19</li></ul>Obviously, 958 open bugs is unacceptable. But to put those bugs in perspective, let’s look at how they break down:<br /><ul><li>AIM: 64</li><li>artwork: 9</li><li>Bonjour: 4</li><li>custom emoticons: 2</li><li>finch: 7</li><li>Gadu-Gadu: 19</li><li>Google Talk: 3</li><li>Groupwise: 7</li><li>ICQ: 47</li><li>IRC: 26</li><li>libpurple: 68</li><li>MSN: 70</li><li>MySpace: 17</li><li>pidgin: 198</li><li>plugins: 28</li><li>QQ: 23</li><li>Sametime: 13</li><li>SILC: 6</li><li>SIMPLE: 3</li><li>trac: 4</li><li>unclassified: 160</li><li>Voice and Video: 11</li><li>webpage: 3</li><li>winpidgin: 81</li><li>XMPP: 47</li><li>Yahoo!: 35</li><li>Zephyr: 3</li></ul>Now, yes, on an IM service level, MSN has more open tickets than any other listed service. However, looking at the underlying protocol for these services, AIM and ICQ combined give the OSCAR protocol a 41-ticket lead. Google Talk is an XMPP service, but even combining Google Talk and XMPP numbers, we come up with 50 tickets, trailing MSN by 20. None of our other listed IM services share an underlying protocol with another. In fairness, the unclassified bugs really should be sorted into proper components, which would change these numbers, but at this time I don’t know by how much.<br /><br />Now, looking at the IM services we support, many of them don’t have a current “maintainer” who is ultimately responsible for the plugin. Currently, Zephyr, Yahoo, SIMPLE, SILC, Sametime, MySpace, Groupwise, Bonjour, and QQ either have no “official” maintainer, have no one at all working on them, or haven’t had meaningful development activity in at least three months. Obviously, protocols without an active maintainer are not going to see much in the way of quick bug resolution.<br /><br />We‘re often asked, “Why don’t protocols have maintainers?” or “Why don’t you spend time working on bugs?" or a hundred other questions about the lack of time spent working on Pidgin. The reasons for this are many:<br /><ul><li>We’re all volunteers. Not a single one of us gets paid to put any time or effort into Pidgin.</li><li>Not all of us use all the services we support. I’ll use myself as an example here. I use AIM, ICQ, Yahoo!, and XMPP regularly. I also have an MSN account that I couldn’t possibly care less about and a couple IRC accounts for the rare instance that I need to test something with the Purple Plugin Pack. I don’t use, nor do I have interest in using, any of the other services.</li><li>We all have families that we’d like to spend time with. Many of us have spouses/significant others, and a few of us also have children. Family is a demand on our time that should never be ignored.</li><li>All (or almost all) of us have jobs. Since, as I already mentioned, we’re volunteers, the jobs with which we earn our paychecks have to take priority.</li><li>We’re human too--we get burned out, experience stress, need to unwind after work, etc.</li><li>Not all of us know anything about a given protocol, nor can we be reasonably expected to. For example, I don’t know how the MSN protocol works, and I have no desire to learn about it. We don’t have to be experts in a given protocol if we don’t want to be. Also, the fact that MSN is allegedly the most-used protocol in the world is not a valid reason for anyone to expect us all to be experts on (or even to care about) the protocol.</li><li>Pidgin largely <span style="font-style: italic;">just works</span> for us. If we don’t see a bug, we’re not going to be irritated by it and sit down to try to fix it.</li></ul>So yes, we have been “neglecting” Pidgin to a certain extent. Our time is a precious resource, and in many cases we simply have better things to do or simply don’t have the time to sit down and attack bugs to get them closed. That’s not to say that our development process is coming to an end or that we’re abandoning Pidgin, though. We do, however, readily admit that we need fresh blood.<br /><br />In that vein, I’m calling for you, the Pidgin community, to help us. Take a look at the open bugs and feature requests and submit patches to resolve them. Pidgin is a fairly complex beast, and there’s a lot of code to maintain, but it is manageable if people work on small changes at a time (instead of completely rearranging things unnecessarily). Additionally, Pidgin uses a distributed version control system, monotone. Contributors who want to seriously work on Pidgin can use this to their advantage by creating their own branches in monotone. When contributions are ready, those contributors can submit the changes from their branches either by attaching patches to tickets on trac or by asking a Pidgin developer to pull and review the changes. At that point a developer can commit or merge the changes and push them on to the central repo at mtn.pidgin.im.<br /><br />The only problem with the model of a developer pulling changes from a contributor is that in order for someone to pull revisions, the contributor must be able to run mtn in server mode, which isn’t always possible or feasible. I’m trying to come up with some custom lua code to help in this regard, to do something similar to what git and hg can do with emailing patches, but that’s going to take some time, as I need to learn some more of the internals of monotone first. But none of this should stop anyone from trying to contribute! We will still accept single one-off patches or sets of patches and series of patches from longer-term contributors, and using monotone to develop against is going to produce patches that are the easiest for all of us to work with.<br /><br />So, yes, in short, Help Wanted and Needed!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-88032673357244080242009-12-17T21:44:00.008-05:002009-12-25T13:09:49.675-05:00The Quest Never EndsIn my last blog post, I alluded to our quest to make Pidgin perfect (in our own eyes, at least). This is a quest that by its very definition can never end, because as we near "perfection," there will always be something else that crops up to demonstrate we haven't reached perfection quite yet. This "quest" can have elements of many different forms. A few months ago, one of those forms was discussed on our development mailing list.<br /><br />As a good many people are aware, Pidgin has long supported GTK+ and GLib 2.0.0. Several years ago when GTK+ 2.0.0 first came out, we underwent a nine-month rewrite of our user interface (UI) to move from the older GTK+ 1.2.10 (or newer) to the new GTK+ 2.0.0. Since that time, until 2.6.0, we've always maintained compatibility with GTK+ 2.0.0 through the use of conditional code that disabled certain features or UI elements that required newer versions of GTK+ or GLib than what was available at compile time. In some cases, we had conditional use of code to work around the lack of certain convenience functions present in newer versions of GTK+ or GLib. In still other cases, we actually carried (that is, distributed in our source tarballs and compiled where necessary) the source of several GTK+ widgets in order to make our UI work for users with older versions of GTK+. Over the years, this has become more cumbersome, to the point that for 2.6.x, it became impractical to maintain compatibility with GTK+ 2.0.0--when we realized this, we changed our requirements to GTK+ and GLib 2.4.0, which contained the features we needed.<br /><br />The increased difficulty of supporting older libraries prompted me to bring a discussion up on our development list prior to the release of 2.6.0 asking for a vote, discussion, etc. on raising minimum GLib and GTK+ version requirements for Pidgin 2.7.0. This discussion has come up before and been shot down. This time, I put it to a vote and gave quite a while for votes to be cast. There were no "No" votes cast. The versions we voted on were GLib 2.12.0 and GTK+ 2.10.0. These versions allow us to support reasonably recent Linux and UNIX systems, as those GTK+ and GLib versions were 3 years old at the time of the vote, while also making our lives significantly easier since we no longer have to care about really old versions of GTK+ or GLib. Ideally, I would have liked to have GLib 2.14.0 and GTK+ 2.12.0 as the minimums, but I was trying to reach a middle ground that would avoid angering too many people.<br /><br />This change in the minimum required GTK+ and GLib versions has a few consequences. Obviously, Linux and UNIX distributions that don't ship GTK+ 2.10.0 or newer won't be able to support Pidgin 2.7.0 when we release it. On these systems, users can, however, compile GTK+, GLib, and friends, then compile Pidgin. This is really a lot of work, but some users may be willing to go through it.<br /><br />For our Windows users, there will be some major changes. When building and linking our releases, we'll be stepping up to GLib 2.18.0 and GTK+ 2.14.0. We already ship this version or newer in our installers, but now we'll actually be linking against these versions. The consequences of this are that Windows NT 4.0, Windows 98, and Windows ME will no longer be supported. These newer versions of GTK+ and GLib require features that just aren't present in those old operating systems. None of these operating systems have been commercially supported (by this I mean modern games, word processors, spreadsheets, etc.) for years, and even projects like Firefox have stopped supporting them.<br /><br />Additionally, our Windows expert, Daniel, has made some changes to the Pidgin installer and to our crash report generation for 2.7.0:<br /><ul><li>Instead of installing GTK+ in a system-wide configuration, we will be changing to installing GTK+ local to Pidgin. This means that it should be harder for us to conflict with other GTK+ applications on Windows. This has long been requested, but we just finally got around to doing it.</li><li>Debug symbols can now be read from parallel copies of files. Normal installations of Pidgin ship "stripped" binaries--that is, there is no information useful for generating crash reports. Now, instead of replacing all the existing files, the installer will offer the option to install debug symbols. Selecting this option will install parallel, unstripped copies of every file with the extension ".dbgsym" to a special location.</li><li>The installer will allow choosing which Pidgin translations to install.</li><li>The installer will have "online" and "offline" variants. The "online" variant will include only Pidgin. GTK+ and debug symbols will be downloaded as needed. The "offline" variant will include both GTK+ and the debug symbols.</li></ul>Also among the changes coming up for Pidgin 2.7.0 is the switch from the eggtrayicon widget we have carried in our source tarball for years to the GtkStatusIcon implementation that was added in GTK+ 2.10.0. There are still a few bugs to work out with this change, but I believe once we have those ironed out, our notification area icon will behave better for a number of users who have been experiencing difficulties.<br /><br />Of course, these changes aren't the only ones that will make it into 2.7.0. I have my own plans for a few additions, plus I won't allow 2.7.0 to be released without a few other features being merged in. But so far, it looks like Pidgin 2.7.0 will make some long-awaited forward strides. Hopefully everyone enjoys it!<br /><br />Also, to those who celebrate the holiday, Merry Christmas!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-24943352744042774772009-11-13T02:41:00.010-05:002009-11-17T11:37:58.894-05:00The Quest for PerfectionRecently I've been frustrated by the fact that we have a number of tickets open on Pidgin's Trac that deal with inadequacies in the preferences window. The biggest complaint is that in a number of configurations, the preferences window is too tall to fit on a screen. This has only recently become a problem with the advent of the so-called "netbook" with their nearly microscopic screens (seriously, how do people use those things when they have such tiny screens? It drives me absolutely nuts when I try to use one).<br /><br />Prior to the netbook craze, we've always aimed for all our windows, dialogs, etc. to fit on an 800x600 screen. With the shorter and wider screens found on netbooks, 800x600 isn't realistic anymore. In that vein, I've started working on paring down Pidgin's preferences window to fit better on a netbook screen. Let's take a look at what I've done so far.<br /><br />The first, and most obvious, change I've made is to move the tabs that were previously at the top of the preferences window to the side. I did this for two reasons--in my environment, I have a Browser tab because I don't use Windows or GNOME. This meant the tabs artificially forced my window to be wider than it strictly needed to be (our preference window "notebook," as it's called in GTK+ parlance, doesn't scroll or stack the tab row). Second, moving the tabs from the top to the left gains back some valuable pixels that help us fit on those really short screens. In retrospect, I didn't gain much--only about 20 pixels or so in my configuration--with the width of the actual pages of the notebook because of other changes I made to help the height. But every pixel of height counts to make us fit on short screens.<br /><br />After that, I started picking on the Network tab. We have a lot of stuff that's just crammed into the Network tab. FIrst we have a bunch of stuff for automatically detecting your public IP address or optionally manually specifying one. Then we have some stuff for port forwarding. After that comes stuff for TURN relay servers, which is yet another method for traversing NAT "routers." Finally, we have the wonderful proxy server stuff. All this stuff being crammed on a single tab makes the dialog ridiculously tall and makes the Network tab tied with the Conversations tab for biggest overall height.<br /><br />Clearly, a few changes were in order here. I made a minor change here that moved the port range spin buttons to be on the same "line" as the checkbox that enables and disables them. Beyond that, there were still a lot of changes that could be beneficial. For example, now that I've made the notebook tabs go down the left side of the window, that gives us a lot of room to better organize our preferences into tabs that make logical sense. Since I had this extra tab room to work with, it made sense to add a new tab to put the proxy configuration options on. While a proxy server is obviously a network configuration item, it's not always obvious to our users that the Network tab is the correct place to configure the global proxy settings.<br /><br />Now, looking at the Smiley Themes tab, there's a crapton of wasted space there. Seemed to me like a perfect candidate to be the target of some moves. Over on the Interface tab, we have two theme selectors--one for buddy list themes and the other for status icon themes. I decided those were a better fit on a dedicated Themes tab, so I renamed the Smiley Themes tab to Themes and slapped those theme selectors in above the smiley theme selector. I also excised the sound theme selector from the Sounds tab and slapped it into the newly-renamed Themes tab. Elliott, another Pidgin developer, converted the smiley theme selector to be consistent with the other theme selectors. Now the Themes tab doesn't seem under-utilized, but it does still need a little work.<br /><br />I also decided to reorder the tabs. I ordered them alphabetically, but intentionally left the Interface tab as our first tab. It seems to be convention that the "General" tab is the first tab in a notebook for a preferences window. In that vein, our Interface tab is our equivalent to a General tab, so I left it first to fit with convention. The order of the other tabs should be something logical. Sure, I could have grouped Browser, Network, and Proxy together, then grouped Conversations and Logging together, and later figured out where to stuff Sounds and Status/Idle, but an alphabetical arrangement is just as sensible considering that not all our tabs clearly separate into logical groups.<br /><br />The next things to get rid of were the "Sound Method" section on the Sounds tab and the Auto-away section on the Status/Idle tab. Note here that I didn't actually remove any preferences; I simply removed a section and placed the relevant preferences in another section. The existing groupings seemed redundant and excessive. This seems better to me.<br /><br />There, was, however, one thing I needed to give the axe to. Over on the Conversations tab, there was this annoying preference section called "Font" that contained two preferences designed to allow users to override the GTK+ theme settings, but only for the conversation history pane. This preference serves very little purpose anywhere but on Windows, so I removed it. I then made sure the Pidgin GTK+ Theme Control plugin could control the history area font. There were some objections about unconditionally removing this preference, so I compromised and made it available only on Windows, even though I fail to see why the plugin isn't sufficient to control this font.<br /><br />In the end, I believe I accomplished my initial goal of making the preferences window fit on smaller screens, but I also managed to make it so the dialog still fits on an 800x600 screen. The new window measures 698 pixels wide and 492 pixels high in my configuration, which is a bit too big for 640x480, but will fit with plenty of room to spare on 800x600 and should fit pretty well on just about any netbook screen.<br /><br />You can take a look at what the new window will look like with these pictures (sorry, but the order is backwards and I'm too lazy to fix it):<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdpeOiUklrjGgxl1zweHe4p9rxCtj58CblzcPlaPC-7CzpZQQFzNyoGWp5ITZIvKO5_5PL3qpMKeWnn6XZWSgjhGnkK3aYKj-qMu9sTQPJv7xx3OCIAd0IpAlE1e18YFZ0NIPo_zcPcJ8/s1600/prefsredesign-themes.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdpeOiUklrjGgxl1zweHe4p9rxCtj58CblzcPlaPC-7CzpZQQFzNyoGWp5ITZIvKO5_5PL3qpMKeWnn6XZWSgjhGnkK3aYKj-qMu9sTQPJv7xx3OCIAd0IpAlE1e18YFZ0NIPo_zcPcJ8/s320/prefsredesign-themes.png" alt="" id="BLOGGER_PHOTO_ID_5405111504029611842" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyyRM0oBSOd78gGmOoYyvdMq27I1vFV2-QGBRDCaNYPRn7mPQF6CfIdEDtqKCbOE7T6-tdQGv3m7Lhd7A3zn6Myrzrah2uFttGMgYz0V9ANKoa7PxzTsyo0WJrzOE8GS1wztwXXrPSXw/s1600/prefsredesign-status.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyyRM0oBSOd78gGmOoYyvdMq27I1vFV2-QGBRDCaNYPRn7mPQF6CfIdEDtqKCbOE7T6-tdQGv3m7Lhd7A3zn6Myrzrah2uFttGMgYz0V9ANKoa7PxzTsyo0WJrzOE8GS1wztwXXrPSXw/s320/prefsredesign-status.png" alt="" id="BLOGGER_PHOTO_ID_5405111501664237122" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6FpQmoHOZOjdujKSL4WurVdB5zJbz5gmXc1DVdQG3MgJ3yWJkRC2kK4rYB5Uh97kSVRX48t5m5KwuhRA4T3-wpt8-Q-0uSkroIuz8Hs-5T_REcfuuLF-BOAJwY-B1DRlnti0dtoTQHms/s1600/prefsredesign-sounds.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6FpQmoHOZOjdujKSL4WurVdB5zJbz5gmXc1DVdQG3MgJ3yWJkRC2kK4rYB5Uh97kSVRX48t5m5KwuhRA4T3-wpt8-Q-0uSkroIuz8Hs-5T_REcfuuLF-BOAJwY-B1DRlnti0dtoTQHms/s320/prefsredesign-sounds.png" alt="" id="BLOGGER_PHOTO_ID_5405111498485948370" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-pHw1L2qVy2h_R4jLZS6c3z7SmPVyISSCd0xL4_XXMDYcupzk8WTL72JtV5MOx0kMN-ukxtcbMzSQMfOYSuRIBIs4-DoXr-Gd0lCwi6VyLeWSujTg1H0aMg_QtJ9MOlZi7wXAySUW_KM/s1600/prefsredesign-proxy.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-pHw1L2qVy2h_R4jLZS6c3z7SmPVyISSCd0xL4_XXMDYcupzk8WTL72JtV5MOx0kMN-ukxtcbMzSQMfOYSuRIBIs4-DoXr-Gd0lCwi6VyLeWSujTg1H0aMg_QtJ9MOlZi7wXAySUW_KM/s320/prefsredesign-proxy.png" alt="" id="BLOGGER_PHOTO_ID_5405111494027959714" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYd1U-RaYpttHmdr4T4T-b0_lU6MKO69La_W0voC3lbFLlCOVY-SORYkMW7GGORGLMFUYz94VMP90hfnSZG0UI4fIr4zL51KUQALqhQgFmKHlyVMsMnCiatRrieaJfmuw5KSwi247_Kcw/s1600/prefsredesign-network.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYd1U-RaYpttHmdr4T4T-b0_lU6MKO69La_W0voC3lbFLlCOVY-SORYkMW7GGORGLMFUYz94VMP90hfnSZG0UI4fIr4zL51KUQALqhQgFmKHlyVMsMnCiatRrieaJfmuw5KSwi247_Kcw/s320/prefsredesign-network.png" alt="" id="BLOGGER_PHOTO_ID_5405110991704966418" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh50BrppdgjGorUKCQl5ROnn4PZWE0RFFKpJuW7StqLZNJQRsuTR28d9v-2etmX6ktPAgNCfAjQV3_haOpcU1PKBriQes-1c8vntKXjr-8dNGu1wMafvV6qAsA9fZ6fMcppXOmLB0Ua5A/s1600/prefsredesign-logging.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh50BrppdgjGorUKCQl5ROnn4PZWE0RFFKpJuW7StqLZNJQRsuTR28d9v-2etmX6ktPAgNCfAjQV3_haOpcU1PKBriQes-1c8vntKXjr-8dNGu1wMafvV6qAsA9fZ6fMcppXOmLB0Ua5A/s320/prefsredesign-logging.png" alt="" id="BLOGGER_PHOTO_ID_5405110987952289618" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEircVXYkQZ6W60ODj8-IISVU2LqW145gu_T_0liP3aJcwj1uFztgWQlm6mFv7czMm_pQ0pTufLyFAnWIpI1YakWN_fune2Nzn3MzM_OY1fAnbKE3QEf10tXHEILE2UDonZ_vKqcHIJV-Fs/s1600/prefsredesign-conversations.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEircVXYkQZ6W60ODj8-IISVU2LqW145gu_T_0liP3aJcwj1uFztgWQlm6mFv7czMm_pQ0pTufLyFAnWIpI1YakWN_fune2Nzn3MzM_OY1fAnbKE3QEf10tXHEILE2UDonZ_vKqcHIJV-Fs/s320/prefsredesign-conversations.png" alt="" id="BLOGGER_PHOTO_ID_5405110986042302578" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8rIBM9s3lUL0YwUIxBOn33pbQVsBctU0JhS7qGdbti1KFM_hr7VqyMzXFuHxfCbeKJGH66J6kmW7Gcp5ni031H4xc81HtOAK4K4Snj9cL2JEd2MnYKlCBNyKqsW-OyBcwqtyWWvp1vrQ/s1600/prefsredesign-browser.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8rIBM9s3lUL0YwUIxBOn33pbQVsBctU0JhS7qGdbti1KFM_hr7VqyMzXFuHxfCbeKJGH66J6kmW7Gcp5ni031H4xc81HtOAK4K4Snj9cL2JEd2MnYKlCBNyKqsW-OyBcwqtyWWvp1vrQ/s320/prefsredesign-browser.png" alt="" id="BLOGGER_PHOTO_ID_5405110982922181554" border="0" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3WN0p07AEHy79IRRQi9WrBEXKxWsUGYWSljTOjQfg9tirdLkfP_7skgrO5uA9eDhd0rxsSxZUkaA4kpAqIhm6hOiI_0gUnRxLkba73IADjtO9nz8NJBbl7bKtIJ2U7Q2RXtj4rcqbwCk/s1600/prefsredesign-interface.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 236px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3WN0p07AEHy79IRRQi9WrBEXKxWsUGYWSljTOjQfg9tirdLkfP_7skgrO5uA9eDhd0rxsSxZUkaA4kpAqIhm6hOiI_0gUnRxLkba73IADjtO9nz8NJBbl7bKtIJ2U7Q2RXtj4rcqbwCk/s320/prefsredesign-interface.png" alt="" id="BLOGGER_PHOTO_ID_5405110979321861330" border="0" /></a><br />This will be in Pidgin 2.6.4 when we release it. Hopefully everyone enjoys the changes!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-3916439025089138572009-10-03T18:50:00.006-04:002009-10-03T20:02:27.536-04:00Pidgin and the Incredible Shrinking (Finally!)--And Growing‽--About BoxHave you ever taken a look at the text in Pidgin's About box? If not, do so now. Click the Help menu, then click "About." Be prepared to scroll. And scroll. And scroll some more. And again. Until <span style="font-style: italic;">finally</span> you reach the end of the thing and see a crapton of build-related information that probably doesn't make a whole lot of sense. Along the way, you'll scroll through a list of our developers and crazy patch writers, then through a list of retired developers and retired crazy patch writers, then through translators and retired translators. The list of translators, especially, seems to go on forever. The amount of information in that box has grown nearly exponentially in the last couple years.<br /><br />Get tired of scrolling through all that information? Me too. And apparently a bunch of other people--I've seen a number of complaints from people involved with several Linux distributions indicating that our about box has way too much information. Well, this morning, I set out to remedy that.<br /><br />Remember that insanely long list of current and retired translators? Well, when we release Pidgin 2.7.0, it will no longer be in the About box. To excise this information from the About box, I created a new entry on the Help menu called "Translator Information" that pops up a new dialog similar to the About box. This new dialog lists all current and retired translators.<br /><br />Once the translators were gone from the About box, the next largest chunk of text was the "Debugging Information" section all the way at the bottom. Considering how frequently we ask users to look at this information, it is nowhere near visible enough sitting at the bottom of the About box's scrollable area. This, too, became its own window, accessible at "Build Information" on the Help menu. (As an interesting side note, this is insanely long in code, too. In fact, it's more lines of code than the printed list of translators takes up in the new translator info dialog!)<br /><br />Even losing all that text from the dialog wasn't good enough for me. Next I axed the list of developers, crazy patch writers, and retired developers and crazy patch writers. Now these lists are available by clicking "Developer Information" on the Help menu. Since I'd just added three items to the Help menu, it was time to toss a couple menu separators in there so that things look more organized and cleaner. Hey, our Help menu is kinda respectable now!<br /><br />Now I looked at the about box again. It still felt too verbose to me. Granted, a lot of that information is important, but I started thinking about better ways to say the same things. For a great example, let's look at the first two blobs of text you see after the version info:<br /><blockquote>Pidgin is a graphical modular messaging client based on libpurple which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, and QQ all at once. It is written using GTK+.<br /><br />You may modify and redistribute the program under the terms of the GPL (version 2 or later). A copy of the GPL is contained in the 'COPYING' file distributed with Pidgin. Pidgin is copyrighted by its contributors. See the 'COPYRIGHT' file for the complete list of contributors. We provide no warranty for this program.<br /></blockquote><br />All this information is hugely important. But it's too long. So I tried a surgical strike on the words. It took a few more tries than I care to admit, but I found that I liked this text better:<br /><blockquote><br />Pidgin is a messaging client based on libpurple which is capable of connecting to multiple messaging services at once. Pidgin is written in C using GTK+. Pidgin is released, and may be modified and redistributed, under the terms of the GPL version 2 (or later). A copy of the GPL is distributed with Pidgin. Pidgin is copyrighted by its contributors, a list of whom is also distributed with Pidgin. There is no warranty for Pidgin.<br /></blockquote>Obviously I took away some information, namely which IM services Pidgin can connect to. I'm not convinced that needs to be in the about box, considering the exact same text that is in Pidgin 2.6.2's About box is on Pidgin's website. So I carefully dissected the text and came up with a shorter text that gets all the important information across while cutting information most users aren't going to care about reading. I even managed to squeeze in that Pidgin is written in C, which was previously missing (it's a ridiculously frequently asked question).<br /><br />Now I had something better. But I could still improve it. We had oversized text pointing to pidgin.im, the FAQ, the IRC channel, and our XMPP conference. I added a new, bold heading, "Helpful Resources," and added those items as indented, normal-sized text items under the heading. This was getting better. Now, one final improvement. We point out that help from other Pidgin users is available by emailing support@pidgin.im. I changed the heading a little so that it reads a bit better. I also changed "3rd party" to "third-party," which is the more correct form.<br /><br />Something still seemed wrong about the About box, though. I experimented with the size, making it default to 450x450 pixels like the new dialogs I added. This seemed to help a lot. I'd like to make it a touch larger still, but I'm afraid that making it any larger will make it a tight fit on netbook screens. We're already getting complaints that some of our windows don't fit on these smaller screens, so I'm not exactly eager to cause more complaints.<br /><br />At any rate, for me, the About box's text fits in just under two full "pages" of the scrollable area--that is, the last line of the scrollable area when scrolled all the way to the top is the first line when scrolled all the way to the bottom. There are some other minor tweaks I'm going to look at making that may make the area scroll even less.<br /><br />In the end, my boredom caused me to take a look at something people have been complaining about for ages. Overall, I think what I've done is a good thing, but we won't really know for sure until we release Pidgin 2.7.0 (don't ask when--we have no idea yet!) and people see the new dialogs. I hope everyone likes what I did!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-87884678434081484552009-08-18T23:50:00.004-04:002009-08-19T01:40:44.876-04:00Pidgin 2.6.0--It's About TimeWell, by now most people probably realize that we've released Pidgin 2.6.0. It feels like this has been in the works forever, particularly these last couple weeks.<br /><br />First off, some statistics for this release:<br /><ul><li>99 bullet points in the ChangeLog.</li><li>221 tickets closed for the release (that is, 221 tickets that we believe are fixed or are patches that we accepted).</li><li>2 major new features</li><li>More other new features than I care to count<br /></li></ul>For the new features:<br /><br />Voice and Video support - Thanks to Mike Ruprecht and his Summer of Code project from 2008, libpurple now has a voice and video framework that can be used to add these features to our protocol plugins. Currently we support these features only on XMPP, but Mike is working on other protocols as I write this and hopes to have more protocols at least partially supported soon. The dependencies are a bit of a mess for the uninitiated, but unfortunately that's unavoidable. I'm hoping most distributions will be able to catch up with this soon and make it completely effortless for users, but this is a headache even for some distributions. The biggest setback thus far is we're currently not able to support these features on Windows--but we're working on it! Please be patient!<br /><br />Theme support - Another Summer of Code project from 2008, this time by Justin Rodriguez, adds theming support to libpurple and Pidgin. This currently isn't very well documented at all, but themes are now supported for the buddy list, sounds, and status icons.<br /><br />Yahoo users will notice a few changes. First and foremost, we split the Yahoo protocol plugin into two, one to handle the Yahoo JAPAN network and one to handle the rest of the world's Yahoo network. This has the side effect that if you happen to have the exact same account registered on both networks, you'll finally be able to use both accounts in Pidgin. It's also a lot more obvious to people looking to use their Yahoo JAPAN accounts in Pidgin. Sulabh Mahajan, another Summer of Code student from 2008, implemented a ton of new stuff for Yahoo and Yahoo JAPAN. Among the changes are the addition of SMS support. You can now send SMS messages by sending to "+<country code><phone number>". Sulabh also implemented peer-to-peer file transfers for Yahoo as well as adding MSN buddies to the buddy list of a Yahoo account. Unfortunately, proper support of adding MSN buddies isn't possible to do until 3.0.0 when we can make some major changes to the internal workings, but for now, if you want to add an MSN buddy to a Yahoo account, add them as "msn/foo@bar.tld". The "msn/" is the important part--this tells our Yahoo code to look across the MSN bridge to add the buddy.<br /><br />On top of all this, our developers, crazy patch writers, and contributors have been pouring a ton of work into our XMPP support. Beyond the voice and video support, we've gained a service discovery ("disco" for those familiar with the term) browser plugin, support for BOSH (Bytestreams Over Synchronous HTTP), idle time reporting (XEP-0256), attention ("buzzing") support (XEP-0224), in-band bytestreams file transfer as a last-resort transfer method (XEP-0047), custom smiley support in small (less than 10 users) MUC's via the "bits of binary" extension, as well as updated support for buddy icons (User Avatar XEP-0084 v1.1). There have also been a ton of bug fixes and other enhancements. All this adds up to 29 bullet points in the changelog for XMPP alone, and even that is surely not 100% complete.<br /><br />Other notable items include our new (optional) support for GNU libidn, allowing us to support UTF-8 domain names throughout all of libpurple, three new environment variables that can help in debugging (and thus possibly help some plugin authors as well), a new authentication mechanism for AIM implemented at AOL's request, the ability to receive voice clips and handwritten (ink) messages on MSN, and a crapton of fixes and enhancements in Pidgin. Even Finch got some love this time around, gaining a new TinyURL plugin and some important bug fixes.<br /><br />Of course, I'd be neglecting important details if I didn't mention the security issue we fixed for this release, as well as the 2.5.9 release. CORE Security Technologies found a way to remotely crash a running Pidgin instance that was logged into an MSN account via two specially crafted messages. They were kind and responsible enough to inform us of this privately and provide us with a proof of concept script so we could fix the problem before they made it public. The release of Pidgin 2.5.9 was done in source form only, explicitly to provide distribution packagers with a fixed release in the event they preferred to avoid the behemoth release that is 2.6.0.<br /><br />Of course, since I was heavily involved in the creation of the 2.6.0 release, we have some issues that we're going to need to follow up on shortly with a 2.6.1. I'm sorry for any inconvenience this causes anyone, but hopefully 2.6.1's release will make up for it by being what 2.6.0 should have been. At any rate, enjoy all the shiny new features!<br /></phone></country>John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-45505280543135082072009-07-02T00:35:00.003-04:002009-07-02T01:01:13.419-04:00Pidgin 2.5.8 and Other RamblingsWell, Casey already pointed out that we released Pidgin 2.5.8, but I thought I would expand on that a bit.<br /><br />As everyone reading this knows already, Yahoo was broken for us briefly. We rushed out a 2.5.7 release to address the problem and after release discovered that we had a number of other problems. Among these were broken file transfers, broken buddy icons, etc.<br /><br />We were receiving almost as many complaints about buddies never changing to show as offline as we got about the original Yahoo connection problem. Quite frankly, I got tired of it, so I started grabbing additional changes that we had committed to the upcoming 2.6.0 and applying them to 2.5.7. Eventually this yielded 2.5.8, which turned out to take a <span style="font-style: italic;">lot</span> longer than I expected to get released.<br /><br />As the ChangeLog indicates, we fixed a bunch of stuff, including an ICQ crash, an MSN crash for users with long buddy lists, a Yahoo crash introduced in 2.5.7, as well as receiving messages from the web version of MySpace IM and signing on to MySpace IM if you have an empty buddy list.<br /><br />If you're not using Pidgin 2.5.8, upgrade!<br /><br />We're also busily at work on Pidgin 2.6.0. In recent weeks we've come down to just a few things holding up the release. Among the blockers are the merging of some new features and fixing a new crash that we introduced by fixing ther crashes. At this rate, we might actually get 2.6.0 out sometime this year!<br /><br />On an unrelated side note, I was recruited to participate in a charity fundraiser for the <a href="http://www.mda.org/">Muscular Distrophy Association</a>. If anyone would like to <a href="https://www.joinmda.org/stclairsvilletelu2009/rekkanoryo">help me</a> reach my fundraising goal, I'd appreciate it.John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-44860755915266532082009-06-24T01:16:00.008-04:002009-06-24T02:42:46.007-04:00Some Clarification on Yahoo! IssuesFrom the recent activity on our support mailing list and in our IRC channel (#pidgin on irc.freenode.net), it's plain to see there is still a LOT of confusion about the recent troubles logging into Yahoo Messenger via Pidgin. I'm going to try to clear some of the confusion up. I apologize for the technical nature of this post. Feel free to skip ahead to the last paragraph of "Solving the Problem" below if you don't care what the problem is and just want to fix it. Or take the simple approach and just upgrade to Pidgin 2.5.7 and skip down to "But I already upgraded! It still doesn't work!" if you still have trouble.<br /><br /><span style="font-style: italic;"><span style="font-weight: bold;">The Problem</span></span><br /><br />The specific problem that affected us is the authentication mechanism. Yahoo Messenger 6 used a spectacularly complicated password obfuscation method to "encrypt" the password as it was being sent over the wire to Yahoo's servers. Back in 2004 when we were preparing our 0.79 release, Cerulean Studios, the creators of the Trillian client, were kind enough to implement this authentication mechanism for us. As part of this change, we began to identify to the Yahoo servers as Yahoo Messenger 6. This was all fine and well.<br /><br />The real problem came relatively recently. At some point in our recent history, which I honestly don't feel like tracking down now, we started identifying as Yahoo Messenger 7. At some point after that we again updated to identify as Yahoo Messenger 8. Both of these changes were related to file transfer and other feature enhancements. When we made these changes, however, we never updated our authentication code. This means we were claiming to speak Yahoo Protocol version 15 but we authenticated the same way protocol version <span style="font-style: italic;">13</span> clients do. Even this worked for quite some time.<br /><br />Yahoo began upgrading their servers at some point recently to phase out the old Yahoo Messenger 6 client. In effect, they want to force users of older software to update to the current client. Whether this is a good thing or not depends on your perspective. From Yahoo's point of view, I'm sure this is an excellent move, as it should make their server software simpler (speak one less protocol, one less auth scheme, etc.) and reduce their support load (fewer client versions to deal with). Where it became a problem for us is that at the same time, they started requiring protocol version 15 clients to speak the version 15 authentication scheme, which we never implemented. Since we still spoke version 13's authentication, this cut us off entirely.<br /><br /><span style="font-style: italic;">[Note: Some users have discovered that not all of the Yahoo Messenger servers are rejecting the old authentication mechanism from Pidgin. The number of servers that still accept it appears to be shrinking, however. We advise upgrading to Pidgin 2.5.7 as soon as possible.]</span><br /><br /><span style="font-weight: bold;"><span style="font-style: italic;">Solving the Problem</span></span><br /><br />A few months ago, a kind soul pointed out to us documentation he had assembled on how the current Yahoo Messenger client authenticated and communicated with the servers. It turns out that the convoluted authentication mechanism we had used for years was replaced with a significantly simpler one that uses a few simple HTTPS requests. The beauty here is the login data is encrypted in the same manner as your communications are encrypted whenever you purchase merchandise at a retailer like Amazon. This makes it significantly simpler for us, and probably allows Yahoo to simplify things on their end as well while increasing security during the login process for all their users.<br /><br />As I mentioned in my previous post, two of our Summer of Code students, Sulabh Mahajan and Mike Ruprecht (keep an eye out for these names--they're responsible for chunks of Pidgin 2.6.0's changelog!), implemented this new authentication scheme. We eventually merged it into what will become Pidgin 2.6.0. This code has had some quality testing already, thanks to the guys over at Adium.<br /><br />In response to the Yahoo server changes, I (quickly) yanked the most important changes for this new authentication scheme and slapped them onto Pidgin 2.5.6. After some testing and some other important bug fixes, we kicked Pidgin 2.5.7 out the door. In theory, upgrading to Pidgin 2.5.7 should make most people's Yahoo problems go away.<br /><br /><span style="font-weight: bold;"><span style="font-style: italic;">But I already upgraded! It still doesn't work!</span></span><br /><br />Yeah, we have had a few people with this problem. Here are a few suggestions:<br /><ul><li>Change your Yahoo account's Pager Server field (located on the Advanced tab when editing the account) to '<span style="font-style: italic;">scsa.msg.yahoo.com</span>', especially if you previously read <a href="http://www.celticwolf.com/useful-information/faqs/26-pidgin-yahoo">this document</a></li><li>If you're crashing when you connect your Yahoo account, again, set your Pager Server to '<span style="font-style: italic;">scsa.msg.yahoo.com</span>' and try to log in again. If you can't edit your account, you have two options:</li><ul><li>Run Pidgin from a shell (command prompt). 'pidgin -n' will cause Pidgin to start up in an Offline status, thus allowing you to edit your accounts. Set the Pager Server as described above.<br /></li><li>If you know the name of the server that you entered in the Pager Server field, you can change this manually. Locate your .purple directory (covered in the <a href="http://developer.pidgin.im/wiki/FAQ">FAQ</a>!). In this directory is a file called accounts.xml. Open this file with an editor (Wordpad on Windows; any text editor will do on Linux and other Unix-like systems) and find the server name you entered. Change this value and save the file. Start Pidgin and you should be fine.<br /></li></ul><li>If you upgraded by compiling Pidgin yourself, make sure you removed your distribution's existing libpurple package (for Ubuntu and Debian users this is libpurple0; for RedHat/Fedora users it should be libpurple). Then run 'sudo ldconfig' (or 'ldconfig' if you have a root shell already) and try again.</li><li>If you're behind a proxy server that proxies HTTP connections but not HTTPS connections, and you have to explicitly configure the proxy in Pidgin, you're probably not going to have any luck. Our current proxy code can't handle this kind of configuration. Sorry.</li><li>If you're on Windows and you get errors about a corrupted installer, clear your browser's cache, then restart your browser and try to download again.</li></ul><span style="font-weight: bold;"><span style="font-style: italic;">But I can't upgrade!</span></span><br /><br />If you <span style="font-style: italic;">really</span> can't upgrade, then try setting the pager server to either '<span style="font-style: italic;">scsc.msg.yahoo.com</span>' or '<span style="font-style: italic;">cs101.msg.mud.yahoo.com</span>' and try again. But you really, really, really, really should upgrade. If you do eventually upgrade, you'll have to change this again, as I describe above.<br /><br /><span style="font-weight: bold;"><span style="font-style: italic;">I upgraded but now ______________ doesn't work!</span></span><br /><br />We've had some reports that after upgrading there are some issues such as missing buddy icons and buddies never being shown as signed off. We are looking into these issues and hope to have them fixed for Pidgin 2.6.0. These issues didn't show up in my testing before the 2.5.7 release.<br /><br /><span style="font-weight: bold;"><span style="font-style: italic;">Tracking Yahoo Problems</span></span><br /><br />Please don't open any new tickets about these issues or about not being able to log in. There are already open tickets to track them. Please also don't comment with "Me too!" or similar on these tickets--it just creates more noise for us to sort through when we're working on Pidgin. If you want to express a "Me too" on one of the tickets, click the arrow near the top of the ticket page that's pointing up. This will cast a vote for the ticket.<br /><br />I hope this information is helpful to people.John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-30728102840156528692009-06-20T19:28:00.003-04:002009-06-20T23:32:15.148-04:00The Great Yahoo DebacleBy now it's no great secret that Yahoo has decided to break clients that use outdated authentication code. The result of that change is that Pidgin 2.5.6 and older no longer work unless you connect to one of a very few servers left that still speak the old authentication mechanism. We knew this change was upcoming, but all indications we saw pointed to us having almost another two months to push a release with updated authentication code.<br /><br />All that aside, we've had some updated authentication code for a while now, and were originally waiting to include it in the Pidgin 2.6.0 release. However, since Yahoo made the authentication changes earlier than we expected, we had to react as quickly as possible to stop the flow of incoming complaints. As a result, we backported the Yahoo authentication changes so we could cut a Pidgin 2.5.7 release fairly quickly.<br /><br />Pidgin 2.5.7 is now released and does work to connect to Yahoo.<br /><br />Just for the record, I'd also like to point out to those who complained about waiting three days to get a working release that the last time Yahoo screwed with authentication, it took over a week to even <span style="font-style: italic;">get</span><span> code to fix the problem, let alone prepare a release and actually get it out to users.<br /><br />Additionally, we fixed the annoying MSN disconnect-on-block issue and changed AIM's behavior such that the "could not retrieve your buddy list" error appears only once per AIM account.<br /><br />Enjoy the new release!<br /></span>John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-77589130003404594182009-05-28T20:14:00.003-04:002009-05-28T21:26:07.335-04:00Random Monotone HacksI imagine most people who bother to read this blog know that I am rather fond of Monotone, the distributed version control system (a.k.a. DVCS) that we use to maintain Pidgin's code. One of the most convenient features of monotone is that it's extensible via the Lua scripting language. Over our time using monotone, some of us have come across (or written!) some useful snippets of lua code that can be tossed into ~/.monotone/monotonerc to make things easier on us.<br /><br />The first such snippet is pretty simple. I have three monotone keys that I use for various purposes. One is for Pidgin development, another is for my work on the Guifications project and the Purple Plugin Pack. The third is for my private projects. Instead of needing to remember to specify which key I want to use in specific circumstances, a small snippet of lua can take care of this for me (of course, anyone wanting to use this will need to edit branch patterns and key names appropriately):<br /><br /><pre><code>function get_branch_key (branch)<br /> d = { ["im.pidgin"]="rekkanoryo@pidgin.im",<br /> ["org.guifications"]="rekkanoryo@guifications.org",<br /> ["org.rekkanoryo"]="rekkanoryo@rekkanoryo.org"<br /> }<br /><br /> for k, v in pairs(d) do<br /> if string.find(branch, k) then<br /> return v<br /> end<br /> end<br />end</code></pre><br /><br />Monotone also has the ability to cherry-pick revisions from one branch to transplant into another. (Of course, I recognize that other DVCS tools have this capability too.) To do this, ordinarily we would issue a command like <code>mtn pluck some_revision_id</code> within a working copy of the branch we want to transplant the revision to. In our experience, the default log messages for a pluck leave some to be desired. My fellow developer Sadrul wrote this cool bit to add a pluck-log command to Monotone.<br /><br />The pluck-log command takes a series of individual revision ID's as arguments. For each revision ID in the list of arguments, the command will execute <code>mtn pluck $REV</code> to grab and apply the changes to the workspace. Additionally, the plucked revision's original changelog entry will be inserted into the changelog for the new commit on the current branch. This is particularly useful if you're creating a new release branch by branching from a previous tag, then grabbing individual revisions from your main development branch. This command became popular among us Pidgin developers while we were preparing the Pidgin 2.5.6 release.<br /><br />Here's the code:<br /><br /><pre><code>--[[<br /> Pluck a revision with the log and authors filled in for the next commit log.<br /><br /> @author: Sadrul Habib Chowdhury (updated for mtn 0.43 by John Bailey)<br />--]]<br /><br />-- pluck-log command<br />function pluck_log(...)<br /> local revs = {...}<br /> local result<br /> local topsrcdir<br /> local logfile<br /> local log<br /><br /> -- mtn_automate() returns a pair of a boolean and a string; we don't really<br /> -- care about the boolean here, but we need to do something with it.<br /> result, topsrcdir = mtn_automate("get_workspace_root")<br /> topsrcdir = string.gsub(topsrcdir, "\n", "")<br /> logfile = io.open(topsrcdir .. "/_MTN/log", "r")<br /> log = ""<br /><br /> if logfile then<br /> log = logfile:read("*all")<br /> logfile:close()<br /> end<br /><br /> table.foreach(revs,<br /> function (index, rev)<br /> r, sel = mtn_automate("select", rev)<br /><br /> if r == false then return end<br /><br /> for rev in sel:gmatch("%S+") do<br /> r, certs = mtn_automate("certs", rev)<br /><br /> certs:gsub("%s+key \"(.-)\"\n%s*signature \"(.-)\"\n%s*name \"(.-)\"\n%s*value \"(.-)\"\n%s*trust \"(.-)\"",<br /> function(key, sig, name, value, trust)<br /> if name == "changelog" then<br /> log = log .. "*** Plucked rev " .. rev .. " (" .. key .. "):\n" .. value .. "\n"<br /> end<br /> end<br /> )<br /> execute("mtn", "pluck", "-r", rev)<br /> end<br /> end<br /> )<br /><br /> logfile = io.open(topsrcdir .. "/_MTN/log", "w")<br /> logfile:write(log)<br /> logfile:close()<br />end<br /><br />register_command("pluck-log", "REVISION1 [REVISION2 [...]]", "Pluck a revision with a good log",<br /> "This plucks a list of revisions, each individually, and adds the changelog of each revision for the next commit log." ..<br /> "\nEXAMPLE:\tmtn pluck-log h:im.pidgin.pidgin deadbeef\n",<br /> "pluck_log")</code></pre><br /><br />The resulting log entry will look something like this:<br /><br /><pre><code>*** Plucked rev 074c5aedf9bbc512331f0d3130f076190b290676 (rekkanoryo@pidgin.im):<br />Set the default pager host to scsa.msg.yahoo.com; this seems to be what the<br />official client uses.</code></pre><br /><br />Originally, Sadrul wrote this code for mtn 0.42 and earlier, which did not have the <code>mtn automate get_workspace_root</code> functionality. I updated the code to call <code>mtn_automate("get_workspace_root")</code> instead of finding the workspace's root with successive checks of parent directories. The revision ID printed in the log was also truncated to the first 8 digits. Ordinarily, this is fine; however, it's possible that in the future a new revision will be created that has the same first 8 digits and thus the short ID will be ambiguous. I wanted to avoid this situation, so I removed the truncation. I also rearranged a few things to make it easier for me to read. I also have to credit my fellow Pidgin developer Elliott with figuring out that I needed to kill the trailing newline in the string returned from <code>mtn_automate("get_workspace_root")</code>.<br /><br />Hopefully we're not the only ones who find this stuff useful. As I make frequent use of other useful monotone lua hacks, I'll probably post about them here too.John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-82533370823026709502009-05-24T14:32:00.003-04:002009-05-28T20:14:30.004-04:00Pidgin 2.5.6Well, as most people have noticed by now, we recently released Pidgin 2.5.6. This release was simply a bug and security fix release. Hopefully it will hold everyone over until we can kick 2.6.0 out the door!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-43869337018648151392009-05-02T09:41:00.003-04:002009-05-02T12:49:42.385-04:00Linux Journal Readers' Choice AwardYesterday, <span style="font-style: italic;">Linux Journal</span> issued a press release announcing the winners of its annual Readers' Choice Awards. It's an annual event that attracts a lot of attention in the magazine. In their effors to "take the pulse of the Linux community," they run this poll and announce the winners and grant honorable mentions to "strong contenders" in the pool of runners-up.<br /><br />This year, it's been announced that Pidgin has won a Readers' Choice award for Favorite Communications Tool, a category that we're no stranger to winning--we won this same category last year as well. The landscape is similar as well. This year, we won with 42% of the votes, beating out honorable mention Skype, which received 18% of the votes. Last year, we also garnered 42% of the votes, with Skype and Kopete earning honorable mentions at 17.8% and 12.8% respectively.<br /><br />Winning this award for the second year in a row reminds us that our work is quite well appreciated, something that is often easy to forget. It also reminds us that every once in a while we need to stand back and thank everyone involved in making Pidgin such a popular project. In this case, we need to thank the 2,000+ people who voted for Pidgin in these Readers' Choice Awards, as well as all our developers, Crazy Patch Writers, drive-by contributors who spot a simple bug and fix it, and our users. All of these people in our community come together to make Pidgin a success as a project, and while we'd be just as happy to work on Pidgin if we had only a few hundred users, we certainly appreciate all of the contributions to our success. Thanks!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-42771402562095586252009-04-20T23:57:00.002-04:002009-04-21T02:32:52.006-04:00And the Summer of Code is set!Well, Google finally announced the list of accepted students for this year's Summer of Code. You can read about our accepted proposals <a href="http://socghop.appspot.com/org/home/google/gsoc2009/pidgin">here</a>. Of course, we're all very excited about the projects we've chosen for this year. We have two students returning to us this year, both with projects that will be hugely important moving forward. Those students are Eric Polino and Sulabh Mahajan.<br /><br />Eric has chosen to work on GObjectification, which will move libpurple from using our own object system to taking advantage of the GObject capabilities of GLib, one of our existing dependencies. As a result of this project, a massive amount of libpurple infrastructure will change, allowing us to leverage a tried and true typing system and giving plugins an incredible amount of increased flexibility by allowing them to subclass objects and providing interfaces they can implement. This will, of course, have huge rammifications for everyone using libpurple--us, plugin authors, Adium's authors, and even the Instantbird authors. We're confident the result will be worth the effort, though.<br /><br />Sulabh has volunteered to take on the Privacy Rewrite. What makes this such a daunting task is that the protocols we support provide a very wide range of privacy options, some of which are unique. For example, ICQ supports an "invisible" list and a "visible" list in addition to a "block" list and probably a number of other things that I'm forgetting. Sulabh will have to look at what all our protocols support and provide a foundation in libpurple for all the protocol plugins to provide the privacy options their protocol allows for. Additionally, he'll have to smooth over the differences between protocols to make things consistent.<br /><br />In addition to these projects, we've accepted two proposals for native Windows user interfaces. Each project will take a different approach to achieve the same goal--providing a user interface that fits better into a Windows desktop than Pidgin currently does. I've already seen a few complaints that we accepted two projects for this. Quite frankly, I don't understand the complaints. We chose two projects for two reasons--first, we want to have the highest possible chance to better serve our Windows users, and second, it's entirely possible that a single Windows UI project won't be able to do enough to satisfy all our users. Having two Windows UIs will allow each to focus on whichever set of users it is more appropriate for.<br /><br />We've also accepted projects that will make XMPP transports based on libpurple, allow libpurple to use telepathy protocol support in addition to or instead of our own, and using webkit for our message displays. Each of these projects is going to be challenging in its own right. Of all the projects, the XMPP transports will certainly be the <span style="font-style: italic;">least</span> user-visible, as the transports will run on an XMPP server. Conversely, the most visible will probably be the webkit message view, as this will completely replace what we currently use to display messages. By using webkit, it's possible that we'll eventually be able to support Adium Message Styles (no, I'm not promising this support will happen, but it will be <span style="font-style: italic;">possible</span>). The Telepathy plugin will provide some interesting functionality by allowing us to use nothing but telepathy for protocol support if the user so chooses.<br /><br />There are other deeper details in these projects, but I've already wasted too much time obsessing over this post and discussing the larger projects in detail. I'll leave further discussion of the technical merits and details of projects to the students and mentors. Needless to say, this post could have gone on just about forever. ;)<br /><br />Overall, this Summer of Code looks like it will be one of our best. Good luck to all our students!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-73098952591172139482009-03-26T23:00:00.004-04:002009-03-26T23:53:05.174-04:00It's that time again...Well, once again we've come to the student application phase of Google's Summer of Code program. We're several days into the process, and we've seen a marked decrease in our intake of student applications compared to prior years. Why is anybody's guess, but I'm personally hoping it means that potential applicants are spending more time polishing their applications before submitting.<br /><br />Based on the applications we've seen so far, I'd like to publicize a few notes for applicants:<br /><ul><li><span style="font-weight: bold; font-style: italic;">Provide a detailed timeline for your project.</span> "I expect to complete work in 10 weeks" doesn't cut it here. Tell us what milestones you expect to achieve and how far along. You could instead estimate how long a specific goal will take to implement. Yes, your estimate could ultimately prove wrong, but that's not necessarily the end of the world. We really want to see that you have a concept of time management and prioritization.<br /></li><li><span style="font-weight: bold; font-style: italic;">Don't plagiarize.</span> If we know you're plagiarizing, we'll invalidate your application. <span style="font-style: italic;">If you can't deliver an application without plagiarizing, you shouldn't be applying.</span> We don't mind if you use some of the text on our ideas page to help with the abstract, but keep in mind that a serious application won't rely on simply copying and reformatting what we've already said.<br /></li><li><span style="font-weight: bold; font-style: italic;">Don't be afraid to come up with a unique idea!</span> The ideas page are not the only ideas we'll entertain. We love to see well thought-out, original ideas, especially ones that make us wonder why no one proposed it before.</li><li><span style="font-weight: bold; font-style: italic;">Make sure your proposal is for a specific project idea.</span> A general "I want to work with Pidgin for the summer" is a sure ticket to the reject bin.</li><li><span style="font-weight: bold; font-style: italic;">You don't have to write an encyclopedia for the application, but you do have to give us something to work with.</span> There's an old adage that "less is more." Sometimes that's true. Sometimes the opposite is true. The point here is that you should be verbose enough to explain your idea, but don't ramble. I know this can be difficult to judge. Just re-read the application, make sure it makes sense, and make sure it doesn't drag on needlessly.</li><li><span style="font-weight: bold; font-style: italic;">You have to apply using the SoC webapp, not our mailing lists.</span> We have to have applications submitted via the SoC webapp in order to review them and have them in the running for our student slots. This is a Google thing, and it makes everyone's lives a lot easier.</li><li><span style="font-weight: bold; font-style: italic;">The application isn't final until submissions close.</span> We will provide feedback on your application if it needs work. You can modify your application to address our feedback until applications close. <span style="font-style: italic;">Use this to your advantage!</span></li><li><span style="font-style: italic; font-weight: bold;">We don't yet know who will mentor any given project.</span> We don't assign final mentors and backup mentors to projects until we have decided which projects we want to accept. Asking us about this is just wasting your time.</li><li><span style="font-weight: bold; font-style: italic;">We expect you to treat the project as a full-time job.</span> That means at least 35 hours per week. We want to make sure everyone gets the most out of Google's money, and this is one way to do that. Since you'll technically be a contract worker, we expect the contracted work (your project) to take priority.<br /></li><li><span style="font-weight: bold; font-style: italic;">We expect you to remain actively involved with us after the Summer of Code finishes.</span> Quite frankly, if you're going to collect the checks and run, you're missing the entire point. The Summer of Code is intended to attract new contributors and get them involved in open source software, turning them into long-term contributors. Participating in the Summer of Code and then disappearing isn't serving that intention, and leaving us with code we have to maintain ourselves is quite rude. If that's your intention, please don't apply. Let the potential for acceptance go to someone who will stay with us.<br /></li></ul>Keep these in mind, and happy applying!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-30825504292926199892009-02-26T01:29:00.010-05:002009-02-27T23:50:01.824-05:00Saved Statuses for Fun and ProfitFrom my limited experience with Pidgin users among my family and coworkers, I've discovered that a number of users don't know about Pidgin's saved status features and instead use only the transient statuses created directly in the status selector by typing a message. Some users don't even realize that they can select a previously used transient status from the middle section of the status selector's menu. As an attempt to spread deeper insight into Pidgin, I submit for your reading this saved status tutorial.<br /><br /><span style="font-style: italic; font-weight: bold;">Overview of Saved Statuses</span><br /><br />In Pidgin, a saved status gives you a considerable amount of flexibility. For example, if you use six accounts, three of which are personal and three of which are for work, you can use a saved status to have your work accounts away while your personal accounts are available and vice-versa. Or, if the text box you get from using the status selector irritates you, you can use saved statuses to get rid of it forever.<br /><br /><span style="font-weight: bold; font-style: italic;">Creating a Simple Saved Status</span><br /><br />Let's start with two basic saved statuses--one Available status and one Away status.<br /><br />Click the status selector at the bottom of the buddy list window. You should see something like this:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxtbQzbR531FzDx9StQh2GwHZ0jH3fi-3_ebrPEPliXXFKPXxE0gof1HhGRk_cmrvqMpEkJKoyan-4nRg2SCkzisCGhJrAIoCeoAVcZNpU3CkB7e0FUgVcWmeQD8Vnr93jIISJYD7jiYA/s1600-h/select_saved.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 320px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxtbQzbR531FzDx9StQh2GwHZ0jH3fi-3_ebrPEPliXXFKPXxE0gof1HhGRk_cmrvqMpEkJKoyan-4nRg2SCkzisCGhJrAIoCeoAVcZNpU3CkB7e0FUgVcWmeQD8Vnr93jIISJYD7jiYA/s320/select_saved.png" alt="" id="BLOGGER_PHOTO_ID_5307688627114769794" border="0" /></a><br />Select the "New status..." entry. You should see something similar to this:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifZdQlaJ8Ytq_s0jQmNx2iAq4U5fdCJsSBqGIZL2TJMibruWCadNyH3aqcQcSn_f7gm7lYT2d7wbxeNREwBhMsuz61BZesAL7In1WC0wn3JmohVdHsbN4ytpFstiBDivk0dDO5acYqdfY/s1600-h/new_saved.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 150px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifZdQlaJ8Ytq_s0jQmNx2iAq4U5fdCJsSBqGIZL2TJMibruWCadNyH3aqcQcSn_f7gm7lYT2d7wbxeNREwBhMsuz61BZesAL7In1WC0wn3JmohVdHsbN4ytpFstiBDivk0dDO5acYqdfY/s320/new_saved.png" alt="" id="BLOGGER_PHOTO_ID_5307690221939812130" border="0" /></a><br />The fields here should be pretty obvious and self-explanatory. The title will be what you see in the status selector menu. Generally, I use a descriptive title, such as "Away - Sleeping" or "Available - no message," that will quickly identify the message's contents to me without needing to read the message. For this example, I'll use "Away - example."<br /><br />For Status, obviously you want to choose one of the basic statuses listed--Available, Away, Invisible, Extended Away, Offline, Do Not Disturb, or Invisible. If you use only one account, your choices could be significantly different. For this example, we'll accept the default of Away.<br /><br />in the Message box, type your status message. For my example Away status, I'll use the message "Away for the sake of being away."<br /><br />Click Save. Alternatively, if you want to use this status now, click "Save & Use." You could also click "Use," but then the status would not be saved.<br /><br />Now, repeat the process for an Available status. In this example, I'll have a title of "Available - no message", a status of Available, and a blank message.<br /><br />Now, if you select "Saved statuses..." from the buddy list window, you should see something like this, but probably with a lot fewer statuses listed:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0g_C4HD61CT3tanrQcpYlogWLBy0Ocrfp3GH1pkBygY6qMudDuH9ytjYwY8y9riBMHRhJYE0QMU2c4PJCmrJSfa5LPxPyd7Qk1B-EVqySsa_a3uMqzUg-bfxyLoLC9ema6qodFGAqu8/s1600-h/saved_dialog.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 182px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV0g_C4HD61CT3tanrQcpYlogWLBy0Ocrfp3GH1pkBygY6qMudDuH9ytjYwY8y9riBMHRhJYE0QMU2c4PJCmrJSfa5LPxPyd7Qk1B-EVqySsa_a3uMqzUg-bfxyLoLC9ema6qodFGAqu8/s320/saved_dialog.png" alt="" id="BLOGGER_PHOTO_ID_5307695396281208482" border="0" /></a><br /><span style="font-weight: bold; font-style: italic;">Creating a Complex Saved Status</span><br /><br />A complex saved status is where the real power of saved statuses becomes obvious. Let's modify the existing away example we created. Select it in the saved status list and click "Modify..." Now click the expander just to the side of "Use a different status for some accounts" and observe the list of accounts that appears.<br /><br />Put a checkbox in one of your accounts. For this example, I'll use my pidgin.im XMPP account. Now you see a much simpler new dialog:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqjsEckTyGH-VVrZfYjcurJ5LZ0bRRMk_1HrBXbZZ7q67xDebQTLO3JtEhbNOMhm7d7XPkHX07neimr2xn8OxB3TwfeYP7SRBNLkSqOhpePh6SXLGkyqU7QINeznWcNUskx-zMNxQNMBA/s1600-h/saved_dialog.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 227px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqjsEckTyGH-VVrZfYjcurJ5LZ0bRRMk_1HrBXbZZ7q67xDebQTLO3JtEhbNOMhm7d7XPkHX07neimr2xn8OxB3TwfeYP7SRBNLkSqOhpePh6SXLGkyqU7QINeznWcNUskx-zMNxQNMBA/s320/saved_dialog.png" alt="" id="BLOGGER_PHOTO_ID_5307696817714334450" border="0" /></a><br />For simplicity's sake in this example, I will choose "Extended away" as the status and use "test" as my message. After clicking OK, I return to the modify status dialog, to see something similar to this:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizfWCS64ffktC2l6zx8c61zOE8Hjs3CzVnllEvpWFIZbSUd-tONLzBnbB2g4vJbkErynLnxz8EuCmQRO7lvca8um7tFlBGL3QOT5Rw2whYOVgnqdF70SZULv0SuZcT3Uy4iHZOp3dq2Q0/s1600-h/saved_dialog2.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 227px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizfWCS64ffktC2l6zx8c61zOE8Hjs3CzVnllEvpWFIZbSUd-tONLzBnbB2g4vJbkErynLnxz8EuCmQRO7lvca8um7tFlBGL3QOT5Rw2whYOVgnqdF70SZULv0SuZcT3Uy4iHZOp3dq2Q0/s320/saved_dialog2.png" alt="" id="BLOGGER_PHOTO_ID_5307697685213304066" border="0" /></a><br />Now you can click "Save" or "Save & Use." This gives you essentially the simplest form of complex status--one in which only one account differs in status from the other accounts. Using this status will cause all but that one account to appear as away, and cause that one specific account to appear as extended away (note the clock vs. the circular sticky note).<br /><br /><span style="font-weight: bold; font-style: italic;">Using a Saved Status</span><br /><br />To use a saved status, you can select it in the status selector's menu if it's listed. If it's not listed, simply click "Saved statuses..." in the status selector to bring up the Saved Statuses dialog, then select the status you want and click "Use." The status should now be remembered in the "popular statuses" (middle) area of the status selector menu. Of course, with disuse or use of a large number of statuses, a given saved status can fall out of the saved statuses list, in which case you'll need to repeat the process of finding it again. If you use the statuses a lot, though, this won't be a problem.<br /><br /><span style="font-weight: bold; font-style: italic;">Practical Applications</span><br /><br />Saved statuses aren't for everyone, of course. They do provide a number of possible complex status combinations limited only by the number of accounts you have in Pidgin. They also let you get rid of the ugly text box for status messages for as long as you use saved statuses. They also offer a relatively quick setup time that allows you to create your status once and use it as many times as you want without ever having to think about how to configure the status again.<br /><br />Enjoy playing with your newfound saved statuses!John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-28888606721861035112009-02-26T00:27:00.004-05:002009-02-26T18:38:37.967-05:00You Can't Please AnyoneOccasionally we make changes to Pidgin which displease some subset of our users. For an example, I'll give a brief history lesson.<br /><br />We released a series of six betas leading up to our name change to Pidgin. In our first beta, 2.0.0beta1, we introduced the concept of the status selector. At this time it was a rather crude creation; it simply mashed a few widgets together to accomplish the basic tasak. When we introduced this status UI, we also introduced the concept of two ways to handle status messages. The first, and most obvious, way to handle status messages was to present a text box when selecting a basic status from the status selector in which to enter the status message. The other method was a bit more complex but <span style="font-style: italic;">significantly </span>more powerful--this was the saved statuses feature accessible from the "Saved statuses..." entry in the status selector's menu.<br /><br />When we first inroduced this UI, the behavior of the text box was to <span style="font-style: italic;">retain</span> the status message whenever the status changed from, for example, available to away or from away to available. A number of people, myself included, were not happy with this. Eventually we changed the behavior to clear the message on status change. This displeased another group of users. Now here we are, two years later. We changed back to retaining the status message on status changes pursuant to <a href="http://pidgin.im/pipermail/devel/2008-September/006775.html">a discussion on the development mailing list</a>. Again, we've displeased a group of users.<br /><br />The problem with this particular change is that <span style="font-style: italic;">both</span> behaviors are valid, and fans of each behavior think their preferred behavior is the only correct behavior. Of course, now that we acknowledge that both behaviors are valid, many users' first reaction would be to say "Make it a preference!" Of course, that's a whole new argument in itself, but this is such a minor feature that it's not important enough to warrant a preference.<br /><br />Note that the people who don't like the retention of the status message are inconvenienced by a <span style="font-style: italic;">single</span> keystroke if the intended result is to clear the message, and not inconvenienced at all if the intention is to use a new message. This inconvenience, or lack thereof, is because we chose to implement the retention such that the retained message is highlighted. This means that simply hitting backspace will clear the message and typing an entirely new message will replace the message text with what you've typed.<br /><br />Simply put, this change is just further proof that when you're involved in a project of any significance, you're damned if you do and damned if you don't, no matter what you do or don't.<br /><br />I'm sure this post will inspire some criticism. For the time being, though, I think it's best if we ride this wave of criticism out for a bit and see if this is simply resistance to change or a genuine "problem."John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.comtag:blogger.com,1999:blog-2576186912722433445.post-43044807984211656322009-01-12T12:19:00.004-05:002009-02-26T18:38:53.624-05:00MSN IssuesSince last evening, we've had an influx of users into #pidgin, trac, and the support mailing list because they're not able to connect to MSN. Initially, we thought this was a server-side issue, because the error message we receive from the server makes it look that way. However, we've come to find that it is actually a minor protocol change in which the server now expects us to send a piece of data we don't send. We are working on a solution. There is no need to send further mail to the support list, open new tickets, or pour into #pidgin.<br /><br />Again, we know what the problem is and are working to fix it.John "rekkanoryo" Baileyhttp://www.blogger.com/profile/17749957970474673094noreply@blogger.com