<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"
        xmlns:content="http://purl.org/rss/1.0/modules/content/"
        xmlns:wfw="http://wellformedweb.org/CommentAPI/"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:atom="http://www.w3.org/2005/Atom"
        xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
        xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
        >
<channel>
  <title>asgaard</title>
  <description></description>
  <link>https://blog.asgaard.co.uk/2015</link>
  <lastBuildDate>Tue, 12 May 26 17:17:40 +0000</lastBuildDate>
  <language>en</language>
  <count>9</count>
  <offset>0</offset>
      <item>
    <title>Who is Satoshi Nakamoto?</title>
    <link>https://blog.asgaard.co.uk/2015/12/09/who-is-satoshi-nakamoto</link>
    <pubDate>Wed, 09 Dec 15 18:20:28 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/12/09/who-is-satoshi-nakamoto</guid>
    <description><![CDATA[
<p>
I&#039;m going to call it now: Dr Craig Wright, the Australian who&#039;s been &#039;unmasked&#039; by Wired, is not Satoshi Nakamoto, the creator of Bitcoin.
<p>
Satoshi is a man (or woman, or child, or dog, or extra terrestrial) who clearly shuns the limelight and has invested great amounts of effort in being off the radar. Dr Wright doesn&#039;t fit this profile at all. He has done the standard publicity generating thing of being just secretive enough that everyone pays attention to him, which perfectly fits his professional interests of being CEO and founder of DeMorgan Ltd, a &quot;pre-IPO&quot; cryptocurrency firm. With publicity comes money.
<p>
The Wired article seems pretty compelling until about half way through when they admit that at least some of their best evidence has definitely been doctored. Dr. Wright supposedly made some cryptic hints in posts from 2008 that he was at the centre of an upcoming cryptocurrency (Bitcoin was released in 2009), but it turns out that these hints were actually inserte[...]]]></description>
    <content:encoded><![CDATA[
<p>
I&#039;m going to call it now: Dr Craig Wright, the Australian who&#039;s been &#039;unmasked&#039; by Wired, is not Satoshi Nakamoto, the creator of Bitcoin.
<p>
Satoshi is a man (or woman, or child, or dog, or extra terrestrial) who clearly shuns the limelight and has invested great amounts of effort in being off the radar. Dr Wright doesn&#039;t fit this profile at all. He has done the standard publicity generating thing of being just secretive enough that everyone pays attention to him, which perfectly fits his professional interests of being CEO and founder of DeMorgan Ltd, a &quot;pre-IPO&quot; cryptocurrency firm. With publicity comes money.
<p>
The Wired article seems pretty compelling until about half way through when they admit that at least some of their best evidence has definitely been doctored. Dr. Wright supposedly made some cryptic hints in posts from 2008 that he was at the centre of an upcoming cryptocurrency (Bitcoin was released in 2009), but it turns out that these hints were actually inserted into older posts in 2013, so actually look more like attempts to rewrite history rather than premonitions.
<p>
One of the points about Dr Wright inviting replies using a public key which is associated elsewhere to &quot;satoshi<strong>n</strong>@vistomail.com&quot; address is also not as interesting as it first seems, because there is no record of Satoshi ever using that address. Satoshi instead used &quot;satoshi@vistomail.com&quot;. This itself looks like intentional impersonation.
<p>
What we have here is a volume of circumstantial evidence, a lot of which can be faked relatively easily (update: Vice has investigated and it looks like some of it is faked: <a href="http://motherboard.vice.com/read/satoshis-pgp-keys-are-probably-backdated-and-point-to-a-hoax).">http://motherboard.vice.com/read/satoshis-pgp-keys-are-probably-backdated-and-point-to-a-hoax).</a> The evidence never quite provides the definitive proof you might wish for, and indeed, since we are dealing with cryptographic identity, could legitimately ask for. If Satoshi wanted to reveal himself he could do it with a cryptographically signed message. 
<p>
It&#039;s clear that Dr Wright wants people to believe he is Satoshi, but it is entirely unclear that Satoshi wants people to think he is Dr Wright.]]></content:encoded>
  </item>
      <item>
    <title>The new Yahoo Messenger is a mistake for Yahoo</title>
    <link>https://blog.asgaard.co.uk/2015/12/06/the-new-yahoo-messenger-is-a-mistake-for-yahoo</link>
    <pubDate>Sun, 06 Dec 15 12:01:52 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/12/06/the-new-yahoo-messenger-is-a-mistake-for-yahoo</guid>
    <description><![CDATA[
<p>
Yahoo is a case study in how to do everything wrong by not caring about what your users want. A lot of tech companies make similar mistakes, but Yahoo seems to be the only one with enough capital to do it repeatedly. I&#039;ve always found instant messengers interesting ever since I wrote a spam filter for Pidgin quite some years ago, so my ears perked up when I learnt that Yahoo is re-launching Yahoo Messenger.
<p>
With the rejuvenation of Yahoo Messenger, Yahoo is now playing catchup with a product that they&#039;ve had for 17 years. They&#039;ve largely ignored it for the past five, so their position somewhere at the lower end of the market is entirely their own fault. The way they seek to reassert their position is to appeal to new users, who are almost certainly already using a comparable service, while telling existing users they must change to fit the new vision. This will not work.
<p>
This may be a surprise to most tech hipsters, but many people still use Yahoo Messenger (and there is demand for desktop [...]]]></description>
    <content:encoded><![CDATA[
<p>
Yahoo is a case study in how to do everything wrong by not caring about what your users want. A lot of tech companies make similar mistakes, but Yahoo seems to be the only one with enough capital to do it repeatedly. I&#039;ve always found instant messengers interesting ever since I wrote a spam filter for Pidgin quite some years ago, so my ears perked up when I learnt that Yahoo is re-launching Yahoo Messenger.
<p>
With the rejuvenation of Yahoo Messenger, Yahoo is now playing catchup with a product that they&#039;ve had for 17 years. They&#039;ve largely ignored it for the past five, so their position somewhere at the lower end of the market is entirely their own fault. The way they seek to reassert their position is to appeal to new users, who are almost certainly already using a comparable service, while telling existing users they must change to fit the new vision. This will not work.
<p>
This may be a surprise to most tech hipsters, but many people still use Yahoo Messenger (and there is demand for desktop instant messaging applications). Maybe not as many people use it as they did 5 years ago (at least in part due to Yahoo&#039;s neglect of the product), and maybe not as many use it as use the newer mobile based messengers, but there is a core user base who use Yahoo Messenger because it remains convenient and useful.
<p>
The existing Yahoo Messenger distinguishes itself from most modern instant messengers by being a well featured, stable, and (reasonably) resource light <em>desktop</em> application. Web applications are often useful, but sometimes a desktop application is better and an instant messenger is one obvious place, because it easily ties the on/off or idle state of your PC to your availability, and real time messages come through passively while not getting lost in the noise of your other browser tabs. Desktop based social apps are still a good and sensible way to compartmentalise your life and control your own availability.
<p>
The new Yahoo Messenger is not the same product as it was, and does not solve the same use case. It is different in that it:
<p>
1. It doesn&#039;t retain your old contact list. I can&#039;t overstate how stupid this is. When Gmail next releases a new major version, I don&#039;t want to sign in and find out all my existing emails and contacts no longer exist. When Facebook releases its next major version, nobody wants to sign in and find all their friends have vanished from their page. Dumping the old contact list is simply idiotic - most people will sign in to an empty page, say &quot;oh&quot;, and close it. It no longer works for them. This is astonishingly stupid.
<p>
2. Is not a desktop application; it&#039;s web and mobile only, which will interfere with how existing users want to use - mostly they don&#039;t want to use it - they just want it to be there when they&#039;re sat at their PC.
<p>
3. Is not an instant messenger. This is crucial. With a very minor UI change, the app is no longer designed for real-time conversations, it is designed to broadcast a message to a person and hope they pick it up and reply at some point in the near future. This is evident in the fact they don&#039;t provide an online status for contacts, so you can&#039;t choose to talk to someone that you know is available. You have to guess. And wait. It has more in common with email or text message. This represents a fundamental change in the dynamic of the users&#039; interaction with each other, and so existing user&#039;s expectations no longer match what they experience.
<p>
Yahoo&#039;s strategy here is presumably to poach market-share from other similar mobile messaging apps. There are a lot of other mobile messaging apps, so it&#039;s a big market with lots of potential users.
<p>
However, they are late into the game and won&#039;t succeed in displacing any of the existing players because the new Yahoo Messenger doesn&#039;t have any strongly compelling advantages (gimmicky features aside, it doesn&#039;t make it easier to communicate with your friends), so Yahoo provides no real incentive to move away from other similar apps.
<p>
With this comes the seed problem - they have no apparent strategy to seed an initial user base. Seeding a user base is a difficult chicken and egg problem - nobody uses your app because nobody else uses it - but Yahoo is sitting on a huge advantage here which they are squandering: they already have existing users! Perhaps they are relying on their existing users migrating and re-establishing their own contact lists. Yahoo will be very disappointed if this is the plan.
<p>
I don&#039;t disagree that Yahoo Messenger is in desperate need of some kind of relaunch, but Yahoo is going about this all the wrong way. What they need to do is modernise the existing messenger while catering to existing users&#039; requirements, not to change its focus to a different use case. They need to insert status indicators; an almost trivial change to ensure that the app remains focused on real time communication, and they need to make the existing desktop client at least basically compatible (for sending/receiving messages) with the new app. This would give them a significant stable user base at day 0, and for the future, those users need to be able to update to the new version and continue to use it with roughly the same pattern as they did the old version. 
<p>
The new app will alienate their existing users while failing to acquire more. The end result of this is that Skype will see a short term bump to their sign up figures as existing Yahoo Messenger users are forced to migrate, while in two to three years time, Yahoo will have even less presence instant messaging.]]></content:encoded>
  </item>
      <item>
    <title>Fallout, Bethesda, and Vsync</title>
    <link>https://blog.asgaard.co.uk/2015/11/10/fallout-bethesda-and-vsync</link>
    <pubDate>Tue, 10 Nov 15 20:27:03 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/11/10/fallout-bethesda-and-vsync</guid>
    <description><![CDATA[
<p>
With Fallout 4 making an impact...
<p>
I tried to play New Vegas again recently but I only got a few hours in before ending up feeling that putting up with the mouse controls was more effort than it was worth. The problem is Vsync. Vsync delays rendering frames until they sync with your monitor&#039;s refresh rate, which causes the perception of lag on your input. I don&#039;t know why this is a problem when a simple frame limiter (e.g. fps_max in Source engine games) works fine, but I would guess that a frame limiter puts the game to sleep so it discards your input and therefore only responds to up to date mouse/keyboard events, whereas vsync lets the game run as normal but it delays rendering frames, so the display on your screen is slightly out of date.
<p>
Anyway, the point is that it feels awful enough that I don&#039;t play games which force vsync. Skyrim was exactly the same, but with the added bonus that if you hacked vsync to be off, the frame rate increased and the physics engine couldn&#039;t deal with[...]]]></description>
    <content:encoded><![CDATA[
<p>
With Fallout 4 making an impact...
<p>
I tried to play New Vegas again recently but I only got a few hours in before ending up feeling that putting up with the mouse controls was more effort than it was worth. The problem is Vsync. Vsync delays rendering frames until they sync with your monitor&#039;s refresh rate, which causes the perception of lag on your input. I don&#039;t know why this is a problem when a simple frame limiter (e.g. fps_max in Source engine games) works fine, but I would guess that a frame limiter puts the game to sleep so it discards your input and therefore only responds to up to date mouse/keyboard events, whereas vsync lets the game run as normal but it delays rendering frames, so the display on your screen is slightly out of date.
<p>
Anyway, the point is that it feels awful enough that I don&#039;t play games which force vsync. Skyrim was exactly the same, but with the added bonus that if you hacked vsync to be off, the frame rate increased and the physics engine couldn&#039;t deal with it. Tying game speed to frame rate is extraordinary in 2015 in that it&#039;s so obviously wrong and not very difficult to implement correctly.
<p>
According to <a href='https://www.reddit.com/r/Games/comments/3s9jmw/fallout_4_simulation_speed_tied_to_framerate/' target='_blank' rel='external'>this thread</a> on Reddit, Fallout 4 has the same problem, which is a shame but not really a surprise.]]></content:encoded>
  </item>
      <item>
    <title>CS:GO competitive mode experiences</title>
    <link>https://blog.asgaard.co.uk/2015/10/03/cs-go-competitive-mode-experiences</link>
    <pubDate>Sat, 03 Oct 15 15:14:43 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/10/03/cs-go-competitive-mode-experiences</guid>
    <description><![CDATA[
<p>
I have played a lot of CS lately and recently decided to try competitive mode.
<p>
The first game was easy (we won 16-2), the second game bumped me up into playing with higher ranks and we comfortably won (16-9), and the third game bumped me up into playing with four double AK ranks on my team and we narrowly lost (16-14) with me being on about 1:1 K:D and middle of the scoreboard.
<p>
The first and second games were fine, but unlike the first two games, in the last we weren&#039;t winning comfortably and that brings out problems in less mature team-mates. Our top player was the very definition of &#039;toxic&#039;, and ironically we probably lost at least one round (and therefore the whole game) because he was distracting everyone ranting about how it wasn&#039;t his fault that he just got killed.
<p>
Overall it wasn&#039;t an enjoyable way to spend an hour.
<p>
I think the main problem is that games can last upwards of an hour and you get penalised if you leave early, so without knowing in advance who you are going t[...]]]></description>
    <content:encoded><![CDATA[
<p>
I have played a lot of CS lately and recently decided to try competitive mode.
<p>
The first game was easy (we won 16-2), the second game bumped me up into playing with higher ranks and we comfortably won (16-9), and the third game bumped me up into playing with four double AK ranks on my team and we narrowly lost (16-14) with me being on about 1:1 K:D and middle of the scoreboard.
<p>
The first and second games were fine, but unlike the first two games, in the last we weren&#039;t winning comfortably and that brings out problems in less mature team-mates. Our top player was the very definition of &#039;toxic&#039;, and ironically we probably lost at least one round (and therefore the whole game) because he was distracting everyone ranting about how it wasn&#039;t his fault that he just got killed.
<p>
Overall it wasn&#039;t an enjoyable way to spend an hour.
<p>
I think the main problem is that games can last upwards of an hour and you get penalised if you leave early, so without knowing in advance who you are going to be playing with, there&#039;s a risk of locking yourself into an unenjoyable game for the next hour. If you only have time to play one competitive game every couple of days, this is far too much risk to make it a good use of time. You could alleviate this risk somewhat by having a shorter competitive mode which is first to 8 instead of first to 16 (which I think would be a lot better for older people anyway...).
<p>
So at the moment... no real desire to play more competitive.]]></content:encoded>
  </item>
      <item>
    <title>CSGO Lounge has a &#039;No Winnings&#039; problem</title>
    <link>https://blog.asgaard.co.uk/2015/09/05/csgo-lounge-has-a-no-winnings-problem</link>
    <pubDate>Sat, 05 Sep 15 20:34:21 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/09/05/csgo-lounge-has-a-no-winnings-problem</guid>
    <description><![CDATA[
<p>
CSGO Lounge is a website on which you can bet virtual items on the results of CS:GO games.
<p>
It has a major flaw in that you can win, but end up with no winnings. This has happened to me a few times and the <a href='https://steamcommunity.com/groups/csgolounge/discussions#'>forums</a> are full of people complaining their (relatively large) bets won but returned no winnings.
<p>
CSGOL justifies this by saying the entire bet is zero sum, and as items can&#039;t be broken down into smaller units, they have to fit items to winnings as best as possible to the odds so there will be some &#039;rounding error&#039; and some people will lose out by their winnings being undervalued according to the odds CSGOL gave when they made the bet.
<p>
I strongly suspect that this is a bit misleading and the main cause of the error is not the inability to break down the items, but the difficulty in solving the distribution problem accurately. 
<p>
The problem of distributing winnings can be stated something like: Given that you have a set of items with individual value, and a set of people who each demand a [...]]]></description>
    <content:encoded><![CDATA[
<p>
CSGO Lounge is a website on which you can bet virtual items on the results of CS:GO games.
<p>
It has a major flaw in that you can win, but end up with no winnings. This has happened to me a few times and the <a href='https://steamcommunity.com/groups/csgolounge/discussions#'>forums</a> are full of people complaining their (relatively large) bets won but returned no winnings.
<p>
CSGOL justifies this by saying the entire bet is zero sum, and as items can&#039;t be broken down into smaller units, they have to fit items to winnings as best as possible to the odds so there will be some &#039;rounding error&#039; and some people will lose out by their winnings being undervalued according to the odds CSGOL gave when they made the bet.
<p>
I strongly suspect that this is a bit misleading and the main cause of the error is not the inability to break down the items, but the difficulty in solving the distribution problem accurately. 
<p>
The problem of distributing winnings can be stated something like: Given that you have a set of items with individual value, and a set of people who each demand a total value, organise the item set into subsets such that every item belongs to exactly one subset, and each subset can be uniquely allocated to exactly one person.
<p>
This sounds like a harder version of the <a href='https://en.wikipedia.org/wiki/Subset_sum_problem'>subset sum problem</a>, which is already NP-complete. In layman&#039;s terms, this means that it&#039;s really hard to solve because it requires infeasible amounts of CPU power to do it. With few items you can use brute force algorithms to try all combinations and choose the best one, but as the number of items grows larger it will take thousands of years to run the fastest correct algorithm.
<p>
Therefore to get a solution reasonably quickly you use probabilistic algorithms that hopefully give you a decent solution in x% of cases.
<p>
Now, we don&#039;t know what algorithm CSGO Lounge uses, but we do know that the overall website is pretty amateurish. Making the website work well is pretty simple and any semi-professional software developer could do it. Solving the distribution problem is hard and requires much more specialised computer science/maths skills. It would be very surprising if they were bad at the easy part and good at the hard part.
<p>
More likely, their redistribution algorithm is bad and it can&#039;t give sensible results for the amount of volume the site gets. It&#039;s also worth noting that there appears to be no public audit trail for how the items are distributed, so we don&#039;t actually know that the bet really is zero-sum and that CSGOLounge really is allocating every item it receives.
<p>
Either way, the site is currently not fit for purpose and I strongly recommend against using it. ]]></content:encoded>
  </item>
      <item>
    <title>GA-Z77-D3H frozen boot screen with NVIDIA GTX 750 Ti</title>
    <link>https://blog.asgaard.co.uk/2015/06/21/ga-z77-d3h-frozen-boot-screen-with-nvidia-gtx-750</link>
    <pubDate>Sun, 21 Jun 15 12:07:06 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/06/21/ga-z77-d3h-frozen-boot-screen-with-nvidia-gtx-750</guid>
    <description><![CDATA[
<p>
After upgrading my graphics card to an NVIDIA GTX 750 Ti(not really intentionally, the previous one died), I found that my GA-Z77-D3H motherboard (with BIOS version F13) froze on the boot screen.
<p>
It turns out the answer to this is quite simple: upgrade the BIOS. The motherboard has a built in graphics adapter and VGA output, so if you need to you can use that to boot your machine up, but you&#039;ll first have to remove anything in the PCI-E slot.
<p>
Then visit <a href='http://www.gigabyte.com/products/product-page.aspx?pid=4140#utility'>Gigabyte&#039;s website</a> and download and run @BIOS, choose to &quot;update BIOS from gigabyte server&quot; and it should find the most recent stable version. For me that&#039;s version F22.
<p>
<img src='/assets/img/2015-06-21/gigabyte-@bios.png' class='width-100 center no-touch' alt=''/>
<p>
After completing that it should boot correctly with the new card.
<p>
Note that:
<br>
1. Updating your BIOS is slightly risky in that if it goes wrong your motherboard won&#039;t might not work anymore, so you should only do it if your system really needs it to work correctly.
<br>
2. After updating it will probably have reset all your BIOS settings, so if you&#039;ve chan[...]]]></description>
    <content:encoded><![CDATA[
<p>
After upgrading my graphics card to an NVIDIA GTX 750 Ti(not really intentionally, the previous one died), I found that my GA-Z77-D3H motherboard (with BIOS version F13) froze on the boot screen.
<p>
It turns out the answer to this is quite simple: upgrade the BIOS. The motherboard has a built in graphics adapter and VGA output, so if you need to you can use that to boot your machine up, but you&#039;ll first have to remove anything in the PCI-E slot.
<p>
Then visit <a href='http://www.gigabyte.com/products/product-page.aspx?pid=4140#utility'>Gigabyte&#039;s website</a> and download and run @BIOS, choose to &quot;update BIOS from gigabyte server&quot; and it should find the most recent stable version. For me that&#039;s version F22.
<p>
<img src='/assets/img/2015-06-21/gigabyte-@bios.png' class='width-100 center no-touch' alt=''/>
<p>
After completing that it should boot correctly with the new card.
<p>
Note that:
<br>
1. Updating your BIOS is slightly risky in that if it goes wrong your motherboard won&#039;t might not work anymore, so you should only do it if your system really needs it to work correctly.
<br>
2. After updating it will probably have reset all your BIOS settings, so if you&#039;ve changed your disk boot order don&#039;t be surprised if it boots the wrong one.]]></content:encoded>
  </item>
      <item>
    <title>Bootstrapping (or not) a visual designer</title>
    <link>https://blog.asgaard.co.uk/2015/03/29/bootstrapping-or-not-a-visual-designer</link>
    <pubDate>Sun, 29 Mar 15 14:28:42 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/03/29/bootstrapping-or-not-a-visual-designer</guid>
    <description><![CDATA[
<p>
I worked the previous few years on a project to create a new form of IDE. The IDE itself was not aimed towards programmers, it was more of a drag and drop form of development. I won&#039;t discuss the details or merits of that approach, instead I am going to focus on an interesting consideration we came across in trying to bootstrap such a system to use aspects of itself for its own development, especially when just trying to get to an MVP (minimum viable product) release.
<p>
Imagine that you have a form designer and a properties panel and you&#039;re not far off. As an example, imagine Visual Studio&#039;s Winforms designer was created using Winforms (which some research suggests it is not).
<p>
<img src='/assets/img/2015-03-29/winforms.png' class='width-100 center no-touch' alt=''/>
<p>
In our system, the notion of a form was very important for the user. We chose to implement the form&#039;s properties panel as a form, which is a chicken and egg bootstrapping problem. It&#039;s similar in principle to bootstrapping a compiler, but the realities are very different because a compiler is written by prog[...]]]></description>
    <content:encoded><![CDATA[
<p>
I worked the previous few years on a project to create a new form of IDE. The IDE itself was not aimed towards programmers, it was more of a drag and drop form of development. I won&#039;t discuss the details or merits of that approach, instead I am going to focus on an interesting consideration we came across in trying to bootstrap such a system to use aspects of itself for its own development, especially when just trying to get to an MVP (minimum viable product) release.
<p>
Imagine that you have a form designer and a properties panel and you&#039;re not far off. As an example, imagine Visual Studio&#039;s Winforms designer was created using Winforms (which some research suggests it is not).
<p>
<img src='/assets/img/2015-03-29/winforms.png' class='width-100 center no-touch' alt=''/>
<p>
In our system, the notion of a form was very important for the user. We chose to implement the form&#039;s properties panel as a form, which is a chicken and egg bootstrapping problem. It&#039;s similar in principle to bootstrapping a compiler, but the realities are very different because a compiler is written by programmers for programmers, but in our case our IDE was written by programmers for non-programmers.
<p>
Some big problems came out of this decision, which weren&#039;t obvious until they happened.
<p>
Firstly, the components you expose to the user are initially not interchangeable with the components you need internally, even though they look the same. In a sufficiently advanced system they would be the same, but that only comes about when your system is advanced enough to be able to create large chunks of itself (much more holistically than just an individual entity like a form). Up until that point you must have hard coded behaviour standing in for the bits that your system is not powerful enough to create. This hard coded behaviour was surprisingly divergent, so the code becomes difficult to manage because you are conflating the components you as a developer need and the components your users need. The problems you encounter are all in the code, so development and maintenance and compatibility becomes problematic and time consuming, but the root cause is the spec wants two things to be equal when they are simply not. This is a bootstrapping problem, so it could be solved by keeping the bootstrapping process going on longer, but I don&#039;t really want to go there because you could take a short-cut with a native properties panel and still be able to bootstrap correctly later on.
<p>
Functionality and scope creep is a problem. The form you expose to the user can be quite simple in an MVP, but your own GUI needs to be complex enough to allow the user to interact with its designer. So if you want a context menu, you need to implement a context menu on your users&#039; form. A context menu on a native panel is easy to implement and doesn&#039;t really pose any problems. A context menu on your own representation of a form needs you to implement the notion of a context menu and expose that somehow, which increases the complexity of your requirements and greatly slows you down. In short you are facing problems that need not be there.
<p>
A surprising outcome is the increased difficult in debugging the IDE. Looking through a stack trace while a user&#039;s form is running results in multiple forms in the stack, one of which is the user&#039;s and several of which are your own. This becomes extremely confusing when spending long periods of time paused at a breakpoint trying to visualise your program&#039;s state by jumping up and down the stack. This seems like it should be a secondary consideration, but in reality projects that are hard to debug are projects that are slow to develop. Clear separation is good for debugging.
<p>
Finally, this approach exposes you to performance problems much sooner than you would otherwise need to address them. Suppose a form take 3 seconds to boot up when the user presses &#039;run&#039; due to some overhead in some complex routines. That&#039;s not great, but it&#039;s acceptable because the user doesn&#039;t press &#039;run&#039; very often and they don&#039;t really expect or need it to be instantly responsive; a few seconds is fine. Now suppose every selection mouse click in your designer leads to two forms being rendered in your properties panel - suddenly selection takes 6 seconds, and that&#039;s a dreadful experience for the user, especially when compared to a completely hard coded panel that would fully render in milliseconds. You can solve this, but you shouldn&#039;t have to.
<p>
The running trend here is that everything becomes hard long before it needed to become hard. Although this kind of thing is intellectually interesting, it falls into the &quot;being too clever&quot; category and is directly opposed to getting an MVP up and running.]]></content:encoded>
  </item>
      <item>
    <title>How (not) to write regular expressions</title>
    <link>https://blog.asgaard.co.uk/2015/02/15/how-not-to-write-regular-expressions</link>
    <pubDate>Sun, 15 Feb 15 16:17:07 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/02/15/how-not-to-write-regular-expressions</guid>
    <description><![CDATA[
<p>
A few days ago there was a regular expression building library featured on Hacker News: <a href="https://news.ycombinator.com/item?id=9033146">https://news.ycombinator.com/item?id=9033146</a>
<p>
Its premise is that regular expression syntax is more confusing than using an object oriented method chaining approach.
<p>
The comments are overwhelmingly positive, and the library itself has a lot of attention on GitHub, and I find this strange because using the library appears more complex than just learning regular expression syntax to a fluent level and writing them directly. While something like Linq for regular expressions would be very interesting, this is not it. This seems to fall into the trap that it makes trivial things easy to do and hard things harder, which isn&#039;t very useful.
<p>
Let&#039;s try rewriting a fairly simple PCRE regex to match a doubly quoted string with a backslash escaping scheme into an object oriented construction syntax.
<p>
<pre>/ &quot; 
  ( [^&quot;\\]+ | \\. )* 
  ( &quot; | $ ) 
/ xs</pre>
<p>
It&#039;s not particularly easy to read, but it&#039;s also no[...]]]></description>
    <content:encoded><![CDATA[
<p>
A few days ago there was a regular expression building library featured on Hacker News: <a href="https://news.ycombinator.com/item?id=9033146">https://news.ycombinator.com/item?id=9033146</a>
<p>
Its premise is that regular expression syntax is more confusing than using an object oriented method chaining approach.
<p>
The comments are overwhelmingly positive, and the library itself has a lot of attention on GitHub, and I find this strange because using the library appears more complex than just learning regular expression syntax to a fluent level and writing them directly. While something like Linq for regular expressions would be very interesting, this is not it. This seems to fall into the trap that it makes trivial things easy to do and hard things harder, which isn&#039;t very useful.
<p>
Let&#039;s try rewriting a fairly simple PCRE regex to match a doubly quoted string with a backslash escaping scheme into an object oriented construction syntax.
<p>
<pre>/ &quot; 
  ( [^&quot;\\]+ | \\. )* 
  ( &quot; | $ ) 
/ xs</pre>
<p>
It&#039;s not particularly easy to read, but it&#039;s also not particularly hard. In theory it should be a good candidate for simplification by an alternative construction method. To convert this into a chained construction, after a quick glance at the API docs, I&#039;d expect to write something like this:
<p>
<pre>r.find('&quot;').then(
  r.maybe(
    r.anythingBut(r.find('\\').or('&quot;')).or('\\.')
  ).then(r.find('&quot;').or(r.endOfInput())
)</pre>
<p>
This is hardly an improvement. It doesn&#039;t end up reading anything like normal English because English doesn&#039;t really handle the nesting, so we have swapped the small amount of PCRE syntax clutter for a larger amount of English and OO syntax clutter, which in comparison, makes it extraordinarily hard to scan and get a feel for what the expression actually matches. This would only get worse on genuinely complex expressions, which this one is not. It&#039;s not clear whether the capturing groups are preserved, so we might have to add more clutter for those, and then we&#039;d only end up deeper in a mess if we had to start considering details like lazy vs non-lazy token consumption and explicitly preventing backtracking.
<p>
In summary: regular expressions are useful; if you need them, learn them.]]></content:encoded>
  </item>
      <item>
    <title>Mount and Blade: Warband review</title>
    <link>https://blog.asgaard.co.uk/2015/01/11/mount-and-blade-warband-review</link>
    <pubDate>Sun, 11 Jan 15 16:43:12 +0000</pubDate>
    <guid>https://blog.asgaard.co.uk/2015/01/11/mount-and-blade-warband-review</guid>
    <description><![CDATA[
<p>
<img src='/assets/img/2015-11-01/mount-and-blade.jpg' class='border width-100' alt=''/>
<p>
I have been meaning to write a review for Mount and Blade: Warband for some time now, but I haven&#039;t had the time. Because I&#039;ve been too busy playing Mount and Blade: Warband.  Warband is a pretty big game so this is going to be pretty long, and it still won&#039;t cover nearly everything.
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-army.jpg' class='border width-45 float-right' title='Your army in the early game will be a bit uninspiring' alt='Your army in the early game will be a bit uninspiring'/>
<p>
Warband is a fairly unique game which puts you on a horse as you ride around a fictional continent, Calradia. It&#039;s not dissimilar to a horse based version of Sid Meier&#039;s Pirates!, but somehow turns out to be much more replayable. The experience is very raw; the graphics are very dated for the most part, the user interface often bad, and the gameplay sometimes tedious (especially before you understand the game and know where the shortcuts are). In a more modern/polished game a lot of these things would have been streamlined out (sometimes to the detriment of the overall game). Therefore it is a testament to how enjoyable the rest of the gameplay is that you soon overlook all these annoyances.
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-world-map.jpg' class='border width-45 float-right' title='The world map' alt='The world map'/>
<p>
War[...]]]></description>
    <content:encoded><![CDATA[
<p>
<img src='/assets/img/2015-11-01/mount-and-blade.jpg' class='border width-100' alt=''/>
<p>
I have been meaning to write a review for Mount and Blade: Warband for some time now, but I haven&#039;t had the time. Because I&#039;ve been too busy playing Mount and Blade: Warband.  Warband is a pretty big game so this is going to be pretty long, and it still won&#039;t cover nearly everything.
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-army.jpg' class='border width-45 float-right' title='Your army in the early game will be a bit uninspiring' alt='Your army in the early game will be a bit uninspiring'/>
<p>
Warband is a fairly unique game which puts you on a horse as you ride around a fictional continent, Calradia. It&#039;s not dissimilar to a horse based version of Sid Meier&#039;s Pirates!, but somehow turns out to be much more replayable. The experience is very raw; the graphics are very dated for the most part, the user interface often bad, and the gameplay sometimes tedious (especially before you understand the game and know where the shortcuts are). In a more modern/polished game a lot of these things would have been streamlined out (sometimes to the detriment of the overall game). Therefore it is a testament to how enjoyable the rest of the gameplay is that you soon overlook all these annoyances.
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-world-map.jpg' class='border width-45 float-right' title='The world map' alt='The world map'/>
<p>
Warband is a sandbox game and there is no real point or game specified goals. Some people will find this lack of guidance off putting, and it is a bit overwhelming as a beginner. Certainly, there are times when the random number gods are not on your side and there isn&#039;t a lot to do. What you will probably end up doing is riding around the country-side building up an army, performing favours for local lords, and competing in tournaments. Armies need to be fed and paid so you&#039;ll need to make sure you&#039;re using your men to generate money, which usually involves capturing enemy troops and ransoming them.
<p>
The combat gameplay is both brilliant and unique. Mounted combat is hard and rewarding; you need to time your sword swings, and you&#039;ll need to take into account your own velocity when trying to use bows and crossbows.  Your character stats will determine which sort of load-outs you are most effective with, and there are a lot of possibilities. The weapons themselves have splendid detail - e.g. a double handed great sword might look fearsome but you can be left vulnerable without a shield and it might be slow to swing. Alternatively, a fast short sword is not much use on horseback because it&#039;s not long enough to reach infantry.
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-weather-effects-fog.jpg' class='border width-45 float-left' title='The graphics aren&#039;t great, but the M&amp;B still has decent weather effects' alt='The graphics aren&#039;t great, but the M&amp;B still has decent weather effects'/>
<p>
As the game progresses and you&#039;ve built up a reasonable army you&#039;ll find yourself allying yourself with one of the factions of Calradia and taking part in bigger battles and sieges. Your army and tactics will be affected by which territory you spend most of your time in, e.g. a Nord army will be mainly heavy infantry, leading to slow crushing attacks, whereas a Khergit army will be comprised of horse archers, who charge around the plains and riddle foes full of arrows, but tend to be a bit useless in a castle siege. 
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-arrows.jpg' class='border width-45 float-left clear-left' title='Tis but a scratch' alt='Tis but a scratch'/>
<p>
Eventually, by impressing enough of your allies, you&#039;ll be granted towns and castles of your own which you can use to supplement your income, but in reality the AI tends to make a beeline straight for your assets and unless you are very vigilant (which isn&#039;t possible if your assets are spread out), your towns will be frequently looted (which is a bit annoying).
<br>
There is an in-game economy which you can take advantage of. Goods prices follow supply and demand, and if you&#039;re desperate for cash you can always start shipping merchandise across the land.
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-siege.jpg' class='border width-45 float-left clear-left' title='Castle/fort sieges are fun but prone to traffic jams in vanilla' alt='Castle/fort sieges are fun but prone to traffic jams in vanilla'/>
<p>
This all sounds very broad, and it is, but it&#039;s not always as deep as it could be. This is to be excused, because the work required to implement all of Warband&#039;s features convincingly would be huge. Nevertheless, it would be nice if the political side of things seemed a bit less algorithmic and if each lord had a bit more personal character.
<br>
 
<br>
One of Warband&#039;s greatest strengths is its moddability. This has led to some excellent third party mods being released by the community. The quality is inconsistent, but then so is Warband&#039;s. After fully acquainting yourself with the base game it&#039;s worth moving on to the <a href='http://www.nexusmods.com/mbwarband/mods/3489/?' target='_blank'>Floris mod pack</a>, which liberally sprinkles improvements and additions over the whole game and adds a new &#039;career path&#039; enlisting in a lord&#039;s army.
<p>
Due to various things, the game is reasonably hostile to beginners. I fully recommend familiarising yourself with <a href='https://imgur.com/a/FMAqV'>this helpful guide</a> as you play. If you push through the initial confusion you&#039;ll find a game that draws you in just as much as the likes Civilization (I didn&#039;t previously realise that &quot;one more turn&quot; also applied to real time games).
<p>
<img src='/assets/img/2015-11-01/mount-and-blade-floris.jpg' class='border width-100 clear-left' title='The Floris mod pack adds graphics and AI improvements, new items, new architecture, and more' alt='The Floris mod pack adds graphics and AI improvements, new items, new architecture, and more'/>
<p>
Overall Warband is extremely enjoyable, and even though it&#039;s a bit raw, it&#039;s far more rewarding than most games and with the caveats outlined previously, I thoroughly recommend it.]]></content:encoded>
  </item>
  </channel>
</rss>