Tuesday, May 16, 2006
Tomorrow night I will be speaking at the Fox Valley .NET User's group, giving a presentation of the Compact Framework version 2.  If you're in the Appleton area, stop by and say hi.
Tuesday, May 16, 2006 1:53:47 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Wednesday, May 10, 2006

For now I will be using StarUML, untill I find something incredibly annoying with it or I find something better.  This tool has full support for UML 2.0 diagrams and semantics, seems to be a native win32 app (not some mind numbingly slow Java gui) and is generally straightforward.  StarUML also includes the notion of an "approach" to modeling: Basic approach, 4+1 view model, Rational Approach, and UML Components approach.  UML components was a great, precise,  but seemingly little known book written by a couple of modeling old-schoolers, one of whom was the author of Object Constraint Language, annexed to the UML.  I figured any tool that has a UML Components icon has to be on the right path and I spent a lot of time learning this tool.

Here is a partial class diagram I just did:

And a sequence diagram I am starting on with an idea of what the UI looks like

My complaints are small so far.  There are some user gestures (like Ctrl-Tab to switch documents) that I'd like to see impemented.  One nice thing that Visio and other tools do is to route relationships/connectors with only right angles which I think looks very nice.  StarUML has the ability to export models in XMI or Rational specific format as well, mitigating the risk that I'll change my mind and go with another tool later and need to scrap the drawings I have.

Wednesday, May 10, 2006 1:17:41 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, May 09, 2006

Today I had my final straw with Visio's UML support, mostly in how it attempts to "validate" my model for me.  The UML support appears to be an afterthought anyway.  I need to create some models for posterity and leave behind the models as well as instructions on obtaining the (hopefully free or cheap) tool to open the models.  My last Real modeling was done in Rational which is not an option for me right now.  I have used ArgoUML in the past and ultimately didn't care for it.  My next attempt today was Together's Design tool plug in for Visual Studio.  I had to register to download the eval , strike one.  I had to install some ridiculous Borland specific download manager Active X plug in, which scored me a completely corrupted download the first time I ran it, strike two.  Upon installation either the very simple License key instructions (save this file to My Documents) or the license key itself were wrong and the add-in wouldn't run due to license validation failure, strike three, uninstall.

I then headed over to http://www.uml.org/#Links to find a list of tools supporting UML 2.0.  I am currently downloading "StarUML" and I'll report back based on what I find.

I'm still disappointed that Microsoft does not have a REAL modeling tool to compete with Rational/IBM.  Visio and the Class Designer in VS2005 don't cut it.  If anyone has suggestions let me know.

Tuesday, May 09, 2006 2:48:13 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Friday, April 21, 2006

The compact framework team has released a beta version of Service Pack 1 for the compact framework version 2.  You can download the packages here: http://www.microsoft.com/downloads/thankyou.aspx?familyId=6548dd53-a418-42d9-a481-19ba3ceca1a6&displayLang=en&oRef=http%3a%2f%2fblogs.msdn.com%2fnetcfteam%2f.  You can read the details here http://blogs.msdn.com/netcfteam/archive/2006/04/21/580901.aspx ; one of the highly anticipated features of this release is the ability to run CF2 applications on CE.net 4.2.  I have one client who has been waiting on this feature for a long time due to a hardware investment that won't allow their converting to CE 5. 

The package contains a Visual Studio patch as well as the standard device updater application.

 

Friday, April 21, 2006 2:43:48 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Sunday, April 16, 2006
Lab
I just ordered a desk ( see here) for the research lab in the new house.  I am very much looking forward to doing some research projects and finishing some toy projects.  It seems that I am very close to being utterly caught up with all of my side business clients, in which case I can move back to doing things for fun.  I feel like I have been sorely neglecting the research and growth side of my career in favor of making $$ and maintaining the status quo.  This is no good.  It is whoring, not geeking, when every time you turn on a computer the billable rate is ticking.
Sunday, April 16, 2006 7:04:56 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, April 13, 2006
I am finally writing a post from my new house.  My furniture is not here yet but I did have the foresight to take care of important things like making sure cable internet was h00x0r3d up.  I had to hang out with the city inspectors for a while to get occupancy for this weekend but here I am.  Over the next week I will be setting up my lab.  One's environment has a large effect on the work one does and general effectiveness and frame of mind.  I hope to be able to leverage this to produce a couple of cool research projects this year.
Thursday, April 13, 2006 8:46:57 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Wednesday, April 05, 2006

RDA, sometimes so good, sometimes so bad.  I post about data synchronization to mobile systems a lot because its one of those interesting problems to me.  There are many ways to do it, Merge Replication is one.  Merg Rep comes with so many drawbacks I could write a decent sized essay about it.  For now I'll just say that if you are considering merge replication you should try to talk to someone with experience implementing it and make sure you want to go down that path.  Synchronizing a read-only database is easy with merg rep or without using custom code.  Synchronizing a read-write database with custom code is a non-trivial endeavor.

Having written and re-written such things several times I have tried various methods.  After my first attempts at remote rebuilding a 100 meg database on a 200mhz strong arm over the internet using web services I decided that RDA needs to be a part of any solution.  RDA allows one to pull down SQL Sever data in a nice binary format that automagically turns into an SQLCE table schema and table data as it streams down to a mobile device.  You can push SQL data using RDA as well, but I don't like doing so for various reasons.  Since RDA is streaming data over HTTP it also gets you around some ugly memory issues.  Consider your woe when your XML message containing 10,000 rows of data is easily spit out by your server but runs the mobile systems out of memory every time.  Segmenting large messages using many XML calls quite frankly feels dirty as well.  As far as rebuilding that 100meg database over the internet, RDA is great.

On my current project we do frequent data synchronization over an AirLink modem.  These things are truly great but they have data rates that are woefully slow in a world that has become accustomed to cable modems and burstable ethernet.  We were having situations where in-office testing would have a sync time of say a minute and a half for a good amount of data.  However in the field some locations were so bad (-110 db signal strength or worse) that this same data packet was taking 20 minutes to process.  This is unacceptable.  Since I happen to have a method to FTP the handheld log files to myself I started doing some log file forensics.

In addition to low data rate, these CDMA modems have high latency, 500ms ping and such.  Every additional trip to the server was incurring large overhead in just making the request.  My data sync that was making an RDA.Pull("select blah blah from blah blah where DateLastChanged > myLastSync") for each table that was fine in our office (where the connection SUCKS butt apparently not as suck as some of our remote locations) but not fine over a low data rate, high latency, in-a-black-hole parking lot where our trucks must operate.  In testing with the SQL server DBA we have noticed an inexplicable overhead for each RDA operation that is about six seconds over a good connection and skyrockets exponentially on a bad one.  While we work out issues with other modem providers (Sprint, Verizon, and Cingular are the big players, Sprint is currently working but connectivity sucks in many areas) a solution was needed.  In the process of making my remote operationgs more "transactional" (after studying F# and what it's all about a tiny bit I dislike the common usage of the term idempotent, which I will explain in a future post) I ended up building multiple code paths for the data sync based on how much data was to be exchanged.  A full rebuild or "very large messages" will still use RDA and execute one pull per table, but in many cases the data package can be sent and received as one large XML message.  I had avoided this approach as long as possible due to the bloat of encoding everything as XML and the potential for memory problems on the clients.  I've found that an "average" XML message is about 179kb which makes me nervous given the CF 1.0 max stack size of 640k and my assumption that the webservice client must load the entire message into memory before it can deserialize it.  If this does become an issue I will do some column mapping such that <FuelDeliveryTransaction><FuelDeliveryTransactionId>12345</FuelDeliveryTransactionId><TotalPricePerGallon>$2.78</TotalPricePerGallon></FuelDeliveryTransaction> in a message becomes <FuelDeliveryTransaction><0>12345</0><1>$2.78</1></FuelDeliveryTransaction> and thereby saves many bytes of data over hundreds or thousands of rows.

I would say "Bring on the high speed wireless connection to every corner of the globe", but Johnny Mneumonic had a traumatizing effect on me.

Wednesday, April 05, 2006 8:56:49 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, April 02, 2006
I will follow up on my solution for the "transaction" post later, however with that problem solved I have a more immediate need: I'm looking for a free Code Coverage tool for .NET.  I found a lot of blog posts pointing to CoverageEye but I wanted to know if anyone is using anything else and having good experiences?
Sunday, April 02, 2006 2:20:28 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback