Getting Excited about KDE4 All Over Again

http://kde.org/img/kde40.png

It started to hit me yesterday as I spent 3.5 hours in this year’s KDE Google Summer of Code mentor’s meeting (thanks again sebr!!). KDE4 just plain rocks, and it feels good to start getting excited about it again. And I don’t just mean KDE 4.0. Don’t get me wrong, KDE4.0 is a nice little release. It’s not perfect and there are some things that are irritating about it and keep me from using it as my main DE. But like Aaron has been saying over and over and over again, KDE4.0 is not KDE4. KDE4.0 is more of a preview of things to come, and what I see coming just plain kicks butt.

I am finally getting excited about our PIM space again, and that feels really, really good. KMail, KOrganizer, KPilot, and the rest of our PIM suite was what drew me to KDE in the 3.x series. (Well, that and quite honestly I find the intentional dumbing-down and lack of configurability of the other large, free DE irritating to the point of exhaustion.) But lately our PIM apps have suffered from lack of care and have started to look seriously unsexy compared with Thunderbird, Sunbird, and even *gasp* Evolution. But KDE4 gives us a chance to remedy that, in my mind, and looking at this year’s Summer of Code projects, I’m hoping we get some really nice improvements done. There’s a few really sweet ones that I’d love to see get accomplished: the Google Contacts/Calendar integration into Akonadi and thusly KDE PIM, the enhanced KMail view, and (nearest and dearest to my heart) getting KPilot fully functional, and rock solid for KDE4.

And going through the SOC-sorting meeting made me realize all over again how fantastic a community it is that we have in KDE. There’s a lot of respect and comaradarie and friendliness that I just don’t see in some other communities. Not to mention the quality of talented people that we have. PIM might have drawn me to KDE, but it’s the people and our awesome community that we have that has kept me. =:)

Anyway, I just had to say that it feels really, really good to be excited about KDE4 again. In my mind, it’s a really unique opportunity to do something fresh and new and fun and exciting again. It’s a chance to learn from past mistakes and do better. It’s a chance to take the fantastic functionality that we have and rethink how our users can best interact with it. It’s a chance to not be bound to the past and to not have to be stuck with the same old presentation layer we have just because we don’t want to make drastic changes to our applications.

As the pretty graphic says, KDE4 is truly a chance to be free. =:)

KPilot Hackery of Sorts (or How To Sync Your Work’s Exchange Calendar To Your Palm, Part III)

It felt darned good to hack on KPilot just a wee bit today! Actually, it was less hacking on KPilot directly and more on some utility code that I’ve written that allows me to sync my work Exchange calendar into my personal calendar and subsequently to my Palm. I’ve blogged previously about this, but since my last post, I’ve switched employers (YAY!!!) and I now have to deal with Exchange 2007 OWA, with Forms-Based Authentication (FBA). FBA has managed to break the nifty little Ruby Exchange (RExchange) code that I’d been using, since RExchange doesn’t do FBA. So, I’ve gone back to Graham Cobb’s tremendously useful little OWASync package which has been updated to handle Exchange 2007’s schema and FBA, WOOT!

So, anyway, if you, like me, need to sync your Exchange calendar to your Palm, and you don’t want to have to keep your personal Calendar also in Exchange just for the privilege of being able to sync both work and personal calendars to your Palm, you might find some of this useful. The right answer for this, of course, is to get KDE PIM to be able to speak to Exchange, show it in kontact, allow 2-way manipulation of your Exchange calendar, and then get KPilot to know how to merge multiple calendars into 1 view and 2-way sync them. But that’s a whole lotta work. =:)

I’m actually thinking that it might be a long-term idea to have KPilot be able to sync to multiple calendars on its own. But, again, that’s a whole lotta work.

And what’s more… while it might not be the prettiest solution, what I have now works and does what I need it to:

  1. Retrieve my calendar out of Exchange
  2. Display my calendar in Kontact (or Sunbird–I just checked and it works fine too!) so I don’t have to deal with OWA for checking my calendar
  3. Have my work calendar remind me of appointments via my Linux desktop
  4. Sync my Exchange work calendar with my Treo

KPilot Insomniatic Progress

I have never had insomnia before in my life. Until tonight. I don’t know if it’s the stress of everything that’s going on in our lives right now (um, trying to sell a house in a REALLY bad housing market, trying to figure out how to pack up and move one’s family on a shoestring budget, wanting really badly to do super good on my new job that I absolutely love, etc., etc., etc.).

Or it could be that I drank a small amount of coffee today.

Whatever the reason, I couldn’t fall asleep from midnight until 1:30 a.m., so I got up and started hacking on KPilot’s USB workaround thing that I broke a year+ ago and subsequently couldn’t sync my new Treo 700p.

Well, my little droogies: let all who have funky USB Palm devices (Zire, Treo 700p, and I’m assuming also the Treo 680) rejoice once again. I’ve just successfully synced my 700p 5 times in a row with no funky button pushing, timing issues, or otherwise kludgey workarounds.

W()()T!!

I’m going to look through it again tomorrow with hopefully less-blurry eyes and then I’ll commit it.

[ UPDATE: ] Yah, so insomnia sucks. I’ve committed this. I’d love to get some feedback from any intrepid KPilot/funky USB device users! Just be sure to grab revision 749517 or later from KDE’s main subversion server (/branches/KDE/3.5/kdepim/kpilot).

[ UPDATE2: ] For the aforementioned intrepid folk, please follow the directions on our website for retrieving and building the latest source with cmake.  If you get stuck, please post a message for help on the kdepim users mailing list.  Thanks!!  =:)

KPilot Almost Progress

Blef.  So, I finally got a chance, late tonight, to hit the code, so to speak.  After an encouraging couple of e-mails with a KPilot user (hi Ryan!), and my own discouraging lack of time as of late to touch KPilot code, and the fact that I can’t sync with my Treo 700p (grr), I dug in and started looking at the guilty code.

It’s my fault, really.  I changed the device communications code in the version of KPilot that got released with KDE 3.5.7.  It was some bandaid fixes that pulled the device communications out of the main GUI thread and put it into a worker thread.  This fixed several bugs that were tied to KPilot breaking horribly for users who used libusb (device “usb:”) and bluetooth (device “net:any”).  Pulling blocking, non-UI work out of the main UI thread is goodness.  Yay!

However, it also broke the “USB workaround” feature of previous versions of KPilot that detected a non-hotsync connection from a Palm.  Now, mind you, there were problems with that code as it was, and there’s some improvements that I plan on making to it, but… frustrating….  You fix 3 things and you break 2 others.

The other problem is that there have been so many bandaids to this code (by myself, included) that what it really needs is a good house-cleaning.  So I fought with the code for a few hours tonight and I think that what I need to do next is to step back and look at the logic flows, needed functionality, involved classes, and come up with a clean design for it all.  Blech.  Which means that it’ll take a wee bit longer to have a working, syncing KPilot for my Treo 700p.

But, theoretically, we should have a much-cleaned-up code base for device comm, with fewer bugs, and much more maintainable code for the future.

Yay.  =:(

Ah, Now I See What You’re Talking About

SlingPlayer_700p_Angled_270x412It’s an extremely difficult thing, trying to support this weird beast, the Palm. Or, more accurately, it’s an extremely difficult thing trying to support the numerous personalities and implementations of the Palm beast. I mean, KDE PIM as a start is about as unsexy as you could want. But genius me, I focus on the ugliest duckling of KDE PIM: KPilot. Don’t get me wrong… I’m a gadget geek, enjoy Palms immensely, and have been for… gosh… 8+ years now?? (Wow, just had to check what year the IIIe came out…). And, there’s a reason that I’m hacking on KPilot, and that’s because I honestly believe it’s the best PIM-synching Palm solution in FLOSS-land.

Anyway, back to my point… The Palm OS and its devices are a moving target, and it’s darned difficult to get it right for all of them. Until just yesterday, I had been using a Treo 650 with KPilot, and it’s been working splendidly for the last couple of years. All the while, mind you, I’ve been hearing grumblings that we don’t play all that nicely with the Treo 680 or 700p. Not having any of those (expensive) devices, I was left looking stupid saying “dunno, fellas… it works purty good fer me!” Well, HAH. As of yesterday, I am now the proud owner of a Treo 700p.

I’ll not go into the details, but suffice it to say that paying $6.95 for the last year’s worth of Sprint’s Total Equipment Protection plan has now proven to be fully worth it and I’m congratulating myself on my wisdom, 1+ years ago when I agreed to partake. The speaker (and thusly the thing that notifies one of an incoming phone call) on my Treo 650 decided to up and die on me and Sprint was extremely good about replacing my Treo because of it. And, not only did they replace it, but they replaced it with a shiny new 700p. The 700p, for those not yet gadget geeks, allows me to use Sprint’s EVDO data network, which is MUCH faster than the previous data access speed I had with my 650. Like 2400-baud compared to a T3, seemingly.

Anyway, as I have a 700p of my very own, I can now appreciate the aforementioned grumblings about KPilot not playing as nicely as it should. Apparently, Palm has done something slightly differently with the 700p than they have in other models that I have and KPilot is hanging onto the port longer than it should, even though nothing is happening on it. Hitting the “reset the device connection” button in KPilot’s GUI (and waiting 30 seconds or so… I’ll need to look at that) seems to help, but something is definitely not kosher in Denmark. I’ll try to look at it this weekend, if time allows, on the 3.5 branch.

Don’t even ask me about the KDE 4 branch…  I’m still suffering from deep depression about the state (or lack thereof) of KPilot in trunk.

Thinkpad T61 and a Blond ‘fro

Technology had several glorious victories at my desk today. First, I was fortunate enough to get a very nice dual-head GeForce Nvidia card installed on my 4-way AMD 64-bit cpu server at work. It goes very nicely with the two beautiful 1600×1280 monitors that are now hooked up via twinview. This is by far the coolest working environment I’ve ever had (okay, ever seen).

Secondly, I got my new work laptop today, and it is hella sweet. It’s a Thinkpad T61, and I think I’m in love. About my only complaint is that the thing must weigh 50 pounds, but what can you expect with these specs, I guess. Sweet, sweet, sweet laptop. Oh, also, it’s by far the smoothest Linux installation I’ve ever done. I put OpenSUSE 10.3 (64-bit, baybee!!) on it, and nary a hiccup, complaint, wrinkle, nor hassle! Even the wireless card worked perfectly and out of the box. Nice!!! For all the unsexiness (compared with the Vaios, Macbooks, Alienwares, etc.), this Thinkpad is a solid little machine. And now I’ll get to work purtifying it up with some stickers…

Third, I am officially if not impressed, at least very relieved to see how mature Perforce is. I’d read a couple of really scathing discussions about it last week (which I won’t link to, being that the authors are serious potty-mouths…), so I was a bit wary of it, but from what I’ve seen thus far (having not actually used it yet), it seems pretty slick. Thiago, I understand what you were saying now… =;)

Oh, also, during my little transition period here as I blogged about earlier, I’ve been using the Gmail interface to my little domain’s e-mail, and seriously like it. What I’d typically do, now that I have a laptop again, is to start using a thick client again (kmail), but I’m kind of unsure where I want to go next. There are some definite niceties that the Gmail interface offers that kmail (and honestly, any thick client that I’ve seen) does not. And I wonder how far one could go in the “keeping all my stuff on Google’s servers” model. Being that I’m a Palm/PDA geek, it’s still important to me to be able to sync the big 4 with my Palm (Calendar, Addressbook, Memos, and ToDos). I wonder if Google is planning on augmenting these and providing solid, open API’s for syncing them… ‘twould be really, really cool to build on top of Bertjan’s SOC base conduit with some Google API syncing code. Which reminds me, I wanted to look at syncing with Tomboy from Kpilot too….

I also do like Google’s Reader. Some very nice UI choices made there, and extremely slickque AJAXey sweetness.

supafro_bndAnd I’m going to need some ideas on how to let my hair grow out and not look stupid during the process. Hair gel just doesn’t work unless you’re going for Ace Ventura. Maybe blow-dried and blond ‘fro? =;)

Phew. Long, exciting day. Sleep needed.

Um, and no, this is not me. Just some wig advertisement….

VMware, Day 3

This place is SO amazingly, refreshingly, awesomely, mind-bogglingly, ground-breakingly (yes, that’s a new word), life-changingly (write that one down), career rejuvenatingly, totally, totally cool.

I am seeing the world through new eyes, truly. I am in awe. I am absolutely having the time of my life.

Maybe some of it is due to the “having been hitting one’s head against the cement wall for so long, anything else feels downright wonderful” syndrome, but I think it’s more than that. VMware actually gets Open Source. The movement, the power, the people, the world-wide community, the whole thing. For the last three days, I’ve constantly been thinking how refreshing it is to not have to fight my employer every step of the way, trying to introduce Open Source solutions, getting permission to use Linux, getting support for it, etc. I’ve been fighting that uphill corporate battle with little support and few victories for so long that I’ve not fully realized how tiring it is before just now. But here, to not only not have to fight policy, culture, etc., but to even be encouraged and supported in using Open Source and Linux… it is wonderful. Like coming home to a family that you never knew you had (see paragraph 1).

Thus far, (3 days into it, all brand-spanking new, wet behind the ears, and what-not), I’ve managed to uncover a small inconvenience in our gtk24 wrapper script that shows up when you don’t have libgtkmm installed at the system level, as I do not being that I am infinitely more comfortable using KDE with a small smattering of GTK-based apps (xchat (hi Thiago! please fix the SOCKS proxy issue so we can get app-specific settings! =;)) and pidgin mainly). So I’m hoping I’ll get a chance to poke enough at that one to be productive on my first week at work. =:)

But I digress…

Oh, by the way, San Diego (my home until 9 years ago) is on fire. Film at 11.

VMware is beyond uber-cool. Unspeakably so. I love it here.

Got (KDE) Shirts? (part deux)

So, I received my custom-made KDE and KPilot shirts from spreadshirts.com yesterday, and am very, very impressed. 5 days to get the shirts printed and shipped is pretty darned impressive. Nice job, spreadshirt!!! The shirts seem to be well-made and of good quality. I’m just hoping that the logos and printing doesn’t start coming off for at least another 5 years… =;)

Custom-made Spreadshirts Custom-made Spreadshirts
And yeah, my witticisms are perhaps not the greatest, but I was a bit thin on pop culture references at the time, and Adriaan was asleep. So bite me.

But I can say that if you’re in the .us, and you’re looking for some nice KDE swag to wear out on your next hot geeky night on the town and can’t find any, you might just want to take a look at spreadshirt.com. If you can’t find something you like, you can use their custom designer to create it yourself.

Now… back to getting KPilot release-ready….

Wrapping up the Summer of Code

I wrote this for this last week’s commit digest and didn’t want to steal Danny’s thunder, but here’s my thoughts on this year’s SOC KPilot project…

The KPilot summer of code project is winding down to a close, with this Monday being the “pencil’s down” date. Bertjan Broeksema has done an outstanding job and has accomplished all that we said we wanted to on our Summer of Code proposal. The problem that we faced in KPilot was that each of our conduits did a lot of things in common, but all of them had their own code for doing these things. This has made maintenance a much harder job than it should be, and has led to some conduits being less feature-complete than they should be–not to mention having too many bugs from the duplicate code. So the idea was that each of our record-based conduits should be doing the same sorts of things as far as algorithm, process, and flow, and that we should pull as much of this common code out of the conduits and into some base classes as possible. This leaves our conduits to be responsible mainly for data transformation (turning a PC calendar vcal record into something that can be synchronized with a Palm database record), and should address the problems listed above.

But while we were at it (and while we were taking the time to think through and design how KPilot should work), we also put as much effort into making it as hard as possible for our conduits to destroy our user’s data. It’s something that needs to be carefully included in the design process, since it simply doesn’t happen by accident (not destroying data during edge cases, etc.). So we made some intentional design decisions that should hopefully result in fewer “KPilot ate my future” e-mails.

We officially had 3 main goals for our Summer of Code project:

Classdiagram1. Sequence Diagrams and Class Diagrams

We used a loose interpretation of the Rational Unified Process for our project this year. We spent 5 weeks at the beginning of the project, creating the Use Case for our upcoming work, and then laying down some Class and Sequence diagrams which showed how all of the requirements and flows from our Use Case would be realized. We used BOUML for our UML diagrams (I’d have rather used Umbrello, but Bertjan had some difficulties in getting it working on his Gentoo box). All in all, though, I believe we found a good balance between spending enough time to make sure we had a well-thought-out design and having enough time to implement it all.

2. Implementation of the abstract record framework

Since our Use Case focused almost entirely on the functionality required for all of our conduits, Bertjan was able to fairly quickly write the code for the base conduit classes. We found very few design challenges and misses during the code-writing phase, which I credit largely to the thorough work we did on our Use Case and UML models. It goes against the typical Open Source Hacker mindset to spend so much time preparing to code and not actually coding (I mean, coding is the fun part, right?). But Bertjan patiently worked with me through this phase and I think we have some really good quality code as a result. Bertjan also wrote a series of unit tests to help verify his code in the base classes.

exciting new kpilot keyring viewer3. Implementation of a new conduit as proof of concept.

Early on, we weren’t sure which route to go–whether we should try to port one of our existing conduits to the new base classes or whether we should just create a new conduit. As it turns out, we did our SOC work in trunk, which means we didn’t have a very stable code base (we’re still working on getting KPilot stable in trunk) to start from. So we decided to create a new conduit to use as an implementation for our new base classes rather than struggle with porting code and also trying to fit it into the new base system. I’ve been wanting to have a way to sync with the Keyring Palm application (encrypted, multi-purpose Palm database for storing passwords, account numbers, etc.) for a long time now, so we decided to create a new conduit in trunk to test and verify the new base classes. We’re just finishing up a few minor nits with it and hope to have it fully functional by EOD, Monday.

So, to summarize, thanks to this year’s Google Summer of Code KPilot project, we now have a solid base conduit framework that is implemented in a new Keyring conduit. Our next steps in the KPilot team are:

  • stabilize the daemon and user-visible portions of KPilot
  • finish porting the old conduits over to the new KDE4 APIs
  • port the old/existing conduits over to our new base record framework
  • stabilize, test, wash, rinse, repeat
  • look at OpenSync framework again and (now that we have a common conduit framework in KPilot) see if we can leverage OpenSync’s libraries for the underlying syncing algorithms.

KPilot progress(!!) and a fatal Plucker error

First, Bertjan is doing a wunderbar job with the keyring conduit in KPilot/trunk! I stayed up a bit last night and hacked for a while. Felt darned good. One annoyance that we’ve found, though, is that it looks like KWallet::Wallet (the KDE wallet subsystem) assumes that every program that wants to access the Wallet subsystem will have a top-level window. This assumption is not true with KPilot’s syncing daemon (kpilotDaemon). So I’ve sent an e-mail off to kde-core-devel, and hope to hear something back on it soon, but does anyone in lazy-web-ville know what the Correct (TM) way is to work around this?

Secondly, my darling little Treo 650 just this morning decided to start vomiting on my blue suede shoes every time I tried to open a Plucker document. Mind you, it worked absolutely perfectly fine before today. And I’ve installed no new software, etc., between when it worked and now. The error I was occasionally getting was this: “DataMgr.c,Line:11231, Index out of range”. Helpful, huh? Fortunately, I found another poor soul who has hit the same problem and found a solution. So I downloaded an alternate version of ZLib for my Treo (no idea whether it’s the same one that comes with Plucker–it’s 4 years old), installed it to my Treo and now things seem to work properly again. I’m not sure what the exact problem was, but installing the zlib ARMlet Port seems to have fixed some portion of the problem.

PDA’s are amazingly cool little things, when they work. When they don’t, however, and insist on rebooting themselves without telling you what broke or how to fix it, you quickly start wondering whether they’ll flush cleanly down the toilet or not….