<?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>mlindgren.ca</title>
	<atom:link href="http://www.mlindgren.ca/feed" rel="self" type="application/rss+xml" />
	<link>http://www.mlindgren.ca</link>
	<description></description>
	<lastBuildDate>Sat, 04 Feb 2012 06:37:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Some thoughts on used games and online passes</title>
		<link>http://www.mlindgren.ca/archives/536</link>
		<comments>http://www.mlindgren.ca/archives/536#comments</comments>
		<pubDate>Sat, 04 Feb 2012 06:37:28 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[consumerism]]></category>
		<category><![CDATA[debate]]></category>
		<category><![CDATA[destructoid]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[online passes]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=536</guid>
		<description><![CDATA[Online passes are becoming more and more ubiquitous in the games industry. For those who aren&#8217;t familiar with the terminology, an online pass is essentially a form of digital rights management designed to discourage and devalue used game sales by tying some game content to unique, one-use codes packaged with new copies of games. Online [...]]]></description>
			<content:encoded><![CDATA[<p>Online passes are becoming more and more ubiquitous in the games industry.  For those who aren&#8217;t familiar with the terminology, an online pass is essentially a form of digital rights management designed to discourage and devalue used game sales by tying some game content to unique, one-use codes packaged with new copies of games.  Online passes are a contentious issue.  Some feel that they&#8217;re a perfectly legitimate way for developers and publishers to ensure that they get their cut of each sale, and to reward those who purchase games new.  Others see them as a violation of consumer rights or contend that they inconvenience customers who <em>do</em> buy new (by requiring them to type in long access codes on game controllers) while being of only dubious value to publishers and developers.</p>
<p>Most recently, there&#8217;s been a bit of an uproar over the inclusion of an online pass in <em><a href="http://en.wikipedia.org/wiki/Kingdoms_of_Amalur:_Reckoning">Kingdoms of Amalur: Reckoning</a></em>, a single-player RPG with no online component.  The pass confers seven extra quests on those who purchase the game new, or deprives those who purchased used of them, depending on your perspective.<span id="more-536"></span>  Before I lay my cards on the table, I&#8217;ll let Curt Schilling, the founder of the studio behind the game, explain what he sees the purpose of the online pass as:</p>
<blockquote><p>That being said, this next part is likely to piss people off, but it&#8217;s a truth and it&#8217;s how I feel. You can argue the merits and effectiveness of it, but right now it&#8217;s how it&#8217;s done and as someone that&#8217;s as invested as I am in this company, I stand by what has happened.</p>
<p>DAY 1 DLC, to be extremely and VIVIDLY clear, is FREE, 100% totally FREE, to anyone that buys a new copy of Reckoning, ANYONE. </p>
<p>If you don&#8217;t buy new games you buy them used, and in that case you will have to pay for the Day 1 free DLC content the new copy buyers got for free.</p>
<p>It&#8217;s clear the intent right? To promote early adopters and MUCH MORE IMPORTANT TO ME, REWARD fans and gamers who commit to us with their time and money when it benefits the company.</p></blockquote>
<p>You can read the rest of his post <a href="http://forums.reckoning.amalur.com/showthread.php?3063-Did-you-push-back-at-EA-at-all-over-this-Quest-content-gated-by-online-pass.&#038;s=2ba8c3194088140ce6161b0c374691f5&#038;p=52812&#038;viewfull=1#post52812" title="Curt Schilling's post on the Kingdoms of Amalur online pass.">on the Kingdoms of Amalur forum.</a>  I think Curt&#8217;s position is reasonable and I am sympathetic to the frustration he&#8217;s clearly feeling; he believes that he&#8217;s trying to protect his business interests and in the process rewarding loyal fans with free bonus content, and receiving nothing but scorn in return.</p>
<p>I don&#8217;t think <em>Kingdoms of Amalur</em>&#8216;s online pass is an egregious abuse by any means, but in general,  I do count myself among those who see online passes as an unsettling trend.  I think consumers have good reason to be suspicious of companies that choose to use online passes.  There are good arguments for and against online passes, but the most popular arguments in favor of online passes often seem to rely on strawmen and dubious assumptions with no supporting data.  Jerry Holkins (Tycho) of Penny Arcade <a href="http://penny-arcade.com/2012/01/30/plurality" title="Plurality - Penny Arcade">writes:</a></p>
<blockquote><p>I&#8217;ve been reading a lot his weekend about Fat Cats and how fat they are and how they want your money, but the only choice you get in this matter (aside from the wholly valid &#8220;not buying it&#8221; choice, of course) is which supposed Fat Cat to enrich.  You can enrich the people who made the game you are enjoying, or you can enrich people who had nothing to do with the game.  Policies like this are designed to incentivize new purchases: that is to say, sales.  We call those sales.</p></blockquote>
<p>In other words, you&#8217;re either supporting the developers who produce the games you love, or you&#8217;re supporting retailers like Gamestop.  Naturally most consumers would prefer the former, all else being equal; developers are creative entities, focused&mdash;or so we can hope&mdash;on artistic expression before profit.  Retailers, by contrast, are often viewed as greedy and incidental vestiges of the rapidly dying era of physical media.  Their services are at best unnecessary, and at worst <a href="http://www.joystiq.com/2011/08/24/gamestop-intentionally-removing-deus-ex-onlive-coupons-from-reta/" title="Gamestop intentionally removing Deus Ex OnLive coupons from retail PC copies - Joystiq">abusive of their customers to an extent that would make an ardent objectivist blush.</a> </p>
<p>This is a false dichotomy for two reasons.  First, traditional retailers are not the only avenues for the trading and selling of used games.  One could trade games directly with friends or colleagues, or buy and sell them at garage sales and flea markets.  There are even a number of online services that have been created for the explicit purpose of allowing consumers to trade and sell used games at reasonable prices.  (Of course, those services take a cut too, but I think it&#8217;s safe to assume that their margins are nothing like Gamestop&#8217;s, and they are much more consumer-centric in general.)</p>
<p>More importantly, there is an implicit assumption in Holkins&#8217; argument that each used sale deprives the publisher of a new sale.  This is the same false equivalency that the <acronym title="Motion Picture Association of America">MPAA</acronym> and <acronym title="Recording Industry Association of America">RIAA</acronym> have been using for years to <a href="http://www.pcworld.com/article/223431/riaa_thinks_limewire_owes_75_trillion_in_damages.html" title="RIAA thinks Limewire owes $75 trillion in damages" target="_blank">overstate the negative effects of piracy</a>, and it is no less pernicious when applied to secondhand markets.  To the best of my knowledge there is absolutely no data to support this assertion, and it doesn&#8217;t really hold up to logical scrutiny.  Sure, a sale of a used game does not directly support the game&#8217;s publisher and developer, but there&#8217;s no guarantee that the buyer would otherwise have bought the game new.  More importantly, the person who traded in that game for store credit is likely to use that credit toward the purchase of a new game.  </p>
<p>&#8220;Triple-A&#8221; retail games cost $60 in the US and Canada these days, and in countries like Australia prices can reach AUS $100 and above.  That is, frankly, an absurd amount of money and out of the reach of a great many people.  Without a healthy used market to mitigate these prices, many consumers would simply be forced to purchase fewer games.  Others would likely turn to piracy.  Nobody wins in that scenario; not developers, not publishers, and certainly not gamers.</p>
<p>My arguments thus far have been based on assumptions and logic rather than empirical data, just as the arguments I am attacking are.  What I am postulating is that my analysis is at least as plausible as the alternative (in my opinion, moreso), and that in the absence of actual scientific data the sane solution for publishers is to try to compete with used sales by offering better service and pricing incentives rather than trying to find technological solutions which, even when well-meaning, embitter those who can&#8217;t afford to buy every game they are interested in at $60 a pop.</p>
<p>Now, you might be thinking that because I&#8217;m not in the industry, my perspective is limited.  Maybe publishers <em>do</em> have data which support the conclusion that used game sales are a net loss.  It&#8217;s possible; it certainly makes sense that entities which exist solely to maximize game sales would want to have that data.  That said, given the ineptitude displayed by media giants in fighting piracy, I am not convinced that it should be taken for granted that they take a scientific approach to <em>anything</em>.  Take this exchange between <a href="https://twitter.com/#!/kristen_">Kristen Bornemann</a> and I on Twitter:</p>
<blockquote><p>
<a href="https://twitter.com/#!/kristen_"><strong>@kristen_</strong></a>: <a href="https://twitter.com/#!/cwgabriel">@cwgabriel</a> When people pick up used games it reduces the chance of publishers investing more money into the game (sequel, etc).<br />
<a href="https://twitter.com/#!/kristen_"><strong>@kristen_</strong></a>: <a href="https://twitter.com/#!/cwgabriel">@cwgabriel</a> Therefore it directly hurts us as devs… especially 3rd party devs.<br />
<a href="https://twitter.com/#!/lindgrenM"><strong>@lindgrenM</strong></a>: <a href="https://twitter.com/#!/kristen_">@kristen_</a> Do you have statistics that demonstrate that, or are you just assuming so by the false equivalency of 1 used sale = 1 lost sale?<br />
<a href="https://twitter.com/#!/kristen_"><strong>@kristen_</strong></a>: <a href="https://twitter.com/#!/lindgrenM">@lindgrenM</a> I worked in publishing. The fact is if a publisher hears that used sales are high = death for game. They don&#8217;t care about stats.<br />
<a href="https://twitter.com/#!/lindgrenM"><strong>@lindgrenM</strong></a>: <a href="https://twitter.com/#!/kristen_">@kristen_</a> Then perhaps the community should focus on fixing that, rather than limiting consumer choice?<br />
<a href="https://twitter.com/#!/lindgrenM"><strong>@lindgrenM</strong></a>: <a href="https://twitter.com/#!/kristen_">@kristen_</a> Because if the publishers &#8220;don&#8217;t care about stats,&#8221; what are their business decisions based on? Vindictiveness?<br />
<a href="https://twitter.com/#!/kristen_"><strong>@kristen_</strong></a>: <a href="https://twitter.com/#!/lindgrenM">@lindgrenM</a> hearsay and gut/instinct… why do you think I left? ;)
</p></blockquote>
<p>I&#8217;m aware that this short Twitter exchange is by no means a definitive example of how every publisher everywhere conducts business.  Again, I&#8217;m simply saying that until I see data which actually show a net loss for publishers and developers from used sales, I see no reason to take as gospel the assertion that they <em>are</em> a net loss.  That said, even if conclusive data were available, I still don&#8217;t think I could support online passes at the conceptual level.  <em>Amalur</em> is innocuous, but it&#8217;s the exception rather than the rule; most online passes lock used buyers out of multiplayer until they&#8217;ve shelled out another ten to fifteen dollars.  That is blatantly vindictive anti-consumer behaviour on the part of publishers, and it epitomizes the troubling trend of media companies punishing legitimate consumers in a misguided attempt to artificially control the marketplace and perpetuate outdated business models.  For an example of exactly how far this thinking goes, consider <a href="http://altdevblogaday.com/2012/02/02/i-feel-used/" title="I Feel Used">this post</a> by Jameson Durall of Volition:</p>
<blockquote><p>There’s another big rumor about the next Xbox console that could really start to shake things up…it won’t play used games at all!  Personally I think this would be a fantastic change for our business and even though the consumers would be up in arms about it at first…they will grow to understand why and that it won’t kill them.</p></blockquote>
<p>To say that entirely removing the used market &#8220;won&#8217;t kill&#8221; consumers strikes me as extremely ironic.  Used games have existed for as long as games have existed, and have evidently not killed the industry, and yet that is exactly what developers and publishers are complaining will happen if we continue with the status quo.  Durall himself says that used game sales are &#8220;making it more and more difficult for us to continue making higher quality products.&#8221;  My feeling is that the rhetoric is a lot more emotionally charged on the part of online pass supporters; there is a strong insinuation that used buyers are costing people their jobs and are in some sense morally inferior to those who have the luxury of being able to buy only new games.</p>
<p>But I digress.  I don&#8217;t give too much credence to the rumor Durall refers to, but the idea that anyone would consider it a good course of action is mind boggling to me.  It&#8217;s another step in the march towards the complete erosion of consumer rights, and along the way the products we purchase are further crippled and devalued.  It hurts consumers and it hurts content producers because <em>this devaluation of legitimate products is what drives growth in piracy.</em></p>
<p>I must clarify exactly what I mean when I say that product devaluation drives growth in piracy.  It is a popular belief among technology writers on the Internet that services which compete on convenience, such as iTunes and Steam, can actually reduce piracy.  The data that I have seen do not support that conclusion.  However, history has demonstrated that a legislative or technical solution is likely impossible because pirates will always find ways to break digital locks and make enforcement of anti-piracy legislation effectively impossible.  Any legislative solution broad enough to admit the possibility of significantly decreasing piracy by inconveniencing would-be pirates <a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act" title="Wikipedia: Stop Online Piracy Act">would likely have negative repercussions outweighing the benefits</a>, and the assumption that a nuking-the-anthill style solution &agrave; la <acronym title="Stop Online Piracy Act">SOPA</acronym> would be effective for more than a few weeks is <a href="https://chrome.google.com/webstore/detail/hnifiobpjihmmjgiokkaalgomddebhng/details">extremely dubious anyway.</a></p>
<p>So what are content producers to do?  Pandora&#8217;s Box has been opened and the clock cannot be turned back.  There will always be people with no compunction about downloading works without even attempting to compensate the artist, and dishearteningly, the research I have read indicates that once someone is turned on to piracy he is unlikely to stop&mdash;even if content producers then offer better incentives to compete with pirates.  It <a href="http://repository.cmu.edu/cgi/viewcontent.cgi?article=1056&#038;context=heinzworks" title="Converting Pirates without Cannibalizing Purchasers:  The Impact of Digital Distribution on Physical Sales and Internet Piracy">has been demonstrated</a>, however, that removing options increases piracy.  Devaluing products and services with arbitrary restrictions and inconveniencing legitimate consumers will have the same effect.  <em>Copying is the fundamental operation on which the principle of computing is built.  It cannot be stopped.  The only thing content producers can do is to prevent people from turning to piracy in the first place by offering the best service possible.</em></p>
<p>Returning to the topic at hand, online passes go hand in hand with the consumer-as-enemy mindset that plagues media giants.  They arise from the same attitude that justifies $30 BluRay movies with minutes and minutes of unskippable commercials, and <a href="http://www.destructoid.com/drm-fun-several-legit-ubisoft-games-will-break-next-week-220948.phtml" title="DRM Fun: Several legit Ubisoft games will break next week - Destructoid">always-on DRM which prevents legitimate purchasers from playing single-player games</a> when the publisher&#8217;s servers are down.  Through legislation and technology, these companies are trying to make ownership rights exclusive to corporations and prevent consumers from interacting with the media they purchase in any manner that is not explicitly pre-approved.  They are declaring a war on their customers, and it is a war they cannot win.  Make no mistake, though: as these behemoths run themselves into the ground because they are incapable of adapting, there will be casualties among the artists, musicians and developers who create the works of culture we love.</p>
<p>That is why I cannot support online passes.  I truly believe that in the long run they are detrimental to all involved.  I truly believe that the best way for a company to protect its interests is to do its utmost to reward its fans and give them the best experience possible&mdash;all of them, even those who do not <em>directly</em> contribute to the bottom line.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/536/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010 and 2011 in Review</title>
		<link>http://www.mlindgren.ca/archives/485</link>
		<comments>http://www.mlindgren.ca/archives/485#comments</comments>
		<pubDate>Sat, 31 Dec 2011 22:59:52 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[about me]]></category>
		<category><![CDATA[careers]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[Retrospective]]></category>
		<category><![CDATA[school]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=485</guid>
		<description><![CDATA[If you&#8217;ll forgive me for &#8220;metablogging,&#8221; I&#8217;ve been ruminating lately on the purpose of this website.  Up until now, I&#8217;ve been trying to focus exclusively on technology, programming and game design, and to minimize the subjective aspects of my connection to those fields.  Put more simply, I&#8217;ve been avoiding writing about who I am and [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ll forgive me for &#8220;metablogging,&#8221; I&#8217;ve been ruminating lately on the purpose of this website.  Up until now, I&#8217;ve been trying to focus exclusively on technology, programming and game design, and to minimize the subjective aspects of my connection to those fields.  Put more simply, I&#8217;ve been avoiding writing about who I am and what I do in favour of producing a series of mostly impersonal tutorials and critiques of technology.  There are a number of reasons for this—the word &#8220;professionalism&#8221; comes to mind as chief among them.  I&#8217;d like this website to be my public face on the Internet, and as every saavy Internet denizen should know by now, there are certain risks associated with maintaining a public persona.  I greatly admire <a href="http://zedshaw.com/">Zed Shaw</a>, for his personality as well as his technical accomplishments, but I have no desire to make myself unemployable as he claims to have done (albeit temporarily).</p>
<p>That said, trying to take a dry, detached and objective approach to creating a personal website presents a number of problems itself.  First and foremost, it&#8217;s an inherent contradiction; if I don&#8217;t write about myself in any meaningful capacity, then there is nothing aside from the superficial about this website which makes it mine.  I can&#8217;t imagine it makes for a very interesting read, either.  Realistically, how many people will come here looking for <a title="How to link GLUT in Qt Creator on OS X" href="http://www.mlindgren.ca/archives/453">advice on how to link GLUT?</a>  Readership numbers are of little to no concern to me, mind you, but I can at least endeavour to give this website a purposeful existence.  To that end, I want to start writing more about personal topics, although for the sake of cohesiveness I&#8217;m going to continue to focus primarily on those aspects of my life that will be of interest to a technically-minded audience.<span id="more-485"></span></p>
<p>As a start, I think that this is a good time to reflect on what I&#8217;ve done since I started this blog in May of 2010.  Early in May, I moved to Calgary, Alberta, to start a sixteen-month internship with <a href="http://pason.com/">Pason Systems Corporation.</a>  Pason is the market-leading provider of oil rig instrumentation and service, with a wide variety of tools and technology available to facilitate safety and improve efficiency on oil rigs.  All of Pason&#8217;s rig-site hardware and software is designed in house, but my work was on an internal web application designed to support Pason&#8217;s most valuable employees: the field technicians who directly provide services and equipment to customers.</p>
<p>For obvious reasons, I can&#8217;t go into great detail about the work I did at Pason.  I will say, though, that it was extremely rewarding.  I had the opportunity to work alongside some of the smartest developers I&#8217;ve ever met, and I was able to do work that I felt had a tangible, significant and lasting impact on my team&#8217;s product.  That&#8217;s a rare honor for an intern!  From a technical perspective, I got to work with some interesting and unfamiliar technologies; I did extensive development in Python, created rich user experiences with HTML5 and JavaScript, and dabbled with C# when the need arose.  The whole experience was hugely instructive, and I will always fondly remember my time at Pason.  Of my entire education, my internship is without a doubt the part that I value most.</p>
<p>In September of this year, I moved back to Edmonton to finish my Computing Science degree at the University of Alberta.  It being my final year and with most of my specific course requirements out of the way, I loaded up on computing science courses, which led to a fairly engaging but difficult semester.  Among the courses I took were Advanced Games Programming in C++, Compiler Design, and Introduction to Computer Graphics.</p>
<p>As a term project for the Advanced Games Programming course, I undertook a modification of the <a href="http://skatgame.net/mburo/orts/" target="_blank">ORTS</a> game engine to allow user interface scripting with Lua, à la World of Warcraft.  I feel that the outcome of this project was a little underwhelming, as limited time and the complexity of ORTS forced me to settle for less comprehensive scripting capabilities than I would have liked.  Nevertheless, I learned a great deal about Lua and the process of interfacing with Lua from C++. I think I now have an inkling of what&#8217;s involved in creating a robust client-side scripting system as in World of Warcraft, or even a custom development platform like <a title="Ansca Mobile Corona" href="http://www.anscamobile.com/corona/" target="_blank">Corona</a>.  Given the popularity of Lua as a scripting language in game development and my interest in developing games, I&#8217;m sure it will be valuable experience.</p>
<p>Although I believe I would be within my academic rights to do so, for the time being I don&#8217;t foresee myself releasing the source code for my Advanced Games Programming project.  ORTS has not seen active development in a number of years, so it is outdated and difficult to compile and run, let alone modify.  Additionally, my own work—being a school project as it is—would probably not prove to be a good demonstration of Lua/C++ integration best practices, and I&#8217;m always wary of releasing code from which others might learn the wrong way of doing things.  I do have a report on the project which I&#8217;d like to reproduce here at some point, though.  One final word of advice to any University of Alberta students who might be reading: if you already know C++, as I did, I would not recommend taking the Advanced Games Programming course.  Much to my chagrin, a significant number of the lectures were exclusively about how to write C++.</p>
<p>Compilers was perhaps my favorite course of the semester, although it was also by far the most difficult.  I would describe it as a strangely paradoxical course.  The theory behind formal languages, parsing and code generation is not extremely hard to grasp, but it does seem somewhat hard to <em>hold on to</em>, with a large number amount of often deceptive terminology, as well as numerous rules and axioms to memorize.  The process of building a <em>simple</em> compiler for a simple language is, in retrospect, fairly mechanical and manageable, but it seems anything but when approached without the benefit of hindsight.  Overall, the course is just a staggering amount of work, but it is also among the most rewarding courses I&#8217;ve taken.</p>
<p>Finally, Introduction to Computer Graphics, I got to expand upon the OpenGL knowledge I had built during the development of <a title="Puzzle Panel" href="http://www.mlindgren.ca/projects/puzzle-panel">my iOS game</a>, while also learning the fundamental aspects of computer graphics.  Like Compilers, Graphics is a challenging but rewarding course, one of the most difficult aspects of it being the time commitment required.  (Of course, it is also fairly math-heavy.)  As someone who appreciates the beauty of a well-designed, simple algorithm, I found that learning about such achievements as the <a title="Wikipedia: Midpoint circle algorithm" href="http://en.wikipedia.org/wiki/Midpoint_circle_algorithm" target="_blank">midpoint circle algorithm</a> was one of the most enjoyable aspects of the course.  I feel that there&#8217;s an almost Zen-like quality to a clever but simple algorithm which strips away preconceptions of complexity to accomplish a task in the most efficient manner possible.  If you&#8217;re of a similar mind, graphics is full of examples of such algorithms.  Of course, working in graphics is also rewarding for its ability to produce visually interesting results, which is a rare treat in academic computing science:</p>
<div style="text-align: center; margin-left: auto; margin-right: auto;"><img style="display: block; margin-left: auto; margin-right: auto;" title="Shadow volumes" src="/images/shadowvolumes.jpg" alt="A demonstration of shadow volumes from an Introduction to Computer Graphics assignment" width="386" height="335" /><em><small>A demonstration of shadow volumes from an Introduction to Computer Graphics assignment.</small></em></div>
<p>2010 and 2011 were exciting years for me, and although I&#8217;m not ready to discuss it yet, I have something huge lined up for after I graduate in April of 2012.  In the meantime, I&#8217;ll continue to post here as often as I can manage.  Thanks for reading, and happy new year!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/485/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ethical Game Design from Gamasutra</title>
		<link>http://www.mlindgren.ca/archives/480</link>
		<comments>http://www.mlindgren.ca/archives/480#comments</comments>
		<pubDate>Fri, 30 Dec 2011 23:28:57 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[app store]]></category>
		<category><![CDATA[Gamasutra]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=480</guid>
		<description><![CDATA[I came across a couple excellent articles on Gamasutra which I want to share here. The first, &#8220;Contrivance and Extortion: In-App Purchases &#38; Microtransactions&#8221; is by Adam Saltsman, creator of Canabalt, among other games. He argues that in-app purchases and so-called microtransactions are being abused by some game developers, &#8220;deliberately contriving their designs in the [...]]]></description>
			<content:encoded><![CDATA[<p>I came across a couple excellent articles on Gamasutra which I want to share here. The first, &#8220;<a title="Contrivance and Extortion: In-App Purchases &amp; Microtransactions" href="http://www.gamasutra.com/blogs/AdamSaltsman/20111018/8685/Contrivance_and_Extortion_InApp_Purchases__Microtransactions.php">Contrivance and Extortion: In-App Purchases &amp; Microtransactions</a>&#8221; is by <a href="http://adamatomic.com/" target="_blank">Adam Saltsman</a>, creator of Canabalt, among other games. He argues that in-app purchases and so-called microtransactions are being abused by some game developers, &#8220;deliberately contriving their designs in the worst way in order to extort money from players, which is unethical and unacceptable design practice.&#8221; I&#8217;ll lay my cards on the table and say that I am in complete agreement with Adam.  As he does in his <a title="Contrivance and Extortion II: Clarifications, Feedback &amp; Suggestions" href="http://www.gamasutra.com/blogs/AdamSaltsman/20111020/8703/Contrivance_and_Extortion_II_Clarifications_Feedback__Suggestions.php">explanatory follow-up</a>, I acknowledge that there are benefits to the &#8220;freemium&#8221; model, but the techniques commonly associated with that model are often used in a cynical, manipulative and profit-driven manner which I feel is harmful to consumers and the industry. Whether or not you agree, Adam&#8217;s thoughts on the subject are certainly worth reading.</p>
<p>&#8220;<a title="Radical Plagiarism: The Ethical Lessons of the Gamenauts Controversy" href="http://www.gamasutra.com/blogs/EvanJones/20110815/8195/Radical_Plagiarism_The_Ethical_Lessons_of_the_Gamenauts_Controversy.php" target="_blank">Radical Plagiarism: The Ethical Lessons of the Gamenauts Controversy</a>,&#8221; by <a href="http://www.gamasutra.com/blogs/author/EvanJones/4235/">Evan Jones</a>, is equally thought-provoking. Evan recounts the cloning of the indie game <a href="http://www.bored.com/game/play/150995/Radical_Fishing.html"><em>Radical Fishing</em></a> by the more established indie studio <a href="http://gamenauts.com/">Gamenauts</a>, and adds his perspective on the cultural impact of the rampant cloning that takes place on mobile app stores. Returning readers may recall that I&#8217;ve previously <a title="In Defense of Clones" href="http://www.mlindgren.ca/archives/318">defended the practice of cloning games</a>. My defense excluded the cloning of smaller titles by established studios, which I&#8217;ve always viewed as morally questionable at best, but Evan&#8217;s article nevertheless gave me pause. He provides a strong counterpoint to my own thinking on the matter, and while I&#8217;m not yet ready to reverse my position, his argument has undeniable weight. If you&#8217;re at all interested in game development, both articles are well worth your time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/480/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to link GLUT in Qt Creator on OS X</title>
		<link>http://www.mlindgren.ca/archives/453</link>
		<comments>http://www.mlindgren.ca/archives/453#comments</comments>
		<pubDate>Wed, 21 Sep 2011 06:34:15 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=453</guid>
		<description><![CDATA[This tutorial is for an extremely specific and possibly unusual set of circumstances, but I&#8217;m hoping that it will prove useful to someone. For one of my courses this term, we&#8217;re building OpenGL apps using Nokia&#8217;s open source Qt framework. Qt provides some very nice scaffolding, and the Qt Creator IDE is among the best [...]]]></description>
			<content:encoded><![CDATA[<p>This tutorial is for an extremely specific and possibly unusual set of circumstances, but I&#8217;m hoping that it will prove useful to someone. For one of my courses this term, we&#8217;re building OpenGL apps using Nokia&#8217;s open source Qt framework. Qt provides some very nice scaffolding, and the Qt Creator IDE is among the best I&#8217;ve used, although I imagine it lacks flexibility for general-purpose applications—that is, you probably wouldn&#8217;t use it to build non-Qt applications. Qt also allows one to easily write cross-platform C++ GUI applications. That said, linking procedures can be a bit different on different platforms, and as a beginner it&#8217;s not always immediately obvious how instructions for Windows development translate into other environments.</p>
<p><span id="more-453"></span></p>
<p>In particular, I found myself having difficulty linking the OpenGL Utility Toolkit (GLUT) with my project on Mac OS X. After much Googling and some frustration, I came up with the correct way to go about it, which is as follows:</p>
<ol>
<li>In Qt Creator, open your project file (.pro) in the text editor.  Right click on the text editor pane and select &#8220;Add Library&#8230;&#8221;</li>
<li>Chose &#8220;System Library.&#8221;</li>
<li>Locate the GLUT framework.  On my Mac, running Lion, I used <code>/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/GLUT.framework</code>. However, it seems there are multiple different copies on the disk that you could use.  If that path doesn&#8217;t work for you, just search for <code>glut.h</code> in Finder and you&#8217;ll find a copy of the framework.  The path you enter into Qt Creator should point to a <code>.framework</code> directory.</li>
<li>Qt Creator will generate code in your project file which will link to the correct framework or library depending on which platform the code is being compiled on.</li>
<li>Finally, because Apple loves to be different, the glut.h header path is different on OS X.  <strong>You&#8217;ll need to <code>#include &lt;GLUT/glut.h&gt;</code></strong>, instead of <code>&lt;gl/glut.h&gt;</code> is usually the case.  You can use preprocessor conditional statements to make this inclusion cross-platform:
<pre>#if defined(__APPLE__) || defined(MACOSX)
  #include &lt;GLUT/glut.h&gt;
#else
  #include &lt;gl/glut.h&gt;
#endif</pre>
</li>
</ol>
<p>That&#8217;s it! If you have any trouble, leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/453/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to reinstall OS X from a disc image using only one computer</title>
		<link>http://www.mlindgren.ca/archives/443</link>
		<comments>http://www.mlindgren.ca/archives/443#comments</comments>
		<pubDate>Wed, 21 Sep 2011 06:17:02 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=443</guid>
		<description><![CDATA[My internship recently ended, and as such, I had to move from Calgary back to Edmonton, where I&#8217;ll be completing the fourth year of my Computing Science degree at the University of Alberta. I hope to be able to write more about my internship later, but at the moment I want to share a handy [...]]]></description>
			<content:encoded><![CDATA[<p>My internship recently ended, and as such, I had to move from Calgary back to Edmonton, where I&#8217;ll be completing the fourth year of my Computing Science degree at the University of Alberta. I hope to be able to write more about my internship later, but at the moment I want to share a handy trick I discovered for reinstalling OS X. The reason I bring up the move is that after I arrived in Edmonton, I found myself wanting to reformat my Mac Mini and re-install Snow Leopard, but my Snow Leopard disc was nowhere to be found. Luckily, as a semi-paranoid computer scientist with an abundance of disk space, I keep images of important discs on my network-attached storage device for just such occasions.</p>
<p><span id="more-443"></span></p>
<p>Unfortunately, however, the Snow Leopard disc image is large enough that it can only be burned to a dual-layer DVD. I don&#8217;t tend to keep writeable dual-layer DVDs lying around, so I needed a solution which required only the disc image itself. There are a number of methods available for installing OS X over the network, but none of them seemed to work for me—perhaps owing to the fact that I had only one Mac. Luckily, I discovered that you can install OS X from a separate partition on the same disk. Here&#8217;s how:</p>
<ol>
<li>First, you&#8217;ll need to re-partition your disk. Open Disk Utility and select the disk you want to use. Be sure to select the disk itself, rather than one of its partitions, which are indented beneath the disk.</li>
<li>Click the + button to add a new partition, and drag the new partition&#8217;s section in the disk layout graph upwards until it&#8217;s large enough to store your operating system disc image. Apply the changes. It may take some time for the disk to be re-partitioned.</li>
<li>Now, select the new partition from the list on the left. Go to the Restore tab, and restore your operating system disc image to the new partition.</li>
<li>Once the restore is complete, restart your computer, holding Option (Alt) at start-up. This should bring up a list of available start-up disks. Choose your new partition.</li>
<li>You should now be at the installer, and you can re-install to your primary partition. Once the installation is complete, delete your installation disc partition to and resize the primary partition to reclaim the extra space.</li>
</ol>
<p>That&#8217;s it! In retrospect, it&#8217;s completely obvious, but I haven&#8217;t seen these instructions anywhere else on the web. This technique might be particularly useful for owners of Macs without disc drives.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/443/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rest in Peace, Jack Layton</title>
		<link>http://www.mlindgren.ca/archives/437</link>
		<comments>http://www.mlindgren.ca/archives/437#comments</comments>
		<pubDate>Tue, 23 Aug 2011 02:36:24 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Canada]]></category>
		<category><![CDATA[politics]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=437</guid>
		<description><![CDATA[I don&#8217;t discuss politics on this site, but today warrants an exception. Canada has suffered a terrible loss with the death of Jack Layton, the leader of the federal New Democratic Party. He was an inspiring figure, hopeful and optimistic right to the end, and he devoted his life to the betterment of Canada and [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t discuss politics on this site, but today warrants an exception. Canada has suffered a terrible loss with the death of Jack Layton, the leader of the federal New Democratic Party. He was an inspiring figure, hopeful and optimistic right to the end, and he devoted his life to the betterment of Canada and its citizens. He was taken from us far too soon, and will be sorely missed.</p>
<p style="text-align: center;"><a title="Jack Layton.  Click to view full resoltuon." href="/images/jack_layout.jpg"><img src="/images/jack_layton.jpg" alt="" width="658" height="370" /></a></p>
<p>Rest in peace.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/437/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>In Defense of Clones</title>
		<link>http://www.mlindgren.ca/archives/318</link>
		<comments>http://www.mlindgren.ca/archives/318#comments</comments>
		<pubDate>Fri, 15 Jul 2011 04:23:33 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[game clones]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[intellectual property]]></category>
		<category><![CDATA[legal]]></category>
		<category><![CDATA[patent]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=318</guid>
		<description><![CDATA[With the phenomenal and growing successes of the iPhone App Store, the Android Market, and the Xbox Live Indie Games marketplace, gamers have seen an unprecedented number of titles which could be described as &#8220;clones&#8221; of more successful games&#8212;or rip-offs, if you&#8217;re feeling less kind. Along with these titles has come a veritable tsunami of [...]]]></description>
			<content:encoded><![CDATA[<p>With the phenomenal and growing successes of the iPhone App Store, the Android Market, and the Xbox Live Indie Games marketplace, gamers have seen an unprecedented number of titles which could be described as &#8220;clones&#8221; of more successful games&mdash;or rip-offs, if you&#8217;re feeling less kind.  Along with these titles has come a veritable tsunami of hatred for their developers, from game critics and anonymous Internet commenters alike.  The commercial success of some of these titles, such as <em>Angry Birds</em>,<sup>1</sup> has shown that average gamers are happy to patronize any developer who can provide a fun experience, regardless of originality.  However, any mention of a new clone on a gaming blog or podcast inevitably brings about a stunning amount of vitriol from gamers who, presumably, are upset that their favorite megacorporations aren&#8217;t getting their due.<span id="more-318"></span></p>
<p>I don&#8217;t understand this, but my best guess it that it stems from a misunderstanding of the motivations of game developers, and of the development process itself.  I hope that by illuminating those things I can do something to stem the tide of rage and indignation.  First, though, I&#8217;d like to briefly discuss the legality of game clones.  The patentability and copyrightability of game mechanics and &#8220;look and feel&#8221; varies from country to country.  Notably, the <a href="http://www.epo.org/law-practice/legal-texts/html/epc/2010/e/ar52.html" target="_blank" title="European Patent Convention, Article 52">European Patent Convention explicitly states</a> that &#8220;schemes, rules and methods for performing mental acts, playing games or doing business, and programs for computers&#8221; are not patentable, whereas no such restriction exists in the United States.  There are <a href="http://www.gamasutra.com/view/feature/2315/its_just_a_game_right_top_.php" target="_blank" title="Gamasutra: It's Just a Game, Right? Top Mythconceptions on Patent Protection of Video Games">several notable examples</a> of game-related patents in the United States, but the industry is young and there are relatively few legal precedents on their enforceability.  I am not a lawyer, so it would be unwise of me to assert too much here, but I will state that throwing around terms like &#8220;copyright infringement&#8221; is neither productive nor terribly meaningful when discussing game clones.</p>
<p>I&#8217;d also like to make clear that by &#8220;clone,&#8221; I mean a legitimately developed game with similar gameplay mechanics and/or art style to an established title.  I am emphatically <em>not</em> referring to situations in which actual code or art assets have been used without permission; under no circumstances do I condone actual copyright infringement.  Finally, in the interest of full disclosure, I should also inform you that I have a dog in this race, so to speak: my game, <em><a href="http://www.mlindgren.ca/projects/puzzle-panel">Puzzle Panel</a></em>, borrows gameplay mechanics from <em><a href="http://en.wikipedia.org/wiki/Tetris_Attack" target="_blank">Tetris Attack</a></em> and takes artistic cues from <em><a href="http://en.wikipedia.org/wiki/World_of_Warcraft" target="_blank">World of Warcraft</a></em>.</p>
<div style="margin-right: auto; margin-left: auto; text-align: center;">
<a href="/images/puzzlepanel_tetrisattack.jpg" title="Click to view full size."><img src="/images/puzzlepanel_tetrisattack.jpg" alt="Comparison screenshot of Puzzle Panel and Tetris Attack" title="Comparison screenshot of Puzzle Panel and Tetris Attack.  Click to view full size." width="651px" height="320px" /></a><br />
<span><small>A comparison between Puzzle Panel, left, and Tetris Attack.</small></span>
</div>
<p><em>Tobar</em> for iOS is a recent example of the kinds of titles I&#8217;m talking about.  The game is a fairly obvious mimicry of <em><a href="http://supermeatboy.com" target="_blank">Super Meat Boy</a></em>, and while <em>Meat Boy</em> co-creator Edmund McMillian is relatively unperturbed by it, many of his fans are less forgiving.  I&#8217;m going to pick on the <a href="http://destructoid.com">Destructoid</a> community here for no other reason than that Destructoid is one of my favorite gaming publications, but a quick Google search reveals no shortage of hatred for <em>Tobar</em>.<sup>2</sup>  <a href="http://www.destructoid.com/meat-boy-dev-has-mixed-feelings-about-ios-knock-offs-205886.phtml#comment" target="_blank" title="Meat Boy dev has mixed feelings about iOS knock-offs - Destructoid">Destructoid user Noir Trilby writes</a>:</p>
<p>
<blockquote>What a shameless rip off. It&#8217;s good that Ed is cool about it and all, but if I was him I&#8217;d be raging. Both Apple and Android need someone doing some quality control on their aming services to screen out blatant rip offs like this.</p></blockquote>
<p>Even associate editor Jonathan Holmes goes so far as to say that the game &#8220;makes him frown,&#8221; which&mdash;though it doesn&#8217;t sound it&mdash;is fairly significant criticism coming from a man so kind and gentle as to have probably never said a genuinely hurtful thing is his life.</p>
<p>As I&#8217;ve already mentioned, I don&#8217;t think <em>Tobar</em>, nor other games like it, deserve the hate they receive.  There are a number of reasons why I feel this way.  First, all art is iterative, and video games are no exception.  Creativity is not binary, but is a matter of degree.  Second, when indie developers borrow from established properties, there&#8217;s little evidence that it&#8217;s detrimental to the owners of those properties, whereas it may be extremely beneficial to consumers.  Finally, I feel that there&#8217;s a misconception that games like <em>Tobar</em> exist because lazy, greedy developers want to make a quick buck and can&#8217;t be bothered to do the work to come up with an original title.  That perception is wrong on many levels, which I&#8217;ll discuss in further detail in the following paragraphs.</p>
<p>The apparent trend of smaller developers &#8220;ripping off&#8221; well known games is probably an illusion.  It&#8217;s likely that these are simply the instances of liberal borrowing that we hear about, due to the popularity of the &#8220;borrowee.&#8221;  Take <em>Angry Birds</em>, for example.  Most people would point to it as an example of a successful, original title by a studio that was relatively small at the time of its release.  The truth is that although its art style is unique, its gameplay mechanics are borrowed heavily from an older flash game called <em><a href="http://armorgames.com/play/3614/crush-the-castle" target="_blank">Crush the Castle</a></em>.  Or how about <em>Super Meat Boy</em>?  It surely owes some of its success to predecessors such as <em><a href="http://www.gamemakergames.com/archive/jumper-two" target="_blank">Jumper Two</a></em>, <em><a href="http://kayin.pyoko.org/iwbtg/" target="_blank">I Wanna Be The Guy</a></em>, and <em><a href="http://www.thewayoftheninja.org/" target="_blank">N+</a></em>.</p>
<div style="margin-right: auto; margin-left: auto; text-align: center;">
<a href="/images/smb_nplus_j2_iwbtg.jpg" title="Click to view full size."><img src="/images/smb_nplus_j2_iwbtg.jpg" alt="Comparison screenshot of Super Meat Boy, N+, Jumper Two, and I Wanna Be The Guy" title="Comparison screenshot of Super Meat Boy, N+, Jumper Two, and I Wanna Be The Guy.  Click to view full size." width="651px" height="320px" /></a><br />
<span><small>A comparison between Super Meat Boy, N+, Jumper Two, and I Wanna Be The Guy.</small></span>
</div>
<p>Granted, each of these games have their own original elements, whereas <em>Tobar</em> at least appears to be a fairly direct attempt at reproducing <em>Super Meat Boy</em>.  But every great game stands on the shoulders of giants, and every developer has to start somewhere.  Games like <em>Tobar</em> should not be condemned as soulless exercises in profiteering, but recognized for what they are: a means for inexperienced developers to hone their skills while contributing to new markets, much as a musician might start out by covering popular songs in venues where the original artist would never perform.</p>
<p>Words like <em>stealing</em> and <em>theft</em> are often thrown around in discussions of game clones.  But one of the defining characteristics of theft is that it deprives the owner of his or her property.  What harm is the existence of <em>Tobar</em> doing to Team Meat?  Given that Team Meat&#8217;s Tommy Refenes has publicly stated that he has &#8220;no intentions on doing anything for iPhone or iPad ever&#8230;I hate the [iPhone and iPad] platforms and I hate the [app] stores,&#8221; <em>Tobar</em> is in no sense a competitor to <em>Super Meat Boy</em>.  I don&#8217;t know the developer of <em>Tobar</em>, but I&#8217;d wager that his intent was simply to bring gameplay he loves to a new platform that he&#8217;s passionate about.</p>
<p>Passion is exactly why I created <em>Puzzle Panel</em>; I wasn&#8217;t looking to make quick money by ripping off someone else&#8217;s creativity and putting it on a new platform.  Rather, I wanted to share a game that I loved with an audience who might have never seen it before, on a platform where it was unlikely to ever see the light of day otherwise.  I am not a veteran game critic who values unique mechanics above all else because he&#8217;s seen most gameplay elements a thousand times before, nor am I a would-be <em>artiste</em> desperately attempting to create a legacy for himself.  For these reasons, I value fun over originality.  If people enjoy my game, that is enough for me.  If a nervous child at the doctor&#8217;s office finds solace in something I&#8217;ve created, my work has paid off immeasurably.  If I can contribute just a little more happiness to someone&#8217;s life, I am satisfied.</p>
<p>&#8220;If the motivations of indie developers are purely in the interest of gamers,&#8221; you might ask, &#8220;why charge money for these clones?&#8221;  Well, the reasons are simple.  First, we&#8217;re human, and we need to eat; it&#8217;s nice to get paid for one&#8217;s work, even when said work is not completely novel.  Second, even discounting the dozens or hundreds of hours of effort required to make the simplest of games, there are significant up-front costs to developers in creating games.  Developer licenses, development software, test hardware, and licensed or commissioned music, sound effects and graphics add up very quickly.</p>
<p>I did all of the programming and artwork myself for <em>Puzzle Panel</em>, as well as much of the sound, and it still cost me over $1,000 to make.  To a student, that is a great deal of money.  I charged a dollar for the game, but in the end I recouped <em>none</em> of the cost of creating it.  I don&#8217;t regret a thing, but this illustrates the point that game development is anything but a quick and surefire way to get rich.  For every developer making money on their games, there are literally tens of thousands who sink in countless hours and significant money, only to receive nothing in return.  That being the case, I don&#8217;t give much credence to the argument that developers such as <em>Tobar</em>&#8216;s are just in it for the money.</p>
<div style="margin-right: auto; margin-left: auto; text-align: center;">
<a href="http://www.mobileappleme.com/paid-applications-on-the-app-store-from-360idev" title="Click for more information on App Store economics." target="_blank"><img src="/images/pinchmedia_appstore.png" alt="Graph of App Store download distribution for paid apps.  The top 10% of apps receive more than 80% of downloads.  Click for more information on App Store economics." title="Graph of App Store download distribution for paid apps.  The top 10% of apps receive more than 80% of downloads.  Click for more information on App Store economics." width="600px" height="450px" /></a><br />
<span><small>PinchMedia&#8217;s statistics show that the top 10% of paid apps receive more than 80% of all downloads; most developers are left in the cold.</small></span>
</div>
<p>Thus far I&#8217;ve been writing specifically about indie developers.  I&#8217;d be remiss to not mention that established, big-budget studios often clone each other&#8217;s games, or worse, the games of indie developers.  I&#8217;m much less sympathetic to this; like Jonathan Holmes with <em>Tobar</em>, I certainly frowned when I read about <a href="http://www.destructoid.com/capcom-copies-splosion-man-with-maxplosion-191411.phtml">Capcom&#8217;s obvious copy of indie hit <em>&#8216;Splosion Man</em></a>.  But although I personally find this distasteful, I still don&#8217;t see a great need for alarm.  A well-made, original title which has found an audience has little to fear from pretenders.</p>
<p>Now, please don&#8217;t misunderstand me.  I am by no means saying that every developer should just go out and rip off the biggest franchise he can because there&#8217;s nothing wrong with unoriginality.  On the contrary, innovation and creativity should be encouraged and rewarded, and while I think it&#8217;s fine for hobbyist programmers to start out by mimicking their favorite titles, we should definitely turn a more critical eye to established studios who have the time, budget and experience to be original but are content with releasing an endless stream of sequels, clones and remakes.  But please, let&#8217;s cut the indie developers some slack.  Cloning a popular game to make a quick buck is simply not a winning proposition.  Regardless of their originality, regardless of their financial success or failure, I can assure you that indies do it for the love.</p>
<div>
<sup>1</sup> <small>Although it has its own unique art style, I count <em>Angry Birds</em> among the clones for its striking similarities to Armor Games&#8217; <em>Crush the Castle</em>.</small><br />
<sup>2</sup> <small>Ironically, the &#8220;negative&#8221; publicity <em>Tobar</em> is generating will probably help its sales more than anything else could have.</small>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/318/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What are lambdas good for, anyway?</title>
		<link>http://www.mlindgren.ca/archives/306</link>
		<comments>http://www.mlindgren.ca/archives/306#comments</comments>
		<pubDate>Thu, 30 Jun 2011 04:27:14 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[lambda]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=306</guid>
		<description><![CDATA[I had a discussion today about what lambda functions are used for, how they differ from regular functions, and why they&#8217;re important. I thought I&#8217;d reproduce it here, as it seems that lambdas are often thought of as confusing and obscure. The truth is that they&#8217;re very simple, and also quite powerful. While they can [...]]]></description>
			<content:encoded><![CDATA[<p>I had a discussion today about what lambda functions are used for, how they differ from regular functions, and why they&#8217;re important. I thought I&#8217;d reproduce it here, as it seems that lambdas are often thought of as confusing and obscure. The truth is that they&#8217;re very simple, and also quite powerful. While they can reduce readability if used incorrectly, they do serve an important purpose, and those who understand them should have nothing to fear from them. This discussion pertains specifically to lambda functions as they&#8217;re implemented in Python, but they&#8217;re very similar in other languages where they&#8217;re available.<span id="more-306"></span></p>
<p>I think the best way to explain lambdas is with a simple example. Say you want a switch statement. Python doesn’t have them, but what you can do is set up a dictionary and get a value out of it, which is sort of like a switch. However, you can&#8217;t do this&#8230;</p>
<pre class="brush: python; title: ; notranslate">
my_dict = {
            1 : my_func1(x, y),
            2 : my_func2(x, y, z)
          }
</pre>
<p>&#8230;because the functions will be evaluated when the dictionary is initialized, so if they modify any state (or if they just take a while to execute) you’ll get bad behaviour. Functions are first class objects in Python, so you could insert the functions into the dictionary like so…</p>
<pre class="brush: python; title: ; notranslate">
my_dict = {
            1 : my_func1,
            2 : my_func2
          }
</pre>
<p>&#8230;but that doesn&#8217;t work either, because you don’t know how many (or which) arguments you need to pass to the function when you pull it out of the dictionary. So, what to do?</p>
<pre class="brush: python; title: ; notranslate">
my_dict = {
            1 : lambda x, y, z: my_func1(x, y),
            2 : lambda x, y, z: my_func2(x, y, z)
          }
</pre>
<p>Lambdas solve the problem because they&#8217;re evaluated lazily. By being wrapped in a lambda, the functions won’t be evaluated until the lambda itself is called. Furthermore, you can use the lambda to normalize the parameters of each function, so that you can always call it using <code>my_dict[my_var](x, y, z)</code>, even though the first function being called doesn’t actually make use of the z parameter. There is no other way to accomplish this in Python, besides a big long ugly list of ifs. (Obviously you’d normally reserve this technique for situations where you have more than two options.)</p>
<p>You can also use the laziness aspect of lambdas to refer to variables which haven&#8217;t been declared yet, although I&#8217;d recommend against that because it can become quite confusing. Anything within the lambda is evaluated only when the lambda is called. </p>
<p>And there you have it! Those are the basics of lambdas in Python. Of course, the above is only a trivial example of what can be accomplished with lambdas.  If you&#8217;d like to learn more, there&#8217;s a great write-up available <a title="Lambda functions in Python" href="http://www.secnetix.de/olli/Python/lambda_functions.hawk">here.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/306/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m considering switching back to iOS. Here&#8217;s why.</title>
		<link>http://www.mlindgren.ca/archives/287</link>
		<comments>http://www.mlindgren.ca/archives/287#comments</comments>
		<pubDate>Mon, 13 Jun 2011 04:13:56 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=287</guid>
		<description><![CDATA[In September of last year I ditched my iPhone 3G and switched to the Android-powered HTC Desire (which I later sold in order to purchase a Desire Z, which sports a physical keyboard.) I&#8217;m sad to report that I&#8217;m now considering switching back to iOS, after less than a year on the Android platform.  The [...]]]></description>
			<content:encoded><![CDATA[<p><em>In September of last year I ditched my iPhone 3G and switched to the Android-powered HTC Desire (which I later sold in order to purchase a Desire Z, which sports a physical keyboard.)  I&#8217;m sad to report that I&#8217;m now considering switching back to iOS, after less than a year on the Android platform.  The following is an excerpt from an e-mail I wrote to a friend of mine whom I&#8217;d describe as a fervent Android evangelist, detailing some of the frustrations I have with the operating system and why I feel that I might be better served by iOS.  I&#8217;ve edited it slightly to make it more readable for anyone who might come across this blog.</em></p>
<p><em>I really want to like the Android platform, and writing this gave me no joy.  There are two reasons I&#8217;m posting it here, though.  The first is simply that the purpose of this website is for me to post about my programming and my experiences with technology (as well as whatever else catches my fancy.)  The second is that I hope that sharing my honest opinion about Android might be helpful to anyone considering a phone purchase.</em></p>
<p><span id="more-287"></span></p>
<p>As mentioned on Twitter, my number one complaint is having to use custom ROMs.  <em>There are always problems</em> with custom ROMs.  <a href="http://www.cyanogenmod.com/">CyanogenMod 7</a> caused my phone to reboot at random.  I also had problems with the Contacts app crashing.  All of these issues persisted throughout multiple versions of CM7 up to and including final.</p>
<ul>
<li>With the ROM I&#8217;m using now (a custom Sense ROM, can&#8217;t remember the exact name), I can&#8217;t set the SSID/password on my WiFi hotspot because Settings crashes when I try to.  I seriously haven&#8217;t used a single custom ROM that hasn&#8217;t had some issues with it.</li>
<li>You mentioned that Google is promising quicker updates, but I&#8217;ll believe it when I see it.  Are they actually forcing manufacturers to do this in order to use Android branding or get Google apps, or are they just asking nicely?  The latter won&#8217;t work.  And as far as I know, all that the Android update committee has promised is 18 months of updates following the launch of a new device.  So does that mean if I release a device and then push a point release to consumers 17 months later, I&#8217;ve fulfilled that? All I see here is flowery language, and frankly I don&#8217;t think anything is going to improve.
<p>The fact is that it&#8217;s not profitable for these manufacturers to update existing devices when they could spend the same development effort on releasing another six phones, so unless Google does something to change that, nothing will happen.</li>
</ul>
<p>The rest are in no particular order:</p>
<ul>
<li>No good Exchange client available.  Even Touchdown, which is expensive, is pretty bad.  The HTC client is okay, but it <del datetime="2011-06-12T02:36:52+00:00">doesn&#8217;t support important features like threading.</del> [I later realized that this is untrue; the HTC client does support threading.  I still find it cumbersome to use, and I've previously had problems with it failing to send messages without any notification of the failure.  That's a pretty big problem when you're using it for work e-mail.]</li>
<li>Launcher redraw, agghhhhhh.  Sense is horrendous for this, but I much prefer the built-in Sense apps to their Google alternatives, so I feel like I&#8217;m stuck using it.  Even on stock Android, it seems like I can&#8217;t really use live wallpapers or I have to wait for the launcher to reload all the time.</li>
<li>It&#8217;s annoying that when I read an e-mail in Gmail on my computer, the notification for it stays in my notification bar.  Also, my Gmail push seems to have stopped working of late.  To be fair, it remains to be seen how the new iPhone notification system handles these things.</li>
<li>I&#8217;ve noticed that with multiple IM clients (specifically, AIM and eBuddy) if I leave them running in the background while I&#8217;m doing other things like browsing the Internet, I&#8217;ll eventually get signed out or the app will close.  I don&#8217;t know if this is just because they&#8217;re not written correctly, but it&#8217;s annoying; IM is the only thing I really use background applications for and it doesn&#8217;t seem to work consistently.</li>
<li>I often have trouble sending/receiving MMS.  It&#8217;s frustrating when someone sends me an MMS and I have to ask them to e-mail it to me instead because it won&#8217;t download.</li>
<li>Camera quality on the Desire Z is pretty bad.  I&#8217;m certain the iPhone 4 is better in this department.  I feel like my Desire Z&#8217;s camera is actually worse than my Desire&#8217;s camera for still photos (although it&#8217;s better for video.)  This isn&#8217;t a strike against Android in particular, but the problem of lower-quality hardware is endemic to the platform in a certain sense.</li>
<li>A lot of apps in the Android market are just very poor quality. The iPhone app store has its fair share of bad apps, but I still feel like the average quality is much higher there.  In particular, any app that&#8217;s available for both platforms is almost always better on iPhone.  A prime example is Facebook.  The Android client was horribly broken for several weeks, and regardless of that, it just doesn&#8217;t support the same feature set as the iPhone version (e.g. watching videos.)</li>
<li>I complained about this even before I bought an Android phone, but the Android operating system is sometimes just not very responsive.  Scrolling is sometimes smooth, but rarely as smooth as on iPhone/Windows Phone 7.  Minor annoyance, but an annoyance nonetheless.</li>
<li>I&#8217;m not sure if you&#8217;re familiar with the life cycle of an app in Android, but basically every different screen you can go to in an app is a separate &#8220;activity&#8221;&mdash;essentially a separate application.  <em>What were they thinking</em> in designing it like this? It causes so many problems.  Any time the &#8220;state&#8221; of the phone changes (e.g. you rotate the device, the phone leaves/enters roaming, etc.) the activity is destroyed and re-created unless developers manually override this behavior.  This is why, for instance, the keyboard often disappears if you have it open and then rotate the phone.  (Highly polished apps like Twitter handle rotation properly, but don&#8217;t be fooled; it&#8217;s not the default behavior.  Many other apps do not handle rotation very well.)  Other examples of activity recreation problems include pop-up dialog boxes disappearing and fields losing focus.</li>
<li>Editing text sucks; I find that my phone never seems to do what I want it to when I&#8217;m trying to highlight or copy and paste some text.</li>
<li>I&#8217;ve had problems on both of my Android phones with the music player pausing in the middle of a song at random.  This has happened in multiple different media players.  It&#8217;s as though the phone thinks the headphones are being removed when they are in fact still in place.</li>
<li>I like being able to set alarm/ringer/media volume separately (although the iPhone can also do this), but I don&#8217;t like that the defaults on Android aren&#8217;t very sensible.  For instance, if I have my ringer silenced, it probably means that I also want my media silenced.  But that&#8217;s not what happens if I just use the volume button; I have to actually go into settings and change the media volume separately.</li>
<li>Sometimes Google Talk just flat out refuses to start for me until I reboot my phone.  This happened on multiple ROMs.  On the Desire I noticed that it seemed to refuse to start when I was low on internal storage.  I&#8217;m not sure why it does it on my Desire Z.  This should be a core platform feature on par with BBM, but it seems to be very poorly supported.</li>
<li>From a developer perspective, I hate paying a development fee to Apple to be able to install my apps on a non-jailbroken device.  I hate that once you&#8217;ve written an iPhone app, they basically blackmail you into continuing to pay them because otherwise they take down your app, which means that it may not be accessible to paying customers if they need to wipe their phone and re-install their apps.  I hate their greedy policies with regards to content subscriptions.  I hate their underhanded payment system which is, as a matter of statistical certainty, allowing them to make interest on millions of dollars that are nominally owed to developers but will never actually be paid.  In general, I hate that they treat their developers like serfs just because they can, even though those same developers made their platform what it is today.
<p>I hope that properly illustrates how much I hate Apple&#8217;s policies, and I hope that it underscores the significance of what I&#8217;m about to say: from a pragmatic perspective, I&#8217;d <em>still</em> rather be developing for iOS because Google&#8217;s development tools are <em>complete garbage.</em> I write all my code in vim, so I&#8217;m really not that picky, but I can only take so much of using Eclipse and having it literally <em>delete</em> my art assets from the file system.  (Not just removing them from the project &#8211; it literally deletes the files, seemingly at random.  I&#8217;ve never lost any work because of this, but it&#8217;s extremely frustrating nevertheless.)  Not to mention the Android emulator: it&#8217;s practically unusable for regular apps, and for games, forget about it.  You&#8217;re lucky if you get 5 FPS.</p>
<p>Even if I buy an iPhone, I do still want to finish my game for Android.  The code is cross-platform, so if I could compile and test it using Xcode in the meantime&#8230; even just using the iPhone simulator, since it can actually run games at a reasonable framerate&#8230; it would save me a lot of headaches.  Either way I&#8217;ll have to compile my app for Windows or iOS to do any marketing; taking screenshots of an Android app is difficult, and taking video is, as far as I can tell, impossible unless you have a phone with HDMI out and a capture card.  Ridiculous.</li>
<li>The behavior of the back button is inconsistent, and developers use it as a crutch rather than thinking about and carefully designing a proper workflow through their applications.  I was arguing about this behavior with someone on Reddit a while ago, and I found a good comment on Hacker News about it:<br />
<blockquote><p>I just got an Android with that great Virgin Mobile deal, and I was surprised at just how much the Back button is used in almost all contexts. It&#8217;s severely overloaded: want to get out of an on-screen keyboard? Back. Want to move back a screen? Back, except when it&#8217;s Google Reader that opened a Browser window, in which case it takes you back to the previous page that Browser had. Back through a menu? Back. Back to a previous page in Browser? Back.</p>
<p>It&#8217;s as if people just substituted the button for any instance in human language where &#8220;back&#8221; was used.&#8221;</p></blockquote>
<p>&#8230;(and another)&#8230;</p>
<blockquote><p>&#8220;Back&#8221; to some random place most of the time.<br />
1. receive email notification for two messages.<br />
2. click notification bar<br />
3. go to gmail app.<br />
4. open first message and click a link.<br />
5. you are now in the browser. (clicking back will close the window, but you want to read it later!)<br />
6. you long press HOME button (hoping to select gmail and read the other message)<br />
7. gmail is not in the open app list (WTH?!)\<br />
8. you curse, click home, find the gmail app, click it.<br />
9. now you are on the message with the link<br />
10. press BACK<br />
11. now you are on the message list (aha! not you home screen you came from!)<br />
12. click the 2nd message and read it</p></blockquote>
<p>In fairness, I&#8217;m of two minds about this because the back button does save a lot of screen real-estate by removing the necessity for on-screen navigation controls.  However, I&#8217;m not sure how much of an advantage that is in the face of the confusion it sometimes causes.</li>
<li>[This wasn't included in my e-mail to my friend, because I didn't know about it at the time.  I'm adding it now because it's fairly important.] Android can actually <em><a href="http://forum.xda-developers.com/showthread.php?p=12765846">lose SMS messages.</a></em>  That&#8217;s completely unacceptable on a phone.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/287/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android UI/UX gripes</title>
		<link>http://www.mlindgren.ca/archives/272</link>
		<comments>http://www.mlindgren.ca/archives/272#comments</comments>
		<pubDate>Sun, 17 Apr 2011 04:08:06 +0000</pubDate>
		<dc:creator>Mitch</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[response]]></category>
		<category><![CDATA[UI/UX]]></category>

		<guid isPermaLink="false">http://www.mlindgren.ca/?p=272</guid>
		<description><![CDATA[The week before last, whilst browsing Reddit I came across a blog by the name of &#8220;Android Gripes.&#8221; The name is perhaps a bit misleading, as it&#8217;s not actually a blog by an Android user hoping to spur Google into making UI improvements, as I would have expected. It is, rather, a blog by a [...]]]></description>
			<content:encoded><![CDATA[<p>The week before last, whilst browsing <a href="http://reddit.com">Reddit</a> I came across a blog by the name of <a href="http://android-gripes.tumblr.com/">&#8220;Android Gripes.&#8221;</a> The name is perhaps a bit misleading, as it&#8217;s not actually a blog by an Android user hoping to spur Google into making UI improvements, as I would have expected.  It is, rather, a blog by a self-proclaimed Apple fanboy (though he&#8217;s recently <a href="http://www.reddit.com/r/Android/comments/glbjz/android_gripes_why_do_apps_from_the_same_company/c1ogv3q">edited his about page to remove that admission</a>) complaining about Android for the sake of&#8230; well, complaining about Android.<span id="more-272"></span></p>
<p>That might be a little unfair.  Perhaps I should let the author speak for himself:</p>
<blockquote><p>I have constantly heard many gripes about Android. Recently I happened to have access to some Android phones and use them in a daily base. The more I use Android, the more I feel that Android is indeed a half-baked OS, its UX/UI is horrible and various hardwares are poorly designed. It’s true that those phones are working like smartphones, better than feature phones from old school, but they ignore a lot of the details. Just for Google’s own benefit, they helped handset manufactures brutally dumped a huge amount of unpolished devices to the market. They made people think this is how smartphones should work. This is so unfair to consumers. <strong>IMHO, it is no different from committing a crime.</strong> That’s why I made the cartoon of &#8220;Android Gripes&#8221; as a Monopoly &#8220;Go Directly To Jail&#8221; card showing an Android on it.</p>
<p>As much as I believe in Apple, I think everybody deserves great user experience, especially when it comes to phones. I think it is my mission to let more people know that Android does not provide you that. Android only provides inferior user experience. You either admit it and bear with it, or go for better alternatives. That’s why I started writing this blog.</p></blockquote>
<p>(Emphasis added.)  English is not the author&#8217;s native language, so you&#8217;ll have to excuse the occasionally odd grammar.  Now, it&#8217;s immediately apparent that the author&#8217;s stated opinion of Android is patently absurd.  As someone who bought into Apple technology and then sold around a hundred copies of an iPhone application, but saw no profit whatsoever due to Apple&#8217;s payment policies, the line about Google having committed a crime is particularly rich<sup>1</sup>.</p>
<p>Redditors have also <a href="http://www.reddit.com/r/Android/comments/glbjz/android_gripes_why_do_apps_from_the_same_company/">pointed out</a> that a number of comparisons the Android Gripes author makes are somewhat unfair.  For instance, he <a href="http://android-gripes.tumblr.com/post/4409289546/why-do-apps-from-the-same-company-look-worse-on-android">compares old, oudated Android apps</a> against apps which were recently updated on iOS, and misleadingly remarks on &#8220;extra&#8221; (meaning blank) space in the Facebook app.  The blank space in question <em>does</em> contain content when one is signed into a legitimate profile.</p>
<p>With all of that said, I&#8217;m not writing this post to refute the Android Gripes author.  I actually agree with an unfortunate number of his points.  While there&#8217;s a lot that can be said about where the iPhone&#8217;s UI/UX fails (I&#8217;ve <a href="http://www.mlindgren.ca/archives/151">previously mentioned</a> their complete lack of a workable notification system), excuses and rationalizations won&#8217;t do anything to improve the state of Android apps.  Even if you believe that Android&#8217;s UI/UX is better than Apple&#8217;s (and I do feel that that&#8217;s a hard case to make), I think it&#8217;s undeniable that there&#8217;s room for improvement.  It&#8217;s certainly worth mentioning that some of the Android Gripe&#8217;s authors examples are misleading, but what&#8217;s more important is that we—that is to say, Android developers—ask ourselves where we&#8217;re failing users, why it&#8217;s happening, and what we can do to improve the platform.  In a future post, I&#8217;ll offer my perspective on where Android could be improved.</p>
<p><sup>1</sup><span style="font-size: 0.8em;">Of course, Apple and I entered into a legal agreement regarding how and when funds would be paid, so what they did was in no sense criminal, although I might go so far as to say that their payment system in general is &#8220;underhanded.&#8221;  My point, though, was to highlight the absurdity of the Android Gripes author&#8217;s statement.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mlindgren.ca/archives/272/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

