Monthly Archives: August 2013

Book Review – Arduino Workshop: A Hands-On Introduction with 65 Projects

Before reading Arduino Workshop: A Hands-On Introduction with 65 Projects (John Boxall, No Starch Press) I knew what Arduino was, but other than that knew nothing about it. This book for me was the perfect starting point, because it not only tells you what Arduino is, but effectively demonstrates its capabilities. Along the way you get a crash course in electronics (resistors, transistors, switches etc.) and programming. I personally didn’t need the latter, but for people with no programming experience this book will do the trick. That said, I believe the learning curve is quite steep, so you may want to look at another book for the basics of programming (preferably in a language like C#, Java or Javascript), as that comes close to the language used with Arduino). Overall this book is a good read to get started with Arduino. It is written fairly well and the projects give you a good idea of the possibilities. You can also pick stuff from the projects to use in your own. Because some projects build on previous projects, you get a sense of how to build something with Arduino.

Migrated my blog to WordPress

I’ve been wanting to migrate my blog to WordPress for quite a while, and I finally did it.

Why?
Even though dasBlog is a nice blogging engine, it is not quite as feature rich and user friendly as WordPress. There are tons of plugins and templates for WordPress that make my life as a blogger easier, and give the reader a better user experience.

I also wanted my blog to be more than just my blog, and you’ll see some additional pages appear of the course of time. This too I could have done with dasBlog, but it is much easier with WordPress.

How?
Reeves Little has an awesome post on migrating from dasBlog to WordPress, which I followed to the letter. Many thanks to him. It took me about 4 hours to do with some trial and error, mainly because of my large BlogML file.

Now what?
As I just mentioned I will add some pages to the site. This will mostly be self gratified boasting of what I’ve done as an author. I will also be tinkering with the layout, in search of the ultimate look & feel. Last but not least, I will be checking all the posts for broken stuff and to clean up the code listings which are filled with formatting no longer needed, a few posts at a time. Feel free to drop me a line of you find a post with errors.

Book Review – Disruptive Possibilities: How Big Data Changes Everything

Even though this is just a little book (just 80 pages), Disruptive Possibilities: How Big Data Changes Everything (Jeffrey Needham, O’Reilly) is a very good and insightful read. Jeffrey Needham explains very well what Big Data is and how it differs from “traditional” computing. He effectively shows you need to approach Big Data differently, because the “old school” approach to data just doesn’t scale. In that sense he echo’s my view on the subject of data: not all data needs to be normalized and transactional and you can save a lot of effort and money (on expensive hardware and software) by picking the right requirements for types of data you are dealing with. For instance, you would need a pretty good reason to store a file in a RDBMS. Because most current IT staff has been brought up with in the RDMBS paradigm, it is often the tool of choice, without thinking about it. This book effectively breaks with that way of thinking, and I would encourage developers, architects, database administrators etc. to read this book to get a sense of perspective. It would greatly help us in not making the mistake of tackling “new world” problems with “old world” solutions. The book is very easy to read, with good examples, funny stories, and insightful comments. There’s also a side step into neuro science and the future of supercomputing, which is not only good to know, but interesting in itself.

Book Review: Quiet: The Power of Introverts in a World That Can’t Stop Talking

Quiet: The Power of Introverts in a World That Can’t Stop Talking by Susan Cain is a very insightful book into introversion and extroversion. Because we deal with people at different positions on the introversion-extroversion spectrum every day, the book may open your eyes to how certain people react to you or to specific situations. IMHO this especially helps to understand children, because they are no yet adapt at hiding their true nature. So if you’re a mother, father, teacher, coach etc. this book can really help you. The book is very thorough, with a lot of personal insights backed up by scientific research. It is also pretty easy to read because it is told around experiences of the author. The book starts of with exploring extroversion and introversion and how these traits are perceived in western culture, and continues with the discussing the (dis)advantages of both traits. It the continues with giving you deeper understanding of where these traits come from and how they affect the way people think. Finally, the book gives pointer on how to deal with people at different ends of the spectrum.

Automatically generate Federation Metadata for your ASP.NET application

After having to generate Federation Metadata for the umpteenst time I decided it was time to deal with it once and for all. A tool like Thinktecture’s WS-Federation Generation Wizard is nice, but even that gets old after a while. Especially if you need to sign the metadata and the certificate is only on the hosting server. Fortunately, creating Federation Metadata for a passive endpoint is fairly easy, as the code below demonstrates. The code reads the current configuration from the system.identityModel section in web.config, so all you need to do is ensure it reflects your host configuration for a particular deployment (dev, test, acceptance, production). Of course you can manage that in Visual Studio with build management and config transforms.

private const string Saml10TokenTypeIdentifier = “urn:oasis:names:tc:SAML:1.0:assertion”;
private const string WsFederation12ProtocolIdentifier = “http://docs.oasis-open.org/wsfed/federation/200706″;

public string GenerateMetadata()
{
    return CreateMetadataString(CreateEntityDescriptor());
}

private EntityDescriptor CreateEntityDescriptor()
{
    var entityDescriptor = new EntityDescriptor();
    var applicationServiceDescriptor = new ApplicationServiceDescriptor();
    var config = FederatedAuthentication.FederationConfiguration;
    entityDescriptor.EntityId = new EntityId(config.WsFederationConfiguration.Realm);
    if (config.ServiceCertificate != null)
    {
        entityDescriptor.SigningCredentials = new X509SigningCredentials(config.ServiceCertificate);
        applicationServiceDescriptor.Keys.Add(GetSingingKey(config.ServiceCertificate));
    }
    applicationServiceDescriptor.ProtocolsSupported.Add(new Uri(WsFederation12ProtocolIdentifier));
    applicationServiceDescriptor.PassiveRequestorEndpoints.Add(new EndpointReference(config.WsFederationConfiguration.Realm));
    applicationServiceDescriptor.TargetScopes.Add(new EndpointReference(config.WsFederationConfiguration.Realm));
    entityDescriptor.RoleDescriptors.Add(applicationServiceDescriptor);
    return entityDescriptor;
}

private static string CreateMetadataString(EntityDescriptor entityDescriptor)
{
    var serializer = new MetadataSerializer();
    var stream = new MemoryStream();
    serializer.WriteMetadata(stream, entityDescriptor);
    stream.Seek(0L, SeekOrigin.Begin);
    return Encoding.UTF8.GetString(stream.ToArray());
}

private KeyDescriptor GetSingingKey(X509Certificate2 certificate)
{
    var x509Token = new X509SecurityToken(certificate);
    var x509RawDataKeyIdentifierClause = x509Token.CreateKeyIdentifierClause();
    var securityKeyIdentifierClause = new SecurityKeyIdentifierClause[]
                                            {
                                                x509RawDataKeyIdentifierClause
                                            };
    return new KeyDescriptor(new SecurityKeyIdentifier(securityKeyIdentifierClause))
    {
        Use = KeyType.Signing
    };
}