<?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 - Rants</title>
    <link>http://blog.opennetcf.com/ctacke/</link>
    <description>Bringing Managed Code to the Embedded World</description>
    <copyright>Chris Tacke</copyright>
    <lastBuildDate>Tue, 06 Mar 2012 23:25:57 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=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=10a9300c-a6dc-4adb-94b3-9001358b103e</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,10a9300c-a6dc-4adb-94b3-9001358b103e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So a customer asked me last week if I could provide them some managed code to allow
them to insert a certificate and a private key into the certificate store on a Windows
CE device.  A simple enough request, right?  Heh, isn’t that how they all
start?
</p>
        <p>
To be honest, I’ve done very little work with certificates in the past – basically
I’ve created certs for use with Padarn and SSL but that’s about it. So my first order
of business was to do some due diligence to try to get an idea of the scope of the
problem.  I pulled up the MSDN docs of the Compact Framework’s support for X509
stuff.  It shows that there is device support for the <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store_members(v=VS.90).aspx" target="_blank">X509Store</a> as
well as the <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate_members(v=VS.90).aspx" target="_blank">X509Certificate</a> so
I told them it should be pretty easy to achieve their goal.  I mean the docs
sure look like it would be easy.
</p>
        <p>
Next I needed to write a little code to familiarize myself with the object model. 
I fired up a device that most definitely has several certificates installed.
</p>
        <p>
          <a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECerts_2.png">
            <img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title="CECerts" border="0" alt="CECerts" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECerts_thumb.png" width="444" height="189" />
          </a>
        </p>
        <p>
Then I wrote some simple code to give me an idea which of the six stores these fall
into:
</p>
        <pre class="csharp" name="code">public void DumpCertCounts() 
{ 
    Debug.WriteLine("        Current User     Local Machine");

    var userStore = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
    var deviceStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    Debug.WriteLine(string.Format("Root:          {0}              {1}", 
        userStore.Certificates.Count, 
        deviceStore.Certificates.Count)); 
    
    userStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
    deviceStore = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    Debug.WriteLine(string.Format("My:            {0}              {1}", 
        userStore.Certificates.Count, 
        deviceStore.Certificates.Count));

    userStore = new X509Store(StoreName.CertificateAuthority, StoreLocation.CurrentUser); 
    deviceStore = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine); 
    Debug.WriteLine(string.Format("CA:            {0}              {1}", 
        userStore.Certificates.Count, 
        deviceStore.Certificates.Count)); 
} 
</pre>
        <p>
Easy enough.  The problem was that then I actually ran the code.  This is
the output.
</p>
        <p>
          <a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg.png">
            <img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title="CECertDbg" border="0" alt="CECertDbg" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg_thumb.png" width="437" height="192" />
          </a>
        </p>
        <p>
Really?  Zero certificates in any store?  Was my code right?  Yes. 
Did I target the right device from the debugger?  Yes.  Alrighty, so it
seems that “existence of a class in the BCL” doesn’t necessarily mean “actual functionality
is implemented.”  This doesn’t bode well.
</p>
        <p>
Technically I don’t need to know what certificates are installed on the device for
the customer’s request, right.  Sure, it would be nice to see if a cert is there
before trying to install it, but we can always just wrap the call in a try/catch and
ignore any exception thrown when we try to install a duplicate.  Not the ideal
solution, but workable since this will be done infrequently.
</p>
        <p>
I then generated some test certs with <a href="http://msdn.microsoft.com/en-us/library/bfsktky3(v=vs.80).aspx" target="_blank">makecert.exe</a> and
pushed them to the device.  Now I needed to create code to import them, hopefully
an import works better than enumerating existing certs.  
</p>
        <p>
Let’s see, how would we bring in a cert?  How about the Import method on the <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2collection_members(v=VS.90).aspx" target="_blank">X509CerticateCollection</a>? 
Oh, not supported in the CF. 
</p>
        <p>
Ah, but the Add method is, so I just need to create an X509Certificate and Add it. 
Let’s see, the X509Certifiacte class has two static methods – CreateFromCertFile and
CreateFromSignedFile.  Of course those aren’t supported in the CF.  That
would be too easy.
</p>
        <p>
How about from a constructor? Looks like the <a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.x509certificate(v=VS.90).aspx" target="_blank">only
constructor supported</a> is the one that takes in a byte array.  What on earth
is that byte array.  Oh, the example shows that it’s easy to get by Exporting
from a certificate you already have.  How un-useful is that?
</p>
        <p>
So it appears that the entire namespace in the Compact Framework is useless. 
Actually worse than useless because I can’t create a direct replacement or I’ll end
up with naming conflicts with the existing useless garbage.
</p>
        <p>
So now I have to create the objects in the namespace and implement the methods required
to achieve “import a certificate into the device store”.  The starting point
is the C source code for the Certificates control panel applet you see above, which
ships with Platform Builder.  It’s an ugly load of P/Invoking methods that deal
with lots of pointers to structs that contains pointers to structs that contain pointers
to structs that contain…you get the idea.
</p>
        <p>
So I spent a day just getting the import of a CER file working (much easier than the
PVK import is going to be) and my exact same test code now outputs this:
</p>
        <p>
          <a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg2.png">
            <img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title="CECertDbg2" border="0" alt="CECertDbg2" src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg2_thumb.png" width="328" height="131" />
          </a>
        </p>
        <p>
See, an implementation that actually does something.  I have no idea what was
going on at Microsoft when this namespace was “implemented” or how it got out the
door.  It definitely wouldn’t pass even the most rudimentary of functional tests.
</p>
        <p>
This is a classic case of why I’d love to see the Compact Framework open/shared sourced. 
I could actually go in and fix these things.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=10a9300c-a6dc-4adb-94b3-9001358b103e" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>X509 Certificates + Compact Framework = WTF?</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,10a9300c-a6dc-4adb-94b3-9001358b103e.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2011/11/22/X509CertificatesCompactFrameworkWTF.aspx</link>
      <pubDate>Tue, 22 Nov 2011 16:41:17 GMT</pubDate>
      <description>&lt;p&gt;
So a customer asked me last week if I could provide them some managed code to allow
them to insert a certificate and a private key into the certificate store on a Windows
CE device.&amp;nbsp; A simple enough request, right?&amp;nbsp; Heh, isn’t that how they all
start?
&lt;/p&gt;
&lt;p&gt;
To be honest, I’ve done very little work with certificates in the past – basically
I’ve created certs for use with Padarn and SSL but that’s about it. So my first order
of business was to do some due diligence to try to get an idea of the scope of the
problem.&amp;nbsp; I pulled up the MSDN docs of the Compact Framework’s support for X509
stuff.&amp;nbsp; It shows that there is device support for the &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509store_members(v=VS.90).aspx" target=_blank&gt;X509Store&lt;/a&gt; as
well as the &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate_members(v=VS.90).aspx" target=_blank&gt;X509Certificate&lt;/a&gt; so
I told them it should be pretty easy to achieve their goal.&amp;nbsp; I mean the docs
sure look like it would be easy.
&lt;/p&gt;
&lt;p&gt;
Next I needed to write a little code to familiarize myself with the object model.&amp;nbsp;
I fired up a device that most definitely has several certificates installed.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECerts_2.png"&gt;&lt;img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title=CECerts border=0 alt=CECerts src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECerts_thumb.png" width=444 height=189&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Then I wrote some simple code to give me an idea which of the six stores these fall
into:
&lt;/p&gt;
&lt;pre class=csharp name="code"&gt;public void DumpCertCounts() 
{ 
    Debug.WriteLine("        Current User     Local Machine");

    var userStore = new X509Store(StoreName.Root, StoreLocation.CurrentUser); 
    var deviceStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    Debug.WriteLine(string.Format("Root:          {0}              {1}", 
        userStore.Certificates.Count, 
        deviceStore.Certificates.Count)); 
    
    userStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
    deviceStore = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
    Debug.WriteLine(string.Format("My:            {0}              {1}", 
        userStore.Certificates.Count, 
        deviceStore.Certificates.Count));

    userStore = new X509Store(StoreName.CertificateAuthority, StoreLocation.CurrentUser); 
    deviceStore = new X509Store(StoreName.CertificateAuthority, StoreLocation.LocalMachine); 
    Debug.WriteLine(string.Format("CA:            {0}              {1}", 
        userStore.Certificates.Count, 
        deviceStore.Certificates.Count)); 
} 
&lt;/pre&gt;
&lt;p&gt;
Easy enough.&amp;nbsp; The problem was that then I actually ran the code.&amp;nbsp; This is
the output.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg.png"&gt;&lt;img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title=CECertDbg border=0 alt=CECertDbg src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg_thumb.png" width=437 height=192&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Really?&amp;nbsp; Zero certificates in any store?&amp;nbsp; Was my code right?&amp;nbsp; Yes.&amp;nbsp;
Did I target the right device from the debugger?&amp;nbsp; Yes.&amp;nbsp; Alrighty, so it
seems that “existence of a class in the BCL” doesn’t necessarily mean “actual functionality
is implemented.”&amp;nbsp; This doesn’t bode well.
&lt;/p&gt;
&lt;p&gt;
Technically I don’t need to know what certificates are installed on the device for
the customer’s request, right.&amp;nbsp; Sure, it would be nice to see if a cert is there
before trying to install it, but we can always just wrap the call in a try/catch and
ignore any exception thrown when we try to install a duplicate.&amp;nbsp; Not the ideal
solution, but workable since this will be done infrequently.
&lt;/p&gt;
&lt;p&gt;
I then generated some test certs with &lt;a href="http://msdn.microsoft.com/en-us/library/bfsktky3(v=vs.80).aspx" target=_blank&gt;makecert.exe&lt;/a&gt; and
pushed them to the device.&amp;nbsp; Now I needed to create code to import them, hopefully
an import works better than enumerating existing certs.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Let’s see, how would we bring in a cert?&amp;nbsp; How about the Import method on the &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2collection_members(v=VS.90).aspx" target=_blank&gt;X509CerticateCollection&lt;/a&gt;?&amp;nbsp;
Oh, not supported in the CF. 
&lt;/p&gt;
&lt;p&gt;
Ah, but the Add method is, so I just need to create an X509Certificate and Add it.&amp;nbsp;
Let’s see, the X509Certifiacte class has two static methods – CreateFromCertFile and
CreateFromSignedFile.&amp;nbsp; Of course those aren’t supported in the CF.&amp;nbsp; That
would be too easy.
&lt;/p&gt;
&lt;p&gt;
How about from a constructor? Looks like the &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate.x509certificate(v=VS.90).aspx" target=_blank&gt;only
constructor supported&lt;/a&gt; is the one that takes in a byte array.&amp;nbsp; What on earth
is that byte array.&amp;nbsp; Oh, the example shows that it’s easy to get by Exporting
from a certificate you already have.&amp;nbsp; How un-useful is that?
&lt;/p&gt;
&lt;p&gt;
So it appears that the entire namespace in the Compact Framework is useless.&amp;nbsp;
Actually worse than useless because I can’t create a direct replacement or I’ll end
up with naming conflicts with the existing useless garbage.
&lt;/p&gt;
&lt;p&gt;
So now I have to create the objects in the namespace and implement the methods required
to achieve “import a certificate into the device store”.&amp;nbsp; The starting point
is the C source code for the Certificates control panel applet you see above, which
ships with Platform Builder.&amp;nbsp; It’s an ugly load of P/Invoking methods that deal
with lots of pointers to structs that contains pointers to structs that contain pointers
to structs that contain…you get the idea.
&lt;/p&gt;
&lt;p&gt;
So I spent a day just getting the import of a CER file working (much easier than the
PVK import is going to be) and my exact same test code now outputs this:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg2.png"&gt;&lt;img style="BACKGROUND-IMAGE: none; BORDER-RIGHT-WIDTH: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px" title=CECertDbg2 border=0 alt=CECertDbg2 src="http://blog.opennetcf.com/ctacke/content/binary/Windows-Live-Writer/X509-Certificates-in-the-Compact-Framewo_8A9B/CECertDbg2_thumb.png" width=328 height=131&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
See, an implementation that actually does something.&amp;nbsp; I have no idea what was
going on at Microsoft when this namespace was “implemented” or how it got out the
door.&amp;nbsp; It definitely wouldn’t pass even the most rudimentary of functional tests.
&lt;/p&gt;
&lt;p&gt;
This is a classic case of why I’d love to see the Compact Framework open/shared sourced.&amp;nbsp;
I could actually go in and fix these things.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=10a9300c-a6dc-4adb-94b3-9001358b103e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>.NET Compact Framework</category>
      <category>OpenNETCF</category>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=199cf2fc-f57c-4e46-9eed-4cda48f0146d</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,199cf2fc-f57c-4e46-9eed-4cda48f0146d.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">So it seems MSDN just release a new article
on <a href="http://msdn2.microsoft.com/en-us/library/bb985500.aspx">Developing Stylus-Free
Windows Mobile Professional Application</a><a href="http://msdn2.microsoft.com/en-us/library/bb985500.aspx">s</a>.
I'm glad they're wisely spending the very little resources they seem to use for mobile
development on getting new and fresh information out.  I mean, it's not like <a href="http://blog.markarteaga.com/content/binary/Designing%20Pocket%20PC%20Applications%20for%20Stylus-Free%20Usage_Final.htm">the
same information has been available for 2 years already</a>, and that the article
was actually *submitted to them* for publication even before it was posted on the
Web independently.  You go, MSDN!  If you'd like some other content you
might look <a href="http://community.opennetcf.com/articles">at any one of these</a> (which
we actually started publishing because MSDN apparently isn't interested).<a href="http://msdn2.microsoft.com/en-us/library/bb985500.aspx"><br /></a><p></p><img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=199cf2fc-f57c-4e46-9eed-4cda48f0146d" /><br /><hr />
Managed Code in the Embedded World</body>
      <title>New MSDN Article</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,199cf2fc-f57c-4e46-9eed-4cda48f0146d.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2008/01/31/NewMSDNArticle.aspx</link>
      <pubDate>Thu, 31 Jan 2008 16:08:22 GMT</pubDate>
      <description>So it seems MSDN just release a new article on 
            &lt;a href="http://msdn2.microsoft.com/en-us/library/bb985500.aspx"&gt;Developing
Stylus-Free Windows Mobile Professional Application&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb985500.aspx"&gt;s&lt;/a&gt;.
I'm glad they're wisely spending the very little resources they seem to use for mobile
development on getting new and fresh information out.&amp;nbsp; I mean, it's not like &lt;a href="http://blog.markarteaga.com/content/binary/Designing%20Pocket%20PC%20Applications%20for%20Stylus-Free%20Usage_Final.htm"&gt;the
same information has been available for 2 years already&lt;/a&gt;, and that the article
was actually *submitted to them* for publication even before it was posted on the
Web independently.&amp;nbsp; You go, MSDN!&amp;nbsp; If you'd like some other content you
might look &lt;a href="http://community.opennetcf.com/articles"&gt;at any one of these&lt;/a&gt; (which
we actually started publishing because MSDN apparently isn't interested).&lt;a href="http://msdn2.microsoft.com/en-us/library/bb985500.aspx"&gt;
&lt;br&gt;
&lt;/a&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=199cf2fc-f57c-4e46-9eed-4cda48f0146d" /&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=f8d510ff-84f5-4989-8387-1ca0dc967970</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,f8d510ff-84f5-4989-8387-1ca0dc967970.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So this morning we got an email from PayPal:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <font size="2">
            <p>
The PayPal User Agreement states that PayPal, at its sole discretion, reserves the
right to limit an account for any violation of the User Agreement, including the Acceptable
Use Policy. Under the Acceptable Use Policy, PayPal may not be used to send or receive
payments or donations for obscene or certain sexually oriented goods or services.
The complete Acceptable Use Policy addressing Mature Audiences can be found at the
following URL:
</p>
            <p>
            </p>
            <p>
            </p>
          </font>
          <a href="http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;ed=mature">
            <u>
              <font color="#0000ff" size="2">http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;ed=mature
</font>
            </u>
          </a>
          <font size="2">
            <p>
We are hereby notifying you that, after a recent review of your account activity,
it has been determined that you are in violation of PayPal's Acceptable Use Policy
regarding your website:
</p>
            <p>
            </p>
          </font>
          <a href="http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=8609">
            <u>
              <font color="#0000ff" size="2">http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=8609
</font>
            </u>
          </a>
          <font size="2">. Therefore, your account has been permanently limited. 
<p></p><p>
If you have a remaining balance, you may withdraw the funds to your bank account.
Information on how to withdraw funds from your PayPal Account can be found at our
Help Center.
</p><p>
You will need to remove all references to PayPal from your website(s) and/or auction(s).
This includes not only removing PayPal as a payment option, but also the PayPal logo
and/or shopping cart. We thank you in advance for your cooperation. If you have any
questions, please contact the PayPal Acceptable Use Policy Department at aup@paypal.com.
</p><p>
Sincerely,
</p><p>
PayPal Acceptable Use Policy Department PayPal, an eBay Company
</p></font>
        </blockquote>
        <p dir="ltr">
Right off you can tell that they didn't like something in our public Forums - a place
where anyone who can enter a user name can post anything they'd like.  Offhand
I don't even know what was at that topic ID as Neil deleted it once he saw this notification. 
We also use the PayPal account very, very rarely - I'd guess there were probably 5
transactions in the last 12 months, so how the hell they figured some violation by
"reviewing account activity" is beyond my comprehension.
</p>
        <p dir="ltr">
So Neil replid to them that we had no activity of the sort and that the material was
removed.  Shortly after that we got this:
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <font size="2">
            <p>
Dear Chris Tacke,
</p>
            <p>
Based on the information provided to you in our last email your account has been permanently
closed. Under the Acceptable Use Policy, PayPal may not be used to send or receive
payments or donations for obscene or certain sexually oriented goods or services.
The complete Acceptable Use Policy addressing Mature Audiences can be found at the
following URL: 
</p>
            <p>
            </p>
          </font>
          <a href="http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;ed=mature">
            <u>
              <font color="#0000ff" size="2">http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;ed=mature
</font>
            </u>
          </a>
          <font size="2">
            <p>
Unfortunately, we will be unable to overturn the limitation on your account. I do
apologize for any inconvenience this issue may be causing you at this time.
</p>
            <p>
Sincerely,<br />
PayPal Acceptable Use Policy Department<br />
PayPal an eBay Company
</p>
          </font>
        </blockquote>
        <p dir="ltr">
Nice.  One "infraction" of material, which we didn't post (again spammers are
the lowest form of life) and which we removed, and the close the account with really
no appeals process.  Not only do they charge fees way above what any other merchant
provider charges and not only do they tend to monopolize eBay commerce, they evidently
also employ a large number of morons. I like how they term "permanently closed" as
a "limitation on your account."
</p>
        <p dir="ltr">
How does a company like this stay in business?
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=f8d510ff-84f5-4989-8387-1ca0dc967970" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>PayPal needs a lesson in customer service</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,f8d510ff-84f5-4989-8387-1ca0dc967970.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2007/01/09/PayPalNeedsALessonInCustomerService.aspx</link>
      <pubDate>Tue, 09 Jan 2007 16:13:53 GMT</pubDate>
      <description>&lt;p&gt;
So this morning we got an email from PayPal:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;font size=2&gt; 
&lt;p&gt;
The PayPal User Agreement states that PayPal, at its sole discretion, reserves the
right to limit an account for any violation of the User Agreement, including the Acceptable
Use Policy. Under the Acceptable Use Policy, PayPal may not be used to send or receive
payments or donations for obscene or certain sexually oriented goods or services.
The complete Acceptable Use Policy addressing Mature Audiences can be found at the
following URL:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/font&gt;&lt;a href="http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;amp;ed=mature"&gt;&lt;u&gt;&lt;font color=#0000ff size=2&gt;http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;amp;ed=mature
&lt;/u&gt;&gt;&lt;/a&gt;&gt;
&lt;font size=2&gt; 
&lt;p&gt;
We are hereby notifying you that, after a recent review of your account activity,
it has been determined that you are in violation of PayPal's Acceptable Use Policy
regarding your website:
&lt;/p&gt;
&lt;p&gt;
&lt;/font&gt;&lt;a href="http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=8609"&gt;&lt;u&gt;&lt;font color=#0000ff size=2&gt;http://www.opennetcf.org/forums/topic.asp?TOPIC_ID=8609
&lt;/u&gt;&gt;&lt;/a&gt;&lt;font size=2&gt;. Therefore, your account has been permanently limited. &gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
If you have a remaining balance, you may withdraw the funds to your bank account.
Information on how to withdraw funds from your PayPal Account can be found at our
Help Center.
&lt;/p&gt;
&lt;p&gt;
You will need to remove all references to PayPal from your website(s) and/or auction(s).
This includes not only removing PayPal as a payment option, but also the PayPal logo
and/or shopping cart. We thank you in advance for your cooperation. If you have any
questions, please contact the PayPal Acceptable Use Policy Department at aup@paypal.com.
&lt;/p&gt;
&lt;p&gt;
Sincerely,
&lt;/p&gt;
&lt;p&gt;
PayPal Acceptable Use Policy Department PayPal, an eBay Company
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
Right off you can tell that they didn't like something in our public Forums - a place
where anyone who can enter a user name can post anything they'd like.&amp;nbsp; Offhand
I don't even know what was at that topic ID as Neil deleted it once he saw this notification.&amp;nbsp;
We also use the PayPal account very, very rarely - I'd guess there were probably 5
transactions in the last 12 months, so how the hell they figured some violation by
"reviewing account activity" is beyond my comprehension.
&lt;/p&gt;
&lt;p dir=ltr&gt;
So Neil replid to them that we had no activity of the sort and that the material was
removed.&amp;nbsp; Shortly after that we got this:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;font size=2&gt; 
&lt;p&gt;
Dear Chris Tacke,
&lt;/p&gt;
&lt;p&gt;
Based on the information provided to you in our last email your account has been permanently
closed. Under the Acceptable Use Policy, PayPal may not be used to send or receive
payments or donations for obscene or certain sexually oriented goods or services.
The complete Acceptable Use Policy addressing Mature Audiences can be found at the
following URL: 
&lt;/p&gt;
&lt;p&gt;
&lt;/font&gt;&lt;a href="http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;amp;ed=mature"&gt;&lt;u&gt;&lt;font color=#0000ff size=2&gt;http://www.paypal.com/cgi-bin/webscr?cmd=p/gen/ua/use/index_frame-outside&amp;amp;ed=mature
&lt;/u&gt;&gt;&lt;/a&gt;&lt;font size=2&gt; &gt;
&lt;p&gt;
Unfortunately, we will be unable to overturn the limitation on your account. I do
apologize for any inconvenience this issue may be causing you at this time.
&lt;/p&gt;
&lt;p&gt;
Sincerely,&lt;br&gt;
PayPal Acceptable Use Policy Department&lt;br&gt;
PayPal an eBay Company
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
Nice.&amp;nbsp; One "infraction" of material, which we didn't post (again spammers are
the lowest form of life) and which we removed, and the close the account with really
no appeals process.&amp;nbsp; Not only do they charge fees way above what any other merchant
provider charges and not only do they tend to monopolize eBay commerce, they evidently
also employ a large number of morons. I like how they term "permanently closed" as
a "limitation on your account."&gt;
&lt;/p&gt;
&lt;p dir=ltr&gt;
How does a company like this stay in business?
&lt;/p&gt;
&gt;&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=f8d510ff-84f5-4989-8387-1ca0dc967970" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=0b8b1aa2-8921-4335-8d84-762ef594caf7</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,0b8b1aa2-8921-4335-8d84-762ef594caf7.aspx</pingback:target>
      <dc:creator />
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well I just read a simple question in the newsgroups that had to do with an InitializeComponents
method exceeding the 64k JITted code maximum so I figured I'd post a link to the FAQ
on the OpenNETCF Wiki.  I went to get the link and lo and behold once again the
wiki was just full of spam.  Rather than go through it page by page an find the
changes I pulled down the DB locally and eradicated the spam.  So there's 45
minutes that I intended to spend working on a white paper that instead went down the
toilet.  
</p>
        <p>
I'm at the point that I've got no idea how to prevent the spam, and I just don't have
the time to routinely go in and clean the damned thing.  Don't be surprised if
in the near future the Wiki becomes unwikified and we just disable all posting or
redirect it back to the forums. It seems that what had the potential for being a useful
tool for agregating and disseminating information has been ruined by a few complete
jackass spammers.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=0b8b1aa2-8921-4335-8d84-762ef594caf7" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>The costs of Wiki spam</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,0b8b1aa2-8921-4335-8d84-762ef594caf7.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2005/05/30/TheCostsOfWikiSpam.aspx</link>
      <pubDate>Mon, 30 May 2005 02:17:16 GMT</pubDate>
      <description>&lt;p&gt;
Well I just read a simple question in the newsgroups that had to do with an InitializeComponents
method exceeding the 64k JITted code maximum so I figured I'd post a link to the FAQ
on the OpenNETCF Wiki.&amp;nbsp; I went to get the link and lo and behold once again the
wiki was just full of spam.&amp;nbsp; Rather than go through it page by page an find the
changes I pulled down the DB locally and eradicated the spam.&amp;nbsp; So there's 45
minutes that I intended to spend working on a white paper that instead went down the
toilet.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
I'm at the point that I've got no idea how to prevent the spam, and I just don't have
the time to routinely go in and clean the damned thing.&amp;nbsp; Don't be surprised if
in the near future the Wiki becomes unwikified and we just disable all posting or
redirect it back to the forums. It seems that what had the potential for being a useful
tool for agregating and disseminating information has been ruined by a few complete
jackass spammers.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=0b8b1aa2-8921-4335-8d84-762ef594caf7" /&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=8a2215c7-32c1-4d34-91ce-0b121dfa4270</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,8a2215c7-32c1-4d34-91ce-0b121dfa4270.aspx</pingback:target>
      <dc:creator />
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As if to mock me, I had three comment spams added to the blog last night.  While
I would like to continue allowing comments, especially since sometimes readers post
code fixes and useful information, but I refuse to allow spam and don't have time
to implement a captcha.  If you've got one working for dasBlog, email me and
let me know, otherwise commenting here will be turned off until I find the time to
integrate one myself.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=8a2215c7-32c1-4d34-91ce-0b121dfa4270" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>Sorry, no more commenting allowed</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,8a2215c7-32c1-4d34-91ce-0b121dfa4270.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2004/06/10/SorryNoMoreCommentingAllowed.aspx</link>
      <pubDate>Thu, 10 Jun 2004 13:31:12 GMT</pubDate>
      <description>&lt;p&gt;
As if to mock me, I had three comment spams added to the blog last night.&amp;nbsp; While
I would like to continue allowing comments, especially since sometimes readers post
code fixes and useful information, but I refuse to allow spam and don't have time
to implement a captcha.&amp;nbsp; If you've got one working for dasBlog, email me and
let me know, otherwise commenting here will be turned off until I find the time to
integrate one myself.
&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=8a2215c7-32c1-4d34-91ce-0b121dfa4270" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=17aad4d2-8145-4e7d-a4b2-fc8fe5b1f51f</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,17aad4d2-8145-4e7d-a4b2-fc8fe5b1f51f.aspx</pingback:target>
      <dc:creator />
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well I've migrated my blog engine to <a href="http://www.dasblog.net">dasBlog</a>. 
I'm not happy about the fact that it has poor <a href="http://www.mozilla.org/products/firefox/">FireFox</a> support
(readable, but not editable), but it does add the ability to edit and delete stuff
without having to manually modify the XML and since it was based on <a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?id=ddc98753-6559-489b-a533-57034790a93a">BlogX</a> it
was pretty simple to migrate the content.
</p>
        <p>
The primary motivator for the migration is blog spam.  <a href="/neilc">Neil</a>'s
using dasBlog and hasn't seen any spam yet, so I'm hoping just changing engines will
work - at least for a while.  I implemented a CAPTCHA in the Wiki, but adding
it here is a bit more work and I'd really rather do other things.
</p>
        <img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=17aad4d2-8145-4e7d-a4b2-fc8fe5b1f51f" />
        <br />
        <hr />
Managed Code in the Embedded World</body>
      <title>New Blog Engine</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,17aad4d2-8145-4e7d-a4b2-fc8fe5b1f51f.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2004/06/09/NewBlogEngine.aspx</link>
      <pubDate>Wed, 09 Jun 2004 16:02:49 GMT</pubDate>
      <description>&lt;p&gt;
Well I've migrated my blog engine to &lt;a href="http://www.dasblog.net"&gt;dasBlog&lt;/a&gt;.&amp;nbsp;
I'm not happy about the fact that it has poor &lt;a href="http://www.mozilla.org/products/firefox/"&gt;FireFox&lt;/a&gt; support
(readable, but not editable), but it does add the ability to edit and delete stuff
without having to manually modify the XML and since it was based on &lt;a href="http://www.gotdotnet.com/community/workspaces/workspace.aspx?id=ddc98753-6559-489b-a533-57034790a93a"&gt;BlogX&lt;/a&gt;&amp;nbsp;it
was pretty simple to migrate the content.
&lt;/p&gt;
&lt;p&gt;
The primary motivator for the migration is blog spam.&amp;nbsp; &lt;a href="/neilc"&gt;Neil&lt;/a&gt;'s
using dasBlog and hasn't seen any spam yet, so I'm hoping just changing engines will
work - at least for a while.&amp;nbsp; I implemented a CAPTCHA in the Wiki, but adding
it here is a bit more work and I'd really rather do other things.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=17aad4d2-8145-4e7d-a4b2-fc8fe5b1f51f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;Managed Code in the Embedded World</description>
      <category>Rants</category>
    </item>
    <item>
      <trackback:ping>http://blog.opennetcf.com/ctacke/Trackback.aspx?guid=51dc0df7-1466-43e4-9784-2cbd0d0eba93</trackback:ping>
      <pingback:server>http://blog.opennetcf.com/ctacke/pingback.aspx</pingback:server>
      <pingback:target>http://blog.opennetcf.com/ctacke/PermaLink,guid,51dc0df7-1466-43e4-9784-2cbd0d0eba93.aspx</pingback:target>
      <dc:creator />
      <title>eBay is great - until it's not</title>
      <guid isPermaLink="false">http://blog.opennetcf.com/ctacke/PermaLink,guid,51dc0df7-1466-43e4-9784-2cbd0d0eba93.aspx</guid>
      <link>http://blog.opennetcf.com/ctacke/2004/01/08/eBayIsGreatUntilItsNot.aspx</link>
      <pubDate>Thu, 08 Jan 2004 23:15:43 GMT</pubDate>
      <description>Protection or Problem&lt;img width="0" height="0" src="http://blog.opennetcf.com/ctacke/aggbug.ashx?id=51dc0df7-1466-43e4-9784-2cbd0d0eba93"/&gt;&lt;br/&gt;&lt;hr/&gt;Managed Code in the Embedded World</description>
      <category>Rants</category>
    </item>
  </channel>
</rss>