<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6053582386973444950</id><updated>2011-07-07T16:56:18.538-07:00</updated><category term='GPL'/><category term='literate'/><category term='web'/><category term='process'/><category term='licenses'/><title type='text'>Freedom of Movement</title><subtitle type='html'>Random thoughts about writing software or other technical stuff that catches my fancy.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-276488132657159531</id><published>2010-07-19T18:50:00.000-07:00</published><updated>2010-07-19T18:52:46.873-07:00</updated><title type='text'>The Value of Copyright</title><content type='html'>In Atlas Shrugged, the fictional composer Richard Halley talks about not giving away his music to people who feel entitled to his efforts. Halley's comment sounded like most pro-copyright arguments. Atlas Shrugged champions personal freedom and responsibility. Yet the current copyright laws create slaves. Contradictions cannot exist. So what was I missing?&lt;br /&gt;&lt;h2&gt;Slavery&lt;/h2&gt;Okay, I guess we first need to explore that slavery bit. Software, music, and movie producers "license" their "content". Read one of those licenses. Tell me, do I have any of the rights of an owner? Nope.&lt;br /&gt;&lt;br /&gt;Effectively, you "borrow" the content from the creator. And their rights last longer than you'll live. Proverbs 99:99 says "the borrower is slave to the lender". The DMCA, lifetime copyrights, and licensing agreements all work towards one end - making you the "borrower" (aka "slave"). These "content producers" know this. It is intentional. After all, they are entitled to your money.&lt;br /&gt;&lt;br /&gt;That is what bothers me so much. It's no longer about a fair trade of equal value. These people feel entitled to my dollars. And the current law/license model feeds that feeling.&lt;br /&gt;&lt;h2&gt;Depreciating Assets&lt;/h2&gt;So what is the true value of digital content?&lt;br /&gt;&lt;br /&gt;Until quite recently, copying creative works cost a lot. Recording equipment, printing presses that can run 1,000's of pages, and even getting the finished product into a buyer's hands require capital and expertise. This naturally limited copying to a very small percentage of the population. And the ability to make copies in itself held value. The limited supply increased the value of each copy.&lt;br /&gt;&lt;br /&gt;Digital copies change the rules. Once you digitize music, the supply nears infinity. Making copies costs almost nothing. The Internet brings distribution cost to almost nothing. From a purely cost point of view, I can make millions of copies without any additional cash outlay. Multiply this by the thousands who can do the same thing. The supply explodes almost instantly after release.&lt;br /&gt;&lt;br /&gt;The digital supply far outstrips the demand. That makes each individual copy worth less. Actually, the copies approach your cost for distribution - zero. The value of your asset depreciates. Even cars don't lose value this fast.&lt;br /&gt;&lt;br /&gt;Enter copyright law. The law limits supply by threatening punishment for copies. Copyright law stands against the asset's natural depreciation. It is an attempt to legislate value. Now the question becomes, can it be done successfully?&lt;br /&gt;&lt;h2&gt;The Other Side of the Coin&lt;/h2&gt;Honestly, there is value in the process of creation. So what happened before copyright law? Artists - content producers - found people who valued their work and could afford it. We called these buyers "patrons". &lt;br /&gt;&lt;br /&gt;The original copyright laws in the United States mimiced the patronage system. The patrons - citizens of the United State - gave the creator something of value in return for this creative work. The creator received an exclusive ability to control distribution of their work for a limited time. &lt;br /&gt;&lt;br /&gt;In the 1970's, Congress greatly extended the time period for copyrights. Businessmen trade. You give something of value and receive an equal value in return. The patrons - we the citizens of the United State - gave an increased value to the creators with the longer time. So what did we receive in return?&lt;br /&gt;&lt;h2&gt;The Solution?&lt;/h2&gt;I don't have one. I am not arguing for or against copyright. I am trying to learn how value works in an environment of near infinite supply. What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-276488132657159531?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/276488132657159531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=276488132657159531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/276488132657159531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/276488132657159531'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2010/07/value-of-copyright.html' title='The Value of Copyright'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-8098808212266308306</id><published>2010-06-25T15:57:00.000-07:00</published><updated>2010-06-25T20:23:32.160-07:00</updated><title type='text'>Taking Apart an EEE PC</title><content type='html'>My wife's EEE PC 1000HD died last night. The battery drained and would not recharge. Turns out power never reached the battery. Something went wrong with the power supply.&lt;br /&gt;&lt;br /&gt;It didn't take long to find the problem. Unfortunately, Google turned up no hits for dis-assembling the machine. So here's some help!&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;How To Take Apart an EEE PC 1000HD&lt;/h2&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Unplug the computer. Don't get lazy - you'll regret it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the battery. See your manual for instructions.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the 6 screws from bottom.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the 3 short screws that were under the battery.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the cover on the bottom of the machine.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Unscrew the hard drive.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pull out the hard drive using the tab.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Turn the EEE PC right side up.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Along the top of the keyboard are 4 tabs. Push them back using a small flat head screw driver.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Gently pry up the keyboard. It's taped down, so pry it a little.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Slide the keyboard up towards the screen slightly. It has tabs on the bottom too.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Disconnect keyboard ribbon. I used a pair of needle nose pliers.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the keyboard and set it aside.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the 6 screws from under the keyboard.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Disconnect the two ribbons with tabs. I don't what they do.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The top of the EEE PC comes off with a little effort.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove the screws from the motherboard. Leave in the four screws that hold the fan.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Remove The screws that connect the LCD to the motherboard.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Pry the edge out slightly where it's over the VGA port.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;Do these in reverse to re-assemble your EEE PC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-8098808212266308306?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/8098808212266308306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=8098808212266308306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/8098808212266308306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/8098808212266308306'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2010/06/taking-apart-eee-pc.html' title='Taking Apart an EEE PC'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-7337102628493556538</id><published>2010-05-09T11:52:00.000-07:00</published><updated>2010-05-09T13:02:29.182-07:00</updated><title type='text'>Everything to Everyone</title><content type='html'>Ian Bogost posted &lt;a href="http://www.bogost.com/mt/mt-tb.cgi/2060"&gt;a good article on Apple's third party development policy&lt;/a&gt;. The comments focus a lot on cross platform development. Why?&lt;br /&gt;&lt;br /&gt;Many years ago, some very smart people at Bell Laboratories saw a problem. When the company upgraded computers, they had to re-write the software. They realized that this could not work over a long period of time. And so they created an abstraction layer.&lt;br /&gt;&lt;br /&gt;This abstraction layer separated the application software from the computer hardware. New machines meant adapting the abstraction layer only. Applications ported from one platform to another. Sound familiar?&lt;br /&gt;&lt;br /&gt;The idea of cross platform development has existed for &lt;span style="font-style:italic;"&gt;decades&lt;/span&gt;. All of the programming languages, frameworks, and web applications fail to solve the problem. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Learn From the Past&lt;/h2&gt;The abstraction layer from Bell Labs started the modern operating systems with unix. In theory, their operating system worked wonders. In practice, it fractured back into proprietary little domains. HP's unix ran on HP's computers. IBM's ran on IBM machines. And once again, the dream of &lt;span style="font-style:italic;"&gt;cross platform&lt;/span&gt; withered.&lt;br /&gt;&lt;br /&gt;A second group saw this happen. They developed a set of standards for any company calling their operating system &lt;span style="font-style:italic;"&gt;unix&lt;/span&gt;. This standard is known as POSIX. Software written against POSIX work fairly well across platforms. Or I should say &lt;span style="font-style:italic;"&gt;across platforms that support the standard&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;You see, it happened again - Microsoft went in their own direction - straying from the POSIX and unix standards. The cycle begins again: proprietary split, abstraction layer, split, abstraction, etc. We're trapped in a circle &lt;span style="font-weight:bold;"&gt;because we didn't solve the problem&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Me, Myself, and I&lt;/h2&gt;Technology can never solve the problem. It's not a technical problem. This is a &lt;span style="font-weight:bold;"&gt;moral&lt;/span&gt; problem. Stop using these silly, cross platform &lt;span style="font-weight:bold;"&gt;non-&lt;/span&gt;&lt;span style="font-style:italic;"&gt;solutions&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;"But someone else is just going to use them, and I'll be left behind!" Thank you for proving my point. You just made a moral judgment. You cannot change anyone else's morals. You can only change your own. And you are responsible only for your own. Don't change the world, change yourself.&lt;br /&gt;&lt;br /&gt;We are not choosing a technical solution. We are choosing a moral value system. Choose wisely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-7337102628493556538?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/7337102628493556538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=7337102628493556538' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/7337102628493556538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/7337102628493556538'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2010/05/everything-to-everyone.html' title='Everything to Everyone'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-2251693282679604808</id><published>2010-03-06T10:15:00.000-08:00</published><updated>2010-03-06T12:33:41.577-08:00</updated><title type='text'>Staunching the Flood</title><content type='html'>The question recently came up on Stackoverflow about &lt;a href="http://stackoverflow.com/questions/2393312/how-am-i-supposed-to-keep-up-with-the-flood-of-new-technologies"&gt;dealing with the flood of new technologies&lt;/a&gt;. I ignore a lot. What makes one thing worth a look over another?&lt;br /&gt;&lt;br /&gt;We measure any technology based on our personal priorities. What do &lt;span style="font-style:italic;"&gt;you&lt;/span&gt; care about? What matters to &lt;span style="font-style:italic;"&gt;you&lt;/span&gt;? I look for freedom/independence, integrity, flexibility, and stability. I values these traits in my own life. And I project those onto the technology that I use.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Know Thyself&lt;/h2&gt;Sounds nice and fluffy, doesn't it? I simply begged the question - &lt;span style="font-style:italic;"&gt;how do I find my priorities?&lt;/span&gt; You see, everyone has priorities. Verbalizing them is another matter entirely.&lt;br /&gt;&lt;br /&gt;As a teenager, I would read the Prince Valiant comic strip in the newspaper. One weekend found the cast on an island. The island had some magic that showed you the consequences of every decision. An old man sat in the path, knowing that if he moved a young boy would die. Prince Valiant decides to leave. Immediately he sees that decision leads to a great war - and many deaths. He stops, intending to avoid an awful future.&lt;br /&gt;&lt;br /&gt;Another member of the party then asks the question &lt;span style="font-style:italic;"&gt;what happens if we stay?&lt;/span&gt; Guess what? Great books are never written. Tyrants come to power. Society collapses. The cast then leave. And old man who lives on the island wonders why no one ever thought of that before.&lt;br /&gt;&lt;br /&gt;The cast leaves the island because they prioritized. The very fact that you live life means you have priorities. Without priorities, we would sit absolutely still - paralyzed by an infinite number of choices. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Needle in a Haystack&lt;/h2&gt;How does one go about learning their own priorities? I can only share some of what has worked for me. These will not work for everyone, because not everyone is like me (thankfully). &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Take a broad, quick look at many different technologies.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Find people like yourself, and ask them what they like.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Quantify your reaction as &lt;span style="font-style:italic;"&gt;love&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;hate&lt;/span&gt;, or &lt;span style="font-style:italic;"&gt;neutral&lt;/span&gt;.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Quick, Broad Look&lt;/h3&gt;Like any good research project, start with the big picture. You don't need proficiency. A basic understanding will suffice. As a bonus, you will also find that this step gets easier the more exposure you have.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;People Like Me&lt;/h3&gt;Do you know someone whose personality is like yours? Do you share several things in common with them? Find out what they value. What technology do they like? It's a great starting point.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Love, Hate and Neutral&lt;/h3&gt;Finally, make a decision. I am an intuitive thinker. My subconscious naturally applies all of my priorities to each technology. The first inkling of a technology's value arrives emotionally. Technologies in line with my values garner excitement. I can read about something new and walk away thinking &lt;span style="font-style:italic;"&gt;yeah, they're on to something&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;The opposite response also happens - &lt;span style="font-style:italic;"&gt;this is stupid&lt;/span&gt;. Bad technologies usually have a downside. They go against my priorities. &lt;br /&gt;&lt;br /&gt;Neutral technologies work like the name implies. They don't really bring anything new. Yet I see no reason to avoid them. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Full Circle&lt;/h2&gt;Now comes the really complicated part. These are &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; three &lt;span style="font-style:italic;"&gt;steps&lt;/span&gt;. This is a cycle that repeats itself over and over. Each iteration feeds into the next. &lt;br /&gt;&lt;br /&gt;I see a lot of career advice about looking for your passion. And almost none on &lt;span style="font-style:italic;"&gt;how&lt;/span&gt;. Start looking at the love/hate decisions. What do these technologies have in common? Your passion (if I need to say it) involves the things you &lt;span style="font-weight:bold;"&gt;love&lt;/span&gt;. As you begin seeing those, it filters out huge chunks of the technology world. And you end with a more manageable slice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-2251693282679604808?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/2251693282679604808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=2251693282679604808' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/2251693282679604808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/2251693282679604808'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2010/03/staunching-flood.html' title='Staunching the Flood'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-5159026115841755171</id><published>2009-12-25T11:23:00.000-08:00</published><updated>2009-12-25T12:31:31.365-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='process'/><title type='text'>Red Flags</title><content type='html'>During a recent interview, the hiring manager handed me a book called &lt;a href="http://www.amazon.com/Toyota-Way-Jeffrey-Liker/dp/0071392319"&gt;The Toyota Way&lt;/a&gt; by Jeffrey Liker. The book presents &lt;em&gt;value&lt;/em&gt; as a stream rather than discrete points. Value derives from how much any given step moves you towards the goal. Wasting time faster reduces cost, and doesn't add value.&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://www.amazon.com/Thou-Shall-Prosper-Commandments-Making/dp/0470485884/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1261769633&amp;sr=1-1"&gt;Thou Shall Prosper&lt;/a&gt;, Rabbi Daniel Lapin highlights the spiritual nature of value. If you put these two together, then we can see that value comes from the spiritual flow of something (parts, information, etc.) from one person to another. &lt;strong&gt;People&lt;/strong&gt; are the most important part of the stream! The greatest gains come from an investment in people. Change people, and the rest follows.&lt;br /&gt;&lt;br /&gt;Dr. Liker then explains how Toyota's &lt;em&gt;just in time production&lt;/em&gt;. &lt;em&gt;Just in time&lt;/em&gt; means making parts just as the next step needs them. You don't build up huge inventories of parts laying around taking up space. So what happens when a machine breaks? The entire production process halts. &lt;br /&gt;&lt;br /&gt;Imagine how much that costs? The entire production of a Toyota car &lt;em&gt;stops&lt;/em&gt; when a ten cent fuse goes out. The obvious answer, of course, is build up some inventory to keep the rest of the line moving while you fix the errant machine. Obvious, and wrong.&lt;br /&gt;&lt;br /&gt;The manager of a Toyota plant has an incentive for preventive maintenance. Something in the electronics blew the fuse. If he just replaces the fuse, that same machine will break down again in a day or two. And it will continue ad infinitum. The cost is down time, parts, and labor every two days for the next three years. That comes to 16,425 minutes.&lt;br /&gt;&lt;br /&gt;Now imagine that he spends two hours fixing the broken electronics - eliminating the short. The cost is two hours down time, parts, and labor. That's it. 120 minutes versus 16,425 - which costs less?&lt;br /&gt;&lt;h2&gt;Solve the Problem&lt;/h2&gt;A huge inventory &lt;strong&gt;hides&lt;/strong&gt; the true cost of the down machine. &lt;em&gt;Just in time&lt;/em&gt; forces you to confront the cost face first. In &lt;a href="http://www.amazon.com/Good-Great-Companies-Leap-Others/dp/0066620996/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1261772160&amp;sr=1-1"&gt;Good to Great&lt;/a&gt;, Jim Collins promotes red flags. They signal a problem. And you can't simply dismiss them. &lt;br /&gt;&lt;br /&gt;Red flags hurt. Red flags cause pain. Ignoring them costs far more than solving the problem. &lt;em&gt;Just in time&lt;/em&gt; creates a red flag. Problems simply can't fester because they'll kill you first. Consequently, you fix them. Even better, you have a measurable way of justifying the right decision. That same red flag hurts your boss too. You help them by solving the problem instead of hiding it.&lt;br /&gt;&lt;br /&gt;So how does all of this apply to software development? It's a core tenet of iterative programming. You don't push around an inventory of nuts and bolts. Our inventory is a bit more ephemeral, yet just as real - code. The iterations create red flag moments. When the client says "that wasn't quite what I had in mind," it's a red flag. Plotting progress every day is a red flag.&lt;br /&gt;&lt;br /&gt;Iterative development promotes public accountability. Our cost is not in minutes or down time. It's in pride and merit. When a task turns out harder than I expected, that's embarrassing. Red flag. And I don't want it to happen again. The red flag makes me want to fix the problem - otherwise it &lt;strong&gt;will&lt;/strong&gt; happen again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-5159026115841755171?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/5159026115841755171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=5159026115841755171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/5159026115841755171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/5159026115841755171'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2009/12/red-flags.html' title='Red Flags'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-4169295652039949555</id><published>2009-12-15T18:41:00.000-08:00</published><updated>2009-12-23T20:18:55.263-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literate'/><title type='text'>Why Literate Programming?</title><content type='html'>Several years ago, looking for an outline editor, I stumbled across &lt;a href="http://personalpages.tds.net/%7Eedream/front.html"&gt;Leo&lt;/a&gt;. I was a proponent of &lt;em&gt;comments, comments, comments&lt;/em&gt;. I used this really cool - and long - template at the start of every subroutine. Spell out every variable, its purpose, and how it arrived (global, parameter, or local). Describe the return value in exquisite detail. Establish draconian coding standards and follow them to the letter. If everyone writes code like me, then we won't have this lump of spaghetti.&lt;br /&gt;&lt;br /&gt;Boy was I wrong! &lt;a href="http://personalpages.tds.net/%7Eedream/front.html"&gt;Leo&lt;/a&gt; talks about this notion of &lt;em&gt;&lt;a href="http://www.literateprogramming.com/"&gt;literate programming&lt;/a&gt;&lt;/em&gt;. We read books all of the time. Why is so source code so much more difficult to read? What if we wrote code like a book?&lt;br /&gt;&lt;br /&gt;Source code is fundamentally hard to read &lt;strong&gt;because we write it for the computer&lt;/strong&gt;. Read the line again - I'll wait. Did you get that? Did you really, really get that? The structure of my code, the order of instructions, everything focuses on how the &lt;em&gt;computer&lt;/em&gt; works. No wonder a human being has trouble - &lt;strong&gt;they're not a computer&lt;/strong&gt;.&lt;br /&gt;&lt;h2&gt;100 MPH in the Wrong Direction&lt;/h2&gt;Coding standards, comment blocks, and language constructs utterly fail at producing readable code. These solutions ignore the fundamental problem - we're trying to write the same thing for two completely different audiences. Imagine a classroom with PhD candidates and kindergartners. Now explain how to draw a landscape - to both groups - at the same time. Not a very successful lecture.&lt;br /&gt;&lt;br /&gt;Source code faces the same dichotomy. Humans and computers simply do not think alike. Computers require very precise, very specific instructions. They have almost no attention span. And can never grasp &lt;em&gt;the big picture&lt;/em&gt;. In short, computers are kindergartners.&lt;br /&gt;&lt;br /&gt;A human, on the other hand, likes the big picture. We understand our world by association. How things fit together gives as much or more information as the thing itself. When one piece of code &lt;em&gt;relates&lt;/em&gt; with another, that has meaning to us. The code that sets a verbose flag &lt;em&gt;belongs with&lt;/em&gt; the code that prints the verbose messages.&lt;br /&gt;&lt;br /&gt;To the computer, sequence matters. To a human, relationship matters. And quite often, these two views are diametrically opposed. Who wins? The computer. Because the computer ultimately runs the software. If it can't understand the source, then you do not achieve your goal. Human comprehension takes a back seat.&lt;br /&gt;&lt;br /&gt;Then it breaks. Two years later, kapow! The client is screaming. You're sleep deprived. And after mopping up the mess, you think &lt;em&gt;how can I avoid this every happening again&lt;/em&gt;. When debugging, &lt;strong&gt;human&lt;/strong&gt; comprehension matters more.&lt;br /&gt;&lt;br /&gt;All of this to say - we code for two audiences because &lt;strong&gt;we have two audiences&lt;/strong&gt;.&lt;br /&gt;&lt;h2&gt;Full Circle&lt;/h2&gt;&lt;a href="http://www.literateprogramming.com/"&gt;Literate programming&lt;/a&gt; recognizes and solves this exact problem. You write and format code for a &lt;em&gt;human&lt;/em&gt; audience. Then tell the computer how to reformat that same code for itself.&lt;br /&gt;&lt;br /&gt;The language compiler translates English into machine codes. Literate programming tools translate human structure into computer sequence. You target both audiences, without redundancy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-4169295652039949555?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/4169295652039949555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=4169295652039949555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/4169295652039949555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/4169295652039949555'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2009/12/why-literate-programming.html' title='Why Literate Programming?'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-5788471088583526036</id><published>2009-11-10T10:04:00.000-08:00</published><updated>2009-11-10T10:44:10.202-08:00</updated><title type='text'>You Have Style</title><content type='html'>Why do I like Perl? On the downside, Perl has 10 ways of doing the same thing. It enforces no particular style - so you'll find all kinds of different styles out there. The code can range from obscure to nigh unreadable. The sheer number of libraries is dizzying. How many duplicate functionality? Why in the world would I use Perl instead of Python, Java, or Ruby?&lt;br /&gt;&lt;br /&gt;Our personalities suit us for different working environments. Some people require frequent supervision. They need a list - do step 1, then step 2, etc. Others fly by the seat of their pants, instinctually knowing the right things to do. I fall somewhere in between, leaning towards seat of the pants.&lt;br /&gt;&lt;br /&gt;Perl fits comfortably into my personal range on the spectrum. It provides a basic structure with reasonable limits. And then opens up a field of possibilities inside of the fence. Sure, you can get to the tree by three different paths:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The scenic route around the hill and through the flower garden.&lt;/li&gt;&lt;li&gt;Quick - going directly over the hill.&lt;/li&gt;&lt;li&gt;Cut across the hill, overlooking the flowers yet a little more direct.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Perl lets outside circumstances influence your decision: performance, maintainability, readability, flexibility, quality, etc. And I like that. Not everyone does.&lt;br /&gt;&lt;br /&gt;What's the point? Different artists choose different mediums because the medium expresses a little bit of who they are. Like other artists, a programmer chooses his medium because it expresses a little bit of who he is. You can never persuade a programmer away from their favorite language on technical merit. They didn't choose it for technical merits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-5788471088583526036?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/5788471088583526036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=5788471088583526036' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/5788471088583526036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/5788471088583526036'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2009/11/you-have-style.html' title='You Have Style'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-4613208915936756534</id><published>2009-11-07T17:13:00.000-08:00</published><updated>2009-11-07T17:49:41.454-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web apps</title><content type='html'>Having entered the job market again, web programming is a big thing right now. And I'll be honest, I love online banking. So why do I feel reluctance at embracing &lt;span style="font-style: italic;"&gt;web applications&lt;/span&gt;?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Remote applications&lt;/span&gt; offer many advantages...&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Easy distribution&lt;/li&gt;&lt;li&gt;Data security&lt;/li&gt;&lt;li&gt;Data backup&lt;/li&gt;&lt;li&gt;Easy updates&lt;/li&gt;&lt;li&gt;Consistent interface&lt;/li&gt;&lt;/ul&gt;Mission critical data requires administration. It needs backups in case of emergency. It needs security against theft. And every piece of software receives tweaks. Putting the data and application on &lt;span style="font-weight: bold;"&gt;your server&lt;/span&gt; lets you provide the administrative services to smaller customers. Web applications all share these strengths.&lt;br /&gt;&lt;br /&gt;Then is &lt;span style="font-style: italic;"&gt;the web&lt;/span&gt; the right platform for remote access? AJAX relies on hooks in the browser. We keep adding features to &lt;span style="font-weight: bold;"&gt;text parsers&lt;/span&gt;. We have dozens of &lt;span style="font-style: italic;"&gt;frameworks&lt;/span&gt; built around synchronizing an asynchronous protocol. Why?&lt;br /&gt;&lt;br /&gt;X Windows provides remote graphical applications. And these applications behave like all of your other applications. Why aren't we making it more efficient? Why aren't all these advances occurring in a full fledged platform?&lt;br /&gt;&lt;br /&gt;Because all of the computers running Microsoft Windows can't support those applications. We have all of these &lt;span style="font-style: italic;"&gt;ad hoc answers&lt;/span&gt; hacking around Windows' short comings. Because it is not in Microsoft's best interests to play along. This is not &lt;span style="font-weight: bold;"&gt;innovation&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It is, however, where we are. So I will continue learning more web technologies and writing web applications. I just needed to understand the reason behind it all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-4613208915936756534?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/4613208915936756534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=4613208915936756534' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/4613208915936756534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/4613208915936756534'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2009/11/web-apps.html' title='Web apps'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6053582386973444950.post-3563999590286230971</id><published>2008-11-28T19:12:00.000-08:00</published><updated>2009-02-11T14:22:59.159-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GPL'/><category scheme='http://www.blogger.com/atom/ns#' term='licenses'/><title type='text'>Software Servant</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4VUY4sr36N8/SYkK4PzwmkI/AAAAAAAAAK0/bFSfsk01nig/s1600-h/2009-01-17-30.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_4VUY4sr36N8/SYkK4PzwmkI/AAAAAAAAAK0/bFSfsk01nig/s200/2009-01-17-30.jpg" alt="" id="BLOGGER_PHOTO_ID_5298778398010677826" border="0" /&gt;&lt;/a&gt;I am a strange person - or so my daughter tells me. I enjoy learning how things work. Seeing what makes them tick. Because some day I'll run across a problem that bit of information solves. I am a problem solver, a designer, an architect. All of those random jigsaw pieces create a real, vivid picture.&lt;br /&gt;&lt;br /&gt;Instincts play an important role. You read an article on the web and say &lt;span style="font-style: italic;"&gt;yeah, that works&lt;/span&gt;. It's the kind of thing you can not explain logically. You see the right answer, but not why that solution works.&lt;br /&gt;&lt;br /&gt;Instincts work in the other direction too. Some solutions never feel right. Again, you can't bullet point why. Your gut just says &lt;span style="font-style: italic;"&gt;this isn't right&lt;/span&gt;. The infamous software &lt;abbr title="End User License Agreement"&gt;EULA&lt;/abbr&gt; always struck me that way. It never felt right. And I never understood why.&lt;br /&gt;&lt;br /&gt;Then my wife and I attended a &lt;a href="http://www.daveramsey.com/fpu/home/"&gt;Financial Peace University&lt;/a&gt; class. The teacher - &lt;a href="http://www.daveramsey.com/"&gt;Dave Ramsey&lt;/a&gt; - gives a lesson entitled &lt;span style="font-weight: bold;"&gt;Dumping Debt&lt;/span&gt;. He describes debt as a chain on your life. The class is worth your time just to see Dave twist himself up in the prop chain. But during the lesson, Dave emphasizes Proverbs 22:7...&lt;blockquote&gt;The rich rule over the poor, and the borrower is servant to the lender.&lt;/blockquote&gt; The software companies who peddle an &lt;abbr title="End User License Agreement"&gt;EULA&lt;/abbr&gt; understand that concept. It's not head knowledge to them. They have it in their hearts. The very essence of an &lt;abbr title="End User License Agreement"&gt;EULA&lt;/abbr&gt; is that you, the consumer, borrow their property. Read that legalese in the tiny text box very carefully. Read it, understand it, and tell me who owns the software.&lt;br /&gt;&lt;br /&gt;You borrow their software. &lt;span style="font-style: italic;"&gt;The rich rule over the poor, and the borrower is servant to the lender&lt;/span&gt;.&lt;br /&gt;&lt;table border="0" cellpadding="3" cellspacing="3"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;You&lt;/td&gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;Borrower&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Borrower&lt;/td&gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;Servant&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Then...&lt;/td&gt;&lt;td&gt;You&lt;/td&gt;&lt;td&gt;=&lt;/td&gt;&lt;td&gt;Servant&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4VUY4sr36N8/SYkLPW-WDdI/AAAAAAAAAK8/cKbxJ3vI4_Y/s1600-h/2009-02-03-13.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_4VUY4sr36N8/SYkLPW-WDdI/AAAAAAAAAK8/cKbxJ3vI4_Y/s200/2009-02-03-13.jpg" alt="" id="BLOGGER_PHOTO_ID_5298778795071114706" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;But, but, but... it's my software and my computer!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not according to the contract you promised to uphold. That software belongs to them. And they will loan it to you on their own terms. &lt;span style="font-style: italic;"&gt;The borrower is servant to the lender.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Well, if I don't like their terms then I'll just stop using their software.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And what will you do with all of the bank account history stored in QuickBooks? How do you intend to read the MS Word documents your boss sends? You borrowed their software. And that software is the only gateway to your information. &lt;span style="font-style: italic;"&gt;The borrower is servant to the lender.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I learned about the &lt;abbr title="GNU Public License"&gt;GPL&lt;/abbr&gt; years ago when researching &lt;a href="http://www.redhat.com/"&gt;Red Hat&lt;/a&gt; Linux. I read the license itself - a chore and not terribly helpful. And I read the plain English explanation. It was one of those &lt;span style="font-style: italic;"&gt;aha!&lt;/span&gt; moments when you know, in your gut, that this solution is right. The &lt;abbr title="GNU Public License"&gt;GPL&lt;/abbr&gt; felt right. Every instinct screamed &lt;span style="font-style: italic;"&gt;here's a solution!&lt;/span&gt; But I could not understand why.&lt;br /&gt;&lt;br /&gt;Now I do - &lt;span style="font-style: italic;"&gt;The rich rule over the poor, and the borrower is servant to the lender.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6053582386973444950-3563999590286230971?l=rbwohlfarth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rbwohlfarth.blogspot.com/feeds/3563999590286230971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6053582386973444950&amp;postID=3563999590286230971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/3563999590286230971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6053582386973444950/posts/default/3563999590286230971'/><link rel='alternate' type='text/html' href='http://rbwohlfarth.blogspot.com/2008/11/software-servant.html' title='Software Servant'/><author><name>Robert W.</name><uri>http://www.blogger.com/profile/16856431530763938356</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_4VUY4sr36N8/TIGb2SDoxZI/AAAAAAAAARo/HWIUyi_rYMk/S220/Personal+Photo.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4VUY4sr36N8/SYkK4PzwmkI/AAAAAAAAAK0/bFSfsk01nig/s72-c/2009-01-17-30.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
