Wednesday, June 27, 2007

The frustrations of development and work

The last week or so has been an interesting love-hate relationship between me and all of my assorted projects and my regular job. I'll try to summarize:
  • The Purple/Pidgin Plugin Pack
    • I had wanted to push a release of this on June 21. This didn't happen for a couple of reasons. Stu Tomlinson wanted to test, which was a quite understandable request. For this reason I delayed until June 23 (my birthday, too!). On June 23, it was difficult to find the time to do anything code or computer related because of the family. Ok, no problem, let's delay one more day. Well, Sunday I realized I had no environment in which to compile our plugins for Windows. This is a no-go any time we release because literally within half an hour of release we get complaints about the lack of a Windows package. Well, long story short, thanks to VMWare 6 and its VNC server capabilities, I now have a Windows Pidgin Build Environment and I'll be using it to build the plugins whenever we do release.
  • Internet Banking
    • At work, we performed a migration on Wednesday, June 20. We used to host our internet banking system in our own datacenter/server room. As a way to potentially save money in the long term and also dramatically reduce the liability the bank shoulders for the security of the internet banking site, we outsourced the IBS to the datacenter run by the company that provides our IBS.
    • The actual site migration was trivial. Everything else, on the other hand, has been a royal pain. We've been on the phone with our conversion "experts" every day over the issues that just don't go away. The daily reports and end-of-day processing is generating tons of errors, flagging customers as overdrafting with their transfers when the customers in fact have more than sufficient funds, and for a time today the application that interfaces with the bank data for new account entry and password resets and whatnot refused to work at all. Our onsite person who enters new accounts into the IBS and does password resets and whatnot is frustrated enough that I wouldn't be surprised if she quit over it.
  • Bank conversion and consolidation
    • The bank I work for is owned by a holding company that the bank's board of directors formed in the early 80's as a way to buy other banks and run them as separate entities under one corporate umbrella. When the holding company was formed, it bought another bank that had a couple locations of its own. In 1998, a third bank was bought and added to the mix. In 1999, the bank I work for and the bank purchased in the 80's were consolidated into one larger, stronger, and more profitable institution. The third bank went along on its own quite happily. Last year, however, there were some massive losses at the third bank and their board of directors voted to allow my bank to take them over. Now, effective July 1, both banks will be divisions of the same bank in order to maintain their separate identities. Routing-transit numbers will be retained and everything. Processing will still be separate.
    • To facilitate what management wants, a contractor has been brought in to develop some conversion tools and some reports that can combine data from both banks, as well as some new replacement programs to work around some limitations of our current core processing system's security model. This contractor is actually very good and very efficient at what he does, which was quite a pleasant surprise. All of the development needed to satisfy management has caused tremendous headaches, and will only get worse as this weekend approaches--this end of month is the end of the quarter, and also a double processing night (the 1st of the month has to be seen as a business date for the vast majority of core processing systems, and it's generally easier to run two processing dates than to use the "combined" or "split" update features present). To top it off, the second processing date, July 1, is the start date for the merger. Fun, fun, fun.
At any rate, business as usual for the working guy--headaches, headaches, and more headaches!

Hopefully I'll be pushing a plugin pack release this week!

Tuesday, June 12, 2007

Projects for the Banker

Given that I called my blog "The Flaming Banker" (in reference to the fact that I work for a bank and I start more than my fair share of flame wars), one would think I'd make a few more posts leaning toward the "flaming" part of the name, right? Well, apparently I'm incapable of doing too much of that. Every time I have something that I could rant about here, I end up distracted long enough that I'm no longer irritated enough to post it here. I just can't hold a grudge or stay angry for extended periods of time--don't get me wrong, that's almost certainly a good thing.

But enough of that. :) Let's get to the title of this post, shall we? Projects for the banker.

I recently, for some unknown reason, agreed to implement a feature in my listhandler plugin for libpurple. This feature would allow the importing of NotesBuddy exported buddy list files with a .dat extension. I spent a couple hours total on it before giving up on it as a useless, impossible task. My reasons for giving up on this were that I do not use sametime, nor do I have access to a server that provides the sametime protocol. The format was also completely incomprehensible to me.

I also received a patch for listhandler to implement the ability to export an XML list of aliases and then import said list without actually adding buddies to the list. I'm still undecided on this (mainly because I'm lazy and don't want to spend the time to fix the deficiencies I see in the implementation) but will probably rush to squeeze it in before Thursday, in hopes that we'll release the plugin pack to coincide with Pidgin 2.0.2.

The Pidgin FAQ...that's an interesting labor of torture and love. Luke Schierer simply does not have a block of time he can dedicate to sitting down and pouring a ton of documentation into the wiki at Nor does Stu Tomlinson, original author of the SSL-specific "FAQ." Stu nominated me to transcribe the SSL information to the wiki, which I was crazy (stupid?) enough to do. It took several days, on one of which I lost several hours' work and had to reconstruct it, but I managed to get it done. Following that, I noticed that what Luke had managed to put in the wiki was a bit anemic compared to the old FAQ. As I said, he simply does not have enough time to do all the bajillion projects that have resulted as a side effect of the name change and the migration away from Sourceforge. Given these two facts, I decided to pitch in and help beef up the FAQ on the wiki with more useful info. Amazingly, in just a few short hours (spread across a few days) I managed to migrate over half of the old FAQ to the wiki. I still have more questions I need to move over, and a few I think I need to add, but the most important stuff is there.

The downside to Pidgin having a wiki now is that anyone with an account can edit the wiki. I'm not so sure I like this idea. I was opposed to it from the start, then grew indifferent, and now am starting to come back to the opinion that it's not worth the trouble. As I mentioned, I spent several hours on the FAQ transcription. A couple days after I made my last changes, someone came along and butchered the careful wording that both I and Luke had previously placed into some questions, and added a new "question" that was completely incomprehensible. It took me literally half an hour to figure out what the person was trying to communicate. I have, however, fixed the offending entries.

I'm not going to bother lobbying for more restrictive wiki permissions, as I know it's a losing battle. There are apparently benefits to this approach that I'm not seeing right now. I've also started enough arguments within the Pidgin camp, and don't particularly feel like starting another.

And now let's get to the mother of all projects--Guifications 3. Gary Kramlich created this brainchild before I even became involved with his projects, and it's still in development. While Gary is frustrated with this (and rightfully so, as the rest of us developers have been mostly lazy bums in the process--no offense intended), he and I both realize this is probably for the best in the long run--as Gary has progressed, he's found some major flaws in his initial design that he's able to fix now, while we're still pre-alpha and mostly unusable.

Now, Gary would be quick to discredit my classification of myself as a "lazy bum," as he did last night in an IM conversation when I called myself useless. He does correctly point out that I have done a bit here and there and also taken some of the administration load from him, which helps him because it frees more of his time to work on the hard stuff in Guifications 3. I also try to take on the support role as much as possible when users come to us with issues involving Guifications 2 and the plugin pack.

At any rate, however, Gary decided that he needed to change some API by renaming GfFeedPool to GfFeedManager. He also needed to design a new API component, so he asked me to handle what I could of the Pool -> Manager transition. I spent a couple hours on this, more than Gary would have, I'm sure, but the end result is I did finish the conversion. I also found a few issues that resulted because Gary had split some functionality out of gflib and into gflib-ui, but had forgotten to update #include statements. Because of this work, I built and installed over half of Guifications 3, which roughly corresponds to how many of its modules are even remotely close to hackable, usable, or functional.

After all this discussion of Guifications 3, I'm sure some people are going to wonder what Guifications 3 is and why it's taken well over two years to develop while still not producing a usable "product." Without giving too much away, I'll try to answer that here. Guifications 3 is a modular framework for notifications, similar in purpose to libnotify and Growl, but with a much broader scope. We make heavy use of dbus by default and will support xmlrpc and a variety of other communication methods. And yes, that means that we're expanding our horizons beyond Pidgin. Far beyond. Yes, I know that's horribly vague, but until we've reached "hackable" there's not much point in laying all the cards out.

Also, since my last post I've had the pleasure of talking with Jennifer twice. She seems to be doing better than she was, but seems to be still very deeply hurt over the events that led up to our five-plus-hour conversation. I'm glad to see, though, that she is taking a sensible route on the matter and somewhat distancing herself from the situation. In the end it will make a huge difference for her, as she'll know some different aspects of life she hasn't yet explored. She will end up a much stronger person because of this, and I'm sure I'll find myself respecting her even more than I do already. Indeed, this too is intentionally vague, as I do wish to protect her privacy and avoid causing her any pain myself.

At any rate, I now need to go to bed.

Saturday, June 2, 2007

Paying for friendship

By reading the title of this post, I'm sure someone's going to get the wrong idea about this post. The title is actually a joke cracked by a friend of mine in reference to something I'll explain a bit later in this post.

Wednesday night was a good night at work in many ways--I was able to get my work done quite early and fast, and I learned a few things about how NCR MP-RAS handles different terminal types, including AT386, its default term type for /dev/console. (If you haven't gathered by now from reading my posts, I'm a UNIX geek of sorts.)

Seeing as how I had to get up early to go to work Thursday morning, I went home and eventually went to bed. Thursday was an interesting day for me. I flew through an absolute ton of stuff and accomplished more in a single day than I normally do in three. Between Wednesday and Thursday alone it felt like I had worked well over a full work week.

Thursday night, I went home, ate and took a shower, and proceeded to go about my Thursday night routine of playing catchup on all my trac email from Pidgin, a usual inflammatory comment or two in the Guifications IRC channel, etc., when I saw a notification pop up to say that a friend of mine had signed on. I looked at the notification and discovered that it was Jennifer, a friend from New York City who I hadn't had the pleasure of talking to in 224 days (according to Stu Tomlinson's lastseen plugin for Libpurple).

I proceeded to talk to Jennifer and was astonished at how open she was being with me. In my previous conversations with her spanning over the last six years of our lives, Jennifer has never been one to discuss her personal life so openly and freely. It was an amazing thing to finally be let into her world completely and really find out what's been bothering her. We talked for over five hours straight with me attempting to help her through her problems, or at least give her food for thought. I think it's safe to say I gave her plenty of food for thought, but I haven't really helped her much other than being a sounding board. I wish I could have done more for her; it always breaks my heart to see her sad or hurt. She finally decided to head to bed around 1 AM US EDT; I too called it a night at this point.

Friday morning I woke up at 4:30 US EDT to my alarm because I had to go print statements. Dead tired, I drag my sorry rear into work at 5:48 AM US EDT and have a host of problems, including a leaking toner cartridge for an HP LaserJet 5SiMX printer, a bad drum in the same leaking cartridge, statements that needed reprinted because of the bad drum, and a host of internet banking and voice banking problems. Essentially, everything that could go wrong did.

To make matters worse, when I got home I found out that my wireless router (a Linksys WRT54G version 2--one that OpenWRT would run on quite happily) was no longer forwarding packets from the outside to my internal boxes. I started investigating and in the end unplugged the router and plugged it back in to power-cycle it. After that, the WAN interface worked, but the router refused to route packets between the inside and outside worlds. I unplugged the cable modem from the router and attached it to my Dell Inspiron 6000 laptop and everything magically worked. So I unplugged the router again and let it cool off for a while. Once I plugged it back in, the WAN interface stopped working entirely. The switch ports are getting flaky too. The only thing working reliably is the wireless interface. So, for the time being, I'm stuck with only one machine having internet access, since i'm not willing to turn this laptop into a router.

I discussed the router problems with my friend Brandon, who had similar issues a couple weeks ago except in reverse (wired worked but wireless didn't) and his were fixed by a reboot and switching to a wired connection. Then I told him about the problems at work and the conversation with Jennifer and how long it had been since I talked to her, and he comes off with "You're just paying up for that friendship now." We laughed and that became the basis of this post's title. :)

All in all, given that I've been able to talk to Jennifer again, all the trouble is worth it. I've missed Jennifer more than I realized I could, and her friendship is worth more to me than any I've had in quite a while. Definitely worth the trouble. :)