<?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"
	>

<channel>
	<title>CodingExperiments.com</title>
	<atom:link href="http://codingexperiments.com/feed" rel="self" type="application/rss+xml" />
	<link>http://codingexperiments.com</link>
	<description>CodingExperiments.com is a site where I can (obviously) experiment with various demonstrations of code.</description>
	<pubDate>Mon, 17 Nov 2008 03:24:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
			<item>
		<title>A Brief History of Build Systems #1: Introduction</title>
		<link>http://codingexperiments.com/archives/493</link>
		<comments>http://codingexperiments.com/archives/493#comments</comments>
		<pubDate>Mon, 17 Nov 2008 00:05:08 +0000</pubDate>
		<dc:creator>i80and</dc:creator>
		
		<category><![CDATA[General Code]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=493</guid>
		<description><![CDATA[The ancient practice of putting various monsters in unexplored regions of maps and the phrase based on that, &#8220;Here be dragons&#8220;, applies still to programming.  Personally, I&#8217;ve always had a dragon the size of a moon (or battlestation, if one prefers) on my own mental map in the area of build systems.  Hopefully, this should [...]]]></description>
			<content:encoded><![CDATA[<p>The ancient practice of putting various monsters in unexplored regions of maps and the phrase based on that, &#8220;<a href="http://en.wikipedia.org/wiki/Here_be_dragons">Here be dragons</a>&#8220;, applies still to programming.  Personally, I&#8217;ve always had a dragon the size of a moon (or battlestation, if one prefers) on my own mental map in the area of <a href="http://en.wikipedia.org/wiki/Build_automation">build systems</a>.  Hopefully, this should be a series, with several tutorials succeeding this brief summary of available options.</p>
<h3>What is a Build System?</h3>
<p>Just a quick introduction for those who are uninitiated into these rgb(0,0,0) arts.  A build system offers a relatively easy way to automate building and packaging of a software system.  While something as simple as a one-line shell script could supposedly be written for smaller projects, this has several problems.  Firstly, it would tend to redundantly and naively recompile objects that have already been built and have not been changed.  Secondly, this has no portability system; that is, it has no way to analyze the host system and find the appropriate utilities and libraries on differing platforms.  There are more reasons, of course, but these are the crux of the matter.</p>
<h3>Current Build Systems</h3>
<h4>Make</h4>
<p><a href="http://en.wikipedia.org/wiki/Make_(software)">Make</a> is one of the oldest build systems, having its first release in 1977 at <a href="http://en.wikipedia.org/wiki/Bell_Labs">Bell Labs</a>.  It is extremely simple, but pays the price; it has no configuration system, nor any automatic dependency analysis.  This makes it a decent choice for smallish projects with any advanced portability needs, but most likely you&#8217;re better served by a more powerful tool.  However, it should be noted that various projects such as Autoconf (see below) serve to expand this utility.</p>
<h4>Autoconf</h4>
<p><a href="http://www.gnu.org/software/autoconf/">Autoconf</a> and <a href="http://www.gnu.org/software/automake/">Automake</a> together form a framework for generating Make scripts.  Autoconf provides the portability configuration system, while Automake will automatically analyze your program structure to determine the order that things need to be rebuilt in.  Unfortunately, on some level, this is merely lipstick on a pig (which is an idiom I used to be able to use without shifting my eyes), and due to the obscure language (<a href="http://en.wikipedia.org/wiki/M4_(language)">m4</a>) used to write Autoconf scripts, this is both a finicky and difficult option to use.  Configuration is slow, and is extremely awkward if you wish to target Microsoft Windows.  Last but not least, it is legendary for being extremely difficult to learn.  It is, however, the most common build system on the Free Desktop.</p>
<h4>SCons</h4>
<p>I&#8217;ll get my bias off of my chest now: <a href="http://www.scons.org./">SCons</a> is my current favorite build system.  The scripts are written in <a href="http://www.python.org./">Python</a>, so you have a very powerful programming language to work within.  The API is a bit less than ideal in some ways, but is still quite usable.  Compilation is fast and portable, as well as being in one step (as opposed to the two-step compilation as used in Autoconf).  The <a href="http://www.gnome.org./">GNOME</a> project is currently considering switching to it from Autoconf.</p>
<h4>Waf</h4>
<p><a href="http://code.google.com./p/waf/">Waf</a> is a descendent of SCons, and thus shares the power of Python.  However, it is expanded in several ways: the API is retooled and is more intuitive in design in some ways; the configuration stage has been spawned into its own step; and compilation is quite pretty.  Despite all of this, it does suffer from a lot of API irregularities and absolutely intolerable documentation.  It is also important to note that Waf is unique in the build systems that I&#8217;m aware of in that the preferred way to use it is to actually ship it with the application itself instead of using a system-wide installation</p>
<h4>CMake</h4>
<p><a href="http://www.cmake.org./">CMake</a> is the build system for <a href="http://www.kde.org./">KDE 4</a>, and is a very nice and simple build system for projects of any size.  However, this clean and simple design is detracted from by the simplistic (though not to the Make extreme by any means) language used to develop for it.  If you can get past this weakness, however, very nice things lie inside, such as an integrated unit testing framework.  It is worth noting that rather than being a base build system, it instead generates files for the native build system (Microsoft Visual C++ on Windows, Makefiles or KDevelop on *NIX, etc.)</p>
<h4>Others</h4>
<p>This is where the <em>real</em> dragons are; the previous build systems I have at least some experience with, but these are build systems I have only heard of.  Despite this, I would feel remiss in my duties to you the reader if I did not at least mention some of the lesser-used options.</p>
<ul>
<li><a href="http://ant.apache.org/">Apache Ant</a> is a build system is aimed at Java projects, and has its project files written in XML.</li>
<li><a href="http://www.perforce.com./jam/jam.html">Perforce Jam</a> appears to be a C/C++ build system with a syntax reminiscent of Make, but with portability features, control structures, and automatic dependency ordering.</li>
<li><a href="http://doc.trolltech.com/4.4/qmake-manual.html">QMake</a> is a Makefile generator not unlike Autoconf, only with a much easier-to-learn syntax.  It is part of the <a href="http://www.trolltech.com./products/">QT toolkit</a>.</li>
</ul>
<p>This list is by no means complete.  If you have a favorite build system, please do mention it in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/493/feed</wfw:commentRss>
		</item>
		<item>
		<title>Why Web 2.0 Applications Deserve the Permanent Beta</title>
		<link>http://codingexperiments.com/archives/481</link>
		<comments>http://codingexperiments.com/archives/481#comments</comments>
		<pubDate>Sun, 09 Nov 2008 02:56:56 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Best Practices]]></category>

		<category><![CDATA[Internet]]></category>

		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[beta]]></category>

		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=481</guid>
		<description><![CDATA[The web application in permanent beta is the latest fashion in today&#8217;s Internet world. Some folks believe that after several years of testing, that web applications ought to shed the beta tag and call themselves stable.
I disagree.
Open source desktop software is significantly more flexible than a closed source web application in terms of giving what [...]]]></description>
			<content:encoded><![CDATA[<p>The web application in permanent beta is the latest fashion in today&#8217;s Internet world. Some folks believe that after several years of testing, that web applications ought to shed the beta tag and call themselves stable.</p>
<p>I disagree.</p>
<p>Open source desktop software is significantly more flexible than a closed source web application in terms of giving what users want. Desktop applications have extensibility through plugins, extensions, themes, and so forth. Web applications currently have only a weak extensibility through Greasemonkey.</p>
<p>Facebook Apps are closer to true extensibility, but Facebook remains in control over Facebook Apps, <a title="Venture Cyclist: Facebook to remove all third party apps?" href="http://venturecyclist.blogspot.com/2008/07/facebook-to-remove-all-third-party-apps.html">which results in rumors that Facebook is going to close down third party apps</a>. Developers creating extensions of desktop applications usually do not have to worry about their extensions being wiped off the face of the Earth.</p>
<p>Also regarding Facebook, some users are not happy with <a href="http://blog.facebook.com/blog.php?post=30074837130">Facebook&#8217;s transition to a new user interface</a>. There is even a <a href="http://www.facebook.com/group.php?gid=21213297178">petition for the old user interface to return</a>. I suggest you compare Facebook to Wordpress. Nobody is going to force a blogger to upgrade to the latest version of Wordpress, but there is little one can do if Facebook decides to switch to a different (and worse, in the mind of the user) UI.</p>
<p>Does my blog post ring a bell? Oh yeah, this blog post sounds roughly similar to <a href="http://news.cnet.com/8301-1001_3-10054253-92.html">Richard Stallman&#8217;s opinions on cloud computing</a>. Stallman is dead right. One should only truly trust open source software on hardware within the ownership of the user.</p>
<p>So where does the whole &#8220;keep Web 2.0 apps in permanent beta&#8221; idea come into play? My point is that Web 2.0 apps ought to keep themselves in permanent beta as a reminder to users that no Web 2.0 app outside of the user&#8217;s control is as safe as an application within the user&#8217;s control.</p>
<p>Use Web 2.0 apps responsibly™.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/481/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Windows 95 / FreeBSD 7.0 Tradeoff I Faced</title>
		<link>http://codingexperiments.com/archives/462</link>
		<comments>http://codingexperiments.com/archives/462#comments</comments>
		<pubDate>Tue, 04 Nov 2008 01:28:42 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=462</guid>
		<description><![CDATA[A year or two ago, I dug out an old Compaq Presario 4508 with the task to get Ethernet working on it. After multiple failed attempts, I was successful. But my efforts were worthless, because I couldn&#8217;t find a decent browser for it.
Last week, I dug out the old Compaq Presario 4508 again to install [...]]]></description>
			<content:encoded><![CDATA[<p>A year or two ago, I dug out an old Compaq Presario 4508 with the task to get Ethernet working on it. After multiple failed attempts, I was successful. But my efforts were worthless, because I couldn&#8217;t find a decent browser for it.</p>
<p>Last week, I dug out the old Compaq Presario 4508 again to install Linux on it. I booted up the Slackware CD, and found that none of the kernels on the CD would work on the Presario. Rather than spending time debugging error messages or creating a custom kernel, I moved onto FreeBSD, which succesfully installed the first time around. Because of the very limited RAM that the Presario had, running xorg wasn&#8217;t, and still isn&#8217;t, an option. So I peacefully went to work trying to install Python and a terminal web browser.</p>
<p>Yesterday, when I successfully installed the web browser, the issue hit me. I sacrificed a somewhat ancient operating system with a working GUI for a more modern, stable, and secure operating system without a graphical user interface. Did I make the right choice? Most software that I care about is available or can be easily compiled on FreeBSD, but I cannot use anything that requires a GUI. With Windows 95, I had a graphical user interface, but a limited set of modern applications that still can be run on Windows 95.</p>
<p>So what choice would you make? Would you go with the old OS with a GUI or the modern, stable, secure, and graphics free OS?</p>
<p><em>Not counting this footnote, the blog post is exactly 248 words long.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/462/feed</wfw:commentRss>
		</item>
		<item>
		<title>A Second, Quick Glance at Microblogging Service Kwippy Shows Promising Improvements</title>
		<link>http://codingexperiments.com/archives/444</link>
		<comments>http://codingexperiments.com/archives/444#comments</comments>
		<pubDate>Thu, 30 Oct 2008 02:05:08 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

		<category><![CDATA[kwippy]]></category>

		<category><![CDATA[microblogging]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=444</guid>
		<description><![CDATA[I have previously written about Kwippy, and that was pretty much the best post ever on this sad little blog.
Why?
Because I actually managed to publish an email interview with Kwippy CEO Mayank Dhingra . That&#8217;s right! An email interview, like those big A-list bloggers do all the time! Yeah!
So, what improvements have gone into Kwippy? [...]]]></description>
			<content:encoded><![CDATA[<p>I have <a href="http://codingexperiments.com/archives/177">previously written about Kwippy</a>, and that was pretty much the best post ever on this sad little blog.</p>
<p>Why?</p>
<p>Because I actually managed to publish an email interview with Kwippy CEO <a href="http://www.linkedin.com/in/mayankdhingra">Mayank Dhingra </a>. That&#8217;s right! An email interview, like those big A-list bloggers do <em>all the time</em>! Yeah!</p>
<p>So, what improvements have gone into Kwippy? How is Kwippy better since last July?</p>
<p>The <a href="http://blog.kwippy.com/2008/07/26/the-more-the-merrier-twitter-invite-feature-and-more/">Kwippy team made it easier to invite Twitter friends to Kwippy</a>, but <a title="Same page, but different section of the previous link." href="http://blog.kwippy.com/2008/07/26/the-more-the-merrier-twitter-invite-feature-and-more/#comment-153">got some negative publicity</a>. The Kwippy folks quickly modified the feature so it would not spam Twitter users, and then <a href="http://blog.kwippy.com/2008/07/27/the-ethics-of-virality/">wrote a blog post apologizing</a>.</p>
<p>Kwippy also made some user interface improvements, including the ability for Kwippy users to customize their page with themes. Below are two screenshots comparing the old Kwippy with the current Kwippy interface.</p>
<p><a href="/images/kwippy_updates/kwippy.png"><img class="alignnone" src="/images/kwippy_updates/kwippy_thumb.png" alt="" width="500" height="216" /></a></p>
<p>You will notice that in the newer screenshot, Kwippy has the word &#8220;Friends&#8221; visible in the sidebar. This is part of a new feature that allows you to define who is your friend and who you are just interested in. Think of Kwippy&#8217;s &#8220;Friends&#8221; feature as a primitive version of FriendFeed lists.</p>
<p>Kwippy also <a title="Kwippy Blog: Community Manager" href="http://blog.kwippy.com/2008/09/16/community-manager/">added an employee</a>. Matthew Phillips, known as Kestrachern, is Kwippy&#8217;s community manager. You can<a title="Kwippy: Team" href="http://www.kwippy.com/home/team/"> find short bios of (currently, the four) Kwippy employees</a>.</p>
<p>I conclude this (very) quick glance at Kwippy with a note on the small, vibrant community that has appeared there. The lack of a character limit for messages on Kwippy (called kwips) or comments on kwips has led to a manner of discussing that is a bit of a hybrid between a forum and Twitter.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/444/feed</wfw:commentRss>
		</item>
		<item>
		<title>Nine Smart Tips for Becoming an Anti-Linux Troll</title>
		<link>http://codingexperiments.com/archives/427</link>
		<comments>http://codingexperiments.com/archives/427#comments</comments>
		<pubDate>Thu, 16 Oct 2008 23:06:53 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Rant]]></category>

		<category><![CDATA[fun trolls linux]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=427</guid>
		<description><![CDATA[Introduction
You have seen those extremely brilliant ant-Linux anti-Linux trolls that demonstrate their brilliance on IRC channels, message boards, and blog posts, right?
(No, I&#8217;m not talking about the Linux Hater. He is a different kind of animal. The Linux Hater is actually useful to the Linux community.)
Now, I bet that you&#8217;ve always wanted to become one [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>You have seen those extremely <em>brilliant</em> <span style="text-decoration: line-through;">ant-Linux</span> anti-Linux trolls that demonstrate their brilliance on IRC channels, message boards, and blog posts, right?</p>
<p>(No, I&#8217;m not talking about the <a href="http://linuxhaters.blogspot.com/">Linux Hater</a>. He is a different kind of animal. The Linux Hater is actually useful to the Linux community.)</p>
<p>Now, I bet that you&#8217;ve always wanted to become one of those trolls. You probably think it is grand to spread around misinformation, right? If you didn&#8217;t, you probably shouldn&#8217;t be reading this post.</p>
<h2>General tips</h2>
<h3>1) Study the work of other trolls.</h3>
<p>Other trolls have done a lot of fine-tuning of their flamebaiting skills, and you should observe their techniques in order for you to become a top-notch troll.</p>
<h3>2) Be an anti-Mac OS X troll too.</h3>
<p>GNU/Linux and OS X are both Unix-like operating systems. It is difficult to be a hater of Linux, a lover of Max OS X, and still look like a realistic troll. Loving Mac OS X and hating Linux is something that you might get to graduate to when you become a more advanced troll.</p>
<p>Though, should you ever become among the trolling elite and decide to be pro-Mac and anti-Linux, remember to register new accounts at all your favorite websites and chat rooms, or people will notice your change.</p>
<h3>3) Be knowledgeable about Linux, but not too knowledgeable.</h3>
<p>If you clearly know nothing about Linux, people aren&#8217;t going to listen to you. If you know a ton about Linux, then people are going to wonder why you know so much about Linux when you clearly hate it.</p>
<p>The goal is to get to a happy medium where people trust your opinions on Linux, but don&#8217;t suspect you to be secretly pro-Linux.</p>
<h2>Account-related tips</h2>
<h3>1) Use multiple accounts.</h3>
<p>People on the Internet aren&#8217;t very likely to listen to just one anonymous commentor, so remember to register at least five accounts per website or IRC server. You should also be registered on at least ten different websites/IRC channels, which hints at a total of at least 50 accounts per troll. Really good trolls, though, might need more accounts.</p>
<h3>2) Choose strong, unique passwords for each of the accounts.</h3>
<p>You might be tempted to choose the same password or same pattern for the passwords to your (at least) 50 accounts. This, of course, is very bad behavior because it would be catastrophic if even one of your accounts was accessed by a pro-Linux or even OS-neutral person.</p>
<p>Choosing long, unique, and hard to predict passwords is a good strategy to make sure that all of your trolling accounts are kept safe. Try using password managers such as <a href="http://keepass.info/">Keepass</a> to keep track of all the passwords you will have.</p>
<h3>3) Aim for high or low karma.</h3>
<p>Many websites and social networks have the concept of karma. That is, users can vote the comments of other users up or down. Comments with high karma are sometimes more visible on certain websites. Comments with low karma are usually hidden.</p>
<p>If your comment has high karma, other users like how you phrased your point, which means that you are a good troll. If your comment has low karma, it means that people do not like what you are saying and wish that you would not say it. Having comments with low karma is a sign that you are a good troll.</p>
<h2>Website-related tips</h2>
<h3>1) Get your own websites (and domain names).</h3>
<p>While posting comments or sending messages on other websites/IRC channels is a good strategy, there is always the chance that your comments will get deleted and/or you will get banned.</p>
<p>Having your own website is a better strategy. Getting a domain name is not necessary for having your own website, but it makes your website look more believable, which in turn makes you a more efficient troll.</p>
<p>Getting a website at Freewebs or another host is not recommended, due to the lack of control you have over the webpage. Buying shared hosting, and some domain names too, is the best way to create a troll website.</p>
<h3>2) Remember to use SEO tactics on your websites.</h3>
<p>Getting your websites into high ranking positions in search engines maximizes your visibility as a troll. The ultimate goal of an angry anti-Linux troll is to have every major search engine return anti-Linux webpages when the keyword &#8220;Linux&#8221; is searched.</p>
<h3>3) Remember to follow usability guidelines on your websites.</h3>
<p>Making sure that your website works well when it is read by screen readers and such seems like a waste of time, but it is necessary for the troll that wants <em>everybody</em> to hear the anti-Linux message.</p>
<h2>Conclusion</h2>
<p>While the life of a troll isn&#8217;t for everybody, these tips can make it easier for beginning anti-Linux trolls to get started.</p>
<p>No trolling in these comments, though.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/427/feed</wfw:commentRss>
		</item>
		<item>
		<title>Winning the CodingExperiments Worst Website of the Year Is&#8230; Every Website Coded Entirely in Adobe Flash!</title>
		<link>http://codingexperiments.com/archives/386</link>
		<comments>http://codingexperiments.com/archives/386#comments</comments>
		<pubDate>Sun, 05 Oct 2008 14:27:23 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Best Practices]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Rant]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=386</guid>
		<description><![CDATA[Introduction
Adobe Flash, while it appears to be buggier on Linux, is a neat thing. I can watch animations and play games right through my web browser. Now, I would prefer that Adobe Flash not be put to the use of making entire websites, or even major parts of websites, such as a navigation menu.
Flash usability [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Adobe Flash, while it appears to be buggier on Linux, is a neat thing. I can <a title="Original JibJab Animations" href="http://www.jibjab.com/originals">watch animations</a> and <a title="Orisinal : Morning Sunshine" href="http://www.ferryhalim.com/orisinal/">play games</a> right through <a title="UserFriendly: Cartoon for Sep 06, 2008" href="http://ars.userfriendly.org/cartoons/?id=20080906">my web browser</a>. Now, I would prefer that Adobe Flash not be put to the use of making entire websites, or even major parts of websites, such as a navigation menu.</p>
<p>Flash usability hasn&#8217;t had major improvements in eight years, as evident by Jakob Nielsen&#8217;s similar article on <a title="Jakob Nielsen's Alertbox, October 29, 2000: Flash: 99% Bad" href="http://www.useit.com/alertbox/20001029.html">Flash and usability</a>.</p>
<h2>Why too much Flash is bad</h2>
<h3>1) The user interface is nonstandard.</h3>
<p>Flash websites have a tendency to make their own (shinier) scroll bars to help me navigate large amounts of text.</p>
<p>A web designer creating his or her own scrollbar, and then refusing to let me use the browser&#8217;s scrollbar is like the web designer poking holes in my car&#8217;s tires and replacing the tires with cardboard boxes. Well, perhaps I&#8217;m being a bit dramatic with the metaphor.</p>
<p>Interaction with the user interface also totally gives the user unexpected surprises. Most Flash websites do not allow me to right-click*, middle-click, or use my web browser&#8217;s scroll bar.</p>
<p><img class="alignnone" src="/comics/comic29.png" alt="" width="311" height="312" /></p>
<p><em>*Whenever I say, &#8220;no right-click&#8221;, I mean that the user cannot access a context menu from right-clicking.</em></p>
<h3>2) Flash websites often take longer to load.</h3>
<p>Oftentimes, I want good ol&#8217; fashioned text coming down the pipeline to my screen. I do not want:</p>
<ul>
<li>text animations.</li>
<li>animations of somewhat related images.</li>
<li>sound.</li>
<li>a screen that tells me that the above three are loading.</li>
</ul>
<h3>3) Ctrl+F doesn&#8217;t work on Flash websites.</h3>
<p>I cannot use text manipulation tools to edit or search the webpage. I cannot type Ctrl+F and then search the text of the page. Greasemonkey would not work well in all-Flash websites. Neither would bookmarklets or Firefox extensions that allow me to manipulate the page.</p>
<h3>4) OS-specific Flash Player bugs</h3>
<p>I recently visited a website that had a bug with an embedded Flash slideshow. The bug was only visible when using the Linux Flash Player. On Windows, even on Firefox, the Flash slideshow worked perfectly.</p>
<p>The bug was that the Javascript drop down navigation was being hidden under the Flash slideshow on Linux, which made most of the menu inaccessible.</p>
<p>Designers shouldn&#8217;t have to test on multiple operating systems, because the vast majority of designers probably do not have the time or resources to do so.</p>
<h3>5) Redundancy</h3>
<p>Plenty of website designers will provide a plain HTML version of the content on the website for users that do not have Adobe Flash. I just don&#8217;t understand why there needs two versions of a webpage, with one being flashier than the other.</p>
<p>The main usability issue here is that any text or link pointing to the HTML version is often in very small text and sometimes only visible to users that do not use Flash. Users that do have Flash and want to use the text version might have a hard time finding the text version.</p>
<h3>6) Redundancy</h3>
<p>Sorry, I couldn&#8217;t resist.</p>
<h2>Conclusion</h2>
<p>I would rather visit an ugly webpage full of HTML hacks that were inserted by a <a title="CodingExperiments: Noobs Called. They Want Their WYSIWYG Editor Back." href="http://codingexperiments.com/archives/107">poorly coded WYSIWYG editor</a> than an impressive looking (but completely unusable) Flash website.</p>
<p>Why?</p>
<p>Because in an HTML website, the defaults are more usable because defaults in HTML pages are what most users are used to. In an HTML page, developers would have to go out of their way to create some of the annoyances that are common on Flash websites.</p>
<p>The vast majority of people that create HTML pages don&#8217;t have an impulse to disable right-clicking in the browser, or to make their own scrollbar when the browser has a scrollbar that works just fine.</p>
<p>So, please. I beg you to start an HTML page with a DOCTYPE tag, end it with &lt;/html&gt;, and make sure that the only uses of Flash in between are not for displaying text and images.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/386/feed</wfw:commentRss>
		</item>
		<item>
		<title>Seven Questions That All Newbie Programmers Should Be Asking When Writing Programs</title>
		<link>http://codingexperiments.com/archives/407</link>
		<comments>http://codingexperiments.com/archives/407#comments</comments>
		<pubDate>Mon, 29 Sep 2008 03:01:02 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Best Practices]]></category>

		<category><![CDATA[General Code]]></category>

		<category><![CDATA[Programming Tips]]></category>

		<category><![CDATA[noobs programming security]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=407</guid>
		<description><![CDATA[Introduction
&#8220;Listen. Easy now,&#8221; said the old man gently. &#8220;I know, I know. You&#8217;re afraid of making mistakes. Don&#8217;t be. Mistakes can be profited by. Man, when I was younger I shoved my ignorance in people&#8217;s faces. They beat me with sticks. By the time I was forty my blunt instruments had been honed to a [...]]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<blockquote><p>&#8220;Listen. Easy now,&#8221; said the old man gently. &#8220;I know, I know. You&#8217;re afraid of making mistakes. <em>Don&#8217;t</em> be. Mistakes can be profited by. Man, when I was younger I <em>shoved</em> my ignorance in people&#8217;s faces. They beat me with sticks. By the time I was forty my blunt instruments had been honed to a fine cutting point for me. If you hide your ignorance, no one will hit you and you&#8217;ll never learn. [...]&#8221;</p>
<p>&#8211;Fahrenheit 451</p></blockquote>
<p>Newbie programmers, when set to complete task, will often complete the task in the worst way possible. Of course, most programmers graduate beyond newbies. This post will detail some questions that newbies can ask in order to build better programs.</p>
<p>The below questions are things that all newbie programmers should be asking themselves so they can produce good programs. The questions can also be used as a very simple litmus test to see whether a programmer is a completely lost newbie or not. <a title="Stevey's Drunken Blog Rants™: The Five Essential Phone-Screen Questions " href="http://steve.yegge.googlepages.com/five-essential-phone-screen-questions">The Five Essential Phone-Screen Questions</a> has a set of questions that help find good programmers.</p>
<p>&lt;insert image here&gt;</p>
<p><em>Photo credit: Flickr user <a href="http://flickr.com/photos/31333486@N00/">anomalous4</a> </em></p>
<h2>When coming up with ideas for solutions</h2>
<h3>1) What patterns or algorithms can help me solve the problem?</h3>
<p>Computers work well with numbers, and numbers are full of patterns and sequences. A simple example of a sequence is the Fibonacci sequence, where every number is the sum of the previous two numbers (1, 1, 2, 3, 5, 8, 13&#8230;).</p>
<p>A simple and useful algorithm is the <a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of Eratosthenes</a>, which is used to create lists of prime numbers.</p>
<h3>2) Has somebody else already solved this problem or a similar problem?</h3>
<p>Google called; they said they have the answer to your problem.</p>
<p>For those that can handle looking at the possibly messy code of others, looking online for open source code that can partly, mostly, or completely fill a need is a good idea.</p>
<p>A somewhat recent example is that I was looking for an open source Digg clone in PHP to make slight modifications to, and managed to find <a href="http://www.pligg.com/">Pligg</a>. Unfortunately, Pligg didn&#8217;t manage to fit my needs, but I managed to find <a href="http://www.kubelabs.com/phpdug/">PHPDug</a>, which I like better.</p>
<h3>3) What are potential issues I could run into when solving this problem?</h3>
<p>It is important to think ahead about what issues could be faced when solving a problem.</p>
<p>For an important website, the power of the hardware, the power of the software, and the precautions taken for data loss and downtime, and more should be considered.</p>
<h2>When looking at possible solutions</h2>
<p>The first group of questions are things that newbie, or n00b, programmers should ask themselves when looking at a source code or a way to solve a problem.</p>
<h3>1) Is this method fast as it can be?</h3>
<p>Writing fast programs is a very important thing. Too many people are not patient enough for slow programs, and writing programs that can easily be made faster is not going to make users happy.</p>
<h3>2) Is this method secure?</h3>
<p>I sometimes wonder if it would be more beneficial to beginning developers <a href="http://youtube.com/?v=8To-6VIJZRE">Baller shouted &#8220;Security!&#8221; instead of &#8220;Developers!&#8221;</a>.</p>
<p><img class="alignnone" title="I have a feeling that nobody will understand this little cartoon I made." src="/images/noobs/noobs.png" alt="" width="341" height="234" /></p>
<p>Some common, but dangerous security mistakes that n00bs make are:</p>
<p><strong>1) not escaping user input</strong></p>
<p><a href="http://xkcd.com/327/"><img class="alignnone" src="/images/noobs/exploits_of_a_mom.png" alt="" width="358" height="205" /></a></p>
<p><strong>2) not using file permissions properly</strong></p>
<p>Chmodding everything is 777 is bad. Very bad.</p>
<p><strong>3) using improper encryption to store things</strong></p>
<p><a href="http://xkcd.com/257/"><img class="alignnone" src="/images/noobs/code_talkers.png" alt="" width="500" height="397" /></a></p>
<h3>3) Is there a simpler way of solving this problem?</h3>
<p>If a person has two solutions to solve a problem, that person should always choose the simpler solution. The more complexity there is in a system, the more difficult it is to use and maintain that system.</p>
<h3>4) Is this method scalable?</h3>
<p>Creating software that works perfectly, with the exception it not being scalable at all, is setting up the programmer(s) for some major headaches down the road. A classic example is Twitter&#8217;s severe instability a few months ago.</p>
<h2>Final notes</h2>
<p>All programmers ought to subscribe to <a href="http://www.codinghorror.com/blog/">Coding Horror</a>, a blog with far more useful content than you&#8217;ll ever find in this waste of disk space.</p>
<p>Also remember to ask questions on mailing lists, forums,  and so forth, but only after several hours of experimenting with Google keywords.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/407/feed</wfw:commentRss>
		</item>
		<item>
		<title>Blogging Tip: Work on Posts One at a Time</title>
		<link>http://codingexperiments.com/archives/402</link>
		<comments>http://codingexperiments.com/archives/402#comments</comments>
		<pubDate>Wed, 24 Sep 2008 23:19:36 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Blogging]]></category>

		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=402</guid>
		<description><![CDATA[You know why I haven&#8217;t posted in a while? No, it is not because I&#8217;m really busy, but because the CodingExperiments team has been churning draft after draft and ping-ponging back and forth between them to make updates. The result is a massive amount of half-baked blog posts. Working on posts one at a time [...]]]></description>
			<content:encoded><![CDATA[<p>You know why I haven&#8217;t posted in a while? No, it is not because I&#8217;m really busy, but because the CodingExperiments team has been churning draft after draft and ping-ponging back and forth between them to make updates. The result is a massive amount of half-baked blog posts. Working on posts one at a time and not starting another post until you have finished or given up on an existing post is a good way to prevent a barrage of blog post drafts from raining down on you.</p>
<p>While plenty of people say that producing good content is more important than posting regularly, plenty of new bloggers, including me, feel guilty when they do not post regularly.</p>
<p>Now, there have to be exceptions to this rule. Bloggers that write mostly time-sensitive material, then following this rule could possibly hurt them by delaying the publishing of the posts. Taking a look at this blog&#8217;s archives will show that whenever I try to cover something time-sensitive, I always end up covering it a few days later.</p>
<p>Also, if you would like more extremely obvious (or extremely brilliant, depending on your perspective) tips on blogging, you might like reading some of this blog&#8217;s other posts covering bloggi&#8211;oh don&#8217;t bother, I know nothing on blogging.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/402/feed</wfw:commentRss>
		</item>
		<item>
		<title>My Plans for a New RSS Reader</title>
		<link>http://codingexperiments.com/archives/380</link>
		<comments>http://codingexperiments.com/archives/380#comments</comments>
		<pubDate>Mon, 08 Sep 2008 00:31:53 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<category><![CDATA[Open Source]]></category>

		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=380</guid>
		<description><![CDATA[Sorry I was unable to post for a while. I wasn&#8217;t busy, but wrote a bunch of drafts and decided I wouldn&#8217;t publish them. 
I shouted to the Internet that I am unhappy with existing RSS readers. Now, let&#8217;s use our prediction skills to see what will happen next.
Hmm&#8230; Programmers like to solve problems. I [...]]]></description>
			<content:encoded><![CDATA[<p><em>Sorry I was unable to post for a while. I wasn&#8217;t busy, but wrote a bunch of drafts and decided I wouldn&#8217;t publish them. </em></p>
<p>I <a href="http://beta.friendfeed.com/e/deb13cb2-2889-bf55-26ab-a3f8b8a84030/cieffe-Yes-I-am-I-am-completely-unhappy-with-the/">shouted to the Internet that I am unhappy with existing RSS readers</a>. Now, let&#8217;s use our prediction skills to see what will happen next.</p>
<p>Hmm&#8230; Programmers like to solve problems. I appear to have a problem with RSS readers. The title also gives a hint that I&#8217;m making plans for an RSS reader. Considering all that evidence, it is pretty likely that I&#8217;m going to make an RSS reader, right?</p>
<p>Yup. You guessed correctly. I&#8217;m going to build an RSS reader.</p>
<p><img class="alignnone" src="/images/nowai.jpg" alt="" width="400" height="300" /></p>
<p>Because I want to access my RSS reader from anywhere, I will be creating a web RSS reader.</p>
<p>Below is the list of features that I have planned for the RSS reader.</p>
<ul>
<li>Tagging of feeds as well as individual posts.</li>
<li>A <a href="http://codingexperiments.com/archives/313">recommendation engine</a> for posts.</li>
<li>Integration with:
<ul>
<li>Google Reader</li>
<li>FriendFeed</li>
<li>Delicious</li>
</ul>
<ul>
<li>and possibly more</li>
</ul>
</li>
<li>The ability to experiment with possibly dozens of user interfaces.</li>
</ul>
<p>Wait, &#8220;experiment with possibly dozens of user interfaces&#8221;? Now why would I want to do that? The main reason that I want to experiment with a large amount of user interfaces is because no user interface for an RSS reader (both desktop and web-based) have ever satisfied my need for large amounts of data to come down the pipeline and be displayed in a good looking manner.</p>
<p>I am also interested in getting feedback from users to see which user interface is the most easy to use.</p>
<p>Now all I have to decide is what language to write it in. I&#8217;m thinking of either writing it in PHP or Python. I&#8217;m leaning towards PHP, as I haven&#8217;t actually done any real web programming in Python. I might try Ruby on Rails, as I know a small amount of Ruby.</p>
<p>Because of my limited resources, my RSS reader would be restricted to private alpha, though making the RSS reader open source would allow other folks to try it out on their own servers.</p>
<p>Any comments and suggestions on my RSS reader? Comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/380/feed</wfw:commentRss>
		</item>
		<item>
		<title>Due to Popular Demand, I Present an mp3 of Me Singing &#8216;Never Gonna Give C Up&#8217;</title>
		<link>http://codingexperiments.com/archives/370</link>
		<comments>http://codingexperiments.com/archives/370#comments</comments>
		<pubDate>Sat, 30 Aug 2008 03:46:46 +0000</pubDate>
		<dc:creator>possible248</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codingexperiments.com/?p=370</guid>
		<description><![CDATA[You can find the song at http://codingexperiments.com/examples/song.mp3
I&#8217;m not that great of a singer, but I don&#8217;t think that the song is *too* bad for a silly parody that I came up with in an IM conversation.
EDIT: If you didn&#8217;t see the original post, you can find the lyrics to my parody song here.
Well, to fill [...]]]></description>
			<content:encoded><![CDATA[<p>You can find the song at <a href="http://codingexperiments.com/examples/song.mp3">http://codingexperiments.com/examples/song.mp3</a></p>
<p>I&#8217;m not that great of a singer, but I don&#8217;t think that the song is *too* bad for a silly parody that I came up with in an IM conversation.</p>
<p>EDIT: If you didn&#8217;t see the original post, <a title="CodingExperiments: “Never Gonna Give You Up” Lyrics Adjusted for Programming Twist" href="http://codingexperiments.com/archives/320">you can find the lyrics to my parody song here</a>.</p>
<p>Well, to fill up space, I think I&#8217;ll advertise the guest posting offer. Email me at possible248@gmail.com if you would like to write a short, tech-related guest post. If you wish, you can <a title="CodingExperiments: Why You Should Guest Post on Codingexperiments (and Where to Sign Up) " href="http://codingexperiments.com/archives/254">read up more on <em>why</em> you should guest post on this website.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codingexperiments.com/archives/370/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.606 seconds -->
<!-- Cached page served by WP-Cache -->
