<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Dk8MRH8_fip7ImA9WhRUGUU.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299</id><updated>2012-01-30T20:41:25.146-08:00</updated><category term="c#" /><category term="tools" /><category term="p2p" /><category term="git" /><category term="python" /><category term="griping" /><category term="now playing" /><category term="security" /><category term="programming" /><category term="torchlight" /><category term="eve" /><category term="music" /><category term="games" /><category term="social gaming" /><category term="cloud" /><category term="c++" /><category term="networking" /><category term="emperor" /><category term="ipv6" /><category term="hardware" /><category term="electronics" /><title>/dev/justinian</title><subtitle type="html">Code. Spaceships. Games. Bikes. Blinky things.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.devjustinian.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.devjustinian.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/devjustinian" /><feedburner:info uri="devjustinian" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CEYHRng8eSp7ImA9WhRUEk8.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-9157391424976373569</id><published>2012-01-19T12:17:00.000-08:00</published><updated>2012-01-22T00:48:57.671-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-22T00:48:57.671-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Multi-processor compilation in older Visual Studios</title><content type="html">I'm working from home today due to Seattle's &lt;a href="http://latimesblogs.latimes.com/nationnow/2012/01/seattle-snow-storm.html"&gt;OMGSNOWPOCALYPSE2012&lt;/a&gt;.&amp;nbsp;Lamenting the lack of &lt;a href="http://www.xoreax.com/"&gt;IncrediBuild&lt;/a&gt; here at home, I decided to parallelize my builds - if only across four cores instead of across the entire office.&lt;br /&gt;
&lt;br /&gt;
Visual Studio 2010 has an option for parallelizing C++ builds within a single project (as opposed to parallelizing the building of multiple projects, which has long been supported) in the project configuration properties under &lt;i&gt;C/C++&amp;nbsp;→&amp;nbsp;General&amp;nbsp;→&amp;nbsp;Multi-processor Compilation&lt;/i&gt;. This is similar to the old &lt;i&gt;make -j&lt;/i&gt;, in that it spawns multiple child processes to carry out compilation. Unlike &lt;i&gt;make -j&lt;/i&gt;, though, it's smart enough to spawn an appropriate amount of processes for the number of processor cores on your machine. (So you won't end up with any hilarious&amp;nbsp;anecdotes&amp;nbsp;about how you brought your machine to a standstill by forgetting to type a number, like with &lt;i&gt;make -j&lt;/i&gt;. Kind of sad, really.)&lt;br /&gt;
&lt;br /&gt;
While it's not exposed in the project properties dialog, the compilers that ship with VS2005 and VS2008 also supported this option via the &lt;a href="http://msdn.microsoft.com/en-us/library/bb385193.aspx"&gt;/MP command line option&lt;/a&gt;. Yes, I realize that the MSDN article I linked to only lists 2010 and 2008, but it does work on 2005 as well; we used it on &lt;a href="http://www.burningsea.com/"&gt;&lt;i&gt;Pirates of the Burning Sea&lt;/i&gt;&lt;/a&gt; without trouble.&lt;br /&gt;
&lt;br /&gt;
So go forth, and use those extra cores for something besides YouTube while you're waiting on a build!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-9157391424976373569?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/QAMb6IMBw4Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/9157391424976373569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2012/01/multi-processor-compilation-in-older.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/9157391424976373569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/9157391424976373569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/QAMb6IMBw4Y/multi-processor-compilation-in-older.html" title="Multi-processor compilation in older Visual Studios" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2012/01/multi-processor-compilation-in-older.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCSHw7fyp7ImA9WhRVF0U.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-8053889721692049947</id><published>2012-01-16T16:47:00.000-08:00</published><updated>2012-01-16T23:11:09.207-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-16T23:11:09.207-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="torchlight" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><title>NetMon!</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-6EGU3yYGeBc/TxUchAek2II/AAAAAAAAAKc/3MHqek-oj-E/s1600/netmon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-6EGU3yYGeBc/TxUchAek2II/AAAAAAAAAKc/3MHqek-oj-E/s1600/netmon.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I've been a&amp;nbsp;&lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt;&amp;nbsp;devotee for probably a decade. I'm sure I'll continue to be a huge fan for everyday use. I had heard stories about  Microsoft's &lt;a href="http://blogs.technet.com/b/netmon/"&gt;Network Monitor&lt;/a&gt; being awesome a few years ago at GDC, but hadn't actually tried it out until now.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;div&gt;
I have to say, for developing custom protocol parsers (for debugging the mutliplayer game you're working on, for example), it wins hands down. I might never write another Wireshark dissector again.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-8053889721692049947?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/JE23GTVIadA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/8053889721692049947/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2012/01/ive-been-wireshark-for-probably-decade.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8053889721692049947?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8053889721692049947?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/JE23GTVIadA/ive-been-wireshark-for-probably-decade.html" title="NetMon!" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-6EGU3yYGeBc/TxUchAek2II/AAAAAAAAAKc/3MHqek-oj-E/s72-c/netmon.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2012/01/ive-been-wireshark-for-probably-decade.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFQ308fCp7ImA9WhRVF0U.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-3413696624691311795</id><published>2011-11-08T10:50:00.000-08:00</published><updated>2012-01-16T23:08:32.374-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-16T23:08:32.374-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="p2p" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>I Know Where You are and What You are Sharing</title><content type="html">&lt;b&gt;&lt;a href="http://hal.inria.fr/inria-00632780/en/"&gt;I Know Where You are and What You are Sharing: Exploiting P2P Communications to Invade Users' Privacy&lt;/a&gt;&lt;/b&gt;&lt;blockquote class="tr_bq"&gt;
Abstract: In this paper, we show how to exploit real-time communication applications to determine the IP address of a targeted user. We focus our study on Skype, although other real-time communication applications may have similar privacy issues. We first design a scheme that calls an identified-targeted user inconspicuously to find his IP address, which can be done even if he is behind a NAT. By calling the user periodically, we can then observe the mobility of the user. We show how to scale the scheme to observe the mobility patterns of tens of thousands of users. We also consider the linkability threat, in which the identified user is linked to his Internet usage. We illustrate this threat by combining Skype and BitTorrent to show that it is possible to determine the filesharing usage of identified users. We devise a scheme based on the identification field of the IP datagrams to verify with high accuracy whether the identified user is participating in specific torrents. We conclude that any Internet user can leverage Skype, and potentially other real-time communication systems, to observe the mobility and filesharing usage of tens of millions of identified users.&lt;/blockquote&gt;
&lt;div style="background-color: white; color: #444444; font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 19px; margin-bottom: 10px; margin-top: 10px; outline-color: initial; outline-style: none; outline-width: 0px;"&gt;
&lt;br /&gt;&lt;/div&gt;
None of the core concepts in this paper seem particularly surprising: If you establish a connection with someone over the internet, you know their IP address. If you know an IP address, you can check whether that address is participating in a specific BitTorrent download.&lt;br /&gt;&lt;br /&gt;The interesting part of this paper is that the authors are able to use Skype to inconspicuously gain a targeted users’ IP address. By basically dropping all TCP SYN packets during call initiation, UDP packets get through but TCP connections fail -the attacker gets the remote IP address, but the user is never notified of the “call”. The authors combine this method of tracking Skype users’ IP addresses with crawling of common BitTorrent trackers to link Skype users with what they are sharing over BitTorrent. Finally, they filter out false positives from users behind NAT devices by initiating a Skype call and a BitTorrent handshake simultaneously and analyzing the IP ID fields of the response packets.&lt;br /&gt;&lt;br /&gt;This paper serves as yet another reminder that without special precautions such as using &lt;a href="https://www.torproject.org/"&gt;Tor&lt;/a&gt; (and even then..), your actions are not anonymous online. But not only does your ISP and your mobile carrier now have all this information about you, this attack can be carried out by anyone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-3413696624691311795?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/AvoyaJyB7ow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/3413696624691311795/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/11/i-know-where-you-are-and-what-you-are.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3413696624691311795?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3413696624691311795?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/AvoyaJyB7ow/i-know-where-you-are-and-what-you-are.html" title="I Know Where You are and What You are Sharing" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/11/i-know-where-you-are-and-what-you-are.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQNQHsyeyp7ImA9WhRVF0U.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-3426805475333147798</id><published>2011-09-12T11:02:00.000-07:00</published><updated>2012-01-16T23:13:11.593-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-16T23:13:11.593-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="griping" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><title>Bandwidth Data</title><content type="html">&lt;a href="http://nilretain.org/~justin/bandwidth_tests.html"&gt;http://nilretain.org/~justin/bandwidth_tests.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Here's a link to the test data I mentioned in my previous post. It took me a little longer than expected to set up the Qwest/CenturyLink side of things. (Through no fault of theirs, though.. I just was lazy and didn't want to move the bookshelf to get to the phone jack.) Data is just starting to come in now, but so far neither side looks that great. Only time will tell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-3426805475333147798?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/IqpTJL17orc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/3426805475333147798/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/09/bandwidth-data.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3426805475333147798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3426805475333147798?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/IqpTJL17orc/bandwidth-data.html" title="Bandwidth Data" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/09/bandwidth-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEBQHc4cCp7ImA9WhRVF0U.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-7795049252472837084</id><published>2011-09-07T09:52:00.000-07:00</published><updated>2012-01-16T23:17:31.938-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-16T23:17:31.938-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="griping" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><title>Bandwidth Woes</title><content type="html">&lt;br /&gt;
Today at 17:00, I will be the proud owner of not one, but &lt;b&gt;two &lt;/b&gt;internet connections. I've been a Broadstripe customer for the last few years, and the service has been absolutely terrible. Sadly, because cable companies refuse to compete with each other, &lt;a href="http://www.broadstripe.com/"&gt;Broadstripe&lt;/a&gt; was my only option for DOCSIS broadband. When we moved in to our house, we had Qwest DSL (now &lt;a href="http://www.centurylink.com/"&gt;CenturyLink&lt;/a&gt;), but it was also terrible: at the time, we were paying for 7mbps, their highest speed, and getting maybe 3mbps on a good day despite several service calls. CenturyLink has supposedly been upgrading their COs and now offers 12mbps in our area. Broadstripe continues to offer 15mbps, but has obviously heavily over-sold their service without upgrading their network, as my throughput during peak hours has decreased over the years, and has really tanked recently.&lt;br /&gt;
&lt;br /&gt;
So now I have both for a couple weeks, and I'm going to compare. Of course, no one should have to make such a decision based on how slow the connection feels, so I've been collecting data for a while now. Once I have the DSL service up and running tonight, I'll put up a page with running comparisons, but here's a look at the kind of graphing I've been doing with this data:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-zDVQ8U829dQ/TxUgWiqKxnI/AAAAAAAAAKk/UkCY0FGc6eM/s1600/bandwidth_tests.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-zDVQ8U829dQ/TxUgWiqKxnI/AAAAAAAAAKk/UkCY0FGc6eM/s1600/bandwidth_tests.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This graph shows the average bandwidth and latency (to my hosted server) for a given hour of the day over the last two weeks. That entire red line in the top graph has been sliding downwards lately. My comparisons page will also have a non-averaged graph of the last two weeks of data, which shows not only a downward trend, but a number of canyons where my throughput drops to around 2mbps. I'm very curious to see how CenturyLink does in comparison...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-7795049252472837084?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/PB9dXP13ONU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/7795049252472837084/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/09/bandwidth-woes.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7795049252472837084?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7795049252472837084?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/PB9dXP13ONU/bandwidth-woes.html" title="Bandwidth Woes" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-zDVQ8U829dQ/TxUgWiqKxnI/AAAAAAAAAKk/UkCY0FGc6eM/s72-c/bandwidth_tests.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/09/bandwidth-woes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYMQ30zeCp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-8982939777780144159</id><published>2011-06-24T12:29:00.000-07:00</published><updated>2011-09-28T15:16:22.380-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T15:16:22.380-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eve" /><title>An addendum to my last post</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-UELG3inSEmk/ToOcWD-HS6I/AAAAAAAAADQ/C_9R6HkNipI/s1600/eve-jita.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-UELG3inSEmk/ToOcWD-HS6I/AAAAAAAAADQ/C_9R6HkNipI/s1600/eve-jita.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
EVE players have started rioting in-game in Jita, the biggest trade hub in EVE. This screenshot was taken by one of my corpmates, he reports that the population in Jita spiked to 2100 for the riot, and that spill-over riots were happening in the next system, and in other trade hubs like Rens.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-8982939777780144159?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/i-2Kjae_RGw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/8982939777780144159/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/06/addendum-to-my-last-post.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8982939777780144159?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8982939777780144159?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/i-2Kjae_RGw/addendum-to-my-last-post.html" title="An addendum to my last post" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-UELG3inSEmk/ToOcWD-HS6I/AAAAAAAAADQ/C_9R6HkNipI/s72-c/eve-jita.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/06/addendum-to-my-last-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IBR3k9fCp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-2497563140966868554</id><published>2011-06-24T11:12:00.000-07:00</published><updated>2011-09-28T14:32:36.764-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:32:36.764-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eve" /><title>Breaking up is hard to do</title><content type="html">&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eveonline.com/"&gt;EVE Online&lt;/a&gt; has long been my favorite game. I buy new games, play them for a while, and then go back to EVE. The gameplay speaks to me on a very deep level. I'm not in a large alliance fighting to control large areas of space, with billions and billions of ISK to my name (though, I'm sure the people that are feel the same way about how they play). I've just got my own little corner of space carved out, working it and maintaining it with my small corporation. We were recently involved in several large battles (and a war which involved spending 3 billion ISK on mercenary assistance) to defend our home. And that makes this game mean something to me. I'm not grinding for XP, or for a new mount.. I've built something, and I'm defending it. There's a reason for me to fight.&lt;br /&gt;&lt;br /&gt;Now, as a game developer myself, I usually roll my eyes at forum rage and take the side of the developer. Like it or not, there's usually a very good reason for the choices a developer makes to your favorite game. But I can't help but think that CCP has made a few bad choices about EVE lately:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The $99 API access issue&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One of the greatest strengths of EVE that we tried to emulate a bit on PotBS, was the out-of-game access to in-game information via their web API. This has been a huge boon for them - tools such as EveMon, EFT, and countless others make the game much more accessible to players. Earlier this month, CCP announced that any applications or websites using this data or the EVE IP would need a license. Any of these services that asked for ISK, received ISK donations, or ran web ads would require a $99/year commercial license. Previously, these services were not allowed to receive real-world money, so CCP pitched this as a way for developers to do so. However, there was some confusion on this issue, as their FAQ also stated "No, the commercial license does not allow you to charge real life money for any in-game services."&lt;br /&gt;&lt;br /&gt;I was absolutely astounded at this. When I was working on PotBS, I was always amazed at people like &lt;a href="http://armeagle.nl/"&gt;ArmEagle&lt;/a&gt;, who wanted to set up applications using our data for us. For free. This not only gives you more cool tools to play with, it builds your community and increases player retention. Charging people to build these tools for you is absurd, and would likely mean that most would close down.&lt;br /&gt;&lt;br /&gt;Fortunately, CCP has backed down from their position, but not without angering many of the devoted customers who build such tools.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The $70 monocle issue&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The most recent expansion for EVE, Incarna, gave players the (limited) ability to walk around in space stations as their characters. This is a huge change for EVE, as previously, a player's only view of their character was of their spaceship. Incarna also added an RMT shop in which players could purchase vanity appearance upgrades for their characters for real money. (Or at least, a currency derived from a currency derived from real money.) EVE players were annoyed by this, since CCP had previously stated that RMT would never be a part of EVE. (Even going so far as to mock RMT in their &lt;a href="http://www.eveonline.com/devblog.asp?a=blog&amp;amp;bid=549"&gt;2008 april fools' joke&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;I have personally added an RMT shop to an MMO before. Trust me, I understand here. And I wouldn't really care about EVE doing it, were it just vanity items for real money. But EVE's in-game economy is one of the most important aspects of the game.. it balances the entire game world, even for those who never get into the economic gameplay. Not only can these RMT items cross over into the regular in-game economy (which we did on PotBS as well, and I'm still not sure if it was a good idea or not), but someone at CCP leaked an internal newsletter which listed ideas for more direct economic crossover, like buying ships with RMT.&lt;br /&gt;&lt;br /&gt;On top of that, CCP has set the prices for these items (that other people can't even see yet) comically high. $70 for a monocle, $20 for a shirt. (Note that real-life shirts are also $20 in EVE's web store.) For comparison, a full costume pack that's usable by any character on your Star Trek Online account will set you back about $6. They're getting a lot of bad press for it, and of course have a forum full of 40-page threads of complaints. I wonder what the fallout here will be.&lt;br /&gt;&lt;br /&gt;So despite the title of this post, I'm not leaving EVE yet. But I've become very wary. I'm hoping that the trends I see don't continue. I'm not going to ragequit, I'm not going to flame in the EVE forums about how CCP just lost my two accounts. I've been on the other side. My two subscription fees don't make a dent in their numbers, I can assure you. But it just might not be a game I'm interested in fairly soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-2497563140966868554?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/RafdX7lJ3Ow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/2497563140966868554/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/06/breaking-up-is-hard-to-do.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/2497563140966868554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/2497563140966868554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/RafdX7lJ3Ow/breaking-up-is-hard-to-do.html" title="Breaking up is hard to do" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/06/breaking-up-is-hard-to-do.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UCQXo5eSp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-6837531070185926941</id><published>2011-05-31T11:18:00.000-07:00</published><updated>2011-09-28T14:27:40.421-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:27:40.421-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>MSVC and Templates</title><content type="html">&lt;blockquote&gt;
&lt;pre&gt;template &amp;lt;typename A&amp;gt;
class Foo
{
public:
    Foo()
    {
        Bar&amp;lt;A&amp;gt; b;
        b.method();
    }
};

template &amp;lt;typename A&amp;gt;
class Bar
{
public:
    void method() {}
};

int main( int argc, char** argv )
{
    Foo&amp;lt;char&amp;gt; f;
    return 0;
}
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
Take a look at this snippet of code. Does it look valid to you? On first glance, it might. But if you run it through your compiler... hmm, wait.. MSVC thinks this is valid code too.&lt;br /&gt;
&lt;br /&gt;
I'm sure we all know how MSVC is lax when it comes to&amp;nbsp;&lt;a href="http://www.google.com/search?hl=en&amp;amp;q=msvc+gcc+typename"&gt;using typename&lt;/a&gt;. The issue here, though, is that Foo's constructor refers to Bar, which hasn't been declared. GCC complains with "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;error: ‘Bar’ was not declared in this scope&lt;/span&gt;". MSVC, however, apparently lets this slide and only parses the code for Foo when it actually instantiates the template. It seems that GCC actually does the parsing work up front, and only emits code when the template is instantiated, whereas MSVC saves the parsing for when the template is actually instantiated.&lt;br /&gt;
&lt;br /&gt;
So, be warned. If you're developing (or maintaining...) template-heavy code that's supposed to be portable with MSVC, compile early and often with GCC.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-6837531070185926941?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/SWPUy4F-f64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/6837531070185926941/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/05/msvc-and-templates.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/6837531070185926941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/6837531070185926941?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/SWPUy4F-f64/msvc-and-templates.html" title="MSVC and Templates" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/05/msvc-and-templates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcCQnc-eyp7ImA9WhdUE0w.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-7105304572632534403</id><published>2011-05-18T10:30:00.000-07:00</published><updated>2011-09-29T09:34:23.953-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T09:34:23.953-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="eve" /><title>Building the biggest ships</title><content type="html">In seven days and nine hours, my &lt;a href="http://www.eveonline.com/" rel="nofollow"&gt;EVE&lt;/a&gt; character will have completed building my first capital ship, the Minmatar &lt;i&gt;&lt;a href="http://eve.wikia.com/wiki/Nidhoggur" rel="nofollow"&gt;Nidhoggur&lt;/a&gt;&lt;/i&gt; carrier. (With a full compliment of 10 &lt;i&gt;&lt;a href="http://eve.wikia.com/wiki/Fighter-Drone" rel="nofollow"&gt;Einherji&lt;/a&gt;&lt;/i&gt; fighters.) Myself. From minerals either bought or mined by myself and my corporation members. While carriers are the smallest class of capital ship, these are probably the biggest ships I'll ever build, and they're a huge milestone for a character that started off building small ammunition to sell to new players running the easiest of missions. And while I don't really make my space bucks from manufacturing anymore, it's still a bit of a proud moment because I remember starting off without direction in the vast universe of EVE, and saying "I want to build &lt;i&gt;that&lt;/i&gt;."&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-nB4NVBCC1Y8/ToSdGlbsAiI/AAAAAAAAADU/qX_rb9-4jyc/s1600/Nidhoggur512.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-nB4NVBCC1Y8/ToSdGlbsAiI/AAAAAAAAADU/qX_rb9-4jyc/s400/Nidhoggur512.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-7105304572632534403?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/skMrxieAwG0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/7105304572632534403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/05/building-biggest-ships.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7105304572632534403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7105304572632534403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/skMrxieAwG0/building-biggest-ships.html" title="Building the biggest ships" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-nB4NVBCC1Y8/ToSdGlbsAiI/AAAAAAAAADU/qX_rb9-4jyc/s72-c/Nidhoggur512.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/05/building-biggest-ships.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCR3g9fCp7ImA9WhdUE0w.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-7730853567762730085</id><published>2011-04-15T15:18:00.000-07:00</published><updated>2011-09-29T09:37:46.664-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T09:37:46.664-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>Again, the cloud: Dropbox</title><content type="html">Since I mentioned how much l like &lt;a href="http://dropbox.com/"&gt;Dropbox&lt;/a&gt; in my last post, I thought I'd add a follow-up. There's been a bit of a buzz* lately about how insecure Dropbox is. I don't see this as a reason &lt;em&gt;&lt;strong&gt;not&lt;/strong&gt;&lt;/em&gt; to use it, but extra precautions should be taken if you want to store sensitive information. I personally love &lt;a href="http://www.truecrypt.org/"&gt;TrueCrypt&lt;/a&gt; for this, as creating a fixed-size encrypted drive doesn't leak information about the number or size of files you've encrypted.&lt;br /&gt;
&lt;br /&gt;
* Derek Newton's article "&lt;a href="http://dereknewton.com/2011/04/dropbox-authentication-static-host-ids/"&gt;Dropbox authentication: insecure by design&lt;/a&gt;", and Christopher Soghoian's article, "&lt;a href="http://paranoia.dubfire.net/2011/04/how-dropbox-sacrifices-user-privacy-for.html"&gt;How Dropbox sacrifices user privacy for cost savings&lt;/a&gt;"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-7730853567762730085?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/wDqGz5JVSII" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/7730853567762730085/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/04/again-cloud-dropbox.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7730853567762730085?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7730853567762730085?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/wDqGz5JVSII/again-cloud-dropbox.html" title="Again, the cloud: Dropbox" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/04/again-cloud-dropbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUARXYyfip7ImA9WhdUE0w.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-537137858639440815</id><published>2011-04-11T13:37:00.000-07:00</published><updated>2011-09-29T09:37:24.896-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-29T09:37:24.896-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="music" /><title>First thoughts on Amazon Cloud Drive</title><content type="html">&lt;br /&gt;So, I've been playing with Amazon's new Cloud Drive/Player for a few days now. Tl;dr version? I'm not impressed - Amazon certainly has the resources to have done amuch better job.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cloud Drive:&lt;/b&gt; I'm a fan of cloud storage. I love &lt;a href="http://dropbox.com/"&gt;Dropbox&lt;/a&gt;, which is commonly named as the app to beat if you're building a cloud storage solution. Amazon has to have some sort of local filesystem mounting application in the works to access your Cloud Drive. Giving them the benefit of the doubt and assuming they're working on it, I'm still disappointed. Their web interface is abysmal (It's a list of check boxes next to file names! What is this, 1995?) and only allows a single file to be downloaded at a time. Even the local upload tool is terrible - letting it search your local music library to find audio files to upload, it only lists the containing folder name for the files it finds, not the entire path. I'm sure I'm not the only one who stores my music in a artist/album directory tree, so searching through thousands of album names to decide which to upload is a terrible design. Were I on their development team, I would have preferred to delay the entire Cloud Drive portion and initially only release Cloud Player than to release something half-finished that borders on embarrassing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Cloud Player:&lt;/b&gt; As a streaming music service, I have mixed feelings about Cloud Player. Getting free storage of MP3s that I buy from Amazon is a nice touch - I do tend to buy most of my music from them these days. I like being able to upload my own music to stream anywhere; I have a number of favorite CDs that will most likely never be part of any contract between a record company and a streaming music service. Only playing uploaded or purchased music, however, is a problem. I want all my local audio files in large, high quality formats because hard drives are cheap. I don't want to spend countless hours transcoding those files before uploading, and I'm pretty sure Amazon doesn't want to spend the CPU power to transcode them before playing them back to me. So I end up with a lot of skips and breaks in my music when I listen on my phone (or anywhere else with a less than perfect connection). Offering a streaming service like &lt;a href="http://listen.grooveshark.com/"&gt;Grooveshark &lt;/a&gt;or &lt;a href="http://rdio.com/"&gt;Rdio&lt;/a&gt;, complemented by my own uploads of songs that are missing from Amazon's library would be ideal, but that's a whole separate set of content rights negotiations.&lt;br /&gt;&lt;br /&gt;All in all, I don't see much point in using Cloud Player - the only places where I'd want to stream my own music instead of play it locally is on the go or at work, where I either don't have or don't want to use the extra bandwidth to stream high-quality audio. I'll stick to other services that have their own libraries meant for streaming. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-537137858639440815?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/RLWR4R8NUtQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/537137858639440815/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/04/first-thoughts-on-amazon-cloud-drive.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/537137858639440815?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/537137858639440815?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/RLWR4R8NUtQ/first-thoughts-on-amazon-cloud-drive.html" title="First thoughts on Amazon Cloud Drive" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/04/first-thoughts-on-amazon-cloud-drive.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGRXg-eyp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-4537328405200418528</id><published>2011-03-12T21:30:00.000-08:00</published><updated>2011-09-28T14:17:04.653-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:17:04.653-07:00</app:edited><title>Marlowe's favorite part of the week</title><content type="html">...is when I put on my clubbin' boots.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-rfBf34kpAwg/ToOOrPSyFtI/AAAAAAAAADM/mb0saJNxPCw/s1600/marlowe_boots.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://1.bp.blogspot.com/-rfBf34kpAwg/ToOOrPSyFtI/AAAAAAAAADM/mb0saJNxPCw/s400/marlowe_boots.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-4537328405200418528?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/eAmHafjFmEY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/4537328405200418528/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/03/marlowes-favorite-part-of-week.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/4537328405200418528?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/4537328405200418528?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/eAmHafjFmEY/marlowes-favorite-part-of-week.html" title="Marlowe's favorite part of the week" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-rfBf34kpAwg/ToOOrPSyFtI/AAAAAAAAADM/mb0saJNxPCw/s72-c/marlowe_boots.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/03/marlowes-favorite-part-of-week.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBRHo5eSp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-5608561416326322306</id><published>2011-02-16T10:10:00.000-08:00</published><updated>2011-09-28T14:14:15.421-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:14:15.421-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="electronics" /><title>What I've been working on</title><content type="html">... is a secret gift for Janice, so a lot of what I've been working on lately, I haven't posted. I can say (since she saw the packing slip) that it involves this box of 64 &lt;a href="http://macetech.com/store/index.php?main_page=product_info&amp;amp;cPath=1&amp;amp;products_id=1"&gt;ShiftBrites&lt;/a&gt; from MaceTech. Man, I wanted to go all Scrooge McDuck, and just dive into this box. These little things are pretty sweet, they've saved me the work of wiring up a ton of RGB LEDs and shift registers. I've been taking lots of pictures, though, so watch this space for more once the secret's out.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-ihtRnt_DMf0/ToON_7juNgI/AAAAAAAAADI/vgRuc0frivI/s1600/IMAG0102.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://3.bp.blogspot.com/-ihtRnt_DMf0/ToON_7juNgI/AAAAAAAAADI/vgRuc0frivI/s400/IMAG0102.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-5608561416326322306?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/NGioy-IPaog" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/5608561416326322306/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/what-ive-been-working-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/5608561416326322306?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/5608561416326322306?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/NGioy-IPaog/what-ive-been-working-on.html" title="What I've been working on" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-ihtRnt_DMf0/ToON_7juNgI/AAAAAAAAADI/vgRuc0frivI/s72-c/IMAG0102.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/what-ive-been-working-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUNRXs9eCp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-8919789589040680477</id><published>2011-02-09T11:30:00.001-08:00</published><updated>2011-09-28T14:11:34.560-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:11:34.560-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="git" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Fixing Git "out of memory" errors on Windows</title><content type="html">Googling around, I found a lot of people had the same problem with Git on Windows that I did: large files (where "large" means above 350MB or so) cause "out of memory" errors.&lt;br /&gt;
&lt;br /&gt;
A quick look into the file causing the error,&amp;nbsp;&lt;em&gt;Git.pm&lt;/em&gt; (ugh, perl), shows the reason right away: they're doing nice, small 1KB reads of the file blob in a loop... but &lt;em&gt;collecting the whole thing in memory&lt;/em&gt; before writing it all out. Not only does that use up a ton of needless memory for large files, it reallocates the buffer to fit everything it's read on every 1KB read. Arg. Simple fix - write it out as you read it in, and don't keep it around in memory. &lt;em&gt;Viola&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
I haven't submitted this patch because, well, I don't use Git all that often, and I don't really care to jump through the hoops of writing tests to support it and all that. But if you're hitting this error, maybe this will help.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://s.devjustinian.com/uploads/Out-of-memory-fix.patch"&gt;Out-of-memory-fix.patch&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-8919789589040680477?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/mAZ870fBahY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/8919789589040680477/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/fixing-git-out-of-memory-errors-on.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8919789589040680477?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8919789589040680477?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/mAZ870fBahY/fixing-git-out-of-memory-errors-on.html" title="Fixing Git &quot;out of memory&quot; errors on Windows" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/fixing-git-out-of-memory-errors-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcGRHw4cCp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-2693349519529013092</id><published>2011-02-07T16:11:00.000-08:00</published><updated>2011-09-28T14:07:05.238-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:07:05.238-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>SSL: Google vs. F5</title><content type="html">&lt;a _mce_href="http://imperialviolet.org" href="http://imperialviolet.org/"&gt;Adam Langley&lt;/a&gt;, an engineer on Google's Chrome team, wrote a blog post last summer titled &lt;a _mce_href="http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html" href="http://www.imperialviolet.org/2010/06/25/overclocking-ssl.html"&gt;Overclocking SSL&lt;/a&gt;. Adam argues that on today's hardware, SSL connections are not computationally expensive, and showed us some statistics from GMail's switch to HTTPS by default. He doesn't go so far as to outright encourage other sites to do the same for their users, but the message is strongly implied.&lt;br /&gt;
&lt;br /&gt;
Last week, Lori MacVittie of F5 wrote a blog post (which was at least partially a response to Adam's post) entitled &lt;a _mce_href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/01/31/dispelling-the-new-ssl-myth.aspx" href="http://devcentral.f5.com/weblogs/macvittie/archive/2011/01/31/dispelling-the-new-ssl-myth.aspx"&gt;Dispelling the New SSL Myth&lt;/a&gt;, in which she argues that SSL is only inexpensive if you use 1024-bit certificates and easier-to-crack ciphers like RC4. She also goes on to mention the other costs of SSL: certificate costs, loss of protocol transparency (and thus the ability to route/block traffic), and logistics such as virtual hosting problems with SSL (even though this last problem has been partly fixed by SNI).&lt;br /&gt;
&lt;br /&gt;
Yesterday, Adam responded with another post, &lt;a _mce_href="http://www.imperialviolet.org/2011/02/06/stillinexpensive.html" href="http://www.imperialviolet.org/2011/02/06/stillinexpensive.html"&gt;Still not computationally expensive&lt;/a&gt;. He makes some good observations about Lori's points, and then points out why 1024-bit keys and RC4 are good enough for most sites - especially considering the expense of cracking them when compared to other avenues of attack.&lt;br /&gt;
&lt;br /&gt;
While it's interesting to watch this back-and-forth, I sincerely hope people pay more attention to Adam's posts. At best, Lori's points sound like she's arguing that no solution is better than a most-of-the-way solution. At worst, it sounds like she's saying that SSL isn't worth it without F5's products. Three months after FireSheep embarrassed Amazon, Facebook, and other websites containing users' personal information, that kind of stance just harms the internet as a whole.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-2693349519529013092?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/_oRg2ptsWRE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/2693349519529013092/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/ssl-google-vs-f5.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/2693349519529013092?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/2693349519529013092?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/_oRg2ptsWRE/ssl-google-vs-f5.html" title="SSL: Google vs. F5" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/ssl-google-vs-f5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAMRH84eSp7ImA9WhdUEkk.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-7358555804463558059</id><published>2011-02-06T14:00:00.000-08:00</published><updated>2011-09-28T14:03:05.131-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T14:03:05.131-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="electronics" /><title>GameCube power!</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-r5-MfSZQRFo/ToOLDLPGdvI/AAAAAAAAADE/jsbAgX6nynM/s1600/gamecube_power.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://2.bp.blogspot.com/-r5-MfSZQRFo/ToOLDLPGdvI/AAAAAAAAADE/jsbAgX6nynM/s400/gamecube_power.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro tip: If you're looking for more power for your electronics project than a typical wall wart gives you, your old GameCube power supply will give you 12V at a whopping 3.25A from a fairly small package. The voltage seems pretty steady at 12.19V, so you might even get away without building a regulator circuit. And all this without mangling the power supply's wires!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-7358555804463558059?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/G8l91ggAT2s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/7358555804463558059/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/gamecube-power.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7358555804463558059?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/7358555804463558059?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/G8l91ggAT2s/gamecube-power.html" title="GameCube power!" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-r5-MfSZQRFo/ToOLDLPGdvI/AAAAAAAAADE/jsbAgX6nynM/s72-c/gamecube_power.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/gamecube-power.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EFRXo-eip7ImA9WhdUEUo.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-140043161510967229</id><published>2011-02-05T21:00:00.000-08:00</published><updated>2011-09-27T18:00:14.452-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T18:00:14.452-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="now playing" /><title>Now Playing: Interstellar Marines "preview slices"</title><content type="html">The group at &lt;a _mce_href="http://www.zeropointsoft.com/" href="http://www.zeropointsoft.com/"&gt;Zero Point Software&lt;/a&gt; have a pretty cool idea for funding &lt;a _mce_href="http://www.interstellarmarines.com" href="http://www.interstellarmarines.com/"&gt;Interstellar Marines&lt;/a&gt;. Take the pay-for-beta idea usually applied to smaller indie games, and use it to fund a high-quality "AAA" game. Release a few "preview slices" of different parts of gameplay along the way as Unity browser-playable games to keep interest up, and offer several levels of donation. I hope it works for them. Their current demos don't stand out as unique among FPS games, but they look good and play pretty smoothly. I'm looking forward to seeing what they add next.
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-xSxGHBF9aTA/ToJxiB8gjZI/AAAAAAAAADA/7lYNF4U_gCM/s1600/interstellar_marines.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-xSxGHBF9aTA/ToJxiB8gjZI/AAAAAAAAADA/7lYNF4U_gCM/s1600/interstellar_marines.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-140043161510967229?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/1BqkwsNx6IQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/140043161510967229/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/now-playing-interstellar-marines.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/140043161510967229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/140043161510967229?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/1BqkwsNx6IQ/now-playing-interstellar-marines.html" title="Now Playing: Interstellar Marines &quot;preview slices&quot;" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-xSxGHBF9aTA/ToJxiB8gjZI/AAAAAAAAADA/7lYNF4U_gCM/s72-c/interstellar_marines.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/now-playing-interstellar-marines.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcHRXs9fSp7ImA9WhdUEUo.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-3278288542785507472</id><published>2011-02-05T12:49:00.000-08:00</published><updated>2011-09-27T18:23:54.565-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T18:23:54.565-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="tools" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>A look at modern DVCSs</title><content type="html">I've been a user of the &lt;a _mce_href="http://bazaar.canonical.com" href="http://bazaar.canonical.com/"&gt;Bazaar&lt;/a&gt; distributed VCS from Canonical (the company behind Ubuntu Linux) for a while now, at least for my personal projects. When I first chose it, I had already spent some time playing with &lt;a _mce_href="http://darcs.net" href="http://darcs.net/"&gt;Darcs&lt;/a&gt; for a few small projects. Darcs got its start in 2001 with roots in the &lt;a _mce_href="http://www.gnu.org/software/gnu-arch/" href="http://www.gnu.org/software/gnu-arch/"&gt;GNU Arch&lt;/a&gt; project. (Bazaar's predecessor - also named Bazaar - also has its roots in Arch.) A couple years ago, Darcs seemed to be lagging behind the newer, higher-profile DVCSs that were getting a lot of development attention. I took a look at the current generation of popular DVCS tools, &lt;a _mce_href="http://mercurial.selenic.com/" href="http://mercurial.selenic.com/"&gt;Mercurial&lt;/a&gt;, &lt;a _mce_href="http://git-scm.com/" href="http://git-scm.com/"&gt;Git&lt;/a&gt;, and Bazaar.&lt;br /&gt;
&lt;br /&gt;
Bazaar and Mercurial are quite similar; Bazaar often gets reviews of being slower, though on average I don't really find this to be the case. I think I dawdled long enough in the Darcs world that most of Bazaar's speed remedies had been addressed by the time I compared. Bazaar seemed a bit more polished (being supported by Canonical) and seemed to target multiple workflows, which seemed handy for mixed working environments.&lt;br /&gt;
Git was the outlier here. I had heard reports of its blazing speeds, but I found the Windows user experience horrible at the time. And sadly, most of my development time is spent on Windows platforms these days. It also seemed a bit cobbled together at the time, being a collection of scripts and commands, instead of a single command, like the &lt;i&gt;p4&lt;/i&gt; or &lt;i&gt;svn&lt;/i&gt; commands I was used to.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Choosing a DVCS for the team&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Back in October (when I was still working at &lt;a _mce_href="http://www.flyinglab.com" href="http://www.flyinglab.com/"&gt;Flying Lab Software&lt;/a&gt;), we had the opportunity to possibly change from our current source control tool, &lt;a _mce_href="http://www.perforce.com/" href="http://www.perforce.com/"&gt;Perforce&lt;/a&gt;, to something new. Choosing a VCS for a team has a few more things to consider than choosing one for your personal projects. Artists and game designers weren't going to be daily users of the system (it was just for code, not assets), but they might have to deal with it occasionally as well.&lt;br /&gt;
&lt;br /&gt;
Read my considerations and benchmarks after the jump..&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Learning curve.&lt;/b&gt; Mercurial and Bazaar both seem almost as easy to understand as Perforce. Especially for non-programmers, this is pretty important. Git's staging and in-place branching are actually really cool features, but they're only for people who really grok source control, IMHO. It's much easier to train people that committing is a single action, and different directories are different branches, especially when coming from Perforce.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;GUI tools.&lt;/b&gt; This is definitely one of those "less important for personal projects, more important for team projects" issues. Perforce's GUI tools were one of its strong points. While &lt;a _mce_href="http://tortoisesvn.tigris.org/" href="http://tortoisesvn.tigris.org/"&gt;Tortoise-style&lt;/a&gt; tools are handy, I don't consider them a complete GUI solution. So on this front, Bazaar's GUI was my favorite. Git-GUI is a bit minimal, but effective as well.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Speed.&lt;/b&gt; This is where there seemed to be the most contention between people's perceptions of the tools. "Bazaar is much slower than Mercurial." "Git is blazingly fast." So I decided to do a little benchmarking. (Keep in mind this was October 2010, so things may have changed since.) I grabbed 100MB worth of &lt;a _mce_href="http://www.burningsea.com" href="http://www.burningsea.com/"&gt;Pirates&lt;/a&gt; source code, wrote a script to "touch" half the files (by randomly moving lines in the file around) and tried it out with each of the three tools.&lt;br /&gt;
&lt;br /&gt;
Initial size on disk 98.9MB&lt;br /&gt;
&lt;strong&gt;Bazaar&lt;/strong&gt;&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;bzr init&lt;/td&gt;&lt;td&gt;2.5087403s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bzr add .&lt;/td&gt;&lt;td&gt;1.0068486s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bzr commit --message "import"&lt;/td&gt;&lt;td&gt;8.8508177s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bzr st&lt;/td&gt;&lt;td&gt;1.2178222s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size on Disk&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;"touched"&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bzr st&lt;/td&gt;&lt;td&gt;1.2800246s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bzr commit --message "touch once"&lt;/td&gt;&lt;td&gt;4.529809s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;"touched" and committed again&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size on Disk&lt;/td&gt;&lt;td&gt;113MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;bzr branch Bazaar Bazaar2&lt;/td&gt;&lt;td&gt;119.4228816s&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;strong&gt;Mercurial&lt;/strong&gt;&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;hg init&lt;/td&gt;&lt;td&gt;0.1897491s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hg add .&lt;/td&gt;&lt;td&gt;0.9264119s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hg commit --message "import"&lt;/td&gt;&lt;td&gt;71.2364679&amp;nbsp;&lt;em&gt;(!)&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hg st&lt;/td&gt;&lt;td&gt;0.2171699s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size on Disk&lt;/td&gt;&lt;td&gt;119MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;em&gt;"touched"&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hg st&lt;/td&gt;&lt;td&gt;1.900506s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hg commit --message "touch once"&lt;/td&gt;&lt;td&gt;7.9458864s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;"touched" and committed again&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size on Disk&lt;/td&gt;&lt;td&gt;119MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;hg clone Mercurial Mercurial2&lt;/td&gt;&lt;td&gt;38.7416304s&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;strong&gt;Git&lt;/strong&gt;
&lt;br /&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;git init&lt;/td&gt;&lt;td&gt;0.2001444s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;git add .&lt;/td&gt;&lt;td&gt;46.8636753s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;git commit -m "import"&lt;/td&gt;&lt;td&gt;10.8147961s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size on Disk&lt;/td&gt;&lt;td&gt;121MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;"touched"&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;git diff&lt;/td&gt;&lt;td&gt;6.6801917s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;git commit -m "touch once"&lt;/td&gt;&lt;td&gt;1.4460605s&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;"touched" and committed again&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Size on Disk&lt;/td&gt;&lt;td&gt;121MB&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;git clone git git2&lt;/td&gt;&lt;td&gt;48.557878s&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
It's interesting to see here that Bazaar was still a bit slower than Mercurial, with the exception of committing changes. Given that committing is done less frequently than checking status, I think that puts Mercurial slightly in the lead for speed. Git's times weren't nearly as impressive as I was expecting, though I'd read that Git is slower on non-POSIX systems, so that might be the reason. You'll also note that my second &lt;em&gt;git commit&lt;/em&gt; didn't use -a, so that time might have been even higher had I used it correctly. I understood Git's staging concept less when I ran the benchmarks.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Epilogue&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
We ended up not actually switching to a DVCS after I ran all these tests, due largely to issues of integration with other tools and other codebases. I think DVCSs are definitely the future (or the now), though - especially for big, long-running service-style games like MMOs where juggling lots of branches is important.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-3278288542785507472?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/vF7xOVbmoic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/3278288542785507472/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/look-at-modern-dvcss.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3278288542785507472?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3278288542785507472?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/vF7xOVbmoic/look-at-modern-dvcss.html" title="A look at modern DVCSs" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/look-at-modern-dvcss.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QCQng4eip7ImA9WhdUEUo.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-4459499061807358854</id><published>2011-02-03T12:23:00.000-08:00</published><updated>2011-09-27T17:56:03.632-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T17:56:03.632-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ipv6" /><category scheme="http://www.blogger.com/atom/ns#" term="networking" /><title>The point where everyone notices IPv6</title><content type="html">On Monday, IANA fulfilled its last request for /8 blocks of IPv4 addresses. This triggers the IANA "&lt;a href="http://www.icann.org/en/general/allocation-remaining-ipv4-space.htm"&gt;Global Policy for the Allocation of the Remaining IPv4 Address Space&lt;/a&gt;" exhaustion phase. This doesn't mean there are no more available IPv4 addresses - APNIC just got two /8s on top of whatever they already have, and expect to be rationing them out for at least another 5 years. ARIN reported that they have almost five /8s worth of IPv4 addresses left to allocate.&lt;br /&gt;
&lt;br /&gt;
So it's probably not worth retro-fitting existing codebases to support IPv6 just yet. Most ISPs and consumer routers still don't support IPv6. But I expect that to start changing in the coming year or two, especially after the attention this week's announcement received.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-4459499061807358854?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/tgFV8Mly2hI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/4459499061807358854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2011/02/point-where-everyone-notices-ipv6.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/4459499061807358854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/4459499061807358854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/tgFV8Mly2hI/point-where-everyone-notices-ipv6.html" title="The point where everyone notices IPv6" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2011/02/point-where-everyone-notices-ipv6.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGRHo-eip7ImA9WhdUEUs.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-332822648828610601</id><published>2009-12-25T02:00:00.000-08:00</published><updated>2011-09-27T15:08:45.452-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:08:45.452-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Manifest gotchas</title><content type="html">&lt;p&gt;For those of you using Visual Studio 2008, and using it’s C++ TR1 support in SP1, here’s something I wish I hadn’t spent so much time tracking down..&lt;/p&gt;  &lt;p&gt;TR1 features only exist in 2008 SP1, but the linker will happily build a manifest to link against the pre-SP1 CRT even if you’re using TR1. Some systems (including your development machines) will have proper side-by-side library redirection from the old CRT to the new one. But machines with the old runtime installed won’t fail to load the DLL, they’ll just mysteriously fail to find symbols in it. For example, one machine failed to find &lt;span style="font-family:Courier New;"&gt;std::tr1::weak_ptr&lt;/span&gt; and gave the following error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="font-family:Courier New;"&gt;The procedure entry point ?_Xweak@tr1@std@@YAXXZ could not be located in the dll MSVCP90.dll&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The solution is to force your project’s manifest to specify the lastest CRT version by defining the following macro:&lt;/p&gt;  &lt;pre&gt;_BIND_TO_CURRENT_CRT_VERSION&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Microsoft’s full explanation is here: &lt;a href="http://msdn.microsoft.com/en-us/library/cc664727.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc664727.aspx&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-332822648828610601?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/gj-MAA228Ow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/332822648828610601/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2009/12/manifest-gotchas.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/332822648828610601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/332822648828610601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/gj-MAA228Ow/manifest-gotchas.html" title="Manifest gotchas" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2009/12/manifest-gotchas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGRHo4cSp7ImA9WhdUEUs.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-2139062789481377633</id><published>2009-02-27T16:02:00.000-08:00</published><updated>2011-09-27T15:08:45.439-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:08:45.439-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hardware" /><title>Multi-button Input Devices</title><content type="html">&lt;a href="http://2.bp.blogspot.com/_ugdSZautf1E/SbQxjq1Zf2I/AAAAAAAAAyA/9JUlcWOn1XA/s1600-h/Microsoft_Natural_Ergonomic_Keyboard_4000.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5310924349440098146" src="http://2.bp.blogspot.com/_ugdSZautf1E/SbQxjq1Zf2I/AAAAAAAAAyA/9JUlcWOn1XA/s320/Microsoft_Natural_Ergonomic_Keyboard_4000.jpg" style="cursor: pointer; float: right; height: 169px; margin: 0pt 0pt 10px 10px; width: 226px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Keyboards are important to me.&lt;br /&gt;&lt;br /&gt;I used to love pretty, low-profile scissor-key style keyboards. After trying a ergonomic keyboard a few years ago and having it relieve my occasional wrist pain, I never went back. Typing on a non-split keyboard even feels strange now. For about two years I've been using the &lt;a href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=043"&gt;Microsoft Natural Ergonomic &lt;/a&gt;&lt;a href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=043"&gt;4000 &lt;/a&gt;&lt;a href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=043"&gt;Keyboard&lt;/a&gt; both at home and at work. There are a bunch of reasons that this is my favorite keyboard lately: the keys have a very solid action (not as much as the wonderful old &lt;a href="http://en.wikipedia.org/wiki/Model_M_Keyboard"&gt;IBM Model M&lt;/a&gt;, sadly), the enter key is on a single line (as opposed to keyboards with backwards-L shaped enter keys, which push the \ key to be moved elsewhere, often making for a smaller backspace key) and the angle and split of the keyboard has really helped my wrists.&lt;br /&gt;&lt;br /&gt;One thing the keyboard does leave to be desired is a better set of media keys. The only "extra" keys I ever end up using on a keyboard are the media keys, so that I can control iTunes without context-switching.&lt;br /&gt;&lt;br /&gt;Getting the media keys to control iTunes at all was a pain - iTunes only wanted to respond when it had focus, which obviously is missing the point. A while back I discovered an iTunes plugin called &lt;a href="http://www.everythingitunes.com/os/windows/2008-01-04/mmkeysdll/"&gt;mmKeys&lt;/a&gt; which registered global hot keys for using media keys, which fixed that problem. The next problem, which I've been living with for a while, is that this keyboard has a play/pause button, and &lt;em&gt;that's it&lt;/em&gt;. If a song comes on that's distracting me from working, I need to further distract myself by opening iTunes and skipping it. The keyboard does, however, have browser back and forward buttons, which seem perfect for re-mapping to track skip buttons. So last week I actually installed the drivers for the keyboard at home for the first time; the driver control panel has a utility for reassigning any key to a series of built-in functions. That didn't quite work as expected - the play/pause button actually causes my media player window to raise and gain focus. Again, obviously missing the point.&lt;br /&gt;&lt;br /&gt;Fortunately, the driver's control panel &lt;em&gt;does&lt;/em&gt; let you set a program to start when the key is pressed, instead of an action off of the default list. I googled around for command-line options to iTunes or APIs that I could use to write simple scripts for each action, and discovered &lt;a href="http://www.maximized.com/freeware/scriptsforitunes/documentation.htm"&gt;someone had already done it for me&lt;/a&gt;. I've installed these scripts, and now I have exactly the control scheme I want.&lt;br /&gt;&lt;br /&gt;Hopefully, by writing up my solution, I'll have an easier time configuring my next machine. And just maybe I'll help out someone googling for the answer too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-2139062789481377633?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/TBmYSmBglRs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/2139062789481377633/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2009/02/multi-button-input-devices.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/2139062789481377633?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/2139062789481377633?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/TBmYSmBglRs/multi-button-input-devices.html" title="Multi-button Input Devices" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_ugdSZautf1E/SbQxjq1Zf2I/AAAAAAAAAyA/9JUlcWOn1XA/s72-c/Microsoft_Natural_Ergonomic_Keyboard_4000.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.devjustinian.com/2009/02/multi-button-input-devices.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGRHo9fSp7ImA9WhdUEUs.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-8052409710280389254</id><published>2007-11-26T14:21:00.000-08:00</published><updated>2011-09-27T15:08:45.465-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:08:45.465-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hardware" /><category scheme="http://www.blogger.com/atom/ns#" term="griping" /><title>Why I will never buy another Alienware</title><content type="html">&lt;div class="entry-body"&gt;&lt;br /&gt;When I first started at Flying Lab almost two years ago, I of course had to give back the Aluminum PowerBook I had been using for my previous job. My personal laptop, an old Titanium PowerBook, was too old to be much use by that point. I decided I wanted to get a new machine. After looking around at gaming laptops (I wanted to be able to do work on the machine), I first ordered one from a small custom shop called &lt;a href="http://www.cyberpowerpc.com/"&gt;CyberPower&lt;/a&gt;, which was DOA. After several failed attempts to contact their supposedly "24/7" support line, I finally got a hold of someone there and was able to return the machine for a refund. Burned by that experience, I decided to go with a more well-known manufacturer. That's when I turned to &lt;a href="http://www.alienware.com/"&gt;Alienware&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="entry-more" id="more"&gt;&lt;br /&gt;I bought an SLI-enabled Alienware Aurora m9700 laptop, which ran fine for a normal machine, but certainly didn't perform the way a "gaming" machine should perform. It's been plagued by troubles ever since.&lt;br /&gt;&lt;br /&gt;Actual problems I've had with the machine itself:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Low framerates and unplayable choppiness in World of Warcraft (certainly not the most graphically intensive game on the market) and Half-Life 2 (released 2 years before this machine was new and supposedly top of the line). These games &lt;em&gt;should &lt;/em&gt;run silky-smooth on this machine. I suspect the wifi card has something to do with the choppy framerate in WoW, as it happens more often when playing over a wireless connection.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The machine has had &lt;strong&gt;two&lt;/strong&gt; sticks of RAM die since I bought it. To be fair, Alienware support was pretty good about diagnosing the problem and sending replacements, at least. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Often instead of going into sleep mode, the machine will freeze with the fans and drives still spinning but the screen off.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The machine currently locks up after about 30-50 minutes of playing WoW on very low graphics settings. I'm currently down a stick of RAM (see above), so I'm going to withhold judgement until I replace it. WoW should still run just fine on this machine with only 1GB of RAM, though.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;[UPDATED:]&lt;/b&gt; While idle, the machine runs at about 30-60% cpu utilization, with spikes to 100% that occasionally lock up the machine. &lt;a href="http://www.microsoft.com/technet/sysinternals/utilities/processexplorer.mspx"&gt;Process Explorer&lt;/a&gt; lists this as coming from DPCs, or Deferred Procedure Calls from drivers. This seems to point to a piece of hardware that's not interacting well with its driver.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Problems I've had with Alienware, and the design of the machine in general:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The drivers for the AMD Turion mobile CPU just aren't cut out for a gaming machine. The CPU goes into "power save" mode during gameplay, reducing it to about 800MHz.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alienware charged me $25 when I bought the machine for a set of "Respawn" recovery DVDs that would restore the machine to its factory state. These DVDs turned out to actually just be coasters. Alienware &lt;em&gt;did &lt;/em&gt;refund me the $25, but not until a year later is when I needed the DVDs and discovered they were bad. Even just a little testing would have caught this earlier and allowed them to re-create the DVDs. Instead I spent a day re-installing the OS and finding, downloading and installing the right drivers and utilities.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Alienware &lt;em&gt;also&lt;/em&gt; charged me to install a tech-support utility called "Alien Autopsy" that would record information about my current system state to aid in troubleshooting or support calls. This utility was installed in a broken state until I got a replacement copy from Alienware tech support. Not a huge deal, but again, something just a little testing could have prevented.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When I ordered the machine, I also selected two games to add to my order. The games never arrived, with no explanation as to why. When I called Alienware about it, they explained that the reason was that the games were out of stock, and wouldn't be restocked. They offered me a $50 gift certificate to Amazon as a replacement, so that I could buy those games from Amazon instead. Since I paid less than $50 for the games, I agreed. However, the gift certificate never arrived, and when I called again about it, Alienware claimed it would be sent soon, as they batched up such emails to be sent together. I've since lost the incident number, and never got the Amazon credit.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I can't justify getting another computer so soon after spending as much as I did on this machine, but I really hate not being happy with my computer. So I've resolved that once I get my replacement RAM (so that I can rule it out as a problem), I'm going to keep calling Alienware support to make sure that all my issues are resolved. Hopefully it doesn't take me hours and hours of tech support phone calls.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-8052409710280389254?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/Van20oYm690" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/8052409710280389254/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2007/11/why-i-will-never-buy-another-alienware.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8052409710280389254?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/8052409710280389254?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/Van20oYm690/why-i-will-never-buy-another-alienware.html" title="Why I will never buy another Alienware" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>1</thr:total><feedburner:origLink>http://www.devjustinian.com/2007/11/why-i-will-never-buy-another-alienware.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGRHo-fyp7ImA9WhdUEUs.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-4430456330530416650</id><published>2007-04-28T12:58:00.000-07:00</published><updated>2011-09-27T15:08:45.457-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:08:45.457-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title>"Scripting Languages" vs "High Level Languages"</title><content type="html">Recently, &lt;a href="http://programmerjoe.com/2007/04/15/living-in-a-bubble/" title="Living in a bubble"&gt;Joe wrote in his blog&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;As I see it there are three kinds of languages in this world:&lt;/div&gt;&lt;br /&gt;&lt;ol style="margin-top: 0in;" type="1"&gt;&lt;br /&gt;&lt;li class="MsoNormal"&gt;Hard to write, but blazingly fast: C and C++, or even assembly if you’re really hard-core&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal"&gt;Easy to write, but so slow that you have to use them sparingly: PHP, Lua, Python, Perl&lt;/li&gt;&lt;br /&gt;&lt;li class="MsoNormal"&gt;Flash&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;Java fits into an awkward niche between 1 and 2. It’s easier to develop in than C++, but not enough to keep up with the scripting languages, and yet it’s far too slow to write the whole game in. Add to that the incredible pain of forcing your users to install the Java VM, and you get a non-starter of a language.&lt;/div&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;This seems to be the common perception of high level languages lately – languages like &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;* are considered “scripting” languages: they’re not compiled like Java or C#, and they have a “simpler” syntax. I’ll use Python for terms of discussion because of my familiarity with it, but I’m sure the same is true for languages like &lt;a href="http://www.perl.org/" title="The Perl Programming Language"&gt;Perl&lt;/a&gt;&lt;span style="color: #0066cc;"&gt; &lt;/span&gt;and &lt;a href="http://www.ruby-lang.org/en/" title="The Ruby Programming Language"&gt;Ruby&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;All too often, on the &lt;a href="http://www.gamedev.net/community/forums/"&gt;GameDev forums&lt;/a&gt;, I read people’s posts claiming that an interpreted language could never be as fast as a language that compiled to a native binary format like C#. So that we’re all on the same page, let’s get this out of the way at the beginning: “managed code”, “language runtime”, and “virtual machine” are all concepts on par with “interpreted language.” Sure, the first three imply a level of “smartness” by the interpreter – compilation of the language into some interpretable bytecode, and perhaps a JIT compiler – but any modern interpreted language should be doing these things. We’ve come a long way from the days of parsing text and executing it.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;The fact that Java and C# &lt;em&gt;need&lt;/em&gt; a compilation phase is merely an interpretation difference. I like being able to change code on the fly and have the interpreter recompile it into bytecode for me. Other people like having the extra type-safety and syntax checking pass of a compile step. Personally, though, I think these class of bugs get much less frequent with a language like Python.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Runtime Speeds&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;The &lt;a href="http://shootout.alioth.debian.org/"&gt;Computer Language Shootout&lt;/a&gt; does consistently list Java and C# (albeit, on &lt;a href="http://www.mono-project.org/"&gt;Mono&lt;/a&gt;) as faster than Python. In Python’s defense, the benchmarks never have &lt;a href="http://psyco.sf.net/"&gt;Psyco&lt;/a&gt; – the Python JIT compiler – enabled. Running a few of these tests myself using Psyco, I saw a speedup of at least 4x running with the most basic braindead use of Psyco. This still puts Python slightly behind Java and C# for speed, but not by much. Of course, many of these tasks are heavily numeric – something I would hope you’d implement in C and wrap for use in Python if speed were a concern.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Development Speeds&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;I find myself able to develop applications much faster in Python than in C++, due to the nature of the syntax. (As I over-excitedly told Joe over lunch one day, “&lt;strong&gt;orders&lt;/strong&gt; of magnitude faster!!”) I’ve heard many other developers tell me that it’s impossible to manage anything more than a large project in a high-level language, or that once it comes down to writing production quality code the speed gain is lost.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;I’ll step away from the “Python as an example of high-level languages” here for a moment, and talk about Python specifically. A lot of claims against Python’s ability to deal with large projects comes from its dynamic typing. I think a lot of misconceptions come from this – it’s important not to confuse &lt;em&gt;dynamic typing&lt;/em&gt; with &lt;em&gt;weak typing&lt;/em&gt;. Python is a dynamically- and strongly-typed: references (variables are all references) can point to any type, but data keeps its type and will not be automatically cast to fit the current expression.**&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;As far as development speeds on production-quality code and suitability for large projects, I’ve found both of these statements to be completely untrue in practice. At a previous job, I worked on large python applications. In several cases, we decided to re-write some of the server-side code in C++ to gain some speed. (Audio processing and mixing on a server processing audio for many clients in any number of audio conferences, for example.) These pieces would take several times longer to write than the original Python modules.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;I think a lot of the misconception about production-quality code being slower comes from people who have experiences with Java or C#. In these C-like languages, developers still need to jump through a lot of the syntactic hoops that C++ developers do, but still have the cost of needing a language runtime. The difference from C++ ends up being that you can use a few neat language tricks to hack together code quickly, that’s not “production quality.”&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Development Environments&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;One place Python and other high-level languages fall down compared to Java and C# are in the development tools. Developers who are used to Visual Studio like that you can seamlessly step from C++ to C# code in the debugger. Java users have Eclipse. (Yes, Python users have Eclipse too, through the &lt;a href="http://pydev.sf.net/" title="PyDev plugin for Eclipse"&gt;PyDev&lt;/a&gt; plugin, which is quite nice.) There is no well-integrated tool for Python debugging across language boundaries. On Linux, you could set up GDB to recognize Python code, but that’s a huge hassle – and Linux specific.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;I don’t think the types of errors you need a strong debugger for come up quite as much in a high-level language. Pointers don’t suddenly go NULL. You can’t mysteriously clobber your vtable. But that’s not to say that a debugger isn’t an invaluable tool. &lt;a href="http://www.digitalpeers.com/pythondebugger/" title="WinPDB - An Advanced Python Debugger"&gt;WinPDB&lt;/a&gt; is a great tool, but especially in game development, there &lt;strong&gt;are&lt;/strong&gt; going to be times when you need to step into the C++ source for a module you wrote.&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;As Joe mentions in his article, I think most developers are stuck in their own little bubbles. I certainly have been surprised lately to find out that Java has become much faster and can now be used for non-ugly GUI applications with SWT. Hopefully, I’ve encouraged you to at least look in the direction of high-level languages if you never have. Every tool has its uses, and I think you’ll find that high-level languages are better for a lot more than text processing these days. And C or C++ probably isn’t the best choice for everything that it used to be. But if you’re still writing that text-processing tool in C, you might need to expand your bubble. &lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;span style="font-size: 78%;"&gt;* Yes, I’m biased towards Python, I know. I love Python. Whenever anyone in the office mentions anything about languages other than C++, all heads turn to me, expecting my Pytho-vangelism. But there is a &lt;em&gt;reason&lt;/em&gt; I love Python; there are several, in fact. I’ll go into them in a later post to keep this footnote short.&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal" dir="ltr"&gt;&lt;br /&gt;&lt;span style="font-size: 78%;"&gt;** I say ‘usually’ because Python is about as strongly-typed as C when it comes to primitive types. Different numeric formats will usually be automatically casted to the appropriate type for an expression. The expression “x = 5.5 + 10” is valid, “x = 5 + ‘32’” is not.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-4430456330530416650?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/DfOnzIVAqOc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/4430456330530416650/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2007/04/languages-vs-level-languages.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/4430456330530416650?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/4430456330530416650?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/DfOnzIVAqOc/languages-vs-level-languages.html" title="&amp;quot;Scripting Languages&amp;quot; vs &amp;quot;High Level Languages&amp;quot;" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>7</thr:total><feedburner:origLink>http://www.devjustinian.com/2007/04/languages-vs-level-languages.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGRHo_fSp7ImA9WhdUEUs.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-3146387141935819826</id><published>2006-05-13T04:17:00.000-07:00</published><updated>2011-09-27T15:08:45.445-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:08:45.445-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="emperor" /><title>Random Map Creation</title><content type="html">This weekend's project was a better random map generator. Last time, I just generated random points, and then for each system, went through a list of it's "neighboring" star systems, giving it a random chance to be connected to each system. That random chance declined, the more systems the first system became connected to.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.nilretain.org/media/screens/emperor/emperor_random_map.png"&gt;&lt;img alt="random map" height="300" src="http://www.nilretain.org/media/screens/emperor/emperor_random_map.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the new version, I'm using an algorithm much closer to one used to generate random mazes. I generate three-dimensional points weighted towards the center (in a &lt;a href="http://en.wikipedia.org/wiki/Gaussian_curve"&gt;"Gaussian" or "Normal distribution"&lt;/a&gt;) so that the core of the galaxy is much more dense. Then, I walk from a random star near the core outward like a tree to systems with no&lt;span style="color: red;"&gt;*&lt;/span&gt; star lane connections. Here's an image of a map generated by this new method. Notice the star lanes are &lt;i&gt;much&lt;/i&gt; less tangled than the old emperor map..&lt;br /&gt;&lt;br /&gt;The big thing left to consider is home world placement. I was previously going to add new clusters of stars to the map for each empire so I wouldn't have to risk choosing them a crappy home world, but that makes for a crappy map. This way I can lay out a nice huge galaxy, but I need to figure out my rules for home world placement...&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;span style="color: red;"&gt;*&lt;/span&gt; And by "no connections" I mean "a low number of connections" that's weighted so that a system with 0 connections has "no connections" 100% of the time, and the chance for other systems to have "no connections" falls off sharply the more connections they actually do have. Tweaking this weight allows for the average number of connections per system to go up without having systems connected to almost every other nearby system.&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-3146387141935819826?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/rF7cnc1bB2g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/3146387141935819826/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2006/05/random-map-creation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3146387141935819826?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/3146387141935819826?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/rF7cnc1bB2g/random-map-creation.html" title="Random Map Creation" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2006/05/random-map-creation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGRHo4fip7ImA9WhdUEUs.&quot;"><id>tag:blogger.com,1999:blog-8975517715597925299.post-1971564723137874096</id><published>2006-05-06T21:36:00.000-07:00</published><updated>2011-09-27T15:08:45.436-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-27T15:08:45.436-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="emperor" /><title>Senate-like bodies in Emperor</title><content type="html">&lt;p&gt;I've been thinking about the Senate from the original Emperor, and about some of my initial questions on how to model it in Emperor 2. Originally, everyone was a member of the Galactic Senate (though &lt;a href="about:%27http://tanick.livejournal.com/%27"&gt;Matt&lt;/a&gt; left the senate towards the end to join the NPC alliance called The Conclave), and I was unsure of how to handle new additions or departures.&lt;/p&gt; &lt;p&gt;Instead, voting bodies will be player-created. There will be no initial voting body, but two or more players may opt to form a Concord, which will allow them to hold votes amongst members, invite other players, etc. I'm debating making Alliances between players merely an advanced form of Concord, so that you could have multiple players in an Alliance that vote on actions of that Alliance, but I'm leaning towards making alliances simpler than that. (The same effect could be achieved by having all players who want to be an allied group form a Concord, and also all sign treaties of alliance with each other..)&lt;/p&gt; &lt;p&gt;Player-created Concords would allow for huge multi-player democratic galactic states, which makes me really really hot.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8975517715597925299-1971564723137874096?l=www.devjustinian.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/devjustinian/~4/pmjp2F30hQ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.devjustinian.com/feeds/1971564723137874096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.devjustinian.com/2006/05/senate-like-bodies-in-emperor.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/1971564723137874096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8975517715597925299/posts/default/1971564723137874096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/devjustinian/~3/pmjp2F30hQ4/senate-like-bodies-in-emperor.html" title="Senate-like bodies in Emperor" /><author><name>Justin</name><uri>http://www.blogger.com/profile/01620922692798774202</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-rlEW-_Dw5sE/ToJIrrenqoI/AAAAAAAAACk/MZ2_KIUHuLE/s220/eagle.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.devjustinian.com/2006/05/senate-like-bodies-in-emperor.html</feedburner:origLink></entry></feed>

