<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Software-Development on Klaus Hebsgaard</title><link>https://khebbie.dk/tags/software-development/</link><description>Recent content in Software-Development on Klaus Hebsgaard</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 08 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://khebbie.dk/tags/software-development/index.xml" rel="self" type="application/rss+xml"/><item><title>The asymptotic promise of agentic coding</title><link>https://khebbie.dk/posts/the-asymptotic-promise-of-agentic-coding/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/the-asymptotic-promise-of-agentic-coding/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1581092448348-010053c8c72a?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Futuristic AI coding assistant concept" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Apr 8, 2026&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;After I published &lt;a href="https://khebbie.dk/posts/two-problems-blocking-autonomous-ai-coding-assistants/"&gt;Two problems blocking autonomous AI coding assistants&lt;/a&gt;, I got some responses. And a pattern emerged.&lt;/p&gt;
&lt;p&gt;For every problem I raised, someone had the same answer: &amp;ldquo;We&amp;rsquo;ll solve that soon.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Verification is manual? Don&amp;rsquo;t worry, AI-generated tests are getting better. Code review doesn&amp;rsquo;t scale? Give it six months, the tools will summarize changes for you. The non-determinism problem? Next-gen models will be more consistent.&lt;/p&gt;</description></item><item><title>The freedom-risk curve of agentic coding</title><link>https://khebbie.dk/posts/the-freedom-risk-curve-of-agentic-coding/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/the-freedom-risk-curve-of-agentic-coding/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1558655146-364adaf1fcc9?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Risk curve graph showing freedom vs risk balance" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Apr 8, 2026&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This is the third post in a series. The first was about &lt;a href="https://khebbie.dk/posts/two-problems-blocking-autonomous-ai-coding-assistants/"&gt;two problems blocking autonomous AI coding assistants&lt;/a&gt;. The second was about &lt;a href="https://khebbie.dk/posts/the-asymptotic-promise-of-agentic-coding/"&gt;the asymptotic promise of agentic coding&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In those posts I talked about non-determinism and the feeling that real autonomous coding stays just out of reach. I think I&amp;rsquo;ve figured out why.&lt;/p&gt;
&lt;h2 id="the-trade-off-nobody-talks-about"&gt;The trade-off nobody talks about&lt;/h2&gt;
&lt;p&gt;If you want an AI coding agent to be really efficient, you have to let it loose. Give it access to your file system. Let it run shell commands. Let it make decisions without asking you first. The more freedom you give, the more it can do for you.&lt;/p&gt;</description></item><item><title>When the agent is the software</title><link>https://khebbie.dk/posts/when-the-agent-is-the-software/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/when-the-agent-is-the-software/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1505751172876-fa1923c5c528?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="AI agent represented as a digital entity" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;This is the fourth post in a series about agentic coding. The first was about &lt;a href="https://khebbie.dk/posts/two-problems-blocking-autonomous-ai-coding-assistants/"&gt;two problems blocking autonomous AI coding assistants&lt;/a&gt;. The second about &lt;a href="https://khebbie.dk/posts/the-asymptotic-promise-of-agentic-coding/"&gt;the asymptotic promise&lt;/a&gt;. The third about &lt;a href="https://khebbie.dk/posts/the-freedom-risk-curve-of-agentic-coding/"&gt;the freedom-risk curve&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I think I&amp;rsquo;ve been circling around something in those posts without naming it. When we talk about AI agents, there are actually two very different things going on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mode 1: The agent writes software.&lt;/strong&gt; You ask it to implement a feature, write a script, build a component. It produces code. You run the code. The code is deterministic — same input, same output, every time. The problems I wrote about before still apply: you need to verify the code and understand what changed. But once the code works, it works.&lt;/p&gt;</description></item><item><title>Two problems blocking autonomous AI coding assistants</title><link>https://khebbie.dk/posts/two-problems-blocking-autonomous-ai-coding-assistants/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/two-problems-blocking-autonomous-ai-coding-assistants/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1581091226825-a6a2a5aee158?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Roadblock signs on a tech highway" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Mar 30, 2026&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I&amp;rsquo;ve been using AI coding assistants daily for a while now. Claude Code, GitHub Copilot, Codex - I&amp;rsquo;ve tried them all. And I keep running into the same wall.&lt;/p&gt;
&lt;p&gt;Every time I use agentic coding, I end up doing two things manually: First, I verify that the code actually does what I expected - running tests, checking behavior. Second, I read through the changes to understand how the shape of the codebase changed.&lt;/p&gt;</description></item><item><title>If humans do stuff that computers can do, computers gather at night and laugh at the human</title><link>https://khebbie.dk/posts/if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human/</link><pubDate>Wed, 10 Feb 2021 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Robotic arm performing automated tasks humorously" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 10, 2021&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Sometimes we have to do really boring work as software developers.&lt;/p&gt;
&lt;p&gt;For instance today we are working on moving a domain from our internal DNS servers to AWS route53.&lt;/p&gt;
&lt;p&gt;This domain has been in our hands for 25 years - we have a lot of DNS records.&lt;/p&gt;
&lt;p&gt;We naturally have to make sure every record exists in the new DNS - otherwise people can&amp;rsquo;t receive mails or other important stuff.&lt;/p&gt;</description></item><item><title>If humans do stuff that computers can do, computers gather at night and laugh at the human</title><link>https://khebbie.dk/posts-pages/if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human/</link><pubDate>Wed, 10 Feb 2021 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human/</guid><description>&lt;h1 id="if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human"&gt;If humans do stuff that computers can do, computers gather at night and laugh at the human&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 10, 2021&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human/"&gt;https://khebbie.dk/if-humans-do-stuff-that-computers-can-do-computers-gather-at-night-and-laugh-at-the-human/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Sometimes we have to do really boring work as software developers.&lt;/p&gt;
&lt;p&gt;For instance today we are working on moving a domain from our internal DNS servers to AWS route53.&lt;/p&gt;
&lt;p&gt;This domain has been in our hands for 25 years - we have a lot of DNS records.&lt;/p&gt;
&lt;p&gt;We naturally have to make sure every record exists in the new DNS - otherwise people can&amp;rsquo;t receive mails or other important stuff.&lt;/p&gt;</description></item><item><title>Are you smart enough to debug your code?</title><link>https://khebbie.dk/posts/if-you-write-your-code-so/</link><pubDate>Tue, 26 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/if-you-write-your-code-so/</guid><description>&lt;p&gt;&lt;em&gt;Published: Dec 26, 2017&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Everyone knows that debugging is twice as hard as writing a program in the first place. So if you&amp;rsquo;re as clever as you can be when you write it, how will you ever debug it?&lt;br&gt;
Brian Kernighan from The Elements of Programming Style, 2nd edition, chapter 2&lt;/p&gt;
&lt;p&gt;“Simple doesn’t mean stupid. Thinking that it does, does.” - Paul Krugman&lt;/p&gt;
&lt;p&gt;Have you ever worked with a piece of that that made you think: &amp;ldquo;The person who created software was really smart - like a lot smarter than me&amp;rdquo;?&lt;/p&gt;</description></item><item><title>Are you smart enough to debug your code?</title><link>https://khebbie.dk/posts-pages/if-you-write-your-code-so/</link><pubDate>Tue, 26 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/if-you-write-your-code-so/</guid><description>&lt;h1 id="are-you-smart-enough-to-debug-your-code"&gt;Are you smart enough to debug your code?&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 26, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/if-you-write-your-code-so/"&gt;https://khebbie.dk/if-you-write-your-code-so/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Everyone knows that debugging is twice as hard as writing a program in the first place. So if you&amp;rsquo;re as clever as you can be when you write it, how will you ever debug it?&lt;br&gt;
Brian Kernighan from The Elements of Programming Style, 2nd edition, chapter 2&lt;/p&gt;
&lt;p&gt;“Simple doesn’t mean stupid. Thinking that it does, does.” - Paul Krugman&lt;/p&gt;</description></item><item><title>One of the best programming skills you can have is knowing when to walk away for awhile.</title><link>https://khebbie.dk/posts/one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile/</link><pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1573496359142-b8d87734a5a2?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Person walking away from a desk with a laptop" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 20, 2017&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;One of the best programming skills you can have is knowing when to walk away for awhile.&amp;rdquo;&lt;/em&gt; - Oscar Godson&lt;br&gt;
&lt;em&gt;&amp;ldquo;Sometimes it&amp;rsquo;s better to leave something alone, to pause, and that&amp;rsquo;s very true of programming.&amp;rdquo; - Joyce Wheeler&lt;br&gt;
&amp;ldquo;Best ergonomics advice is &amp;lsquo;stay hydrated&amp;rsquo;&amp;rdquo;&lt;/em&gt; Michael Feathers&lt;/p&gt;
&lt;p&gt;When working in a factory it is pretty easy to see if you are doing work if you are standing by the assembly line and do manual work of some sort - you are probably working.&lt;br&gt;
Many people, even software developers, believe that writing code is what we do.&lt;br&gt;
But I would state that &lt;em&gt;thinking&lt;/em&gt; is what we do.&lt;/p&gt;</description></item><item><title>One of the best programming skills you can have is knowing when to walk away for awhile.</title><link>https://khebbie.dk/posts-pages/one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile/</link><pubDate>Wed, 20 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile/</guid><description>&lt;h1 id="one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile"&gt;One of the best programming skills you can have is knowing when to walk away for awhile.&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 20, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile/"&gt;https://khebbie.dk/one-of-the-best-programming-skills-you-can-have-is-knowing-when-to-walk-away-for-awhile/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;One of the best programming skills you can have is knowing when to walk away for awhile.&amp;rdquo;&lt;/em&gt; - Oscar Godson&lt;br&gt;
&lt;em&gt;&amp;ldquo;Sometimes it&amp;rsquo;s better to leave something alone, to pause, and that&amp;rsquo;s very true of programming.&amp;rdquo; - Joyce Wheeler&lt;br&gt;
&amp;ldquo;Best ergonomics advice is &amp;lsquo;stay hydrated&amp;rsquo;&amp;rdquo;&lt;/em&gt; Michael Feathers&lt;/p&gt;
&lt;p&gt;When working in a factory it is pretty easy to see if you are doing work if you are standing by the assembly line and do manual work of some sort - you are probably working.&lt;br&gt;
Many people, even software developers, believe that writing code is what we do.&lt;br&gt;
But I would state that &lt;em&gt;thinking&lt;/em&gt; is what we do.&lt;/p&gt;</description></item><item><title>Series on wise software catchphrases</title><link>https://khebbie.dk/posts-pages/series-on-wise-software-catchphrases/</link><pubDate>Mon, 18 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/series-on-wise-software-catchphrases/</guid><description>&lt;h1 id="series-on-wise-software-catchphrases"&gt;Series on wise software catchphrases&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 18, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/series-on-wise-software-catchphrases/"&gt;https://khebbie.dk/series-on-wise-software-catchphrases/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I follow Code Wisdom on twitter:&lt;br&gt;
&lt;a href="https://twitter.com/CodeWisdom"&gt;https://twitter.com/CodeWisdom&lt;/a&gt;&lt;br&gt;
What the account basically does is tweet quotations by famous and not so famous software developers. The quotes are wisdom gathered through many years of working with software development.&lt;/p&gt;
&lt;p&gt;In my day to day job, I work with quite a few junior developers.&lt;br&gt;
As a senior developer, it is my job to teach them the ways of software development; one of the things that I find most important for is to pass on some of the stuff I have learned.&lt;/p&gt;</description></item><item><title>Series on wise software catchphrases</title><link>https://khebbie.dk/posts/series-on-wise-software-catchphrases/</link><pubDate>Mon, 18 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/series-on-wise-software-catchphrases/</guid><description>&lt;img src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Developer pondering complex code with thought bubbles" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 18, 2017&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I follow Code Wisdom on twitter:&lt;br&gt;
&lt;a href="https://twitter.com/CodeWisdom"&gt;https://twitter.com/CodeWisdom&lt;/a&gt;&lt;br&gt;
What the account basically does is tweet quotations by famous and not so famous software developers. The quotes are wisdom gathered through many years of working with software development.&lt;/p&gt;
&lt;p&gt;In my day to day job, I work with quite a few junior developers.&lt;br&gt;
As a senior developer, it is my job to teach them the ways of software development; one of the things that I find most important for is to pass on some of the stuff I have learned.&lt;/p&gt;</description></item><item><title>We value code that is easy to maintain over code that is easy to write</title><link>https://khebbie.dk/posts-pages/we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write/</link><pubDate>Mon, 18 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write/</guid><description>&lt;h1 id="we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write"&gt;We value code that is easy to maintain over code that is easy to write&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 18, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write/"&gt;https://khebbie.dk/we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;We value code that is easy to maintain over code that is easy to write&amp;rdquo;&lt;/em&gt; from Growing object-oriented software guided by tests.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Quick becomes quicksand&amp;rdquo;&lt;/em&gt; Uncle Bob.&lt;br&gt;
This is the first post in the &lt;a href="https://khebbie.dk/series-on-wise-software-catchphrases/"&gt;Series on wise software catchphrases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is probably one of the most overarching catchphrases in this series, I have often mentioned it to a junior developer while working on a task.&lt;/p&gt;</description></item><item><title>We value code that is easy to maintain over code that is easy to write</title><link>https://khebbie.dk/posts/we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write/</link><pubDate>Mon, 18 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/we-value-code-that-is-easy-to-maintain-over-code-that-is-easy-to-write/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1518709268805-4e9042af2176?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Open book with software wisdom quotes" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 18, 2017&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;We value code that is easy to maintain over code that is easy to write&amp;rdquo;&lt;/em&gt; from Growing object-oriented software guided by tests.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Quick becomes quicksand&amp;rdquo;&lt;/em&gt; Uncle Bob.&lt;br&gt;
This is the first post in the &lt;a href="https://khebbie.dk/series-on-wise-software-catchphrases/"&gt;Series on wise software catchphrases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is probably one of the most overarching catchphrases in this series, I have often mentioned it to a junior developer while working on a task.&lt;/p&gt;</description></item><item><title>Serverless Monitoring heat remotely</title><link>https://khebbie.dk/posts/monitoring-heat-remotely/</link><pubDate>Sun, 17 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/monitoring-heat-remotely/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1547658719-da2b51169166?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Cloud serverless architecture with monitoring dashboards" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 17, 2017&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I attend a small church and I am responsible for the heating system.&lt;br&gt;
That should be a simple task, but sometimes people fiddle with the heating system and sometimes the furnace simply stops.&lt;/p&gt;
&lt;p&gt;And even though I live pretty close to the church I don&amp;rsquo;t want to go there all the time to check the heat.&lt;/p&gt;
&lt;p&gt;So I decided to setup remote heat monitoring in our church.&lt;/p&gt;</description></item><item><title>Serverless Monitoring heat remotely</title><link>https://khebbie.dk/posts-pages/monitoring-heat-remotely/</link><pubDate>Sun, 17 Dec 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/monitoring-heat-remotely/</guid><description>&lt;h1 id="serverless-monitoring-heat-remotely"&gt;Serverless Monitoring heat remotely&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Dec 17, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/monitoring-heat-remotely/"&gt;https://khebbie.dk/monitoring-heat-remotely/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I attend a small church and I am responsible for the heating system.&lt;br&gt;
That should be a simple task, but sometimes people fiddle with the heating system and sometimes the furnace simply stops.&lt;/p&gt;
&lt;p&gt;And even though I live pretty close to the church I don&amp;rsquo;t want to go there all the time to check the heat.&lt;/p&gt;
&lt;p&gt;So I decided to setup remote heat monitoring in our church.&lt;/p&gt;</description></item><item><title>TILs (Today I Learneds)</title><link>https://khebbie.dk/posts-pages/tils-today-i-learneds/</link><pubDate>Tue, 06 Sep 2016 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/tils-today-i-learneds/</guid><description>&lt;h1 id="tils-today-i-learneds"&gt;TILs (Today I Learneds)&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2016&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/tils-today-i-learneds/"&gt;https://khebbie.dk/tils-today-i-learneds/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I have started a &lt;a href="https://khebbie.github.io/"&gt;TIL&lt;/a&gt;.&lt;br&gt;
To be quite honest, I don&amp;rsquo;t post a lot on this blog, but on my TIL, I do post a lot more often.&lt;/p&gt;</description></item><item><title>TILs (Today I Learneds)</title><link>https://khebbie.dk/posts/tils-today-i-learneds/</link><pubDate>Tue, 06 Sep 2016 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/tils-today-i-learneds/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1516321497487-e288fb19713f?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Lightbulb over a notebook with learning notes" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2016&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I have started a &lt;a href="https://khebbie.github.io/"&gt;TIL&lt;/a&gt;.&lt;br&gt;
To be quite honest, I don&amp;rsquo;t post a lot on this blog, but on my TIL, I do post a lot more often.&lt;/p&gt;</description></item><item><title>Values in software development</title><link>https://khebbie.dk/posts-pages/values-in-software-development/</link><pubDate>Tue, 06 Sep 2016 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/values-in-software-development/</guid><description>&lt;h1 id="values-in-software-development"&gt;Values in software development&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2016&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/values-in-software-development/"&gt;https://khebbie.dk/values-in-software-development/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;During my job as a software developer I have stumbled upon some values that makes a lot of sense to me:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We value code that is easy to maintain over code that is easy to write&lt;/strong&gt;&lt;br&gt;
I am not sure if this is the origin of this value, but I first heard of this value in the book &lt;a href="http://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627/ref=sr_1_1?ie=UTF8&amp;amp;qid=1442818353&amp;amp;sr=8-1&amp;amp;keywords=growing+object-oriented+software+guided+by+tests"&gt;Growing Object Oriented Software, Guided by tests&lt;/a&gt;.&lt;br&gt;
This should be the overarching value of 99% of all software developers.&lt;br&gt;
You will have to go over your code again and again, and so will your co-workers or someone coming after you.&lt;br&gt;
So the few minutes or hours you save now is just like wetting your pants, you will feel the warm now, but it gets a lot colder in time ;-)&lt;/p&gt;</description></item><item><title>Values in software development</title><link>https://khebbie.dk/posts/values-in-software-development/</link><pubDate>Tue, 06 Sep 2016 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/values-in-software-development/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1563986768609-322da13575f3?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Team of developers collaborating on shared values" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2016&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;During my job as a software developer I have stumbled upon some values that makes a lot of sense to me:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We value code that is easy to maintain over code that is easy to write&lt;/strong&gt;&lt;br&gt;
I am not sure if this is the origin of this value, but I first heard of this value in the book &lt;a href="http://www.amazon.co.uk/Growing-Object-Oriented-Software-Guided-Signature/dp/0321503627/ref=sr_1_1?ie=UTF8&amp;amp;qid=1442818353&amp;amp;sr=8-1&amp;amp;keywords=growing+object-oriented+software+guided+by+tests"&gt;Growing Object Oriented Software, Guided by tests&lt;/a&gt;.&lt;br&gt;
This should be the overarching value of 99% of all software developers.&lt;br&gt;
You will have to go over your code again and again, and so will your co-workers or someone coming after you.&lt;br&gt;
So the few minutes or hours you save now is just like wetting your pants, you will feel the warm now, but it gets a lot colder in time ;-)&lt;/p&gt;</description></item><item><title>Vlog: what is an API (for non-tech people)</title><link>https://khebbie.dk/posts-pages/vlog-what-is-an-api-for-non-tech-people/</link><pubDate>Wed, 16 Sep 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/vlog-what-is-an-api-for-non-tech-people/</guid><description>&lt;h1 id="vlog-what-is-an-api-for-non-tech-people"&gt;Vlog: what is an API (for non-tech people)&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 16, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/vlog-what-is-an-api-for-non-tech-people/"&gt;https://khebbie.dk/vlog-what-is-an-api-for-non-tech-people/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I decided to try something new:&lt;br&gt;
I made a video explaining what an API is!&lt;/p&gt;
&lt;p&gt;Of course if you are a software developer you probably already know, so move on then, or wait just a second - you could show this video to a business person you know :-)&lt;/p&gt;
&lt;p&gt;So if you are, say maybe a business person, you have maybe heard developers talk about the API, and maybe you thought: &amp;ldquo;What the heck is an API?&amp;rdquo;.&lt;br&gt;
Well that is what I am going to explain to you in this video:&lt;/p&gt;</description></item><item><title>Vlog: what is an API (for non-tech people)</title><link>https://khebbie.dk/posts/vlog-what-is-an-api-for-non-tech-people/</link><pubDate>Wed, 16 Sep 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/vlog-what-is-an-api-for-non-tech-people/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1555066931-4365d14bab8c?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="API connection diagram showing endpoints" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 16, 2015&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I decided to try something new:&lt;br&gt;
I made a video explaining what an API is!&lt;/p&gt;
&lt;p&gt;Of course if you are a software developer you probably already know, so move on then, or wait just a second - you could show this video to a business person you know :-)&lt;/p&gt;
&lt;p&gt;So if you are, say maybe a business person, you have maybe heard developers talk about the API, and maybe you thought: &amp;ldquo;What the heck is an API?&amp;rdquo;.&lt;br&gt;
Well that is what I am going to explain to you in this video:&lt;/p&gt;</description></item><item><title>Mix tasks in Phoenix using Ecto</title><link>https://khebbie.dk/posts/mix-tasks-in-phoenix/</link><pubDate>Sun, 16 Aug 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/mix-tasks-in-phoenix/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1587620962725-abab7fe55159?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Phoenix framework code with database symbols" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Aug 16, 2015&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Working with &lt;a href="https://github.com/phoenixframework/phoenix"&gt;Phoenix&lt;/a&gt; version 0.16 I needed to import some records from a csv file.&lt;br&gt;
My first problem was where to place the tasks, after some research I found that you place them under lib/tasks and name them some_name.ex (not exs)&lt;/p&gt;
&lt;p&gt;The code for the task should look something like:&lt;/p&gt;
&lt;p&gt;You can now run the task with the command&lt;br&gt;
&lt;code&gt;mix task_name&lt;/code&gt;&lt;br&gt;
That was the first problem.&lt;/p&gt;</description></item><item><title>Mix tasks in Phoenix using Ecto</title><link>https://khebbie.dk/posts-pages/mix-tasks-in-phoenix/</link><pubDate>Sun, 16 Aug 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/mix-tasks-in-phoenix/</guid><description>&lt;h1 id="mix-tasks-in-phoenix-using-ecto"&gt;Mix tasks in Phoenix using Ecto&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Aug 16, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/mix-tasks-in-phoenix/"&gt;https://khebbie.dk/mix-tasks-in-phoenix/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Working with &lt;a href="https://github.com/phoenixframework/phoenix"&gt;Phoenix&lt;/a&gt; version 0.16 I needed to import some records from a csv file.&lt;br&gt;
My first problem was where to place the tasks, after some research I found that you place them under lib/tasks and name them some_name.ex (not exs)&lt;/p&gt;
&lt;p&gt;The code for the task should look something like:&lt;/p&gt;
&lt;p&gt;You can now run the task with the command&lt;br&gt;
&lt;code&gt;mix task_name&lt;/code&gt;&lt;br&gt;
That was the first problem.&lt;/p&gt;</description></item><item><title>Setup resque mailer on Ubuntu 14.04</title><link>https://khebbie.dk/posts-pages/setup-resque-mailer-on-ubuntu-14-04/</link><pubDate>Sat, 07 Feb 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/setup-resque-mailer-on-ubuntu-14-04/</guid><description>&lt;h1 id="setup-resque-mailer-on-ubuntu-1404"&gt;Setup resque mailer on Ubuntu 14.04&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 7, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/setup-resque-mailer-on-ubuntu-14-04/"&gt;https://khebbie.dk/setup-resque-mailer-on-ubuntu-14-04/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://khebbie.dk/content/images/2015/02/60862471_aa65816154_z.jpg"&gt;&lt;br&gt;
I recently moved a site from EngineYard to Digital Ocean.&lt;br&gt;
The site used &lt;a href="https://github.com/zapnap/resque_mailer"&gt;resque mailer&lt;/a&gt; to send emails.&lt;br&gt;
So I had to set up resque to handle the queue.&lt;br&gt;
I decided to start it with upstart and added the following script to /etc/init/resque.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;description &amp;quot;Resque worker configuration&amp;quot;
start on runlevel [2345]
stop on shutdown
respawn
respawn limit 5 20
script
echo resque Job ran at `date` &amp;gt;&amp;gt; /var/log/resquejob.log
cd /path/to/rails_app &amp;amp;&amp;amp; bundle exec rake resque:work QUEUE='*' RAILS_ENV=production
end script
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I can now control the script with&lt;/p&gt;</description></item><item><title>Setup resque mailer on Ubuntu 14.04</title><link>https://khebbie.dk/posts/setup-resque-mailer-on-ubuntu-14-04/</link><pubDate>Sat, 07 Feb 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/setup-resque-mailer-on-ubuntu-14-04/</guid><description>&lt;p&gt;&lt;em&gt;Published: Feb 7, 2015&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1586953208448-b95a79798f07?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Ubuntu terminal interface showing server and email configuration commands" width="1600" height="1067" loading="lazy"&gt;
I recently moved a site from EngineYard to Digital Ocean.
The site used [resque mailer](https://github.com/zapnap/resque_mailer) to send emails.
So I had to set up resque to handle the queue.
I decided to start it with upstart and added the following script to /etc/init/resque.conf
&lt;pre&gt;&lt;code&gt;description &amp;quot;Resque worker configuration&amp;quot;
start on runlevel [2345]
stop on shutdown
respawn
respawn limit 5 20
script
echo resque Job ran at `date` &amp;gt;&amp;gt; /var/log/resquejob.log
cd /path/to/rails_app &amp;amp;&amp;amp; bundle exec rake resque:work QUEUE='*' RAILS_ENV=production
end script
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I can now control the script with&lt;/p&gt;</description></item><item><title>So you think the internet is a dark and hostile place...</title><link>https://khebbie.dk/posts-pages/so-you-think-the-internet-is-a-dark-and-hostile-place/</link><pubDate>Mon, 19 Jan 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/so-you-think-the-internet-is-a-dark-and-hostile-place/</guid><description>&lt;h1 id="so-you-think-the-internet-is-a-dark-and-hostile-place"&gt;So you think the internet is a dark and hostile place&amp;hellip;&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Jan 19, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/so-you-think-the-internet-is-a-dark-and-hostile-place/"&gt;https://khebbie.dk/so-you-think-the-internet-is-a-dark-and-hostile-place/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Well think again!&lt;br&gt;
Last night we had a big breakdown on &lt;a href="bemyeyes.org"&gt;bemyeyes.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some famous actor mentioned us on facebook - which is by the way great, and well the database could not handle it.&lt;br&gt;
Within 6 minutes the database went from responding within about 3-600 ms to 6-8000 ms.&lt;br&gt;
I dived into the problem and it made no sense to me since I didn&amp;rsquo;t deploy anything new. But it was clear that the database was being slow.&lt;br&gt;
I used google and could find no sense of it all.&lt;br&gt;
I thought with the publicity Be My Eyes has had in the last days, and it being a non-profit org that maybe someone would help out on the internets :-)&lt;/p&gt;</description></item><item><title>So you think the internet is a dark and hostile place...</title><link>https://khebbie.dk/posts/so-you-think-the-internet-is-a-dark-and-hostile-place/</link><pubDate>Mon, 19 Jan 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/so-you-think-the-internet-is-a-dark-and-hostile-place/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1559827260-dc66d52bef19?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Padlock on a circuit board representing security" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Jan 19, 2015&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Well think again!&lt;br&gt;
Last night we had a big breakdown on &lt;a href="bemyeyes.org"&gt;bemyeyes.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some famous actor mentioned us on facebook - which is by the way great, and well the database could not handle it.&lt;br&gt;
Within 6 minutes the database went from responding within about 3-600 ms to 6-8000 ms.&lt;br&gt;
I dived into the problem and it made no sense to me since I didn&amp;rsquo;t deploy anything new. But it was clear that the database was being slow.&lt;br&gt;
I used google and could find no sense of it all.&lt;br&gt;
I thought with the publicity Be My Eyes has had in the last days, and it being a non-profit org that maybe someone would help out on the internets :-)&lt;/p&gt;</description></item><item><title>Working from home</title><link>https://khebbie.dk/posts-pages/working-from-home/</link><pubDate>Fri, 16 Jan 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/working-from-home/</guid><description>&lt;h1 id="working-from-home"&gt;Working from home&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Jan 16, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/working-from-home/"&gt;https://khebbie.dk/working-from-home/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So yesterday we did the big launch of &lt;a href="http://www.bemyeyes.org/"&gt;Be My Eyes&lt;/a&gt;, and what a splash we made!&lt;/p&gt;
&lt;p&gt;I am so proud of having been part of this.&lt;/p&gt;
&lt;p&gt;I work from home, which basically means that I have set up an office in the bedroom.&lt;br&gt;
Working from home is amazing: If you have to pick up the kids or run an errand you just do it, and catch up on the hours later.&lt;/p&gt;</description></item><item><title>Working from home</title><link>https://khebbie.dk/posts/working-from-home/</link><pubDate>Fri, 16 Jan 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/working-from-home/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1629654297299-c8506221ca97?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Home office setup with laptop and plants" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Jan 16, 2015&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So yesterday we did the big launch of &lt;a href="http://www.bemyeyes.org/"&gt;Be My Eyes&lt;/a&gt;, and what a splash we made!&lt;/p&gt;
&lt;p&gt;I am so proud of having been part of this.&lt;/p&gt;
&lt;p&gt;I work from home, which basically means that I have set up an office in the bedroom.&lt;br&gt;
Working from home is amazing: If you have to pick up the kids or run an errand you just do it, and catch up on the hours later.&lt;/p&gt;</description></item><item><title>Unix commandline</title><link>https://khebbie.dk/posts/unix-commandline/</link><pubDate>Wed, 29 Oct 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/unix-commandline/</guid><description>&lt;p&gt;&lt;em&gt;Published: Oct 29, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Developer at terminal with command-line code" loading="lazy" src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=800"&gt;&lt;br&gt;
Just a few scripts useful for changing many files at once.&lt;/p&gt;
&lt;p&gt;To replace all double quoted strings with single quoted strings in ruby to make rubocop happy:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find . -type f -iname '*.rb' -exec sed -i.bak &amp;quot;s/\&amp;quot;/'/&amp;quot; &amp;quot;{}&amp;quot; +;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now find all the places where you do string interpolation and make them back to double quoted strings.&lt;/p&gt;
&lt;p&gt;Then to remove all .bak files when you are sure you got it right&amp;quot;&lt;/p&gt;</description></item><item><title>Unix commandline</title><link>https://khebbie.dk/posts/unix-commandline/</link><pubDate>Wed, 29 Oct 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/unix-commandline/</guid><description>&lt;p&gt;&lt;em&gt;Published: Oct 29, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?w=800" alt="Developer at terminal with command-line code" width="1600" height="1067" loading="lazy"&gt;
Just a few scripts useful for changing many files at once.
&lt;p&gt;To replace all double quoted strings with single quoted strings in ruby to make rubocop happy:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find . -type f -iname '*.rb' -exec sed -i.bak &amp;quot;s/\&amp;quot;/'/&amp;quot; &amp;quot;{}&amp;quot; +;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now find all the places where you do string interpolation and make them back to double quoted strings.&lt;/p&gt;
&lt;p&gt;Then to remove all .bak files when you are sure you got it right&amp;quot;&lt;/p&gt;</description></item><item><title>EventBus in a Sinatra app</title><link>https://khebbie.dk/posts/eventbus-in-a-sinatra-app/</link><pubDate>Mon, 27 Oct 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/eventbus-in-a-sinatra-app/</guid><description>&lt;p&gt;&lt;em&gt;Published: Oct 27, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Abstract visualization of message flow between interconnected nodes in a distributed system" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;I had a sinatra app (the Be My Eyes app), that I thought had a bit too much code in the route file.&lt;br&gt;
So I investigated how to make that better.&lt;/p&gt;
&lt;p&gt;What I came up with was that it would be great to have some kind of EventBus, where I could send events out and respond in a very decoupled manner.&lt;br&gt;
It would be nice to be able to run the event handlers asynchronous, but that was not a hard requiriment from the beginning.&lt;br&gt;
I searched on github and came up with &lt;a href="https://github.com/kevinrutherford/event_bus"&gt;event_bus by Kevin Rutherford&lt;/a&gt;.&lt;br&gt;
I asked on the lrug mail-list about peoples experience with event_bus. Not a lot of people had tried it out, be at least one person could recommend Kevins work, so I took the plunge and installed the gem. (Furthermore an I could see that a &amp;ldquo;sister&amp;rdquo; gem exists that will handle events in sidekick, so the asynchronous part got a checkmark as well)&lt;/p&gt;</description></item><item><title>EventBus in a Sinatra app</title><link>https://khebbie.dk/posts/eventbus-in-a-sinatra-app/</link><pubDate>Mon, 27 Oct 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/eventbus-in-a-sinatra-app/</guid><description>&lt;p&gt;&lt;em&gt;Published: Oct 27, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Abstract visualization of message flow between interconnected nodes in a distributed system" loading="lazy" src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;/p&gt;
&lt;p&gt;I had a sinatra app (the Be My Eyes app), that I thought had a bit too much code in the route file.&lt;br&gt;
So I investigated how to make that better.&lt;/p&gt;
&lt;p&gt;What I came up with was that it would be great to have some kind of EventBus, where I could send events out and respond in a very decoupled manner.&lt;br&gt;
It would be nice to be able to run the event handlers asynchronous, but that was not a hard requiriment from the beginning.&lt;br&gt;
I searched on github and came up with &lt;a href="https://github.com/kevinrutherford/event_bus"&gt;event_bus by Kevin Rutherford&lt;/a&gt;.&lt;br&gt;
I asked on the lrug mail-list about peoples experience with event_bus. Not a lot of people had tried it out, be at least one person could recommend Kevins work, so I took the plunge and installed the gem. (Furthermore an I could see that a &amp;ldquo;sister&amp;rdquo; gem exists that will handle events in sidekick, so the asynchronous part got a checkmark as well)&lt;/p&gt;</description></item><item><title>Frontend developers and their tools</title><link>https://khebbie.dk/posts/frontend-developers-and-their-tools/</link><pubDate>Mon, 23 Jun 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/frontend-developers-and-their-tools/</guid><description>&lt;p&gt;&lt;em&gt;Published: Jun 23, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Developer at desk with multiple monitors showing code and web development tools" width="1600" height="1067" loading="lazy"&gt;
I read some frontend developer magazines like
[net magazine](http://www.creativebloq.com/net-magazine) and [Web Designer Magazine](http://www.webdesignermag.co.uk/).
Now I really like both of them, and so I thought about how great it would be to have something like that for backend developers (or maybe full stack developers).
And I thought about why it is that no such magazine exist.
Then it struck me how seperated the backend developers are vs the frontend developers.
I have seen many frontend developers who jumped from python to .net to ruby or whatever.
On the other hand I don't see many backend developers jump around like that.
A backend developer would be considered as a ".Net developer" or a "Ruby on Rails developer".
&lt;p&gt;So one could not make a magazine with Ruby, Python, .Net, Objectiv-c etc. and sell it. Cause each type of developer would look for something in their own space.&lt;/p&gt;</description></item><item><title>Frontend developers and their tools</title><link>https://khebbie.dk/posts/frontend-developers-and-their-tools/</link><pubDate>Mon, 23 Jun 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/frontend-developers-and-their-tools/</guid><description>&lt;p&gt;&lt;em&gt;Published: Jun 23, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Developer at desk with multiple monitors showing code and web development tools" loading="lazy" src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
I read some frontend developer magazines like&lt;br&gt;
&lt;a href="http://www.creativebloq.com/net-magazine"&gt;net magazine&lt;/a&gt; and &lt;a href="http://www.webdesignermag.co.uk/"&gt;Web Designer Magazine&lt;/a&gt;.&lt;br&gt;
Now I really like both of them, and so I thought about how great it would be to have something like that for backend developers (or maybe full stack developers).&lt;br&gt;
And I thought about why it is that no such magazine exist.&lt;br&gt;
Then it struck me how seperated the backend developers are vs the frontend developers.&lt;br&gt;
I have seen many frontend developers who jumped from python to .net to ruby or whatever.&lt;br&gt;
On the other hand I don&amp;rsquo;t see many backend developers jump around like that.&lt;br&gt;
A backend developer would be considered as a &amp;ldquo;.Net developer&amp;rdquo; or a &amp;ldquo;Ruby on Rails developer&amp;rdquo;.&lt;/p&gt;</description></item><item><title>Git bisect</title><link>https://khebbie.dk/posts/git-bisect/</link><pubDate>Sat, 31 May 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/git-bisect/</guid><description>&lt;p&gt;&lt;em&gt;Published: May 31, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Code on computer screen representing debugging and binary search process" width="1600" height="1067" loading="lazy"&gt;
&lt;h2 id="oh-how-i-love-git-bisect"&gt;Oh how I love git bisect&lt;/h2&gt;
&lt;p&gt;In the last couple of weeks I had some bugs that were introduced at a unknown commit. Actually I couldn&amp;rsquo;t even find out what code was working wrong.&lt;br&gt;
I did however know excactly what was wrong in the UI.&lt;br&gt;
For problems like this git bisect is perfect.&lt;/p&gt;
&lt;p&gt;What git bisect does is it helps you do a binary search in the commits and find the buggy commit.&lt;/p&gt;</description></item><item><title>Git bisect</title><link>https://khebbie.dk/posts/git-bisect/</link><pubDate>Sat, 31 May 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/git-bisect/</guid><description>&lt;p&gt;&lt;em&gt;Published: May 31, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Code on computer screen representing debugging and binary search process" loading="lazy" src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;/p&gt;
&lt;h2 id="oh-how-i-love-git-bisect"&gt;Oh how I love git bisect&lt;/h2&gt;
&lt;p&gt;In the last couple of weeks I had some bugs that were introduced at a unknown commit. Actually I couldn&amp;rsquo;t even find out what code was working wrong.&lt;br&gt;
I did however know excactly what was wrong in the UI.&lt;br&gt;
For problems like this git bisect is perfect.&lt;/p&gt;
&lt;p&gt;What git bisect does is it helps you do a binary search in the commits and find the buggy commit.&lt;/p&gt;</description></item><item><title>My Mac Setup</title><link>https://khebbie.dk/posts/my-mac-setup/</link><pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/my-mac-setup/</guid><description>&lt;p&gt;&lt;em&gt;Published: May 19, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1587829741301-dc798b83add3?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Clean MacBook Pro workspace with minimal desk setup for software development" width="1600" height="1067" loading="lazy"&gt;
This is just a run through of my Mac setup - I do this mostly for myself, so I can find it whenever I need to setup a Mac, but you are welcome to take a peek :-)
&lt;p&gt;First of all Caps Lock (I never hit Caps Lock except by mistake): &lt;a href="https://pqrs.org/macosx/keyremap4macbook/pckeyboardhack.html"&gt;PC Keyboard Hack&lt;/a&gt; is an excellent tool for mapping your Caps Lock key. Funny enough in the settings of OS X, you cannot map Caps Lock to Esc, so you need an external tool for this.&lt;/p&gt;</description></item><item><title>My Mac Setup</title><link>https://khebbie.dk/posts/my-mac-setup/</link><pubDate>Mon, 19 May 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/my-mac-setup/</guid><description>&lt;p&gt;&lt;em&gt;Published: May 19, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Clean MacBook Pro workspace with minimal desk setup for software development" loading="lazy" src="https://images.unsplash.com/photo-1587829741301-dc798b83add3?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
This is just a run through of my Mac setup - I do this mostly for myself, so I can find it whenever I need to setup a Mac, but you are welcome to take a peek :)-&lt;/p&gt;
&lt;p&gt;First of all Caps Lock (I never hit Caps Lock except by mistake): &lt;a href="https://pqrs.org/macosx/keyremap4macbook/pckeyboardhack.html"&gt;PC Keyboard Hack&lt;/a&gt; is an excellent tool for mapping your Caps Lock key. Funny enough in the settings of OS X, you cannot map Caps Lock to Esc, so you need an external tool for this.&lt;/p&gt;</description></item><item><title>Start umbraco with mvc four</title><link>https://khebbie.dk/posts/start-umbraco-with-mvc-four/</link><pubDate>Wed, 12 Feb 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/start-umbraco-with-mvc-four/</guid><description>&lt;p&gt;&lt;em&gt;Published: Feb 12, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Code editor showing MVC framework structure for web application development" loading="lazy" src="https://images.unsplash.com/photo-1551650975-87deedd944c3?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
I found &lt;a href="http://www.ben-morris.com/using-umbraco-6-to-create-an-asp-net-mvc-4-web-applicatio"&gt;an article by Ben Morris&lt;/a&gt; and it was very useful, however it seems to be gone now, so to remember it, I keep it here:&lt;/p&gt;
&lt;p&gt;The below text is from &lt;a href="http://stackoverflow.com/questions/17521154/how-to-setup-umbraco-6-1-2-in-visual-studio-2012-with-mvc-enabled-to-use-in-tfs/17521155#17521155"&gt;this stackoverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This setup worked really well for me (Umbraco version 6.1.6)&lt;/p&gt;
&lt;p&gt;Firstly, start an empty MVC 4 project in Visual Studio – make sure it is an empty project as you will not need any of the baggage that comes with other project templates.&lt;br&gt;
Add the NuGet Umbraco Cms Core Binaries package which will manage the various dependencies and references that Umbraco 6 requires for you.&lt;br&gt;
Copy all the files from the Umbraco installation ZIP archive directly into your project in Visual Studio except the App_Code and Bin folders – you won’t need the binaries as they are managed by NuGet and the App_Code folder is not used in a web application project.&lt;br&gt;
If you want Umbraco to play nice to MVC and be able to use Razor views, you should change the default rendering engine to MVC in Config\UmbracoSettings.config like so:&lt;/p&gt;</description></item><item><title>Start umbraco with mvc four</title><link>https://khebbie.dk/posts/start-umbraco-with-mvc-four/</link><pubDate>Wed, 12 Feb 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/start-umbraco-with-mvc-four/</guid><description>&lt;p&gt;&lt;em&gt;Published: Feb 12, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1551650975-87deedd944c3?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Code editor showing MVC framework structure for web application development" width="1600" height="1067" loading="lazy"&gt;
I found [an article by Ben Morris](http://www.ben-morris.com/using-umbraco-6-to-create-an-asp-net-mvc-4-web-applicatio) and it was very useful, however it seems to be gone now, so to remember it, I keep it here:
&lt;p&gt;The below text is from &lt;a href="http://stackoverflow.com/questions/17521154/how-to-setup-umbraco-6-1-2-in-visual-studio-2012-with-mvc-enabled-to-use-in-tfs/17521155#17521155"&gt;this stackoverflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This setup worked really well for me (Umbraco version 6.1.6)&lt;/p&gt;
&lt;p&gt;Firstly, start an empty MVC 4 project in Visual Studio – make sure it is an empty project as you will not need any of the baggage that comes with other project templates.&lt;br&gt;
Add the NuGet Umbraco Cms Core Binaries package which will manage the various dependencies and references that Umbraco 6 requires for you.&lt;br&gt;
Copy all the files from the Umbraco installation ZIP archive directly into your project in Visual Studio except the App_Code and Bin folders – you won’t need the binaries as they are managed by NuGet and the App_Code folder is not used in a web application project.&lt;br&gt;
If you want Umbraco to play nice to MVC and be able to use Razor views, you should change the default rendering engine to MVC in Config\UmbracoSettings.config like so:&lt;/p&gt;</description></item><item><title>Hvorfor jeg koder</title><link>https://khebbie.dk/posts/hvorfor-jeg-koder/</link><pubDate>Mon, 27 Jan 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/hvorfor-jeg-koder/</guid><description>&lt;p&gt;&lt;em&gt;Published: Jan 27, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1&gt;&lt;img src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Hands typing on a laptop keyboard, representing the passion and joy of coding" width="1600" height="1067" loading="lazy"&gt;&lt;/h1&gt;
&lt;p&gt;Hvorfor er det fedt at kode?&lt;/p&gt;
&lt;p&gt;Bemærk: En redigeret version ligger op &lt;a href="http://www.klean.dk/weblog/hvorfor-er-det-fedt-at-kode--2"&gt;klean.dk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Det er godt engang i mellem og tænke over det man gør og hvorfor man gør det.&lt;br&gt;
Derfor vil jeg hér reflekterer lidt over hvad jeg laver og hvorfor mit arbejde er det bedste i verden.&lt;br&gt;
Jeg har flere gange overvejet om jeg skulle skifte branche, men er hver gang nået frem til at svaret er &amp;ldquo;Nej!&amp;rdquo;&lt;/p&gt;</description></item><item><title>Hvorfor jeg koder</title><link>https://khebbie.dk/posts/hvorfor-jeg-koder/</link><pubDate>Mon, 27 Jan 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/hvorfor-jeg-koder/</guid><description>&lt;p&gt;&lt;em&gt;Published: Jan 27, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="hands-typing-on-a-laptop-keyboard-representing-the-passion-and-joy-of-coding"&gt;&lt;img alt="Hands typing on a laptop keyboard, representing the passion and joy of coding" loading="lazy" src="https://images.unsplash.com/photo-1522202176988-66273c2fd55f?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;/h1&gt;
&lt;p&gt;Hvorfor er det fedt at kode?&lt;/p&gt;
&lt;p&gt;Bemærk: En redigeret version ligger op &lt;a href="http://www.klean.dk/weblog/hvorfor-er-det-fedt-at-kode--2"&gt;klean.dk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Det er godt engang i mellem og tænke over det man gør og hvorfor man gør det.&lt;br&gt;
Derfor vil jeg hér reflekterer lidt over hvad jeg laver og hvorfor mit arbejde er det bedste i verden.&lt;br&gt;
Jeg har flere gange overvejet om jeg skulle skifte branche, men er hver gang nået frem til at svaret er &amp;ldquo;Nej!&amp;rdquo;&lt;/p&gt;</description></item><item><title>Euler in f#</title><link>https://khebbie.dk/posts/euler-in-f/</link><pubDate>Sun, 12 May 2013 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/euler-in-f/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1551434678-e076c223a692?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Mathematical formulas and code on a chalkboard" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: May 12, 2013&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Here is my solution to Euler problem 2 in F#&lt;br&gt;
I took the memoization code from &lt;a href="http://en.wikibooks.org/wiki/F_Sharp_Programming/Caching"&gt;Wiki Books&lt;/a&gt;&lt;br&gt;
Yeah I know I should use infinite lists - but have not come around to it yet&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let memoize f =
let dict = new System.Collections.Generic.Dictionary&amp;lt;_,_&amp;gt;()
fun n -&amp;gt;
match dict.TryGetValue(n) with
| (true, v) -&amp;gt; v
| _ -&amp;gt;
let temp = f(n)
dict.Add(n, temp)
temp
let rec fib = memoize(fun n -&amp;gt;
match n with
| 1 | 2 -&amp;gt; 1
| _ -&amp;gt; fib (n-2) + fib(n-1))
let evenNumbers x = x % 2 = 0
let belowBelow4millions x = x &amp;lt; 4000000
[1..50] |&amp;gt; List.map fib |&amp;gt; List.filter belowBelow4millions |&amp;gt; List.filter evenNumbers |&amp;gt; List.sum |&amp;gt; Dump
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Euler in f#</title><link>https://khebbie.dk/posts-pages/euler-in-f/</link><pubDate>Sun, 12 May 2013 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/euler-in-f/</guid><description>&lt;h1 id="euler-in-f"&gt;Euler in f#&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: May 12, 2013&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/euler-in-f/"&gt;https://khebbie.dk/euler-in-f/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Here is my solution to Euler problem 2 in F#&lt;br&gt;
I took the memoization code from &lt;a href="http://en.wikibooks.org/wiki/F_Sharp_Programming/Caching"&gt;Wiki Books&lt;/a&gt;&lt;br&gt;
Yeah I know I should use infinite lists - but have not come around to it yet&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;let memoize f =
let dict = new System.Collections.Generic.Dictionary&amp;lt;_,_&amp;gt;()
fun n -&amp;gt;
match dict.TryGetValue(n) with
| (true, v) -&amp;gt; v
| _ -&amp;gt;
let temp = f(n)
dict.Add(n, temp)
temp
let rec fib = memoize(fun n -&amp;gt;
match n with
| 1 | 2 -&amp;gt; 1
| _ -&amp;gt; fib (n-2) + fib(n-1))
let evenNumbers x = x % 2 = 0
let belowBelow4millions x = x &amp;lt; 4000000
[1..50] |&amp;gt; List.map fib |&amp;gt; List.filter belowBelow4millions |&amp;gt; List.filter evenNumbers |&amp;gt; List.sum |&amp;gt; Dump
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Just Did the String Calculator Kata</title><link>https://khebbie.dk/posts/just-did-the-string-calculator-kata/</link><pubDate>Thu, 08 Oct 2009 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/just-did-the-string-calculator-kata/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1559028006-448665bd7c7f?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Calculator and code representing the kata exercise" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Oct 8, 2009&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I just did the [string calculator kata](the string calculator kata ), here is the output, first the test code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; [TestFixture]
public class CalculatorTests
{
readonly Calculator _calc = new Calculator();
[Test]
public void Add_WhenGiven1_ShouldReturn1()
{
int result = _calc.Add(&amp;quot;1&amp;quot;);
Assert.That(result, Is.EqualTo(1));
}
[Test]
public void Add_WhenGiven15_ShouldReturn15()
{
int result = _calc.Add(&amp;quot;15&amp;quot;);
Assert.That(result, Is.EqualTo(15));
}
[Test]
public void Add_WhenGiven1comma5_ShouldReturn6()
{
int result = _calc.Add(&amp;quot;1,5&amp;quot;);
Assert.That(result, Is.EqualTo(6));
}
[Test]
public void Add_WhenGiven115comma23_ShouldReturn138()
{
int result = _calc.Add(&amp;quot;115,23&amp;quot;);
Assert.That(result, Is.EqualTo(138));
}
[Test]
public void Add_WhenGivenAlphaCharacter_ShouldThrowArgumentException()
{
Assert.Throws&amp;amp;lt;ArgumentException&amp;amp;gt;(() =&amp;amp;gt; _calc.Add(&amp;quot;jens&amp;quot;));
}
[Test]
public void Add_WhenGivenAlphaNumericCharacterWithNumericAtTheEnd_ShouldThrowArgumentException()
{
Assert.Throws&amp;amp;lt;ArgumentException&amp;amp;gt;(() =&amp;amp;gt; _calc.Add(&amp;quot;jens1&amp;quot;));
}
[Test]
public void Add_WhenGivenAlphaNumericCharacterWithNumericAtTheBeginning_ShouldThrowArgumentException()
{
Assert.Throws&amp;amp;lt;ArgumentException&amp;amp;gt;(() =&amp;amp;gt; _calc.Add(&amp;quot;1jens&amp;quot;));
}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here is the implementation:&lt;/p&gt;</description></item><item><title>Just Did the String Calculator Kata</title><link>https://khebbie.dk/posts-pages/just-did-the-string-calculator-kata/</link><pubDate>Thu, 08 Oct 2009 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/just-did-the-string-calculator-kata/</guid><description>&lt;h1 id="just-did-the-string-calculator-kata"&gt;Just Did the String Calculator Kata&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Oct 8, 2009&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/just-did-the-string-calculator-kata/"&gt;https://khebbie.dk/just-did-the-string-calculator-kata/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I just did the [string calculator kata](the string calculator kata ), here is the output, first the test code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; [TestFixture]
public class CalculatorTests
{
readonly Calculator _calc = new Calculator();
[Test]
public void Add_WhenGiven1_ShouldReturn1()
{
int result = _calc.Add(&amp;quot;1&amp;quot;);
Assert.That(result, Is.EqualTo(1));
}
[Test]
public void Add_WhenGiven15_ShouldReturn15()
{
int result = _calc.Add(&amp;quot;15&amp;quot;);
Assert.That(result, Is.EqualTo(15));
}
[Test]
public void Add_WhenGiven1comma5_ShouldReturn6()
{
int result = _calc.Add(&amp;quot;1,5&amp;quot;);
Assert.That(result, Is.EqualTo(6));
}
[Test]
public void Add_WhenGiven115comma23_ShouldReturn138()
{
int result = _calc.Add(&amp;quot;115,23&amp;quot;);
Assert.That(result, Is.EqualTo(138));
}
[Test]
public void Add_WhenGivenAlphaCharacter_ShouldThrowArgumentException()
{
Assert.Throws&amp;amp;lt;ArgumentException&amp;amp;gt;(() =&amp;amp;gt; _calc.Add(&amp;quot;jens&amp;quot;));
}
[Test]
public void Add_WhenGivenAlphaNumericCharacterWithNumericAtTheEnd_ShouldThrowArgumentException()
{
Assert.Throws&amp;amp;lt;ArgumentException&amp;amp;gt;(() =&amp;amp;gt; _calc.Add(&amp;quot;jens1&amp;quot;));
}
[Test]
public void Add_WhenGivenAlphaNumericCharacterWithNumericAtTheBeginning_ShouldThrowArgumentException()
{
Assert.Throws&amp;amp;lt;ArgumentException&amp;amp;gt;(() =&amp;amp;gt; _calc.Add(&amp;quot;1jens&amp;quot;));
}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here is the implementation:&lt;/p&gt;</description></item><item><title>[DK]Uncle Bob om software projekter (min formulering)</title><link>https://khebbie.dk/posts/dkuncle-bob-om-software-projekter-min-formulering/</link><pubDate>Wed, 11 Mar 2009 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/dkuncle-bob-om-software-projekter-min-formulering/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1517694712202-14dd9538aa97?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Software architecture whiteboard diagram" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Mar 11, 2009&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Uncle Bob om software projekter:&lt;br&gt;
&amp;ldquo;Tit haster vi igennem for at blive færdige til tiden, og sjusker for at gøre det hurtigere.&lt;/p&gt;
&lt;p&gt;Men når vi sjusker os igennem opdager vi tit, at det sjusk vi lavede for at blive hurtigt færdig,&lt;/p&gt;
&lt;p&gt;er det der forsinker os og gør at vi bliver forsinkede.&amp;rdquo;&lt;/p&gt;</description></item><item><title>[DK]Uncle Bob om software projekter (min formulering)</title><link>https://khebbie.dk/posts-pages/dkuncle-bob-om-software-projekter-min-formulering/</link><pubDate>Wed, 11 Mar 2009 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/dkuncle-bob-om-software-projekter-min-formulering/</guid><description>&lt;h1 id="dkuncle-bob-om-software-projekter-min-formulering"&gt;[DK]Uncle Bob om software projekter (min formulering)&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Mar 11, 2009&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/dkuncle-bob-om-software-projekter-min-formulering/"&gt;https://khebbie.dk/dkuncle-bob-om-software-projekter-min-formulering/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Uncle Bob om software projekter:&lt;br&gt;
&amp;ldquo;Tit haster vi igennem for at blive færdige til tiden, og sjusker for at gøre det hurtigere.&lt;/p&gt;
&lt;p&gt;Men når vi sjusker os igennem opdager vi tit, at det sjusk vi lavede for at blive hurtigt færdig,&lt;/p&gt;
&lt;p&gt;er det der forsinker os og gør at vi bliver forsinkede.&amp;rdquo;&lt;/p&gt;</description></item><item><title>Polyglot Programming</title><link>https://khebbie.dk/posts/polyglot-programming-2/</link><pubDate>Wed, 01 Oct 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/polyglot-programming-2/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1555421689-491a97ff2040?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Multiple programming language logos together" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Oct 1, 2008&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;At &lt;a href="http://www.anug.dk/"&gt;Anug&lt;/a&gt; last time &lt;a href="http://www.anug.dk/post/2008/09/28/Christian-Holm-Nielsen-om-F.aspx"&gt;we heard about F# and functional programming&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the things we discussed was polyglot programming:&lt;/p&gt;
&lt;p&gt;Could one do a website where the UI was in ironRuby or ironPython, the business objects in C# and the harder calculations in F#?&lt;/p&gt;
&lt;p&gt;Actually I brought this up, and nobody seemed to buy it. The reason people used was that you would have to be in a bigger enterprise in order to do this kind of polyglot programming, simply because it will be too hard to deal with all these different languages (Correct me if I got this wrong!).&lt;/p&gt;</description></item><item><title>Polyglot Programming</title><link>https://khebbie.dk/posts-pages/polyglot-programming-2/</link><pubDate>Wed, 01 Oct 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/polyglot-programming-2/</guid><description>&lt;h1 id="polyglot-programming"&gt;Polyglot Programming&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Oct 1, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/polyglot-programming-2/"&gt;https://khebbie.dk/polyglot-programming-2/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;At &lt;a href="http://www.anug.dk/"&gt;Anug&lt;/a&gt; last time &lt;a href="http://www.anug.dk/post/2008/09/28/Christian-Holm-Nielsen-om-F.aspx"&gt;we heard about F# and functional programming&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the things we discussed was polyglot programming:&lt;/p&gt;
&lt;p&gt;Could one do a website where the UI was in ironRuby or ironPython, the business objects in C# and the harder calculations in F#?&lt;/p&gt;
&lt;p&gt;Actually I brought this up, and nobody seemed to buy it. The reason people used was that you would have to be in a bigger enterprise in order to do this kind of polyglot programming, simply because it will be too hard to deal with all these different languages (Correct me if I got this wrong!).&lt;/p&gt;</description></item><item><title>Two Great Links</title><link>https://khebbie.dk/posts-pages/two-great-links/</link><pubDate>Tue, 29 Jul 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/two-great-links/</guid><description>&lt;h1 id="two-great-links"&gt;Two Great Links&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Jul 29, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/two-great-links/"&gt;https://khebbie.dk/two-great-links/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Just a short post to show two great sites/tools/whatever:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test: 12 Steps to Better Code&lt;/a&gt; 12 things that your software organization should be doing in order to perform well…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm"&gt;Programmer Competency Matrix&lt;/a&gt; A matrix where you can evaluate programmer Competency&lt;/p&gt;</description></item><item><title>Two Great Links</title><link>https://khebbie.dk/posts/two-great-links/</link><pubDate>Tue, 29 Jul 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/two-great-links/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1586892477838-2b96e85e0f96?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Chain links connected together" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Jul 29, 2008&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Just a short post to show two great sites/tools/whatever:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel Test: 12 Steps to Better Code&lt;/a&gt; 12 things that your software organization should be doing in order to perform well…&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm"&gt;Programmer Competency Matrix&lt;/a&gt; A matrix where you can evaluate programmer Competency&lt;/p&gt;</description></item><item><title>PowerGUI</title><link>https://khebbie.dk/posts-pages/powergui/</link><pubDate>Tue, 12 Feb 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/powergui/</guid><description>&lt;h1 id="powergui"&gt;PowerGUI&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 12, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/powergui/"&gt;https://khebbie.dk/powergui/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I Just discovered PowerGui an application, where you can host your most used powershell scripts.&lt;/p&gt;
&lt;p&gt;It can off course be used by IT Pros, but developers can leverage on it as well.&lt;/p&gt;
&lt;p&gt;For instance a testing framework has been made.&lt;/p&gt;
&lt;p&gt;I have for instance made two small scripts that searches the Eventlog to find when the computer was started and stopped during the last month. I use this when I have to register how much time was used on a project - well i have to since I am always behind here :-(&lt;/p&gt;</description></item><item><title>PowerGUI</title><link>https://khebbie.dk/posts/powergui/</link><pubDate>Tue, 12 Feb 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/powergui/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1542744173-8e7e53415bb0?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Graphical user interface with power tools" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 12, 2008&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I Just discovered PowerGui an application, where you can host your most used powershell scripts.&lt;/p&gt;
&lt;p&gt;It can off course be used by IT Pros, but developers can leverage on it as well.&lt;/p&gt;
&lt;p&gt;For instance a testing framework has been made.&lt;/p&gt;
&lt;p&gt;I have for instance made two small scripts that searches the Eventlog to find when the computer was started and stopped during the last month. I use this when I have to register how much time was used on a project - well i have to since I am always behind here :-(&lt;/p&gt;</description></item><item><title>[DK]Svcutil</title><link>https://khebbie.dk/posts/dksvcutil/</link><pubDate>Mon, 05 Nov 2007 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/dksvcutil/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1517180102446-f3ece451e9d8?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Command line interface with code generation" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Nov 5, 2007&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Vi bruger SVCUTIL til to ting i øjeblikket:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Til at generere datacontracts udfra vores kanoniske datamodel&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At generere proxies udfra vores datacontract dll&amp;rsquo;er&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;add 1:&lt;/p&gt;
&lt;p&gt;Vi opbevarer vores kanoniske datamodel i xsd og kan generere datacontracts udfra en xsd således:&lt;/p&gt;
&lt;p&gt;svcutil /dconly cdm.xsd&lt;/p&gt;
&lt;p&gt;På den måde stemmer datakontrakterne altid overens med den kanoniske datamodel&lt;/p&gt;
&lt;p&gt;add 2:&lt;/p&gt;
&lt;p&gt;Når man gerne vil have WCF til at generere proxies udfra en service laver den en ny proxy hver gang, men vi vil gerne have den til at genbruge datacontracts, her kan svcutil hjælpe.&lt;/p&gt;</description></item><item><title>[DK]Svcutil</title><link>https://khebbie.dk/posts-pages/dksvcutil/</link><pubDate>Mon, 05 Nov 2007 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/dksvcutil/</guid><description>&lt;h1 id="dksvcutil"&gt;[DK]Svcutil&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Nov 5, 2007&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/dksvcutil/"&gt;https://khebbie.dk/dksvcutil/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Vi bruger SVCUTIL til to ting i øjeblikket:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Til at generere datacontracts udfra vores kanoniske datamodel&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;At generere proxies udfra vores datacontract dll&amp;rsquo;er&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;add 1:&lt;/p&gt;
&lt;p&gt;Vi opbevarer vores kanoniske datamodel i xsd og kan generere datacontracts udfra en xsd således:&lt;/p&gt;
&lt;p&gt;svcutil /dconly cdm.xsd&lt;/p&gt;
&lt;p&gt;På den måde stemmer datakontrakterne altid overens med den kanoniske datamodel&lt;/p&gt;
&lt;p&gt;add 2:&lt;/p&gt;
&lt;p&gt;Når man gerne vil have WCF til at generere proxies udfra en service laver den en ny proxy hver gang, men vi vil gerne have den til at genbruge datacontracts, her kan svcutil hjælpe.&lt;/p&gt;</description></item><item><title>Logparser</title><link>https://khebbie.dk/posts/logparser/</link><pubDate>Wed, 06 Sep 2006 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/logparser/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1556075798-4825dfaaf498?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Server logs and analytics dashboard" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2006&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I just discovered a tool from Microsoft called &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en"&gt;LogParser&lt;/a&gt;, I don&amp;rsquo;t have a lot of experience with it.&lt;/p&gt;
&lt;p&gt;The point with the tool is that you can use sql to query your logs, and you can query different logtypes (Windows EventLog, csv, xml, sql server and more).&lt;/p&gt;
&lt;p&gt;At &lt;a href="http://www.logparser.com"&gt;http://www.logparser.com&lt;/a&gt; you find a forum regarding LogParser.&lt;/p&gt;
&lt;p&gt;Here is a small example of a logparser query:&lt;/p&gt;</description></item><item><title>Logparser</title><link>https://khebbie.dk/posts-pages/logparser/</link><pubDate>Wed, 06 Sep 2006 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/logparser/</guid><description>&lt;h1 id="logparser"&gt;Logparser&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2006&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/logparser/"&gt;https://khebbie.dk/logparser/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I just discovered a tool from Microsoft called &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en"&gt;LogParser&lt;/a&gt;, I don&amp;rsquo;t have a lot of experience with it.&lt;/p&gt;
&lt;p&gt;The point with the tool is that you can use sql to query your logs, and you can query different logtypes (Windows EventLog, csv, xml, sql server and more).&lt;/p&gt;
&lt;p&gt;At &lt;a href="http://www.logparser.com"&gt;http://www.logparser.com&lt;/a&gt; you find a forum regarding LogParser.&lt;/p&gt;
&lt;p&gt;Here is a small example of a logparser query:&lt;/p&gt;
&lt;p&gt;LogParser -i:EVT -o:NAT &amp;ldquo;SELECT * FROM System&amp;rdquo;&lt;/p&gt;</description></item><item><title>[DK]Generisk programmering</title><link>https://khebbie.dk/posts/generisk-programmering/</link><pubDate>Fri, 12 May 2006 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/generisk-programmering/</guid><description>&lt;hr&gt;
&lt;img src="https://images.unsplash.com/photo-1528747045269-359845242512?auto=format&amp;fit=crop&amp;w=1600&amp;q=80" alt="Abstract code patterns and data structures" width="1600" height="1067" loading="lazy"&gt;
&lt;p&gt;&lt;em&gt;Published: May 12, 2006&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Jeg har lavet tre artikler om generisk programmering:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hebsgaard.dk/programmering/genericprog1.html"&gt;http://www.hebsgaard.dk/programmering/genericprog1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hebsgaard.dk/programmering/genericprog2.html"&gt;http://www.hebsgaard.dk/programmering/genericprog2.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hebsgaard.dk/programmering/genericprog3.html"&gt;http://www.hebsgaard.dk/programmering/genericprog3.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>[DK]Generisk programmering</title><link>https://khebbie.dk/posts-pages/generisk-programmering/</link><pubDate>Fri, 12 May 2006 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/generisk-programmering/</guid><description>&lt;h1 id="dkgenerisk-programmering"&gt;[DK]Generisk programmering&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: May 12, 2006&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/generisk-programmering/"&gt;https://khebbie.dk/generisk-programmering/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Jeg har lavet tre artikler om generisk programmering:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hebsgaard.dk/programmering/genericprog1.html"&gt;http://www.hebsgaard.dk/programmering/genericprog1.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hebsgaard.dk/programmering/genericprog2.html"&gt;http://www.hebsgaard.dk/programmering/genericprog2.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hebsgaard.dk/programmering/genericprog3.html"&gt;http://www.hebsgaard.dk/programmering/genericprog3.html&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>