Archive for September, 2006
One of the issuesi that mobile developers face is how to render web pages on mobile devices…. Most web publishers don’t provide a mobile friendly version of their site and this makes viewing on mobiles painful and in some cases completely unusable. Viewing issues (such as excessive scrolling) or memory pressure (when a page is laden with images) can prevent publishers from getting in front of mobile eyes. This is a problem for the developer, the publisher, and the consumer.
There are a few solutions. You can roll your own transcoding engine – if this is not your core competency it is probably too much to tackle. You can use a third party browser, Opera for Mobile is a great choice. In fact, if Opera is the default browser on your device, you can use Opera with NewasGator Go! Or you can use a service that will do this heavy lifting for you. My choice for this is Skweezer and you can also use Google’s transcoding engine!

I found Skweezer one evening while looking for solutions to my mobile rendering problems and was psyched about their offering. I sent Skweezer an email (I think it was like 1 am or so). Within 30 minutes, Kevin Perkins, the CEO, emailed me back. We started a dialog and took it from there. Kevin was coming into Denver for another meeting, and he made some time to have lunch with me. I really liked Kevin right away – very smart, honest, and hard working guy and he has a great team. He also is a very proud Dad which says a ton about one’s character.
I added the ability to use Skweezer to NewsGator Go! in a beta release shortly after meeting Kevin and have been thrilled with the results (see screen shot below).

In this example, I have Mike Arrington’s TechCrunch blog rendered w/ Skweezer. So, you will notice that ads and images have been removed and that initially may not make Mike happy. But, without using Skweezer I cannot even load this page on my Treo 700W. So, using Skweezer, I can actually view TechCrunch on my mobile, clip interesting articles using NewsGator Go! and then view TechCrunch using one of the NewsGator desktop readers (I use FeedDemon btw) or using NewsGator Online. Everyone benefits!
Skweezer rocks!
September 22nd, 2006
So, how did Oliver and Blake at MobileCrunch and Mike and Marshall at TechCrunch know about the launch of NewsGator Go! before I did? That just doesn’t seem right
Hah, they must have a crystal ball.
Seriously, I am psyched to announce the release of NewsGator Go and am really glad that these folks picked up the story! I hope it opens up the eyes of some customers who may not recognize the power of RSS coupled with mobile devices. If you have a Windows Mobile device you have to try this application. It will add a whole new dimension to your mobile experience. A ton of effort has gone into making the mobile RSS experience enjoyable and into making NewsGator Go! a must have tool in your arsenal.
 If you are new to RSS but a Windows Mobile user, then I promise you, getting the latest news and information on your device is invaluable. If you are all over RSS and in the market for a new device, take a look at Windows Mobile. These devices are awesome.
And for all you other mobile users with smart devices, that are not Windows Mobile, we haven’t forgotten about you. We will be launching an awesome reader into beta real soon that will be just what the doctor ordered. Finally, I have been working on a skunk work project that has the promise of bring RSS to everyone… more on that soon!
Take a look at the NewsGator site for all the details on NewsGator Go! and if you want to see what the application can do for you, there is a 30 day trial, so please give it a Go!
September 20th, 2006
The other day, on the Windows Mobile Team Blog, Mike talked about the process and life cycle of a feature in the Windows Mobile world. There is quite an intricate process for a feature to realse to the wild and it explains why it may take a while for a feature to come to life and why that feature should be rock solid when released.Â
Let me contrast that to a situation where you are perhaps in a startup w/ very limited resources or even a one man show and you adopt some form of Agile programming. You hopefully are building an application that solves a problem you face and already have a good idea for the base feature set. You build it, put it out as an alpha or beta and hopefully get some user feedback. You then start cranking away on the next version – usually you crank out the low hanging fruit (that which is easy to implement) and then pick the best features and start coding. During the process you are constantly testing and iterating. You then put out the next version and repeat the process until the product is ready for release. This is akin to one aspect in the Web 2.0 way of building software – “release early and release often“. On a side note, I read the “Cathedral and the Bazaar” right after reading The Mythical Man Month by Fred Brooks way back when in graduate school and didn’t realize the significance until I started actually attempting to create production software – definitely check these out if you have not already.
What you have is two completely different approaches to building software – each have their advantages and disadvantages. Which do you prefer? Or do you do it in a different manner?
September 14th, 2006
I saw the announcement about the News Corp and Jamba deal the other day and immediately sent an email to my buddies telling them that 6 months from now we will look back at this as a major inflection point in the evolution of mobility…
Although, this announcement has been overshadowed by announcements from Apple and the latest pushes in video this week, I still think this is the case. Mobile devices are capable of doing some amazing things, like reading RSS of course
Once the masses get exposed to these capabilities on their mobile devices (via channels like MySpace) the whole mobile space will benefit and flourish.
On a related note, the work Dave Winer is doing to push his River of News on mobiles is also helping the cause… even though I personally don’t see the utility in the River when I can have the Gator (more on that later), I still applaud Dave for getting mobility some love.
September 14th, 2006
The latest beta version of NewsGator Mobile is available… if you have a Windows Mobile device, check it out. It kicks butt!
Here is a list of the additions in this beta:
- Improved synchronization – a great amount of work was put into the client and the server to optimize this process. The number of round trips required to sync has been reduced and the payload for each client/server transaction has been reduced. You will see faster and more accurate synchronizations.
- A new API call, UpdatePostMetadata(), was implemented on the server to enable mobile synchronization optimization.
- Posts that are no longer current get purged during synchronization if there was some other change in the feed… previously, there was no way, other than manually marking read, to remove non-current posts on the device.
- Fixed a defect that would cause the feed data to get deleted on the device. This manifested itself as a feed indicating there were unread posts in the subscription tree, but clicking on the feed did nothing.
- Added the ability to go into offline mode while viewing posts. A typical scenario is for a user to sync her feeds and read the content while out of network connectivity. Before on every posts load, if the post had images there would be an attempt to fetch the image. This would result in the OS prompting the user to get connected. In offline mode, images and links are not rendered in the post detail view.
- Improved memory management. Instantiating bitmap objects on device causes unmanaged memory to be allocated. This memory is not automatically disposed by the garbage collector. It is now being manually disposed.
- Improved memory management by removing unnecessary data structures – posts that were marked as unread were previously cached on device. This is not necessary and these data structures and business logic was removed.
- Improved the exception handling throughout the application.
- Improved user feedback when an exception occurs. For example, a network exception is now distinguished from an invalid credentials exception to enhance the user’s trouble shooting experience when an error occurs.
- Changed application name from NewsGator Mobile to NewsGator Go! throughout the application.
- Modified the uninstaller so all files installed (and all files dynamically generated by the application) with NewsGator Go! get removed.
- The installer will not install NewsGator Go! if the application is currently in memory. The user is prompted to close the application.
- Modified the installer so it forces the user to uninstall any prior versions of NewsGator Go!
- When a user changes her location, a synchronization is automatically initiated.
- If a new user logs into NewsGator Go! all data from the previous user is now deleted. Previously, the new user’s feeds would be merged with the previous user’s feeds.
- Fixed the cleanup process so all posts older than 60 days are purges from the device. Previously, any feeds nested in folders or sub folders were not cleaned.
- Resolved a defect that was not persisted the sync failure state of a feed across application restarts.
- Added the ability to check to see if your version of NewsGator Go! is current.
- Remove non-printable characters from feed and post titles… this was causing rendering issues if a post or feed had a carriage return for example.
- Improved the process for changing the persistence location where your feed data is stored – improved the feedback and use of wait cursors to indicate long running processes.
- Resolved a defect that did not save read state changes for feeds and posts that occurred while a sync was in process.
- Resolved a defect that intermittently disabled the “Mark Feed Read†and “Mark Folder Read†menu options on the feed view.
- Replaced the progress indicator on the splash screen from a rotating PDA to a rotating NewsGator feed symbol – also removed the pink shadow from the progress indicator.
- Added a note on the first time a user logs in to indicate that a user needs to create a NewsGator account before proceeding.
- Disable the Clip Post capability from the post view and post detail view when a post has already been clipped.
- If a feed and/or folder name changes this is now handled during the synchronization process.
- Improved messaging when a user resets his sync state or when a new user logs into the application.
- Enhanced the navigation on all combo boxes on the Pocket PC, selecting the Up/Down keys now navigates the user to the previous/next control. This essentially replicates the default behavior on the Smartphone.
- Immediately verifying credential if the user changes her password.
- Fixed typo in the “Update Locations†menu option – used to be “Update Locationssâ€.
September 10th, 2006
So, you’re building a Pocket PC application against the .NET Compact Framework 1.0 and you want to support one hand operation. You have a ComboBox nestled between two other controls. Once you get focus on the ComboBox, how do you allow the user to get off the ComboBox control? D-Pad navigation would be the way to go. However, the Up AND Left keys change the control’s selection to the previous value in the list, and the Down AND Right keys change the selection to the next value in the list.
It would be cool if the Up and Down keys let you move to the Previous/Next control (like on the Smartphone). So, you think you can capture the KeyDown event, handle the event, and you are good to go… something like this would seem to do the trick:
       public Control GetNextControl(Control ctl, bool forward)
       {
           int curIndex = this.Controls.IndexOf(ctl);
           if (forward)
           {
               if (curIndex < this.Controls.Count)
                   curIndex++;
               else
                   curIndex = 0;
           }
           else
           {
               if (curIndex > 0)
                   curIndex- -;
               else
                   curIndex = this.Controls.Count – 1;
           }
           return this.Controls[curIndex];
       }
       private void comboBox_KeyDown(object sender, KeyEventArgs e)
       {
           if (e.KeyCode == Keys.Up)
           {
               // Move to the previous control and handle the event
               GetNextControl(this, false).Focus();
               e.Handled = true;
           }
           else if (e.KeyCode == Keys.Down)
           {
               // Move to the next control and handle the event
               GetNextControl(this, true).Focus();
               e.Handled = true;
           }
       }
It doesn’t work… the focus changes to the proper control which is cool, but the combobox’s selected value still changes. At this point you might get a bit annoyed and after a cup of coffee and chilling out, you end up with something like this:
       // Keep track of the previous selected index
       int previousIndex = -1;
       private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
       {
           if (previousIndex != -1)
           {
               ((ComboBox)sender).SelectedIndex = previousIndex;
               // Reset this to -1 so we only fire this logic when Up or Down is pressed
               previousIndex = -1;
           }
       }
       private void comboBox_KeyDown(object sender, KeyEventArgs e)
       {
           if (e.KeyCode == Keys.Up)
           {
               GetNextControl(this, false).Focus();
               // e.Handled = true; THIS DOES NOT APPEAR TO FUNCTION PROPERLY
               previousIndex = ((ComboBox)sender).SelectedIndex;
           }
           else if (e.KeyCode == Keys.Down)
           {
               GetNextControl(this, true).Focus();
               // e.Handled = true; THIS DOES NOT APPEAR TO FUNCTION PROPERLY
               previousIndex = ((ComboBox)sender).SelectedIndex;
           }
       }
       private void comboBox_GotFocus(object sender, EventArgs e)
       {
           // If the behavior is as we expect (ie, Smartphone) make sure that works too!
           previousIndex = -1;
       }
It’s a bit of a kludge, but it worked for me. Hope this helps.
-kevin
September 8th, 2006
Today, Dave posted about the ttl element in the RSS spec. It seems like if this was an element of - then it would be very useful for distributed consumption of podcast enclosures… at the level it seems to be not very useful.
September 7th, 2006
Next Posts
Previous Posts
Text Link Ads script error: local_89488.xml is not writable. Please set write permissions on local_89488.xml.