<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Charles Solar &#187; Ramblings</title>
	<atom:link href="http://charlessolar.com/post/category/ramblings/feed" rel="self" type="application/rss+xml" />
	<link>http://charlessolar.com</link>
	<description></description>
	<lastBuildDate>Fri, 29 Apr 2011 04:38:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Security Questions are Stupid</title>
		<link>http://charlessolar.com/post/135</link>
		<comments>http://charlessolar.com/post/135#comments</comments>
		<pubDate>Tue, 06 Oct 2009 04:37:03 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=135</guid>
		<description><![CDATA[Security questions, my number one most hated thing online.  I can see the logic behind these questions, the web site verifies personal information with your answers in case you misplace your password, username, etc.  So what is my problem with these very nosy fields?  Well first off who would want to tell random-shopping-place.net her maiden [...]]]></description>
			<content:encoded><![CDATA[<p>Security questions, my number one most hated thing online.  I can see the logic behind these questions, the web site verifies personal information with your answers in case you misplace your password, username, etc.  So what is my problem with these very nosy fields?  Well first off who would want to tell random-shopping-place.net her maiden name, or his favorite pets name?  I&#8217;ll admit most of the information is not worth much to most people, but I recently logged onto a site where they wanted five different security questions.  Questions to choose from ranged from favorite band to favorite elementary school teacher.  One question guys, that is my limit.</p>
<p>Ignoring the personal information and the question addicts, what else do I have against these questions?  Well first rewind a bit and think about why they use these questions.  Typically these questions are used to restore account access after you have been compromised or forget your information.  Occasionally some people want answers just to change your log in info.  Why do web sites feel the need to verify that the one with valid credentials can also answer a bunch of personal questions?  Its just another useless security layer that might prevent &lt;1% of unauthorized accesses for the retards using &#8216;password&#8217; as their password.  Security questions are nothing more than a retard test, and having to pass a retard test each time a user wants to log in is insulting to everyone; or at least it <strong>should</strong> be.</p>
<p><span id="more-135"></span></p>
<p>I have no idea what my favorite book/movie/show/teacher/school/band is, and since that knocks out 80% of the available questions right off the bat I am left with &#8216;city I was born in&#8217;,  &#8216;name of high school&#8217; or some equally obvious trivia from the life of Charles.  I can not count how many times I have tried to answer these questions only to have the computer tell me I am wrong.  Me, the real flesh and blood, knows less about my life than a computer.  Favorite bands change, pets die, K-12 merges into one big blur, these are all to be expected from the average adult; so where do these web sites get the idea that it is a good idea to ask these things?</p>
<p>I had a gmail account get taken over one time.  For a period of time I always put in the answer &#8216;none&#8217; for every security question, including the ones on my email account.  So someone found out my email was tied to my old wow account, and sent a password reset to my address.  Turns out when you try and &#8216;remember my password&#8217; with gmail it just asks for the answer to your security question.  So this smart guy entered &#8216;none&#8217; and won a free expired wow account.</p>
<p>Why am I pissed at security questions instead if my own incompetence?  For the same reason I still fill in &#8216;none&#8217; for all my answers.  I do not want to be bothered with remembering my favorite movie, my favorite book or any of that crap.  Not only that but why would I want some random web site knowing that information?</p>
<p>Well I think that is enough ranting, you might be wondering what I am suggesting instead.  Well I would question the use the security questions at all.  First off they should be optional, that way users are not forced to fill in garbage they will eventually forget.  What about account recovery?  There are two kinds of account recovery, a recovery for a web site account for someplace like slashdot.org, and there is account recovery for an email address.  For slashdot the answer is easy, send an email confirmation to the recorded email address.  There is no reason why a web site like slashdot&#8217;s responsibility should extend any farther than that.  You (the web site owner) do not need to worry about whether the person knows his favorite band, if he access to his email address, that should be good enough for you.</p>
<p>If you are the email provider you have an interesting problem.  I would argue that if you forget the password to your email address you are beyond hope.  However I will admit that is a bit harsh.  If you are that worried about your customers then I would advocate a password HINT, where they can type a phrase to remember their password.  OR let them type their own question and answer.</p>
<p>Other valid solutions would be ask several questions about the state of their inbox.  &#8220;When was the last time you logged in,&#8221; &#8220;Name one address in your address book,&#8221; &#8220;Who do you send the most mail to&#8221; etc.  And lets not overlook the most vital part of client identification, his ip address, browser information, operating system etc.  You get the point.</p>
<p>So why would you want to implement something like that when a select box with answers is incredibly easy?  Because you will impress those of us who hate security questions, and give the appearance that your web site is more intelligent than those fill in the blank wanna bees.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/135/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So, how much do you want to make?</title>
		<link>http://charlessolar.com/post/200</link>
		<comments>http://charlessolar.com/post/200#comments</comments>
		<pubDate>Fri, 25 Sep 2009 05:40:13 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[filler]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=200</guid>
		<description><![CDATA[Salary is a big deal for a lot of people. In fact its such a big deal for some people that they will sacrifice themselves or their coworkers to squeeze just a little more $/hour. In general I think its safe to say that most people work for money. Right? Generally, people work to make [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a title="Dollars" href="http://www.flickr.com/photos/21772410@N06/3938176422/" target="_blank"><img class="alignleft" style="border: 0pt none; margin-left: 10px; margin-right: 10px;" src="http://farm3.static.flickr.com/2620/3938176422_37b4e8af5a_m.jpg" border="0" alt="Dollars" width="180" height="240" /></a>Salary is a big deal for a lot of people.  In fact its such a big deal for some people that they will sacrifice themselves or their coworkers to squeeze just a little more $/hour.  In general I think its safe to say that most people work for money.  Right?  Generally, people work to make money, and by that what I really mean is that people work to make enough money so that hopefully someday they will not have to work anymore; at that point they hope to enjoy living off the interest accrued from whatever retirement package they choose to use when they started working.</p>
<p style="text-align: left;">Well, what is money?  What are those greenish<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="../wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="hickoryhollow113" href="http://www.flickr.com/photos/21772410@N06/3938176422/" target="_blank">hickoryhollow113</a></small> pieces of paper or numbers on a bank statement?  They are just a means to achieve an end; in other words, retirement.  Sure you go on vacations, buy big houses, marry someone, but if you take a step back and look at the purpose of these little bills to any civilized human being on the planet you will see that it all leads up to the point where all of a sudden there is no reason to continue working anymore because you have enough invested that even 4% return will pay your salary each year.</p>
<p>Ultimately these pieces of paper are your retirement, nothing more.  They certainly do not represent any <strong>real</strong> wealth, as millions found out last November.  Do not get me wrong I am not going to discuss what some call &#8220;The Federal Bank Conspiracy.&#8221; Which includes theories explaining the devaluation of the dollar, global government, criminals in fancy suits (although you would do yourself a favor by learning a little bit about the origin and meaning of those green bits of paper).  I am just going to explain some of my own reasons for not defining my life by my eventual retirement.<br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><br />
</a><a title="hickoryhollow113" href="http://www.flickr.com/photos/21772410@N06/3938176422/" target="_blank"></a></small></p>
<p><span id="more-200"></span></p>
<p>I will start by saying that I work for no one but myself.  When I am looking for work I want to know two things, is the job interesting, and will it challenge me.  The prospective job must have both these qualities or it would just turn into a job I do for money, which as I have already established is not what I am after.  I do not mean this in a strictly programming sense either.  A job can be interesting in many ways, in general, if I will learn something interesting from the job, then its interesting.  If a job presents many challenges that require unique solutions, involves traveling to different places, meeting many different people, exploring the inner workings of many different organizations; these are all examples of something I personally would find interesting.  Of course its not a complete list, but the general idea of one.  Also its worth mentioning that I am not some complete snob who does not give the time of day to any proposition that does not entertain me every second of the day.  I am only saying that I am not the type who sits at a desk for years never asking questions and never adventuring farther than the water cooler.</p>
<p>In my opinion there are two different types of programmers.  There are the builders and the maintainers.  The builders are the guys you hire to come in, design a system, layout the ground work, the algorithms, the design and in general build at least the foundation of the actual application.  Most of the time the builders stick around for the entire project; well, I would at least.  Once the application is done the builders move on, they seek new challenges, new opportunities, new excitement, etc.  There is nothing to be gained from sticking to the same product for years, that is the job of the maintainer.<br />
The maintainer by contrast does not design, build, or care about the project at all.  He sits at a desk and makes sure that no one touches the code base without his approval and only after a year of testing has been cleared.  He is your typical white collar just-waiting-for-my-retirement guy.  He does nothing interesting, indeed, he wants nothing interesting to happen.  He does not want the chore of having to think, so he sits and grows old waiting for the day when he can sit on the beach at Maui all day and really enjoy the last 20 years of his life. (note &#8211; dramatized for effect)</p>
<p>If you can sense my obvious bias in these two paragraphs then you can obviously guess which group I file myself into.  I am a builder, through and through.  Throw me a nifty bone in the form of a challenge or opportunity every month or so and I will be happy as a clam.</p>
<p>To make a position challenging by my definition would be to consistently test the limits of my knowledge.  It is no fun constantly solving problems and puzzles with an understanding I gained from the first of such problems.  I enjoy conversations and problems that sit right on my boundary between the known and unknown.  In my never ending quest to learn everything about everything; constantly testing the limits of my knowledge plays a key role in expanding my expertise.  Sure, I may do something wrong or admit that I am unsure of something, but that just means I will have to do some research and learn.</p>
<p>If you work for a big company you might say, &#8220;Well, we are only interested in the person who knows the spec like the back of his hand.&#8221;  I would like to discuss this thinking.  Firstly, there is a <strong>big</strong> difference between knowledge and understanding.  I think everyone can agree that knowledge is good.  Knowledge means that when you open visual studio you can write a program to fork a new process, print hello world, write to a shared memory location, parse a text file and handle windows messages all from your head.  That is great!  But do you <strong>understand</strong> how <em>any</em> of that works?</p>
<p>Having knowledge is good, that is a given.  In my opinion though, having understanding is better.  Lets say someone absolutely knows Perl.  He knows every character, every function, every trick, etc.  He knows Perl, but he does not understand Perl.  If you have a very important Perl project to accomplish this guy sounds like the perfect match right?  Consider this, have you ever heard these words from your programmer &#8220;No, that is not possible&#8221;?  That is the mark of someone who has knowledge but no understanding.  He knows that within his knowledge there is no way to do such a thing, therefore there is no way to do it.  He does not understand the fundamental building blocks so if something comes up that does not fit in the right hole he says you are SOL.</p>
<p>Someone with understanding however would know how to rearrange those blocks to achieve your result.  He may make a mistake, he most certainly does not know ever nuance of the technology, but he understands how it works, and therefore he knows what is good and what would be a bad idea.  Not only that, he also understands potential problems before they happen.  I will try to paint a picture here.  If you imagine your project as a flow of water, probably a river of some sort.  Someone with knowledge will attempt to navigate down your river using the same boat for all your rivers.  He does not understand how the boat works, he just knows that given enough time, energy, and money he will eventually reach the end.  Someone with understanding on the other hand can see the whirlpools, branches, fallen trees in the river; he will design a boat on the spot to perform under those exact circumstances.  If he gets hung up somewhere or it is not going as planned, he will make an adjustment and start again.  He understands the technology, so learning and implementing the framework is simply an exercise in patience.</p>
<p>I am going to get a little stereotypical here, but I already have so if you are still reading I am going to assume you do not care.  The difference I just illustrated is the difference between someone who graduated high school, college, whatever, with a 4.0 GPA and the person who graduated with a 3.0 GPA.  While trying to stick to the topic here, I think we can all agree that school is just a dump truck full of knowledge.  The standard curriculum contains no material that teaches understanding.  And I am going to blow your mind here and say that that is GOOD.<br />
My views on public schooling really deserve their own post, but so you can sleep tonight I will explain what I mean.  Understanding should not be taught in a class of thirty other students.  In that scenario you are simply trying to tell a group how to think, which simply does not work.  Well.. it does work for those &#8216;A&#8217; students.  Which is why you see the &#8216;A&#8217; students dropping out of college and/or jobs and the &#8216;B&#8217; students graduating with honors.  In high school they have the mistaken concept that understanding should be taught and so they try to stress what they call &#8216;Critical Thinking Skills.&#8217;  Which are nothing more than &#8216;Try and Guess what I Mean&#8217; quizzes.  The students who willingly surrender their mind and identity to these people end up getting the &#8216;A&#8217;s, then, they get to college and all of a sudden the teachers do not give a damn about their mind.  Here is the student, saying &#8220;Here! This is me, this is my mind, take it and inject your thoughts and programming into it so that I can score 100% on the test&#8221; and the teacher completely ignores him.  They do not give a damn about his understanding, they are paid to talk for an hour and talk is all they do.  By the way, these are the kids who grow up to be the maintainers.  I am really getting off topic here so I will leave that for you to mull over.</p>
<p>Ok so back on topic, money, ok.  In my entire article so far I have not addressed the main issue.  So, if you feel like you understand my position a little better now how would you pay me?  You do not know right?  That is because money is irrelevant.  I mean sure, it helps buy certain necessities and what not, but I hold practically zero interest in it.  I work to be challenged, to learn, to expand my knowledge.  If there were a job out there that would guarantee me all these things every minute of the day I would <strong>gladly</strong> <em>pay</em> to work there.<br />
Now I do not mean to say that you can get away with paying me half of what everyone else makes.  I do enjoy getting paid, its just not nearly as interesting as my own self improvement.  If you put a stack of money in front of me, along side a problem of equal proportion, I would choose the problem every day of the week.</p>
<p>So I guess it all boils down to one point.  I would argue that you should pay me exactly what you think you <strong>should</strong> pay me.  If I do a crappy job, pay me less, if I design something that saves the company millions, then by all means pay me more; I promise I will not hate you for it.<br />
This seems odd to most managers for some reason.  Usually you get a salary employee that you expect to pay so much a month, the cheaper the better.  My views could not be more different.  I will not demand a high salary, I just demand that you pay me what you feel like you should pay me.  If you are sitting in a dark lit room snickering about this programmer who you hired for super cheap and does the work of five of your regular programmers then you are doing it wrong.  Talent deserves to be recognized, and incompetence deserves to be punished.  Its really as simple as that.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/200/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PAX Wrap Up</title>
		<link>http://charlessolar.com/post/192</link>
		<comments>http://charlessolar.com/post/192#comments</comments>
		<pubDate>Mon, 07 Sep 2009 04:55:47 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[series]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=192</guid>
		<description><![CDATA[Sadly, Pax is over, fellow gamers are packing up, and exhibitors are leaving before the cleaning crew shows up. There was a lot of SWAG, a lot of people, and a lot of games. I mentioned a few booths in my first post, so this time I am going to try and cover some notable [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/masseffect.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/masseffect-300x224.jpg" alt="masseffect" title="masseffect" width="300" height="224" class="alignleft size-medium wp-image-189" /></a>Sadly, Pax is over, fellow gamers are packing up, and exhibitors are leaving before the cleaning crew shows up.  There was a lot of SWAG, a lot of people, and a lot of games.  I mentioned a few booths in my first post, so this time I am going to try and cover some notable booths I did not mention or did not get a picture of the first time around.  I am trying to cover some of the major features here, but this is by no means a complete feature list.</p>
<p><span id="more-192"></span></p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars1.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars1-300x224.jpg" alt="starwars1" title="starwars1" width="300" height="224" class="alignright size-medium wp-image-190" /></a>The Star Wars the Old Republic people were at pax demoing their game during one of two very packed events in the main hall.  Most attendees (including myself) waited 2 hours or more to get into the theater for the show.  My main attraction to TOR is directly connected to my love of the original KOTOR.  I expect Bioware to put out a decent game, but I am worried about the direction of this new mmo.  The producers on the stage were very proud to label their mmo kotor 3 and 4 and 5 and 6 all in one package.  The team recently announced that the game will have fully voiced dialog and a story driven game play experience.  This sounds great for a single player game but I am concerned about how they will connect the dots.  Single player mmo&#8217;s have been tried, as well as mmo&#8217;s for single players; how does Bioware expect to succeed where others have failed?<br />
They also made the announcement that Coruscant will be a playable zone, which was apparently PAX exclusive news.  They also had a video clip of the zone but its not worth talking about.<br />
All in all I was a bit disappointed in the presentation.  I liked getting updated on some of the features of the classes, but nothing they presented or talked about could not have taken place in a booth with a PLAYABLE DEMO.  Oh, all the attendees received a free steam copy of KOTOR; I do not wish to knock the game, but come on guys, how about a raffle for beta access or something other than a free copy of a six year old game.<br />
<a href="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars2.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/starwars2-300x224.jpg" alt="starwars2" title="starwars2" width="300" height="224" class="alignleft size-medium wp-image-191" /></a>Also, back to the story.  The original kotor was great because it felt like the developers told LucasArts to sit in a corner and leave the story to Bioware.  The strength of the game was due to the very minor attachment to the movies and thus, to George Lucas.  Unfortunately the designers of this mmo were emphasizing connections to the movies and original story, which goes against the very foundation of the original KOTOR game.  While I am a Star Wars fan for the most part, I feel that having as little to do with George Lucas these days is a strength.  So while they were standing up there announcing all this back story as connected to the movies, I was sitting very uncomfortably praying they really do know what they are doing.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/3dwow.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/3dwow-300x224.jpg" alt="3dwow" title="3dwow" width="300" height="224" class="alignright size-medium wp-image-186" /></a>Something else that was really big this year were the 3d glasses from nVidia.  Honestly I find the glasses fun, but rather pointless.  I have a couple of major gripes with this technology.  Firstly, in order for a game to be supported a profile must be made for it by an nVidia dev.  Now, the library of supported games is huge, and since its nVidia you probably will not have to worry about any AAA titles shipping without 3d support, but its still a drawback that the device cannot simply work with all games.  I realize I am asking the impossible, which is why I do not expect 3d glasses to take off anytime soon.  My other problem is with the obvious viewing problems.  Not for the person playing the game, I mean for the people watching.  A major thing that makes some games fun is the party aspect.  Where other people can watch you being a badass.  They cannot watch your screen unless they too have 3d specs; I somehow do not expect every gamer to invest in 3-4 pairs of glasses just so they can show off to their friends when no glasses and no 3d works just as well.<br />
In the end its just a gimmick.  A very nicely executed and kinda interesting gimmick, but developers cannot use the tech to build game play elements into their games, and thus it fails to have any appeal outside of the cool kid gamer crowd.<br />
Another thing that was at pax was a gamer suit that would provide feedback to the player when punched, hurt, thrown around, whatever.  Again, a cool gimmick but nothing more.  When I think of these things I picture some form of uber gamer sitting around with 3d glasses, gaming vest, feedback chair, climate feedback; It is not to big of a jump to just say &#8216;virtual reality.&#8217;  While I do hope that all these little pieces to eventually contribute to the eventual realization of true VR, by themselves they are not worth the sometimes very large investment.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock1.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock1-300x224.jpg" alt="bioshock" title="bioshock" width="300" height="224" class="alignleft size-medium wp-image-187" /></a>I just have a couple more pictures to post so here is my wrap up.  The picture here is one an artist took all three days at pax to finish and as you can see it is very well realized.  Speaking with a little bit of experience with pastels I greatly respect this man for having the stamina to not only endure all three days surrounded by really big nerds asking questions all the time, but also to do great work with what has to be one of the messiest drawing materials in existence.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/dndtable.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/dndtable-300x224.jpg" alt="dndtable" title="dndtable" width="300" height="224" class="alignright size-medium wp-image-188" /></a>My final pic is of one of the table at the <a href="http://www.geekchichq.com/">Geek Chic</a> booth, where I would say they have perfected the ultimate table top for paper game players.  Each table is multifunction, multiuse, the tables themselves come with addons, designs for every style of game, tons of utility features, and much more.  As a consumer you are looking at a cost of $1500 or more for the basic table so a bit out of the price range of the standard gamer but I think they are doing some neat stuff over there.</p>
<p>On a side note, I am not sure how long this video will last, but I filmed a friend of mine playing Dragon Age: Origins at the Intel booth on a PC.  The video is here <a href="http://www.youtube.com/watch?v=TuQWQVZU--E">http://www.youtube.com/watch?v=TuQWQVZU&#8211;E</a></p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/192/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PAX Day 1</title>
		<link>http://charlessolar.com/post/175</link>
		<comments>http://charlessolar.com/post/175#comments</comments>
		<pubDate>Sat, 05 Sep 2009 05:48:31 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[expo]]></category>
		<category><![CDATA[series]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=175</guid>
		<description><![CDATA[Day one of the PAX expo is officially over and I have some pictures and information about the exhibitions to talk about. The day started harmlessly enough, we queued in the queue room to wait for the exhibition hall to open. While we waited the enforcers made sure we were not bored by entertaining us [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/line.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/line-300x225.jpg" alt="pax line" title="pax line" width="300" height="225" class="alignleft size-medium wp-image-177" /></a>Day one of the PAX expo is officially over and I have some pictures and information about the exhibitions to talk about.  The day started harmlessly enough, we queued in the queue room to wait for the exhibition hall to open.  While we waited the enforcers made sure we were not bored by entertaining us with internet memes and blow up beach balls.<br />
<span id="more-175"></span><br />
<a href="http://www.mrlwork.com/wp-content/uploads/2009/09/dragonage.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/dragonage-300x224.jpg" alt="dragon age" title="dragon age" width="300" height="224" class="alignright size-medium wp-image-181" /></a>The exhibition hall was absolutely packed with game companies, attendees, and people handing out free stuff.  One of the first places I stopped at was the Dragon Age booth to play the game demo.  I am really looking forward to this game.  I was a fan before attending pax and after playing the demo my feelings have not changed for better or worse.  We had to use the xbox 360 controller to play the game and while the interface was decent bordering good, Dragon Age might be a bit technical for a standard console controller.  I was told that the pc version will have a much different ui centered around the keyboard and mouse which has always been my favorite controller.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/blizard.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/blizard-300x224.jpg" alt="blizzard" title="blizzard" width="300" height="224" class="alignleft size-medium wp-image-180" /></a>Blizzard wins the award for best booth in my opinion.  They did not do anything too fancy, they just setup twenty or so computers with playable demos for Starcraft 2, Diablo 3 and World of Warcraft Cataclysm.  Even though Blizzard can easily afford to have three major games in development their booth was both simple and to the point.  The line for each computer was at least 4 people long all throughout the day; as such I did not actually play any of the games.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/wizards.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/wizards-300x224.jpg" alt="wizards" title="wizards" width="300" height="224" class="alignright size-medium wp-image-178" /></a>Other notable booths include Wizards of the Coast and Bioshock 2.  I enjoyed WoC&#8217;s booth because they had gm&#8217;s running participants through dungeons in dnd 4.  They had computers setup to generate characters which you would then use to participate in a short session right there in the exhibition hall.  The noise in the hall must have made it really hard to hear the gm for the most part; but I thought it was a neat idea.</p>
<p><a href="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock.jpg"><img src="http://www.mrlwork.com/wp-content/uploads/2009/09/bioshock-300x224.jpg" alt="bioshock" title="bioshock" width="300" height="224" class="alignright size-medium wp-image-179" /></a>Bioshock 2&#8242;s booth wins the award for most creative.  They put a movie set up with old fashioned furnishings complete with radio, typewriter, etc.  The room was messy, papers and books all over the place.  There were clues written on papers and letters; all in all it was a very unique booth and I am afraid my picture does not quite do it justice.  The actually footage of the game available at the show was no different than what is available online.</p>
<p>There are panels at pax, where experts talk to a crowded room about certain things; I went to a couple today but I will hold off on writing about those until later.  Some of the data or ideas they present are interesting so I want to write a review and critique of all the panels I go to in one article.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternative to Unique Character Names in MMOs</title>
		<link>http://charlessolar.com/post/137</link>
		<comments>http://charlessolar.com/post/137#comments</comments>
		<pubDate>Mon, 17 Aug 2009 17:11:14 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[mmo]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=137</guid>
		<description><![CDATA[Unique character names in MMOs have long been a pet peeve of mine.  I am sure most of you have experienced the frustration when your favorite character name ends up taken by some else, and if you are like me it might take as many as 20 tries to get an available name.  Well, here [...]]]></description>
			<content:encoded><![CDATA[<p>Unique character names in MMOs have long been a pet peeve of mine.  I am sure most of you have experienced the frustration when your favorite character name ends up taken by some else, and if you are like me it might take as many as 20 tries to get an available name.  Well, here is a question for all you MMO programmers, why the hell are you still using character names as a unique identifier?  There are so many better options to identify players in the world, every name does not need to be unique.  In fact I frequently find that running across players entitled &#8216;FancyPants12&#8242; or &#8216;Moooo4me&#8217; does more damage to game play than a simple change would.  When I am in the process of being adsorbed into an MMO through very nicely executed immersion techniques, stumbling onto these players breaks flow, <a title="ScreenShot_071107_195300" href="http://www.flickr.com/photos/9248805@N04/3760387724/" target="_blank"><img class="alignleft" style="border: 0pt none; margin: 10px;" src="http://farm4.static.flickr.com/3436/3760387724_e785982fb8_m.jpg" border="0" alt="ScreenShot_071107_195300" width="240" height="160" /></a>disrupts my concentration and I find it harder to follow the story line (or even care about it).</p>
<p><small><a title="Attribution-ShareAlike License" href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank"><img class="alignleft" style="border: 0pt none;" src="../wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="Idhren" href="http://www.flickr.com/photos/9248805@N04/3760387724/" target="_blank">Idhren</a></small></p>
<p><small></small>I bring this up because this last weekend I started playing Aion.  A very nice game that I have high hopes for, but its probably the first MMO that I am actually interested in a bit of the lore; I even went so far as to read some of the important quest text.  Its shocking yes, but they really did do a good job making the player feel like they are not just a drop of water in an ocean; which is worthy of recognition in itself.  Unfortunately, Aion suffers from the unique name dilemma so while I am trying to rescue the damsel from a horde of black winged bandits I am constantly running into &#8216;XXSlayerXX&#8217; or &#8216;RoGeGardian&#8217; and that is just terrible from an immersion perspective.</p>
<p>But what can be done about it?  After all, a lot depends on character names.  PMs, brokers, mail, friend lists, etc etc.  Obviously a new system has to enhance game play, not restrict it.  I propose a system where each character is assigned a unique number, not a name, which can be used for all these means of communication with just a little extra effort on the programmers side.</p>
<p><span id="more-137"></span></p>
<p>To illustrate my concept I will run through a few normal MMO actions and highlight how this idea works in comparison to the character name.</p>
<p><strong>Auctions</strong></p>
<p>This is the easiest, when a character posts an item you simply register the item with the character id instead of the character name.  All transactions, searches, bids, use the character id instead of the name.  A really simple swap out in this instance.</p>
<p><strong>PMs</strong></p>
<p>Probably the first problem that would come to your mind.  Obviously having to type /tell 00283023 to talk to a player would be murder on your player base.  PMs can be handled nicely, it just takes a little more work and polish out of the box.  For instance, to talk to someone who made a comment in the chat window, just click on their name and reply.  The reply would pull the character number from the chat window so the player would see the character name but actually be replying using his number.  Now, if you want to type up a pm to someone you met in an instance but did not befriend, things get a little more complicated.  Lets say for the sake of argument that you remember his character name and you wish to send him a message.</p>
<p>There are two solutions I can think of off the top of my head.  First, typing /tell William will bring up a list of all &#8216;Williams&#8217; in the world sorted by last interaction.  Meaning if he met William during a live event the previous night, that William would be listed above a William he met out in the plains last week.  For this to work players would need to keep record of the players they meet and timestamps, not impossible but not very practical.</p>
<p>My next solution would be to improve the friend system to be more intelligent.  Instead of storing a list of people the player manually types in, it could store a list of acquaintances that the player has met over time.  It could list people he met, ordered by zones, time spent with the person, number of interactions with the person, etc.  This way the player would build a network of contacts in the world without having to manually type in their names or numbers.  These two systems not only improve the experience for the player, but also improve immersion since this is normally how people relate to each other.  I can think of five different &#8216;Chris&#8217;s I know, but when attempting to address one I use the social path that has been created between us.  My social network determines the means to communicate.</p>
<p><strong>Mail</strong></p>
<p>Another tricky problem which can be gracefully solved by an expansion on the friend list concept I wrote about above.  When the player tries to send mail he can browse his social network for a contact to send mail to.  This is a good time to mention that chatting with another player would make a new network with that person.  This includes someone chatting in general, city, trade, whatever.  To model those interactions a network of recent chat messages would be displayed for the player to pick out the appropriate recipient.</p>
<p><strong>Groups / Raids</strong></p>
<p>Most groups and raids are formed by pm messages or chat window invites.  Since we have already established that in the chat window a name is really a character id handing invite requests is as easy as opening a new pm.</p>
<p>A final note about the new social system.  Updating and management does not need to be left completely to the program.  With a new friends system comes a completely different way of interacting with players in the world.  Players should be able to modify their networks, add people to groups, tag communities of links.  I have more than once wished to have a system where I could tag players or organize relationships by specific words.  Not wishing to come off as an elitist but I am sure more than one of you have wanted to tag someone &#8216;noob&#8217;, &#8216;idiot&#8217;, or  &#8216;can&#8217;t play his class.&#8217;  With a more friendly social network system you could organize your contacts, including all the people you no longer want to interact with into a group.  Then when they say something in chat, send you a pm, invite you to a raid, you will have fair warning.</p>
<p>When all is said and done I am really advocating a new type of system for interacting with players in an online world.  One built on networks of links instead of a simple one dimensional friends list.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/137/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pax 2009</title>
		<link>http://charlessolar.com/post/131</link>
		<comments>http://charlessolar.com/post/131#comments</comments>
		<pubDate>Mon, 10 Aug 2009 15:24:52 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[filler]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=131</guid>
		<description><![CDATA[So a few things happened and it appears that I will be attending Pax West 2009.  Being someone who did not know the convention existed until about a week ago I like to consider my position at PAX as &#8216;complete noob.&#8217; Anyway why I am I posting this?  Well I have nothing to say about [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.paxsite.com/"><img class="alignleft size-full wp-image-132" style="margin: 5px 10px;" title="pax10" src="http://www.mrlwork.com/wp-content/uploads/2009/08/pax10.png" alt="pax10" width="118" height="105" /></a>So a few things happened and it appears that I will be attending Pax West 2009.  Being someone who did not know the convention existed until about a week ago I like to consider my position at PAX as &#8216;complete noob.&#8217;</p>
<p>Anyway why I am I posting this?  Well I have nothing to say about Pax in particular, like I said I have never been there and my general understanding is its like an E3 only good and open to the public.  I was roped into taking this trip by a friend and we plan to spend a week along the west coast.  That being said Pax started out as only a minor side attraction for us, as we had already planned on traveling out there.  It was not until I started reading about community events and enthusiasm that a lot of people seem to have that I started to seriously look forward to attending the conference.</p>
<p><span id="more-131"></span>First off, Pax is a convention where all sorts of game company&#8217;s get together to show their stuff.  It is from the <a href="http://www.penny-arcade.com/">Penny Arcade</a> people so that was +1 in my book right away.  Now, I have also attended <a href="http://en.wikipedia.org/wiki/Cyberathlete_Professional_League">CPL</a> which was fun, but I was disappointed with the sponsor turnout and activities.  I did not attend to compete, I was only there to have fun and promote <a href="http://developer.valvesoftware.com/wiki/Prodod">Prodod</a>.</p>
<p>Recently, the exhibitor list was published <a href="http://www.joystiq.com/2009/08/06/pax-exhibitors-revealed-star-wars-fans-should-start-lining-up-n/">here</a> and I am quite pleased with the turnout.  First off I just want to say that Knights of the Old Republic is my favorite RPG of all time.  Of course I am excited about <a href="http://www.swtor.com/">Bioware&#8217;s new MMO</a>; I am even more excited to see it at PAX.  I have sort of gotten off track here let me back up.</p>
<p>What has struck me most during these last few days is the amount of fan participation in the event.  There are pre-pax events, post-pax events, during-pax events, and each and every one of them sound like a ton of fun.  Need to travel to PAX?  If you go by <a href="http://forums.penny-arcade.com/showthread.php?t=79555">car</a> or <a href="http://forums.penny-arcade.com/showthread.php?t=86726">train</a> there is a group for you.  During the event there will be several games going on between groups of attendees including <a href="http://forums.penny-arcade.com/showthread.php?t=84166">Pax-Prank</a>, <a href="http://forums.penny-arcade.com/showthread.php?t=86965">Assassins</a>, and <a href="http://forums.penny-arcade.com/showthread.php?t=83266">Pax Buttoneers</a>.  All these events got me thinking about the substantial amount of time that volunteers are spending on an event they are paying for themselves.</p>
<p>There was a point in there somewhere but I seem to have misplaced it.  Truth be told I just felt like writing another article and I had nothing else to write about.  My current projects are on hold while I get accustomed to working full time and I have had no design revelations as of late.  I am trying to keep this site free of political sway so I cannot comment on recent events.</p>
<p>I will be taking a camera so expect a &#8216;Pics&#8217; thread in a month or so.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/131/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graduation</title>
		<link>http://charlessolar.com/post/110</link>
		<comments>http://charlessolar.com/post/110#comments</comments>
		<pubDate>Sat, 09 May 2009 00:40:40 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[ogre3d]]></category>
		<category><![CDATA[polyphasic]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=110</guid>
		<description><![CDATA[A quick update today, I have graduated college and am officially in the work force.  Great time to do so I know, luckily I am under no emergency to get a new job, but I am looking.  Therefore, if you are visiting here and you like what you see, please visit my About page to [...]]]></description>
			<content:encoded><![CDATA[<p>A quick update today, I have graduated college and am officially in the work force.  Great time to do so I know, luckily I am under no emergency to get a new job, but I am looking.  Therefore, if you are visiting here and you like what you see, please visit my <a href="http://www.mrlwork.com/about" target="_blank">About</a> page to download my resume, cv, and portfolio.  I am willing to relocate ( eager, in fact ), and prefer jobs that are interesting and will challenge me to learn and improve my existing skills.</p>
<p><span id="more-110"></span></p>
<p>Ok, enough of the shameless self promotion, as for blog content.  I have a couple articles in the works but have yet to publish them as usual.  I have been a little lazy the last few months due to a varity of things.  Firstly college obviously, secondly I have adopted a new sleep schedule known as <a href="http://en.wikipedia.org/wiki/Polyphasic">polyphasic sleep</a>.  During my adaption period I fell behind on a lot of projects I was working on so I am now catching up.  I might post a summary of my research and theories on this sleep schedule, but I did not want to do a daily sleep log like <a href="http://en.search.wordpress.com/?q=polyphasic">thousands</a> of others have.</p>
<p>Also on the backburner is an update to my game AI project.  After running some scalled tests involved word processing I have moved into simple game development to test action automation and decision making.  The first difficulty involving the 3d engine has been crossed and I am not in AI development mode.  I chose to use Ogre3d as the engine mainly because I have had positive experiences with it in the past.  I will be posting my research on that project soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/110/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu and the Future of Linux</title>
		<link>http://charlessolar.com/post/95</link>
		<comments>http://charlessolar.com/post/95#comments</comments>
		<pubDate>Tue, 16 Dec 2008 03:37:35 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Operating Systems]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[computer science]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=95</guid>
		<description><![CDATA[Contrary to the many many posts about &#8217;10 reasons why ubuntu is the next #1 consumer desktop&#8217; or &#8216;Switching from windows to ubuntu&#8217; this post is about my experience with ubuntu and why as of this moment I am reinstalling windows vista. First off let me say that I use debain as the main operating [...]]]></description>
			<content:encoded><![CDATA[<p>Contrary to the many many posts about &#8217;10 reasons why ubuntu is the next #1 consumer desktop&#8217; or &#8216;Switching from windows to ubuntu&#8217; this post is about my experience with ubuntu and why as of this moment I am reinstalling windows vista.</p>
<p><span id="more-95"></span>First off let me say that I use debain as the main operating system for ALL my servers.  My asterisk, data, and web servers all run debian and I love the stability and flexibility that comes with debian and apt.  I have spent at least 4 years working with debian casually and through all the problems, ideas, and solutions that are typical in my line of work have presented me plenty of opportunities to exercise and expand my knowledge of linux.</p>
<p>It was just over a year ago that I tried moving to a linux environment on my laptop.  Since my laptop was custom built all the parts worked well with ubuntu and I had very little configuration troubles.  Unfortunately after a couple months I encountered problems caused by my tinkering that made me have to reformat.  I believe at the time I was trying to get Compiz or Beryl to work with my ATI card, something I think caused a lot of people some hair.  At the time I decided to reinstall Windows XP because I could no longer justify the inconvenience of playing around with linux when I could not make it do what I wanted.  This I will admit was because at the time I had very little experience with linux desktops, and my number one gripe was network configuration, which does not seem to have improved but more on that later.</p>
<p>This is a post about why I believe linux is not ready, nor should it try to compete in the PC desktop market.  Linux is an excellent server environment make no mistake, I would choose linux over Windows Server any day of the week.  I find the code for critical applications to be very well maintained, optimized, and in general very clean.  On the other hand, I find the code for desktop environments and &#8216;configuration GUIs&#8217; to be a joke and buggiest pieces of software I have had the misfortune to work with.</p>
<p>For further reference, 4 days ago I decided to reformat my Vista desktop to Kubuntu, an operating system I had worked with in vm&#8217;s and had pleasant experiences with.  I chose to leave Vista because of a bug with USB hand off to my virtual machines, which is a crucial element of programming a Nokia 810.  This inconvenience was the last straw for me and I made the decision to reformat to an operating system I felt would work better for control freaks like myself.</p>
<p>My first impressions of kubuntu, was the very excessive amount of useless garbage programs sitting in my application menu.  My second problem was with the desktop widget system which would seem like a good idea but is executed very poorly and is not very user friendly to say the least.  After removing as many of the useless programs I could and installing some other better programs I opened firefox and was greeted by the ugliest looking interface I have ever seen.  I will admit, I have never been a fan of the GTK interface.  Even on windows I found the layouts and graphics to be messy, unappealing, and bland.  So when I came to realization that my entire desktop would look this way I was a little put off right off the bat.</p>
<p>However I was determined to give this a chance since indeed I needed to be able to program my new Nokia 810 and linux was the only solution.  I visited the Ubuntu forums, a place which actually deserves the praise it gets, and found various things to do &#8216;Right after installing ubuntu.&#8217;</p>
<p>I installed more programs, added sources for my media and graphics, updated openoffice, speed tweaked the file system and boot process, and was fairly happy with the end result.  Firefox looked half decent, my programs had neat little effects like wiggle, darken, etc, and most of all it was running on par with my windows system.  So I began to seriously exercise the system and bring it up to my standards.  I installed dmraid to manage my nvidia raid array, I got my other disks provisioned in fstab for automatic mounting, configured all my programs to work exactly as I wanted them to, and in general personalized the system to my liking.</p>
<p>It was during this time that I started to notice the little problems and glitches.  Firstly, I was not happy to see that the network manager was still the worst configuration app in the entire system.  I ended up uninstalling it and setting a static ip in network/interfaces.  Then came the problem of getting my dual monitors to work, and in turn, get nvidia drivers installed.  The automatic &#8216;Install restricted drivers&#8217; wizard failed to produce any results, so I turned once again to the ubuntu forums and a script called <a href="http://www.albertomilone.com/nvidia_scripts1.html" target="_blank">Envy</a> which did the job very well.  Configuring TwinView was then just a simply xorg.conf edit.</p>
<p>This brings me to point number one.</p>
<p><strong>Linux is not ready because to much configuration is left to the command line</strong></p>
<p>The gui configuration utilities simply do not work.  Those that do work have limited functionality and you end up configuring it yourself in the command line.  When was the last time you saw a standard user open ms dos to configure his network settings?</p>
<p>So as I finished configuring various systems and building the system as I saw fit I decided to try to actually use the os.  Opening firefox still left me with flash backs from 10 years ago, but it worked fine, so all was good.  I then downloaded and installed pidgin, as I could not live without a constant line to any of the people on my buddy list and was once again greeted with those flashy windows 95 graphics.  At this point I was getting pretty frustrated.  Sure, my windows swayed, they faded, I could alt-tab like a pro but my applications looked like they were resurrected from my old DOS laptop.  Something had to be done, so I immediately went online searching for solutions.</p>
<p>I found that you have the option to install custom themes for things like text layouts, colors, window styles, etc.  Something that I have never really used on Windows but I went ahead and dived into the top rated everything to bring my operating system into the year 2008.  I found that these layouts helped a little bit, but the real problem, boxy art, out of date pictures, remained.  It was at this point that I decided to look for different GTK themes and customizations, hoping to fix the problem at the source.  However I soon found out that GTK artwork is non-existent, very hidden, or just not possible.  Tell me what is the point of a centralized graphics framework when you cannot change themes?  This definitely deserves a check-minus in my book, and introduces point number two.</p>
<p><strong>Linux is not ready because the system looks like crap</strong></p>
<p>While the underlying framework and core operating code is fantastic, the GUI&#8217;s and desktops need work.  KDE4 from my understanding is an attempt to mimic some of Vista&#8217;s features and has been touted as the better desktop.  I could not disagree more.  The system was buggy, slow, and definitely not user friendly at all.  As a side note, in the little time I spent analyzing and poking at KDE4 I could never figure out why we needed a separate desktop &#8216;Widget&#8217; to display files that are in the desktop folder.  The widgets sit on the desktop, but the widgets display the desktop files&#8230;</p>
<p>As an additional side note I have only had the pleasure of using Gnome, KDE and a splash of X during my brief forays into the linux desktop world, if there is a better desktop out there please feel free to post.</p>
<p>At this point I was pretty frustrated with the whole mess so I went to sleep and decided to work on it more in the morning.</p>
<p>After a good night sleep I was back on my computer and ready to tackle the operating system once more and amidst the endless forum searches, configuration tweaks, Dolphin crashes, I realized something.  This something is my third and final point and probably the one that will get the most flames.</p>
<p><strong>Linux is not ready because linux does not work for the user, the user works for linux</strong></p>
<p>Let me explain what I mean.  While I was wondering around the settings screens (the few that there are) I found myself continually frustrated at the limit of what I could change, configure, optimize, or just in general, &#8216;do.&#8217;  Linux is very much a arrogant bastard who would much rather give you a new world and say have fun then give you the tools to operate in its world.  When using windows, all the tools you need to change the system are given to you, right out of the box.  If you want to do something incredibly difficult, like add a 3d desktop or program your own file explorer, you are pretty screwed, but for most situations windows gives you the tools to handle the problem yourself in its world, not your own.  Linux on the other hand, even though its open source, is ruled by obscurity.  There is no consistency between the network configuration and the display configuration.  There is no intermingling of different programs, as was painfully pointed out to me when I tried to burn an iso image from a windows machine across the network.  All and all, linux is very introverted and unlikeable.  Now I must make a small note here, the ubuntu community needs to be given a handshake for their excellent effort on compiling useful guides and providing help to any strangers who grace their doorstep.  Unfortunately, all the smiles and friendly hand shakes do not detract from the serious design flaws inherent in any operating system in the hands of anyone who uses it.  And even though I hate to say this, I much prefer my operating system built by a money corporation where strict testing, quality assurance, and optimizations are kept at the forefront, not for the customers, but to make themselves competitive with other corporations.  On that note I would like to say that I might actually prefer to try a Mac OS next time I feel pined down by the Microsoft money machine.</p>
<p>So there in lies linux&#8217;s biggest problem.  It is not competing.  Not that it does not want to, it just can&#8217;t.  It can not compete with the multimillion dollar budgets of Apple and Microsoft dev teams, and it certainly cannot get any decent project management system in order to organize the thousands of varying and unique programs built for it since release. <strong>But this is OKAY</strong>.</p>
<p>Its OK that linux can not compete, its OK that the programs are different.  What is not ok is trying to convince people to install linux on a desktop or laptop pc where hardware is never consistent, drivers are always needed, and just getting the thing to recognize and deal with the thousands of different environments is itself a full time job.  No this is not where linux&#8217;s strength truly lies.  To find where the future of linux lies I took a look back at the device that started all of this.  The small, sexy, and very much in control Nokia 810.  This little device is run by a special operating system built off of debian called Maemo.  You will find no better example of synchronous design and program execution then here.  Why?  Because its not a pc, its not a computer that needs a new video card every two years, it does not need to know about any other devices outside of its own perfect little world.  <strong>That</strong> is what makes it the best version of linux I have used.  The system is still open, but users do not have to draw cards to tell whether they will spend 5 hours getting running or 5 days.  With this increase in freedom comes standardized programs and configuration GUIs, systems that actually WORK.  The Nokia works so flawlessly that it inspired me to first install Kubuntu, then write this article because I feel that the future of linux does not lie with the desktop pc, but with these small devices.  These devices, that have a set of unchanging hardware, guarantee that no network manager will crash when detecting your Broadcom modem model number x15220 from 1997.  It guarantees that when you run network configuration your settings will take effect on your true device, instead of usb0 or visa versa.  I am currently reinstalling Windows Vista on my computer and with that I will reinstall VMWare and find a solution to my original bug so I can setup the maemo sdk and start programming applications for this device.  Yet in order to do this I am ditching my linux desktop solely because I just could not stand it compared to Vista.  Vista is by no means perfect, and in some ways it can make me just as frustrated as Kubuntu did, but I can accomplish a hell of a lot more in a windows operating system at this time.</p>
<p>Maybe this will change, maybe there is some other desktop environment that people like me use and I am unaware of it.  Certainly if you the reader have any suggestions I would welcome them and maybe even consider reformating again to try them, but at this moment I stand by what I have said in this article and hope that those who read it can offer constructive feedback, good or bad.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/95/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pluggable Factories</title>
		<link>http://charlessolar.com/post/50</link>
		<comments>http://charlessolar.com/post/50#comments</comments>
		<pubDate>Tue, 12 Aug 2008 04:36:49 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[pluggable]]></category>
		<category><![CDATA[static]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=50</guid>
		<description><![CDATA[So in my last article I touched on the subject of what I termed static factories. I did a little searching online and found the original article that first gave me the idea.  Apparently this type of design is called pluggable factories.  A term I had forgotten until just now. Here is the basic idea, [...]]]></description>
			<content:encoded><![CDATA[<p>So in my last article I touched on the subject of what I termed static factories.  I did a little searching online and found the <a href="http://www.gamedev.net/reference/articles/article841.asp" target="_blank">original article</a> that first gave me the idea.  Apparently this type of design is called pluggable factories.  A term I had forgotten until just now.</p>
<p>Here is the basic idea, you have x number of objects your program can create.  These objects are all children of a base interface.  You have cleverly created an abstract factory to create the various instances of your objects, but there is a problem, you are asked to add several new objects and/or remove several objects.  So you jump back into your code and make a new object or remove an object.  You compile your code and try to use the new object, OOPS, you forgot to add it to the abstract factory!   Or, after removing the object you run some old data and OOPS, your program crashes as it tried to return an instance to a class that does not exist.</p>
<p>To be fair, if your program was written correctly it would not compile in the latter case, but that is besides the point.  Sometimes abstract factories can be a pain in the ass.  So, here is where pluggable factories step up to the plate.<br />
<span id="more-50"></span><br />
They offer you the ability to create or remove objects without modifying any part of the project.  All you, as the programmer, need to do is create a new cpp with two well defined classes and you can use your new object.  How does this work?  It relies on a very simple but powerful aftereffect of static objects.</p>
<p>See, the basic idea of a static object is that only one exists.  It gets setup at the start of your program and never moves or changes.  If it is a method, it gets a special place in memory and any children of your class call that exact function.  If it is a variable, it gets initiated at the start of the program and all references to get sent directly to that location, no mater where in the program you are.</p>
<p>The idea behind pluggable factories is that you silently initiate several classes that only exist to make one specific type of object.  These classes are known as makers, and they are the key to pluggable factories.</p>
<p>Makers come in many different flavors and styles, but we will focus on one type for now.  Let us define an object derived by a common interface.</p>
<pre name="code" class="cpp">
class Controller_Letter : public IController
{
    friend class Letter_Maker;
public:
    ~Controller_Letter() {}

    int fitness( void* data )
    {
    if( (char)data == _letter || (char)data == toupper(_letter) )
        return 1;
    return 0;
    }
    void perform() { printf( "%c", _letter ); }

protected:
    Controller_Letter() {}

private:
    void setLetter( char letter ) { _letter = letter; }
    char _letter;
};
</pre>
<p>Now this is a basic controller class for a project of mind, so do not pay to much attention to the methods.  From the basic idea of this controller, I would want at least 26 of these classes, but to be safe I will instead make <a href="http://www.asciitable.com/">255</a> of them.  Can you imagine a switch statement with 255 cases?</p>
<p>To make our lives easier we will construt a pluggable factory to automatically create each class.  A pluggable factory is made of three parts, a std::map, a constructor, and a pure virtual make method.  The map will store our database of makers, the constructor will be used by our children to register with the database, and the virtual method will be defined by our children so they can make their object.  Lets take a look at a basic parent maker class</p>
<pre name="code" class="cpp">
class Controller_Maker
{
public:
    static IController* newController( const std::string&amp; type, void* data );
private:
    typedef std::map&lt;std::string, Controller_Maker*&gt; maker_map;

    static maker_map&amp; getReg()
    {
        static maker_map registry;
        return registry;
    }
    Controller_Maker() {}
protected:
    Controller_Maker( const std::string&amp; type )
    {
        getReg().insert( std::make_pair( type, this ) );
    }
    virtual IController* make( void* data ) const = 0;
};
</pre>
<p>We have defined all three parts, but there is something I would like to point out to everyone.  Notice the getReg function.  It would make sense to have our registry variable static inside the class, then have the children directly access it to register themselves, HOWEVER, here is the problem.  When your program gets compiled all your static elements are juggled by the linker and eventually end up sitting in an initialization list somewhere in your binary.  Among these variables are your child makers trying to register themselves in the registry.  Imagine what would happen if a child is initialized before the registry map is.  BOOM CRASH BANG, yep, you get a splendid show of fireworks before your program disintegrates back into the void.  The getReg function is how we avoid this very nasty problem.  See, functions do not need to be setup before hand, a static function is just an address, it can be called at any time.  Therefore we put the registry inside a static function, and we can guarantee that it gets initialized before a child tries to use it, because when a child uses it they initialize it.  Simple eh?</p>
<p>So now you have a maker, an interface, and an object you want many many variations of.  How do you define the individual makers to first register with the parent maker, and second, create the desired object?  Child makers will, as you may expect, define the make function from the parent maker and call the parents constructor.  However the key to child makers are the static instances of themselves they define.  It may sound weird, but each child defines a variable inside itself of itself.  This variable is initiated at the start of the program ( because its static, remember? ) and thus the child is registered with the parent.  Here is the child maker</p>
<pre name="code" class="cpp">
class Letter_Maker : public Controller_Maker
{
protected:
    IController* make( void* data ) const;
private:
    Letter_Maker() : Controller_Maker( "letter" ) {}
    static const Letter_Maker registerThis;
};
</pre>
<p>Notice the constructor, it calls the parent with the type of object it makes, thus registered a new type of object with the pluggable factory.  Also key here is the registerThis variable.  The only purpose of this variable is to register the class without modifying any factory or project source.  This class is naturally defined with the class it creates, this way you just add a cpp to the project and you have a new object.  Impressed yet?  Lets dive a bit further.</p>
<p>If you have been paying attention you have noticed that I have not defined some key methods, namely, Controller_Maker::newController or Letter_Maker::make.  Well it does not take much imagination to define these, here they are</p>
<pre name="code" class="cpp">
IController* Letter_Maker::make( void* data ) const
{
    Controller_Letter* ret = new Controller_Letter();
    ret-&gt;setLetter( (char)data );  // Sending NULL will not hurt anything
    return ret;
}

IController* Controller_Maker::newController( const std::string&amp; type, void* data )
{
    maker_map::iterator itr = getReg().find( type );
    if( itr != getReg().end() )
        return itr-&gt;second-&gt;make( data );
    return NULL;
}
</pre>
<p>I usually keep these methods separate from the header files for neatness sake.  Here is the quick run down on these.  Letter_Maker::make will make the object it was build to make.  Think of it as a small builder ( if you have read <em>Design Patterns</em> ).  Its important to not fall into temptation and pass void* data to the new object.  Notice how I create the object then call its setLetter method?  The maker data should stay independent of the object definition.  Remember DRY?</p>
<p>Controller_Maker::newController is just what you probably expected, it simply searches the registry for the type of maker we ask for and calls the specific maker&#8217;s make function.</p>
<p>In the end, we are left with a nice set of classes that can easily encapsulate all 255 acsii characters in just 255 lines ( if someone wants to add up the maker and controller class lines be my guest ).</p>
<p>Here is how we use the maker</p>
<pre name="code" class="cpp">
IController* a = Controller_Maker::newController( "letter", (void*)'a' );
IController* b = Controller_Maker::newController( "letter", (void*)'b' );
IController* c = Controller_Maker::newController( "letter", (void*)'c' );
IController* d = Controller_Maker::newController( "letter", (void*)'d' );
IController* e = Controller_Maker::newController( "letter", (void*)'e' );
IController* f = Controller_Maker::newController( "letter", (void*)'f' );
</pre>
<p>Keep in mind that is by far the simplest way to use pluggable factories.  For more examples you can check out bafprp&#8217;s source code, pluggable factories are used for creating fields, records, and the most interesting of all is the output class, where I merged the maker and the object into one class.  And that is not all as far as I know I have barely even scratched the surface of pluggable factory design, so if you come up with a new technique, feel free to post!</p>
<p><a href="http://www.mrlwork.com/downloads/SOURCE/pluggable_factory_source.rar">Project source code here</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/50/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Moved and Upgraded</title>
		<link>http://charlessolar.com/post/28</link>
		<comments>http://charlessolar.com/post/28#comments</comments>
		<pubDate>Sun, 20 Jul 2008 06:14:16 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[filler]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=28</guid>
		<description><![CDATA[With my old hosting service expiring I decided to move the site to my new host today. Along the way I upgraded word press 4 minor versions (oops), and grabbed some popular plugins. I also liked this theme a bit so I am going to be using this for a while. I know its probably [...]]]></description>
			<content:encoded><![CDATA[<p>With my old hosting service expiring I decided to move the site to my new host today.  Along the way I upgraded word press 4 minor versions (oops), and grabbed some popular plugins.  I also liked this theme a bit so I am going to be using this for a while.<br />
I know its probably one of the most overused themes but I rather like it and I am a computer programmer, not a web designer, so I really do not care about how the site looks.  The most important thing is that people who do read these posts get the information they were looking for.  So with that, I look forward to the coming months.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/28/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

