<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Home - MichD on MichD</title>
		<link>https://michd.me/</link>
		<description>Recent content in Home - MichD on MichD</description>
		<generator>Hugo</generator>
		<language>en-gb</language>
		
		
		
		
			<lastBuildDate>Sun, 11 Oct 2026 22:25:00 +0100</lastBuildDate>
		
			<atom:link href="https://michd.me/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>A Love Letter to Kotlin&#39;s sealed interface</title>
				<link>https://michd.me/blog/a-love-letter-to-kotlin-sealed-interface/</link>
				<pubDate>Sun, 11 Oct 2026 22:25:00 +0100</pubDate>
				<guid>https://michd.me/blog/a-love-letter-to-kotlin-sealed-interface/</guid>
				<description>&lt;!-- On the off chance that anyone out there still cares to discuss designing maintainable systems in 2026. --&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve been writing Android apps in &lt;a href=&#34;https://kotlinlang.org&#34;&gt;Kotlin&lt;/a&gt; for some 7 years now, and in the last couple years I&amp;rsquo;ve really come to appreciate how its features enable building robust systems. One feature in specific is usually central to what I come up with: the &lt;code&gt;sealed interface&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Below, I introduce the sealed interface and explain some of the qualities and restrictions that make it so powerful. I then provide some real world examples and talk a bit about some software engineering principles I&amp;rsquo;ve picked up on over the years.&lt;/p&gt;&#xA;&lt;p&gt;This post assumes you have experience writing object-oriented software, and understand the concept of interfaces, classes, instances, and the rough idea of compilers. My Kotlin background is in Android app development, so that is the context of my examples, but the ideas are certainly applicable elsewhere.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-a-sealed-interface&#34;&gt;What is a sealed interface?&lt;/h2&gt;&#xA;&lt;p&gt;You can go read it in the language authors&amp;rsquo; own words if you like: &lt;a href=&#34;https://kotlinlang.org/docs/sealed-classes.html&#34;&gt;Sealed classes and interfaces on kotlinlang.org&lt;/a&gt; &amp;hellip; but I&amp;rsquo;ll try my own hand at explaining them as well.&lt;/p&gt;&#xA;&lt;p&gt;A sealed interface is an interface for which all the &lt;strong&gt;direct&lt;/strong&gt; implementations are &lt;strong&gt;known at compile time&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;known-at-compile-time&#34;&gt;Known at compile time&lt;/h3&gt;&#xA;&lt;p&gt;This is the primary thing, because it carries very useful implications. Knowing of all implementations at compile time allows the language to have constructs that require all of them to be covered for the program to be valid. This construct is &lt;a href=&#34;https://kotlinlang.org/docs/control-flow.html#when-expressions-and-statements&#34;&gt;&amp;ldquo;when&amp;rdquo;&lt;/a&gt;—with roots in the switch/case you may know in other languages.&lt;/p&gt;&#xA;&lt;p&gt;In a &lt;code&gt;when (expression)&lt;/code&gt; control flow or expression, you write branches for all possibilities for the given expression. If you omit any possibility and have no &lt;code&gt;else -&amp;gt;&lt;/code&gt; fallback, the compiler will complain and tell you about the options that aren&amp;rsquo;t covered.&lt;/p&gt;&#xA;&lt;p&gt;If we supply an expression that&amp;rsquo;s an instance of a &lt;code&gt;sealed interface&lt;/code&gt; type, we can check against things about that instance to cover all possibilities. Typically we&amp;rsquo;ll want to go down different code paths for different implementations of the sealed interface type.&lt;/p&gt;&#xA;&lt;p&gt;This could look as follows:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kt&#34; data-lang=&#34;kt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;sealed&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UserContext&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;object&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Unauthenticated&lt;/span&gt; : UserContext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Authenticated&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;val&lt;/span&gt; user: UserData) : UserContext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above example represents the state of a user in an app. Either they&amp;rsquo;re logged out (Unauthenticated), or they are Authenticated, and we have some further data of them available.&lt;/p&gt;&#xA;&lt;p&gt;Say we want to navigate to a different area of the app based on this value:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kt&#34; data-lang=&#34;kt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;fun&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;navigateBasedOnUserContext&lt;/span&gt;(context: UserContext) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;when&lt;/span&gt; (context) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;UserContext&lt;/span&gt;.Unauthenticated &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; navigation.toLoginScreen()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UserContext&lt;/span&gt;.Authenticated &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; navigation.toMemberArea(context.user.id)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now let&amp;rsquo;s say we want to add another possibility to &lt;code&gt;UserContext&lt;/code&gt;: &lt;code&gt;PayingUser&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-kt&#34; data-lang=&#34;kt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;sealed&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UserContext&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;object&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Unauthenticated&lt;/span&gt; : UserContext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Authenticated&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;val&lt;/span&gt; user: UserData) : UserContext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// New:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PayingUser&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;val&lt;/span&gt; user: UserData,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;val&lt;/span&gt; subscription: SubscriptionData&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    ) : UserContext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If we try to compile this without further ado, the earlier &lt;code&gt;navigateBasedOnUserContext&lt;/code&gt; function will fail to compile, since neither of its two &lt;code&gt;when&lt;/code&gt; branches matches &lt;code&gt;context&lt;/code&gt; being an implementation of &lt;code&gt;UserContext.PayingUser&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: A good &lt;abbr title=&#34;Integrated Development Environment&#34;&gt;IDE&lt;/abbr&gt; like IntelliJ IDEA or the derived Android Studio will have a contextual option &amp;ldquo;add remaining branches&amp;rdquo; that provides stubs for each branch you&amp;rsquo;ve not already specified, saving you the time looking up all the implementations.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Having an Upcoming Thing while Autistic</title>
				<link>https://michd.me/blog/having-an-upcoming-thing-while-autistic/</link>
				<pubDate>Fri, 01 Aug 2025 22:35:00 +0100</pubDate>
				<guid>https://michd.me/blog/having-an-upcoming-thing-while-autistic/</guid>
				<description>&lt;p&gt;In late 2023 I identified I&amp;rsquo;m probably autistic&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. I really dived into the topic; I read and watched loads of experiences of autistic people, joined communities, made new friends online, and learned a lot about myself. In January 2025, I did get a formal diagnosis, letting me mostly put to rest the self-doubting voice in the back of my head. Realising this and reframing my life with this information continues to be quite impactful to me.&lt;/p&gt;&#xA;&lt;p&gt;I initially thought I&amp;rsquo;d write a big personal post detailing all the bits about my life that pointed toward this conclusion, and going in depth on the whole journey, but I decided against it. After all, I already kind of did, in the form of a 53 page PDF I sent to the assessment team ahead of our sessions.&lt;/p&gt;&#xA;&lt;p&gt;Moving on though, I&amp;rsquo;d like to write about more particular areas of the autistic experience. The usual disclaimers apply; I can only really write from my own perspective, even if my reflections are partially informed by other people&amp;rsquo;s accounts. If you&amp;rsquo;ve met one autistic person, you&amp;rsquo;ve met &lt;em&gt;one&lt;/em&gt; autistic person.&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;an-upcoming-thing&#34;&gt;An Upcoming Thing&lt;/h2&gt;&#xA;&lt;p&gt;Onto the subject matter; what do I mean by having an Upcoming Thing?&lt;/p&gt;&#xA;&lt;p&gt;Well, this can be many things, but primarily it entails:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An event is happening in the future. This can be later today, in a few days, or even months from now.&lt;/li&gt;&#xA;&lt;li&gt;The event is something I have to take some action for in preparation.&lt;/li&gt;&#xA;&lt;li&gt;Usually, it involves other people.&lt;/li&gt;&#xA;&lt;li&gt;The event has one or more aspects to it that are hard or impossible to predict.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Now</title>
				<link>https://michd.me/now/</link>
				<pubDate>Wed, 12 Jul 2023 10:00:00 +0000</pubDate>
				<guid>https://michd.me/now/</guid>
				<description>&lt;p&gt;What&amp;rsquo;s going on with me right now? This page seeks to answer that question.&lt;/p&gt;&#xA;&lt;h2 id=&#34;enjoying&#34;&gt;Enjoying&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve recently discovered &lt;a href=&#34;https://www.aurora-music.com/&#34;&gt;AURORA&lt;/a&gt;&amp;rsquo;s music and I&amp;rsquo;m very much enjoying the albums &lt;a href=&#34;https://www.discogs.com/master/1583739-Aurora-Infections-Of-A-Different-Kind-Step-1&#34;&gt;Infections Of A Different Kind (Step 1)&lt;/a&gt; and &lt;a href=&#34;https://www.discogs.com/master/1560055-AURORA-A-Different-Kind-Of-Human-Step-2&#34;&gt;A Different Kind of Human (Step 2)&lt;/a&gt;. They&amp;rsquo;re entirely great, but some of my favourite tracks include &lt;em&gt;Gentle Earthquakes&lt;/em&gt;, &lt;em&gt;Churchyard&lt;/em&gt;, &lt;em&gt;A Different Kind Of Human&lt;/em&gt;, and &lt;em&gt;The Seed&lt;/em&gt;. In particular, &lt;a href=&#34;https://www.youtube.com/watch?v=h1mPu8GQzdQ&#34;&gt;&lt;em&gt;A Different Kind Of Human&lt;/em&gt;&lt;/a&gt; has a uniquely soothing quality to me.&lt;/li&gt;&#xA;&lt;li&gt;We&amp;rsquo;ve been rewatching &lt;a href=&#34;https://www.imdb.com/title/tt0092455&#34;&gt;Star Trek: The Next Generation&lt;/a&gt; for the third time or so. We&amp;rsquo;re also enjoying the 2nd season of &lt;a href=&#34;https://www.imdb.com/title/tt12327578&#34;&gt;Star Trek: Strange New Worlds&lt;/a&gt;- it&amp;rsquo;s by far the most Star Trek of the new Star Trek series from the past 10 years or so. That said, it&amp;rsquo;s awesome there&amp;rsquo;s so much new Star Trek.&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;ve recently finished watching the first season of &lt;a href=&#34;https://www.imdb.com/title/tt14688458/&#34;&gt;Silo&lt;/a&gt;, a series adaption of Hugh Howey&amp;rsquo;s &lt;a href=&#34;https://www.goodreads.com/series/106702-wool&#34;&gt;Wool series books&lt;/a&gt; I enjoyed reading over a decade ago. I guess it differs quite a bit but I still very much liked it.&lt;/li&gt;&#xA;&lt;li&gt;I&amp;rsquo;m in the 6th book of the Expanse series, &lt;a href=&#34;https://www.goodreads.com/book/show/25877663-babylon-s-ashes&#34;&gt;&lt;em&gt;Babylon&amp;rsquo;s Ashes&lt;/em&gt;&lt;/a&gt;; I&amp;rsquo;ve been loving the books so far. I&amp;rsquo;ve also been rewatching the tv series for the 3rd time.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;doing&#34;&gt;Doing&lt;/h2&gt;&#xA;&lt;p&gt;These are things I&amp;rsquo;m putting my time into at the moment.&lt;/p&gt;</description>
			</item>
			<item>
				<title>MIDI Message Format Reference</title>
				<link>https://michd.me/jottings/midi-message-format-reference/</link>
				<pubDate>Sat, 27 May 2023 12:00:00 +0000</pubDate>
				<guid>https://michd.me/jottings/midi-message-format-reference/</guid>
				<description>&lt;p&gt;I put together this article as a somewhat more comprehensive overview / manual of MIDI 1.0 messaging than the &lt;a href=&#34;https://www.midi.org/specifications-old/item/table-1-summary-of-midi-message&#34;&gt;Summary of MIDI messages&lt;/a&gt; for my own reference. Hopefully it&amp;rsquo;s of use to others as well.&lt;/p&gt;&#xA;&lt;p&gt;Adapted from Summary of MIDI Messages and further &lt;a href=&#34;https://www.midi.org/specifications-old/category/reference-tables&#34;&gt;reference tables&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;#glossary-and-formatting&#34;&gt;Glossary And Formatting&lt;/a&gt; at the bottom of this article to help understand this article.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;MIDI comes in the form of messages of one or more bytes. The first byte of a message is called the &lt;strong&gt;Status&lt;/strong&gt; message. Its Most Significant Bit (MSB) is always 1. Any additional data bytes that follow have a MSB of 0, and thus have 7 bits worth of space for 128 possible values.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Integrating our Air Conditioners into Home Assistant</title>
				<link>https://michd.me/blog/integrating-our-air-conditioners-into-home-assisstant/</link>
				<pubDate>Sun, 19 Mar 2023 19:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/integrating-our-air-conditioners-into-home-assisstant/</guid>
				<description>&lt;p&gt;I added Home Assistant control to our air conditioner units. It involved PCB design, some 3D printing, equipment modification, and ESPHome.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;centered&#34;&gt;&#xA;  &lt;figure&gt;&#xA;    &lt;a href=&#34;https://michd.me/blog/integrating-our-air-conditioners-into-home-assisstant/hero-image.jpg&#34; title=&#34;Click for full size&#34;&gt;&#xA;      &lt;img src=&#34;https://michd.me/blog/integrating-our-air-conditioners-into-home-assisstant/hero-image_hu_ef8c8f8023d6081b.jpg&#34; alt=&#34;Composite of 3 photos: An inside unit of an air-conditioning system, The handheld remote controller for that unit, and an assortment of electronics involved in modifying the AC unit. The last image has the logos of Home Assistant and ESPHome overlaid.&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/figure&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Bash: Run arbitrary command(s) when a log entry appears</title>
				<link>https://michd.me/jottings/bash-command-on-log-entry/</link>
				<pubDate>Thu, 17 Nov 2022 12:00:00 +0000</pubDate>
				<guid>https://michd.me/jottings/bash-command-on-log-entry/</guid>
				<description>&lt;p&gt;During my work on Android apps, I regularly end up debugging things that only happen after a long wait, particularly when it&amp;rsquo;s concerning streaming music, and playing adverts. If I end up having to wait for 10+ minutes, I won&amp;rsquo;t be staring at the device the entire time.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, this means I can easily miss events I&amp;rsquo;m interested in.&lt;/p&gt;&#xA;&lt;p&gt;Android fortunately has &lt;a href=&#34;https://developer.android.com/studio/command-line/logcat&#34;&gt;adb&amp;rsquo;s logcat&lt;/a&gt;, a way to view incoming logging messages. I can view this in the IDE I&amp;rsquo;m working on, but it&amp;rsquo;s available directly from the command line as well, as &lt;code&gt;adb logcat&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>DIY: Garage to Workshop Conversion</title>
				<link>https://michd.me/blog/diy-garage-to-workshop-conversion/</link>
				<pubDate>Tue, 10 May 2022 23:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/diy-garage-to-workshop-conversion/</guid>
				<description>&lt;p&gt;In June 2021, my partner Brittany and I realised a dream: we bought a house. When viewing the place, the owners showed surprise about us wanting to have a look at the standalone double garage. It was packed full of unwanted stuff, leaving barely any room to walk. As &amp;ldquo;makers&amp;rdquo;, we had some different ideas for the space. Soon after we got the keys, we got to work.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get the before/after out of the way before going through the whole thing.&lt;/p&gt;&#xA;&lt;h3 id=&#34;before&#34;&gt;Before&lt;/h3&gt;&#xA;&lt;p&gt;How we found the garage on the day we received the keys, June 11th. The previous owners cleared out most of their stuff, but left us a few things we might find useful.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;centered&#34;&gt;&#xA;  &lt;figure&gt;&#xA;    &lt;a href=&#34;https://michd.me/blog/diy-garage-to-workshop-conversion/before_img_20210611_154241.jpg&#34; title=&#34;Click for full size&#34;&gt;&#xA;      &lt;img src=&#34;https://michd.me/blog/diy-garage-to-workshop-conversion/before_img_20210611_154241_hu_13e1f7603b4d1397.jpg&#34; alt=&#34;View into garage through the garage gate. On the floor are small debris and dust. In the bottom left on the foreground is a rubbish bag, and assorted trash, Against the wall in the back are old cans of paint. In the far corner are leftover plaster-boards. The wall has some shelves that are virtually empty. For a ceiling there are wooden beams, with one fluorescent tube light fixture across two of them. The walls are bare brickwork. On the rear wall, roughly 1.3 metres from the ground is a double power socket.&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/figure&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;after&#34;&gt;After&lt;/h3&gt;&#xA;&lt;p&gt;The finished product after all the work we&amp;rsquo;ve completed, from a similar viewpoint. Better photos near the end of the post. The goal was to have a finished &amp;ldquo;inside&amp;rdquo; style room we&amp;rsquo;d be comfortable in for our nerdy activities.&lt;/p&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;centered&#34;&gt;&#xA;  &lt;figure&gt;&#xA;    &lt;a href=&#34;https://michd.me/blog/diy-garage-to-workshop-conversion/after_pxl_20220408_093859535.jpg&#34; title=&#34;Click for full size&#34;&gt;&#xA;      &lt;img src=&#34;https://michd.me/blog/diy-garage-to-workshop-conversion/after_pxl_20220408_093859535_hu_a337fc995979f62b.jpg&#34; alt=&#34;View into garage towards the same corner. The floor is made grey wood-effect long tiles, finished with plain white skirting board. The walls themselves are slightly off-white, and smooth. On the long wall toward the left, 4 double sockets about half a metre from the ground are visible. The transition from wall to ceiling is finished with white coving. Under this coving is a strip of RGB LEDs that goes all the way around, showing a rainbow gradient. The ceiling is plain white, and smooth. On the ceiling are 4 square LED light fixture which are powered on, thought only two are in the frame.&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/figure&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Android: Clean up unused emulator system images</title>
				<link>https://michd.me/jottings/android-clean-up-system-images/</link>
				<pubDate>Wed, 19 May 2021 12:00:00 +0000</pubDate>
				<guid>https://michd.me/jottings/android-clean-up-system-images/</guid>
				<description>&lt;p&gt;Over time I collected several Android emulators, many of which I no longer used.&lt;/p&gt;&#xA;&lt;p&gt;Deleting the emulator itself was straightforward enough, but deleting the underlying system image was a bit more hidden.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deleting-an-emulator&#34;&gt;Deleting an emulator&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In Android Studio, open the AVD Manager from &amp;ldquo;&lt;strong&gt;Tools&lt;/strong&gt;&amp;rdquo; → &amp;ldquo;&lt;strong&gt;AVD Manager&lt;/strong&gt;&amp;rdquo;, where you&amp;rsquo;d normally launch an emulator.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;In the &amp;ldquo;&lt;strong&gt;Actions&lt;/strong&gt;&amp;rdquo; column, click the arrow pointing down to open the menu for the emulator you want to delete.&lt;/p&gt;</description>
			</item>
			<item>
				<title>DI.FM Android App</title>
				<link>https://michd.me/creations/programming/difm-android-app/</link>
				<pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/difm-android-app/</guid>
				<description>&lt;p&gt;Android app development for Digitally Imported Inc&amp;rsquo;s radio brands DI.FM, RadioTunes, JAZZRADIO.com, ROCKRADIO.COM, ClassicalRadio.com, and Zen Radio.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dance Platform Firmware</title>
				<link>https://michd.me/creations/electronics/dance-platform-firmware/</link>
				<pubDate>Tue, 17 Nov 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/dance-platform-firmware/</guid>
				<description>&lt;p&gt;The RE:Flex dance platform is a modern take on the concept with precise sensors and 84 RGB LEDs per panel.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Gradle Android: API &#39;variant.getX()&#39; is obsolete</title>
				<link>https://michd.me/jottings/gradle-variant.getx-is-obsolete/</link>
				<pubDate>Thu, 08 Oct 2020 10:00:00 +0000</pubDate>
				<guid>https://michd.me/jottings/gradle-variant.getx-is-obsolete/</guid>
				<description>&lt;p&gt;A deprecation warning I got when trying to add something to our Android gradle build script proved hard to fix, so I&amp;rsquo;m documenting my findings here.&lt;/p&gt;&#xA;&lt;p&gt;These are the full messages I&amp;rsquo;d get; there are similar ones for other tasks you want to tie into.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WARNING: API &amp;lsquo;variant.getMergeResources()&amp;rsquo; is obsolete and has been replaced with &amp;lsquo;variant.getMergeResourcesProvider()&amp;rsquo;.&#xA;It will be removed in version 5.0 of the Android Gradle plugin.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;WARNING: API &amp;lsquo;variant.getProcessResources()&amp;rsquo; is obsolete and has been replaced with &amp;lsquo;variant.getProcessResourcesProvider()&amp;rsquo;.&#xA;It will be removed in version 5.0 of the Android Gradle plugin.&lt;/p&gt;</description>
			</item>
			<item>
				<title>MIDI Thru box</title>
				<link>https://michd.me/creations/electronics/midi-thru-box/</link>
				<pubDate>Tue, 29 Sep 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/midi-thru-box/</guid>
				<description>&lt;p&gt;1-to-8 (or more) output MIDI Thru utility box, which lets you connect multiple instruments to one MIDI source in a star configuration.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Firefox: Turn off automatic copy-paste</title>
				<link>https://michd.me/jottings/firefox-turn-off-auto-copypaste/</link>
				<pubDate>Mon, 17 Aug 2020 14:20:00 +0000</pubDate>
				<guid>https://michd.me/jottings/firefox-turn-off-auto-copypaste/</guid>
				<description>&lt;p&gt;Note: this probably only applies on Unix-derived operating systems like Linux distributions and Mac OS X.&lt;/p&gt;&#xA;&lt;p&gt;For work, I make extensive use of Trello. I found that I regularly end up with random URLs of pages I&amp;rsquo;d visited ending up as attachments on Trello cards I was working on. Because this happened seemingly at random, it was a bit of a privacy issue.&lt;/p&gt;&#xA;&lt;p&gt;Today, I discovered the mechanism that caused this. Apparently, selecting text in Firefox is enough to copy that to a Firefox-internal clipboard. Clicking the middle mouse button or scrollwheel pastes from that clipboard.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stack Trace - Diversity of Thought (Trance)</title>
				<link>https://michd.me/creations/music/track-stack-trace-diversity-of-thought/</link>
				<pubDate>Sun, 26 Jul 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-stack-trace-diversity-of-thought/</guid>
				<description>&lt;iframe style=&#34;border: 0; width: 100%; height: 120px;&#34; &#xA;        src=&#34;https://bandcamp.com/EmbeddedPlayer/track=1856627011/size=large/bgcol=333333/linkcol=ff5300/tracklist=false/artwork=small/transparent=true/&#34;&#xA;        seamless&gt;&#xA;&lt;/iframe&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://stack-trace.bandcamp.com/track/diversity-of-thought&#34;&gt;Diversity of Thought on Bandcamp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Made, as always, in FL Studio, using mainly software synths, but a little bit of my DIY modular synthesiser in the bassline as well.&lt;/p&gt;&#xA;&lt;p&gt;The artwork is a picture of the &amp;ldquo;NEOWISE&amp;rdquo; comet that made an appearance for a few weeks, taken myself.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Various 3D-printed bits</title>
				<link>https://michd.me/creations/misc/various-3d-printed-bits/</link>
				<pubDate>Thu, 16 Jul 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/misc/various-3d-printed-bits/</guid>
				<description>&lt;p&gt;Often I&amp;rsquo;ll encounter a problem that can be quite easily solved with 3D printing.&lt;/p&gt;</description>
			</item>
			<item>
				<title>WIP: BWEEOO Eurorack filter</title>
				<link>https://michd.me/creations/electronics/bweeoo-eurorack-filter/</link>
				<pubDate>Sun, 19 Apr 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/bweeoo-eurorack-filter/</guid>
				<description>&lt;p&gt;Under my fiancee&amp;rsquo;s and my brand RE:Flex Sound, I&amp;rsquo;m working on a versatile Eurorack format filter, with intent to bring it to market.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Midnight - The Comeback Kid (Cimylium Remix) (D&amp;B)</title>
				<link>https://michd.me/creations/music/track-the-midnight-the-comeback-kid-cimylium-remix/</link>
				<pubDate>Fri, 03 Apr 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-the-midnight-the-comeback-kid-cimylium-remix/</guid>
				<description>&lt;iframe width=&#34;100%&#34; height=&#34;166&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; &#xA;        allow=&#34;autoplay&#34;&#xA;        src=&#34;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/790050433&amp;color=%23ff0000&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://soundcloud.com/cimylium/the-comeback-kid-cimylium-remix&#34;&gt;The Comeback Kid (Cimylium Remix) on SoundCloud&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My favourite synthwave group organised a remix contest where 4 of their most popular tracks were up for remixing. I picked my favourite one out of them and went to work.&lt;/p&gt;&#xA;&lt;p&gt;In the end, the only stems I used were the vocal samples; I made my own synth patches and picked my own drums for everything else.&lt;/p&gt;&#xA;&lt;p&gt;I didn&amp;rsquo;t end up winning anything, but I had a lot of fun and I&amp;rsquo;m still proud of the result.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cimylium - Project 14328 (Drum &amp; Bass)</title>
				<link>https://michd.me/creations/music/track-cimylium-project14328/</link>
				<pubDate>Sat, 21 Mar 2020 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-cimylium-project14328/</guid>
				<description>&lt;iframe width=&#34;100%&#34; height=&#34;166&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; &#xA;        allow=&#34;autoplay&#34;&#xA;        src=&#34;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/780552334&amp;color=%23ff0000&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://soundcloud.com/cimylium/project-14328&#34;&gt;Project 14328 on SoundCloud&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The title is a reference to the &amp;ldquo;Folding@Home&amp;rdquo; project that&amp;rsquo;s part of an effort to assist researchers around the world taking up the global fight against COVID-19. Read more about it on &lt;a href=&#34;https://apps.foldingathome.org/project?p=14328&#34;&gt;the F@H project page&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Folding@Home is a system where anyone can install a piece of software and allow the project to use their computer&amp;rsquo;s CPU (and GPU) resources to help compute how proteins develop (at least that&amp;rsquo;s how far my understanding goes). Please go install it if your computer is sitting around doing nothing a lot of the time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>GPG signing git commits without graphical user interface</title>
				<link>https://michd.me/jottings/gpg-sign-git-commits-without-gui/</link>
				<pubDate>Thu, 23 Jan 2020 08:10:00 +0000</pubDate>
				<guid>https://michd.me/jottings/gpg-sign-git-commits-without-gui/</guid>
				<description>&lt;p&gt;GPG signing git commits is neat, but appears to require a graphical interface by default. Here&amp;rsquo;s a way around it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Backgrounding in the terminal</title>
				<link>https://michd.me/jottings/backgrounding-in-the-terminal/</link>
				<pubDate>Wed, 18 Dec 2019 15:00:00 +0000</pubDate>
				<guid>https://michd.me/jottings/backgrounding-in-the-terminal/</guid>
				<description>&lt;p&gt;Unless you&amp;rsquo;re running something like tmux or screen, it can be annoying when you need to enter a command while you&amp;rsquo;re already running a program in your terminal you&amp;rsquo;re not ready to quit just yet.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Testing local connection speed with iperf</title>
				<link>https://michd.me/jottings/testing-local-connection-speed-with-iperf/</link>
				<pubDate>Wed, 18 Dec 2019 08:00:00 +0000</pubDate>
				<guid>https://michd.me/jottings/testing-local-connection-speed-with-iperf/</guid>
				<description>&lt;p&gt;&lt;code&gt;iperf&lt;/code&gt; lets you test the connection speed between two computers you have access to, making it useful to test the speed within your local network.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Setting and resetting bits in a number</title>
				<link>https://michd.me/jottings/setting-and-resetting-bits-in-a-number/</link>
				<pubDate>Tue, 17 Dec 2019 17:00:00 +0100</pubDate>
				<guid>https://michd.me/jottings/setting-and-resetting-bits-in-a-number/</guid>
				<description>&lt;p&gt;In microcontroller code (and other places that use &amp;ldquo;flags&amp;rdquo;), you often need to set a specific bit to 0 or 1 in a register.&lt;/p&gt;</description>
			</item>
			<item>
				<title>KiCad Helper</title>
				<link>https://michd.me/creations/programming/kicad-helper/</link>
				<pubDate>Sun, 01 Dec 2019 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/kicad-helper/</guid>
				<description>&lt;p&gt;Web-based tool to make changes to KiCad schematics that EESchema doesn&amp;rsquo;t let you do easily.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Table Tennis Scoreboard</title>
				<link>https://michd.me/creations/electronics/table-tennis-scoreboard/</link>
				<pubDate>Tue, 26 Nov 2019 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/table-tennis-scoreboard/</guid>
				<description>&lt;p&gt;Simple table tennis scoreboard operated with buttons mounted under the table. Indicates whose serve it is, plays a jingle when the game is over.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Deploying to your server with git push</title>
				<link>https://michd.me/blog/deploying-to-your-server-with-git/</link>
				<pubDate>Tue, 22 Oct 2019 21:20:00 +0000</pubDate>
				<guid>https://michd.me/blog/deploying-to-your-server-with-git/</guid>
				<description>&lt;p&gt;If you&amp;rsquo;re using &lt;a href=&#34;https://git-scm.com/&#34;&gt;git&lt;/a&gt; for your project&amp;rsquo;s version control, it might interest you that you can deploy your latest changes to the server where you&amp;rsquo;re hosting your application by using just git on your local computer. I set this up for the site you&amp;rsquo;re reading, so I figured I&amp;rsquo;d put up a write-up of how I did it.&lt;/p&gt;&#xA;&lt;p&gt;The heart of the matter are git hooks. Hooks are optional scripts that git can run for you in response of certain events happening. The main event we&amp;rsquo;re after, on the server end, is called &lt;code&gt;post-receive&lt;/code&gt;. It is triggered after a git push.&lt;/p&gt;&#xA;&lt;h2 id=&#34;assumptions&#34;&gt;Assumptions&lt;/h2&gt;&#xA;&lt;p&gt;For this guide, I assume the following:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You have git installed on your local computer, and the server you deploy to&lt;/li&gt;&#xA;&lt;li&gt;Your server is running a Linux distribution, or at least has a bash shell.&lt;/li&gt;&#xA;&lt;li&gt;You have some experience using a (bash) terminal&lt;/li&gt;&#xA;&lt;li&gt;You are able to connect to your server via SSH, from the machine you&amp;rsquo;re working on&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Instaudio</title>
				<link>https://michd.me/creations/programming/instaudio/</link>
				<pubDate>Sat, 28 Sep 2019 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/instaudio/</guid>
				<description>&lt;p&gt;Popular audio sharing website for audio producers, voice actors, etc, visited by over 5 million people over its lifetime.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cimylium - Byte Sequence (Ambient)</title>
				<link>https://michd.me/creations/music/track-cimylium-byte-sequence/</link>
				<pubDate>Sun, 18 Nov 2018 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-cimylium-byte-sequence/</guid>
				<description>&lt;iframe width=&#34;100%&#34; height=&#34;166&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; &#xA;        allow=&#34;autoplay&#34;&#xA;        src=&#34;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/531881421&amp;color=%23ff0000&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://soundcloud.com/cimylium/byte-sequence&#34;&gt;Byte Sequence on SoundCloud&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This track was composed in FL Studio, but recorded from purely hardware synthesisers, with a few effects added post-recording.&lt;/p&gt;&#xA;&lt;p&gt;Synths used:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Korg Trinity&lt;/li&gt;&#xA;&lt;li&gt;Behringer Deepmind 6&lt;/li&gt;&#xA;&lt;li&gt;Roland JP-8000&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>WIP: Polyphonic Synthesiser</title>
				<link>https://michd.me/creations/electronics/polyphonic-synth/</link>
				<pubDate>Thu, 18 Oct 2018 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/polyphonic-synth/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve been working on a standalone polyphonic synthesiser, though it is far from finished.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Workbench</title>
				<link>https://michd.me/creations/misc/workbench/</link>
				<pubDate>Mon, 16 Jul 2018 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/misc/workbench/</guid>
				<description>&lt;p&gt;A wooden workbench made out of commonly available lumber and plywood sheet.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sequencer</title>
				<link>https://michd.me/creations/electronics/sequencer/</link>
				<pubDate>Fri, 09 Mar 2018 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/sequencer/</guid>
				<description>&lt;p&gt;8-step control voltage sequencer for my DIY modular synthesiser. Features quantizing, slide steps, various playback modes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kicad: Creating schematic components and libraries</title>
				<link>https://michd.me/blog/kicad-working-with-schematic-components-and-libraries/</link>
				<pubDate>Thu, 08 Feb 2018 10:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kicad-working-with-schematic-components-and-libraries/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve had some trouble piecing together how to deal with custom schematic components in my PCB design package of choice, Kicad. It took too much searching and trial and error to get to grips with the process, so I&amp;rsquo;ve decided to write my own detailed article about it. This guide applies as of version 4.0.4-stable. I&amp;rsquo;m using the Windows build.&lt;/p&gt;&#xA;&lt;p&gt;Please do note, this article will only cover &lt;strong&gt;schematic components&lt;/strong&gt;; I will not touch on the actual PCB footprints here. In Kicad, the two are very distinct; they are only connected when you finish designing your schematic, and you assign footprints to each of the components in it.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;library-structure&#34;&gt;Library structure&lt;/h2&gt;&#xA;&lt;p&gt;In Kicad, all files are essentially plain text files, meaning you could edit them with a simple text editor like Notepad or TextEdit. A library (.lbr) file is one such plain text file, in which a series of schematic components are defined by name, a set of pins, and a drawing. In addition, there is a .dcm file for every library file, which contains any documentation and description for the components contained within the library.&lt;/p&gt;&#xA;&lt;p&gt;Kicad comes with a set of libraries of its own, which are typically stored in a read-only location. As a result, if you want to customize or create new components, they should be saved in a library within your documents, or your project directory. You can choose to maintain your own main set of libraries that all your kicad projects can access, or you can save libraries in project folders, making them local to just that project.&lt;/p&gt;&#xA;&lt;p&gt;The location you save your libraries is a matter of personal preference, so don&amp;rsquo;t dwell on it too much.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Clock Generator</title>
				<link>https://michd.me/creations/electronics/clock-generator/</link>
				<pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/clock-generator/</guid>
				<description>&lt;p&gt;A clock pulse generator with divided outputs, used to drive sequencers and other triggerable modules.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Michstortion</title>
				<link>https://michd.me/creations/electronics/michstortion/</link>
				<pubDate>Fri, 15 Dec 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/michstortion/</guid>
				<description>&lt;p&gt;A versatile foldback distortion module for my DIY modular synthesiser.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ADSR Envelope Generator</title>
				<link>https://michd.me/creations/electronics/adsr-envelope-generator/</link>
				<pubDate>Sun, 30 Jul 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/adsr-envelope-generator/</guid>
				<description>&lt;p&gt;Attack-Decay-Sustain-Release envelope generator, an expansion on Ray Wilson&amp;rsquo;s Music From Outer Space design.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cimylium - Tannhauser Gate (Ambient)</title>
				<link>https://michd.me/creations/music/track-cimylium-tannhauser-gate/</link>
				<pubDate>Mon, 24 Jul 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-cimylium-tannhauser-gate/</guid>
				<description>&lt;iframe width=&#34;100%&#34; height=&#34;166&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; &#xA;        allow=&#34;autoplay&#34;&#xA;        src=&#34;https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/334499137&amp;color=%23ff0000&amp;auto_play=false&amp;hide_related=true&amp;show_comments=false&amp;show_user=true&amp;show_reposts=false&amp;show_teaser=true&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://soundcloud.com/cimylium/tannhauser-gate&#34;&gt;Tannhauser Gate on SoundCloud&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Inspired by the &amp;ldquo;Blade Runner&amp;rdquo; soundtrack, this track was written using only the software synths &amp;ldquo;The CS Cloud&amp;rdquo; and &amp;ldquo;Synth1&amp;rdquo;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Inverters Module</title>
				<link>https://michd.me/creations/electronics/inverters-module/</link>
				<pubDate>Thu, 15 Jun 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/inverters-module/</guid>
				<description>&lt;p&gt;A utility module for my DIY Modular synthesiser, providing 4 analogue inverters and 2 logic inverters.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Spring Reverb</title>
				<link>https://michd.me/creations/electronics/spring-reverb/</link>
				<pubDate>Wed, 07 Jun 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/spring-reverb/</guid>
				<description>&lt;p&gt;Spring Reverb module for my DIY Modular Synthesiser, after Ray Wilson of Music From Outer Space&amp;rsquo;s design. Uses a salvaged spring tank.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stack Trace - Ebullience (Trance)</title>
				<link>https://michd.me/creations/music/track-stack-trace-ebullience/</link>
				<pubDate>Wed, 17 May 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-stack-trace-ebullience/</guid>
				<description>&lt;iframe style=&#34;border: 0; width: 100%; height: 120px;&#34; &#xA;        src=&#34;https://bandcamp.com/EmbeddedPlayer/album=2857946109/size=large/bgcol=333333/linkcol=ff5300/tracklist=false/artwork=small/transparent=true/&#34;&#xA;        seamless&gt;&#xA;&lt;/iframe&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://stack-trace.bandcamp.com/album/ebullience&#34;&gt;Ebullience on Bandcamp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A trance track I started in June 2014 and picked up again in 2017. There are two versions; a 7m41s long version, and the extended version at over 11 minutes.&lt;/p&gt;&#xA;&lt;p&gt;I decided to start a new alias &amp;ldquo;Stack Trace&amp;rdquo; for Trance / Housey music while keeping Cimylium for more mellow music like ambient or anything else.&lt;/p&gt;&#xA;&lt;p&gt;Produced in FL Studio, with some parts recorded on external synthesisers:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Noise Generator</title>
				<link>https://michd.me/creations/electronics/noise-generator/</link>
				<pubDate>Sat, 14 Jan 2017 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/noise-generator/</guid>
				<description>&lt;p&gt;White and pink noise generator for my DIY Modular synth, from Music From Outer Space circuit design.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mixer Module</title>
				<link>https://michd.me/creations/electronics/mixer-module/</link>
				<pubDate>Sun, 13 Nov 2016 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/mixer-module/</guid>
				<description>&lt;p&gt;4-input mixer module for my DIY Modular synthesiser. Allows setting volume of each channel as well as the overall volume of the mix output.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Voltage-controlled Amplifier</title>
				<link>https://michd.me/creations/electronics/voltage-controlled-amplifier/</link>
				<pubDate>Wed, 02 Nov 2016 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/voltage-controlled-amplifier/</guid>
				<description>&lt;p&gt;Used for contouring sounds, and various modulation depth control in my DIY modular synthesiser.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Voltage-controlled Filter</title>
				<link>https://michd.me/creations/electronics/voltage-controlled-filter/</link>
				<pubDate>Mon, 13 Jun 2016 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/voltage-controlled-filter/</guid>
				<description>&lt;p&gt;Used for cutting and accentuating harmonics in my DIY Modular Synthesiser; adapted from Thomas Henry&amp;rsquo;s VCF-1 design.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Voltage-controlled Oscillator</title>
				<link>https://michd.me/creations/electronics/voltage-controlled-oscillator/</link>
				<pubDate>Sat, 30 Apr 2016 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/voltage-controlled-oscillator/</guid>
				<description>&lt;p&gt;Audio or modulation signal source for my DIY synthesiser, derived from Ray Wilson&amp;rsquo;s Music From Outer Space&amp;rsquo;s (MFOS) VCO and Thomas Henry&amp;rsquo;s VCO-1.&lt;/p&gt;</description>
			</item>
			<item>
				<title>MIDI Input module</title>
				<link>https://michd.me/creations/electronics/midi-input-module/</link>
				<pubDate>Thu, 31 Mar 2016 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/midi-input-module/</guid>
				<description>&lt;p&gt;MIDI to control voltage (CV) module for my DIY synthesiser.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Using Async and Await in C# (Part 1)</title>
				<link>https://michd.me/blog/using-async-in-c-sharp-part-1/</link>
				<pubDate>Sat, 07 Nov 2015 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/using-async-in-c-sharp-part-1/</guid>
				<description>&lt;p&gt;In programming, there are many use cases for doing things in an asynchronous way. In almost all cases, it comes down to executing an operation that may take a while, without blocking user interaction or other program execution. Perhaps the most common example of this is making a web request, waiting for its response, then doing something with said response. While you are waiting for the response, the user interface shouldn’t freeze.&lt;/p&gt;&#xA;&lt;p&gt;This is where asynchronous operations come in. In essence, you tell the computer to “do X, and whenever that’s done, do Y. In the meantime, let me go about my business”. A real life analogy would be heating food in a microwave oven: You put your food in there, tell the oven what to do and to notify you when it’s done. While the oven is doing its thing, you can get on with setting the table. When it’s done, it gives you hot food, which you can then serve.&lt;/p&gt;&#xA;&lt;h2 id=&#34;callbacks-the-old-ugly-way&#34;&gt;Callbacks: The Old, Ugly Way&lt;/h2&gt;&#xA;&lt;p&gt;If you are used to Java, you would often implement asynchronous operations by supplying a callback: a function that gets invoked once the operation is completed. You either instantiate and override a class that implements the required callback functions, or implement the interface directly in your class. The code to execute once the operation completes is nested at least two levels deep, or lives in some other method. Your options are to do some cumbersome nesting, or to artificially split up code that is part of the same action.&lt;/p&gt;&#xA;&lt;p&gt;C# allows you to do both of those, but offers a much tidier approach. Out with the loads of extra classes and interfaces, in with &lt;code&gt;async&lt;/code&gt;, &lt;code&gt;await&lt;/code&gt;, and &lt;code&gt;Task&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cs-async-modifier-and-await-keyword&#34;&gt;C#;s &lt;code&gt;async&lt;/code&gt; Modifier and &lt;code&gt;await&lt;/code&gt; Keyword&lt;/h2&gt;&#xA;&lt;p&gt;In C#, if you want to do asynchronous work, start by adding the async modifier to the method where you’ll be doing it.&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: c-sharp&#34;&gt;&#xA;private async void MyMethod()&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;In this method, you can now use the &lt;code&gt;await&lt;/code&gt; keyword, for example, like the following:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: c-sharp&#34;&gt;&#xA;var itemPrice = await api.getPrice(itemId);&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;The code in this method will execute up to this point, and not go any further until api.getPrice has finished its work and retrieved a value. Once in it has retrieved the item’s price from wherever, execution of our method continues at the next line, like regular program flow.&lt;/p&gt;&#xA;&lt;p&gt;At this point you may object, since nothing but a few keywords distinguish the example from a normal synchronous program. The difference lies in the fact that other code is free to run while the awaited call is ongoing. The user interface will not become unresponsive.&lt;/p&gt;&#xA;&lt;p&gt;This async method behaves exactly like a callback would. In contrast to a callback, all our related code gets to stay in one method, and remains easy to follow, much like a normal procedural program.&lt;/p&gt;&#xA;&lt;p&gt;In this post I will explain how you can implement your own asynchronous methods for a few common use cases:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Conway&#39;s Game of Life</title>
				<link>https://michd.me/creations/programming/conway-gol/</link>
				<pubDate>Thu, 22 Oct 2015 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/conway-gol/</guid>
				<description>&lt;p&gt;A programmer&amp;rsquo;s favourite, Conway&amp;rsquo;s Game of Life is a famous cellular automaton. I just had to implement my own version.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Adding stereo VU meters to a turntable</title>
				<link>https://michd.me/blog/turntable-vu-meters/</link>
				<pubDate>Sun, 06 Jul 2014 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/turntable-vu-meters/</guid>
				<description>&lt;p&gt;My fiancée got me a great gift for my last birthday: a turntable. Being a classic trance lover, I’ve since been collecting a bunch of records. The thing has really been a source of joy thus far.&lt;/p&gt;&#xA;&lt;p&gt;About a month ago I started itching to do a little electronics project again as it had been a while. Long story short, I figured it’d be neat to open up this relatively simple device and add a nice aesthetic feature to it: VU meters.&lt;/p&gt;&#xA;&lt;p&gt;Since this is a rather involved hack, (as opposed to my &lt;a href=&#34;https://michd.me/blog/line-in-radio-hack&#34;&gt;line-in addition to a boombox&lt;/a&gt;), it gave me a good reason to finally check out Southampton’s maker/hackerspace, &lt;a href=&#34;http://www.somakeit.org.uk/&#34;&gt;SoMakeIt&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;expanded&#34;&gt;&#xA;  &lt;img src=&#34;https://michd.me/images/blog/turntable-vu-meters/vu_intro-image.jpg&#34; alt=&#34;Turntable with lit LEDs along the diameter of the record it&#39;s playing&#34; data-max-width=&#34;750&#34;&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>2048 in QBasic</title>
				<link>https://michd.me/creations/programming/2048-qbasic/</link>
				<pubDate>Sun, 04 May 2014 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/2048-qbasic/</guid>
				<description>&lt;p&gt;This little puzzle game was wildly popular at the time. I figured I&amp;rsquo;d go back to my roots and throw together an implementation in QBasic.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cimylium - Magnitude (Trance)</title>
				<link>https://michd.me/creations/music/track-cimylium-magnitude/</link>
				<pubDate>Mon, 06 Jan 2014 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/track-cimylium-magnitude/</guid>
				<description>&lt;iframe style=&#34;border: 0; width: 100%; height: 120px;&#34; &#xA;        src=&#34;https://bandcamp.com/EmbeddedPlayer/track=3640684777/size=large/bgcol=333333/linkcol=ff5300/tracklist=false/artwork=small/transparent=true/&#34;&#xA;        seamless&gt;&#xA;&lt;/iframe&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://cimylium.bandcamp.com/track/magnitude-original-mix&#34;&gt;Magnitude on Bandcamp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Not much to say, as with all my trance pieces, I sunk a bunch of time into this one. Perhaps a bit of System F influence here.&lt;/p&gt;</description>
			</item>
			<item>
				<title>RSS Dash</title>
				<link>https://michd.me/creations/programming/rss-dash/</link>
				<pubDate>Mon, 21 Oct 2013 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/rss-dash/</guid>
				<description>&lt;p&gt;RSS Dash was a dashboard for RSS feed widgets, intended as an &amp;ldquo;iGoogle&amp;rdquo; replacement.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hacking a line-in socket into an 80s radio and cassette player</title>
				<link>https://michd.me/blog/line-in-radio-hack/</link>
				<pubDate>Sun, 15 Sep 2013 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/line-in-radio-hack/</guid>
				<description>&lt;p&gt;A few years ago, my grandmother gave me one of the old radios she had lying around the house. My late grandfather’s hobby was participating in radio quizzes, which led him to win a lot of radios; I assume this was one of them. The radio was manufactured in the early 80s, so the guts are relatively easy to tinker with; everything is on single-layer PCBs.&lt;/p&gt;&#xA;&lt;div class=&#34;expanded&#34;&gt;&#xA;  &lt;figure&gt;&#xA;    &lt;a href=&#34;https://michd.me/images/blog/line-in-radio-hack/fullsize/before.jpg&#34;&gt;&#xA;      &lt;img src=&#34;https://michd.me/images/blog/line-in-radio-hack/before.jpg&#34; alt=&#34;Frontal photo of the radio before any alterations were made, showing buttons on top, speakers on either side of a cassette deck, slider buttons, a radio tuning dial across the top, and sound volume indicator lights&#34; data-max-width=&#34;750&#34;&gt;&#xA;    &lt;/a&gt;&lt;br&gt;&#xA;    &lt;figcaption&gt;The radio, as it looked before opening it up&lt;/figcaption&gt;&#xA;  &lt;/figure&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I realised that the audio quality of this old boy was really decent, so it would be a waste to just let it sit in a cupboard. I don’t generally listen to the radio that much, and I don’t exactly have a big collection of music on cassettes either (and if I did, I’d digitize it anyway). To really get some use out of it, the most logical thing would be to have a line-in, letting me hook up a phone or whichever external audio source.&lt;/p&gt;&#xA;&lt;p&gt;So, I set to work, opening the machine up.&lt;/p&gt;&#xA;&lt;div class=&#34;expanded&#34;&gt;&#xA;  &lt;figure&gt;&#xA;    &lt;a href=&#34;https://michd.me/images/blog/line-in-radio-hack/fullsize/front-off.jpg&#34;&gt;&#xA;      &lt;img src=&#34;https://michd.me/images/blog/line-in-radio-hack/front-off.jpg&#34; alt=&#34;Photo of the radio laying down on its back, the front part of the case taken off. Revealed is the mechanism of the cassette player, various sliders, PCBs with various components on the left and right, and the transformer on the far left.&#34; data-max-width=&#34;750&#34;&gt;&#xA;    &lt;/a&gt;&lt;br&gt;&#xA;    &lt;figcaption&gt;The front part of the case taken off, which removes the speakers&lt;/figcaption&gt;&#xA;  &lt;/figure&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>CarGo: Programming Web Game</title>
				<link>https://michd.me/creations/programming/cargo/</link>
				<pubDate>Mon, 24 Jun 2013 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/cargo/</guid>
				<description>&lt;p&gt;CarGo is a web game around a custom mini programming language. You program a car to drive through a maze, avoid crashing, and pick up credits.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Embedding a player on Facebook: A guide</title>
				<link>https://michd.me/blog/embedding-a-player-on-facebook/</link>
				<pubDate>Thu, 30 May 2013 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/embedding-a-player-on-facebook/</guid>
				<description>&lt;p&gt;Last weekend I had a mission: to build a player component for &lt;a href=&#34;https://instaud.io&#34;&gt;instaud.io&lt;/a&gt; that could play audio people linked to, right in Facebook news feeds. I found that there are plenty of excerpts on how to go about this, but most of them are based on outdated links to Facebook developer documentation. It bugged me greatly that Facebook didn’t bother setting up redirects to relevant pages after restructuring their docs.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, I think this would work best as a step by step guide. I’ll go through the steps I’ve had to learn about; you may want to skip over some if you’re already know what you’re doing in them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-build-your-player-in-flash&#34;&gt;1. Build your player in Flash&lt;/h2&gt;&#xA;&lt;p&gt;I downloaded the Adobe Flash trial for this. You’ll want to create a stage that is not much wider than 500 pixels. I went with 504px. What you’re going to be playing depends entirely on you. My purpose was simply to play audio files (MP3s), so I used Sound and SoundChannel to control that. The audio file to be played was requested with an URLRequest object.&lt;/p&gt;&#xA;&lt;p&gt;If you want a more thorough introduction on how to set up a simple sound player, this video from 2008 is still a good starting point, even with the latest version of Flash (12, CS6): &lt;a href=&#34;http://www.youtube.com/watch?v=Q6N8EpNYU5o&#34;&gt;Build Simple Sound Player: Flash Tutorial AS 3.0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;using-parameters&#34;&gt;Using parameters&lt;/h3&gt;&#xA;&lt;p&gt;The important part about the ActionScript is using parameters. Parameters will be passed to the eventual SWF through the querystring, that is, the bold part in this URL: &lt;code&gt;https://&lt;!-- This html comment here to prevent Hugo from auto-converting the url to a link --&gt;example.com/my-player.swf?&lt;strong&gt;param=value&amp;amp;otherparam=value&lt;/strong&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;In ActionScript (3), you can access these variables the following way:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: as3&#34;&gt;&#xA;loaderInfo.parameters.parameterName&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;To check if a parameter is actually present:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: as3&#34;&gt;&#xA;loaderInfo.parameters.hasOwnProperty(&#39;parameterName&#39;)&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;This way you can use default values for parameters:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: as3&#34;&gt;&#xA;var myParam = loaderInfo.parameters.hasOwnProperty(&#39;myParam&#39;) ?&#xA;    loaderInfo.parameters.myParam :&#xA;    &#39;defaultValue&#39;;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Since &lt;code&gt;hasOwnProperty&lt;/code&gt; returns a boolean value (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;), this statement assigns either the value of &lt;code&gt;myParam&lt;/code&gt; from the querystring, or &lt;code&gt;&#39;defaultValue&#39;&lt;/code&gt; if no such parameter was specified, to the &lt;code&gt;myParam&lt;/code&gt; variable. It uses a &lt;a href=&#34;https://en.wikipedia.org/wiki/%3F:&#34;&gt;ternary operator&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-export-the-swf-file-and-include-it-in-your-websites-assets&#34;&gt;2. Export the SWF file and include it in your website’s assets&lt;/h2&gt;&#xA;&lt;p&gt;This is fairly straightforward. You’ll want the swf to live someplace where it’s directly accessible. I let mine live in the document root directory.&lt;/p&gt;&#xA;&lt;h2 id=&#34;3-add-open-graph-meta-tags-to-the-page&#34;&gt;3. Add Open Graph meta tags to the page&lt;/h2&gt;&#xA;&lt;p&gt;This is where the Facebook magic happens.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Event-driven JavaScript: a simple event dispatcher</title>
				<link>https://michd.me/blog/event-driven-javascript-a-simple-event-dispatcher/</link>
				<pubDate>Sun, 14 Apr 2013 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/event-driven-javascript-a-simple-event-dispatcher/</guid>
				<description>&lt;p&gt;One of the more valuable lessons that I’ve learned in the years I’ve been programming is that loose coupling will make your life better. A very good way to achieve loose coupling in your projects is by dividing functionality in self-sufficient modules that communicate merely by subscribing to and triggering events. To work with these events, you need one component that is relatively tightly coupled with all your modules. This little bit of coupling is definitely worth it though.&lt;/p&gt;&#xA;&lt;p&gt;Before diving into specifics, let’s talk about just what I mean.&lt;/p&gt;&#xA;&lt;h2 id=&#34;loose-coupling&#34;&gt;Loose coupling&lt;/h2&gt;&#xA;&lt;p&gt;When the code base for a project gets sizeable, one thing that can make it a nightmare to work with is tight coupling. When modules are tightly coupled in a project, it means that changing one method in module A may require you to change the way certain things are implemented in module D, F and G. In order to make any modifications, you need to be well aware of how other modules rely on the module you wish to modify.&lt;/p&gt;&#xA;&lt;p&gt;Since having a single module in your head can be taxing enough for the mind, considering basically the whole project when making a local change is awful; oversights are bound to occur.&lt;/p&gt;&#xA;&lt;p&gt;To ensure you do not need to wrap your head around the entire code base at all time, you’ll want to make sure your modules are loosely coupled. You can safely change the modules’ internals without having to worry about how other modules have to interact with this module. You need to consciously engineer your modules to be entirely agnostic of the inner workings of others.&lt;/p&gt;&#xA;&lt;p&gt;You’ll find that employing this method makes it much less of a daunting task to change some functionality around.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bring-on-event-driven-programming&#34;&gt;Bring on event-driven programming&lt;/h2&gt;&#xA;&lt;p&gt;Event-driven programming is a fairly simple pattern where component subscribe to events and trigger them. A variant of the pattern is the observer pattern; the difference however lies in where the event dispatching happens.&lt;/p&gt;&#xA;&lt;p&gt;In an observer pattern, you can register observers (subscribers) to event a certain module emits. This way you can subscribe to, for example, an after-save event, which is emitted every time an object’s data is saved. The observer subscribing to this event will be triggered every time that happens, and a function can then be run.&lt;/p&gt;&#xA;&lt;p&gt;In this case, we move the subscribing facilities away from the modules to a dedicated event dispatcher module. This provides one central location where modules sign up to be notified when a certain event occurs, as well as where modules go to broadcast an event they want to make the application aware of.&lt;/p&gt;&#xA;&lt;p&gt;Doing this, all each module is concerned with if it comes to communicating with the rest of the application is 2 uniform things: Emitting events and responding to events emitted elsewhere. The modules do their thing, throw out some information whenever there is something that may concern the rest of the application, and they remain alert for external events pertaining to the module in question.&lt;/p&gt;&#xA;&lt;p&gt;Responsibilities of the event dispatcher&lt;/p&gt;&#xA;&lt;p&gt;The event dispatcher module that drives this whole pattern has only few responsibilities:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Keeping track of event subscriptions&lt;/li&gt;&#xA;&lt;li&gt;Dispatching incoming events to all the subscribers of that event&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>Step Sequencer Web Toy</title>
				<link>https://michd.me/creations/programming/step-sequencer-js/</link>
				<pubDate>Fri, 22 Feb 2013 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/step-sequencer-js/</guid>
				<description>&lt;p&gt;A web-based FL-Studio-like step sequencer for drum samples.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Organize your life with Trello</title>
				<link>https://michd.me/blog/organize-your-life-with-trello/</link>
				<pubDate>Tue, 22 Jan 2013 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/organize-your-life-with-trello/</guid>
				<description>&lt;p&gt;We’re all leading very busy lives nowadays. There are people communicating with us from everywhere all the time, and there are always things you need to remember doing or need to get organized. Personally, with the little spare time a full time job and a household leaves me, I have a hard time keeping track of the side projects and creative things I want to be doing, which ultimately causes me to waste more of that spare time than I’d like.&lt;/p&gt;&#xA;&lt;p&gt;I intended to do something about this whole problem, in the form of a side project: a todo-list managing web application where you could label todo items for priority, assign people, and so forth. I was pretty far into the website design and initial front-end coding when I first heard about &lt;a href=&#34;https://trello.com&#34;&gt;Trello&lt;/a&gt;. It took me only a few days to realize that the people behind Trello had done a much better job of it than I ever would. I abandoned my own project shortly after.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-what-is-trello&#34;&gt;So what is Trello?&lt;/h2&gt;&#xA;&lt;p&gt;Trello lets you organize “cards” in “lists”, on “boards”; that may sound a little bit abstract, so let’s expand a bit on that.&lt;/p&gt;&#xA;&lt;p&gt;A board on Trello consists of one or more named lists. It is an environment where you keep track of a certain thing, collect information on a certain thing, or simply where you manage something. Where you keep something organized.&lt;/p&gt;&#xA;&lt;p&gt;A “list” is no more than a named column where you keep a bunch of cards. Such a list can indicate the progress status of the items within, or it can be treated as a  category. The purpose of a list depends entirely on what you are organizing.&lt;/p&gt;&#xA;&lt;p&gt;A “card” can be anything you want it to be: a feature for a piece of software you’re working on, a book you want to read, a holiday destination you’re considering, you can come up with plenty more, I’m sure.&lt;/p&gt;&#xA;&lt;p&gt;This screenshot gives a bit of an overview (&lt;a href=&#34;https://michd.me/images/blog/organize-your-life-with-trello/trello.png&#34;&gt;full size&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;div class=&#34;expanded&#34;&gt;&#xA;  &lt;img src=&#34;https://michd.me/images/blog/organize-your-life-with-trello/trello.png&#34; alt=&#34;Trello screenshot&#34; data-max-width=&#34;949&#34;&gt;&#xA;&lt;/div&gt;</description>
			</item>
			<item>
				<title>Music to listen to loudly with eyes closed</title>
				<link>https://michd.me/blog/music-to-listen-to-loudly-with-eyes-closed/</link>
				<pubDate>Tue, 20 Nov 2012 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/music-to-listen-to-loudly-with-eyes-closed/</guid>
				<description>&lt;p&gt;While I listen to music more or less all day while work and whatnot, I infrequently like to pick out some of my favourite songs, turn up the volume and just sit back and close my eyes, focussing only on the music.&lt;/p&gt;&#xA;&lt;p&gt;There are some tracks which have the amazing quality to completely take over your awareness as you really get into them. Here are some that do that for me. They range from old hits to obscure stuff, from chill-out to hard rock, and are in no particular order.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-the-extreme--daydream&#34;&gt;1. The Extreme – Daydream&lt;/h2&gt;&#xA;&lt;iframe width=&#34;640&#34; height=&#34;480&#34; src=&#34;https://www.youtube.com/embed/LvtPN2e866Y&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;This &lt;a href=&#34;http://www.youtube.com/watch?v=LvtPN2e866Y&#34;&gt;wonderful chill-out tune&lt;/a&gt; has a deep bass-line that instantly drew me in the first time I heard it on &lt;a href=&#34;http://www.di.fm/chillout&#34;&gt;Digitally Imported’s Chillout channel&lt;/a&gt;. The lush instrumentation accompanied by a perfectly fitting break beat later on takes you through a dreamland of relaxation. It is all over the place in a big mess of harmony.&lt;/p&gt;</description>
			</item>
			<item>
				<title>JavaScript forEach Object, Array, and String</title>
				<link>https://michd.me/blog/javascript-foreach-object-array-and-string/</link>
				<pubDate>Sun, 28 Oct 2012 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/javascript-foreach-object-array-and-string/</guid>
				<description>&lt;p&gt;In many programming languages, you have a simple for each construct available to quickly go over the contents of just about anything iterable. In JavaScript it isn’t so straightforward. To rectify this, I’ve written up a function that provides a single interface to iterate over the elements of an array, the values in an object, and “even” the characters in a string.&lt;/p&gt;&#xA;&lt;p&gt;It works with a callback function that takes index/key and value as parameters. This callback function is executed for every item in the collection passed.&lt;/p&gt;&#xA;&lt;p&gt;The benefit of using this is that you have very readable code; most programmers will intuitively know how it works because of the familiar collection, index and value interface.&lt;/p&gt;&#xA;&lt;p&gt;To the code!&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: js&#34;&gt;&#xA;(function () {&#xA;    &#34;use strict&#34;;&#xA;&#xA;    /**&#xA;     * Iterate over an Object, Array of String with a given callBack function&#xA;     *&#xA;     * @param {Object|Array|String} collection&#xA;     * @param {Function} callBack&#xA;     * @return {Null}&#xA;     */&#xA;    function forEach(collection, callBack) {&#xA;        var i = 0, // Array and string iteration&#xA;            iMax = 0, // Collection length storage for loop initialisation&#xA;            key = &#39;&#39;, // Object iteration&#xA;            collectionType = &#39;&#39;;&#xA;&#xA;        // Verify that callBack is a function&#xA;        if (typeof callBack !== &#34;function&#34;) {&#xA;            throw new TypeError(&#34;forEach: callBack should be function, &#34; +&#xA;              typeof callBack + &#34; given.&#34;);&#xA;        }&#xA;&#xA;        // Find out whether collection is array, string or object&#xA;        switch (Object.prototype.toString.call(collection)) {&#xA;          case &#34;[object Array]&#34;:&#xA;              collectionType = &#34;array&#34;;&#xA;              break;&#xA;&#xA;          case &#34;[object Object]&#34;:&#xA;              collectionType = &#34;object&#34;;&#xA;              break;&#xA;&#xA;          case &#34;[object String]&#34;:&#xA;              collectionType = &#34;string&#34;;&#xA;              break;&#xA;&#xA;          default:&#xA;              collectionType = Object.prototype.toString.call(collection);&#xA;              throw new TypeError(&#xA;                &#34;forEach: collection should be array, object or string, &#34; +&#xA;                collectionType + &#34; given.&#34;);&#xA;        }&#xA;&#xA;        switch (collectionType) {&#xA;          case &#34;array&#34;:&#xA;              for (i = 0, iMax = collection.length; i &amp;lt; iMax; i += 1) {&#xA;                  callBack(collection[i], i);&#xA;              }&#xA;&#xA;              break;&#xA;&#xA;          case &#34;string&#34;:&#xA;              for (i = 0, iMax = collection.length; i &amp;lt; iMax; i += 1) {&#xA;                  callBack(collection.charAt(i), i);&#xA;              }&#xA;&#xA;              break;&#xA;&#xA;          case &#34;object&#34;:&#xA;              for (key in collection) {&#xA;                  // Omit prototype chain properties and methods&#xA;                  if (collection.hasOwnProperty(key)) {&#xA;                      callBack(collection[key], key);&#xA;                  }&#xA;              }&#xA;&#xA;              break;&#xA;&#xA;          default:&#xA;              throw new Error(&#xA;              &#34;Continuity error in forEach, this should not be possible.&#34;);&#xA;              break;&#xA;        }&#xA;&#xA;        return null;&#xA;    }&#xA;&#xA;    //Example uses&#xA;&#xA;    // Array example&#xA;    forEach([&#34;a&#34;, &#34;b&#34;, &#34;c&#34;], function (value, index) {&#xA;        console.log(index + &#34;: &#34; + value);&#xA;    });&#xA;&#xA;    // Object example&#xA;    forEach({&#34;foo&#34;: &#34;bar&#34;, &#34;barfoo&#34;: &#34;foobar&#34;}, function (value, key) {&#xA;        console.log(key + &#34;: &#34; + value);&#xA;    });&#xA;&#xA;    // String example&#xA;    forEach(&#34;Hello, world!&#34;, function (character, index) {&#xA;        console.log(index + &#34;: &#34; + character);&#xA;    });&#xA;}());&#xA;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Selectbox / dropdown replacements</title>
				<link>https://michd.me/blog/selectbox-dropdown-replacements/</link>
				<pubDate>Tue, 23 Oct 2012 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/selectbox-dropdown-replacements/</guid>
				<description>&lt;p&gt;The &lt;code&gt;&amp;amp;lt;select&amp;amp;gt;&lt;/code&gt; element is hard to style properly and is something that easily ruins sleek designs. Many people have already realised this, which is why there are a couple of JavaScript replacements out there.&lt;/p&gt;&#xA;&lt;p&gt;Here’s a quick list of those that I’m aware of—in no particular order.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://gregfranko.com/jquery.selectBoxIt.js/&#34;&gt;&lt;strong&gt;SelectBoxIt&lt;/strong&gt;&lt;/a&gt; - &lt;a href=&#34;https://github.com/gfranko/jquery.selectBoxIt.js&#34;&gt;Github&lt;/a&gt;&lt;br&gt;&#xA;Requires jQuery 1.6.1+ and jQueryUI Widget Factory 1.8.19+&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://harvesthq.github.com/chosen/&#34;&gt;&lt;strong&gt;Chosen&lt;/strong&gt;&lt;/a&gt; – &lt;a href=&#34;https://github.com/harvesthq/chosen&#34;&gt;Github&lt;/a&gt;&lt;br&gt;&#xA;Requires jQuery 1.4+ or Prototype 1.7+&lt;br&gt;&#xA;Neat features like search input for long lists&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://jqueryui.com/autocomplete/#combobox&#34;&gt;&lt;strong&gt;jQuery UI Autocomplete (combobox)&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&#xA;Included in jQuery UI&lt;br&gt;&#xA;Focussed on searching rather than the dropdown&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This post is mostly as a reference, so I don’t need to look up all the options (no pun intended) every time this situation arises. I hope it can help you quickly select (pun definitely intended this time) which one’s best for you.&lt;/p&gt;&#xA;&lt;p&gt;Update 05 April 2014: Removed “jQuery SelectBox plugin” as both links had died.&lt;/p&gt;</description>
			</item>
			<item>
				<title>&#34;Brainfuck&#34; Interpreter</title>
				<link>https://michd.me/creations/programming/brainfuck-interpreter/</link>
				<pubDate>Mon, 04 Jun 2012 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/brainfuck-interpreter/</guid>
				<description>&lt;p&gt;&amp;ldquo;Brainfuck&amp;rdquo; is an esoteric programming language consisting of 8 commands, forming a simple Turing machine. I wrote a simple interpreter / debugger for it as a web page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>New hosting!</title>
				<link>https://michd.me/blog/new-hosting/</link>
				<pubDate>Sun, 29 Jan 2012 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/new-hosting/</guid>
				<description>&lt;p&gt;Although you may not see any difference, this site is now hosted elsewhere. It’s taken over a week to get all the administration dealt with, but now it seems to work all okay.&lt;/p&gt;&#xA;&lt;p&gt;Michhimself.com used to be hosted by &lt;a href=&#34;https://www.one.com&#34;&gt;one.com&lt;/a&gt;, the first web host I ever paid for, which I registered with in 2009. Back then, the simple PHP/MySQL hosting with FTP access was great, but I’ve since moved on.  Since it was so-called ‘shared hosting’, it meant that multiple websites would run on the same server; meaning that the performance of my site would depend on the load caused by others.&lt;/p&gt;&#xA;&lt;p&gt;Now I’ve moved on to a VPS (Virtual Private Server) at &lt;a href=&#34;https://linode.com&#34;&gt;linode.com&lt;/a&gt;, where I get full root access over the machine. You know what that means: a LOT more freedom to play with. I got to install the web server software myself, as well as PHP, MySQL and a bunch of other things. I’m even running an IRC bot on the thing. Needless to say, I no longer need to use FTP to access the files on this server; I just use SSH, which is more secure, and seemingly faster as well. Have I mentioned that Linode is fabulous?&lt;/p&gt;</description>
			</item>
			<item>
				<title>Moving forward with my photography</title>
				<link>https://michd.me/blog/moving-forward-with-my-photography/</link>
				<pubDate>Sat, 21 Jan 2012 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/moving-forward-with-my-photography/</guid>
				<description>&lt;p&gt;Something that I may not have mentioned here is that one of my hobbies is photography. I got a little more seriously into it after buying a friend’s &lt;a href=&#34;http://www.steves-digicams.com/camera-reviews/nikon/coolpix-8700/nikon-coolpix-8700-review.html&#34;&gt;Nikon Coolpix 8700&lt;/a&gt; back in 2010. That camera was a pretty good one, even though it wasn’t a DSLR or anything fancy, it gave me quite a bit of freedom to play, compared to your regular little compact camera.&lt;/p&gt;&#xA;&lt;p&gt;Last week however, I purchased my first DSLR after trying and getting outbid on ebay for about a week. I now have a &lt;a href=&#34;http://www.kenrockwell.com/nikon/d40.htm&#34;&gt;Nikon D40&lt;/a&gt; with the kit 18-55mm lens, and I’m loving it. Compared to the Coolpix 8700, it is orders of magnitude better at guessing settings for correct exposures.  Since it doesn’t have to move out a lens on start-up, it’s instantly ready to shoot, and doesn’t waste energy on motors (other than the auto-focus motor in the lens). I love how it takes your photo the moment you press the shutter button down, rather than half a second after. It makes me feel much more confident to go for certain shots than I normally would be.&lt;/p&gt;&#xA;&lt;p&gt;The camera automatically goes in stand-by mode if you’re idle for a while, but is instantly ready to go for it again. This makes it fun to walk through the city with the camera just on all the time, ready to shoot anything you see.&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, it seems like I’m going to have a lot of fun experimenting with what this camera will let me do. Eventually I’ll most likely try some other lenses as well, which is something I’ve been looking forward to with this kind of cameras.&lt;/p&gt;&#xA;&lt;p&gt;Here’s a little set of photos I’ve taken around Southampton, by day and by night.&lt;/p&gt;&#xA;&lt;div class=&#34;expanded&#34;&gt;&#xA;  &lt;img title=&#34;Escape the waves&#34; src=&#34;https://michd.me/images/blog/moving-forward-with-my-photography/DSC_0141-1024x680.jpg&#34; alt=&#34;Escape the waves&#34; data-max-width=&#34;800&#34;&gt;&#xA;  &lt;img title=&#34;West Quay&#34; src=&#34;https://michd.me/images/blog/moving-forward-with-my-photography/DSC_0123-1024x680.jpg&#34; alt=&#34;West Quay&#34; data-max-width=&#34;800&#34;&gt;&#xA;  &lt;img title=&#34;Long exposure with cars, Itchen Bridge&#34; src=&#34;https://michd.me/images/blog/moving-forward-with-my-photography/DSC_0176-1024x680.jpg&#34; alt=&#34;Long exposure with cars, Itchen Bridge&#34; data-max-width=&#34;800&#34;&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;You can &lt;a href=&#34;http://www.flickr.com/photos/michhimself/sets/72157628945088393/&#34;&gt;view the full set on Flickr&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Form input help on focus without JavaScript</title>
				<link>https://michd.me/blog/form-input-help-on-focus/</link>
				<pubDate>Mon, 12 Dec 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/form-input-help-on-focus/</guid>
				<description>&lt;p&gt;Just a simple front-end technique I thought to be worth sharing:&lt;/p&gt;&#xA;&lt;p&gt;Form fields can usually do with some more information on what you are supposed to fill in. Examples include valid user name rules, desired date/time format.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The problem&lt;/h2&gt;&#xA;&lt;p&gt;On one hand, you want your users to know what they’re supposed to do, as confusing your visitors easily leads to a dramatically decreased conversion rate. On the other hand, you want your forms to look clean and minimal, so your visitors are not bombarded with information. If you show information by every field on your form, it quickly gets cluttered, and that’s exactly what we want to avoid.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;The solution&lt;/h2&gt;&#xA;&lt;p&gt;Hide the elements containing the help text until they are needed. When a user focuses on a field, the relevant information shows up. This may sound like something you would solve with the onfocus and onblur events, but you can actually accomplish it with CSS.&lt;/p&gt;&#xA;&lt;p&gt;Assuming you have an element with an info class right after the input element, you just use the :focus pseudo-selector in an &lt;a href=&#34;https://www.w3.org/TR/CSS2/selector.html#adjacent-selectors&#34;&gt;adjacent sibling selector&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>MVC - FuelPHP</title>
				<link>https://michd.me/blog/mvc-fuelphp/</link>
				<pubDate>Sun, 04 Dec 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/mvc-fuelphp/</guid>
				<description>&lt;p&gt;Since I started working at &lt;a href=&#34;http://carswellgould.co.uk/&#34;&gt;Carswell Gould&lt;/a&gt;, I’ve learnt a lot more about web development—It’s amazing how much you learn once you start collaborating with other people—and among those things I learned is how to work with the MVC (Model-View-Controller) design pattern. The way I used to work was just by having the database operations inside classes as much as possible, and use those classes and their methods in the files for the actual pages. For example, A forum thread page (view.php or similar) would have all the code to load the posts and relevant info above the HTML part of the file, using classes like ForumThread and the like.&lt;/p&gt;&#xA;&lt;p&gt;The MVC way to go for this would be having a controller that gets called when the URL for viewing a thread is requested. The controller would get an instance of a ForumThread Model. The Model describes the properties of a ForumThread and deals with related data (Forum posts, which would be another Model), and database operations, plus any additional behaviours. The data retrieved from the Model instance then gets passed on to a View, which takes care of sticking all the data in HTML. This way interpreting the request, dealing with data and displaying data is nicely separated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;frameworks-fuelphp&#34;&gt;Frameworks (FuelPHP)&lt;/h2&gt;&#xA;&lt;p&gt;This whole design pattern is all a very beautiful way to structure your web applications, however, if you have to set that all up from scratch, it would get very tiresome to get right. That’s where frameworks come in. The first PHP framework I got in touch with is &lt;a href=&#34;http://fuelphp.com/&#34;&gt;FuelPHP&lt;/a&gt;, a quite young framework running on PHP 5.3+. According to their front page, it is based on the best ideas of other frameworks, with a fresh start. As this is the first framework I’ve used, I can’t really judge that former part, but by googling certain concepts used, I’ve found out that many of them are quite commonly accepted ones.&lt;/p&gt;&#xA;&lt;p&gt;In my experience, it’s very simple to set up some new models and relate them, to quickly get going without all the design hassle you’d normally have. For the most part, you don’t get to write the database queries yourself, which is a good thing.&lt;/p&gt;&#xA;&lt;h3 id=&#34;validation&#34;&gt;Validation&lt;/h3&gt;&#xA;&lt;p&gt;An unrelated part of FuelPHP (as in, it doesn’t really have anything to do with MVC) is its validation functionality. FuelPHP makes it really smooth to validate input. There are multiple ways to go for it, but my preferred way is to actually specify the validation rules in a Model’s properties array, then setting up a Validation Observer before save.&lt;/p&gt;&#xA;&lt;p&gt;If that sounded confusing: An observer is a class that has a number of event-named methods. In a Model you can refer to an observer class and tell it which events to observe. FuelPHP takes care of the rest: When you let your model save its data to the database, any observers with ‘before_save’ enabled will be executed first. In the case of a Validation observer this will first run all the validation rules specified in the properties set-up, and throw an error (preventing the actual database save) in the case that some data does not validate.&lt;/p&gt;&#xA;&lt;p&gt;Having gone through setting up a whole bunch of nested ifs for data validation in the past (Believe me, it’s tiresome and not elegant at all), I find this way of setting up validation simply beautiful. It’s all down to adding a few strings to an array, and it’ll validate. The way the framework is built allows for easy adding of your own validation functions too, so other than elegant, it’s very flexible.&lt;/p&gt;&#xA;&lt;h2 id=&#34;adopt-fuelphp&#34;&gt;Adopt FuelPHP!&lt;/h2&gt;&#xA;&lt;p&gt;Currently, the community surrounding FuelPHP is still fairly small, which means it’s often quite hard to google FuelPHP-related things. I would very much like the community for this framework to grow, as I feel it has a lot of potential. Their website (mostly docs section) is still quite incomplete in places, but that should improve as the community grows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-information&#34;&gt;More information&lt;/h2&gt;&#xA;&lt;p&gt;I’ve only briefly touched upon many subjects in this post, so if I sparked your interest, these couple of links should get your started.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&#34;&gt;Wikipedia article on Model-View-Controller&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://fuelphp.com/&#34;&gt;FuelPHP homepage&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://fuelphp.com/docs/&#34;&gt;FuelPHP documentation&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://fuelphp.com/docs/packages/orm/creating_models.html&#34;&gt;Creating a Model in FuelPHP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://fuelphp.com/docs/packages/orm/observers/intro.html&#34;&gt;Using Observers in FuelPHP&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Obviously, if you are really interested in trying it out, I suggest downloading it and playing with it! You can get support on &lt;a href=&#34;http://fuelphp.com/forums/&#34;&gt;their forum&lt;/a&gt; and in their &lt;a href=&#34;irc://freenode.net/fuelphp&#34;&gt;IRC channel&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Change</title>
				<link>https://michd.me/blog/change/</link>
				<pubDate>Fri, 25 Nov 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/change/</guid>
				<description>&lt;p&gt;Since I last posted anything, much has changed in my life; so much that it may be more effective to say that little has not changed.&lt;/p&gt;&#xA;&lt;p&gt;I used to live in Belgium, with my mother and sister. I had finished a bachelor degree in Electronics. Not so long before that point, my prospects for the next year or so were along the lines of finding a job in electronics, and that was it. I’ve been in a long distance relationship for some three years, and with me having a job, we’d get around to see each other more often. (She lived in England; Eurostar tickets are expensive.) However, she then managed to get into a university, quite far away from where her parents live. That’s when the idea of finally moving in together emerged.&lt;/p&gt;&#xA;&lt;p&gt;Fast forward a number of months, I’m writing this post from our apartment in Hampshire where we have now lived for two months. She’s been doing well in university, and I’ve had my job as a Front-end web developer for a month now. I have gone from spending most of my time in my room living with my mother and sister, to moving out to another country where people don’t speak my native language, where they drive on the other side of the road, where they use a whole range of different units than those I’m used to, to live in an apartment with the person I love and to manage our own household. I’ve converted my web development into a career, so I’m effectively being paid to do what I love, and my employer encourages me to become the best developer I can possibly be.&lt;/p&gt;&#xA;&lt;p&gt;It’s a change for the better, that’s for sure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-there&#34;&gt;Getting there&lt;/h2&gt;&#xA;&lt;p&gt;Now that may have all sounded like a whole bunch of fortune, moving out and everything just works. When it comes down to it, it all turned out very good, but the road there was not easy. To move all my things to England, I actually used the post. Luckily that worked out fine, after failing to properly find out how to do it through other parcel companies. Once moved in, we had to get used to the little space we had to store our thing; which isn’t that much of a problem, it just makes for a bit of an untidy living room.&lt;/p&gt;&#xA;&lt;p&gt;We spent the first two weeks in the apartment without an internet connection. Seeing as I had to find work as soon as possible, this was quite a productivity bottleneck. I went out to an internet café a few times, using Internet Explorer 7 on Windows XP to look for work. Once we had internet, I spent a good two weeks full-time job-seeking online. I applied to many electronics-related vacancies, signed up to a lot of websites, and just kept searching the area for any appropriate jobs. After a while I got some calls from job agencies, asking some more info about my electronics knowledge, but most often turning out to be for positions that were located too far away to be reasonable for me. Then, I ran into some web developer vacancies and decided I might as well give it a shot, even though I had no formal education in the field. The third web developer vacancy I found was thanks to someone in an IRC channel I frequent; he recommended a creative job site.&lt;/p&gt;&#xA;&lt;p&gt;This vacancy was for a job only about 3 miles away from where we live. It was not through a job agency, so I could actually look into the company I was applying to. Boy, the company looked exciting, the first impression I got was that it was a small team of talented individual working smoothly together to create top-notch products. You can imagine how excited I was when I got a phone call from them the day after I sent my application letter. About forty minutes after that first call, I was seated in their office for a quick interview, and an inspection of some code I wrote. They seemed interested enough, for I got a task to complete over the weekend (which I managed to turn in the same evening). The next Tuesday was one of the happiest days I’d had in a long while. I got offered the position.&lt;/p&gt;&#xA;&lt;p&gt;I like to think I’ve settled in fairly well in my new life. Life is manageable, I like my job, we’re happy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;website-update&#34;&gt;Website update&lt;/h2&gt;&#xA;&lt;p&gt;And last but not least… actually it is kind of the least change. As you can see I’ve redesigned my website once again. It’s even more minimal than it was before, and I’m happy with that. I like having the focus on the content rather than the packaging, especially since I’m not really a designer, more-so a developer. The website you can see is now all WordPress, rather than just the blog part. It’s far easier to manage the assets/design globally this way.&lt;/p&gt;&#xA;&lt;p&gt;Some new things I’ve been playing with in this iteration: CSS3 transitions (for the moving menu items on mouse-over), some more advanced CSS3 box-shadow things, better closure on the little JavaScript I wrote.&lt;/p&gt;&#xA;&lt;p&gt;Also, you may want to try resizing your browser window to be quite narrow, I tried some responsive web design.&lt;/p&gt;&#xA;&lt;p&gt;Being very much into web development all the time now (it is still my hobby even though I do it all the time at work), I intend to write some more on it here, as well as do some little open source projects. In this work environment, I’m learning a whole lot quicker than I was when developing on my own, as collaborating ‘in real-time’ teaches you so much more than working on your own does.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Nostalgia and how it’s pretty much pointless</title>
				<link>https://michd.me/blog/nostalgia-and-how-its-pretty-much-pointless/</link>
				<pubDate>Mon, 05 Sep 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/nostalgia-and-how-its-pretty-much-pointless/</guid>
				<description>&lt;p&gt;I’m definitely not the only one who enjoys getting nostalgic over things; be it old TV shows or places that bring up old memories. They bring up memories of “good old times”, and I start wishing I could relive those moments, back when everything was okay, I didn’t have a thing in the world to worry about, and so forth.&lt;/p&gt;&#xA;&lt;p&gt;I’ve learnt a while ago that this last part is because our brain tends to only hang on to the good memories, however. Back then, in the good old times, we did have things to worry about, and not everything was so perfect and nice as we recollect it now. That aside, it’s not what I wanted to talk about.&lt;/p&gt;</description>
			</item>
			<item>
				<title>My first music album: Limitless</title>
				<link>https://michd.me/blog/my-first-music-album-limitless/</link>
				<pubDate>Thu, 01 Sep 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/my-first-music-album-limitless/</guid>
				<description>&lt;p&gt;Available on Bandcamp: &lt;a href=&#34;http://cimylium.bandcamp.com/album/limitless&#34;&gt;Limitless, by Cimylium&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;iframe style=&#34;border: 0; max-width: 100%; width: 350px; height: 786px; margin: 0 auto;&#34; src=&#34;http://bandcamp.com/EmbeddedPlayer/album=1523045355/size=large/bgcol=ffffff/linkcol=ff5300/transparent=true/&#34; seamless&gt;&lt;a href=&#34;http://cimylium.bandcamp.com/album/limitless&#34;&gt;Limitless by Cimylium&lt;/a&gt;&lt;/iframe&gt;&#xA;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Album: Cimylium - Limitless (Ambient)</title>
				<link>https://michd.me/creations/music/album-cimylium-limitless/</link>
				<pubDate>Thu, 01 Sep 2011 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/music/album-cimylium-limitless/</guid>
				<description>&lt;iframe style=&#34;border: 0; width: 100%; height: 120px;&#34; &#xA;        src=&#34;https://bandcamp.com/EmbeddedPlayer/album=1523045355/size=large/bgcol=333333/linkcol=ff5300/tracklist=false/artwork=small/transparent=true/&#34;&#xA;        seamless&gt;&#xA;&lt;/iframe&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://cimylium.bandcamp.com/album/limitless&#34;&gt;Limitless on Bandcamp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Limitless&amp;rdquo; is an ambient album I wrote over the course of about a year. The track &amp;ldquo;Polaris&amp;rdquo; is a collaboration with the prolific &lt;a href=&#34;https://sinerider.bandcamp.com&#34;&gt;SineRider&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;All other tracks were written and produced by me, using FL Studio. As you might guess, it&amp;rsquo;s space-themed, with each track title taking you further away from home.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tracklist&#34;&gt;Tracklist&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Mesosphere&lt;/li&gt;&#xA;&lt;li&gt;Moon&lt;/li&gt;&#xA;&lt;li&gt;Chiron&lt;/li&gt;&#xA;&lt;li&gt;Miaplacidus&lt;/li&gt;&#xA;&lt;li&gt;Polaris (featuring SineRider)&lt;/li&gt;&#xA;&lt;li&gt;Betelgeuse&lt;/li&gt;&#xA;&lt;li&gt;Antares&lt;/li&gt;&#xA;&lt;li&gt;Doradus&lt;/li&gt;&#xA;&lt;li&gt;Cephei&lt;/li&gt;&#xA;&lt;li&gt;Limitless&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
			</item>
			<item>
				<title>FPGA MIDI Synth update: MIDI improvements, Polyphony, PWM etc</title>
				<link>https://michd.me/blog/fpga-midi-synth-update-midi-improvements-polyphony-pwm-etc/</link>
				<pubDate>Sat, 09 Jul 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/fpga-midi-synth-update-midi-improvements-polyphony-pwm-etc/</guid>
				<description>&lt;p&gt;Since school has ended, I’ve played with our yearproject some more to make it more awesome and usable. Here’s an update of what fun stuff I’ve been doing to it. I’ve purchased my own Digilent Nexys2 board, so I can keep working on this and future FPGA projects now I’ve returned my ex-classmate’s board.&lt;/p&gt;&#xA;&lt;h2 id=&#34;midi-improvements&#34;&gt;MIDI improvements&lt;/h2&gt;&#xA;&lt;p&gt;The most important problem we had was that MIDI interpretation was terrible. Sure, it worked, but once you’d start playing faster than 115BPM, notes would randomly be missed. At school, we had actually spent weeks trying to figure out where in the code of the UART or MIDI interpretation we did something wrong.&lt;/p&gt;&#xA;&lt;p&gt;During my later fiddling, I found out that the reason for this was that there were a couple of elements in the FPGA design that weren’t triggered on the rising edge on the clock, but rather on the rising edge of some combinatorial signal. This caused all kinda of synchronisation errors, and thus the quite timing-sensitive MIDI interpretation. The issue was resolved easily by adding a clock input to the elements that were without, and altering the code to something like this:&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: plain&#34;&gt;&#xA;if(rising_edge(clk) and combinatorial_signal = &#39;1&#39;) then&#xA;-- statements to be executed&#xA;end if;&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Testing that change made it all work pretty much perfectly. From what I could hear, it played 16th arpeggios at 999BPM without any problem.&lt;/p&gt;&#xA;&lt;p&gt;After that, I tweaked the design a little more in order to make it play different waveforms when different MIDI channels were being used. With that properly implemented, I could fake polyphony by rapidly switching channels. Here’s a video that demonstrates it. The LEDs lighting up indicate which channel (and thus waveform) is currently being used.&lt;/p&gt;&#xA;&lt;p&gt;&lt;iframe width=&#34;480&#34; height=&#34;390&#34; src=&#34;https://www.youtube.com/embed/b5I7DF9d6Ks&#34; frameborder=&#34;0&#34; allowfullscreen style=&#34;margin: 0 auto&#34;&gt;&lt;/iframe&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Very old: FPGA MIDI Synth</title>
				<link>https://michd.me/creations/electronics/fpga-midi-synth/</link>
				<pubDate>Sat, 09 Jul 2011 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/electronics/fpga-midi-synth/</guid>
				<description>&lt;p&gt;For our final project in our EE course, my classmate and I built a simple digital synthesiser around an FPGA development board.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Yearproject: FPGA MIDI synth</title>
				<link>https://michd.me/blog/yearproject-fpga-midi-synth/</link>
				<pubDate>Fri, 24 Jun 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/yearproject-fpga-midi-synth/</guid>
				<description>&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;a href=&#34;https://michd.me/images/blog/yearproject-fpga-midi-synth/DSCN5523.jpg&#34;&gt;&#xA;    &lt;img src=&#34;https://michd.me/images/blog/yearproject-fpga-midi-synth/DSCN5523-300x225.jpg&#34; title=&#34;Overview, angle 1&#34; alt=&#34;Overview, angle 1&#34; height=&#34;225&#34; wdith=&#34;300&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Over the past two years, I’ve completed a bachelor course in electronics. In the second and thus final year, we were assigned to come up with a project to complete over the year. My classmate Raf and I are both interested in music production, so we decided it would be a fun idea to create our very own synthesizer.&lt;/p&gt;&#xA;&lt;p&gt;We actually made the decision to make a synthesizer in our first year, so we certainly would have enough time to work it all out properly.  In this first year, we were introduced to the FPGA, which can briefly be described as a digital playground that allows you to build just about any digital circuit on it. (To give an idea: You could actually design a micro-controller on the thing if you’d want to).&lt;/p&gt;&#xA;&lt;p&gt;Our interest for the FPGA sparked, we decided to use that to build the synthesizer around. Thus the decision was made to go digital. Anyway, I could go on for a while on the why and when, but let’s take a look at how this stuff works first.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Minecraft design tool</title>
				<link>https://michd.me/creations/programming/minecraft-design-tool/</link>
				<pubDate>Sun, 01 May 2011 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/minecraft-design-tool/</guid>
				<description>&lt;p&gt;2D grid to draw with some Minecraft materials, to plan complex structures.&lt;/p&gt;</description>
			</item>
			<item>
				<title>MySQL: find number of matches in another table</title>
				<link>https://michd.me/blog/mysql-find-number-of-matches-in-another-table/</link>
				<pubDate>Sat, 23 Apr 2011 17:17:00 +0100</pubDate>
				<guid>https://michd.me/blog/mysql-find-number-of-matches-in-another-table/</guid>
				<description>&lt;p&gt;The problem of finding the amount of matches in another table is one that had me stumped for a while, but after googling a while, looking through concepts that were new to me, I figured it out. Since it may be a fairly common problem, I thought I’d share my solution here.&lt;/p&gt;&#xA;&lt;h3 id=&#34;use-cases&#34;&gt;Use cases&lt;/h3&gt;&#xA;&lt;p&gt;I used this technique to find the amount of posts a user has on a forum, in a situation where I have a users table, and a forum table. Other possibilities could be amount of sales for a certain item in a webshop, where the items are in a table, and the sales in another. I’ll use the users / posts example to show the query.&lt;/p&gt;&#xA;&lt;h3 id=&#34;users-table&#34;&gt;Users table&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;user_id&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;username&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Mich&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;2&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;John&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;CornCob&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;forum-table&#34;&gt;Forum table&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;post_id&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;user_id&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;topic_id&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;message&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;142&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;54&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Pellentesque posuere…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;143&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;42&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Cras sodales molestie…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;144&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;54&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Phasellus condimentum euismod…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;145&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;65&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Aliquam placerat nibh ut…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;146&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;3&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;54&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Donec nec convallis…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;147&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;54&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Sed tincidunt fermentum…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;148&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;1&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;60&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Aenean id turpis…&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;the-query&#34;&gt;The query&lt;/h3&gt;&#xA;&lt;pre class=&#34;brush: sql&#34;&gt;&#xA;SELECT&#xA;  users.user_id,&#xA;  users.username,&#xA;  COALESCE(pc.postcount, 0) AS postcount&#xA;FROM&#xA;  users&#xA;  LEFT JOIN&#xA;  (&#xA;    SELECT&#xA;      forum.user_id,&#xA;      COUNT(forum.post_id) AS postcount&#xA;    FROM forum&#xA;    WHERE 1&#xA;    GROUP BY forum.user_id&#xA;  ) pc ON pc.user_id=users.user_id&#xA;WHERE 1&#xA;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>Minecraft design tool</title>
				<link>https://michd.me/blog/minecraft-design-tool/</link>
				<pubDate>Thu, 21 Apr 2011 17:17:00 +0100</pubDate>
				<guid>https://michd.me/blog/minecraft-design-tool/</guid>
				<description>&lt;p&gt;TL;DR: I made this thing: &lt;a href=&#34;http://michd.me/mcdesign&#34;&gt;Minecraft design tool&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My girlfriend bought me the ever-so-popular indie game ‘Minecraft’ for my birthday, even though I kept saying I would never play it. I tend to get obsessive over certain thing; mostly things that involve creating, building, which is all Minecraft is about. After having seen her play it for quite a while however, I decided to give it a go anyway, as it looked like far too much fun to be left alone. As expected, I did start to obsess over it, once I got everything down properly (which was rather soon since the game is really easy to play).&lt;/p&gt;&#xA;&lt;p&gt;Since Minecraft also has a multiplayer mode, my girlfriend and I were soon playing together in our own virtual world. After a while we started building things together, which was and still is endless fun. However, when you just explain your idea of what you want to build, there sometimes is a bit of miscommunication, and one or the other starts building things in a way that wasn’t intended, because they misunderstood. Needless to say, this happened a couple of times, with mutual frustration as a result.&lt;/p&gt;&#xA;&lt;p&gt;A simple drawing on a grid can greatly help explain what you mean, I thought; thus, I got to work. I decided to quickly throw together a tool that lets you draw things in 2D, with Minecraft material sprites. I built it with the tools I’m most experienced with; namely HTML, CSS and JavaScript.&lt;/p&gt;&#xA;&lt;p&gt;&#xA;  &lt;a href=&#34;https://michd.me/images/blog/minecraft-design-tool/mcd_screencap.png&#34;&gt;&#xA;    &lt;img class=&#34;size-full floatleft&#34; title=&#34;Minecraft design tool&#34; src=&#34;https://michd.me/images/blog/minecraft-design-tool/mcd_screencap.png&#34; height=&#34;227&#34; width=&#34;227&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;p&gt;The tool simply uses a table as its grid. I realize that a drawing isn’t quite tabular data,  but it seemed the best way to go for it. Since I used HTML5 to make it, I know I could just have used the &amp;lt;canvas&amp;gt; tag, but I’m afraid I don’t have quite enough experience with that one to build something with it quickly—which was mostly the goal here. That and the fact that canvas is one of the things that can’t really be used in older browsers, so it would effectively NOT work there, made me decide to use a table.&lt;/p&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;I kept the tool very simple and to the point, because all I really wanted was a quick design tool that let you share your designs with others. It isn’t quite the prettiest as it is, but it’s functional, and that’s what matters… to me, at least.&lt;/p&gt;&#xA;&lt;p&gt;The first version I put up did not have a save button, as it was pure HTML, CSS and JavaScript. To share a design, you had to use the export function, paste the exported data (which is in JSON-format, for those interested), copy the output to your Minecraft partner(s), and have them import it again. Since this is a rather tedious way of sharing designs, I built the PHP part later, which saves a design under an 8-character ID. This way, you can just copy an url the conventional way, and the design will be loaded straight away. For those who still have an exported design sitting around somewhere, you can still import it and save it online.&lt;/p&gt;&#xA;&lt;p&gt;Seeing as there is no account system or anything, you can’t save to the same ID; you always save to a new one. This prevents people from vandalizing others’ designs. (Or griefing, if you prefer the popular Minecraft term).&lt;/p&gt;&#xA;&lt;h3 id=&#34;future-ideas&#34;&gt;Future ideas&lt;/h3&gt;&#xA;&lt;p&gt;Since I made a PHP part for it, I’m planning to expand on that. One nice idea I have is to build an actual image generator; PHP would simply combine the sprites into a single image and make it available for download as a PNG.&lt;/p&gt;&#xA;&lt;p&gt;Another handy feature would be to have a little list of latest designs, so you don’t need to bookmark everything. I might use a cookie to have a list of the latest designs you made, which makes it easier to find your own designs, rather than just the latest few. I’ll keep you updated.&lt;/p&gt;&#xA;&lt;p&gt;EDIT 2016-07-10: Well, none of that ever happened.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A fresh new look</title>
				<link>https://michd.me/blog/a-fresh-new-look/</link>
				<pubDate>Wed, 20 Apr 2011 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/a-fresh-new-look/</guid>
				<description>&lt;p&gt;It has been far too long since I last updated, and that’s not just because I forgot about it; I’ve been putting it off. Lately, I’ve had quite a couple of ideas to blog about, but I just didn’t want to because I had grown so tired of the dark design I made. I guess it was sort of stylish, in its own way, but I’ve started liking bright colour schemes better.&lt;/p&gt;&#xA;&lt;p&gt;Therefore, before I wanted to blog again, I wanted to make it look pretty to look at; as you can see, I went for it and finished it; I’ll leave it up to you whether or not I succeeded.&lt;/p&gt;&#xA;&lt;p&gt;I decided to finally jump on the bandwagon and do it all in HTML5, rather than the good ol’ XHTML. I think browser support for HTML5 is getting big enough to really start using it as the main technology in webpages; besides, it’s easy to set it all up so older browsers display everything all right as well.&lt;/p&gt;&#xA;&lt;p&gt;My starting point for this custom theme was HTML5Reset‘s ‘empty’ WordPress theme. It’s basically a very basic theme, with minimal styling, so you don’t really need to actually get rid of anything to get it the way you want. It was very easy to work with, and I’m happy with the result.&lt;/p&gt;&#xA;&lt;h3 id=&#34;whats-left&#34;&gt;What’s left&lt;/h3&gt;&#xA;&lt;p&gt;Now as you may have noticed, at the moment of writing, I’ve only redesigned the blog; the rest of my site still bears the dark brown design. I’ll be redo-ing my portfolio as well as the front page in this style, so it all matches. There are a couple of menu options up there in the navigation that don’t work properly yet too (most importantly, the ‘Music’ one), so I’ll be working on that as well.&lt;/p&gt;&#xA;&lt;p&gt;Either after or before that, I’ll write a bit more about all the things I’ve been up to. It’s quite a bit.&lt;/p&gt;</description>
			</item>
			<item>
				<title>TheAudioPortal</title>
				<link>https://michd.me/creations/programming/theaudioportal/</link>
				<pubDate>Mon, 07 Mar 2011 00:00:00 +0000</pubDate>
				<guid>https://michd.me/creations/programming/theaudioportal/</guid>
				<description>&lt;p&gt;TheAudioPortal was a website and forum to share and review the members&amp;rsquo; music and improve as musicians.&lt;/p&gt;</description>
			</item>
			<item>
				<title>JavaScript: getChildNodesByTagName()</title>
				<link>https://michd.me/blog/javascript-getchildnodesbytagname/</link>
				<pubDate>Mon, 20 Sep 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/javascript-getchildnodesbytagname/</guid>
				<description>&lt;p&gt;If you’ve ever used JavaScript’s &lt;code&gt;getElementsByTagName()&lt;/code&gt;, you may have noticed something annoying about its behaviour. (Well, it’s only annoying depending on your application.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;getElementsByTagName&lt;/code&gt; returns every element matching the tag name given, regardless of its position in the document tree. This is annoying if you only want to use the elements that are direct descendants of the element you’re calling it from.&lt;/p&gt;&#xA;&lt;p&gt;So anyway, to cut this short, I wrote  a quick but effective function that works just the same as &lt;code&gt;getElementsByTagName&lt;/code&gt;, with the difference that it only returns direct descendants. Just add in this snippet of code and you can start using the function just as you would use &lt;code&gt;getElementsByTagName&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;brush: js&#34;&gt;&#xA;Object.prototype.getChildNodesByTagName = function (tagName) {&#xA;    var byTagName = this.getElementsByTagName(tagName),&#xA;        outArr = [],&#xA;        i;&#xA;&#xA;    for (i = 0; i &amp;lt; byTagName.length; i++) {&#xA;        if (byTagName[i].parentNode == this) {&#xA;            outArr.push(byTagName[i]);&#xA;        }&#xA;    }&#xA;&#xA;    return outArr;&#xA;}&#xA;&lt;/pre&gt;&#xA;&lt;p&gt;Here’s how it works:&#xA;The function uses the typical &lt;code&gt;getElementsByTagName&lt;/code&gt;, and then iterates over all the elements found. For each element it checks whether the element’s &lt;code&gt;parentNode&lt;/code&gt; equals &lt;code&gt;this&lt;/code&gt;, which is the node that should be the parent of any elements we want to return.&#xA;When the comparison is positive, the element is added to the array, which is later returned.&lt;/p&gt;&#xA;&lt;p&gt;I hope you can put it to good use!&lt;/p&gt;&#xA;&lt;p&gt;Leave me a comment if this was helpful to you, or if there’s anything wrong, please.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Economic desklamp hack</title>
				<link>https://michd.me/blog/economic-desklamp-hack/</link>
				<pubDate>Sat, 11 Sep 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/economic-desklamp-hack/</guid>
				<description>&lt;p&gt;Today, I decided to fiddle with things a bit.&lt;/p&gt;&#xA;&lt;p&gt;We had these LED spots in the house, just like &lt;a href=&#34;http://www.mystoreonline.com.au/images/auto_l016_gu10_230v_1.jpg&#34;&gt;these&lt;/a&gt; (random google images find), but they broke pretty fast. When I had replaced them with regular halogen spots again, I decided to see what’s inside them, and see if I could perhaps find what’s wrong with them.&lt;/p&gt;&#xA;&lt;p&gt;It turned out there’s a simple circular PCB with a sort of high-power SMD LEDs mounted on there. In the other part of the spot, there’s a small transformer circuit, which, as it turned out, is what’s broken. I test the LED board separately, and found that it just runs on a typical 12V DC, which is why I decided to do something with them.&lt;/p&gt;&#xA;&lt;p&gt;I’m not going to bother trying to get the broken circuitry back to work, though.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, I got the idea to replace the halogen lamp of my desk lamp, with the LED part of the spot. I took some pictures, so you can have a look.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;a href=&#34;https://michd.me/images/blog/economic-desklamp-hack/DSCN5258.jpg&#34;&gt;&#xA;    &lt;img class=&#34;aligncenter&#34; title=&#34;Desklamp 01&#34; src=&#34;https://michd.me/images/blog/economic-desklamp-hack/DSCN5258-225x300.jpg&#34; alt=&#34;Desklamp 01&#34; height=&#34;300&#34; width=&#34;225&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here’s the original, intact lamp.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kitchen&#43;bathroom renovation pt.6</title>
				<link>https://michd.me/blog/kitchenbathroom-renovation-pt-6/</link>
				<pubDate>Tue, 07 Sep 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kitchenbathroom-renovation-pt-6/</guid>
				<description>&lt;p&gt;Yesterday, the kitchen furniture was delivered. The store where we bought it from sent 3 guys with it to install all of that, which has been done in one day.&lt;/p&gt;&#xA;&lt;p&gt;There are still quite some spots that need to be finished up (painted, or tiled), but I must say, It’s looking pretty amazing already. Let’s move on to the pictures, shall we?&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;a href=&#34;https://michd.me/images/kitchenbathroom-renovation/01.jpg&#34;&gt;&#xA;    &lt;img class=&#34;aligncenter&#34; title=&#34;Kitchen + bathroom renovation pt.6 01&#34; src=&#34;https://michd.me/images/kitchenbathroom-renovation/01-300x225.jpg&#34; alt=&#34;Kitchen + bathroom renovation pt.6 01&#34; height=&#34;225&#34; width=&#34;300&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here’s a first view. On the left is the fridge and the freezer (the fridge is on top), neatly built in. Then, the dishwasher (woohoo), and some other cupboards.&lt;/p&gt;&#xA;&lt;p&gt;The sink is also on that side of the kitchen now, so you can work with daylight, rather than face a wall.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kitchen&#43;bathroom renovation pt.5</title>
				<link>https://michd.me/blog/kitchenbathroom-renovation-pt-5/</link>
				<pubDate>Tue, 31 Aug 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kitchenbathroom-renovation-pt-5/</guid>
				<description>&lt;p&gt;Some progress has been made since last time, so here’s another update. (And mostly because Brittany really wants new pics.)&lt;/p&gt;&#xA;&lt;p&gt;Here goes.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;a href=&#34;https://michd.me/images/kitchenbathroom-renovation/DSCN5214.jpg&#34;&gt;&#xA;    &lt;img class=&#34;aligncenter&#34; title=&#34;Kitchen + bathroom renovation pt.5 01&#34; src=&#34;https://michd.me/images/kitchenbathroom-renovation/DSCN5214-300x225.jpg&#34; alt=&#34;Kitchen + bathroom renovation pt.5 01&#34; height=&#34;225&#34; width=&#34;300&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here the ceiling is in progress.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kitchen&#43;bathroom renovation pt.4</title>
				<link>https://michd.me/blog/kitchenbathroom-renovation-pt-4/</link>
				<pubDate>Fri, 20 Aug 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kitchenbathroom-renovation-pt-4/</guid>
				<description>&lt;p&gt;I figured it’s time for another update, as much has been done since we finished digging all that clay. Since then, pipes for water and cables for electricity have been put in place, concrete has been poured, walls have been placed, stabilizer has been poured, etc.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;a href=&#34;https://michd.me/images/kitchenbathroom-renovation/DSCN5143.jpg&#34;&gt;&#xA;    &lt;img class=&#34;aligncenter&#34; title=&#34;Kitchen + bathroom renovation pt.4 01&#34; src=&#34;https://michd.me/images/kitchenbathroom-renovation/DSCN5143-300x225.jpg&#34; alt=&#34;Kitchen + bathroom renovation pt.4 01&#34; height=&#34;225&#34; width=&#34;300&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Here, a bunch of pipes for the used water have been put in place, and covered by sand again. There are so many of them because the room you see is going to be both the bathroom and the kitchen; a wall to separate them again has yet to be built.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A collection of web development links</title>
				<link>https://michd.me/blog/a-collection-of-web-development-links/</link>
				<pubDate>Sun, 15 Aug 2010 17:00:00 +0100</pubDate>
				<guid>https://michd.me/blog/a-collection-of-web-development-links/</guid>
				<description>&lt;p&gt;Over the time I got into web development, I’ve headed to google a lot. This has resulted in running in to countless handy resources I didn’t know of before.&lt;/p&gt;&#xA;&lt;p&gt;In this post I’ll try to make a summary of a good set of links regarding webdev. If it’s not obvious, the paragraph headers link to the pages I’m talking about.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-html-dog&#34;&gt;1. &lt;a href=&#34;http://htmldog.com/&#34;&gt;HTML Dog&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Note: my first one used to be W3Schools, but I found out that W3Schools has multiple cases of misinformation in their tutorials, as is more thoroughly explained here.&lt;/p&gt;&#xA;&lt;p&gt;On Html Dog, you can learn the basics of HTML and CSS, and go from there. This is a lesser known tutorial site, but is very clear in it’s explanations, and more technically accurate.&lt;/p&gt;&#xA;&lt;p&gt;Whenever I run in to a good site that gives an introduction to PHP or JavaScript, I’ll add it on here as well, since the removal of W3Schools takes those away.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-phpnet&#34;&gt;2. &lt;a href=&#34;http://php.net/&#34;&gt;PHP.net&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;If you’re developing pages in PHP, and need to know what the order of the parameters of the explode function was, you can find it here. PHP.net has a really nice manual for every function that’s built in the language, and trust me, that’s a lot. The manual goes in detail about what the functions do, with added examples to help clarify. What helps is that when you just type ‘php’ [function name] in the url bar and hit enter, it takes you right to the function page 95% of the time. That is, if you’re using a decent web browser.&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-jquery&#34;&gt;3. &lt;a href=&#34;http://jquery.com/&#34;&gt;jQuery&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;jQuery is with good reason the most popular JavaScript library. It does exactly as it promises: write less, do more. Using jQuery makes JavaScript fun again. jQuery is not only easy to learn, it also has a whole lot of support. At api.jquery.com, you have the whole manual at your fingertips. I can comment the same thing on the jquery manual as I can on PHP’s. The same thing goes here as well, type ‘jquery’ [function name] in the url bar, and you’re there in seconds.&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-ajaxload&#34;&gt;4. &lt;a href=&#34;http://ajaxload.info/&#34;&gt;AjaxLoad&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Once you’re starting to have a decent grasp of your (x)HTML and JavaScript (and perhaps jQuery), you will probably get into ajax.  Ajax basically is a technique that allows you to send/receive date to/from the server, without having to load a whole page. Since using this technique will often cause the user to have to wait for a little while, it’s always handy to show a little spinning animation, so the user doesn’t get the idea it’s not responding. You’ve probably seen them all before, but where do they come from? On this website, you can easily generate one of these nice gifs, in custom colours. It’s straight, to the point, and very handy.&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-faviconcc&#34;&gt;5. &lt;a href=&#34;http://favicon.cc/&#34;&gt;Favicon.cc&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Every decent website has its own custom icon that show up in the url bar and in the tab its loaded into. Such an icon is called a ‘favicon’. On this site you can import an image to convert it to an icon, and you can alter it after that. That or you can just start from scratch and start clicking pixels on the neat JavasScript-driven web app.&lt;/p&gt;&#xA;&lt;h3 id=&#34;6-jsfiddle&#34;&gt;6. &lt;a href=&#34;http://jsfiddle.net/&#34;&gt;JsFiddle&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I found out about this little gem not so long ago, and I’ve fallen in love with it. JsFiddle allows you to- you guessed it- fiddle with JavaScript. The interface is as simple as it can get, yet it must have quite a complex background engine. You get a HTML editing area, a CSS area, and a javascript area. The fourth area is the resulting webpage. This website saves you the hassle from saving/refreshing the whole time with a text editor/browser combo. Just a click on the “run” button suffices here. The app also has a really nice tidy up function, which fixes all your indentation failures. On top of that, you can choose to use one of the javascript libraries that are available, which makes jQuery testing handy. And then you can save your fiddles as well, so you can share it with others. The update button makes sure you don’t mess up what you made completely, as it saves it as a new version of the fiddle automatically. I love this site.&lt;/p&gt;&#xA;&lt;h3 id=&#34;7-pastebin&#34;&gt;7. &lt;a href=&#34;http://pastebin.com/&#34;&gt;Pastebin&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Pastebin is a handy tool for collaboration. Basically, you can paste your code snippet, and select which language it’s in. It’ll automatically highlight the syntax accordingly. You can select how long you want to have the entry up on the site, and then you can share it. It has some handy embed and download functions as well. I think this is mainly handy for sharing code, showing examples, and letting other people check your code.&lt;/p&gt;&#xA;&lt;h3 id=&#34;8-color-scheme-designer&#34;&gt;8. &lt;a href=&#34;http://colorschemedesigner.com/&#34;&gt;Color scheme designer&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;This beautiful website helps you out a lot when you’re failing at selecting good colours for your design. It has a variety of options to build fresh looking colour schemes. It has many features for things you wouldn’t even think about.&lt;/p&gt;&#xA;&lt;p&gt;That about wraps it up for this post, I think. If I’ve missed any significant web apps/resources, please let me know. I’ve only included those I personally have experience with, so it’d be great if you could introduce me to some others as well.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kitchen&#43;bathroom renovation pt.3</title>
				<link>https://michd.me/blog/kitchenbathroom-renovation-pt-3/</link>
				<pubDate>Tue, 10 Aug 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kitchenbathroom-renovation-pt-3/</guid>
				<description>&lt;p&gt;As I mentioned in &lt;a href=&#34;https://michd.me/blog/kitchenbathroom-renovation-pt-2/&#34;&gt;part 2&lt;/a&gt;, there was no concrete in the floor, but instead, a whole lot of sand. Over the last weekend, we’ve been working on digging that out. (Where we = my mother, my sister, and I). Unfortunately, it wasn’t just sand; it was merely a thin layer of sand on top of a thick layer of clay.&lt;/p&gt;&#xA;&lt;p&gt;Onto some photos of that progress after the break.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kitchen&#43;bathroom renovation pt.2</title>
				<link>https://michd.me/blog/kitchenbathroom-renovation-pt-2/</link>
				<pubDate>Wed, 04 Aug 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kitchenbathroom-renovation-pt-2/</guid>
				<description>&lt;p&gt;I decided to split this whole mess in parts, as otherwise, we’d eventually have so many photos on one page that it’d take too long to load.&lt;/p&gt;&#xA;&lt;p&gt;Day 2 of the renovation, August 4th.&lt;/p&gt;&#xA;&lt;p&gt;Today, the guy that’s doing all this let us know that there’s actually no concrete under the kitchen and bathroom. The two rooms where built separately, after the rest of the house was built, and apparently, they though it was al right to just build it on the ground, with no support under there. We’re lucky we didn’t have any water problems in there earlier, actually; or worse, the ground could’ve moved away due to ground water – which could’ve caused walls to break etc.&lt;/p&gt;&#xA;&lt;p&gt;This new discovery means that everything will take longer than expected. We’ve got a whole lot of sand to get out there, so we can add a good layer of concrete before we go on with building in the new kitchen stuff. There’s still some work left until we get there though.&lt;/p&gt;&#xA;&lt;p&gt;Today the wall between the kitchen and the bathroom was broken down, among other things. The bad-ass part is that this wooden wall was mostly cut down with a chainsaw.&lt;/p&gt;&#xA;&lt;p&gt;Onto to the photos.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Kitchen&#43;bathroom renovation pt.1</title>
				<link>https://michd.me/blog/kitchenbathroom-renovation/</link>
				<pubDate>Tue, 03 Aug 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/kitchenbathroom-renovation/</guid>
				<description>&lt;p&gt;We’ve just started renovating the kitchen and bathroom in our house here. (We meaning my mother, my sister and I). I decided to take photos frequently so I can look back at the progress. Should be fun.&lt;/p&gt;&#xA;&lt;p&gt;On a side note: the photos weren’t taken for the purpose of great photography, but rather for documenting.&lt;/p&gt;&#xA;&lt;p&gt;Firstly, I took a couple of shots before anything was done:&lt;/p&gt;&#xA;&lt;p&gt;Kitchen:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://michd.me/images/kitchenbathroom-renovation/DSCN5027.jpg&#34; alt=&#34;Kitchen pre-renovation 1&#34;&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Time to relax &#43; reading</title>
				<link>https://michd.me/blog/time-to-relax-reading/</link>
				<pubDate>Thu, 17 Jun 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/time-to-relax-reading/</guid>
				<description>&lt;p&gt;So, since Monday, school is over for this year. I had my last exam (analogue electronics), and I think it went pretty well, my results will be good enough.&lt;/p&gt;&#xA;&lt;p&gt;This means that it’s time to relax a bit, which I’m glad about. Tomorrow, I’m heading to England, to see Brittany again after 4 months apart. I’m pretty pumped about that. Packing is mainly done, I’m ready to leave tomorrow. Up there we’ll probably being playing ITG and DDR often, as Britt has her own machine. I’m looking forward to that too, as these dance games are next to exhausting also a lot of fun.&lt;/p&gt;&#xA;&lt;p&gt;Britt will be following up on the world cup, which might just give me an opportunity to do some coding, as I’m frankly not interested in football, that’s not to say I find it boring and over the top (but let’s not go on about that).&lt;/p&gt;&#xA;&lt;p&gt;Tomorrow I’ll be spending quite some time on trains, so I had to find something to do in that time. Part of the time I can still use Internet on my mobile phone, but the bigger part will be Internet-less. I’ve decided that I won’t be spending that time on my laptop, instead, I’ll be boring and read a book. Recently, upon reading a friend’s &lt;a href=&#34;http://electricalpie.blogspot.com/&#34;&gt;blog&lt;/a&gt;, I realized that my English vocabulary really isn’t all that. From chatting and general Internet communication you don’t get the more ‘advanced’ vocabulary down.&lt;/p&gt;&#xA;&lt;p&gt;The best solution I saw was to get my hands on some English literature, so I let Derek, of whom I know reads/has read a lot recommend me a book. He recommended me Robert Heinlein’s &lt;a href=&#34;http://www.amazon.com/Have-Space-Suit-Will-Travel/dp/B000OIGHBE/ref=sr_1_9?ie=UTF8&amp;amp;s=books&amp;amp;qid=1276803489&amp;amp;sr=1-9&#34;&gt;“Have Space Suit- Will Travel”&lt;/a&gt;, which is a science fiction story. Apparently it is his favourite book, so I decided to just get me the book with ebay. I got it for about €6, for that matter.&lt;/p&gt;&#xA;&lt;p&gt;So here’s hoping I can enjoy the book, and improve my vocabulary a bit. I’m off to have a great 9 days, see you guys later!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Work rambling</title>
				<link>https://michd.me/blog/work-rambling/</link>
				<pubDate>Thu, 10 Jun 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/work-rambling/</guid>
				<description>&lt;p&gt;In Belgium, and probably in multiple other countries too, there’s some government service where you’re eligible to receive money when you’ve been unemployed for a certain amount of time. Since I technically finished day school little under a year ago, and only did a month-long summer vacation job, I apparently am eligible for this. Obviously though, since it’s the government providing money to citizens, there’s a whole load of paperwork connected to it, to eliminate the chance they’d give one eurocent too much.&lt;/p&gt;&#xA;&lt;p&gt;To be honest, I don’t care much about money. All I wish for is to live comfortably, and to be able to do what I like to do. Unfortunately that’s not how society works—everything costs money, and you need this money to survive; there’s no other way, unless you decide to walk the criminal road, which I’m frankly not planning to do.&lt;/p&gt;&#xA;&lt;p&gt;I wish I could just continue working on The Audio Portal. It’s my passion, and I like to invest my time in it. Instead, I’ll have to push most of my time aside and find a paying job, because soon, my mother will no longer receive any so-called “child-money” for me anymore, as I’m no longer in day school. I find this terribly annoying, but I guess I’ll have to live with that fact.&lt;/p&gt;&#xA;&lt;p&gt;So now I’m dealing with a whole lot of paperwork; I need to make sure I’m registered here, there, there, and make sure I fill in this information here, bring that document to that office, get this document filled in over there to then bring it here, and so forth. I find this very tiring, running around with documents just so I’d get a bit of money for my mother, to sustain our living.&lt;/p&gt;&#xA;&lt;p&gt;Here’s hoping I can get hired for the job as web developer I applied for. It’s the first job I found that I’d actually love to do, which I also qualify for (at least that’s what I think). I really don’t feel like doing a boring, non-challenging job as a cashier somewhere… that feels like I’d be wasting my time, just to get some money.&lt;/p&gt;&#xA;&lt;p&gt;Instead, I wish to get that job, which can challenge my skills every single day, and from which I can learn new, useful things every day too. Added to that, I wouldn’t have to deal with these government offices as much anymore, and just get paid for something I like to do instead. Earning the bread on the table looks much more attractive than being given the bread because I can’t find a job.&lt;/p&gt;&#xA;&lt;p&gt;Let’s keep our fingers crossed.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Sociability / Social ability</title>
				<link>https://michd.me/blog/sociability-social-ability/</link>
				<pubDate>Wed, 09 Jun 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/sociability-social-ability/</guid>
				<description>&lt;p&gt;I have a problem. That problem is that I’m not sociable at all. One problem usually causes other problems. In my case, not being sociable has caused me to spend most of my time in front of my computer, alone in my room up here. Which is obviously not good for one’s physical and mental health, and only causes the problem to get worse.&lt;/p&gt;&#xA;&lt;p&gt;The interesting part is that I am very sociable with people online. I’ve met well over 60 people online which I still talk to every now and then, some of them daily, all over the course of 2 and a half years. When it comes to getting to know new people in real life though, it’s a bit tougher for me. I feel uncomfortable whenever I get in a situation where I have to talk to a stranger. This causes me to avoid social contact with them as much as possible, as I feel far more comfortable in my own little world of thoughts.&lt;/p&gt;&#xA;&lt;p&gt;When you see me on a train heading for evening school, you’ll notice I have earphones in, and I’m mostly using my my mobile phone. What I’m doing on my phone? Chatting with people online. This can be the people in the chatroom of TAP, or just people on MSN. In fact, I get really annoyed when I don’t have network coverage on the train, because that means I’m alone. It’s kind of ironic that I can’t stand being alone when I have nothing to do, yet I don’t talk to people (in real life). I basically take my Internet social circle with me everywhere I go.&lt;/p&gt;&#xA;&lt;p&gt;Anyway, I think I’m the most comfortable with getting to know people in real life by first having relatively short moments together, preferably with someone I already knew around. I’ll be honest: at first I didn’t feel very comfortable with my classmate and electronics teacher in evening school, simply because I didn’t know them. By now, the end of the year, they’ve become good friends, and we have inside jokes and everything. At the very start, I was uncomfortable with them, mostly because I don’t know how to behave myself with people I don’t know. I seem to be petrified to get into awkward situations.&lt;/p&gt;&#xA;&lt;p&gt;Needless to say, I won’t be the one that starts a conversation with a stranger, unless it really is required for something. I do want to get over this. I’ve been told by people that I’m a friendly guy, but I’m pretty sure that’s only from people that have known me for a while. I may be friendly, but I don’t think many people who only know me in real life know what’s really spinning in my head. I’m a closed box, because I’m scared to be judged about things. I wish I could just stand up and not care about judgments, and just be who I am, talk about it to people without constantly fearing awkwardness. I’ve realized that being afraid of awkward moments just attracts said moments. This knowledge hasn’t solved that problem in its entirety though.&lt;/p&gt;&#xA;&lt;p&gt;I want to get over this, I want to actually become sociable and dare to talk about myself, talk about things I actually care about more openly, while actually stating my opinion. I can’t get more sociable by just being forced to spend a long period  of time with people I don’t know; I want to find another way to slowly build myself to not be a ‘wuss’ and just shamelessly talk to people. Without the need for a bit of alcohol.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Audio Portal</title>
				<link>https://michd.me/blog/the-audio-portal/</link>
				<pubDate>Wed, 02 Jun 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/the-audio-portal/</guid>
				<description>&lt;p&gt;EDIT 2016-07-10: TheAudioPortal no longer exists, meaning a lot of the original links in this article are broken. I&amp;rsquo;ve replaced most of them with the label in square brackets.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Well, the secret project has been out for nearly a month now. It is named “The Audio Portal” and can be found here: [link removed]&lt;/p&gt;&#xA;&lt;p&gt;That’s right, I’m only now getting around to make a blog post about it. TAP, as I like to call it, has been in development since August 2009. I’ll admit, the site was inspired by Newgrounds. As if it wasn’t obvious yet. Over the 2 years I’ve been active in the Newgrounds audio community, I kept hearing about the same problems with the system, as well as experiencing them personally.&lt;/p&gt;&#xA;&lt;p&gt;We all (we being the active community) realized that complaining about it wasn’t going to fix the problems we experienced, instead, we frowned upon forum topics regarding so-called “zerobombing”, or topics about missing genres and so on. I felt that there should be something like Newgrounds, but focussed just on music.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Introduction</title>
				<link>https://michd.me/blog/introduction/</link>
				<pubDate>Sun, 28 Mar 2010 17:00:00 +0000</pubDate>
				<guid>https://michd.me/blog/introduction/</guid>
				<description>&lt;p&gt;Hello there, my name is Michaël, or just Mich if you prefer that (I do).&lt;/p&gt;&#xA;&lt;p&gt;I actually had a blog before, but I set my standards too high, so eventually I didn’t have anything to write about. That and the fact wordpress somehow failed while updating and I couldn’t be bothered to fix it.&lt;/p&gt;&#xA;&lt;p&gt;The plan is that on here, I write about things I occupy myself with. These can be posts about programming, music, or even philosophical topics.&lt;/p&gt;&#xA;&lt;p&gt;I am currently working on a rather big website project, which I plan to release into the public in little over a month; this blog may eventually discuss subjects regarding said site too, as it is becoming a rather big part of my life.&lt;/p&gt;&#xA;&lt;p&gt;Either way, there’s an ‘About’ page on here too, which I may or may not update in the future.&lt;/p&gt;&#xA;&lt;p&gt;I’d also like to mention that I chose this wordpress theme because it suits the overall style of the rest of my website. I tweaked around a bit in the style file, added a header etc… I think I like the outcome of it. The picture in the header is one I took when I went wandering yesterday.&amp;gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>About</title>
				<link>https://michd.me/about/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://michd.me/about/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m a UK-based software developer, electronics enthusiast and, occasionally, musician.&lt;/p&gt;&#xA;&lt;p&gt;For a living, I work on the mobile apps offered by Digitally Imported: DI.FM, RadioTunes etc, with a focus on the Android ones. I&amp;rsquo;ve been doing so since about 2013; before that I worked on the websites, mainly front-end, but DI back then allowed me to learn and transition on the job, to the then 2-person mobile development team.&lt;/p&gt;&#xA;&lt;p&gt;This mobile development has mainly been in C# through the Xamarin framework, but we&amp;rsquo;ve been rewriting it from scratch using modern technologies, in Kotlin.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Resume of Michael Duerinckx</title>
				<link>https://michd.me/resume/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://michd.me/resume/</guid>
				<description>&lt;p&gt;Note: This is a quite out of date and includes links to now-defunct websites. I&amp;rsquo;ll update it when I&amp;rsquo;m interested in pursuing new opportunities.&lt;/p&gt;&#xA;&lt;p&gt;Contact: mich [at] michd [dot] me&lt;/p&gt;&#xA;&lt;h2&gt;Web development&lt;/h2&gt;&#xA;&lt;h3&gt;Work experience&lt;/h3&gt;&#xA;&lt;p style=&#34;padding-left: 30px;&#34;&gt;&lt;strong&gt;&lt;a href=&#34;http://di.fm&#34;&gt;Digitally Imported&lt;/a&gt;&lt;/strong&gt; – Front-end developer (September 2012 – Current)&lt;/p&gt;&#xA;&lt;p style=&#34;padding-left: 60px;&#34;&gt;Working on the current websites and new versions, working on complex JS structures for the web player and various page elements. Using Ruby on Rails, Sass with Compass, jQuery, underscore.js, front-end templates, focus on code reusability. Working from PSD designs and team discussion/stakeholder feedback&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
