<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Thinking Inside a Different Box</title>
  <link>http://air-richter.livejournal.com/</link>
  <description>Thinking Inside a Different Box - LiveJournal.com</description>
  <lastBuildDate>Wed, 02 Jan 2008 18:32:12 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>air_richter</lj:journal>
  <lj:journalid>1646376</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/9522267/1646376</url>
    <title>Thinking Inside a Different Box</title>
    <link>http://air-richter.livejournal.com/</link>
    <width>80</width>
    <height>80</height>
  </image>

<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/70109.html</guid>
  <pubDate>Wed, 02 Jan 2008 18:32:12 GMT</pubDate>
  <title>Hockey Wuss</title>
  <link>http://air-richter.livejournal.com/70109.html</link>
  <description>&lt;div style=&quot;background-color: #fff0e4; border: 1px solid orange; padding: 6px;&quot;&gt;At one point during the game, Buffalo defenseman Henrik Tallinder appeared to stumble over a hole in the ice. Luckily, he didn&apos;t hurt himself, but what if he had? And with all due respect to Tallinder, what if Crosby had fallen in a hole or been blinded by snow and crashed into Georges Laraque or some other inanimate object?&lt;/div&gt;&lt;br /&gt;There was an outdoor hockey game in Buffalo, and this is one of the quotes from Mr. Burnside, an ESPN NHL &apos;Analyst&apos;, arguing against making outdoor hockey games a regular event.  I&apos;m pretty well convinced that word &apos;analyst&apos;, to ESPN, means &quot;someone who knows how to sensationalize everyday events&quot;.  In any case, he wrote that above; and it made me think (which is ironic, seeing how he obviously wasn&apos;t when he wrote it).&lt;br /&gt;&lt;br /&gt;And this is what I think: What the hell?  I mean... seriously.  Hockey players are supposed to be touted as the toughest blokes in uniform.  They pride themselves on being &lt;em&gt;much tougher&lt;/em&gt; than American football players.  Proof?  Despite moving at near twice the speed of a sprinting human, and having quite &lt;em&gt;solid&lt;/em&gt; walls to be rammed into, and having a &lt;em&gt;rock-hard&lt;/em&gt; surface to fall onto, hockey players still refuse to wear anything more than basic padding, and only recently started requiring helmets, and &lt;em&gt;still&lt;/em&gt; insist on wearing helmets that hardly even cover their head.  How many times have I seen a hockey player&apos;s helmet fall off as his head is driven into the ice?  Oh, a few dozen now.  And I only watch the highlights!  And Burnside brings up the argument of &lt;em&gt;stumbling&lt;/em&gt; as some tragic event that, he implies, might be unforgivable?&lt;br /&gt;&lt;br /&gt;Football players play outdoors pretty regularly.  Rain, snow, even ice on occasion.  The fear of injury only comes up in the worst of conditions.  I suspect most of the actual hockey players feel about the same.  Oh sure, they might hate the fact that the conditions make them look ordinary (flopping puck, bad passes, etc), but getting hurt?  Foolish.&lt;br /&gt;&lt;br /&gt;Furthermore, it&apos;s a moot concern.  This is the first time in the US an outdoor NHL hockey game has been held.  According to reports, many of the techniques used to get the stadium ready were new ideas, never before tested.  In other words, the admins had little clue what they were doing and had set themselves up a large margin of potential error by trying to go &quot;above and beyond&quot; the methods employed by similar previous outdoor hockey games (only three ever, so far). In all likeliness, future games will be much better in the &quot;quality of ice&quot; dept anyway.&lt;br /&gt;&lt;br /&gt;... and for that matter, the three previous outdoor arenas all had better ice conditions than this one.  In other words, it&apos;s an anomaly of sorts.  In fact!  It&apos;s not exactly uncommon for ice at indoor arenas to get hacked up pretty badly.  Especially in some of these not-so-hockey towns, where they turn the heat in the arena way up, to keep from driving away potential dis-interested non-fans from showing up for corporate-sponsored beer-and-chips parties (*cough* Phoenix, AZ), the ice often ends up getting non-repairable divots, and feels like mush by the end of the 3rd Period.&lt;br /&gt;&lt;br /&gt;I&apos;ll bet a donut players enjoy playing in crappy outdoor conditions in front of an audience that cares more than they enjoy playing in crappy indoor conditions in front of an audience that can&apos;t be bothered to with the fact the players exist.&lt;br /&gt;&lt;br /&gt;So yeah, Mr. Burnside, what &lt;em&gt;if&lt;/em&gt; the guy had been injured?  You&apos;re the big fancy analyst.  You try and answer the (stupid) question.  I will!  Nothing.  Nothing would have changed.  Audiences would still love it, players would still like it, and most importantly it still generates massive revenue for the teams and the league (which even the players understand the significance of now, after the strike season and yet another round of threats of teams moving to new markets).&lt;br /&gt;&lt;br /&gt;In other news, there &lt;em&gt;is&lt;/em&gt; a single simple and good reason not to do regular outdoor hockey games:  The whole concept of a unique spectacle will be lost.  It&apos;s that simple.  You do it enough, and it loses its newsworthy effect.  Hype is only hype if you didn&apos;t hear the exact same thing yesterday. If outdoor hockey games became commonplace, people would no longer scramble to witness it, since in all fairness, many of them only went to the Buffalo game because they perceived it to be a unique event.&lt;br /&gt;&lt;br /&gt;That said, I think having one or two outdoor games a year in different cities would balance the threshold between Spectacle Event and Too Much Hype.  It would draw big crowds, high revenues, and yes the players might trip over a snow bank or two in the process.  God forbid!</description>
  <comments>http://air-richter.livejournal.com/70109.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/69715.html</guid>
  <pubDate>Sun, 02 Dec 2007 05:44:59 GMT</pubDate>
  <title>Two times the fun from the WTF?! Dept.</title>
  <link>http://air-richter.livejournal.com/69715.html</link>
  <description>&lt;strong&gt;WTF #1: &lt;a href=&quot;http://uk.movies.ign.com/articles/835/835143p1.html&quot; title=&quot;Click here to see which pathetic scrawny Hollywood dweebs pretend they&amp;#39;re highly-trained muscled out fighters.&quot;&gt;Casting Picks for the upcoming Dragonball Z Live Action Movie&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Firstly... well.. um.. &lt;strong&gt;a &lt;em&gt;LIVE-ACTION&lt;/em&gt; DBZ movie?  WTF?!&lt;/strong&gt;  And as if that alone wasn&apos;t enough to totally blow your mind, just look at the guys they&apos;ve cast for it!  These are the types of actors who got turned down for roles in shows like Scrubs and the OC, and now they&apos;re going to be cast as Goku and Piccolo?  Just how much Dawson&apos;s Creek can producers mix into the Dragonball concept?  I dunno, but I&apos;m sure we&apos;ll find out.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WTF #2: Simple tasks in .NET that people are convinced don&apos;t exist.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The most recent culprit I&apos;ve discovered:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;* Capturing the Mouse to a window or control.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Why this surely must be a cinche, so WTF?  It&apos;s a WTF-case because it &lt;em&gt;is&lt;/em&gt; a cinche!  Err, what?  That&apos;s right, it&apos;s dead-pan easy.  This is a shocker because &lt;strong&gt;as far as I can tell there&apos;s hardly a blogger or forum answer guy out there who knows how to capture the mouse properly&lt;/strong&gt; -- or, at least, none who are important enough to score a high rank on relevant Google search terms.&lt;br /&gt;&lt;br /&gt;Here&apos;s the deal:  If Google is your Oracle of Programming Knowledge, you&apos;ll most likely be led to believe that the only way to capture the mouse requires the use of Win32 APi functions &lt;strong&gt;CaptureMouse&lt;/strong&gt; and &lt;strong&gt;ReleaseMouse&lt;/strong&gt; -- which of course isn&apos;t exactly difficult in its own right, as it only requires setting up some reasonably straight-forward P/Invoke prototypes. But Microsoft couldn&apos;t have have overlooked these obvious, necessary, and simple features when implementing the new .NET Framework, right?  Not according to this:&lt;br /&gt;&lt;br /&gt;Quoting &lt;a href=&quot;http://www.thescripts.com/forum/thread234697.html&quot;&gt;http://www.thescripts.com/forum/thread234697.html&lt;/a&gt;:&lt;br /&gt;&lt;div style=&quot;border: 1px dashed orange;background-color: #fff0e0; padding: 6px; margin-top: 0.75em;&quot;&gt;Actually, .Net did not include all the feature of windows.  So it introduces the P/invoke technical to supplement it. Many platform related issue should be completed through P/invoke.(Such as Hook technical, Memory Mapping File, etc)&lt;br /&gt;&lt;br /&gt;Jeffrey Tan&lt;br /&gt;Microsoft Online Partner Support&lt;/div&gt;&lt;br /&gt;That certainly sounds rather definitive and matter-a-fact-like, coming from Microsoft Online Partner Support.  I was still skeptical though (and for good reason, since mouse capturing is &lt;em&gt;required&lt;/em&gt; for even most basic Windows UI behaviors), so I paged through the Windows.Forms.Control class... and after about 16 seconds of browsing, &lt;em&gt;found this:&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.capture.aspx&quot;&gt;Control.Capture Property&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Quick summary of that link:&lt;br /&gt;&lt;strong&gt;&lt;pre&gt;Control.Capture = true;  // Mouse is captured!
Control.Capture = false; // Mouse is released!&lt;/pre&gt;&lt;/strong&gt;... that&apos;s it. That simple. And it&apos;s been in there since the first incarnations of C# and NET framework (v1.0+).  So much for Microsoft Online Partner Support competence.</description>
  <comments>http://air-richter.livejournal.com/69715.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/69603.html</guid>
  <pubDate>Mon, 26 Nov 2007 10:34:09 GMT</pubDate>
  <title>Aspergers w/ Cheese.  Hold the Onions!</title>
  <link>http://air-richter.livejournal.com/69603.html</link>
  <description>Aspergers Syndrome sure isn&apos;t what it used to be.&lt;br /&gt;&lt;br /&gt;As little as five years ago, Aspergers was widely considered a variant of Autism Spectrum.  It still is in text (largely by legacy definitions), but not so much in practice.  The criteria for diagnosis five years ago and the criteria today, both as found on the web, are vastly dis-similar.  Honestly, I find that the &quot;new modern&quot; criteria for Aspergers has been generalized to the point where it can safely encompass just about every self-proclaimed &quot;computer nerd&quot; that&apos;s ever lived.  Any sort of asocial behavior combined with analytical thought tendency == Aspergers!  It&apos;s a bit silly really.  This is not unlike the history of Attention Deficit Disorder, which went from being a diagnosis for a severe behavioral problem to something that just about every kid on earth can qualify as on those occasional restless and unfocused days that we all have.  &lt;em&gt;(more on why this has happened in a bit)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;As I (used to) understand it, in order to be an accurate &quot;official&quot; diagnosis of Aspergers, a number of autistic-like traits must exist or or have existed during early/mid childhood (most Autism Spectrum and even some severely autistic grow out many of these as they get older though).  Here&apos;s a basic list, with the more pertinent Autistic behaviors first, and more general behaviors afterward.&lt;br /&gt;&lt;br /&gt;- Fear of loud noises or bright lights/colors.  In particular, a reaction toward noise/light as if it&apos;s physically painful.&lt;br /&gt;&lt;br /&gt;- Sensitivity to the seams in clothing, like the toe seam on socks or shoulder seams on shirts, and in particular exhibiting a preference toward rather going naked or wearing togas instead of &quot;enduring&quot; the pain of those seams.&lt;br /&gt;&lt;br /&gt;- Moderate to extreme clumsiness or lack of coordination.  Obvious examples include abnormal difficulty catching or throwing things, handwriting (especially cursive), &quot;two left feet&quot;, etc.  Less obvious are things like an inability to learn how to tie shoes properly, or open a box of cereal without tearing the whole top of the box into bits.&lt;br /&gt;&lt;br /&gt;- Repetitive movements such as rocking or twirling, self-abusive behavior such as head-banging, or destructive behaviors such as carving, whittling, or otherwise dismantling things in rote fashion.&lt;br /&gt;&lt;br /&gt;- Difficulty comprehending 3D projection on 2D media.  In particular non-photograph material (artwork, games) will appear as the literal flat images, resulting in a failure to comprehend the &quot;true&quot; meaning of otherwise simple 3D-&amp;gt;2D projections.&lt;br /&gt;&lt;br /&gt;- Seemingly doesn&apos;t know how to play with toys.  In Aspergers in particular this can manifest itself in the form of very selective toy favoritism (ie, the child gravitates toward the toys he/she &quot;understands&quot;).  It is even apparent in video game selection: complex games with character inventories and such will usually be almost impossible to comprehend, while much simpler current-visual-state/reaction games will be effortlessly mastered.&lt;br /&gt;&lt;br /&gt;- Lack of eye contact and/or lack of name recognition.  In severe cases, a child can act as though they are deaf.&lt;br /&gt;&lt;br /&gt;- Regular displays of frustration, unhappiness, and anxiety - which may or may not lead to tantrums or panic attack.  This is obviously very common among all children and so it comes last.  The notable trait in autism is usually the &lt;em&gt;timing&lt;/em&gt; of tantrums: they&apos;ll often occur in situations that don&apos;t seem to have much rhyme or reason, leading to the adult assessment that the child must be trying to be &quot;difficult&quot; for no reason other than to be difficult.  From the autistic child&apos;s perspective, there could be any number of things that trigger the attack, such as any of the things listed above (anger/frustration over itchy clothing seams, noises or colors that an adult might not even notice, etc).&lt;br /&gt;&lt;br /&gt;These are the traits that link Aspergers to Autism Spectrum disorder, and without at least some of these traits present, the current Wikipedia-listed criteria for Aspergers becomes little more than a chart for identifying children who don&apos;t fit that &quot;perfect&quot; cookie-cutter model for social behavior.&lt;br /&gt;&lt;br /&gt;So what&apos;s up with these children&apos;s disorders always getting blown out of proportion?  &lt;strong&gt;The modern school system!&lt;/strong&gt;  It&apos;s a well known fact that the school system is ill-adept at dealing with children who don&apos;t fit the mold around which the whole system has been designed.  In the case of AD/HD, it was popularized to help protect all the kids out there who can&apos;t sit still and learn impractical and useless drivel for 6 hrs at a shot.  Aspergers has been popularized thanks to increasing amounts of classroom and campus over-crowding.  Classroom over-crowding makes social interaction a &lt;em&gt;critical&lt;/em&gt; part of public school survival; and it makes analytical thinkers with asocial tendencies both tease-fodder and a potential classroom distraction.&lt;br /&gt;&lt;br /&gt;Children who don&apos;t fit the required educational system mold are both disadvantaged and &lt;em&gt;worse&lt;/em&gt; are often a distraction to the rest of the classroom; mucking up the finely tuned education system like a misshapen sole on a shoe assembly line.  No time to fix!  You either sew it together hap-haphazardly, or you toss it aside and focus on the other ones.&lt;br /&gt;&lt;br /&gt;In order to get these otherwise normal - but not well-suited to school life - kids some sort of specialized educational environment that&apos;s still covered by the government tax dollars, well-intentioned psychologists have to find ways to diagnose them as having some sort of disorder that the government recognizes.  Word gets out.  Jimmy&apos;s aunts find out that he got diagnosed as AD/HD -- he&apos;s not, but the psychologist recognized the poor kid needs special care in &quot;school terms&quot; and using the diagnosis was the best way -- but Jimmy&apos;s aunt doesn&apos;t know that.  She just knows that her son had bad grades too and is every bit as obnoxious as her nephew, and off to the doctor she goes so that she too can get her kid whatever it is he deserves.&lt;br /&gt;&lt;br /&gt;Years later, not-so-well-intentioned psychologists, doctors, and in particular &lt;em&gt;pharmaceutical corporations&lt;/em&gt;, take advantage of the ever-expanding popularity of this new syndrome-turned-hot-topic, and along the way the clinical meaning of the term itself changes to match the children that have been diagnosed with it.&lt;br /&gt;&lt;br /&gt;... which happens to be just about anyone who has difficulty coping with school.&lt;br /&gt;&lt;br /&gt;Thus, I find that terms like Aspergers and AD/HD today have far less to do with normalcy or behavioral patterning, and have almost everything to do with &lt;strong&gt;what&apos;s required from a child to be a functional attendant of the modern american school system.&lt;/strong&gt;  I guess in a way, that &lt;em&gt;is&lt;/em&gt; a definition of normalicy.  It&apos;s the brave new world.</description>
  <comments>http://air-richter.livejournal.com/69603.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/69304.html</guid>
  <pubDate>Sat, 24 Nov 2007 00:56:02 GMT</pubDate>
  <title>Toys of Discovery</title>
  <link>http://air-richter.livejournal.com/69304.html</link>
  <description>Yay!  I have stumbled across a couple free software packages that, in the hands of an unskilled non-atisan as myself, are both fun and entirely non-productive.  It&apos;s like getting a whole new set of Fisher Price Little People all over again.&lt;br /&gt;&lt;br /&gt;First on the List:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background-color: #f0f0ff; border: 1px solid blue; padding: 6px;&quot;&gt;&lt;center&gt;&lt;strong&gt;Google Sketchup!&lt;/strong&gt;&lt;/center&gt;&lt;br /&gt;&lt;strong&gt;Download From: &lt;a href=&quot;http://sketchup.google.com&quot;&gt;http://sketchup.google.com&lt;/a&gt;&lt;/strong&gt; -- Don&apos;t bother  with the Pro version.  It&apos;s $495, or approximately $490 more than someone of my social standing could ever hope to afford.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Benefits:&lt;/strong&gt; It can draw regular shapes!  The Extrusion and Follow Me tools are the funnest things on earth!  Although admittedly, I&apos;m not quite sure &lt;em&gt;why&lt;/em&gt; they&apos;re so fun, nor am I sure they&apos;d be fun for anyone who doesn&apos;t exhibit the level of geekiness that I often do.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Drawbacks:&lt;/strong&gt; All the tutorials are in streaming movie format.  Woe is me, who misses the days of &lt;strong&gt;text-based documentation&lt;/strong&gt;.  Ah, silence is bliss, and text serach ability is useful!  Watching some bloke do junk on the screen is comparatively boring and slow.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Second on the List:&lt;br /&gt;&lt;div style=&quot;background-color: #f0f0ff; border: 1px solid blue; padding: 6px;&quot;&gt;&lt;center&gt;&lt;strong&gt;InkScape!&lt;/strong&gt;&lt;/center&gt;&lt;br /&gt;&lt;strong&gt;Download From: &lt;a href=&quot;http://www.inkscape.org&quot;&gt;http://www.inkscape.org&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Benefits:&lt;/strong&gt; If you ever spend more than 5 mins of your life working on website graphics, this has all the benefits in the world.  Can even make me look like I know what I&apos;m doing when it comes to art (or otherwise known as &quot;crap&quot; where my abilities are concerned).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Drawbacks:&lt;/strong&gt; None that I know of!&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Inkscape in particular has about a bajillion fan and contribution sites, and another half a bajillion tutorials.  There are tutorials for just about every written language too, not that any of my readers here would care too much about that particular caveat.  Maybe later tonight I&apos;ll post a creation or two spawn forth from these programs, since lately all I&apos;ve been doing is playing with them.</description>
  <comments>http://air-richter.livejournal.com/69304.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/68988.html</guid>
  <pubDate>Wed, 21 Nov 2007 22:44:38 GMT</pubDate>
  <link>http://air-richter.livejournal.com/68988.html</link>
  <description>Is someone who posts an idea or theory on the internet more than likely to be shot down by hordes of young, egocentric religious kids that wouldn&apos;t consider a single idea unless it was they who thought of it first?  Phrased other ways:  Is information posted on the Internet wasted effort?  Does the internet fuel mis-information, deception, and destruction of our society?&lt;br /&gt;&lt;br /&gt;... and is that different from material published non-internet?&lt;br /&gt;&lt;br /&gt;Answer: There is no good solution to obscurity.  To eliminate obscurity in the media channels can lead to its own can of worms.&lt;br /&gt;&lt;br /&gt;Mis-information, mis-direction, and falsehood has always existed and has, as far as my studies have concluded, maintained a pretty consistent status quo.  I don&apos;t think the problem is the ease of transmission so much as the changes in &lt;em&gt;potential for damage&lt;/em&gt;.  And that potential is related to strength/power -- which stems from technology and population more than anything else.  (strength via weapons and strength in numbers)&lt;br /&gt;&lt;br /&gt;In this way, I find that the internet is actually beneficial in many ways.  The Net turns &lt;em&gt;both&lt;/em&gt; the good and the bad of information sharing into obscure endeavors: creating &quot;en masse&quot; trends that lead to the strengh-in-numbers required to form dangerous lynch mobs becomes ever increasingly more difficult.&lt;br /&gt;&lt;br /&gt;Let&apos;s take a trip through time! (it&apos;s like an episode of Mr. Peabody and his Pet Boy Sherman!)&lt;br /&gt;&lt;br /&gt;For example, when the Gutenberg Press was invented in the 15th century, it was largely controlled by a few select entities -- countries and large corporations that had the capital to construct and operate them.  If you didn&apos;t like what they were printing, all you could do was yell out your window in disgust and hope your neighbors cared enough to listen.&lt;br /&gt;&lt;br /&gt;In the 1800&apos;s things changed as pressing newspapers and books got easier and easier, especially in the United States and Britain.  Postal services also saw leaps and bounds in functionality. People were able to communicate between each other, and then publish their thoughts to niche journals and other small-time media outlets.  People were able to do more than just yell out their windows, and as a result the whole of media experienced a period of relatively high accountability.&lt;br /&gt;&lt;br /&gt;Unfortunately, the TV news media took a step in the wrong direction.  It restored a pattern of limited (and controlled) media distribution, where-by the large majority of people can be force-fed select soundbites at the discretion of news media management.  The TV news decided what to air and when to air it, and in the process they grew rich and powerful enough to also buy up many of the major newspapers.  Changes in the scale of economics - in part thanks to entities like McDonalds, Sears and Wal-mart, which helped to create an economic standard that requires large-scale production in order to turn a profit - the small time papers, journals, and editorials lost their ability to stay in business.  The major news machine thusly returned to rule the roost.&lt;br /&gt;&lt;br /&gt;But thanks to the internet things have shifted quite a bit the other direction, at least for now.  Yes, there&apos;s plenty of mis-information on the &apos;net, but the wills of individuals are not able to &lt;em&gt;dominate&lt;/em&gt; the field.  They&apos;re lost in the obscurity almost as much as everyone else, which of course means that the power is more balanced (as much as we can hope for) than it has been in the past.&lt;br /&gt;&lt;br /&gt;That said!  Your real enemy to target is usually &lt;strong&gt;blind patriotism&lt;/strong&gt;!  Blind patriotism will undo all the benefits of informational integrity.  People can have all the right info int he world, but as soon as they think they&apos;re doing &apos;right&apos; by their fellow neighbors, compatriots, comrades, or whoever -- they&apos;ll cheerfully and joyfully lynch the heck out of everyone else who isn&apos;t one of those people.  The worst part?  As far as I can tell, that&apos;s just human nature.  It&apos;s possible to clean up the condition of public information, it&apos;s possible to apply accountability to the major media channels, and it&apos;s even possible to give people a secularist and/or humanist &quot;greater good&quot; focus.  But it&apos;s impossible to turn off blind patriotism... and that&apos;s when otherwise smart people turn into slobbering warmongers; ever-too-eager to prove their moral compass and none-too-eager to adhere to the depressing truth of the unfair needs and desires that comprises existence.&lt;br /&gt;&lt;br /&gt;So the conclusion is: Adding to the obscurity of the internet is probably a good thing.  Niche markets and niche opinions influence small amounts of people, which helps reduce the strength of the mass media channels that are oft-times controlled by mere individuals.  This helps fuel, if nothing else, greater diversity of mis-information, which is still better than unity-in-mis-information.  And in most cases, it helps fuel better levels of accurate information since that info is often not available &lt;em&gt;at all&lt;/em&gt; in a world dominated by mass media.&lt;br /&gt;&lt;br /&gt;So embrace the internet and, once again, embrace the irrelevance. Your obscurity matters!</description>
  <comments>http://air-richter.livejournal.com/68988.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/68628.html</guid>
  <pubDate>Wed, 14 Nov 2007 13:48:17 GMT</pubDate>
  <title>A Part 2 to the previous entry</title>
  <link>http://air-richter.livejournal.com/68628.html</link>
  <description>I&apos;d like to re-iterate that axe&apos;ing the IM thing hasn&apos;t really affected my life in any way except that it&apos;s limited my already meager &apos;exposure to the opposite sex&apos; potential.  Other than that, I really haven&apos;t noticed a difference... and even there I don&apos;t notice much of a difference.  It was a lot easier for me to sort out some communicational success when the internet was a much smaller place.&lt;br /&gt;&lt;br /&gt;These days I&apos;m just another bland and forgotten shrub in the chaotic grassy field that is existence; lacking the required social competence required to stand out among the crowds, and lacking the unsophisticated nature required to relate to (and not intimidate) the lower common denominators who don&apos;t stand out.  So I&apos;m right back where I was before I found the (much smaller) internet many years ago.  So much for progress and development.</description>
  <comments>http://air-richter.livejournal.com/68628.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/68494.html</guid>
  <pubDate>Tue, 13 Nov 2007 03:11:08 GMT</pubDate>
  <title>Ex-Communication Redefined</title>
  <link>http://air-richter.livejournal.com/68494.html</link>
  <description>In another move to improve my life, I have sworn off most forms of real-time technology-based communication.  I don&apos;t use instant messengers or chat programs, period.  I only use phones sparingly; for business and immediate concerns discussions only.  As I spent some time reflecting over my life (which I do far more often than I used to, since I have little to look forward to these days) I came to realize that &lt;strong&gt;bad things happen to my social condition when I use instant messengers, chat rooms, or telephones.&lt;/strong&gt; Furthermore, nothing especially good has come from my use of IMs, chatrooms, or telephones.  Analytically speaking, I&apos;ve spent most of my life relying on these things as my primary forms of communication and connection, and likewise my life history is a winding trail of failed projects, failed relationships, and alienated friends.&lt;br /&gt;&lt;br /&gt;... which is a clear indicator that I need to change &lt;em&gt;something&lt;/em&gt;, because what I&apos;ve been doing hasn&apos;t done me many favors.  So I applied cause-and-effect analysis and combined it with psychological education and observation.  At the end of it all, I concluded that IMs and chats suck (for me anyway).  Most of the worst moments of my adult life have occurred in front of a monitor or at the end of a telephone, and most of the better moments of my adult life occurred nowhere near either of those.  So I&apos;m playing the numbers:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Instant Messengers!  &lt;em&gt;You&lt;/em&gt; are the weakest link!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What does this mean to you?  If you&apos;re one of the (very few) people who still had me in your instant messenger friends list, then you&apos;ll have a better idea why I haven&apos;t been online for nearly five months now!  More importantly, you&apos;ll know that I&apos;m not going to be online anytime soon, and that anything you might have sent me on ICQ or Yahoo or whatever other stupid program will likely never be received.  Sorry.  Sucks to be the poor little offline message, stranded in the void of IM Server Hell.  It&apos;s sacrifice may very well be my savior!&lt;br /&gt;&lt;br /&gt;... eh, not really.  But it&apos;s fun to sound like a nutty bloke preaching about manifest destiny, life-after-death-ness, and other desperate attempts at self-relevance. :)&lt;br /&gt;&lt;br /&gt;Unfortunately, the most stand-out consequence of this decision is that I&apos;ll likely never have another relationship again.  Why?  Because my three prior relationships all spawned via online communication and phone conversations (and all of them ended the same way), and thus far there is absolutely no evidence to support the theory that I&apos;m capable of attracting a female without the help of communication-by-proxy -- via monitors, keyboards, and/or phone receivers.  Then again, I haven&apos;t had a meaningful online IM session with a girl in almost five years either.  So either way I appear to have drawn the short straw (or maybe I missed drawing any straw at all), and so I might as well simplify my life by removing unnecessary (and potentially distracting or socially destructive) technological clutter.&lt;br /&gt;&lt;br /&gt;IMs are out of the question, but I still read emails and journal comments!  I have &lt;em&gt;no one&lt;/em&gt; in real like to talk to other than my parents.  No one, nothing, no how, nowhere.  My entire social circle consists of this journal and a nearly-defunct forum (&lt;a href=&quot;http://2ddev.72dpiarmy.com&quot;&gt;2ddev!&lt;/a&gt;).  I&apos;m not exaggerating.&lt;br /&gt;&lt;br /&gt;I may not reply for some days, weeks, or even months depending on my current (lack of a) daily routine, and I&apos;ll probably say something that&apos;s seemingly disinterested, cold, depressing, or potentially insulting.  The great part is that most of the time I&apos;m trying to be constructive and complimentary, so with that in mind you can be entertained by my befuddlingly incompetent attempts to make myself useful.</description>
  <comments>http://air-richter.livejournal.com/68494.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/68237.html</guid>
  <pubDate>Tue, 13 Nov 2007 00:18:10 GMT</pubDate>
  <title>My Irrelevant Status to Date</title>
  <link>http://air-richter.livejournal.com/68237.html</link>
  <description>So some months ago I decreed that - perhaps - I should move on to &quot;the bigger and better&quot; (as far as informative programmer information exposure is concerned) and find myself a real programmer&apos;s blogging server for my sudden plethora of verbose C# explorations.  Alas, I spoke too soon; and I should have thought better of it right from the beginning if not for the dreaded trap of &quot;hopeful thinking&quot; clouding my judgment.&lt;br /&gt;&lt;br /&gt;... I do find that so-called positive thinking is half the time as destructive as it can be constructive the other 50% of the time.&lt;br /&gt;&lt;br /&gt;Whatever am I talking about, you ask?  I&apos;m talking about the fact that I am, if nothing else, wholly inconsistent.  Always.  &lt;em&gt;(I hope Wal-mart won&apos;t sue me for trademark infringement)&lt;/em&gt; I have never done anything with consistency or reliable predictability for more than a few days or a few weeks at a time.  If I go on a run of a series of C# essays for a month, I&apos;m likely to fall out of the loop the following month, and am likely not to regain another run for several months.. or even years.  I&apos;m like this for everything: running, programming, basketball, cooking, the foods I eat, or even when (or &lt;em&gt;where&lt;/em&gt;) I sleep.  My (very limited) experience with girls even follows the same retarded (lack of a?) pattern... something that has kept me up long nights in lonely seclusion as I try to puzzle out possible solutions when I&apos;m again in that situation.&lt;br /&gt;&lt;br /&gt;... but on the morbidly bright side, there&apos;s a good chance I&apos;ll probably never be in that situation again anyway.  It&apos;s been three years since my last (brief) phone conversation and almost five years since the last time I talked to a girl &lt;strong&gt;in-person&lt;/strong&gt; for more than 20 minutes.&lt;br /&gt;&lt;br /&gt;Going back to the original topic; there&apos;s no place for me on a dedicated programmer&apos;s blog.  Not to say that there aren&apos;t dozens of other dorks with defunct programmers&apos; blogs, but I&apos;d just as soon not add to the pointless idiocy.  I find programmer blogging sites to be a wealth of information, and adding belated blogs like the one I would have to the mix would only lessen that value -- and &lt;em&gt;that&lt;/em&gt; is not my goal.&lt;br /&gt;&lt;br /&gt;In all of my (not so) newly-found angry, insensitive, disattached attitude, I&apos;m still completely and totally selfless when it comes to decision making.  Even when I blatantly make decisions to further my own personal cause, my personal cause inevitably ends up being in the best interest of someone else.  And fuck you anyone who thinks I need to change that aspect of my personality, because I&apos;ve learned that to take that away from me is the equivalent to expending all purpose to my existence, and at that point I might as well be dead.&lt;br /&gt;&lt;br /&gt;So I&apos;m here to stay on the LiveJournal, right where I (don&apos;t really) belong: in line with all the redundant soul searching, teenage angst, school years diaries, gamer bragging, and whatever other emotional irrelevance that begets most human existence.  Not that I belong here either.  It&apos;s just that here I&apos;m less of a distraction to the grander focus and purpose of the site since, well... there isn&apos;t one!  Oh the joy of existence without structure.</description>
  <comments>http://air-richter.livejournal.com/68237.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/67968.html</guid>
  <pubDate>Wed, 26 Sep 2007 15:18:44 GMT</pubDate>
  <title>John Doe</title>
  <link>http://air-richter.livejournal.com/67968.html</link>
  <description>While watching reruns of a canceled TV series &quot;John Doe&quot; on the Sci Fi channel, it occurs to me that if the show had a different name that it would have been no less than 3 times more likely to have been extended into a second season.&lt;br /&gt;&lt;br /&gt;John Doe is at the very least as good as shows like Psych, and is unquestionably far superior to other shows like Numbers or any one of the CSI spinoffs.  But it has a terrible title.  Imagine how much more viewership it could have gandered if it were called &lt;strong&gt;The Phoenix&lt;/strong&gt; instead.  Seriously.  I bet that would have made all the difference.&lt;br /&gt;&lt;br /&gt;It&apos;s an unfortunate fact of the human condition.  Names matter.</description>
  <comments>http://air-richter.livejournal.com/67968.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/67833.html</guid>
  <pubDate>Fri, 31 Aug 2007 17:20:44 GMT</pubDate>
  <link>http://air-richter.livejournal.com/67833.html</link>
  <description>I stumbled across this (dated) blog entry and the comments truck me as both amusing and very similar to a recent discussion here:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&amp;amp;ixPost=6598&quot;&gt;http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&amp;ixPost=6598&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a perfect example of how not to hold forum discussions. -_-  The first reply to that post pretty much says everything there is to say about the Ternary Operator:  It&apos;s useful in functional programming for readability and maintenance, and otherwise just a minor variant aesthetic option that&apos;s seldom used.  An astute reader would of course infer that the operator is not very useful for objective programming (the near-opposite of functional programming), which of course encompasses 95% of your business-related coder shops and offices.  Yet there are 25-so &lt;em&gt;more&lt;/em&gt; replies, only two of which have any constructive content what-so-ever.&lt;br /&gt;&lt;br /&gt;... the rest are just instances of opinionated idiocy stated-as-fact, counter-acted by instances of trying to set the record straight, with a couple mediator-type posts thrown in to try to extinguish the flames.  The whole thing is ridiculous because it &lt;em&gt;really doesn&apos;t matter.&lt;/em&gt;  Little in the world changes whether or not the operator is used properly, used in excess, or banned altogether.  People have used languages like Perl and Scheme for years, thus I&apos;m convinced that any grown adult can handle a stray Ternary operator or two.  Likewise, there&apos;s no harm in deciding to ban it from a project of office setting, and finally there&apos;s no garuantee that just because you ban things like the Ternary operator that your idiot coders still won&apos;t find ways to make totally obtuse code.&lt;br /&gt;&lt;br /&gt;For that matter, no one actually made the most obvious and indisputable argument for &lt;em&gt;not&lt;/em&gt; banning the stupid thing (and furthermore not arguing pointlessly over whether or not it should be banned).  Which is this:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;color:#802030;&quot;&gt;Guidelines exist in all areas of programming, and the idea of eliminating guidelines is ludicrous.  Thus I contend that the banning of the Ternary operator in any workplace setting is nothing more than an act of shallow principle and human emotional bias, without any rational basis.  I submit the following example:&lt;/div&gt;&lt;br /&gt;&lt;div style=&quot;font-family:andale mono, courier new;&quot;&gt;if( i-NewPos &amp;gt; ( Location+Offset ) * Indexer ) { i++; myObject[Indexer].Tweak(); } else { i+=2; myObject2[Indexer].MoveTo( Location-Offset ); }&lt;/div&gt;&lt;br /&gt;OmG!  Disgusting!  Looks like we have to ban &lt;strong&gt;if conditionals&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;In other words, the Ternary operator really is no different than an If/Else clause, except it&apos;s abbreviated the &lt;strong&gt;if&lt;/strong&gt; and &lt;strong&gt;else&lt;/strong&gt; parts into ? :, respectively.  That&apos;s it.  Otherwise, all the same coder readably &amp; maintenance guidelines apply to both operators, just as they do to every other line of code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion: Banning the Ternary (?:) operator does not simply programming guidelines, nor does it improve program readability.  Thus the banning has no effect on the productivity of programmers within a project or office setting.  It&apos;s just something people do for show, to make them &lt;em&gt;feel&lt;/em&gt; like they&apos;re simplifying their environment&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;... and so for all those Ternary banners out there?  If you really want to ban bad syntax and simply programming guidelines, you&apos;re going to have to use a language that forces strict syntax layout.  Something like Python, or something even more strict perhaps. Otherwise all you&apos;re doing is just fooling yourself into thinking you&apos;ve somehow improved your environment.</description>
  <comments>http://air-richter.livejournal.com/67833.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/67479.html</guid>
  <pubDate>Fri, 31 Aug 2007 00:47:43 GMT</pubDate>
  <title>The &quot;Agree to Disagree&quot; resolution.</title>
  <link>http://air-richter.livejournal.com/67479.html</link>
  <description>Of the many forum-related Logical Fallacies and Argumentative Strategies that get my goat, the &quot;Agree to Disagree&quot; strategy is one of the very worst in my book.  It goes something like this:&lt;br /&gt;&lt;br /&gt;Person A: The world is round, so it&apos;s safe to say that when doing navigational calculations you should probably ... (rest of post)&lt;br /&gt;&lt;br /&gt;Person B: [quotes snippet above] Not really!  You really shouldn&apos;t assume the world is round.  Scientists are like finding new dimensions and stuff all the time.  Who&apos;s to say that they won&apos;t find a new theory that changes our concepts of reality, and at which point the physics that apply to flat objects will actually be round objects too?&lt;br /&gt;&lt;br /&gt;Person A: Wow!  That&apos;s nuts and totally unrealistic, and useless too since it doesn&apos;t help people navigate their ship at all.&lt;br /&gt;&lt;br /&gt;Person B: But let&apos;s just assume for a minute that it isn&apos;t.  What if the laws of physics really do change? In that case, when the laws of physics change these people won&apos;t know how to navigate anymore.  So don&apos;t say the world is round.&lt;br /&gt;&lt;br /&gt;Person A: But that&apos;s a totally outlandish assumption, and has no bearing in reality.  The laws of physics aren&apos;t going to change anytime soon, and even if they do, then yeah we won&apos;t call the world round.  But &lt;em&gt;we do now, and that&apos;s what matters.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Person B: Well that&apos;s &lt;em&gt;just &lt;strong&gt;your opinion&lt;/strong&gt; and I think we&apos;re just going to have to agree to disagree.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;That&apos;s a bit of a dramatization of course, but actual discussions aren&apos;t much less retarded. I see them happen a lot and have been part of many.  In almost every case, Person B decides to completely disregard the common sense rules of observable reality and invents his own little irrelevant scenarios where his side of an argument is, in fact, true.  When the other person dismisses these cases as ludicrous and/or totally impractical and presents solid analysis proving such, he eventually bites back with the Opinion Dismissal.&lt;br /&gt;&lt;br /&gt;What pisses me off is that the Opinion Dismissal is most often used to declare a &quot;fair draw&quot; -- by dismissing both sides of the argument completely.   The user of the Dismissal then expects the other side to play the role of a gentleman and accept the declaration of a draw -- &lt;strong&gt;even though one side is littered with factual / observable data and the other side consists of nothing but speculative hogwash&lt;/strong&gt;.  This is something akin to a person ramming into your Benz with his 1985 Chevy Cavalier and then appealing to a Gentleman&apos;s Draw because both cars got totaled.  Any attempts by the other side to set the record straight are then used to villainize that person for being rude and/or egotistical, even though he&apos;s the one who&apos;s getting shafted. &lt;br /&gt;&lt;br /&gt;So it&apos;s hardly fair, and far worse yet, in a supposedly information-driven environment - such as any Programming or Technical Help discussion board - it&apos;s highly counter-constructive; &lt;strong&gt;which means that it hurts everyone, not just the guy who made the otherwise accurate statement&lt;/strong&gt;.  As such I generally refuse to accept these draws; proving both my lack of Gentlemanship and furthering the cause against mis-information!  I see no point in being a gentleman if it means I have to reward deceptive behavior and inaccurate information propagation.  And so I say unto all those people guilty of using this argument in their posts:&lt;br /&gt;&lt;br /&gt;&lt;strong style=&quot;font-size: larger;&quot;&gt;Fuck your ego or weak emotional state.  I will not let your inability to handle the truth interfere with the propagation of accurate information for everyone else.  I care not if people find me charming or respectful; only that they find me to be a reliable source of useful and constructive information.  Villainize me all you like!  But I shall never give in to the tyranny of manipulative conversation for as long as I have my wits about me.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;.. at such time that my brain cells begin to fail and my mind goes dim, I&apos;ll retire to the seclusion of a dark room and babble incoherently about my toenails.</description>
  <comments>http://air-richter.livejournal.com/67479.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/67295.html</guid>
  <pubDate>Thu, 26 Jul 2007 01:10:40 GMT</pubDate>
  <title>Comments aren&apos;t for redundancy</title>
  <link>http://air-richter.livejournal.com/67295.html</link>
  <description>I should start a real programmers blog.  Not that I personally have anything against the predominant livejournal community, but the widely accepted fact is that livejournal is a home for young girls suffering from severe cases of post-pubescent angst. There are more than a few people in this world who abstain from visiting any link that is hosted from livejournal or myspace.&lt;br /&gt;&lt;br /&gt;... but more importantly, there are coder-oriented blogs out there that offer up built-in layouts ideal to inserting code examples.  Livejournal&apos;s is...cumbersome at best.  (I&apos;d have an easier time writing my own pure HTML/CSS updates from scratch).&lt;br /&gt;&lt;br /&gt;I guess I&apos;ll have to shop around for one that doesn&apos;t suck.&lt;br /&gt;&lt;br /&gt;In the meantime, I&apos;ll throw a brief rant on one of my pet peeves.  It&apos;s a well known fact that most people can&apos;t comment their code for shit, and this I accept.  But one thing I &lt;em&gt;hate&lt;/em&gt; and &lt;em&gt;refuse to tolerate&lt;/em&gt; is &lt;strong&gt;people who insist on trying to pretend like they comment their code by inserting bullshit like this:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;   //free the memory
   Free( MemoryPtr );&lt;/pre&gt;.. What the hell is that?  Seriously.  Who here would ever find that comment useful?  If anything, the comment merely &lt;em&gt;adds to the clutter of the code,&lt;/em&gt; which is why I won&apos;t stand for it.  Sometimes I&apos;ll find people who comment almost every line of their code in that fashion, creating what can only be described as &lt;strong&gt;Pure Retardedness&lt;/strong&gt; &lt;em&gt;(tm)&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;   // Check if Left is less than Right
   if( Window.Left &amp;lt; Window.Right )
   {
      // move to the left
      MoveLeft();
   }
   // create the directory
   Directory.Create( &quot;homedir&quot; );
   // open the file
   Stream file = FileStream.Open( &quot;homedir\\hijohn.txt&quot; );
   // close the file
   file.Close();&lt;/pre&gt;Disgusting.  I&apos;m convinced that culprits of this asinine habit are college grads who still think they&apos;re being graded on how many instances of &lt;strong&gt;&apos;//&apos;&lt;/strong&gt; appear in their code.  Either that or they seek some form of false security in adhering to the sheer idealistic principle behind an otherwise de-constructive habit.  The idealism says that commenting your code is good!  Period.  The reality is that individual lines of code speak for themselves.  You don&apos;t comment the code specifically, you comment the grander purpose of the code as a whole, via comment blocks at the head of complete algorithms or procedures.</description>
  <comments>http://air-richter.livejournal.com/67295.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/67054.html</guid>
  <pubDate>Wed, 25 Jul 2007 20:24:27 GMT</pubDate>
  <title>.NET / DllImport / Structures -- Why so Slow?</title>
  <link>http://air-richter.livejournal.com/67054.html</link>
  <description>&lt;div style=&quot;font-size: 21px; font-weight: bold;&quot;&gt;Structure Marshalling Performance via P/Invoke&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;(C# Platform Invoke Benchmark Guide, episode 3..ish)&lt;/div&gt;&lt;br /&gt;As always!  Do all your performance testing in C# &lt;strong&gt;Outside the IDE&lt;/strong&gt;.  In the world of Managed Code, it&apos;s the debugger that gives you all the slowness, not the code generation.  The only real code difference between the Release and Debug builds of an application is a few minor optimizations that have virtually no impact on program execution speed and -- more importantly -- the &lt;strong&gt;DEBUG&lt;/strong&gt; define (and that only matters if you use it in your code to enable things like logging or extra strict sanity checks).&lt;br /&gt;&lt;br /&gt;Moing along...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Structs By-Reference&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Let&apos;s say you have a DLL that takes a structure, &lt;em&gt;passed by reference&lt;/em&gt; as an input parameter.  Here&apos;s the recommended P/Invoke syntax:&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[Example 1 : By Ref ... the Slow Code]&lt;/div&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;public struct StructLand
{
    public int val1, val2;
}

public class Woombey
{
    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( ref StructLand woot );
}

public class Invoker
{
    public void Method()
    {
        StructLand woot = new StructLand();
        Woombey.DoSomething( woot );
    }
}&lt;/pre&gt;... and, as with marshalled unmanaged function pointers below, this works!  But it also comes with a steep performance penalty... granted not nearly as bad as the unmanaged function pointers, but still pretty steep.  So steep, in fact, that the following code alternative is &lt;em&gt;significantly&lt;/em&gt; faster:&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[Example 2 : Avoiding ref via use of IntPtr]&lt;/div&gt;&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;
public class Woombey
{
    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( IntPtr woot );
}

public class Invoker
{
    public void Method()
    {
        StructLand woot = new StructLand();
        unsafe fixed( Structland *wootptr = &amp;woot )
		{
        	Woombey.DoSomething( new IntPtr( wootptr ) );
		}
    }
}&lt;/pre&gt;I found Example 2 to execute maybe 6-10x faster than Example 1.  The performance of Example 1 might be dependent on the structure size as well.. I dunno.  I didn&apos;t go so far as to test since the structs I was using were pretty small (8-12 bytes)... ie, I had nowhere to go but &quot;worse&quot; in that area.&lt;br /&gt;&lt;br /&gt;Of course I wouldn&apos;t recommend using the unsafe pointer trick all the time.  If it&apos;s a call you&apos;re only making a few times a second, the measure of syntaxical convenience and -- &lt;em&gt;I assume&lt;/em&gt; -- higher level of memory protection out-weights the benefit of the faster call.  I reiterate that I have no solid proof that the &lt;strong&gt;ref&lt;/strong&gt; keyword uses a more secure form of marshalling.  It&apos;s just an assumption I&apos;m making based on the (errant?) theory that the marshaller &lt;em&gt;must&lt;/em&gt; be doing &lt;em&gt;something&lt;/em&gt; to incur such a high level of overhead.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What about Structs By-Value?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Good question!  At eye-level structs by-value would seem a naturally speedy fit into the realm of marshalling.  All the marshaler need do, after all, is push the contents of the sruct onto the stack just like any other blittable type!  This is so deadpan simple that you can even do nifty forms of overloading, such as this example:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[Example 3 : Overloading Trickery is Cool!]&lt;/div&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;public class Woombey
{
    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( Point point );

    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( int xloc, int yloc );
}
&lt;/pre&gt;Yes, this &lt;strong&gt;REALLY DOES WORK&lt;/strong&gt;.  The unmanaged function on the DLL side will be able recieve the two values fine.  This can be terribly convenient, obviously, if you&apos;re doing some heavy levels of unmanaged DLL invocation.  But it too comes at a seemingly hefty cost to your app&apos;s performance!  I noticed that the second overload of my method (the xloc/yloc one) was running considerably faster than the method that used a Point struct.  So I did the following test:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[Example 4 : A Faster Struct Overload]&lt;/div&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;public class Woombey
{
    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( int xloc, int yloc );

    [DllImport( &quot;woombey.dll&quot; )]
    public static void DoSomething( Point point )
    {
        DoSomething( point.X, point.Y );
    }
}&lt;/pre&gt;... and discovered that now both method invocations ran the same speed -- which was several times speedier than passing a Point struct into the DllImport directly!  It&apos;s pretty trivial to create these sort of managed code overrides to substitute blittable types for structures, so I recommend to everyone and anyone - regardless of your preference toward performance - to use this technique.  It&apos;s just a good habit to be in! :)&lt;br /&gt;&lt;br /&gt;That got me thinking... if passing a Point struct is slow, what about passing an IntPtr struct as we did above?  Is that too being impacted by this struct marshalling overhead?  To test:&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[Example 5 : Avoiding IntPtr via Platform Dependency]&lt;/div&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;public class Woombey
{
    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( ref StructLand woot );

    [DllImport( &quot;woombey.dll&quot; )]
    public static extern void DoSomething( int pointer );
}

public class Invoker
{
    public void Method()
    {
        StructLand woot = new StructLand();
        unsafe fixed( Structland *wootptr = &amp;woot )
		{
        	Woombey.DoSomething( (int)wootptr );
            // ... or you could do this:
        	Woombey.DoSomething( new IntPtr( wootptr ).ToInt32() );
		}
    }
}&lt;/pre&gt;Voila!  My new struct-by-reference invocation runs a couple magnitudes faster than the original (and recommended) &lt;strong&gt;ref&lt;/strong&gt; method. This is pretty naughty code, of course, since it&apos;s completely dependent on 32-bit platforms.  But hey, thems are the breaks when you&apos;re gunning for top-notch performance.  But all is not lost!  You could make platform-independet code via this final &lt;strong&gt;unsafe&lt;/strong&gt; example:&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[Example 6 : Avoiding IntPtr via Unsafe Code!]&lt;/div&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 50em;&quot;&gt;public class Woombey
{
    [DllImport( &quot;woombey.dll&quot; )]
    public static unsafe extern void DoSomething( StructLand* woot );
}

public class Invoker
{
    public void Method()
    {
        StructLand woot = new StructLand();
        unsafe fixed( Structland *wootptr = &amp;woot )
		{
        	Woombey.DoSomething( wootptr );
		}
    }
}&lt;/pre&gt;The drawback of this method is that it alienates VB.NET, which -- by my limited understanding -- is incapable of using pointers or instantizing managed classes or invoking managed methods that bear the &lt;strong&gt;unsafe&lt;/strong&gt; keyword in their MSIL signature.  However!!  Users of VB.NET are still able to use the original IntPtr solution and the platform-dependent IntPtr.ToInt32() solutions.  One&apos;s not as fast and the other is platform-dependent, but something is still better than nothing. :)</description>
  <comments>http://air-richter.livejournal.com/67054.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/66589.html</guid>
  <pubDate>Tue, 10 Jul 2007 14:04:24 GMT</pubDate>
  <title>.NET / DllImport / Function Pointers -- why so slow?</title>
  <link>http://air-richter.livejournal.com/66589.html</link>
  <description>&lt;div style=&quot;font-size: 21px; font-weight: bold;&quot;&gt;Function Pointer Performance via .NET PInvoke&lt;/div&gt;&lt;div style=&quot;font-size: 14px;&quot;&gt;(C# Platform Invoke Benchmark Guide, episode 2..ish)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Let&apos;s say you have a DLL that passes a function pointer (or set of function pointers) back into your .NET code.  The proper implementation would look something like this:&lt;br /&gt;&lt;br /&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 60em;&quot;&gt;public class Joe
{
	[UnmanagedFunctionPointer( CallingConvention.Cdecl )]
	public delegate void UnmanagedPointerThingie( IntPtr handle, int param_a, int param_b );
	
	[DllImport( &quot;woot.dll&quot; )]
	static extern void ManagedEntryPoint( ref UnmanagedDataSet data );
	
	[StructLayout( LayoutKind.Sequential )]
	static struct UnmanagedDataSet
	{
		public IntPtr ActionPtrA;
		public IntPtr ActionPtrB;
	}

	public UnmanagedPointerThingie ActionA;
	public UnmanagedPointerThingie ActionB;
	
	public void InitStuff()
	{
		UnmanagedDataSet data = new UnmanagedDataSet();
		ManagedEntryPoint( ref data );
		
		// Create delegates out of the function pointer here:
		ActionA = (UnmanagedPointerThingie)Marshal.GetDelegateForFunctionPointer(
			data.ActionPtrA, typeof( UnmanagedPointerThingie ) );
		ActionB = (UnmanagedPointerThingie)Marshal.GetDelegateForFunctionPointer(
			data.ActionPtrB, typeof( UnmanagedPointerThingie ) );
			
		// And now we Invoke this bad boy:
		ActionA( handle, param, param );
	}	
}&lt;/pre&gt;&lt;br /&gt;... and this method certainly &lt;em&gt;works&lt;/em&gt;.  But sometimes just working isn&apos;t enough.  Let&apos;s consider, we are working with a native unmanaged DLL that returns function pointers.  The logical assumption is that we&apos;re probably doing something that is &lt;em&gt;performance-critical&lt;/em&gt;, since there aren&apos;t many other compelling reasons to use functions pointers from unmanaged DLLs.  Here&apos;s where the problem starts, because invoking unmanaged function pointers, as it turns out, is -- what people like me in the business of performance apps like to refer to as -- &lt;strong&gt;God-awful Slow.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;How slow?  Good question to ask!  I didn&apos;t take exact measurements (I hate exact benchmarks, but that&apos;s a different rant), but by my estimates it&apos;s anywhere from a few to several &lt;em&gt;magnitudes&lt;/em&gt; slower than calling a DLL EntryPoint.  In other words, &lt;strong&gt;it takes anywhere from 30x to 100x more processor effort to execute an unmanaged function pointer than it does to execute any other type of method directly&lt;/strong&gt;, albeit managed method or unmanaged DLL entry point.  OuchiE!&lt;br /&gt;&lt;br /&gt;Now before we move on, I&apos;ll give a quick disclaimer:  I have no idea how unmanaged function pointer invocation compares to normal managed delegate invocation and/or managed event invocation since, up to this point, I haven&apos;t personally needed to use delegates in performance-critical code.  It&apos;s entirely possible (but unlikely) that the bottleneck is in C# / .NET delegates in general.  Moving on...&lt;br /&gt;&lt;br /&gt;The solution!  It&apos;s an amusing one, really.  Create a new EntryPoint in your DLL (or create a new DLL if you&apos;re using a 3rd party library) that executes a function pointer passed into it.  Explained a different way: Don&apos;t bother invoking the function pointer from managed code, instead opting to pass the pointer back into unmanaged code to be invoked.  Here&apos;s the example:&lt;br /&gt;&lt;br /&gt;
&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[C / C++ Unmanaged DLL Code]&lt;/div&gt;&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 60em;&quot;&gt;__declspec( dllexport ) void _stdcall MyDLL_ActionInvoke( void (_cdecl *action)( void *, int, int ),
	void *handle, int param1, int param2 )
{
	action( handle, param1, param2 );
}&lt;/pre&gt;
&lt;div style=&quot;padding-bottom: 3px; font-size:12px; font-weight: bold;&quot;&gt;[C# / .NET Managed Code]&lt;/div&gt;
&lt;pre style=&quot;border: 1px solid #5050ff; padding: 4px; background-color: #f0f0ff; margin-top:0px; font-size: 12px; font-family: Andale Mono, Courier New; width: 60em;&quot;&gt;public class Joe
{
	[StructLayout( LayoutKind.Sequential )]
	static struct UnmanagedDataSet
	{
		public IntPtr ActionPtrA;
		public IntPtr ActionPtrB;
	}

	[DllImport( &quot;woot.dll&quot; )]
	static extern void ManagedEntryPoint( ref UnmanagedDataSet data );

	[DllImport( &quot;allmine.dll&quot; )]
	static extern void MyDLL_ActionInvoke( IntPtr func, IntPtr handle, int param1, int param2 );
	
	public void InitStuff()
	{
		UnmanagedDataSet data = new UnmanagedDataSet();
		ManagedEntryPoint( ref data );

		// Now to invoke this bad boy, the Fast Way(tm)
		MyDLL_ActionInvoke( data.ActionPtrA, handle, param, param );
	}
}&lt;/pre&gt;&lt;br /&gt;Wow!  Looks like we just made our own unmanaged version of a delegate layer!&lt;br /&gt;&lt;br /&gt;Enjoy your new speedy PInvoke function pointer into unmanaged code.</description>
  <comments>http://air-richter.livejournal.com/66589.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/66485.html</guid>
  <pubDate>Fri, 22 Jun 2007 02:19:10 GMT</pubDate>
  <title>Pirates 3 : Bitter Spoiler / Review</title>
  <link>http://air-richter.livejournal.com/66485.html</link>
  <description>Pirates of the Caribbean 3 : At World&apos;s End.&lt;br /&gt;My Official Review.&lt;br /&gt;&lt;br /&gt;Simply put: &lt;strong&gt;This movie should start wih Jack Sparrow&apos;s Nose.&lt;/strong&gt; Translation!  If the first 30-40 minutes had been removed entirely and that extra time alloted to lengthening the three main scenes of the movie, this movie would have been at least 231% improved over its current incarnation.  Futhermore, if Chow Yun-Fat&apos;s character were removed along with it, the movie would be a full-on 321% improved.&lt;br /&gt;&lt;br /&gt;&lt;strong style=&quot;color: #800000; font-size: larger;&quot;&gt;Rating? C.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;From here out is stuff that only makes sense if you&apos;ve seen the movie.  In other words, &lt;strong&gt;SPOILER ALERT!  MUAHAHA&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Here&apos;s the deal.  The first 30-so minutes are mostly about introducing Chow Yun-Fat&apos;s character; a character so mundane and unimportant to the plot that I have no idea what his name was nor do I care.  He&apos;s a pretty stereo-typical pirate but, unfortunately, &lt;strong&gt;we already have one here, thanks.&lt;/strong&gt;  That&apos;s what good old Barbossa is for.  Adding Yun-fat&apos;s character to the mix just produced a level of redundancy that was tiring and far from entertaining or compelling.&lt;br /&gt;&lt;br /&gt;Look at it this way:  &lt;strong&gt;Jack Sparrow&lt;/strong&gt; is an a-typical pirate.  Very quirky, reasonably unpredictable, sports a funny accent, and is of questionable moral stance (sometimes good, sometimes bad).  &lt;strong&gt;Barbossa&lt;/strong&gt; is a mean old koot, sides with greed and deceit more often than not, and comes complete with the thick Irish-descended Blackbeard accent.  &lt;strong&gt;Will Turner&lt;/strong&gt; is the proverbial white knight, who tries so hard to do the best by everyone and ends up getting caught between shades of gray and having to pick sides -- his character made especially compelling thanks to Sparrow&apos;s strong moral ambiguity.  Elizabeth Swann is.. well.. she&apos;s the girl.  Gotta have a pretty girl; and better yet one who&apos;s prone to sudden acts of non-lady-like outbursts of aggression!  (makes for good comedic spontaneity).&lt;br /&gt;&lt;br /&gt;So where does this Sao Feng fellow fit into the equation?  He doesn&apos;t.  He&apos;s just another mean old koot pirate who makes it his business to swindle people of valuables before they swindle him.  He talks a lot, gets suckered no less than five times (only one of which was particularly amusing), and then he dies.  Man, what a waste of screen time.  That&apos;s time that could have been in the hands of the most excellent non-typical Depp / Bloom characters.  That&apos;s time that could have been invested into making the Bad Guy (Cutler Beckett) seem a little more human -- more on him in a second.&lt;br /&gt;&lt;br /&gt;The final suggestion I make is to remove the whole Cutler Beckett death scene.  Yes I know, it was &lt;em&gt;wonderfully fun&lt;/em&gt; for you CGI animators to make that scene.  But without more development of his character, the audience just didn&apos;t care to watch him die in slow motion.  Although, in a perfect world, the entire sequence of events leading up to Cutler&apos;s death should have been replaced with something that.. doesn&apos;t suck?  Seriously.  Maybe it looked good on paper to drive home Beckett&apos;s arrogance by having him sail in against the Black Pearl alone, when he had 150 ships sitting there at his disposal.  But in practice it just looked incredibly stupid and embarrassing.  It&apos;s the sort of bone-headed decision that is so incomprehensibly stupid that it literally detracts from the rest of the movie by de-valuing the efforts of the &apos;heros&apos; in trying to thwart Beckett&apos;s sinister goals thorugh-out the rest of the film.  It&apos;s like &lt;em&gt;&quot;oh wow, you were getting man-handled by this complete turn-for-brains up until now?  Wow you pirates suck!&quot;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So, in conclusion:&lt;br /&gt;&lt;br /&gt;Good-bye Asian Pirate scene, and Good-bye Yun-Fat (sorry, nothing personal dude).  Good-bye to the Journey through the Arctic and over the cliff.  Pick up the movie with Sparrow talking to himself on the Black Pearl &lt;em&gt;(a brilliant scene!)&lt;/em&gt;, and introduce the rest of the cast/crew when they appear on the coast and rescue him.  Now lengthen the Sparrow/Beckett escape scene by 3-5 minutes &lt;em&gt;(also a brilliant scene, except it went by so fast that most people missed it while looking for their soda)&lt;/em&gt;.  Next, lengthen the Shipwreck Cove part by 3-5 minutes.  Finally, lengthen the whirlpool battle sequence by 7-12 minutes -- allowing the movie to incorporate a lot more &quot;Wrath of Khan&quot; style battle strategy leading into the whirlpool, etc. When you have fucking cool ideas like that you need to put some emphasis on it in order to pull the audience in milk them for all they&apos;re worth!  And finally, axe the &quot;me stupid!&quot; Cutler Beckett death scene and replace it with something more compelling and less insulting to both the audience and the characters of the movie.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Plot Inconsistencies?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;On Shipwreck Cove, Barbossa is apparently one of the nine pirate captains and thusly carries one of the nine pieces of eight... but wasn&apos;t he originally a first-mate to Jack Sparrow on the Black Pearl before he mutinied and left Sparrow on the island? (visit sea turtles story and all that)  Maybe I&apos;m wrong.  Anyways, the whole resurrection of Calypso was pretty sketchy.  Maybe if they had the opportunity to play on it more, it might have been a little more immersive.   (citing the removal of said scenes to give more time for other things!)  Oh well!</description>
  <comments>http://air-richter.livejournal.com/66485.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/66204.html</guid>
  <pubDate>Fri, 04 May 2007 18:10:18 GMT</pubDate>
  <title>CAPTCHA Mysteries Revealed!</title>
  <link>http://air-richter.livejournal.com/66204.html</link>
  <description>Ah yes, the CAPTCHA.  It is the front runner for this decade&apos;s &lt;em&gt;Stupidest New Word&lt;/em&gt;, not just for the fact that it&apos;s not a word and not pronounceable, and not just for the fact that it&apos;s an acronym for what is perhaps the most desperate attempt at making a simple concept sound worthy of research grants &lt;span style=&quot;font-size: smaller;&quot;&gt;(Completely Automated Public Turing test to tell Computers and Humans Apart, btw)&lt;/span&gt;.  What really brings the room together on this stupid word nomination is what it &lt;em&gt;represents&lt;/em&gt;: Which is little more than a hackish attempt to close the door on automated sign-up bots (ie, the sort that make fake emails, chat handles, ebay accounts, etc).&lt;br /&gt;&lt;br /&gt;And perhaps it&apos;s the fact that this concept is entirely hackish, and sports a name that is clearly just for show, which makes it so prone to hackish implementations that are more for show than actual CAPTCHA functionality.&lt;br /&gt;&lt;br /&gt;Alright, enough with the bitter finger-pointing, nose-rubbing, &lt;span title=&quot; I&amp;#39;s be betta&amp;#39; than all thou&amp;#39;all!&quot;&gt;better-than-thou (and thou too!) social commentary&lt;/span&gt;.  Let&apos;s move onto the meat, shall we: The rules of thumb in making good CAPTCHAs.  I said &lt;em&gt;good&lt;/em&gt; CAPTCHAs!  First thing we need to pound into everyone&apos;s heads:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Making things &quot;hard to read&quot; by human standards doesn&apos;t mean they are hard to read by software standards!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Now that&apos;s out of the way.  Next, the Rules:&lt;br /&gt;&lt;br /&gt;* Have characters overlap into neighboring character bounding boxes.&lt;br /&gt;&lt;br /&gt;Translation: In order for most bots to work, it has to be able to differentiate characters in order to test them against the character recognition software.  If the bot can&apos;t figure out what the characters actually are, it&apos;s ability to to OCR is severely penalized.  Thus it&apos;s best to have characters overlap, either physically or at the very least through a significant amount of horizontal warping.  This prevents the bot from cleanly analyzing each character individually.&lt;br /&gt;&lt;br /&gt;* Use fat text.&lt;br /&gt;&lt;br /&gt;Fat text is much easier for humans to read, but is actually more difficult for OCR to recognize.  Furthermore, you can do a lot more warping and overlapping when your letters are nice and beefy, and still have them retain human readability.&lt;br /&gt;&lt;br /&gt;* Contrast doesn&apos;t really matter!&lt;br /&gt;&lt;br /&gt;Computers have a very easy time analyzing and differentiating subtle color differences since they have access to something our eyes do not: the digital representation of said color.  While a human being would have no chance of reading a letter shaded [255,0,0] printed on a background shaded [254,0,0] -- a computer could read it in a snap!&lt;br /&gt;&lt;br /&gt;* Don&apos;t use real-word CAPTCHAs.&lt;br /&gt;&lt;br /&gt;The theory is that people have an easier time reading real-word text, which &lt;em&gt;in theory&lt;/em&gt; allows the CAPTCHA to be much sloppier and illegible... making it more difficult for software to decipher -- this thanks to our brain&apos;s ability to determine most words from only 25% - 50% of recognizable letters.  Unfortunately, software can use a superior technique: it can just sit there and test every word in the dictionary against the CAPTCHA image and weigh in on which one fits the image best.  In practice almost any word-based CAPTCHA -- even one that is almost entirely unreadable by a human -- can be solved with extraordinary accuracy by a computer.&lt;br /&gt;&lt;br /&gt;Now for some lesser &quot;suggestion&quot; brand items:&lt;br /&gt;&lt;br /&gt;* Apply a noise layer (1 to 5 pixel splotches) to the background that matches the text color.&lt;br /&gt;&lt;br /&gt;This is a handy and easy step to obfuscating the shape and bounding boxes of your characters without hindering readability.  For this suggestion to work, though, you need to be employing the &quot;fat text&quot; rule above.  Otherwise the text will be much more likely to be garbled into unreadabilty by a couple well-placed random noise specs.&lt;br /&gt;&lt;br /&gt;* Making a fancy random background only matters if you also alter color of the text.&lt;br /&gt;&lt;br /&gt;This goes along with the &apos;contrast doesn&apos;t matter&apos; rule above.  While fancy backgrounds can make it harder for us humans to read text, the computer can effortlessly mask out a background to black (or white) allowing it to see the text plain-as-day.  To software, one point of contrast is the same as 200 so long as there is a single color or small range to target.  If the text is a uniform color, it doesn&apos;t matter how many millions of colors are in the background.  A cracking program will just lock in on that one specific color used for the font and solve the pattern quickly and easily. Having both tie-dye text and background, however, can be extremely effective.  The trick here is doing it in such a way that the image still maintains a high degree of human readability.&lt;br /&gt;&lt;br /&gt;* Warping text is not a tell-all solution.&lt;br /&gt;&lt;br /&gt;The purpose of warping text is to cause &lt;em&gt;characters to overlap neighboring bounding box spaces.&lt;/em&gt;  Way too many times I see CAPTCHAs where the characters warped all to hell but nothing overlaps.  Crackers have little trouble recognizing warped letters, but amusingly &lt;em&gt;human readers have a great deal of trouble&lt;/em&gt;.  Yay for blocking users and letting the bots through.&lt;br /&gt;&lt;br /&gt;* Lines and Widgets: Mostly Good.&lt;br /&gt;&lt;br /&gt;Adding a random line or widget across the full body of text is mostly good.  &quot;Mostly&quot;? because it does work very well at invalidating bots&apos; attempts at identifying character bounding boxes.  But unless you&apos;re following the &apos;fat text&apos; rule above, this technique will obfuscate the majority of your images beyond human readability as well.  Some sites feel that 0% bot readability and 50% human readability is ok, and so long as images are easily refreshable I suppose they&apos;re on to something.  But in my practice I find the &apos;noise layer&apos; method mentioned above to be equally effective deterring bots sans the human redability woes (it&apos;s also eaiser to implement in code).  But yeah, if you&apos;re fat text&apos;ing things, either-or will do the job.  Thus: Mostly Good!&lt;br /&gt;&lt;br /&gt;Yay.  Now you can make good CAPTHCAs!  Or, at the very least, you can make fun of the bad ones -- the sort that frustrate you to no end as you try and fail repeated to pass them -- with an intellectual and pseudo-educated zeal that will have &lt;em&gt;Good Will Hunting&lt;/em&gt; fans jealous of your seemingly effortless anti-socialite rants.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;... I think I&apos;ll format this into pretty CSS HTML later. :)</description>
  <comments>http://air-richter.livejournal.com/66204.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/65799.html</guid>
  <pubDate>Sat, 24 Mar 2007 00:40:28 GMT</pubDate>
  <title>C# - Exception Handling is Kinda Slow</title>
  <link>http://air-richter.livejournal.com/65799.html</link>
  <description>Exception handling in any language can be awfully fun and convenient.  But there are pitfalls, namely in the &lt;em&gt;&lt;strong&gt;speed&lt;/strong&gt;&lt;/em&gt; department.  Yeah, I know.  Many of you optimization gurus out there will say &quot;yeah, like &lt;em&gt;duuuuh&lt;/em&gt; exception handling is slow&quot;, and Microsoft&apos;s own MSDN docs clearly state that exception handling is not meant to be used as a routine program operation:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 2px dashed orange; padding: 5px; margin-left: 1em; margin-right: 0.75em; background-color: #ffeebb;&quot;&gt;&lt;strong&gt;MSDN Entry for Exception:&lt;/strong&gt;
&lt;p style=&quot;font-family: Verdana; font-size: 12px;&quot;&gt;A significant amount of system resources and execution time are used when you throw or handle an exception. Throw exceptions only to handle truly extraordinary conditions, not to handle predictable events or flow control. For example, your application can reasonably throw an exception if a method argument is invalid because you expect to call your method with valid parameters. An invalid method argument means something extraordinary has occurred. Conversely, do not throw an exception if user input is invalid because you can expect users to occasionally enter invalid data. In such a case, provide a retry mechanism so users can enter valid input. 

&lt;p style=&quot;font-family: Verdana; font-size: 12px;&quot;&gt;In addition, do not throw an exception when a return code is sufficient; do not convert a return code to an exception; and do not routinely catch an exception, ignore it, then continue processing.&lt;/p&gt; &lt;/div&gt;&lt;br /&gt; .. but I think this bears repeating just &lt;em&gt;how slow&lt;/em&gt; exception handling is; partly due to the amount of exception handling I&apos;ve seen in various C# example code I&apos;ve come across in my travels.  It seems that many people have assumed that exception handling in C# is of near equivalent speed to other alternatives, such as bounds and null checking before using the variables in question (or simply don&apos;t care enough to bother adding such preemptive error checking).&lt;br /&gt;&lt;br /&gt;Take the following example.  Here we have a basic polymorph set of classes.  &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;MyClass&lt;/span&gt; inherits &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;BaseClass&lt;/span&gt;, and we have an array of &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;BaseClass&lt;/span&gt; -- some of which might be &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;MyClass&lt;/span&gt; and some of which might be another class (or null).&lt;br /&gt;
&lt;pre style=&quot;border:1px solid darkblue; background-color:lightgray; margin-left:1.5em; margin-right: 1.5em; padding:0.75em; font-family: Andale Mono,Courier New; font-size: 11px;&quot;&gt;abstract class BaseClass
{
    // Stuff!
}

class MyClass : BaseClass
{
    public int foobar;
}

BaseClass[] myListOrArray = new BaseClass[100];

// [.. Pretend the array is initialized somewhere ..]&lt;/pre&gt;

&lt;p&gt;Next are two possible methods for processing each element of this array:&lt;/p&gt;

&lt;div style=&quot;font-weight:bold&quot;&gt;Exception-Style:&lt;/div&gt;
&lt;pre style=&quot;border:1px solid darkblue; background-color:lightgray; margin-left:1.5em; margin-right: 1.5em; padding:0.75em; font-family: Andale Mono,Courier New; font-size: 11px;&quot;&gt;foreach( BaseClass g in myListOrArray )
{
    try
    {
        ((MyClass)g).foobar = value;

        // Other actions here
        // [..]
    }
    catch( InvalidCastException ) { }
    catch( NullReferenceException ) { }

}&lt;/pre&gt;

&lt;div style=&quot;font-weight:bold&quot;&gt;Old-Fashioned Style:&lt;/div&gt;
&lt;pre style=&quot;border:1px solid darkblue; background-color:lightgray; margin-left:1.5em; margin-right: 1.5em; padding:0.75em; font-family: Andale Mono,Courier New; font-size: 11px;&quot;&gt;foreach( BaseClass g in myListOrArray )
{
    BaseClass g = basevar as MyClass;
    if( g == null ) continue;
    g.foobar = 50;

    // Other actions here
    // [..]
}
&lt;/pre&gt;&lt;br /&gt;The benefit for the first method, in some people&apos;s eyes, is that it better adheres to the expected programming convention for an advanced OO-style language.  I might agree on some levels and in some circumstances.  It is arguably more readable than the old-fashioned method, but it&apos;s also slower.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;... and I do mean &lt;strong&gt;a lot slower.&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;By my rough guesstimate, the Exception method shown above takes a &lt;strong&gt;a few dozen times longer&lt;/strong&gt; to execute.  It&apos;s important to note that this is execution time as measured &lt;em&gt;outside&lt;/em&gt; the VStudio IDE.  Why not just run Release Mode code inside the IDE?  Because the VStudio exception handler is still attached to your program regardless of build, and that means any thrown exception will incur nearly a millisecond of CPU to process (more on that in a second).  When run outside the IDE, exceptions will be handled hundreds of times faster.  Since most people are writing code with the intent of it being run outside an IDE, this is the benchmark we should use. ;)&lt;br /&gt;&lt;br /&gt;My own code was running over about 2000 array entries-- executing a &lt;em&gt;single&lt;/em&gt; statement on each valid entry (as shown above).  Inside the IDE, it took &lt;strong&gt;several seconds&lt;/strong&gt; to execute the exception method.  That&apos;s several seconds just to run a basic assignment (&lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;variable = value;&lt;/span&gt;) 2000 times, which is so pathetic that even interpreted BASIC on a 286 can match or exceed it.  Outside the IDE, it ran at around 250 ms-- or about 80 exceptions per millisecond.  Not surprisingly, the standard (old-fashioned) method executed instantly over such a small collection of values; well under a millisecond by my guess.&lt;br /&gt;&lt;br /&gt;So the lesson we learn is:&lt;br /&gt;&lt;br /&gt;&lt;em style=&quot;font-size: smaller;&quot;&gt;(following block removed due to potential idiocy factor)&lt;/em&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration: line-through;&quot;&gt;Don&apos;t use exception handling in inner loops &lt;em&gt;ever&lt;/em&gt;.  Use manual bounds and value checking whenever possible for anything that is executed more than a few dozen times in succession.  And for that matter try and use manual checks to preemptively avoid exceptions whenever you can.  Using exceptions as some sort of basic error handling method is simply &lt;strong&gt;not good&lt;/strong&gt; for the prognosis of your code&apos;s execution speed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Don&apos;t use exceptions as a method for program flow-control &lt;em&gt;ever&lt;/em&gt;, and don&apos;t use exception &lt;em&gt;handlers&lt;/em&gt; in inner loops if its a situation where exceptions are likely to be thrown with any sort of regularity (you know, &lt;em&gt;just&lt;/em&gt; like the situation I illustrated above... for those who might have forgotten to &lt;em&gt;read the article&lt;/em&gt; before trying to actually think about what&apos;s being addressed here).  Actually! As far as my experience goes, that includes just about every possible situation where you&apos;d want to have a &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;try/catch&lt;/span&gt; &lt;em&gt;inside&lt;/em&gt; of a loop.  Anything else would be a critical error which would either be handled by an upper-level part of the program, or left to bubble up to the programmer/administrator directly.&lt;br /&gt;&lt;br /&gt;So yeah, don&apos;t use them inside inner loops, &lt;em&gt;ever.&lt;/em&gt;  Use manual bounds and value checking instead.  And for that matter, try and use manual checks to preemptively avoid exceptions whenever you can-- meaning in any situation where the &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;catch&lt;/span&gt; portion of your &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;try&lt;/span&gt; block is conspicuously &lt;em&gt;empty&lt;/em&gt;.  &lt;strong&gt;Using exceptions as some sort of &lt;em&gt;basic program flow control mechanism&lt;/em&gt; is simply not good for the prognosis of your code&apos;s performance.&lt;/strong&gt;  Or in other words: if the &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;catch&lt;/span&gt; clause is empty or consists only of a &lt;span style=&quot;font-family: Andale Mono, Courier New; font-size: 13px;&quot;&gt;continue&lt;/span&gt; statement, it&apos;s probably not a good use of exception handling... at least as far as C# is concerned.&lt;br /&gt;&lt;br /&gt;&lt;em style=&quot;font-size:smaller;&quot;&gt;(for details regarding strike through text and subsequent clarity revisions, visit the comments page!)&lt;/em&gt;</description>
  <comments>http://air-richter.livejournal.com/65799.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>15</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/65596.html</guid>
  <pubDate>Tue, 13 Mar 2007 11:24:35 GMT</pubDate>
  <title>C# Tips -- Random Lists</title>
  <link>http://air-richter.livejournal.com/65596.html</link>
  <description>&lt;strong&gt;[C# Content]&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There comes a time in a programmer&apos;s life where he might want to randomize a list or array.  This usually entails situations where it&apos;s necessary to process every entry in an array exactly once, randomly.  Standard random access into the array while maintaining a separate list of &quot;accessed indexes&quot; is effective, but sloppy; and can be quite sluggish on larger arrays.&lt;br /&gt;&lt;br /&gt;A better solution is to use .NET&apos;s &lt;strong&gt;SortedDictionary&amp;lt;&amp;gt;&lt;/strong&gt; generic class to build a new randomized list, and then you can use &lt;strong&gt;foreach&lt;/strong&gt; to iterate through the new list.  To make this process as generally simple as possible, I created the following helper class:&lt;br /&gt;&lt;pre style=&quot;border:1px solid darkblue; background-color:lightgray; margin-left:1.5em; margin-right: 1.5em; padding:0.75em; font-family: Andale Mono,Courier New; font-size: 11px;&quot;&gt;public class RandomDictionary&amp;lt;T&amp;gt; : SortedDictionary&amp;lt;double, T&amp;gt;
{
    protected Random m_random = new Random();

    public RandomList() : base()
    {
    }

    public RandomList( List&lt;t&gt; list ) : base()
    {
        AddRange( list );
    }

    public void Add( T inway )
    {
        while( true )
        {
            try { base.Add( m_random.NextDouble(), inway ); }
            catch { continue; }
            break;
        }
    }

    public void AddRange( IEnumerable&amp;lt;T&amp;gt; itemlist )
    {
        foreach( T inway in itemlist )
        Add( inway );
    }
}&lt;/pre&gt;&lt;br /&gt;Usage is simple.  You create an instance of the above class and xfer your non-random list into it.  For convenience you can just pass in an entire collection using &lt;strong&gt;AddRange&lt;/strong&gt; (including &lt;em&gt;List&amp;lt;T&amp;gt;&lt;/em&gt; types or arrays).  For fine-tune control you can add items individually using &lt;strong&gt;Add( item )&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;&lt;pre style=&quot;border:1px solid darkblue; background-color:lightgray; margin-left:1.5em; margin-right: 1.5em; padding:0.75em; font-family: Andale Mono,Courier New; font-size: 11px;&quot;&gt;MyType[] somearray = new MyType[50];
List&amp;lt;MyOtherType&amp;gt; somelist = new List&amp;lt;MyOtherType&amp;gt;();

// populate your arrays / lists with data!

RandomDictionary&amp;lt;MyType&amp;gt; randomlist1 = new RandomDictionary( somearray );
RandomDictionary&amp;lt;MyOtherType&amp;gt; randomlist2 = new RandomDictionary( somelist );

// Or populate them this way:

randomlist1.AddRange( somearray );
randomlist2.AddRange( somelist );

// Or populate them the manual way, while applying a filter:
// (only some elements form the list are added to the new random list)

foreach( MyOtherType crap in somelist )
{
    if( crap.foobar != something_in_particular )     // filter the list
        randomlist2.Add( crap );
}&lt;/pre&gt;&lt;br /&gt;Finally!  Iterating over the new randomized list is as simple as this:&lt;br /&gt;&lt;pre style=&quot;border:1px solid darkblue; background-color:lightgray; margin-left:1.5em; margin-right: 1.5em; padding:0.75em; font-family: Andale Mono,Courier New; font-size: 11px;&quot;&gt;foreach( KeyValuePair&amp;lt;double,MyType&amp;gt; kvp in randomlist1 )
{
    MyType var = kvp.Value;

    // do important things here!
}&lt;/pre&gt;
As an exercise, you could implement the &lt;strong&gt;IEnumerable&lt;/strong&gt; interface and an &lt;strong&gt; IEnumerator&lt;/strong&gt; private class, enabling you to iterate the loop without having to use the &lt;strong&gt;KeyValuePair&lt;/strong&gt; layer.  This would be useful only because the &lt;em&gt;key&lt;/em&gt; portion of our random list is effectively worthless, and so it would simplify the &lt;strong&gt;foreach&lt;/strong&gt; loop syntax.</description>
  <comments>http://air-richter.livejournal.com/65596.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/65355.html</guid>
  <pubDate>Wed, 07 Mar 2007 16:48:19 GMT</pubDate>
  <link>http://air-richter.livejournal.com/65355.html</link>
  <description>I pulled this from an entertain (and creepy) article about Turkey banning &lt;strong&gt;YouTube&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;padding: 5px; border: 1px dashed orange; background-color: #ffffc0; margin-left: 1.5em; margin-right: 1.5em; font-family: verdana;&quot;&gt;Turkey wishes to join the EU in the next round of enlargement but has been criticised for its failure to safeguard freedom of expression. The country’s most famous author, Orhan Pamuk, faced up to three years in jail after being charged with “insulting Turkishness” ...&lt;/div&gt;&lt;br /&gt;Seems outlandish in its own right.  What is &quot;insulting Turkishness&quot; anyway?  Oh you just had to ask:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;padding: 5px; border: 1px dashed orange; background-color: #ffffc0; margin-left: 1.5em; margin-right: 1.5em; font-family: verdana; font-weight: bold; font-style: italic;&quot;&gt;... after talking to a Swiss newspaper about Turkey’s human rights record.&lt;/div&gt;&lt;br /&gt;Yup.  Make mention of Turkey&apos;s liberal use of prison cells to regulate individualistic expressions, and earn yourself a tour of a jail cell.  I find that few things create a martyr quite as effectively as bitter sardonic irony such as this.  And not surprisingly:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;padding: 5px; border: 1px dashed orange; background-color: #ffffc0; margin-left: 1.5em; margin-right: 1.5em; font-family: verdana;&quot;&gt;The case was dropped in January after international condemnation.&lt;/div&gt;</description>
  <comments>http://air-richter.livejournal.com/65355.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/64842.html</guid>
  <pubDate>Mon, 26 Feb 2007 04:17:24 GMT</pubDate>
  <title>Movie ReviewsTime!  B-to-the-T!</title>
  <link>http://air-richter.livejournal.com/64842.html</link>
  <description>&lt;div style=&quot;font-family: verdana; background:#e0d0ff; border:1px solid blue; padding:4px; text-align: center; width:17em;&quot;&gt;&lt;strong style=&quot;font-size: larger;&quot;&gt;Bridge to Terabithia&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;(.. or B-to-the-Tee ..)&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;It&apos;s movie review time!  Gather &apos;round folks, and as always: &lt;em&gt;&lt;strong&gt;Spoilers Galore!&lt;/strong&gt;&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;First, my overall rating/score.  I&apos;m a practical fellow and don&apos;t see the point in making people read my lengthy plethora of &lt;em&gt;(admittedly well-written!)&lt;/em&gt; bitch-ranting just to figure out what the reviewer thought of the thing as a whole.&lt;br /&gt;&lt;br /&gt;&lt;div title=&quot;It&amp;#39;ll be airing on the Disney Channel in 3 Months anyway&quot; style=&quot;font-family: verdana; background:#ffe0bb; border:1px solid orange; padding: 4px; width: 15em;&quot;&gt;&lt;div style=&quot;color: white; font-weight:bold; background-color: #ff3030; padding: 3px;&quot;&gt;Score: D&lt;/div&gt;&lt;span style=&quot;color:darkred&quot;&gt;Conclusion: Watch &lt;strong&gt;Pan&lt;/strong&gt; and/or &lt;strong&gt;The NeverEnding Story&lt;/strong&gt; instead.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color:gray; font-size: smaller;&quot;&gt;Sub-condition: Bonus points if you&apos;re a girl and like tear-jerkers &lt;em&gt;(B- score)&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Quick Plot Summary&lt;/strong&gt;&lt;br /&gt;This movie is an Idealist&apos;s dream.  At the roots, it is all about how wonderful life would be if we&apos;d all just live by the idealistic &lt;a href=&quot;http://en.wikipedia.org/wiki/Secular_humanism&quot; title=&quot;.. the new modern religion, of sorts.&quot;&gt;&lt;em&gt;Secular Humanist&lt;/em&gt;&lt;/a&gt; model.  It even goes so far as to throw some direct insults at the Bible (yay!) and to place the value of the life of rodent vermin above that of our own family (boo!).  On the top it&apos;s basically &lt;em&gt;The Neverending Story&lt;/em&gt; (good!) but without the story part (what?).  Yeah.  It preaches the importance and value of a child&apos;s imagination, but unlike The Neverending Story, there&apos;s no &lt;em&gt;actual&lt;/em&gt; imaginative story to go along with it!  Oops.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(.. also, the Neverending Story has waaay better music ..)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Long Plot Summary&lt;/strong&gt;&lt;br /&gt;Jesse is a boy.  Jesse loves to run.  See Jesse run.  Why am I writing this way?  It is supposed to be a kids story after all.  Anyways!  Enter Leslie, a new girl in school who proceeds to outrun Jesse and everyone else in school -- while wearing punk&apos;ish army boots.  That&apos;s skill!&lt;br /&gt;&lt;br /&gt;Leslie is a kid with an (over?)active imagination and surpassingly wealthy parents.  Jesse is a kid with an (over?)dose of reality; poor farmer-type parents who spend most of their time trying to make ends meet.. bitchy, lazy, spoiled (and &lt;em&gt;hot&lt;/em&gt;) older sisters.. and a slew of bullies at school who hate him because he&apos;s poor.  The two hook up and life becomes totally awesome for both of them.&lt;br /&gt;&lt;br /&gt;They wander into the forest each evening, where Leslie subjects Jesse to her endless imaginative banter.  Eventually he starts to embrace her idle mental wanderings and from there their imaginations start to come to life... sorta.  Ok, not at all.  Mostly it just leads them to do a whole slew of things varying from kinda stupid to &lt;em&gt;really fucking stupid.&lt;/em&gt;  But it&apos;s ok!  You see... because they&apos;re kids and imaginations are important, and freedom is special and... umm.. I feel like I&apos;m losing this argument.&lt;br /&gt;&lt;br /&gt;So Leslie convinces Jesse to do a lot of things he probably shouldn&apos;t do, using unequivocally irrefutable arguments like this one:&lt;br /&gt;&lt;div style=&quot;border: 1px solid orange; background-color:#ffffc0; padding: 5px; margin: 2em;&quot;&gt;You&apos;re willing to stand up to a giant ugly troll in the forest, but you&apos;re afraid of a middle school girl?&lt;/div&gt;Grand.  Somehow I don&apos;t think picking the toe-jam from an imaginary troll qualifies you for confronting bullies at school, even in the (un?)developed mind of a middle schooler.&lt;br /&gt;&lt;br /&gt;Anyways!  The two build a fancy treehouse (&lt;em&gt;it&apos;s a &quot;Tree Kingdom&quot;!&lt;/em&gt;) and become exceptionally-well bonded in the process and then...&lt;br /&gt;&lt;br /&gt;Leslie Dies.  &lt;em&gt;spoiler warning!  oops, too late! haha.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;How?  By swinging over a raging creek using crappy old dangerous rope.. one that she had convinced Jesse to swing on too... one that Jesse, in the &lt;em&gt;beginning of the movie&lt;/em&gt;, said was too dangerous to swing on!  (Jess is a smart kid!  Lesile?  Not so much. -_-)  Why were they swinging on it?  Because Leslie said it was a &quot;cool magical rope into a secret kingdom where they were the rulers&quot;.  See note above about doing &lt;em&gt;really stupid things&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Now we get the other popular lesson of life: That death is not our fault.  It happens, love life for what it was, don&apos;t blame yourself, etc.  And sure it wasn&apos;t Jesse&apos;s fault, but it &lt;strong&gt;sure as hell was Leslie&apos;s fault.&lt;/strong&gt;  Seriously.  Having a vivid imagination is no excuse for &lt;em&gt;not&lt;/em&gt; getting someone&apos;s help to fix up your stupid magic rope.  Fix rope first, imagine it&apos;s magical second.  Priorities?  &lt;em&gt;Anyone?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;As a tribute to his dead friend, Jesse builds a bridge across the river one day after school, using a hand saw and his bare hands -- one that&apos;s so nifty-cool it would have easily taken an entire stage crew two days to construct.  A kid that can do that probably more impressive than a kid winning a race while wearing army boots.&lt;br /&gt;&lt;br /&gt;The final insult to my sense of higher reason: once Leslie dies, now all sorts of things that weren&apos;t important before become important!  Oh wee, now Jesse is finally willing to stand up for his friends at school and sucker punch the bully - and likewise his teachers support him for doing it since his friend is like &lt;em&gt;dead&lt;/em&gt; after all.  (I happen to know from experience that standing up for your friends in school without them first &lt;em&gt;dying&lt;/em&gt; is &lt;em&gt;not&lt;/em&gt; ok, and gets you detention or worse... something Jesse also mentioned earlier in the movie.  Smart kid).&lt;br /&gt;&lt;br /&gt;And that&apos;s the long summary.  This is a movie with entirely messed up priorities.  It means well, and is modeled from the ground-up after your basic after-school special -- but fails to deliver any practical message what-so-ever.  Furthermore, it lacks any compelling imaginative content, despite the fact that it&apos;s supposed to be glorifying the beauty of imaginations.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Tangibles&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is where I judge the movie for production quality, casting, etc.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Production quality:&lt;/strong&gt; This movie was &lt;em&gt;obviously&lt;/em&gt; made with TV and home video in mind as the primary methods of distribution.  The screen ratio is the next closest thing to your basic TV set (about 1.3:1 - TVs are 1.2:1).  At least 5&apos; of the theater screen to either side was simply unused.  That&apos;s 10&apos; of unused screen.  Not very theatrical.  Direction is also very TV-ish.  Shots are plainly sequenced, there is little use of panning, and there absolutely no dramatic imagery.  Everything&apos;s cut-and-dry... the sort of simplified screenplay you&apos;d expect from a series like &lt;strong&gt;The OC.&lt;/strong&gt;  Granted, good movies can still come in plain packages... but I can&apos;t give it any bonus points here either.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Casting&lt;/strong&gt;: The children are casted excellently.  All kids look and act like elementary/middle schoolers (except for Leslie -- more on that in a minute).  Overall very authentic.  The casting of adults highlighted one of my pet peeves, though: Everyone else was just too damned pretty.  This applies to everyone from Jesse&apos;s older sisters to the miserable old bag-of-bones teacher.. who was, at best, guilty of an over-bearing hairdo and bad make-up.  I mean, I wish as much as the next person that all of us - and our parents! - looked like &lt;span title=&quot;.. but not supermodels. They&amp;#39;re creepy!&quot;&gt;J.C.Pennys catalog models.&lt;/span&gt;  But for me, that kind of casting in movies hurts the immersiveness.  Maybe I&apos;m guilty of having a bad imagination.&lt;br /&gt;&lt;br /&gt;Back to Leslie.  Problem?  Her make-up.  All the other middle school girls were intentionally given amateurish makeup jobs, which helped them look more authentic.  Leslie clearly had a professional makeup job, and it was painfully obvious every time they did a close-up on her face.  Aside from making her look a lot older than she was (the Mini Miss America effect), a character of her personality type wouldn&apos;t have used make-up at all anyway.  But that&apos;s the movies... you can&apos;t have your stars &lt;em&gt;not&lt;/em&gt; looking their absolute bestest.  They gotta look good so that their casting value for future movies goes up.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Music:&lt;/strong&gt;  Sucks.  Plain and simple &lt;em&gt;sucks&lt;/em&gt;.  The music is cliche hollywood &lt;span title=&quot;muzak without any original catchy pop theme to butcher.&quot;&gt; borezak &lt;/span&gt;--  uninspired, used at the wrong times, and is mixed too loudly when it is used at the right or wrong times.&lt;br /&gt;&lt;br /&gt;So yeah, do yourself a favor:  Watch &lt;strong&gt;Pan&lt;/strong&gt; or &lt;strong&gt;Neverending Story&lt;/strong&gt; instead.  Those are quality movies about children, imaginations, and school bullies that &quot;get it&quot; in the end.  This one...? not so great.</description>
  <comments>http://air-richter.livejournal.com/64842.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/64557.html</guid>
  <pubDate>Thu, 22 Feb 2007 19:20:44 GMT</pubDate>
  <title>Jesus.</title>
  <link>http://air-richter.livejournal.com/64557.html</link>
  <description>&lt;strong&gt;And now for your moment of Zen:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style=&quot;border: 1px solid orange; background-color: #ffffc0; padding:4px; padding-left: 1em; padding-right: 1em;&quot; target=&quot;blank&quot; href=&quot;http://www.holyfamilystore.com/397_Jesus_Sports_Figures_34Jesus_is_My_Coach34.asp&quot; title=&quot;.. because my dad doesn&amp;#39;t have time for me.&quot;&gt;Jesus is My Coach.&lt;/a&gt; &lt;em&gt;(Is there nothing this guy can&apos;t do?!  Jesus!)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Is it me, or does &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Golf Jesus&lt;/span&gt; look a little &lt;em&gt;too&lt;/em&gt; friendly?  It reminds me more of one of those cliche romantic scenes where some guy uses a bad golf swing as an excuse to put the moves on some girl.&lt;br /&gt;&lt;br /&gt;On the other hand, &lt;span style=&quot;color: red;  font-weight: bold;&quot;&gt;Basketball Jesus&lt;/span&gt; is showing off a sweet Kevin McHale-esq hook shot.  Very classy, Jesus!  Even if he does have a bit of an unfair height advantage.&lt;br /&gt;&lt;br /&gt;Also!  I see a few areas yet untapped:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: red;  font-weight: bold;&quot;&gt;Rifleman Jesus&lt;/span&gt; - Bagging a trophy deer with the kids!&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: red;  font-weight: bold;&quot;&gt;NASCAR Jesus&lt;/span&gt; - or, at least, a go-kart Jesus.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: red;  font-weight: bold;&quot;&gt;Angler Jesus&lt;/span&gt; - reeling in a catfish or wide-mouth bass.
&lt;/ul&gt;</description>
  <comments>http://air-richter.livejournal.com/64557.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/64340.html</guid>
  <pubDate>Thu, 22 Feb 2007 19:12:55 GMT</pubDate>
  <title>All-star reality.</title>
  <link>http://air-richter.livejournal.com/64340.html</link>
  <description>&lt;strong&gt;All-Star Games&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Every major american sport has one.  The NFL calls theirs a &quot;pro-bowl&quot; because.. well.. pigskins and bowls have some sort of intertwining love relationship.  Other than that, they&apos;re all the same -- and by the same I mean that &lt;em title=&quot;..except me.  I kinda like &amp;#39;em.&quot;&gt;no one likes them.&lt;/em&gt;  The owners don&apos;t like them.  The media doesn&apos;t like them. The fans don&apos;t like them.&lt;br /&gt;&lt;br /&gt;.. So then, who likes these stupid things enough to keep holding them every year?&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:95%; background-color: #ffffc0; padding:4px; padding-left: 1em;&quot;&gt;&lt;strong&gt;The Media Factor&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;One part is the media (TV and news venues).  All-star games are purely meant to be media events, and &lt;em&gt;on paper&lt;/em&gt; they look irresistibly attractive: Star power equates to viewer power.  When a team like the Denver Nuggets or LA Lakers pick up a couple star players, their ratings skyrocket.  So then, one could safely assume that having an entire &lt;em&gt;game&lt;/em&gt; of stars would mean &lt;em&gt;lots of ratings&lt;/em&gt;!  Except... well... it never does.  Woops!&lt;br /&gt;&lt;br /&gt;Turns out that fans don&apos;t watch stars just because they&apos;re stars that do fancy stuff on the court/field.  They watch stars because stars &lt;em&gt;help their teams win games&lt;/em&gt;.  Stars carry their teams with their extraordinary play, and there-in lies the source of inspiration from sports: overcoming the odds.  Watching those same people throw a Globetrotter-esq exhibition game is.. well.. about as media worthy as your average Harlem Globetrotter game.  &lt;em&gt;(translation: good for the kids near the local gymnasium, and that&apos;s about it).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:95%; background-color: #ffffc0; padding:4px; padding-left: 1em;&quot;&gt;&lt;strong&gt;The League Factor&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;Leagues see all-star games much the same as the media does: lots of potential, if only they could figure out how to make it get more ratings.  The game is relatively cheap for the league, since players are pretty well obligated via public relations to make their appearances (if anything, the owners have to foot the bill if the players have contractual all-star appearance bonuses).  In turn, the league gets to set up a fan-centric marketing campaign for their game.  They also get little bonus gimmicks like website attractions (all-star voting), that provide small but measurable benefits almost year-round.  But mostly the League is doing the same thing the Media is: disparately trying to turn a non-event into a major star-studded media event.  (it&apos;s like cultivating a farm, only you&apos;re planting seeds of &quot;viewership attraction&quot;)&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:95%; background-color: #ffffc0; padding:4px; padding-left: 1em;&quot;&gt;&lt;strong&gt;The City Factor&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The city is perhaps the only participating factor that may, in fact, love all-star games.  The city itself that holds the all-star game in question usually stands to benefit.  Any time you have 50+ multi-million dollar sports stars in the same place for 3+ days in a row, it&apos;s a good thing (fans or not!).  And unlike the Olympics, most all-star games don&apos;t require much in the way of special costly infrastructure.  The usual set of work-a-day arenas and hotels does the job just fine.&lt;br /&gt;&lt;br /&gt;But even here, cities find ways to bitch.  The game never draws quite as much business as the league leads the city to believe, and furthermore, multi-million dollar sports stars have a habit of causing trouble even as all that money burns big holes in their pockets.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;width:95%; background-color: #ffffc0; padding:4px; padding-left: 1em;&quot;&gt;&lt;strong&gt;Now for the Funny Part&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;What&apos;s funny is the media&apos;s &lt;em&gt;method&lt;/em&gt; of turning a non-news event into a major news event.  How, you ask?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;.. by writing tirelessly about how the event is, in fact, &lt;em&gt;not in any way news-worthy!&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;That&apos;s right!  All-star games are not news-worthy.  No one cares, except to be irate over being told that the all-star game would somehow be cool when it isn&apos;t actually cool at all.  But the media is already committed to cover the game and try their best to turn it into a media-worthy event, because the decision was made that it was an area where they could &quot;farm&quot; additional viewership (the whole star-power == ratings thing).  So every year they rattle on about how disappointing the all-star game is, because there simply isn&apos;t anything else inspirational to write about.  Boring games make for boring news.&lt;br /&gt;&lt;br /&gt;Wait, it gets better!&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Every year all-star ratings drop.&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Well, big surprise there.  The media writes a plethora of articles about how the all-star game isn&apos;t worth watching, and then the subsequent year it becomes news that the all-star game lost ratings?  Brilliant.  Tell people not to come, and then make headlines when they don&apos;t show up!  I do love a good media blitz.&lt;br /&gt;&lt;br /&gt;Anyways, I kind of like all-star games since I actually kind of like an occasional sloppy exhibition pick-up game format.  Players in the all-star game are actually playing just to have fun &lt;em&gt;playing&lt;/em&gt;.  It&apos;s not inspirational, and it lacks completely in the &quot;media-coverage worthy&quot; department.  Nope.  It&apos;s just fun to watch in the same capacity that it can be fun to watch the local kids mess around on the local ball court.  But unfortunately that doesn&apos;t make for very good TV.  TV depends on quality ratings, and quality ratings are people who like to spend money.  And &quot;casual pleasures&quot; people like me are inherently low-spenders, and thus &lt;em&gt;not&lt;/em&gt; good ratings type people. ;)</description>
  <comments>http://air-richter.livejournal.com/64340.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/64154.html</guid>
  <pubDate>Mon, 12 Feb 2007 04:03:26 GMT</pubDate>
  <title>Diamonds are for Burning.</title>
  <link>http://air-richter.livejournal.com/64154.html</link>
  <description>Not worthy of an update, but I have nothing else to do at the moment:&lt;br /&gt;&lt;br /&gt;&lt;a title=&quot;Suggestion: Do not support those things that no one likes.&quot; href=&quot;http://www.latimes.com/news/nationworld/politics/la-na-giuliani11feb11,1,3653102.story?coll=la-news-politics-national&quot;&gt;Giuliani praises Bush&apos;s Iraq policy, foresight -- and signs away any hope of a Presidential Bid in 2008&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also!  Interesting discovery! I haven&apos;t time to copy down and post the long series of links that would add solid credibility to this following entry, but then I&apos;ve never been one to give a lot of effort to credibility anyway.  What is it, you ask?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Diamonds are Combustible&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Yeah.  Seriously.  Did you know that you can burn diamonds?  You can burn graphite too.  In fact, graphite is coal in its purest form, and coal (of course) burns quite well.  It&apos;s just a bastard to get lit.  Same goes for diamonds: roughly 650C degrees of heat and an oxygen-rich environment is required, but given those two things, diamonds burn.&lt;br /&gt;&lt;br /&gt;... and burn well.  Diamonds leave &lt;em&gt;absolutely no&lt;/em&gt; visible smoke, ash, or residue.  When burned, a diamond turns into heat and CO2.  Nothing else.  Neat, eh?&lt;br /&gt;&lt;br /&gt;The neater part is that there is a &lt;em&gt;urban myth of sorts&lt;/em&gt; out there that pure forms of carbon -- graphite and diamonds -- &lt;em&gt;cannot&lt;/em&gt; combust.  The wikipedia&apos;s entries on coal, graphite, and diamonds leads you believe that they either do not burn or burn fairly inefficiently.  Various scholastic forums, the sort where kids post questions and mod/teacher types answer them, sport a variety of inconsistent answers -- the most frequent being the following &lt;em&gt;(in paraphrased summary)&lt;/em&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;border: 1px solid orange; background-color: #ffffc0; padding: 0.75em; font-family: verdana; font-weight: bold; font-size: 13px;&quot; title=&quot;quoted from a self-proclaimed school teacher.&quot;&gt;Pure carbon does not burn.  The combustion process in a carbon-based material such as coal is made possible by the presence of &lt;em&gt;hydrocarbons&lt;/em&gt;, which release energy when broken.  Diamonds and graphite have no hydrogen and so they will not burn.&lt;/div&gt;&lt;br /&gt;Fascinating.  I found this basic definition in no less than three places.  But it&apos;s not quite right and... well.. isn&apos;t right at all in a sense.  The hydrocarbons contribute to &lt;strong title=&quot;the rate at which something ignites, or goes boom!&quot;&gt;&lt;em&gt;flammability&lt;/em&gt;&lt;/strong&gt;, but not &lt;strong title=&quot;I&amp;#39;m spontaneously combustible.&quot;&gt;&lt;em&gt;combustibility&lt;/em&gt;&lt;/strong&gt;.  That is, the more hydrocarbons, the easier it is to ignite the substance in question.  Gasoline and propane have lots of hydrocarbons, for example.  They can be set a-blaze with little more than a spark.  Anthracite coal does &lt;em&gt;not&lt;/em&gt; have many hydro-carbons, and requires nothing less than a sustained bonfire to be ignited.&lt;br /&gt;&lt;br /&gt;So where does this myth of the un-burnable diamond come from?  My guess is some poorly-worded middle school text books.  It wouldn&apos;t be the first time.  Ironically, the original experiments performed on diamonds to determine their composition -- waaaay back in the 18th century -- were to &lt;em&gt;burn them&lt;/em&gt;.  Simple chemistry, really.  Almost all carbon is combustible, and depending on the impurities produces various types of ash, smoke, etc.  So scientists burned a diamond and got the exact same thing (pure CO2) that they got when they burned graphite.  Conclusion:  Same shit.  So the reason we know diamonds are carbon is because we &lt;em&gt;know carbon is combustible&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;.. and now that we know diamonds are carbon, I guess we can safely forget that carbon is, in fact, combustible.&lt;br /&gt;&lt;br /&gt;Final note of scientific mystery, perhaps dispelling other urban myths:  diamonds are actually the &lt;em&gt;unstable&lt;/em&gt; version of carbon.  Graphite (coal) is the &quot;natural&quot; state, and given enough time sans-pressure that created the diamond in the first place, a diamond will turn into a block of graphite.  It takes a really long time of course... a few million years or something.  But still...&lt;br /&gt;&lt;br /&gt;... diamonds aren&apos;t forever, dude.</description>
  <comments>http://air-richter.livejournal.com/64154.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/63889.html</guid>
  <pubDate>Thu, 08 Feb 2007 03:19:46 GMT</pubDate>
  <title>Photogenic Earthscape</title>
  <link>http://air-richter.livejournal.com/63889.html</link>
  <description>A rare occurrence here at the Box:&lt;br /&gt;&lt;br /&gt;&lt;strong title=&quot;&quot;&gt;A rare glimpse of non-digital reality.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;These photos taken very recently during a &lt;em&gt;(still persisting)&lt;/em&gt; cold snap here in the great northern tundras of Pennsylvania&apos;s Endless Mountains.  The river pictured is the Susquehanna.  The dog is Mirra.  Click for full versions:&lt;br /&gt;&lt;table width=&quot;88%&quot; border=&quot;0&quot; cellspacing=&quot;3&quot; cellpadding=&quot;3&quot;&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/creekway.jpg&quot; title=&quot;The creek is a bit icy.&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/creekway.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/cliffdown472.jpg&quot; title=&quot;... the blue &amp;amp; white-spotted body is the river.&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/cliffdown472.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/bridge.jpg&quot; title=&quot;Same creek from above.&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/bridge.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/railroad478.jpg&quot; title=&quot;See Spot run!&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/railroad478.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/icecliff.jpg&quot; title=&quot;Warning: Do not stand under the ton of sharp pointed hanging ice.&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/icecliff.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/mountaindog.jpg&quot; title=&quot;Caution: Objects in picture are steeper than they appear!&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/mountaindog.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/snowdog.jpg&quot; title=&quot;Dog.&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/snowdog.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;a href=&quot;http://www.hour13.com/airpics/lj/river2007/roadhome.jpg&quot; title=&quot;The path between home and river, now covered with frozen crystallized water particulates.&quot;&gt;&lt;img src=&quot;http://www.hour13.com/airpics/lj/river2007/thumbs/roadhome.jpg&quot;&gt;&lt;/img&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;</description>
  <comments>http://air-richter.livejournal.com/63889.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://air-richter.livejournal.com/63666.html</guid>
  <pubDate>Tue, 06 Feb 2007 11:27:27 GMT</pubDate>
  <title>Dementia</title>
  <link>http://air-richter.livejournal.com/63666.html</link>
  <description>Uh oh, looks like I might be in trouble: &lt;a href=&quot;http://www.cbsnews.com/stories/2007/02/05/health/webmd/main2437045.shtml&quot; title=&quot;... but I can&amp;#39;t remember why I&amp;#39;m posting this.&quot;&gt;823 Old Geezers Agree: Loneliness can lead to Dementia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;... on the bright side, once you lose your mind you won&apos;t remember how much suckage you experienced during your lonely and isolated life.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Of unrelated rant-worthy material:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The whole use of &quot;Alzheimer&apos;s&quot; in research like this is subject to the wrath of my unending suspicion.  Alzheimer&apos;s is indeed the most prevalent of all forms of dementia, however there is currently no &lt;em&gt;sure fire&lt;/em&gt; way to confirm someone as having the disease or some other form of dementia without performing an autopsy on the brain.  Ironically, this very article I linked above points out that many of the people who developed Alzheimer&apos;s showed &lt;em&gt;no physical signs&lt;/em&gt; of the disease when a brain autopsy was performed.&lt;br /&gt;&lt;br /&gt;.. so that begs to ask the question: Is it really Alzheimer&apos;s?  IF it fails the autopsy test then, technically, it is one of the other forms of dementia.&lt;br /&gt;&lt;br /&gt;My take: Alzheimer&apos;s is a media catch word.  The researchers&apos; publicist (yes, many research groups hire publicists these days) no doubt pointed out that financially &quot;Alzheimer&apos;s&quot; research gets published and pays, while &quot;dementia&quot; research is a much harder sell.  Historically you can see this happen a lot, where a medical term or condition becomes a media-centric buzzword and eventually loses association with its original meaning; instead encompassing a much broader field than it originally intended due to people using it inappropriately in order to gander more attention.</description>
  <comments>http://air-richter.livejournal.com/63666.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
</channel>
</rss>
