<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-5956904987508681406</id><updated>2010-01-01T18:08:17.580-06:00</updated><title type='text'>Tom Talks Too Much</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default?start-index=26&amp;max-results=25'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>120</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-7015374504826900729</id><published>2009-12-16T08:02:00.004-06:00</published><updated>2009-12-16T08:54:46.929-06:00</updated><title type='text'>More research notes for the future</title><content type='html'>Notes not for today, but maybe tomorrow.&lt;br /&gt;&lt;br /&gt;Catch phrase:&lt;br /&gt;Physically rich intelligence and autonomy.&lt;br /&gt;&lt;br /&gt;Research topics:&lt;br /&gt;* Domestic robots.&lt;br /&gt;* Learning and control of many sensors and actuators.&lt;br /&gt;* Dynamic environments. Real-time control. Anytime algorithms.&lt;br /&gt;* Life-long learning. Many concepts to relate and scale.&lt;br /&gt;&lt;br /&gt;Platforms:&lt;br /&gt;* World simulator. Parameterized, articulation, fluids, particles, sound and light tracing. The higher fidelity, the better.&lt;br /&gt;* Miniature off-the-shelf humanoids (such as the Aldebaran Nao) with many actuators and sensors.&lt;br /&gt;* Build on and in support of low-end computers, though allow scalability.&lt;br /&gt;&lt;br /&gt;Goals:&lt;br /&gt;* Open-source, liberally-licensed, productized-quality software projects.&lt;br /&gt;* Publicly accessible research, both in software (WebGL?) and articles/documentation.&lt;br /&gt;* Support a few grad students and as much academic freedom for them as possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-7015374504826900729?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/7015374504826900729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=7015374504826900729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/7015374504826900729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/7015374504826900729'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/12/more-research-notes-for-future.html' title='More research notes for the future'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-8656173127844629637</id><published>2009-12-01T09:49:00.002-06:00</published><updated>2009-12-01T09:53:37.701-06:00</updated><title type='text'>Solution density</title><content type='html'>In the real world, there are so many variables to consider that we'd never get anything done if considered all the options. Do we need to check the headlights of the neighbors cars to know if we should make oatmeal or pancakes for breakfast? Does the arrangement of dust particles on the back porch matter?&lt;br /&gt;&lt;br /&gt;We're good at focusing on the important details. Along with our experience, that allows to make quick decisions.&lt;br /&gt;&lt;br /&gt;I'm wondering what formulations exist for intractable problems in computer science that relate to solution density in the sparse area of world configurations that actually matters. Seems perhaps more meaningful than trying to measure actual problem size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-8656173127844629637?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/8656173127844629637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=8656173127844629637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/8656173127844629637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/8656173127844629637'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/12/solution-density.html' title='Solution density'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-727341549331467045</id><published>2009-11-24T10:07:00.002-06:00</published><updated>2009-11-24T10:16:32.309-06:00</updated><title type='text'>Dynamic constness</title><content type='html'>I've been thinking about how 'const' (C++ style) seems like a good idea but can cause pain in practice. It leads to duplicate definitions of methods (termed a "shadow world" by Anders Hejlsberg). It is really is hard to enforce statically.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.iwebthereforeiam.com/iwebthereforeiam/2009/07/c-and-const-correctness.html"&gt;See here for some great summaries.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Personally, I think the "bit" idea might work. That is, pointers are usually aligned to 4-byte boundaries. That gives two bits to play with. One of those bits might serve well for indicating constness in a dynamic fashion.&lt;br /&gt;&lt;br /&gt;Two different pointers to the same object. One carries const. The other doesn't. Enforcement happens at runtime. Sounds maybe doable.&lt;br /&gt;&lt;br /&gt;I'd need to think more about the container issue, though. First thought is that any const pointer is just deeply const.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-727341549331467045?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/727341549331467045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=727341549331467045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/727341549331467045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/727341549331467045'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/dynamic-constness.html' title='Dynamic constness'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-1966140802984382334</id><published>2009-11-20T10:39:00.002-06:00</published><updated>2009-11-20T10:42:46.118-06:00</updated><title type='text'>Course pre tests</title><content type='html'>I was just wondering what the value might be of testing folks at the beginning of a course on the subject matter. Some people come in with more knowledge than others.&lt;br /&gt;&lt;br /&gt;I'm afraid that without that, it's harder to see who's actually learning. And without that, it's harder to know when teaching has been effective.&lt;br /&gt;&lt;br /&gt;Or in other words, when evaluating learning, I'd like to subtract out those who already knew a lot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-1966140802984382334?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/1966140802984382334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=1966140802984382334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/1966140802984382334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/1966140802984382334'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/course-pre-tests.html' title='Course pre tests'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5940434935406200944</id><published>2009-11-18T10:27:00.003-06:00</published><updated>2009-11-18T10:59:03.601-06:00</updated><title type='text'>Exceptions, Processes, Java, &amp; Go</title><content type='html'>My opinions on exception/error handling is like so: I (and I believe most other programmers) don't want to spend the time to carefully analyze every possible unlikely error case as I go. Some cases should be carefully handled. But if things go bad in an unexpected fashion, I believe this is what should happen: clean up all resources safely and then crash.&lt;br /&gt;&lt;br /&gt;Seriously. And that's what exception handling does, if you design your code right. Either nice automatic resource cleanup (such as what's common in C#, Ruby, Python, C++, or upcoming in Java 7) or somewhat manual work such as Java finally blocks can take care of cleanup during crash.&lt;br /&gt;&lt;br /&gt;But crash? Yes. The question is the scope of the crash.&lt;br /&gt;&lt;br /&gt;The crash should affect the current request. For a web server, yep, that's the HTTP request. For a database, it would be the current query. For a GUI, it's the current user action.&lt;br /&gt;&lt;br /&gt;In olden Unix days, processes were designed to do one thing and do it well. Globals were less (though still somewhat) evil, since every process was sort of like its own object. Global death was also less evil. Therefore, the old-timey C 'assert' feature was somewhat reasonable. If you kill the process, it generally kills the whole pipe chain, which also effectively kills the user command-line request. Quite reasonable in most cases.&lt;br /&gt;&lt;br /&gt;If each response to a GUI command ran as its own process (interesting thought and probably been done by someone before), then killing that process by assert wouldn't be so evil.&lt;br /&gt;&lt;br /&gt;But most of us seem to have decided that multi-process is too heavy and slow. We don't really need all that process weight. Even to the extent of "stackless" and subthread coroutines like in Erlang, Stackless Python, and now Go. But in any case, whether threads or smaller, killing processes by assert is clearly scary. Instead of kill the "request", you crash the whole system. Bad news.&lt;br /&gt;&lt;br /&gt;Enter exception handling, which works well enough that almost all recent programming languages use very similar models with equivalents of 'throw' and 'catch'.&lt;br /&gt;&lt;br /&gt;What doesn't work is expecting that everyone will want to pay attention to every possible unlikely error case along the way. Checked exceptions in Java and manual error code checking in C lead to the same problem that people ignore errors. Checked exceptions lead to ignored errors? Yes. I've seen it a lot, especially in the pre-chaining days in Java. And still it's an easy thing to do today. Why? Because I don't know what to do with the checked exception, but I have to catch it. So I catch it. And um, if I'm extra lazy (and surely no one's lazy, right?), I just ignore it. Maybe I'm nice enough to log it or wrap it.&lt;br /&gt;&lt;br /&gt;But manual error code checking is just &lt;em&gt;begging&lt;/em&gt; to be ignored instead of likely to be ignored.&lt;br /&gt;&lt;br /&gt;And if you ignore errors, instead of crashing the request (and cleaning up resources), you end up in an unstable, dangerous program state.&lt;br /&gt;&lt;br /&gt;So, the fine folks behind Go (and yes, some them obviously have many more years under their belts than me) say &lt;a href="http://golang.org/doc/go_lang_faq.html#exceptions"&gt;they don't need exceptions and can't make them work with serious parallelism anyway&lt;/a&gt;. Nice and well, but expect most programmers to create unstable, buggy code.&lt;br /&gt;&lt;br /&gt;You &lt;em&gt;can't&lt;/em&gt; expect programmers to write "a good error message now", emphasis on the &lt;em&gt;now&lt;/em&gt;. If do, expect instead that laziness will lead to extreme bugs.&lt;br /&gt;&lt;br /&gt;Seriously, figure out how to crash a specific "request" with automatic cleanup when errors happen, or expect bugs.&lt;br /&gt;&lt;br /&gt;Oh, and figuring out how to produce only one error report in the logs for each failure is also awesome. Those of you who've worked in complex Java software (checked exceptions everywhere) can imagine what I mean by this. Similar issues seem easy to come by in a land of extreme parallelism, if you don't draw that "request" circle well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5940434935406200944?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5940434935406200944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5940434935406200944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5940434935406200944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5940434935406200944'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/exceptions-processes-java-go.html' title='Exceptions, Processes, Java, &amp; Go'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5104019336318051642</id><published>2009-11-17T22:38:00.002-06:00</published><updated>2009-11-17T22:42:45.636-06:00</updated><title type='text'>Fan language now Fantom</title><content type='html'>The Fan programming language (targeting the JVM, JavaScript, and the .NET CLR) has been &lt;a href="http://fantom.org/sidewalk/topic/821"&gt;officially renamed to Fantom&lt;/a&gt; to improve searchability.&lt;br /&gt;&lt;br /&gt;New domain name: &lt;a href="http://fantom.org/"&gt;fantom.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happily, file name extensions and tool names remain unchanged.&lt;br /&gt;&lt;br /&gt;It's a great language, and here's wishing them some good times ahead!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5104019336318051642?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5104019336318051642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5104019336318051642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5104019336318051642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5104019336318051642'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/fan-language-now-fantom.html' title='Fan language now Fantom'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-9206413640062279076</id><published>2009-11-16T14:26:00.002-06:00</published><updated>2009-11-16T14:30:50.378-06:00</updated><title type='text'>Replicating vs. Understanding</title><content type='html'>In reading a recent dialog in an IEEE Autonomous Mental Development newsletter, they are discussing the principles vs. black art of developmental robotics. I tend to think of it as a question:&lt;br /&gt;&lt;br /&gt;Do you want to focus more on creating intelligent robots or on understanding the details of intelligent beings actually operate? Both are meaningful questions, but principles of self-organization are not necessarily the same as the principles used in the end by a self-organized system. These topics sometimes get blurred, I think.&lt;br /&gt;&lt;br /&gt;But principles perhaps can be found in relation to either question. So maybe I blurred the original topic myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-9206413640062279076?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/9206413640062279076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=9206413640062279076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/9206413640062279076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/9206413640062279076'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/replicating-vs-understanding.html' title='Replicating vs. Understanding'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-3115150827834596791</id><published>2009-11-12T22:20:00.005-06:00</published><updated>2009-11-12T22:47:05.354-06:00</updated><title type='text'>So like Google's Go is from Mars: A first glance</title><content type='html'>Well, I heard about the new language Go this afternoon, and it sucked a bit of time that I'm really short on. First note is that Go is from Mars. Take this sample from &lt;a href="http://golang.org/doc/go_tutorial.html"&gt;the tutorial&lt;/a&gt;:&lt;pre&gt;&lt;br /&gt;for i := 0; i &lt; flag.NArg(); i++ {&lt;br /&gt;    if i &gt; 0 {&lt;br /&gt;        s += Space&lt;br /&gt;    }&lt;br /&gt;    s += flag.Arg(i);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Personally, I've never seen curly-based syntax without parens on fors and ifs. Just doesn't seem right to me. There's some other style in the language that's new to me. It looks so strange that I'd almost think it were an April Fools joke ... if it were April 1st, I guess.&lt;br /&gt;&lt;br /&gt;But to get past the initial shock of alien appearance, here's my take at a first glance. This is based on their docs. I haven't actually tried it out.&lt;br /&gt;&lt;br /&gt;The good:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Pure interface, simple struct, no-inheritance, straight functions OO. If you've read other posts on my blog, you can imagine I'd love this. I'm glad someone was brave enough to try it out.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Super fast compiler. C and C++ stink in this arena.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fast execution, supposedly near native.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lightweight threads and message passing, a la Erlang. Scalability should be sweet.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Normal goodies like closures and type inference.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Opinionated in some things: UTF-8 source, public/private by naming convention (caps for public).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fairly simple namespacing.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;BSD licensing.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It's from Google. Google has $$$$$$. They can push things forward.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The bad:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The syntax. It's just grating to me at this point.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Too much focus on ad hoc solutions rather than general principles.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No concept for nullable pointers vs. not.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No operator overloading.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;No easy interfacing to C++.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Is it cross-platform (meaning at least Windows, Mac, and Linux) yet? I'm not sure.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The ugly:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Um, no exception handling. Seriously. So, um, expect to have to manually check for errors all the time. Which means, expect average programmers to ignore lots of errors and write buggy code.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Well, I'd complain about this if there were exceptions, but there's no mechanism for automatic resource cleanup (beyond garbage collection) that I could find. Less need without exceptions, but it still seems like a glaring hole to me. Also, if the closures and&lt;br /&gt;anonymous functions are good enough, maybe I'm also overstating this one.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Probably forgetting something.&lt;br /&gt;&lt;br /&gt;Between the ugly and the fact that they aren't really production-ready yet, I think I'll just keep a watch on it for now. What I really want is language that IDE-friendly and human-friendly, compiles and runs like lightning (including fast starts and low memory usage), and instantly consumes C and C++ libraries. Oh, and doesn't make it painfully easy to ignore errors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-3115150827834596791?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/3115150827834596791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=3115150827834596791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/3115150827834596791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/3115150827834596791'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/so-like-googles-go-is-from-mars-first.html' title='So like Google&apos;s Go is from Mars: A first glance'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-461808456650000819</id><published>2009-11-11T09:39:00.002-06:00</published><updated>2009-11-11T09:44:24.057-06:00</updated><title type='text'>GPGPU in the browser</title><content type='html'>This &lt;a href="http://mozillalabs.com/jetpack/2009/11/10/jetpack-0-5-contest-a-winner/"&gt;winning entry in the Mozilla Labs Jetpack competition&lt;/a&gt; might get many of the details wrong (as examples, why part of Jetpack instead of as its own extension and how it uses Nvidia CUDA instead of a cross-vendor solution), but I'm still super excited that it has drawn attention to putting GPGPU in the browser. So, three cheers for Alexander Miltsev!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-461808456650000819?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/461808456650000819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=461808456650000819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/461808456650000819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/461808456650000819'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/gpgpu-in-browser.html' title='GPGPU in the browser'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5705424378082404531</id><published>2009-11-03T12:32:00.002-06:00</published><updated>2009-11-03T12:37:41.591-06:00</updated><title type='text'>Inverse Programming Assignments</title><content type='html'>I was just wondering today if there was a good way to let students play the part of the computer instead of the programmer. That is, they would be given a program and be required to push and pop off the stack, change variable values, allocate objects on the heap, deal with arrays, handle conditionals and loops, choose which line to execute next, and so on.&lt;br /&gt;&lt;br /&gt;It might be possible on paper, in board game format, or maybe more reasonable as a video game of sorts. Increasing levels of complexity (introducing new language features and machine concepts) might be nice.&lt;br /&gt;&lt;br /&gt;Just wondering if playing the computer would help some folks with understanding the system better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5705424378082404531?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5705424378082404531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5705424378082404531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5705424378082404531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5705424378082404531'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/inverse-programming-assignments.html' title='Inverse Programming Assignments'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5432327891562881545</id><published>2009-11-03T11:54:00.003-06:00</published><updated>2009-11-03T11:59:14.224-06:00</updated><title type='text'>Liberally licensed embeddable web server for C or C++?</title><content type='html'>I've done some searching in the past but couldn't find a liberally licensed embeddable web server for C or C++. That surprised me. I'm so used to having multiple good options in Java (such as Jetty) or built-in web servers say in Fan or Ruby.&lt;br /&gt;&lt;br /&gt;Two options I've looked at are libmicrohttpd (but it's LGPL which causes too much bother) and lighttpd (but it's not really designed to have an embedded option so far as I can tell, which rather surprises me). Anything else out there?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5432327891562881545?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5432327891562881545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5432327891562881545' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5432327891562881545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5432327891562881545'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/11/liberally-licensed-embeddable-web.html' title='Liberally licensed embeddable web server for C or C++?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-3879961632117677752</id><published>2009-10-20T16:32:00.002-05:00</published><updated>2009-10-20T17:03:29.717-05:00</updated><title type='text'>Member access syntax: dots, brackets, and functions</title><content type='html'>I've spent some time thinking about common alternative syntaxes for accessing object members. By members, I mean methods or fields or whatever. For example, we have the struct dot syntax:&lt;pre&gt;&lt;br /&gt;person.age&lt;br /&gt;array.length&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And so on. C++ extended C to use the same syntax for method calls:&lt;pre&gt;&lt;br /&gt;person.age() or person.getAge()&lt;br /&gt;array.length()&lt;br /&gt;pen.moveTo(x, y)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Languages like Eiffel, Ruby, or Fan that treat all method calls as abstract messages don't distinguish between field access and method calls.&lt;br /&gt;&lt;br /&gt;Anyway, then we have array or hashtable access syntax, a different kind of membership:&lt;pre&gt;&lt;br /&gt;persons[4]&lt;br /&gt;properties["background"]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And languages like JavaScript unify the two; &lt;code&gt;properties.background&lt;/code&gt; and &lt;code&gt;properties["background"]&lt;/code&gt; mean the same thing. There's some nicety to that.&lt;br /&gt;&lt;br /&gt;But I'm working through a series of issues that will eventually get tangled. First, I need to go back to C. I can abstract member access there, too:&lt;pre&gt;&lt;br /&gt;age(person)&lt;br /&gt;length(array)&lt;br /&gt;moveTo(pen, x, y)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I'll pretend to have those namespaced for the moment (since otherwise in C they'd have uglier names), and if I have dynamic dispatch on the first (or more) arguments, this syntax could have the same meaning as virtual methods in C++ or Java or whatnot. For example, MATLAB can do OOP method dispatch with standard function call syntax.&lt;br /&gt;&lt;br /&gt;So the syntax question becomes do you like nested function calls or postfix member dot access? I think the postfix (or somewhat infix) C++ style is easier to understand:&lt;pre&gt;&lt;br /&gt;toUpper(firstName(person)) vs.&lt;br /&gt;person.firstName.toUpper&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The chain is just easier to read. And apparently the C# folks thought so enough that they introduced extension methods. A semi-complicated way of allowing dot chain syntax. Why not just make a language such that both syntaxes are equivalent?&lt;br /&gt;&lt;br /&gt;One reservation. Here's that tangle to which I was referring. Lets look at arrays again. Why do we really need a separate array access syntax vs. function call syntax? An array is just a function that hardcodes the responses, in one way of looking at it. So, like Scala or MATLAB, we could make them the same:&lt;pre&gt;&lt;br /&gt;persons(4) vs.&lt;br /&gt;persons[4]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And that frees up brackets for other uses (like generics in Scala). But, if like JavaScript, we consider struct membership and array-ish access to be the same, then 'persons[4]' is the same as 'persons.4', and that would be the same as '4(persons)', and all the worse if it's the same as 'persons(4)'.&lt;br /&gt;&lt;br /&gt;So, it tells member that array/hashtable lookup should best be separate syntax from function calls. I like it ('persons[4]') as shorthand for notions like 'persons.get(4)'. I think otherwise the unification of concepts leads to entanglement.&lt;br /&gt;&lt;br /&gt;At least, I haven't worked out another solution I like better.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-3879961632117677752?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/3879961632117677752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=3879961632117677752' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/3879961632117677752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/3879961632117677752'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/10/member-access-syntax-dots-brackets-and.html' title='Member access syntax: dots, brackets, and functions'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-2708309272101783046</id><published>2009-10-09T09:10:00.002-05:00</published><updated>2009-10-09T09:14:01.646-05:00</updated><title type='text'>Teaching Ideas: Quick Syllabus</title><content type='html'>I've been thinking about teaching ideas. I'm still rather sold on the weekly, multiple choice, open book quiz thing.&lt;br /&gt;&lt;br /&gt;I think I've also decided that the syllabus should fit in one page. I'd love to get to real content even the first lecture. And the first quiz should include questions about the syllabus.&lt;br /&gt;&lt;br /&gt;Unrelated question: Could it possibly be easier to introduce Python and then teach Java in one semester than just to jump directly into Java? Maybe for some people. Not sure I'd be that brave (or be able to get approval) to try it out, though.&lt;br /&gt;&lt;br /&gt;I do hope to get the chance to teach soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-2708309272101783046?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/2708309272101783046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=2708309272101783046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/2708309272101783046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/2708309272101783046'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/10/teaching-ideas-quick-syllabus.html' title='Teaching Ideas: Quick Syllabus'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-4106351031802771599</id><published>2009-10-07T17:29:00.002-05:00</published><updated>2009-10-07T17:33:49.897-05:00</updated><title type='text'>Tamarin Nanojit</title><content type='html'>I sometimes get a hankerin' for programming languages. And I love script-style execution and high speed. I also love fast start-up and low memory consumption. Both of those points are making me more and more shy of the JVM.&lt;br /&gt;&lt;br /&gt;So, how do you get your hands on a well-maintained cross-platform JIT? Maybe &lt;a href="https://developer.mozilla.org/En/Nanojit"&gt;Nanojit&lt;/a&gt; (used by Tamarin and therefore Flash; also used by Firefox 3.5's TraceMonkey) is a good choice. Looks small and fast. Maybe even tasty. Something to keep in mind perhaps.&lt;br /&gt;&lt;br /&gt;Tamarin also includes a garbage collector, as a related morsel. Here's hoping it's all thread-safe.&lt;br /&gt;&lt;br /&gt;Again, just notes for the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-4106351031802771599?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/4106351031802771599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=4106351031802771599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/4106351031802771599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/4106351031802771599'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/10/tamarin-nanojit.html' title='Tamarin Nanojit'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-6196621336092719725</id><published>2009-10-06T13:04:00.002-05:00</published><updated>2009-10-06T13:13:55.455-05:00</updated><title type='text'>Parameterized Subtasks</title><content type='html'>I've been studying logical planning and hierarchical reinforcement learning. It's common to see parameterized subtasks. For example, "grab the apple" vs. "grab the box". Those could be seen as function call "grab(apple)" and grab(box)".&lt;br /&gt;&lt;br /&gt;Some of the logical systems manage to deal with parameterized tasks really as parameters, using some strategy for plugging in possible argument values. But not all. It's easier to look through the options if you just instantiate every possible case (or at least the relevant cases???). So instead of the general "grab(x)", you deal with "grab(apple)" and "grab(box)" as individual cases.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;All&lt;/em&gt; of the reinforcement learning algorithms I've seen so far deal with it this way (instantiating each individual case). But it's hard to read every paper. Maybe I just haven't seen the right papers yet. Anyway, depending on the representation of the arguments, it seems like you lose a lot of ability to learn general concepts by learning each of the instantiations from scratch.&lt;br /&gt;&lt;br /&gt;I also wonder about genetic programming. Do they generate parameterized functions there? Or do they usually just generate lower-level constructs?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-6196621336092719725?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/6196621336092719725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=6196621336092719725' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/6196621336092719725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/6196621336092719725'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/10/parameterized-subtasks.html' title='Parameterized Subtasks'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5212066328792055821</id><published>2009-10-02T10:29:00.002-05:00</published><updated>2009-10-02T10:39:50.865-05:00</updated><title type='text'>LDS General Conference</title><content type='html'>The 179th Semiannual General Conference of the Church of Jesus Christ of Latter-day Saints is this Saturday and Sunday (October 3-4). It's a chance to receive guidance from living prophets, apostles, and others chosen by Christ. (For those of you who aren't familiar with Mormonism, yes, I meant what I said.) Anyway, &lt;a href="http://www.lds.org/broadcast/gc/0,5161,8870,00.html"&gt;you can watch most of it online&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sadly not available for Linux (or is there some way to view or listen to Windows Media?). We've viewed byu.tv streams on Mac and Windows before. It's usually high quality video, even if the interface on the site is quirky.&lt;br /&gt;&lt;br /&gt;Anyway, I highly recommend tuning in if you get the chance. Don't expect raw entertainment, though. It's a rather formal occasion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5212066328792055821?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5212066328792055821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5212066328792055821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5212066328792055821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5212066328792055821'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/10/lds-general-conference.html' title='LDS General Conference'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-2570750353090557122</id><published>2009-09-29T21:11:00.002-05:00</published><updated>2009-09-29T21:23:12.270-05:00</updated><title type='text'>Yet Another Cognitive Architecture (or Web Framework)</title><content type='html'>There's nothing new under the sun.&lt;br /&gt;&lt;br /&gt;Back when I followed java.net better, it seemed like several times a week I'd see passing announcements of new Java web frameworks. &lt;a href="http://java-source.net/open-source/web-frameworks"&gt;This list (on java-source.net)&lt;/a&gt; shows at least a few of them.&lt;br /&gt;&lt;br /&gt;Studying AI and machine learning again, seems like I'm getting some deja vous. Everyone has another algorithm, or even full cognitive architecture (though that term itself is only used in certain circles). Apparently folks &lt;a href="http://www.google.com/search?q=%22yet+another+cognitive+architecture%22"&gt;noticed this even years ago&lt;/a&gt;. I'd like to eat more pudding, personally.&lt;br /&gt;&lt;br /&gt;Side note, sort of interesting to see Google suggestions for searches beginning with "yet another".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-2570750353090557122?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/2570750353090557122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=2570750353090557122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/2570750353090557122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/2570750353090557122'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/09/yet-another-cognitive-architecture-or.html' title='Yet Another Cognitive Architecture (or Web Framework)'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-3839443608949454339</id><published>2009-09-18T14:43:00.001-05:00</published><updated>2009-09-18T14:45:11.223-05:00</updated><title type='text'>WebGL (3D graphics) in Firefox and WebKit</title><content type='html'>This &lt;a href="http://blog.vlad1.com/2009/09/18/webgl-in-firefox-nightly-builds/"&gt;news on WebGL&lt;/a&gt; is seriously cool. This &lt;a href="http://www.raphkoster.com/2009/08/05/webgl-vs-o3d/"&gt;O3D vs. WebGL&lt;/a&gt; concept is also interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-3839443608949454339?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/3839443608949454339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=3839443608949454339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/3839443608949454339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/3839443608949454339'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/09/webgl-3d-graphics-in-firefox-and-webkit.html' title='WebGL (3D graphics) in Firefox and WebKit'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-6491213159536351388</id><published>2009-09-18T13:31:00.002-05:00</published><updated>2009-09-18T13:41:48.045-05:00</updated><title type='text'>Taming C++</title><content type='html'>For certain reasons, I've been coding C++ recently. While I'd learned C++ before, this is the most consistently I've dug at it for a while.&lt;br /&gt;&lt;br /&gt;Thing is, I don't like the std (STL) way of looking at things. I'm glad that C++ has a more standard library, and Boost tries to fit the same mold, but there's still a large diversity of style vs. the comparative uniformity in Java land or some other languages.&lt;br /&gt;&lt;br /&gt;So, I'm going to the pain of adapting C++ to my style, wrapping various external libraries. (Trying to keep dependencies to a minimum, though.) Sort of a domain-specific view of the world, as is so common for C and C++ coding.&lt;br /&gt;&lt;br /&gt;End result is that I've figured out how to make non-nullable opaque handle types with optional auto-disposal (simplified beyond auto_ptr) and whatnot. Some simple templates, too, but nothing crazy. Made a type similar to Scala's Option to get nullable when I want it.&lt;br /&gt;&lt;br /&gt;I also have the build incrementally making sublibraries to enforce dependency ordering.&lt;br /&gt;&lt;br /&gt;And Eclipse CDT is autocompleting and so on across most of the system quite nicely. Debugger's not working in Eclispe, though.&lt;br /&gt;&lt;br /&gt;The end result isn't perfect, but it's really not that painful at the moment. Lots of tasks not solved yet, though, like IO, character set conversion, networking, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-6491213159536351388?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/6491213159536351388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=6491213159536351388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/6491213159536351388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/6491213159536351388'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/09/taming-c.html' title='Taming C++'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5098593915291138280</id><published>2009-09-14T10:19:00.002-05:00</published><updated>2009-09-14T10:31:15.116-05:00</updated><title type='text'>Particle-Based Physics</title><content type='html'>I'm interested in rather detailed (and still high-speed) world simulation. I still don't know all what's out there to handle things for me. I have been learning Bullet Physics. What I'll want someday, and what I'm not sure Bullet provides is fluid simulation. I want air and water.&lt;br /&gt;&lt;br /&gt;Seems like the most straightforward way to do this is to simulate particles. Reminds me of smoothed particle hydrodynamics models that I worked with a bit at LANL many years ago. Seems like if you represent matter as particles, and those particles have properties to represent how they bond with each other based on proximity and whatnot, then you can get water and air resistance and so on.&lt;br /&gt;&lt;br /&gt;If bonds can be more or less rigid, and if you prebond some particles, you can make rigid bodies, too. 8 particles with strong, rigid bonds and zero radius could make a box. 2 particles with positive radii could make a capsule. Strong yet flexible bonds make soft bodies, like what Bullet provides. But if the bonds are still breakable (and don't easily reform), seems like you could simulate awesomeness like breaking objects into pieces or otherwise damaging them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://legacy.wolfire.com/rotationconstraintpaper/paper.html"&gt;Sauerbraten's ragdoll physics system&lt;/a&gt; seems related, too.&lt;br /&gt;&lt;br /&gt;Oh, and of course there's also a relation to finite element analysis.&lt;br /&gt;&lt;br /&gt;The question is if you could optimize dynamic resolution and certain common cases such that the generalized system could still run at high speed. Seems like it could be super awesome if so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5098593915291138280?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5098593915291138280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5098593915291138280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5098593915291138280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5098593915291138280'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/09/particle-based-physics.html' title='Particle-Based Physics'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-5654155754161761074</id><published>2009-09-03T12:45:00.002-05:00</published><updated>2009-09-03T12:48:48.931-05:00</updated><title type='text'>Uncharted 2 Cinema Mode</title><content type='html'>This peek at &lt;a href="http://www.youtube.com/watch?v=CG5kwtsDXfE"&gt;Uncharted 2 machinima support&lt;/a&gt; looks pretty good. Much nicer than Spore GA in many ways, but it doesn't seem to have built-in, high-level scripting support. Probably lower-level mods could cover in some ways.&lt;br /&gt;&lt;br /&gt;I still think high-level machinima is much more the future of home animation than traditional tools like, say, Blender. I guess that's part of why the Blender Game Engine seems so important.&lt;br /&gt;&lt;br /&gt;Got to make it easy. Simulate and automate. That's more approachable and, in the end (probably sooner than later), likelier to be more realistic than than expecting people to do all that stuff manually.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-5654155754161761074?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/5654155754161761074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=5654155754161761074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5654155754161761074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/5654155754161761074'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/09/uncharted-2-cinema-mode.html' title='Uncharted 2 Cinema Mode'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-170208538233039192</id><published>2009-09-02T09:10:00.003-05:00</published><updated>2009-09-02T09:35:54.368-05:00</updated><title type='text'>Unit Tests in the Core Language for Improved Duckiness</title><content type='html'>I've thought some about how you could make a language that looks ducky (no types required) but still is semi-statically typed for speed, toolability, and so on. One option is the run-time tracing option used by Psyco, TraceMonkey, and so on. That is, see what types are needed as the program runs and JIT specialized code on the fly.&lt;br /&gt;&lt;br /&gt;Another alternative, really making things more static is to make unit tests an important part of compiling code. Sort of like how to need to give examples to C++ for template creation. It only knows what typed versions it needs to generate if you try to use those types.&lt;br /&gt;&lt;br /&gt;For example:&lt;pre&gt;&lt;br /&gt;def factorial(n, one) = {&lt;br /&gt;  var result = one&lt;br /&gt;  while (n &gt; one) {&lt;br /&gt;    result *= n&lt;br /&gt;    n -= one&lt;br /&gt;  }&lt;br /&gt;  result&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;No types to be seen. Expected available operations ('&gt;', '*', '-'), yes. Side note, that need to specify the "one" above is annoying, but I don't want to think of anything more clever at the moment.&lt;br /&gt;&lt;br /&gt;Now, in my unit tests, I could say this:&lt;pre&gt;&lt;br /&gt;assertThat(1) == factorial(1, 1)&lt;br /&gt;assertThat(24) == factorial(4, 1)&lt;br /&gt;assertThat(6.0) == factorial(3.0, 1.0)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If the main compiler/builder is aware of the unit tests (which I should have anyway, right?), it is aware of which types are available for the function/class/whatever in question. So, 'factorial' clearly needs both integer and floating-point (or whatever) implementations. I'm being vague on the language specifics here. Also, the main code base could also be used for inference. The unit tests just have a chance to go beyond that.&lt;br /&gt;&lt;br /&gt;Such a system should even be able to determine which spots are co or contravariant. Not sure how many examples would be needed. I'm not even sure if this a good idea, but it's interesting to think about. Maybe some type placeholders, like templates in C++, would still be helpful.&lt;br /&gt;&lt;br /&gt;This technique wouldn't require unit tests to be embedded in the main code. I personally tend to like the current common technique of parallel dirs. Main code here, tests over there.&lt;br /&gt;&lt;br /&gt;Oh, and I also like screaming fast compilers. I'm afraid fanciness like this might slow things down just a tad ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-170208538233039192?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/170208538233039192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=170208538233039192' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/170208538233039192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/170208538233039192'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/09/unit-tests-in-core-language.html' title='Unit Tests in the Core Language for Improved Duckiness'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-8433064148516591275</id><published>2009-08-18T12:37:00.002-05:00</published><updated>2009-08-18T12:42:37.097-05:00</updated><title type='text'>Learning New without Losing Old</title><content type='html'>I have lots of opinions on how to do certain things (programming, robot AI, ...). In order to really ingest and learn new ideas, I often have to let go of my preconceptions, at least temporarily. If I dive deep into new ideas, they can wash out my prior perspective. And some of that perspective probably has some good value.&lt;br /&gt;&lt;br /&gt;So sometimes I try to correlate ideas. What's the big picture? How does what I know relate to what I'm learning? If I can figure out where they fit both fit on the big map, I can learn better and retain what's best from before.&lt;br /&gt;&lt;br /&gt;It's just easier to either (1) hang on to old ideas without allowing new ones in or (2) just give up and focus on the new. It takes effort to assemble grand unification theories on the fly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-8433064148516591275?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/8433064148516591275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=8433064148516591275' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/8433064148516591275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/8433064148516591275'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/08/learning-new-without-losing-old.html' title='Learning New without Losing Old'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-4693520936325918796</id><published>2009-08-03T15:53:00.002-05:00</published><updated>2009-08-03T16:05:02.954-05:00</updated><title type='text'>CMake rocks!</title><content type='html'>When I first ran across &lt;a href="http://www.cmake.org/"&gt;CMake&lt;/a&gt; being used, I thought "Oh no, another build system!" That means I need to install some lame software to build this thing.&lt;br /&gt;&lt;br /&gt;After seeing it used some more and reading about it and thinking about alternatives, I've changed my tune.&lt;br /&gt;&lt;br /&gt;If you need to build C or C++ (can't speak for other things), and you want to be cross platform (though I haven't tried cross-platform yet, it does seem promising), and you don't want too much pain, I currently recommend CMake. I haven't tried every alternative out there, which is why I don't give a stronger endorsement. But from what I've seen so far, CMake rocks.&lt;br /&gt;&lt;br /&gt;And it definitely beats writing Makefiles (and I'm scared of autoconf, too, for some reason).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-4693520936325918796?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/4693520936325918796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=4693520936325918796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/4693520936325918796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/4693520936325918796'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/08/cmake-rocks.html' title='CMake rocks!'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5956904987508681406.post-4750716984954404603</id><published>2009-07-24T08:43:00.006-05:00</published><updated>2009-07-24T15:09:34.489-05:00</updated><title type='text'>Spore Galactic Adventures for Machinima?</title><content type='html'>My kids earned money to buy Spore after enjoying the free Creature Creator trial. I had though, "Wow, this could be great for &lt;a href="http://en.wikipedia.org/wiki/Machinima"&gt;machinima&lt;/a&gt; (making movies)!", but it wasn't really all there enough. And then my kids earned enough to buy Spore Galactic Adventures. After trying that out, I was really excited about the possibilities. But it's still not all there.&lt;br /&gt;&lt;br /&gt;Here's an example of something I could do:&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-153abd8f3eca1e34" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DqAAAAJRKzAPfu3a7ks9WIkYJqTFrz5iljifkmttDeh3ApzB19os2Sk-foDQBQTuOBSxxUqCbMKRLu7uK7MPycPbMpTPLurDLxzGsIS2fLMSrVOvZSthpWqYM27u2p-tHOlTmzfYZ0b2oc4tcetpGUgFsGD69k-Ns70rl1dIxJ4XpY9RmTUTRnx6ak6nM9hRzMLxFZ4QibI8LWcUP1vExyJUT-swMe1li_95tMEpXb6m79JO_%26sigh%3DuFSl28drhvZ4UKaZQSn0UI_dSpk%26begin%3D0%26len%3D86400000%26docid%3D0&amp;amp;nogvlm=1&amp;amp;thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3D153abd8f3eca1e34%26offsetms%3D5000%26itag%3Dw320%26sigh%3D5awTfXcYklJniiHFijdtxNpHTPc&amp;amp;messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;embed width="320" height="266" src="http://www.blogger.com/img/videoplayer.swf?videoUrl=http%3A%2F%2Fvp.video.google.com%2Fvideodownload%3Fversion%3D0%26secureurl%3DqAAAAJRKzAPfu3a7ks9WIkYJqTFrz5iljifkmttDeh3ApzB19os2Sk-foDQBQTuOBSxxUqCbMKRLu7uK7MPycPbMpTPLurDLxzGsIS2fLMSrVOvZSthpWqYM27u2p-tHOlTmzfYZ0b2oc4tcetpGUgFsGD69k-Ns70rl1dIxJ4XpY9RmTUTRnx6ak6nM9hRzMLxFZ4QibI8LWcUP1vExyJUT-swMe1li_95tMEpXb6m79JO_%26sigh%3DuFSl28drhvZ4UKaZQSn0UI_dSpk%26begin%3D0%26len%3D86400000%26docid%3D0&amp;amp;nogvlm=1&amp;amp;thumbnailUrl=http%3A%2F%2Fvideo.google.com%2FThumbnailServer2%3Fapp%3Dblogger%26contentid%3D153abd8f3eca1e34%26offsetms%3D5000%26itag%3Dw320%26sigh%3D5awTfXcYklJniiHFijdtxNpHTPc&amp;amp;messagesUrl=video.google.com%2FFlashUiStrings.xlb%3Fframe%3Dflashstrings%26hl%3Den" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Talk about low res.&lt;br /&gt;&lt;br /&gt;And they don't have recording of dialog. And it stops recording automatically every couple of minutes or so and some features of interaction are lacking and ...&lt;br /&gt;&lt;br /&gt;You can't play the games themselves unless you own Spore Galactic Adventures either. So all I can really export is just the movies, which are lacking.&lt;br /&gt;&lt;br /&gt;Could someone please make a serious, general-purpose, high-quality video machinima engine, please? I'm interested in it myself, and I might take my research directions into that someday (as well as robotics and AI which I focus on more at this point). Cause I can say that Spore GA is &lt;em&gt;way&lt;/em&gt; higher level and easier to work with than Blender (even the Blender Game Engine). I personally don't mind lower quality for easier work. I'm not a full studio.&lt;br /&gt;&lt;br /&gt;Spore GA might still be good for storyboarding, though, even if it's still lacking for movie production.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5956904987508681406-4750716984954404603?l=tomobag.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=153abd8f3eca1e34&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://tomobag.blogspot.com/feeds/4750716984954404603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5956904987508681406&amp;postID=4750716984954404603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/4750716984954404603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5956904987508681406/posts/default/4750716984954404603'/><link rel='alternate' type='text/html' href='http://tomobag.blogspot.com/2009/07/spore-galactic-adventures-for-machinima.html' title='Spore Galactic Adventures for Machinima?'/><author><name>Tom</name><uri>http://www.blogger.com/profile/15808034942220416445</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04018268712918342349'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>