<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Software and Other Mysteries</title>
    <link>https://blog.brannstrom.io/</link>
    <description>Recent content on Software and Other Mysteries</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 06 Jul 2022 11:21:02 +0200</lastBuildDate>
    <atom:link href="https://blog.brannstrom.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Normalization of Unicode Equivalent Animals</title>
      <link>https://blog.brannstrom.io/2022/07/normalization-of-unicode-equivalent-animals/</link>
      <pubDate>Wed, 06 Jul 2022 11:21:02 +0200</pubDate>
      <guid>https://blog.brannstrom.io/2022/07/normalization-of-unicode-equivalent-animals/</guid>
      <description>&lt;p&gt;A while back, a customer reported that something was off when searching in our application. When searching for &amp;ldquo;Akilleshäl&amp;rdquo; (Swedish word for &amp;ldquo;Achilles heel&amp;rdquo;, which is a query I just made up) they only got a result for &amp;ldquo;Akilleshäl 1&amp;rdquo; and not &amp;ldquo;Akilleshäl 2&amp;rdquo;. Weird!&lt;/p&gt;&#xA;&lt;p&gt;I started to look into it and noticed that both results were returned when searching for the part of the word leading up to the very non-English letter of &amp;ldquo;ä&amp;rdquo;, but once that letter was added, the second result disappeared.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Rabbit Hole of Hosting</title>
      <link>https://blog.brannstrom.io/2020/02/the-rabbit-hole-of-hosting/</link>
      <pubDate>Fri, 14 Feb 2020 16:54:18 +0100</pubDate>
      <guid>https://blog.brannstrom.io/2020/02/the-rabbit-hole-of-hosting/</guid>
      <description>&lt;p&gt;I recently published my &lt;a href=&#34;https://blog.brannstrom.io/2020/02/the-greatness-of-boring/&#34;&gt;first blog post in almost four years&lt;/a&gt;. It turned out to be a less than straight forward journey, so I thought I&amp;rsquo;d share the adventures I experienced while venturing into the rabbit hole.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Search for credentials to the server where the &lt;strong&gt;only&lt;/strong&gt; copy of my blog existed. Found them well hidden in an old &lt;a href=&#34;https://1password.com&#34;&gt;1Password&lt;/a&gt; vault.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Clone the Git repo of my blog from that server.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Write a blog post. &lt;em&gt;This did not take as long as the rest of these steps.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Greatness of Boring</title>
      <link>https://blog.brannstrom.io/2020/02/the-greatness-of-boring/</link>
      <pubDate>Sat, 01 Feb 2020 16:01:13 +0100</pubDate>
      <guid>https://blog.brannstrom.io/2020/02/the-greatness-of-boring/</guid>
      <description>&lt;p&gt;New is always better, I often say, half-jokingly. There&amp;rsquo;s a heart of truth to it. I enjoy unboxing a new phone or, most recently, getting our first brand new &lt;a href=&#34;https://www.kia.com/se/nya-bilar/nya-optima-sportswagon-plugin-hybrid/upptack/&#34;&gt;car&lt;/a&gt; at the dealership. There&amp;rsquo;s a satisfaction in the exploration of newness and, hopefully, an element of happy surprise.&lt;/p&gt;&#xA;&lt;p&gt;New is always better used to be less of a joke. Perhaps it&amp;rsquo;s because there are fewer surprises these days. That third camera in your iPhone? It&amp;rsquo;s obviously not as exciting as when your phone got its first camera. Or perhaps it&amp;rsquo;s because I&amp;rsquo;m older. Jaded, even?&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Fortnight Without Twitter</title>
      <link>https://blog.brannstrom.io/2016/02/a-fortnight-without-twitter/</link>
      <pubDate>Sat, 06 Feb 2016 12:56:03 +0100</pubDate>
      <guid>https://blog.brannstrom.io/2016/02/a-fortnight-without-twitter/</guid>
      <description>&lt;p&gt;Twitter, I think we need to spend some time apart. Really, it&amp;rsquo;s not you, it&amp;rsquo;s me! Scrolling through the never-ending feed that is Twitter is more than a habit. It has crept into my muscle memory. More than once I&amp;rsquo;ve been watching an episode on Netflix and suddenly realized I don&amp;rsquo;t really understand what is happening because I&amp;rsquo;ve been mindlessly scanning through new tweets. Or I&amp;rsquo;ve become bored because there is a full &lt;em&gt;minute&lt;/em&gt; until the bus arrives, so I better see what&amp;rsquo;s going on in the world.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Year Without Pants</title>
      <link>https://blog.brannstrom.io/2015/07/the-year-without-pants/</link>
      <pubDate>Wed, 29 Jul 2015 21:56:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2015/07/the-year-without-pants/</guid>
      <description>&lt;p&gt;A few weeks back I attended &lt;a href=&#34;https://www.react-europe.org/&#34;&gt;React Europe&lt;/a&gt; in Paris. It was on its own a very interesting conference with tons of great talks, all &lt;a href=&#34;https://www.youtube.com/channel/UCorlLn2oZfgOJ-FUcF2eZ1A&#34;&gt;available on YouTube&lt;/a&gt;. This post, however, will not deal with the awesomeness of Redux or the potential of GraphQL.&lt;/p&gt;&#xA;&lt;p&gt;At the &lt;a href=&#34;http://automattic.com/&#34;&gt;Automattic&lt;/a&gt; (most notably the company behind &lt;a href=&#34;https://wordpress.com/&#34;&gt;Wordpress.com&lt;/a&gt;) conference booth I was able to get my hands on a book called &lt;a href=&#34;http://amzn.to/1eA9rBk&#34;&gt;&amp;ldquo;The Year Without Pants: Wordpress.com and the Future of Work&amp;rdquo;&lt;/a&gt; by Scott Berkun. I covers the author&amp;rsquo;s experience of working as a team lead at Automattic for about two years, and since that sounds fairly boring, I think we understand the reason for the click-baity title.&lt;/p&gt;</description>
    </item>
    <item>
      <title>contextmenu event in Firefox</title>
      <link>https://blog.brannstrom.io/2014/04/contextmenu-event-in-firefox/</link>
      <pubDate>Fri, 18 Apr 2014 17:34:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2014/04/contextmenu-event-in-firefox/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working on a small context menu library in Javascript. Basically it lets you register a listener on a DOM element along with a flag specifying which types of clicks should render the context menu. Also, let&amp;rsquo;s save the discussion of whether creating your own custom right-click menu is a good idea or not for another time.&lt;/p&gt;&#xA;&lt;p&gt;The menu worked fine in Chrome and Safari, but when I tried it out in Firefox there was an issue. When right-clicking, the menu would appear but when the mouse button was released, the menu disappeared again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Confirming destructive UI actions</title>
      <link>https://blog.brannstrom.io/2014/03/confirming-destructive-ui-actions/</link>
      <pubDate>Sun, 16 Mar 2014 13:05:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2014/03/confirming-destructive-ui-actions/</guid>
      <description>&lt;p&gt;The other day I was adding a delete action for an application. I added the standard red button and was just about to implement the default confirmation dialog (&amp;ldquo;Are you sure you want to delete this item? OK / Cancel&amp;rdquo;) before realizing how dialogs in general annoy me.&lt;/p&gt;&#xA;&lt;p&gt;The problem, as I see it, is that there is somewhat of a context switch. You leave the application and are sent to Dialog Land. Admittedly, you seldom stay long in Dialog Land, but you are broken out of your current flow. It can be argued that this is the point, since this break of context means the user is forced to consider if they really do want the go through with the action. We should of course do this in the case of irreversible actions, but is a modal dialog really the only way?&lt;/p&gt;</description>
    </item>
    <item>
      <title>It would be great if the app...</title>
      <link>https://blog.brannstrom.io/2013/08/it-would-be-great-if-the-app.../</link>
      <pubDate>Sat, 17 Aug 2013 16:43:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2013/08/it-would-be-great-if-the-app.../</guid>
      <description>&lt;p&gt;My main project at work has been developing an authentication plugin implementing the SAML2 protocol. For the last three months I&amp;rsquo;ve also been developing a web-based issue tracking system, with the goal of unifying our internal workflow as well as improve communication on user reported issues with our customers. In my last post, &lt;a href=&#34;http://blog.streambur.se/2013/08/the-mythical-man-month/&#34;&gt;The Mythical Man-Month&lt;/a&gt;, I quoted the following sentence which resonated with my experience from these (and previous) projects.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Mythical Man-Month</title>
      <link>https://blog.brannstrom.io/2013/08/the-mythical-man-month/</link>
      <pubDate>Sat, 10 Aug 2013 19:52:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2013/08/the-mythical-man-month/</guid>
      <description>&lt;p&gt;There are a few books that are recurring on the &amp;ldquo;top 10 books every software engineer must read&amp;rdquo;-lists on the Internet, and one of them is &lt;a href=&#34;http://en.wikipedia.org/wiki/The_Mythical_Man-Month&#34;&gt;The Mythical Man-Month&lt;/a&gt;. I&amp;rsquo;ve been trying to read more nonfiction lately, and especially books that deal with software and its development process. As a result I&amp;rsquo;ve had The Mythical Man-Month on my nightstand for the last few weeks.&lt;/p&gt;&#xA;&lt;p&gt;The book was originally published in 1975 and received an update for its 20th anniversary, which included a few extra chapters. The author, Fred Brooks, received a &lt;a href=&#34;http://en.wikipedia.org/wiki/Turing_Award&#34;&gt;Turing Award&lt;/a&gt; for his efforts in the field of computing in 1999.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Your vs. My</title>
      <link>https://blog.brannstrom.io/2013/02/your-vs.-my/</link>
      <pubDate>Sun, 24 Feb 2013 16:58:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2013/02/your-vs.-my/</guid>
      <description>&lt;p&gt;I read an interesting post by Dustin Curtis a while back called &lt;a href=&#34;http://dcurt.is/yours-vs-mine&#34;&gt;Yours vs. Mine&lt;/a&gt;. It dealt with wording in user interfaces, and the argument he made was that &lt;em&gt;my&lt;/em&gt; refers to something that is an extension of myself, whereas &lt;em&gt;your&lt;/em&gt; more closely resembles another social being that we can communicate with. In other words, the difference was wheter or not we consider the user interface to be a part of us or simply something we communicate with, and in his opinion (spoiler alert!) &amp;ldquo;Your stuff&amp;rdquo; would be the way to go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adding a disk to DNS-320 with fun_plug</title>
      <link>https://blog.brannstrom.io/2013/02/adding-a-disk-to-dns-320-with-fun_plug/</link>
      <pubDate>Tue, 12 Feb 2013 18:55:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2013/02/adding-a-disk-to-dns-320-with-fun_plug/</guid>
      <description>&lt;p&gt;Since about a year back, all our media at home is stored on a NAS (D-Link DNS-320), which simplifies things since we are laptop-based. I originally put in an old 1 TB drive I had lying around, but as you might expect it finally filled up.&lt;/p&gt;&#xA;&lt;p&gt;Since the DNS-320 has two slots, I bought a Western Digital Red 3TB SATA III, which should fill our needs at home for some time. One of the nice things with getting a NAS was that adding a disk should be pretty much plug-and-play. Thus I inserted the new drive, entered the web interface for the NAS and begun formatting. Initialization went fast, but then progress halted at 0% when formatting. I aborted and retried, but to no avail.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why I Use Firefox</title>
      <link>https://blog.brannstrom.io/2012/08/why-i-use-firefox/</link>
      <pubDate>Sun, 26 Aug 2012 17:45:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2012/08/why-i-use-firefox/</guid>
      <description>&lt;p&gt;I think &lt;a href=&#34;https://www.google.com/chrome/&#34;&gt;Google Chrome&lt;/a&gt; is a great browser and I use it on a regular basis. At the moment, I think their built-in developer tools are superior to those in &lt;a href=&#34;http://www.mozilla.org/en-US/firefox/fx/#desktop&#34;&gt;Mozilla Firefox&lt;/a&gt; and the process sandboxing works better. That said, Firefox has the killer Awesomebar which kicks Google&amp;rsquo;s Omnibar out of the water and the ecosystem of extensions is a strong card for Mozilla. In my opinion these two browsers, which are the common choices for people especially in tech, are head-to-head when it comes to features.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Open-sourcing production code</title>
      <link>https://blog.brannstrom.io/2012/08/open-sourcing-production-code/</link>
      <pubDate>Sat, 18 Aug 2012 13:08:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2012/08/open-sourcing-production-code/</guid>
      <description>&lt;p&gt;One of my very first projects that actually made it to real users was &lt;a href=&#34;http://skivsamlingen.se/&#34;&gt;Skivsamlingen&lt;/a&gt;, developed in the dawn of my PHP days. Skivsamlingen means The Record Collection, and is not surprisingly a web application where users can list all their records.&lt;/p&gt;&#xA;&lt;p&gt;The size of the target group has admittedly decreased somewhat since the era of iTunes, Spotify and Grooveshark, among others, begun, but there are still active users on the site. These users are the reason I felt I had to clear my conscience for barely working on the site for many years. Possible solutions are to make time for the site, take it down, or simply make other people work on it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spotify Apps 101</title>
      <link>https://blog.brannstrom.io/2012/08/spotify-apps-101/</link>
      <pubDate>Thu, 09 Aug 2012 17:14:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2012/08/spotify-apps-101/</guid>
      <description>&lt;p&gt;This weekend, the &lt;a href=&#34;http://www.wayoutwest.se/en&#34;&gt;Way Out West festival&lt;/a&gt; is held in &lt;a href=&#34;http://en.wikipedia.org/wiki/Slottsskogen&#34;&gt;Slottsskogen&lt;/a&gt; in Göteborg. I had originally not planned to go, but when I heard that there was a &lt;a href=&#34;http://wowhack.splashthat.com/&#34;&gt;hackathon&lt;/a&gt; - which in itself is a tempting prospect - where you got a free pass just for participating, my plans changed.&lt;/p&gt;&#xA;&lt;p&gt;I teamed up with &lt;a href=&#34;http://twitter.com/rickard_olsson&#34;&gt;@rickard_olsson&lt;/a&gt;, &lt;a href=&#34;http://twitter.com/jensljungblad&#34;&gt;@jensljungblad&lt;/a&gt; and &lt;a href=&#34;https://twitter.com/_sandrahansson&#34;&gt;@_sandrahansson&lt;/a&gt; with the goal of creating our first Spotify app. In 24 hours we did just that, and the result was a music quiz app called Quizify (the number of apps named -ify was staggering). It was a great hack and we hope to get the chance again next year!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Going offline</title>
      <link>https://blog.brannstrom.io/2012/08/going-offline/</link>
      <pubDate>Sat, 04 Aug 2012 19:11:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2012/08/going-offline/</guid>
      <description>&lt;p&gt;Yesterday I got back from a five-day trip to neighboring Denmark. It was a welcome break from my thesis work, but it turned out to also be a break from something more time consuming than that.&lt;/p&gt;&#xA;&lt;p&gt;We had rented a house in &lt;a href=&#34;http://en.wikipedia.org/wiki/Vorup%C3%B8r&#34;&gt;Vorupør&lt;/a&gt;, population 606, in the Thy National Park. It is not the end of the world, and we could of course have picked up a Danish newspaper whenever we went grocery shopping, and had World War 3 begun we would most likely have heard about it from the locals, but as it was we stayed pretty much in the dark when it came to anything outside Thy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From Wordpress to Octopress</title>
      <link>https://blog.brannstrom.io/2012/07/from-wordpress-to-octopress/</link>
      <pubDate>Mon, 23 Jul 2012 21:45:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2012/07/from-wordpress-to-octopress/</guid>
      <description>&lt;p&gt;I thought I would give a quick summary of how I went about migrating from Wordpress to Octopress. It was, in face, a much smoother process than I had expected.&lt;/p&gt;&#xA;&lt;p&gt;To avoid manually converting all my posts I used &lt;a href=&#34;https://github.com/thomasf/exitwp&#34;&gt;exitwp&lt;/a&gt;. Okay, admittedly I was actually in the process of doing this manually when I was hit by the realization that there must be a better way, as it turned out there was. I use Mac OS X Lion which comes bundled with Python, which is neat considering exitwp is written in Python. If you don&amp;rsquo;t use Mac, you&amp;rsquo;re on your own for this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lazy Sunday</title>
      <link>https://blog.brannstrom.io/2012/07/lazy-sunday/</link>
      <pubDate>Sat, 21 Jul 2012 13:15:00 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2012/07/lazy-sunday/</guid>
      <description>&lt;p&gt;I made a startling realization the other day. I&amp;rsquo;m lazy. Sure, I work and study just as much as I should during the weeks, I exercise about four times a week and I walk my dog. It is not that kind of lazy. It&amp;rsquo;s in my admittedly well-earned spare time that I am lazy.&lt;/p&gt;&#xA;&lt;p&gt;As university, and later work, started taking up more time, I made up for it by doing less when I am not working. Don&amp;rsquo;t get me wrong, I belong to the group of people that believe that &lt;a href=&#34;http://www.alternet.org/visions/154518/why_we_have_to_go_back_to_a_40-hour_work_week_to_keep_our_sanity?page=entire&#34;&gt;overtime is unproductive&lt;/a&gt; and even &lt;a href=&#34;http://www.npr.org/blogs/health/2012/01/26/145912523/working-long-hours-can-be-depressing-truly&#34;&gt;hurtful in the long haul&lt;/a&gt; - all hail the 40 hour week! What I mean is that spare time does not have to equal ass-on-couch-time.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Xdebug in Netbeans on a MAMP setup</title>
      <link>https://blog.brannstrom.io/2011/04/xdebug-in-netbeans-on-a-mamp-setup/</link>
      <pubDate>Sat, 09 Apr 2011 13:07:21 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2011/04/xdebug-in-netbeans-on-a-mamp-setup/</guid>
      <description>&lt;p&gt;I have been doing a lot of PHP development for my bachelor thesis over the last few months. We are working in a team of six and it is not always trivial to keep track of all the changes to the code, and debugging code you are not all that familiar with is a pain in the ass. I am coding in &lt;a href=&#34;http://netbeans.org/index.html&#34;&gt;Netbeans 7.0 beta 2&lt;/a&gt; with MAMP Pro 1.9 taking care of the server. To resolve my debugging issue I decided it was time I got Xdebug into the mix. It should also be noted that I&amp;rsquo;m using PHP 5.3, but I believe all of this should work just the same for 5.2 if you just replace the version number wherever it appears.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Co-editing using PlainText / Dropbox</title>
      <link>https://blog.brannstrom.io/2011/01/co-editing-using-plaintext-dropbox/</link>
      <pubDate>Sat, 01 Jan 2011 23:39:21 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2011/01/co-editing-using-plaintext-dropbox/</guid>
      <description>&lt;p&gt;Happy new year! Over the last six months I&amp;rsquo;ve become the proud owner of both an iPhone and an iPad. Indeed, the fanboy accusations are getting hard to dismiss. Anyhow, my fiancée also got an iPhone and I thought I should do something useful with that.&lt;/p&gt;&#xA;&lt;p&gt;I guess most people have heard of the amazing (and free!) &lt;a href=&#34;https://www.dropbox.com/referrals/NTkzNjAwMDk5?src=global0&#34;&gt;Dropbox&lt;/a&gt;. In short, it is a file sharing service that integrates directly with your file system. Simply drop a file into the Dropbox folder and - wham! - you can now access it via the web, a mobile application or another computer, or share files with your friends and family. Other applications can utilize this great feature, and one of those is &lt;a href=&#34;http://www.hogbaysoftware.com/products/plaintext&#34;&gt;PlainText&lt;/a&gt;. It is an iOS text-editing application that syncs all files using Dropbox.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Empty inbox brings peace of mind</title>
      <link>https://blog.brannstrom.io/2010/08/empty-inbox-brings-peace-of-mind/</link>
      <pubDate>Wed, 04 Aug 2010 20:35:59 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/08/empty-inbox-brings-peace-of-mind/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s cut the crap: I&amp;rsquo;m a fan-boy, plain and simple. I&amp;rsquo;m an Apple fan-boy and I&amp;rsquo;m a Google fan-boy. I love the simplicity of the products they create, and for the most part everything just works. I&amp;rsquo;ve been using Gmail since 2004 when it was still in closed beta and have never felt the need to use anything else. Somehow though, it took me almost six years to realize I was using it all wrong.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Form protection revisited</title>
      <link>https://blog.brannstrom.io/2010/07/form-protection-revisited/</link>
      <pubDate>Fri, 02 Jul 2010 23:44:16 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/07/form-protection-revisited/</guid>
      <description>&lt;p&gt;About a month ago I wrote a post on how to protect your forms from double posting and CSRF attacks using nonce words in CodeIgniter. I realized pretty soon though that the code I posted wasn&amp;rsquo;t as smooth or, in fact, as functional as it should be. So to save my own ass I though I should share this update with you guys.&lt;/p&gt;&#xA;&lt;p&gt;I would like to put this in a less shameful way, but the fact is the library didn&amp;rsquo;t do what it was supposed to do. On every page refresh a new nonce was created, which indeed hindered an attempt to simply press the back button and resubmit. Problem was that if you submitted yet another time after the error message about the invalid nonce (well, you probably should word it differently to the end user) was displayed, the nonce passed validation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PHP vs. JavaScript</title>
      <link>https://blog.brannstrom.io/2010/06/php-vs-javascript/</link>
      <pubDate>Wed, 30 Jun 2010 19:45:42 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/php-vs-javascript/</guid>
      <description>&lt;p&gt;I love the rapid development of the technological wonder that is the Internet and its standards. The early nineties brought us static HTML pages which, but as time moved on more and more processing took place at the servers with a variety of server-side languages. However during the last few years much processing has been transferred to the browser using Javascript. This has meant that the majority of all browsers have gotten along for the ride and spent a lot of time speeding up the execution of these scripts. Out of curiosity I decided to compare the time it takes to perform a few standard actions in both JS and PHP.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What&#39;s coming in Firefox.next?</title>
      <link>https://blog.brannstrom.io/2010/06/whats-coming-in-firefox-next/</link>
      <pubDate>Wed, 23 Jun 2010 16:55:09 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/whats-coming-in-firefox-next/</guid>
      <description>&lt;p&gt;I guess most of you might have seen the mockups for the UI redesign planned for Firefox (&lt;a href=&#34;https://wiki.mozilla.org/Firefox/4.0_Mac_Theme_Mockups&#34;&gt;Mac&lt;/a&gt;, &lt;a href=&#34;https://wiki.mozilla.org/Firefox/4.0_Windows_Theme_Mockups&#34;&gt;Windows&lt;/a&gt; and &lt;a href=&#34;https://wiki.mozilla.org/Firefox/4.0_Linux_Theme_Mockups&#34;&gt;Linux&lt;/a&gt;). It&amp;rsquo;s about time something was done about it, not because it&amp;rsquo;s currently ugly per se, just not as good-looking as the opposition. I though I&amp;rsquo;d give you a break-down of some other changes we can look forward to in the next milestone for the best browser in the world (now pay up Mozilla!).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t forget me, cookie!</title>
      <link>https://blog.brannstrom.io/2010/06/dont-forget-me-cookie/</link>
      <pubDate>Sat, 12 Jun 2010 18:34:48 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/dont-forget-me-cookie/</guid>
      <description>&lt;p&gt;Most websites where authentication is required to perform certain actions have the option of remembering your credentials. Convenient, indeed, but bypassing the user input phase of the login means some other type of identifier needs to be stored locally which could pose a severe security risk.&lt;/p&gt;&#xA;&lt;p&gt;My first attempt at this - and please remember this was a long, looong time ago, in a simpler time - was to simply store the username and password in a cookie. Yes, that&amp;rsquo;s right, store the user&amp;rsquo;s credentials in plain text. The security concerns are obvious, a simple cookie theft would give the attacker everything he needs without having to think twice, and as if that wasn&amp;rsquo;t enough there is a high risk that the same credentials can be used to access other sites since very few people actually use different passwords for every site they register on. Luckily this site never reached an audience..&lt;/p&gt;</description>
    </item>
    <item>
      <title>No-nonsense protection using a nonce</title>
      <link>https://blog.brannstrom.io/2010/06/no-nonsense-protection-using-a-nonce/</link>
      <pubDate>Sun, 06 Jun 2010 18:44:50 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/no-nonsense-protection-using-a-nonce/</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; A new and improved version of this extension can be found in my post &lt;a href=&#34;http://blog.streambur.se/2010/07/form-protection-revisited/&#34;&gt;Form protection revisited&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;In a web application for record collectors I wrote a few years ago I recently had to deal with users who added the same record hundreds of times. I did use the PRG, or Post/Redirect/Get, pattern which means that you always redirect the user after a post request so that a simple reload won&amp;rsquo;t resubmit the same data. This prevents users from mistakenly resubmitting, but by pressing the back-button the problem re-emerges. The solution is called a &lt;em&gt;nonce&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple date validation</title>
      <link>https://blog.brannstrom.io/2010/06/simple-date-validation/</link>
      <pubDate>Thu, 03 Jun 2010 17:19:47 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/simple-date-validation/</guid>
      <description>&lt;p&gt;Date validation usually means regular expressions, and regular expressions usually means headache. All in all, I do think that PHP&amp;rsquo;s date handling is pretty sweet, but native validation is still lacking. With PHP 5.3 though, we are one step closer thanks to a new function with the infinitely long name &lt;a href=&#34;http://php.net/manual/en/function.date-parse-from-format.php&#34;&gt;date_parse_from_format&lt;/a&gt;. I&amp;rsquo;m going to show you how it can be used to create a validation function for any PHP date format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fallback and relax</title>
      <link>https://blog.brannstrom.io/2010/06/fallback-and-relax/</link>
      <pubDate>Wed, 02 Jun 2010 15:32:21 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/fallback-and-relax/</guid>
      <description>&lt;p&gt;I recently finished a project for a client in CodeIgniter where a large part of  the site was made up of static pages. The obvious approach for this is  to create controllers and methods to load these views, meaning that the method team() in controller Football would load the view views/football/team.php and be done with it.&lt;/p&gt;&#xA;&lt;p&gt;This, no offense, seemed stupid, so I decided to create a fallback controller that would have the sole task of dealing with unmatched requests. In other words, if the current URL can’t be matched to a controller method,  the request will be dispatched to the specified controller. In the example of the client site, this would then load the view who&amp;rsquo;s folder structure and filename matched the URL (see Football example above), but it could pretty much be tasked to deal with anything from error logging to paying your taxes.﻿&lt;/p&gt;</description>
    </item>
    <item>
      <title>Suffice to say suffix</title>
      <link>https://blog.brannstrom.io/2010/06/suffice-to-say-suffix/</link>
      <pubDate>Tue, 01 Jun 2010 20:19:24 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/suffice-to-say-suffix/</guid>
      <description>&lt;p&gt;A disturbance of mine in CodeIgniter is when I want a controller named the same as a model. The standard way of solving this is calling your models for example UsersModel, Users_m, or the likes. This has the unpleasant side effect of making your code look fugly. The other option would be to do the same to the application controllers, but this would affect the URL instead of the code which is probably worse in the end since that would affect the end-user. So what to do?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Greetings human</title>
      <link>https://blog.brannstrom.io/2010/06/greetings-human/</link>
      <pubDate>Tue, 01 Jun 2010 11:53:01 +0000</pubDate>
      <guid>https://blog.brannstrom.io/2010/06/greetings-human/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m no fan of these first posts so I&amp;rsquo;ll try to be brief. I just wish to tell you what this blog is, and also what it is not. Come to think of it, I might actually use this as my legal contract. Well, perhaps not..&lt;/p&gt;&#xA;&lt;p&gt;As one can read on the About page, I&amp;rsquo;m a student and freelancer. In other words, this means that feeling clueless, messing things up and solving problems are everyday things for me. Most of the time it&amp;rsquo;s solving things, and more often than not it has to do with computers. This is the place where I share these experiences, hopefully either getting help or helping someone else.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
