<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23038262</id><updated>2011-11-15T05:51:00.281-06:00</updated><title type='text'>Tensten's Journal</title><subtitle type='html'>I'm a latecomer to this "transcribe your thoughts" thing, so we'll see what comes of it.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23038262.post-7716327931852333226</id><published>2007-09-04T21:33:00.001-05:00</published><updated>2007-09-04T21:33:32.390-05:00</updated><title type='text'>Testing MarsEdit</title><content type='html'>Have you heard of &lt;a href="http://www.red-sweater.com/marsedit/"&gt;MarsEdit&lt;/a&gt;? It's a weblog editing tool. I'm impressed with it's ability to automatically ascertain the blog software used for this site. However, it was not able to piece together about the &lt;a href="http://www.realmacsoftware.com/rapidweaver/"&gt;RapidWeaver&lt;/a&gt; version of &lt;a href="http://www.tensten.org/"&gt;this site&lt;/a&gt;. I'll have to do some research into ways to get the site editable by this tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-7716327931852333226?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/7716327931852333226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=7716327931852333226' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/7716327931852333226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/7716327931852333226'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2007/09/testing-marsedit.html' title='Testing MarsEdit'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114754073106063916</id><published>2006-05-13T12:07:00.000-05:00</published><updated>2006-05-13T12:18:51.070-05:00</updated><title type='text'>E3, yo</title><content type='html'>Long delay on the next post? Electronic Entertainment Expo? Coincidence? Perhaps not. &lt;a href="http://www.rpgamer.com/games/disgaea/disgaea2/disgaea2ss.html"&gt;Chew on this&lt;/a&gt; to tide you over.&lt;br /&gt;&lt;br /&gt;In the meantime, I'm looking around for a different host for the journal here. Apparently Google/Blogger here won't allow me to post C/C++ document files. The second article in the Software Robustness series already has too much source code to run inline. I have to find a site that allows straight FTP posting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114754073106063916?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114754073106063916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114754073106063916' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114754073106063916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114754073106063916'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/05/e3-yo.html' title='E3, yo'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114522977655683376</id><published>2006-04-16T18:19:00.000-05:00</published><updated>2006-04-16T18:22:56.556-05:00</updated><title type='text'>Source code and the web</title><content type='html'>I obviously need to dig up a better way of transferring source code into the blog here. Having to lt; and gt; my angle brackets is going to get old quickly. Anyone have a system for pretty-printing source in HTML?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114522977655683376?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114522977655683376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114522977655683376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114522977655683376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114522977655683376'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/04/source-code-and-web.html' title='Source code and the web'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114522866681174559</id><published>2006-04-16T18:00:00.000-05:00</published><updated>2006-04-17T00:02:03.536-05:00</updated><title type='text'>Building robust software, part 1</title><content type='html'>A few years ago, I got a call from a former employer looking for game industry tips on software quality with applicability in the automotive industry. That original discussion never turned into the imagined series of speaking tours, preaching to the car makers how they should be crafting their software. Instead, I've had years to stew over the lessons I've learned on engineering practice, without an outlet. This is the first of a series of articles about the subject. The goal is to codify some ideas about how to build a robust piece of software.&lt;br /&gt;&lt;br /&gt;A word on languages: I'm talking about C/C++ here. Since those are the languages I work in most often, they're where I feel the greatest comfort making comments. They are fairly low-level languages that expose more than hide the complexities of software development. Higher level languages like Java, C#, Python and the like are built to hide some of the difficulty. In my experience, though, if you do not understand the steps they are taking to hide complexity, you can get yourself into just as much trouble as in the low-level languages.&lt;br /&gt;&lt;br /&gt;By far the most common source of errors/crashes I've seen in C/C++ programs is the unchecked use of invalid pointers. (Are there any non-programmers reading this? A pointer is just the address of a region of memory.) Pointers are the classic double-edged sword. A fundamental element of programming, they are simultaneously both powerful and dangerous. Pointer problems largely fall into one of three categories.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Not checking return values.&lt;/b&gt;This one is so common, they actually teach it in school. You ask for a pointer to a address, and then use it without making sure it points where you think it does. Even a read through an invalid pointer can crash you. Is it non-zero? Does it point somewhere inside your program's address space? Is the thing on the other side of it still what you think it is?&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Uninitialized memory.&lt;/b&gt; Suppose you made a structure, I asked for the value of a pointer in your structure, and discover that you never initialized that field? What am I getting back? What is the value of uninitialized memory? Sadly, it can look like anything. Now obviously you should initialize your pointers to known values if anyone (even you) can get at them later. But we also want a way to recognize uninitialized values for what they are. That way when the operating system tells me my program has been shut down because it tried to access (read or write) memory location 0xABABABAB, I know exactly why.&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Keeping a pointer to memory you no longer own.&lt;/b&gt; This is the number one source for bad data in the middle of an object that, I swear, was good just a second ago. Problems here are especially common in systems with freelist-style memory allocators that tend to hand out the address most recently returned to them. Consider this example:&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;typedef struct _A&lt;br /&gt;{&lt;br /&gt;    int val;&lt;br /&gt;} A;&lt;br /&gt;&lt;br /&gt;typedef struct _B&lt;br /&gt;{&lt;br /&gt;    int* val_ptr;&lt;br /&gt;} B;&lt;br /&gt;&lt;br /&gt;static void kill_me( A* a );&lt;br /&gt;static B* b = 0;   // NULL is just a typedef for 0&lt;br /&gt;&lt;br /&gt;int main( )&lt;br /&gt;{&lt;br /&gt;    A* a = (A*) malloc( sizeof( A ) );&lt;br /&gt;    if( a )&lt;br /&gt;    {&lt;br /&gt;        kill_me( a );&lt;br /&gt;        a-&gt;val = 1;  // a no longer points to valid memory&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if( b &amp;&amp; b-&gt;val_ptr )&lt;br /&gt;    {&lt;br /&gt;        printf( "B's val: %i\n", *b-&gt;val_ptr );&lt;br /&gt;    }&lt;br /&gt;    free( b );&lt;br /&gt;    return( 0 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void kill_me( A* a )&lt;br /&gt;{&lt;br /&gt;    free( a );&lt;br /&gt;    b = (B*) malloc( sizeof( B ) );&lt;br /&gt;    // because A and B are the same size, B's malloc may&lt;br /&gt;    // well have the same address as A&lt;br /&gt;    // even if there's something after A on the heap&lt;br /&gt;    b-&gt;val_ptr = 0;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;I can't say what this program will do when it runs. If the address of b is the same as a, it will crash when it derefences the value 1 as if it were a valid pointer. Then again, the addresses could be different, and it will work, obfuscating the bug until 4 AM the night before you're ready to ship. This is an admittedly contrived example, but problems like this happen all the time in software development, often in seemingly innocuous cleanup code.&lt;br /&gt;&lt;br /&gt;A dream system will provide an easy way of resolving all those problems. In part 2 of this series, we'll try to develop such a system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114522866681174559?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114522866681174559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114522866681174559' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114522866681174559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114522866681174559'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/04/building-robust-software-part-1.html' title='Building robust software, part 1'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114352694895959646</id><published>2006-03-28T00:19:00.000-06:00</published><updated>2006-03-28T00:24:28.956-06:00</updated><title type='text'>Serial Experiments iMac</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/661/2354/1600/navi.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/661/2354/320/navi.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Look on my awesome, ye mighty, and despair.&lt;br /&gt;&lt;br /&gt;Also, do not cross a man with nothing to lose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114352694895959646?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114352694895959646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114352694895959646' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114352694895959646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114352694895959646'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/03/serial-experiments-imac.html' title='Serial Experiments iMac'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114292189214819421</id><published>2006-03-20T23:52:00.000-06:00</published><updated>2006-03-21T00:18:12.160-06:00</updated><title type='text'>NetNewsWire</title><content type='html'>The planet's best RSS aggregator, &lt;a href="http://ranchero.com/netnewswire/"&gt;NetNewsWire&lt;/a&gt;, just got a ton better. I was leery when Brett announced that his little program that could had been bought by online aggregator &lt;a href="http://www.newsgator.com/"&gt;NewsGator&lt;/a&gt;. I assumed that heralded the end of development. I am happy to be proven wrong. The new &lt;a href="http://ranchero.com/netnewswire/beta.php"&gt;beta 2.1&lt;/a&gt; adds a remarkably sophisticated synchronization mode with the web-based NewsGator system. Now, no matter where you read your feeds, each viewer knows what you've read, so you don't waste time cutting through a thicket of repeats when you switch machines. Because I regularly rotate among 3 machines in a day, this is fantastic for me.&lt;br /&gt;&lt;br /&gt;I haven't explored all of the boundaries of the synchronization yet. It looks like adding or removing a feed in one place is automatically reflected it to all others. But can the home client download unread messages collected at the always-on webserver, even if they've already gone stale from the feed? That would make a convenient way to keep up with ALL of the news for the day, not just the stuff that's still being fed when I get home.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114292189214819421?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114292189214819421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114292189214819421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114292189214819421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114292189214819421'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/03/netnewswire.html' title='NetNewsWire'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114270571370113388</id><published>2006-03-18T12:15:00.000-06:00</published><updated>2006-03-18T12:15:13.736-06:00</updated><title type='text'>Cartoon plate tectonics</title><content type='html'>Here we have noted (and awesome) comic book artist Neal Adams pushing a theory that tectonic subduction is a fallacy, and that landmass reformulation instead occurs by &lt;a href="http://www.nealadams.com/nmu.html"&gt;continuous planetary growth&lt;/a&gt;. As is the hallmark of all good science, he uses loaded language to dispose you against the opposition view ("Well, it is a preposterous and even stupid idea").&lt;br /&gt;&lt;br /&gt;The site features a bundle of little quicktime animations depicting his theory of planetary growth. These argue persuasively that landmasses indeed change, but I'm not as sure they support his hypothesis. It seems to me that if the planets were continually growing, they would be simultaneously flattening and losing density. I don't believe that to be borne out by the facts. I also doubt that a geologic theory which requires an ocean-less Earth can be made to mesh with the current ocean-based biologic origin theories.&lt;br /&gt;&lt;br /&gt;Animation can be used to show almost anything, which is why it exists. After all, it would be very hard otherwise to have a &lt;a href="http://us.imdb.com/title/tt0019422/"&gt;whistling, anthropomorphic mouse&lt;/a&gt; piloting a steamboat. Adams' animations are interesting to watch, sure, and bring up some good talking points about crustal movement. They don't, however, convince me that he's got a better game than the &lt;a href="http://en.wikipedia.org/wiki/Plate_tectonics"&gt;traditional tectonic plate guys&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114270571370113388?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114270571370113388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114270571370113388' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114270571370113388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114270571370113388'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/03/cartoon-plate-tectonics.html' title='Cartoon plate tectonics'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114177357175265753</id><published>2006-03-07T17:19:00.000-06:00</published><updated>2006-03-07T17:19:31.796-06:00</updated><title type='text'>Jury Duty</title><content type='html'>Today's jury duty was a bit of a fizzle. 3 cases out of 11 ended up calling for jurors, utilizing less than 30% of us. So it ended up being a long day of alternately glaring at the broken coffee vending machine and the sign barring jurors from leaving the waiting room. Come the end of the day, my headache had billowed into thunderstorm proportions. This dependence on caffeine makes me suspect that I would have a tough time attempting to scratch out a frontier existence. When the revolution comes, they may as well shoot me first, for all the good I'll be in a place that no longer imports freshly roasted coffee beans.&lt;br /&gt;&lt;br /&gt;One day/one trial, they said, so I'm off the hook now. That's for petit court, mostly criminal cases. Near us was housed an opaqued room where the grand jurors convened. Apparently &lt;i&gt;that&lt;/i&gt; stint goes for a solid month. Makes me wonder how they pick the poor slobs for that duty.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114177357175265753?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114177357175265753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114177357175265753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114177357175265753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114177357175265753'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/03/jury-duty.html' title='Jury Duty'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114150920696639315</id><published>2006-03-04T15:05:00.000-06:00</published><updated>2006-03-04T15:53:26.976-06:00</updated><title type='text'>Smoosh fan</title><content type='html'>I have lately been enamored of Seattle-based band &lt;a href="http://www.smoosh.com/"&gt; Smoosh&lt;/a&gt; (warning, noise link) comprising two rather young girls named Asya and Chloe. Are they sisters? 10 years old? 15? Do they produce their own music? These are mysteries to me, but (probably) not due to a lack of available reference. I'm actually hesitant to find out the answers.&lt;br /&gt;&lt;br /&gt;I live in fear of bumping into a quote from the girls saying something like: "I really hope you enjoy &lt;i&gt;Quack&lt;/i&gt;, our most lyrically complex work to date", which would totally blow the illusion. I prefer the think of the girls as practicing a form of musical glossolalia. They string together series of syllables, Eno-like; it resembles language without dependence on depth or meaning. I worry that were I to believe that they were taking their lyrical content seriously, I would lose the ability to enjoy their surprisingly sophisticated &lt;i&gt;sound&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;If that sounds like something you can enjoy, I urge you to &lt;a href="http://www.pattern25.com/bands/smoosh.shtml"&gt;check them out&lt;/a&gt;. Just don't peer too closely at the man behind the curtain.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114150920696639315?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114150920696639315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114150920696639315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114150920696639315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114150920696639315'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/03/smoosh-fan.html' title='Smoosh fan'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114136352858598034</id><published>2006-03-02T23:20:00.000-06:00</published><updated>2006-03-04T12:05:19.426-06:00</updated><title type='text'>Schadenfreude Interactive, GmbH</title><content type='html'>And here you thought creativity in games was dead.&lt;br /&gt;&lt;br /&gt;Update: &lt;a href="http://www.gamasutra.com/features/20060117/birds_01.shtml"&gt;It wrinkles&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114136352858598034?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.phobe.com/sfi/sigmain.html' title='Schadenfreude Interactive, GmbH'/><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114136352858598034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114136352858598034' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114136352858598034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114136352858598034'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/03/schadenfreude-interactive-gmbh.html' title='Schadenfreude Interactive, GmbH'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114097572075875975</id><published>2006-02-26T11:40:00.000-06:00</published><updated>2006-03-20T23:51:17.736-06:00</updated><title type='text'>Spark and GrowlTunes</title><content type='html'>When I got the new &lt;a href="http://www.apple.com/macmini/"&gt;computer&lt;/a&gt;, it came with OS X 10.4. This gave me an opportunity to dally with &lt;a href="http://quicksilver.blacktree.com/"&gt;Quicksilver&lt;/a&gt;, a keyboard-based program launcher. This is a grass-roots effort to build a better mousetrap than ObDev's &lt;a href="http://www.obdev.at/products/launchbar/index.html"&gt;LaunchBar&lt;/a&gt;. Some nice features, but ultimately, it proved too flaky for regular use. When I switched back to the tried and true, however, I found myself missing some of Quicksilver's features. Notably, the iTunes &lt;a href="http://growl.info/"&gt;Growl&lt;/a&gt; notifications and system-wide keyboard shortcuts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://growl.info/documentation/growltunes.php"&gt;GrowlTunes&lt;/a&gt; was an obvious replacement for the first. The hotkey situation was little stickier, due to the fuzzy language needed to describe what the app does. Eventually I came across &lt;a href="http://chezjd.free.fr/Creation/logiciel.php?id=3&amp;lang=2"&gt;Spark&lt;/a&gt;, which&amp;mdash;while poorly described and poorly documented&amp;mdash;provides exactly what I need. The configuration app, called Spark, allows you to associate a function (such as Advance Track in iTunes) with a keyboard shortcut (cmd-F3). The Spark Daemon, which runs as a hidden process viewable in the Activity Monitor, handles the actual dispatching of the commands. And with that, I can now put my Mac to sleep with Ctrl-Alt-Delete. Take &lt;i&gt;that&lt;/i&gt;, Windows users!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114097572075875975?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114097572075875975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114097572075875975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114097572075875975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114097572075875975'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/02/spark-and-growltunes.html' title='Spark and GrowlTunes'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114093569452349775</id><published>2006-02-25T23:57:00.000-06:00</published><updated>2006-03-01T00:09:44.903-06:00</updated><title type='text'>A sense of security</title><content type='html'>There's been a lot of press lately about the rise of Macintosh-based viruses. None of these has been particularly insidious, but the time will come that someone finds a truly ghastly exploit and works it for all its worth. Certainly, I'm under no illusions that the OS X operating system is without its fair share of oversights and loopholes that allow for that sort of attack. Up until recently, I ran without anti-virus support. I had reasonable protection, I rationalized. I was behind NAT, the firewall was locking down virtually every port, etc.&lt;br /&gt;&lt;br /&gt;I knew the bad guys were out there. Apache server logs showed that I was getting scanned for well-known port 80 vulnerabilities at least every other day. I'm sure the firewall was indiscriminately rejecting scads of other promiscuous assaults. But my software was fully patched, and I had shut off mod_perl. With these small provisions, until recently I felt safe.&lt;br /&gt;&lt;br /&gt;Last week, I installed &lt;a href="http://www.clamxav.com/"&gt;ClamXav&lt;/a&gt;, an OS X wrapper for the open source &lt;a href="http://www.clamav.net/"&gt;ClamAV&lt;/a&gt; anti-virus scanner. It's about as easy to set up as any open source software. That is to say, it takes some research before you'll get anything out of it. It's definitely different from the more familiar Windows anti-virus products.&lt;br /&gt;&lt;br /&gt;The thing is, even after reading an &lt;a href="http://www.oreillynet.com/pub/a/mac/2005/08/19/clamav.html"&gt;introductory article&lt;/a&gt;, and spending a couple hours scanning and configuring, I still don't feel like I've "locked up" all the attack vectors. The commercial anti-virus vendors have done a fine job of &lt;i&gt;feeling&lt;/i&gt; comprehensive. They're poking at your web browser, your email client; they scan memory, read all your opening files; and benignly get in the way of everything you want to do.&lt;br /&gt;&lt;br /&gt;There's a sense of relief in that. The smart people at Symantec, Microsoft and Macaffee have put their heads together to come up with every possible way a malicious hacker might bust into your box. ClamXav lacks that friendly layer of reassurance. It might be just as secure as the protection offered by the commercial vendors, but have I configured it well enough to provide the defenses that I need? I really couldn't say.&lt;br /&gt;&lt;br /&gt;This makes me think that maybe the real value in anti-virus software isn't in actually preventing attacks, but in making you feel like it is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114093569452349775?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114093569452349775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114093569452349775' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114093569452349775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114093569452349775'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/02/sense-of-security.html' title='A sense of security'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23038262.post-114093134727699292</id><published>2006-02-25T23:20:00.000-06:00</published><updated>2006-02-25T23:22:27.283-06:00</updated><title type='text'>First post</title><content type='html'>The requisite first post. I've driven by this site a few times in the past, but never really stopped for a look around. Evidently this is a free service. That's mighty magnanimous of someone. Google, I suppose.&lt;br /&gt;&lt;br /&gt;Anyway, nothing to see here. Move along.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23038262-114093134727699292?l=tensten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tensten.blogspot.com/feeds/114093134727699292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23038262&amp;postID=114093134727699292' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114093134727699292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23038262/posts/default/114093134727699292'/><link rel='alternate' type='text/html' href='http://tensten.blogspot.com/2006/02/first-post.html' title='First post'/><author><name>baren</name><uri>http://www.blogger.com/profile/00792786470512454421</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
