<?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-35269538</id><updated>2011-11-27T17:04:45.264-07:00</updated><category term='movies coming soon'/><category term='christmas'/><category term='travel'/><category term='photos'/><category term='spain'/><category term='movies'/><title type='text'>hexencodings</title><subtitle type='html'>the blog to nowhere</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default?start-index=101&amp;max-results=100'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>117</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35269538.post-5848396671374247225</id><published>2011-04-20T22:27:00.004-06:00</published><updated>2011-04-20T22:29:55.459-06:00</updated><title type='text'>Ripping and Burning DVDs with Mac OS X</title><content type='html'>&lt;div&gt;The &lt;a href="http://www.iclarified.com/entry/index.php?enid=972"&gt;simplest way I've found&lt;/a&gt; doesn't require installing any additional third-party software at all. Just use Disk Utility.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5848396671374247225?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5848396671374247225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5848396671374247225' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5848396671374247225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5848396671374247225'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2011/04/ripping-and-burning-dvds-with-mac-os-x.html' title='Ripping and Burning DVDs with Mac OS X'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5129384777946825512</id><published>2010-10-31T14:18:00.009-06:00</published><updated>2010-11-30T20:25:49.936-07:00</updated><title type='text'></title><content type='html'>&lt;div&gt;A number of people told us how much they enjoyed the poems and songs at our wedding in October.  We'd like to share them with you here, including the opening remarks by Whit and the amazing toast by Cheng-Hsi's father.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whit's opening remarks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;Welcome friends and family to this glorious day here in Boulder, Colorado. We all want to acknowledge the parents of the bride, Sobee and James, and those of the groom, Bob and Ginny. And of course, this could not occur without the entire cast of family and friends.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is a great day. Let the celebration begin.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The great German philosopher Goethe said “Love is an ideal thing, marriage is a real thing”. Today we gather here to witness the marriage vows of Nicholas Andrew Dronen and Cheng-Hsi Ho. This marriage, my friends, is the real thing. It is no accident.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A very smart individual, Dr. Albert Einstein, commented: “Graviation can not be held responsible for people falling in love”. This marriage is far more profound than the passive forces on this earth. Nick and Cheng-Hsi – their relationship – is far more stunning than chance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nick met Ms. Cheng-Hsi Ho relatively recently. They had a very comfortable friendship. One evening my wife Mary and I had a dinner with the now bride and groom. We were at our home, and could recognize something very special between these two. Nick, at that time, did not. Yes, he thought Cheng-Hsi was a great woman and a fine friend.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But give Nicholas credit. He dug deep (at times, over the years, we weren’t sure he would or could), and he recognized that Cheng-Hsi was a really special woman. Someone he could love, cherish, and most importantly, share his life with. This is Nick's part on this specialday. He recognized Cheng-Hsi Ho. He saw deeper than just the everyday activities, the meals they were sharing. If this would not have happened – recognition – we would not be gathered here today.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cheng-Hsi as well had her part to play to bring us all together today.  Recognition of Nick of course was essential to walk the path of marriage. But let’s look closely at Ms Cheng-Hsi Ho. Cheng means receiving something old and making it better. Hsi means happiness.  I have studied Chinese philosphy and the traditional medicine of China for my entire adult life. However, I don’t have command of the language, so please, give me some leeway here in my interpretations.  With Cheng, we are talking about a process of transformation ... of taking the routine daily activities of life, sometimes not all that glamorous, and making them into glorious events. Making better old routines, old patterns of behaviour.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cheng-- receiving, transforming. Hsi-- Happiness. Who could ask for anything more?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And that is where we, the community of friends and family, come in. We have the job of recognizing the marriage of Nick Dronen and Cheng-Hsi Ho. It is our job, as their friends and family, to witness the commitments and the vows that we are about to hear. And we need to embrace them, in support of our dear friends. Because, God knows, there will be times they may forget how happy they are in this moment Let’s make sure we remind them, and reflect this back to them, to support them, to nourish their marriage.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Interestingly, Nicholas, from the Greek language, comes from two root words – Victory and People. We are the community – The People – and this sure feels like Victory to me.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;May Nicholas and Cheng-Hsi succeed beyond our and their wildest dreams. The great Chinese philosopher, Lao Tze, says: “Nature does not hurry, yet everything is accomplished.” We have the entire Universe supporting us. There is nothing to worry about.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Friends, let us continue with the Celebration. I call forth my wife, Mary Saunders, to read several poems.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Poetry read by Mary Saunders.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;I cursed the rain for&lt;/div&gt;&lt;div&gt;pounding upon my roof and driving&lt;/div&gt;&lt;div&gt;    away sleep.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I cursed the wind&lt;/div&gt;&lt;div&gt;for ravaging my garden.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then you entered; and I gave thanks&lt;/div&gt;&lt;div&gt;to the rain because you must put off&lt;/div&gt;&lt;div&gt;your wet dress; and I gave thanks to&lt;/div&gt;&lt;div&gt;    the wind&lt;/div&gt;&lt;div&gt;that he came and blew out my lamp.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    -- Chang Wu-Chien&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;O Marvel! a garden amidst the flames.&lt;/div&gt;&lt;div&gt;My heart has become capable of every form:&lt;/div&gt;&lt;div&gt;it is a pasture for gazelles and a convent for Christian monks,&lt;/div&gt;&lt;div&gt;and a temple for idols and the pilgrim's Ka’ba,&lt;/div&gt;&lt;div&gt;and the tables of the T&lt;/div&gt;&lt;div&gt;orah and the book of the Quran.&lt;/div&gt;&lt;div&gt;I follow the religion of Love: whatever way Love's camels take,&lt;/div&gt;&lt;div&gt;that is my religion and my faith.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    -- Ibn Arabi&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;The TrueLove&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a faith in loving fiercely&lt;/div&gt;&lt;div&gt;the one who is rightfully yours,&lt;/div&gt;&lt;div&gt;especially if you have&lt;/div&gt;&lt;div&gt;waited years and especially&lt;/div&gt;&lt;div&gt;if part of you never believed&lt;/div&gt;&lt;div&gt;you could deserve this&lt;/div&gt;&lt;div&gt;loved and beckoning hand&lt;/div&gt;&lt;div&gt;held out to you this way.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am thinking of faith now&lt;/div&gt;&lt;div&gt;and the testament of loneliness&lt;/div&gt;&lt;div&gt;and what we feel we are&lt;/div&gt;&lt;div&gt;worthy of in this world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Years ago in the Hebrides&lt;/div&gt;&lt;div&gt;I remember an old man&lt;/div&gt;&lt;div&gt;who walked every morning&lt;/div&gt;&lt;div&gt;on the grey stones&lt;/div&gt;&lt;div&gt;to the shore of baying seals,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;who would press his hat&lt;/div&gt;&lt;div&gt;to his chest in the blustering&lt;/div&gt;&lt;div&gt;salt wind and say his prayer&lt;/div&gt;&lt;div&gt;to the turbulent Jesus&lt;/div&gt;&lt;div&gt;hidden in the water,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and I think of the story&lt;/div&gt;&lt;div&gt;of the storm and everyone&lt;/div&gt;&lt;div&gt;waking and seeing&lt;/div&gt;&lt;div&gt;the distant&lt;/div&gt;&lt;div&gt;yet familiar figure&lt;/div&gt;&lt;div&gt;far across the water&lt;/div&gt;&lt;div&gt;calling to them,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;and how we are all&lt;/div&gt;&lt;div&gt;preparing for that&lt;/div&gt;&lt;div&gt;abrupt waking,&lt;/div&gt;&lt;div&gt;and that calling,&lt;/div&gt;&lt;div&gt;and that moment&lt;/div&gt;&lt;div&gt;we have to say yes,&lt;/div&gt;&lt;div&gt;except it will not come so grandly,&lt;/div&gt;&lt;div&gt;so Biblically,&lt;/div&gt;&lt;div&gt;but more subtly&lt;/div&gt;&lt;div&gt;and intimately in the face&lt;/div&gt;&lt;div&gt;of the one you know&lt;/div&gt;&lt;div&gt;you have to love,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;so that when&lt;/div&gt;&lt;div&gt;we finally step out of the boat&lt;/div&gt;&lt;div&gt;toward them, we find&lt;/div&gt;&lt;div&gt;everything holds&lt;/div&gt;&lt;div&gt;us, and everything confirms&lt;/div&gt;&lt;div&gt;our courage, and if you wanted&lt;/div&gt;&lt;div&gt;to drown you could,&lt;/div&gt;&lt;div&gt;but you don’t&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;because finally&lt;/div&gt;&lt;div&gt;after all this struggle&lt;/div&gt;&lt;div&gt;and all these years, you don’t want to any more, you’ve&lt;/div&gt;&lt;div&gt;simply had enough&lt;/div&gt;&lt;div&gt;of drowning, and you want to live and you&lt;/div&gt;&lt;div&gt;want to love and you will&lt;/div&gt;&lt;div&gt;walk across any territory&lt;/div&gt;&lt;div&gt;and any darkness,&lt;/div&gt;&lt;div&gt;however fluid and however&lt;/div&gt;&lt;div&gt;dangerous, to take the&lt;/div&gt;&lt;div&gt;one hand you know&lt;/div&gt;&lt;div&gt;belongs in yours.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    -- David Whyte&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Poety read by Jeff Pontillo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;You know, my Friends, how bravely in my House&lt;/div&gt;&lt;div&gt;For a new Marriage I did make Carouse;&lt;/div&gt;&lt;div&gt;    Divorced old barren Reason from my Bed&lt;/div&gt;&lt;div&gt;And took the Daughter of the Vine to Spouse.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For "Is" and "Is-NOT" though with Rule and Line,&lt;/div&gt;&lt;div&gt;And "UP-AND-DOWN" by Logic I define,&lt;/div&gt;&lt;div&gt;    Of all that one should care to fathom, I&lt;/div&gt;&lt;div&gt;Was never deep in anything but -- Wine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    -- Rubaiyat by Omar Khayyam&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The song performed by Wendy Lewis (vocals, guitar), Kitty Jenson (vocals), and Ted Dronen (guitar) was "&lt;a href="http://www.rejectedunknown.com/lyrics/Song/truelovewillfindyouintheend.htm"&gt;True Love Will Find You in The End&lt;/a&gt;," composed by the gifted songwriter &lt;a href="http://en.wikipedia.org/wiki/Daniel_Johnston"&gt;Daniel Johnston&lt;/a&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;True love will find you in the end&lt;/div&gt;&lt;div&gt;You'll find out just who was your friend&lt;br /&gt;Don’t be sad, I know you will,&lt;br /&gt;But don’t give up until&lt;br /&gt;True love finds you in the end.&lt;br /&gt;&lt;br /&gt;This is a promise with a catch&lt;br /&gt;Only if you're looking will it find you&lt;br /&gt;‘Cause true love is searching too&lt;br /&gt;But how can it recognize you&lt;br /&gt;Unless you step out into the light?&lt;br /&gt;But don’t give up until&lt;br /&gt;True love finds you in the end.&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Here's a version performed by Beck (&lt;a href="http://www.amazon.com/gp/product/B0023S0DRC"&gt;Amazon&lt;/a&gt;, &lt;a href="http://technolalia.com/~ndronen/music/MP3s/Various%20Artists/The%20Late%20Great%20Daniel%20Johnston_%20Discovered%20Covered/10%20-%20True%20Love%20Will%20Find%20You%20In%20The%20End.mp3"&gt;Nick's web server&lt;/a&gt;).  I encourage you to buy the MP3 from your favorite download site.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, the magnificent toast by Cheng-Hsi's father, James Ho.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;Ladies and gentlemen, I am Cheng-Hsi's father.  Please look at me carefully.  Today is a big day.  It is also an historical moment.  We are so glad to attend this wedding ceremony.  Congratulations!  Nick, you are so lucky to marry my daughter, Cheng-Hsi.  She is very kind, diligent, and humble.  Also she is as beautiful as an angel.  You are now building a home, a sweet home, and a family.  I love her so deep and so much.  She is my heart.  Please love one another ever and forever.  Well, if i were President Obama, I would speak fluent English.  If you do not understand what I say, please pretend to understand.  Ginny!  Bob!  I really love my daughter.  Please love her as your own.  Nick!  I trust you and believe you are a good husband.  And certainly Cheng-Hsi is a good wife.  I promise you, Nick!  You have something to do, whatever that is, to contribute to your family, society, nation, and all mankind.  That is my wish.   God bless you!  Thank you.&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5129384777946825512?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5129384777946825512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5129384777946825512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5129384777946825512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5129384777946825512'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/10/number-of-people-told-us-how-much-they.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8838241731550601833</id><published>2010-08-01T17:12:00.005-06:00</published><updated>2010-08-01T19:08:06.421-06:00</updated><title type='text'>Who is Don Draper?</title><content type='html'>Even Don Draper probably doesn't know who Don Draper is, but what we know is that he has two selves -- a private self and a public one, a past self and a present one, one that he is and one that he pretends to be -- and what's withheld and revealed about them constitute much of the show's appeal.  You have to give Matthew Weiner credit for creating a great character.   I suspect he put a lot of thought into Don, and I'm certain that Don's names -- Dick Whitman and Don Draper -- are deliberately crafted as hints to the answer to the question, who is Don Draper?  Certainly, other characters have names that somehow give you a sense of who the character is in their particular world -- Peggy Olson and Pete Campbell come to mind -- but Don is a man with more names than one, and he's the simmering star of the show (except for Peggy, of course), so without further ado, I'll explain them.&lt;br /&gt;&lt;br /&gt;Dick Whitman.  First name first.  This one needs no explanation, just the &lt;a href="http://jezebel.com/5338623/his-name-is-dick---after-a-wish-his-mother-should-have-lived-to-see"&gt;background&lt;/a&gt;, but I really have to wonder whether Don's philandering (or, this season, general man whorishness) is motivated by a desire to connect in some way to his late mother.  Whitman.  This one's hard to explain, but I've come to think of his advertising genius as a kind of American poetry, sort of like &lt;a href="http://en.wikipedia.org/wiki/Walt_Whitman"&gt;this guy's&lt;/a&gt;.  It's almost messianic, like he sees his role as the caretaker of the American psyche.  Take, for instance, the first line in this important moment between Don and Peggy last season:&lt;br /&gt;&lt;dl&gt;&lt;dd&gt;&lt;b&gt;Don Draper&lt;/b&gt;: No. Because there are people out there who buy  things, people like you and me. And something happened. Something  terrible. And the way that they saw themselves is gone. And nobody  understands that. But you do. And that’s very valuable.&lt;/dd&gt;&lt;dd&gt;&lt;b&gt;Peggy Olson&lt;/b&gt;: Is it?&lt;/dd&gt;&lt;dd&gt;&lt;b&gt;Don&lt;/b&gt;: With you or without you I’m moving on. And I don’t know if I can do it alone. Will you help me?&lt;/dd&gt;&lt;dd&gt;&lt;b&gt;Peggy&lt;/b&gt;: What if I say no? You’ll never speak to me again.&lt;/dd&gt;&lt;dd&gt;&lt;b&gt;Don&lt;/b&gt;: No. I will spend the rest of my life trying to hire you.&lt;/dd&gt;&lt;/dl&gt;And finally, Don Draper.  This one's actually pretty easy.  From Webster's Ninth New Collegiate Dictionary:&lt;br /&gt;&lt;blockquote&gt;don &lt;span style="font-style: italic;"&gt;vt &lt;/span&gt;1: to put on (an article of wear) 2: to envelop oneself in :ASSUME&lt;br /&gt;&lt;br /&gt;draper &lt;span style="font-style: italic;"&gt;n, chiefly Brit&lt;/span&gt;: a dealer in cloth and sometimes also in clothing and dry goods&lt;br /&gt;&lt;br /&gt;drapery &lt;span style="font-style: italic;"&gt;n &lt;/span&gt;2: a: a decorative piece of material usu. hung in loose folds and arranged in a graceful design b: hangings of heavy fabric used as a curtain&lt;/blockquote&gt;The idea being, of course, that Don Draper -- the cipher, as he's called in the fourth season's first episode -- is a facade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8838241731550601833?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8838241731550601833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8838241731550601833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8838241731550601833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8838241731550601833'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/08/who-is-don-draper.html' title='Who is Don Draper?'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6364225099022267112</id><published>2010-06-17T19:10:00.004-06:00</published><updated>2010-06-17T19:25:56.369-06:00</updated><title type='text'>The Wrongness, The Wrongness!</title><content type='html'>This is so wrong.  NCAR, the National Center for Atmospheric Research, in Boulder is &lt;a href="http://www.datacenterknowledge.com/archives/2010/06/16/new-supercomputer-will-track-climate-change/"&gt;opening a supercomputing facility in Wyoming&lt;/a&gt;.  Their facility in Boulder isn't suited to house the massive clusters of computers needed to support the center's research, which includes the study of climate change.  A mere 10% of the Wyoming facility's power will come from wind.  The remaining 90%, presumably from coal.  Armageddon reimagined: supercomputers dedicated to research on climate change consume more and more coal-generated electricity, which adds more  carbon to the atmosphere, thus accelerating the warming of the planet, resulting in gobs more federal funding for the study of climate change, and more supercomputers, with the concomitant carbon -- an accelerating cycle of supercomputers, carbon, and rising temperatures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6364225099022267112?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6364225099022267112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6364225099022267112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6364225099022267112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6364225099022267112'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/06/wrongness-wrongness.html' title='The Wrongness, The Wrongness!'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7285148003380329292</id><published>2010-05-31T18:51:00.003-06:00</published><updated>2010-05-31T19:20:38.042-06:00</updated><title type='text'>These Made Me Ha-a-appy</title><content type='html'>I'm putting together a list of flicks for a fellow cinephile.  The criteria for the list are (1) it should be something I think he hasn't seen and (2) it should have been made in the last ten years.  There will be exceptions to the second criterion.  It was originally going to be all Asian films, too, but there are just too many good ones made everywhere.  Ultimately, they're in the list because watching them was profoundly pleasurable.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0445336/"&gt;You, the Living&lt;/a&gt; Sweden, 2007&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0841925/"&gt;Silent Light&lt;/a&gt; Mexico 2007&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0353969/"&gt;Memories of Murder&lt;/a&gt; Korea, 2003&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netflix.com/WiMovie/Mother/70118372"&gt;Mother &lt;/a&gt;Korea, 2009&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0244316/"&gt;Yi Yi&lt;/a&gt; Taiwan, 2000&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1095442/"&gt;Goodbye &lt;/a&gt;&lt;a href="http://www.imdb.com/title/tt1095442/"&gt;Solo&lt;/a&gt; USA, 2008&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.netflix.com/Movie/Cache/70035177"&gt;Cache &lt;/a&gt;France, 2005&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0477731/"&gt;Syndromes and a Century&lt;/a&gt; Thailand, 2006&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0209933/"&gt;Beau Travail&lt;/a&gt; France, 1999&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0363226/"&gt;Zatoichi &lt;/a&gt;Japan, 2003&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1139797/"&gt;Let the Right One In&lt;/a&gt; Sweden, 2008&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0498120/"&gt;Private Fear in Public Places&lt;/a&gt; France, 2006&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1185616/"&gt;Waltz with Bashir&lt;/a&gt; Israel, 2008&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0120265/"&gt;Taste of Cherry&lt;/a&gt; Iran, 1997&lt;/li&gt;&lt;/ul&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7285148003380329292?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7285148003380329292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7285148003380329292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7285148003380329292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7285148003380329292'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/05/these-made-me-ha-appy.html' title='These Made Me Ha-a-appy'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7739219562063890051</id><published>2010-05-30T09:13:00.000-06:00</published><updated>2010-05-30T09:14:45.106-06:00</updated><title type='text'>When 5% is too much</title><content type='html'>It's just criminal  that a &lt;a href="http://en.wikipedia.org/wiki/Cement"&gt;single industry&lt;/a&gt; generates %5 of man-made carbon:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Cement  manufacture contributes greenhouse gases both directly through the  production of carbon dioxide when calcium carbonate is heated, producing  lime and carbon dioxide, and also indirectly through the use of  energy, particularly if the energy is sourced from fossil fuels. The  cement  industry produces about 5% of global man-made CO2 emissions, of  which 50% is from the chemical process, and 40% from burning fuel.   The amount of CO2 emitted by the cement industry is nearly 900 kg of CO2  for every 1000 kg of cement produced.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7739219562063890051?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7739219562063890051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7739219562063890051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7739219562063890051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7739219562063890051'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/05/when-5-is-too-much.html' title='When 5% is too much'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-9005521462386741512</id><published>2010-05-29T07:35:00.002-06:00</published><updated>2010-05-29T08:04:39.128-06:00</updated><title type='text'>Why do News Corp editorials hate reality?</title><content type='html'>In an interview in this week's edition of Barron's, Ray Dalio of Bridgewater Associates, a fund with institutional assets of $75 billion, explains in six simple sentences why inflation is not a problem right now.  This is from the print edition; the &lt;a href="http://online.barrons.com/article/SB127508631314298427.html"&gt;interview &lt;/a&gt;is available online to subscribers.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;Explain why the printing of money won't cause inflation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The printing of money will offset the deflation that is coming from the weak demand for goods and services due to weak credit growth.  For example, in March of 1933 the U.S. printed a whole lot of money, and that had the effect of converting deflation into modest inflation, but not a high rate of inflation.... My point is, in developed countries there is too much of most things at the moment, ad that's creating a deflationary environment.  There is too much manufacturing capacity.  There is too much labor.  There is too much housing stock.&lt;/blockquote&gt;Six sentences, including actual facts, spoken by someone who is actually responsible for other people's money (and a lot of it).  Compare this to last week's inflation hawk editorial by Barron's editor Tom Donlan, in which he seems to desire to make the opposite case -- an argument for contractionary policies -- but instead wanders off on an embarrassing digression about old bonds and barely manages to burp out some you'll-be-sorry warnings about inflation. &lt;br /&gt;&lt;br /&gt;This is another case of a financial paper's journalism being sane and the editorial pages being completely unhinged from reality.  Where else does this happen?  Why, Wall Street Journal, which is owned by News Corp, which owns Fox News and, of course,  Barron's.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-9005521462386741512?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/9005521462386741512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=9005521462386741512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/9005521462386741512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/9005521462386741512'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/05/why-do-news-corp-editorials-hate.html' title='Why do News Corp editorials hate reality?'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6852203263378946767</id><published>2010-05-22T08:24:00.005-06:00</published><updated>2010-05-22T12:04:03.370-06:00</updated><title type='text'></title><content type='html'>You would think that an &lt;a href="http://online.barrons.com/article/SB127448133000795145.html"&gt;editorial &lt;/a&gt;that's subtitled "If the Fed won't tighten up, we'll pay the price" would present a case for why the Fed should abandon the current policy of &lt;a href="http://en.wikipedia.org/wiki/Quantitative_easing"&gt;quantitative easing&lt;/a&gt; in favor of something more contractionary.  That's what I expected when I turned to the last page of this week's print edition of Barron's, but that's not what found.  Instead, Tom Donlan fills most of the page with a story about bonds issued three decades ago, the point of which appears to be that things don't always turn out as you expect.  But saying, in short, "shit happens" isn't a compelling argument in favor of &lt;span style="font-style: italic;"&gt;any &lt;/span&gt;particular policy, much less the one that the editorial piece ostensibly advocates.   Does journalism get any lazier?&lt;br /&gt;&lt;br /&gt;The article isn't completely free of argument.  There is an inkling of one towards the end, where he writes "Wall Street doesn't have a money market; its interest rates reflect Fed policy, as do Main Street consumer prices."  Now this isn't really an argument, but it's the closest Donlan gets to the kind of writing one expects in a piece advocating a Fed policy change.  The dependent clause -- "as do Main Street consumer prices" -- is an &lt;a href="http://languagelog.ldc.upenn.edu/nll/?p=2316"&gt;assertion&lt;/a&gt;.  And it's not false; Fed rates and the state of the economy as a whole are correlated.  When the economy overheats, the Fed raises interest rates, and there's a recession of some magnitude.  The Fed eventually responds by lowering rates, which lets economic growth resume.   That's the standard picture.&lt;br /&gt;&lt;br /&gt;From there, though, it just gets childish:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It's easy to imagine that inflation is irrelevant to a U.S. economy  that's posting the lowest increases in consumer prices in 44 years. But  "imagination is funny; it makes a cloudy day sunny," as Johnny Burke  wrote for Frank Sinatra in 1940.&lt;/p&gt; &lt;p&gt;Sunny days of low inflation won't last.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;And it would be easier for us to imagine that what he says actually  matters if Donlan had bothered to make an argument.  Low inflation won't last.  So what?  When inflation becomes palpable to Fed policy makers, they'll raise interest rates.  But if there's no sign of inflation &lt;span style="font-style: italic;"&gt;now&lt;/span&gt;, what reason is there for Fed policy to become contractionary &lt;span style="font-style: italic;"&gt;now&lt;/span&gt;?  Hello?&lt;/p&gt;&lt;p&gt;UPDATE: The New York Fed chairman &lt;a href="http://www.reuters.com/article/idUSNLLLGE64820100521"&gt;disagrees &lt;/a&gt;with Donlan too.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6852203263378946767?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6852203263378946767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6852203263378946767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6852203263378946767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6852203263378946767'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/05/you-would-think-that-editorial-thats.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7665015910657063086</id><published>2010-05-06T08:10:00.001-06:00</published><updated>2010-05-06T08:17:58.548-06:00</updated><title type='text'></title><content type='html'>I saw &lt;a href="http://www.imdb.com/name/nm0094435/"&gt;Bong Joon-Ho&lt;/a&gt;'s "&lt;a href="http://www.imdb.com/title/tt1216496/"&gt;Mother&lt;/a&gt;" last night at the &lt;a href="http://lyriccinemacafe.com/"&gt;Lyric Cinema Cafe&lt;/a&gt; in  Fort Collins.  The style, theme, and humor are similar to his "&lt;a href="http://www.imdb.com/title/tt0468492/"&gt;The Host&lt;/a&gt;"  and "&lt;a href="http://www.imdb.com/title/tt0353969/"&gt;Memories of Murder&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;They're all awesome.  "&lt;a href="http://www.imdb.com/title/tt0353969/"&gt;Memories of Murder&lt;/a&gt;" should have been on at least  one major critic's best-of-decade list, but perhaps it was elided  because Bong &lt;a href="http://www.nytimes.com/2010/02/25/movies/25bong.html"&gt;plays with genre&lt;/a&gt; too much to be considered alongside the  directors of consistently sublime movies like "&lt;a href="http://en.wikipedia.org/wiki/Syndromes_and_a_Century"&gt;Syndromes and a Century&lt;/a&gt;" or "&lt;a href="http://en.wikipedia.org/wiki/Yi_yi"&gt;Yi Yi&lt;/a&gt;".  In any case, if you like yourself some Asian cinema, watch  "&lt;a href="http://www.imdb.com/title/tt0468492/"&gt;The Host&lt;/a&gt;", "&lt;a href="http://www.imdb.com/title/tt0353969/"&gt;Memories of Murder&lt;/a&gt;", and "&lt;a href="http://www.imdb.com/title/tt1216496/"&gt;Mother&lt;/a&gt;" (in order of  accessibility).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7665015910657063086?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7665015910657063086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7665015910657063086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7665015910657063086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7665015910657063086'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/05/i-saw-bong-joon-ho-s-mother-last-night.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2424073875057996005</id><published>2010-05-01T09:57:00.003-06:00</published><updated>2010-05-01T10:04:10.878-06:00</updated><title type='text'>iPhone, Safari, and tel URI's</title><content type='html'>I think it's very cool that tapping a tel &lt;a href="http://en.wikipedia.org/wiki/URI_scheme"&gt;URI&lt;/a&gt; in Safari on an iPhone  allows you to actually call the number.  (A "tel URI" is basically a  phone number link, similar to an "http:" or" mailto:" link, except it  starts with "tel:".)  Because not all phone numbers start with "tel:" on  the Web, Safari tries to detect them so you can just tap and call, but  it needs to be improved. For example, document citations often contain  text that Safari wrongly believes is a phone number, such as the text  after the comma in this fragment of &lt;a href="http://ier.sagepub.com/cgi/content/abstract/46/4/541"&gt;a review&lt;/a&gt;: "No. 4, 541-578 (2009)".  My phone thinks this is the number (541) 578-2009.&lt;br /&gt;&lt;br /&gt;Futher brokenness is evident when I tap and hold the link: a pop-up menu appears with the option to "Call 541-578 (2009" (with no parenthesis at the end).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2424073875057996005?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2424073875057996005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2424073875057996005' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2424073875057996005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2424073875057996005'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/05/iphone-safari-and-tel-uris.html' title='iPhone, Safari, and tel URI&apos;s'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3992326707298682376</id><published>2010-01-27T19:56:00.005-07:00</published><updated>2010-01-27T20:42:44.450-07:00</updated><title type='text'>Rewatching Mad Men (cont.)</title><content type='html'>I believe &lt;a href="http://hexencodings.blogspot.com/2010/01/rewatching-mad-men.html"&gt;this scene&lt;/a&gt; is key to understanding why Campbell shows up at Peggy's apartment that night.   Here's the pattern.  First, Draper thwarts Campbell's desire to engage in a sort of corporate-ladder-climbing intercourse.  Clearly, given the way the scene is shot, and given the bile of Campbell's "f*ck you" at the end, sex is a weapon for Campbell.  Later, when the other Sterling Cooper lads take him out for his stag party, Campbell brazenly puts the moves on one of the gals who joins the lads at the strip club.  Here again he confuses force for flattery, and again he's rejected and humiliated, only this time in front of his peers. &lt;br /&gt;&lt;br /&gt;Campbell mixes desire and power to the point that they're indistinguishable.  Being humiliated by Draper in the afternoon, and in front of his peers at the strip club, forces his hand.  He goes to Peggy's apartment not -- or not strictly -- because he wants some wanton nookie before he gets hitched, but to get something that Draper has (or so he thinks).  Sleeping with Draper's secretary is Campbell's way of getting revenge.  Again, sex to him is only a weapon.  This is, in part, why Peggy's speech at the end of the second season -- the one that left me and probably you breathless -- is so powerful: what she tells Campbell shocks him; he's surprised; but it's not about the baby.  It's about what she says and how she says it and the fact that she is a woman.  And it's about Campbell's idea of who he is.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3992326707298682376?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3992326707298682376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3992326707298682376' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3992326707298682376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3992326707298682376'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/01/rewatching-mad-men-cont.html' title='Rewatching Mad Men (cont.)'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7035338791975496724</id><published>2010-01-17T19:39:00.005-07:00</published><updated>2010-01-17T19:50:05.264-07:00</updated><title type='text'>Shots from "Syndromes and a Century"</title><content type='html'>I watched "&lt;a href="http://en.wikipedia.org/wiki/Syndromes_and_a_Century"&gt;Syndromes and a Century&lt;/a&gt;" again last night after seeing it about a year ago.  Something about it is so fresh and vibrant, even after multiple viewings.&lt;br /&gt;&lt;br /&gt;Here are two powerful shots -- the first is from the rural vignette, the second from the urban one -- posted just because I think they're beautiful.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/S1PKzusSAzI/AAAAAAAAARU/7pn6rPPsHAc/s1600-h/Syndromes+and+a+Century+-+Eclipse.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 224px;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/S1PKzusSAzI/AAAAAAAAARU/7pn6rPPsHAc/s400/Syndromes+and+a+Century+-+Eclipse.PNG" alt="" id="BLOGGER_PHOTO_ID_5427904965967479602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/S1PKzycjG3I/AAAAAAAAARc/9bmm1DoKtIw/s1600-h/Syndromes+and+a+Century+-+Vacuum.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 224px;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/S1PKzycjG3I/AAAAAAAAARc/9bmm1DoKtIw/s400/Syndromes+and+a+Century+-+Vacuum.PNG" alt="" id="BLOGGER_PHOTO_ID_5427904966975232882" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7035338791975496724?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7035338791975496724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7035338791975496724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7035338791975496724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7035338791975496724'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/01/shots-from-syndromes-and-century.html' title='Shots from &quot;Syndromes and a Century&quot;'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IsE9c9rP_4/S1PKzusSAzI/AAAAAAAAARU/7pn6rPPsHAc/s72-c/Syndromes+and+a+Century+-+Eclipse.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3221974705766289836</id><published>2010-01-17T19:39:00.001-07:00</published><updated>2010-01-17T19:39:10.539-07:00</updated><title type='text'></title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3221974705766289836?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3221974705766289836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3221974705766289836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3221974705766289836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3221974705766289836'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/01/blog-post.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1671351070601779760</id><published>2010-01-14T08:53:00.003-07:00</published><updated>2010-01-14T09:05:31.581-07:00</updated><title type='text'>Readings on Analogy</title><content type='html'>I'm thinking about analogy at work.   Some&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.coral-lab.org/%7Emarc/AAAI01PickettM1.pdf"&gt;The UberCruncher: Concept Formation by Analogy Discovery&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cogprints.org/3981/"&gt;Human-Level Performance on Word Analogy Questions by Latent Relational Analysis&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pearsonkt.com/papers/ab-Plato1997.shtml"&gt;A Solution to Plato's Problem: The Latent Semantic Analysis Theory of the Acquisition, Induction, and Representation of Knowledge&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h1 class="ep_tm_pagetitle"&gt;&lt;br /&gt;&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1671351070601779760?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1671351070601779760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1671351070601779760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1671351070601779760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1671351070601779760'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/01/readings-on-analogy.html' title='Readings on Analogy'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1974992211601272213</id><published>2010-01-12T18:42:00.010-07:00</published><updated>2010-01-12T19:34:06.851-07:00</updated><title type='text'>Rewatching Mad Men</title><content type='html'>It may be cheap sport, playing spot the symbols of sex and power in an episode of "Mad Men," but rewatching the first episode, it's too obvious to pass up.  It's about at the 24-minute mark, right after the distasterous meeting with Rachel Menken.&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/S00t5vOZS_I/AAAAAAAAAQk/6oZQT4ZkFUg/s1600-h/Episode+1-1.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 206px;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/S00t5vOZS_I/AAAAAAAAAQk/6oZQT4ZkFUg/s400/Episode+1-1.PNG" alt="" id="BLOGGER_PHOTO_ID_5426043596003953650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Campbell: I'm not going to pretend I don't want your job, but you were right, I'm not great with people, and you are, I mean, not counting that meeting we were just in, so I'm kinda counting on you to help me out.... There's plenty of room at the top.&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/S00t6Upj7dI/AAAAAAAAAQ0/ifsdZEOrZGk/s1600-h/Episode+1-3.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 206px;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/S00t6Upj7dI/AAAAAAAAAQ0/ifsdZEOrZGk/s400/Episode+1-3.PNG" alt="" id="BLOGGER_PHOTO_ID_5426043606050008530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Draper: Look, I'm sorry I was so hard on you before.  It's just this damn tobacco thing.&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/S00t6tAy8EI/AAAAAAAAAQ8/6JGB8KPxHY0/s1600-h/Episode+1-4.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 204px;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/S00t6tAy8EI/AAAAAAAAAQ8/6JGB8KPxHY0/s400/Episode+1-4.PNG" alt="" id="BLOGGER_PHOTO_ID_5426043612589912130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Campbell: You'll think of something.  [&lt;span style="font-style: italic;"&gt;Emboldened&lt;/span&gt;.]  A man like you I'd follow into combat blindfolded, and I wouldn't be the first.  Am I right buddy? [&lt;span style="font-style: italic;"&gt;Presents hand to shake&lt;/span&gt;.]&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/S00t6yXsQ3I/AAAAAAAAARE/tGNr1TG-Ppo/s1600-h/Episode+1-5.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 206px;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/S00t6yXsQ3I/AAAAAAAAARE/tGNr1TG-Ppo/s400/Episode+1-5.PNG" alt="" id="BLOGGER_PHOTO_ID_5426043614028120946" border="0" /&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;br /&gt;Draper: Let's take it a little slower, I don't want to wake up pregnant.  [&lt;span style="font-style: italic;"&gt;Walks away&lt;/span&gt;.]&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/S00uWtInCgI/AAAAAAAAARM/wydkcG3Z9KQ/s1600-h/Episode+1-6.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 207px;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/S00uWtInCgI/AAAAAAAAARM/wydkcG3Z9KQ/s400/Episode+1-6.PNG" alt="" id="BLOGGER_PHOTO_ID_5426044093659023874" border="0" /&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;br /&gt;Campbell: [&lt;span style="font-style: italic;"&gt;Under his breath&lt;/span&gt;.] F*** you.&lt;/blockquote&gt;&lt;br /&gt;Sometimes a cigar is just a cigar and sometimes the outstretched hand of your weasel of an  underling is just a phallic symbol appearing on your TV screen.&lt;br /&gt;&lt;br /&gt;Oh, and would it be too much to note that the previous scene features Peggy Olsen being humiliated by the gynecologist when she goes to him to get oral contraceptives?  I think not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1974992211601272213?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1974992211601272213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1974992211601272213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1974992211601272213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1974992211601272213'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/01/rewatching-mad-men.html' title='Rewatching Mad Men'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IsE9c9rP_4/S00t5vOZS_I/AAAAAAAAAQk/6oZQT4ZkFUg/s72-c/Episode+1-1.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6415676780272387027</id><published>2010-01-12T09:27:00.008-07:00</published><updated>2010-01-18T12:52:15.859-07:00</updated><title type='text'>Independent Study Reading List, Spring 2010</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.33.6843" target="_blank"&gt;The Missing Link - A Probabilistic Model of Document Content and Hypertext Connectivity&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.google.com/search?q=Recursive+Attribute+Factoring+Cohn+Verma+Pfleger" target="_blank"&gt;Recursive Attribute Factoring&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.20.3834" target="_blank"&gt;A Measure of Similarity between Graph Vertices with Applications to Synonym Extraction and Web Searching&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.138.2537" target="_blank"&gt;Higher-order web link analysis using multilinear algebra&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.math.ryerson.ca/%7Eabonato/webgraph.html" target="_blank"&gt;A Course on the Web Graph&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pnas.org/content/101/suppl.1/5214.full" target="_blank"&gt;From paragraph to graph: Latent semantic analysis for information visualization&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=874063.875586"&gt;Web search via hub synthesis&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.9257"&gt;Spectral filtering for resource discovery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www10.org/cdrom/papers/pdf/p314.pdf"&gt;Finding authorities and hubs from link structures on the world wide web&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www9.org/w9cdrom/160/160.html"&gt;Graph structure in the web&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.3984"&gt;The structure of broad topics on the web&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=345597"&gt;Topical locality on the web&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.1.7356"&gt;Towards logical hypertext structure - a graph-theoretic perspective&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.108.2624"&gt;The connectivity sonar: detecting site functionality by structural patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.70.8744"&gt;Knowing a web page by the company it keeps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cogprints.org/3981/"&gt;Human-Level Performance on Word Analogy Questions by Latent Relational Analysis&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uzh.ch/home/mazzo/reports/www8conf/2166/pdf/pd1.pdf"&gt;Trawling the web for emerging cyber-communities&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6415676780272387027?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6415676780272387027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6415676780272387027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6415676780272387027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6415676780272387027'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2010/01/independent-study-reading-list-spring.html' title='Independent Study Reading List, Spring 2010'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3244140449743989630</id><published>2009-12-25T19:28:00.001-07:00</published><updated>2009-12-25T19:30:06.567-07:00</updated><title type='text'>A Memory of Vic Chesnutt</title><content type='html'>After I graduated from high school, I got on a bus and went to Athens for two weeks, and had the best possible experience an 18-year-old music junkie could have had at the time.  It's unbelievable but true.   I met Michael Stipe (how exactly is a story in itself) and ended up spending almost a half day with him.  We hung out in the R.E.M. office in downtown Athens while listening to Pylon rehearse in the basement.  We went to his house and had a drink.  We went to a cafe and later, before he dropped me off at the city park where I was camping, a bar.  The next morning I got kicked out of the park and ended up camping uninvited on the roof of the R.E.M. office.  The woman who ran the fan club noticed me through a window sleeping in the sun.  I woke up with a bag next to me; it had a tube of sunscreen and some fruit.  Turns out her boyfriend, Armistead Wellford, was the bass player in Love Tractor.  She arranged for me to stay in a big old house where a lot of the band members lived.  All of that was more than I imagined would happen when I got on the Greyhound bus in Fargo, North Dakota.&lt;br /&gt;&lt;br /&gt;But in retrospect the most significant thing I saw there was when Stipe and I were at the cafe.  He introduced me to some people at a table -- two women who I don't remember, and a man in a wheelchair, Vic Chesnutt.  A cassette player played recording of one of Vic's live performances.  While we sat at the table and talked, Stipe told Chesnutt that he'd like to help him record a record.   It was the summer of 1988.   Two years later New West Records released Chesnutt's Little, which Stipe produced.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3244140449743989630?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3244140449743989630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3244140449743989630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3244140449743989630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3244140449743989630'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/12/memory-of-vic-chesnutt.html' title='A Memory of Vic Chesnutt'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7563666832673090741</id><published>2009-12-01T11:12:00.003-07:00</published><updated>2009-12-01T11:15:50.264-07:00</updated><title type='text'>Wiki terminology, like wikipedia, not optimized for search.</title><content type='html'>&lt;span style="font-family: trebuchet ms;"&gt;In MediaWiki terms, including a page in another page&lt;/span&gt; is called &lt;a href="http://meta.wikimedia.org/wiki/Transclusion"&gt;transclusion&lt;/a&gt;, an accurate word, but not one that automatically comes to mind.  I searched for "macros" and "include" for a while and, after a few minutes, found a page that mentions transclusion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7563666832673090741?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7563666832673090741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7563666832673090741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7563666832673090741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7563666832673090741'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/12/wiki-terminology-like-wikipedia-not.html' title='Wiki terminology, like wikipedia, not optimized for search.'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8879456795311645070</id><published>2009-12-01T10:37:00.002-07:00</published><updated>2009-12-01T10:41:13.209-07:00</updated><title type='text'>More papers to read</title><content type='html'>From a &lt;a href="http://nlpers.blogspot.com/2009/03/nlp-as-study-of-representations.html?showComment=1257778941660#c8569368538616970943"&gt;comment&lt;/a&gt; on the Natural Language Processing blog, classic papers in NLP:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Bahl et al., 1983] L.R. Bahl, F. Jelinek and R.L. Mercer. "A Maximum Likelihood Approach to Continuous Speech Recognition." IEEE Journal of Pattern Analysis and Machine Intelligence.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Charniak, 1983] Eugene Charniak. Passing Markers: A Theory of Contextual Influence in Language Comprehension, Cognitive Science, 7, pp. 171-190.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Charniak, 1973] Jack and Janet in Search of a Theory of Knowledge. In Proceedings of the International Joint Conference on Artificial Intelligence (1973) &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Charniak, 1977] Eugene Charniak. Ms. Malaprop, A Language Comprehension Program. In Proceedings of the International Joint Conference on Artificial Intelligence (1977).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Cohen et al. 1982] Philip R. Cohen, C. Raymond Perrault, and James F. Allen. Beyond Question Answering. Strategies for Natural Language Processing, pp. 245- 274.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Grosz, Joshi, and Weinstein, 1995]. Centering: A Framework for Modeling the Local Coherence of Discourse. Computational Linguistics, 21 (2), pp. 203-226.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Grosz and Sidner, 1986]. Attention, Intention, and the Structure of Discourse. Computational Linguistics, 12 (3), pp. 175-204, 1986.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Hobbs et al., 1993]. Interpretation as Abduction. Artificial Intelligence, vol 63. pp. 69-142.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Hobbs, 1979] Jerry Hobbs. Coherence and Coreference, Cognitive Science 3(1), pp. 67-90. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Hovy, 1988] Hovy, E.H. 1988. Planning Coherent Multisentential Text.  Proceedings of 26th ACL Conference. Buffalo, NY.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Karttunen, 1969] Lauri Karttunen. 1969. Pronouns and variables. In CLS 5: Proceedings of the Fifth Regional Meeting, pages 108-116, Chicago, Illinois. Chicago Linguistic Society.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Kay, 1986] Martin Kay.  Parsing in functional unification grammar.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Lakoff &amp;amp; Johnson, 1980] George Lakoff and Mark Johnson. Metaphors We Live By, Chapters 1-4. (short - a total of 21 pages).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Lehnert, 1981] Wendy G. Lehnert. Plot units and narrative summarization. Cognitive Science, Volume 5, Issue 4, October-December 1981, Pages 293-331&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Lehnert, 1977] Wendy Lehnert. Human and Computational Question Answering. Cognitive Science, Vol. 1, No. 1, pp. 47-73.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Mann and Thompson, 1988]. Rhetorical Structure Theory: Toward a functional theory of text organization. Text 8 (3), pp. 243-281, 1988.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Martin et al., 1986] P. Martin, D. Appelt and F. Pereira. Transportability and generality in a natural-language interface system.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[McKeown 1986] Kathleen McKeown.  Discourse strategies for generating natural-language text.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Rosch and Mervis, 1975] Eleanor Rosch and Carolyn B. Mervis. Family Resemblances: Studies in the Internal Structure of Categories, Cognitive Psychology, 7, 573-605. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Schank, 1986]  Roger Schank.  Language and memory.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Schubert and Pelletier, 1986] L Schubert and F J Pelletier. From English to logic: context-free computation of "conventional" logical translations.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Wilks, 1975] Yorick Wilks. An Intelligent Analyzer and Understander of English, CACM 1975.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: trebuchet ms;"&gt;[Woods, 1986] W.A. Woods.  Semantics and quantification in natural language question answering.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8879456795311645070?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8879456795311645070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8879456795311645070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8879456795311645070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8879456795311645070'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/12/more-papers-to-read.html' title='More papers to read'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6379479015034110464</id><published>2009-11-29T09:00:00.006-07:00</published><updated>2009-11-29T11:43:57.676-07:00</updated><title type='text'>Independent Study: Concolic testing for web applications</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;a href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially wh&lt;/span&gt;&lt;span style="font-style: italic;"&gt;en the paper was published at least several years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This week, two papers about web applications from the International Symposium on Software Testing and Analysis '08:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=1390661"&gt;Dynamic Test Input Generation for Web Applications&lt;/a&gt;, Wasserman, et al&lt;/li&gt;&lt;li&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=1390662"&gt;Finding Bugs in Dynamic Web Applications&lt;/a&gt;, Artzi, et al&lt;/li&gt;&lt;/ul&gt;&lt;a style="font-weight: bold;" href="http://portal.acm.org/citation.cfm?id=1390661"&gt;Dynamic Test Input Generation for Web Applications&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here the authors use the &lt;a href="http://en.wikipedia.org/wiki/Concolic_testing"&gt;concolic testing&lt;/a&gt; method pioneered in the seminal paper on &lt;a href="http://cm.bell-labs.com/who/god/public_psfiles/pldi2005.pdf"&gt;Directed Automated Randomized Testing&lt;/a&gt; (PDF) to generate tests automatically for web applications written in PHP.&lt;br /&gt;&lt;br /&gt;Use a taint-based (clarify) PHP runtime environment as the test oracle (which determines whether a failure occurs).  The purpose of automatically generating tests is to automatically identify bugs in the program and, narrowly, the type of bugs the authors are trying to identify are SQL injection vulnerabilities.  To that end, they iteratively construct (what they call) an &lt;span style="font-style: italic;"&gt;approximate &lt;/span&gt;backward slice of the PHP program by (loosely speaking):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;identify statements where such vulnerabilities may cause undesired behavior (viz. database library calls where the injected SQL can ultimately do harm),&lt;/li&gt;&lt;li&gt;add the functions where such statements occur to a set of functions to be analyzed,&lt;/li&gt;&lt;li&gt;execute the program by loading it in a browser&lt;/li&gt;&lt;li&gt;resolve control dependencies by recording stack trace at the beginning&lt;/li&gt;&lt;li&gt;analyze data dependencies&lt;/li&gt;&lt;li&gt;repeating (with some variations) until all data dependencies are resolved&lt;/li&gt;&lt;/ol&gt;The purpose of the preceding steps is to exclude from the analysis aspects of the program that won't help identify SQL vulnerabilities in the code.&lt;br /&gt;&lt;br /&gt;Section 3 of the paper discusses the authors' algorithm for generating constraints for PHP.&lt;br /&gt;&lt;br /&gt;Section 4 evaluates the system.  Constraint generation is accomplished by a plugin to phc, a PHP compiler front-end.  The plugin "wraps each statement in a function call"; the function call logs a trace of the program's execution to a file.  They deal with eval by passing the string to be eval-ed through the plugin, so each statement in the eval-ed string is wrapped in a function call which logs a trace to the same file.  Constraints are resolved by reading and symbolically executing the trace file.  The result is "a list of Boolean control expressions where each subexpression is annotated with a concrete value from the execution."&lt;br /&gt;&lt;br /&gt;An interesting aspect of the authors' evaluation is the overhead of the tracing process.  When they evaluated an entire PHP program, the trace file for loading a single web page was almost 3 GB and the page load timed out.  So the iterative process of limiting the scope of their analysis mentioned above was necessary for obvious practical reasons.&lt;br /&gt;&lt;blockquote&gt;Previous work on leveraging symbolic and runtime values for input test generation falls back on concrete values when the symbolic value being addressed lies outside the theory of the resolution algorithm’s decision procedure. Our constraint resolution algorithm generates constraints only based on one variable instance per value.  Therefore it may underapproximate the symbolic values of variables when program predicates depend on multiple variables, and it may miss paths that other resolution algorithms would find. In principle our constraint resolution algorithm could be enhanced to include multivariate constraints in some cases, but we leave that to future work.&lt;br /&gt;&lt;/blockquote&gt;&lt;a href="http://www.computer.org/portal/web/csdl/doi/10.1109/CMPSAC.2000.884778"&gt;An object-oriented web test model for testing web applications&lt;/a&gt;, Kung, et al, may be interesting reading:&lt;br /&gt;&lt;blockquote&gt;This paper describes an Object-Oriented test model that captures both structural and behavioral test artifacts of Web applications. The model represents the entities of Web applications as objects and describes their structures, relationships, and dynamic behaviors. Based on the test model, test methods are presented to derive test cases automatically for ensuring the structures and behaviors of Web applications&lt;/blockquote&gt;&lt;a style="font-weight: bold;" href="http://portal.acm.org/citation.cfm?id=1390662"&gt;Finding Bugs in Dynamic Web Applications&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The previous paper focused on web application security.  This paper focuses on web application reliability.  Where the previous paper's goal was to identify vulnerabilities to SQL-injection attacks, this paper's goal is to identify bugs that cause web applications to crash or generate invalid HTML.  (Web application crashes that can be triggered by user input become denial-of-service attack vulnerabilities once they become known to bad actors.)  Similarly, where the test oracle of the previous paper is a PHP runtime environment that supports checking strings for taintedness (failure being defined as the use of an untained string in an SQL statement), the test oracle of this paper is an HTML validator (failure being defined as the web application generating invalid HTML).&lt;br /&gt;&lt;br /&gt;Testing whether a web application generates valid HTML is hard for dynamic web pages.  Systems exist for validating dynamically-generated web pages, but the require the tester to create tests manually.  Here the authors present a system, Apollo, for automatically generating tests for dynamic pages.&lt;br /&gt;&lt;br /&gt;Something I don't understand.  Here's a passage from the paper:&lt;br /&gt;&lt;blockquote&gt;The HTML pages generated by a PHP applications may contain buttons that—when pressed by the user—result in the loading and execution of additional PHP source files. We simulate such user input by transforming the source code. Specifically, for each page h that contains N buttons, we add an additional input parameter p to the PHP program, whose values may range from 1 through N. Then, at the place where page p is generated, a switch statement is inserted that includes the appropriate PHP source file, depending on the value supplied for p. The steps of the user input simulator are fully mechanic, and the required modifications are minimal, but for the evaluation we performed the program transformation by hand (due to time constraints).&lt;/blockquote&gt;Normally, submit buttons result in an HTML form being POST'ed to the web application.  From the context, it's not clear why the system wouldn't simply POST the form.   An additional passage&lt;br /&gt;&lt;blockquote&gt;The stand-alone component of the User Input Simulator performs a transformation of the program that models interactive user input by way of additional parameters.&lt;/blockquote&gt;Still a little confused. :-)&lt;br /&gt;&lt;br /&gt;Ah, I get it:&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;br /&gt;  &lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(166, 87, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;?php&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; font-weight: bold;"&gt;echo&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt; &lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(0, 0, 230); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;"&amp;lt;h2&gt;WebChess "&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 128, 48); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;.&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;$Version&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 128, 48); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;.&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(0, 0, 230); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;" Login"&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 128, 48); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 128, 48); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;/&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;h2&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 128, 48); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&gt;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(128, 0, 128); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;;&lt;/span&gt;&lt;span style="background: rgb(255, 255, 232) none repeat scroll 0% 0%; color: rgb(166, 87, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;?&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;form&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;method&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"post"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;action&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"mainmenu.php"&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;          Nick: &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;input&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"txtNick"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"text"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;size&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"15"&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;/&gt;&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;br&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;          Password: &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;input&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"pwdPassword"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"password"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;size&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"15"&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;input&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"login"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"login"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"submit"&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;          &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;input&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"newAccount"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;value&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"New Account"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(39, 71, 150);"&gt;                &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;type&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"button"&lt;/span&gt;&lt;span style="color: rgb(39, 71, 150);"&gt; &lt;/span&gt;&lt;span style="color: rgb(7, 71, 38);"&gt;onClick&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"window.open('newuser.php', '_self')"&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;/&gt;&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;p&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: rgb(166, 87, 0);"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;form&lt;/span&gt;&lt;span style="color: rgb(166, 87, 0);"&gt;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Nothing else very interesting here.  They evaluate their system, present the results, related work, etc.&lt;br /&gt;&lt;br /&gt;Other reading:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://portal.acm.org/citation.cfm?id=1287624.1287646"&gt;Improving test case generation for web applications using automated interface discovery&lt;/a&gt;, Halfond, et al, focuses on JavaScript.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6379479015034110464?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6379479015034110464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6379479015034110464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6379479015034110464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6379479015034110464'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/independent-study-concolic-testing-for.html' title='Independent Study: Concolic testing for web applications'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7962329312778949245</id><published>2009-11-26T07:18:00.013-07:00</published><updated>2009-11-27T11:33:00.796-07:00</updated><title type='text'>Notes for Information Retrieval Quiz #3</title><content type='html'>Some things to review before the Information Retrieval quiz:&lt;br /&gt;&lt;a href="http://www.cs.colorado.edu/%7Emartin/csci5417/slides/IR-lec18.pdf"&gt;&lt;br /&gt;Lecture 18, Collaborative Filtering and Recommender Systems&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pearson correlation&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.colorado.edu/%7Emartin/csci5417/slides/IR-lec19.pdf"&gt;Lecture 19, Information Extraction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Named entity recognition: find and classify (i.e. determine the category of) all the named entities in a text.  Two approaches to named entity recognition:&lt;br /&gt;Rule-based (regular expressions)&lt;ul&gt;&lt;li&gt;Lists of names&lt;/li&gt;&lt;li&gt;Patterns to match things that look like names&lt;/li&gt;&lt;li&gt;Patterns to match the environments that classes of names tend to occur in&lt;/li&gt;&lt;/ul&gt;ML-based&lt;ul&gt;&lt;li&gt;Get annotated training data&lt;/li&gt;&lt;li&gt;Extract features&lt;/li&gt;&lt;li&gt;Train systems to replicate the annotation&lt;/li&gt;&lt;/ul&gt;Relation analysis consists of two tasks:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;determine if two entities are related&lt;/li&gt;&lt;li&gt;if they are, classify the relation&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Features in relation analysis (for each of the above tasks) are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Features of the named entities involved (their types [concatenation of the types, headwords of the entities)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Features derived from the words between and around the named entities (+- 1, 2, 3; bag of words between)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Features derived from the syntactic environment that governs the two entities (constituent path through the tree from one entity to the other; base syntactic chunk sequence from one to the other; dependency path)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Template filling&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Rules and cascades of rules&lt;/li&gt;&lt;li&gt;Supervised ML as sequence labeling&lt;/li&gt;&lt;ol&gt;&lt;li&gt;One sequence classifier per slot&lt;/li&gt;&lt;li&gt;One big sequence classifier&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;a href="http://www.cs.colorado.edu/%7Emartin/csci5417/slides/IR-lec20.pdf"&gt;Lecture 20, Sentiment Analysis&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Classification in sentiment analysis&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Coarse classification of sentiment&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Document-level classification according to some simple (usually binary) scheme&lt;ul&gt;&lt;li&gt;Political bias&lt;/li&gt;&lt;li&gt;Likes/hates&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Fine-grained classification of sentiment-bearing mentions in a text&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Positive/negative classifichttp://www.blogger.com/post-edit.g?blogID=35269538&amp;amp;postID=7962329312778949245ations of opinions about entities mentioned in a text&lt;/li&gt;&lt;li&gt;Perhaps with intensity&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;Choosing a vocabulary&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Essentially feature selection&lt;/li&gt;&lt;li&gt;Previous examples used all words&lt;/li&gt;&lt;li&gt;Can we do better by focusing on subset of words?&lt;/li&gt;&lt;li&gt;How to find words, phrases, patterns that express sentiment or polarity?&lt;/li&gt;&lt;li&gt;Adjectives&lt;/li&gt;&lt;ul&gt;&lt;li&gt;positive: honest important mature large patient&lt;/li&gt;&lt;li&gt;negative: harmful hypocritical inefficient insecure&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Verbs&lt;/li&gt;&lt;ul&gt;&lt;li&gt;positive: praise, love&lt;/li&gt;&lt;li&gt;negative: blame, criticize&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Nouns&lt;/li&gt;&lt;ul&gt;&lt;li&gt;positive: pleasure, enjoyment&lt;/li&gt;&lt;li&gt;negative: pain, criticism&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;a href="http://www.cs.colorado.edu/%7Emartin/csci5417/slides/IR-lec21.pdf"&gt;Lecture 21, Sentiment Analysis (cont.)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Identifying polarity words&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Assume that generating exhaustive lists of polarity words is too hard&lt;/li&gt;&lt;li&gt;Assume contexts are coherent with respect to polarity&lt;/li&gt;&lt;li&gt;Fair &lt;span style="font-style: italic;"&gt;and &lt;/span&gt;legitimate, corrupt &lt;span style="font-style: italic;"&gt;and &lt;/span&gt;brutal&lt;/li&gt;&lt;li&gt;But not: fair &lt;span style="font-style: italic;"&gt;and &lt;/span&gt;brutal, corrupt &lt;span style="font-style: italic;"&gt;and &lt;/span&gt;legitimate&lt;/li&gt;&lt;li&gt;Example:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Extract all adjectives with &gt; 20 frequency from WSJ corpus&lt;/li&gt;&lt;li&gt;Label them for polarity&lt;/li&gt;&lt;li&gt;Extract all conjoined adjectives&lt;/li&gt;&lt;li&gt;A supervised learning algorithm builds a graph of adjectives linked by the same or different semantic orientation&lt;/li&gt;&lt;li&gt;A clustering algorithm partitions the adjectives into two subsets&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;Challenges&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mixed sentiment: The steering is &lt;span style="font-style: italic; font-weight: bold;"&gt;accurate &lt;/span&gt;but feels somewhat &lt;span style="font-style: italic; font-weight: bold;"&gt;anesthetized&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sentiment inverters: ... &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;never&lt;/span&gt; &lt;/span&gt;seen any RWD cars can &lt;span style="font-style: italic;"&gt;handle &lt;span style="font-weight: bold;"&gt;well&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;on snow even&lt;br /&gt;just few inches.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Anaphora and meronymy:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;It's&lt;/span&gt; a &lt;span style="font-style: italic; font-weight: bold;"&gt;great car&lt;/span&gt; for just about anything. The &lt;span style="font-style: italic; font-weight: bold;"&gt;mkVI&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;is pretty&lt;br /&gt;much a &lt;span style="font-style: italic; font-weight: bold;"&gt;mkv &lt;/span&gt;but ironing out all the small problems.&lt;/li&gt;&lt;li&gt;Hey is the &lt;span style="font-style: italic;"&gt;back seat&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;comfortable&lt;/span&gt;? In my MkV it feels like&lt;br /&gt;you're sitting on a &lt;span style="font-style: italic; font-weight: bold;"&gt;vat of acid&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7962329312778949245?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7962329312778949245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7962329312778949245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7962329312778949245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7962329312778949245'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/notes-for-information-retrieval-quiz-3.html' title='Notes for Information Retrieval Quiz #3'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5880768739503177498</id><published>2009-11-22T08:49:00.010-07:00</published><updated>2009-11-22T11:44:31.295-07:00</updated><title type='text'>Independent Study: Concepts and Experiments in Computational Reflection</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)  (&lt;/span&gt;&lt;span style="font-style: italic;"&gt;I've written most of these posts in the form of a review of a conference paper, but I'm going to use a free-form style this time.)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Pattie Maes's wonderful &lt;a href="http://portal.acm.org/citation.cfm?id=38821"&gt;paper&lt;/a&gt; on reflection is a perfect follow-on to my reading about &lt;a href="http://hexencodings.blogspot.com/2009/11/independent-study-traits-composable.html"&gt;traits&lt;/a&gt;.  My motivation for reading the traits paper was that Perl's Moose (Perl 6, too!) has traits (it calls them roles).  I've been using &lt;a href="http://www.iinteractive.com/moose/"&gt;Moose&lt;/a&gt; at lot at work and I wanted to catch up with the research behind traits to prepare for a short &lt;a href="http://www.slideshare.net/ndronen/moose-2558765"&gt;talk&lt;/a&gt; I gave about it to my colleagues.  After the talk, a colleague who was at Bell Labs in the 80's mentioned a paper about reflection by Pattie Maes at OOPSLA in '87 which led to the &lt;a href="http://en.wikipedia.org/wiki/Metaobject"&gt;MetaObject Protocol&lt;/a&gt; in the Common Lisp Object System (CLOS), which in part inspired Moose, so Maes's paper closes the loop, ices the cake, etc.&lt;br /&gt;&lt;br /&gt;Many programmers know of reflection from the java.lang.reflect package in the Java API.  Suffice it to say for the moment that Maes' reflection is expansive and Java's reflection is by comparison quite limited.   However, reflection in Java does serve as a good starting point for understanding Maes.  What the Java API does provide is programmatic access to information about objects at runtime by exposing an interface to what Maes calls the "self-representation of the system ... which makes it possible for the system to answer questions about itself and support actions on itself."   To wit, java.lang.reflect allows the Java programmer to find out which methods or constructors, etc., exist for a given object, and to invoke them.&lt;br /&gt;&lt;br /&gt;However, Maes goes a step further (or, more appropriately, Java didn't go as far as Maes imagined, for better or worse) by asserting that "a computational system can actually bring modifications to itself by virtue of its own computation."  The modifications Maes envisions are pervasive.  In her experimental object-oriented language, 3-KRS, reflection on an object occurs by way of a meta-object associated with the object.  (The motivation for performing reflection on an object through a separate entity, its meta-object, may not have been obvious before Maes' paper, but in retrospect it's a clear case of separation of concerns.)   Since everything is an object in a pure object-oriented language, meta-objects are everywhere:&lt;br /&gt;&lt;blockquote&gt;[T]he self-representation of an object-oriented system is uniform. Every entity in a 3-KRS system is an object: instances, classes, slots, methods, meta-objects, messages, etc.  Consequently every aspect of a 3-KRS system can be reflected upon.  All these objects have meta-objects which represent the self-representation corresponding to that object.&lt;/blockquote&gt;For the uninitiated (including me), a slot is, loosely, an instance variable.  And I suspect that the difference between a method and message is that a method defines a method (pardon the circularity) and a message "calls" a method.  (The notion of a message likely goes back to Smalltalk.)&lt;br /&gt;&lt;br /&gt;Further, meta-objects are manipulable at runtime, so — to borrow an example from Maes — a language that supports reflection in all its glory allows the programmer to modify &lt;span style="font-style: italic;"&gt;meta-objects&lt;/span&gt; to provide support for multiple inheritance.  Intuitively, a complete reflective system is an API for the semantics of a programming language.  (&lt;a href="http://en.wikipedia.org/wiki/Metaobject"&gt;See also&lt;/a&gt;: "A metaobject protocol (MOP) is an interpreter of the semantics of a program that is open and extensible.")&lt;br /&gt;&lt;br /&gt;Two aspects of Maes's reflection which are not true for popular statically-typed languages, then, are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;meta-objects are pervasive&lt;/li&gt;&lt;li&gt;meta-objects are mutable&lt;/li&gt;&lt;/ul&gt;Obviously for, say, Java or C#, this is true by design.  Enterprises of all kinds are often hard-pressed to find programmers who can understand the source code of their larger applications.  Some managers are left in the lurch when a key employee departs.  Self-modifying code, one might say, is job security.  So clarity, explicitness, consistency, readability — these language properties are desirable for production software.  A complete reflective system violates them.  The flip side of this is expressiveness.  &lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language"&gt;Domain-specific languages&lt;/a&gt; (DSLs) come to mind.  Being able to define little languages to solve a particular problem, and to compose larger applications from modules written in little languages, is an attractive idea.  I'd like to say more about DSLs and how they relate to reflective systems, but I don't know much more than that they've been &lt;a href="http://www.java2s.com/Article/Java/Development/DSL.htm"&gt;seeping&lt;/a&gt; into programming culture for &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;quite&lt;/a&gt; some &lt;a href="http://martinfowler.com/dslwip/"&gt;time&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Incidentally, &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;Aspect-Oriented Programming&lt;/a&gt; (AOP) exists to address the fact that cross-cutting concerns — any application requirements that cause code to be scattered throughout a code base (e.g. logging, security) — violate modularity.  However, it also bridges the gap between the limited form of reflection that exists in Java and some of the more interesting uses of reflection Maes mentions — such as being able to trace the execution of a program (with e.g. print statements) without modifying the program itself.  This is no coincidence.  Gregor Kiczales, the author of a book about the MetaObject Protocol, which was inspired by Maes' paper, is a coauthor of the &lt;a href="http://citeseer.ist.psu.edu/kiczales97aspectoriented.html"&gt;earliest paper on AOP&lt;/a&gt;.  In a sense, implementations of AOP attempt to augment a language with a meta-object protocol without changing the language itself.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5880768739503177498?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://portal.acm.org/citation.cfm?id=38821' title='Independent Study: Concepts and Experiments in Computational Reflection'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5880768739503177498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5880768739503177498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5880768739503177498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5880768739503177498'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/independent-study-concepts-and.html' title='Independent Study: Concepts and Experiments in Computational Reflection'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7015613955118811004</id><published>2009-11-12T08:21:00.002-07:00</published><updated>2009-11-12T08:47:57.171-07:00</updated><title type='text'>A Little History of Electronic SEC Filings</title><content type='html'>In 1986, the Securities and Exchange Commission started to accept SEC filings — 10-K forms and the like — electronically.  Between '86 and '92, only a handful of companies filed their 10-K electronically.  The companies?&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1986&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;1987&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;1988&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;li&gt;Fast Eddie Racing Stables, Inc.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;1989&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;li&gt;Fast Eddie Racing Stables, Inc,.&lt;/li&gt;&lt;li&gt;Jilco Industries, Inc.&lt;/li&gt;&lt;li&gt;Whitney American Corp.&lt;/li&gt;&lt;li&gt;Filmagic Entertainment Corp.&lt;/li&gt;&lt;li&gt;First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1989-2&lt;/li&gt;&lt;li&gt;First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1989-3&lt;/li&gt;&lt;li&gt;First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1989-5&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;1990&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;li&gt; Fast Eddie Racing Stables, Inc,.&lt;/li&gt;&lt;li&gt; Jilco Industries, Inc.&lt;/li&gt;&lt;li&gt; Filmagic Entertainment Corp.&lt;/li&gt;&lt;li&gt;Xanthic Enterprises, Inc.&lt;/li&gt;&lt;li&gt;First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1988-1&lt;/li&gt;&lt;li&gt; First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1988-2&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;1991&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;li&gt;  Fast Eddie Racing Stables, Inc,.&lt;/li&gt;&lt;li&gt;  Jilco Industries, Inc.&lt;/li&gt;&lt;li&gt;  Filmagic Entertainment Corp.&lt;/li&gt;&lt;li&gt;Xanthic Enterprises, Inc.&lt;/li&gt;&lt;li&gt;Admiral Financial Corp.&lt;/li&gt;&lt;li&gt;Quad Metals Corp.&lt;/li&gt;&lt;li&gt;First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1988-4&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;blockquote&gt;1992&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Medical Monitors, Inc.&lt;/li&gt;&lt;li&gt;   Fast Eddie Racing Stables, Inc,.&lt;/li&gt;&lt;li&gt;   Jilco Industries, Inc.&lt;/li&gt;&lt;li&gt;   Filmagic Entertainment Corp.&lt;/li&gt;&lt;li&gt; Xanthic Enterprises, Inc.&lt;/li&gt;&lt;li&gt; Admiral Financial Corp.&lt;/li&gt;&lt;li&gt; Quad Metals Corp.&lt;/li&gt;&lt;li&gt;American Housing Partners&lt;/li&gt;&lt;li&gt; First Boston Mortgage Sec. Corp. Con Mor Pas Thr Cer CR 1992-3&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;While I get the obvious kick out of Fast Eddie Racing Stables, Inc. — that it's publicly traded and was an early-comer to electronic SEC filing — my hunch is that these early companies are there not necessarily because of who runs them (although it's certainly possible that Medical Monitors, Inc. has a techno-saavy CEO) but more likely because 86-92 was a period of controlled introduction.  In the following years, the number of electronically-filed 10-Ks were:&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div style="text-align: justify;"&gt;Year     # of filings&lt;br /&gt;1993    1305&lt;br /&gt;1994    1249&lt;br /&gt;1995    3460&lt;br /&gt;1996    6482&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;I suspect that the SEC opened the flood gates only partially in 93-94, a bit more in 95, and completely in 96.  On the other hand, this was the era during which the Internet was really taking off, so it's hard to distinguish between what the SEC mandated and what it allowed.&lt;br /&gt;&lt;br /&gt;If you're wondering what those First Boston Mortgage things are, they're probably asset-backed securities, which are by far the largest class of securities regulated by the SEC.  Commercial state banks are up there, too.  But it's interesting that the largest group of securities aren't even operating companies — they're just a publicly-traded piece of paper that represents a share of ownership in some asset.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7015613955118811004?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7015613955118811004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7015613955118811004' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7015613955118811004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7015613955118811004'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/little-history-of-electronic-sec.html' title='A Little History of Electronic SEC Filings'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5052496797908518323</id><published>2009-11-08T18:40:00.007-07:00</published><updated>2009-11-08T18:57:58.349-07:00</updated><title type='text'>Modeling the World Wide Web</title><content type='html'>Just so I don't forget, some papers by &lt;a href="http://scholar.google.com/scholar?as_q=Filippo+Menczer&amp;amp;as_sauthors=%22Filippo+Menczer%22&amp;amp;as_ylo=2004"&gt;Filippo Menczer&lt;/a&gt;, who appears to be doing work related to an idea I've been mulling over for a while.&lt;br /&gt;&lt;br /&gt;Informally, consider the World Wide Web as a graph with web pages as nodes and hyperlinks as edges, label each node with some value derived from the contents of the web page (e.g. the length of the page, the set of terms in the page, or the term vector for the page), then define the value of an edge as the difference between the nodes it connects.  This basically yields a geometric representation of the web graph by mapping it into some metric space.  (If the idea is still fuzzy, imagine a hyperlink as a function from the document that contains it to the document to which it points.)&lt;br /&gt;&lt;br /&gt;Now that I've found some already-published work on this model, I'll have to spend next semester learning what people have already done so I can do something new.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5052496797908518323?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5052496797908518323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5052496797908518323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5052496797908518323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5052496797908518323'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/modeling-world-wide-web.html' title='Modeling the World Wide Web'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7242409429200010933</id><published>2009-11-06T19:54:00.015-07:00</published><updated>2009-11-08T17:29:47.287-07:00</updated><title type='text'>Independent Study: Traits: Composable Units of Behaviour</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Submission: Traits: &lt;a href="http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf"&gt;Composable Units of Behaviour&lt;/a&gt; [PDF]&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;blockquote&gt;If you start with the reasonable assumption that code reuse improves programmer productivity, an important question is how to increase code reuse.  Historically, inheritance — both single and multiple — has been a mechanism for code reuse, in as much as it has allowed classes to be composed at least in part from other classes.  Mixins solve some of the problems of single and multiple inheritance, but they don't work well when a class uses two or more mixins containing identically-named methods.  Traits solve the same problems as mixins, but don't suffer from their limitations.&lt;/blockquote&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;Traits solve the problems of previous attempts to facilitate code reuse.  Further, they suggest a style of designing software — as collections of traits (which ideally define only a single method) instead of collections of classes — that may be useful in its own right.&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;None noted.&lt;/blockquote&gt;Evaluation:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Wonderful!&lt;/blockquote&gt;Novelty:&lt;br /&gt;&lt;blockquote&gt;The authors note that traits are inspired by mixins, and in one (arguably incorrect) sense, traits are merely an incremental improvement on mixins; however, the deficiencies the authors identify in mixins are real (and especially important for large, complex applications) and require solving, so the fact that traits aren't light years ahead of mixins is irrelevant, as the improvements traits provide are necessary.&lt;br /&gt;&lt;/blockquote&gt;Convincing:&lt;br /&gt;&lt;blockquote&gt;Yes.  The refactoring example helps the authors make a stong case for traits.&lt;/blockquote&gt;Worth solving:&lt;br /&gt;&lt;blockquote&gt;See my response about novelty above.&lt;/blockquote&gt;Confidence:&lt;br /&gt;&lt;blockquote&gt;I'm confident in the material in this paper.  &lt;/blockquote&gt;Detailed comments:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The notion that code reuse improves programmer productivity is non-controversial.  A library of well-tested and widely-used classes in a language's ecosystem provides not only  implementations of common functionality (thereby relieving programmers of having to implement and test that functionality themselves) but also (because classes and methods are named) a common language for communication among programmers — both of which reduce "friction" during software development.&lt;br /&gt;&lt;br /&gt;A problem for API designers is that code reuse in most common object-oriented languages is done at the level of the class definition — a client class &lt;span style="font-family:courier new;"&gt;T&lt;/span&gt; of the some API class &lt;span style="font-family:courier new;"&gt;U&lt;/span&gt; reuses &lt;span style="font-family:courier new;"&gt;U&lt;/span&gt; either by extending &lt;span style="font-family:courier new;"&gt;U&lt;/span&gt; or by otherwise referring to &lt;span style="font-family:courier new;"&gt;U&lt;/span&gt; (e.g. statically, as the type of a local variable, as the type of a member variable).   This can lead to an undesirable &lt;span style="font-style: italic;"&gt;decoupling&lt;/span&gt; of generic functionality, making it hard for programmers to discover reusable code.  For example, in Java, to sort an object of the type of a class which implements java.util.List, one needs to know to use the sort method of the Collections class.  Acquiring this knowledge isn't necessarily onerous for a programmer, but it likely leads novice programmers to implement their own sorting methods.  A language with mixins or traits does not have this problem.  In such a language, a class &lt;span style="font-family:courier new;"&gt;C&lt;/span&gt; that can be sorted uses the mixin or trait that provides a generic sorting routine (as long as &lt;span style="font-family:courier new;"&gt;C&lt;/span&gt; provides whatever methods the mixin or trait requires [e.g. something akin to the &lt;span style="font-family:courier new;"&gt;compareTo&lt;/span&gt; of Java's  &lt;span style="font-family:courier new;"&gt;Comparable&lt;/span&gt;]), and discovering that &lt;span style="font-family:courier new;"&gt;C&lt;/span&gt; can be sorted is a matter of invoking an IDE's method autocomplete feature or, absent IDE support, a cursory examination of the definition of &lt;span style="font-family:courier new;"&gt;C&lt;/span&gt;.  This is similar to the problem of &lt;a href="http://portal.acm.org/citation.cfm?id=1065018"&gt;jungloid navigation&lt;/a&gt;, where a programmer knows what kind of object she wants, but doesn't know how to get it, except in this case a programmer knows what she wants to do with an object (i.e. sort a list), but doesn't know how to do it (i.e. call &lt;span style="font-family:courier new;"&gt;Collections.sort&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;A little history on multiple inheritance, interfaces, and mixins.  So far as I've been able to find, interfaces first appeared in Modula-2 (1978), where they're called &lt;span style="font-style: italic;"&gt;definition modules&lt;/span&gt;.  From the Modula-3 report (I wasn't able to find one for Modula-2): "An interface is a group of declarations.  Declarations in interfaces are the same as in blocks, except that any variable initializations must be constant and procedure declarations must specify only the signature, not the body."  Modula-3 (1980s) also had multiple inheritance.  Mixins first appeared in an OO extension to LISP (called &lt;span style="font-style: italic;"&gt;Flavors&lt;/span&gt; [circa 1980]).  Flavors fed into the Common Lisp Object System, where the concept of a Meta-Object Protocol was first implemented.  Perl's Moose is built atop Class::MOP, which was inspired by the CLOS MOP.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7242409429200010933?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='application/pdf' href='http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf' length='0'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7242409429200010933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7242409429200010933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7242409429200010933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7242409429200010933'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/independent-study-traits-composable.html' title='Independent Study: Traits: Composable Units of Behaviour'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1908078318709560371</id><published>2009-11-01T10:58:00.002-07:00</published><updated>2009-11-01T11:17:50.691-07:00</updated><title type='text'>It's Expensive Being Rich</title><content type='html'>When you open a web page in a browser, the browser loads the page and all other resources to which the page refers.  Some of those resources are files containing JavaScript code, and those files keep getting larger.  Some of them can be large enough to noticeably delay the complete loading of the web page, which is a real problem for web site operators.  Their dilemma is that users demand features, and JavaScript is a way to provide lots of features, but users also demand that pages load quickly, and adding more and more JavaScript increases the time it takes a page to load.  Without changing the underlying technology, it's akin to a zero-sum game, or a game of Whack-a-Mole, or whatever notion you prefer for identifying a situation like this.  The two requirements — provide a rich end-user experience, provide it quickly — are to some degree at odds with one another.&lt;br /&gt;&lt;br /&gt;Recently James Hamilton pointed out &lt;a href="http://perspectives.mvdirona.com/2009/09/13/CodeSplittingForFastJavascriptApplicationStartup.aspx"&gt;a cool research project&lt;/a&gt; which transformed JavaScript source files into a form that allows the source code to be loaded only when needed.  Another approach to dealing with this problem — an approach that is complementary to the approach mentioned by Hamilton —  is to modify the HTML &lt;span style="font-family: courier new;"&gt;script&lt;/span&gt; element to indicate whether the JavaScript source file needs to be loaded immediately or can be loaded "lazily."  This approach exists in the &lt;a href="http://dev.w3.org/html5/spec/Overview.html#script"&gt;&lt;span style="font-family: courier new;"&gt;script&lt;/span&gt; element section&lt;/a&gt; of the HTML 5 draft specification.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1908078318709560371?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1908078318709560371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1908078318709560371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1908078318709560371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1908078318709560371'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/its-expensive-being-rich.html' title='It&apos;s Expensive Being Rich'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2905570704686398705</id><published>2009-11-01T10:18:00.004-07:00</published><updated>2009-11-01T10:26:15.858-07:00</updated><title type='text'>Meditations on Meat</title><content type='html'>Exhibit #1: "&lt;a href="http://www.whysanity.net/monos/evil.html"&gt;My childhood was typical, summers in Rangoon, luge lessons. In the spring we'd make meat helmets.&lt;/a&gt;"&lt;br /&gt;&lt;br /&gt;Exhibit #2: &lt;a href="http://en.wikipedia.org/wiki/Turducken"&gt;Turducken&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Exhibit #3: &lt;a href="http://www.theonion.com/content/node/51139"&gt;Report: Meat Now America's No. 2 Condiment&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Discuss.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2905570704686398705?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2905570704686398705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2905570704686398705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2905570704686398705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2905570704686398705'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/meditations-on-meat.html' title='Meditations on Meat'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1727775016404582501</id><published>2009-11-01T09:08:00.011-07:00</published><updated>2009-11-02T08:43:15.956-07:00</updated><title type='text'>Avoid the Lippis Report</title><content type='html'>My last job was in the telecommunications sector and I had an interest in keeping abreast of developments in the industry.  At the time some people at work were subscribed to &lt;a href="http://lippisreport.com/about-us/"&gt;Nick Lippis&lt;/a&gt;'s mailing list, so I subscribed too.  Gotta know what's known by those in the know.  Now I work in a different business, but I'm finding that the cost of unsubscribing from the list is torture (whether it's eternal torture, I don't know yet, as I've still not been able to unsubscribe).&lt;br /&gt;&lt;br /&gt;First thing I tried was clicking the "unsubscribe" link at the bottom of his emails.  All that did was load the URL http://lippisreport.com/wp-admin/profile.php#delete.   Here's a screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/Su21jUq4l0I/AAAAAAAAAP4/S1A-7AK04sA/s1600-h/lippisn+unsubscribe.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 257px;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/Su21jUq4l0I/AAAAAAAAAP4/S1A-7AK04sA/s400/lippisn+unsubscribe.jpg" alt="" id="BLOGGER_PHOTO_ID_5399171146735720258" border="0" /&gt;&lt;/a&gt;The next logical thing to try was the instructions right above the unsubscribe link, which read:&lt;br /&gt;&lt;blockquote&gt;Login to your Lippis account at &lt;a href="http://lippisreport.com/wp-login.php" target="_blank"&gt;http://lippisreport.com/wp-&lt;wbr&gt;login.php&lt;/a&gt; with username "ndronen," or delete your account by clicking the link below.&lt;/blockquote&gt;Since it's been quite a while since I subscribed, I didn't remember my password, so I opted to have the site change my password.  A new password arrived shortly thereafter, but logging in with it yielded no joy.  Another screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/Su22v61GoII/AAAAAAAAAQA/63YP9INpTzM/s1600-h/ZZ4BC955F2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 283px;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/Su22v61GoII/AAAAAAAAAQA/63YP9INpTzM/s400/ZZ4BC955F2.jpg" alt="" id="BLOGGER_PHOTO_ID_5399172462649188482" border="0" /&gt;&lt;/a&gt;So I'm stuck  — can't unsubscribe with the unsubscribe link, can't login and unsubscribe — so I can only resort to emailing the site directly.  Thanks for wasting my time, Mr. Lippis.&lt;br /&gt;&lt;br /&gt;Incidentally,  the message "You do not have sufficient permissions to access this page" does not mean that I entered an invalid password.  As you can see here, entering an invalid password causes an entirely different message.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/Su24YaTTs2I/AAAAAAAAAQI/1NVAkOsNsgg/s1600-h/lippis3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 290px;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/Su24YaTTs2I/AAAAAAAAAQI/1NVAkOsNsgg/s400/lippis3.jpg" alt="" id="BLOGGER_PHOTO_ID_5399174257803768674" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (9:49 MST)&lt;/span&gt;: It gets better.  I sent email to the contact address listed in the "Lippis Report" email (info@lippis.com) and it bounced.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/Su28mJaRVeI/AAAAAAAAAQY/Lw0EyGlzAHc/s1600-h/unsubscribe-lippis.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 232px;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/Su28mJaRVeI/AAAAAAAAAQY/Lw0EyGlzAHc/s400/unsubscribe-lippis.jpg" alt="" id="BLOGGER_PHOTO_ID_5399178891834250722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So now I'm sending email using the &lt;a href="http://lippisreport.com/contact/"&gt;web form&lt;/a&gt; on the site.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update (8:41 MST 11/02/2009)&lt;/span&gt;: I've received a gracious email from Nick Lippis.  They've removed me from the mailing list and are looking into the problem with the unsubscribe process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1727775016404582501?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1727775016404582501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1727775016404582501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1727775016404582501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1727775016404582501'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/11/avoid-lippis-report.html' title='Avoid the Lippis Report'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IsE9c9rP_4/Su21jUq4l0I/AAAAAAAAAP4/S1A-7AK04sA/s72-c/lippisn+unsubscribe.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3749482455940414302</id><published>2009-10-30T17:44:00.006-06:00</published><updated>2009-11-01T09:45:31.148-07:00</updated><title type='text'>Notes on Content Security Policy</title><content type='html'>It seems I learn better when I write things down, so I'm taking notes as I read the &lt;a href="https://wiki.mozilla.org/Security/CSP/Spec"&gt;spec&lt;/a&gt; for &lt;a href="https://wiki.mozilla.org/Security/CSP"&gt;Content Security Policy&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It's opt-in on a per-site basis.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;It is initially activated in the browser by the presence of an X-Content-Security-Policy header field in an HTTP response.  The value of the header field must be either contain a policy specification or a policy-uri field which denotes the URI from which the browser should fetch the policy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The header field must not be in the trailer headers (i.e. it must be at the top of the HTTP response).  I surmise the purpose of this constraint is that existing browsers may evaluate inline JavaScript as they can, so if the X-Content-Security-Policy field is in the trailer, it's too late.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are two URI types in CSP: policy-uri and report-uri.  The former defines a URI from which a security policy must be fetched.  The latter defines a URI to which violations of the policy should be reported (using e.g. an HTTP POST).&lt;/li&gt;&lt;li&gt;This is interesting.  If there's more than one X-Content-Security-Policy in a response, the browser complies with the intersection of the policies.&lt;/li&gt;&lt;li&gt;If there's more than one report-uri, the browser reports violations to each unique URI — if there are duplicate URIs, the browser only sends one report to it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A policy-uri or report-uri is only legal if it complies with the conventional same-origin policy — that is, if the URI refers to the same scheme/host/port as the page itself.&lt;/li&gt;&lt;li&gt;Inline JavaScript won't execute when CSP is enabled.  The presence of inline JavaScript in a page for which CSP is in effect is a violation and causes a report to be sent to each report-uri.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Eval and any other mechanism for creating code from data (e.g. new Function("i'm evil code masquerading as data")) are not allowed to execute.  They trigger a report to the report-uri, too.&lt;/li&gt;&lt;li&gt;CSP has options for stating different sources for different media types (e.g. img-src for images, media-src for audio/video, script-src for JavaScript, object-src for applets and the like, frame-src for frame and iframe elements, font-src for fonts, xhr-src for XMLHttpRequest, style-src for stylesheets)&lt;/li&gt;&lt;/ul&gt;The spec also contains &lt;a href="https://wiki.mozilla.org/Security/CSP/Spec#Sample_Policy_Definitions"&gt;examples&lt;/a&gt; of policy definitions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3749482455940414302?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3749482455940414302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3749482455940414302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3749482455940414302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3749482455940414302'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/10/notes-on-content-security-policy.html' title='Notes on Content Security Policy'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-4063334332014989418</id><published>2009-10-16T17:14:00.010-06:00</published><updated>2009-10-16T20:27:25.924-06:00</updated><title type='text'>Independent Study: Web Application Security</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Last week and the week before, I read papers which analyzed and proposed solutions for injection attacks in dynamic languages.  This week, instead of reading a paper, I'm digging around for security trends related to JavaScript in the browser and dynamic languages on the server.  Not much seems to have changed since the Spectator paper was published.  There are still JavaScript worms, and the attackers are still using fancy tricks to subvert the filters of the web site operators.  Compare, for instance, these technical descriptions of the original &lt;a href="http://namb.la/popular/tech.html"&gt;MySpace worm&lt;/a&gt; and the quite recent &lt;a href="http://www.reddit.com/r/IAmA/comments/9ox75/i_found_and_wrote_the_exploit_which_crashed/c0dqwzs"&gt;Reddit worm&lt;/a&gt;.  So all-in-all, not much is new.  However, reading &lt;a href="http://projects.webappsec.org/Web-Application-Security-Statistics#Dataanalysis"&gt;this report&lt;/a&gt;from the Web Application Security Consortium, I did run across what is, to me, a new kind of attack — &lt;a href="http://www.owasp.org/index.php/HTTP_Response_Splitting"&gt;HTTP response splitting&lt;/a&gt; — which may warrant further investigation.  I suspect it is the case that existing taint mode techniques can be appropriately applied to HTTP response splitting, but it would be worthwhile to verify.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Resources&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;For Dynamic Languages&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?q=security+site%3Ajavascript.crockford.com"&gt;Douglas Crockford's slides on JavaScript security&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.rorsecurity.info/"&gt;Ruby on Rails Security Project&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-1927"&gt;Python Security Advisories&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;General Internet Security&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.webappsec.org/"&gt;Web Application Security Consortium&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.securityfocus.com/"&gt;Security Focus&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cve.mitre.org/"&gt;Common Vulnerabilities and Exposures&lt;/a&gt;&lt;br /&gt;&lt;a href="http://isc.sans.org/"&gt;SANS Storm Center&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.us-cert.gov/"&gt;US-CERT&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;To get a flavor of US-CERT data, here are 2009 current activity reports:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/01/01/archive.html"&gt;January&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/02/02/archive.html"&gt;February&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/03/02/archive.html"&gt;March&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/04/01/archive.html"&gt;April&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/05/01/archive.html"&gt;May&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/06/01/archive.html"&gt;June&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/07/01/archive.html"&gt;July&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/08/03/archive.html"&gt;August&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/09/01/archive.html"&gt;September&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.us-cert.gov/current/archive/2009/10/01/archive.html"&gt;October&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Feeds&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.webappsec.org/rss/websecurity.rss"&gt;Web Application Security Consortium feed&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.securityfocus.com/rss/index.shtml"&gt;Security Focus feeds&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cve.mitre.org/cve/data_updates.html"&gt;Common Vulnerabilities and Exposures&lt;/a&gt;&lt;br /&gt;&lt;a href="http://isc.sans.org/xml.html"&gt;SANS Internet Storm Center&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sans.org/newsletters/risk/"&gt;SANS: @RISK: The Consensus Security Vulnerability Alert&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.us-cert.gov/channels/"&gt;US-CERT&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;File Under &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Very Useful&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; The Web Application Security Consortium has &lt;a href="http://projects.webappsec.org/Web-Application-Security-Statistics"&gt;statistics&lt;/a&gt; (which appear to be actively maintained) on website vulnerabilities.  The WASC describes the data as  the result of "&lt;span class="bodytext"&gt;a collaborative industry wide effort to pool together sanitized website vulnerability data and to gain a better understanding about the web application vulnerability landscape."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For tracking web application (i.e. web app framework and web browser) security vulnerabilities, SANS's &lt;a href="http://www.sans.org/newsletters/risk/"&gt;@RISK: The Consensus Security Vulnerability Alert&lt;/a&gt; seems to be quite useful.  It compiles reports from a number of commercial security sources.  Here's an example of the web application section of a recent report:&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;Web Application - Cross-Site Scripting&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.24"&gt;09.28.24 -  Zoph Unspecified Cross-Site Scripting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.25"&gt;09.28.25 -  Microsoft Internet Explorer "javascript:" URI in "Refresh"  Header Cross-Site Scripting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.26"&gt;09.28.26 -  Opera Web Browser "javascript:" URI in "Refresh" Header  Cross-Site Scripting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.27"&gt;09.28.27 -  Google Chrome "javascript:" URI in "Refresh" Header Cross-Site  Scripting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.28"&gt;09.28.28 -  Horde "Passwd" Module Cross-Site Scripting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.29"&gt;09.28.29 -  CMME "admin.php" Parameter Cross-Site Scripting&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;Web Application - SQL Injection&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.30"&gt;09.28.30 -  Opial "admin/index.php" SQL Injection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.31"&gt;09.28.31 -  ConPresso CMS "detail.php" SQL Injection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.32"&gt;09.28.32 -  Opial "albumdetail.php" SQL Injection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.33"&gt;09.28.33 -  ClanSphere Multiple SQL Injection Vulnerabilities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.34"&gt;09.28.34 -  Siteframe "document.php" SQL Injection       &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; Web Application&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.35"&gt;09.28.35 -  Drupal Cross-Site Scripting, Code Injection and Information  Disclosure Vulnerabilities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.36"&gt;09.28.36 -  phion airlock Remote Command Execution and Denial of Service&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.37"&gt;09.28.37 -  art of defence hyperguard Remote Denial of Service&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.38"&gt;09.28.38 -  Radware AppWall Source Code Information Disclosure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.39"&gt;09.28.39 -  ADbNewsSender "path_to_lang" Parameter Local File Include&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sans.org/newsletters/risk/display.php?v=8&amp;amp;i=28#09.28.40"&gt;09.28.40 -  Siteframe "phpinfo.php" Information Disclosure       &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;JavaScript&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The advice everyone who knows anything gives to anyone who wants to be safer online is to use &lt;a href="http://noscript.net/"&gt;NoScript&lt;/a&gt;.  I use it.  You should too.  But it's only for Firefox, not all the other browsers out there, and discretionary plugins only get adopted so far.  That leaves a whole lot of browsers (many of which have unpatched vulnerabilities) running on the desktops and laptops of the world.  Further, most Internet users aren't sophisticated enough to know when they need to enable JavaScript, and since there's not a WWW cop to enforce the &lt;a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript"&gt;unobtrusive use of JavaScript&lt;/a&gt;, it's just easier for people to allow JavaScript from every site on the web, which gets us back to square one.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://hexencodings.blogspot.com/2009/09/independent-study-spectator-detection.html"&gt;few weeks ago&lt;/a&gt; I reviewed a system for detecting and containing JavaScript worms which mentions the MySpace JavaScript worm.  Here are some more recent incidents.  The Reddit incident was only a few weeks ago.&lt;br /&gt;&lt;blockquote&gt;2009&lt;br /&gt;&lt;a href="http://www.reddit.com/r/reddithax/comments/9ooav/somebodys_made_a_javascript_worm/"&gt;&lt;/a&gt;&lt;a href="http://www.reddit.com/r/reddithax/comments/9ooav/somebodys_made_a_javascript_worm/"&gt;Somebody's made a javascript worm&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.reddit.com/r/programming/comments/9oo8j/source_code_for_the_redditfirefox_exploit/"&gt;source code for the reddit/firefox [sic] exploit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2008&lt;br /&gt;&lt;a href="http://arstechnica.com/business/news/2008/01/javascript-worm-from-late-2007-happily-frolicking-in-2008.ars"&gt;JavaScript worm from late 2007 happily frolicking in 2008&lt;/a&gt;&lt;br /&gt;&lt;a href="http://arstechnica.com/business/news/2008/01/javascript-worm-still-spreading-infection-origin-unknown.ars"&gt;JavaScript worm still spreading, infection origin unknown&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2007&lt;br /&gt;&lt;a href="http://ryanlrussell.blogspot.com/2007/12/more-on-orkut-worm.html"&gt;More on Orkut worm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2006&lt;br /&gt;&lt;a href="http://www.theregister.co.uk/2006/06/12/javscript_worm_targets_yahoo/"&gt;JavaScript worm targets Yahoo!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2005&lt;br /&gt;&lt;a href="http://namb.la/popular/"&gt;I'm Popular&lt;/a&gt;&lt;br /&gt;&lt;a href="http://namb.la/popular/tech.html"&gt;Technical explanation of the MySpace Worm&lt;/a&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Buffer Overflows, Oh My!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Because they manage memory on behalf of the programmer, dynamic languages may be thought of being invulnerable to buffer overflow attacks.  However, the runtimes of some dynamic languages are implemented in C, which is itself subject to buffer overflow attacks, so programs executing in such runtimes may themselves be vulnerable.  This is illustrated by these &lt;a href="http://www.ruby-lang.org/en/news/2008/06/20/arbitrary-code-execution-vulnerabilities/"&gt;Ruby&lt;/a&gt;, &lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-1927"&gt;Perl&lt;/a&gt;, &lt;a href="http://www.securityfocus.com/bid/30491"&gt;Python&lt;/a&gt;, and &lt;a href="http://www.securityfocus.com/bid/32948"&gt;PHP&lt;/a&gt; vulnerabilities, all reported in 2008.&lt;br /&gt;&lt;br /&gt;The same is true of JavaScript running in &lt;a href="http://www.mozilla.org/security/announce/2006/mfsa2006-57.html"&gt;Firefox&lt;/a&gt;, &lt;a href="http://reviews.cnet.com/8301-10921_7-9677404-6.html"&gt;Internet Explorer&lt;/a&gt;, and &lt;a href="http://www.securityfocus.com/bid/29836"&gt;WebKit/Safari&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-4063334332014989418?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/4063334332014989418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=4063334332014989418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4063334332014989418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4063334332014989418'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/10/independent-study-recent-security.html' title='Independent Study: Web Application Security'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-493918956354895445</id><published>2009-10-09T17:10:00.013-06:00</published><updated>2009-10-09T18:57:54.430-06:00</updated><title type='text'>Indepent Study: Defending against Injection Attacks through Context-Sensitive String Evaluation</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Submission: &lt;a href="http://tadek.pietraszek.org/publications/pietraszek05_defending.pdf"&gt;Defending against Injection Attacks through Context-Sensitive String Evaluation&lt;/a&gt; [PDF]&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;br /&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;Its strength is that the authors present a simple but general analysis of all kinds of injection attacks (e.g. SQL, shell, and others),  and implement a system for preventing and detecting those attacks.  Their system is completely automated, requiring the programmer to make no decisions (and hence make no mistakes), and its generality is extremely appealing.&lt;br /&gt;&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;The runtime overhead of CSSE is a bit steep.&lt;br /&gt;&lt;/blockquote&gt;Evaluation:&lt;br /&gt;&lt;blockquote&gt;Excellent.  This paper should be presented at POOPSLA '99!&lt;br /&gt;&lt;/blockquote&gt;Novelty:&lt;br /&gt;&lt;blockquote&gt;All told, the approach the authors take to solving the problem of injection attacks is similar to Perl's taint mode, but the context-appropriate escaping mechanism is unique to CSSE.&lt;/blockquote&gt;Convincing:&lt;br /&gt;&lt;blockquote&gt;I'm convinced.&lt;br /&gt;&lt;/blockquote&gt;Worth solving:&lt;br /&gt;&lt;blockquote&gt;Definitely.  And I love the way they've solved it.  It's general and it requires no programmer input.&lt;br /&gt;&lt;/blockquote&gt;Confidence:&lt;br /&gt;&lt;blockquote&gt;High.&lt;/blockquote&gt;Detailed comments:&lt;br /&gt;&lt;br /&gt;One thing I should note about this paper is that it is beautifully written.  Killer paragraph (but you have to ignore the superfluous comma after "prevention method"):&lt;br /&gt;&lt;blockquote&gt;This paper introduces Context-Sensitive String Evaluation (CSSE), which is an intrusion detection and prevention method, for injection attacks. It offers several advantages over existing techniques: it requires no knowledge of the application or application source code modiﬁcations and can therefore also be used with legacy applications. It is highly effective against most types of injection attacks, not merely the most common ones. It does not rely on the application developer, which makes it less error-prone. Finally, it is not tied to any programming language and can be implemented on a variety of platforms. &lt;/blockquote&gt;Asking programmers to help validate the security of their application -- as in last week's paper's attempt to disambiguate the purpose of regular expressions by prompting the programmer for input -- is invariably bound to fail.&lt;br /&gt;&lt;br /&gt;The authors analyze injection attacks in general, SQL and shell e.g., focusing on how these attacks exploit assumptions about the syntactic content of user input.&lt;br /&gt;&lt;br /&gt;More great paragraphs:&lt;br /&gt;&lt;blockquote&gt;A common property of injection vulnerabilities is the use of textual representations of output expressions constructed from user-provided input. Textual representations are representations in a human-readable text form. Output expressions are expressions that are handled by an external component (e.g., database server, shell interpreter).&lt;br /&gt;&lt;br /&gt;User input is typically used in the data parts of output expressions, as opposed to developer-provided constants, which are also used in the control parts.  Therefore, user input should not carry syntactic content. In the event of an injection attack, specially crafted user input inﬂuences the syntax, resulting in a change of the semantics of the output expression. We will refer to this process as mixing of control and data channels.&lt;/blockquote&gt;The authors define a framework for understanding the sundry injection attacks in more general terms, identifying sets of input and output vectors.  For most web applications, there's only a single input vector, HTTP operations.  The output vectors for SQL injection attacks are the execution of SQL statements against a database, and for command injection attacks, the output vector is a call to execute a command, such as with &lt;span style="font-family:courier new;"&gt;system()&lt;/span&gt; or &lt;span style="font-family:courier new;"&gt;exec()&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;They describe existing approaches to this problem as either &lt;span style="font-style: italic;"&gt;safe ad-hoc serialization&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;serialization APIs&lt;/span&gt;.  Safe ad-hoc serialization includes manual input validation (i.e. the programmer is solely responsible for validating the safeness of the input), automated input validation (e.g. MagicQuotes in PHP), and variable tainting (e.g. Perl's -T flag), and, lastly, the approach of SQLrand, which requires that all SQL commands executed by an application must be encoded as constants in the application.  Serialization APIs include DOM APIs for XML and, for SQL, any API which requires prepared statements.  Examples of the latter are Java's &lt;span style="font-family:courier new;"&gt;PreparedStatement&lt;/span&gt; and the &lt;span style="font-family:courier new;"&gt;prepare_statement&lt;/span&gt; method of Perl's DBI module.&lt;br /&gt;&lt;br /&gt;The authors propose to assign metadata to all strings in a program in order to track its origin.  Strings read from a TCP/IP socket are tagged as untrusted.  Strings that are constants in the source code are tagged as trusted.  Their system, Context Sensitive String Evaluation (CSSE), tracks the untrusted string fragments at runtime.   When an untrusted fragment is included in an expression passed to a function which interacts with the external resources (e.g. &lt;span style="font-family:courier new;"&gt;mysql_query()&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;exec()&lt;/span&gt;),  CSSE can escape the untrusted fragment in a context-appropriate way (e.g. escape SQL in the case of &lt;span style="font-family:courier new;"&gt;mysql_query()&lt;/span&gt; and escape shell in the case of &lt;span style="font-family:courier new;"&gt;exec()&lt;/span&gt;), block the request, or raise an alarm.&lt;br /&gt;&lt;br /&gt;This feature can be implemented using Aspect-Oriented Programming (AOP), but the authors note that at the time of their writing the AOP library for PHP did not support the interception of string operations, which is necessary to implement CSSE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-493918956354895445?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='application/pdf' href='http://tadek.pietraszek.org/publications/pietraszek05_defending.pdf' length='0'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/493918956354895445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=493918956354895445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/493918956354895445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/493918956354895445'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/10/indepent-study-defending-against.html' title='Indepent Study: Defending against Injection Attacks through Context-Sensitive String Evaluation'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8975013536488086649</id><published>2009-10-04T07:43:00.007-06:00</published><updated>2009-10-04T09:44:38.722-06:00</updated><title type='text'>Independent Study: Static detection of security vulnerabilities in scripting languages</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Submission: &lt;a href="http://theory.stanford.edu/%7Eaiken/publications/papers/usenix06.pdf"&gt;Static detection of security vulnerabilities in scripting languages&lt;/a&gt; &lt;a href="http://research.microsoft.com/en-us/um/people/livshits/papers/ppt/usenixtech08.pdf"&gt;&lt;/a&gt; [PDF]&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;blockquote&gt;SQL injection and other string-based exploits to which web applications are vulnerable can be detected by performing static analysis on web applications written in dynamic languages.  The static analysis is supplemented with information gleaned from the symbolic execution of the source code.&lt;br /&gt;&lt;/blockquote&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;Techniques for automatically detecting SQL injection attacks in web applications written in dynamic languages are sorely needed.&lt;br /&gt;&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;I am skeptical of the usefulness of the interactive mode of the checker -- which is triggered when regular expressions are used to validate unsafe data -- for the average PHP programmer.  Also, while the authors refer to Perl's &lt;span style="font-style: italic;"&gt;taint mode&lt;/span&gt; (man perlsec) as an alternative way of sanitizing data, it would be useful if they were to compare the effectiveness of their approach to Perl's built-in approach.&lt;br /&gt;&lt;/blockquote&gt; Evaluation&lt;br /&gt;&lt;blockquote&gt;Excellent.&lt;br /&gt;&lt;/blockquote&gt;Novelty&lt;br /&gt;&lt;blockquote&gt;Symbolic execution has been used before in the DART paper, but there the purpose was to determine what input values would cause a statically-typed program to take certain paths during automated testing; here the purpose is to determine whether any memory locations are untrusted.&lt;br /&gt;&lt;/blockquote&gt;Convincing&lt;br /&gt;&lt;blockquote&gt;The authors describe a checker that is effective at detecting SQL injection vulnerabilities.&lt;br /&gt;&lt;/blockquote&gt;Worth Solving&lt;br /&gt;&lt;blockquote&gt;This problem is worth solving.  It is all too easy for programmers to fail to untaint input received from the user of a web application, so a reliable, automated way of detecting such exploits is necessary.&lt;br /&gt;&lt;/blockquote&gt;Confidence&lt;br /&gt;&lt;blockquote&gt;Reasonably confident&lt;br /&gt;&lt;/blockquote&gt;Detailed Comments&lt;br /&gt;&lt;blockquote&gt;Analysis starts with block-level symbolic execution, which generates a block summary.   Intraprocedural analysis takes block summaries (a six-tuple, described below) as input and generates a four-tuple, which is consumed by the intraprocedural analysis phase.&lt;br /&gt;&lt;br /&gt;The use of symbolic execution here reminds me of the &lt;a href="http://portal.acm.org/citation.cfm?id=1064978.1065036"&gt;DART paper&lt;/a&gt;.  Here symbolic execution is used to understand the functioning of a program written in a dynamic  language.  In the DART paper, it was used to force a statically typed language to take different paths during automated testing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Block&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At the block level, the code is executed symbolically, and the resulting summary is used to perform analysis at intra- and interprocedural levels.  Using a summary at the higher levels expedites the analysis.&lt;br /&gt;&lt;br /&gt;The authors define a language to model what they believe is an appropriate subset of PHP for detecting SQL injection attacks with their simulator (i.e. the component of their checker which symbolically executes blocks of PHP code).&lt;br /&gt;&lt;br /&gt;They devote particular attention to how they model strings, because strings are such essential types in dynamic languages: "Strings are typically constructed through concatenation.  For example, user inputs (via HTTP get and post methods) are often concatenated with a pre-constructed skeleton to form an SQL query.... String values are represented as an unordered concatenation of string &lt;span style="font-style: italic;"&gt;segments&lt;/span&gt;, which can be one of the following: a string constant, the initial value of a memory location on entry to the current block (l_0), or a string that contains initial values of zero or more elements from a set of memory locations (contains(sigma))."  The latter part of the definition of strings in this model allows the cheker to track the flow of untainted data through a web application.&lt;br /&gt;&lt;br /&gt;The motivation for and definition of &lt;span style="font-style: italic;"&gt;untaint&lt;/span&gt; (as related to the definition of the Boolean type) in the modelling language is unclear to me. &lt;br /&gt;&lt;br /&gt;The  untainting of strings "occur[s] via function calls, casting to safe types (e.g. int, etc), regular expression matching (&lt;span style="font-weight: bold;"&gt;!&lt;/span&gt;), and other types."&lt;br /&gt;&lt;br /&gt;The result  of the block-level analysis is a six-tuple consisting of an &lt;span style="font-style: italic; font-weight: bold;"&gt;error set&lt;/span&gt; ("the set of input variables that must be sanitized before entering the current block"), &lt;span style="font-style: italic; font-weight: bold;"&gt;definitions&lt;/span&gt; ("the set of memory locations defined in the current block"), &lt;span style="font-style: italic; font-weight: bold;"&gt;value flow&lt;/span&gt; ("the set of pairs of [memory] locations (l_1, l_2) where the string value of l_1 on entry becomes a substring of l_2 on exit"), &lt;span style="font-style: italic; font-weight: bold;"&gt;termination predicate&lt;/span&gt; (whether the current block causes the program to exit), &lt;span style="font-style: italic; font-weight: bold;"&gt;return value&lt;/span&gt; (undefined if and only if the termination predicate is true), and an &lt;span style="font-weight: bold; font-style: italic;"&gt;untaint set&lt;/span&gt; (the set of [memory] locations that are sanitized by the current block, for each of the block's successors).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Intraprocedural&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This phase of the analysis uses the six-tuple block summaries generated by the previous phase to generate a four-tuple consisting of an &lt;span style="font-weight: bold; font-style: italic;"&gt;error set&lt;/span&gt; ("the set of memory locations ... whose value may flow into a database query, and therefore must be sanitized before invoking the current function"), &lt;span style="font-style: italic; font-weight: bold;"&gt;return set &lt;/span&gt;("the set of parameters or global values that may be a substring of the return value" of the function), &lt;span style="font-style: italic; font-weight: bold;"&gt;sanitized values&lt;/span&gt; ("the set of parameters or global variables that are sanitized on function exit"), and &lt;span style="font-style: italic; font-weight: bold;"&gt;program exit&lt;/span&gt; ("whether the current function terminates program execution on all paths").&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Interprocedural&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This phase involves using the previously-generated function-level tuple to substitute actual for formal parameters in the error set and marking memory locations  as safe when they are unconditionally untainted.   It also involves the use of the Boolean-related notion of &lt;span style="font-style: italic;"&gt;untaint&lt;/span&gt; that I still don't understand.&lt;br /&gt;&lt;br /&gt;In what order are functions analyzed?  "Our algorithm analyzes the source codebase in topological order based on the static function call graph."  Recursion doesn't compute fixed-point; the system inserts a no-op summary when it encounters recursion.&lt;br /&gt;&lt;br /&gt;Since regular expressions are self-contained automata, little computational devices, I was surprised when the authors remarked that strings can be marked as untainted when they are checked by regular expressions.  It sounded almost magical.  It's not quite that.  "Some regular expressions match well-formed input while others detect malformed input; assuming one way or the other results in either false positives or false negatives.... To make it easy for the user to specify the sanitization effects of regular expressions, the checker has an interactive mode where the user is prompted when the analysis encounters a previously unseen regular expression and the user's answers are recorded for future reference."&lt;br /&gt;&lt;br /&gt;The authors mention the built-in Perl &lt;span style="font-style: italic;"&gt;taint mode&lt;/span&gt; (&lt;span style="font-family: courier new;"&gt;man perlsec&lt;/span&gt;).  This suggests that the proper way of implementing a checker like the one described here is to integrate it into the language runtime.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8975013536488086649?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8975013536488086649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8975013536488086649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8975013536488086649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8975013536488086649'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/10/independent-study-static-detection-of.html' title='Independent Study: Static detection of security vulnerabilities in scripting languages'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-9115365761830215543</id><published>2009-09-27T09:17:00.010-06:00</published><updated>2009-09-27T11:46:48.367-06:00</updated><title type='text'>Independent Study: Ripley: Automatically Securing Web 2.0 Applications Through Replicated Execution</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder. The format is similar to that of a review of a paper submitted to a computer science conference. There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Submission: &lt;a href="http://research.microsoft.com/apps/pubs/default.aspx?id=101931"&gt;Ripley: Automatically Securing Web 2.0 Applications Through Replicated Execution&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;blockquote&gt;AJAX or Web 2.0 applications provider richer end-user experience by moving computations to the browser, but the results of those computations are vulnerable to manipulation by known tools.  Since client-side computations often cause server-side events, such as modifying or removing data in a database, it's important for the server to be able to validate the integrity of the client's computations.  The authors present RIPLEY, a system for &lt;span style="font-style: italic;"&gt;replay&lt;/span&gt;ing client-side computations in the server to reestablish the lower bound on computational integrity that was lost by moving code to the client.&lt;br /&gt;&lt;/blockquote&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;The architecture of RIPLEY is sound for preventing the problem the authors identify, and the empirical results of deploying the system are sufficiently promising for internet application providers to consider investigating this approach to the problem.&lt;br /&gt;&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;The authors don't provide a compelling case that this problem needs to be solved.  In their paper on Spectator, they refer to specific JavaScript worms that have caused damage to Web site operators.  Here they don't refer to specific large-scale exploits that their approach solves.  This makes the problem they're solving seem less pressing.&lt;br /&gt;&lt;/blockquote&gt; Evaluation&lt;br /&gt;&lt;blockquote&gt;It's an interesting solution but the problem, while real, doesn't seem to have been exploited in any significant way.  The fact that the server-side code can anticipate client actions,  pre-compute their results, and send them to the client before the client takes the given action, thus increasing client-side responsiveness, is a lovely way to improve the user experience, one that should pique the interest of Web site operators making heavy use of client-side JavaScript.&lt;br /&gt;&lt;/blockquote&gt;Novelty&lt;br /&gt;&lt;blockquote&gt;RIPLEY is novel.  The authors note that an alternative approach (explored here and here) is to require the client to send to the server a computed proof of the correctness of its current state (e.g. the client could intermittently send a stack trace to the server).  Unlike RIPLEY,  these approaches only provide a degree of assurance, not a guarantee, of the correctness of the client-side computations.&lt;br /&gt;&lt;/blockquote&gt;Convincing&lt;br /&gt;&lt;blockquote&gt;The architecture, implementation details, and runtime performance&lt;br /&gt;&lt;/blockquote&gt;Worth Solving&lt;br /&gt;&lt;blockquote&gt;The problem is worth solving, but not as pressing as the problem of JavaScript worms that the authors solve in their work on Spectator.&lt;br /&gt;&lt;/blockquote&gt;Confidence&lt;br /&gt;&lt;blockquote&gt;95% +- 2&lt;br /&gt;&lt;/blockquote&gt;Detailed Comments&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;See citations &lt;a href="https://addons.mozilla.org/en-%20US/firefox/addon/966"&gt;27&lt;/a&gt;, &lt;a href="http://www.linuxjournal.com/article/9625"&gt;29&lt;/a&gt; for vulnerabilities to code modification in browser.&lt;br /&gt;&lt;br /&gt;See citation &lt;a href="http://www.amazon.com/Ajax-Security-Billy-Hoffman/dp/0321491939"&gt;20&lt;/a&gt; for, more generally, AJAX vulnerabilities and exploits.&lt;br /&gt;&lt;br /&gt;Volta, a distributing compiler -- in some respects similar to Google Web Toolkit, which generates JavaScript code from Java.  The idea of GWT is to allow the user to write dynamically-typed code in a statically-typed language -- the GWT compiler can reason about the statically-typed code and emits code that's known to be safe.  While Volta appears to be designed to work in a more general way than GWT -- generating code for multiple languages (more than just JavaScript) via the Microsoft Common Language Runtime intermediate representation, for example -- the basic idea is similar.  One feature of Volta is that because it can reason about the statically-typed program, it can divide the computations in the statically-typed code to be divided between the server and client.&lt;br /&gt;&lt;br /&gt;A developer who wishes to use RIPLEY applies class-level annotations to identify which code runs on the client, which on the server.  The code is then converted to .NET bytecode, at which point Volta reads the bytecode (which contains the annotations), and generates the appropriate client- or server-side code, introducing RPCs  between client and server when necessary.  RIPLEY is implemented as a tweak to this phase of Volta's execution.  The authors added a feature to Volta to generates additional server-side code for validating the client-side computations.&lt;br /&gt;&lt;br /&gt;RIPLEY is intended to enforce the integrity of the original application in the face of the vulnerability of the client-side code.  It accomplishes this by reproducing each client-side computation on the server; if the results of a client-side computation cannot be reproduced on the server, this is reason to believe that something faulty or malicious occurred in the client.&lt;br /&gt;&lt;br /&gt;In the RIPLEY architecture, a browser emulator runs on the server, validating the client-side  computations by &lt;span style="font-style: italic;"&gt;replaying&lt;/span&gt; them.  Since the browser emulator runs in a .NET virtual machine, which uses JIT, sometimes the server-side validations can anticipate client-side events, and the server can push pre-computed results to the client.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-9115365761830215543?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://research.microsoft.com/apps/pubs/default.aspx?id=101931' title='Independent Study: Ripley: Automatically Securing Web 2.0 Applications Through Replicated Execution'/><link rel='enclosure' type='' href='http://research.microsoft.com/apps/pubs/default.aspx?id=101931' length='0'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/9115365761830215543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=9115365761830215543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/9115365761830215543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/9115365761830215543'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/09/this-is-one-of-series-of-posts-about.html' title='Independent Study: Ripley: Automatically Securing Web 2.0 Applications Through Replicated Execution'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1052424700507208044</id><published>2009-09-20T09:40:00.012-06:00</published><updated>2009-10-09T17:07:02.722-06:00</updated><title type='text'>Independent Study: Spectator: Detection and Containment of JavaScript Worms</title><content type='html'>(This is one of a series of posts about papers I'm reading for an &lt;a href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt; with Prof. Evan Chang at the University of Colorado, Boulder.  The format is similar to that of a review of a paper submitted to a computer science conference.  There are already-published papers, so I'll be writing with the benefit of hindsight, especially when the paper was published at least several years ago.)&lt;br /&gt;&lt;br /&gt;Submission: &lt;a href="http://www.usenix.org/events/usenix08/tech/full_papers/livshits/livshits.pdf"&gt;Spectator: Detection and Containment of JavaScript Worms&lt;/a&gt; [PDF]&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;blockquote&gt;Detecting JavaScript worms can be accomplished by adding a tag to content uploaded to a Web server, associating the tag with the IP address of the client that originated the upload, and using tags to identify propagation chains.  A long chain of propagation is a signature of JavaScript worms, so identifying a long chain (where length is user-defined) should be sufficient for detecting JavaScript worms.  One a worm has been identified, containment is a matter of disallowing further uploads along the chain of known-infected clients until an administrator tells the Spectator proxy that the chain is safe.&lt;/blockquote&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;The strength of this paper is that it proposes a solution which can be implemented simply as a proxy server in the domain of a Web site operator, and which doesn't require any modifications or plug-ins in the web browser.  With a reasonable amount of time and capital, a large Web site operator can implement this solution today.&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Not to be so generous, but I don't find any problems with it. &lt;/blockquote&gt; Evaluation&lt;br /&gt;&lt;blockquote&gt;This is on the whole an excellent paper.  I would like to see it in SIGFOO this year.&lt;/blockquote&gt;Novelty&lt;br /&gt;&lt;blockquote&gt;I'm not sure how novel this is, as XSS attacks and JavaScript worms aren't my specialty, but naively, it seems novel.  In the spirit of many useful papers in computer science, it combines a number of sound techniques to solve an important problem.&lt;br /&gt;&lt;/blockquote&gt;Convincing&lt;br /&gt;&lt;blockquote&gt;I'm convinced not only that the detection and containment algorithms work correctly and efficiently, but also that the author of a JavaScript worm would have a hard time subverting the system.  The authors' approach is essentially invisible to the browser, with the exception of some JavaScript injected by the Spectator proxy (Figure 5) (which appears to be designed so as to prevent subversion by malicious code).&lt;br /&gt;&lt;br /&gt;While the empirical data in section 5.2 (Overhead and Scalability) is encouraging, a Web site operator would obviously want to subject any implementation of this system to rigorous testing before deploying it.&lt;/blockquote&gt;Worth Solving&lt;br /&gt;&lt;blockquote&gt;Very much so!&lt;/blockquote&gt;Confidence&lt;br /&gt;&lt;blockquote&gt;Medium.&lt;/blockquote&gt;Detailed Comments&lt;br /&gt;&lt;blockquote&gt;I'm curious whether it's possible for each page downloaded from a site to contain JavaScript code to validate that only Web site operator-provided JavaScript is executing in that page.  Something like an unmodifiable onload event handler similar to the unload event handler in Figure 5.&lt;br /&gt;&lt;br /&gt;Some papers to follow up on:&lt;br /&gt;&lt;br /&gt;S. Meschkat. &lt;a href="http://events.ccc.de/congress/2006/Fahrplan/events/1568.en.html"&gt;JSON RPC: Cross site scripting and client side Web services&lt;/a&gt;. In 23rd Chaos Communication Congress, 12 2006.&lt;br /&gt;&lt;br /&gt;T. Pietraszek and C. V. Berghe. &lt;a href="http://tadek.pietraszek.org/publications/pietraszek05_defending.pdf"&gt;Defending against injection attacks through context-sensitive string evaluation&lt;/a&gt; [PDF].  In Proceedings of the Recent Advances in Intrusion Detection, Sept. 2005.&lt;br /&gt;&lt;br /&gt;Y. Xie and A. Aiken. &lt;a href="http://theory.stanford.edu/%7Eaiken/publications/papers/usenix06.pdf"&gt;Static detection of security vulnerabilities in scripting languages&lt;/a&gt; [PDF]. In Proceedings of the Usenix Security Symposium, pages 271–286, Aug. 2006.&lt;br /&gt;&lt;br /&gt;Y.-W. Huang, F. Yu, C. Hang, C.-H. Tsai, D.-T. Lee, and S.-Y. Kuo. &lt;a href="http://www.iis.sinica.edu.tw/%7Edtlee/dtlee/DSN2004_web_huang.pdf"&gt;Securing Web application code by static analysis and runtime protection&lt;/a&gt;.  In Proceedings of the Conference on World Wide Web, pages 40–52, May 2004.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1052424700507208044?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.usenix.org/events/usenix08/tech/full_papers/livshits/livshits.pdf' title='Independent Study: Spectator: Detection and Containment of JavaScript Worms'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1052424700507208044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1052424700507208044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1052424700507208044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1052424700507208044'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/09/independent-study-spectator-detection.html' title='Independent Study: Spectator: Detection and Containment of JavaScript Worms'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8398262904984768656</id><published>2009-09-16T09:38:00.019-06:00</published><updated>2009-09-16T11:53:35.941-06:00</updated><title type='text'>Fibonacci Strings and Performance</title><content type='html'>Fibonacci strings are related to Fibonacci numbers in that the length of the &lt;code&gt;n&lt;/code&gt;th Fibonacci string is the &lt;code&gt;n&lt;/code&gt;th Fibonacci number.  Here's pseudocode for a function that generates them:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; fibstr: int -&gt; string&lt;br /&gt;   if n is 0&lt;br /&gt;     return the empty string&lt;br /&gt;   else if n is 1&lt;br /&gt;     return the string "b"&lt;br /&gt;   else if n is 2&lt;br /&gt;     return the string "a"&lt;br /&gt;   else&lt;br /&gt;     return fibstr(n-1) concatenated with fibstr(n-2)&lt;/pre&gt;&lt;br /&gt;The strings generated by this function for &lt;code&gt;n &gt; 2&lt;/code&gt; have the interesting property that if you delete the last two letters the resulting string is a palindrome.  Anyway, for kicks I decided to use Fibonacci strings to test the string performance of popular programming languages.   The test was simple: run fibstr(31) 31 times.  I was lazy in writing the tests, but the results were consistent across many cups of &lt;a href="http://www.bhaktichai.com/"&gt;Bhakti chai&lt;/a&gt; and many executions of the test yesterday morning , so as far as I'm concerned they're valid representations of the relative performance of the languages with respect to string concatenation and, to some extent, memory management.&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;th&gt;Language&lt;/th&gt;&lt;th&gt;Real&lt;/th&gt;&lt;th&gt;User&lt;/th&gt;&lt;th&gt;System&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;0.809s&lt;/td&gt;&lt;td&gt;0.800s&lt;/td&gt;&lt;td&gt;0.000s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java (StringBuilder w/JIT&lt;/td&gt;&lt;td&gt;2.807s&lt;/td&gt;&lt;td&gt;2.652s&lt;/td&gt;&lt;td&gt;0.084s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java (String w/JIT)&lt;/td&gt;&lt;td&gt;2.819s&lt;/td&gt;&lt;td&gt;2.692s&lt;/td&gt;&lt;td&gt;0.076s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JavaScript (Rhino 1.6.r5-3&lt;/td&gt;&lt;td&gt;4.240s&lt;/td&gt;&lt;td&gt;4.100s&lt;/td&gt;&lt;td&gt;0.080s&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Python (2.4.4)&lt;/td&gt;&lt;td&gt;4.708s&lt;/td&gt;&lt;td&gt;3.992s&lt;/td&gt;&lt;td&gt;0.012s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Perl (5.8.8)&lt;/td&gt;&lt;td&gt;7.528s&lt;/td&gt;&lt;td&gt;7.484s&lt;/td&gt;&lt;td&gt;0.008s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java (StringBuilder w/o JIT)&lt;/td&gt;&lt;td&gt;8.171s&lt;/td&gt;&lt;td&gt;8.053s&lt;/td&gt;&lt;td&gt;0.040s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java (String w/o JIT)&lt;/td&gt;&lt;td&gt;11.707s&lt;/td&gt;&lt;td&gt;11.553s&lt;/td&gt;&lt;td&gt;0.068s&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ruby (1.8.6)&lt;/td&gt;&lt;td&gt;21.348s&lt;/td&gt;&lt;td&gt;18.565s&lt;/td&gt;&lt;td&gt;2.488s&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Off-the-cuff ... Ruby's performance speaks for itself.  I expected Perl to do better, since it's been around quite a while.  I can see why Sun responded to early complaints about Java's performance with JIT.  It's clearly effective, but I'd like to know more about how the JRE decides to compile to native code.  With JIT, StringBuilder doesn't buy you anything if it's compiled to native code; without it, StringBuilder can make a noticeable (on paper) difference over plain String, but I wonder whether the difference shows up much in real workloads.   If a string-manipulating function is a hot spot, it'll probably be compiled to native code.   I suppose one would have to examine the memory impact of String v. StringBuilder as well.&lt;br /&gt;&lt;br /&gt;I wouldn't be surprised if most of the time a language spends in system mode comes from calls to brk(2).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8398262904984768656?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8398262904984768656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8398262904984768656' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8398262904984768656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8398262904984768656'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/09/fibonacci-strings-and-performance.html' title='Fibonacci Strings and Performance'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-712933108620233554</id><published>2009-09-13T09:18:00.008-06:00</published><updated>2009-09-13T11:18:26.561-06:00</updated><title type='text'>Independent Study: A Universal Modular ACTOR Formalism for Artificial Intelligence</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder.  The format of this and subsequent papers will be similar to that of a review of a paper submitted to a conference.  These are already-published papers, so I'll be writing with the obvious benefit of hindsight.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Submission: &lt;a href="http://dli.iiit.ac.in/ijcai/IJCAI-73/PDF/027B.pdf"&gt;A Universal Modular ACTOR Formalism for Artificial Intelligence [PDF]&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reviewer: Nicholas Dronen&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;blockquote&gt;The authors present their notion of an &lt;span style="font-style: italic;"&gt;actor&lt;/span&gt;, a formalism which unifies control flow and data flow.  Actors allow programs to achieve a high degree of parallelism without the explicit use of semaphores.  Actors accomplish this by being free of side effects and communicating with other actors only by passing messages.&lt;br /&gt;&lt;/blockquote&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;The paper's greatest impact is the scalability (i.e. degree of parallelism) and reliability (discussed below) of actors.&lt;br /&gt;&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;While the ambition of the paper is admirable, it nonetheless casts too wide a net, covering topics from hardware design to formal representations of knowledge and belief.  Historically, the value of actors as a way to reason about the properties of programs isn't clear, considering that other approaches, such as the pi calculus, have seen wider adoption.&lt;br /&gt;&lt;/blockquote&gt;Evaluation&lt;br /&gt;&lt;blockquote&gt;In retrospect, a great deal of this paper could be removed without harm.  Specifically, the idea of actors as an appropriate abstraction for hardware (e.g. removing interrupts) and the discussion of using actors to represent knowledge could be completely removed.  The remaining material could then be expanded, ideally covering in more depth the concurrency-related aspects of actors.&lt;br /&gt;&lt;/blockquote&gt;Novelty&lt;br /&gt;&lt;blockquote&gt;Some aspects of actors -- such as message passing and perhaps pattern matching -- are not original.  What is novel in this paper is the combination of these techniques into a scheme that provides a high degree of concurrency.&lt;br /&gt;&lt;/blockquote&gt;Convincing&lt;br /&gt;&lt;blockquote&gt;Quite.&lt;br /&gt;&lt;/blockquote&gt;Worth Solving&lt;br /&gt;&lt;blockquote&gt;Yes.&lt;br /&gt;&lt;/blockquote&gt;Confidence&lt;br /&gt;&lt;blockquote&gt;I  am very confident in my evaluation of this paper.  I've been thinking about actors for a year or so.&lt;br /&gt;&lt;/blockquote&gt;Detailed Comments&lt;br /&gt;&lt;blockquote&gt;To understand actors, consider a thread.   Its stack is finite, but it's undecidable how much stack space a function running in a thread requires, so system designers allocate a constant amount of stack space for each thread -- enough for well-behaved programs, but still too much to allow even tens of thousands of threads on a reasonably-equipped machine.  It's conventional for 2 MB to be allocated to a thread on a 32-bit machine running Linux.  If a process is limited to 2 GB of memory, and assuming for the sake of discussion that no other implementation issues (such as the placement of the heap) interfere, a process can have at most ~1000 threads.  Actors solve this problem, which is admittedly not an enormous problem, but the solution to this problem solves another huge problem -- the high degree of concurrency that programs will require in order to exploit the large number of cores of future processors.&lt;br /&gt;&lt;br /&gt;An actor is a user space thread, the stack of which doesn't grow -- essentially a tail-recursive function.  So the system designer only has to allocate an extremely small amount of stack space -- basically enough for an activation record and local variables -- which means that a single process can contain many thousands of actors.  For example, a &lt;a href="http://en.wikipedia.org/wiki/Erlang_%28programming_language%29#Concurrency_and_distribution_oriented_language"&gt;benchmark&lt;/a&gt; has run with 20 million Erlang &lt;span style="font-style: italic;"&gt;processes&lt;/span&gt; (the Erlang term for an actor).&lt;br /&gt;&lt;br /&gt;An actor contains only local state, so it has no side effects.  Since there's no shared state, the programmer doesn't have to concern herself with error-prone synchronization primitives, such as semaphores.  Actors communicate with each other by sending messages.  The incoming messages for an actor are placed in an actor's &lt;span style="font-style: italic;"&gt;mailbox&lt;/span&gt; (this term doesn't appear in the paper but is in common use today).  When an actor receives a message, it uses pattern matching (in the style of Haskell and ML) to determine the type of the message.&lt;br /&gt;&lt;br /&gt;One would be wrong to infer that synchronization primitives are not necessary for a runtime system that supports actor-based programs in a single operating system process on an SMP or multicore machine.  Imagine a program running on a multicore machine with 10,000 actors, and 9,999 are sending messages to the remaining one (who we'll call A).  The actor A's mailbox will be filling up with messages, and it's possible that two actors executing concurrently can send a message to A at the same time, which implies that the scheduler for A has to be capable of handling two requests at once without corrupting A's mailbox.&lt;br /&gt;&lt;br /&gt;The paper's authors found inspiration for actors in packet-switched networks, which in part explains why a program written in actor-based language seems so much like a distributed system.  Where the program has actors sending messages to each other, the distributed system has nodes exchanging packets.  In the domain of software architecture, there is an interesting analogue between REpresentational State Transfer (REST) and the actor model, which is mentioned during the question and answer period of a &lt;a href="http://www.infoq.com/presentations/vinoski-rest-serendipity"&gt;recent presentation&lt;/a&gt; by REST advocate Steve Vinoski.&lt;br /&gt;&lt;br /&gt;Additional benefits of actors: since they contain only local state, they can be terminated if an error occurs.  This effectively isolates errors.  A small amount of data may be lost, but the program continues to run.  Since actors consume so little memory, each actor can be monitored by another actor.  The monitoring actor can be notified when the "child" actor dies, and it can restart the child.  This increases the reliability of programs.  Another consequence of the lack of global state in actor-based programs is the ease with which code can be reloaded into a running program without consequences.  This increases availability, which is especially important in systems that are supposed to be fault tolerant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-712933108620233554?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dli.iiit.ac.in/ijcai/IJCAI-73/PDF/027B.pdf' title='Independent Study: A Universal Modular ACTOR Formalism for Artificial Intelligence'/><link rel='enclosure' type='application/pdf' href='http://dli.iiit.ac.in/ijcai/IJCAI-73/PDF/027B.pdf' length='0'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/712933108620233554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=712933108620233554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/712933108620233554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/712933108620233554'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/09/independent-study-universal-modular.html' title='Independent Study: A Universal Modular ACTOR Formalism for Artificial Intelligence'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8423319703046805624</id><published>2009-09-07T08:03:00.017-06:00</published><updated>2009-09-07T10:52:14.632-06:00</updated><title type='text'>Independent Study: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;span style="font-style: italic;"&gt;(This is one of a series of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder.  The format of this and subsequent papers will be similar to that of a review of a paper submitted to a conference.  These are already-published papers, so I'll be writing with the obvious benefit of hindsight.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Submission&lt;a href="http://www-formal.stanford.edu/jmc/recursive.html"&gt;: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reviewer: Nicholas Dronen&lt;br /&gt;&lt;br /&gt;Please give a brief, 2-3 sentence summary of the main ideas of this paper:&lt;br /&gt;&lt;blockquote&gt;The author presents the basic symbols, syntax, and semantics of a Turing-complete programming language, LISP, providing compelling examples of the language's expressiveness.  He then discusses how it is implemented on the IBM 704 computer.&lt;br /&gt;&lt;/blockquote&gt;What is the strength of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;It describes a new programming language based in part on Church's lambda calculus which can be applied in both practical and theoretical domains.&lt;br /&gt;&lt;/blockquote&gt;What is the weakness of this paper (1-3 sentences):&lt;br /&gt;&lt;blockquote&gt;Being such a seminal paper in the PL literature, it's hard to find fault with it.  It is interesting that the author doesn't himself discuss deficiencies in the language or its implementation.&lt;br /&gt;&lt;/blockquote&gt;Evaluation&lt;br /&gt;&lt;blockquote&gt;This paper is excellent.  The author explains his ideas clearly and comprehensively.&lt;br /&gt;&lt;br /&gt;The contemporary reader does have to adjust his vocabulary at times, because McCarthy's terminology is outdated — for example, where a contemporary paper would use the term &lt;span style="font-style: italic;"&gt;memory cells&lt;/span&gt;, McCarthy says &lt;span style="font-style: italic;"&gt;registers&lt;/span&gt;.&lt;br /&gt;&lt;/blockquote&gt;Novelty&lt;br /&gt;&lt;blockquote&gt;To my knowledge, there was only one other functional programming language at the time of publication, &lt;a href="http://en.wikipedia.org/wiki/Information_Processing_Language"&gt;IPL&lt;/a&gt;, but LISP was a big improvement.  LISP's garbage collection is extremely useful to programmers, freeing them from having to manage memory explicitly.&lt;br /&gt;&lt;/blockquote&gt;Convincing&lt;br /&gt;&lt;blockquote&gt;Extremely.&lt;br /&gt;&lt;/blockquote&gt;Worth Solving&lt;br /&gt;&lt;blockquote&gt;This paper is seminal in part because it solves several problems at once.&lt;br /&gt;&lt;/blockquote&gt;Confidence&lt;br /&gt;&lt;blockquote&gt;How confident are you in your evaluation of this paper?&lt;br /&gt;&lt;/blockquote&gt;Detailed Comments&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;This paper is exemplary in the literature of programming languages.  It sets the standard for the formal definition of a programming language: present the basic symbols and syntax, define the semantics, discuss implementation issues.&lt;br /&gt;&lt;br /&gt;I'm fascinated by the fact that the LISP function &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; "plays the theoretical role of a universal Turing machine and the practical role of an interpreter."  Since LISP is based at least in part on the lambda calculus, and the untyped lambda calculus is Turing-complete, it's fair to assume that the universality of apply follows as a consequence, but I'm not capable of providing a proof, nor, if I were capable of such, would I have time to do so.  However, it's clear that the built-in substitution function &lt;span style="font-style: italic;"&gt;subst&lt;/span&gt; has the same role as substitution in the lambda calculus.  Another connection between LISP and formal representations of programming languages is that the function &lt;span style="font-style: italic;"&gt;eval&lt;/span&gt; seems to be a handmaiden of the operational semantics of the language.  The signature of the function is &lt;span style="font-style: italic;"&gt;eval[e; a]&lt;/span&gt;, where &lt;span style="font-style: italic;"&gt;e&lt;/span&gt; is an expression to be evaluated, and &lt;span style="font-style: italic;"&gt;a&lt;/span&gt; is list consisting of pairs, the items of which are, first, an atomic symbol, second, the expression for which the symbol stands.&lt;br /&gt;&lt;br /&gt;And, practically speaking, &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; is a function implemented in LISP that interprets LISP — highlighting the bootstrap problem that early computer science students grapple with, if only briefly: how do you compile a compiler?  But further, one can view it as a virtual machine for LISP.  The language's use of Polish notation reminds me of the stack-oriented nature of the Java virtual machine.&lt;br /&gt;&lt;br /&gt;One of the questions I had from last week's paper is whether LISP was,  as the paper described, actually capable of performing symbolic differentiation of functions.  This paper provides a concrete answer.  LISP is indeed capable of evaluating the derivative of a symbolic expression with respect to a variable.  It's surprisingly simple, amounting approximately to replacing occurrences of the variable with ZERO or ONE, depending on whether they are being added or multiplied, respectively.  So, for, example, the derivative of (PLUS 9 y) with respect to y is (PLUS 9 0) and the derivative of (TIMES 5 z) with respect to z is (TIMES 5 1).&lt;br /&gt;&lt;br /&gt;Some of the built-in functions are named poorly: &lt;span style="font-style: italic;"&gt;car&lt;/span&gt; is a mnemonic for "contents of the address part of register" and &lt;span style="font-style: italic;"&gt;cdr&lt;/span&gt; stands for "contents of the decrement part of register."  Today a language designer would give those functions names in harmony with their semantics, not their implementation.  I believe this deficiency in early LISP was corrected at some point (with &lt;span style="font-style: italic;"&gt;car&lt;/span&gt; replaced by &lt;span style="font-style: italic;"&gt;first&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;cdr&lt;/span&gt; by &lt;span style="font-style: italic;"&gt;rest&lt;/span&gt;), but I don't know what Scheme or Common LISP use.&lt;br /&gt;&lt;br /&gt;Garbage collection does not occur intermittently.  Rather, it occurs when the program needs memory but free memory has been exhausted.  It does a simple reachability analysis.  In the IBM 704, characters are 6 bits, and a machine word is 36 bits.  A string of characters like "DIFFERENTIATE" is represented by a linked list of structures.  The first field of each structure is  a pointer to a 6-character memory cell.  The second is a pointer to the cell of the next structure.  The string "DIFFERENTIATE" decomposes to cells containing "DIFFER", "ENTIAT", and "E."&lt;br /&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8423319703046805624?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www-formal.stanford.edu/jmc/recursive.html' title='Independent Study: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8423319703046805624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8423319703046805624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8423319703046805624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8423319703046805624'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/09/independent-study-recursive-functions.html' title='Independent Study: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5638116974073352980</id><published>2009-09-04T15:05:00.005-06:00</published><updated>2009-09-04T15:35:07.926-06:00</updated><title type='text'>Internet of Things</title><content type='html'>Some quick thoughts on machine-generated and -consumed data (as opposed to documents) being the &lt;a href="http://dataspora.com/blog/the-rise-of-the-data-web/"&gt;next phase&lt;/a&gt; of the development of the web.  First thing that comes to mind is, this will require our infrastructure to be more intelligent, such as using feedback control systems to regulate the machine-to-machine flow of data.  See, for example, "&lt;a href="https://db.usenix.org/events/usenix09/tech/full_papers/tang/tang.pdf"&gt;Black-Box Performance Control for High-Volume Non-Interactive Systems"&lt;/a&gt;.  Also, a human user navigating pages on the web (or using a search engine to go directly to the desired content) is a request-response style of interaction.   HTTP does this quite well.  However, data being generated by machines in the real world and consumed by machines suggests a publish-subscribe or at least a hybrid request-response, publish-subscribe style of interaction, a &lt;a href="http://www.planeterlang.org/en/planet/article/XMPP_powering_the_internet_of_things/"&gt;task&lt;/a&gt; for which protocols like XMPP are suited.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5638116974073352980?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5638116974073352980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5638116974073352980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5638116974073352980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5638116974073352980'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/09/internet-of-things.html' title='Internet of Things'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2476027266927739892</id><published>2009-08-30T09:36:00.010-06:00</published><updated>2009-08-30T13:06:37.945-06:00</updated><title type='text'>Independent Study: Early LISP History</title><content type='html'>&lt;span style="font-style: italic;"&gt;(This is one in a series&lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt; of posts about papers I'm reading for an &lt;/span&gt;&lt;a style="font-style: italic;" href="http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html"&gt;independent study&lt;/a&gt;&lt;span style="font-style: italic;"&gt; with Prof. Evan Chang at the University of Colorado, Boulder.  I'll try to follow the same format in each post — a general discussion, followed by specific points of interest, and finally questions.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Discussion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www8.informatik.uni-erlangen.de/html/lisp/histlit1.html"&gt;Herbert Stoyan's version&lt;/a&gt; of the early history of LISP faces hagiographic challenges.  Some of the source material from which he works is undated, giving him the task of having to deduce its significance in the conception and development of LISP.  The second of the AI Memos that John McCarthy, Nathaniel Rochester, and perhaps others wrote at the MIT AI Lab in the late 1950's is undated.  In another case, a graduate student enrolled in one of Minsky's courses wrote the following during a guest lecture by McCarthy:&lt;br /&gt;&lt;blockquote&gt;FORTRAN plus variable functions, composite functions (Church lambda), multiple functions, several valued functions of several variables, direct sum of functions, label portion of program with facility to make symbolic substitutions therein ...&lt;/blockquote&gt;This rather sketchy note, however, contains information of use to one of Stoyan's opening arguments.   Citing this note, Stoyan mentions that this guest lecture is the first time that the lambda calculus appears in relation to the language that was to become LISP, reinforcing the point he makes at the beginning of his history — to wit, that LISP was not, as some believe, originally 'a clean "pure" language design in the functional direction which was comprised by AI-programmers in search of efficiency.'  The original goal was simply a language to serve the ends of the Artificial Intelligence Laboratory at MIT.  Indeed, Stoyan's history of the language shows that McCarthy arrived as the design of early LISP in a somewhat &lt;span style="font-style: italic;"&gt;ad hoc&lt;/span&gt; manner.  The language's built-in functions &lt;span style="font-style: italic;"&gt;car&lt;/span&gt; (first element of list) and &lt;span style="font-style: italic;"&gt;cdr&lt;/span&gt; (rest of list) were first implemented on top of an imperative FORTRAN.  Furthermore, a language that inspired LISP was imperative, not functional.  Quoting Stoyan,&lt;br /&gt;&lt;blockquote&gt;It is one of the most important events in the history of programming that McCarthy, who was looking for a mathematical-logical programming language, found interesting elements of it in FORTRAN.  He was fascinated by the idea of writing programs with "algebraic" means, i.e. mathematical expressions.&lt;/blockquote&gt;(The expressions McCarthy eventually settled on were symbolic expressions, or S-expressions, the subject of &lt;a href="http://www-formal.stanford.edu/jmc/recursive.html"&gt;next week's paper&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;LISP as a Functional Language&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While McCarthy didn't conceive LISP simply as an implementation of the lambda calculus, it is a mixed-paradigm language, containing both functional and non-functional features.  A brief examination of the &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;functional features&lt;/a&gt; of  early LISP follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Higher-order functions: early LISP has  a built-in functions maplist, which takes a function as an argument, so clearly it has higher-order functions.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Pure functions: I can't tell from the history whether invoking a function in early LISP could have side effects.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Recursion: definitely.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Strict vs. non-strict (lazy) evaluation: the implementation of LISP discussed by Stoyan used lazy evaluation, judging by the following sentence:  "If we imagine a correct substitution function and accept the necessity for quoting all constants then there remains the well-known problem of free variables moved to wrong environments because of the lazy evaluation." &lt;/li&gt;&lt;li&gt;Type systems and pattern matching: it's hard to determine based on the contents of the history, but my impression is that early LISP was untyped.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;LISP as a Dynamic Language&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming_language"&gt;Dynamic programming languages&lt;/a&gt; are loosely defined, more like one of Wittgenstein's family resemblances than one of Aristotle's essences.  What follows are some characteristics of dynamic programming languages, and whether and/or how they exist in LISP:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Eval: the ability to take a string representation of a program and execute (or &lt;span style="font-style: italic;"&gt;eval&lt;/span&gt;uate) it.  This concept originated with LISP.   The fact that eval converts data (a string) into code (an execution) seems to be essential to dynamic programming languages in one respect — to wit, that what is executed does not exist at the beginning of a program's execution &lt;span style="font-style: italic;"&gt;in a form that is directly executable by the underlying hardware&lt;/span&gt;.  This is a characteristic of any language that executes in a virtual machine.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Higher-order functions: Yes (covered above).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Object runtime alteration: Objects do not exist in LISP, so this item does not apply.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Closures: In contemporary usage, a "closure" requires lexical (i.e. static) scope.  Scoping in  early LISP was dynamic, a wildly different beast, so these don't exist.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Continuation"&gt;Continuations&lt;/a&gt;: Early LISP isn't purely functional, and the first paper on continuations was delivered in 1964 (a few years before the first implementation of LISP), so continuations were likely not part of early LISP.  Further evidence for this is the fact that it had labels and iteration constructs: "Besides the `arithmentical (sic.) or replacement statement' the following kinds of statements were thought to be available.: A GO-statements (sic. -- likely "GOTO statement"), compound statements, statements for iteration, declarative statements (describing property lists) and statements for the definition of subprograms (and functions)."&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Reflection_%28computer_science%29"&gt;Reflection&lt;/a&gt;: it's not clear from the history whether early LISP had anything like Common Lisp's &lt;span style="font-style: italic;"&gt;find-symbol&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Points of Interest&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One of the features of early LISP was symbolic differentiation and integration of functions?  This might become clearer with &lt;a href="http://www-formal.stanford.edu/jmc/recursive.html"&gt;next week's reading&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dynamic scoping — not carried  over to Common LISP or Scheme.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Parentheses determined by external constraint: "Therefore, the reason for selecting parentheses ... instead of brackets or braces was only a matter of chance because in 1958 the usual devices had only parentheses and nothing else."&lt;/li&gt;&lt;li&gt;"It turned out that the realization of recursive function was the most complicate (sic) problem in translating the LISP-programs into SAP-routines."  The question was how to implement the runtime stack.  McCarthy considered following the example of &lt;a href="http://en.wikipedia.org/wiki/Information_Processing_Language"&gt;IPL&lt;/a&gt; and — as implied by the history — implementing the stack as lists.  He also considered implementing the stack as something private to each function.  He finally settled on using a "public push-down list" for the runtime stack.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Questions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The difference between &lt;span style="font-style: italic;"&gt;maplist&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; is not obvious from Stoyan's discussion.  I know that &lt;span style="font-style: italic;"&gt;maplist&lt;/span&gt; takes a list L and a function F as arguments, applies F to each element of L, and returns a list L' containing of the return value of each invocation of F.  In more recent languages (e.g. Python), &lt;span style="font-style: italic;"&gt;maplist&lt;/span&gt; is called &lt;span style="font-style: italic;"&gt;map&lt;/span&gt;.  The meaning of apply is likely found in recent languages as well.  Python has a (deprecated) &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; function, which takes two arguments — a function F and a list A containing arguments to be passed as separate actual parameters to F.  JavaScript's &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; method (which is a callable property of a Function object, not a function properly speaking) with essentially the same signature.  (JavaScript's Function object also has a &lt;span style="font-style: italic;"&gt;call&lt;/span&gt; method, but unlike JavaScript's &lt;span style="font-style: italic;"&gt;apply&lt;/span&gt; it takes a variable number of actual parameters instead of a single actual parameter.  (I answered this question for myself before writing the discussion.)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2476027266927739892?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www8.informatik.uni-erlangen.de/html/lisp/histlit1.html' title='Independent Study: Early LISP History'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2476027266927739892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2476027266927739892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2476027266927739892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2476027266927739892'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/08/independent-study-early-lisp-history.html' title='Independent Study: Early LISP History'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2247631892915341227</id><published>2009-07-18T08:23:00.011-06:00</published><updated>2009-08-26T08:25:42.937-06:00</updated><title type='text'>Independent Study Schedule</title><content type='html'>This semester I'll be doing an independent study -- a survey of "dynamic languages" -- with Evan Chang.  Each week I'll read a paper, and write a discussion of it, which he and I will use as a starting point for an hour-long weekly meeting.  I'll post the discussion notes on this blog.  The papers are listed here.  Some of them are quite long and may have to be covered in halves.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Herbert Stoyan, "&lt;a href="http://www8.informatik.uni-erlangen.de/html/lisp/histlit1.html"&gt;Early LISP History&lt;/a&gt;", date unknown, pages unknown&lt;/li&gt;&lt;li&gt;John McCarthy,  "&lt;a href="http://www-formal.stanford.edu/jmc/recursive.html"&gt;Recursive functions of symbolic expressions and their computation by machine, Part I&lt;/a&gt;", 1960, 34 pages&lt;/li&gt;&lt;li&gt;&lt;cite style="font-style: normal;" class="" id="CITEREFCarl_HewittPeter_Bishop_and_Richard_Steiger1973"&gt;Carl Hewitt, Peter Bishop and Richard Steiger, "&lt;a href="http://dli.iiit.ac.in/ijcai/IJCAI-73/PDF/027B.pdf" class="external text" title="http://dli.iiit.ac.in/ijcai/IJCAI-73/PDF/027B.pdf" rel="nofollow"&gt;A Universal Modular Actor Formalism for Artificial Intelligence&lt;/a&gt;", &lt;/cite&gt;&lt;cite style="font-style: normal;" class="" id="CITEREFCarl_HewittPeter_Bishop_and_Richard_Steiger1973"&gt;1973&lt;/cite&gt;, 11 pages.&lt;/li&gt;&lt;li&gt;John Backus, "&lt;a href="http://portal.acm.org/citation.cfm?id=359579"&gt;Can programming be liberated from the von Neumann style?&lt;/a&gt;", 1978, 28 pages&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ken Iverson, "&lt;a href="http://elliscave.com/APL_J/tool.pdf" class="external text" title="http://elliscave.com/APL_J/tool.pdf" rel="nofollow"&gt;Notation as a tool of thought&lt;/a&gt;", 1980, 22 pages&lt;/li&gt;&lt;li&gt;Pattie Maes, "&lt;a href="http://portal.acm.org/citation.cfm?id=38821"&gt;Concepts and experiments in computational reflection&lt;/a&gt;", 1987, 8 pages&lt;/li&gt;&lt;li&gt;Alan C. Kay, "&lt;a href="http://gagne.homedns.org/%7Etgagne/contrib/EarlyHistoryST.html"&gt;An Early History of Smalltalk&lt;/a&gt;", 1993, 40 pages&lt;/li&gt;&lt;li&gt;L. Peter Deutsch and Allan M. Schiffman, "&lt;a href="http://portal.acm.org/citation.cfm?id=800017.800542"&gt;Efficient implementation of the Smalltalk-80 system&lt;/a&gt;", 1984, 5 pages&lt;/li&gt;&lt;li&gt;David Ungar and Randall B. Smith, "&lt;a href="http://www.springerlink.com/content/t8m37757w2011502/"&gt;SELF: The power of simplicity&lt;/a&gt;", 1991, 18 pages&lt;/li&gt;&lt;li&gt;Craig Chambers, David Ungar, and Elgin Lee, "&lt;a href="http://research.sun.com/self/papers/implementation.html"&gt;An efficient implementation of SELF, a dynamically-typed object-oriented language based on prototypes&lt;/a&gt;", 1991, 38 pages.&lt;/li&gt;&lt;li&gt;Cartwright and Fagan.  "&lt;a href="http://doi.acm.org/10.1145/989393.989435"&gt;Soft Typing&lt;/a&gt;", 1991, 16 pages.&lt;/li&gt;&lt;li&gt;Aiken, Wimmers, and Lakshman.  "&lt;a href="http://doi.acm.org/10.1145/174675.177847"&gt;Soft Typing with Conditional Types&lt;/a&gt;", 1994, 10 pages.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2247631892915341227?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2247631892915341227/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2247631892915341227' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2247631892915341227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2247631892915341227'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/07/independent-study-schedule.html' title='Independent Study Schedule'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7386735778416073815</id><published>2009-07-13T09:44:00.003-06:00</published><updated>2009-07-13T09:46:34.663-06:00</updated><title type='text'>Ten papers to read</title><content type='html'>For future reference, &lt;a href="http://blog.objectmentor.com/articles/2009/02/26/10-papers-every-programmer-should-read-at-least-twice"&gt;ten papers&lt;/a&gt; from the programming languages and programming canon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7386735778416073815?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7386735778416073815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7386735778416073815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7386735778416073815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7386735778416073815'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/07/ten-papers-to-read.html' title='Ten papers to read'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1674487122071406705</id><published>2009-06-12T17:14:00.003-06:00</published><updated>2009-06-14T00:08:10.942-06:00</updated><title type='text'>My "Playtime"</title><content type='html'>In the mid- to late-60s, Jacques Tati produced and directed a kind of slapstick comedy about modern architecture, "Playtime."  It was a commercial bomb, and bankrupted his family, but it's truly a great film.  After seeing it a few times, it dawned on me that the office where I work -- which is all metal and glitter and glass -- could have been a set for the film.  Compare &lt;a href="http://images.google.com/images?q=tati+playtime"&gt;Tati's&lt;/a&gt; set to &lt;a href="http://www.flickr.com/photos/75855084@N00/sets/72157619573731725/"&gt;mine&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/75855084@N00/sets/72157619573731725/" title="My 'Playtime'"&gt;&lt;img src="http://farm3.static.flickr.com/2442/3620050795_f4da453386_b.jpg" width="681" height="1024" alt="My 'Playtime'"/&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1674487122071406705?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.flickr.com/photos/75855084@N00/sets/72157619573731725/' title='My &quot;Playtime&quot;'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1674487122071406705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1674487122071406705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1674487122071406705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1674487122071406705'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/06/my-playtime.html' title='My &quot;Playtime&quot;'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm3.static.flickr.com/2442/3620050795_f4da453386_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6861492329855047449</id><published>2009-05-31T22:20:00.010-06:00</published><updated>2009-06-01T07:09:12.712-06:00</updated><title type='text'>Lonesome Prairie Dog</title><content type='html'>I  got some cables and things today so I could start recording music in beginner's style, sitting at my kitchen table playing things into my laptop.  The first song I wrote, probably two years ago, is "Lonesome Prairie Dog," a kind of cowboy song with some irregular meter, so far as I remember.   It's the only thing I've written that I've bothered to name.&lt;br /&gt;&lt;br /&gt;You can't upload MP3s to blogger, so I made a video of this using a recent photo.  There's not a hidden musical gem at the end; GarageBand just padded the last forty-five seconds with silence.  I've found that I've had to click the play button a few times to get it working, too, so don't give up.&lt;br /&gt;&lt;br /&gt;I hope you like it.&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-fc4f9c579d4a9874" 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.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v9.nonxt6.googlevideo.com/videoplayback?id%3Dfc4f9c579d4a9874%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329946865%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D64C861BBF46415BBFB803656F6E40F9B9E621EC4.4616EEA83A8DCA1DBC84B27564D1AA57903D8CD5%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dfc4f9c579d4a9874%26offsetms%3D5000%26itag%3Dw160%26sigh%3DMIC6OWsdxRkzO9tswzslQA_LKZ0&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v9.nonxt6.googlevideo.com/videoplayback?id%3Dfc4f9c579d4a9874%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329946865%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D64C861BBF46415BBFB803656F6E40F9B9E621EC4.4616EEA83A8DCA1DBC84B27564D1AA57903D8CD5%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dfc4f9c579d4a9874%26offsetms%3D5000%26itag%3Dw160%26sigh%3DMIC6OWsdxRkzO9tswzslQA_LKZ0&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6861492329855047449?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=bd1b77fb3753a506&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=fc4f9c579d4a9874&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6861492329855047449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6861492329855047449' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6861492329855047449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6861492329855047449'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/05/lonesome-prairie-dog.html' title='Lonesome Prairie Dog'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5571348782095777414</id><published>2009-05-20T23:06:00.004-06:00</published><updated>2009-05-20T23:19:00.794-06:00</updated><title type='text'>Summer, Night</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/75855084@N00/3550033533/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3321/3550033533_ddca41e326_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;&lt;a href="http://www.flickr.com/photos/75855084@N00/3550033533/"&gt;DSC_0004&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/75855084@N00/"&gt;ndronen&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;I was stunned by the shadow cast by a tree onto the sidewalk tonight.  A few blocks away I was thinking about the shadows and about movies, and how the movies I enjoy most assume not that this is a world of objects, but that this is a world of light.  Those directors and cinematographers and set designers and lighting people seem to understand that light pays objects courtesy by making it possible for them to manifest themselves to us.  So I turned around and visited that &lt;a href="http://www.flickr.com/photos/75855084@N00/sets/72157618472932471/"&gt;tree again&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5571348782095777414?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.flickr.com/photos/75855084@N00/sets/72157618472932471/' title='Summer, Night'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5571348782095777414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5571348782095777414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5571348782095777414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5571348782095777414'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/05/dsc0004.html' title='Summer, Night'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3321/3550033533_ddca41e326_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6161861298709226783</id><published>2009-04-01T08:38:00.002-06:00</published><updated>2009-04-01T08:41:01.560-06:00</updated><title type='text'>Functional Programming is Fun(ctional Programming)</title><content type='html'>The ball keeps rolling.  Microsoft has has F#, a functional language for the Common Language Runtime (CLR, the .NET virtual machine) for a while. Then there's LINQ, the functionally-inspired generic data query mechanism built into C# 3.0. Now Microsoft is &lt;a href="http://www.google.com/search?q=microsoft+support+haskell"&gt;involved &lt;/a&gt;with Haskell, one of the better-known purely functional languages of recent vintage.&lt;br /&gt;&lt;br /&gt;One reason for the increasing interest in and support of functional programming languages is that they have some characteristics that are very beneficial when attempting to scale to a large number of cores. In particular, since all data is immutable, there are no locks. Also, unlike imperative languages (which includes Java, despite its object-orientedness), programs written in functional languages say what to do, not how to do it, which gives the compiler and runtime system freedom to, say, run parts of a loop on different cores. Anders Hejlsberg, one of the designers of C#, talks about that aspect of functional languages &lt;a href="http://blogs.msdn.com/charlie/archive/2007/01/26/anders-hejlsberg-on-linq-and-functional-programming.aspx"&gt;here &lt;/a&gt;(starting around 20:45).&lt;br /&gt;&lt;br /&gt;For applications that need to run efficiently on many cores, the general migration path I see is from using threads explicitly, to using tasks (e.g. Java's Executor framework, where the application doesn't explicity create threads itself), to writing in a concurrency-oriented fashion, whether in a purely functional language using some hybrid approach. For the hybrid approach, &lt;a href="http://www.javaworld.com/javaworld/jw-03-2009/jw-03-actor-concurrency2.html"&gt;here's&lt;/a&gt; a write up of some ways to do concurrency-oriented programming in Java.&lt;br /&gt;&lt;br /&gt;(This post is based on an email I sent to my group at work.  It's a Java shop.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6161861298709226783?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6161861298709226783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6161861298709226783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6161861298709226783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6161861298709226783'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/04/ball-keeps-rolling.html' title='Functional Programming is Fun(ctional Programming)'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7380807501810296308</id><published>2009-03-27T06:11:00.002-06:00</published><updated>2009-03-27T06:17:35.864-06:00</updated><title type='text'>Hang 'Em High</title><content type='html'>For such a crisp thinker as Willem Buiter, &lt;a href="http://blogs.ft.com/maverecon/2009/03/moral-hazard-lite-and-strong/"&gt;these&lt;/a&gt; words, with which I agree, are extremely harsh:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Too many bank insiders have exploited their monopoly of information and the control it bestows on them, to enrich themselves by robbing their shareholders blind.  There has been a spectacular failure of corporate governance.  Boards have foresaken their fiduciary duties.  Surely, even the liability insurance taken out by board members ought not to shelter those who are guilty of, at best, such willfull negligence and dereliction of duty?  Where are the class actions suits by disgruntled shareholders? Where are the board members in handcuffs?&lt;/p&gt; &lt;p&gt;Now that there is no meat left on the shareholder drumstick, the rogue managers and employees are going after a piece of the really juicy bird - the ever-patient tax payer.  I hope they choke on it.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;Governance lies as the heart of the mess.  It was broken before the house of cards collapsed, and it's broken now, too, because the people responsible for the status quo are either still in power, or not on trial, or both.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7380807501810296308?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7380807501810296308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7380807501810296308' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7380807501810296308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7380807501810296308'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/hang-em-high.html' title='Hang &apos;Em High'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3059682201935985248</id><published>2009-03-26T10:39:00.002-06:00</published><updated>2009-03-26T10:41:45.562-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movies coming soon'/><title type='text'>I'm Looking Forward to This</title><content type='html'>&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/--N9klJXbjQ&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/--N9klJXbjQ&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3059682201935985248?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3059682201935985248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3059682201935985248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3059682201935985248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3059682201935985248'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/im-looking-forward-to-this.html' title='I&apos;m Looking Forward to This'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7068723902975535675</id><published>2009-03-26T09:56:00.001-06:00</published><updated>2009-03-26T09:57:43.442-06:00</updated><title type='text'>Be Honest But Mysterious</title><content type='html'>&lt;span style="font-family:times, times new roman;"&gt;&lt;blockquote&gt;Your boss wants to know where the reports that you were supposed to have on his desk are? Be honest with him: "I don't have them." But, instead of full disclosure, leave a little to the imagination: "And I'm not sure why." If he presses, be nice but firm: "I don't feel comfortable giving them to you yet, but I'm flattered that you're looking for them." "Who is this wild creature who doesn't have the reports?" he'll be wondering. Sure, it will feel uncomfortable for you at first, but, trust us, it'll drive him crazy. He'll probably have to contact you every hour. You won't be able to get rid of him! &lt;/blockquote&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7068723902975535675?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.mcsweeneys.net/links/yourmoney/25column1.html' title='Be Honest But Mysterious'/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7068723902975535675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7068723902975535675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7068723902975535675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7068723902975535675'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/be-honest-but-mysterious.html' title='Be Honest But Mysterious'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6945361421382532119</id><published>2009-03-23T17:57:00.002-06:00</published><updated>2009-03-23T18:16:37.132-06:00</updated><title type='text'>First Impressions of Structural Computing</title><content type='html'>A lot of research is computer science is sort of boilerplate.  Like when a graduate student incrementally improves a known solution to a given problem in an established area of research.  Even when it's hard, that's the easy stuff, it seems.  The hard stuff involves creating a new area of research altogether.  That's what Peter J. Nürnberg is up to with his idea of "structural computing."  So far, a couple of pages into a couple of his papers, and really not being familiar with the hypermedia corpus, the first thing that comes to mind is a data structure in which every element is connected to every other element by way of common data structures -- e.g. array, list, hash table -- so as to enable on-the-fly views of the data to be created.  And this suggests the need to transform one view into another view arbitrarily, which in turn reminds me of category theory,  data provenance, and the &lt;a href="http://www.seas.upenn.edu/%7Eharmony/"&gt;stuff&lt;/a&gt; that Benjamin Pierce has been working on, but not necessarily in that order and not to imply a relationship among those things that doesn't exist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6945361421382532119?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6945361421382532119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6945361421382532119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6945361421382532119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6945361421382532119'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/first-impressions-of-structural.html' title='First Impressions of Structural Computing'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7016800711555828238</id><published>2009-03-22T13:55:00.001-06:00</published><updated>2009-03-22T14:39:36.625-06:00</updated><title type='text'>What was Universal thinking?</title><content type='html'>I love &lt;span style="font-style: italic;"&gt;The Big Lebowski&lt;/span&gt; as much as the next guy, but the marketing department at Universal Studios really went too far with the their 10th Anniversary  Limited Edition DVD.  &lt;span style="font-style: italic;"&gt;Come on&lt;/span&gt;.  A bowling ball as a DVD case? Why not just give us the two disks with the bonus materials, etc, etc, and be done with it? What value does the bowling ball add exactly?  What's worse, there's not even a symbol on the bottom of the plastic ball indicating how to recycle it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/ScadUC9OVOI/AAAAAAAAAMg/Auks2SJodvI/s1600-h/IMG_0081.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 300px; height: 400px;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/ScadUC9OVOI/AAAAAAAAAMg/Auks2SJodvI/s400/IMG_0081.JPG" alt="" id="BLOGGER_PHOTO_ID_5316109377874056418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/ScadUofWJUI/AAAAAAAAAMo/yBJkTZeS33U/s1600-h/IMG_0082.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/ScadUofWJUI/AAAAAAAAAMo/yBJkTZeS33U/s400/IMG_0082.JPG" alt="" id="BLOGGER_PHOTO_ID_5316109387949286722" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7016800711555828238?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7016800711555828238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7016800711555828238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7016800711555828238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7016800711555828238'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/i-love-big-lebowski-as-much-as-next-guy.html' title='What was Universal thinking?'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IsE9c9rP_4/ScadUC9OVOI/AAAAAAAAAMg/Auks2SJodvI/s72-c/IMG_0081.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-4452200807331097</id><published>2009-03-21T08:53:00.000-06:00</published><updated>2009-03-21T08:55:51.384-06:00</updated><title type='text'></title><content type='html'>And on the occasion of my 39th birthday, a colleague sent me this:&lt;br /&gt;&lt;blockquote&gt;Once a cuckoo told me it was my birthday and flew away.&lt;br /&gt;I asked myself &lt;span style="font-style: italic;"&gt;Have you no regard for yourself to celebrate your birthday?&lt;/span&gt;&lt;br /&gt;Then the cuckoo came back and told my brain &lt;span style="font-style: italic;"&gt;Birthdays are for fathers and mothers&lt;/span&gt;.&lt;/blockquote&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Arial;font-size:85%;color:navy;"&gt;&lt;span style="font-size: 10pt; color: navy; font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-4452200807331097?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/4452200807331097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=4452200807331097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4452200807331097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4452200807331097'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/and-on-occasion-of-my-39th-birthday.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3388239782751419495</id><published>2009-03-21T08:36:00.000-06:00</published><updated>2009-03-21T08:49:56.936-06:00</updated><title type='text'></title><content type='html'>Yesterday I turned 39.  No surprises or revelations, just a sense of what it's like to keep growing older, an understanding that the tired phrase &lt;span style="font-style: italic;"&gt;life goes on&lt;/span&gt; is tired because it's true.  Of course, one's sense of time fluctuates, expanding and contracting, depending on the intensity of experience at that moment, depending on how much the world is defying or agreeing with you, but in all cases, things keep happening.  Somewhat like &lt;span style="font-style: italic;"&gt;no matter where you go, there you are&lt;/span&gt;.  Both phrases are trivially true in an all-too-universal way.  Perhaps the thing that distinguishes the old from the young is the knowledge that the &lt;span style="font-style: italic;"&gt;truth&lt;/span&gt; of these phrases isn't trivial, because having a sense of how they are true only comes with experience, and experience only comes with age, and age implies death.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3388239782751419495?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3388239782751419495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3388239782751419495' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3388239782751419495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3388239782751419495'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/yesterday-i-turned-39.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5848238437553948706</id><published>2009-03-12T08:05:00.000-06:00</published><updated>2009-03-12T08:19:41.526-06:00</updated><title type='text'></title><content type='html'>Back when &lt;a href="http://www-plan.cs.colorado.edu/klipto/"&gt;Todd Mytkowitz&lt;/a&gt; and I were looking into the feasibility of using &lt;a href="http://aws.amazon.com/"&gt;Amazon Web Services&lt;/a&gt; to run a not-for-profit scientific compute service,  Todd explained the idea of the service to some scientists at a conference at the Santa Fe Institute.  The most surprising part of their response was that a pay-as-you-go model doesn't always fit well with the way researchers spend money, since grant money comes with an expiration date; the money must be spent within some window of time.  Since it's easy to justify the purchase of computing equipment, research money sometimes goes into a new, albeit small, compute cluster.  Utility compute services like AWS are metered; using them doesn't require a large initial capital outlay.  So it's not possible -- or at least hasn't been possible -- to park your money there.   I think a similar dynamic is at work with corporate managers and directors, who are the marketing target of Amazon's push into the enterprise: the pay-as-you-go model just doesn't fit well with the budgeting practices of large institutions.  Hence, ladies and gentelmen, Amazon's &lt;a href="http://aws.typepad.com/aws/2009/03/announcing-ec2-reserved-instances.html"&gt;new pricing model&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5848238437553948706?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5848238437553948706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5848238437553948706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5848238437553948706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5848238437553948706'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/back-when-todd-mytkowitz-and-i-were.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-5796639568011816103</id><published>2009-03-06T13:24:00.000-07:00</published><updated>2009-03-06T13:25:11.516-07:00</updated><title type='text'></title><content type='html'>The scary thing is I almost actually understood &lt;a href="http://blogs.ft.com/maverecon/2009/03/the-unfortunate-uselessness-of-most-state-of-the-art-academic-monetary-economics/"&gt;this&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-5796639568011816103?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/5796639568011816103/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=5796639568011816103' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5796639568011816103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/5796639568011816103'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/scary-thing-is-i-almost-actually.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-143305484624248166</id><published>2009-03-05T18:25:00.001-07:00</published><updated>2009-03-29T10:18:11.435-06:00</updated><title type='text'>Better Gmail is Not Better</title><content type='html'>CPU consumption by Firefox 3.0.7 with:&lt;br /&gt;&lt;blockquote&gt;No pages loaded                                                                                1-3%&lt;br /&gt;Old version of Gmail                                                                  1-3%&lt;br /&gt;New version of Gmail                                          4-5%&lt;br /&gt;New version of Gmail (with Better Gmail 2)  73-85%&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-143305484624248166?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/143305484624248166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=143305484624248166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/143305484624248166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/143305484624248166'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/03/cpu-consumption-by-firefox-3.html' title='Better Gmail is Not Better'/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6901563860960773877</id><published>2009-02-26T11:40:00.000-07:00</published><updated>2009-03-06T13:19:03.908-07:00</updated><title type='text'></title><content type='html'>It turns out that &lt;a href="http://testng.org/doc/"&gt;TestNG &lt;/a&gt;has built-in support for the functionality I just &lt;a href="http://hexencodings.blogspot.com/2009/02/at-work-time-to-execute-all-of-our-our.html"&gt;implemented &lt;/a&gt;for our JUnit tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6901563860960773877?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6901563860960773877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6901563860960773877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6901563860960773877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6901563860960773877'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/02/it-turns-out-that-testng-has-built-in.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2491094660552220356</id><published>2009-02-11T08:25:00.000-07:00</published><updated>2009-02-16T13:03:25.206-07:00</updated><title type='text'></title><content type='html'>At work the time to execute all of our our growing set of JUnit tests has slowly crept up.  In 2005 it took 25 minutes to build and test everything.  Now it takes 65 minutes, most of which is spent running tests.  So we decided to run the longest-running tests (defined at test classes which take &gt; 30 seconds to execute) only once a week.  So by default when one of these long-running test is run as part of a group of tests, it doesn't execute; to cause those long-running tests to run within Ant, you'd set a property to indicate this.  However, we still wanted to run those tests in, say, Eclipse, because presumably someone who tries to run the test in Eclipse really wants it to run; one way to make this work is to check whether the value of the TERM environment variable is set to "dumb."&lt;br /&gt;&lt;br /&gt;I created an annotation called &lt;span style="font-family:courier new;"&gt;IntegrationTest&lt;/span&gt;, which can only be applied to types, not methods.  A nice enhancement could be to apply the annotation to methods, too, so that only certain long-running test methods are excluded or included as desired.&lt;br /&gt;&lt;br /&gt;To mark test classes as long-running and I annotated each one like so:&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;blockquote&gt;@IntegrationTest&lt;br /&gt;@RunWith(JUnit4ClassRunner.class)&lt;/blockquote&gt;&lt;/pre&gt;&lt;div style="text-align: left;"&gt;The code for JUnit4ClassRunner is (approximately):&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;package&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; com&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.example&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;build&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; java&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;util&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;logging&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;Level&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; java&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;util&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;logging&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;Logger&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; org&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;junit&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;runner&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;Description&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; org&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;junit&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;runner&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;notification&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;RunNotifier&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; org&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;junit&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;runners&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;BlockJUnit4ClassRunner&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; org&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;junit&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;runners&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;model&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;FrameworkMethod&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt; org&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;junit&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;runners&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;model&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 74, 67);"&gt;InitializationError&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;class&lt;/span&gt; JUnit4ClassRunner &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;extends&lt;/span&gt; BlockJUnit4ClassRunner &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;final&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;String&lt;/span&gt; TEST_TYPE_KEY &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(0, 0, 230);"&gt;"test.type"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;final&lt;/span&gt; Logger log &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt;&lt;br /&gt;  Logger&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getLogger&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;JUnit4ClassRunner&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;class&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getName&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;public&lt;/span&gt; JUnit4ClassRunner&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;Class&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; klass&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;throws&lt;/span&gt; InitializationError &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;super&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;klass&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;@&lt;/span&gt;Override&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119);"&gt;void&lt;/span&gt; runChild&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;FrameworkMethod method&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; RunNotifier notifier&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;shouldRun&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;method&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;super&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;runChild&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;method&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; notifier&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;      log&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;info&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"Not running integration test: "&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;+&lt;/span&gt; method&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getMethod&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;      Description desc &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; Description&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;createTestDescription&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;br /&gt;          method&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getMethod&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getDeclaringClass&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 230);"&gt;"Integration test"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;      notifier&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;fireTestIgnored&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;desc&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119);"&gt;boolean&lt;/span&gt; shouldRun&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;FrameworkMethod method&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;final&lt;/span&gt; TestType type &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; getTestType&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;switch&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;type&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;case&lt;/span&gt; UNIT_ONLY&lt;span style="color: rgb(128, 128, 48);"&gt;:&lt;/span&gt;&lt;br /&gt;      return !isIntegrationTest&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;method&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;;&lt;span style="color: rgb(128, 0, 128);"&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;case&lt;/span&gt; INTEGRATION_ONLY&lt;span style="color: rgb(128, 128, 48);"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="font-weight: bold;"&gt;return &lt;/span&gt;isIntegrationTest&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;method&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;;&lt;span style="color: rgb(128, 0, 128);"&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;case&lt;/span&gt; ALL&lt;span style="color: rgb(128, 128, 48);"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;default&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; TestType getTestType&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;isIntegrationOnly&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; TestType&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;INTEGRATION_ONLY&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;if&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;isEclipse&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt; isAllTests&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; TestType&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;ALL&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;else&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; TestType&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;UNIT_ONLY&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; This is a bit of a hack&lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;,&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; but seems to work.  Eclipse sets the TERM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; environment variable to "dumb"&lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; it's quite unlikely that a user would&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; be running tests from the command line with their TERM set to "dumb."&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;@return&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; true if TERM is "dumb"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119);"&gt;boolean&lt;/span&gt; isEclipse&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;String&lt;/span&gt; value = System.getenv("TERM") == null ?&lt;br /&gt;          "" : System.getenv("TERM");&lt;span style="color: rgb(128, 0, 128);"&gt;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; value&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;equals&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"dumb"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119);"&gt;boolean&lt;/span&gt; isIntegrationOnly&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;String&lt;/span&gt; value &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;System&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getProperty&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;TEST_TYPE_KEY&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 230);"&gt;""&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; value&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;equals&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"integration"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119);"&gt;boolean&lt;/span&gt; isAllTests&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;String&lt;/span&gt; value &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;System&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getProperty&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;TEST_TYPE_KEY&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 0, 230);"&gt;""&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; value&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;equals&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;"all"&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;/**&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;@param&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; method The FrameworkMethod of some JUnit test method (i&lt;/span&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;e.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; a method annotated with &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;Test)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;@return&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; true if the class in which the method is declared is annotated&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;*&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt; with &lt;/span&gt;&lt;span style="color: rgb(127, 159, 191); font-weight: bold;"&gt;@&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;IntegrationTest&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;     */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: rgb(187, 121, 119);"&gt;boolean&lt;/span&gt; isIntegrationTest&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;FrameworkMethod method&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 0, 128);"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;Class&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;&amp;lt;?&amp;gt;&lt;/span&gt; klass &lt;span style="color: rgb(128, 128, 48);"&gt;=&lt;/span&gt; method&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getMethod&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;getDeclaringClass&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;return&lt;/span&gt; klass&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;isAnnotationPresent&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;IntegrationTest&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;class&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2491094660552220356?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2491094660552220356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2491094660552220356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2491094660552220356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2491094660552220356'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/02/at-work-time-to-execute-all-of-our-our.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3490721499591455615</id><published>2009-02-08T14:24:00.000-07:00</published><updated>2009-02-08T14:41:15.573-07:00</updated><title type='text'></title><content type='html'>When I was in grad school, I cooked, but it usually wasn't very good. Hamburgers, mac and cheese, spaghetti, stuff like that. Since I finished grad school a few years ago, I haven't had to scrimp, so I haven't cooked much at all. For lunch I've usually gone to the burrito joint across the street. That changed this Christmas when I got a Cuisinart and a bunch of cook books and cooking gear. I've been making my own sorbets for a few weeks now. So far I've made batches of lime-basil, honeydew melon-mint, and raspberry-anise. And for lunch I've found two recipes that taste good reheated. Here's one of them, an Orange Sizhuan Chicken, before it goes into the fridge.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/SY9QXFuyP7I/AAAAAAAAAMI/Y0Y48Ve2HvQ/s1600-h/IMG_0049.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/SY9QXFuyP7I/AAAAAAAAAMI/Y0Y48Ve2HvQ/s400/IMG_0049.JPG" alt="" id="BLOGGER_PHOTO_ID_5300543644043984818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To top it off, eating this way is usually cheaper than going out, although I do have to be careful when I go to Whole Foods.  Change is good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3490721499591455615?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3490721499591455615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3490721499591455615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3490721499591455615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3490721499591455615'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/02/when-i-was-in-grad-school-i-cooked-but.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IsE9c9rP_4/SY9QXFuyP7I/AAAAAAAAAMI/Y0Y48Ve2HvQ/s72-c/IMG_0049.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8498051328921721746</id><published>2009-02-07T07:29:00.001-07:00</published><updated>2009-02-22T18:22:08.056-07:00</updated><title type='text'></title><content type='html'>There's an article over at TPMMuckraker that got me thinking.  It's a bit of a digression, but bear with me.&lt;br /&gt;&lt;br /&gt;There seem to be two understandings of "bureaucracy," one pejorative, one objective.  In the pejorative version, bureaucracy is an organization -- typically governmental, like a regulatory agency, or that pot-bellied guy who works in the zoning department -- characterized by a terrifyingly blind, sometimes petty dedication to, say, filing all of the necessary paper work for your boat license.  In the objective version, which I expect is more common amongst social scientists and the like, bureaucracy is an organization characterized by a formal structure, with rules guiding how it is supposed to go about accomplishing its mission.&lt;br /&gt;&lt;br /&gt;I prefer the objective one; it's less driven by animus and, being more generic, it lends itself to broader application.  It's more useful.  With that definition, a corporation is a bureaucracy, which only makes sense: it's an organization with a blind, sometimes petty dedication to profit (if, of course, you assume that corporate governance is not completely broken, which it is).  Or an army: an organization with a blind, petty dedication to killing (in the national interest).&lt;br /&gt;&lt;br /&gt;There's a stereotype that government bureaucracies are extremely inefficient, but I think that's the wrong way to look at it.  They are typically just as efficient &lt;span style="font-style: italic;"&gt;at accomplishing the goals of the  organization&lt;/span&gt; as corporations, the military, and other institutions.  They just operate under different resource constraints.  A well-run military given the right resources is an efficient killing machine.  A well-run technology company given the right size (e.g. IBM) or right position in the technology life cycle (e.g. the early Cisco) is an efficient profit-making machine.  And a well-run regulatory agency given the right authority is an efficient regulator of whatever it's regulating.&lt;br /&gt;&lt;br /&gt;But like it or not, that's all they do.  They don't know how to handle things that conflict with their mission; when that happens, people outside the bureaucracy may have to apply force to cause it to behave correctly.  Depending on the degree of asymmetry of power between the outside group and the bureaucracy, something &lt;a href="http://en.wikipedia.org/wiki/Bhopal_disaster"&gt;terrible&lt;/a&gt; might happen before the outside group succeeds, if they succeed at all.&lt;br /&gt;&lt;br /&gt;So, with that in mind, please, dear reader, do remember that while bureaucracies serve a useful function within their own domain, they do little else.  Banks, for example, do not love you.  They're financial intermediaries, run for a profit, and they want your money; they don't give a damn whether your mother &lt;a href="http://tpmmuckraker.talkingpointsmemo.com/2009/02/how_theresa_hatt_caused_the_financial_crisis.php"&gt;just died of cancer&lt;/a&gt;.  Actually, I take that back, they do care if your mother just died of cancer, because that may make you more vulnerable and increase the chance that they can trick you into to giving them money to which they have no rightful claim.  Bastards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8498051328921721746?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8498051328921721746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8498051328921721746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8498051328921721746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8498051328921721746'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/02/theres-article-over-at-tpmmuckraker.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2647111882923977772</id><published>2009-02-05T19:56:00.001-07:00</published><updated>2009-02-05T19:56:45.997-07:00</updated><title type='text'></title><content type='html'>Global cooling is &lt;a href="http://blog.algore.com/2009/02/the_antarctic_is_warming.html"&gt;not&lt;/a&gt;, mmkay?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2647111882923977772?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2647111882923977772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2647111882923977772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2647111882923977772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2647111882923977772'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/02/global-cooling-is-not-mmkay.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2914158109597519262</id><published>2009-01-31T07:45:00.000-07:00</published><updated>2009-03-06T13:21:53.307-07:00</updated><title type='text'></title><content type='html'>Looks like someone deployed a new feature too soon: Google is &lt;a href="http://www.flickr.com/photos/75855084@N00/3241500936/"&gt;telling me&lt;/a&gt; that Google may be running malicious code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2914158109597519262?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2914158109597519262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2914158109597519262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2914158109597519262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2914158109597519262'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/01/looks-like-someone-deployed-new-feature.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6223217025076379560</id><published>2009-01-26T18:06:00.000-07:00</published><updated>2009-01-26T18:09:19.895-07:00</updated><title type='text'></title><content type='html'>It sure would be cool to be able to say that you devised a &lt;a href="http://www.worldwatch.org/node/5996"&gt;way&lt;/a&gt; to sequester carbon dioxide created in the production of cement; creating something that useful is a progressive engineer's dream.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6223217025076379560?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6223217025076379560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6223217025076379560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6223217025076379560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6223217025076379560'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/01/it-sure-would-be-cool-to-be-able-to-say.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1950560770043480864</id><published>2009-01-26T03:21:00.000-07:00</published><updated>2009-01-26T03:43:06.342-07:00</updated><title type='text'></title><content type='html'>What a &lt;a href="http://www.nytimes.com/2009/01/25/us/politics/25agenda.html"&gt;meaningless exercise&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;Yet one man’s flexibility is another man’s wishy-washiness, and Mr. Obama’s willingness to adapt carries the risk that he will either alienate his liberal base or fail to convert Republicans whose support he hopes to win. During his transition, Mr. Obama managed to charm conservatives; he wooed them at one dinner honoring Mr. McCain, and at another at the home of the columnist George F. Will.&lt;br /&gt;&lt;p&gt;But just days into the Obama presidency, some conservatives sound wary.&lt;/p&gt; &lt;p&gt;“I thought he did very well during the transition on things like the dinner with George Will, and all the words sounded good,” said Newt Gingrich, the Republican former speaker of the House. “But I think they are right at the cusp of either sliding down into a world where their words have no meaning or having to follow up their words with real behavior.”&lt;/p&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;There was a campaign, then an election, a transition period, and an inauguration. Unsurprisingly, the new administration is &lt;span style="font-style: italic;"&gt;new&lt;/span&gt;.   But note the melodramatic tone: "just days into Obama presidency," &lt;span style="font-style: italic;"&gt;"&lt;/span&gt;the cusp of sliding down into a world where their words have no meaning."  &lt;span style="font-style: italic;"&gt;Sigh&lt;/span&gt;.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1950560770043480864?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1950560770043480864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1950560770043480864' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1950560770043480864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1950560770043480864'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2009/01/what-meaningless-exercise-yet-one-mans.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8441547181217397830</id><published>2008-12-01T09:43:00.001-07:00</published><updated>2008-12-01T10:01:09.188-07:00</updated><title type='text'></title><content type='html'>The early reviews of Amazon's CloudFront are &lt;a href="http://www.redmonk.com/jgovernor/2008/11/28/amazon-cloudfront-simple-caching-and-naming/"&gt;in&lt;/a&gt;.  The question is will Akamai do business differently now?  Is Amazon going to eat Akamai's business from the bottom up, much like Windows NT and Linux did (in different ways) for the UNIX workstation market?  Akamai's CDN includes real-time communications like VOIP and conferencing.  I wonder if Amazon wants into that space too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8441547181217397830?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8441547181217397830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8441547181217397830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8441547181217397830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8441547181217397830'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/12/early-reviews-of-amazons-cloudfront-are.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1555516948509965759</id><published>2008-11-18T07:04:00.000-07:00</published><updated>2008-11-18T07:07:48.323-07:00</updated><title type='text'></title><content type='html'>The &lt;a href="http://www.allthingsdistributed.com/2008/11/amazon_cloudfront.html"&gt;opening salvo&lt;/a&gt; in the coming war between &lt;a href="http://www.amazon.com"&gt;Amazon&lt;/a&gt; and &lt;a href="http://www.akamai.com/"&gt;Akamai&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1555516948509965759?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1555516948509965759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1555516948509965759' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1555516948509965759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1555516948509965759'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/11/opening-salvo-in-coming-war-between.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1662259718555229637</id><published>2008-11-05T05:05:00.001-07:00</published><updated>2008-11-05T05:07:49.906-07:00</updated><title type='text'></title><content type='html'>That went well, at least for pollster.com.  Predicted:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/SRGMKxucWvI/AAAAAAAAAJU/jg2dxBaSHKM/s1600-h/predicted.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 301px;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/SRGMKxucWvI/AAAAAAAAAJU/jg2dxBaSHKM/s400/predicted.jpg" alt="" id="BLOGGER_PHOTO_ID_5265143556147534578" border="0" /&gt;&lt;/a&gt;Actual:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/SRGMarnSP2I/AAAAAAAAAJc/XnHoTMXTCrg/s1600-h/results.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 278px;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/SRGMarnSP2I/AAAAAAAAAJc/XnHoTMXTCrg/s400/results.jpg" alt="" id="BLOGGER_PHOTO_ID_5265143829384806242" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1662259718555229637?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1662259718555229637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1662259718555229637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1662259718555229637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1662259718555229637'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/11/that-went-well-at-least-for-pollster.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IsE9c9rP_4/SRGMKxucWvI/AAAAAAAAAJU/jg2dxBaSHKM/s72-c/predicted.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1701590662052227499</id><published>2008-09-27T19:17:00.001-06:00</published><updated>2008-09-27T19:45:02.220-06:00</updated><title type='text'></title><content type='html'>Went &lt;a href="http://flickr.com/photos/75855084@N00/sets/72157607546683031/"&gt;hiking in the mountains&lt;/a&gt; today with the folks and my nephew.  The colors are changing beautifully.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/75855084@N00/2893944832/" title="DSC_0106 by ndronen, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3065/2893944832_8e9c0a19f8.jpg" width="500" height="333" alt="DSC_0106" align="middle"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/75855084@N00/2893097569/" title="Untitled by ndronen, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3223/2893097569_b511c8fe1a.jpg" width="333" height="500" alt="" align="middle"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1701590662052227499?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1701590662052227499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1701590662052227499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1701590662052227499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1701590662052227499'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/09/went-hiking-in-mountains-today-with.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3065/2893944832_8e9c0a19f8_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7745832737232626261</id><published>2008-09-20T14:23:00.000-06:00</published><updated>2008-09-20T14:37:58.709-06:00</updated><title type='text'></title><content type='html'>Rereading an old networking textbook this afternoon, I ran across this passage:&lt;br /&gt;&lt;blockquote&gt;There is frequently a trade-off between some sort of optimality and scalability.  When hierarchy is introduced, information is hidden from some nodes in the network, hindering their ability to make perfectly optimal decisions.  However, information hiding is essential to scalability, since it saves all nodes from having global knowledge.  It is invariably true in large networks that scalability  is a more pressing design goal than perfect optimality.  &lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: right;"&gt;Computer Networks, A Systems Approach, 3rd ed., p. 318&lt;br /&gt;  &lt;/div&gt;&lt;div style="margin-left: 280px; text-align: right;"&gt;   &lt;/div&gt;&lt;div style="text-align: right;"&gt;Larry L. Peterson and Bruce S. Davie&lt;br /&gt;   &lt;/div&gt;&lt;/blockquote&gt; This reminds me of an idea I and a friend have been kicking around lately: software can be optimal only within its own domain, where a domain amounts to a layer in some software stack.  Kernels optimize, say, the mappings between virtual and physical pages.  Compilers optimize register allocation.  Application writers optimize data structures and algorithms.   And that's about as good as it gets.   As a counterexample, if an application writer were also to have control over and knowledge of register allocation, page tables, i/o buffering, and so on down the stack, she might be able to create a maximally optimal application, but it would come at the cost of scalability of her own productivity.  It would take her longer.  So efficient use of programmer time requires layering. &lt;br /&gt;&lt;br /&gt;At first glance I thought that layering also requires software reuse,  but perhaps it doesn't.  An ISV, for example, could ship an application for which it wrote a one-off operating system and compiler, with layering dictated by the fact that the application, operating system, and compiler teams were completely separate and communicated only by design specs.  But that's inefficient  as well.  So the spirit of the law of layering requires software reuse, which in turn requires that each layer be as general as possible.&lt;br /&gt;&lt;br /&gt;All of which reminds me of the argument David Clark made back in the 80s about layering in networks.   I suppose there are equivalent papers about layering in &lt;a href="http://en.wikipedia.org/wiki/Software_components"&gt;software architecture&lt;/a&gt; as well, the most likely (canonical) one being Douglas McIlroy's &lt;a href="http://www.cs.dartmouth.edu/%7Edoug/components.txt"&gt;&lt;span style="font-style: italic;"&gt;Mass Produced Software Components&lt;/span&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7745832737232626261?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7745832737232626261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7745832737232626261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7745832737232626261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7745832737232626261'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/09/rereading-old-networking-textbook-this.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6465554340545238778</id><published>2008-09-04T12:13:00.000-06:00</published><updated>2008-09-04T12:19:08.242-06:00</updated><title type='text'></title><content type='html'>Sometimes -- okay, usually -- it seems the Republic Party (might as well return the favor for "Democrat Party") thinks drilling constitutes a comprehensive energy policy.  And as if that wasn't apparent before, it sure was clear after Guliani's &lt;a href="http://blogs.timesunion.com/capitol/archives/8603"&gt;speech&lt;/a&gt; last night in St. Paul:&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;John McCain will bring about the change that will create jobs and prosperity…let’s talk specifics…John McCain will lower taxes so our economy can grow. He will reduce government spending to strengthen our dollar. He will expand free trade so we can be even more competitive. He will lead us to energy independence so we can be free of foreign oil. And he’ll do it with an all-of-the-above approach, including nuclear power and off-shore drilling.&lt;/p&gt; &lt;p&gt;[ chants of “Drill, baby, drill”]&lt;/p&gt; &lt;p&gt;Giuliani laughs as the audience chants.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6465554340545238778?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6465554340545238778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6465554340545238778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6465554340545238778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6465554340545238778'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/09/sometimes-okay-usually-it-seems.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2895904770038154588</id><published>2008-08-28T07:31:00.001-06:00</published><updated>2008-08-28T07:47:21.126-06:00</updated><title type='text'></title><content type='html'>In case you're wondering about the differences among &lt;a href="http://opengroup.org/onlinepubs/007908775/xsh/select.html"&gt;select(2)&lt;/a&gt;, &lt;a href="http://www.opengroup.org/onlinepubs/000095399/functions/poll.html"&gt;poll(2)&lt;/a&gt;, and the &lt;a href="http://developers.sun.com/solaris/articles/polling_efficient.html"&gt;device-based&lt;/a&gt; &lt;a href="http://linux.die.net/man/4/epoll"&gt;polling&lt;/a&gt; &lt;a href="http://people.freebsd.org/%7Ejmg/kqueue.historic.man.html"&gt;approaches&lt;/a&gt;, they all do fundamentally the same thing -- notify the program when a socket is ready for reading or writing or when an error occurs on a socket.  Select() came first in the history of UNIX, but it has a basic limitation on the number of sockets that can be monitored.  It's 1024 in most cases, unless you recompile.  Poll() solves this problem; it requires the programmer to allocate the array of socket structures that she passes to the system call, so in theory you can monitor an arbitrary number of sockets.  (Poll() is also superior to select() in that it gives the programmer finer control over the kinds of events to watch for.)  The problem that poll() has only really occurs on servers that handle an enormous number of sockets.  That problem is, simply, that the array of socket structures must be copied from user space to kernel space and back again every time you call poll().  So far as I recall, this performance bottleneck came to light in the early 2000s when people were doing research on the&lt;a href="http://www.citi.umich.edu/projects/linux-scalability/"&gt; scalability of Linux&lt;/a&gt;, but that's just a vague memory.  The first implementation could have been done in FreeBSD or Solaris.  At any rate, the user-kernel-user copy problem is the reason for what I call the device-based approaches (because they involve a file in /dev).  With epoll (as it's known on Linux), the program tells the operating system which particular sockets to monitor, and the operating system tells the program when a particular socket has changed.  It only tells the program that that &lt;span style="font-style: italic;"&gt;particular &lt;/span&gt;socket changed.  It doesn't say, "Hey, here is the entire of array of sockets you care about, and it's up to you to examine the structures to figure out which ones changed."  So device-based polling is useful if you are polling a large number of sockets.  Otherwise, plain old poll() should work just fine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2895904770038154588?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2895904770038154588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2895904770038154588' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2895904770038154588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2895904770038154588'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/08/in-case-youre-wondering-about.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3775712693727343463</id><published>2008-08-15T14:28:00.000-06:00</published><updated>2008-08-15T14:46:50.935-06:00</updated><title type='text'></title><content type='html'>Thinking about domain-specific languages (DSLs) ... Generally, it is easier to keep track of the role of each argument to some function/method in languages with keyword parameters (e.g. Python, Ruby).  Names are easier to remember than positions in a parameter list.  In a language without keyword parameters, how do you make it easy to remember which parameter is what (putting aside for the moment the usefulness of IDEs in displaying the function/method signature for you)?  Here's an example of how to do that in Java.  Take this function:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;public void validateState(PBXConference conference, int added, int connecting, int connected, int disconnecting, int disconected) {&lt;br /&gt;   assertEquals(conference.added(), added);&lt;br /&gt;   assertEquals(conference.connecting(), connecting);&lt;br /&gt;   assertEquals(conference.connected(), connected);&lt;br /&gt;   assertEquals(conference.disconnecting(), disconnecting);&lt;br /&gt;   assertEquals(conference.disconnected(), disconnecting);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;A client would invoke it like:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;validateState(conference, 2, 1, 1, 0, 0);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;but that sequence of numbers doesn't help the readability of the test.  So instead, while it's a bit more verbose, we can change the function definition to:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;public class ConferenceStateValidator {&lt;br /&gt;   private PBXConference conference;&lt;br /&gt;&lt;br /&gt;   private ConferenceStateValidator(PBXConference conference) {&lt;br /&gt;       this.conference = conference;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public ConferenceStateValidator added(int n) {&lt;br /&gt;       assertEquals(conference.added(), n);&lt;br /&gt;       return this;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public ConferenceStateValidator connecting(int n) {&lt;br /&gt;       assertEquals(conference.connecting(), n);&lt;br /&gt;       return this;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public ConferenceStateValidator connected(int n) {&lt;br /&gt;       assertEquals(conference.connected(), n);&lt;br /&gt;       return this;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public ConferenceStateValidator disconnecting(int n) {&lt;br /&gt;       assertEquals(conference.disconnecting(), n);&lt;br /&gt;       return this;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public ConferenceStateValidator disconnected(int n) {&lt;br /&gt;       assertEquals(conference.disconnected(), n);&lt;br /&gt;       return this;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public static ConferenceStateValidator validateState(PBXConference conference) {&lt;br /&gt;       return new ConferenceStateValidator(conference);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;And the client (assuming they've statically imported validateState), can do:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;validateState(conference).added(2)&lt;br /&gt;   .connected(1).connecting(1)&lt;br /&gt;   .disconnected(0).disconnecting(0);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;which is much cleaner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3775712693727343463?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3775712693727343463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3775712693727343463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3775712693727343463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3775712693727343463'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/08/thinking-about-domain-specific.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-825174304083592780</id><published>2008-08-13T14:35:00.000-06:00</published><updated>2008-08-13T14:47:48.464-06:00</updated><title type='text'></title><content type='html'>From Mozilla Labs, &lt;a href="http://labs.mozilla.com/projects/snowl/"&gt;an idea&lt;/a&gt; whose time is coming.  I was struck by this bit though.&lt;br /&gt;&lt;p id="d-.220"&gt;&lt;/p&gt;&lt;p id="d-.220"&gt;&lt;/p&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;p id="d-.220"&gt;&lt;span style="font-size:85%;"&gt;Our next step is to gather feedback on the prototype and the ideas behind it.  We want to know if the concept has promise and is worth pursuing further.  We’re particularly interested in feedback on how messaging might fit into the browsing experience and if there are other interfaces (or refinements to the two interfaces built into the prototype) that would make it easier for users to have online conversations.&lt;/span&gt;&lt;/p&gt; &lt;p id="cnp90"&gt;&lt;span style="font-size:85%;"&gt;We’re still considering what may come after that, but possible extensions to the Snowl prototype include:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul id="cnp91"&gt;&lt;li id="cnp92"&gt;&lt;span style="font-size:85%;"&gt;support for additional message sources, e.g. Facebook, AIM, Google Talk, etc.;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li id="cnp93"&gt;&lt;span style="font-size:85%;"&gt;an interface for writing and sending messages to enable true two-way conversations;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;Since &lt;a href="http://mashable.com/2008/05/13/facebook-jabber/"&gt;Facebook&lt;/a&gt; and &lt;a href="http://code.google.com/apis/talk/open_communications.html"&gt;Google Talk&lt;/a&gt; already support or are going to support XMPP, the only question is whether Snowl will support it too.  Other chat services should just follow suit.  In other words, there's no point in mentioning "additional message sources" when all of those sources use XMPP.  Just mention XMPP!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-825174304083592780?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/825174304083592780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=825174304083592780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/825174304083592780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/825174304083592780'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/08/from-mozilla-labs-idea-whose-time-is.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1242920601195094069</id><published>2008-08-07T11:48:00.000-06:00</published><updated>2008-08-07T12:25:22.575-06:00</updated><title type='text'></title><content type='html'>Maybe a couple of months ago some blogger whose feed is aggregated at &lt;a href="http://planet.intertwingly.net/"&gt;Planet Intertwingly&lt;/a&gt; (I don't remember who) wrote a post summarizing his complaints about Erlang.  One complaint was about extracting a value from a tuple.  Say you assign a tuple to some variable, as in&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;1&gt; X = {a, 10}.&lt;br /&gt;{a,10}&lt;br /&gt;&lt;/blockquote&gt;and you want the value of the second element of the tuple.  How do you do that?  Conventionally,&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;2&gt; {_, Y} = X.&lt;br /&gt;{a,10}&lt;br /&gt;3&gt; Y.&lt;br /&gt;10&lt;br /&gt;&lt;/blockquote&gt;Now the variable Y has the value 10.  (In Erlang, the underscore is the anonymous variable.)  If a tuple has a large number of fields or contains nested tuples, such tuple-unpacking statements are unwieldy.  And that's what the guy objected to.  It's too verbose and easy to botch.&lt;br /&gt;&lt;br /&gt;Fortunately, pattern matching provides a simple way to work around this.  Define a function that matches the tuple (particularly the first atom)&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;4&gt; ValueOf = fun({a, Value}) -&gt; Value end.&lt;br /&gt;#Fun&lt;erl_eval.6.49591080&gt;&lt;br /&gt;5&gt; ValueOf(X).&lt;br /&gt;10&lt;/erl_eval.6.49591080&gt;&lt;/blockquote&gt;If you define one function for each element in a tuple, you get accessor methods for the tuple and you don't have to continue writing long expressions with a lot of anonymous variables.&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1242920601195094069?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1242920601195094069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1242920601195094069' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1242920601195094069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1242920601195094069'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/08/maybe-couple-of-months-ago-some-blogger.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2443461665472697535</id><published>2008-08-02T21:56:00.000-06:00</published><updated>2008-08-02T21:57:03.882-06:00</updated><title type='text'></title><content type='html'>Here's the second GPS email for Bob's hike:&lt;br /&gt;&lt;blockquote&gt;SPOT Check OK. All is well !! Bob&lt;br /&gt;ESN:0-7425741&lt;br /&gt;Latitude:43.9801&lt;br /&gt;Longitude:-121.8084&lt;br /&gt;Nearest Location: Elk Lake, United States&lt;br /&gt;Distance: 0 km(s)&lt;br /&gt;Time:07/31/2008 22:35:38 (US/Mountain)&lt;br /&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=43.9801,-121.8084&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;om=1" target="_blank"&gt;http://maps.google.com/maps?f=&lt;wbr&gt;q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=43.9801,-&lt;wbr&gt;121.8084&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;om=1&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2443461665472697535?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2443461665472697535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2443461665472697535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2443461665472697535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2443461665472697535'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/08/heres-second-gps-email-for-bobs-hike.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2944931616542783792</id><published>2008-08-02T21:41:00.000-06:00</published><updated>2008-08-02T21:54:54.180-06:00</updated><title type='text'></title><content type='html'>A while ago I tweeted about the possibility of the growth of more continental/regional/local manufacturing in response to the growing costs of transportation.  Twitter has &lt;a href="http://getsatisfaction.com/twitter/topics/why_older_button_is_not_working"&gt;some&lt;/a&gt; &lt;a href="http://getsatisfaction.com/twitter/topics/why_is_the_archives_older_button_greyed_out"&gt;problems&lt;/a&gt; preventing me from getting the permalink; even so, it sort of goes without saying that that will happen.  Anyway, the &lt;span style="font-style: italic;"&gt;Times&lt;/span&gt; now has &lt;a href="http://www.nytimes.com/2008/08/03/business/worldbusiness/03global.html"&gt;an article&lt;/a&gt; about the phenomenon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2944931616542783792?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2944931616542783792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2944931616542783792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2944931616542783792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2944931616542783792'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/08/while-ago-i-tweeted-about-possibility.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2813175000776121738</id><published>2008-07-31T08:11:00.000-06:00</published><updated>2008-07-31T08:14:10.395-06:00</updated><title type='text'></title><content type='html'>My stepdad Bob and stepsister Heather are hiking a section of the Pacific Crest Trail this month.  Bob signed up for a location service that emails his friends his current location and a simple status message.  I just got the first one.  Here's what it looks like, including the link to the map:&lt;br /&gt;&lt;blockquote&gt;SPOT Check OK. All is well !! Bob&lt;br /&gt;ESN:0-7425741&lt;br /&gt;Latitude:44.1548&lt;br /&gt;Longitude:-121.8187&lt;br /&gt;Nearest Location: Belknap Springs, United States&lt;br /&gt;Distance: 19 km(s)&lt;br /&gt;Time:07/31/2008 08:04:40 (US/Mountain)&lt;br /&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=44.1548,-121.8187&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;om=1" target="_blank"&gt;http://maps.google.com/maps?f=&lt;wbr&gt;q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=44.1548,-&lt;wbr&gt;121.8187&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;om=1&lt;/a&gt;&lt;/blockquote&gt;&lt;a href="http://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=44.1548,-121.8187&amp;amp;ie=UTF8&amp;amp;z=12&amp;amp;om=1" target="_blank"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2813175000776121738?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2813175000776121738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2813175000776121738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2813175000776121738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2813175000776121738'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/07/my-stepdad-bob-and-stepsister-heather.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8481448679853272250</id><published>2008-07-30T11:23:00.000-06:00</published><updated>2008-07-30T11:25:58.464-06:00</updated><title type='text'></title><content type='html'>Why are there such long delays in anaconda when upgrading from RedHat Enterprise Linux 4.x to 5.0?  For a while there, restorecon(1) and find(1) were taking up most of the CPU, which I assume had something to do with setting default modes on certain files, but other than that it's just been anaconda in the process table, sometimes with awkward, crickets-chirping silences.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8481448679853272250?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8481448679853272250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8481448679853272250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8481448679853272250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8481448679853272250'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/07/why-are-there-such-long-delays-in.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3760054640769702485</id><published>2008-06-03T16:20:00.000-06:00</published><updated>2008-06-03T16:28:02.949-06:00</updated><title type='text'></title><content type='html'>Funny thing, I was just thinking that it's not possible to unit test C programs because, for example, a system call like read(2) just takes primitive arguments, which doesn't give you much opportunity for mocking.  Then I had a small epiphany: use LD_PRELOAD to mock out external functions, including system calls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3760054640769702485?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3760054640769702485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3760054640769702485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3760054640769702485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3760054640769702485'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2008/06/funny-thing-i-was-just-thinking-that.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3997075376522023732</id><published>2007-06-02T07:04:00.000-06:00</published><updated>2008-12-10T23:12:58.966-07:00</updated><title type='text'></title><content type='html'>I just love this scene with Grace Kelly and Cary Grant in &lt;span style="font-style: italic;"&gt;To Catch a Thief&lt;/span&gt;.  There's a double entendre woven into it: Frances Stevens somewhat mockingly acts out the allure of her diamond necklace to former "cat burglar" John Robie but the scene is really about her seduction of him.  The fireworks in the background emphasize this throughout the scene, but Hitchcock sort of blows their beautiful subtlety by cutting between increasingly close shots of the display and, as they become more intimate, Stevens and Robie.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RmFrGPbdMpI/AAAAAAAAAHY/18Y2aDcZR2c/s1600-h/ZZ5BACA72F.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RmFrGPbdMpI/AAAAAAAAAHY/18Y2aDcZR2c/s400/ZZ5BACA72F.jpg" alt="" id="BLOGGER_PHOTO_ID_5071452410360967826" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3997075376522023732?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3997075376522023732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3997075376522023732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3997075376522023732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3997075376522023732'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/06/i-just-love-this-scene-with-grace-kelly.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IsE9c9rP_4/RmFrGPbdMpI/AAAAAAAAAHY/18Y2aDcZR2c/s72-c/ZZ5BACA72F.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7547273355508816712</id><published>2007-05-27T09:54:00.000-06:00</published><updated>2007-05-27T14:37:48.749-06:00</updated><title type='text'></title><content type='html'>It was a such a pleasure to see &lt;a style="font-style: italic;" href="http://www.zeitgeistfilms.com/film.php?directoryname=intogreatsilence"&gt;Into Great Silence&lt;/a&gt; at the Chez Artiste in Denver yesterday.   It's long.  "Three hours, with trailers," said the guy at the ticket counter.   At some point after the two-hour mark I bobbed in and out of wakefulness a few times.   With the exception of some popcorn munchers (myself included) and a man  across the aisle who kept talking (not whispering) into his wife's ear (who, to her credit, shushed him), the audience was as quiet as the monks on the screen.  It was so quiet that at times we could hear the soundtrack of the movie playing in the theater next to us.&lt;br /&gt;&lt;br /&gt;Most of the people there were elderly.  A white-haired woman with a mobile oxygen supply was in the audience with her white-haired friend.  I think I was the youngest one, and I'm thirty-seven.  It's sad that apparently one's interest in otherworldly things exists generally only in proportion to one's proximity to death.&lt;br /&gt;&lt;br /&gt;Jim Emerson's &lt;a href="http://blogs.suntimes.com/scanners/2007/03/the_silence_of_the_monks.html"&gt;review&lt;/a&gt; of the movie is worth reading if you're wondering what the movie is about.  Gröning spent six months living in the monastery, a film crew of one.  His compositions of the monks and the monastery are masterful and gentle.  Some of the lovely outdoor footage of the French Alps is presumably the work of the credited second crew.&lt;br /&gt;&lt;br /&gt;If you have a chance to see this while it's playing in a theater, do so.  Like &lt;a href="http://www.imdb.com/title/tt0062136/"&gt;Playtime&lt;/a&gt;, this is best experienced on a big screen – the bigger the better.  Without that, the sense of the film being like a monastery, not just about a monastery, may not seize you.&lt;br /&gt;&lt;br /&gt;Update: a load of &lt;span style="font-style: italic;"&gt;Into Great Silence&lt;/span&gt; links, including one to an interview with Gröning, at &lt;a href="http://daily.greencine.com/archives/003331.html"&gt;GreenCine&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7547273355508816712?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.blogger.com/img/gl.link.gif' title=''/><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7547273355508816712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7547273355508816712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7547273355508816712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7547273355508816712'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/05/it-was-such-pleasure-to-see-into-great.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2688190713351135979</id><published>2007-04-29T07:35:00.000-06:00</published><updated>2008-12-10T23:12:59.888-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RjSfnt0w2wI/AAAAAAAAAHA/QhMe65rfmp4/s1600-h/DSC_0135.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RjSfnt0w2wI/AAAAAAAAAHA/QhMe65rfmp4/s400/DSC_0135.JPG" alt="" id="BLOGGER_PHOTO_ID_5058843786108525314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RjSfoN0w2xI/AAAAAAAAAHI/PFRGJlDqMjI/s1600-h/DSC_0142.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RjSfoN0w2xI/AAAAAAAAAHI/PFRGJlDqMjI/s400/DSC_0142.JPG" alt="" id="BLOGGER_PHOTO_ID_5058843794698459922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RjSfot0w2yI/AAAAAAAAAHQ/ESIV9_g0gms/s1600-h/DSC_0074.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RjSfot0w2yI/AAAAAAAAAHQ/ESIV9_g0gms/s400/DSC_0074.JPG" alt="" id="BLOGGER_PHOTO_ID_5058843803288394530" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2688190713351135979?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2688190713351135979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2688190713351135979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2688190713351135979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2688190713351135979'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/04/blog-post.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IsE9c9rP_4/RjSfnt0w2wI/AAAAAAAAAHA/QhMe65rfmp4/s72-c/DSC_0135.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2951364113390799872</id><published>2007-03-19T22:27:00.000-06:00</published><updated>2008-12-10T23:13:00.378-07:00</updated><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/Rf9j_AXgvzI/AAAAAAAAAGs/F106Bfhp1rM/s1600-h/DSC_0002.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/Rf9j_AXgvzI/AAAAAAAAAGs/F106Bfhp1rM/s400/DSC_0002.JPG" alt="" id="BLOGGER_PHOTO_ID_5043860041759768370" border="0" /&gt;&lt;/a&gt;The farm house was gone long ago, lifted on beams and towed off to some other lot.  The barn is next.  They're disassembling it now, day by day, board by board.  When the last red rib of this empty rib cage is taken down, they'll dig up the land, cover it with cement, and when it's all done, they will have replaced the old homestead with rows of storage for all our extra stuff.  Amen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/Rf9j_gXgv0I/AAAAAAAAAG0/aU2nhuQmZb8/s1600-h/DSC_0003.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/Rf9j_gXgv0I/AAAAAAAAAG0/aU2nhuQmZb8/s400/DSC_0003.JPG" alt="" id="BLOGGER_PHOTO_ID_5043860050349702978" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2951364113390799872?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2951364113390799872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2951364113390799872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2951364113390799872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2951364113390799872'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/03/farm-house-was-gone-long-ago-lifted-on.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IsE9c9rP_4/Rf9j_AXgvzI/AAAAAAAAAGs/F106Bfhp1rM/s72-c/DSC_0002.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3563259913942181635</id><published>2007-03-11T19:50:00.000-06:00</published><updated>2008-12-10T23:13:00.827-07:00</updated><title type='text'></title><content type='html'>Light and lines.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RfSyW-4OzaI/AAAAAAAAAGc/TgKQsp00uXE/s1600-h/DSC_0007.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RfSyW-4OzaI/AAAAAAAAAGc/TgKQsp00uXE/s400/DSC_0007.JPG" alt="" id="BLOGGER_PHOTO_ID_5040849990840143266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RfS0lO4OzbI/AAAAAAAAAGk/R0cSB9WInKU/s1600-h/DSC_4.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RfS0lO4OzbI/AAAAAAAAAGk/R0cSB9WInKU/s400/DSC_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5040852434676534706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3563259913942181635?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3563259913942181635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3563259913942181635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3563259913942181635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3563259913942181635'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/03/light-and-lines.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IsE9c9rP_4/RfSyW-4OzaI/AAAAAAAAAGc/TgKQsp00uXE/s72-c/DSC_0007.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-2884654356985359466</id><published>2007-03-11T15:50:00.000-06:00</published><updated>2008-12-10T23:13:01.126-07:00</updated><title type='text'></title><content type='html'>One thing I failed to say the &lt;a href="http://hexencodings.blogspot.com/2007/02/frame-from-truffauts-bed-and-board.html"&gt;last time&lt;/a&gt; I mentioned Truffaut is that &lt;a href="http://images.google.com/images?q=claude%20jade"&gt;Claude Jade&lt;/a&gt; is extraordinarily beautiful.  A shot of her from &lt;span style="font-style: italic;"&gt;Stolen Kisses&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RfR67e4OzZI/AAAAAAAAAGU/_199-DFDXq8/s1600-h/ZZ49F86D67.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RfR67e4OzZI/AAAAAAAAAGU/_199-DFDXq8/s400/ZZ49F86D67.jpg" alt="" id="BLOGGER_PHOTO_ID_5040789045254213010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;What a woman.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-2884654356985359466?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/2884654356985359466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=2884654356985359466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2884654356985359466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/2884654356985359466'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/03/one-thing-i-failed-to-say-last-time-i.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IsE9c9rP_4/RfR67e4OzZI/AAAAAAAAAGU/_199-DFDXq8/s72-c/ZZ49F86D67.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-7698397231556255914</id><published>2007-03-11T09:56:00.000-06:00</published><updated>2008-12-10T23:13:01.298-07:00</updated><title type='text'></title><content type='html'>My favorite exercise in macro photography so far.  I think I'm actually starting to understand aperture. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RfQnO-4OzYI/AAAAAAAAAGM/p0JEQAfomPY/s1600-h/DSC_0072.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RfQnO-4OzYI/AAAAAAAAAGM/p0JEQAfomPY/s400/DSC_0072.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5040697021284928898" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-7698397231556255914?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/7698397231556255914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=7698397231556255914' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7698397231556255914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/7698397231556255914'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/03/my-favorite-exercise-in-macro.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IsE9c9rP_4/RfQnO-4OzYI/AAAAAAAAAGM/p0JEQAfomPY/s72-c/DSC_0072.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6451633490426385428</id><published>2007-03-10T18:04:00.000-07:00</published><updated>2008-12-10T23:13:02.985-07:00</updated><title type='text'></title><content type='html'>I went into the mountains with my step dad Bob this morning.  On the drive up, it started to drizzle....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RfNeku4OzSI/AAAAAAAAAFc/CHnyDDppXT0/s1600-h/DSC_0011.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RfNeku4OzSI/AAAAAAAAAFc/CHnyDDppXT0/s400/DSC_0011.JPG" alt="" id="BLOGGER_PHOTO_ID_5040476393109900578" border="0" /&gt;&lt;/a&gt;Then it started to snow....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RfNek-4OzUI/AAAAAAAAAFs/3RM7RxmckKE/s1600-h/DSC_0030.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RfNek-4OzUI/AAAAAAAAAFs/3RM7RxmckKE/s400/DSC_0030.JPG" alt="" id="BLOGGER_PHOTO_ID_5040476397404867906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Bob is a volunteer with the US Forest Service.  He goes into the Roosevelt National Forest in northern Colorado and does various things that I normally would think that only a retired guy would have time to do. But Bob has been volunteering his whole life. When he was young, he volunteered to go to Vietnam. Twice. On his second tour he was in a &lt;a href="http://en.wikipedia.org/wiki/LRRP"&gt;LRRP&lt;/a&gt; unit. At some point the unit's mission changed from conventional LRRP stuff (being dropped by helicopter into hostile territory with a small crew, sleeping outdoors, radioing in coordinates for bombing missions, hightailing it into helicopters in fields of elephant grass while being shot at by NVA, and so on) to rapid deployment support for other units in distress. He was wounded in an ambush in one such mission and lost his right calf. When he returned home, he met a man who taught him how to ski on one leg. Since then he's been helping handicapped kids learn out to enjoy the outdoors. A few years ago I remember being blown away when my mom told me on the phone that Bob was out showing a blind kid how to hunt with a bow and arrow. Unbelievable.  And that's just one example.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RfNeku4OzTI/AAAAAAAAAFk/Cb1Ya6O8628/s1600-h/DSC_0024.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RfNeku4OzTI/AAAAAAAAAFk/Cb1Ya6O8628/s400/DSC_0024.JPG" alt="" id="BLOGGER_PHOTO_ID_5040476393109900594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;We stopped at some Forest Service facilities and Bob shoveled their walk ways and made sure they weren't out of supplies.  We went snowshoeing.  At one point he stopped in his tracks.   I stopped, too.  "What do you hear?"  I listened.  He listened.  We listened.  "A bird chirping...."  "The wind through the treetops...."  "A car's tires on the paved road below...no an airplane above."&lt;br /&gt;&lt;br /&gt;After a while we walked back down the trail to the truck.  Bob recorded information about the trek &amp;mdash; what the trail was like, the number of people he saw on the trail, the number of cars in the parking lot &amp;mdash; in a Forest Service log book.  We stopped at another USFS facility on the drive down.  A little Boy Scout troop was digging a shelter in a snow bank near the parking lot.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RfNek-4OzVI/AAAAAAAAAF0/PZpSW_tsQFc/s1600-h/DSC_0060.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RfNek-4OzVI/AAAAAAAAAF0/PZpSW_tsQFc/s400/DSC_0060.JPG" alt="" id="BLOGGER_PHOTO_ID_5040476397404867922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RfNiB-4OzWI/AAAAAAAAAF8/tex98yMjEFA/s1600-h/DSC_0050.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RfNiB-4OzWI/AAAAAAAAAF8/tex98yMjEFA/s400/DSC_0050.JPG" alt="" id="BLOGGER_PHOTO_ID_5040480194155957602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Further down the road, Bob told me about the three ways to hunt an antelope.  Spot it and loop back through a dry creek bed or other stealthy means.  Set up a blind and wait.   Wave a flag over a ridge to attract the animal, which is naturally curious.   He offered a fourth possibility, which he'd heard of but was skeptical about: make a cardboard  cut-out shaped like a cow, paint it black and white, and hide behind it while you walk at an angle towards the antelope.  He also told me the reason birds eat pebbles.   Being toothless, they need something to grind the food in their bellies.  All this stuff I don't know.  Thanks, Bob.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RfNkFe4OzXI/AAAAAAAAAGE/u7-W4Oq7mrI/s1600-h/DSC_0111.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RfNkFe4OzXI/AAAAAAAAAGE/u7-W4Oq7mrI/s400/DSC_0111.JPG" alt="" id="BLOGGER_PHOTO_ID_5040482453308755314" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6451633490426385428?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6451633490426385428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6451633490426385428' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6451633490426385428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6451633490426385428'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/03/i-went-into-mountains-with-my-step-dad.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IsE9c9rP_4/RfNeku4OzSI/AAAAAAAAAFc/CHnyDDppXT0/s72-c/DSC_0011.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-6090031330281800542</id><published>2007-02-25T08:15:00.000-07:00</published><updated>2008-12-10T23:13:03.490-07:00</updated><title type='text'></title><content type='html'>&lt;span style="font-style: italic;"&gt;Monster House&lt;/span&gt; has something for all ages, so much so that it can be seen as being about different things depending on the age of the viewer.  (BEWARE: Spoilers ahead.)  For the growing-ups, there are the three protagonists (two boys and a girl, in classic Hollywood fashion).  Their coming-of-age adventure happens in the absence of anyone past puberty; the parents are gone for all of the action, and the teenage babysitter disappears right when things get going.  For the grown-ups, there's a fairly conspicuous theme about real estate, which fits nicely with the gluttonous housing development of the past eight years.  Connecting the adult and adolescent themes are the ideas of change and constance (or Constance, a character who appears late in the movie).  The movie opens with a shot of a yellow leaf falling from a tree, a symbol of natural change.  In the background is another symbol of change, man-made this time, a large construction crane.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/ReGvzuF-31I/AAAAAAAAAEo/7z0QBfz3fXs/s1600-h/ZZ148D86FC.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/ReGvzuF-31I/AAAAAAAAAEo/7z0QBfz3fXs/s400/ZZ148D86FC.jpg" alt="" id="BLOGGER_PHOTO_ID_5035499161458237266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The leaf floats to the ground and follows a little girl riding her tricycle along a sidewalk.  She gets stuck in Mr. Nebbercracker's lawn.   The old man emerges from the house and (in the movie's first line of dialogue) screams "Get off my lawn!"  Then he confiscates her tricycle.  This, it seems, is a man in love with what he owns.&lt;br /&gt;&lt;br /&gt;Later, the male protagonists DJ and Chowder lose a basketball on Nebbercracker's lawn, and we get this startling shot exposing the underbelly of the property (the ball is center and the boys are to left).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/ReGtSeF-30I/AAAAAAAAAEg/pfLcr4vXtj4/s1600-h/ZZ7982B276.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/ReGtSeF-30I/AAAAAAAAAEg/pfLcr4vXtj4/s400/ZZ7982B276.jpg" alt="" id="BLOGGER_PHOTO_ID_5035496391204331330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The view of the pipeworks below ground sets up something that the house does later, so it's not gratuitous.  Nebbercracker comes out of the house again and, after shouting at DJ, has a heart attack and apparantly dies.  That night DJ becomes convinced that Nebbercracker is seeking revenge from beyond the grave.  He calls Chower and arranges to meet him at the nearby housing development where we saw the crane in the opening shot.   The sign outside the development cheekily boasts "Mayville Luxury Towers ... Coming Soon ... We've Drained the Lake!"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/ReG2mOF-32I/AAAAAAAAAEw/UremNtsBpJo/s1600-h/ZZ6FA309D1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/ReG2mOF-32I/AAAAAAAAAEw/UremNtsBpJo/s400/ZZ6FA309D1.jpg" alt="" id="BLOGGER_PHOTO_ID_5035506626111397730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The kids decide on a scheme to destroy the house, which they now believe is possessed by the soul of Nebbercracker, but they're stopped by the local police, who "arrest" the kids.  "We're supercops," says the rookie, feeling emboldened by the arrest.  The old-timer responds, his head down: "Yeah, that's why I live in a condo."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/ReG6TOF-33I/AAAAAAAAAE4/UJLK1Lp7NnM/s1600-h/ZZ1E1CBA7D.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/ReG6TOF-33I/AAAAAAAAAE4/UJLK1Lp7NnM/s400/ZZ1E1CBA7D.jpg" alt="" id="BLOGGER_PHOTO_ID_5035510697740394354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;In a sense the dual aspect of the movie (it's one thing for kids and another for adults) derives from a play on the word &lt;span style="font-style: italic;"&gt;possession&lt;/span&gt;.  For kids, it's a scary and funny coming-of-age movie about a house that's possessed by the soul of a human being.  For adults, it's a tale about being controlled by your possessions. However you watch it, it's a damn fine film.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-6090031330281800542?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/6090031330281800542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=6090031330281800542' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6090031330281800542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/6090031330281800542'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/02/monster-house-has-something-for-all.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IsE9c9rP_4/ReGvzuF-31I/AAAAAAAAAEo/7z0QBfz3fXs/s72-c/ZZ148D86FC.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1584110040944781460</id><published>2007-02-18T20:32:00.000-07:00</published><updated>2008-12-10T23:13:03.867-07:00</updated><title type='text'></title><content type='html'>Sometimes at basketball games the spectators are more interesting than the players.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RdkagvBRe2I/AAAAAAAAAEA/KlXVIJkGzkU/s1600-h/DSC_0089.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RdkagvBRe2I/AAAAAAAAAEA/KlXVIJkGzkU/s400/DSC_0089.JPG" alt="" id="BLOGGER_PHOTO_ID_5033083208243182434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RdkahPBRe3I/AAAAAAAAAEI/Cbq9MF93jy8/s1600-h/DSC_0249.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RdkahPBRe3I/AAAAAAAAAEI/Cbq9MF93jy8/s400/DSC_0249.JPG" alt="" id="BLOGGER_PHOTO_ID_5033083216833117042" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1584110040944781460?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1584110040944781460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1584110040944781460' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1584110040944781460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1584110040944781460'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/02/sometimes-at-basketball-games.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IsE9c9rP_4/RdkagvBRe2I/AAAAAAAAAEA/KlXVIJkGzkU/s72-c/DSC_0089.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-612007352813790634</id><published>2007-02-13T19:02:00.000-07:00</published><updated>2008-12-10T23:13:04.050-07:00</updated><title type='text'></title><content type='html'>A frame from Truffaut's &lt;a href="http://www.imdb.com/title/tt0065651/"&gt;Bed and Board&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RdJui9qG2EI/AAAAAAAAAD0/SM4buzUGjVI/s1600-h/ZZ391E5D5D.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RdJui9qG2EI/AAAAAAAAAD0/SM4buzUGjVI/s400/ZZ391E5D5D.jpg" alt="" id="BLOGGER_PHOTO_ID_5031205280672045122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It pretty much sums up the way I feel about his films.  Their gentleness and unsentimental simplicity stupefies me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-612007352813790634?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/612007352813790634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=612007352813790634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/612007352813790634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/612007352813790634'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/02/frame-from-truffauts-bed-and-board.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IsE9c9rP_4/RdJui9qG2EI/AAAAAAAAAD0/SM4buzUGjVI/s72-c/ZZ391E5D5D.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-533673124413971741</id><published>2007-02-10T09:45:00.000-07:00</published><updated>2007-02-08T06:34:19.121-07:00</updated><title type='text'></title><content type='html'>My friend Wendy edits for an online zine called &lt;a href="http://www.mentalcontagion.com/"&gt;Mental Contagion&lt;/a&gt;.  Last fall she asked me to write a short story for it.  After a few false starts, I finished &lt;a href="http://www.mentalcontagion.com/issue0612/purehash.html"&gt;it&lt;/a&gt; in time for the December issue.  It helps to have a deadline.  Don't be fooled by the title.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-533673124413971741?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/533673124413971741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=533673124413971741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/533673124413971741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/533673124413971741'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/02/my-friend-wendy-edits-for-online-zine.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8008036384812362394</id><published>2007-01-21T10:14:00.000-07:00</published><updated>2008-12-10T23:13:06.106-07:00</updated><title type='text'></title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;The first movie Alan Arkin directed was &lt;a href="http://www.imdb.com/title/tt0067350/"&gt;&lt;span style="font-style: italic;"&gt;Little Murders&lt;/span&gt;&lt;/a&gt;.  It's based on a play, so it's somewhat talkie, but the dialogue itself is very entertaining. Take this scene in which Alfred, a nihilist, meets the family of Patsy, his optimistic girlfriend.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;MRS. NEWQUIST:&lt;br /&gt;&lt;br /&gt;Exactly what sort of work do you do?&lt;/div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOi940QO-I/AAAAAAAAACQ/-vO0kC-vHeE/s1600-h/ZZ1B16961C.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOi940QO-I/AAAAAAAAACQ/-vO0kC-vHeE/s400/ZZ1B16961C.jpg" alt="" id="BLOGGER_PHOTO_ID_5022537193555508194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ALFRED&lt;br /&gt;&lt;br /&gt;Oh, it's very complicated.  You don't really want to know.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RbOkfY0QO_I/AAAAAAAAACY/W87APTuqogA/s1600-h/ZZ4659AE2B.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RbOkfY0QO_I/AAAAAAAAACY/W87APTuqogA/s400/ZZ4659AE2B.jpg" alt="" id="BLOGGER_PHOTO_ID_5022538868592753650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;PATSY&lt;br /&gt;&lt;br /&gt;You may as well....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RbOk7Y0QPAI/AAAAAAAAACg/AyZiKd2j98Q/s1600-h/ZZ71109B9F.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RbOk7Y0QPAI/AAAAAAAAACg/AyZiKd2j98Q/s400/ZZ71109B9F.jpg" alt="" id="BLOGGER_PHOTO_ID_5022539349629090818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ALFRED&lt;br /&gt;&lt;br /&gt;Well, I began as a commercial photographer.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PATSY&lt;br /&gt;&lt;br /&gt;He began as a painter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ALFRED&lt;br /&gt;&lt;br /&gt;Oh, I was a bad painter.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PATSY&lt;br /&gt;&lt;br /&gt;Says you!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MR. NEWQUIST&lt;br /&gt;&lt;br /&gt;Jesus Christ, would you let the boy finish?  (&lt;span style="font-style: italic;"&gt;Looking at his wife.&lt;/span&gt;)  Well?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RbOlUY0QPBI/AAAAAAAAACo/vaqK9gf-7K8/s1600-h/ZZ4DCB5A63.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RbOlUY0QPBI/AAAAAAAAACo/vaqK9gf-7K8/s400/ZZ4DCB5A63.jpg" alt="" id="BLOGGER_PHOTO_ID_5022539779125820434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;ALFRED&lt;br /&gt;&lt;br /&gt;I began as a commercial photographer and was doing sort of well at it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PATSY&lt;br /&gt;&lt;br /&gt;Sort of well?  You should see his portfolio.  He has work in Holiday, Esquire, The New Yorker, Vogue...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MR. NEWQUIST&lt;br /&gt;&lt;br /&gt;Vogue?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;KENNY NEWQUIST (&lt;span style="font-style: italic;"&gt;with mock excitement&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Woo! Woo!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOls40QPCI/AAAAAAAAACw/5rLbiJXeJac/s1600-h/ZZ7E4DD3F5.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOls40QPCI/AAAAAAAAACw/5rLbiJXeJac/s400/ZZ7E4DD3F5.jpg" alt="" id="BLOGGER_PHOTO_ID_5022540200032615458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ALFRED&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;It's an overrated business.  But after a couple of years of doing sort of well at it, things began to go wrong.  I began losing my people.  Somehow I got my heads chopped off.  Or out of focus.  Or terrible expressions on my models.  I'd have them examining a client's product like this.&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RbOiJI0QO9I/AAAAAAAAACI/P0FX59ZpBFw/s1600-h/ZZ18975454.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RbOiJI0QO9I/AAAAAAAAACI/P0FX59ZpBFw/s400/ZZ18975454.jpg" alt="" id="BLOGGER_PHOTO_ID_5022536287317408722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;Like that.  A face would be really ... The agencies began to wonder if I didn't have some editorial motive in mind.&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Suddenly the apartment shakes from a small earthquake, as though expressing the anger that the Gods of Advertising harbored against Albert.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ALBERT (cont.)&lt;br /&gt;&lt;br /&gt;Which was not true, but once they planted the idea.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The lights in the apartment go out.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;MRS. NEWQUIET&lt;br /&gt;&lt;br /&gt;Oh, I didn't mean to interrupt, dear.   How far better it is to strike a match than curse the darkness -- my mother always told us that ... Go on, dear.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOtA40QPFI/AAAAAAAAADI/SDz6aQbs1Lo/s1600-h/ZZ597583F3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOtA40QPFI/AAAAAAAAADI/SDz6aQbs1Lo/s400/ZZ597583F3.jpg" alt="" id="BLOGGER_PHOTO_ID_5022548240211393618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ALBERT&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;Well, my career suffered but there was nothing I could do about it.  You see, the harder I tried to straighten out, the fuzzier my people got, and the &lt;span style="font-style: italic;"&gt;clearer&lt;/span&gt; my objects.  Soon my people disappeared entirely.  They just somehow never came out.  But the &lt;span style="font-style: italic;"&gt;objects&lt;/span&gt; I was shooting ...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RbOqNo0QPDI/AAAAAAAAAC4/BAkNnYTUfgk/s1600-h/ZZ1CFBB6F3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RbOqNo0QPDI/AAAAAAAAAC4/BAkNnYTUfgk/s400/ZZ1CFBB6F3.jpg" alt="" id="BLOGGER_PHOTO_ID_5022545160719842354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;... brilliantly clear.  So I began to do a lot of catalog work.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The lights come on again.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;ALBERT (cont.)&lt;br /&gt;&lt;br /&gt;Pictures of medical instruments -- things like that.  It was boring but it kept me alive.  (Takes a deep breath.)  I suppose the real break came with the SEM show.  They had me shoot thirty of their new models.  They hired a gallery and put on a computer show.  One hundred and twenty color pictures of computers!  It got some very strange notices, the upshot of which was that the advertising business went &lt;span style="font-style: italic;"&gt;thing&lt;/span&gt; crazy and I became commercial again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MRS. NEWQUIST&lt;br /&gt;&lt;br /&gt;You must be extremely talented.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ALBERT&lt;br /&gt;&lt;br /&gt;I got sick of it.  &lt;span style="font-style: italic;"&gt;Where the hell are standards?&lt;/span&gt;  That's what I kept asking myself.  I mean those people will take anything.  Hell, if I give them a picture of shit, they'll probably give me an award for it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MRS. NEWQUIST&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Language&lt;/span&gt;, young man.&lt;br /&gt;&lt;br /&gt;ALBERT&lt;br /&gt;&lt;br /&gt;So that's what I do now.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Silence.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MR. NEWQUIST&lt;br /&gt;&lt;br /&gt;What?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ALBERT&lt;br /&gt;&lt;br /&gt;Take pictures of shit.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RbOsKo0QPEI/AAAAAAAAADA/RCy5gegWiXc/s1600-h/ZZ354727AC.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RbOsKo0QPEI/AAAAAAAAADA/RCy5gegWiXc/s400/ZZ354727AC.jpg" alt="" id="BLOGGER_PHOTO_ID_5022547308203490370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8008036384812362394?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8008036384812362394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8008036384812362394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8008036384812362394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8008036384812362394'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/01/first-movie-alan-arkin-directed-was.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IsE9c9rP_4/RbOi940QO-I/AAAAAAAAACQ/-vO0kC-vHeE/s72-c/ZZ1B16961C.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-4296121937697337895</id><published>2007-01-07T12:19:00.000-07:00</published><updated>2008-12-10T23:13:06.235-07:00</updated><title type='text'></title><content type='html'>Ah, the Presidential Inauguration of 2001; I remember it well.  It  was a new beginning for a nation.  The Mall hummed with hope and good cheer.  So much potential!  So many possibilities!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RaFH-g-NxlI/AAAAAAAAAB8/uS6939JDIVU/s1600-h/monkey.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RaFH-g-NxlI/AAAAAAAAAB8/uS6939JDIVU/s400/monkey.jpg" alt="" id="BLOGGER_PHOTO_ID_5017370599195788882" border="0" /&gt;&lt;/a&gt;If only George W. Bush had the vision and courage at the time to give the following speech:&lt;br /&gt;&lt;blockquote&gt;My fellow Americans, the United States of America is and has always been the land of opportunity.  From all over the world, immigrants come to America full of hope, looking forward to a future that exists in their hearts, a future that America will allow them to create with the determination of their hands and the ingenuity of their minds.  The people of our beloved country were blessed with that opportunity at the birth of this great nation, thanks to the wisdom of our founding fathers and the Grace of our Lord.  It is my wish that we will continue to enjoy this opportunity.  Therefore, I will not take the Oath of the Office of the President of the United States of America.  I'm just not cut out for it.  I was thinking, maybe I'll shoot  for Baseball Commissioner instead.  Thank you and God bless America.&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-4296121937697337895?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/4296121937697337895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=4296121937697337895' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4296121937697337895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4296121937697337895'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/01/ah-presidential-inauguration-of-2001-i.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IsE9c9rP_4/RaFH-g-NxlI/AAAAAAAAAB8/uS6939JDIVU/s72-c/monkey.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-4852720100722902725</id><published>2007-01-01T08:56:00.000-07:00</published><updated>2008-12-10T23:13:07.498-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><category scheme='http://www.blogger.com/atom/ns#' term='christmas'/><title type='text'></title><content type='html'>There were different things about Christmas this year.  It was Mom and Bob's first Christmas in their new house in Loveland.  And for the first time I met Heather, my first step sister (first sister of &lt;span style="font-style: italic;"&gt;any&lt;/span&gt; kind, actually, and who happens to have wicked Scattergories kung fu, so watch out), and her daughter Katie.   Without further ado, the photos....&lt;br /&gt;&lt;br /&gt;The cute and imaginative Katie looking adorable in front of the tree.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkvrqSqqVI/AAAAAAAAABA/nHL2wDy5dOQ/s1600-h/DSC_0149.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkvrqSqqVI/AAAAAAAAABA/nHL2wDy5dOQ/s400/DSC_0149.jpg" alt="" id="BLOGGER_PHOTO_ID_5015092087187220818" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Looking even adorabler.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RZkwHKSqqWI/AAAAAAAAABI/GkdTobKcjdI/s1600-h/DSC_0152.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RZkwHKSqqWI/AAAAAAAAABI/GkdTobKcjdI/s400/DSC_0152.jpg" alt="" id="BLOGGER_PHOTO_ID_5015092559633623394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With her excellent mom, Heather.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkwdqSqqXI/AAAAAAAAABQ/gYFpxyCNcVU/s1600-h/DSC_0155.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkwdqSqqXI/AAAAAAAAABQ/gYFpxyCNcVU/s400/DSC_0155.jpg" alt="" id="BLOGGER_PHOTO_ID_5015092946180680050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Peeking!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkxAqSqqYI/AAAAAAAAABY/V2V75mXVnNY/s1600-h/DSC_0157.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkxAqSqqYI/AAAAAAAAABY/V2V75mXVnNY/s400/DSC_0157.jpg" alt="" id="BLOGGER_PHOTO_ID_5015093547476101506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And all of the above plus Mom and Bob.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RZkxaaSqqZI/AAAAAAAAABg/s6w--tjFn2k/s1600-h/DSC_0171.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RZkxaaSqqZI/AAAAAAAAABg/s6w--tjFn2k/s400/DSC_0171.jpg" alt="" id="BLOGGER_PHOTO_ID_5015093989857733010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy New Year, everybody!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-4852720100722902725?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/4852720100722902725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=4852720100722902725' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4852720100722902725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/4852720100722902725'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2007/01/there-was-different-things-about.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4IsE9c9rP_4/RZkvrqSqqVI/AAAAAAAAABA/nHL2wDy5dOQ/s72-c/DSC_0149.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-3643788228098554251</id><published>2006-12-31T15:52:00.000-07:00</published><updated>2008-12-10T23:13:07.728-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RZkoL6SqqUI/AAAAAAAAAA0/Km7i7EGLZM0/s1600-h/montage.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RZkoL6SqqUI/AAAAAAAAAA0/Km7i7EGLZM0/s400/montage.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5015083845144979778" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-3643788228098554251?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/3643788228098554251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=3643788228098554251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3643788228098554251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/3643788228098554251'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/blog-post_8873.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IsE9c9rP_4/RZkoL6SqqUI/AAAAAAAAAA0/Km7i7EGLZM0/s72-c/montage.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-1157928244670682301</id><published>2006-12-31T15:50:00.000-07:00</published><updated>2008-12-10T23:13:07.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_4IsE9c9rP_4/RZg--KSqqSI/AAAAAAAAAAc/ZYCtfLVrK9w/s1600-h/DSC_0204.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_4IsE9c9rP_4/RZg--KSqqSI/AAAAAAAAAAc/ZYCtfLVrK9w/s400/DSC_0204.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5014827422712506658" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-1157928244670682301?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/1157928244670682301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=1157928244670682301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1157928244670682301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/1157928244670682301'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/blog-post_31.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4IsE9c9rP_4/RZg--KSqqSI/AAAAAAAAAAc/ZYCtfLVrK9w/s72-c/DSC_0204.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8383782386806898251</id><published>2006-12-21T18:55:00.000-07:00</published><updated>2008-12-10T23:13:08.128-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'></title><content type='html'>The crew just finished clearing the snow from the parking lot with a Bobcat.  They worked all day, some with shovels.  Last night the air filled with flakes.  Tonight it's fog.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RYs79Dqh9pI/AAAAAAAAABI/yI-e6rppqw0/s1600-h/DSC_0137.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RYs79Dqh9pI/AAAAAAAAABI/yI-e6rppqw0/s400/DSC_0137.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5011164930521560722" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8383782386806898251?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8383782386806898251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8383782386806898251' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8383782386806898251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8383782386806898251'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/crew-just-finished-clearing-snow-from.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4IsE9c9rP_4/RYs79Dqh9pI/AAAAAAAAABI/yI-e6rppqw0/s72-c/DSC_0137.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-8872164413651204970</id><published>2006-12-21T07:53:00.000-07:00</published><updated>2008-12-10T23:13:10.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'></title><content type='html'>We've had two or so feet of snow around Denver since Wednesday morning.  I took these last night right before going to sleep.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_4IsE9c9rP_4/RYrFYDqh9oI/AAAAAAAAAAs/JvNq8wN0XJw/s1600-h/DSC_0122.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_4IsE9c9rP_4/RYrFYDqh9oI/AAAAAAAAAAs/JvNq8wN0XJw/s400/DSC_0122.JPG" alt="" id="BLOGGER_PHOTO_ID_5011034552494323330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RYrEoTqh9lI/AAAAAAAAAAU/r1ZU7aoqm2s/s1600-h/DSC_0107.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RYrEoTqh9lI/AAAAAAAAAAU/r1ZU7aoqm2s/s400/DSC_0107.JPG" alt="" id="BLOGGER_PHOTO_ID_5011033732155569746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4IsE9c9rP_4/RYrFFjqh9nI/AAAAAAAAAAk/RALhuLMNdeQ/s1600-h/DSC_0113.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4IsE9c9rP_4/RYrFFjqh9nI/AAAAAAAAAAk/RALhuLMNdeQ/s400/DSC_0113.JPG" alt="" id="BLOGGER_PHOTO_ID_5011034234666743410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4IsE9c9rP_4/RYrE4Tqh9mI/AAAAAAAAAAc/iXUrpbLl6wI/s1600-h/DSC_0110.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4IsE9c9rP_4/RYrE4Tqh9mI/AAAAAAAAAAc/iXUrpbLl6wI/s400/DSC_0110.JPG" alt="" id="BLOGGER_PHOTO_ID_5011034007033476706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-8872164413651204970?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/8872164413651204970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=8872164413651204970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8872164413651204970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/8872164413651204970'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/weve-had-foot-or-more-snow-around.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4IsE9c9rP_4/RYrFYDqh9oI/AAAAAAAAAAs/JvNq8wN0XJw/s72-c/DSC_0122.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-116663298880152660</id><published>2006-12-20T09:41:00.000-07:00</published><updated>2007-01-01T08:07:45.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photos'/><title type='text'></title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/39109/DSC_0097.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/915967/DSC_0097.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-116663298880152660?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/116663298880152660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=116663298880152660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/116663298880152660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/116663298880152660'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/blog-post.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-116653335764883346</id><published>2006-12-19T06:00:00.000-07:00</published><updated>2006-12-19T06:02:37.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movies'/><title type='text'></title><content type='html'>As if on cue, Paul &lt;span class="post-author"&gt;Matwychuk &lt;a href="http://mgoer.blogspot.com/2006/12/unwelcome-guest.html"&gt;writes&lt;/a&gt; about Christopher Guest's antipathy.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-116653335764883346?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/116653335764883346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=116653335764883346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/116653335764883346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/116653335764883346'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/as-if-on-cue-paul-matwychuk-writes.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35269538.post-116632672875311570</id><published>2006-12-16T19:24:00.000-07:00</published><updated>2006-12-16T20:38:48.863-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='movies'/><title type='text'></title><content type='html'>&lt;span style="font-family: times new roman;"&gt;Early last January at the Hotel Donaldson in downtown Fargo, I promised to write something to convince a friend, John Lamb, of the reasonableness of the claim that the Coen brothers are sometimes unsympathetic to their on-screen subjects.  I don't know that I can present an airtight case for the claim, but I'll kick the idea around for a while and see what happens.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;I first heard the claim a few years ago at the University of Colorado, during a "Cinema Interruptus" -- a viewing of a film during which anyone in the audience can yell "stop" at any time in order to air a comment or question -- hosted by Roger Ebert.  There were five sessions. On Monday we watched Fight Club from beginning to end, no interruptions. From Thursday to Friday we watched it again, interruptions allowed, for an hour or so each day.  (Ebert's been doing this every year for a while.  The schedule for that event isn't online, but last year's &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.colorado.edu/cwa/4_CWA_ebert.pdf"&gt;is&lt;/a&gt; [PDF].)&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;Anyway, that week Ebert mentioned that some people have criticized the Coen   brothers for lacking sympathy for their characters. I think he said it during   the scene in which The Narrator, Edward Norton's character, beats the blond   character to a bloody pulp and justified it with, "I wanted to destroy   something beautiful." Ebert elaborated on his statement for a moment, no one had anything to say in response, and so he pressed play on the DVD player and Fight Club resumed.  I don't remember his elaboration, but I remember finding it convincing and I was foolish enough to pass on the idea to John, who immediately attacked it with the simple rejoinder: Tom Reagan (Gabriel Byrne) in &lt;span style="font-style: italic;"&gt;Miller's   Crossing&lt;/span&gt;.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;In the world of Miller's Crossing, Tom is real, no doubt about it.  On the surface, he's as cold as ice, a man seemingly without a heart, an idea that is repeated in his separate conversations with Verna Bernbaum (Marcia Gay Harden) and her brother Bernie (John Turturro).  The &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://blogs.suntimes.com/scanners/2006/06/opening_shots_millers_crossing.html" title="opening shot"&gt;opening shot&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt; of the movie even makes this point.  The counterpoint is that he refuses to kill even a rat like Bernie.  Bernie plays his virtue into a weakness, and Tom turns Bernie's play into an advantage in the magnificent game he plays in order to save Leo (Albert Finney), the man he seemingly betrays, from himself. A man does what he has to survive, but what he does to survive is, as Johnny Caspar (Jon Polito) says in the opening scene, "a question of ethics."  Tom's dream about watching the wind take his hat away illustrates the sacrifice that he makes for Leo. Initially we're led to believe that the dream has something to do with what happens at Miller's Crossing.  At the end we can see that the hat has something to do with Leo. Tom was doubly-bound. He was bound by loyalty to help Leo, and his own notion of manhood bound him to not try to hold onto him even after helping him, because "there's nothing more pathetic than a man chasing his hat."  On the other hand, the deliberate and obvious downward push of the camera in the closing shot emphasizes the knowing look that Tom gives from under the brim of his hat.  Perhaps Tom's nightmare about his hat didn't come true after all.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;What the Coen brothers did with &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;Miller's Crossing&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; has the weight of   Coppola's&lt;/span&gt;&lt;i style="font-family: times new roman;"&gt; Godfather&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt;, but where Coppola made a gorgeous movie about family as a metaphor for capitalism in America (to verify, see &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;The Kid Stays in the Picture&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt;)), the Coens made a gorgeous movie about loyalty,   ethics, and a man with a hat.  A token of the excellence of the movie is the fact that the meaning of the title is overloaded: while &lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;Miller's   Crossing&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; is the place where Tom Reagan is supposed to kill Bernie, it   also alludes to Tom's deliberate double-crossing of Johnny Caspar and to the   ideas at the heart of the film.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;Having said that, I think that what Ebert said about the Coens should not be taken to mean that they are incapable of creating believable, complex characters.  Rather, it should be taken to mean that aspects of the films of the Coen brothers betray a certain &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://en.wikipedia.org/wiki/Schadenfreude" title="schadenfreude"&gt;&lt;i&gt;schadenfreude&lt;/i&gt;&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;Kirkegaard objected to &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;schadenfreude&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; on the grounds that, in his estimation, it presupposes the incorrect metaphysical assumption that subject (laugher or audience) and object (laughee or character) are distinct.  If you consider film to be the medium that most closely resembles human consciousness, then choices of lighting, camera placement, composition, sound, and editing are equivalent to aspects of consciousness (e.g. sense perception, feeling, memory, and so on).  Film being a collective effort, the minds that make these choices are often distributed rather than centralized.  However, there are &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://en.wikipedia.org/wiki/Auteur" title="certain directors"&gt;certain directors&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt; whose discipline and aesthetic sense are strong enough to leave a signature on their films.  The Coen brothers are among them.  It makes sense to say that the Coen brothers are &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;an auteur&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; (singular, not plural) in so far as they share the same filmic vision.  People who've worked with them say that it doesn't matter which one of them you ask, you'll get the same answer either way.  As for discipline, like Hitchcock, the Coen brothers &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.davidbordwell.net/blog/?p=91" title="shoot cut-to-cut"&gt;shoot cut-to-cut&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;, storyboarding every scene in advance and sticking to them.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;Something that is, at most, evidence of this metaphysical sense of distance in Coen movies or, at least, allows the distance to exist in the first place is the self-conscious indebtedness of their films to early cinema.  Many of their stories and characters are lifted directly from stories and characters from movies of the 30s and 40s, especially film noir.  &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;The Big Lebowski&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; is based on Raymond Chandler's &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;The Big Sleep&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt;.  &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;The Hudsucker Proxy&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; is an homage to Frank Capra.  There are riffs on the classics, too.  &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;Blood Simple&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; plays on the two-men-and-a-woman convention of &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;Double Indemnity&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; and &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Postman Always Rings Twice&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;, but Abby (Frances McDormand) is less of a &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;femme fatale&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; and more of a horror flick survivor, like Jaime Lee Curtis's character in &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Halloween&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;.  The &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;femme fatale&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; character appears in disguise in &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Man Who Wasn't There&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; -- another stab at the &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Double Indemnity&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; and  &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Postman Always Rings Twice&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; -- in the form of the homosexual man seeking venture capital funding for his dry cleaning enterprise.  The relationship between Ed Crane (Billy Bob Thornton) and Birdy Abundas (Scarlett Johansson) is obviously taken from &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Double Indemnity&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;, with attempted fellatio and a car accident thrown in for fun.  Another aspect of this indebtedness is the way characters are dressed up in stylistic accessories from the art of the past: the rapid-fire speech of&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Barton Fink&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; and &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Hudsucker Proxy&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;; the precious (although lovely) use of the Chandleresque phrase "on account of" twice in &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Man Who Wasn't There&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;; the hyperbolic characterization of the wide-eyed Norville Barnes in &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Hudsucker Proxy.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;Some Coen characters, such as Tom Reagan, feel real.  Others, however, feel like artifacts -- entertaining artifacts, well-executed artifacts, but artifacts nonetheless -- from the Golden Age of Hollywood.&lt;br /&gt;&lt;br /&gt;Moving on to something funner: violence.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;  Consider this passage about &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;The Rock&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; (not a Coen movie) from Eric Lichtenfeld's &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://www.amazon.com/Action-Speaks-Louder-Violence-Spectacle/dp/0275980545" title="Action Speaks Louder"&gt;Action Speaks Louder&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: times new roman;"&gt;Stylistically, the scene is mostly just overwrought; that is, except for one bit of business that is so nasty, it is outright soulless. One of Hummel's men throws a guard out of a guard tower window. After the toss, [director Michael] Bay and [editor Richard] Francis-Bruce double-cut the impact; that is, they cut to two -- two -- close-ups of the guard's face as he strikes the rain-lashed asphalt, amid shards of glass. Certainly, there have been action films as violent as &lt;i&gt;The Rock&lt;/i&gt;, but what makes this act so wanton is that it happens not to a character the audience has grown to love or hate, but to one who is inconsequential. We can find an action film's conscience, or lack thereof, in how it treats its noncombatants, because here is how the filmmakers choose to present life and death as an abstract, or pure value -- that is, as a value uncomplicated by the story. For instance, the last act of &lt;i&gt;Lethal Weapon&lt;/i&gt; surges with violence -- violence at a crowded nightclub and on crowded city streets. But only the police and the villains sustain serious damage. &lt;/blockquote&gt;&lt;span style="font-family: times new roman;"&gt;Lichtenfeld argues that portrayals of violence against certain subjects, such   as innocent bystanders, are unconscionable in action films.  Another   example of this kind of violence occurs in   &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Pulp Fiction&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;, where a noncombatant is   wounded in the intersection shootout between Butch Coolidge (Bruce Willis) and   Marsellus Wallace (Ving Rhames).  Early in the passage, by emphasizing   the quality of shot (close-up) and their quantity (two), he implies that the   manner of the portrayal is relevant as well.  When talking about   &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;schadenfreude&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; in Coen brothers movies,   then, a relevant  question is &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;who suffers   and how do they suffer?&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;With that in mind, let's look at some instances   of fatal violence in Coen brothers movies.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;   An event that I'll call the Ridiculous Death occurs in at least three of their   movies. In the Ridiculous Death, a character's demise is drawn out for comic   effect. Take the famous "Danny Boy" scene in &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;Miller's Crossing&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt;. Two   goons armed with Tommy guns attempt to hit Leo in his house. Leo shoots and   kills one of the goons with a revolver. He escapes, along with the dead goon's   Tommy, by sliding down the roof to the yard. From Leo's point of view on the   ground, we see the second goon appear in the window. Leo pulls the trigger on   the Tommy and holds it, spewing fire and bullets into the back of the second   goon. The goon's body bounces and twists. While Leo holds the trigger of his   gun consciously, the goon does so out of reflex. His body is being demolished,   so his hands clench, causing the Tommy to fire. Where a puppet master uses   strings or wires, here the Coen brothers use bullets. As his body spasms, his   Tommy gun becomes a loose cannon, shooting a trail of bullets up a wall, along   a painting, around a chandelier, and even through both of his feet.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/609309/Goon%20with%20Thompson%201.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/755805/Goon%20with%20Thompson%201.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/274184/Goon%20with%20Thompson%202.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/275799/Goon%20with%20Thompson%202.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/796752/Goon%20with%20Thompson%203.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/894168/Goon%20with%20Thompson%203.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;Obviously, the death of the goon in the window &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;is&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; complicated by the   story. By virtue of his particular embroilment, the goon is not exempt, in   Lichtenfeld's formula, from being an appropriate subject for a portrayal of   violence. He tried to kill Leo; in turn, Leo kills him. He's fair game.   However, the amount of time spent on the shooting of just that goon (twenty   seconds, forever in movie time) and the detail that went in the sequence (i.e.   the painting, the chandelier, and the shoes)   &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;are&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; completely out of proportion to the   significance of the character.  Draw your own conclusion.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;Another death in &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;Miller's Crossing&lt;/i&gt;&lt;span style="font-family: times new roman;"&gt; that I think is important is Eddie   Dane's (J.E. Freeman). Here Johnny Caspar executes "the Dane" in his study.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/950389/The%20Dane%27s%20Brains%201.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/95319/The%20Dane%27s%20Brains%201.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/470535/The%20Dane%27s%20Brains%202.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/596291/The%20Dane%27s%20Brains%202.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;I wouldn't say that this shot is characteristic of the shootings in &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Miller's Crossing&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;.  There are several shots in which the Coen brothers cut away from the victim before or as the trigger is pulled, sparing the audience the sort of gruesomeness on display here.  Moreover, the Dane is a villain who hounds Tom during the whole movie, so the level of gore at the end of the movie is appropriate.  What is important to me about this shot is the position of the Dane's body, which reminds me of the Ridiculous Deaths of characters in two other Coen brothers movies.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: times new roman;"&gt;In &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Blood   Simple&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;,  Ray (John Getz) finds Marty (Dan Hedaya) with a bullet in   his chest along with the weapon, a gun that belongs to Abby, Ray's lover and   Marty's wife.  Thinking that Abby shot Marty, and wanting to protect   Abby, Ray takes Marty's body to a field to bury him.  Here we see Marty,   barely alive, try to escape.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/325552/Blood%20Simple.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/596415/Blood%20Simple.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;The scene is particularly disturbing.  Marty can barely drag himself along the road.  His chest is covered with blood.  He's almost dead.  Ray gets in the car to run him over and decides against it.  He gets a shovel out  of the car and walks over to Marty, thinking he'll smash his head with it.  He decides against that, too.  Ultimately, Ray chooses to bury Marty alive.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;In &lt;/span&gt;&lt;i style="font-family: times new roman;"&gt;The Man Who Wasn't There, &lt;/i&gt;&lt;span style="font-family: times new roman;"&gt;Big Dave Brewster (James Gandolfini) enacts another Ridiculous Death.  Here we see his last moments alive.  He is sinking into unconsciousness and death after Ed Crane severed his jugular vein with a small knife during a struggle.  We hear him gurgling, presumably choking on his own blood, as he goes down.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: times new roman;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/129/1022/1600/149727/The%20Man%20Who%20Wasn%27t%20There.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/129/1022/400/296120/The%20Man%20Who%20Wasn%27t%20There.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;The Ridiculous Death: face-down, ass-up, going to the grave like a dog.&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;There are critics who see the cruelty here, although their emphasis is different than what I've talked about so far.  Jane Dark &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://janedark.com/2006/11/borat.html" title="calls"&gt;calls&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt; a subset of the Coen brothers' movies a '"let's mock the rubes" cycle.' Jim Emerson &lt;/span&gt;&lt;a style="font-family: times new roman;" href="http://blogs.suntimes.com/scanners/2006/11/why_the_hell_its_funny_or_not.html%20" title="recognizes"&gt;recognizes&lt;/a&gt;&lt;span style="font-family: times new roman;"&gt; that there's a bit &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;shadenfruede&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; at work in the Coen movies.  Here he's addressing complaints by Christopher Hitchens and David Brooks about the sensibilities of &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;Borat&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt; Both Hitchens and Brooks appear to have thought "Borat" was funny, but don't feel comfortable with that feeling. Laughing appears to have been a sin that requires some sort of confession. I have a feeling they would say the same things about Christopher Guest or Coen Bros. movies -- that they are about mocking, ridiculing, tearing down the characters so that the audience can feel superior. It does not seem to have occurred to either of them that it might be possible to laugh at -- even mock -- someone, while still feeling sympathy or even empathy. And that such feelings, as opposed to sheer derision, make the comedy even funnier.&lt;/blockquote&gt;&lt;span style="font-family: times new roman;"&gt;Going back to Kirkegaard, Emerson's argument implies that &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;shadenfreude&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; does not necessarily presume a metaphysical error.  That is, &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;contra&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; Kirkegaard, &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;shadenfreude&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; can coexist with a unicity in which self and other are metaphysically one and the same.  Watching someone else suffer, we identify with them &lt;/span&gt;&lt;span style="font-style: italic; font-family: times new roman;"&gt;and&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt; we laugh.  This is possible because -- just like a person can laugh at their own pain when it has passed -- there's an ontological distance between us and, say, the mosquito bites on Barton Fink's face.  The laughter is the same, the type of distance different.&lt;br /&gt;&lt;br /&gt;Before I wrote this, I watched (again) all of the movies I cite.  That process made me realize just how good the Coen brothers are.  I used to love their movies, but watching them again after studying the art/craft of filmmaking for a year or so, some of them are absolutely breathtaking to me now.  I'm still convinced of a particular lack of sympathy in the Coen brothers' body of work.  &lt;span style="font-style: italic;"&gt;Shadenfreude&lt;/span&gt; sums that up for me.  Emerson's view of that, however, shows that there's more than one way to interpret the phenomenon of &lt;span style="font-style: italic;"&gt;shadenfreude&lt;/span&gt; in their movies.  Maybe I'll have more to say, or less, in the future; for now, &lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;I'm content.&lt;br /&gt;&lt;br /&gt;John?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: times new roman;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote style="font-family: times new roman;"&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35269538-116632672875311570?l=hexencodings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hexencodings.blogspot.com/feeds/116632672875311570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35269538&amp;postID=116632672875311570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/116632672875311570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35269538/posts/default/116632672875311570'/><link rel='alternate' type='text/html' href='http://hexencodings.blogspot.com/2006/12/early-last-january-at-hotel-donaldson_16.html' title=''/><author><name>ndronen</name><uri>http://www.blogger.com/profile/00041745378317892827</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://bp1.blogger.com/_4IsE9c9rP_4/SDrdZ87CyaI/AAAAAAAAAIA/LoktPyt_jSA/S220/DSC_0249-big.JPG'/></author><thr:total>0</thr:total></entry></feed>
