In my previous post I indicated that I was having some issues with the Sync Tester tool being ClickOnce deployed. I've spent a few hours trying to isolate the problem, intially fearing that my code was faulty, or that there were some deployment dependencies that I had missed. This wasn't the case and it turns out that it appears to be a fault with the application being ClickOnce deployed. Once I have installed the application on the local machine (the download site has changed to allow local installation now) if I copy the contents of the application folder to say c:\temp\SyncTester and run the application it works 100% and can continuously synchronise against any publication. However if I try to run the exact same application from the ClickOnce installation folder (typically something like c:\documents and settings\<user name>\Local Settings\Apps\2.0\......) it fails with a "Internal error: Invalid reconciler parameter" message. This is really easy to replicate, just go to the download page, install and run the application and try to sync against any publication (this will fail). Copy the files to a new location and it will work! Go figure???
One of my readers, Alice Marshall, has pointed me to an interesting article that talks about SOA. I would highly recomment checking out this post as well as what Dr Craig Miller has to say.
Champion of occasionally connected (aka smart client) data, Steve Lasker, has posted on how to configure SQL Server CE to run as a database for your ASP.NET website. Essentially it is a simple as adding the following line of code:
As Steve points out the scenario that this was originally added for was building sdf files (ie SQL Server CE database files) on the server side before being shipped out to the device. Although merge replication is great for synchronising changes. Unfortunately it is not particularly good for the initial download of data to the device. I recently synchronised (from scratch) a 20Mb datafile to my K-Jam and it took over an hour (requiring continuous connectivity during this time). The actual download of data took only a fraction of that time; it appears that a significant amount of time is taken applying the data to the database. As such it is preferable, for the initial setup, to build this file on the server and just download it to the device.
In my previous post I have started to put together some tools for working and debugging merge replication. Unfortunately I'm still having issues with the ClickOnce deployment of the SyncTester app. The second app to be put together is going to be a webservice that can be used to prebuild a SQL Server CE database with specific publications. The scenario goes a bit like this: Your application starts up, determines that it doesn't have a database, makes a call to the webservice (passing through the details of the publications that it wants the database to be subscribed to), the webservice communicates to the server database and builds the sdf file, the webservice passes back the download location for the sdf file (or you could actually pass back the sdf from the webservice), the sdf file is downloaded and the application continues to load. More info on this app when I get time to build it ;-)
Yesterday we were busy trying to work out why our synchronisation was breaking when we changed networks. To do this I wanted to abstract away the database synchronisation from both our application and sql management studio (since you can't really afford to have that installed on every client machine you are going to work with) so I built a very ruidmentary app that would setup a database file, setup the sync and then allow us to repetitively sync against the server. While it was syncing we could then disconnect/reconnect network connections to see what effect it has.
Last night I decided that this app would be a great tool for the community to have access to as it could be easily run on any client machine to test whether you could sync to a particular publication. So, last night I invested a few hours to tidying it up (just a little) and publishing it (thanks to ClickOnce). Anyhow you can take the early version of this app for a test drive here. Let me know what you think, what features you would like and whether you think this tool is useful? Also, let me know whether this is something that you would like to have the option to install (rather than just running online as is the current configuration)?
(Although this app relies on SQL Server CE RC1 it doesn't install it on the local machine as it uses dll deployment. Let me know if the application doesn't work for whatever reason!)
Update: Unfortunately the ClickOnce deployed version doesn't seem to be working properly. I should be able to fix this today and will post an update when it is ready for further testing.
Over the weekend I was asked a couple of times what podcasts I listen too and how do I find the time? Well the short answer is that I only find 30min (approx) on the way to and from work. I catch the train which usually entails a 10 minute walk to the trains station, 5 mins of waiting for the train, 10 mins on the train and then a further 5 mins walk to the office. As such I usually end up listening to about a podcast (occasionally 2) a day. I typically choose from the following list:
<Self Promotion>The Microsoft Developer Show - A (mostly) weekly show that features developers around the world working with Microsoft technologies</Self Promotion>
Arcast - A great architecture show hosted by Ron Jacobs out of Microsoft (speaking of which he will be visiting NZ next week!)
Dr Neil's Notes - Neil Roodyn's weekly synopsis of what is happening around the traps
UberTablet - Mr Tablet PC himself, Hugo occasionally finds the time to talk it up with people doing things in the Tablet/UMPC space
OnTheRun - All the technology you can get your hands on and more
dotNetRocks - One of the longest running shows and IMHO goes for too long and tends to be drawn out. Still a great listen but you need a good hour of time to kill
HanselMinutes - I've only just started listening to this show and it's been great. A wide cross section of topics!
SQLDownUnder - Greg Low talks about everything data and not just with people down under
The other point of interest that came out of SQL Code Camp followed Adam's insightful presentation on Reporting Services best practices (which would be more appropriately labelled "Adam's rules to better reporting"). On the way back to the city I asked Adam who he turned to for information on user interface design. In typical Adam fashion his answer was himself. One of the concepts behind the product we have built at Intilecta is that there are two distinct parts, the core delivery platform (otherwise known as the content delivery platform or the CDP for short) and the content itself. Unlike most ISVs who build a product then worry about how it looks, a large proportion of our development resources (and testing) have gone into building intuitive, effective and minimal interfaces. To this end we have a number of reference books that we consult for opinions. We also try to read a number of design oriented blogs and other design critiques. A couple of the names that are worth a read:
If you know of anyone else who has a great eye for user interface design, please feel free to add a comment!
P.S. did you know that there is a new member of the DPE team in Australia, Shane Morris, who is a User eXperience Bloke!
Although VB.NET has in the past missed out on some fairly crucial language features such as anonymous methods and iterators (both absent from VB2005 which shipped with .NET FX 2.0) it seems that it is going to edge C# out in the race for the most obscure operators. Mitch posted about the C# implementation of the "because" or "justification" operator. The VB.net equivalent will looks something like:
1 + 1 = 2 because 2 - 1 = 1
1 + 1 = 3 because true
1 + 1 = 3 justbecause
Although the implementation is a little more wordy (literally) they extended this concept by adding the "why" operator. For example
why 1 + 1 = 2
The real question would be what does the why operator return and where could you use it. Well in the simplest terms the why operator allows the framework to expose any previously defined truths. For example in Mitch's case where he defined the truth 1 + 1 = 3, you could write the query why 3 + 3 = 9 which would return a proof which includes the truths (1 + 1 = 3, 1 x 3 = 3) as well as an execution plan in the form of a proof tree indicating the order that these truths are applied.
You would think this would be something that C# could easily add into their syntax, allowing you to write:
¿ (1 + 1 == 2)
But unfortunately I have it on good authority that C# will not get this feature as they deem it to be too productive and is a security hole as it allows the developer to query the logic of the .NET Framework developers at Microsoft.
Ok I have to admit I'm a big fan of everything Office 2007 with one MAJOR exception. The synchronisation built into Outlook 2007 sux and is considerably worse than Outlook 2003 - don't ask me how it can be worse but it is. I used to synchronise using RPC over HTTP so that I can sync regardless of what network I'm on. For some reason this seems to hang. To get around this I now connect to the VPN and sync using the LAN. This was acceptable until today. I've been sitting at SQL Code Camp (NZ) on the CafeNET wireless network (plug for the kind sponsors of this event) and despite being connect to the VPN I still can't sync my mail. I can however access the OWA web client at reasonable speed - go figure. Microsoft you MUST learn how to build a product that can synchronise, afterall it's just not that hard.
Update: After a thinking about this post again last night I realised that I should probably include some footage of exactly what's going on and why I think that the information provided to the end user in Outlook is pathetic and occasionally just plain wrong! Here is a rough sequence of images (thanks to SnagIt) that shows just how bad Outlook is. Remember I am connected using a VPN connection and I can not only access my email using OWA, I can also access the fileshare on the same server that Exchange is running on (we are using Small Business Server).
Just Connected: This seems to be quite sensible, Outlook detects that I've connected to a new network so it goes exploring to see if it can communicate with the exchange server
Sending Completed: Progress indicator states that "2 of 3 Tasks have completed" - ummm, I only see 2 tasks in the list and only 1 of them states that it is complete.
Not Really Completed: Hang on, the progress indicator states that Sending was completed, yet I still have mail waiting to be sent (I actually pressed send yesterday morning and have been waiting over 24 hours for this to go - I'm glad this wasn't an urgent email).
Now there's an Error: Oh, so now Outlook has realised that yes there were indeed only 2 tasks and that neither could be complete because the server is unavailable (remember at this stage I can still access everything on this server)
Still no connection: Now Outlook has completely given up and stated that it is just disconnected (read: I can't access the server, not my problem, fix your connection and I'll try again but in the meantime it's not my problem). Again remember I can access the server (and it's not even that slow)!!!
Update 2: Turns out that half my problems were related to my Small Business Server (which is of course running my exchange instance). This server has been extremely reliable but decided over the weekend to "require a reboot". Of course there was nothing in the event logs to indicate this and AFAIK there was no way of my working out what was going wrong. I was online talking with SBS guru Wayne Small when I decided to logon using remote desktop, check for (and install) any updates and then reboot the server. Not sure whether it was an update or the reboot but the server seems to be ok again and I once again have email (on either RPC over HTTP or VPN connection). The moral of this story is still that the error information is not good enough.
One trick I did learn from Wayne, that perhaps was in the Outlook 101 lesson I must have missed, was that if you hold down Ctrl and click on the Outlook icon in the taskbar there are a couple of additional options in the pop-up menu. The one that helped me out a little was the "Connection Status..." item. Great tip if you are having connectivity/sync issues with Outlook. Thanks Wayne!
Over the last couple of days I have rebuilt my laptop with the RTM build of Vista. As expected there have been a few hurdles, the biggest of which was getting replication to work. With SQL Server Management Studio I could easily create the publication but setting it up as a web virtual directory (so that it can be subscribed to by SQL Server CE) was another matter. After installing Vista I went into the Add/Remove programs and selected the IIS windows component. Unfortunately this doesn't include the II6 compatibility API - which most applications that were designed for II6 and earlier use. To get the virtual directory setup you need to install the compatibility API by checking the option selected in the following image (you also need to be running SSMS as administrator to communicate using these APIs)
So you have probably heard about Live gadgets and if you have been playing with Vista you will have see the SideBar Gadgets but what you may not have seen are SideShow gadgets. What's a SideShow, well it is the small display on the outside (typically) of a laptop that could show things like the time or information about the song that is currently playing. It is very similar to the reduced display that some mobile phones have on the outside. Well the great news is that it is going to be possible to build gadgets for the SideShow. Without steeling his thunder I suggest you check out Daniel Moth's blog and the the SideShow blog for more information. If you are interested, you should also keep tabs on the new .NET Micro Framework.
I've often wondered if there is a good service out there for managing your profile that has integration with blogs etc. Anyhow yesterday I came across wHooiz and created my profile. Check out wHooiz Nick Randolph?
Update: While I was out and about updating profiles etc I figured that I would set up my Technorati account too. Anyhow here it is my Technorati Profile
Earlier this year at TechEd Australia I sat down with Ron Jacobs to record a show for Arcast. SQL Server CE was still called SQL Everywhere back then but don't be confused this is still great technology. Head to Channel 9 and have a listen to what we are doing here at Intilecta and what I did at AutumnCare on building occasionally connected applications.
This morning I was in the middle of listening to a webcast when OneCare pops up and declares that it is going to apply an update. I'm getting used to the annoying bubbles that keep popping up to indicate the OneCare is yet again update (probably my fault for not disabling them) but this time the update notification took the form of a dialog that needed to be dismissed and looked like the following:
Now I'm no security guru, but the fact that "OneCare will not be available" while it is doing the update leads me to believe that my computer is exposed to viruses, hackers etc. In actual fact I
suspect hope that this is just the wording of the dialog and that in fact OneCare is still functioning as my virus protection and firewall while the update is being applied. Perhaps this wording needs to be improved to encourage users that their computer is still in fact safe.