<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Disqus - Latest Comments for drealmer</title><link>http://disqus.com/by/drealmer/</link><description></description><atom:link href="http://disqus.com/drealmer/comments.rss" rel="self"></atom:link><language>en</language><lastBuildDate>Sat, 18 Aug 2012 07:17:54 -0000</lastBuildDate><item><title>Re: #AltDevBlogADay » Cleaning bad code</title><link>http://www.altdevblogaday.com/?p=27238#comment-622666453</link><description>&lt;p&gt;When it comes to cleaning up old code there is an anti-pattern I've seen countless times.&lt;/p&gt;&lt;p&gt;1) some guy wrote a little ad hoc code a while ago, this code proved useful, and became popular.&lt;br&gt;2) over time, that little piece of code grew as various people started adding little bits of functionality as required.&lt;br&gt;3) the original code was never designed for such growth, and never maintained accordingly, so it becomes a big unreliable kludge that remains somehow usable because most people know where the quirks are.&lt;br&gt;4) at some point, it is decided to start everything from scratch, with the one clean and modular design to rule them all.&lt;br&gt;5) the effort leads to a large and complex abstract system that can only address some practical uses of the original ad hoc code by jumping through hoops.&lt;br&gt;6) hardly anybody sees the big picture of what is going on anymore, but the new system gets used anyway, generating frustration, tons of boilerplate code, and inefficient design through unawareness and misunderstanding of what already exists.&lt;br&gt;7) writing boilerplate feels like productive work, so it keeps going for a while.&lt;br&gt;8) at some point, unable to get the new system to efficiently handle a simple task, some guy writes a little ad hoc code.&lt;br&gt;9) repeat&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sat, 18 Aug 2012 07:17:54 -0000</pubDate></item><item><title>Re: Seeking the Golden Path</title><link>http://www.lar.net/2012/08/08/seeking-the-golden-path/#comment-613308027</link><description>&lt;p&gt;I completely agree with your observation that stepping down from platform to platform as the bar raises is not damage control, it's a death march. Stepping up is a big leap of faith, but having just read through the book "Gamers at Work" (stories of successful start-up founders in the video games industry), that seems to be the only way to massive success. It's full of stories of a few guys pulling 100+ hours a week in a basement, signing upfront for three PS1 titles and delivering.&lt;/p&gt;&lt;p&gt;I recently discussed with a game designer colleague, and we agreed that what we wanted to do the most was not big mainstream games, but "niche" games. I am always wary of the "niche" term because it might sound pejorative, but in my mind it's not. Catering for a specific audience has lots of advantages, mostly because these people care. And people who care tend to buy, and tend to talk about the games they like with their friends. Of course a high budget niche game is risky, but I think it might pay off a lot more than going full frontal with Far Cry.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Wed, 08 Aug 2012 07:15:33 -0000</pubDate></item><item><title>Re: #AltDevBlogADay » Simulating a Loaded Dice in a Constant Time</title><link>http://altdevblogaday.com/2012/04/04/simulating-a-loaded-dice-in-a-constant-time/#comment-485913096</link><description>&lt;p&gt;Using rand() with modulo is also a bad idea because the low order bits might not be as random as the whole number (but it depends on the implementation) : &lt;br&gt;&lt;a href="http://c-faq.com/lib/notveryrand.html" rel="nofollow noopener" target="_blank" title="http://c-faq.com/lib/notveryrand.html"&gt;http://c-faq.com/lib/notver...&lt;/a&gt;&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Wed, 04 Apr 2012 07:53:06 -0000</pubDate></item><item><title>Re: Thoughts on game journalism</title><link>http://www.lar.net/2012/03/02/thoughts-on-game-journalism/#comment-458119595</link><description>&lt;p&gt;I still remember, a decade ago, before I joined Larian I was an avid reader of a video games magazine. &lt;/p&gt;&lt;p&gt;Then came the "review" of Divine Divinity: an "humorous rant" that told little about the game, but concluded it was extremely bad and gave a terrible score. One month later, in a very small erratum they basically said "sorry we tested the wrong version, the game is actually fine".&lt;/p&gt;&lt;p&gt;A few years later, Beyond Divinity came out. I only worked a very little bit on it (some quest scripting) but was feeling immensely proud nonetheless. I still vividly remember the shock when I read the dreadful review of that same magazine. They stated once again DD was awful (apparently overlooking their own erratum), and added some downright offending and condescending remarks about Belgium and Larian, before giving BD one of the lowest scores ever.&lt;/p&gt;&lt;p&gt;Without mentioning my involvement in the game, I carefully managed to ask "why the hate?" to people working at this magazine, the answer I got was: "2D RPG are niche games nobody cares about anymore, good scores are out of the question".&lt;/p&gt;&lt;p&gt;Now I always keep this whole story in the back of my mind every time I am reading a review of a game or anything else for that matter. I also remember the countless hours I spent playing and enjoying DD, and the many people I met who told me how much they enjoyed DD and BD (I haven't really played BD myself, working on it completely spoiled the story). Finally I remember how much fun I had in my gamer's life with titles that got slaughtered by the critics.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Tue, 06 Mar 2012 15:51:36 -0000</pubDate></item><item><title>Re: How I tried to save Divine Divinity</title><link>http://www.lar.net/2012/02/13/how-i-tried-to-save-divine-divinity/#comment-438657621</link><description>&lt;p&gt;Ah finally, I understand the whole story behind that alien! Hope you still have it around, pulling his organs in and out was a favorite coffee break hobby.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Tue, 14 Feb 2012 05:10:34 -0000</pubDate></item><item><title>Re: http://altdevblogaday.com/2011/11/01/explanations-come-later/</title><link>http://altdevblogaday.com/2011/11/01/explanations-come-later/#comment-355087878</link><description>&lt;p&gt;I like the image of something to "hang" ideas onto. Is it true that every student needs time at one point or another to practice what he has learned, and experiment for himself. If the class keeps moving further, this is a missed opportunity that leads to lack of understanding, frustration and demotivation. But to be honest, when I had free time during my studies, I was not really using it to practice what I had learned, and even less to prepare next classes. The big problem is that everybody learns at his own pace, and students don't need to stop and practice all at the same time. Either you leave time for everybody and a large group starts slacking off, or you keep moving and you waste a lot of potential. Finding the right balance is damn hard, I am not sure I'll ever manage, but I'll keep trying.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Thu, 03 Nov 2011 16:39:27 -0000</pubDate></item><item><title>Re: http://altdevblogaday.com/2011/11/01/explanations-come-later/</title><link>http://altdevblogaday.com/2011/11/01/explanations-come-later/#comment-355066504</link><description>&lt;p&gt;Did my little post spawn a whole new one? I am humbled, can't wait to read yours!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Thu, 03 Nov 2011 16:26:18 -0000</pubDate></item><item><title>Re: http://altdevblogaday.com/2011/11/01/explanations-come-later/</title><link>http://altdevblogaday.com/2011/11/01/explanations-come-later/#comment-355064507</link><description>&lt;p&gt;Many rule books are terrible, and translation only worsen things. They spend great lengths explaining things a small illustration would make crystal clear, they state and re-state the obvious and miss the corner cases, and are generally unusable as a quick reference during gameplay. Hopefully, not all of them are that bad.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Thu, 03 Nov 2011 16:25:07 -0000</pubDate></item><item><title>Re: http://altdevblogaday.com/2011/11/01/explanations-come-later/</title><link>http://altdevblogaday.com/2011/11/01/explanations-come-later/#comment-354971455</link><description>&lt;p&gt;I always considered that understanding the game was part of the game, I was also playing a lot by experimentation and then looking into the manual to figure out why my character kept dying of dysentery. For me games are a lot about testing stuff without fear of permanent damage, and understanding that way is very rewarding. But there is nothing new under the sun, that's what serious gaming is all about.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Thu, 03 Nov 2011 15:33:39 -0000</pubDate></item><item><title>Re: http://altdevblogaday.com/2011/11/01/explanations-come-later/</title><link>http://altdevblogaday.com/2011/11/01/explanations-come-later/#comment-354959312</link><description>&lt;p&gt;It is both context and implications (but they are somehow part of the context, and it is a rather fuzzy feeling anyway). Just like all self-referencing problems, there is no right way of approaching it linearly. When the context is introduced before the subject nothing makes it meaningful and memorization suffers, when the subject is introduced before there is no sense of purpose, and once again the lack of meaning hinders understanding. Getting lost in the middle of all the available information might be a required step in the understanding process. Sometimes I wonder if the best way of teaching would not be to throw a problem at the students during their first programming class and say "go ahead, figure out how to solve it with a computer, and ask me when you are stuck".&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Thu, 03 Nov 2011 15:24:32 -0000</pubDate></item><item><title>Re: http://altdevblogaday.com/2011/11/01/explanations-come-later/</title><link>http://altdevblogaday.com/2011/11/01/explanations-come-later/#comment-354940531</link><description>&lt;p&gt;The way we think and memorize is very different from people to people, in the middle of a game I recently asked a group of friends to describe the steps they took to compute the sum of the handful of dice I just rolled. The four of us had a completely different approach, it was fun to see how such a simple and tangible problem was solved in so many different ways. So I can't even fathom how much more complicated and abstract matters must vary.&lt;/p&gt;&lt;p&gt;I could not describe the way I conceptualize the basic programming concepts, like functions, variables, program flow and such, but when I am thinking in such terms I have a clear mental picture of what I am doing. Simply not the kind of picture words can describe, so the best is to explain the same thing from many different points of view until others can create their own representation of it, but this is all so subjective...&lt;/p&gt;&lt;p&gt;Still, when it comes to teaching I guess we all have role models in our former teachers. One of my most influential teachers was constantly telling anecdotes about the early days of computing, and how the situation gradually evolved into the way things are done nowadays. That was really efficient with me, and that even triggered a fascination for the early days of computing. Now I can't help but tell those anecdotes again to my own students, but I can clearly see that receptivity varies a lot from one to the other.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Thu, 03 Nov 2011 15:10:27 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-315842720</link><description>&lt;p&gt;Really interesting, being no C# programmer myself I wasn't aware of this, thanks for pointing it out.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Tue, 20 Sep 2011 07:18:02 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-314389694</link><description>&lt;p&gt;A static member function can still access the private parts of any instance of the type it belongs to.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 18 Sep 2011 11:27:11 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-314378761</link><description>&lt;p&gt;I am not sure I understand it right, do you have a counter-example where ADL would fail?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 18 Sep 2011 11:19:44 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-314375248</link><description>&lt;p&gt;I like the way that non member functions can be defined in other headers as the data types it works on, it makes for a clearer separation between data and its processing through public interfaces, but I agree it's a matter of taste at this level. It also makes it more convenient to share generic algorithms without relying on inheritance. Finally, I also like the way that non member functions clearly state that they do not rely on private information, it makes it easier for me to conceptualize code this way.&lt;/p&gt;&lt;p&gt;There seem to be no conflict between DOD and OOP besides the fact that unconsidered use of some OOP features might get in the way. But I don't feel qualified enough to start an argument on this topic with so many experts around :)&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 18 Sep 2011 11:17:13 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-314211945</link><description>&lt;p&gt;I wholeheartedly agree, namespaces can be extremely useful for that kind of things. But I have seen so much code with static member functions that have nothing to do with private stuff that I am not sure enough people correctly understand what a namespace is.&lt;/p&gt;&lt;p&gt;That being said, it does not replace the need for some auto-completion, but at least it "hierarchicalizes" (is there a word for that?) the search. But then, how many codebases are making proper use of namespaces? And by proper I don't mean "middlewarename::"...&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 18 Sep 2011 05:46:39 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-314209888</link><description>&lt;p&gt;Sorting or filtering by return type is a step in the right direction, but with C++ these things can get awfully complicated (type inference in templates, implicit conversions).&lt;/p&gt;&lt;p&gt;I agree with your other suggestions, but I would add something that brings back the convenience of the "object.function" notation. Maybe that if I type something between parentheses and hit a key I would get the list of functions that could take this as first parameter? I breaks a bit the flow of writing, because we would be jumping back and forth, but without changing the syntax of C++ I am not sure a solution exists.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 18 Sep 2011 05:35:50 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-314208817</link><description>&lt;p&gt;No that's not really the issue, but I should have been clearer on that point. Don't worry it starts with a clear idea of what has to be done: "now I have to swap these two elements", but then two questions arise:&lt;/p&gt;&lt;p&gt;1. is there already a function doing just that? or shall I write a new one?&lt;br&gt;2. if it exists, what is the name?&lt;/p&gt;&lt;p&gt;Of course, with swap as an example it is silly, but bear with me. I would expect something to help me find the function, the two only things that could be used for that search are the parameters and the return type (see AsafH comment below). But the return type might not always be clear, swap could return a reference to the first object, or a comparison value (that would violate the single responsibility principle, but sometimes these things happen), or whatever. So I am left with the parameters, and if there was a convenient way of getting all functions taking the type  of "a" as a first parameter that would really help IMHO.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 18 Sep 2011 05:29:52 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-313989820</link><description>&lt;p&gt;I must confess that I don't really have an idea how code completion works on other languages, besides C++ I am only using Lua these days (and without any IDE). And I wonder how it works on other paradigms, like functional programming.&lt;/p&gt;&lt;p&gt;Of course, considerations about the average skill level of programmers are relevant, and even if a concerning amount of code is written by copy-pasting without enough understanding it still somehow works and more often than not it is the only thing that matters in the end. But I still believe that challenging the way we do things is beneficial, even if it does not change anything, better understanding the flaws of what we have to deal with can't be bad.&lt;/p&gt;&lt;p&gt;I wrote this on a 10" netbook, and I am starting to miss EGA.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sat, 17 Sep 2011 17:13:14 -0000</pubDate></item><item><title>Re: code completion, a blessing and a curse « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/17/code-completion-a-blessing-and-a-curse/#comment-313980043</link><description>&lt;p&gt;Good suggestion, I am personally using a convention of small prefixes categorizing the functions (and then I rely on CTRL+J), I find it to be a bit more convenient than using the class names for the reasons you mentioned, but if IntelliSense could offer some filtering on parameter type that would really help. An alternative would be to use namespaces, but I prefer to avoid the :: notation altogether before I could properly explain classes to my students to avoid confusion.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sat, 17 Sep 2011 16:47:31 -0000</pubDate></item><item><title>Re: Poll, don’t push « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/02/poll-dont-push/#comment-302179386</link><description>&lt;p&gt;I am actually all for using some kind of MVC approach, so that high dependency code stays in the controller. But I still believe that having that controller poll for info is more robust and simpler than expecting messages to be sent from every place that need to affect the curtain. Otherwise it doesn't really solve the problem of buggy code paths that forget to properly clean up after themselves.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 04 Sep 2011 05:23:18 -0000</pubDate></item><item><title>Re: Poll, don’t push « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/02/poll-dont-push/#comment-302177668</link><description>&lt;p&gt;I completely agree, there are cases where complex behavior is unavoidable, and this is where we need a reliable interface that minimizes the risk of error, ie DSL. Altough, just like Timo Kämäräinen suggested in his comment, if you alredy have some generic state-synchronization system you can rely on, you can avoid quite a lot of explicit event notifications.&lt;/p&gt;&lt;p&gt;By the way, the challenges of an MMO combat system would make for an amazing article. Did you already write one on this topic somewhere?&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sun, 04 Sep 2011 05:14:15 -0000</pubDate></item><item><title>Re: Poll, don’t push « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/02/poll-dont-push/#comment-301919578</link><description>&lt;p&gt;Indeed, that kind of code is usually branching heavy and that worries me too. But I still believe it is easier to optimize code that works than to fix optimized code. But where I agree with your comments on simplicity and robustness, I think it still depends a lot on the complexity of the rest of the game code, making a decision like the in curtain example requires to poll stuff from a bit everywhere and that ends up a bit messy.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sat, 03 Sep 2011 16:55:52 -0000</pubDate></item><item><title>Re: Poll, don’t push « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/02/poll-dont-push/#comment-301916837</link><description>&lt;p&gt;Just like many programmers I have a fascination for functional languages, and every time I am writing some kind of state transformation I wish I could use a language with lazy evaluation and immutable data. But I never spent enough time properly learning such a language to the point I could use it "in the real world", and I am really ashamed of it. Damn, I don't want to lie on my deathbed muttering in a faint voice "I still can't code in Haskell".&lt;/p&gt;&lt;p&gt;On the other hand I am always kind of scared when people start talking about FSM. Because about everything can be considered as some kind of FSM I have seen more than my share of templated boilerplate around the most trivial code. I love to keep state and processing as distinct as can be (and that does not contradict the "code is data" principle, I think it's orthogonal), and the less state the better. Simple stuff should stay simple, let's avoid redundancy.&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sat, 03 Sep 2011 16:48:06 -0000</pubDate></item><item><title>Re: Poll, don’t push « #AltDevBlogADay</title><link>http://altdevblogaday.com/2011/09/02/poll-dont-push/#comment-301907708</link><description>&lt;p&gt;Back when I was working on a small networked racing game I remember having a hard time with special projectiles that could be created by some player and destroyed by another. My lack of experience lured me into a rather complex system for dealing with ownership, and I ended up with way too much code dealing with synchronization issues, like the reception of update packets for projectiles that did not exist anymore. I need a time machine to send my younger self a printout of Jamie's blog post :)&lt;/p&gt;&lt;p&gt;Thanks for the nice words!&lt;/p&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Drealmer</dc:creator><pubDate>Sat, 03 Sep 2011 16:28:15 -0000</pubDate></item></channel></rss>