<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc=" http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>briancarper.net (λ) (Tag: Rant)</title><link>http://briancarper.net/tag/118/rant</link><description>Some guy's blog about programming and Linux and cows.</description><item><title>Time to pay the Windows tax</title><link>http://briancarper.net/blog/time-to-pay-the-windows-tax</link><guid>http://briancarper.net/blog/time-to-pay-the-windows-tax</guid><pubDate>Sun, 25 Oct 2009 01:39:13 -0700</pubDate><description>&lt;p&gt;Now that Windows 7 is out, it's only a matter of time before I'm forced to buy it.  I don't want it.  I won't use it.  But as a programmer, it's nearly impossible to survive without owning a copy of the &lt;del&gt;latest and greatest&lt;/del&gt; latest version of Windows.  &lt;/p&gt;

&lt;p&gt;Why?  Because if you want a job, unless you're one of the fortunate few who get to pick your development platform AND dictate the platform for all of your users, you need to know Windows.  You need to know how to navigate around it when you're forced to use it on your work computer.  You need to know how to troubleshoot (to some degree) your users' Windowsy problems as they try to install and use your program.  If you want to communicate with people in the world, inevitably they're going to send you a bunch of MS Word documents and nothing is ever going to read them properly 100% of the time except MS Word itself.&lt;/p&gt;

&lt;p&gt;I have a copy of Vista Business on my laptop which I am deeply ashamed for having bought, but at the same time it helped me land a very nice work contract.  Without being able to VPN into the company's network (via some MS proprietary VPN software that I tried VERY hard and failed to get to work in Linux) I wouldn't have been able to complete the job on time, and I might be living in a cardboard box under a bridge right now.&lt;/p&gt;

&lt;p&gt;For this contract I actually developed the app at home entirely in Linux.  I used only Linux-centric tools (Vim, Gimp, Firefox, Ruby etc.).  Thank God most of those tools have Windows versions, because deploying it to Windows land at work and working on it there when necessary was (mostly) trivial.  But I still needed Windows to finish the job.  And all the users of this app were Windows users.  The specs for the app were sent to me in Word and Excel documents.  The website frontend is being viewed in IE much of the time in spite of my pleadings to the contrary, so I have to support it.&lt;/p&gt;

&lt;p&gt;Such is the life of a programmer.  I'll probably buy Windows 7 eventually but it'll sting.  It'll &lt;em&gt;rankle&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Lisp Syntax Doesn't Suck</title><link>http://briancarper.net/blog/lisp-syntax-doesnt-suck</link><guid>http://briancarper.net/blog/lisp-syntax-doesnt-suck</guid><pubDate>Wed, 08 Apr 2009 04:03:12 -0700</pubDate><description>&lt;p&gt;I spend a lot of time talking about what I don't like about various languages, but I never talk about what I do like.  And I do like a lot, or I wouldn't spend so much time programming and talking about programming.&lt;/p&gt;

&lt;p&gt;So here goes.  I like the syntax of Lisp.  I like the prefix notation and the parentheses.&lt;/p&gt;

&lt;h1&gt;Common Complaints&lt;/h1&gt;

&lt;p&gt;A common criticism of Lisp from non-Lispers is that the syntax is ugly and weird.  The parentheses are impossible to keep balanced.  It ends up looking like &quot;&lt;a href=&quot;http://en.wikiquote.org/wiki/Larry_Wall&quot;&gt;oatmeal with fingernail clippings mixed in&lt;/a&gt;&quot;.&lt;/p&gt;

&lt;p&gt;Also, prefix notation is horrible. &lt;code&gt;1 + 2&lt;/code&gt; is far superior to &lt;code&gt;(+ 1 2)&lt;/code&gt;.  Infix notation is how everyone learns things and how all the other languages do it.  There are countless numbers of people (&lt;a href=&quot;http://www.dwheeler.com/readable/sweet-expressions.html&quot;&gt;example&lt;/a&gt;) who have proposed to &quot;fix&quot; this, to give Lisp some kind of infix notation.  The topic inevitably comes up on Lisp mailing lists and forums.&lt;/p&gt;

&lt;p&gt;Partly this is subjective opinion and can't be argued with.  I can't say that Lispy parens shouldn't be ugly for people, any more than I can say that someone is wrong to think that peanut butter is gross even though I like the taste of it.  But in another sense, does it matter that it's painful?  Does it need to be changed?  Should the weird syntax stop you from learning Lisp?&lt;/p&gt;

&lt;h1&gt;Prefix Notation: Not Intuitive?&lt;/h1&gt;

&lt;p&gt;There is no &quot;intuitive&quot; when it comes to programming.  There's only what we're used to and what we aren't.&lt;/p&gt;

&lt;p&gt;What does &lt;code&gt;=&lt;/code&gt; mean in a programming language?  Most people from a C-ish background will immediately say assignment.  &lt;code&gt;x = 1&lt;/code&gt; means &quot;give the variable/memory location called &lt;code&gt;X&lt;/code&gt; the value &lt;code&gt;1&lt;/code&gt;&quot;.&lt;/p&gt;

&lt;p&gt;For non-programmers, &lt;code&gt;=&lt;/code&gt; is actually an equality test or a statement of truth.  &lt;code&gt;2 + 2 = 4&lt;/code&gt;; this is either a true or false statement.  There is no &quot;assignment&quot;.  The notion of assignment statements is an odd bit of programming-specific jargon.  In most programming languages we've learned instead that &lt;code&gt;==&lt;/code&gt; is an equality test.  Of course some have &lt;code&gt;:=&lt;/code&gt; for assignment and &lt;code&gt;=&lt;/code&gt; for equality tests.  But &lt;code&gt;=&lt;/code&gt; and &lt;code&gt;==&lt;/code&gt; seems to be more common.  Some languages even have &lt;code&gt;===&lt;/code&gt;.  Or &lt;code&gt;x.equals(y)&lt;/code&gt;.  Even less like what we're used to.  (Don't get started on such magic as &lt;code&gt;+=&lt;/code&gt;.)&lt;/p&gt;

&lt;p&gt;Most of us have no problem with these, after a while.  But few of us were programmers before we learned basic math.  How many of us remember the point in time when we had to re-adjust our thinking that &lt;code&gt;=&lt;/code&gt; means something other than what we've always learned it to mean?  I actually do remember learning this, over a decade ago.  This kind of un-learning is painful and confusing, there's no question.&lt;/p&gt;

&lt;p&gt;But it's also necessary, because these kinds of conventions are arbitrary and vary between fields of study (and between programming languages).  And there are only so many symbols and words available to use, so we re-use them.  None of the meanings for &lt;code&gt;=&lt;/code&gt; is &quot;right&quot; or more &quot;intuitive&quot; than the other.  &lt;code&gt;=&lt;/code&gt; has no inherent meaning.  It means whatever we want it to mean.  Programming is chock-full of things like this that makes no sense until you memorize the meaning of them.&lt;/p&gt;

&lt;p&gt;Consider a recent article that got a lot of discussion, about why &lt;a href=&quot;http://www.codinghorror.com/blog/archives/001248.html&quot;&gt;all programmers should program in English&lt;/a&gt;.  How much less intuitive can you get, for a native speaker of another language to program using words in English?  Yet they manage.  (Have you ever learned to read sheet music?  Most of the terms are in Italian.  I don't speak a word of Italian, yet I managed.)&lt;/p&gt;

&lt;p&gt;The point is that it's very painful to un-learn things that seem intuitive, and to re-adjust your thinking, but it's also very possible.  We've all done it before to get to where we are.  We can all do it again if we need to.&lt;/p&gt;

&lt;p&gt;Prefix notation is unfamiliar and painful for many people.  When I first started learning Lisp, the prefix notation was awfully hard to read without effort, even harder to write.  I would constantly trip up.  This is a real distraction when you're trying to write code and need to concentrate.  But it only took me maybe a week of constant use to ingrain prefix notation to the point where it didn't look completely alien any longer.&lt;/p&gt;

&lt;p&gt;At this point prefix notation reads to me as easily as infix notation.  I breeze right through Lisp code without a pause.  In Clojure, you can write calls to Java methods in Java order like &lt;code&gt;(. object method arg arg arg)&lt;/code&gt; or you can use a Lispy order like &lt;code&gt;(.method object arg arg arg)&lt;/code&gt;; I find myself invariably using the Lispy way, as does most of the community, even though the more traditional notation is available.&lt;/p&gt;

&lt;p&gt;You can get used to it if you put in a minimal amount of effort.  It's not that hard.&lt;/p&gt;

&lt;h1&gt;Benefits of Prefix Notation&lt;/h1&gt;

&lt;p&gt;Why bother using prefix notation if infix and prefix are equally good (or bad)?  For one thing, prefix notation lets you have variable-length parameter lists for things that are binary operations in other languages.  In an infix language you must say &lt;code&gt;1 + 2 + 3 + 4 + 5&lt;/code&gt;.  In a prefix language you can get away with &lt;code&gt;(+ 1 2 3 4 5)&lt;/code&gt;.  This is a good thing; it's more concise and it makes sense.&lt;/p&gt;

&lt;p&gt;Most languages stop at offering binary operators because that's as good as you get when you have infix operators.  There's a ternary operator &lt;code&gt;x?y:z&lt;/code&gt; but it's an exception.  In Lisp it's rare to find a function artificially limited to two arguments.  Functions tend to take as many arguments as you want to throw at them (if it makes sense for that function).&lt;/p&gt;

&lt;p&gt;Prefix notation is consistent.  It's always &lt;code&gt;(function arg arg arg)&lt;/code&gt;.  The function comes first, everything else is an argument.  Other languages are not consistent.  Which is it, &lt;code&gt;foo(bar, baz)&lt;/code&gt;, or &lt;code&gt;bar.foo(baz)&lt;/code&gt;?  There are even oddities in some languages where to overload a &lt;code&gt;+&lt;/code&gt; operator, you write the function definition prefix, &lt;code&gt;operator+(obj1, obj2)&lt;/code&gt;, but to call that same function you do it infix, &lt;code&gt;obj1 + obj2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The consistency of Lisp's prefix notation opens up new possibilities for Lispy languages (at least, Lisp-1 languages).  If the language knows the first thing in a list is a function, you can put any odd thing you want in there and the compiler will know to call it as a function.  A lambda expression (anonymous function)?  Sure.  A variable whose value is a function?  Why not?  And if you put a variable whose value is a function in some place other than at the start of a list, the language knows you mean to pass that function as an argument, not call it.  Other languages are far more rigid, and must resort to special cases (like Ruby's rather ugly block-passing syntax, or explicit &lt;code&gt;.call&lt;/code&gt; or &lt;code&gt;.send&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Consistency is good.  It's one less thing you have to think about, it's one less thing the compiler has to deal with.  Consistent things can be understood and abstracted away more easily than special cases.  The syntax of most languages largely consists of special cases.&lt;/p&gt;

&lt;h1&gt;Parens: Use Your Editor&lt;/h1&gt;

&lt;p&gt;The second major supposed problem with Lisp syntax is the parens.  How do you keep those things balanced?  How do you read that mess?&lt;/p&gt;

&lt;p&gt;Programming languages are partly for human beings and partly for computers.  Programming in binary machine code would be impossible to read for a human.  Programming in English prose would be impossible to parse and turn into a program for a computer.  So we meet the computer halfway.  The only question is where to draw the line.&lt;/p&gt;

&lt;p&gt;The line is usually closer to the computer than to the human, for any sufficiently powerful language.  There are very few programing languages where we don't have to manually line things up or match delimiters or carefully keep track of punctuation (or syntactic whitespace, or equivalent).&lt;/p&gt;

&lt;p&gt;For example, any language with strings already makes you pay careful attention to quotation marks.  And if you embed a quotation mark in a quote-delimited string, you have to worry about escaping.  And yet we manage.  In fact I think that shell-escaping strings is a much hairier problem than balancing a lot of parens, but we still manage.&lt;/p&gt;

&lt;p&gt;This is sadly a problem we must deal with as programmers trying to talk to computers.  And we deal with it partly by having tools to help us.  Modern text editors do parenthesis matching for you.  If you put the cursor on a paren, it highlights the match.  In Vim you can bounce on the &lt;code&gt;%&lt;/code&gt; key to jump the cursor between matching parens.  Many editors go one step further and insert the closing paren whenever you insert an opening one.  Emacs of course goes one step further still and gives you &lt;a href=&quot;http://www.emacswiki.org/emacs/ParEdit&quot;&gt;ParEdit&lt;/a&gt;.  Some editors will even color your parens like a rainbow, if that floats your boat.  Keeping parens matched isn't so hard when you have a good editor.&lt;/p&gt;

&lt;p&gt;And Lisp isn't all about the parens.  There are also generally-accepted rules about indentation.  No one writes this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defn foo [x y] (if (= (+ x 5) y) (f1 (+ 3 x)) (f2 y)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That is hard to read, sure.  Instead we write this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;(defn foo [x y]
  (if (= (+ x 5) y)
    (f1 (+ 3 x))
    (f2 y)))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is no more difficult to scan visually than any other language, once you're used to seeing it.  And all good text editors will indent your code strangely if you forget to close a paren.  It will be immediately obvious.&lt;/p&gt;

&lt;p&gt;A common sentiment in various Lisp communities is that Lispers don't even see the parens; they only see the indentation.  I wouldn't go that far, but I would say that the indentation makes Lisp code easily bearable.  As bearable as a bunch of gibberish words and punctuation characters can ever be for a human mind.&lt;/p&gt;

&lt;p&gt;When I was first learning Lisp I did have some pain with the parens.  For about a week.  After learning the features of Vim and Emacs that help with paren-matching, that pain went away.  Today I find it easier to work with and manipulate paren-laden code than I do to work with other languages.&lt;/p&gt;

&lt;h1&gt;Benefits of the Parens&lt;/h1&gt;

&lt;p&gt;Why bother with all the parens if there's no benefit?  One benefit is lack of precedence rules.  Lisp syntax has no &quot;order of operations&quot;.  Quick, what does &lt;code&gt;1 + 2 * 3 / 4 - 5&lt;/code&gt; mean?  Not so hard, but it takes you a second or two of thinking.  In Lisp there is no question: &lt;code&gt;(- (+ 1 (/ (* 2 3) 4)) 5)&lt;/code&gt;.  It's always explicit.  (It'd look better properly indented.)&lt;/p&gt;

&lt;p&gt;This is one less little thing you need to keep in short-term memory.  One less source of subtle errors.  One less thing to memorize and pay attention to.  In languages with precedence rules, you usually end up liberally splattering parens all over your code anyways, to disambiguate it.  Lisp just makes you do it consistently.&lt;/p&gt;

&lt;p&gt;As I hinted, code with lots of parens is easy for an editor to understand. This make it easier to manipulate, which makes it faster to write and edit.  Editors can take advantage, and give you powerful commands to play with your paren-delimited code.&lt;/p&gt;

&lt;p&gt;In Vim you can do a &lt;code&gt;ya(&lt;/code&gt; to copy an s-exp.  Vim will properly match the parens of course, skipping nested ones.  Similarly in Emacs you can do &lt;code&gt;C-M-k&lt;/code&gt; to kill an s-exp.  How do you copy one &quot;expression&quot; in Ruby?  An expression may be one line, or five lines, or fifty lines, or half a line if you separate two statements with a semi-colon.  How do you select a code block?  It might be delimited by &lt;code&gt;do/end&lt;/code&gt;, or curly braces, or &lt;code&gt;def/end&lt;/code&gt;, or who knows.  There are plugins like &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=39&quot;&gt;matchit&lt;/a&gt; and huge syntax-parsing scripts to help editors understand Ruby code and do these things, but it's not as clean as Lisp code.  Not as easy to implement and not as fool-proof that it'll work in all corner cases.&lt;/p&gt;

&lt;p&gt;ParEdit in Emacs gives you other commands, to split s-exps, to join them together, to move the cursor between them easily, to wrap and unwrap expressions in new parens.  This is all you need to manipulate any part of Lisp code.  It opens up possibilities that are difficult or impossible to do correctly in a language with less regular syntax.&lt;/p&gt;

&lt;p&gt;Of course this consistency is also partly why Lisps can have such nice macro systems to make programmatic code-generation so easy.  It's far easier to construct Lisp code as a bunch of nested lists, than to concatenate together strings in a proper way for your non-Lisp language of choice to parse.&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Yeah Lisp syntax isn't intuitive.  But nothing really is.  You can get used to it.  It's that not hard.  It has benefits.&lt;/p&gt;

&lt;p&gt;Sometimes it's worth learning things that aren't intuitive.  You limit yourself and miss out on some good things if you stick with what you already know, or what feels safe and sound.&lt;/p&gt;</description></item><item><title>Real Confusing Haskell</title><link>http://briancarper.net/blog/real-confusing-haskell</link><guid>http://briancarper.net/blog/real-confusing-haskell</guid><pubDate>Thu, 02 Apr 2009 23:44:54 -0700</pubDate><description>&lt;p&gt;I can pinpoint the exact page in &lt;a href=&quot;http://book.realworldhaskell.org/&quot;&gt;Real World Haskell&lt;/a&gt; where I became lost.  I was reading along surprisingly well until page 156, upon introduction of &lt;code&gt;newtype&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;At that my point my smug grin became a panicked grimace.  The next dozen pages were an insane downward spiral into the dark labyrinth of Haskell's type system.  I had just barely kept &lt;code&gt;data&lt;/code&gt; and &lt;code&gt;class&lt;/code&gt; and friends straight in my mind. &lt;code&gt;type&lt;/code&gt; I managed to ignore completely.  &lt;code&gt;newtype&lt;/code&gt; was the straw that broke the camel's back.&lt;/p&gt;

&lt;p&gt;As a general rule, Haskell syntax is incredibly impenetrable.  &lt;code&gt;=&amp;gt;&lt;/code&gt; vs. &lt;code&gt;-&amp;gt;&lt;/code&gt; vs. &lt;code&gt;&amp;lt;-&lt;/code&gt;?  I have yet to reach the chapter dealing with &lt;code&gt;&amp;gt;&amp;gt;=&lt;/code&gt;.  The index tells me I can look forward to such wonders as &lt;code&gt;&amp;gt;&amp;gt;?&lt;/code&gt; and &lt;code&gt;==&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;|&amp;gt;&lt;/code&gt;.  Who in their right mind thought up the operator named &lt;code&gt;.&amp;amp;.&lt;/code&gt;?  The language looks like Japanese emoticons run amuck.  If and when I reach the &lt;code&gt;\(^.^)/&lt;/code&gt; operator I'm calling it a day.&lt;/p&gt;

&lt;p&gt;Maybe Lisp has spoiled me, but the prospect of memorizing a list of punctuation is wearisome.  And the way you can switch between prefix and infix notation using parens and backticks makes my eyes cross.  Add in syntactic whitespace and I don't know what to tell you.&lt;/p&gt;

&lt;p&gt;I could still grow to like Haskell, but learning a new language for me always goes through a few distinct stages: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Curiosity -&gt; Excitement -&gt; Reality Sets In -&gt; Frustration -&gt; Rage&lt;/em&gt; ...&lt;/p&gt;

&lt;p&gt;At &lt;em&gt;Rage&lt;/em&gt; I reach a fork in the road: I either proceed through &lt;em&gt;Acceptance&lt;/em&gt; into &lt;em&gt;Fumbling&lt;/em&gt; and finally to &lt;em&gt;Productivity&lt;/em&gt;, or I go straight from &lt;em&gt;Rage&lt;/em&gt; to &lt;em&gt;Undying Hatred&lt;/em&gt;.  Haskell could still go either way.&lt;/p&gt;</description></item><item><title>Internet Explorer 8 Review</title><link>http://briancarper.net/blog/internet-explorer-8-review</link><guid>http://briancarper.net/blog/internet-explorer-8-review</guid><pubDate>Sat, 21 Mar 2009 00:35:52 -0700</pubDate><description>&lt;p&gt;I installed Internet Explorer 8 today.  I need it to test the websites at work.  I couldn't care less if my personal sites render properly in IE at this point, but I must accommodate people at work.&lt;/p&gt;

&lt;p&gt;I should mention right off the bat that given the way Microsoft takes a dump all over web standards and the hours and hours of grief as a web developer trying to get sites to look proper in IE6, unless IE8 crapped gold nuggets every time I clicked a link I don't think I'd like it.&lt;/p&gt;

&lt;h1&gt;Installing&lt;/h1&gt;

&lt;p&gt;I wasn't disappointed.  IE8 is hate-worthy.  A steaming pile of offal.  First there was the joy of trying to install it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/random/ie8.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Why does installing a web browser require checking my computer for &quot;malicious software&quot;?  Why can't I opt out of this?  In any case I didn't have to worry about it, because the first time I tried the install, it bombed before it got that far, and demanded that I go to the Windows Update site and install some patch for IE7 before I could continue.  Note: I &lt;strong&gt;don't have IE7 on my computer&lt;/strong&gt;.  This is a work machine that I kept IE6 on for testing our company websites.  This blew my mind.&lt;/p&gt;

&lt;p&gt;So I tried to download this patch for IE7, but I couldn't, because I had to get &lt;strong&gt;Windows Genuine disAdvantage&lt;/strong&gt; first.  Rage filled me at this point to the point of overflowing.  If it was my home computer I'd have stopped right there.  But I need this garbage for work, so I held my nose and did it.&lt;/p&gt;

&lt;p&gt;Of course the patch required a reboot.  Reboot #1.&lt;/p&gt;

&lt;p&gt;Now I was able to continue with the install.  A slow, plodding download; I think it took 5-10 minutes to do its thing, but it's hard to tell.  There was no progress bar to show me how far along it was, nothing to tell me the elapsed time, no indication how large the files were that were being fetched.  There is something resembling a progress bar, but it doesn't actually show you much in the way of &quot;progress&quot;.  Instead a little green thing bounces around like the car from &lt;a href=&quot;http://en.wikipedia.org/wiki/Knight_Rider_(1982_TV_series)&quot;&gt;Knight Rider&lt;/a&gt;.  How much cocaine do you need to imbibe to invent a GUI like this?&lt;/p&gt;

&lt;p&gt;Of course IE8 itself required a reboot.  Reboot #2.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/random/ie8-2.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Why?  Installing Firefox and Opera don't require reboots.  They download as self-contained &lt;code&gt;.exe&lt;/code&gt; installer files.  I run them and software appears.  This is 2009, for the love of God.  Maybe in 20 more years Microsoft will finally manage to re-invent &lt;code&gt;emerge&lt;/code&gt; or &lt;code&gt;apt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The IE8 install, including patching and reboots, took me 45 minutes.  If I had to do this on more than one machine, I'd probably jump out the window.  How much time have you sucked out of my life, Microsoft?  To compare, I decided to install Opera.  Opera took &lt;strong&gt;less than one minute&lt;/strong&gt; to download AND install and didn't require a reboot.&lt;/p&gt;

&lt;h1&gt;Features&lt;/h1&gt;

&lt;p&gt;When you first open it up, it sends you through a wizard and asks you if you want to enable a bunch of crap.  I said no to everything.  What the hell is an &quot;&lt;strong&gt;&lt;em&gt;Accelerator&lt;/em&gt;&lt;/strong&gt;&quot;?  I assumed it was something that tried to make web pages load faster, like the &lt;strong&gt;&lt;em&gt;download accelerator&lt;/em&gt;&lt;/strong&gt; scams you used to get popups for all the time in 2001.  So I said no.&lt;/p&gt;

&lt;p&gt;Turns out &quot;Accelerators&quot; are plugins.  Why didn't they call them Plugins?  Did some marketroid decide &quot;plugin&quot; wasn't &lt;strong&gt;&lt;em&gt;EXTREME&lt;/em&gt;&lt;/strong&gt; enough, so decided to make up their own word?  Why do I have to relearn the English language every time someone releases new software?  &lt;a href=&quot;http://en.wikipedia.org/wiki/Not_Invented_Here&quot;&gt;Not Invented Here syndrome&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Windows tried to default me to Live Search, but I give it credit for being upfront in allowing me to turn that crap off and use Google.  (No doubt thanks to US anti-trust court proceedings.)  473 wizard dialogs later I had a browser.  &lt;/p&gt;

&lt;p&gt;The next thing I noticed is more lame attempts to push more Microsoft services at me.  In the URL bar every time you type anything, you see this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/random/ie8-3.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Awesome.  Is there any way to remove this spamvertisement other than installing Windows Search?  If I planned to use IE8, which I don't, I imagine I'd inevitably click that by accident, which is probably the whole idea.  &lt;/p&gt;

&lt;p&gt;IE8 also added a bunch of useless garbage to my bookmarks toolbar which I insta-deleted.  Or tried to.  My favorite feature of IE8 by far is this one:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/random/ie8-4.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Apparently deleting things from the bookmarks toolbar is just too much for a modern 4-core CPU to handle.  Congrats Microsoft.  Hang, crash, boom.&lt;/p&gt;

&lt;p&gt;There is no menu in IE8 by default.  No wait, there is a menu.  It's just in the wrong place (lower right side of the top browser area), and instead of readable text it's mostly unlabeled buttons with tiny arrows next to it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/random/ie8-5.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It's like a traditional menu and a fun mystery novel combined!  What is in the dropdown next to the house?  I'm sure it's a fun surprise.&lt;/p&gt;

&lt;p&gt;And actually you can get the old menu to appear too, if you press &lt;code&gt;Alt&lt;/code&gt;.  Insanity.  But it doesn't appear at the top, it appears &lt;em&gt;under&lt;/em&gt; the URL bar.  One of the few arguably good things about Windows is that programs have consistent GUI parts and work the same way: they have a menu at the top, it's always in the same one place, there's a &lt;code&gt;File&lt;/code&gt; and an &lt;code&gt;Edit&lt;/code&gt;, and it's predictable.  Thanks Microsoft for getting even that wrong.&lt;/p&gt;

&lt;p&gt;When I highlight text on a web page, a little blue thing appears that I think I'm supposed to click on.  The icon is a bunch of lines and squiggles and an arrow or something.   There's no indication what that thing actually does.  I clicked it out of curiosity and get a menu full of a bunch of random options like &quot;Search for this&quot;.  I think this is where &lt;strong&gt;&lt;em&gt;ACCELERATORS&lt;/em&gt;&lt;/strong&gt; are supposed to pop up, or something, who cares?&lt;/p&gt;

&lt;p&gt;Fonts in IE8 look fuzzy.  As a bonus, after installing IE8, fonts in a bunch of other programs (Outlook) are fuzzy now too.  Hurrah!  IE8, like its predecessors, apparently extends its tendrils into every nook and cranny of your system, corrupting and perverting as it goes.  Maybe that's why it needed to reboot my computer twice to install it.&lt;/p&gt;

&lt;p&gt;IE8 comes with a &lt;a href=&quot;http://getfirebug.com/&quot;&gt;Firebug&lt;/a&gt; ripoff, which is better than View Source invoking Notepad, but took a full 2 minutes to load when I tried to open it the first time.&lt;/p&gt;

&lt;p&gt;IE8 does render my blog properly, which is good.  IE7 does too, I think, I only tested it once.  I'm not losing sleep over it.  Thank you Firefox and Opera: if you didn't exist and put the pressure on, we'd all still be using IE6 and I'd still be writing all my web pages twice to make sure they work in &lt;strong&gt;Internet Excrementplorer&lt;/strong&gt;.  As much as I detest IE, if people migrate to IE8 from the shard of utmost evil that is IE6, I'll be happy.&lt;/p&gt;</description></item><item><title>I can't figure out my phone</title><link>http://briancarper.net/blog/i-cant-figure-out-my-phone</link><guid>http://briancarper.net/blog/i-cant-figure-out-my-phone</guid><pubDate>Mon, 16 Feb 2009 12:36:40 -0800</pubDate><description>&lt;p&gt;&lt;a href=&quot;http://www.research.att.com/~bs/bs_faq.html#really-say-that&quot;&gt;Bjarne Stroustrup said&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I have to agree.  My phone at work is indecipherable.  What do these buttons do?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PROG&lt;/li&gt;
&lt;li&gt;Call Park&lt;/li&gt;
&lt;li&gt;DND&lt;/li&gt;
&lt;li&gt;VM Transfer&lt;/li&gt;
&lt;li&gt;AUTO&lt;/li&gt;
&lt;li&gt;DND/CF&lt;/li&gt;
&lt;li&gt;EXT&lt;/li&gt;
&lt;li&gt;FLASH&lt;/li&gt;
&lt;li&gt;Some kind of little squiggle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To the best of my knowledge, there are only so many things you can DO with a phone.  It rings, and then you pick it up and talk.  Or it rings, you don't pick it up and it goes to voicemail.  There are also HOLD and CONF (conference call?) buttons which I never use, but I'll allow that they can be useful.  But the rest of those?  In my wildest imaginings I can't fathom what they might do.&lt;/p&gt;

&lt;p&gt;The phone also has a bunch of lights all over it.  Sometimes they light up one color, sometimes another.  Sometimes they blink and sometimes they light up steadily.  There must be some kind of pattern to them but I don't know it.  When lights start lighting up I start pressing buttons and talking to the empty room like a madman, and when someone talks back to me or the lights go out (whichever comes first) I consider that a victory.&lt;/p&gt;

&lt;p&gt;What pioneer came up with hidden voicemail options?  I call my voicemail, it tells me &quot;To listen to messages, press 1, to do blah blabbity blah, press 2&quot;, etc.  But there's a HIDDEN OPTION 0 to configure the voicemail, which the disembodied phone demon never tells me about.  Why is this knowledge hidden?  Is it too powerful for the average phone-user?  Do you have to prove yourself worthy of the knowledge first?&lt;/p&gt;

&lt;p&gt;I'd like to read a manual for the phone, but I don't think a manual exists.  No one knows how the phones work at my job.  What knowledge actually exists is sort of spread around via word-of-mouth, like the tribal history of some primitive civilization passed down from generation to generation by village elders telling stories around a campfire.&lt;/p&gt;

&lt;p&gt;Is this what people who aren't good at computers feel like when they sit down at a keyboard?  Do they look at a screen and see a bunch of meaningless squares and colors and words, where I see buttons and menus and useful GUI widgets?&lt;/p&gt;</description></item><item><title>Stylus DIY, hand health</title><link>http://briancarper.net/blog/stylus-diy-hand-health</link><guid>http://briancarper.net/blog/stylus-diy-hand-health</guid><pubDate>Sun, 01 Feb 2009 14:39:52 -0800</pubDate><description>&lt;p&gt;The stylus that comes with a Nintendo DS is a very mild form of hand torture.  Not sure whose hands those were designed for, but not mine.  In googling for a good replacement, I chanced upon a blog post which suggests &lt;a href=&quot;http://www.arghyle.com/2007/06/25/the-best-ds-lite-stylus-diy/&quot;&gt;finding a nice big ballpoint pen and jamming a DS stylus inside&lt;/a&gt; so just the tip sticks out.  This works amazingly well.  It's not as portable, but I will make that sacrifice to prevent being crippled.&lt;/p&gt;

&lt;p&gt;I am in fact &lt;a href=&quot;http://briancarper.net/2008/06/08/emacs-pinky/&quot;&gt;always a bit worried&lt;/a&gt; about preserving the health of my hands.  I have no hard data to support this, but I suspect my generation may have major hand-related problems in the coming decades.  What with computer keyboards and tiny cell-phone and PDA keys and lots of other techy things.  Many of us use our hands to communicate almost as much as our voices.  Until we have Star Trek voice-recognition software, this will be a problem.&lt;/p&gt;

&lt;p&gt;I started experiencing a lot of aches and pains in my hands and wrists a decade or so ago, and I attributed it to computer use.  Since I started paying more attention, things are better.   I maintain a very comfortable typing position for my hands.  I have a nice big comfortable mouse.  And so on.  My hands don't hurt any longer nowadays, which is nice.  If I become unable to type someday, I'm completely screwed.  How can I work as a programmer if I can't input text into a computer?  And I won't be able to draw or do origami or play video games or do many other things I enjoy.&lt;/p&gt;</description></item><item><title>Stack Overflow</title><link>http://briancarper.net/blog/stack-overflow</link><guid>http://briancarper.net/blog/stack-overflow</guid><pubDate>Thu, 15 Jan 2009 22:06:52 -0800</pubDate><description>&lt;p&gt;For my programming entertainment needs, I frequent Slashdot and &lt;a href=&quot;http://www.reddit.com/r/programming/&quot;&gt;Reddit&lt;/a&gt;, but lately also &lt;a href=&quot;http://stackoverflow.com&quot;&gt;Stack Overflow&lt;/a&gt;.  Stack Overflow is turning out to be a good source of information.  I've posted some very obscure Emacs questions and gotten great answers in a few hours.  Any question you post, no matter how obscure, is likely to be pounced upon by rabid reputation-seeking answerers.&lt;/p&gt;

&lt;p&gt;What is it about a slowly-increasing numeric representation of your value as a human being that is so appealing?  This is one thing &lt;a href=&quot;http://www.perlmonks.org/&quot;&gt;Perl Monks&lt;/a&gt; got right early on.  People there always say XP points don't matter, but I think it does on some level.  It's just a silly number, but even knowing it's silly, on some deep dark level, you look at someone with 10,000 XP differently from someone with 400.&lt;/p&gt;

&lt;p&gt;I think one of the best things you can experience as a programmer is for other programmers to think (and say) that you're smart.  Maybe that's true of all professions and hobbies, but I know it's true of most programmers.  Anything which takes good advantage of that fact of programmer psychology is on track to become successful.&lt;/p&gt;

&lt;p&gt;Only bad thing about Stack Overflow is how saturated it is with .NET and Java.  If you can wade through that crap, you can find some cool stuff.&lt;/p&gt;</description></item><item><title>I hope someone maintains Amarok 1.4</title><link>http://briancarper.net/blog/i-hope-someone-maintains-amarok-14</link><guid>http://briancarper.net/blog/i-hope-someone-maintains-amarok-14</guid><pubDate>Sun, 14 Dec 2008 16:40:46 -0800</pubDate><description>&lt;p&gt;&lt;a href=&quot;http://amarok.kde.org/en/releases/2.0&quot;&gt;Amarok 2&lt;/a&gt; was released on December 10th.  I have KDE 4 on my experimentation laptop, so I tried it.  I don't like it.  Aside from technical glitches and missing features which will hopefully be added again someday, the whole idea of it is wrong.&lt;/p&gt;

&lt;p&gt;Amarok 1.4 is good because it gives you extremely dense, detailed information about your songs.  I've got 13 columns of information in the playlist pane and I look at them all.  Score, Rating, Play Count, Year, Disc number, Track number... I like to see these things.  I like to sort by these things.  I like being able to see the bitrate of my MP3s at a glance.  I'm a nerd, that's why I'm using Linux in the first place.  &lt;/p&gt;

&lt;p&gt;Amarok 2 on the other hand has a tiny little column down the right hand side to display song information.  It groups things together so you don't need as many columns, but it's nowhere near what Amarok 1.4 gives you.  Bad bad bad.&lt;/p&gt;

&lt;p&gt;On the very rare occasion I want to see lyrics or something, in Amarok 1.4 they're hidden away in tabs I can ignore most of the time.  This is good. The majority of my window should be devoted to DISPLAY SONGS.&lt;/p&gt;

&lt;p&gt;Instead, in Amarok 2, half of the GUI is devoted to this center pane to display &quot;context&quot; information.  This is bad.  I don't care about browsing web sites to buy music, or browsing Wikipedia from inside my music player, or &quot;discovering&quot; new music.  And if I did care, I would use a WEB BROWSER.  A music player is not a web browser.  If I want to discover music, I'll go use last.fm or some website that's devoted to it, using Firefox.  If I want to see a Wikipedia article, I'll look at Wikipedia in Firefox.&lt;/p&gt;

&lt;p&gt;Music players should play music, and web browsers should browse websites.  When you have one enormous program that tries to do both, it just ends up doing both poorly.  This is nearly universally true and it's certainly true in what I've seen so far in Amarok 2.&lt;/p&gt;

&lt;p&gt;KDE 4 isn't even usable (as of KDE 4.2 beta1) and Amarok 2 fits right in, unfortunately.  I hope they give us back some of the things that made Amarok 1.4 great.  Or else that Amarok 1.4 keeps working for a long time.&lt;/p&gt;</description></item><item><title>Science in America</title><link>http://briancarper.net/blog/science-in-america</link><guid>http://briancarper.net/blog/science-in-america</guid><pubDate>Wed, 10 Dec 2008 01:25:51 -0800</pubDate><description>&lt;p&gt;In the news there is a recent study of math and science education internationally.  A lot of the stories set a &quot;&lt;a href=http://www.csmonitor.com/2008/1210/p03s05-usgn.html&quot;&gt;US improves in math!&lt;/a&gt;&quot; tone.  The most negative tone I've seen is &quot;&lt;a href=&quot;http://www.washingtonpost.com/wp-dyn/content/article/2008/12/09/AR2008120901031.html?hpid=moreheadlines&quot;&gt;US science performance plateaus&lt;/a&gt;&quot;.&lt;/p&gt;

&lt;p&gt;How hard is it to say that math and science education in the US sucks?  Because it does.  See the image at the end of this post for one reason why.&lt;/p&gt;

&lt;p&gt;In the meantime here's an anecdote.  I went to school in semi-rural western Pennsylvania.  My math education was pretty sound.  Our high school had agreements with a local college so that I even got to take college-level calc while in high school.  I held up well and I was competitive when I ended up in calc 2 in college.&lt;/p&gt;

&lt;p&gt;Science was another matter.  I consider myself to be not entirely an idiot, but I was given nothing to work with in high school when it came to science.  My physics and chemistry classes were disgusting.  My best physics class was taught by an evangelical Christian who sneaked God into class sometimes (without my realizing at the time how wrong that was).  My other physics class was taught by someone who didn't even know the subject.  I took a standardized college-entrance exam in physics and I think I scored in the 20-something'th percentile even among Americans.&lt;/p&gt;

&lt;p&gt;Meanwhile in my computer programming class I was working on ancient iMac G3's (the crayon-colored space ship cube kind) which barely ran a C compiler.  I think we used either Borland or Code Warrior; I don't remember, and it doesn't matter because it didn't work.  We had to resort to using QBasic in a Windows 95 virtual machine on the Mac's.&lt;/p&gt;

&lt;p&gt;Our library had Macintosh Classics (the box-shaped ones from the early 1500's, with tiny little built-in monochrome screens).  There was one computer in the library with internet access, which ran only DOS and could only access the national weather service and some library catalogs.  I used to go edit AUTOEXEC.BAT to do horrible things.&lt;/p&gt;

&lt;p&gt;The priority at the school was clearly not science education.  It was sports.  We dumped huge amounts of money into a new sports stadium.  Cheerleading and swimming were the most important things happening.  No one gave the slightest crap whether anyone learned science at that school.  And I suffered for it.&lt;/p&gt;

&lt;p&gt;If I hadn't been motivated to teach myself how to program in my spare time, where would I have ended up?  Even more behind in college than I was?  Not in college at all?&lt;/p&gt;

&lt;p&gt;Is it any wonder that at college, most of my classes were taught by non-Americans, and a very sizable portion of students were non-American?  This in a city NOT known for its diverse international population.  People flew in from elsewhere, went to school for 4-8 years and left.  Down the street at CMU the American-to-non-American ratio was even more extreme.&lt;/p&gt;

&lt;p&gt;The anti-intellectual, anti-science attitude of many Americans is what I detest most about this country.  Science is the most important thing that human beings do.  Science is what enables modern life.  People owe science and scientists more than they could ever imagine.  And instead people take it entirely for granted, and spit in the face of science at every turn.&lt;/p&gt;

&lt;p&gt;Now, here's something to make you puke up your breakfast.  Public acceptance of evolution, by country.  I won't post much about this subject because it would be mostly profanities.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://richarddawkins.net/article,706,Public-Acceptance-of-Evolution,Science-Magazine-Jon-D-Miller-Eugenie-C-Scott-Shinji-Okamoto&quot;&gt;&lt;img src=&quot;/random/publicAcceptanceEvolution.jpg&quot; alt=&quot;public acceptance of evolution&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Wordpress is no good for programmers</title><link>http://briancarper.net/blog/wordpress-is-no-good-for-programmers</link><guid>http://briancarper.net/blog/wordpress-is-no-good-for-programmers</guid><pubDate>Fri, 05 Dec 2008 17:01:35 -0800</pubDate><description>&lt;p&gt;Wordpress is a good least common denominator when it comes to blogging.  It's good for someone to throw some PHP scripts on a random server and have a basic blog running in a few minutes with little configuration.  &lt;/p&gt;

&lt;p&gt;It's no good for programmers.  For me in particular anyways.  Reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PHP, yuck.  Blogging is something I do purely for fun.  PHP is not fun.  PHP is a horrendous, sometimes-necessary evil to be avoided if at all possible.&lt;/li&gt;
&lt;li&gt;Text mangling.  Quotes are turned to &lt;del&gt;smart&lt;/del&gt; dumb-quotes.  Newlines are mangled into paragraph blocks.  &lt;code&gt;wp-includes/formatting.php&lt;/code&gt; has 1200 lines of mostly regular expression replacements.  Getting text to show up literally is sometimes hard.  People post comments and sometimes Wordpress eats them for dinner.  I get complaints all the time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the most important things for a blog like mine is the ability to post plaintext and not have it altered in any way.  This is possible if you hack Wordpress enough, or take your chances with various plugins.  I've never had success with those kinds of plugins or with plugins of my own.  Wordpress changes too often, the plugins break, or there are one or two hooks that are overlooked, or one or two regex-replacements I forget to undo.
* Bloat.  The only features I use are the ability to post text, categorize it via tags, let people comment on it, and let people browse archives of posts.  Spam filtering is nice too.  These are not difficult tasks.  Wordpress adds all kinds of of baggage on top of that, most of which I never use.  Pings?  Trackbacks?  Blogrolls?  User registration?  Draft posts?  Private posts?  File uploading?  Crappy WYSIWYG in-browser text editors?  Plugin systems?  I don't need that stuff.
* Permalinks are handled by Apache mod_rewrite rules.  Yuck again.  There are better ways.&lt;/p&gt;

&lt;p&gt;So I'm thinking of migrating away from Wordpress.  Which is probably going to be a bit painful if I want to retain all of my current posts, and avoid breaking every link anyone ever made to my site.  But it's doable.&lt;/p&gt;

&lt;p&gt;What to migrate to?  I'll probably write something myself.  It's usually easier to write something yourself than to hack up someone else's stuff to get it to work right.&lt;/p&gt;</description></item><item><title>Ignorance is bliss</title><link>http://briancarper.net/blog/ignorance-is-bliss</link><guid>http://briancarper.net/blog/ignorance-is-bliss</guid><pubDate>Fri, 24 Oct 2008 19:54:00 -0700</pubDate><description>&lt;p&gt;I remember the good old days of web-browsing, when I'd just zoom around the internet without a care in the world.  The first time I got a small whiff of something foul was in college one day, when a professor yelled at the class because someone was using telnet to connect to remote machines.  &lt;em&gt;&quot;Are you crazy?  It sends everything in plaintext!  Use SSH!&quot;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then eventually I put together a website where I had access to the server logs, and oh boy, it was not fun reading those the first time.  Line after line of bots in Ukraine, trying to access vulnerable scripts that may or may not exist on my server.    Then I checked some of my SSH logs, and saw the same thing.  Thus my innocence was destroyed forever.&lt;/p&gt;

&lt;p&gt;Nowadays all of my email traffic is SSL-encrypted, and FTP is disabled on every server I have root access to, in favor of SFTP.  I cringe every time I set up a wireless network (even &lt;a href=&quot;http://www.scmagazineuk.com/WiFi-is-no-longer-a-viable-secure-connection/article/119294/&quot;&gt;WPA&lt;/a&gt; is being cracked nowadays).  My passwords are long, nearly impossible to remember, and legion.  My browser cache is cleared daily.  I reject all cookies by default, and Javascript is run on an as-needed basis.&lt;/p&gt;

&lt;p&gt;One day I read on Slashdot about &lt;a href=&quot;http://yro.slashdot.org/article.pl?sid=08/10/14/1656251&amp;amp;from=rss&quot;&gt;Flash cookies&lt;/a&gt;.  So I had a really bright idea:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ln -s /dev/null ~/.macromedia
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That'll teach them!  No more flash cookies.  (Note, don't do this if you like watching Flash movies in your browser.  They stop working on certain websites.  Annoying.  Next best thing is &lt;a href=&quot;http://objection.mozdev.org/&quot;&gt;a plugin to let you delete them&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;The bad thing is that I still don't know very much about network security and privacy.  If I knew more, I'm sure I'd worry more.  On the other hand, if I was a locksmith, I might feel bad with the quality of the lock on my front door.  And yet my house has never been robbed (yet) and my computer has never been hacked (yet).  People tend to worry about what's right in front of them.  Maybe what you don't know can't hurt you.&lt;/p&gt;

&lt;p&gt;But I still cringe when someone sits down in an airport or a Starbucks and logs into their bank account or work email.&lt;/p&gt;</description></item><item><title>Emacs annoyance #448,546</title><link>http://briancarper.net/blog/emacs-annoyance-448546</link><guid>http://briancarper.net/blog/emacs-annoyance-448546</guid><pubDate>Sun, 12 Oct 2008 15:04:12 -0700</pubDate><description>&lt;p&gt;From the &lt;a href=&quot;http://www.gnu.org/software/emacs/manual/html_node/emacs/File-Names.html&quot;&gt;Emacs docs&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Each buffer has a default directory which is normally the same as the directory of the file visited in that buffer. When you enter a file name without a directory, the default directory is used. If you specify a directory in a relative fashion, with a name that does not start with a slash, it is interpreted with respect to the default directory. The default directory is kept in the variable default-directory, which has a separate value in every buffer. &lt;/p&gt;
  
  &lt;p&gt;The command M-x pwd displays the current buffer's default directory, and the command M-x cd sets it (to a value read using the minibuffer). A buffer's default directory changes only when the cd command is used. A file-visiting buffer's default directory is initialized to the directory of the file it visits.  If you create a buffer with C-x b, its default directory is copied from that of the buffer that was current at the time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is extremely annoying.  Vim leaves my working directory the hell alone, why doesn't Emacs?  Vim lets you set a global working directory, and selectively (and explicitly) change it on a per-buffer basis.  This is what I want.&lt;/p&gt;

&lt;p&gt;But in Emacs, every time you open a file, the working directory automatically changes to the directory of that file.  If you have multiple files open in Emacs (which of course you do), every time you move the cursor between windows, or look at a new file in your current window, your working directory just changed out from under you.&lt;/p&gt;

&lt;p&gt;So say you open some files.  Then you want to start SLIME.  So you &lt;code&gt;C-x 2&lt;/code&gt; to split and open a new window, in which to start SLIME.  Except (annoyance #448,547) Emacs doesn't open a window with a new BLANK file, as Vim sanely does via &lt;code&gt;CTRL-W n&lt;/code&gt;; instead it puts the file you're looking at into BOTH windows, which is absolutely never what you want.  As a result, the working directory of BOTH windows is the directory of whatever file you were looking at.   So every time you start SLIME, you have to make sure you &lt;code&gt;M-x cd&lt;/code&gt; back to the proper working directory first, because otherwise your Lisp process is randomly going to start in the wrong directory.&lt;/p&gt;

&lt;p&gt;But you can change the directory of the SLIME buffer after you start SLIME.  Just &lt;code&gt;M-x cd&lt;/code&gt; or &lt;code&gt;,cd&lt;/code&gt;.  Except if you're unlucky enough to be using SLIME for Clojure, which may have set its classpath based on its working directory when you started it.  In that case you have to restart SLIME.  &lt;/p&gt;

&lt;p&gt;But if you kill SLIME, Emacs (annoyance #448,548) jams another random file into the window where SLIME just was.  So your working directory just changed again!  Or did it?  Depends what Emacs decided to put into your window.  You may think that, while SLIME is running, &lt;code&gt;M-x cd&lt;/code&gt; and/or &lt;code&gt;,cd&lt;/code&gt; and then &lt;code&gt;,restart-inferior-lisp&lt;/code&gt; may do what you want, but you would be wrong; it always reverts back to the original working directory from when SLIME was first started.&lt;/p&gt;

&lt;p&gt;Lost?  Confused?  tl;dr?  Welcome to Emacs.  So now I'm looking through the encyclopedic tangled mess of Emacs documentation to try to figure out how to get Emacs not to change my working directory, ever, unless I say so.  This is hindered as always by (annoyance #448,549) Emacs' arcane and non-standard terminology.  So far, I have committed to memory that &quot;current directory&quot;/&quot;working directory&quot; in Emacs is instead called &quot;default directory&quot;.  And you don't open files, you &quot;visit&quot; them.  Command line?  No, &quot;minibuffer&quot;.&lt;/p&gt;</description></item><item><title>Practicality: PHP vs. Lisp?</title><link>http://briancarper.net/blog/practicality-php-vs-lisp</link><guid>http://briancarper.net/blog/practicality-php-vs-lisp</guid><pubDate>Mon, 22 Sep 2008 01:17:25 -0700</pubDate><description>&lt;p&gt;&lt;a href=&quot;http://www.lispcast.com/drupal/node/69&quot;&gt;Eric at LispCast wrote an article&lt;/a&gt; about why PHP is so ridiculously dominant as a web language, when arguably more powerful languages like Common Lisp linger in obscurity.&lt;/p&gt;

&lt;p&gt;I think the answer is pretty easy.  In real life, practicality usually trumps everything else.  Most programmers aren't paid to revolutionize the world of computer science.  Most programmers are code monkeys, or to put it more nicely, they're craftsmen who build things that other people pay them to create.  The code is a tool to help people do a job.  The code is not an end in itself.  &lt;/p&gt;

&lt;p&gt;In real life, here's a typical situation.  You have to make a website for your employer that collects survey data from various people out in the world, in a way that no current off-the-shelf program quite does correctly.  If you could buy a program to do it that'd be ideal, but you can't find a good one, so you decide to write one from scratch.  The data collection is time-sensitive and absolutely must start by X date.  The interface is a web page, and people are going to pointy-clicky their way through, and type some numbers, that's it; the backend just doesn't matter.  For your server, someone dug an old dusty desktop machine out of a closet and threw Linux on there for you and gave you an SSH account.  Oh right, and this project isn't your only job.  It's one of many things you're trying to juggle in a 40-hour work week.&lt;/p&gt;

&lt;p&gt;One option is to write it in Common Lisp.  You can start by going on a quest for a web server.  Don't even think about mod_lisp, would be my advice, based on past experience.  Hunchentoot is good, or you can pay a fortune for one of the commercial Lisps.   If you want you could also look for a web framework; there are many to choose from, each more esoteric, poorly documented and nearly impossible to install than the last.  Then you get to hunt for a Lisp implementation that actually runs those frameworks.  Then you get to try to install it and all of your libraries on your Linux server, and on the Windows desktop machine you have to use as a workstation.  Good luck.   &lt;/p&gt;

&lt;p&gt;Once you manage to get Emacs and SLIME going (I'm assuming you already know Emacs intimately, because if you don't, you already lose) you get to start writing your app.  Collecting data and moving it around and putting it into a database and exporting it to various statistics packages is common, so you'd do well to start looking for some libraries to help you out with such things.  In the Common Lisp world you're likely not to find what you need, or if you're lucky, you'll find what you need in the form of undocumented abandonware.  So you can just fix or write those libraries yourself, because Lisp makes writing libraries from scratch easy!  Not as easy as downloading one that's already been written and debugged and matured, but anyways.  Then you can also roll your own method of deploying your app to your server and keeping it running 24/7, which isn't quite so easy.  If you like, you can try explaining your hand-rolled system to the team of sysadmins in another department who keep your server machine running.  &lt;/p&gt;

&lt;p&gt;Don't bet on anyone in your office being able to help you with writing code, because no one knows Lisp.  Might not want to mention to your boss that if you're run over by a bus tomorrow, it's going to be impossible to hire someone to replace you, because no one will be able to read what you wrote.  When your boss asks why it's taking you so long, you can mention that the YAML parser you had to write from scratch to interact with a bunch of legacy stuff is super cool and a lovely piece of Lisp code, even if it did take you a week to write and debug given your other workload.&lt;/p&gt;

&lt;p&gt;Be sure to wave to your deadline as it goes whooshing by.  If you're a genius, maybe you managed to do all of the above and still had time to roll out a 5-layer-deep Domain Specific Language to solve all of your problems so well it brings tears to your eye.  But most of us aren't geniuses, especially on a tight deadline.&lt;/p&gt;

&lt;p&gt;Another option is to use PHP.  Apache is everywhere.  MySQL is one simple apt-get away.  PHP works with no effort.  You can download a &lt;a href=&quot;http://www.apachefriends.org/en/xampp.html&quot;&gt;single-click-install WAMP stack&lt;/a&gt; nowadays.   PHP libraries for everything are everywhere and free and mature because thousands of people already use them.  The PHP &lt;a href=&quot;http://www.php.net/docs.php&quot;&gt;official documentation&lt;/a&gt; is ridiculously thorough, with community participation at the bottom of every page.  Google any question you can imagine and you come up with a million answers because the community is huge.  Or walk down the hall and ask anyone who's ever done web programming.&lt;/p&gt;

&lt;p&gt;The language is stupid, but stupid means easy to learn.  You can learn PHP in a day or two if you're familiar with any other language.  You can write PHP code in any editor or environment you want.  Emacs?  Vim?  Notepad?  nano?  Who cares?  Whatever floats your boat.  Being a stupid language also means that everyone knows it.  If you jump ship, your boss can throw together a &quot;PHP coder wanted&quot; ad and replace you in short order.&lt;/p&gt;

&lt;p&gt;And what do you lose?  You have to use a butt-ugly horrid language, but the price you pay in headaches and swallowed bile is more than offset by the practical gains.  PHP is overly verbose and terribly inconsistent and lacks powerful methods of abstraction and proper closures and easy-to-use meta-programming goodness and Lisp-macro syntactic wonders; in that sense it's not a very powerful language.  Your web framework in PHP probably isn't continuation-based, it probably doesn't compile your s-expression HTML tree into assembler code before rendering it.  &lt;/p&gt;

&lt;p&gt;But PHP is probably the most powerful language around for many jobs if you judge by the one and only measure that counts for many people: wall clock time from &quot;Here, do this&quot; to &quot;Yay, I'm done, it's not the prettiest thing in the world but it works&quot;.&lt;/p&gt;

&lt;p&gt;The above situation was one I experienced at work, and I did choose PHP right from the start, and I did get it done quickly, and it was apparently not too bad because everyone likes the website.  No one witnessed the pain of writing all that PHP code, but that pain doesn't matter to anyone but the code monkey.&lt;/p&gt;

&lt;p&gt;If I had to do it over again I might pick Ruby, but certainly never Lisp.  I hate PHP more than almost anything (maybe with the exception of Java) but I still use it when it's called for.  An old rusty wobbly-headed crooked-handled hammer is the best tool for the job if it's right next to you and you only need to pound in a couple of nails.&lt;/p&gt;</description></item><item><title>Lispforum.com</title><link>http://briancarper.net/blog/lispforumorg</link><guid>http://briancarper.net/blog/lispforumorg</guid><pubDate>Sat, 28 Jun 2008 21:51:30 -0700</pubDate><description>&lt;p&gt;&lt;a href=&quot;http://briancarper.net/2008/06/17/wish-list/&quot;&gt;Ten days ago&lt;/a&gt; I complained that there were no good Lisp equivalents of ruby-forum or perlmonks.  It looks like someone &lt;a href=&quot;http://www.lispforum.com/index.php&quot;&gt;went and made one&lt;/a&gt;.  What good timing.&lt;/p&gt;

&lt;p&gt;I hope it's a success, and I hope it stays newb-friendly.  The amount of fake watch and shoe spam on &lt;a href=&quot;http://groups.google.com/group/comp.lang.lisp/topics&quot;&gt;comp.lang.lisp&lt;/a&gt; has reached critical mass.&lt;/p&gt;

&lt;p&gt;Speaking of mailing lists, maybe it's just me but I've never found mailing lists to be all that enjoyable to use.  They have the benefit of being a sort of lowest common denominator (everyone has email, and you can slap an HTML interface on top of one).  They also have the benefit of being distributed to some degree, because everyone who gets the email serves as an archive, and if the main server dies maybe you can recover things.  And mailing lists do have less overhead than MBs when it comes to running one, especially a high-traffic one, I would imagine.&lt;/p&gt;

&lt;p&gt;But the bad things about mailing lists vs. message boards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Message boards are accessible from anywhere that you have a web browser, which is everywhere.  Email isn't necessarily accessible from everywhere, unless you use webmail or SSH home and use mutt or something, which not everyone can or wants to do.  Or if there's a good web interface on the mailing list.&lt;/li&gt;
&lt;li&gt;You can't do anything more than plaintext, which isn't entirely a bad thing, HTML email is pure evil, but being able to cleanly post images or clickable links or formatted text on a message board is a nice feature.&lt;/li&gt;
&lt;li&gt;Threading never quite works correctly on mailing lists, because eventually someone will hit the wrong button in their mail client and break the thread; whereas on a message board it always works fine.&lt;/li&gt;
&lt;li&gt;You can move threads around between forums on an MB, you can edit threads, you can close threads, you can delete a post if you make a mistake; but mailing lists are write-only, and once you send a message off into the ether it's posted for everyone to see forever, and no one has much control over a list beyond moderating the messages that end up getting through.&lt;li&gt;
&lt;li&gt;Avatars.  Personal profiles.  These things make people seem more like people and less like a nameless entity.  It's friendlier and more inviting.&lt;/li&gt;
&lt;li&gt;The HTML interfaces people slap on top of mailing list archives are pretty horrible 95% of the time.  Probably because most people are using email clients anyways so no one cares.  Message boards generally look nice and have nice interfaces for reading and posting.&lt;/li&gt;
&lt;li&gt;Email sucks.  Spam filters and bounced messages mean you never quite know if what you just wrote actually made it to the list.  Reply to list vs. reply to sender vs. reply to all, etc. are all needless complications.  How many times have you seen &quot;UNSUBSCRIBE&quot; sent to everyone on a list?  The interface to mailing lists is not intuitive.  Whereas you can always see immediately if an MB post worked or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And so on.  I likes me my message boards.&lt;/p&gt;</description></item><item><title>Laptops at border crossings</title><link>http://briancarper.net/blog/laptops-at-border-crossings</link><guid>http://briancarper.net/blog/laptops-at-border-crossings</guid><pubDate>Tue, 24 Jun 2008 22:08:28 -0700</pubDate><description>&lt;p&gt;There's an article on &lt;a href=&quot;http://yro.slashdot.org/yro/08/06/25/010206.shtml&quot;&gt;Slashdot&lt;/a&gt; about a US Senate hearing on laptop seizures at border crossings.  This affects me, because I travel to Canada a lot and plan to move there within a year or so.&lt;/p&gt;

&lt;p&gt;It's a problem because my job requires me to handle what amount to people's medical records as data files on my laptop.  It's part of my job, and often I work from home.  As of right now, I never take my laptop with me to Canada partly because I don't know what would happen if a border agent decided to inspect or copy all of my data.  I can get in very serious trouble for breaching patient confidentiality.  On the other hand I could get in serious trouble if I refused to allow a search for myself; at best I'd be turned way at the border, having wasted hundreds of dollars to travel there.&lt;/p&gt;

&lt;p&gt;I really don't know what I'm going to do when I move.  I'll probably have to wipe my computers clean before shipping them up there.  Another option would be to encrypt all the data, upload it to the server that hosts my website, then download it all again after I move.  It's insane that I'd have to do such a thing though.  And shuffling sensitive data around to strangers' computers and servers isn't the safest thing in the world either.&lt;/p&gt;

&lt;p&gt;How do lawyers and doctors and people with trade secrets and other people with classified or legally protected information handle border crossings?  It's a bit of a conflict of interest.&lt;/p&gt;</description></item><item><title>Wish list</title><link>http://briancarper.net/blog/wish-list</link><guid>http://briancarper.net/blog/wish-list</guid><pubDate>Tue, 17 Jun 2008 23:47:43 -0700</pubDate><description>&lt;p&gt;What's the Common Lisp version of &lt;a href=&quot;http://perlmonks.org&quot;&gt;Perlmonks&lt;/a&gt; or &lt;a href=&quot;http://ruby-forum.org&quot;&gt;Ruby-forum&lt;/a&gt;?  I have yet to find it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://groups.google.com/group/comp.lang.lisp/topics&quot;&gt;comp.lang.lisp&lt;/a&gt; is largely crap.  50% of the traffic on that list is spam about shoes and fake watches.  The other half is equally split between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People debating tiny, silly semantic points of the &lt;a href=&quot;http://www.lispworks.com/documentation/common-lisp.html&quot;&gt;Common Lisp Hyperspec.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;People stuck in the 70's or 80's, talking about the good old days, ruminating about Lisp history.&lt;/li&gt;
&lt;li&gt;Flame wars.&lt;/li&gt;
&lt;li&gt;New people asking for help.  Some get good honest advice and helpful answers, many are flamed and ridiculed into next week if they even hint that they &lt;a href=&quot;http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/171fee6be225c833#&quot;&gt;dislike the parentheses&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Common Lisp community (if you can call it that) is a bunch of really smart guys, but they all live isolated in hermit shacks up in the mountains and they spend their time doing magic tricks with Lisp that few people ever see, and if you wander too close they throw rocks at you.&lt;/p&gt;

&lt;p&gt;What's the Common Lisp equivalent of &lt;code&gt;perldoc&lt;/code&gt; or &lt;code&gt;rdoc&lt;/code&gt;?  We have the Hyperspec.  It's an impressive document, but it's a bunch of painful HTML that looks like it was created in the early 90's, probably because it was.  It reads like a dusty, dry, technical document probably because it is.  What it's not, is friendly or easily readable.&lt;/p&gt;

&lt;p&gt;Perl has CPAN, Ruby has rubygems, what does Lisp have?  Either a hand-rolled system definition script, or if you're lucky an ASDF install file.  ASDF is the semi-standard Lisp way of installing libraries, except that it doesn't quite work in Windows, it doesn't check dependencies or handle different versions of a package very well, and it doesn't work the same on all Lisp implementations.  Many people in the so-called community think it's not very good. &lt;/p&gt;

&lt;p&gt;The fellow running &lt;a href=&quot;http://www.lispcast.com/drupal/node/29&quot;&gt;Lispcast&lt;/a&gt; makes another good point.  Where can you download Lisp?  It's not obvious.&lt;/p&gt;

&lt;p&gt;You could say &quot;OK Brian, good idea, now get to work!&quot;  The problem is that even if I had the time or willpower, I'm not the smartest guy in the world.  I honestly don't think I could design and run and maintain a CPAN.  And even if I did, would anyone use it?  But I do know that there ARE plenty of smart, enthusiastic people using Lisp.  Yet high-quality friendly code is largely not being produced.&lt;/p&gt;

&lt;p&gt;Peter Christensen wrote about &quot;&lt;a href=&quot;http://www.pchristensen.com/blog/articles/hey-language-snobs-dont-pinch-pennies/&quot;&gt;langauge snobs&lt;/a&gt;&quot; and the importance of community.  One point made is that some really ugly, horrific languages have been extremely successful simply because they've been accessible and fun.  An example given is the scripting language in Second Life, which has over 2.5 billion lines of code written in by tens of thousands of amateurs and has accurately modeled a realistic 3D environment with thousands of users at any given time.  All in an ugly language some guy invented AND implemented in one week.  The developers admit that the language is total crap, but it doesn't matter.  1) It has very good and accessible documentation, 2) it has a very newbie-friendly community, and 3) and it's easy to pick up, throw together some code and get immediate results.  Three things Common Lisp lacks.&lt;/p&gt;

&lt;p&gt;This is something I've said &lt;a href=&quot;http://briancarper.net/2008/04/07/perl-6/&quot;&gt;myself&lt;/a&gt; many times: an active, supportive, enthusiastic community is essential for the health of any programming language.  Common Lisp simply doesn't have one and it's a shame.&lt;/p&gt;

&lt;p&gt;I still secretly hope that &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; or &lt;a href=&quot;http://www.newlisp.org/&quot;&gt;NewLisp&lt;/a&gt; or &lt;a href=&quot;http://www.paulgraham.com/arc.html&quot;&gt;Arc&lt;/a&gt; turn out to be a huge success.  They are the kinds of things Lisp needs today.&lt;/p&gt;</description></item><item><title>Westinghouse, the saga continues</title><link>http://briancarper.net/blog/westinghouse-the-saga-continues-2</link><guid>http://briancarper.net/blog/westinghouse-the-saga-continues-2</guid><pubDate>Mon, 16 Jun 2008 23:56:52 -0700</pubDate><description>&lt;p&gt;Friday a guy on the phone said he'd call me back Monday or Tuesday to give me an update on when / whether they're ever going to send me my monitor.  Monday came and went with no call.  Not really surprising.  &lt;/p&gt;

&lt;p&gt;I filed a complaint with the BBB today.  We'll see how that goes.  At the BBB Westinghouse has around 150 complaints in the past 36 months, but 133 of them were supposedly solved &quot;satisfactorily&quot; and Westinghouse somehow still has the highest possible rating at the BBB.  I've read some things about the BBB not being an entirely neutral entity itself, but who knows.  I'll start filing complaints with other consumer groups if I need to.  &lt;/p&gt;

&lt;p&gt;A good handful of people have left comments here at my blog saying they aren't going to buy anything from Westinghouse themselves, which is great to hear.  I may mention my blog to Westinghouse next time I call them, if there is a next time.  Is not sending me the monitor I paid for really worth losing a bunch of customers?&lt;/p&gt;

&lt;p&gt;The sad thing is that I really do need a monitor with component and composite inputs, and they are somewhat rare (the local store had none except Westingcrap brand).  However I have found a Gateway model that has them, so maybe that'll work out.  I'd gladly take a refund from Westinghouse rather than a monitor at this point.&lt;/p&gt;

&lt;p&gt;(Read the whole crappy story of Westinghouse's dishonesty and horrible customer service: &lt;a href=&quot;http://briancarper.net/2008/03/15/westinghouse-do-they-suck/&quot;&gt;The beginning&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/03/22/blah-blah-blah/&quot;&gt;Update 1&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/08/westinghouse-closer-to-sucking-every-day/&quot;&gt;Update 2&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/14/westinghouse-the-saga-continues/&quot;&gt;Update 3&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/05/05/westinghouse-fail/&quot;&gt;Update 4&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/10/westinghouse-still-sucks/&quot;&gt;Update 5&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/16/westinghouse-the-saga-continues-2/&quot;&gt;Update 6&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/08/14/westinghouse-bbb-rating-cc-and-falling/&quot;&gt;Update 7&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/09/westinghouse-finally-getting-somewhere/&quot;&gt;Update 8&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/24/westinghouse-it-never-ends/&quot;&gt;Update 9&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/04/westingouse-victory/&quot;&gt;VICTORY&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/27/westinghouse-behind-the-scenes-the-horrors-of-a-call-center/&quot;&gt;aftermath&lt;/a&gt;.)&lt;/p&gt;</description></item><item><title>Python</title><link>http://briancarper.net/blog/python-2</link><guid>http://briancarper.net/blog/python-2</guid><pubDate>Sat, 14 Jun 2008 11:14:45 -0700</pubDate><description>&lt;p&gt;People are stupid.  We're blinded by our own prejudices and biases and preconceptions.  It's kind of understandable because no one has enough time to really collect enough information to have an informed opinion about everything.  So we end up extrapolating or relying on expert opinion or turning to our gut feeling.  Inevitably we end up being wrong some of the time.&lt;/p&gt;

&lt;p&gt;This leads to two problems.  One is that being a person myself, I'm also stupid, meaning there are almost certainly some beliefs I currently hold that are wrong.  The second is that from my perspective, I appear to be right about everything.  This is trivially true of everyone; as soon as a person decides they're wrong, they change their mind right away and become right again.  The problem then is how can I tell when I'm wrong and when I'm right?  I quick objective glimpse at reality suffices most of the time, but sometimes we're still tricked.&lt;/p&gt;

&lt;p&gt;Those two things in combination are a problem for everyone.  I think the best anyone can do is to realize that this is the case, be open to being wrong, and to take some efforts to rectify it.  At least minimize the damage, try to be as right about as many things as you can.&lt;/p&gt;

&lt;p&gt;This is why e.g. I started learning Emacs even though I love Vim, and why I stick with it even though it's unpleasant at first.  A lot of smart people say good thing about Emacs.  My opinion of it is much different now than before I'd used it a lot.  I think many things people say about it are wrong, but many are also right.  There is some good stuff there.&lt;/p&gt;

&lt;p&gt;For the same reason, I've decided to learn Python.  I've been wanting to for quite a while anyways.  In spite of the pain I've had trying to use it in the past, and my generally low opinion of the language, there may just be something worthwhile there.  A lot of smart people say good things about it, and a lot of good programs are written in it.  The community is large and active and enthusiastic.&lt;/p&gt;

&lt;p&gt;My first shot was to try some of the stuff at &lt;a href=&quot;http://www.pythonchallenge.com/&quot;&gt;Python Challenge&lt;/a&gt;.  It's an interesting site full of puzzles that you need a programming language to solve; many of them are geared toward Python or toward libraries available in Python, but you can use any good language for many of them.  I got through 17 of the puzzles last night, but I did look at &quot;hints&quot; on the forum for about half of those.  A lot of them require sort of specialized knowledge apart from knowledge of Python, on a wide variety of subjects, so it's pretty fun.&lt;/p&gt;

&lt;p&gt;My first pet peeve (of many to come, I'm sure): why doesn't &lt;code&gt;python --help&lt;/code&gt; or &lt;code&gt;python --version&lt;/code&gt; work?  Instead you have to use &lt;code&gt;python -h&lt;/code&gt; and &lt;code&gt;python -V&lt;/code&gt; (capital V).  This is non-standard.  It worries me when people do things like this differently.  But we'll see.&lt;/p&gt;</description></item><item><title>Work</title><link>http://briancarper.net/blog/work</link><guid>http://briancarper.net/blog/work</guid><pubDate>Thu, 05 Jun 2008 20:32:39 -0700</pubDate><description>&lt;p&gt;When I was in college, one of the guys in one of my classes was an older fellow who'd been working in the Real World for a while, and he asked me one day what kind of job I wanted after I graduated.  I remember saying &quot;I have no idea.  Pretty much anything.  If Microsoft drove up to my house with a truck full of money, I'd go work for them.&quot;&lt;/p&gt;

&lt;p&gt;Looking back now, I was wrong.  There really are more important things than money.  I couldn't do a job I didn't thoroughly enjoy.  Not for long anyways.  I don't make as much money doing what I'm doing right now as I could be making elsewhere, but I like it.  I like the atmosphere of working in a research setting.  I can't imagine working in a corporate setting.&lt;/p&gt;

&lt;p&gt;I feel really bad for people who work jobs that they hate.  When I got out of college I worked for six months doing tech support over the phone for a residential satellite dish company.  If not for the fact that I needed money to survive, I wouldn't have.  Near the end I was considering going to live under a bridge somewhere.  If faced with the choice, I'd probably rather dig ditches for a living than do that again.&lt;/p&gt;

&lt;p&gt;If hell existed, for me hell would consist of being eternally bored.  I've had jobs that required no thought, just mindless repetition of tasks that were slightly too complicated to get a computer or machine to do.  I can't imagine a worse fate.  I can feel my brains start to leak out of my ears after an hour of a boring task.&lt;/p&gt;

&lt;p&gt;When you have a job where you have to play with data, as I do at times, it can sometimes start turning into that kind of boredom.  But then I start writing programs to do all the mindless repetition for me.  Instead of spending lots of time solving little problems and doing little tasks, I solve bigger, harder, much more interesting problems that incidentally solve lots of little problems at the same time.&lt;/p&gt;

&lt;p&gt;Computers are useful tools for everyone.  But in one sense, a computer is often a waste in the hands of anyone but a programmer.  The way most people use computers is like using a powerful microscope as a hammer to pound in a nail.  Any time you find yourself copying and pasting a bunch of things over and over for an hour, there's something wrong.  Any time a human being is forced to do a linear search through a long list of ANYTHING on a computer screen, someone along the line has failed.  There are so many of these little problems in most people's lives that a programmer can solve for people.&lt;/p&gt;</description></item><item><title>Passwords in log files = bad</title><link>http://briancarper.net/blog/passwords-in-log-files-bad</link><guid>http://briancarper.net/blog/passwords-in-log-files-bad</guid><pubDate>Thu, 08 May 2008 19:31:38 -0700</pubDate><description>&lt;p&gt;In Linux when I use SSH I usually pass the host and port and username on the command line and then type the password when prompted.  (In those rare cases I don't use certificates to log in without a password.)  In Windows, PuTTY makes you pick a host and port and then prompts you for the username AND password.&lt;/p&gt;

&lt;p&gt;This leads to unpleasant results.  I'm so conditioned to open SSH and type my password at the prompt and hit Enter that I often end up typing my password as my username in PuTTY.  Bad.&lt;/p&gt;

&lt;p&gt;I've sometimes opened webpages that have some stupid Javascript bullcrap that tries to auto-focus the username field in a login form.  But if you're a fast typist (and mouse-ist) like I am, you can focus the field, type your username, and hit tab to get to the password field before the long-loading Javascript bloat has a time to load and run.  Which can result in auto-re-focusing the username field, which if it happens at just the right instant, results in my typing the password into it and pounding Enter before I have a chance to notice what's happened.  Bad bad bad.&lt;/p&gt;

&lt;p&gt;I use a computer far too often to have time too read every prompt, which leads to bad things.  Anyone who's used to flying around an interface at light-speed by instinct and repeated learned behavior has experienced this kind of thing I'm sure.&lt;/p&gt;

&lt;p&gt;This is horrendously bad because these programs often log the usernames of login attempts in plaintext in logs that lots of potentially evil people have the ability to read.  The logs don't usually log the passwords of login attempts, but if you type a password AS a username, oops, you're screwed.  Thankfully I'm root on most or all of the machines I ever SSH to, and I can go into /var/log and erase my mistake from the logs before anyone can see.  But that doesn't help for web pages I don't know.  And I wonder how often this kind of thing happens to other people.  I wonder how many people who aren't familiar with computers accidentally send their password as their username to a bunch of websites.&lt;/p&gt;

&lt;p&gt;After all the effort we go to to try to secure computer applications, these kinds of stupid human factors can still so easily ruin everything.  &lt;/p&gt;</description></item><item><title>Westinghouse: FAIL</title><link>http://briancarper.net/blog/westinghouse-fail</link><guid>http://briancarper.net/blog/westinghouse-fail</guid><pubDate>Mon, 05 May 2008 17:00:54 -0700</pubDate><description>&lt;p&gt;My ninth call to Westinghouse today, about my Westinghouse L2410NM 24&quot; LCD monitor which I RMA'ed back in March, revealed that they did in fact shipmy monitor, supposedly to my house, on April 4th or so.  A UPS tracking number confirms it.  There are are a few things wrong with this.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;In spite of the fact that I asked for a phone call to be updated on the status of my monitor whenever it was shipped, I received no such phone call.&lt;/li&gt;
&lt;li&gt;During the &lt;a href=&quot;http://briancarper.net/2008/04/14/westinghouse-the-saga-continues/&quot;&gt;four&lt;/a&gt; &lt;a href=&quot;http://briancarper.net/2008/04/08/westinghouse-closer-to-sucking-every-day/&quot;&gt;phone calls&lt;/a&gt; (or was it five?) I made to Westinghouse in April, AFTER my monitor was supposedly shipped to my house, no one at the company had any record that it shipped.  I was told that by multiple representatives over the past four weeks that my monitor was &quot;in processing&quot;.&lt;/li&gt;
&lt;li&gt;I asked for my monitor to be shipped to workplace, not my house.  My nice, safe, cozy workplace with human beings who can sign for large expensive packages.  Not my empty house in a neighborhood full of drug addicts, in the property theft capital of the west.  In addition to telling the phone representative this, I actually taped a 8.5 x 11 inch sheet of paper directly to the monitor itself (as well as the outside of the box) specifying SHIP TO: and my work address.  Even such drastic measures were not enough to catch the attention of whatever magical monitor-repair fairies work at Westinghouse, apparently.  Perhaps I should've carved that information directly into the monitor screen.&lt;/li&gt;
&lt;li&gt;I could possibly overlook the above, except that, as you may have surmised, at the present time, I do not, in fact, have my monitor.&lt;/li&gt;&lt;/ol&gt;

&lt;p&gt;After calling up UPS to ask why their driver left a $450 computer monitor, in a shiny bright blue and white box with pictures of a computer monitor all over it, sitting on my front porch while I was at work without getting my signature, I placed call number ten (yes, I've finally hit double digits!) to Westinghouse, and managed to escalate my issue to the Westinghouse corporate office.  Supposedly in 7-10 business days they will send me a brand new monitor.  &lt;/p&gt;

&lt;p&gt;Oh how I wish I had any confidence that I'm ever going to see that monitor.&lt;/p&gt;

&lt;p&gt;In the meantime, &lt;a href=&quot;http://www.lge.com/products/model/detail/w2452t.jhtml&quot;&gt;this guy&lt;/a&gt; was on sale at the local store, so I bought one.  Time will tell whether LG brand is any better than Westinghouse.  This time, I also bought the extended warranty, having learned my lesson that it can, indeed, be worth an extra $60 to save myself some pain and aggravation later.  I'm also going to think twice about buying things like this over the internet in the future.  There is something to be said about being able to drive 10 minutes down the road to have your property serviced or replaced by real-life human beings, rather than paying to have things shipped around the world for a month.&lt;/p&gt;

&lt;p&gt;(Read the whole crappy story of Westinghouse's dishonesty and horrible customer service: &lt;a href=&quot;http://briancarper.net/2008/03/15/westinghouse-do-they-suck/&quot;&gt;The beginning&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/03/22/blah-blah-blah/&quot;&gt;Update 1&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/08/westinghouse-closer-to-sucking-every-day/&quot;&gt;Update 2&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/14/westinghouse-the-saga-continues/&quot;&gt;Update 3&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/05/05/westinghouse-fail/&quot;&gt;Update 4&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/10/westinghouse-still-sucks/&quot;&gt;Update 5&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/16/westinghouse-the-saga-continues-2/&quot;&gt;Update 6&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/08/14/westinghouse-bbb-rating-cc-and-falling/&quot;&gt;Update 7&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/09/westinghouse-finally-getting-somewhere/&quot;&gt;Update 8&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/24/westinghouse-it-never-ends/&quot;&gt;Update 9&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/04/westingouse-victory/&quot;&gt;VICTORY&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/27/westinghouse-behind-the-scenes-the-horrors-of-a-call-center/&quot;&gt;aftermath&lt;/a&gt;.)&lt;/p&gt;</description></item><item><title>Westinghouse: the saga continues</title><link>http://briancarper.net/blog/westinghouse-the-saga-continues</link><guid>http://briancarper.net/blog/westinghouse-the-saga-continues</guid><pubDate>Mon, 14 Apr 2008 15:31:08 -0700</pubDate><description>&lt;p&gt;I'm up to eight phone calls to Westinghouse now (about my RMA).  (&lt;a href=&quot;http://briancarper.net/2008/04/08/westinghouse-closer-to-sucking-every-day/&quot;&gt;Previous Westinghouse enjoyment can be read here.&lt;/a&gt;)  It's been almost a month, and no one seems to know where my monitor is, other than reassuring me that &quot;they received it&quot;.  I don't think I should be kept waiting in the dark this long.&lt;/p&gt;

&lt;p&gt;When I first called today (call number 7), a fellow answered, then put me on hold for a while, then said &quot;Please call back in 10 minutes, our computers aren't working!&quot;.  This isn't what I like to hear from a supposed electronics company that's supposedly going to fix my huge complicated LCD monitor.  When I called back in a half hour (call number 8) their computers apparently were working again, and they put me on hold for a while longer and then said essentially &quot;Dunno.  Call back tomorrow between nine and noon and we'll have more information for you.&quot;  At this rate the number of calls I've made will hit double-digits by Friday.&lt;/p&gt;

&lt;p&gt;I can now safely conclude that Westinghouse = suck.  The next rank beyond &quot;suck&quot; is &quot;shyster&quot;.  I'm hesitantly confident they can achieve that lofty status, given their track record so far.&lt;/p&gt;

&lt;p&gt;(P.S. it's still a Westinghouse L2410NM 24&quot; LCD monitor.)&lt;/p&gt;

&lt;p&gt;(Read the whole crappy story of Westinghouse's dishonesty and horrible customer service: &lt;a href=&quot;http://briancarper.net/2008/03/15/westinghouse-do-they-suck/&quot;&gt;The beginning&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/03/22/blah-blah-blah/&quot;&gt;Update 1&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/08/westinghouse-closer-to-sucking-every-day/&quot;&gt;Update 2&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/14/westinghouse-the-saga-continues/&quot;&gt;Update 3&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/05/05/westinghouse-fail/&quot;&gt;Update 4&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/10/westinghouse-still-sucks/&quot;&gt;Update 5&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/16/westinghouse-the-saga-continues-2/&quot;&gt;Update 6&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/08/14/westinghouse-bbb-rating-cc-and-falling/&quot;&gt;Update 7&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/09/westinghouse-finally-getting-somewhere/&quot;&gt;Update 8&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/24/westinghouse-it-never-ends/&quot;&gt;Update 9&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/04/westingouse-victory/&quot;&gt;VICTORY&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/27/westinghouse-behind-the-scenes-the-horrors-of-a-call-center/&quot;&gt;aftermath&lt;/a&gt;.)&lt;/p&gt;</description></item><item><title>Westinghouse: Closer to sucking every day</title><link>http://briancarper.net/blog/westinghouse-closer-to-sucking-every-day</link><guid>http://briancarper.net/blog/westinghouse-closer-to-sucking-every-day</guid><pubDate>Tue, 08 Apr 2008 23:36:13 -0700</pubDate><description>&lt;p&gt;After my monitor's sudden death, I sent it off to Westinghouse to get it fixed.  Westinghouse got my monitor on March 20th.  I called them last week to see how it was doing, but after a good 10+ minutes listening to hold music I hung up without ever having spoken to anyone.  I called them back the next day in the morning and asked them if they got my monitor.  The nice lady on the phone said that she couldn't tell me that unless I gave her the UPS tracking number I used when I sent it.&lt;/p&gt;

&lt;p&gt;(As per my &lt;a href=&quot;http://briancarper.net/2008/03/15/westinghouse-do-they-suck/&quot;&gt;first entry&lt;/a&gt; on this subject, if I hadn't Googled extensively before I sent my monitor, I'd never have known to send it UPS to begin with. My first plan was to send it via US Postal Service.  But I've read at least one website that indicates Westinghouse rejects shipments by the postal service; God only knows where it would've ended up then.  Similar to Nate who recently commented on the above entry, Westinghouse claimed they emailed me RMA instructions, but I never got them and had to call back.  They blamed my &quot;spam filter&quot; just like they apparently did for Nate.  When I called back originally to get the RMA instructions, no one ever mentioned that I needed to use UPS.)&lt;/p&gt;

&lt;p&gt;In any case, I dug up the UPS tracking number and called back Westinghouse yet again.  That would be the &lt;strong&gt;sixth time&lt;/strong&gt; I called Westinghouse about my monitor.   The lady I spoke to this time wasn't so nice as the first, but she tried to be helpful.  She confirmed that they did get my monitor, but could give me no update on its status.  She said it &quot;must be still in processing&quot;.  I don't know what &quot;processing&quot; means, but I hope it means they're fixing it and not that it's sitting in a box in the back of a warehouse under a pile of mouse droppings.  She also said she'd put in a &quot;request for information&quot; at the RMA department, and that someone will call me when there's an update, to let me know the monitor has been shipped back to me.  If I actually get that phone call, honestly I will be pretty amazed.&lt;/p&gt;

&lt;p&gt;So this makes four weeks without my monitor, three weeks of which I have solid proof that the monitor has been in the hands of Westinghouse.  Even if they shipped it today, I won't get it for another week.  For some reason I have this funny feeling that I'm going to get it back and it's either going to be still broken, or break again in another week or two.&lt;/p&gt;

&lt;p&gt;Why couldn't they immediately send me a new or refurbished monitor of the same model to replace my broken one?  Many companies do this.  Instead I've been without a monitor for nearly a month now.  I don't own a TV, so that monitor was my only interface to digital entertainment of any sort.  This does not a satisfied customer make.&lt;/p&gt;

&lt;p&gt;I'm already certainly never buying another Westinghouse product.  In another week or so, Westinghouse will officially cross the threshhold into massive suck territory, if they haven't already.  As I planned, googling for &quot;Westinghouse RMA&quot; now shows my blog on the first page of results.  Having a blog does come in handy sometimes.  &lt;/p&gt;

&lt;p&gt;(P.S. it's a Westinghouse L2410NM 24&quot; LCD monitor.  Hi GoogleBot.)&lt;/p&gt;

&lt;p&gt;(Read the whole crappy story of Westinghouse's dishonesty and horrible customer service: &lt;a href=&quot;http://briancarper.net/2008/03/15/westinghouse-do-they-suck/&quot;&gt;The beginning&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/03/22/blah-blah-blah/&quot;&gt;Update 1&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/08/westinghouse-closer-to-sucking-every-day/&quot;&gt;Update 2&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/04/14/westinghouse-the-saga-continues/&quot;&gt;Update 3&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/05/05/westinghouse-fail/&quot;&gt;Update 4&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/10/westinghouse-still-sucks/&quot;&gt;Update 5&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/06/16/westinghouse-the-saga-continues-2/&quot;&gt;Update 6&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/08/14/westinghouse-bbb-rating-cc-and-falling/&quot;&gt;Update 7&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/09/westinghouse-finally-getting-somewhere/&quot;&gt;Update 8&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/09/24/westinghouse-it-never-ends/&quot;&gt;Update 9&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/04/westingouse-victory/&quot;&gt;VICTORY&lt;/a&gt;, &lt;a href=&quot;http://briancarper.net/2008/10/27/westinghouse-behind-the-scenes-the-horrors-of-a-call-center/&quot;&gt;aftermath&lt;/a&gt;.)&lt;/p&gt;</description></item><item><title>Perl 6</title><link>http://briancarper.net/blog/perl-6</link><guid>http://briancarper.net/blog/perl-6</guid><pubDate>Mon, 07 Apr 2008 23:14:25 -0700</pubDate><description>&lt;p&gt;I found this &lt;a href=&quot;http://www.perlfoundation.org/perl6/index.cgi?when_will_perl_6_be_released&quot;&gt;Perl6 imaginary timeline&lt;/a&gt; hilarious.  Sadly we're in 2008 and I don't think that blue line is quite as high as it was projected to be.  Though it appears that development is still slowly chugging along.  I still check up on Perl 6 once every six months or so. You can actually download perl6 (called &lt;a href=&quot;http://www.perlfoundation.org/perl6/index.cgi?rakudo&quot;&gt;rakudo?&lt;/a&gt;) and run it nowadays.&lt;/p&gt;

&lt;p&gt;It's been a long time since I've used Perl for anything.  If Perl 6 ever sees the light of day in a big way, I'm sure I will hunt down the Perl 6 bandwagon and chain myself to the back of it.  Perl was my first religion.&lt;/p&gt;

&lt;p&gt;I don't want to consider myself fickle, rather curious and eager to try and learn new things.  But honestly, fickle may be closer to the truth.  Already my Lisp enthusiasm is starting to wear off, largely from the impracticality of writing anything in Lisp (&lt;a href=&quot;http://www.gigamonkeys.com/book/&quot;&gt;in spite of good book titles to the contrary&lt;/a&gt;).  I've written a bunch of things in the past few months, but I never even considered Common Lisp for any of them.  Mostly because I was being paid to write them, and I don't think people want to pay me to screw around with something that's going to take me 10x as long as using a language I know already.&lt;/p&gt;

&lt;p&gt;I believe the main way I came to know and love Perl and later Ruby was through all the little 5-minute throwaway scripts I wrote to get my job(s) done.  Those little scripts led to bigger scripts, which led to even bigger scripts.  Emotionally it's satisfying to actually solve a problem in a language, even a small problem.  Not so easy to do in Lisp; it doesn't seem to lend itself well to scripting.  Lisp is nice if you've come up with the perfect abstraction for your program and want to implement it exactly like you're thinking of it.  Most of the time, by the time I think up the perfect abstraction, I'd already be done if I'd written it in straightforward Ruby to begin with.  &lt;/p&gt;

&lt;p&gt;And, to rant briefly, in Ruby I wouldn't have to write my own function to fetch all the keys of a hash, or print a formatted date string, or any of the other countless little holes in Lisp that are nicely filled in Ruby by all the available libraries.  I've said it before and I'll say it again: a large active community is one of the biggest necessities for a healthy programming langauge.  It really doesn't seem like many people in the Lisp community give a crap about getting lots of new people to use Lisp.  Or if so, I never hear much about it, compared with other communities.  There's no reason a language can't be really great and powerful, and still accessible to the masses.  That's one of Ruby's strengths.  You don't have to read a few hundred pages of &lt;a href=&quot;http://www.lisp.org/HyperSpec/FrontMatter/index.html&quot;&gt;hyperspec&lt;/a&gt; and learn 50 years of history and spend a week and half setting up an arcane SLIME/Emacs environment to start writing Ruby.&lt;/p&gt;

&lt;p&gt;But yeah, Perl 6.  I want it to succeed, for entirely emotional reasons.  I want a new toy.&lt;/p&gt;</description></item><item><title>"Enterprise"</title><link>http://briancarper.net/blog/enterprise</link><guid>http://briancarper.net/blog/enterprise</guid><pubDate>Mon, 07 Apr 2008 19:30:29 -0700</pubDate><description>&lt;p&gt;&quot;Enterprise&quot; is one of my least favorite buzzwords.  (Though the top of my list of buzzword hatred will always be &quot;solution&quot;.  Ugh.  Enterprise is probably a close second or third.)&lt;/p&gt;

&lt;p&gt;For the life of me I don't know what &quot;enterprise&quot; means, when used in the buzzword sense to refer to software.  Wikipedia links to &lt;a href=&quot;http://evolt.org/node/5281&quot;&gt;this page&lt;/a&gt; which has an interesting definition:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Enterprise (adj)
      Large.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That may just sum it up.  The general impression I get from &quot;enterprise software&quot; is a program used at a business.  And yes, some sense that it's large.  Beyond that...?  It doesn't make me want to buy something when someone tells me their product is &quot;enterprise&quot;, though I get the impression that it should?&lt;/p&gt;

&lt;p&gt;I know there are people who really use language like this on / against other people.  Are there really people who fall for it though?  There must be, or people wouldn't talk like that.  Or is this like some kind of marketers' cant, where marketers made up a bunch of words they can use to talk to other marketers without anyone else being able to tell what they're saying?&lt;/p&gt;</description></item></channel></rss>

