<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Chris Tacke</title>
    <link>http://blog.opennetcf.com/ctacke/</link>
    <description>Bringing Managed Code to the Embedded World</description>
    <copyright>Chris Tacke</copyright>
    <lastBuildDate>Wed, 16 May 2012 17:14:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>ctacke@opennetcf.com</managingEditor>
    <webMaster>ctacke@opennetcf.com</webMaster>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=f2795a1f-678a-4855-b16c-32f915a81c96</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,f2795a1f-678a-4855-b16c-32f915a81c96.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We recently needed the ability to do most-recently-updated data caching in <a href="http://www.solution-family.com/" target="_blank">our
Solution Family products</a>.  Since the products use the <a href="http://orm.codeplex.com" target="_blank">OpenNETCF
ORM Framework</a>, it only made sense to update the framework itself to include events
that fire whenever an Insert, Update or Delete occurs.  In fact I added Before
and After versions for each. While I was at it, I also added a full complement of
virtual On[Before|After][Insert|Update|Delete] methods to the DataStore base, allowing
DataStore implementers to hook into the process as well.  I’m thinking I’ll use
those at some point in the future to add some form of Trigger capabilities.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=f2795a1f-678a-4855-b16c-32f915a81c96" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>ORM Update: Added events</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,f2795a1f-678a-4855-b16c-32f915a81c96.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/05/16/ORMUpdateAddedEvents.aspx</link>
      <pubDate>Wed, 16 May 2012 17:14:53 GMT</pubDate>
      <description>&lt;p&gt;
We recently needed the ability to do most-recently-updated data caching in &lt;a href="http://www.solution-family.com/" target="_blank"&gt;our
Solution Family products&lt;/a&gt;.&amp;#160; Since the products use the &lt;a href="http://orm.codeplex.com" target="_blank"&gt;OpenNETCF
ORM Framework&lt;/a&gt;, it only made sense to update the framework itself to include events
that fire whenever an Insert, Update or Delete occurs.&amp;#160; In fact I added Before
and After versions for each. While I was at it, I also added a full complement of
virtual On[Before|After][Insert|Update|Delete] methods to the DataStore base, allowing
DataStore implementers to hook into the process as well.&amp;#160; I’m thinking I’ll use
those at some point in the future to add some form of Trigger capabilities.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=f2795a1f-678a-4855-b16c-32f915a81c96" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>OpenNETCF</category>
      <category>OpenNETCF.ORM</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=289f8ffd-216c-4c49-978f-d6c7cf7854ef</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,289f8ffd-216c-4c49-978f-d6c7cf7854ef.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm trying my hand at making using some of our stuff a bit easier.  Today I burned
some time trying to understand the project template infrastructure and the result
was the creation of a couple VSIX files for installing IoC templates into Visual Studio.  
</p>
        <p>
          <img style="WIDTH: 499px; HEIGHT: 349px" border="0" src="http://blog.opennetcf.com/ctacke/content/binary/ioc_extensions.png" width="501" height="401" />
        </p>
        <p>
Right now it only supports desktop projects (IoC supports Windows Phone, Mono for
Android, Monotouch and Compact Framework). I've also not figured out how to actually
deploy the IoC and Extensions binaries with the templates, so when you create your
project, the References section will contain IoC references, but they'll be broken. 
Still, as a first cut it greatly simplifies setting up a new IoC UI (SmartClientApplication) or
IoC Module project.
</p>
        <p>
You can install the templates in one of three ways:
</p>
        <ul>
          <li>
Use the Extension Manager in Visual Studio (Tools -&gt; Extension Manager ; Online
Gallery ; search for 'OpenNetCF') 
</li>
          <li>
Download them via the Web from <a href="http://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=User&amp;f%5B0%5D.Value=ctacke">the
online Visual Studio Gallery</a></li>
          <li>
Pull them from Source Controll over at <a href="http://ioc.codeplex.com">the IoC Project
on Codeplex</a></li>
        </ul>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=289f8ffd-216c-4c49-978f-d6c7cf7854ef" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>OpenNETCF IoC Project Templates</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,289f8ffd-216c-4c49-978f-d6c7cf7854ef.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/04/18/OpenNETCFIoCProjectTemplates.aspx</link>
      <pubDate>Wed, 18 Apr 2012 19:04:05 GMT</pubDate>
      <description>&lt;p&gt;
I'm trying my hand at making using some of our stuff a bit easier.&amp;nbsp; Today I burned
some time trying to understand the project template infrastructure and the result
was the creation of a couple VSIX files for installing IoC templates into Visual Studio.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 499px; HEIGHT: 349px" border=0 src="http://blog.opennetcf.com/ctacke/content/binary/ioc_extensions.png" width=501 height=401&gt;
&lt;/p&gt;
&lt;p&gt;
Right now it only supports desktop projects (IoC supports Windows Phone, Mono for
Android, Monotouch and Compact Framework). I've also not figured out how to actually
deploy the IoC and Extensions binaries with the templates, so when you create your
project, the References section will contain IoC references, but they'll be broken.&amp;nbsp;
Still, as a first cut it greatly simplifies setting up a new IoC UI (SmartClientApplication)&amp;nbsp;or
IoC Module project.
&lt;/p&gt;
&lt;p&gt;
You can install the templates in one of three ways:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Use the Extension Manager in Visual Studio (Tools -&amp;gt; Extension Manager ; Online
Gallery ; search for 'OpenNetCF') 
&lt;li&gt;
Download them via the Web from &lt;a href="http://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=User&amp;amp;f%5B0%5D.Value=ctacke"&gt;the
online Visual Studio Gallery&lt;/a&gt; 
&lt;li&gt;
Pull them from Source Controll over at &lt;a href="http://ioc.codeplex.com"&gt;the IoC Project
on Codeplex&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=289f8ffd-216c-4c49-978f-d6c7cf7854ef" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>OpenNETCF</category>
      <category>OpenNETCF.IoC</category>
      <category>Patterns and Practices</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=2eba1181-4350-4e77-ab2a-a0a1f77fdee0</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,2eba1181-4350-4e77-ab2a-a0a1f77fdee0.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://blog.opennetcf.com/ctacke/2008/08/01/AnnouncingTheCABInstallerSDK.aspx">Ages
ago I created an SDK</a> that allows you to extract device CAB files and create a
replacement for <a href="http://msdn.microsoft.com/en-us/library/bb158700.aspx">wceload</a> if
you wanted (we used this on a couple customer applications).  We also tried to
sell it as an experiment in "<a href="http://blog.opennetcf.com/ctacke/2008/08/01/ValueBasedPricingASocialExperiment.aspx">value-based
pricing</a>".  Well the experiment showed, largely, that people would pay the
minimum and very, very rarely come back and pay anything more so either it was of
low value, or people are just cheap.
</p>
        <p>
At any rate, I don't feel like maintaining it internally any longer so it has become
yet another project that I've open sourced for the community at large.  <a href="http://cab.codeplex.com/">The
full download is now available over on Codeplex</a>.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=2eba1181-4350-4e77-ab2a-a0a1f77fdee0" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>Now on Codeplex: the OpenNETCF CAB Installer SDK</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,2eba1181-4350-4e77-ab2a-a0a1f77fdee0.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/03/30/NowOnCodeplexTheOpenNETCFCABInstallerSDK.aspx</link>
      <pubDate>Fri, 30 Mar 2012 16:55:07 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://blog.opennetcf.com/ctacke/2008/08/01/AnnouncingTheCABInstallerSDK.aspx"&gt;Ages
ago I created an SDK&lt;/a&gt; that allows you to extract device CAB files and create a
replacement for &lt;a href="http://msdn.microsoft.com/en-us/library/bb158700.aspx"&gt;wceload&lt;/a&gt; if
you wanted (we used this on a couple customer applications).&amp;nbsp; We also tried to
sell it as an experiment in "&lt;a href="http://blog.opennetcf.com/ctacke/2008/08/01/ValueBasedPricingASocialExperiment.aspx"&gt;value-based
pricing&lt;/a&gt;".&amp;nbsp; Well the experiment showed, largely, that people would pay the
minimum and very, very rarely come back and pay anything more so either it was of
low value, or people are just cheap.
&lt;/p&gt;
&lt;p&gt;
At any rate, I don't feel like maintaining it internally any longer so it has become
yet another project that I've open sourced for the community at large.&amp;nbsp; &lt;a href="http://cab.codeplex.com/"&gt;The
full download is now available over on Codeplex&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=2eba1181-4350-4e77-ab2a-a0a1f77fdee0" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>.NET Compact Framework</category>
      <category>CE Device Development</category>
      <category>OpenNETCF</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=d4274d51-f744-4f95-bf22-bb76b96d636d</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,d4274d51-f744-4f95-bf22-bb76b96d636d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just got an email in the Support inbox over at OpenNETCF asking about the libraries
support (or really lack thereof) for Wireless Networking in Windows Embedded Compact
7 (rolls off the tongue, doesn’t it?).  While this is a question about a specific
feature of the SDF, it really opens up the broader question of what our plans are
for the future of the whole product.  In fact you could say it really opens up
the question on what our general company plans and philosophy are.
</p>
        <p>
First, let’s address this specific issue, as it deserves answering and has a little
bit of a back story leading to a minor rant which is always fun.  
</p>
        <p>
The SDF supports an object model for wireless networks that is based around the Wireless
Zero Config (WZC) API.  Microsoft introduced WZC in CE 5.0 (IIRC) in an attempt
to “standardize” the way the platform and apps would communicate with the wireless
drivers, since NDIS doesn’t really have any specification for a lot of the wireless
properties.  While I applaud the spirit, WZC is convoluted at best, and was definitely
not designed to make the life of someone who has to use P/Invoke to communicate with
it any easier.  Still, it was some sort of standardization so we rolled up our
sleeves and created a managed interface for it.  
</p>
        <p>
I’ll readily admit that what we ended with isn’t ideal, but I’m a fierce self critic
and I rarely think what we do is as good as it could be.  Still it provided a
programmatic interface for something that a *lot* of people wanted and that Microsoft
had not implemented in managed code.
</p>
        <p>
Well with Compact 7 (I’ll just call it CE7) Microsoft decided that WZC wasn’t the
way to go, but instead Native WiFi was.  Painfully they didn’t follow a sensible
“deprecated but supported” track for WZC and support side-by-side, they just dropped
WZC support altogether.  That meant that we could not interface with a wireless
adapter under CE7 using our existing code base at all – it was a flat-out break.
</p>
        <p>
To make things worse, Microsoft went radio-silent for about 2 years (and still counting
– yes I’m looking at you Redmond!) on what, if any, future the Compact Framework,
or CE for that matter, might have.  The original WZC work was probably 4-6 weeks
of development and it required that we buy several devices for testing.  Believe
me, it was a real pain in the ass.  Do we (more specifically do *I*) really feel
like doing that all again for the Native WiFi interfaces?  If I do, where do
I get a CE7 device with WiFi support?  If I do all of that work, what’s the ROI
if Microsoft kills the Compact Framework?  What’s the ROI if they revive it and
implement Wireless themselves?
</p>
        <p>
It’s really difficult to answer those questions, and we’re not the only ones who are
wondering these things.  I can say, though, that we’ve very recently decided
that yes, <strong>we will </strong>continue to do both support <em>and</em> new development
for the SDF.  What that new development will entail I can’t say.  Not because
it’s some big secret, but because I can’t make those plans until Microsoft tells us
their plans (and they haven’t).  If they decide to release a new version of the
Compact Framework, I’d like to not have a load of functionality duplication between
it and the SDF.
</p>
        <p>
So, is the SDF a dead product?  No.  We will continue to support it and
have plans for feature additions.  We just don’t know exactly what those features
will be or when they will be written (confidence inspiring, I know).  
</p>
        <p>
Will we provide Wireless support for CE7?  If Microsoft does not, then yes, we
will.  Again, we don’t know if they will or not.  If they did, we don’t
know when that would be.  Ideally, though, programming for WZC and Native WiFi
should be the same, so if they don’t do it, we’ll add support that looks and feels
just like what’s in the SDF today.  If they <em>do</em> add it, I’d be inclined
to update our object model to match theirs (keeping the old stuff for compatibility
though).
</p>
        <p>
Don’t read too much into this.  Yes, I’m optimistic about the Compact Framework
and <strike>Windows CE</strike> Windows Embedded Compact but I’ve been using them
for over a decade and I’ve based a whole lot of my knowledge, business and life on
them.  I almost have to be optimistic.  But let’s face it, CE and the CF
are still great tools for delivering products.  We’re still shipping products
based on them.  Still doing new development and new installs.  Still writing
proposals for them.  
</p>
        <p>
Yes, we’ve tested the waters with Android and iOS.  We’ve even delivered finished
products for them both, but using those tolls only reinforced my feelings about the
strength and possibilities of the CF and CE and we’re still committed to using and
supporting them.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=d4274d51-f744-4f95-bf22-bb76b96d636d" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>The future of the Smart Device Framework</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,d4274d51-f744-4f95-bf22-bb76b96d636d.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/03/06/TheFutureOfTheSmartDeviceFramework.aspx</link>
      <pubDate>Tue, 06 Mar 2012 23:25:57 GMT</pubDate>
      <description>&lt;p&gt;
I just got an email in the Support inbox over at OpenNETCF asking about the libraries
support (or really lack thereof) for Wireless Networking in Windows Embedded Compact
7 (rolls off the tongue, doesn’t it?).&amp;#160; While this is a question about a specific
feature of the SDF, it really opens up the broader question of what our plans are
for the future of the whole product.&amp;#160; In fact you could say it really opens up
the question on what our general company plans and philosophy are.
&lt;/p&gt;
&lt;p&gt;
First, let’s address this specific issue, as it deserves answering and has a little
bit of a back story leading to a minor rant which is always fun.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
The SDF supports an object model for wireless networks that is based around the Wireless
Zero Config (WZC) API.&amp;#160; Microsoft introduced WZC in CE 5.0 (IIRC) in an attempt
to “standardize” the way the platform and apps would communicate with the wireless
drivers, since NDIS doesn’t really have any specification for a lot of the wireless
properties.&amp;#160; While I applaud the spirit, WZC is convoluted at best, and was definitely
not designed to make the life of someone who has to use P/Invoke to communicate with
it any easier.&amp;#160; Still, it was some sort of standardization so we rolled up our
sleeves and created a managed interface for it.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
I’ll readily admit that what we ended with isn’t ideal, but I’m a fierce self critic
and I rarely think what we do is as good as it could be.&amp;#160; Still it provided a
programmatic interface for something that a *lot* of people wanted and that Microsoft
had not implemented in managed code.
&lt;/p&gt;
&lt;p&gt;
Well with Compact 7 (I’ll just call it CE7) Microsoft decided that WZC wasn’t the
way to go, but instead Native WiFi was.&amp;#160; Painfully they didn’t follow a sensible
“deprecated but supported” track for WZC and support side-by-side, they just dropped
WZC support altogether.&amp;#160; That meant that we could not interface with a wireless
adapter under CE7 using our existing code base at all – it was a flat-out break.
&lt;/p&gt;
&lt;p&gt;
To make things worse, Microsoft went radio-silent for about 2 years (and still counting
– yes I’m looking at you Redmond!) on what, if any, future the Compact Framework,
or CE for that matter, might have.&amp;#160; The original WZC work was probably 4-6 weeks
of development and it required that we buy several devices for testing.&amp;#160; Believe
me, it was a real pain in the ass.&amp;#160; Do we (more specifically do *I*) really feel
like doing that all again for the Native WiFi interfaces?&amp;#160; If I do, where do
I get a CE7 device with WiFi support?&amp;#160; If I do all of that work, what’s the ROI
if Microsoft kills the Compact Framework?&amp;#160; What’s the ROI if they revive it and
implement Wireless themselves?
&lt;/p&gt;
&lt;p&gt;
It’s really difficult to answer those questions, and we’re not the only ones who are
wondering these things.&amp;#160; I can say, though, that we’ve very recently decided
that yes, &lt;strong&gt;we will &lt;/strong&gt;continue to do both support &lt;em&gt;and&lt;/em&gt; new development
for the SDF.&amp;#160; What that new development will entail I can’t say.&amp;#160; Not because
it’s some big secret, but because I can’t make those plans until Microsoft tells us
their plans (and they haven’t).&amp;#160; If they decide to release a new version of the
Compact Framework, I’d like to not have a load of functionality duplication between
it and the SDF.
&lt;/p&gt;
&lt;p&gt;
So, is the SDF a dead product?&amp;#160; No.&amp;#160; We will continue to support it and
have plans for feature additions.&amp;#160; We just don’t know exactly what those features
will be or when they will be written (confidence inspiring, I know).&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Will we provide Wireless support for CE7?&amp;#160; If Microsoft does not, then yes, we
will.&amp;#160; Again, we don’t know if they will or not.&amp;#160; If they did, we don’t
know when that would be.&amp;#160; Ideally, though, programming for WZC and Native WiFi
should be the same, so if they don’t do it, we’ll add support that looks and feels
just like what’s in the SDF today.&amp;#160; If they &lt;em&gt;do&lt;/em&gt; add it, I’d be inclined
to update our object model to match theirs (keeping the old stuff for compatibility
though).
&lt;/p&gt;
&lt;p&gt;
Don’t read too much into this.&amp;#160; Yes, I’m optimistic about the Compact Framework
and &lt;strike&gt;Windows CE&lt;/strike&gt; Windows Embedded Compact but I’ve been using them
for over a decade and I’ve based a whole lot of my knowledge, business and life on
them.&amp;#160; I almost have to be optimistic.&amp;#160; But let’s face it, CE and the CF
are still great tools for delivering products.&amp;#160; We’re still shipping products
based on them.&amp;#160; Still doing new development and new installs.&amp;#160; Still writing
proposals for them.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Yes, we’ve tested the waters with Android and iOS.&amp;#160; We’ve even delivered finished
products for them both, but using those tolls only reinforced my feelings about the
strength and possibilities of the CF and CE and we’re still committed to using and
supporting them.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=d4274d51-f744-4f95-bf22-bb76b96d636d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>.NET Compact Framework</category>
      <category>CE Device Development</category>
      <category>Compact Framework Code</category>
      <category>OpenNETCF</category>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=e39d2628-a149-4764-95e1-b61ca064d432</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,e39d2628-a149-4764-95e1-b61ca064d432.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been working in the Windows Embedded space for over a decade now, and I must
say it's a far different picture today than it was in years past.  That's not
a jaded nostalgia either - Windows Embedded used to have a real annual conference
at nice venues in Las VEgas.  We has good speakers and great content. 
The teams in Redmond shared loads of info about what was going on and what was coming
down the pike.  Teams cared about what they were doing and what their customers
wanted.
</p>
        <p>
Slowly, though, it seems to have atrphied to the state that it's in today.  I
know of no one using Compact 7 in an actual product.  The Compact Framework hasn't
had an update in something like 4 years and there is absolutely no word at all what
its future might be.  The tools required to do development for non Windows Phone
devices are no longer available unless you purchase a full (expensive) MSDN subscription. 
I can usually count the number of questions that get asked in public forums and places
like Stack Overflow in a week on two hands - sometimes just one.
</p>
        <p>
Today I got what had to be one of the most telling things I've seen though. 
A sign that the people is Redmond just don't care any longer either.  For years,
Microsoft has sent out a monthly embedded newsletter - the Windows Embedded InfoBlast
- and while the quality of the contents has been in the same slow decline
as the rest of the industry, the one I received today just pegged the "I no longer
give a shit" meter.  This is exactly how it looks in Outlook for me:
</p>
        <p>
 
</p>
        <p>
          <img style="WIDTH: 1111px; HEIGHT: 1134px" border="0" src="http://blog.opennetcf.com/ctacke/content/binary/infoblast.PNG" width="1143" height="1261" />
        </p>
        <p>
Obviously either no one cared enough to even look at that before it went out, or if
the did they didn't care if anyone actually read it.  Looking at it is like looking
into the sun, but without the benefit of the warmth on your face.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=e39d2628-a149-4764-95e1-b61ca064d432" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>A sign that everyone has just given up</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,e39d2628-a149-4764-95e1-b61ca064d432.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/02/24/ASignThatEveryoneHasJustGivenUp.aspx</link>
      <pubDate>Fri, 24 Feb 2012 05:44:33 GMT</pubDate>
      <description>&lt;p&gt;
I've been working in the Windows Embedded space for over a decade now, and I must
say it's a far different picture today than it was in years past.&amp;nbsp; That's not
a jaded nostalgia either - Windows Embedded used to have a real annual conference
at nice venues in Las VEgas.&amp;nbsp; We has good speakers and&amp;nbsp;great content.&amp;nbsp;
The teams in Redmond shared loads of info about what was going on and what was coming
down the pike.&amp;nbsp; Teams cared about what they were doing and what their customers
wanted.
&lt;/p&gt;
&lt;p&gt;
Slowly, though, it seems to have atrphied to the state that it's in today.&amp;nbsp; I
know of no one using Compact 7 in an actual product.&amp;nbsp; The Compact Framework hasn't
had an update in something like 4 years and there is absolutely no word at all what
its future might be.&amp;nbsp; The tools required to do development for non Windows Phone
devices are no longer available unless you purchase a full (expensive) MSDN subscription.&amp;nbsp;
I can usually count the number of questions that get asked in public forums and places
like Stack Overflow in a week on two hands - sometimes just one.
&lt;/p&gt;
&lt;p&gt;
Today I got what had to be one of the most telling things I've seen though.&amp;nbsp;
A sign that the people is Redmond just don't care any longer either.&amp;nbsp; For years,
Microsoft has sent out a monthly embedded newsletter - the Windows Embedded InfoBlast
- and while the quality of the contents has been in&amp;nbsp;the same&amp;nbsp;slow decline
as the rest of the industry, the one I received today just pegged the "I no longer
give a shit" meter.&amp;nbsp; This is exactly how it looks in Outlook for me:
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 1111px; HEIGHT: 1134px" border=0 src="http://blog.opennetcf.com/ctacke/content/binary/infoblast.PNG" width=1143 height=1261&gt;
&lt;/p&gt;
&lt;p&gt;
Obviously either no one cared enough to even look at that before it went out, or if
the did they didn't care if anyone actually read it.&amp;nbsp; Looking at it is like looking
into the sun, but without the benefit of the warmth on your face.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=e39d2628-a149-4764-95e1-b61ca064d432" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>OpenNETCF</category>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=f24d302c-c82c-4f80-b378-cb3b170afad0</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,f24d302c-c82c-4f80-b378-cb3b170afad0.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In my push to get our fundamental libraries up and working on Mono for Android we've added
support for <a href="http://oncfext.codeplex.com">OpenNETCF Extensions</a> and <a href="http://ioc.codeplex.com">OpenNETCF
IoC</a>.  What that means is that now you can have a common code for a lot of
application infrastructure that works on the Compact Framework, the desktop, Windows
Phone, MonoTouch for iOS and Mono for Android.  So you can now create a
single, common code base for your applications that includes data access, event aggregation,
dependency injection and inversion of control.
</p>
        <p>
          <a href="http://ioc.codeplex.com">Get the latest code over on Codeplex.</a>
        </p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=f24d302c-c82c-4f80-b378-cb3b170afad0" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>OpenNETCF IoC now supports Mono for Android (MonoDroid)</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,f24d302c-c82c-4f80-b378-cb3b170afad0.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/02/20/OpenNETCFIoCNowSupportsMonoForAndroidMonoDroid.aspx</link>
      <pubDate>Mon, 20 Feb 2012 18:36:44 GMT</pubDate>
      <description>&lt;p&gt;
In my push to get our fundamental libraries up and working on Mono for Android we've&amp;nbsp;added
support for &lt;a href="http://oncfext.codeplex.com"&gt;OpenNETCF Extensions&lt;/a&gt; and &lt;a href="http://ioc.codeplex.com"&gt;OpenNETCF
IoC&lt;/a&gt;.&amp;nbsp; What that means is that now you can have a common code for a lot of
application infrastructure that works on the Compact Framework, the desktop, Windows
Phone, MonoTouch for iOS&amp;nbsp;and Mono for Android.&amp;nbsp; So you can now create a
single, common code base for your applications that includes data access, event aggregation,
dependency injection and inversion of control.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://ioc.codeplex.com"&gt;Get the latest code over on Codeplex.&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=f24d302c-c82c-4f80-b378-cb3b170afad0" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>Mono for Android</category>
      <category>MonoTouch</category>
      <category>OpenNETCF</category>
      <category>OpenNETCF Extensions</category>
      <category>OpenNETCF.IoC</category>
      <category>Windows Phone 7</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=c0035aef-67d9-4e5e-a0c7-268ecc44f355</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,c0035aef-67d9-4e5e-a0c7-268ecc44f355.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We've started doing work creating client applications for a few of our products to
run on Android and iOS devices.  Since I'm a huge fan of code re-use, I took
the time this week to port the <a href="http://orm.codeplex.com">OpenNETCF.ORM</a> over
to <a href="http://xamarin.com/monoforandroid">Xamarin's Mono for Android</a> using
a <a href="http://www.sqlite.org/">SQLite backing store</a> implementation. 
The biggest challenge was that SQLite doesn't support TableDirect not ResultSets,
so it took a bit of code to get running.  Still, it took only a day and a half
to get what I feel is pretty good support up and running.  I've not yet tested
it through all of the possible permutations of queries, etc, but basic, single-table
CRUD operations all test out fine.
</p>
        <p>
So now a single code base can work on the Windows Desktop, Windows CE and Android
(probably iOS and Windows Phone as well with very little work). If you're doing MonoDroid
work, give it a try.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=c0035aef-67d9-4e5e-a0c7-268ecc44f355" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>OpenNETCF.ORM Now supports Xamarin Mono for Android</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,c0035aef-67d9-4e5e-a0c7-268ecc44f355.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/02/16/OpenNETCFORMNowSupportsXamarinMonoForAndroid.aspx</link>
      <pubDate>Thu, 16 Feb 2012 21:48:39 GMT</pubDate>
      <description>&lt;p&gt;
We've started doing work creating client applications for a few of our products to
run on Android and iOS devices.&amp;nbsp; Since I'm a huge fan of code re-use, I took
the time this week to port the &lt;a href="http://orm.codeplex.com"&gt;OpenNETCF.ORM&lt;/a&gt;&amp;nbsp;over
to &lt;a href="http://xamarin.com/monoforandroid"&gt;Xamarin's&amp;nbsp;Mono for Android&lt;/a&gt; using
a &lt;a href="http://www.sqlite.org/"&gt;SQLite backing store&lt;/a&gt; implementation.&amp;nbsp;
The biggest challenge was that SQLite doesn't support TableDirect not ResultSets,
so it took a bit of code to get running.&amp;nbsp; Still, it took only a day and a half
to get what I feel is pretty good support up and running.&amp;nbsp; I've not yet tested
it through all of the possible permutations of queries, etc, but basic, single-table
CRUD operations all test out fine.
&lt;/p&gt;
&lt;p&gt;
So now a single code base can work on the Windows Desktop, Windows CE and Android
(probably iOS and Windows Phone as well with very little work). If you're doing MonoDroid
work, give it a try.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=c0035aef-67d9-4e5e-a0c7-268ecc44f355" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>.NET Compact Framework</category>
      <category>MonoTouch</category>
      <category>OpenNETCF</category>
      <category>OpenNETCF.ORM</category>
      <category>Mono for Android</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=33482a9b-19b2-4e4e-b4ab-91e500b6c3d8</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,33482a9b-19b2-4e4e-b4ab-91e500b6c3d8.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img src="http://zlib.net/images/zlib3d-b1.png" width="290" height="152" />
        </p>
        <p>
Occasionally I'm surprised at how old software never seems to really die off. 
Take for example an old port I did of the zlib compression library to Windows CE. 
Back in probably '05 I built the original sources for the Windows CE platform. 
In '07 I created a managed wrapper for the library and some samples on how to use
that library.  I put it on the web and then pretty much forgot about it.
</p>
        <p>
Well when we migrated our web site to a new server, some old links died and this just
happened to be one of them (if you know of others, please let me know) and today I
got an email from someone asking if I still had the code.  Sure, it wasn't the
day things went down, but it still means not only was someone looking for it, the
cared enough to email me and ask.
</p>
        <p>
For those looking for it, it's got a new, hoipefully more permanent home on Codeplex:  <a href="http://zlibce.codeplex.com">http://zlibce.codeplex.com</a></p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=33482a9b-19b2-4e4e-b4ab-91e500b6c3d8" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>New home for zlib for Windows CE</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,33482a9b-19b2-4e4e-b4ab-91e500b6c3d8.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2012/02/14/NewHomeForZlibForWindowsCE.aspx</link>
      <pubDate>Tue, 14 Feb 2012 19:04:43 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img src="http://zlib.net/images/zlib3d-b1.png" width=290 height=152&gt;
&lt;/p&gt;
&lt;p&gt;
Occasionally I'm surprised at how old software never seems to really die off.&amp;nbsp;
Take for example an old port I did of the zlib compression library to Windows CE.&amp;nbsp;
Back in probably '05 I built the original sources for the Windows CE platform.&amp;nbsp;
In '07 I created a managed wrapper for the library and some samples on how to use
that library.&amp;nbsp; I put it on the web and then pretty much forgot about it.
&lt;/p&gt;
&lt;p&gt;
Well when we migrated our web site to a new server, some old links died and this just
happened to be one of them (if you know of others, please let me know) and today I
got an email from someone asking if I still had the code.&amp;nbsp; Sure, it wasn't the
day things went down, but it still means not only was someone looking for it, the
cared enough to email me and ask.
&lt;/p&gt;
&lt;p&gt;
For those looking for it, it's got a new, hoipefully more permanent home on Codeplex:&amp;nbsp; &lt;a href="http://zlibce.codeplex.com"&gt;http://zlibce.codeplex.com&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=33482a9b-19b2-4e4e-b4ab-91e500b6c3d8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>.NET Compact Framework</category>
      <category>OpenNETCF</category>
      <category>Windows CE Code</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=5f1113a9-97c6-4dfb-82bb-382303108022</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,5f1113a9-97c6-4dfb-82bb-382303108022.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Lately it seems that I’m been doing a lot of posts referring to “a customer”. 
Often they are different customers, but it really sounds impersonal, so in this one
I’m going to name names and point fingers – in a friendly way, of course.
</p>
        <p>
Last week Nicolas emailed me to get some advice on the Visual Studio 2008 Forms designer
and the Compact Framework.  Specifically he wanted to know if it’s possible to
get a custom TabControl to be designable.  My assumption is that either he’s
inheriting from the stock version or they’ve created a fully custom control inheriting
from ContainerControl – I didn’t ask because in either case the answer is simple:
it’s not going to work in the designer.
</p>
        <p>
I told him that it won’t work, but in retrospect I feel I’ve short-changed him a bit. 
As a developer, I like to hear a bit more than an “abandon all hope, ye who sail here
for there be sea monsters” kind of response.  Why doesn’t it work?  More
importantly, what are my options for a workaround?
</p>
        <p>
In this case it’s interesting to note that even if he could get the designer to work
for this control, I’d recommend that he <strong><em>not</em></strong> do it. 
And they why to that recommendation is far more interesting.
</p>
        <p>
So, Nicolas, here’s the longer answer to your question.
</p>
        <p>
First, you have to understand that the Studio Designer is very, very brittle. 
Any little quirkiness tends to send it into fits, and once broke you often spend large
amounts of time unloading things, resetting the toolbox, restarting Studio or even
restarting the PC.  This is a huge time drain, so avoiding situations that break
the designer is the first order of business.
</p>
        <p>
Getting the designer working for a CF component is even worse.  CF controls often
make use of things that the desktop doesn’t even have, which the designer really hates. 
You also have to build the Controls for both versions of the CF (for Nicolas this
is important since, at least last time I was with his team, they had versions of the
application targeting CF 2.0 and CF 3.5).  A control built against CF 3.5 will
never show up in the designer of a CF 2.0 project.  There’s also a major bug
in the designer that limits CF 3.5 controls that <a href="http://blog.opennetcf.com/ctacke/2008/11/26/Studio08sToolboxAndCompactFrameworkAssemblies.aspx" target="_blank">I’ve
written about before</a>.
</p>
        <p>
For designer support you also have to maintain an XMTA file and often end up having
condition compiler statements which really make the code less readable.  Workarounds
for most of these issues exist.  You can create separate set of “designer” assemblies
that provide only stuff for the designer and minimal actual control logic.  The
problem with this is that you then have to maintain these things, which sucks up developer
time that should be spent actually solving your business problem.
</p>
        <p>
You can’t create a desktop assembly and use it for the designer because the designer
will then suck in the full .NET framework as a reference and attempt to deploy that
to the device when you want to debug.
</p>
        <p>
So if the designer is so brittle and worthless, what’s a developer to do?  Well,
my general attitude is to provide “support” only for basic Controls, and by “support”
I mean the inherent capability of the designer to show a box with the location and
bounds of your control.  No rendering.  No styling.  No collection
editing.  
</p>
        <p>
Really the designer’s primary use for me is to aid in basic layout.  I need to
put a Control on a Form, set it’s location and Size and that’s it anyway.  Anything
else is done via code, and there’s nothing wrong with this.  Embrace it as how
you must work and your life becomes much simpler.
</p>
        <p>
That’s all well and good for a simple Control, but what about a container like Nicolas
is after?  His team would like to be able to drop on a Tab control and design
each individual Tab, right?  So what are they to do?
</p>
        <p>
Well, I think they’re looking at the problem wrong to begin with.  I don’t blame
them, people have been looking at this wrong for some time, and the simple existence
of the TabControl tend to push people to look at it wrong.  In general, my recommendation
is to not use the TabControl in the first place.  
</p>
        <p>
First of all, it’s 2011.  That ass-looking TabControl would have been ok back
in 1995 (if the devices had existed then) since it looks just like the ass-looking
Windows 95 interface.  
</p>
        <p>
It’s was an ok solution in 2000 when these devices were new and people thought of
them as just “mini PCs” so extending the desktop paradigm to the device was what we
did.    Yes, we wished we could do a little more to make it pretty
by adding icons and custom drawing, but it worked and users really didn’t expect anything
more.
</p>
        <p>
But it’s 2011.  Users don’t use a stylus if they can avoid it.  They know
an elegant UI when they see one because they’ve been using a smartphone.  Just
because they have no choice in the app they use (this is an LOB app, so the user is
locked in) is no excuse to not deliver something that is actually nice to use. 
The TabControl does not meet that.  It’s tiny, it scrolls weird, and it’s ugly
with no options to make it non-ugly.  Plus it’s  Tab motif.  Name the
last mobile app you used on a phone that used tabs.  That’s what I thought. Abandon
the piece of crap.
</p>
        <p>
So what would I use?  Obviously this will be subjective, as it’s what I would
personally do given a blank slate.  Nicolas is trying to put something into an
already-existing, very large code base, so his mileage may vary, but I’m betting it
won’t be too bad, and implementing this might actually do a lot toward getting other
gains they really need like better transition time between views.
</p>
        <p>
I’d start using the <a href="http://ioc.codeplex.com/" target="_blank">OpenNETCF IoC
project</a>.  I’d split each of the existing “tabs” into individual SmartParts,
which are now fully designable since they’re just UserControls.  So there you
are – the designer requirement is solved.  I’d then place on the Form a pair
of DeckWorkspaces.  One would display the “selected” view and the other would
replace the “tabs” of old with buttons or clickable images that would be used to select
the current view.  It would look something like this in the designer for the
Form:
</p>
        <p>
          <a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="tabs" border="0" alt="tabs" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs_thumb.png" width="200" height="312" />
          </a>
        </p>
        <p>
And then the SmartPart that goes into the bottom workspace might be something like
this in the designer (well it would probably be a bit different, but you get the idea):
</p>
        <p>
          <a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs2.png">
            <img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="tabs2" border="0" alt="tabs2" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs2_thumb.png" width="244" height="76" />
          </a>
        </p>
        <p>
See, the designer works.  It meets the business requirement that it provides
a “tab-like” capability where the user selects an item across the bottom and the upper
view changes.  But now it’s not just usable with a stylus but it’s also likely
to be usable with a finger (<strong>gasp</strong>!) and aesthetically it doesn’t make
my want to poke my own eyes out.  It’s a win-win.  Plus now you can lazy-load
the views *on demand* rather than loading up every damned control on every tab when
the Form is brought up, so the user is going to be pleasantly surprised there too. 
Oh, and now it’s easy to change out “tabs” based on user rights or workflow and probably
other benefits that I’m not thinking of.
</p>
        <p>
Occasionally we’ve got to break out of the “what we know” and the “what we’ve always
done” routine and look out at the horizon.  By doing so we can often make some
simple changes and make things easier for both the developer and the user, and that
is how we make progress.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=5f1113a9-97c6-4dfb-82bb-382303108022" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>Compact Framework and the Visual Studio Designer</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,5f1113a9-97c6-4dfb-82bb-382303108022.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2011/11/28/CompactFrameworkAndTheVisualStudioDesigner.aspx</link>
      <pubDate>Mon, 28 Nov 2011 18:24:00 GMT</pubDate>
      <description>&lt;p&gt;
Lately it seems that I’m been doing a lot of posts referring to “a customer”.&amp;#160;
Often they are different customers, but it really sounds impersonal, so in this one
I’m going to name names and point fingers – in a friendly way, of course.
&lt;/p&gt;
&lt;p&gt;
Last week Nicolas emailed me to get some advice on the Visual Studio 2008 Forms designer
and the Compact Framework.&amp;#160; Specifically he wanted to know if it’s possible to
get a custom TabControl to be designable.&amp;#160; My assumption is that either he’s
inheriting from the stock version or they’ve created a fully custom control inheriting
from ContainerControl – I didn’t ask because in either case the answer is simple:
it’s not going to work in the designer.
&lt;/p&gt;
&lt;p&gt;
I told him that it won’t work, but in retrospect I feel I’ve short-changed him a bit.&amp;#160;
As a developer, I like to hear a bit more than an “abandon all hope, ye who sail here
for there be sea monsters” kind of response.&amp;#160; Why doesn’t it work?&amp;#160; More
importantly, what are my options for a workaround?
&lt;/p&gt;
&lt;p&gt;
In this case it’s interesting to note that even if he could get the designer to work
for this control, I’d recommend that he &lt;strong&gt;&lt;em&gt;not&lt;/em&gt;&lt;/strong&gt; do it.&amp;#160;
And they why to that recommendation is far more interesting.
&lt;/p&gt;
&lt;p&gt;
So, Nicolas, here’s the longer answer to your question.
&lt;/p&gt;
&lt;p&gt;
First, you have to understand that the Studio Designer is very, very brittle.&amp;#160;
Any little quirkiness tends to send it into fits, and once broke you often spend large
amounts of time unloading things, resetting the toolbox, restarting Studio or even
restarting the PC.&amp;#160; This is a huge time drain, so avoiding situations that break
the designer is the first order of business.
&lt;/p&gt;
&lt;p&gt;
Getting the designer working for a CF component is even worse.&amp;#160; CF controls often
make use of things that the desktop doesn’t even have, which the designer really hates.&amp;#160;
You also have to build the Controls for both versions of the CF (for Nicolas this
is important since, at least last time I was with his team, they had versions of the
application targeting CF 2.0 and CF 3.5).&amp;#160; A control built against CF 3.5 will
never show up in the designer of a CF 2.0 project.&amp;#160; There’s also a major bug
in the designer that limits CF 3.5 controls that &lt;a href="http://blog.opennetcf.com/ctacke/2008/11/26/Studio08sToolboxAndCompactFrameworkAssemblies.aspx" target="_blank"&gt;I’ve
written about before&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
For designer support you also have to maintain an XMTA file and often end up having
condition compiler statements which really make the code less readable.&amp;#160; Workarounds
for most of these issues exist.&amp;#160; You can create separate set of “designer” assemblies
that provide only stuff for the designer and minimal actual control logic.&amp;#160; The
problem with this is that you then have to maintain these things, which sucks up developer
time that should be spent actually solving your business problem.
&lt;/p&gt;
&lt;p&gt;
You can’t create a desktop assembly and use it for the designer because the designer
will then suck in the full .NET framework as a reference and attempt to deploy that
to the device when you want to debug.
&lt;/p&gt;
&lt;p&gt;
So if the designer is so brittle and worthless, what’s a developer to do?&amp;#160; Well,
my general attitude is to provide “support” only for basic Controls, and by “support”
I mean the inherent capability of the designer to show a box with the location and
bounds of your control.&amp;#160; No rendering.&amp;#160; No styling.&amp;#160; No collection
editing.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Really the designer’s primary use for me is to aid in basic layout.&amp;#160; I need to
put a Control on a Form, set it’s location and Size and that’s it anyway.&amp;#160; Anything
else is done via code, and there’s nothing wrong with this.&amp;#160; Embrace it as how
you must work and your life becomes much simpler.
&lt;/p&gt;
&lt;p&gt;
That’s all well and good for a simple Control, but what about a container like Nicolas
is after?&amp;#160; His team would like to be able to drop on a Tab control and design
each individual Tab, right?&amp;#160; So what are they to do?
&lt;/p&gt;
&lt;p&gt;
Well, I think they’re looking at the problem wrong to begin with.&amp;#160; I don’t blame
them, people have been looking at this wrong for some time, and the simple existence
of the TabControl tend to push people to look at it wrong.&amp;#160; In general, my recommendation
is to not use the TabControl in the first place.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
First of all, it’s 2011.&amp;#160; That ass-looking TabControl would have been ok back
in 1995 (if the devices had existed then) since it looks just like the ass-looking
Windows 95 interface.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
It’s was an ok solution in 2000 when these devices were new and people thought of
them as just “mini PCs” so extending the desktop paradigm to the device was what we
did.&amp;#160;&amp;#160;&amp;#160; Yes, we wished we could do a little more to make it pretty
by adding icons and custom drawing, but it worked and users really didn’t expect anything
more.
&lt;/p&gt;
&lt;p&gt;
But it’s 2011.&amp;#160; Users don’t use a stylus if they can avoid it.&amp;#160; They know
an elegant UI when they see one because they’ve been using a smartphone.&amp;#160; Just
because they have no choice in the app they use (this is an LOB app, so the user is
locked in) is no excuse to not deliver something that is actually nice to use.&amp;#160;
The TabControl does not meet that.&amp;#160; It’s tiny, it scrolls weird, and it’s ugly
with no options to make it non-ugly.&amp;#160; Plus it’s&amp;#160; Tab motif.&amp;#160; Name the
last mobile app you used on a phone that used tabs.&amp;#160; That’s what I thought. Abandon
the piece of crap.
&lt;/p&gt;
&lt;p&gt;
So what would I use?&amp;#160; Obviously this will be subjective, as it’s what I would
personally do given a blank slate.&amp;#160; Nicolas is trying to put something into an
already-existing, very large code base, so his mileage may vary, but I’m betting it
won’t be too bad, and implementing this might actually do a lot toward getting other
gains they really need like better transition time between views.
&lt;/p&gt;
&lt;p&gt;
I’d start using the &lt;a href="http://ioc.codeplex.com/" target="_blank"&gt;OpenNETCF IoC
project&lt;/a&gt;.&amp;#160; I’d split each of the existing “tabs” into individual SmartParts,
which are now fully designable since they’re just UserControls.&amp;#160; So there you
are – the designer requirement is solved.&amp;#160; I’d then place on the Form a pair
of DeckWorkspaces.&amp;#160; One would display the “selected” view and the other would
replace the “tabs” of old with buttons or clickable images that would be used to select
the current view.&amp;#160; It would look something like this in the designer for the
Form:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="tabs" border="0" alt="tabs" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs_thumb.png" width="200" height="312" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And then the SmartPart that goes into the bottom workspace might be something like
this in the designer (well it would probably be a bit different, but you get the idea):
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="tabs2" border="0" alt="tabs2" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/f605a141814d_9C4C/tabs2_thumb.png" width="244" height="76" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
See, the designer works.&amp;#160; It meets the business requirement that it provides
a “tab-like” capability where the user selects an item across the bottom and the upper
view changes.&amp;#160; But now it’s not just usable with a stylus but it’s also likely
to be usable with a finger (&lt;strong&gt;gasp&lt;/strong&gt;!) and aesthetically it doesn’t make
my want to poke my own eyes out.&amp;#160; It’s a win-win.&amp;#160; Plus now you can lazy-load
the views *on demand* rather than loading up every damned control on every tab when
the Form is brought up, so the user is going to be pleasantly surprised there too.&amp;#160;
Oh, and now it’s easy to change out “tabs” based on user rights or workflow and probably
other benefits that I’m not thinking of.
&lt;/p&gt;
&lt;p&gt;
Occasionally we’ve got to break out of the “what we know” and the “what we’ve always
done” routine and look out at the horizon.&amp;#160; By doing so we can often make some
simple changes and make things easier for both the developer and the user, and that
is how we make progress.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=5f1113a9-97c6-4dfb-82bb-382303108022" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>.NET Compact Framework</category>
      <category>OpenNETCF</category>
      <category>OpenNETCF.IoC</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=b79277f3-0cbb-40a1-9305-096a19fc3495</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,b79277f3-0cbb-40a1-9305-096a19fc3495.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've published new updates to our MTConnect projects on Codeplex. Both the <a href="http://mtconnect.codeplex.com">MTConnect
SDK</a> and the <a href="http://mtcagent.codeplex.com">VirtualAgent</a> have changes
and for detailed info take a look at the change logs in the Source tabs on the project. 
Here's a high-level list of what I think the important additions are:
</p>
        <ul>
          <li>
I've added a fully working reference implementation of an MTConnect Adapter for Okuma
THINC controllers (full source is included).  If you have an Okuma machine with
a THINC-supported controller on it, you now have a simple agent and adapter you can
drop onto the machine to start publishing data immediately. I hope to find time to
put together a reference implementation for Fanuc FOCAS controllers.  If you're
interested or in need of that support, let me know and we can discuss prioritizing
it and the features you need.</li>
          <li>
I've added support for SHDR adapters.  At the [MC]2 conference in Cincinnati
there was concern that once you selected an Agent technology (either ours or the reference
MTConnect C++ Agent), then you were locked in to creating Adapters only for that Agent. 
That is no longer the case.  Our Virtual Agent now can easily consume data from
your existing C/C++ Adapters written against the reference Agent.  No changes
are required in your existing Adapters at all.</li>
        </ul>
        <p>
If you have any questions on implementation, etc, feel free to contact me.  For
more info on our entire line of MTConnect products, take a look at <a href="http://www.solution-family.com">our
web site</a>.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=b79277f3-0cbb-40a1-9305-096a19fc3495" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>MTConnect Updates</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,b79277f3-0cbb-40a1-9305-096a19fc3495.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2011/11/23/MTConnectUpdates.aspx</link>
      <pubDate>Wed, 23 Nov 2011 17:46:09 GMT</pubDate>
      <description>&lt;p&gt;
I've published new updates to our MTConnect projects on Codeplex. Both the &lt;a href="http://mtconnect.codeplex.com"&gt;MTConnect
SDK&lt;/a&gt; and the &lt;a href="http://mtcagent.codeplex.com"&gt;VirtualAgent&lt;/a&gt; have changes
and for detailed info take a look at the change logs in the Source tabs on the project.&amp;nbsp;
Here's&amp;nbsp;a high-level list of what I think the important additions are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
I've added a fully working reference implementation of an MTConnect Adapter for Okuma
THINC controllers (full source is included).&amp;nbsp; If you have an Okuma machine with
a THINC-supported controller on it, you now have a simple agent and adapter you can
drop onto the machine to start publishing data immediately. I hope to find time to
put together a reference implementation for Fanuc FOCAS controllers.&amp;nbsp; If you're
interested or in need of that support, let me know and we can discuss prioritizing
it and the features you need.&lt;/li&gt;
&lt;li&gt;
I've added support for SHDR adapters.&amp;nbsp; At the [MC]2 conference in Cincinnati
there was concern that once you selected an Agent technology (either ours or the reference
MTConnect C++ Agent), then you were locked in to creating Adapters only for that Agent.&amp;nbsp;
That is no longer the case.&amp;nbsp; Our Virtual Agent now can easily consume data from
your existing C/C++ Adapters written against the reference Agent.&amp;nbsp; No changes
are required in your existing Adapters at all.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you have any questions on implementation, etc, feel free to contact me.&amp;nbsp; For
more info on our entire line of MTConnect products, take a look at &lt;a href="http://www.solution-family.com"&gt;our
web site&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=b79277f3-0cbb-40a1-9305-096a19fc3495" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>MTConnect</category>
      <category>OpenNETCF</category>
    </item>
  </channel>
</rss>
