Sunday, September 5, 2010

I Abandoned My Users (and they're doing ok without me)

It's a pretty common scenario for a developer. You get an idea for a fun project. You start working on it. You build something half-decent. Then you get bored and move on to something else.

That's all fine until someone ELSE finds your project useful too. It's exciting that other people like your project, and you work even harder for a while. But usually you still end up running out of steam sooner or later.

That's what happened to me with PockeTwit. I wrote it to scratch an itch-- I wasn't satisfied with existing twitter clients for my phone at the time. I also wanted to play with code to do something more than the usual "winforms" look for most software written for that platform. I came up with something small and put it online just to see what people thought. Next thing I knew, it grew pretty popular and a lot of people relied on it for their twitter fix every day.

But honestly, I got tired of it. My phone broke. After that I, like so many others, left Windows Mobile for a different smartphone platform (at the time the hardware specs still lagged horribly behind others). And once I could no longer use my own software to access twitter, I didn't have much motivation to improve on it.

Luckily, it was "good enough" for most users for a very long time, until Twitter decided to shake things up and change the way applications authenticated with their service. Twitter no longer allows an application to simple provide the user's login and password -- they switched to a more complex system where the user has to authorize an application through their own version of OAuth.

This change killed off a LOT of twitter applications like PockeTwit, where the original author simply didn't have the motivation to update their software. Even some that were purchased by users-- their company simply didn't have the time or the profit motivation to revamp their software. And for those applications it is probably the end of the road.

But not for PockeTwit. Because it is "open source", any developer can easily download the source code to the application and tinker. And luckily, there were a couple who were interested enough in it to update it to support OAuth on Twitter.

Thanks to the hard work of @roalvanderbrand and @ashley_brown, the latest releases of PockeTwit support OAuth and can continue to work on Twitter. They've not only tackled the OAuth issue -- they've continued to improve the application in many ways.

I can't tell you how great it was to see what started as a way for me to kill some time and have some fun be accepted by so many. But it might be even MORE rewarding to see that other developers cared enough to take up your code and continue to improve it. I've grown a lot in my development style since I started PockeTwit, and I'm a bit embarrassed by some of the code, but I feel I can be proud of what it became and is continuing to be even without me.

I'd really encourage other hobbyists to open source their code. I did so knowing fully that I would cringe as I read it later in life, but I still thought it would be worth it in case it helped someone else with their hobby as well. And to this day I'm still very glad that I did.

Sunday, August 16, 2009

WebRequest.AllowAutoRedirect Failure

The most recent release of PockeTwit has an annoying bug that causes the first request upon startup to fail with a communication error.  I finally tracked down the code to one line within our WebRequest factory:

public static HttpWebRequest CreateHttpRequest(Uri uri)
{
var request = (HttpWebRequest)WebRequest.Create(uri);
request.AllowAutoRedirect = true;
if (!string.IsNullOrEmpty(ClientSettings.ProxyServer))
{
var proxy = new WebProxy(ClientSettings.ProxyServer, ClientSettings.ProxyPort);
proxy.BypassProxyOnLocal = true;
proxy.Credentials = CredentialCache.DefaultCredentials;
request.Proxy = proxy;
}
return request;
}



For some reason, the “request.AllowAutoRedirect = true” is causing the first requests to fail with a “401: Unauthorized” from twitter!  No idea why that would happen, my suspicion is another little “gotcha” from CF.NET 2.0.



Any ideas?



Edit:  It looks like I jumped the gun and did just what everyone else does—blame Twitter’s issue on the client.  I’ve had a lot of reports that other twitter clients are experiencing the same issue.

Monday, August 3, 2009

PockeTwit v.76 Release

It has been a while, but it's finally time for a new PockeTwit update. Some new members have joined the team and have helped bring together a worthwhile release!

First of all, some bugfixes. There was an issue with the "leaked" version of CF.NET 3.7 that many custom ROMs started using. I still have no idea WHY the issue was happening, but I was at least able to circumvent it.

Also, we were installing a Today Screen plugin during the cab install, which requires writing to a portion of the registry that some carriers do not allow. I've taken that out of the install and put it into the application itself (where it can fail gracefully if necessary). So for those people out there with "locked" phones, this version will finally work.

There have also been a number of other miscellaneous crash fixes and performance improvements brought in by a new team member, @johnb2007. He jumped into the code with both feet and found a few ways to speed up rendering and improve battery usage.

@johnb2007 also contributed some new features. You can now follow anyone by entering their twitter id, rather than having to find and select one of their tweets. There is an "advanced" search dialog to help you build complex search queries. And he has added what is probably the most requested feature of all, the ability to delete one's own tweets! Be sure to let him know how much you appreciate his efforts.

@lifanxi has also joined the team to add some important features. You might have noticed he has created his own fork of the PockeTwit code that works with the popular (but currently unavailable) Chinese site, Fanfou. As a part of this effort he translated the entire UI to Chinese. We hope to take the experience he gained performing that work and find an easy way to provide internationalization for many languages within PockeTwit.

@lifanxi has also added support for proxies to the application. So if your network requires the use of one, you'll still be able to use PockeTwit :)

These guys have kept me really busy trying to keep up. We finally had to take a break and decide to release before too much was added at once. But you can expect another release with even more interesting features coming up soon.

Monday, June 8, 2009

PockeTwit v.75 Released!

PockeTwit v.75 is now available with several bugfixes and some exciting new features!

@marclandis has continued refining the today screen plugin. It now offers a list of groups with unread items similar to the standard "Messages" plugin for pocket outlook. And tapping an item in that list will bring PockeTwit to the foreground and display that group.

He also fixed an issue with QuickPost. The "Post Update" screen will now be displayed regardless of whether PockeTwit was already running or not.

There is now a "Saved Searches" feature. This will allow you to define a search and add it to your custom groups timelines. You can also specify if the saved search will be automatically checked with your friends and messages timelines, or only refresh when it's selected. For example, I've defined a saved search for "PockeTwit OR PocketTwit" and set it to autoupdate, so I know whenever anyone mentions the applications name out there. But I also defined a saved search for any posts near my house and told it NOT to autoupdate, since that would get a constant stream of chatter.

Note that PockeTwit's saved searches do not correspond with the user's saved searches on Twitter's site. Twitter added that feature too late into the development cycle of PockeTwit for me to have them match without adding a significant delay to the release. I do plan to have them synchronize in the future.

I've added support for the web service "140it.com" to help users shorten their posts to fit twitter's 140 character requirement. If your post is over 140 characters, PockeTwit will first ask if you'd like to use 140it. If you agree, it will use their service to shorten some common words. For example, it will replace the word "to" with the character "2" and use other common abbreviations. If that still doesn't get the text to less than 140 characters, it will ask if you'd like to use shorttext.com like it did in the past.

@roelvandenbrand has been trying to keep up with the flood of media services popping up around twitter and making sure PockeTwit supports as many as possible. He's added Img.Ly, Posterous, and TweetPhoto support. And thanks to TweetPhoto's support of development, it has been made the default media service for PockeTwit.

A new developer, @theMark_S ,has come forward and volunteered to write a desktop installer for PockeTwit. This will make it easier for some users to install the application through activesync rather than having to download the cab file directly to their device.

As I mentioned, there have also been several bugfixes. The most important one is a fix that allows a user in the cache to be updated. In the last release, if a user changed their avatar or screen name, PockeTwit could not update the cached information. Their avatar would appear as a question mark or their screenname would not be updated. I'm glad to say that bug has been fixed!

As always, thank you to all the PockeTwit supporters out there. This project has been a tremendous learning experience for me and I'm very glad that you find it useful.

Announcing an Agreement with TweetPhoto!

PockeTwit v.75 is very near done and I'd like to take a moment to announce an agreement with TweetPhoto before the release. It's not the only new feature in PockeTwit, it's probably not even the most important new feature. But it is very exciting to me (for obvious reasons).

When I started development of PockeTwit, I did it with absolutely no financial incentive in mind. I had a good job that paid what I needed. I was just glad to share my work and allow others to enjoy it.

But times and situations have changed and I can no longer afford to be so single-minded in my motives.
Thankfully, TweetPhoto has come up with a simple plan to support PockeTwit development that requires almost no effort from you. If you use PockeTwit to post images to TweetPhoto, any advertising revenue for the page hosting the photo will go to PockeTwit. It's that simple.

Of course you can still choose one of the many other media services supported by PockeTwit. And I won't bug you about that too much, I promise! But if you want a hassle-free way to show your support, this is it.

I plan to release a version of PockeTwit which supports TweetPhoto (and has a lot more!) very soon. Be on the lookout, then take lots of pictures!!

Saturday, April 18, 2009

Tiny but Powerful!

Just because your phone is smaller than a PC, it doesn't mean your app can't be full-featured!

PockeTwit v.71 is out with some great new stuff. This is the release I've wanted to make for a long time, but had to build the foundation to lead up to it. I needed nested (and dynamic) menus to be able to fit everything in!

PockeTwit now has grouping-- a feature usually reserved for a select few desktop twitter clients. You can now group users together in categories to make it easier to manage the stream of information from people you follow! You can "copy" a user to a group, meaning their posts will still appear in the Friends timeline, or you can "move" them to a group so they no longer appear in the main friends stream.

And it gets better, you can specify notifications on a group-by-group basis. Make your business group vibrate and play a loud sound, but move yourself into a silent group so you no longer get notifications about your own posts. Can you tell how excited I am?

In addition, @roelvandenbrand been hard at work on the picture service integration. He's added two new picture services-- Pikchur and Twitgoo. He also took the feedback from users to heart and it no longer requires two taps to get the URL into your status. And it's able to post the message to those services that support it (like twitpic).

And that gets better too! It can ALSO post the GPS coordinates to services that support it like MobyPicture and Pikchur! So now someone viewing the image on that service will see your image, your message, and the location it was taken! I'm really glad Roel's taken this on-- PockeTwit's becoming one of the best clients for on-the-go twitter media that out there.

Another developer has joined our team, providing an often-requested feature -- a Today Screen plugin! @marclandis has put together a plugin for the today screen that cycles through how many unread items you have in each of your timelines. It can also be used as a quick-launch shortcut to open the application. We've been wanting this for a long time, but I didn't have the C++ skills to make it happen. Thankfully someone else did :)

I've spent some time working on the memory and speed issues. I don't think the memory issues are completely solved, but I expect it's gotten a lot better. And the application loads significantly faster with this release.

And be sure to check out the new themes-- Sunny, Mint, and Ice. I'm no graphic designer, but I'm slowly moving to more advanced visuals. I think a lot of people will like the way these look.

As always, I want to thank everyone who's provided feedback throughout the development process. The nice thing about working on a communications client is that it provides an easy way for users to tell you what they think!

Saturday, April 4, 2009

Talk about Mobile Development at altnethouston Open Spaces

I'm spending this weekend TALKING about development rather than writing code, and so far it's been a great experience. Most of the groups I've participated in have been about code quality and agile development practices. And I have to admit I've been behind in both those areas for a while now.

But I also convened a discussion about Mobile Development, something I've learned a LOT about recently. As it turned out, none of the people who came to my discussion had any real experience with mobile development yet, they were mostly interested in learning about it. So I ended up giving an impromptu presentation on how the special considerations you need to keep in mind when developing for mobile platforms. Overall, I think it went pretty well.

I've put up some notes about the topics I covered on the houstonaltnet wiki. Maybe I'll refine this and give it as a "real" presentation some day.