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 "" 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 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.

Wednesday, March 25, 2009

PockeTwit v.68 Released

After a lot of work, PockeTwit v.68 is finally ready for release. This version has quite a few new features so I thought I'd detail them here.

One of the most visible changes is the addition of "nested" side menu items. I was running out of space on the side menus and it was keeping me from being able to add some requested features, so some side menu items can now have multiple sub-items. For example, the left menu now has an "Other Timelines..." item. When clicked, that opens a submenu that allows you to search, view your favorites, or view the Public timeline.

The multimedia capabilities of pocketwit have recieved a major ovehaul thanks to @roelvandenbrand. Roel had been requesting that I add support for image posts to for quite a while. Eventually he saw it just wasn't going to be a high priority on my list so he decided to implement it himself!

Once he got started, he did way more than just add mobypicture hosting-- he put in a system that lets the user choose from several image hosts. He also changed the posting process so it uploads a picture first, THEN gets the URL and puts it into the post (so you can see how many characters it will take up). He even implemented a way to fetch images from the hosts, so we can show thumbnails of images from other posts without having to actually launch a browser. Be sure to set which picture service you want to host your images in the "Other Settings" page.

I've also added a new "addressbook" for posting. Sometimes you want to include someone's @name in your post without having to find one of their posts to @reply. Now if you start typing "@p" in the post screen, it will pop-up a list of all users in your addressbook whos screen names start with "p". This makes it easy to select that username and have it inserted into your post. It also works for "d " (direct messages) as well.

Unfortunately twitter does not provide an easy way to get the screen names of everyone you are following, so the addressbook is automatically filled with users from your Friends and Messages timelines. As you receive more status updates and messages from other users, they are added to the addressbook.

Some other minor features have been added as well -- you can now copy the text of a selected item to an email. There's an option to automatically scroll to the top of the list when new items arrive.

There's also quite a few bugfixes, and it might even be a little better about memory and battery usage.

I hope you enjoy the new version. If you have any ideas you'd like to see implemented in the future, be sure to go to our Uservoice page and submit them.

Tuesday, February 3, 2009

(Late) Introductions

I often feel like these "who am I" blog posts are a bit self-serving and egotistical. But as PockeTwit gets more and more users I finally decided that some people might benefit from knowing a bit more about where it comes from. And since I haven't actually posted anything on the blog in a while, it would at least add some filler.

First things first -- I am not associated with Google in any way. Yes, the project is hosted on Google's servers, but they provide free hosting and source control for any open-source projects. As much as I'd LOVE to work for Google Labs, they still haven't contacted me with that sweet job offer yet.

Second, it's just me. There's no "Team PockeTwit" or startup corporation or anything like that. Just one guy who was feeling a bit bored and decided he needed a hobby project. Some folks like to pretend their software comes from a nameless company and has a staff to support their user's every need (yeah, I'm looking at you TwitPic!). Not here. I answer the emails. I answer the tweets. I write the code.

Which brings me to the final bit -- Why? I do it because it's fun. I had finished a previous project experimenting with writing .NET for my phone and wanted to try another. The iPhone 3G had just come out and everyone was excited about twitter for the iPhones, but the apps for Windows Mobile just felt drab. And since none of them were open-source, I couldn't just try to work on a new UI as a contribution. So I started my own. Then somehow I'm 64 releases into it!

So there you have it. PockeTwit is just a small one-guy project. Yes, I embrace the "beta culture" of software because I'm just doing it for the hell of it. And it's great that your hobby can generate something other people can use and enjoy.