<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<id>http://thomaskrehbiel.com/all</id>
<title type="text">Krehbiel's Korner</title>
<updated>2008-11-17T03:43:50Z</updated>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/all" />
<link rel="self" type="application/atom+xml" href="http://thomaskrehbiel.com/all/feed" />
<entry>
<id>http://thomaskrehbiel.com/commentary/1689-less_mergers_less_bailouts</id>
<title>Less Mergers, Less Bailouts</title>
<updated>2008-11-17T03:44:27Z</updated>
<published>2008-11-17T03:43:50Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/commentary/1689-less_mergers_less_bailouts" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/commentary/1689-less_mergers_less_bailouts"&gt;&lt;/a&gt;&lt;P&gt;I've been thinking about this bailout thing.&amp;nbsp; I'm no economist, but it seems to me that instead of the government bailing out large companies that fail, the government should instead work to prevent companies from getting so large that their failure would impact the nation's economy.&amp;nbsp; So I would suggest that whichever government agency is responsible for regulating corporations&amp;nbsp;start cracking down and don't allow big corporations to gobble up smaller corporations anymore.&amp;nbsp; (You'd think that's what anti-trust laws would be for.)&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Economy" />
<wfw:commentRss>http://thomaskrehbiel.com/commentary/1689-less_mergers_less_bailouts/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1687-fed_up_with_synctoy</id>
<title>Fed up with SyncToy</title>
<updated>2008-11-17T03:44:11Z</updated>
<published>2008-11-17T03:36:24Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1687-fed_up_with_synctoy" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1687-fed_up_with_synctoy"&gt;&lt;/a&gt;&lt;P&gt;I've been trying to use &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=c26efa36-98e0-4ee9-a7c5-98d0592d8c52&amp;amp;amp;displaylang=en"&gt;Microsoft's SyncToy&lt;/A&gt; for my directory synchronization tasks, and I'm just about fed up with it.&amp;nbsp; For reasons I can't fathom, it routinely "forgets" what to synchronize.&amp;nbsp;&amp;nbsp;I frequently synchronize to and from a USB stick, and I find that SyncToy usually wants to copy far more files than have actually been changed.&amp;nbsp; Like I'll make a couple of changes to some files on the stick,&amp;nbsp;and then for some reason SyncToy thinks it needs to re-copy all kinds of files from both the stick and the computer.&amp;nbsp; So I end up having to copy files manually from one side to another.&amp;nbsp; It's a bit aggravating.&lt;/P&gt;
&lt;P&gt;I guess I'm going back to &lt;A href="http://www.xs4all.nl/~lploeger/TreeComp3.htm"&gt;TreeComp&lt;/A&gt;, a freeware program I first used in about 2003.&amp;nbsp; It looks godawful but still works better and faster than anything I've seen.&amp;nbsp; We'll see how it goes on Vista.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/SyncToy" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1687-fed_up_with_synctoy/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1686-disabling_pluralization_in_visual_studio</id>
<title>Disabling Pluralization in Visual Studio</title>
<updated>2008-11-11T22:51:14Z</updated>
<published>2008-11-11T22:51:01Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1686-disabling_pluralization_in_visual_studio" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1686-disabling_pluralization_in_visual_studio"&gt;&lt;/a&gt;&lt;P&gt;I noticed with some concern&amp;nbsp;that the Visual Studio 2008 designer puts an "s" on the end of table names when it builds LINQ to SQL classes.&amp;nbsp; If you want to disable that, open Tools/Options, go to the Database Tools O/R Designer&amp;nbsp;page, and change "Pluralization of names" option to false.&lt;/P&gt;
&lt;P&gt;Note that if you have already generated pluralized classes, you have to force the designer to regenerate the classes by actually changing the names to some temporary value, build, then change them to what you really want and rebuild again.&amp;nbsp; Otherwise, if you leave the name the same, it assumes it doesn't need to regenerate&amp;nbsp;the classes.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/Tips" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1686-disabling_pluralization_in_visual_studio/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1685-azure_and_c_40_at_pdc</id>
<title>Azure and C# 4.0 at PDC</title>
<updated>2008-11-07T02:46:53Z</updated>
<published>2008-11-07T02:46:37Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1685-azure_and_c_40_at_pdc" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1685-azure_and_c_40_at_pdc"&gt;&lt;/a&gt;&lt;P&gt;Most of the buzz from &lt;A href="http://en.wikipedia.org/wiki/PDC_2008"&gt;Microsoft's PDC&lt;/A&gt; is about Azure and&amp;nbsp;C# 4.0.&amp;nbsp; I don't usually pay too much attention to bleeding edge Microsoft technology until it might actually be used in real-life situations, but I thought I'd break from tradition and peek at these two shiny new things.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/azure/default.mspx"&gt;Windows Azure Services&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;There isn't a lot of concrete information available on Azure yet, so there isn't much to say about it.&amp;nbsp; Conceptually, it's a specialized web hosting service from Microsoft for your ASP.NET&amp;nbsp;web apps.&amp;nbsp;&amp;nbsp;It's specialized because it's designed for the large numbers of processors and mass storage requirements needed for large-scale enterprise applications (large-scale as in, for example,&amp;nbsp;Amazon or Facebook or Google).&lt;/P&gt;
&lt;P&gt;From a programmer perspective, I gather that the main difference from a regular web app&amp;nbsp;is that the details of the OS and hardware your application is running on is abstracted away from you.&amp;nbsp; For example, instead of your web app reading and writing files with the System.IO namespace, you'll use SQL Services to read and write "blobs."&lt;/P&gt;
&lt;P&gt;I personally can't think of any applications I might use Azure for.&amp;nbsp; (Do we really need another Amazon?)&amp;nbsp; It would have to be something mandated by a pointy-haired boss-type.&lt;/P&gt;
&lt;P&gt;As for the "cloud computing" part of it; well, I've &lt;A href="http://thomaskrehbiel.com/tech/1606-the_cloud"&gt;said before&lt;/A&gt; that I don't much care for cloud computing.&amp;nbsp; Besides all the privacy and data loss concerns, the bottom line is that "the cloud" is meant to make life easier for developers, not users.&amp;nbsp; As a user, I might store &lt;EM&gt;a copy &lt;/EM&gt;of something in the cloud for convenience, but I would never use the cloud as my main work area.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://code.msdn.microsoft.com/csharpfuture"&gt;C# 4.0&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Recall that C# 3.0 gave us query syntax, extension methods and the&amp;nbsp;"var" shortcut, and tried to change us to functional programmers with lambdas.&amp;nbsp;&amp;nbsp;With the possible exception of LINQ, I personally have not yet encountered a situation where I thought any of those things would make my code better.&lt;/P&gt;
&lt;P&gt;So what can we expect from C# 4.0?&amp;nbsp; Among other things, dynamic types.&amp;nbsp; That's right,&amp;nbsp;in the continuing effort to put back all the bad things we didn't like about&amp;nbsp;VBScript and C, the variant and void* is back.&amp;nbsp; For all those people who simply can't decide how to declare your variables, you can now circumvent all pre-planning and simply write, "void myfunction( dynamic&amp;nbsp;myparam )".&amp;nbsp; Is that parameter a string?&amp;nbsp; Is it an int?&amp;nbsp; Is it a custom object?&amp;nbsp; Is it an array?&amp;nbsp; Who knows?&amp;nbsp; Guessing is half the fun!&lt;/P&gt;
&lt;P&gt;I kid of course.&amp;nbsp;&amp;nbsp;You could assume it's an object of some kind.&lt;/P&gt;
&lt;P&gt;I'm sure there are&amp;nbsp;situations where it is more convenient to use "dynamic" than an interface.&amp;nbsp; (Just like there were plenty of occasions to use void* types and variants.)&amp;nbsp; Offhand, I can't think of any, but I'm sure they're out there somewhere.&lt;/P&gt;
&lt;P&gt;The problem I see&amp;nbsp;with dynamics is that, as with any "advanced" language feature that circumvents the "KISS" principle, it leaves the door wide open for the inexperienced to&amp;nbsp;abuse it unmercifully.&amp;nbsp; When you go too far down that road, you end up with Perl, a language almost entirely composed of symbols.&lt;/P&gt;
&lt;P&gt;It looks like almost all of the new C# 4.0 features&amp;nbsp;were designed to improve COM Interop, which is something I don't have much use for.&amp;nbsp; I have exactly one COM component project, and if I ever need to use it again, I plan to upgrade it to managed C++.&lt;/P&gt;
&lt;P&gt;I do like the idea of finally having optional parameters, though.&amp;nbsp; That's something I'd use (sparingly!), as long as it compiles down to the .NET 2.0 CLR.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/PDC" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1685-azure_and_c_40_at_pdc/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/commentary/1684-postelection_musing</id>
<title>Post-Election Musing</title>
<updated>2008-11-06T00:08:26Z</updated>
<published>2008-11-06T00:07:23Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/commentary/1684-postelection_musing" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/commentary/1684-postelection_musing"&gt;&lt;/a&gt;&lt;P&gt;I have many post-election thoughts.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;McCain's concession speech was very&amp;nbsp;classy, and went a long way toward repairing his tarnished reputation in my eyes.&amp;nbsp;&amp;nbsp;I feel like he&amp;nbsp;was devoured by the Republican Party Campaign Machine, and for whatever reason wasn't able to stick to his previously-established principles.&amp;nbsp; (Prior to the RNC convention, I could still have voted for him, but his selection of Gov. Palin as a running mate was just too much of an affront.)&lt;/LI&gt;
&lt;LI&gt;I'm expecting a&amp;nbsp;competant but not extraordinary&amp;nbsp;administration from Obama.&amp;nbsp; I don't expect him to be able to fulfill many of his campaign promises (he started downplaying expectations even in his victory speech), and I anticipate that by the time he leaves office he will have disappointed many of the people who had high hopes for him.&amp;nbsp; (I don't feel like I'm going out on a limb with that prediction -- what president hasn't?)&amp;nbsp; I hope I'm wrong, but I'm sure you can understand how a person could be cynical.&lt;/LI&gt;
&lt;LI&gt;We arrived at our polling place about 5:30 AM, and there were about 20 people ahead of us.&amp;nbsp; We finished voting about 6:15 AM, and there had to have been 200 or more people waiting in line by then.&amp;nbsp; When I drove by there again after work, it was deserted.&amp;nbsp; Doh!&lt;/LI&gt;
&lt;LI&gt;(By the way, just for the record, I voted for Bob Barr -- but that's a subject for another post, if I ever get around to&amp;nbsp;it, which I probably won't, so the short version is that I'm pro-third-party right now.)&lt;/LI&gt;
&lt;LI&gt;I still find it very disturbing that I don't get any kind of receipt or anything after I press the big red "vote" button on the touchscreen machines.&amp;nbsp;&amp;nbsp;Also, it creeps me out to think about everybody else's germs crawling all over those touchscreens.&lt;/LI&gt;
&lt;LI&gt;I'm your basic&amp;nbsp;WASP, born after the civil rights era, so I can only appreciate the racial significance of this election from an academic standpoint.&amp;nbsp; Like Stan on &lt;A href="http://en.wikipedia.org/wiki/With_Apologies_to_Jesse_Jackson"&gt;that one South Park&lt;/A&gt;, I "don't get it."&amp;nbsp; I&amp;nbsp;think Obama still has a lot of hard work to do, though.&amp;nbsp;&amp;nbsp;I don't think it's enough to&amp;nbsp;&lt;EM&gt;just&lt;/EM&gt; be the first black president -- he has to be the first black president &lt;EM&gt;and do a good job&lt;/EM&gt;, or it might be for naught.&amp;nbsp; (Fortunately, Bush has set the bar pretty low for him.)&lt;/LI&gt;
&lt;LI&gt;As I type this, it looks like the Democrats will fall short of a super-majority in the Senate.&amp;nbsp; I have mixed feelings about that.&amp;nbsp; I'm leaning toward thinking it's good that they won't have free reign, but I'm also mindful that Congress hasn't gotten much of anything done in, like, forever.&amp;nbsp;&amp;nbsp;But that could be a good thing:&amp;nbsp; I'm not sure&amp;nbsp;we &lt;EM&gt;want&lt;/EM&gt; politicians "getting things done."&lt;/LI&gt;
&lt;LI&gt;I found it pretty hilarious to&amp;nbsp;watch all the newspeople trying to make it sound like the outcome of the election was in&amp;nbsp;doubt so they could keep viewers tuned in to see all their fancy flying graphs and maps.&lt;/LI&gt;
&lt;LI&gt;I'm very curious to see how The Daily Show and The Colbert Report&amp;nbsp;handle the new administration.&lt;/LI&gt;
&lt;LI&gt;Driving up 95 North, I saw a brilliant ad on the fancy-schmancy electronic billboard&amp;nbsp;next to Phillip Morris, which I've attempted to recreate below. I couldn't read who sponsored or created it.&amp;nbsp; I'd like to think that we live in an America like this, but again, it's really hard not to be cynical.&lt;BR&gt;&lt;IMG src="http://uvtek.net/images/commentary/vs_us_2008.png"&gt;&lt;/LI&gt;&lt;/UL&gt;</content>
<author><name>Tom</name></author>
<category term="Election 2008" />
<wfw:commentRss>http://thomaskrehbiel.com/commentary/1684-postelection_musing/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/commentary/1683-poll_results_from_2000_and_2004</id>
<title>Poll Results from 2000 and 2004</title>
<updated>2008-11-04T22:25:54Z</updated>
<published>2008-11-04T22:25:13Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/commentary/1683-poll_results_from_2000_and_2004" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/commentary/1683-poll_results_from_2000_and_2004"&gt;&lt;/a&gt;&lt;P&gt;It's popularly believed (at least by the handful of people that I've overheard lately) that polls don't&amp;nbsp;mean anything, and the actual results of today's election will be far different from what the media says it will be.&amp;nbsp; I tend to agree with that theory,&amp;nbsp;up to a point*.&amp;nbsp; But I was curious to see&amp;nbsp;if that viewpoint bears up against the historical evidence from the 2000 and 2004 elections, which as you may remember turned out to be toss-ups.&lt;/P&gt;
&lt;P&gt;Here are some results from a random selection of polls conducted prior to those two elections.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2000 Bush/Gore&amp;nbsp;&lt;A href="http://www.pollingreport.com/2000.htm"&gt;http://www.pollingreport.com/2000.htm&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ABC 48/45&lt;/LI&gt;
&lt;LI&gt;CBS 44/45&lt;/LI&gt;
&lt;LI&gt;CNN 47/45&lt;/LI&gt;
&lt;LI&gt;FOX 43/43&lt;/LI&gt;
&lt;LI&gt;NBC 47/44&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;2004 Bush/Kerry&amp;nbsp;&lt;A href="http://www.pollingreport.com/2004.htm"&gt;http://www.pollingreport.com/2004.htm&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ABC 49/48&lt;/LI&gt;
&lt;LI&gt;CBS 49/47&lt;/LI&gt;
&lt;LI&gt;CNN 49/47&lt;/LI&gt;
&lt;LI&gt;FOX 46/48&lt;/LI&gt;
&lt;LI&gt;NBC 48/47&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;With that in mind, here are the last poll results before today's election.&lt;/P&gt;
&lt;P&gt;2008 McCain/Obama &lt;A href="http://www.pollingreport.com/wh08gen.htm"&gt;http://www.pollingreport.com/wh08gen.htm&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ABC 44/53 (?) &lt;A href="http://www.abcnews.go.com/Politics/Vote2008/story?id=6174126&amp;amp;amp;page=1"&gt;http://www.abcnews.go.com/Politics/Vote2008/story?id=6174126&amp;amp;amp;page=1&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;CBS 42/51 (11/2)&lt;/LI&gt;
&lt;LI&gt;CNN 46/53 (11/1)&lt;/LI&gt;
&lt;LI&gt;FOX 43/50 (11/2)&lt;/LI&gt;
&lt;LI&gt;NBC 43/51 (11/2)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I think you can draw your own conclusions.&lt;/P&gt;
&lt;P&gt;* I also think that obsessive reporting of poll results has a brainwashing effect on the uninformed or undecided -- it's human nature to go along with what everyone else is doing.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Election 2008" />
<wfw:commentRss>http://thomaskrehbiel.com/commentary/1683-poll_results_from_2000_and_2004/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/commentary/1682-a_minor_reflection_upon_the_election</id>
<title>A Minor Reflection upon the Election</title>
<updated>2008-11-04T22:21:17Z</updated>
<published>2008-11-04T22:21:00Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/commentary/1682-a_minor_reflection_upon_the_election" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/commentary/1682-a_minor_reflection_upon_the_election"&gt;&lt;/a&gt;&lt;P&gt;For some parts of the country, tomorrow will be a day of joy and relief, and for others, it will be a day of anger and despair.&amp;nbsp; Both of those extremist groups will be&amp;nbsp;flailing around&amp;nbsp;a lot on television, radio, and the Internet&amp;nbsp;in the days and weeks ahead while media producers scramble to further dramatize what is supposed to be the (latest)&amp;nbsp;defining news event of our time.&lt;/P&gt;
&lt;P&gt;But I suspect the vast majority of people fall into different groups.&amp;nbsp; For a lot of people, the results of today's election won't really matter that much.&amp;nbsp; After a brief pause to hear the news over breakfast, most people will continue their daily routine without much concern for their new commander-in-chief.&amp;nbsp;&amp;nbsp;(A surprising number of people -- despite unprecedented voter registrations and what will surely be an unprecedented voter turnout --&amp;nbsp;probably won't even realize it's an election day, and won't have any idea who won or lost.)&lt;/P&gt;
&lt;P&gt;We're&amp;nbsp;expected to believe&amp;nbsp;this is the most important election of our time, but for most of us, I suspect that the next four years will proceed very much like the last four.&amp;nbsp; Most of us control our own&amp;nbsp;lives and our own destiny --&amp;nbsp;not the president.&amp;nbsp;&amp;nbsp;Which suggests that whatever problems exist in this country&amp;nbsp;rest soley on the shoulders of&amp;nbsp;the electorate, not within the White House.&lt;/P&gt;
&lt;P&gt;P.S.&amp;nbsp; I feel compelled to mention that some outcasts will see the election results as another frustrating reminder that &lt;A href="http://en.wikipedia.org/wiki/Ballot_access#Ballot_access_in_the_United_States_of_America"&gt;ballot access laws in this country&lt;/A&gt; remain hopelessly oppressive.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Election 2008" />
<wfw:commentRss>http://thomaskrehbiel.com/commentary/1682-a_minor_reflection_upon_the_election/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/commentary/1681-india_launches_moon_mission</id>
<title>India Launches Moon Mission</title>
<updated>2008-10-23T01:36:30Z</updated>
<published>2008-10-23T01:36:06Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/commentary/1681-india_launches_moon_mission" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/commentary/1681-india_launches_moon_mission"&gt;&lt;/a&gt;&lt;P&gt;This is nifty:&amp;nbsp; &lt;A href="http://rss.slashdot.org/~r/Slashdot/slashdot/~3/oPqnJTOATHQ/article.pl"&gt;Indian Moon Mission Launched&lt;/A&gt;.&amp;nbsp; Glad to see that &lt;EM&gt;somebody&lt;/EM&gt; is doing something productive for the human race.&amp;nbsp; This news surprised me because I can't remember hearing about any other space flights to the moon since, you know, the 1970s.&amp;nbsp; &lt;A href="http://en.wikipedia.org/wiki/Moon_exploration"&gt;Wikipedia&lt;/A&gt;, however, says that five other lunar missions&amp;nbsp;have been launched since the end of the space race -- in 1990 (Japan), 1994 (NASA), 1998 (NASA), 2003 (ESA)&amp;nbsp;and 2007 (China).&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="World/India" />
<wfw:commentRss>http://thomaskrehbiel.com/commentary/1681-india_launches_moon_mission/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1680-mmo_prototype_progress</id>
<title>MMO Prototype Progress</title>
<updated>2008-10-20T12:36:11Z</updated>
<published>2008-10-20T03:14:00Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1680-mmo_prototype_progress" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1680-mmo_prototype_progress"&gt;&lt;/a&gt;&lt;P&gt;Here's the progress I made on my MMO engine this weekend:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://picasaweb.google.com/lh/photo/N87CYSbnaPYfcj73JMdrCA"&gt;&lt;IMG src="http://lh3.ggpht.com/tkrehbiel/SPv2YmcpaUI/AAAAAAAABW4/pAbZoFnTyys/s288/EarlyPrototype.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I should probably figure out how to do a screencast or something; it's more impressive when it's moving. :)&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/Projects" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1680-mmo_prototype_progress/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/commentary/1679-the_cynical_election_roundup</id>
<title>The Cynical Election Roundup</title>
<updated>2008-10-20T03:00:53Z</updated>
<published>2008-10-20T03:00:36Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/commentary/1679-the_cynical_election_roundup" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/commentary/1679-the_cynical_election_roundup"&gt;&lt;/a&gt;&lt;P&gt;By the way, I'm purposefully avoiding&amp;nbsp;writing and especially reading further about the presidential election.&amp;nbsp; Thankfully I already have all the information I need to make a decision, because if I didn't, I definitely wouldn't be getting anything useful from television, radio&amp;nbsp;or the blogosphere.&amp;nbsp; I feel badly for anyone actually &lt;EM&gt;trying&lt;/EM&gt; to decide how to vote right now.&lt;/P&gt;
&lt;P&gt;I'm still&amp;nbsp;refreshing the Virginia blogosphere once or twice a day, but&amp;nbsp;only to make sure that&amp;nbsp;my aggregator is still running.&amp;nbsp; It's impossible to read more than a&amp;nbsp;line or two without a substantial increase in blood pressure.&amp;nbsp; Other than that, I only watch Comedy Central and NBC Nightly News to see if anything major is happening (besides&amp;nbsp;the ubiquitous&amp;nbsp;"wild ride on the stock market," that is).&amp;nbsp;&amp;nbsp;So yeah, like,&amp;nbsp;good luck with the last-minute mud-slinging, voter fraud&amp;nbsp;and intimidation,&amp;nbsp;or whatever.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Election 2008" />
<wfw:commentRss>http://thomaskrehbiel.com/commentary/1679-the_cynical_election_roundup/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1678-moving_ccli_properties_out_of_headers</id>
<title>Moving C++/CLI Properties Out Of Headers</title>
<updated>2008-10-18T20:58:51Z</updated>
<published>2008-10-18T20:54:00Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1678-moving_ccli_properties_out_of_headers" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1678-moving_ccli_properties_out_of_headers"&gt;&lt;/a&gt;&lt;P&gt;A while back I &lt;A href="http://thomaskrehbiel.com/tech/1578-ccli_properties"&gt;railed against C++/CLI&lt;/A&gt; for its nonsensical inability to separate property implementations from the header file.  Well, it turns out you &lt;EM&gt;can&lt;/EM&gt; do it -- it's just not widely reported.  Almost every example of a C++/CLI property shows it implemented in the header file.  But thankfully I stumbled upon an article about this very subject:  &lt;A href="http://www.sharplogic.com/blogs/ed/PermaLink,guid,2b8da6f3-a6dc-452d-8b3d-430077bff249.aspx"&gt;Splitting Properties Between Header And Implementation Files In C++/CLI&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Old Class.h:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: #1e1e1e; COLOR: #dcdce6; FONT-FAMILY: Consolas; padding-bottom:4px; margin-bottom:6pt;"&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    7&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;ref&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Effect&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    8&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    9&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   10&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;componentChain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   11&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   12&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   13&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #809fd5"&gt;property&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;ComponentChain&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   14&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #a9a9c0"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   15&lt;/SPAN&gt;       &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;get&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;{&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;-&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;componentChain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   16&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #a9a9c0"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   17&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;};&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;New Class.h:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: #1e1e1e; COLOR: #dcdce6; FONT-FAMILY: Consolas; padding-bottom:4px; margin-bottom:6pt;"&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    7&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;ref&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Effect&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    8&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    9&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   10&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;componentChain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   11&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   12&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   13&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #809fd5"&gt;property&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;ComponentChain&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   14&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #a9a9c0"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   15&lt;/SPAN&gt;       &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;get&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   16&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #a9a9c0"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   17&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;};&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;New Class.cpp:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: #1e1e1e; COLOR: #dcdce6; FONT-FAMILY: Consolas; padding-bottom:4px; margin-bottom:6pt;"&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   24&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Route&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;^&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Effect&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;::&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;ComponentChain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;::&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;get&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   25&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   26&lt;/SPAN&gt;    &lt;SPAN style="COLOR: #809fd5"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;this&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;-&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;componentChain&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 110%; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   27&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;The key is the Class::Property::get and Class::Property::set syntax that I'd not seen documented anywhere before.  Hopefully now that there are &lt;EM&gt;two&lt;/EM&gt; articles about this, it will move up higher in Google searches.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/C++" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1678-moving_ccli_properties_out_of_headers/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1677-evaluating_mmo_engines</id>
<title>Evaluating MMO Engines</title>
<updated>2008-10-18T16:54:19Z</updated>
<published>2008-10-18T16:53:29Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1677-evaluating_mmo_engines" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1677-evaluating_mmo_engines"&gt;&lt;/a&gt;&lt;P&gt;Before I embark too far on the insane idea of &lt;A href="http://thomaskrehbiel.com/tech/1675-me_vs_the_mmo_engine"&gt;writing my own MMO engine&lt;/A&gt;, I thought it would be instructive to peek at some open source engines out there (gathered from the first few pages of &lt;A href="http://www.google.com/search?hl=en&amp;amp;amp;q=open+source+mmo+engine&amp;amp;amp;btnG=Search"&gt;a Google search&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;At this point I am mainly interested in the specifics of their network implementation, because that is really the foundation on which everything else is built.&amp;nbsp; For reference, my design so far is leaning toward&amp;nbsp;UDP sockets with variable-length packed binary structures, conceptually similar to the&amp;nbsp;&lt;A href="http://www.gamers.org/dEngine/quake/QDP/qnp.html"&gt;Quake network protocol&lt;/A&gt;&amp;nbsp;if I remember right.&amp;nbsp; The idea is to maximize CPU efficiency (by avoiding expensive serialization and parsing routines) and minimize bandwidth requirements (by avoiding bloated serialization and parsing routines).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://black-crystal.net/"&gt;&lt;STRONG&gt;Black-Crystal&lt;/STRONG&gt;&lt;/A&gt;. &amp;nbsp;(C#.)&amp;nbsp;&amp;nbsp;No code releases that I can find, which is too bad, because I would have loved to see their .NET implementation.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.genecys.org/"&gt;&lt;STRONG&gt;Genecys&lt;/STRONG&gt;&lt;/A&gt;. &amp;nbsp;(C,&amp;nbsp;&lt;A href="http://genecys.cvs.sourceforge.net/genecys/"&gt;CVS Repository&lt;/A&gt;.)&amp;nbsp; The source code is not very easy to read and not very well commented, but I gather (from &lt;A href="http://genecys.cvs.sourceforge.net/viewvc/genecys/src/server/network.c?view=markup"&gt;server/network.c&lt;/A&gt;&amp;nbsp;and &lt;A href="http://genecys.cvs.sourceforge.net/viewvc/genecys/src/server/ninterface.c?view=markup"&gt;server/ninterface.c&lt;/A&gt;) that the design uses simple text commands over TCP streams.&amp;nbsp; This is precisely what I &lt;EM&gt;don't&lt;/EM&gt; want to use, because I don't think it will scale very well.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://launchpad.net/openmmog"&gt;&lt;STRONG&gt;OpenMMOG&lt;/STRONG&gt;&lt;/A&gt;.&amp;nbsp;&amp;nbsp;No code releases that I can find.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.planeshift.it/"&gt;&lt;STRONG&gt;PlaneShift&lt;/STRONG&gt;&lt;/A&gt;.&amp;nbsp;&amp;nbsp;(C++, &lt;A href="http://planeshift.svn.sourceforge.net/viewvc/planeshift/"&gt;SVN Repository&lt;/A&gt;.)&amp;nbsp; This is an actual MMO that you can play, which makes it a compelling test case.&amp;nbsp; After perusing the source repository, it looks&amp;nbsp;to be using UDP sockets (see &lt;A href="http://planeshift.svn.sourceforge.net/viewvc/planeshift/trunk/src/common/net/netbase.cpp?view=markup"&gt;common/net/netbase.cpp&lt;/A&gt;) and message structures similar to my design.&amp;nbsp; I am validated!&amp;nbsp; (Although, honestly, it's not so much mine as it is John Carmack's idea from the 1990s.)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.ryzom.com/"&gt;&lt;STRONG&gt;Ryzom (NeL)&lt;/STRONG&gt;&lt;/A&gt;.&amp;nbsp; (C++, &lt;A href="http://dev.ryzom.com/repositories/show/nel"&gt;SVN Repository&lt;/A&gt;).&amp;nbsp; I can't tell what it's doing because the repository gives me internal server errors ("Rails application failed to start properly" -- figures :).&amp;nbsp; Based soley on the &lt;EM&gt;&lt;A href="http://dev.ryzom.com/repositories/browse/nel/nel/src/net"&gt;filenames&lt;/A&gt;&lt;/EM&gt;&amp;nbsp;in the source code, there appears to be UDP &lt;EM&gt;and&lt;/EM&gt; TCP code.&amp;nbsp; I'm very interested in seeing what it does because it &lt;A href="http://en.wikipedia.org/wiki/The_Saga_of_Ryzom"&gt;purports&lt;/A&gt;&amp;nbsp;to be able to update hundreds of entities in an area with modest bandwidth usage.&amp;nbsp; I have a number of ideas of my own in that department, and I'm curious if they are similar.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.mmoworkshop.com/"&gt;&lt;STRONG&gt;Torque MMO Kit&lt;/STRONG&gt;&lt;/A&gt;.&amp;nbsp; (Python, &lt;A href="http://www.mmoworkshop.com/trac/mom/browser/trunk/torque/mmo/v1"&gt;Repository&lt;/A&gt;).&amp;nbsp; (I am not positive, but I think this is actually&amp;nbsp;descended from the original Tribes game engine.)&amp;nbsp;&amp;nbsp;This appears to be one of the most mature codebases around, but I'm not a Python guy, so much of this is foreign to me.&amp;nbsp; I can't find any specific network layer -- I think it's probably embedded in whatever application parses the .cs files, but there's no source code for that.&amp;nbsp; In any case, an entire implementation of an MMO game is there, so it's a good reference to have handy.&amp;nbsp; It would be interesting to try&amp;nbsp;&lt;A href="http://www.prairiegames.com/"&gt;Minions of Mirth&lt;/A&gt; to see how well the engine works.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.vbgore.com/"&gt;&lt;STRONG&gt;vbGORE&lt;/STRONG&gt;&lt;/A&gt;.&amp;nbsp; (VB6, &lt;A href="http://www.vbgore.com/Downloads"&gt;Downloads&lt;/A&gt;.)&amp;nbsp; Yeah, I know, it's written in&amp;nbsp;VB6, but I downloaded it anyway.&amp;nbsp; It actually looks surprisingly mature.&amp;nbsp; Digging into the GOREsock\GameClient\GOREsock.ctl code reveals they're using TCP byte streams.&amp;nbsp; I can't make much sense of the rest of the codebase, but there might be something useful in there somewhere.&amp;nbsp; I'm not going to install VB6 again to look at&amp;nbsp;it in depth, though.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.worldforge.org/"&gt;&lt;STRONG&gt;WorldForge&lt;/STRONG&gt;&lt;/A&gt;.&amp;nbsp; (C++, &lt;A href="http://sourceforge.net/project/showfiles.php?group_id=11799"&gt;Downloads&lt;/A&gt;.)&amp;nbsp; WorldForge appears to be&amp;nbsp;well-known, but I can't find any real games based upon it.&amp;nbsp; It's broken into a number of distinct libraries -- the network library is&amp;nbsp;called "&lt;A href="http://sourceforge.net/project/showfiles.php?group_id=11799&amp;amp;amp;package_id=132539"&gt;Atlas&lt;/A&gt;," and it appears to be a highly&amp;nbsp;generalized API, which usually means&amp;nbsp;scope creep from trying to be everything to everybody.&amp;nbsp; It looks like it's using a TCP stream and serialized objects, encoded&amp;nbsp;as XML or "packed" (see the Atlas::Codecs namespace).&amp;nbsp; Unfortunately, the code looks like it's getting close to the "big ball of mud" stage of entropy. :)&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/Projects" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1677-evaluating_mmo_engines/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1676-new_collection_vs_collectionclear</id>
<title>New Collection vs. Collection.Clear</title>
<updated>2008-10-18T17:03:22Z</updated>
<published>2008-10-18T16:38:00Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1676-new_collection_vs_collectionclear" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1676-new_collection_vs_collectionclear"&gt;&lt;/a&gt;&lt;P&gt;Quick, which one of the following implementations is faster to use in a time-critical section of code:&lt;/P&gt;
&lt;P&gt;Implementation 1:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 11pt; BACKGROUND: #1e1e1e; COLOR: #dcdce6; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   25&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;iterations&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   26&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   27&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   28&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;1000&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; ) &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Add&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   29&lt;/SPAN&gt; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Implementation 2:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 11pt; BACKGROUND: #1e1e1e; COLOR: #dcdce6; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   34&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   35&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;iterations&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   36&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   37&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Clear&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   38&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;1000&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; ) &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Add&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px; PADDING:0px;"&gt;&lt;SPAN style="COLOR: gray"&gt;   39&lt;/SPAN&gt; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Answer:  The second one, by about 33%.&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 11pt; BACKGROUND: #1e1e1e; COLOR: #dcdce6; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    1&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;using&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;System&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    2&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;using&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;System&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Collections&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Generic&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    3&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;using&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;System&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Diagnostics&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    4&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;using&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;System&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Text&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    5&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    6&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;namespace&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;CollectionSpeedTest&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    7&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    8&lt;/SPAN&gt;     &lt;SPAN style="COLOR: #809fd5"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;Program&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;    9&lt;/SPAN&gt;     {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   10&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #809fd5"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Main&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;string&lt;/SPAN&gt;[] &lt;SPAN style="COLOR: #e6e6dc"&gt;args&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   11&lt;/SPAN&gt;         {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   12&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #809fd5"&gt;long&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;time1&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;Stopwatch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;GetTimestamp&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   13&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #e6e6dc"&gt;Method1&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #d2ae62"&gt;1000000&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   14&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #809fd5"&gt;long&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;time2&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;Stopwatch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;GetTimestamp&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   15&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #e6e6dc"&gt;Method2&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #d2ae62"&gt;1000000&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   16&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #809fd5"&gt;long&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;time3&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;Stopwatch&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;GetTimestamp&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   17&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   18&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #5c6cfe"&gt;Console&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;WriteLine&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #d2ae62"&gt;"Method1: {0}"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #e6e6dc"&gt;time2&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;-&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;time1&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   19&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #5c6cfe"&gt;Console&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;WriteLine&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #d2ae62"&gt;"Method2: {0}"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #e6e6dc"&gt;time3&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;-&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;time2&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   20&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #5c6cfe"&gt;Console&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;ReadLine&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   21&lt;/SPAN&gt;         }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   22&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   23&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #809fd5"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Method1&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;iterations&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   24&lt;/SPAN&gt;         {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   25&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;iterations&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   26&lt;/SPAN&gt;             {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   27&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   28&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;1000&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; ) &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Add&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   29&lt;/SPAN&gt;             }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   30&lt;/SPAN&gt;         }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   31&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   32&lt;/SPAN&gt;         &lt;SPAN style="COLOR: #809fd5"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;Method2&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;iterations&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   33&lt;/SPAN&gt;         {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   34&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #809fd5"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #5c6cfe"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;&gt;&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   35&lt;/SPAN&gt;             &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;iterations&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;i&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; )&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   36&lt;/SPAN&gt;             {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   37&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Clear&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   38&lt;/SPAN&gt;                 &lt;SPAN style="COLOR: #809fd5"&gt;for&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #809fd5"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;0&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; &lt;SPAN style="COLOR: #a9a9c0"&gt;&lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #d2ae62"&gt;1000&lt;/SPAN&gt;; &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;++&lt;/SPAN&gt; ) &lt;SPAN style="COLOR: #e6e6dc"&gt;myList&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a9a9c0"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR: #e6e6dc"&gt;Add&lt;/SPAN&gt;( &lt;SPAN style="COLOR: #e6e6dc"&gt;j&lt;/SPAN&gt; );&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   39&lt;/SPAN&gt;             }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   40&lt;/SPAN&gt;         }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   41&lt;/SPAN&gt;     }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: gray"&gt;   42&lt;/SPAN&gt; }&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;Results:&lt;/P&gt;
&lt;P&gt;Method1: 20962096146&lt;BR&gt;Method2: 13987606779&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/.NET" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1676-new_collection_vs_collectionclear/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/tech/1675-me_vs_the_mmo_engine</id>
<title>Me vs. the MMO Engine</title>
<updated>2008-10-16T22:59:15Z</updated>
<published>2008-10-16T22:54:00Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/tech/1675-me_vs_the_mmo_engine" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/tech/1675-me_vs_the_mmo_engine"&gt;&lt;/a&gt;&lt;P&gt;So I decided to write an &lt;A href="http://en.wikipedia.org/wiki/MMOG"&gt;MMO&lt;/A&gt; game engine*.&lt;/P&gt;
&lt;P&gt;No, really.&lt;/P&gt;
&lt;P&gt;Okay, I know, I know, this is the fifth or sixth time I've started a game engine project like this, and it will probably end up the same as all the others:  Nifty ideas, but without considerably more time and structure and funding -- and, you know, &lt;EM&gt;an actual game idea&lt;/EM&gt; -- it will end up in source code purgatory, picked over for an occasional gem of an idea but otherwise left to rot.&lt;/P&gt;
&lt;P&gt;Why an MMO and not something simple like, say, Space Invaders?  Well for one thing I've already written a couple of different 2D game engines (now residing in purgatory) so there isn't a lot to explore there.  Beyond that, MMOs are more interesting to me because they have a much broader variety of technologies to explore.&lt;/P&gt;
&lt;P&gt;As usual, I'm going to build most of the framework with .NET since that's the quickest way for me to get a prototype up and running.  I'm not planning to use any third-party game engines (&lt;A href="http://en.wikipedia.org/wiki/Not_invented_here"&gt;Not Invented Here&lt;/A&gt;!), but I do want to use a 3D rendering engine for the client (which just by itself represents a whole set of challenges).  And by the way, no, I still don't have a game idea (well, that's not entirely true, but certainly nothing more than a vague idea) -- I'm only interested in the underlying technology at this point.  And if anyone is reading this that &lt;EM&gt;does&lt;/EM&gt; have a game idea -- no, I'm not interested in developing your game (unless there's a decent salary attached, of course).  This is purely an intellectual exercise.&lt;/P&gt;
&lt;P&gt;This should keep me busy until... well, until the next shiny bauble comes along to grab my attention.&lt;/P&gt;
&lt;P&gt;* If you don't understand the ramifications of that statement, it's roughly equivalent to me saying, "so I decided to memorize the encyclopedia" or "so I decided to perform a heart transplant."&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Programming/Projects" />
<wfw:commentRss>http://thomaskrehbiel.com/tech/1675-me_vs_the_mmo_engine/commentfeed</wfw:commentRss>
</entry>
<entry>
<id>http://thomaskrehbiel.com/gaming/1674-eve_online_impressions</id>
<title>EVE Online Impressions</title>
<updated>2008-10-16T22:46:20Z</updated>
<published>2008-10-14T22:26:00Z</published>
<link rel="alternate" type="text/html" href="http://thomaskrehbiel.com/gaming/1674-eve_online_impressions" />
<content type="html">&lt;a href="http://thomaskrehbiel.com/gaming/1674-eve_online_impressions"&gt;&lt;/a&gt;&lt;P&gt;Before I wasted my money on WAR, I toyed with the idea of getting EVE Online instead.  The idea of a spaceship-based MMO is fascinating -- it harkens back to the golden age of &lt;A href="http://en.wikipedia.org/wiki/Tradewars"&gt;TradeWars&lt;/A&gt; on the local dialup BBS -- and I've wanted to try it out for, well, years.  So now that WAR is gone, I went ahead and downloaded the 21-day EVE Online free trial through Steam and played with it over the 3-day weekend.&lt;/P&gt;
&lt;P&gt;Pros&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It's very different from your typical MMORPG.&lt;/LI&gt;
&lt;LI&gt;The graphics are way cool, and pretty fast even on my pitiful GeForce 7600.&lt;/LI&gt;
&lt;LI&gt;It's actually &lt;EM&gt;massive&lt;/EM&gt; -- all the players are all together on one server, like the good old days.&lt;/LI&gt;
&lt;LI&gt;Skills train even while offline.&lt;/LI&gt;
&lt;LI&gt;The market is very cool.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Cons&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The learning curve is pretty steep for a game.  It's not insurmountable, just don't expect to jump right in and have any clue what to do.  Do &lt;EM&gt;not&lt;/EM&gt; skip the tutorial and read the banter in the "rookie help" chat channel -- there are actually quite a few helpful people in there (not to mention quite a few of the usual assortment of MMO dorks).&lt;/LI&gt;
&lt;LI&gt;Downtime!  It takes sooooo long to navigate between planets and solar systems.  It's like taking a WoW flight to go &lt;EM&gt;everywhere&lt;/EM&gt;.  At first, it's cool to look at the pretty graphics while your Autopilot warps you around, but after the first few jumps it gets pretty tiresome.&lt;/LI&gt;
&lt;LI&gt;More downtime!  Fixed times to train skills, manufacture items and research technology means a whole lot of killing time while waiting for tasks to finish.&lt;/LI&gt;
&lt;LI&gt;I started an alt to try a different character, tried to train a skill, and it told me I couldn't because another character on my account was already training a skill!  (I left my other character training something that took over 24 hours so I could upgrade my ship.)  Only one character per account can train skills at a time?!?  That's beyond ridiculous.  I'd like to think that's just a limitation of the trial account but &lt;A href="http://www.eve-search.com/thread/885017"&gt;this forum thread&lt;/A&gt; confirms it's not just me.&lt;/LI&gt;
&lt;LI&gt;There's a staggering number of overlapping windows to manage in the interface.&lt;/LI&gt;
&lt;LI&gt;The font size is microscopic when you run at high resolutions, which is basically a requirement because of the aforementioned overlapping windows.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I'm not sure there's enough interesting things to do in this game to keep me beyond the free trial (or even to the end of the free trial).  In fact, it seems like once you finish all the missions from your first Agent, there's &lt;EM&gt;nothing&lt;/EM&gt; to do except mining.  And mining in this game is about as tedious as you can get, at least at the newbie levels.  You have to warp out to an asteroid belt, find and motor over to an asteroid, zap it with your mining laser for what seems like hours even just to fill your tiny, tiny newbie cargo bay, then warp back to the station to move the ore to your "bank" before you can refine it.  It gets faster as you buy enhancements for your ship, but at no point does it become fun.  Agent missions are &lt;EM&gt;far&lt;/EM&gt; more entertaining, but after the first series, the game doesn't lead you to any more -- you have to find them on your own, which is a rather daunting task.&lt;/P&gt;
&lt;P&gt;Because of all the downtime, the only sensible way to play this game would be to setup a dedicated computer for it.  That way you can continue to work on your main computer, and only occasionally glance at the EVE screen to see if it's finished whatever task you started.  (Right now, for example, I'm training skills in the background while I get caught up on blog posts.)  Otherwise, you'll find yourself staring blankly at the screen as hours of your life disappear... sort of like watching cable news channels during the day.&lt;/P&gt;
&lt;P&gt;P.S. Don't be one of those dorks expecting EVE to be a precise scientific simulation of astrophysics.  Yes, you can warp through planets and no there's no gravity.  I saw somebody even complaining about the lack of "blue shift."  Sheesh.&lt;/P&gt;</content>
<author><name>Tom</name></author>
<category term="Gaming/EVE" />
<wfw:commentRss>http://thomaskrehbiel.com/gaming/1674-eve_online_impressions/commentfeed</wfw:commentRss>
</entry>
</feed>
