<?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/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Shadowlessness</title>
	<atom:link href="http://yaserzt.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://yaserzt.com/blog</link>
	<description>Shadowlessness, and how it feels.</description>
	<lastBuildDate>Sat, 05 Nov 2011 10:25:02 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<copyright>Copyright &#xA9; Shadowlessness 2010 </copyright>
	<managingEditor>y@yaserzt.com (Shadowlessness)</managingEditor>
	<webMaster>y@yaserzt.com (Shadowlessness)</webMaster>
	<image>
		<url>http://yaserzt.com/blog/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Shadowlessness</title>
		<link>http://yaserzt.com/blog</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>Shadowlessness, and how it feels.</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>Shadowlessness</itunes:author>
	<itunes:owner>
		<itunes:name>Shadowlessness</itunes:name>
		<itunes:email>y@yaserzt.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://yaserzt.com/blog/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Another Birthday Present?!!!</title>
		<link>http://yaserzt.com/blog/archives/574</link>
		<comments>http://yaserzt.com/blog/archives/574#comments</comments>
		<pubDate>Fri, 04 Nov 2011 20:59:40 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=574</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Holy shit! Holy shit! It&#8217;s a Radeon HD 6990 (dual GPU)!!! Holy fucking tera FLOPS!</p>
<p>Thanks, Siamac!<br />
<div id="attachment_575" class="wp-caption aligncenter" style="width: 410px"><a href="http://yaserzt.com/blog/wp-content/uploads/2011/11/Radeon-HD-6990x2-2011-11-04-23.51.15.jpg"><img src="http://yaserzt.com/blog/wp-content/uploads/2011/11/Radeon-HD-6990x2-2011-11-04-23.51.15-400x300.jpg" alt="Yes, an AMD Radeon HD 6990x2 graphics card!" title="Radeon HD 6990x2 2011-11-04 23.51.15" width="400" height="300" class="size-medium wp-image-575" /></a><p class="wp-caption-text">AMD Radeon HD 6990x2</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/574/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Goodbye, dmr&#8230;</title>
		<link>http://yaserzt.com/blog/archives/570</link>
		<comments>http://yaserzt.com/blog/archives/570#comments</comments>
		<pubDate>Sun, 09 Oct 2011 13:26:31 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=570</guid>
		<description><![CDATA[#include &#60;stdio.h&#62; int main () { printf ("goodbye, dad.\n"); return 0; }]]></description>
			<content:encoded><![CDATA[<p><strong>
<pre style="font-size: 200%;">
#include &lt;stdio.h&gt;

int main ()
{
    printf ("goodbye, dad.\n");
    return 0;
}
</pre>
<p></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/570/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>New Cellphone! Yay!!!</title>
		<link>http://yaserzt.com/blog/archives/565</link>
		<comments>http://yaserzt.com/blog/archives/565#comments</comments>
		<pubDate>Mon, 03 Oct 2011 10:01:30 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=565</guid>
		<description><![CDATA[Just got a coooooooooool new cellphone as a (early) birthday gift. It&#8217;s a Samsung I9100 Galaxy S II. I&#8217;ll write more about it later, but let me tell you now that it&#8217;s a monster! Thank you, sweetheart.]]></description>
			<content:encoded><![CDATA[<p>Just got a coooooooooool new cellphone as a (early) birthday gift. It&#8217;s a Samsung I9100 Galaxy S II. I&#8217;ll write more about it later, but let me tell you now that it&#8217;s a monster!</p>
<p>Thank you, sweetheart.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/565/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The IMDb DB</title>
		<link>http://yaserzt.com/blog/archives/562</link>
		<comments>http://yaserzt.com/blog/archives/562#comments</comments>
		<pubDate>Mon, 19 Sep 2011 05:58:29 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[movie-list]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=562</guid>
		<description><![CDATA[After having lost it for a couple of years(!) I found the IMDB data files again! You can start from here and get the Gzipped text files from an FTP mirror. Oh, so much data! Sweet sweet data! My &#8220;Sprunger&#8221; is fully tumescent!]]></description>
			<content:encoded><![CDATA[<p>After having lost it for a couple of years(!) I found the IMDB data files again! You can start from <a href="http://www.imdb.com/interfaces">here</a> and get the Gzipped text files from an FTP mirror.</p>
<p>Oh, so much data! Sweet sweet data! My &#8220;Sprunger&#8221; is fully tumescent!</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/562/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>C++11?</title>
		<link>http://yaserzt.com/blog/archives/557</link>
		<comments>http://yaserzt.com/blog/archives/557#comments</comments>
		<pubDate>Sun, 14 Aug 2011 07:28:20 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=557</guid>
		<description><![CDATA[The C++0x standard has been approved by ISO/IEC. This probably means that we&#8217;re going to be calling this iteration of the language C++11. It amazes me how much of the language and the standard library people don&#8217;t use already. And I mean the C++98 stuff that has been around for 13 fracking years! True, there [...]]]></description>
			<content:encoded><![CDATA[<p>The C++0x standard has been approved by ISO/IEC. This probably means that we&#8217;re going to be calling this iteration of the language <strong>C++11</strong>.</p>
<p>It amazes me how much of the language and the standard library people don&#8217;t use already. And I mean the C++98 stuff that has been around for 13 fracking years! True, there are professional developers that decide to use a specific subset of the language, or in some situations some design decisions are &#8220;inherited&#8221; by programmers working on an existing body of code&#8230; but I&#8217;m not bitching about them (much!) I&#8217;m talking about programmers and their new projects and sample code. New programmers (usually university or high school students) don&#8217;t learn about most of C++ because their teachers don&#8217;t know them and that almost all programming books on C++ suck (sometimes, it&#8217;s not the author&#8217;s fault; C++ is just too vast and complex.) More &#8220;experienced&#8221; programmers usually learn about a subset of the language and form a &#8220;comfort zone&#8221; and stay in there; because anything out of that zone will upset them. The bad thing is that this C++ comfort zone is &#8211; more often than not &#8211; way too small.</p>
<p>It might (or might not) include good polymorphism and class hierarchies (which I don&#8217;t like, incidentally) but almost always it does not include any meaningful use of generic programming, higher order and (some vestiges of) functional programming, attention to memory and layout (I believe many non-trivial programs have ran or are running into address-space limitations as we speak,) exception-safe and exception-correct programming, development of domain-specific mini-languages, real scalability and thread-correctness, etc.</p>
<p>Of course, everybody is free to program the way they want or can. I&#8217;m not the one to judge. All I&#8217;m saying is that even in the single language we use, there is much that we don&#8217;t take advantage of (let alone using other languages that might be more suitable for a job.)</p>
<p>Now, enters a new and feature-rich standard of C++ into an already starved expertise pool. There are so many <em>real</em> features and improvements in this iteration of the standard that they <em>could</em> overwhelm at the first glance. There is (just off the top of my head) r-value references and perfect forwarding, lambdas, variadic templates, compile-time constant expressions, user-defined literals, better enumerations, <tt>typedef</tt>ing templates, initializer lists, better control over inherited methods, better control over compiler-generated class methods, finally some semblance of class- and method-specific directives (alignment, etc.,) <tt>extern</tt> templates, forwarding constructors, initializing class data members upon declaration, <tt>auto</tt> and <tt>decltype</tt> keywords for type inference and whatnot, (oh, I almost forgot!) the cool and hip new way of declaring the return type of a function, and much more.</p>
<p>The above features are just the ones that I could recall right now and in the core language only. I need and want to use these features, additions and improvements right now. They all make my code better and my life easier. These are not some obscure features for practitioners of &#8220;black magic&#8221;. They benefit the likes of you and I, not language lawyers, but people with real applications and real problems.</p>
<p>I guess what I&#8217;m saying is that as a C++ programmer, you should not be afraid of experimenting with the new features today. Don&#8217;t wait for the books or libraries and frameworks to pick them up. Books will take years and they will be all wrong and useless anyways (of course, with a couple of stellar exceptions.) Again, only with a few exceptions, libraries and frameworks will be burdened with incompetence, corporate politics, backward and forward compatibility and compiler compatibility (with the most brain-dead compilers. Please don&#8217;t rely on Qt or wxWidgets or whatever to do your C++ for you. Please don&#8217;t wait for Deitel and Deitel to teach you C++.</p>
<p>Start with Wikipedia. Read various texts and tutorials and overviews that uncle Google finds for you. Start experimenting and teaching yourselves the new features of C++11; and any of the old feature-set that you might be rusty about. It&#8217;s a great time for C++, as it is now a better language than it ever was. It&#8217;s probably the best general purpose programming language out there for people with actual hardware limitations on their applications. And it can do practically everything. (Also, C++ supports the widest range and mixture of programming paradigms of any programming language that I know of.)</p>
<p><strong>Notes</strong>: I have three points to add to the above rant.</p>
<p>First is about the advancements in the standard library. They are much more substantial and accessible for the lazy programmer (I don&#8217;t use the term &#8220;lazy programmer&#8221; as a negative phrase!) as most of the additions are already available with the most popular compilers, or even in Boost if your compiler doesn&#8217;t have them yet or if you don&#8217;t like your compiler vendor&#8217;s standard library! I&#8217;m much less enthusiastic about the new C++ standard library features simply because most of them have been available as part of Boost for years and therefore are hardly new. Still exciting, though!</p>
<p>Second. No compiler that I work with has support for all or even most of the new core language features, although GCC is close (not to &#8220;all&#8221;, but it is close to &#8220;much&#8221;.) The state of support in Microsoft&#8217;s Visual C++ is closer to <em>pathetic</em>. Intel C++&#8217;s condition is not much better either. A partial table of the state of support for various new features of the language across quite a few compilers can be found <a href="http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport">here</a>. Right now, I (and probably everyone else) would suggest using GCC. Get your hands on 4.7 if you can, or use 4.6 or even 4.5. Good luck!</p>
<p>It seems that I&#8217;ve forgotten my third note! Maybe it&#8217;d come to me later.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/557/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Giving HTML Emails a Try</title>
		<link>http://yaserzt.com/blog/archives/554</link>
		<comments>http://yaserzt.com/blog/archives/554#comments</comments>
		<pubDate>Tue, 21 Jun 2011 15:50:00 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ignore]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=554</guid>
		<description><![CDATA[I have decided to change my all-plain-text email policy and give HTML emails a try. This is mainly due to bad right-to-left support in plain text email messages (or in Thunderbird?) but there are other reasons. I will give it a try and in a few weeks decide whether I like to make it permanent [...]]]></description>
			<content:encoded><![CDATA[<p>I have decided to change my all-plain-text email policy and give HTML emails a try. This is mainly due to bad right-to-left support in plain text email messages (or in Thunderbird?) but there are other reasons. I will give it a try and in a few weeks decide whether I like to make it permanent or not.</p>
<p>I don&#8217;t know why I feel so shitty about it, like I&#8217;m cheating on my significant other or something!</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/554/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Of Pursuit of Programming in Universities</title>
		<link>http://yaserzt.com/blog/archives/547</link>
		<comments>http://yaserzt.com/blog/archives/547#comments</comments>
		<pubDate>Thu, 21 Apr 2011 03:20:59 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[life]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[stupidity]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=547</guid>
		<description><![CDATA[I was reading this post on the AltDevBlogADay and noticed how similar it was to my own experience. The writer&#8217;s point is how removed most of academia is from the real world (at least in the programming world) and he relates a couple of anecdotes from his own past. It&#8217;s a short and funny read [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading <a href="http://altdevblogaday.org/2011/04/01/stories-of-universities/">this post</a> on the <a href="http://altdevblogaday.org/">AltDevBlogADay</a> and noticed how similar it was to my own experience. The writer&#8217;s point is how removed most of academia is from the real world (at least in the programming world) and he relates a couple of anecdotes from his own past. It&#8217;s a short and funny read (specially the part about the floating-point number format in memory. I mean, talk about bad bad misinformation, not to mention the idiocy!)</p>
<p>Anyways, near the end of the post, he mentions that he <em>somehow</em> figured out that all the things his professors said were not the truth, the whole truth and nothing but truth. I remember exactly how and when this happened to me.</p>
<p>It was the first semester in my university (which was an absolutely mediocre one.) In the software engineering program over there, there was an &#8220;Introduction to Programming&#8221; for the first semester, and an &#8220;Advanced Programming&#8221; (or something like that) course for the second. Back then (in 1999) they taught Pascal in the introductory course and C++ in the advanced. My Pascal teacher was a young guy. A pretty decent teacher and academic (and quite orderly!) Those days, the way to program in Pascal on DOS/Windows and not get into the whole mess of Object Pascal and VCL was to use Borland Pascal (or Turbo Pascal,) which ran on DOS and was primarily targeted to that platform. Not that this was a bad thing, because most (almost all) of the students were unfamiliar with UNIX and programming for Windows was&#8230; well, <strong>is</strong> a mess.</p>
<p>Anyways, when he was teaching Pascal, he mentioned a few times that if you do this or that, the compiler will issue <em>warning</em>s. This was a bit puzzling for me, since I had been using Turbo Pascal for 3-4 years then and I had never seen anything like warnings being issued by the compiler! It either gave errors, or it compiled the code happily. It should be obvious for any programmers in the audience what the problem was by now, but of course, before then I had never actually written any C/C++. My experience was limited to some BASIC variants (Commodore, GW, Q, Visual (shudder),) Pascal and some Assembly. But I was beginning to dabble in C, in anticipation for the next semester and it suddenly became obvious to me that our instructor did no Pascal programming himself. He just had C experience and had read some books on Pascal!</p>
<p>There were many more incidents like this with many more teachers; little mistakes that would absolutely never happen if they had any real experience, and not book knowledge. (I should mention here that not all my teachers were like that. Some of them were surprisingly on top of the subject they taught, e.g. the white-haired 60-year old associate professor who taught Assembly!) I started resenting some of my teachers for their blatant ignorance and shamelessness. In time though, I learned that all of them knew stuff that I didn&#8217;t know and could learn. That&#8217;s when the university became much more tolerable. I only had to treat all important information the same way: with a grain of <del datetime="2011-04-21T02:28:57+00:00">salt</del>doubt, no matter the source.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/547/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Garshasp on Steam!</title>
		<link>http://yaserzt.com/blog/archives/545</link>
		<comments>http://yaserzt.com/blog/archives/545#comments</comments>
		<pubDate>Wed, 13 Apr 2011 12:21:19 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[entertainment]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[Soshiant]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=545</guid>
		<description><![CDATA[By the prickling of my thumbs Something wicked this way comes&#8230; Garshasp is up on Steam and Gamers&#8217; Gate, and it will be available for purchase shortly. This is a huge step for us, specially if we are received well. I am now praying to all the gods I don&#8217;t believe in to make it [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>By the prickling of my thumbs<br />
Something wicked this way comes&#8230;</p></blockquote>
<p><a href="http://garshasp.com/">Garshasp</a> is up on <a href="http://store.steampowered.com/app/99400/">Steam</a> and <a href="http://www.gamersgate.com/DD-GMS/garshasp-the-monster-slayer">Gamers&#8217; Gate</a>, and it will be available for purchase shortly. This is a huge step for us, specially if we are received well.</p>
<p>I am now praying to <a href="http://zoom.it/90f">all the gods I don&#8217;t believe in</a> to make it so (witness the vanity and weakness of man!)</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/545/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Imagine No Religion&#8230;</title>
		<link>http://yaserzt.com/blog/archives/541</link>
		<comments>http://yaserzt.com/blog/archives/541#comments</comments>
		<pubDate>Mon, 10 Jan 2011 14:16:49 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[fiction]]></category>
		<category><![CDATA[frak-them]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[Quotes]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[stupidity]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=541</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://yaserzt.com/blog/wp-content/uploads/2011/01/wtc_26aug2001_wfc.jpg"><img src="http://yaserzt.com/blog/wp-content/uploads/2011/01/wtc_26aug2001_wfc-400x300.jpg" alt="World Trade Center Towers on August 26th, 2001" title="World Trade Center Towers - August 26th, 2001" width="400" height="300" class="aligncenter size-medium wp-image-542" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/541/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Human Brain vs. Computers</title>
		<link>http://yaserzt.com/blog/archives/539</link>
		<comments>http://yaserzt.com/blog/archives/539#comments</comments>
		<pubDate>Sat, 18 Dec 2010 03:10:11 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[ignore]]></category>
		<category><![CDATA[sci-tech]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=539</guid>
		<description><![CDATA[When I was young, maybe in my early teens, I used to think that what gave the human brain its advantage (over synthetic computation machines) was its speed. I used to think that the brain processed information with a throughput and latency that was far superior to machines and that was why computers couldn&#8217;t duplicate [...]]]></description>
			<content:encoded><![CDATA[<p>When I was young, maybe in my early teens, I used to think that what gave the human brain its advantage (over synthetic computation machines) was its speed. I used to think that the brain processed information with a throughput and latency that was far superior to machines and that was why computers couldn&#8217;t duplicate the more complex tasks that every human does every second. But of course this was completely false. In terms of sheer speed of processing and signal transmission, human nervous system and brain fall much short of any computer.</p>
<p>Later on, I arrived at the concept that it was the inherent parallelism and emergent mechanisms that are going on in our brain that give it its superiority. The billions of neurons on our brains all are working in parallel (well, not <em>all</em> obviously, but each subsystem seems to be massively parallel) and many of them are actively selecting and routing and inhibiting and amplifying the signals that come their way so new, probably non-deterministic and previously untried, methods are emerging and falling all the time. As an interesting side note, it seems to me that our brain is quite good at data parallelism, and really bad at task parallelism! A corollary of this concept could be the idea that human brain is also very small for the computational power it has (I don&#8217;t think it is.) Anyways, while this parallelism might very well be a great feature of human brain, it&#8217;s probably not the most important or amazing. After all, the whole Internet is a parallel machine (for some loose definition of the phrase) that probably has more computational power than the whole human population combined by several orders of magnitude (haven&#8217;t done the math; don&#8217;t bug me about it!)</p>
<p>In the first years of college, I was introduced (a tiny bit more properly) to the fact that human brain reconfigures itself on the fly. Through a process and under rules that might very well be quite simple and even trivial to understand, it reinforces some paths and connects and creates others. This still counts (for me) as an important feature.</p>
<p>Very recently, I&#8217;ve started to realize the most amazing feature of the human brain is its energy consumption! There&#8217;s all this stuff going on in there, with all these capabilities, and it consumes, what, 100 watts? 200? (again, haven&#8217;t done any research or calculations &#8211; please illuminate me if you know.) That&#8217;s not even enough to power a half decent GPU these days. Am I too wrong?</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/539/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hey Teacher&#8217;s!</title>
		<link>http://yaserzt.com/blog/archives/534</link>
		<comments>http://yaserzt.com/blog/archives/534#comments</comments>
		<pubDate>Thu, 02 Dec 2010 17:21:22 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[ignore]]></category>
		<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=534</guid>
		<description><![CDATA[It&#8217;s amazing how fast a bunch of otherwise respectable people (!) go through a bottle of otherwise ordinary scotch!]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s amazing how fast a bunch of otherwise respectable people (!) go through a bottle of otherwise ordinary scotch!</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/534/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No More Souls To Sell</title>
		<link>http://yaserzt.com/blog/archives/531</link>
		<comments>http://yaserzt.com/blog/archives/531#comments</comments>
		<pubDate>Sat, 13 Nov 2010 09:35:19 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[ignore]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[sci-tech]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=531</guid>
		<description><![CDATA[As you may know, I have sold my soul to the Prince of Darkness and got a Kindle. Now I want a Samsung Galaxy Tab, but I have no soul(s) left to bargain. Any suggestions?]]></description>
			<content:encoded><![CDATA[<p>As you may know, I have sold my soul to the Prince of Darkness and got a Kindle. Now I want a <a href="http://galaxytab.samsungmobile.com/">Samsung</a> <a href="http://www.pcworld.com/article/204779/samsung_galaxy_tab_vs_the_ipad_compare_for_yourself.html">Galaxy</a> <a href="http://www.slashgear.com/samsung-galaxy-tab-review-31111323/">Tab</a>, but I have no soul(s) left to bargain. Any suggestions?</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/531/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>پیام من به قضاوت‌کنندگان گرشاسپ</title>
		<link>http://yaserzt.com/blog/archives/522</link>
		<comments>http://yaserzt.com/blog/archives/522#comments</comments>
		<pubDate>Sat, 30 Oct 2010 01:52:14 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[game development]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[Soshiant]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=522</guid>
		<description><![CDATA[بازی گرشاسپ که حاصل تقریباً 4 سال عمر بعضی از ماست، کمتر از یک هفته‌ی پیش به بازار عرضه شد. نظرهای بازی‌بازهای ایرانی در مورد گرشاسپ کم و بیش مثبت بوده، ولی انتقادهای برنده و گاهی عجیبی هم در موردش دیدیم که در نگاه اول ناامید کننده، ولی در نهایت مسرت‌بخش هستند. شاید در فرصتی [...]]]></description>
			<content:encoded><![CDATA[<div lang="fa" dir="rtl" style="text-align: right; text-size: 100%;">
بازی <a href="http://garshasp.ir/">گرشاسپ</a> که حاصل تقریباً 4 سال عمر بعضی از ماست، کمتر از یک هفته‌ی پیش به بازار عرضه شد. نظرهای بازی‌بازهای ایرانی در مورد گرشاسپ کم و بیش مثبت بوده، ولی انتقادهای برنده و گاهی عجیبی هم در موردش دیدیم که در نگاه اول ناامید کننده، ولی در نهایت مسرت‌بخش هستند. شاید در فرصتی دیگر به دلیل مسرت‌بخش بودن این انتقادها هم بپردازم.</p>
<p>روی صحبت من با همه‌ی کسانی است که گرشاسپ را می‌بینند و نه فقط انتقاد کنندگان. من کاملاً به حق شما برای انتظارِ دیدن یک بازی کامل و بی‌نقص احترام می‌گزارم. من با جدیت تمام عقیده دارم که حق همه‌ی ما به عنوان بازی‌باز این است که بدون هیچ قید و شرطی بهترین بازی‌های ممکن را بازی کنیم. ولی گاهی کمی واقع‌گرا و منطقی بودن هم بد نیست.</p>
<p>مثلاً بودجه‌ی گرشاسپ را در نظر بگیرید. کل هزینه‌ی صرف شده برای تولید گرشاسپ (به اضافه‌ی سوشیانتِ ناکام) و تبلیغات و شرکت در نمایشگاه‌های داخلی و خارجی به 300 میلیون تومان هم نمی‌رسد (این عدد فقط حدس و تقریب شخصِ من است.) این یعنی حدود 300000 دلار (برای راحت‌تر شدن مقایسه‌ها در ادامه‌ی بحث همه‌ی عددها را به دلار بیان می‌کنم.) این عدد را با بودجه‌های بازی‌های مطرح دنیا (اصطلاحاً AAA) مقابسه کنید: </p>
<ul>
<li>Gears of War: $15M</li>
<li>Modern Warfare 2: $50M</li>
<li>Killzone 2: $45M</li>
<li>Gran Turismo 5: $80M</li>
<li>Metal Gear Solid 4: $60M</li>
<li>God of War III: $44M</li>
<li>Assassin&#8217;s Creed: $18M</li>
<li>Assassin&#8217;s Creed 2: $25M</li>
<li>Bioshock: $15M</li>
<li>Halo 3: $55M</li>
<li>Grand Theft Auto 4: $100M</li>
</ul>
<p>دقت کنید که از ساخت بعضی از این بازی‌ها چندین سال می‌گذرد. همچنین توجه داشته باشید که اعداد بالا تقریبی و فقط شامل هزینه‌ی <em>تولید</em> هستند و نه هزینه‌های تبلیغات و بازاریابی و توزیع، وگرنه هزینه‌ی تمام شده‌ی بازی‌ای مثل Modern Warfare 2 به عدد باورنکردنی 200 میلیون دلار می‌رسد!</p>
<p>بیایید از فاکتورهایی مثل ساخته‌شدن بیشتر این بازی‌ها برای چندین دستگاه و کنسول مختلف، باتجربه بودن همه‌ی این شرکت‌ها و تازه‌کار بودن ما، هزینه‌های بازاریابی که معمولاً بیشتر از هزینه‌های تولید هستند و مانند این‌ها صرف نظر کنیم. تعدادی از متخصصان و باتجربه‌های صنعت بازی در جهان معتقدند که یک بازی بزرگ و مطرح جهانی برای اینکه هزینه‌های خود را جبران کند و اصطلاحاً &#8220;سربه‌سر&#8221; شود باید حدود <strong>یک میلیون نسخه</strong> بفروشد. با توجه به قیمت معمول بازی یعنی حدود 60 دلار (حالا شما با توجه به انواع تخفیف‌ها 50 دلار فرض کنید،) یعنی یک بازی AAA حدود 50 میلیون دلار هزینه دارد. باز فرض کنید نیمی از این عدد هم هزینه‌های بازاریابی و توزیع باشد (که معمولاً بیشتر از این حرف‌هاست) پس می‌توان فرض کرد که یک بازی مطرح در جهان حدود 25 میلیون دلار هزینه‌ی تولید دارد. این عدد را به یاد داشته باشید.</p>
<p>بخش بزرگی (تقریباً همه‌ی) هزینه‌ی تولید به صورت مستقیم و غیر مستقیم برای نیروی انسانیِ سازنده‌ی بازی صرف می‌شود (یعنی دستمزد و غیره.) دستمزد دست‌اندرکاران بازی‌سازی در ایران حدوداً بین 12000 دلار و 24000 دلار در سال است (1000 تا 2000 دلار در ماه.) این عدد برای بقیه‌ی دنیا حدوداً 50 تا 100 هزار دلار در سال است که می‌شود حدود 4.16 برابر. یعنی بازی‌سازی در ایران حدوداً چهار و شانزده صدمِ برابر ارزانتر تمام می‌شود، پس باید بودجه‌ی ساخت یک بازی جهانی را بر 4.16 تقسیم کنیم. 25 میلیون تقسیم بر این عدد می‌شود کمی بیشتر از 6 میلیون دلار. یعنی در تئوری، برای تولید یک بازی مثل بازی‌های نام‌برده شده در ایران باید حدود 6 میلیون دلار هزینه شود.</p>
<p>کلِ بودجه‌ی گرشاسپ یادتان هست؟ 300 هزار دلار. یعنی <strong>یک بیستمِ</strong> مقداری که بنا بر نُرمِ جهانی باید برای این بازی هزینه می‌شد! حالا از همه‌ی شما بازیکن‌ها و طرفداران و منتقدین گرشاسپ خواهش می‌کنم این عدد را همیشه به خاطر داشته باشید. یعنی کیفیت گرشاسپ باید 20 برابر بدتر از بازی‌های روز جهان باشد. یعنی طول بازی، تعداد ویدیوها، تعداد کاراکترها، کیفیت مدل‌ها و صداها باید 20 برابر کمتر و پایین‌تر و تعداد باگ‌ها و crashها و مشکلات مورد انتظار باید 20 برابر بیشتر از آن‌ها باشد. اگر گرشاسپ از این مقدار مورد انتظار بهتر و بالاتر ظاهر می‌شود، یعنی ما کار خود را خیلی خیلی خوب انجام داده‌ایم.</p>
<p>تازه از منظر دیگری هم می‌شود به قضیه نگاه کرد و آن هم قیمت محصول برای مصرف‌کننده است. یک بازی AAA در جهان در حدود 60 دلار قیمت دارد، در حالی که قیمت گرشاسپ بین 3 تا 3.5 دلار است. اگر شما بازی‌های خارجی را به قیمت واقعی می‌خریدید، آن‌وقت قدرِ واقعی بازی‌های ایرانی را می‌دانستید و می‌توانستید درست و منطقی در مورد آن‌ها قضاوت کنید. باور کنید که در این دنیا در همه‌ی زمینه‌ها هر چقدر که پول بدهید آش و سوپ و لازانیا می‌خورید. (این حقیقت که قیمت پایین بازی در ایران نه تنها تولیدکنندگان، بلکه مصرف‌کنندگان و بازی‌بازها را هم نابود می‌کند باید مثل روز بر همگان آشکار باشد. اگر می‌گویید نه، تا آن‌لاین شدن و غیرِ قابلِ کرَک شدنِ <em>همه</em>‌ی بازی‌ها صبر کنید!)</p>
<p>من و بقیه‌ی دوستانم در تیم سازنده‌ی گرشاسپ به کار خود افتخار می‌کنیم و به هیچ وجه شرمنده و عذرخواه نیستیم. درست است که ما می‌دانیم که گرشاسپ اصلاً بی‌مشکل و بی‌ایراد نیست و می‌شد و می‌توانستیم خیلی بهتر از این را هم بسازیم، ولی این نگرشِ ایده‌آلیستی تقریباً در مورد هر محصولی و در هر زمینه‌ای و در هر زمان و مکانی صادق است.</p>
<p>من فقط از شما می‌خواهم که کمی منطقی و منصفانه فکر و قضاوت کنید؛ همین.
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/522/feed</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>My Birthdays</title>
		<link>http://yaserzt.com/blog/archives/520</link>
		<comments>http://yaserzt.com/blog/archives/520#comments</comments>
		<pubDate>Wed, 27 Oct 2010 00:13:32 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[life]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=520</guid>
		<description><![CDATA[I was born on Wednesday, October 28th, 1981 (Aban 6th, 1360) at ~11AM. My last birthday was on Friday, April 2nd, 2004 (Farvardin 14th, 1383.) And of course my next birthday is going to be on Sunday, September 6th, 2026 (Shahrivar 15th, 1405.) Any questions?]]></description>
			<content:encoded><![CDATA[<p>I was born on Wednesday, October 28th, 1981 (Aban 6th, 1360) at ~11AM. My last birthday was on Friday, April 2nd, 2004 (Farvardin 14th, 1383.) And of course my next birthday is going to be on Sunday, September 6th, 2026 (Shahrivar 15th, 1405.)</p>
<p>Any questions?</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/520/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Akindled</title>
		<link>http://yaserzt.com/blog/archives/515</link>
		<comments>http://yaserzt.com/blog/archives/515#comments</comments>
		<pubDate>Tue, 26 Oct 2010 01:01:59 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[sci-tech]]></category>
		<category><![CDATA[updated]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=515</guid>
		<description><![CDATA[Well, it&#8217;s obvious, is it not? I got a Kindle (latest generation, i.e. three, 6&#8243;, graphite and no 3G) and the huge thanks for it goes to my brother Ehsan, because I absolutely love it! Oh, and I named it &#8220;Rand.&#8221; What else was I going to name it, &#8220;Kevin&#8221;?! The reason for this name [...]]]></description>
			<content:encoded><![CDATA[<p>Well, it&#8217;s obvious, is it not? I got a Kindle (latest generation, i.e. three, 6&#8243;, graphite and no 3G) and the huge thanks for it goes to my brother Ehsan, because I absolutely love it!<br />
Oh, and I named it &#8220;Rand.&#8221; What else was I going to name it, &#8220;Kevin&#8221;?! The reason for this name should be obvious to anyone who has read the first few books of the Wheel of Time. Also, I thought after a few female names for my gadgets and toys (Fenchurch for my iPod, Metis for my phone, Eros for my PSP, Jane for one of my portable disks) it was time for a male character to be in this <em>dramatis personae</em>.</p>
<p>Now to the Kindle itself. It&#8217;s clean, cool and chic. It&#8217;s very light and thin too. There are some things to be desired, like a more controllable music playback or generic notes, but in my opinion they just distract from this device&#8217;s one true raison d&#8217;etre: to read books on. And it does that splendidly! The built-in browser is surprisingly capable. It is based on Webkit, but the size and nature of the device and the keyboard make it less usable than one might hope. Did I mention that the display of text is practically like real print?!</p>
<p>By the way, it should be obvious that I&#8217;m writing these on Rand.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/515/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Garshasp&#8217;s Release Day</title>
		<link>http://yaserzt.com/blog/archives/512</link>
		<comments>http://yaserzt.com/blog/archives/512#comments</comments>
		<pubDate>Mon, 25 Oct 2010 17:20:05 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[entertainment]]></category>
		<category><![CDATA[frak-them]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=512</guid>
		<description><![CDATA[Tonight at midnight is Garshasp&#8217;s official release day. Finally! After many delays, tomorrow people can supposedly buy Garshasp at retail stores all over Iran. The reason that I say &#8220;supposedly&#8221; is because that our distributor, a company named Lohe Zarrin e Nikan (I won&#8217;t even bother to link to their website) is a bunch of [...]]]></description>
			<content:encoded><![CDATA[<p>Tonight at midnight is Garshasp&#8217;s official release day. Finally! After many delays, tomorrow people can supposedly buy Garshasp at retail stores all over Iran.</p>
<p>The reason that I say &#8220;supposedly&#8221; is because that our distributor, a company named Lohe Zarrin e Nikan (I won&#8217;t even bother to link to their website) is a bunch of idiots who have done their best to disrupt the release and demean Garshasp. They have postponed the release date with no apparent reason for more than two weeks (not to mention their previous blunders and postpones for a couple of months,) they missed a huge (by Iranian standards) public game show, they rejected our designed retail packaging, they have used their own idiotic artwork for promotional material (which not only have nothing to do with Garshasp, but are also so very hideous.) Oh, and they have printed on the package that all rights of Garshasp are reserved for them! I must add that none of the above is permitted by the terms of the distribution contract we have with them!</p>
<p>Tonight is the culmination of years of our lives, and instead of partying and drinking and stuff, everyone has already gone home. No one even mentioned the release, as if we have all given up hope about this event being of any note and importance.</p>
<p>Tonight Garshasp is released, and not even we care. How&#8217;s that for a sad state of affairs?</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/512/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>One Less</title>
		<link>http://yaserzt.com/blog/archives/509</link>
		<comments>http://yaserzt.com/blog/archives/509#comments</comments>
		<pubDate>Sun, 22 Aug 2010 05:43:18 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[ignore]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[stupidity]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=509</guid>
		<description><![CDATA[Where there were twenty-something, now there is one less.]]></description>
			<content:encoded><![CDATA[<p>Where there were twenty-something, now there is one less.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/509/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sorrrrrrrrrrry State of Video?</title>
		<link>http://yaserzt.com/blog/archives/505</link>
		<comments>http://yaserzt.com/blog/archives/505#comments</comments>
		<pubDate>Sun, 15 Aug 2010 06:48:38 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[sci-tech]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=505</guid>
		<description><![CDATA[I don&#8217;t know if I&#8217;ve written about the sorry status of digital video (in web sites and other places) before or not (I think I have, but it&#8217;s almost 11AM and I haven&#8217;t slept yet, so forgive me if I&#8217;m misremembering!) Anyways, the state of things up to a few months back was that we [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t know if I&#8217;ve written about the sorry status of digital video (in web sites and other places) before or not (I think I have, but it&#8217;s almost 11AM and I haven&#8217;t slept yet, so forgive me if I&#8217;m misremembering!)<br />
Anyways, the state of things up to a few months back was that we had quite good standards for WORM media distribution (Blurays and whatnot) but who actually uses those anymore?! If you wanted to rip video and archive them, you had a few choices.<br />
You could go with MPEG4 (Xvid) and MP3 or AC3 inside AVI, to get the best compatibility (noob-owned PCs, standalone video players, etc.) but Xvid is not the most advanced technology these days and AVI is plain obsolete; not to mention the fact that support for AVI and said codecs is <em>very</em> limited on handheld and portable devices.<br />
You could pick stupid and unwieldy containers like MP4, which might or might not be playable on this or that device. You could throw all your data down a bottomless well of Microsoft&#8217;s (or another corporation&#8217;s) fancy sounding but virtually unusable formats (codecs and containers) which I won&#8217;t even mention here.<br />
You could go with cool and quite free containers like MKV (or OGG) which are (currently) only playable on PCs (with non-noob owners!) This fact is really sad, because and MKV file with x264 and AC3 is a mighty force to be reckoned with, for storing all kinds of video, from small to UD (Ultra Definition, whenever that in invented and becomes trendy!)</p>
<p>On the web, the situation is quite simpler and more equal. <em>Everybody</em> were being fucked by Adobe Flash (and still are.) With occasional fingers thrust in by Windows Media and Apple Quicktime. All these have their own codecs (or variations of codecs) and all are proprietary. (If I had gods, I would thank them for making RealMedia defunct!)</p>
<p>But HTML5 has its own audio and video support, and HTML5 is being picked up by virtually every browser maker (yes, even Microsoft, but I can&#8217;t imagine why anybody still uses their piece of shit, except to download Firefox or Opera or Chrome or SeaMonkey or Safari. The really cool guys don&#8217;t even do that and FTP down the usable browsers directly!) The problem with HTML5 standard is that it doesn&#8217;t (didn&#8217;t?) mandate the container format and codecs (video or audio) that should be used! Obviously, this is not good for anybody. Of course, the situation could have been worse if the standard had specified a patent-laden or proprietary format, but still this under-specification means Morphy&#8217;s Law applies and web-developers and web site administrators get fucked even more than usual. Not to mention lusers.</p>
<p>A viable option for free audio and video was (and always is) of course Vorbis and Theora, and I quite like them, but people might argue that they (specially Theora) are not state-of-the-art codecs (not out-dated though, just not quite on the bleeding edge.)</p>
<p>Anyways, a few months back Google bought a company named On2 which held (presumably and hopefully) all the patents for a video codec (format) named VP8. At the time many people (including me) speculated and hoped that Google would put the patents in public domain (or whatever the term is that means make the use of the technology available to everyone, everywhere without charge and limitations for all time.) A couple of months back Google did the exact same thing and the WebM project was born. It&#8217;s defines a container format that hosts VP8 video and Vorbis audio, with no applicable patents in private control and liberal opensource-compatible licenses on all the software and libraries. Already most relevant browser makers have declared support for WebM (Mozilla, Opera, Google (obviously) and I think even Microsoft (but these days they just have to do anything the leaders of industry do, because they are not part of them anymore!)) and there are 3rd-party implementations of it. In short, I think the state of video on the web is starting to look good.</p>
<p>(This post has no links and it needs 100. I apologize for the inconvenience of having to copy+paste.)</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/505/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fibonacci Numbers and Bad Teachers</title>
		<link>http://yaserzt.com/blog/archives/496</link>
		<comments>http://yaserzt.com/blog/archives/496#comments</comments>
		<pubDate>Fri, 13 Aug 2010 06:36:24 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=496</guid>
		<description><![CDATA[Recursion is a fascinating and essential idea in mathematics, programming and design (among other things.) As a programmer, if you don&#8217;t understand this very simple idea (and I mean really understand it) you are pretty much done for. While it&#8217;s not a hard concept for any half-intelligent person to grasp, I don&#8217;t exactly know how [...]]]></description>
			<content:encoded><![CDATA[<p>Recursion is a fascinating and essential idea in mathematics, programming and design (among other things.) As a programmer, if you don&#8217;t understand this very simple idea (and I mean <em>really</em> understand it) you are pretty much done for. While it&#8217;s not a hard concept for any half-intelligent person to grasp, I don&#8217;t exactly know how many of us really do grasp it. But it&#8217;s not what I&#8217;m going to bitch about today.</p>
<p>In programming courses, one of the first examples used to introduce the idea of recursion is the Fibonacci sequence. You know, the series of integers starting with 0 and 1, where every next number is the sum of the two previous ones. (OK, I know that you do know. I was just covering all my bases.)</p>
<p>Anyways, the most simple and elegant introductory way of implementing a function that returns the <tt>n</tt>th number in the Fibonacci series goes something like this:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// Just making things clear!</span>
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> <span style="color: #0000ff;">long</span> Integer<span style="color: #008080;">;</span>
&nbsp;
Integer Fib <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> n <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">2</span> <span style="color: #008080;">?</span> n <span style="color: #008080;">:</span> Fib<span style="color: #008000;">&#40;</span>n <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> Fib<span style="color: #008000;">&#40;</span>n <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>And every half-descent programmer knows that that&#8217;s probably one of the <strong>worst</strong> ways you can implement the idea. I&#8217;m not kidding. The teachers just throw this at the students, and the brighter of the students see the elegance and simple beauty of it and it will take years for most of them to realize the problems with this particular implementation. Some of them never do. This implementation performs <em>very</em> poorly for even the small values of <tt>n</tt>, which of course should be apparent when you contemplate its time complexity and recursion tree (I won&#8217;t go into space considerations, because they are not much of a problem until <tt>n</tt> goes into (many) thousands, at which point the value of the function becomes larger than you can store naively in most languages, which means you should have already given space considerations a serious thought.)</p>
<p>But even later, when the students learn about complexity analysis and Big O notation and crap like that, more often than not, they fail to apply the newly acquired knowledge to the old beliefs. If the teacher is good, and the student is bright and lucky enough, they walk out of their algorithm and data structure course with the new belief that bubble sort is bad, hash tables are good, and disk seek times dominate everything else (all of which are obviously bullshit in the absolute sense.)</p>
<p>For the more astute reader, I need to clarify that the badness of the mentioned implementation stems from the fact that most common languages (including C++) are mainly <em>side-effect-driven</em> languages, in that they rely mostly on the side-effects of expressions and statements to get the intended job done (the usage of the term &#8220;statement&#8221; is a clear sign of that.) Otherwise, you wouldn&#8217;t see so much assignment in our code. A functional and side-effect-free programming language (or more accurately, programming model) could easily cache the result of each invocation of the <tt>Fib</tt> function for any particular <tt>n</tt> (because the function call would be without side effects and therefore time-invariant) and would not need to evaluate any <tt>Fib(n)</tt> more than once. This is something that is being done in some of the better implementations of functional languages, AFAIK.</p>
<p>To emulate this behavior in this case, one can use a hand-coded version of what is known as <em><a href="http://en.wikipedia.org/wiki/Memoization">Memoization</a></em>, a la:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">Integer Fib <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">static</span> std<span style="color: #008080;">::</span><span style="color: #007788;">vector</span><span style="color: #000080;">&lt;</span>Integer<span style="color: #000080;">&gt;</span> Mem<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n <span style="color: #000080;">&lt;</span> Mem.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> <span style="color: #0000dd;">0</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> Mem<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> Mem<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// The second condition is redundant, right?</span>
&nbsp;
	Integer ret <span style="color: #000080;">=</span> n <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">2</span> <span style="color: #008080;">?</span> n <span style="color: #008080;">:</span> Fib<span style="color: #008000;">&#40;</span>n <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">+</span> Fib<span style="color: #008000;">&#40;</span>n <span style="color: #000040;">-</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n <span style="color: #000080;">&gt;=</span> Mem.<span style="color: #007788;">size</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> Mem.<span style="color: #007788;">resize</span> <span style="color: #008000;">&#40;</span>n <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span>, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	Mem<span style="color: #008000;">&#91;</span>n<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> ret<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> ret<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>This is not a bad implementation. It does have some issues in multithreaded applications, but I&#8217;m willing to overlook that for now. This implementation is linear in both time and space, and it can be faster than simple non-recursive implementations because it never calculates any <tt>Fib(n)</tt> more than once over the whole lifetime of the process. But it&#8217;s not pretty (it has its charms, though!) and this way of doing things is error-prone (because you are adding memory and bookkeeping to a mathematical construct that is otherwise free of this stuff.) Not to mention that it is basically impossible to use as an introductory example; because it needs knowledge from all over the map.</p>
<p>A better implementation might be:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">std<span style="color: #008080;">::</span><span style="color: #007788;">pair</span><span style="color: #000080;">&lt;</span>Integer, Integer<span style="color: #000080;">&gt;</span> _fib <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> std<span style="color: #008080;">::</span><span style="color: #007788;">make_pair</span><span style="color: #008000;">&#40;</span>n, <span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	std<span style="color: #008080;">::</span><span style="color: #007788;">pair</span><span style="color: #000080;">&lt;</span>Integer, Integer<span style="color: #000080;">&gt;</span> Fn_1 <span style="color: #000080;">=</span> _fib<span style="color: #008000;">&#40;</span>n <span style="color: #000040;">-</span> <span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">return</span> std<span style="color: #008080;">::</span><span style="color: #007788;">make_pair</span><span style="color: #008000;">&#40;</span>Fn_1.<span style="color: #007788;">first</span> <span style="color: #000040;">+</span> Fn_1.<span style="color: #007788;">second</span>, Fn_1.<span style="color: #007788;">first</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
Integer Fib <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">return</span> _fib<span style="color: #008000;">&#40;</span>n<span style="color: #008000;">&#41;</span>.<span style="color: #007788;">first</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Of course, the meat of this implementation (such as it is) is the <tt>_fib</tt> function. The other one is just there to present a nicer and more consistent interface. Let me be the first one to say that there are more ways to implement a better Fibonacci and still stay essentially recursive. This is just one way, and not a particularly great one. But it&#8217;s not bad either.</p>
<p>Now, how come no programming instructor ever teaches the likes of this implementation? Not the ones I studied under, at least. Are they afraid that their students&#8217; heads are going to explode? PROGRAMMING IS HARD PEOPLE! If a programmer can&#8217;t handle a substantial improvement over a bad implementation of a simple idea, they are in for a big (and not at all nice) surprise. I hereby beg any teachers, instructors, professors and whatnot that have anything to do with teaching starting programmers to quit treating them like idiots, because idiots won&#8217;t make good programmers. The idiots are not going to understand what they need anyways, so why take the chance of profound understanding from those who have the capacity to learn, but might not if you treat them like babies?</p>
<p>For the sake of completeness, here&#8217;s a non-recursive implementation:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="cpp" style="font-family:monospace;">Integer Fib <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span> <span style="color: #000080;">==</span> n<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
&nbsp;
	Integer last <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span>, penultimate <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> n<span style="color: #008080;">;</span> <span style="color: #000040;">++</span>i<span style="color: #008000;">&#41;</span>
	<span style="color: #008000;">&#123;</span>
		penultimate <span style="color: #000040;">+</span><span style="color: #000080;">=</span> last<span style="color: #008080;">;</span>
		std<span style="color: #008080;">::</span><span style="color: #007788;">swap</span> <span style="color: #008000;">&#40;</span>last, penultimate<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #008000;">&#125;</span>
&nbsp;
	<span style="color: #0000ff;">return</span> last<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>This is the fastest of implementations offered here, with the exception of the memoizing one (and only in amortized sense.) But nothing prevents us from applying the memoization technique to an iterative implementation as well, albeit not in a general and automatic way. It might not be apparent or significant in such a simple sample, but for some class of problems, recursive solutions are usually easier to devise and understand, and therefore easier to get right. In any case, nothing is clear-cut when it comes to programming, and I&#8217;m almost offended when people (specially people who should know better) behave as if almost everything is.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/496/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Theme Change and Getting Unanalytical</title>
		<link>http://yaserzt.com/blog/archives/494</link>
		<comments>http://yaserzt.com/blog/archives/494#comments</comments>
		<pubDate>Mon, 02 Aug 2010 05:29:27 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=494</guid>
		<description><![CDATA[I have changed the theme of my blog (as you can see, unless you are syndicating) from Barthelme to something called Fluid Blue. It was mostly out of boredom, and I&#8217;m not sure about the result yet. In other news, I have decided to drop Google Analytics usage on my blog; mostly as a statement [...]]]></description>
			<content:encoded><![CDATA[<p>I have changed the theme of my blog (as you can see, unless you are syndicating) from Barthelme to something called Fluid Blue. It was mostly out of boredom, and I&#8217;m not sure about the result yet.</p>
<p>In other news, I have decided to drop Google Analytics usage on my blog; mostly as a statement in support of privacy activism. I really like Google, and most of the time they do the Right Thing, so I&#8217;m not really worried about them stockpiling and misusing our data. However, why should you guys (my less-than-a-handful of readers) trust Google with your data for my benefit?! That&#8217;s certainly an attitude I want other people to have toward me, so I&#8217;m gonna start from myself and scrap Google Analytics and I don&#8217;t think I would use any kind of 3rd-party user tracking system unless their handling and storage of the data is completely and provably secure, anonymous and temporary.</p>
<p>An obvious side effect of this is that I can no longer know how many people are reading my blog. I&#8217;d appreciate if you guys (I know there are at least two, so my sentence is syntactically and semantically correct) would be more active, comment-wise!</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/494/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>An ABSOLUTELY Unmissable Talk on Modern Hardware</title>
		<link>http://yaserzt.com/blog/archives/486</link>
		<comments>http://yaserzt.com/blog/archives/486#comments</comments>
		<pubDate>Tue, 27 Jul 2010 02:21:13 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sci-tech]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=486</guid>
		<description><![CDATA[Iff[sic] you are a programmer, if you don&#8217;t do anything else even if you don&#8217;t eat and even if you don&#8217;t shower, please please please please please watch this presentation. The presenter is Dr. Cliff Click, and the topic is an in-depth view of modern code execution architecture. The talk is from 2009, and it [...]]]></description>
			<content:encoded><![CDATA[<p>Iff[sic] you are a programmer, if you don&#8217;t do anything else even if you don&#8217;t eat and even if you don&#8217;t shower, please please please please <a href="http://www.infoq.com/presentations/click-crash-course-modern-hardware">please watch this presentation</a>.</p>
<p>The presenter is Dr. Cliff Click, and the topic is an in-depth view of modern code execution architecture. The talk is from 2009, and it has been on my to{do} list for almost 6 months. It is the best thing I have seen in the last year (and I played God of War III!) if not in many years. The guy is obviously very knowledgeable and he talks extremely fast, which just means that he packs an incredible amount of invaluable information into this 50+ minute talk.</p>
<p>I can&#8217;t stress this enough. Take an hour to watch this. Please! If you are a game developer, or any programmer with a conscience, you have to watch it right now! I&#8217;m not kidding here. Watch this through.</p>
<p>On an ego-boosting note, I just watched this talk and I already knew almost all of it (I have to brush up on the newer cache-coherency protocols though; those have also been on my to{do} list for some time now!) It did have some eye-opening &#8220;Aha!&#8221; moments for me. I may write about them later.</p>
<p>What are you doing still reading my shithead rant?! GO WATCH THIS!<a href='http://yaserzt.com/files/09-sep-JVMperformance.flv' >Cliff Click&#8217;s Crash Course in Modern Hardware (hosted locally.)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/486/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
			<enclosure url="http://yaserzt.com/files/09-sep-JVMperformance.flv" length="102983344" type="video/x-flv" />
	</item>
		<item>
		<title>.NET and I</title>
		<link>http://yaserzt.com/blog/archives/484</link>
		<comments>http://yaserzt.com/blog/archives/484#comments</comments>
		<pubDate>Tue, 27 Jul 2010 00:54:25 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[stupidity]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=484</guid>
		<description><![CDATA[I learned C# in 2000, when the compiler and tools were still in beta (I think. I know I was working with the beta, but maybe the finals were released unbeknownst to me (hehehe! The Firefox spellchecker does not recognize &#8220;unbeknownst&#8221;!)) I remember that I liked the language. It was clean and relatively compact, it [...]]]></description>
			<content:encoded><![CDATA[<p>I learned C# in 2000, when the compiler and tools were still in beta (I think. I know I was working with the beta, but maybe the finals were released unbeknownst to me (hehehe! The Firefox spellchecker does not recognize &#8220;unbeknownst&#8221;!))</p>
<p>I remember that I liked the language. It was clean and relatively compact, it had a largish and useful library, it was like C++ and Java (benefit? really?) and it had a command-line compiler. My impression at the time was that it was more suitable for small and quick programs, and very suitable for teaching programming. I even suggested it to my teachers at university as a replacement for Pascal, which was then thought as the first language to CE students (this was maybe 4 years before I met Lisp, or better yet, Python.) This was also before the whole .NET fucked-up-ness happened with all the WinForms and ASP.NET and whatever other shit they are peddling these days. In those days, .NET and C# produced console applications, unless you ventured into the river of diarrhea output that is the Win32 GUI API; but that was pretty much what you generally had, back then.</p>
<p>Anyways, my shallow and brief delving into the world of .NET was barely deep enough for me to familiarize myself with the inner workings of MSIL and the JIT compiler and the virtual machine. I learned little about these, and I have not kept up with the new developments in .NET, and I have no regrets there. I generally hate GUIs and network technologies that aim to solve all problems on all levels for everybody. They may suit some, and I have absolutely no doubt that many .NET-based applications wouldn&#8217;t have been as easy-to-write for other libraries and runtimes<sup><a id="backref-footnote-01" href="#footnote-01">1</a></sup>. But I don&#8217;t generally like .NET and this opinion (I suspect) would be very hard to change.</p>
<p>The most obvious reason for this obvious dislike is the one I mentioned above. .NET is the champion of the all-for-all thoughtcrime. More than anything else that I have seen, it tries to do all for everyone and everything; without giving them an inkling of what the hell is really going on on any level below the most superficial. This may suit some, but it shouldn&#8217;t.</p>
<p>I seriously believe that every programmer needs to know what&#8217;s going on under the hood. Total abstractions almost never work beyond the most simple and trivial cases<sup><a id="backref-footnote-02" href="#footnote-02">2</a></sup>. If you don&#8217;t know jackshit about your platform and your programs seem to have worked so far, you are just <em>lucky</em>. Let me give you an analogy. If you don&#8217;t know anything about how cars work and you drive one, when your cars breaks down in the middle of nowhere and you have no means of communication, the you are royally fucked. The fact that this has not happened so far, it just means that the Random Number Gods have smiled upon you so far. It may never happen, but it just as well might. That&#8217;s the way it is with programming. Except that the level of quality discrepancies among software and hardware products that you use is <em>much</em> wider.</p>
<p>All programming languages abstract the platform in some form and manner. But as some languages hide not much and what they hide, they do with much shame and much apologies (Assembly, C, etc.) others do as much as they can to distance you from the hardware. They even boast this feature!</p>
<p>In short, every good programmer that I know and I know of knows the whole stack of software and hardware underneath <em>deeply</em> and <em>intimately</em>. In fact, it might even be true that the better they know this mess, the better they are<sup><a id="backref-footnote-03" href="#footnote-03">3</a></sup>.</p>
<p>Let me conclude now. I am not saying that technologies like .NET and Java and all those &#8220;high-level&#8221; languages are useless. I&#8217;m just saying they make it harder to be conscious about the actual platform and the rest that lies under your code. I&#8217;m pretty certain that the best .NET programmers can pretty much generate the MSIL code and the machine code that their compiler and the JIT compiler generate for any given part of their code. Maybe you should too.</p>
<hr />
<small></p>
<p id="footnote-01"><a href="#backref-footnote-01">1:</a> Note that I don&#8217;t use the word &#8220;platform&#8221; here, and any other use of the word for a software technology in unintentional and a result of the force of (a bad) habit. No software is a platform; hardware is. It&#8217;s always the hardware that runs the code, and the hardware is always the platform. If you think otherwise, I believe you are the subject of the same kind of conditioning that has affected most of us.</p>
<p id="footnote-02"><a href="#backref-footnote-02">2:</a> Read <a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html">this post</a> on Joel Spolsky&#8217;s great (yet now sadly dormant) blog for the original presentation of the Law of Leaky Abstractions. Also read the <a href="http://en.wikipedia.org/wiki/Leaky_abstraction">Wikipedia page</a> (and then the <a href="http://en.wikipedia.org/wiki/Talk:Leaky_abstraction">talk page</a> for an interesting discussion.) Also read <a href="http://www.codinghorror.com/blog/2009/06/all-abstractions-are-failed-abstractions.html">this Coding Horror post</a> for a hilarious (well, not really!) example. Fuck LINQ!</p>
<p id="footnote-03"><a href="#backref-footnote-03">3:</a> I don&#8217;t believe that it&#8217;s this knowledge that they acquired first and it magically made them good programmers. I think on the way of becoming good, they had to acquire this knowledge. I have to ponder this a bit more.</p>
<p></small></p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/484/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>There Should Be Dancing Around a Bonfire!</title>
		<link>http://yaserzt.com/blog/archives/478</link>
		<comments>http://yaserzt.com/blog/archives/478#comments</comments>
		<pubDate>Sun, 11 Jul 2010 00:06:43 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rants]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=478</guid>
		<description><![CDATA[This should be no news to anybody who has anything to do with writing and distributing C/C++ applications on Windows, but Microsoft has finally decided to drop the fucking SxS shit for Visual C++ 2010 CRT and go back to the sweet old days of plain, distributed-alongside-your-application DLL files! (Read here if you don&#8217;t believe [...]]]></description>
			<content:encoded><![CDATA[<p>This should be no news to anybody who has anything to do with writing and distributing C/C++ applications on Windows, but Microsoft has finally decided to drop the fucking SxS shit for Visual C++ 2010 CRT and go back to the sweet old days of plain, distributed-alongside-your-application DLL files! (<a href="http://msdn.microsoft.com/en-us/library/dd293574(VS.100).aspx">Read here if you don&#8217;t believe me!</a> I don&#8217;t know how far one can trust MSDN and how long that link will stay valid (I mean, how hard is that?! Keep your stupid fucking links valid, you idiot douche bags!) but there it is for now, and I have verified it on VC2010 RTM.)</p>
<p>How fucking twisted is that?! I&#8217;m actually rejoicing because we are going back to DLL Hell! But after experiencing the abyss of WinSxS Hell, I would happily crawl back to the open and only mildly tormenting depths of the good old DLL Hell. This means that I will (hopefully!) never ever have to mess around with ass-busting manifests and colossally subtle version conflicts and hunting down every single gods-damned version of every single fucking-gods-damned CRT component that might or might not have been subject to some whimsical patch by the morons at Microsoft in the past year, in one or other version of Windows. This means that I will just distribute the fucking version of the CRT that seems to barely work <em>alongside</em> my applications (that is, in the same directory) and it will probably (say 30% instead of 1e-10%) work, and no one will be able to override their usage behind the poor hapless user&#8217;s back (using conventional methods; that is. Everybody knows how easy it is to hijack a function call into a DLL in Windows; which I have to say is not necessarily a bad thing.)</p>
<p>And don&#8217;t anyone dare ask me why I link to CRT as a DLL in the first place, instead of a statically linked LIB!</p>
<p>P.S. I have decided to write as I think (regarding the usage of curse words.) So no more <em>frak</em>s and <em>friggin</em>s and <em>butt</em>s and <em>backside</em>s. Deal with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/478/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A New Blog of Note!</title>
		<link>http://yaserzt.com/blog/archives/474</link>
		<comments>http://yaserzt.com/blog/archives/474#comments</comments>
		<pubDate>Sun, 20 Jun 2010 22:58:59 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[noteworthy]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=474</guid>
		<description><![CDATA[I found this person who was looking for a place to put up a blog. I gave that person space and here is the result. In my opinion, it is definitely worth a read. It contains mostly scraps of fiction with a theme of fantasy, some dark poetry and the like. You know how the [...]]]></description>
			<content:encoded><![CDATA[<p>I found this person who was looking for a place to put up a blog. I gave that person space and <a href="http://azath.yaserzt.com/">here is the result</a>. In my opinion, it is definitely worth a read. It contains mostly scraps of fiction with a theme of fantasy, some dark poetry and the like.<br />
You know how the world is for a new blogger! Go and have a look, and leave a comment or two even if it is a one liner. Encourage the blogger if you like it at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/474/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Miracle of Flaming Hand</title>
		<link>http://yaserzt.com/blog/archives/470</link>
		<comments>http://yaserzt.com/blog/archives/470#comments</comments>
		<pubDate>Mon, 24 May 2010 22:38:27 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[hilarious]]></category>
		<category><![CDATA[ignore]]></category>
		<category><![CDATA[stupidity]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=470</guid>
		<description><![CDATA[I saw my left hand burning tonight. It was engulfed in blue and yellowish flames of naphtha. I would have watched and enjoyed the sight much more if my right hand hadn&#8217;t been aflame before with my Zippo in it and I hadn&#8217;t thrown it into a glass of water! You see kids, there is [...]]]></description>
			<content:encoded><![CDATA[<p>I saw my left hand burning tonight. It was engulfed in blue and yellowish flames of naphtha. I would have watched and enjoyed the sight much more if my right hand hadn&#8217;t been aflame before with my Zippo in it and I hadn&#8217;t thrown it into a glass of water!<br />
You see kids, there is actually no way of putting out a Zippo if it&#8217;s out of the case, say for refueling. I would really have liked to stop and take a picture for demonstration purposes, but saving a drowning Zippo is much more important.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/470/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>&#8220;3D Modeling for Games&#8221; Educational Challenge</title>
		<link>http://yaserzt.com/blog/archives/468</link>
		<comments>http://yaserzt.com/blog/archives/468#comments</comments>
		<pubDate>Wed, 12 May 2010 21:00:55 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=468</guid>
		<description><![CDATA[Fanafzar Game Studios, the company I work for and the makers of Garshasp with the help of CGArt.ir society and several notable others are orchestrating a 3D modeling competition for aspiring and experienced game artists. You can read every thing about it over here. The reason&#8217;s for holding such an event is at least three-fold. [...]]]></description>
			<content:encoded><![CDATA[<p>Fanafzar Game Studios, the company I work for and the makers of <a href="http://garshasp.com/">Garshasp</a> with the help of <a href="http://cgart.ir/">CGArt.ir society</a> and several <a href="http://www.rooz3d.com/">notable</a> <a href="http://www.robhruppel.com/">others</a> are orchestrating a 3D modeling competition for aspiring and experienced game artists. <strong>You can read every thing about it <a href="http://www.cgjobs.ir/events/3dmodelingforgame/">over here</a>.</strong></p>
<p>The reason&#8217;s for holding such an event is at least three-fold. First is to show how many talented artist live and work in Iran. Second is to get them into a challenge that will benefit all of them as they work towards a common goal with each other. The third one is to find a few really talented and driven modelers and persuade them to come and work with us on our upcoming projects!</p>
<p>Oh, I forgot to say that the first prize is a PS3 bundled with Uncharted 2: Among Thieves! (I wish I was a 3D artist! No one gives such prizes to game programmers!)</p>
<p>So, even if you are not interested yourselves, please spread the word around.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/468/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>James Randi</title>
		<link>http://yaserzt.com/blog/archives/466</link>
		<comments>http://yaserzt.com/blog/archives/466#comments</comments>
		<pubDate>Tue, 11 May 2010 18:54:36 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[stupidity]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=466</guid>
		<description><![CDATA[http://adeli.ir/blog/?p=122]]></description>
			<content:encoded><![CDATA[<p>http://adeli.ir/blog/?p=122</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/466/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Lesson in &#8220;Test&#8221; Attitude</title>
		<link>http://yaserzt.com/blog/archives/464</link>
		<comments>http://yaserzt.com/blog/archives/464#comments</comments>
		<pubDate>Thu, 29 Apr 2010 21:25:02 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[cool]]></category>
		<category><![CDATA[noteworthy]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=464</guid>
		<description><![CDATA[Back in the old days of the net, even before I was born, people did implement TCP/IP stacks. And since there weren&#8217;t much of a solid and standard specification (not to mentions decades of engineering experience in implementation and maintenance of network stacks,) these implementations tended to be buggy, unstable and non-conforming. To test these [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the old days of the net, even before I was born, people did implement TCP/IP stacks. And since there weren&#8217;t much of a solid and standard specification (not to mentions decades of engineering experience in implementation and maintenance of network stacks,) these implementations tended to be buggy, unstable and non-conforming. To test these various TCP/IP implementations (such as they were,) people used to come together and just test them against each other and compare their functions. These sessions and discussions and reviews were called &#8220;TCP and IP bake offs&#8221;. It has been said that as a result of these discussions, the specifications were as likely to change as the implementations!</p>
<p>These dudes pretty much built the whole frakking Internet without the bureaucracy and the 3000-page conformance guidelines and the 2-million line test suit or the 12 years worth of committee meetings. Their procedures, and much more importantly their attitudes is quite concisely demonstrated in <a href="http://www.faqs.org/rfcs/rfc1025.html">RFC 1025</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/464/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dishwasher: Dead and Smiling!</title>
		<link>http://yaserzt.com/blog/archives/460</link>
		<comments>http://yaserzt.com/blog/archives/460#comments</comments>
		<pubDate>Sun, 18 Apr 2010 13:52:16 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[entertainment]]></category>
		<category><![CDATA[Poetry]]></category>
		<category><![CDATA[Quotes]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=460</guid>
		<description><![CDATA[I had a perfect nightmare on a starry torrid sea: I am cast to prison at a crippled demon&#8217;s plea. The demon has 3 faces all are laughing down at me. The Banker with his filthy lucre sets the game astride. The General with raging might lets forth a battle cry. The Judge locks now [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>I had a perfect nightmare<br />
on a starry torrid sea:</p>
<p>I am cast to prison at a<br />
crippled demon&#8217;s plea.</p>
<p>The demon has 3 faces<br />
all are laughing down at me.</p>
<p>The Banker with his filthy lucre<br />
sets the game astride.</p>
<p>The General with raging might<br />
lets forth a battle cry.</p>
<p>The Judge locks now the metal<br />
tomb where I&#8217;m meant to die.</p>
<p>&#8230; But vengeance is<br />
a brutal beast<br />
not held by any cell</p>
<p>My wit is steeled<br />
My blade is wet<br />
So sound the Reaper&#8217;s bell.</p>
<p>Banker, General and Judge!<br />
You all shall burn in Hell.</p></blockquote>
<blockquote><p>&#8211; From <strong>The Dishwasher: Vampire Smile</strong>&#8216;s <a href="http://www.gametrailers.com/video/debut-trailer-dishwasher-vampire/62317">debut trailer</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/460/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Piggybacking On Some Hapless Loser&#8217;s Wireless</title>
		<link>http://yaserzt.com/blog/archives/459</link>
		<comments>http://yaserzt.com/blog/archives/459#comments</comments>
		<pubDate>Fri, 16 Apr 2010 11:58:49 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[ignore]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/2010/04/16/piggybacking-on-some-hapless-losers-wireless/</guid>
		<description><![CDATA[and with my cellphone, no less! \m/]]></description>
			<content:encoded><![CDATA[<p>and with my cellphone, no less! \m/</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/459/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Planning for Debugging Day&#8221; Presentation</title>
		<link>http://yaserzt.com/blog/archives/454</link>
		<comments>http://yaserzt.com/blog/archives/454#comments</comments>
		<pubDate>Tue, 13 Apr 2010 13:32:49 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[sci-tech]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=454</guid>
		<description><![CDATA[Here are my presentation slides from the talk I gave this past March in Sharif University, at the first Iranian computer game developer&#8217;s mini-conference. Here I talk (mostly out of personal experience) about things that we should pay attention to, at the beginning of a game development project, so our debugging and issue tracking and [...]]]></description>
			<content:encoded><![CDATA[<p>Here are my <a href='http://yaserzt.com/blog/wp-content/uploads/2010/04/CGS10-yzt-PlanningForDebuggingDay-rev05.pdf'>presentation slides</a> from the talk I gave this past March in Sharif University, at the first Iranian computer game developer&#8217;s mini-conference.</p>
<p>Here I talk (mostly out of personal experience) about things that we should pay attention to, at the beginning of a game development project, so our debugging and issue tracking and solving experience becomes less irritating and more effective. I&#8217;d be happy to hear any suggestions, corrections and discussions.</p>
<p>Oh, and I have expanded the talk a bit, from what I actually presented! Also I&#8217;d be happy to explain my views on any of the particular points if anyone actually bothers to read through the thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/454/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>National Computer Games Conference</title>
		<link>http://yaserzt.com/blog/archives/452</link>
		<comments>http://yaserzt.com/blog/archives/452#comments</comments>
		<pubDate>Tue, 09 Mar 2010 01:45:34 +0000</pubDate>
		<dc:creator>yzt</dc:creator>
				<category><![CDATA[game development]]></category>
		<category><![CDATA[noteworthy]]></category>

		<guid isPermaLink="false">http://yaserzt.com/blog/?p=452</guid>
		<description><![CDATA[Sharif University is holding a two-day conference on games and game development. We (the guys at Fanafzar) are going to attend and some of us are going to have presentations and panels. There are also other interesting talks, mostly on the lighter side of technical issues. Here&#8217;s the web page for the conference, and here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Sharif University is holding a two-day conference on games and game development. We (the guys at Fanafzar) are going to attend and some of us are going to have presentations and panels. There are also other interesting talks, mostly on the lighter side of technical issues. <a href="http://cgs.sharif.ir/home">Here&#8217;s the web page</a> for the conference, and here&#8217;s the <a href="http://cgs.sharif.ir/register">pre-registration page</a> (but I think you need to actually show up there on the first morning to register.)</p>
<p>The conference will be held on Esfand 19th and 20th (March 10th and 11th) somewhere inside SUT campus (yes, that&#8217;s tomorrow!)</p>
<p>My talk&#8217;s title is &#8220;Planning for Debugging Day&#8221; and in it I will present some thoughts and topics you should ponder and consider at the beginning of a game project to have less problems later on in the cycle when debugging, adding features, releasing, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://yaserzt.com/blog/archives/452/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

