<?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/tag/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 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>Dynamic NPC Actions</title>
		<link>http://charlessolar.com/post/16</link>
		<comments>http://charlessolar.com/post/16#comments</comments>
		<pubDate>Sat, 27 Oct 2007 04:30:20 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=16</guid>
		<description><![CDATA[The true cornerstone of a project such as this will be dynamic and human like actions. I have spent the last two weeks thinking of a system that would allow the development and evolution of dynamic actions, searching the internet, writing down ideas, and finally come up with a design I feel confident enough to [...]]]></description>
			<content:encoded><![CDATA[<p>The true cornerstone of a project such as this will be dynamic and human like actions.  I have spent the last two weeks thinking of a system that would allow the development and evolution of dynamic actions, searching the internet, writing down ideas, and finally come up with a design I feel confident enough to post about.   I am writing this down for my benefit as well as anyone who is curious, so the train of thought it going to be random and probably hard to understand.  For that I apologize, I will have more solid implementation details ready when I have a working system written.</p>
<p>I started by defining what I would be given, and what I would need to produce, and I decided to start with nothing but basic preprogrammed controllers attached to the actor&#8217;s to control everything about it.  Rotation, position, scale, etc.  For an npc, he would have controllers on all his bone joints, for an example.  These controllers will have a predefined range of accepted values and know how to move around those ranges.  What I wanted to end up with was a high level action, something that will ultimately be composed of hundreds of controller movements over time.  And I needed a nice system to wrap up all this data into a structure the npc can store and build off of.</p>
<p>To start off, picture a flat plain of controllers.  Each controller knows what it can do, but there are no existing actions yet so this npc is stupid as a brick.  During training, actions will start simple, something along the lines of, &#8216;bend index finger&#8217; works.  The npc would look at its action graph and see only the flat plain of controllers, so then its asks each controller if it can accomplish the task of  moving the finger&#8217;s x position by 1.  The controller(s) that respond will have already been defined as able to do this so the npc builds a new action that connects directly with the controllers found previously.  Now if the game asks to bend a finger, this action will say &#8216;I can do that&#8217; and use the correct controller to chance the finger&#8217;s position.  Its worth noting how the action knows it can do this, so I will explain that a bit.  Each action has a function that reads the actor&#8217;s current state and determines if it has actions or controllers in its collection to handle that state in any way.  If it does, it says yes.</p>
<p>So as the npc adds more and more actions it builds it&#8217;s web of linked actions, the process looks a lot like building a neural network.  Actions have many actions linked to it, and many actions linked to.  I cannot go to much farther without showing you the action class definition so here you go:</p>
<pre class="cpp">class Action
{
Action();
Action( Action* next );

bool validStart( Actor* );
bool validEnd( Actor* );

void AddNext( Action* );
void RemoveNext( Action* );

private:

std::set&lt;Action*&gt; actionList;  // Each entry in this action array represents a start state.
// What about actions that have many independant start actions?
};</pre>
<p>When designing this class I thought it was going to be some monster from hell, but after I thought about it, added some recursion, and trimmed it down I think it ended up rather nice.  Its simple and works well.   Each action will hold links to one or more actions.  Each action link represents a valid start state, so when validStart is called the class should call each of it&#8217;s start states validState functions and return the OR of their return.  This design is very recursive, a next link could be another action or a controller at the very basic level.  Therefore chains of actions will form in neural network fashion with proper training.  When the npc wants to change his state (execute an action) he simple needs to figure out what state he wants to be in, call validEnd( endState ) on each of his higher level actions that match his start state and if one matches, execute the action.</p>
<p>Only problem here is the tremendous overhead of using the brain.  Take an example actor with just three levels of actions, when the game asks to do an action on the third level that action asks for valid start on all level 2 actions linked to it, and in turn those level 2 actions call valid state for all level 1 actions linked to it, which in turn call validstart for all controllers that are linked with it. We could be looking at thosands of function calls with a simple 4 or 5 level npc.  And the growth is<br />
exponential.<br />
For now we will just have to deal with it since I believe this to be the best way to describe dynamic actions however in the future tremendous effort will be required to optimize this code.</p>
<p>I will be working on integrating this design into my demo project so if my explanation is way off I will have sample code sometime soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/16/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Compiler</title>
		<link>http://charlessolar.com/post/14</link>
		<comments>http://charlessolar.com/post/14#comments</comments>
		<pubDate>Sat, 15 Sep 2007 16:33:32 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=14</guid>
		<description><![CDATA[So heres the deal, every game needs some sort of script compiler. Regardless of how its designed, there will always be a time when the ability to edit the game without recompiling is key. But thats not the only reason, scripts allow us extra layers of abstraction so we can do complex things such as [...]]]></description>
			<content:encoded><![CDATA[<p>So heres the deal, every game needs some sort of script compiler.  Regardless of how its designed, there will always be a time when the ability to edit the game without recompiling is key.  But thats not the only reason, scripts allow us extra layers of abstraction so we can do complex things such as &#8216;pickup( itemid )&#8217; with ease.  But I am getting   distracted.</p>
<p>I have been working on this component AI idea and have come to the point where I need to start defining actor actions through scripts.  How I have it setup now is the npcActor&#8217;s state will slowly degrade over time (think the sims) and when it reaches a threshold they go and search for an object that can alleviate their problems.  Its a pretty simple design for a simple test.  As mentioned in previous posts, I want these npc&#8217;s to learn from interacting with the environment.  This combined with the mbti structure and other things should produce reasonably agile AI (see previous posts for specifics).</p>
<p>I thought of making this post to stress a key factor in my decision making process as it pertains to this project.  And that is abstraction.  The abstract is key to this project.  In an ideal world, nothing here should be hard coded, unfortunately that is a little hard to do, especially right from the get go.  So what I decided to do was to brute force my way to a reasonable demo app and work backwards from there.  Removing static code as needed to perfect the design.   For instance, I have pretty much decided on a syntax for my scripting language, but I have left much of the interpretation to genetic algorithms in the compiler.  Here is a sample script</p>
<p><code><br />
using actions<br />
using health</code></p>
<p>_actions::sit $this<br />
$sitting = true<br />
callback -actions::stand _stoodup<br />
{ $health::comfort +1 / 5 } while $sitting</p>
<p>_stoodup:<br />
$sitting = false<br />
::<br />
I am not going to explain the syntax because to any programmer the intentions should be clear.  The problem I have been facing is how to keep the intentions abstract enough to allow multiple interpretations.  I want Bob&#8217;s sitting to look different from Kim&#8217;s.  I have currently setup a system where the compiler creates these jobs for each script and at the appropriate times sends messages to actors to handle actions.  It is then completely up to the actor as to how to handle the action.  For instance, when the compiler runs over &#8216;_actions::sit $this&#8217; it will send a message to the host actor to sit on the target object.  In this case the message will not be as simple as<br />
<code><br />
msg.id = ACTION_SIT;<br />
msg.target = 0x01234567h;<br />
msg.brainless = 1;<br />
</code></p>
<p>Instead the message will contain a number of input to be inserted into a designate neural network, which would have been trained earlier to sit when given those inputs (exactly how they sit is up to the GA).</p>
<p>So then how to handle direct variable access like the &#8216;$health::comfort +1/5&#8242; line above.  Well some messages will have to be specially constructed to be brainless.  I figure I will have a range of message id&#8217;s designated for variable access, neural network input, etc.  So a msgID of 1 would be to set a variable, and 2 would send the incoming data into the NN.</p>
<p>This is not the final system, just what I am currently using for testing.  However this is the current framework for future applications.  The goal of this first program is to weed out any bugs and get a clear understanding of how I want this thing to run.</p>
<p>You can notice how this solution offers a direct line to the actor&#8217;s state of mind without hard coding everything, which is exactly what we want.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/14/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Short Post</title>
		<link>http://charlessolar.com/post/12</link>
		<comments>http://charlessolar.com/post/12#comments</comments>
		<pubDate>Sat, 28 Jul 2007 18:27:13 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=12</guid>
		<description><![CDATA[I am going to sum up the past month or so of inactivity here. I have been working on a concept design of my component ai idea. Once I finish it to my liking I will post it here. I have not had much time to work on it with my job and home projects [...]]]></description>
			<content:encoded><![CDATA[<p>I am going to sum up the past month or so of inactivity here.  I have been working on a concept design of my component ai idea.  Once I finish it to my liking I will post it here.  I have not had much time to work on it with my job and home projects so it will be a little while longer.  Just wanted to say that I will still be posting stuff here.</p>
<p>Also, I am going to write more about the cof plugin soon, most likely I will pick it back up after I finish the tech demo.  I was writing it as a reference for when team fortress 2 comes out, I can already tell through the various promo videos I have seen that the cone of fire is going to be as broken as dods.  I should have the whole series done before Valve finishes hacking together 2 years of what they call work.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing Component AI</title>
		<link>http://charlessolar.com/post/11</link>
		<comments>http://charlessolar.com/post/11#comments</comments>
		<pubDate>Thu, 21 Jun 2007 16:15:49 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=11</guid>
		<description><![CDATA[In a continuation of my last article, I would like to record the process I have been taking to creating and designing the component AI I described in my last post. Component AI is my term for this idea right now, I really have no idea if it has been done before so for right [...]]]></description>
			<content:encoded><![CDATA[<p>In a continuation of my last article, I would like to record the process I have been taking to creating and designing the component AI I described in my last post.  Component AI is my term for this idea right now, I really have no idea if it has been done before so for right now its what I call it.  Now, for those of you who might be familiar with component based object systems (Game Programming Gems 5), this concept will not be to hard to understand.</p>
<p>Basically, we want the npcs to operate off of components they learn about through their training.  I know I did not mention training in my last post, but it is necessary for the npcs to not look like mindless zombies through half the game.  Each npc will have to be fed through a virtual school where they will learn, through various tests and challenges, how to operate in their world.   But I am getting distracted here, back to the design.</p>
<p>Component based objects can be summed up as imaginary containers that are filled with components that operate the object.  For example, one component might be a renderer, another holds a model, and one more holds animations.  These three together form a solid object that will be displayed in game.  They are attached to each other solely through the object manager, but nonetheless are able to effectively communicate with each other through interfaces and a messaging system.  I wish I had GPG5 around me so I could yank their example, but I think you get the general idea.</p>
<p>Anyway, objects communicate with themselves through messages, and each of the components that make up an object can subscribe themselves to different messages.  A render component would subscribe itself to a &#8216;draw&#8217; message, that way when the game sends a &#8216;draw&#8217; broadcast, all objects that have the render component will draw themselves.</p>
<p>That is how component object systems work, when we introduce the ability to pick up new components during run time through actions, we have component AI.   The npcs will be equiped with the simple components, model, render, animate, physics, ai, etc, and they will be able to pick up new components from the world to plug into their brain for future use.  These types of components can subscribe themselves to messages, and even communicate with each other to achieve the best results.  Some form of genetic training will have to be used to teach these components how to effectively communicate.  When the npc comes across something new that it doe not know how to handle, picking up a chair for example, it will need to know things about weight, body position, what limbs to use, how to grip it, pretty much everything, and the only way he will know is if the components in his head know how to communicate effectively.</p>
<p>Yes I did mention body position and dynamic animation.  I already mentioned the fact that objects themselves will hold data on how to handle them, generally.  Then after the npc does that action he will gain a new component for handling that object.  This system does not conform very well to static animations like most games keep.  So animation will be dynamic and learned by the npc over time.  This allows npcs to gain their own style of movement and actions.</p>
<p>Yes yes, I know I am going a bit over board again, running 8 or so npcs each tugging about 10,000 or so AI components will probably be a big load.  That is why I need to write a demo application one of these days to see how much this will cost.  For right now I am planning to go all out, screw the cpu, but most likely for slower computers we can introduce a system to merge and combine components to save processing time.  However the more components you combine the more hard coded the npc becomes.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/11/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Human AI</title>
		<link>http://charlessolar.com/post/10</link>
		<comments>http://charlessolar.com/post/10#comments</comments>
		<pubDate>Wed, 13 Jun 2007 16:01:55 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=10</guid>
		<description><![CDATA[I had a thought today while walking outside about human-like ai. This is of course, in relation to the game idea I posted a few days ago, but the gist of my goal is to have npc&#8217;s that can successfully animate and control characters designed from popular animes. The idea is pretty simple, the npc&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I had a thought today while walking outside about human-like ai.  This is of course, in relation to the game idea I posted a few days ago, but the gist of my goal is to have npc&#8217;s that can successfully animate and control characters designed from popular animes.</p>
<p>The idea is pretty simple, the npc&#8217;s will derive their actions off objects, not off of themselves.  In other words, they will look at the object to determine how to handle it, not depend on preprogrammed responses to objects that are a chair.  The objects will store data that the npc can use to lets say, pick it up, throw it, eat it, ect.  And the npc will use their MBTI to determine what should be done in the given circumstance.</p>
<p>Part two of the idea is that these objects will also hold &#8216;experience&#8217; data that the ai will pick up and remember for certain lengths of time.  This data can be pugged into their design making structure and called on during other circumstances to determine what to do or how to interact.</p>
<p>Heres a live example,</p>
<p>The npc walks up to a wooden chair<br />
He sees that the chair can be picked up, sat on, broken, and burnt</p>
<blockquote><p> Along with these verbs are tags that help the npc with the decision.<br />
Example, &#8216;sit down&#8217; is tagged for resting<br />
&#8216;burn&#8217; is tagged for warmth</p></blockquote>
<p>He thinks about it and determines that he needs a rest so he sits down<br />
His fatigue goes down and the chair teaches him that sitting down makes him rested<br />
After that he thinks again and determines that he is really cold, so he finds an object that will light the chair (oil and matches) and does so</p>
<blockquote><p> This demonstrates another part of the idea, in which objects must interact with each other using the npc as a medium.  The matches will be tagged as &#8216;makes fire&#8217; the oil would be &#8216;spreads fire&#8217; and the chair&#8217;s &#8216;burn&#8217; tag will say that it needs something to start and spread the fire, in order to be used.  Sort of like, requirements for an action.  To discover the tools, the npc must be able to scan local tags.</p></blockquote>
<p>The chair is lit and the chair teaches the npc that burning things will make him warmer<br />
However this chair exists in a hay barn, and now that there is a giant fire in the room, all the hay ignites</p>
<blockquote><p> This is can be accomplished by state broadcasting.  In which objects changing state ( eg. Stable to ablaze ) will broadcast the change to all other objects and and objects listening to such a change will decide what to do. ( eg. burst into flames )</p></blockquote>
<p>So now our npc is to hot and the hay teaches him that hay + fire is not good.<br />
He leaves the barn because the environment outside is not on fire</p>
<blockquote><p> This action causes a conflict in his code.<br />
On one hand he learned that fire is warm and thus good when cold<br />
On the other hand he learned that hay on fire is bad and makes him to hot<br />
This is not exactly what should be learned here, but I never said this design was perfect</p></blockquote>
<p>And so our npc lives to see another day, only slightly smarter then he was before.  But he gained some valuable survival skills.</p>
<p>This design still needs some tweaking, but at least now we have a working model that I can start writing and testing.<br />
One other thing I should mention though, as these npc&#8217;s collect environment data from these objects, certain ideas and concepts are going to collide and others will become useless.  We should also account for the human&#8217;s ability to forget ideas as well.  Some form of garbage collecting will have to be done to clear out bad data.  Just keep that in mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video Game Concept</title>
		<link>http://charlessolar.com/post/6</link>
		<comments>http://charlessolar.com/post/6#comments</comments>
		<pubDate>Sun, 03 Jun 2007 04:14:35 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Ramblings]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=6</guid>
		<description><![CDATA[A little while ago I sat down with Ogre and started work on a game idea I had. The game started off as a simple harvest moon clone with a more dynamic, evolving AI. I had plans to include a growing city, very dynamic and alive npcs, and of course lots of farming fun. I [...]]]></description>
			<content:encoded><![CDATA[<p>A little while ago I sat down with <a href="http://www.ogre3d.org">Ogre</a> and started work on a game idea I had.  The game started off as a simple harvest moon clone with a more dynamic, evolving AI.  I had plans to include a growing city, very dynamic and alive npcs, and of course lots of farming fun.  I worked on the game about 2 months, starting over at least two times during that time period while I got used to using Ogre.  I finally hit a road block last month, after creating a basic framework to wrap Ogre I set out to write an object system.  Which is where I am still sitting at.</p>
<p>During this lull of programming I stumbled across a new idea while thinking of character designs.  I watch several different animes, some of my favorites are Bleach, Azumanga Daioh, Shakugan no Shana, and The Melancholy of Haruhi Suzumiya.  It was while watching the last anime on that list that I had an idea, I really like Haruhi because she is such a character.  Like Midna in Zelda, Haruhi just emanates personality.  So the idea I had was to model the characters in the game after these anime characters, equipped with the same personality and actions.</p>
<p>Obviously this idea once again only added to my work load, making npc&#8217;s that can act on their own, maybe even talk on their own, according to nothing but personality data is no small feat.  It has probably never been fully realized yet in any game.  However after some research I found an interesting article about <a href="http://en.wikipedia.org/wiki/Myers-Briggs_Type_Indicator">MBTI</a> and I thought that a good way to accomplish this would be to program npc&#8217;s with functions that govern how they think about the world.  Most games program reactions to simulate personalities.  What I want to do is program npc&#8217;s to form personalities based on how they perceive the world.</p>
<p>For instance, if an npc is introverted, most of the time he will look to the introverted module for his next move.  Npc&#8217;s will have a load out of percentages they are for each of the four types.  The program will run both modules to figure out what to do, but weigh the options against their percentage for that type.</p>
<p>I will write more about this later when the idea is more developed, right now I want to also mention a video I saw talking about a special neural network.</p>
<p>This network operated as a pair of connected networks, one network is full of noise (random inputs), and the other network takes that noise as input and judges the good from the bad.  The idea here is that in a real human brain we are subject to noise, random thoughts or just subliminal noise, which we then judge to be a good idea or not.  I no longer have any link to this video, but I still remember how it was designed and implemented.  I thought maybe this would be a good way to use the MBTI, have a global brain that produces ideas and have the MBTI modules think about how to handle them.</p>
<p>Of course I also worry about the playability of this game, and if I am expecting about a dozen or so npc&#8217;s on the screen at once, running 12 brains this way might be a bit over burdening.  But of course I want to make a demo application some time in the future to see.</p>
<p>It is these two systems (objects and AI) that will be the main design goals in my project.</p>
<p>More on this later.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The blog, my work, and you</title>
		<link>http://charlessolar.com/post/239</link>
		<comments>http://charlessolar.com/post/239#comments</comments>
		<pubDate>Thu, 31 May 2007 03:58:17 +0000</pubDate>
		<dc:creator>Charles Solar</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.mrlwork.com/?p=3</guid>
		<description><![CDATA[I have long been wanting to create a system where I can freely express my trials and errors while working on a variety of projects. This is the result. In this blog, once I get it going, will feature many open source programs I write along with my ideas, thoughts, and general how-to&#8217;s. I am [...]]]></description>
			<content:encoded><![CDATA[<p>I have long been wanting to create a system where I can freely express my trials and errors while working on a variety of projects.  This is the result.  In this blog, once I get it going, will feature many open source programs I write along with my ideas, thoughts, and general how-to&#8217;s.</p>
<p>I am a computer programmer, so expect most posts to involve code in some way, but some days I might feel like just writing about a story or idea I had.  Sometimes when I am trying to think of a solution I type myself long paragraphs to record my thoughts.   I promise to not post them all, but if at a later time I think my ramblings blog worthy there will probably be a new post.</p>
<p>First thing I am going to do is post up some open source projects I had been working on, one being an auto updater for steam mods, as well as a tutorial for changing shot distribution in half life source, day of defeat source, and team fortress 2.</p>
<p>For those who might know my work, I wrote the cof plugin for day of defeat source, the same version CAL uses in their Sentential plugin.  I also was the programmer behind Prodod, a competition mod for day of defeat source which ended up going nowhere.</p>
<p>Most of my experience is dealing with C or C++ and assembly systems, however I do mingle in network systems and pretty much anything that ends up in my way.  For instance, the source mod auto updater was written in VB .net, a language I hardly knew until my second rewrite of the program.</p>
<p>I want to write more but this post is getting kind of long so I will stop here, soon this web site will be filled with tutorials for doing this or that, basically, whatever ends up causing me some trouble.</p>
<p>One last note, if you came here looking for the golden sun project, you are in the right spot, I am currently moving all my source and work here.  I decided to not have a single dedicated web site because I am the only developer and its more of a hobby project of mine.  But fear not, there will be quite a lot of posts here about that.</p>
]]></content:encoded>
			<wfw:commentRss>http://charlessolar.com/post/239/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

