Tuesday, July 20, 2010

WP7 SqliteClient Preview

WP7 developer devices are already out in the US and I still hope I will qualify for one here in Italy. I would really love to test one. Brandon PLEASE don't forget me :)
As my proposal was a better port of the Sqlite engine I did some optimizing on the engine and also implemented/adapted a SqliteClient that is easier to use than normal sqlite3 commands.
At the "engine" part I use the journal file persistent this way the engine doesn't delete and create the journal at each command. I've also eliminated SQLITE_DEBUG from conditional compilation symbols spares some temporary file access.
For the client at the beginning I've wanted to compile the System.Data and Sqlite class from Monotouch, but after looking a little bit at the source code I've realized that there are tons of things that doesn't make sense on WP7. I wanted to keep it simple and searching I've found the SqliteClient.cs written by Frank Krueger for Monotouch. I've adapted the class to run with our library and got a pretty nice result.
I've also improved the test project and now you are able to set how many rows will be inserted, select the inserted rows and see the elapsed times for insert/select commands. For the insert I've tested two methods: the first with prepare, step, finalize and the second one with sqlite3_exec (which should be the same) and the insert time are more or less the same.



Anyway it's only a preview as it was not intensively tested and because it can be improved. If some of you find ways to optimize the library please let me know and I will post it for everybody. Also let me know what you think.


Here you have the link to the source code

NAMASTE

Sunday, July 18, 2010

WP7 IsolatedStorage speed improvement



If you remember some time ago I did some tests on the IsolatedStorage and the speed was not very impressive (it was 127 slower than the FileStream). In the new beta version there is a TREMENDOUS improvement. I rerun the old test in the new emulator and these are the results:

Dividing the two values 0.0632/1.1866=0.0532 which is almost the same with FileStream. At this point it does make sense implementing/porting a database engine on IsolatedStorage. Well done WP 7 Team on this aspect.


NAMASTE

Friday, July 16, 2010

Compact Framework Network Printing

As usual a lot of time without posting but I had no time. I am really excited about the beta tools of WP7 (2 days ago I felt asleep while installing the beta cause the only time I have is after 11 p.m.). I also did some improvements on the Sqlite port but I will post it as soon as it will be usable (I plan to compare the performance with Perst even if it's a different approach).
I am posting this because I lost almost two days and maybe someone that needs it will find it right away. My task was some labeling process using MC9090 devices and Zebra S4m printers. I decided to go for in-memory parameterized forms. The client application uses two method for connecting to the printer:
1) Some of the printers have ethernet port and it is quite simple to communicate with the printer as you will open a socket to 9100 port and send the commands to the printer. This is simple
2) Other printers are connected as shared printers from pc's. This one should also be simple but it gave me a lot of headaches and mainly from my fault. I have two approaches:

a. The classic one that you would also do on Windows applications is to invoke CreateFile with the UNC name of the shared printer. My mistake with this approach was that I set the main window as TopMost and when calling the CreateFile windows mobile it will pop up a networking window where you have to insert the user name and password to use for authentication (this even if Guest access is enabled on the shared printer). So this approach was working but as I did not see the pop up window I thought it doesn't work

b. The second one is a little bit more complex. I am invoking WNetAddConnection3 to map the printer as a local resource (when using this method you can also pass the username and the password) and than using CreateFile on the local resource. After sending everything to the printer I call WNetCancelConnection2 to remove the resource (not really optimized but works). The second one seems more stable

The only annoying thing in this moment is the POCKET PC networking pop-up that tells me that the job has finished printing. I want to disable it (I think that it's something to do with the registry) but didn't find the way yet.

I am attaching 2 files Print.cs and Networking.cs. Print.cs has two methods one with authentication and another without.

Hope someone will find it useful


Namaste


Wednesday, June 23, 2010

WP7 Suggestions

Today at Remix I had the opportunity to play for the first time with a WP7 device (it was an LG flashed with a build from last week that includes the XBOX Live hub) . The device looks nice and pretty responsive.

Playing with the LG there are some suggestions that came me to mind and that could be implemented (improvements from my point of view):

  • In the call answer menu in the current build there is a big image and two small buttons (Answer and Deny I think) . There is a lot of space for more functionality. One would be the ability to deny a call using an SMS message (I am using it every day on my Omnia 2)

  • This one I've already posted on the WP7 forum. It is important for developers to receive error reporting from applications that they've posted on Marketplace (of course ask the phone user if he agrees to send that error). It would be a feature that would make WP7 Marketplace unique and more attractive.

  • At this moment (from what I've understood) silverlight applications can only intercept the Back button. It is important to be able to intercept/use also the Search button (I saw that this functionality is currently implemented into Marketplace). This way the developer doesn't have to put another button on the UI.

Namaste

WP7 Device Request

What better time to blog than during a conference (I am attending ReMIX in Milano). As every Windows Mobile developer out there I would love to have a test device before the official launch. So when I read the post of Brandon Watson about the availability of developer devices in July I've "spammed" him with a message on Facebook and he put me in contact with Microsoft Italia. Today I had the pleasure to talk with Lorenzo Barbieri which told me that it will be difficult (almost impossible) to have a test device without an application proposal that really requires a device (because in Italy there will not be many devices available and there are some "big names" in the queue to which Microsoft wants to "push" the new device to). Of course I started processing to find something that would justify a developer device. The bad thing is that all our end-user applications rely on "features" that are missing from the initial release of WP7: Wasabi (used internally by Maybelline Italia, Mediaset, Samsung, L'Oreal developed for DP&V) uses Sql Ce with replication so is definitely out, our s.f.a. solutions (Neomobile, Memo) are using printing so without socket they are also out (I have to look at HP WebPrinter which might be a solution for this part). The good thing is that I could finish (or at least make it usable) the Sqlite library for WP7 (my second post on the blog). I will definitely need a device to test :) this way I don't risk to develop/optimize something that isn't usable on a real device.

Hope my proposal qualifies

Namaste

Sunday, June 20, 2010

WP7 Marketplace Limit download size over 3G

I was looking at the Teched sessions and one of the aspects that cut my interest was the limit for application download using 3G network (maximum 20MB). It's a choice that Apple made and from my experience with the end user they are loosing clients for some applications. For example A friend of mine that owns an iPhone, uses it, loves it but is not able to connect it to a PC via iTunes. It's not said that somebody that will own a WP7 will also know how to connect it to a PC (it's a sad reality but it's like this). A lot of people will buy a "trendy" phone but don't know how to use a PC, or more are not interested in connecting the phone to the pc.
Another scenario would be that I am in a town, don't have a car navigator but I need to arrive in some place in town and I don't have an internet connection besides the one my WP7. In this case I would happily pay 40Euro to download TomTom with Italy map and I would wait 5-10 minutes to download it (download size around 400MB).
So why "block" the user buy applications that they are interested/need it? The price in Italy for unlimited data traffic it's really small (Tim Italy offers unlimited unlimited data transfer from for just 2 Euro/week but only from the phone)? Ericsson declared that the world wide data traffic over the cellular network surpassed the voice traffic.
If battery it's a problem wait for the user to connect the power plug. I personally would prefer not to power up my pc, connect the phone and download the application especially if it doesn't matter if I download using 3G or ADSL. You are also cutting off the users that don't have internet at home but have the latest phone on the market in their pockets and those are the users for which the price doesn't really matter.

The only reason I can think of is if the voice provider Vodafone, T-Mobile is imposing a maximum download size (it would be strange, but also in that case I cannot believe that all the providers have the same conditions).


So my way would be WARN THE USER but if he agrees DON'T LIMIT HIM

Namaste

Tuesday, June 15, 2010

WP7 Multilanguage App Proof Of Concept

For quite a while I wanted to write this post but always the same problem NO TIME. There is nothing innovative, but it's something that you might need/use in your apps. As you know I am romanian, I live in Italy and I usually develop in english :). So we usually add multilingual support to our solutions. The way we did it in previous version of Windows Mobile(Phone) is using xml files. I've implemented this mechanism slightly changed for WP7. I've added xml language files as resources to the solution. Each xml file has a tag which gives us the culture.
language name="English" culture="en-US"
I use it to set CurrentCulture and CurrentCultureUI of the current thread (it's just a proof of concept that can be improved).
Inside the language tag we have all the classes (xaml pages) with the various controls and properties that need to be set :

class name="MainPage" Title="Main Page"
control name="textBlockPageTitle" Text="MY APPLICATION"
Obviously it's easier to look at the code than to explain it. I also use a singleton class to share the XDoc, loaded from the xaml language, between various pages of the project and also to "translate" the pages.



There are still some problems with the ApplicationBar as there is no way to get a reference to the MenuItem using the name (when you debug the property doesn't even exist). I think it's a problem/missing feauture of the CTP. The solution I've adopted is to add a control name that doesn't exist on the page "AppBarMenuItem" that has 2 attributes Index and Text. This way I use the index to set the text of the MenuItem

control name="AppBarMenuItem" Index="1" Text="First"

The sample attached to this post is a project with 2 pages. If you need more details or you think it's useful please let me know

MultilanguageApp.rar

NAMASTE