<?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>Posts-Pages on Klaus Hebsgaard</title><link>https://khebbie.dk/posts-pages/</link><description>Recent content in Posts-Pages on Klaus Hebsgaard</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 10 Feb 2021 00:00:00 +0000</lastBuildDate><atom:link href="https://khebbie.dk/posts-pages/index.xml" rel="self" type="application/rss+xml"/><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>How should I do error handling?</title><link>https://khebbie.dk/posts-pages/how-should-i-do-error-handling/</link><pubDate>Sun, 07 Feb 2021 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/how-should-i-do-error-handling/</guid><description>&lt;h1 id="how-should-i-do-error-handling"&gt;How should I do error handling?&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 7, 2021&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/how-should-i-do-error-handling/"&gt;https://khebbie.dk/how-should-i-do-error-handling/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In &lt;a href="https://khebbie.dk/dont-do-generic-error-handling/"&gt;my last post&lt;/a&gt; I told you not to do generic error handling.&lt;/p&gt;
&lt;p&gt;The natural next question is then &amp;ldquo;How should I do error handling?&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;That question can be hard to answer, and as always in software development the answer is: &amp;ldquo;It depends&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;First of all error handling in every language is different, and you should certainly do what is idiomatic in your specific programming language.&lt;/p&gt;</description></item><item><title>Don't do generic error handling</title><link>https://khebbie.dk/posts-pages/dont-do-generic-error-handling/</link><pubDate>Sat, 06 Feb 2021 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/dont-do-generic-error-handling/</guid><description>&lt;h1 id="dont-do-generic-error-handling"&gt;Don&amp;rsquo;t do generic error handling&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Feb 6, 2021&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/dont-do-generic-error-handling/"&gt;https://khebbie.dk/dont-do-generic-error-handling/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So I just had a look at a fairly new restful api, written in kotlin.&lt;/p&gt;
&lt;p&gt;The developers who made the api decided to be smart about error handling - instead of doing error handling in every api endpoint - why not just do some generic error handling.&lt;/p&gt;
&lt;p&gt;The error handling exists in ControllerExceptionHandler.kt&lt;/p&gt;
&lt;p&gt;The code would look something like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; @ExceptionHandler(WebClientResponseException::class)
fun handleWebClientResponseException(e: WebClientResponseException): ResponseEntity&amp;lt;Any&amp;gt; {
logger().error(&amp;quot;Error from WebClient - Status {}: {}&amp;quot;, e.rawStatusCode, e.statusText, e)
return ResponseEntity(mapOf(&amp;quot;error&amp;quot; to &amp;quot;Error in external service&amp;quot;), HttpStatus.BAD_GATEWAY)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That really seems like a smart thing to do - right!&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-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>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>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>Docker vs binary packages</title><link>https://khebbie.dk/posts-pages/docker-vs-binary-packages/</link><pubDate>Sat, 21 Oct 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/docker-vs-binary-packages/</guid><description>&lt;h1 id="docker-vs-binary-packages"&gt;Docker vs binary packages&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Oct 21, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/docker-vs-binary-packages/"&gt;https://khebbie.dk/docker-vs-binary-packages/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The other day I had a conversation with a Operations Engineer who made a bold statement: &amp;ldquo;Sending us a docker container is not different from sending us a .deb package&amp;rdquo;&lt;br&gt;
I do not agree with that statement at all but didn&amp;rsquo;t have the time to counter it, so instead I will write this blog post.&lt;/p&gt;
&lt;p&gt;So what really is the difference between a deb package and a docker container?&lt;br&gt;
Just a sidenote that .deb is just one example of a binary package, rpms and packages for other linux systems, could be another example. And I suppose the Windows term would be a msi package.&lt;/p&gt;</description></item><item><title>Exception handling for junior devs</title><link>https://khebbie.dk/posts-pages/exception-handling-for-junior-devs/</link><pubDate>Tue, 05 Sep 2017 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/exception-handling-for-junior-devs/</guid><description>&lt;h1 id="exception-handling-for-junior-devs"&gt;Exception handling for junior devs&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 5, 2017&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/exception-handling-for-junior-devs/"&gt;https://khebbie.dk/exception-handling-for-junior-devs/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Exception handling is a very important thing for creating production ready code.&lt;br&gt;
When you are a brand new developer you might not know how to do exception handling properly.&lt;br&gt;
Here I will try to describe a few basic rules that should be followed when coding.&lt;br&gt;
Please note that as always there might be reasons for breaking these rules, but they are a sane default.&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>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>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>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>Optimistic locking in mongomapper and eventbus</title><link>https://khebbie.dk/posts-pages/optimistic-locking-in-mongomapper-and-eventbus/</link><pubDate>Mon, 27 Apr 2015 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/optimistic-locking-in-mongomapper-and-eventbus/</guid><description>&lt;h1 id="optimistic-locking-in-mongomapper-and-eventbus"&gt;Optimistic locking in mongomapper and eventbus&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Apr 27, 2015&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/optimistic-locking-in-mongomapper-and-eventbus/"&gt;https://khebbie.dk/optimistic-locking-in-mongomapper-and-eventbus/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In Be My Eyes we use &lt;a href="https://github.com/mongomapper/mongomapper/"&gt;mongomapper&lt;/a&gt; and &lt;a href="https://github.com/kevinrutherford/event_bus"&gt;eventbus&lt;/a&gt;, both are very good tools that make my everyday life as a developer easier - except when it doesn&amp;rsquo;t.&lt;br&gt;
We had a problem where more than one helper is added to a call. This should not happen. We have a &lt;a href="https://github.com/bemyeyes/bemyeyes-server/blob/master/routes/requests.rb#L56"&gt;pretty simple if statement&lt;/a&gt; in our code. The thing is that many helpers were allowed through the if statement down to the &amp;ldquo;default&amp;rdquo; case, where only one should be allowed.&lt;br&gt;
I really lost a lot of hair trying to figure out why more than one helper could fall through. It really made no sense, since we assigned a helper and assigned &lt;em&gt;answered&lt;/em&gt; to be true. This should mean that the next time a helper tries to answer, she would be told that the call was already answered. But in many cases this did not happen.&lt;br&gt;
I searched the codebase through and through for many hours with two things in mind that could be wrong:&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>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>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>Map Reduce in MongoDb</title><link>https://khebbie.dk/posts/map-reduce-in-mongodb/</link><pubDate>Fri, 31 Oct 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/map-reduce-in-mongodb/</guid><description>&lt;p&gt;&lt;em&gt;Published: Oct 31, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Data visualization dashboard with analytics and distributed processing metrics" loading="lazy" src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
I had a problem where I needed to aggregate some documents in MongoDb. In Be My Eyes, we keep records of which version of ios the app is installed on. We do this to know which versions to support.&lt;br&gt;
The natural solution would be to use the aggregation framework, however I had to do some string manipulation, since we only care about major versions at the moment.&lt;br&gt;
So I went ahead and learned me som map - reduce. Map - reduce is a pretty simple concept, where you in the map step extract some data, and in the reduce step do some kind of manipulation of that data, to get some kind of values out of it.&lt;br&gt;
The code I endend up with was:&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>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;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;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;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>Update all records in mongodb</title><link>https://khebbie.dk/posts/update-all-records-in-mongodb/</link><pubDate>Thu, 15 May 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/update-all-records-in-mongodb/</guid><description>&lt;p&gt;&lt;em&gt;Published: May 15, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Database schema visualization representing MongoDB document collection and update operations" loading="lazy" src="https://images.unsplash.com/photo-1563013544-824ae1b704d3?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
Recently we discovered a problem in &lt;a href="http://bemyeyes.org"&gt;Be My Eyes&lt;/a&gt; where an id was not unique.&lt;br&gt;
So we needed a quick fix to make all ids a forthrunning unique number before solving the problem in the code.&lt;/p&gt;
&lt;p&gt;On stackoverflow i found this question:&lt;br&gt;
&lt;a href="http://stackoverflow.com/questions/4146452/mongodb-what-is-the-fastest-way-to-update-all-records-in-a-collection"&gt;http://stackoverflow.com/questions/4146452/mongodb-what-is-the-fastest-way-to-update-all-records-in-a-collection&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And I modified the code to work for our schema.&lt;br&gt;
Please note: the code in the question was working, but slow for many millions records (a problem we don&amp;rsquo;t have yet ;-).&lt;/p&gt;</description></item><item><title>Heroku like deployment for your cloud host / VPS</title><link>https://khebbie.dk/posts/heroku-like-deployment-for-your-cloud-host/</link><pubDate>Mon, 12 May 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/heroku-like-deployment-for-your-cloud-host/</guid><description>&lt;p&gt;&lt;em&gt;Published: May 12, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Cloud server infrastructure representing Heroku deployment environment" loading="lazy" src="https://images.unsplash.com/photo-1555949963-aa79dcee981c?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
For &lt;a href="http://www.bemyeyes.org"&gt;Be My Eyes&lt;/a&gt; I have set up a heroku like deployment environment&lt;/p&gt;
&lt;p&gt;Basically I followed this approach:&lt;br&gt;
&lt;a href="https://www.digitalocean.com/community/articles/how-to-set-up-automatic-deployment-with-git-with-a-vps"&gt;https://www.digitalocean.com/community/articles/how-to-set-up-automatic-deployment-with-git-with-a-vps&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But there is one problem with the above approach, and that is that I want to be able to push other branches than master to the server. Thats how I push to QA and staging.&lt;br&gt;
A gooogle search found this for me:&lt;br&gt;
&lt;a href="https://coderwall.com/p/oj5smw"&gt;https://coderwall.com/p/oj5smw&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Practices of a proffesional developer</title><link>https://khebbie.dk/posts/practices-of-a-proffesional-developer/</link><pubDate>Sat, 12 Apr 2014 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/practices-of-a-proffesional-developer/</guid><description>&lt;p&gt;&lt;em&gt;Published: Apr 12, 2014&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Professional software developers collaborating on clean, well-structured code" loading="lazy" src="https://images.unsplash.com/photo-1552664730-d307ca884978?auto=format&amp;fit=crop&amp;w=1600&amp;q=80"&gt;&lt;br&gt;
Over the years I have picked up a list of practices that I think are essential to a professional developer - these are of course my opinions - other may disagree.&lt;br&gt;
We don&amp;rsquo;t expect our customers or managers to ask for these things - but rather as professionals we do this because - well we are professionals. When estimating a task at hand we don&amp;rsquo;t add &amp;ldquo;unit testing&amp;rdquo; tasks &amp;lsquo;cause these are just things we do&lt;br&gt;
Just like at doctor does not expect his patients to ask him to wash his hands - neither do we expect customers or managers to ask us to do unit testing etc.&lt;br&gt;
Big books are written about each of theªse subjects, hence I don&amp;rsquo;t go into much detail about each - I just list them.&lt;br&gt;
Either research on the internet or find a good book if you don&amp;rsquo;t understand an item.&lt;br&gt;
I am mostly a web developer, so these practices apply to that space - but most also apply to other spaces.&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>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-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-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-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>Craftmanship over heroics</title><link>https://khebbie.dk/posts/craftmanship-over-heroics/</link><pubDate>Fri, 28 Nov 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/craftmanship-over-heroics/</guid><description>&lt;p&gt;&lt;em&gt;Published: Nov 28, 2008&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Skilled hands working carefully with woodworking tools on a wooden surface" loading="lazy" src="https://images.unsplash.com/photo-1504384308090-c894fdcc538d?w=800"&gt;&lt;br&gt;
I read a&lt;br&gt;
good blog post the other day (&lt;a href="http://softwarecraftsmanship.oreilly.com/news/2008/8/8/uncle-bob-on-craftsmanship-at-agile-2008"&gt;http://softwarecraftsmanship.oreilly.com/news/2008/8/8/uncle-bob-on-craftsmanship-at-agile-2008&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;It was a&lt;br&gt;
comment on a statment by &lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Uncle Bob&lt;/a&gt;: &amp;ldquo;Craftmanship over crap&amp;rdquo;, but in&lt;br&gt;
the above mentioned blog post Dave Hoover modified the statement to&lt;br&gt;
&amp;ldquo;Craftmanship over heroics&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I have&lt;br&gt;
really taken this statement in, since it speaks to me.&lt;/p&gt;
&lt;p&gt;So let me&lt;br&gt;
explain to you what it means to me:&lt;/p&gt;</description></item><item><title>Trying Out Ruby on Rails on Windows Vista</title><link>https://khebbie.dk/posts-pages/trying-out-ruby-on-rails-on-windows-vista/</link><pubDate>Fri, 14 Nov 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/trying-out-ruby-on-rails-on-windows-vista/</guid><description>&lt;h1 id="trying-out-ruby-on-rails-on-windows-vista"&gt;Trying Out Ruby on Rails on Windows Vista&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Nov 14, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/trying-out-ruby-on-rails-on-windows-vista/"&gt;https://khebbie.dk/trying-out-ruby-on-rails-on-windows-vista/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;OK, so I am not excactly an early adopter, but I had some time and had to try it out.&lt;/p&gt;
&lt;p&gt;First I followed this guide:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wiki.rubyonrails.org/rails/pages/RailsOnWindows"&gt;http://wiki.rubyonrails.org/rails/pages/RailsOnWindows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then I tryed out the first chapter of &lt;a href="http://pragprog.com/titles/cerailn/rails-for-net-developers"&gt;“Rails for .Net developers”&lt;/a&gt; from pragmaticprogrammers.&lt;/p&gt;
&lt;p&gt;I must say that it really just works!&lt;/p&gt;
&lt;p&gt;Of course this is a really simple app, but scaffolding is a great thing for CRUD.&lt;/p&gt;</description></item><item><title>Great Webcast on Test Driven Development</title><link>https://khebbie.dk/posts-pages/great-webcast-on-test-driven-development/</link><pubDate>Wed, 01 Oct 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/great-webcast-on-test-driven-development/</guid><description>&lt;h1 id="great-webcast-on-test-driven-development"&gt;Great Webcast on Test Driven Development&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/great-webcast-on-test-driven-development/"&gt;https://khebbie.dk/great-webcast-on-test-driven-development/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="http://www.patchedsoftware.com/RailsEnvy-LoveTests.mov"&gt;http://www.patchedsoftware.com/RailsEnvy-LoveTests.mov&lt;/a&gt;&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>[DK]Easy Refactorings to Improve the Readability of Your Code</title><link>https://khebbie.dk/posts-pages/dkeasy-refactorings-to-improve-the-readability-of-your-code/</link><pubDate>Tue, 23 Sep 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/dkeasy-refactorings-to-improve-the-readability-of-your-code/</guid><description>&lt;h1 id="dkeasy-refactorings-to-improve-the-readability-of-your-code"&gt;[DK]Easy Refactorings to Improve the Readability of Your Code&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 23, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/dkeasy-refactorings-to-improve-the-readability-of-your-code/"&gt;https://khebbie.dk/dkeasy-refactorings-to-improve-the-readability-of-your-code/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I dette blog indlæg lægges op til løsning på nogle dagligdagsproblemer:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jeremyjarrell.com/archive/2007/08/13/48.aspx"&gt;Easy Refactorings to Improve the Readability of Your Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Problemet som behandles i inidlægget går på readability, og handler om følgende kode:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;adapter.OpenConnection(@”C:\data\records.mdb”, true, false);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Det som forfatteren har imod koden er at det kan være svært at huske hvad parametrene betyder, når der kun kaldes med true og false.&lt;br&gt;
Så løsningen der bliver fremsat i indlægget er som følger:&lt;/p&gt;</description></item><item><title>About Ruby</title><link>https://khebbie.dk/posts-pages/about-ruby/</link><pubDate>Tue, 23 Sep 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/about-ruby/</guid><description>&lt;h1 id="about-ruby"&gt;About Ruby&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 23, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/about-ruby/"&gt;https://khebbie.dk/about-ruby/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Since there has been so much hype about ruby, I thought I&amp;rsquo;d better take a look at it.&lt;/p&gt;
&lt;p&gt;I must say it looks really good. There&amp;rsquo;s two things i like about Ruby:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Duck-typing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So many times I have been trying to make generic functionality for classes I didn&amp;rsquo;t own. So in C# I have no chance of implementing a common interface.&lt;/p&gt;
&lt;p&gt;With Duck-typing that is now possible, since I find that common functionality and do Duck-typing.&lt;/p&gt;</description></item><item><title>Asserts, Exceptions (and Validation)</title><link>https://khebbie.dk/posts-pages/asserts-exceptions-and-validation/</link><pubDate>Sat, 06 Sep 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/asserts-exceptions-and-validation/</guid><description>&lt;h1 id="asserts-exceptions-and-validation"&gt;Asserts, Exceptions (and Validation)&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Sep 6, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/asserts-exceptions-and-validation/"&gt;https://khebbie.dk/asserts-exceptions-and-validation/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This blog post was originally created at 2008-09-06&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At work we have had a bit of a discussion about Debug.Assert and Exceptions. With a little help from google and Steve McConnell&amp;rsquo;s great book &lt;a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670"&gt;Code Complete&lt;/a&gt; we have come to the following definitions:&lt;/p&gt;
&lt;p&gt;Both Assertions and Exceptions has to do with technical stuff. Business stuff should be handled by validation logic. Business logic should never appear in assertions and exceptions.&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>Too Much Testing</title><link>https://khebbie.dk/posts-pages/too-much-testing/</link><pubDate>Sat, 22 Mar 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/too-much-testing/</guid><description>&lt;h1 id="too-much-testing"&gt;Too Much Testing&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Mar 22, 2008&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/too-much-testing/"&gt;https://khebbie.dk/too-much-testing/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;OK, so in this post I decided to put on display my total ignorance toward unit testing.&lt;/p&gt;
&lt;p&gt;I just read &lt;a href="http://msdn2.microsoft.com/da-dk/magazine/cc337884(en-us).aspx"&gt;Chris Tavares article on ASP.NET MVC&lt;/a&gt;. It is by the way, a good introduction to ASP.NET MVC.&lt;/p&gt;
&lt;p&gt;However one thing i stumbled upon was the unit testing part. For example the “HelloController” is less than 20 lines of code, and the unit testing is more than 20 lines of code.&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>Good cop - Bad cop</title><link>https://khebbie.dk/posts/good-cop-bad-cop/</link><pubDate>Thu, 31 Jan 2008 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts/good-cop-bad-cop/</guid><description>&lt;p&gt;&lt;em&gt;Published: Jan 31, 2008&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img alt="Two diverging paths representing different approaches" loading="lazy" src="https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800"&gt;&lt;/p&gt;
&lt;p&gt;There is a danish movie called &amp;ldquo;hannibal &amp;amp; Jerry&amp;rdquo;. It&amp;rsquo;s a story about a little boy who buys a dog - the dog later is discovered to be able to speak (it&amp;rsquo;s a kids movie).&lt;/p&gt;
&lt;p&gt;So the boy takes the dog for a walk and is having a conversation with his dog. During this conversation he walks out in front of a police car and is nearly run over.&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>[DK]Easy Refactorings to Improve the Readability of Your Code</title><link>https://khebbie.dk/posts-pages/easy-refactorings-to-improve-the-readability-of-your-code/</link><pubDate>Wed, 15 Aug 2007 00:00:00 +0000</pubDate><guid>https://khebbie.dk/posts-pages/easy-refactorings-to-improve-the-readability-of-your-code/</guid><description>&lt;h1 id="dkeasy-refactorings-to-improve-the-readability-of-your-code"&gt;[DK]Easy Refactorings to Improve the Readability of Your Code&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Published: Aug 15, 2007&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href="https://khebbie.dk/easy-refactorings-to-improve-the-readability-of-your-code/"&gt;https://khebbie.dk/easy-refactorings-to-improve-the-readability-of-your-code/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;I dette blog indlæg lægges op til løsning på nogle dagligdagsproblemer:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.jeremyjarrell.com/archive/2007/08/13/48.aspx"&gt;Easy Refactorings to Improve the Readability of Your Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Problemet som behandles i inidlægget går på readability, og handler om følgende kode:&lt;br&gt;
adapter.OpenConnection(@&amp;ldquo;C:\data\records.mdb&amp;rdquo;, true, false);&lt;/p&gt;
&lt;p&gt;Det som forfatteren har imod koden er at det kan være svært at huske hvad parametrene betyder, når der kun kaldes med true og false.&lt;br&gt;
Så løsningen der bliver fremsat i indlægget er som følger:&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-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>