<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3967245941627592156</id><updated>2011-09-09T05:45:49.208-07:00</updated><category term='.net'/><category term='general'/><category term='asp.net mvc'/><category term='programming'/><title type='text'>Dark Industrial Engines</title><subtitle type='html'>A blog about programming. Badly.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-5944235584157403393</id><published>2010-10-30T03:24:00.000-07:00</published><updated>2010-10-30T03:28:23.623-07:00</updated><title type='text'>Premature Optimisation is the Root of all Evil</title><content type='html'>It's hard to engage in any discussion about performance without someone bringing up the oft-quoted line of Knuth's:&lt;br /&gt;&lt;blockquote&gt;“Premature optimization is the root of all evil.” - &lt;i&gt;Donald Knuth&lt;/i&gt;&lt;/blockquote&gt;Now there is good advice in there, but it appears many programmers unfurl this phrase to emphesise a need to not concern yourself with performance. The issue is that there are several kinds of optimisation.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Optimisation from good design&lt;/li&gt;&lt;li&gt;Optimisation from good coding practices&lt;/li&gt;&lt;li&gt;Optimisation from measuring&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Only the last of these could be considered a "premature optimisation" if you do it too early, but the others are fundamental to writing good code. Maintaining good clean coding practices is something every programmer should concentrate on for every line of code that they write and good design is something that happens before you even touch an IDE.&lt;br /&gt;&lt;br /&gt;You should never forsake readability for performance, but if you are not able to improve the speed of your code while maintaining legibility, that would indicate a problem with either your design or your algorithms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-5944235584157403393?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/5944235584157403393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/10/premature-optimisation-is-root-of-all.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/5944235584157403393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/5944235584157403393'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/10/premature-optimisation-is-root-of-all.html' title='Premature Optimisation is the Root of all Evil'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-5456046022404815818</id><published>2010-08-12T04:01:00.000-07:00</published><updated>2010-08-12T08:17:17.591-07:00</updated><title type='text'>Converting Base10 to Base36</title><content type='html'>Here is a simple C# helper class for converting between base 10 and base 36.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public static class Base36Helper&lt;br /&gt;{&lt;br /&gt;    private const string Alphabet = "0123456789abcdefghijklmnopqrstuvwxyz";&lt;br /&gt;&lt;br /&gt;    public static string Encode(int value)&lt;br /&gt;    {&lt;br /&gt;        if (value &lt; Alphabet.Length)&lt;br /&gt;        {&lt;br /&gt;            return Alphabet[value].ToString();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        var result = new StringBuilder();&lt;br /&gt;&lt;br /&gt;        while (value != 0)&lt;br /&gt;        {&lt;br /&gt;            result.Insert(0, Alphabet[value % 36]);&lt;br /&gt;            value /= 36;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return result.ToString();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static int Decode(string value)&lt;br /&gt;    {&lt;br /&gt;        int result = 0;&lt;br /&gt;&lt;br /&gt;        for (int i = 0, j = (value.Length - 1); i &lt; value.Length; i++, j--)&lt;br /&gt;        {&lt;br /&gt;            result += Alphabet.IndexOf(value[j]) * (int)Math.Pow(36, i);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return result;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-5456046022404815818?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/5456046022404815818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/08/converting-base10-to-base36.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/5456046022404815818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/5456046022404815818'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/08/converting-base10-to-base36.html' title='Converting Base10 to Base36'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-7748543832555459401</id><published>2010-07-31T03:49:00.000-07:00</published><updated>2010-07-31T04:01:04.290-07:00</updated><title type='text'>Razor view engine and line breaks</title><content type='html'>I've been messing around with &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx"&gt;ASP.NET MVC 3 (preview 1)&lt;/a&gt; and one of the problems I needed to get round was how to keep line breaks in user entered text using the new &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/07/02/introducing-razor.aspx"&gt;Razor view engine&lt;/a&gt;. It turned out to be rather simple, as usual, although the solution was not immediately obvious.&lt;br /&gt;&lt;br /&gt;Basically, Razor will automatically encode all strings as HTML, which is a great boon to security, but obviously there are situations where you want to maintain your own encoding. Well, turns out that Razor will leave the string alone if it's already a type of &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.mvchtmlstring.aspx"&gt;MvcHtmlString&lt;/a&gt;, which means that we can update our &lt;a href="http://darkindustrialengines.blogspot.com/2010/07/line-breaks-in-aspnet-mvc.html"&gt;previous little extension method&lt;/a&gt; example to return an MVC string instead of a &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.aspx"&gt;.NET one&lt;/a&gt;.&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;using System;&lt;br /&gt;using System.Web.Mvc;&lt;br /&gt;&lt;br /&gt;namespace LightBlog.Helpers&lt;br /&gt;{&lt;br /&gt;    public static class HtmlHelpers&lt;br /&gt;    {&lt;br /&gt;        public static MvcHtmlString Markup(this HtmlHelper helper, string value)&lt;br /&gt;        {&lt;br /&gt;            value = helper.Encode(value).Replace(Environment.NewLine, "&amp;lt;br / &amp;gt;");&lt;br /&gt;            return new MvcHtmlString(value);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;By returning an MVC string, Razor will leave our encoding alone, meaning we can now define which HTML tags we want to be displayed. Having done that, we just need to find a way to use our extension method from within a Razor view. This is simple however.&lt;br /&gt;&lt;pre class="html" name="code"&gt;@inherits System.Web.Mvc.WebViewPage&amp;lt;LightBlog.Model.Post&amp;gt;&lt;br /&gt;@using LightBlog.Helpers&lt;br /&gt;&lt;br /&gt;@{&lt;br /&gt;    View.Title = "View Post";&lt;br /&gt;    LayoutPage = "~/Views/Shared/_Layout.cshtml";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;p&amp;gt;@Html.Markup(Model.Text)&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;/pre&gt;As you see all we need to do is to include a using reference to our Helpers namespace at the top of the view, then we can use our little Markup extension exactly as before!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-7748543832555459401?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/7748543832555459401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/razor-view-engine-and-line-breaks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/7748543832555459401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/7748543832555459401'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/razor-view-engine-and-line-breaks.html' title='Razor view engine and line breaks'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-3333647099841089012</id><published>2010-07-22T09:22:00.000-07:00</published><updated>2010-07-22T10:01:47.185-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Line breaks in ASP.NET MVC</title><content type='html'>I've been learning &lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt; recently, mainly because it's been so long since I worked as a Web developer, I'm completely out-of-touch with what's been going on in the industry over the last eight or so years. I decided it would be nice to learn ASP.NET MVC, as back in the day I was a &lt;a href="http://php.net/index.php"&gt;PHP&lt;/a&gt; developer and had never done any ASP at all. &lt;br /&gt;&lt;br /&gt;I'm slowly getting to grips with the whole convention of creating MVC sites and happily working through lots of little problems and issues. One problem I had was how to maintain line-breaks in text, until I figured out a neat little way to do it using a simple extension method on the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.aspx"&gt;HtmlHelper&lt;/a&gt; class.&lt;br /&gt;&lt;br /&gt;Firstly the extension  method itself, which is just a very basic find and replace operation. The only thing to remember is that you need to escape the HTML &lt;i&gt;before&lt;/i&gt; you replace the newlines, otherwise the break-rule tags themselves will be encoded!&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;using System;&lt;br /&gt;using System.Web.Mvc;&lt;br /&gt;&lt;br /&gt;namespace LightBlog.Helpers&lt;br /&gt;{&lt;br /&gt;    public static class HtmlHelpers&lt;br /&gt;    {&lt;br /&gt;        public static string Markup(this HtmlHelper helper, string value)&lt;br /&gt;        {&lt;br /&gt;            return helper.Encode(value).Replace(Environment.NewLine, "&amp;lt;b r /&amp;gt;");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;Now that we have our little helper, our next problem is how to make our extension method available in an actual view. To do this we need to add the LightBlog.Helpers namespace to the list of CLR references allowed on each page. We can do this by going into the Web.config file in the main ASP.NET MVC directory and adding a new namespace item to the pages section, like this.&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;pages&amp;gt;&lt;br /&gt;  &amp;lt;namespaces&amp;gt;&lt;br /&gt;    &amp;lt;add namespace="System.Web.Mvc" /&amp;gt;&lt;br /&gt;    &amp;lt;add namespace="System.Web.Mvc.Ajax" /&amp;gt;&lt;br /&gt;    &amp;lt;add namespace="System.Web.Mvc.Html" /&amp;gt;&lt;br /&gt;    &amp;lt;add namespace="System.Web.Routing" /&amp;gt;&lt;br /&gt;    &amp;lt;add namespace="LightBlog.Helpers"/&amp;gt;&lt;br /&gt;  &amp;lt;/namespaces&amp;gt;&lt;br /&gt;&amp;lt;/pages&amp;gt;&lt;/pre&gt;Now in our view code we can use our custom little Html.Markup method to output our text with the line-breaks intact.&lt;br /&gt;&lt;pre name="code" class="html"&gt;&amp;lt;h1&amp;gt;&amp;lt;%= Html.Markup(Model.Text) %&amp;gt;&amp;lt;/h1&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-3333647099841089012?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/3333647099841089012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/line-breaks-in-aspnet-mvc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/3333647099841089012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/3333647099841089012'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/line-breaks-in-aspnet-mvc.html' title='Line breaks in ASP.NET MVC'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-1853697682016677896</id><published>2010-07-20T07:27:00.000-07:00</published><updated>2010-07-22T09:59:45.683-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Serializing a DateTime</title><content type='html'>I had an issue a few days ago about how to serialize a &lt;a href="http://msdn.microsoft.com/en-us/library/system.datetime.aspx"&gt;DateTime&lt;/a&gt; structure, as for some unbeknownst reason this is not supported by .NET. The solution was simple however, just wrap the DateTime in a class that you can serialize. We use the nifty little &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmlignore.aspx"&gt;XmlIgnore&lt;/a&gt; attribute to tell the &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx"&gt;serializer&lt;/a&gt; to ignore our DateTime, but provide a separate string we can use to pickle and then unpickle the value.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;[Serializable]&lt;br /&gt;public class SerializableDateTime&lt;br /&gt;{&lt;br /&gt;    [XmlIgnore]&lt;br /&gt;    public DateTime Value&lt;br /&gt;    {&lt;br /&gt;        get;&lt;br /&gt;        private set;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // This is the value that actually gets serialized.&lt;br /&gt;    public string SerializationValue&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            return Value.ToString();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        set&lt;br /&gt;        {&lt;br /&gt;            Value = DateTime.Parse(value);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public SerializableDateTime()&lt;br /&gt;    : this(new DateTime())&lt;br /&gt;    { }&lt;br /&gt;&lt;br /&gt;    public SerializableDateTime(DateTime value)&lt;br /&gt;    {&lt;br /&gt;        Value = value;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-1853697682016677896?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/1853697682016677896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/serializing-datetime.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/1853697682016677896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/1853697682016677896'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/serializing-datetime.html' title='Serializing a DateTime'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-1038084808714133338</id><published>2010-07-20T07:17:00.000-07:00</published><updated>2010-07-22T12:34:58.384-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.net'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Relative dates</title><content type='html'>So here is some interesting code that gives you Twitter style relative dates in your application. I've written it out in the form I use it, as an extension method for the &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.mvc.htmlhelper.aspx"&gt;HtmlHelpe&lt;/a&gt;r class in &lt;a href="http://www.asp.net/mvc"&gt;ASP.NET MVC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;public static string Relative(this HtmlHelper helper, DateTime date)&lt;br /&gt;{&lt;br /&gt;    var span = DateTime.Now - date;&lt;br /&gt;    var minutes = span.TotalMinutes;&lt;br /&gt;&lt;br /&gt;    if (minutes &lt; 0.75)&lt;br /&gt;        return "less than a minute ago";&lt;br /&gt;    else if (minutes &lt; 1.5)&lt;br /&gt;        return "a minute ago";&lt;br /&gt;    else if (minutes &lt; 45)&lt;br /&gt;        return string.Format("{0} minutes ago", Math.Round(minutes));&lt;br /&gt;    else if (minutes &lt; 90)&lt;br /&gt;        return "an hour ago";&lt;br /&gt;    else if (minutes &lt; 1440)&lt;br /&gt;        return string.Format("{0} hours ago", Math.Round(Math.Abs(span.TotalHours)));&lt;br /&gt;    else if (minutes &lt; 2880)&lt;br /&gt;        return "a day ago";&lt;br /&gt;    else if (minutes &lt; 43200)&lt;br /&gt;        return string.Format("{0} days ago", Math.Floor(Math.Abs(span.TotalDays)));&lt;br /&gt;    else if (minutes &lt; 86400)&lt;br /&gt;        return "a month ago";&lt;br /&gt;    else if (minutes &lt; 525600)&lt;br /&gt;        return string.Format("{0} months ago", Math.Floor(Math.Abs(span.TotalDays / 30)));&lt;br /&gt;    return string.Format("{0} years ago", Math.Floor(Math.Abs(span.TotalDays / 365)));&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now it is very easy in your view code to add pretty dates whenever you need them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-1038084808714133338?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/1038084808714133338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/relative-dates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/1038084808714133338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/1038084808714133338'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/relative-dates.html' title='Relative dates'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3967245941627592156.post-2974847657160635755</id><published>2010-07-20T05:17:00.000-07:00</published><updated>2010-07-20T05:21:29.470-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='general'/><title type='text'>Blogging</title><content type='html'>They say every programmer should have a blog, so here's mine. I am a programmer, as I say, mainly working with the .NET Framework, although I also make forays into Python, Ruby and anything else which takes my fancy. We'll see if I can think of anything interesting to blog about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3967245941627592156-2974847657160635755?l=darkindustrialengines.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://darkindustrialengines.blogspot.com/feeds/2974847657160635755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/blogging.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/2974847657160635755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3967245941627592156/posts/default/2974847657160635755'/><link rel='alternate' type='text/html' href='http://darkindustrialengines.blogspot.com/2010/07/blogging.html' title='Blogging'/><author><name>Faraday</name><uri>http://www.blogger.com/profile/07858696808005854858</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
