<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Michiel van Otegem, IT Composer</title>
  <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/" />
  <link rel="self" href="http://michiel.vanotegem.nl/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2012-02-01T14:58:55.5463894+01:00</updated>
  <author>
    <name>Michiel van Otegem</name>
  </author>
  <subtitle />
  <id>http://michiel.vanotegem.nl/</id>
  <generator uri="http://dasblog.info/" version="2.3.9074.18820">DasBlog</generator>
  <entry>
    <title>Masterclass Visual Studio LightSwitch door Beth Massi op 15 februari 2012</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2012/02/01/MasterclassVisualStudioLightSwitchDoorBethMassiOp15Februari2012.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,66b72f4a-9925-458e-b87b-6d110a8fe03c.aspx</id>
    <published>2012-02-01T14:58:55.5463894+01:00</published>
    <updated>2012-02-01T14:58:55.5463894+01:00</updated>
    <category term=".NET" label=".NET" scheme="http://michiel.vanotegem.nl/CategoryView,category,NET.aspx" />
    <category term="Evenementen" label="Evenementen" scheme="http://michiel.vanotegem.nl/CategoryView,category,Evenementen.aspx" />
    <category term="Nederlands" label="Nederlands" scheme="http://michiel.vanotegem.nl/CategoryView,category,Nederlands.aspx" />
    <category term="Silverlight" label="Silverlight" scheme="http://michiel.vanotegem.nl/CategoryView,category,Silverlight.aspx" />
    <category term="Visual Studio" label="Visual Studio" scheme="http://michiel.vanotegem.nl/CategoryView,category,VisualStudio.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Op 15 februari vanaf 18u15 geeft Beth Massi een gratis Masterclass Visual Studio LightSwitch.
Wees er snel bij, want je kunt je tot 10 februari inschrijven en er is een beperkt
aantal plaatsen. Zie de uitnodiging hieronder voor meer informatie.
</p>
        <iframe style="PADDING-BOTTOM: 0px; BACKGROUND-COLOR: #fcfcfc; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" title="Preview" height="120" marginheight="0" src="https://skydrive.live.com/embed?cid=8F0FEC59C78A724A&amp;resid=8F0FEC59C78A724A%21733&amp;authkey=AI-citiqAmG4PEQ" frameborder="0" width="98" marginwidth="0" scrolling="no">
        </iframe>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=66b72f4a-9925-458e-b87b-6d110a8fe03c" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Book Review: Programming Amazon EC2</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/12/09/BookReviewProgrammingAmazonEC2.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,e9e2de19-cace-4336-bdc7-51eb6cd5dfbd.aspx</id>
    <published>2011-12-09T14:47:36.398+01:00</published>
    <updated>2011-12-09T14:50:12.5221108+01:00</updated>
    <category term="Cloud" label="Cloud" scheme="http://michiel.vanotegem.nl/CategoryView,category,Cloud.aspx" />
    <category term="Development" label="Development" scheme="http://michiel.vanotegem.nl/CategoryView,category,Development.aspx" />
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="Review" label="Review" scheme="http://michiel.vanotegem.nl/CategoryView,category,Review.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.amazon.com/Programming-Amazon-EC2-Jurg-Vliet/dp/1449393683/aspnlcom-20">Programming
Amazon EC2</a> by Jurg van Vliet and Flavia Paganelli is practical in nature and takes
you through all the steps to create and configure accounts, develop applications,
and deploy applications. If you’re new to Amazon EC2 (and related services) this is
definitely a good place to start, because it goes through all the components Amazon
offers, such as S3/Cloudfront and RDS for data storage. It also looks at how you can
setup your application to scale up and down, and ensure your application has excellent
uptime. The book takes you by the hand based on some applications the authors have
created themselves. Although this approach makes the book practical, it sometimes
reads as (irritating) marketing for their applications.
</p>
        <p>
          <a href="http://www.amazon.com/Programming-Amazon-EC2-Jurg-Vliet/dp/1449393683/aspnlcom-20">
            <img border="0" src="http://covers.oreilly.com/images/9781449393687/s.gif" />
          </a>
        </p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=e9e2de19-cace-4336-bdc7-51eb6cd5dfbd" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Who is running my Workflow Service?</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/11/24/WhoIsRunningMyWorkflowService.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,01600cfa-faea-4e54-ba10-acd5c760d277.aspx</id>
    <published>2011-11-24T14:57:23.9984058+01:00</published>
    <updated>2011-11-24T14:57:23.9984058+01:00</updated>
    <category term=".NET" label=".NET" scheme="http://michiel.vanotegem.nl/CategoryView,category,NET.aspx" />
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="WCF" label="WCF" scheme="http://michiel.vanotegem.nl/CategoryView,category,WCF.aspx" />
    <category term="Windows Identity Foundation" label="Windows Identity Foundation" scheme="http://michiel.vanotegem.nl/CategoryView,category,WindowsIdentityFoundation.aspx" />
    <category term="Windows Workflow Foundation" label="Windows Workflow Foundation" scheme="http://michiel.vanotegem.nl/CategoryView,category,WindowsWorkflowFoundation.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Workflow Services in .NET 4 allow you to do long running processes. But when you
do that, there's an interesting question: when a workflow has been suspended, under
which user is the workflow running when it is active again. To answer this question
I created a simple workflow that writes the user in the current thread to a log.
On the initial call, the user making the call was logged (in this case I used Windows
Identity Foundation to authenticate, but this should be the same for all types of
authentication). After a Delay of a minute that user was gone, and instead the user
in the current thread was unauthenticated. This means that any code you call from
the workflow can't rely on Thread.CurrentPrincipal to get the proper authorizations.
You have to save the user, and somehow reinstate principal so it runs under the original
context. Alternatively you can use some form of delegation.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=01600cfa-faea-4e54-ba10-acd5c760d277" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Solving: Could not establish trust relationship for the SSL/TLS secure channel ...</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/11/14/SolvingCouldNotEstablishTrustRelationshipForTheSSLTLSSecureChannel.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,bb390dcb-e2dd-475c-8d2d-e3edd2c9c23f.aspx</id>
    <published>2011-11-14T12:31:02.316+01:00</published>
    <updated>2011-11-14T12:34:31.6119387+01:00</updated>
    <category term=".NET" label=".NET" scheme="http://michiel.vanotegem.nl/CategoryView,category,NET.aspx" />
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="WCF" label="WCF" scheme="http://michiel.vanotegem.nl/CategoryView,category,WCF.aspx" />
    <category term="Windows Identity Foundation" label="Windows Identity Foundation" scheme="http://michiel.vanotegem.nl/CategoryView,category,WindowsIdentityFoundation.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Working with Windows Idnentity Foundation can be quite a minefield. Solve one issue,
and the next creeps up. Because it's all these little tweaks to make it work, I often
find myself thinking "How did I solve that last time?" One of those issues is the
exception
</p>
        <p>
          <i>
            <font color="#FF0000">Could not establish trust relationship for the SSL/TLS secure
channel with authority 'somesite.runningunder.ssl'</font>
          </i>
        </p>
        <p>
There are two reasons why you can run into this exception, each discussed below.<br /></p>
        <p>
          <b>The certificate isn't trusted and/or the URL doesn't correspond with the URL in
the certificate.</b> If this is the case, you get certificate warnings when you browse
to the service WSDL with a browser. The best way to solve the former is to have your
(development) environment work with certificates it trusts. This means setting up
a Certificate Authority (Active Directory Certificate Services), placing the root
CA certificate in the Trusted Root Certificates of the machine your clients (and services)
run on, issuing the needed certificates from the CA, and placing these where they
are needed. Alternatively, you can just add a single line of code to your client so
it ignores certificate issues before you do any service call:
</p>
        <pre>System.Net.ServicePointManager.ServerCertificateValidationCallback =
    ((sender, certificate, chain, sslPolicyErrors) =&gt; true);</pre>
        <p>
          <font color="#FF0000">
            <b>WARNING! ONLY USE THE ABOVE CODE FOR DEVELOPMENT PURPOSES.
IT IS NOT SECURE.</b>
          </font>
          <br />
        </p>
        <p>
If after you've done the above you still get an exception, the above code is likely
not even being hit. That means you (also) have the problem below.<br /></p>
        <p>
          <b>You've setup identity trust in your client, and the certificate reference is incorrect.</b> This
often happens when you copied some configuration from somewhere, and forgot to change
the corresponding certificate reference. The red stuff in the client configuration
below (which is much longer in a real configuration) is the culprit. It should contain
the encoded certificate.<br /></p>
        <p>
        </p>
        <pre>
          <span style="color: Black; background-color: Transparent; font-family: Courier New; font-size: 11px">&lt;system.serviceModel&gt;
&lt;client&gt; &lt;endpoint address="https://YourServer/Service1.svc" binding="customBinding"
bindingConfiguration="CustomBinding_IService1" contract="ServiceReference1.IService1"
name="Service1Binding"&gt; &lt;identity&gt; &lt;certificate encodedValue="<font color="#FF0000">MIIF5jCCBM6gAwIBAgIKYSt2tQA...</font>"/&gt;
&lt;/identity&gt; &lt;/endpoint&gt; &lt;/client&gt; &lt;/system.serviceModel&gt;</span>
        </pre>
        <p>
        </p>
        <p>
To solve this, you need to get the base64 encoded certificate string, and paste it
in place of what's in there now. To get it you can do the following:
</p>
        <ol>
          <li>
Browse to the endpoint with your browser.</li>
          <li>
View the certificate information.</li>
          <li>
Save the certificate to file.</li>
          <li>
Open the certificate with notepad.</li>
          <li>
Copy the encoded value between the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
placeholders.<br /></li>
        </ol>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=bb390dcb-e2dd-475c-8d2d-e3edd2c9c23f" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Solving: The provided URI scheme 'https' is invalid; expected 'http'.Parameter name: via</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/11/08/SolvingTheProvidedURISchemeHttpsIsInvalidExpectedHttpParameterNameVia.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,70fe4e87-1e8a-4a15-9107-97f76b96df92.aspx</id>
    <published>2011-11-08T14:56:13.668+01:00</published>
    <updated>2011-11-14T12:34:56.5663225+01:00</updated>
    <category term=".NET" label=".NET" scheme="http://michiel.vanotegem.nl/CategoryView,category,NET.aspx" />
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="WCF" label="WCF" scheme="http://michiel.vanotegem.nl/CategoryView,category,WCF.aspx" />
    <category term="Windows Identity Foundation" label="Windows Identity Foundation" scheme="http://michiel.vanotegem.nl/CategoryView,category,WindowsIdentityFoundation.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I've been working with WCF for quite a while, and every so often I run into this exception:
</p>
        <p>
ArgumentException: The provided URI scheme 'https' is invalid; expected 'http'.Parameter
name: via
</p>
        <p>
The problem is obvious. You're trying to access a service under HTTPS, but it's being
called with HTTP. Under most bindings you can solve this by adding somehting like
this to the client binding configuration:
</p>
        <pre>&lt;binding name="MyBinding"&gt; 
  &lt;security mode="<span style="BACKGROUND-COLOR: yellow">Transport</span>"&gt;
&lt;transport clientCredentialType="None" /&gt; &lt;message clientCredentialType="None"
negotiateServiceCredential="false" establishSecurityContext="false" /&gt; &lt;/security&gt;
&lt;/binding&gt;</pre>
        <p>
When you use a (custom) ws2007FederationHttp binding, for instance when working
with Windows Identity Foundation, the above won't work. In that case you need to look
in the binding for the &lt;httpTransport&gt; element and replace it with &lt;http<span style="BACKGROUND-COLOR: yellow">s</span>Transport&gt;.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=70fe4e87-1e8a-4a15-9107-97f76b96df92" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Why SQL Audit is insufficient (and what you can do about it)</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/10/31/WhySQLAuditIsInsufficientAndWhatYouCanDoAboutIt.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,7e5086ff-cb3e-4dc9-8570-aa06b0a6ad07.aspx</id>
    <published>2011-10-31T17:00:06.707+01:00</published>
    <updated>2011-10-31T17:01:05.929135+01:00</updated>
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="SQL Server" label="SQL Server" scheme="http://michiel.vanotegem.nl/CategoryView,category,SQLServer.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I had the pleasure of diving into audit logging. I’m working on a government
project which involves the law making process, so it is imperative that all database
changes are completely traceable. That means that we need to be able to trace <strong>who
made which changes and when</strong>. We’re working with latest and greatest version
of SQL Server (i.e. SQL Server 2008 R2), which has a feature called SQL Audit. Reading
the documentation SQL Audit seemed to do everything we need, except that it doesn’t
know which application user is making the changes. This is logical since it is a web
application and we’re using delegation. For this reason we were already planning to
have the application send along the user id when it does an insert, update or delete,
and we decided to only logically delete a record. So far so good.
</p>
        <p>
When it came to testing, we quickly found that SQL Audit logs the SQL statement making
the change. Sounds right doesn’t it? Well actually it isn’t. LINQ-to-SQL, LINQ-to-Entities
and other O/R Mappers use parameter queries, and in fact if you edit records in the
SQL Management Studio UI, the same is true. The problem is that the <strong>parameters
are not part of the SQL statement being logged!</strong> So we can see which database
user made what kind of change, but not which data was changed, and hence not which
application user made the change either. Back to the drawing board :(.
</p>
        <p>
In reviewing our options, we looked at:
</p>
        <ul>
          <li>
All logging in the O/R Mapper: Not an option, because we need to know what DBA’s do
too. 
</li>
          <li>
SQL Trace: not recommended by Redmond, and it takes a huge performance hit. 
</li>
          <li>
Triggers: in transaction, taking enormous performance hit. 
</li>
          <li>
C2 auditing: tracks all changes, so it gathers huge amounts of data, not easily searchable. 
</li>
          <li>
Change Data Capture: really for BI purposes, deleted after three days, no indication
of the user making the change.</li>
        </ul>
        <p>
All of the above options have some sort of problem associated with it. The conclusion
is that there is no single solution, unless Microsoft fixes the SQL Audit issue (you
can vote on it here: <a href="https://connect.microsoft.com/SQLServer/feedback/details/624935/sql-server-2008-database-audit-on-insert-update-and-delete-actual-sql-and-not-parameter-values">https://connect.microsoft.com/SQLServer/feedback/details/624935/sql-server-2008-database-audit-on-insert-update-and-delete-actual-sql-and-not-parameter-values</a>).
</p>
        <p>
We now do the following:
</p>
        <ol>
          <li>
In the Data Access Layer add the application user that did the insert or update in
an extra field on the table. 
</li>
          <li>
Only do logical deletes (i.e. add a “Deleted” flag to a table). 
</li>
          <li>
Track all changes using Change Data Capture (which uses the transaction log and therefore
has less impact on performance). 
</li>
          <li>
Export CDC data to an “Audit Database” periodically (like using a data warehouse). 
</li>
          <li>
Use SQL Audit for all changes done by a database user other than the DB account used
by the application. 
</li>
          <li>
Export SQL Audit logs to the Audit Database periodically.</li>
        </ol>
        <p>
By cross referencing SQL Audit and CDC data, we can figure out who changed what if
the change was made outside the application. 
<br /></p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=7e5086ff-cb3e-4dc9-8570-aa06b0a6ad07" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Upgraded!</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/06/25/Upgraded.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,87dddcc4-0af4-4868-ba80-58fa68c87d55.aspx</id>
    <published>2011-06-26T00:33:48.8786799+02:00</published>
    <updated>2011-06-26T00:33:48.8786799+02:00</updated>
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <author>
      <name>Michiel van Otegem</name>
    </author>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just upgraded my blog to the latest version of dasBlog. I also moved to another
hosting provider. All content has been migrated, but there may be links that are not
working on very old posts. I'll check these in the coming days so everything works
as it should. If you happen to run ito problems, let me know.
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=87dddcc4-0af4-4868-ba80-58fa68c87d55" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Generic interfacing with Workflow Services</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/06/14/GenericInterfacingWithWorkflowServices.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,f2c02012-345d-41af-946f-49085125ee35.aspx</id>
    <published>2011-06-15T00:32:29.7037504+02:00</published>
    <updated>2011-06-15T00:32:29.7037504+02:00</updated>
    <category term=".NET" label=".NET" scheme="http://michiel.vanotegem.nl/CategoryView,category,NET.aspx" />
    <category term="AppFabric" label="AppFabric" scheme="http://michiel.vanotegem.nl/CategoryView,category,AppFabric.aspx" />
    <category term="Development" label="Development" scheme="http://michiel.vanotegem.nl/CategoryView,category,Development.aspx" />
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="WCF" label="WCF" scheme="http://michiel.vanotegem.nl/CategoryView,category,WCF.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm currently working on a project where we have a lot of semi-independent moving
parts. One aspect is that we communicate with different applications, in a BizTalk
style manner. We do this using Workflow Services to ensure delivery and have fault
tolerance when running inside Windows Server AppFabric (see my post <a href="http://michiel.vanotegem.nl/2011/03/22/WhatIsWindowsServerAppFabricAndWhyShouldIUseIt.aspx">What
is Windows Server AppFabric and why should I use it?</a>). However, we wanted to ensure
that these Workflow Services all provide the same interface from out side of the application,
so we can call into them generically. This by the way happens when a status changes
occurs on some entity we use. Getting the Workkflow Services to expose the same contract
(more or less) is relatively easy. You just ensure that all services use the name
namespace, operation name, and parameters. However, calling those generically through
WCF was a bigger challenge. Basically we have a table with state transitions, which
can hold some string of information about what to do. The choice we made is to have
this string be equivalent to the endpoint configuration in the web.config file. Now
all we need is a correct WCF contract, and off we go. That took a little tweaking
too, but with the help of the below two posts by Ron Jacobs, we were able
to pull it off:
</p>
        <ul>
          <li>
            <a href="http://blogs.msdn.com/b/rjacobs/archive/2010/07/30/making-a-workflowservice-work-like-a-wcf-service.aspx">How
to make a WorkflowService implement a contract</a>
          </li>
          <li>
            <a href="http://blogs.msdn.com/b/rjacobs/archive/2011/05/12/how-to-eliminate-tempuri-org-from-your-service-wsdl.aspx">How
to eliminate tempuri.org from your service WSDL</a>
          </li>
        </ul>
        <p>
Thanks Ron!
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=f2c02012-345d-41af-946f-49085125ee35" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Is HTML dead?</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/06/14/IsHTMLDead.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,8ec73d36-57ce-405a-ab36-98432152b62b.aspx</id>
    <published>2011-06-14T23:31:45.633+02:00</published>
    <updated>2011-06-20T11:11:40.6777568+02:00</updated>
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="HTML5" label="HTML5" scheme="http://michiel.vanotegem.nl/CategoryView,category,HTML5.aspx" />
    <category term="iOS" label="iOS" scheme="http://michiel.vanotegem.nl/CategoryView,category,iOS.aspx" />
    <category term="Windows" label="Windows" scheme="http://michiel.vanotegem.nl/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Yes, HTML is great. HTML5 (now just known as HTML) is going to be great. It will finally
bring that much needed functionality it’s been lacking all these years, and cross-platform
to boot. All the major browser vendors are saying HTML is great, and that their browser
supports it best. So what could possibly be wrong? Well, for one the browser really
seems to be an out-of-date mechanism to provide rich functionality. As an application
platform it’s coming apart at the seams, because users want applications that work
awesome on their device of choice. Forget the clunky, lowest common denominator browser-based
interface, users want Apps with a capital A!
</p>
        <p>
So while one side of the industry is focusing on standardizing on HTML, the other
side (within the same companies) is moving in an entirely different direction. The
amazing number of apps available and the growth rate in the Apple AppStore, and the
Android and Windows Phone equivalents, is the best evidence that this is actually
working better. Cross-platform? Forget it! Cross-platform is slow(er), one size fits
all, and most important… not sexy.
</p>
        <p>
Don’t underestimate the importance of being sexy. Let me explain by example. The Dutch
government has all laws published on the web at wetten.nl. That means it works in
all modern browsers on all platforms, including tablets and phones. There’s no flash
involved or anything, so it is truly cross-platform. Also, this is very much in line
with efforts of recent years to have the entire government use open standards and
open source (see NOIV at <a href="http://noiv.nl/service/english/">http://noiv.nl/service/english/</a>).
With mobile touch devices on the rise, the user interface of wetten.nl might need
an update to be more suitable to touch and smaller screens. Since the website is all
HTML, CSS, and JavaScript, the obvious and NOIV route would be to make adjustments
to suite the upcoming devices. But what happened instead? An iPad App was built. Is
this a logical choice? Nope, not even close. Even if you don’t look at NOIV and look
at reach. The website has a far wider reach, and if you wanted to do something beyond
that, well there’s a whole lot more Windows PCs out there than there are iPads. Not
to mention that it leaves other devices out in the cold. So really, that much effort
(and tax payer money) to build an App that adds nothing? Yep, that’s what “sexy” does.
</p>
        <p>
But wait, isn’t Microsoft betting on HTML with Windows 8? Maybe, but I’m not 100%
sure about that one yet. Also, Microsoft isn’t known for its choices when it comes
to mobile devices. Microsoft sort of invented the tablet almost 10 years ago, but
Apple has taken the credit. Microsoft phones haven’t done particularly well, although
Windows Phone shows promise. I love mine actually, but I rarely open the browser on
that thing. It’s all apps (yup, guilty!)
</p>
        <p>
Where does this leave us? Well, HTML is going to be around for a long long time, but
as things are going it will go back to its original purpose: browse information, and
primarily for PCs. PCs which are some are already saying are “legacy devices” (I personally
believe we’ll move more to hybrid devices, and different devices connected like
with Dropbox, Skydrive, iCloud etc.) For the development community this is actually
great. Where previously users were complaining about stuff not being cross-platform,
they are now actually demanding customized apps for the specific platform they are
using, and the government actually tramples over its own guidelines. This means developers
have an excuse to have to build an app for at least two or three platforms, so we
won’t be out of a job anytime soon. That said, it means that what’s going on at the
server is getting more important, because we have to reuse functionality at some level
for the costs not to get out of hand. Enter cloud computing, which is great for developers
like me: graphically impaired. This by the way is also great for internet providers,
providing they can keep up with the bandwidth demand.
</p>
        <p>
As a developer all I can say is thank you Mr. Jobs for putting users with their nuts
in the bear trap, and loving it. 
</p>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=8ec73d36-57ce-405a-ab36-98432152b62b" />
      </div>
    </content>
  </entry>
  <entry>
    <title>IE9 Developer Tools</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/06/07/IE9DeveloperTools.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,c6a5e366-79ed-48d2-a5b3-cbc06e1ebf09.aspx</id>
    <published>2011-06-07T23:53:18.826+02:00</published>
    <updated>2011-06-07T23:57:57.5977264+02:00</updated>
    <category term="ASP.NET" label="ASP.NET" scheme="http://michiel.vanotegem.nl/CategoryView,category,ASPNET.aspx" />
    <category term="Development" label="Development" scheme="http://michiel.vanotegem.nl/CategoryView,category,Development.aspx" />
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="HTML5" label="HTML5" scheme="http://michiel.vanotegem.nl/CategoryView,category,HTML5.aspx" />
    <category term="Review" label="Review" scheme="http://michiel.vanotegem.nl/CategoryView,category,Review.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">In recent years the development story for
Internet Explorer wasn't particularly appealing. If you wanted to fix CSS and JavaScript
errors, IE was definitely not the tool you wanted to use. Also, seeing what was going
over the wire wasn't possible with IE, and as a result developers flocked to FireFox
and other browsers offering (plugins) to help with these issues. You don't have to
be a genius to understand that in the long run this wasn't helping IE in terms of
market share. And with the renewed focus on webbased (HTML5) apps, Microsoft has stepped
up and produced built in developer tools, also known as the F12 developer tools. So,
what's in there and what can you do with it?<br /><h3>What's taking so long?
</h3>
As with IE8, there are inspector tools for HTML, CSS, and script. Since I am by no
means an HTML/CSS guy, I'm not the best judge when it comes to these tools, but for
what I need from those I've been pretty satisfied. For me, the new profiler and network
tools are much more interesting, because they respectively hook into the browser rendering
engine and what's going over the wire with HTTP. If you've been using tools such as
Fiddler or HttpWatch, the latter of the two should be more or less familiar. As you
can see in the image below, it shows all the HTTP requests going out to the server,
when in the timeline these requests were going out, and how long that took. If you've
never seen something like this, you can see that this provides great insight into
what goes down under the covers.<br /><br /><img src="http://michiel.vanotegem.nl/content/binary/F12tools11.png" border="0" /><p></p>
If you need more details about the timing information, you can select one of the items,
and see more. As you can see below, that information doesn't only include HTTP information,
but also information about the time it took to render and JavaScript to fire. If there's
a page that is slow to appear in the browser screen, this will give you great insight
into where your time is going.<br /><br /><img src="http://michiel.vanotegem.nl/content/binary/F12tools21.png" border="0" /><br /><br />
Is this functionality better than commercial tools such as HttpWatch? Not at this
time, but I have a feeling Microsoft isn't done yet. Tools like that are specialized,
and Microsoft is playing catchup. One annoying thing I found is that if I have multiple
requests bouncing back and forth, filling in a form, etc. IE9 tools will only show
me the last interaction. It could be I'm missing something, but I haven't been able
to figure out how to see the whole list of requests since I started capturing, and
I'm too lazy to figure it out. That means I find myself going back to HttpWatch for
that (at the moment). That said, the tooling is good, so if you don't want to spend
the extra dime for other tooling, this will do in most cases. Except of course that
this only works in IE9, whereas some of the tools out there work in multiple browsers.
But wait... there's more.<br /><h3>What I'm I getting?
</h3>
An interesting question is always: what HTML will a certain browser actually get.
This is where the F12 tools have another nice new feature. You can change the user
agent string the server is receiving, and as a result inspect what happens on the
HTML, CSS, script side when other browsers come in. Obviously this doesn't make IE9
behave itself as one of the other browsers, but it can provide nice insights nonetheless,
especially to tweak what robots are seeing.<br /><br /><img src="http://michiel.vanotegem.nl/content/binary/F12tools4.png" border="0" /><br /><h3>How will it look?
</h3>
The last thing that I fond really useful is the ability to change the browser so you
can check the user experience for users with different settings. As you can see from
the image below, you can disable css, script, and the pop-up blocker. In the environment
I'm working in now, there's often the need to see whether everything still works if
JavaScript is disabled, and there this is a great tool. It definitely beats going
into the browser settings and changing these settings every time you have to test.<br /><br /><img src="http://michiel.vanotegem.nl/content/binary/F12tools5.png" border="0" /><br /><br />
Last but not least, you can easily resize the browser screen to fit a certain size.
I always used Windows Sizer for this, but having this built in is better, because
I rarely use it for anything but webdevelopment.<br /><br /><img src="http://michiel.vanotegem.nl/content/binary/F12tools3.png" border="0" /><br /><h3>What's more?<br /></h3>
There's a whole bunch of stuff I haven't gone into here, so I advise you to play around
with the F12 tools for a while. I'm also betting we'll see a lot more where this came
from in the not too distant future. Microsoft is investing heavily in HTML5, and is
actually trying to use "the best HTML5 support" as a unique selling point for Windows.<img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=c6a5e366-79ed-48d2-a5b3-cbc06e1ebf09" /></div>
    </content>
  </entry>
  <entry>
    <title>Book Review: Developing Applications for the Cloud on the Microsoft Windows Azure Platform</title>
    <link rel="alternate" type="text/html" href="http://michiel.vanotegem.nl/2011/05/01/BookReviewDevelopingApplicationsForTheCloudOnTheMicrosoftWindowsAzurePlatform.aspx" />
    <id>http://michiel.vanotegem.nl/PermaLink,guid,02d6d6e7-ab29-4446-b992-9b4d9f616093.aspx</id>
    <published>2011-05-01T23:53:24.5381712+02:00</published>
    <updated>2011-05-01T23:53:24.5381712+02:00</updated>
    <category term="English" label="English" scheme="http://michiel.vanotegem.nl/CategoryView,category,English.aspx" />
    <category term="Review" label="Review" scheme="http://michiel.vanotegem.nl/CategoryView,category,Review.aspx" />
    <category term="Windows Azure" label="Windows Azure" scheme="http://michiel.vanotegem.nl/CategoryView,category,WindowsAzure.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you're a developer using the Microsoft platform and want to learn Windows Azure
development, <a href="http://www.amazon.com/Developing-Applications-Microsoft%C2%AE-Platform-Practices/dp/0735656061/aspnlcom-20">Developing
Applications for the Cloud on the Microsoft Windows Azure Platform (Patterns &amp;
Practices)</a> is the book for you. It's a clear book which rides on a good practical
case that covers most of the important angles. Because this is a Practice &amp; Patterns
book, it also spends quite some time teaching you the right mindset for building (multi-tenant)
cloud applications.
</p>
        <p>
The downside of the book is that it really assumes a good familiarity with the Microsoft
.NET Framework and C#. Without that, you're not going to understand much of the cases,
apart from the high-level cloud information. That said, the book starts with a good
explanation of why you would want to build cloud applications, the types of scenario's
that fit well, and what Windows Azure (and in more general terms Platform-as-a-Service)
development means. The example case really covers most scenario's and
choices people will come across, and that means it also covers all the core technologies
within Windows Azure. Another great thing about the book is the many links to articles
and other (free e-)books that provide deeper insight into a certain aspect or technology.
Be aware that Windows Azure is a fast moving platform, with changes on a regular basis.
Although most of the core concepts in this book will remain the same for a long time,
it can't keep up with all the new developments. I hope new editions will follow to
keep up with the changes.
</p>
        <a href="http://www.amazon.com/Developing-Applications-Microsoft%C2%AE-Platform-Practices/dp/0735656061/aspnlcom-20">
          <img border="0" src="http://michiel.vanotegem.nl/content/binary/s.gif" />
        </a>
        <img width="0" height="0" src="http://michiel.vanotegem.nl/aggbug.ashx?id=02d6d6e7-ab29-4446-b992-9b4d9f616093" />
      </div>
    </content>
  </entry>
</feed>
