A brief news update. On August 31st, Twitter is going to be disabling the existing HTTP authentication method for logging in and tweeting using the Twitter API. Unfortunately, all versions of Speeed Reader use this method to share articles on Twitter. I will not be providing an update implementing the new method (OAuth) because of the difficulty and lack of time.
As a workaround, if you use SMS to update your twitter account, you can share your articles via SMS and send them to the designated number for your Twitter account.
I apologize ahead if time for the inconvenience.
Sat down for the first time in a while to plan my next mobile software project. The two platforms under consideration, Microsoft’s Windows Phone 7 & Google’s Android….hmm….let me hear some opinions (either leave a comment or shoot me an email).
Alright, after having several interactions (software certifications, questions, etc.) with the crew in charge of Microsoft’s mobile application store, I have a couple of criticisms (constructive). Warning: I am not a writer, I am an engineer, so please excuse my improper grammar
Windows Marketplace for Mobile is fragmented
The Windows Marketplace for Mobile is available in 41 countries. Each country is then broken up into 2 platforms (Professional (touch-screen) and Standard). This makes for 81 markets you can submit applications to. This is leading to a very fragmented marketplace experience, which is frustrating for developers and customers. What’s worse is, to submit to another platform or market (country), it costs $99 per submission, which is marketed as a testers fee. More on this below. There are markets (US) with 600+ available apps and other markets only have a handful.
While I appreciate the convenience of having an on device marketplace where customers and download apps, I don’t think their is enough volume throughout the entire marketplace to justify the fragmentation.
I’m not sure how things workout for the Android, iPhone, or BlackBerry software application stores, but I have a feeling things are simpler. This is why I sell the application on my site and Handango, so I can somewhat target other regions of the world.
High Development Costs
The $99 fee Microsoft charges for access to the program is on-par with the iPhone Developer program. The fee for Android developers is actually a lot lower ($25) which is great actually. Where Microsoft differs is the $99 annual fee to remain enrolled in the program AND $99 for each major release (ie. 1.X -> 2.0 or submitting an entirely new product or submitting an existing product to a new market or platform). Microsoft also takes 30% of revenue from application sales.
I agree with all the costs, besides the annual fee and the fee for every new application submission. While Speeed Reader is popular is selling relatively well (thanks!), it’s not cost effective to submit it to other markets when I can sell the application myself or through Handango (which is completely free, besides the 40% cut they take).
I thin the solution is to combine as many markets as possible so developers can target the largest group of customers for the least amount of money. Also, more customers will be able to experience a greater variety of applications than the current choices.
Certification Testers Lack Detail (or did)
My experience with the certification process started out on a bad note. It took 4 submissions to my application into the marketplace. The 1st submission (Dec. 15th) was my fault, a crash
. However, the resulting exchange was mildly frustrating. The feedback received was along the lines of “The application crashed”. I was also given some generic test requirements which did not help me diagnose the crash. So I fired off an email to the test group for an explanation. 4.5 days later, I get a response that included my own crash handling error message. Not helpful at all. What would have been helpful (logs, stack trace, steps leading to the crash, etc.).
I did end up getting the application accepted (after 3 more submissions). The reason why? Some of the testers overlooked some prequisite testing configuration that is vital when testing Windows Mobile application. I’m not going to go into details there. One failed submission was having a in programs status message being interpreted as a fatal error. That could go either way (their fault or my fault). Finally on January 15 (exactly on month after my first submission) Speeed Reader was accepted into the US marketplace. The encouraging thing was the turnaround time for a response from a tester decreased. However, the level of detail on the first response did not.
Microsoft’s mobile certification testers should send a semi-detailed report with every failure. This would have saved me at least a week of time.
The points I am making here aren’t preventing me from continuing to develop Windows Mobile applications. They are extremely frustrating though. Honestly, I don’t see things taking off until the release of Windows Mobile 7. Hopefully by that time, Microsoft has a better handle on its platform and software ecosystem. Microsoft and Windows Mobile 7 not only has to fight for users, but developers as well!
Posted: February 5th, 2010
Categories:
Development,
Windows Mobile
Tags:
developer,
rant,
Windows Mobile
Comments:
No Comments.
As promised for all my developers out there, the 1st part of a 5 part tech walkthrough. I am no expert, just sharing information. If anything stands out as incorrect, please leave a comment and we can have a discussion.
Object serialization is a method of persisting (ie. saving) objects to files. We desire to keep these objects in their current form even after the program has been closed/exited/terminated. Object serialization is a very easy to way to this. The closest non-technical example of this I can come up with is setting up a drum set. You desire to play the drums one day. Let’s say you have an area where you can set up drums for the long term in your house. Well, in this instance, you just set them up once (we “serialize” the drum set). You can then use them whenever you like (opening the program and deserializing the drumset). When you are done, you don’t put the drumset up, you just leave it setup in its current condition (serialize) so you don’t have to set it up again.
This is exactly how Speeed Reader caching works. I create some custom classes in Speeed Reader that hold information for each tag, subscription, and article. I am able to save each subscription to a file and reload it when necessary (ex. starting Speeed Reader in offline mode). It was reasonably simple transition to object serialization to persist article data between Speeed Reader program executions.
Let’s get into an example. This code is written in C# .NET. There are some imports missing so I could keep the code concise, but those should be easy to find with a quick Google search. Here is my simplified article object.
public class Article
{
public string title = "";
public string content = "";
}
We have our very simple article class with a title and contents (would be the text of the article). Let’s define our serialization (ie. saving the class to a file) and deserialization (ie. loading the class from a file) functions.
public void SerializeArticle(Article article, string file_name)
{
XmlSerializer serializer = null; //serializer object which takes care of serializing/deserialzing our object
try
{
using (TextWriter writer = new StreamWriter(file_name)) //we use a TextWriter to write the contents of the serialized class to disk
{
serializer = new XmlSerializer(typeof(Article)); //create a serializer to serialize objects of the Article type
serializer.Serialize(writer, article); //serializes the object
}
}
catch (Exception e)
{
}
}
public Article DeserializeArticle(string file_name)
{
Article ret_val = null; //our return value, the article we are loading from memory
XmlSerializer serializer = null; //serializer object which takes care of serializing/deserialzing our object
try
{
using (TextReader reader = new StreamReader(file_name)) //use a TextReader to read the file contents
{
serializer = new XmlSerializer(typeof(Article)); //create a serializer to read in objects of the Article type
ret_val = (Article)serializer.Deserialize(reader); //deserialize the object
}
}
catch (Exception e)
{
}
return ret_val;
}
I hope its apparent how one could create a function to serialize and deserialize objects. I commented the example code. I also want to point out that since I use a XmlSerializer, my output of the serialized article will be an XML formatted file. There are other serializer types available in the .NET framework, such as the binary serializer which serializes objects to bytes instead of readable XML. Finally, a quick demonstration.
public static void main()
{
Article sample_article = new Article();
sample_article.title = "Just a quick sample";
sample_article.content = "This is just a quick sample to demonstrate article serialization";
SerializeArticle(sample_article, "sample_article.xml");
Article deserialized_article = DeserializeArticle("sample_article.xml");
}
The contents of sample_article.xml would look like. I had to upload it, WordPress was acting funny with embedded XML. Download
That about sums it up, let me know if you have any questions.
Over the next week or two I will be posting some very informative items regarding the technologies that make Speeed Reader work. It may or may not be knowledge you already possess depending on your experience in software engineering, however, I feel it may be beneficial for me and for others looking for this information. Posts will include some snippets (generalized) from actual Speeed Reader code. I am thinking about the following topics:
- object serialization
- http web communication
- multi-threading
- encryption
- C#/C++ integration
I’m also looking for ideas for my next project. A Twitter client was suggested and a media player would be a good idea.
Posted: January 9th, 2010
Categories:
Development,
Windows Mobile
Tags:
c#,
Speeed Reader,
Windows Mobile
Comments:
1 Comment.