<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.claritycon.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Peter Miller</title><subtitle type="html">Musings on Technology and Programming</subtitle><id>http://blogs.claritycon.com/blogs/peter_miller/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.claritycon.com/blogs/peter_miller/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2008-01-28T23:11:00Z</updated><entry><title>Paper Zero</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/08/17/paper-zero.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/08/17/paper-zero.aspx</id><published>2008-08-18T00:26:30Z</published><updated>2008-08-18T00:26:30Z</updated><content type="html">&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Recently I mentioned Inbox Zero, a method of keeping your email inbox organized and uncluttered. Another useful organizational method I practice is what I call “Paper Zero”. Paper Zero is not using zero paper; instead it is a commitment to:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Organize the papers you have &lt;/li&gt;    &lt;li&gt;Throw away transitory papers (recycle if possible) &lt;/li&gt;    &lt;li&gt;Transcribe important papers into an electronic format (and then throw them away) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I use a good amount of paper at work while doing such tasks as taking notes during meetings, jotting down mental reminders while debugging or marking up project schedules. So I am not anti-paper; until we all have take anywhere, instant on tablet computers with the visceral feedback of pen on paper, I will not abandon my notepad and trusty Pilot G-2 Gel pen (size 07 usually). Sometimes ad-hoc notes, sketches and diagrams are a necessity. In addition, for the sake of my eyes, I don’t like reading long documents on the screen. So printouts can be handy as well. &lt;/p&gt;  &lt;p&gt;There are however, many problems with paper. First, its physical dimensions. Papers quickly pile up, cluttering your desk and closing your workspace in around you. Second, paper is inherently volatile. Papers can be torn, ripped, spilled on and just plain lost. Third and perhaps most importantly, papers are inherently information silos when compared to electronic documents. Papers are hard to organize, hard to search, hard to relate to other documents and for the most part single user experiences. &lt;/p&gt;  &lt;p&gt;Digitizing your notes is not a revelatory suggestion and the benefits of having your information in an electronic format should be pretty apparent. A typical objection to applying this idea to notes at work is that as notes they are not important enough to spend the time transcribing into digital documents. My response is that they if they are so unimportant, why don’t you toss them and save yourself the desk/filing space? If they are important enough not to toss, then they are important enough that someone else should be able to know about them. Based on my handwriting at least, that implies electronic format. &lt;/p&gt;  &lt;p&gt;Another way of looking at that question is to ask could someone pick up on your tasks where you left off from if you were unexpectedly sick or out of the office? No such transition is ever perfect, but it would certainly be helped if the other person doesn’t have to try and decipher your hand writing and filing system. If you are deliberately keeping important information to yourself to be more powerful or save your job, well then you need more than Paper Zero to help you. At least in my field, we value problem solving and effective information sharing, not hoarding. &lt;/p&gt;  &lt;p&gt;The final benefit of transcribing important notes into an electronic format is not immediately obvious. When you transcribe notes, which were written while you were thinking about a certain situation with the entire context already loaded into your mind, you are forced to lay out your thoughts logically, exposing your assumptions and gaps in knowledge. &lt;/p&gt;  &lt;p&gt;So even if you don’t care about anybody else, by transcribing your notes you can be more effective and have a better grasp of your subject material. In fact, this technique was frequently suggested to me by various college professors as a way to better understand and retain material prior to an exam. I didn’t always follow this advice, but the concept of it stuck with me and has proved useful outside of the classroom, in the quotation mark surrounded “real world” of the workplace. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=10898" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Does It All Lead Back to MS Project?</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/08/04/does-it-all-lead-back-to-ms-project.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/08/04/does-it-all-lead-back-to-ms-project.aspx</id><published>2008-08-05T04:15:41Z</published><updated>2008-08-05T04:15:41Z</updated><content type="html">&lt;p&gt;If you’ve worked on a software development project, there is a good chance you’ve either used or done everything to avoid using Microsoft Project. I avoid MS Project when I can and have developed my own Excel-centric task management system. However, as my system grows to meet the needs of my projects it is eerily converging on Project itself. Is there any escape or I am bound to run so far away from Project that I run right back into it again?&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;A complete project in MS Project is in many ways a thing of beauty to behold. Tasks are joined to resources, timelines and other tasks as dependencies. You can adjust someone’s allocation and watch the timeline warp and wriggle in response. You also have the comfort of being able to produce solid, comforting diagrams which show your progress and plans to your non-Project blessed co-workers. Then your project moves along just as you planned, with satisfying milestones along the way to the anticipated successful solution. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;With these happy sentiments in mind, why did I spin up my own system for task management and project planning? There are 2 major problems I see with Project, the “buy-in” cost and adaptability. Buy-in cost is the amount of time and effort it takes to get your project into MS Project. Project planning is important, but the mechanics of entering your tasks, setting up resources and linking up dependencies is quite clumsy. By itself however, the buy-in cost would be a reasonable investment if it were not for the second major problem with Project, adaptability.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Changing out resources, redefining tasks and dependencies, adding or deleting entire chains of tasks happens all the time during projects, yet represent great pain points in Project. I remember a specific project I was on where a failed attempt to change a few dependencies cost my project manager literally days to recover from. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Beyond changes to the project itself, Project is restrained in the meta and supporting information you can easily attach to tasks. If you really dig into Project, you can set a lot of this up, but again, based on past experiences, Project does not end up being the definitive source of information about a task. So you have other documents, spreadsheets, etc. which all then try to refer to the tasks in Project, leading to synchronization head-aches and disconnects.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;One possible answer to these problems is to spend the time to really learn Project, to deep dive into it and hope to mediate the pain points with your newfound guru status. However, at this point you are likely to be stuck (consciously or not) running your actual project in such a way that matches up with the constraints (and capabilities) of your project management tool. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;To avoid this inversion of priorities, I have been experimenting with my own system of task management and project planning. The foundation of my system is Excel and so far it is quite primitive in comparison with Project. Nevertheless, I have enjoyed growing my system to create capabilities I find lacking, rather than growing my project to use capabilities I received by default.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;I haven’t had to test how my system scales to a large project yet, but even with a small to medium sized project, I do look at parts of Project with envy. I have to laugh when I see my spreadsheet layout inching closer and closer to a Project style look. While MS Project is over weight for my current purposes, it was not developed out of the blue, but in response to certain scenarios that occur while on a project. The problem lies in trying to solve every one of these at once and in the process making solving any of them individually that much more difficult.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=9218" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Versatilists</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/07/27/versatilists.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/07/27/versatilists.aspx</id><published>2008-07-28T04:21:24Z</published><updated>2008-07-28T04:21:24Z</updated><content type="html">&lt;p&gt;I’ve been reading an excellent book, Head First Design Patterns, which covers many of the &lt;a href="http://en.wikipedia.org/wiki/Gang_of_Four_(software)"&gt;Gang of Four&lt;/a&gt;’s famous design patterns for software engineering from the Head First series own irreverent and creative perspective.&lt;/p&gt;  &lt;p&gt;Design patterns are great; they are a useful shared vocabulary for discussing software design and a source of inspiration for your day to day programming. However, as the GoF and the Head First book point out, design patterns are not invented, they are discovered by working with real world applications whose unfettered complexity has lead to unexpected problems. Or more succinctly, they emerge out of encountering and solving pain points. &lt;/p&gt;  &lt;p&gt;The danger with design patterns is that you learn them, apply them liberally and then complain about the extra overhead and up front design time. This danger lessens the more and more you’ve actually experienced the pain of clunky and obtuse code. As with most of life, experience is the best and most bitter teacher.&lt;/p&gt;  &lt;p&gt;I was further reminded of this when I was recently talking to a friend who mentioned GTD or getting things done, a time management philosophy that encourages creating and executing to-do lists, among other productivity tips. I am not a strict adherent to GTD, but I discovered I did follow one of its most well known off shoots, the idea of a clean email inbox or &lt;a href="http://www.slideshare.net/merlinmann/inbox-zero-actionbased-email"&gt;“Inbox Zero.”&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As the name suggests, the idea behind Inbox Zero is to have no emails sitting in your Inbox. This does not mean automatically deleting every email or anything that dramatic, but instead it means expediently applying one of the following actions to every email that comes in:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Delete &lt;/li&gt;    &lt;li&gt;Delegate &lt;/li&gt;    &lt;li&gt;Respond &lt;/li&gt;    &lt;li&gt;Defer &lt;/li&gt;    &lt;li&gt;Do &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;There are plenty of resources available online to more fully explain this, but it boils down to making a decision about every email that comes in (even if the decision is to defer your decision) so you never get overloaded with too many emails.&lt;/p&gt;  &lt;p&gt;I began following my own form of Inbox Zero after going through a period of time in a project where I got at least 100 emails a day and was going crazy trying to keep up with them all, alternating between frantically trying to respond to each one immediately and a kind of exhausted “benign neglect” of any email without at least a few exclamation points or priority flags.&lt;/p&gt;  &lt;p&gt;So, like a design pattern, out of a pain point emerged a general approach to me organizing my inbox. Also like a design pattern, the point of a clean inbox is not to follow Inbox Zero techniques for its own sake, it is help manage complexity and reduce pain points. Process does not exist for its sake, but to alleviate a certain problem.&lt;/p&gt;  &lt;p&gt;In some ways it would be much easier if this were not the case. If we could create great software solutions every time by using the Decorator and Factory patterns or never get behind in a project by sticking to Inbox Zero, our jobs would be a lot easier. &lt;/p&gt;  &lt;p&gt;However, we certainly cannot. Our primary job is to identify problems and then develop solutions for them, whatever the techniques along the way. This is why we sometimes struggle to identify a clear methodology that we use or a strict definition of what we are looking for in an employee. On the flip side, this is also what makes our work so interesting and rewarding.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=8466" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Good Job Code Camp</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/07/15/good-job-code-camp.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/07/15/good-job-code-camp.aspx</id><published>2008-07-16T05:39:59Z</published><updated>2008-07-16T05:39:59Z</updated><content type="html">&lt;p&gt;A few weeks ago, I attended 2 sessions of the &lt;a href="http://www.socalcodecamp.com/default.aspx"&gt;SoCal Rock &amp;amp; Roll Code Camp&lt;/a&gt; at the USCD Extension campus. This is an event I’ve attended before and always enjoyed. This year was no exception, as the event was well organized, the schedule was well communicated and the two presenters I saw were good.&lt;/p&gt;  &lt;p&gt;The two sessions I attended were &lt;i&gt;Integrating Silverlight 2.0 into an Existing Web Application &lt;/i&gt;and &lt;i&gt;Using ASP.NET MVC to Build a Blogging Engine in 60 Minutes or Less&lt;/i&gt;. The Silverlight presentation covered some general ideas on how to take an web application you already have and add Silverlight content to it. In particular, I appreciated that the presenter, Robert Atland, emphasized thinking carefully about where to use Silverlight so it is not just a gimmick, but actually enhances the user experience.&lt;/p&gt;  &lt;p&gt;The ASP.NET MVC presentation was more of a mixed bag. I didn’t start my programming career in .NET, instead I started in Java where MVC is a much more common paradigm. So MVC as a concept is not new or difficult for me, especially after spending some time recently with Ruby and Python web frameworks. For ASP.NET MVC, Scott Gu provides a brief overview &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx"&gt;here.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However, a lot of the attendees were new to MVC and used to .NET’s postback model. I think this tripped up Adnan Masood, the presenter, and he spent most of the session valiantly trying to explain the Model View Controller architecture, as well as defend the idea that anything could be better than the postback model. Nevertheless, I thought he did a good job and the ASP.NET MVC framework is worth checking out.&lt;/p&gt;  &lt;p&gt;More recently, somewhat inspired by this positive experience, I attended a user group meeting for a non .NET language and had quite a different experience. There is no point in me going into great detail, but the group, although full of what seemed to be very nice people, was incredibly disjointed and vague in it is direction. Almost no content was presented and no particular agenda was followed.&lt;/p&gt;  &lt;p&gt;I was more excited about the content I thought would be presented at that user group than the content at the code camp, but the code camp was a far more satisfying experience. So kudos to the folks at the SoCal code camp; it is tough to carve out time outside of work for activities like this and they made me feel like my effort was more than reciprocated.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=7293" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Tongue Out of Cheek: A Follow Up To Learning Python and Getting Distracted</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/06/09/tongue-out-of-cheek-a-follow-up-to-learning-python-and-getting-distracted.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/06/09/tongue-out-of-cheek-a-follow-up-to-learning-python-and-getting-distracted.aspx</id><published>2008-06-10T05:58:13Z</published><updated>2008-06-10T05:58:13Z</updated><content type="html">&lt;p&gt;My previous post, &lt;a href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/06/05/how-to-get-really-distracted-and-not-learn-any-python.aspx"&gt;How To Get Really Distracted and Not Learn Any Python&lt;/a&gt;, generated enough interest (or at least comments) that I wanted to follow up with some comments of my own.&lt;/p&gt;  &lt;p&gt;I have been learning Python in my spare time for quite a while and I am no expert, but I am at least fairly comfortable in it by now. I was reflecting back on what I saw as some missteps I took along the way. The mistake I made was to try and take on too much at once. Instead of just trying to learn Python, I was mixing in learning Linux, a new IDE, a new source control system, etc. All of these are certainly good things to learn, but learning them was not essential to my main task of learning Python. &lt;/p&gt;  &lt;p&gt;For the curious, I found the following to be useful activities for actually learning Python:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Read the official &lt;a href="http://docs.python.org/tut/"&gt;Python Tutorial&lt;/a&gt; – I’m not kidding, the official docs are good&lt;/li&gt;    &lt;li&gt;Study &lt;a href="http://python.net/crew/wesc/cpp/"&gt;Core Python&lt;/a&gt; by Wesley Chun – The weight of this book may damage your wrist, but the quality of the information is superb. I read a chapter at a time, then reread the chapter and make notes&lt;/li&gt;    &lt;li&gt;Download and install &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, complete the &lt;a href="http://www.djangoproject.com/documentation/tutorial01/"&gt;first tutorial&lt;/a&gt; and then try to trace the flow of the code so you can see where the default Django page comes from – I used &lt;a href="http://www.wingware.com/"&gt;Wing IDE&lt;/a&gt; Personal edition to set up breakpoints and step through&lt;/li&gt;    &lt;li&gt;Read and try to understand the code in a Python standard module – for example, if you are looking at Django or other web frameworks, take a look at the HTTP/TCP/SocketServer family of classes&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And &lt;strong&gt;MOST&lt;/strong&gt; importantly, write some code! Writing code is best because it is so humbling; you are not just nodding along to an example in a book, you have to be a creative participant. Sometimes though, it can be tough to know what code to write. To avoid “coders block”, I need to have a goal to work towards. Things like the Django tutorials are a good place to start if you have no ideas. However, things really started clicking for me when I came up with a project idea: write some Python code to read barcodes from books/DVDs via a webcam and then use the resulting barcode to look up information about the book and store that information somewhere; basically a &lt;a href="http://www.delicious-monster.com/"&gt;Delicious Library&lt;/a&gt; knock off. Kind of silly, but motivating.&lt;/p&gt;  &lt;p&gt;And speaking of silly, but motivating (this is begging for a sequel), I present (for the second time) the following Erlang video: on &lt;a href="http://video.google.com/videoplay?docid=-5830318882717959520&amp;amp;hl=en"&gt;Google video&lt;/a&gt; (with longer introduction) and &lt;a href="http://www.youtube.com/watch?v=uKfKtXYLG78"&gt;YouTube&lt;/a&gt; (slimmed down version). The pinnacle of the driest humor or just unintentionally hilarious? You decide.*&lt;/p&gt;  &lt;p&gt;* In anticipation of angry comments from Erlang partisans, I would note that for the last paragraph of this post tongue was back in cheek.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5960" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>How To Get Really Distracted And Not Learn Any Python</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/06/05/how-to-get-really-distracted-and-not-learn-any-python.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/06/05/how-to-get-really-distracted-and-not-learn-any-python.aspx</id><published>2008-06-06T04:45:00Z</published><updated>2008-06-06T04:45:00Z</updated><content type="html">&lt;div id="mydiv" style="display:none;"&gt;&lt;/div&gt;  &lt;p&gt;The following is a graphical breakdown of how I spent the first 40 hours or so “learning” Python, plus an excuse to show off the &lt;a href="http://code.google.com/apis/visualization/documentation/index.html"&gt;Google Visualization API&lt;/a&gt;:&lt;/p&gt;  &lt;div id="chart_div"&gt;&lt;img class="goog-serverchart-image" height="240" src="http://chart.apis.google.com/chart?cht=p&amp;amp;chs=400x240&amp;amp;chtt=Allocation%20of%20first%2040%20hours%20(actual)&amp;amp;chl=Python%7CEnv.%20Setup%7CSource%20Control%7CTDD%7CIDE&amp;amp;chdl=Percentage%20of%20Time&amp;amp;chd=s%3A9XJJ1&amp;amp;chco=CC6600&amp;amp;chly=40%7C20%7C0" width="400" alt="" /&gt;&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;As you can see, based on these extremely scientific measurements, I spent the majority of this time not writing Python code, reading about it or watching screencasts, but instead fiddling around the edges. These are important edges; as a .NET programmer by trade, I know well the importance of a good IDE. Source Control is a given, while Test Driven Development (TDD) is a staple of many non-corporate programming environments. And of course you cannot write any code if your environment is not set up correctly.&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;So why do I call this time spent “fiddling”? Because of the way I approached it. I took having a good IDE to mean finding a Visual Studio for Python. This meant installs and brief trials of Wing IDE, IronPython Studio, Eclipse and E-Text Editor. TDD was slow sledding when the test was really writing anything that worked. Environment setup became an brief foray into Linux followed by endless tweaks of Windows settings to come up with the perfect Python environment.&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;I approached getting started with Python as I would setting up a new machine for .NET development, except I have years of experience with .NET and know exactly what I want, whereas I was grasping in the dark with Python. Once I got past these obstacles and got rolling (in Vista, with SVN and Eclipse for the curious), I actually began making some progress. While I learned a lot from the process, it was also needlessly frustrating. If learning Python was my number one goal it would have been better to just take others’ advice, get set up by following a laundry list of instructions and try to end up with a more distraction free allocation like this:&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div id="chart_div2"&gt;&lt;img class="goog-serverchart-image" height="240" src="http://chart.apis.google.com/chart?cht=p&amp;amp;chs=400x240&amp;amp;chtt=Allocation%20of%20first%2040%20hours%20(ideal)&amp;amp;chl=Python%7CEnv.%20Setup%7CSource%20Control%7CTDD%7CIDE&amp;amp;chdl=Percentage%20of%20Time&amp;amp;chd=s%3A9BBBB&amp;amp;chco=CC6600&amp;amp;chly=85%7C42.5%7C0" width="400" alt="" /&gt;&lt;/div&gt;  &lt;p&gt;Of course, far be it for me to take my own advice, and I have not been able to resist taking some time to brush up on my JavaScript, which lead me to the Google Visualization API, which is responsible for the oh so orange graphs in this post. The Visualization API is one of many JavaScript libraries which Google hosts on its servers, allowing you to load them onto your own page hassle free. Not all the libraries are Google-made, the impressive &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; is another library you can import off of Google’s servers. I did not do much more with the Visualization API then you can see in the “Hello World” examples, &lt;strike&gt;but the magic is there in the source of this page if you are curious.&lt;/strike&gt; &amp;lt;Updated post to display better in RSS readers&amp;gt;&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5872" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>The Netflix Player: The Tivo of Streaming Content?</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/05/24/the-netflix-player-the-tivo-of-streaming-content.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/05/24/the-netflix-player-the-tivo-of-streaming-content.aspx</id><published>2008-05-25T00:39:17Z</published><updated>2008-05-25T00:39:17Z</updated><content type="html">&lt;p&gt;(This is not a gadget blog, but occasionally a new piece of technology is interesting enough that I want to write about it.)&lt;/p&gt; &lt;p&gt;The &lt;a href="http://www.roku.com/netflixplayer/"&gt;Netflix Player&lt;/a&gt; is Roku&amp;#39;s 5&amp;quot; deep by 5&amp;quot; wide by 2&amp;quot; tall set top device that allows Netflix subscribers to easily watch any &amp;quot;Instant Watch&amp;quot; content on their TV. I mentioned the Instant Watch feature &lt;a href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/04/23/notes-and-notes.aspx"&gt;before&lt;/a&gt;, and I have been enjoying it, watching shows and movies on my laptop or occasionally hooking my laptop up to my TV. &lt;/p&gt; &lt;p&gt;I was enjoying it so much that I was about to buy a wireless keyboard and mouse to make using the hooked up laptop easier when I saw that the Netflix Player had come out. For $100 that&amp;#39;s not all that much more than a decent wireless keyboard and mouse, so I decided to give it a try.&lt;/p&gt; &lt;p&gt;I&amp;#39;ve only had this device for a few days, but my initial impression of it is that this is a breakthrough device, with the possibility to do what Tivo did for DVRs, but for streaming content. &lt;/p&gt; &lt;p&gt;The initial setup is easy; the Player has built in wireless or you can use a wired connection. The Player has most any audio/video connections you would want; I am using HDMI for the picture and regular old RCA cables for the audio.&lt;/p&gt; &lt;p&gt;Once you&amp;#39;ve the Player hooked up to your TV and plug it in, it boots up and asks for a 5 digit activation code that you can get from the Netflix web site. Enter the code and the device jumps right into a nice display of the contents of your Instant Watch Queue. Using the small remote I had no trouble moving through what was available and selecting what to play. I had to tweak the display output to be widescreen in the configuration menu (up arrow from the main menu), but beyond that I was up and running in under 10 minutes.&lt;/p&gt; &lt;p&gt;Once something has started playing, you can fast forward and rewind or skip around to different parts of what you&amp;#39;re watching. Because it is streaming, Roku came up with an interesting &amp;quot;chapter&amp;quot; system where you can skip around in 5 second intervals, demarcated by a screenshot of the action at that point in time. TV show episodes of the same series are grouped together logically so you can easily watch through a series in sequence (tested officially via season 1 of 30 Rock.) To summarize, navigation is easy and usability is high: it passed the &amp;quot;non-geek user&amp;quot; test with flying colors as my wife needed no help from me at all when she tried it out. &lt;/p&gt; &lt;p&gt;2 limitations of the Player are that it only shows you content that you have placed in your Instant Queue, via the Netflix web site and it currently has no HD content, although that is on its way. The playback quality is not outstanding, but it is definitely better than regular TV and around DVD quality.&lt;/p&gt; &lt;p&gt;These limitations do not detract from the appeal of the Netflix Player. In fact, based on the easy setup, relatively low cost and excellent usability, the Player is in good position to do what Tivo did for DVRs, which is to not be the first to do something (in this case streaming content), but the first to do it in a way that is intuitive and easy for mass consumption. Netflix&amp;#39;s millions of subscribers have a real winner on their hands.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5447" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>OS Chasing: The Usability Gap</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/05/02/os-chasing-the-usability-gap.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/05/02/os-chasing-the-usability-gap.aspx</id><published>2008-05-02T15:55:38Z</published><updated>2008-05-02T15:55:38Z</updated><content type="html">&lt;p&gt;I&amp;#39;ve written many times before about my trial runs of various Linux distributions and I feel like I&amp;#39;ve said most of what I have to say about the matter. However, I recently saw a post entitled, &lt;a href="http://contentconsumer.wordpress.com/2008/04/27/is-ubuntu-useable-enough-for-my-girlfriend/"&gt;Is Ubuntu Useable Enough For My Girlfriend?&lt;/a&gt; and I decided to have one more go at explaining my ambivalent feelings towards Linux.&lt;/p&gt; &lt;p&gt;First, a brief summary of the post for the link-impaired; relatively experienced Linux user sets up his girlfriend (Windows user, not super technical) with an install of the latest version of Ubuntu, gives her a set of mundane tasks (watch a YouTube video, Google something, do some photo editing) to achieve while he takes notes and hilarity ensues.&lt;/p&gt; &lt;p&gt;I tend to cringe when highly technical users try to predict what a non-technical user will find easy or difficult; there is just so much background knowledge that someone who is passionate about computers takes for granted, that I think we are uniquely ill suited for the task. So, I try to rely more on colloquial evidence, such as this post.&lt;/p&gt; &lt;p&gt;His girlfriend is able to accomplish many of the tasks, but is stymied by a few, mostly due to poor naming or lack of clear instructions on how to install the necessary application or plug in. The conclusion is that Ubuntu is heading in the right direction, but is still not ideal for your &amp;quot;average&amp;quot; non-power user.&lt;/p&gt; &lt;p&gt;This line of argument has been around since Linux on the desktop became a reality, so at first glance it can seem old, stale, whiny or just plain obvious. If you get beyond that initial reaction, it is an amazing commentary on the state of Linux on the desktop. How is it possible that so many talented individuals have labored so long and yet still been unable to produce a desktop system on which these type of basic tasks are as straightforward as they are on Windows or Mac?&lt;/p&gt; &lt;p&gt;I&amp;#39;ll answer that question with another question; could you see Ubuntu declaring a one year new feature freeze, refusing any new graphical bells and whistles, new processor extensions or file system upgrades and instead focusing the next release of Ubuntu entirely on making it as simple as possible for non-technical users to accomplish simple general computing tasks? Imagine the brain power of that many talented contributors all working just towards usability. I think you&amp;#39;d have your killer desktop in way under that one year timeline.&lt;/p&gt; &lt;p&gt;However, my question is flawed. What is Ubuntu? There is an organization around it for sure, but it is not a monolithic one that can give orders to the entire Linux development community. Also, while usability is a stated goal of Ubuntu, it is not necessarily a goal that is shared by many of the elite programmers in the Linux development community. Or more accurately stated, many elite Linux developers are quite comfortable in Linux and don&amp;#39;t feel excited about spending time making it &amp;quot;easier&amp;quot;. &lt;/p&gt; &lt;p&gt;Quite to the contrary, many technical people are attracted to Linux due to the rapid pace of technological advancement. So in essence, you&amp;#39;d be asking the very people who innovated so much to get Linux to where it is now to stop innovating and focus on the unglamorous task of noob babysitting. Or as the author of the post puts it, &amp;quot;The main issue with the desktop experience is that the geeky programmers and designers assume too much from the average user.&amp;quot;&lt;/p&gt; &lt;p&gt;In fairness there are plenty of developers who buck this stereotype and pour effort into usability. Otherwise we wouldn&amp;#39;t have distros like Ubuntu at all. Recognizing the good work that the Ubuntu (and other distros such as PCLinuxOS and Xandros) have done with usability, what&amp;#39;s left to explain the persistent gap?&lt;/p&gt; &lt;p&gt;I think the often overlooked part of this discussion is that Windows and Mac (OS X) set the norms. Whether or not it is fair or just, most people are exposed first and most often to Windows or OS X and from that initial experience, their expectations are set for how interacting with a computer should take place.&lt;/p&gt; &lt;p&gt;This behavior can be maddening and seem foolish, but is not surprising, at least as explained as Dan Ariely describes in his book &lt;a href="http://www.amazon.com/Predictably-Irrational-Hidden-Forces-Decisions/dp/006135323X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1209743327&amp;amp;sr=8-1"&gt;Predictably Irrational&lt;/a&gt;. Ariely calls this type of behavior &amp;quot;anchoring&amp;quot; and anchoring can explain such oddities as how black pearls suddenly became sought after (they were once relatively unknown and then were introduced first only in high end jewelry stores for high end prices) and how we can feel like we are getting a great deal on a car when we buy it for significantly below the MSRP, despite the MSRP being a somewhat arbitrary number.&lt;/p&gt; &lt;p&gt;So, to come back on topic, even if desktop Linux were easier to use based on some kind of scientific figuring, as long as it remains close enough to our anchor ideal of computer interaction without quite being the same, it will seem inferior and less desirable. &lt;/p&gt; &lt;p&gt;The baseline has to be that either desktop Linux does at least everything as easily as Windows/OS X does plus more or that it presents such a different and satisfying experience that a new anchor is established. A concrete example of this is the iPhone; by offering such a tightly knit and innovative take on the interface of a cell phone it was able to define a new standard for what cell phone UI&amp;#39;s should be.&lt;/p&gt; &lt;p&gt;There is movement within the Linux community to develop new desktop interface experiences such as &lt;a href="http://symphonyos.com/cms/"&gt;Symphony One&lt;/a&gt; and mainstream distros using KDE and Gnome are inching ever closer to matching the out of the box Windows/OS X experience while still offering the power and variety that make Linux fascinating. I am not sure which approach if either will ultimately win out because the final elephant in the room is that Microsoft and Apple are not just standing still, they are trying to take the best bits they see from their competitors and improve their own products.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=5056" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author><category term="OS Chasing" scheme="http://blogs.claritycon.com/blogs/peter_miller/archive/tags/OS+Chasing/default.aspx" /></entry><entry><title>Notes and notes...</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/04/23/notes-and-notes.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/04/23/notes-and-notes.aspx</id><published>2008-04-24T06:26:04Z</published><updated>2008-04-24T06:26:04Z</updated><content type="html">&lt;p&gt;After 2 months of dormancy, I am starting back up the easy way, with some short notes on topics of interest:  &lt;p&gt;&lt;strong&gt;1. Windows Home Server: 2 Months In&lt;/strong&gt;  &lt;p&gt;The best compliment I can give is that I just don’t think about my Home Server anymore. I let it do its thing and don’t worry about it. I am anxiously awaiting the Power Pack 1 additions, along with the data corruption bug fix (which has not affected me at all yet). In hindsight, I should have just gotten a prebuilt solution, avoided the install pain and had a machine with a smaller footprint, but my custom build does get the job done.  &lt;p&gt;&lt;strong&gt;2. Microsoft OneNote: Better than TXT?&lt;/strong&gt;  &lt;p&gt;I’m still using OneNote at home to take notes on Core Python Programming (my current Python resource of choice), but at work I’m back to using mostly NotePad2 and other plain text editors. Even though OneNote does not fight you as much as Word, it still has the annoying AutoCorrect behaviors that sometimes make plain old text much less of a hassle. The feature to publish your notes to a web page format is nice, although Microsoft’s decision to use the obscure .MHT format is confusing. So after a few months of use, my opinion of OneNote is far more mixed.  &lt;p&gt;&lt;strong&gt;3. Netflix Impresses&lt;/strong&gt;  &lt;p&gt;One of my favorite new technology toys is Netflix “Watch Instantly” feature. The quality is very good, and although the available content is mostly TV shows, seeing what you want, streaming, when you want it, is really an amazingly satisfying experience. If Netflix can integrate this into a set top box, &lt;a href="http://arstechnica.com/news.ars/post/20080103-netflix-aims-for-the-tv-and-apple-tv-with-set-top-box.html"&gt;watch out.&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;4. Indexed&lt;/strong&gt;  &lt;p&gt;I was going to draw a clever graph showing the inverse relationship between work load and my blogging frequency, but it seemed too obvious, so I’ll just plug the real &lt;a href="http://indexed.blogspot.com/"&gt;Indexed&lt;/a&gt; site, which is far cleverer. I have been exploring the Python web framework &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt;, so work load non-withstanding, I hope to share the rare sight of some code on this blog in the near future.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=4981" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Office's Undervalued Prospect: Microsoft OneNote</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/24/office-s-undervalued-prospect-microsoft-onenote.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/24/office-s-undervalued-prospect-microsoft-onenote.aspx</id><published>2008-02-25T00:12:14Z</published><updated>2008-02-25T00:12:14Z</updated><content type="html">&lt;p&gt;If you use Outlook, Word and Excel frequently, there is a good chance you actually have the entire Microsoft Office suite, which includes some well known applications, like PowerPoint and some not so well known ones, such as Microsoft&amp;#39;s OneNote. OneNote has been around since 2003 (the year and MS Office version), but I only started using it when I installed Office 2007. &lt;/p&gt; &lt;p&gt;OneNote is, as the name suggests, primarily a note taking application. Free form pages are organized by the note taker into notebooks. Notes are not just text, they can be images, links, sounds and videos. Notes and notebooks can be published as PDF documents and shared with other OneNote users. This may not sound like the most exciting application, but I&amp;#39;ve found it to be a surprisingly effective way to keep information organized.&lt;/p&gt; &lt;p&gt;I use OneNote (in addition to a paper journal) to organize ideas and research for blog posts. I use it at home with my dual monitor setup to take notes while watching screencasts and working my way through programming books. At work, I&amp;#39;m experimenting with using it to organize the many small notes to myself I make about projects that usually end up on notepads and then in the recycling bin. &lt;/p&gt; &lt;p&gt;OneNote&amp;#39;s interface features tabs across the top for notebook sections, with tabs down the side for pages within the notebook, making it natural and quick to create a nested structure for the information. OneNote also includes its own screenshot tool to facilitate capturing snaps into notes. &lt;/p&gt; &lt;p&gt;Finally, when I open up OneNote it doesn&amp;#39;t come with the heavy mental baggage that Word does. I&amp;#39;ve used Word for years and years, so when I open it up, I think of essays, reports, specs; pretty much all more formal documents. OneNote encourages me to be informal, which is what these notes should be. OneNote also fights against me far less often than Word does; so far I&amp;#39;ve yet to encounter the frustrating Word behavior where Word just won&amp;#39;t let you type in anything until you adjust your formatting.&lt;/p&gt; &lt;p&gt;Long time readers of this blog will remember that I once discussed my somewhat unique diet of more, but smaller meals during the day. The book that explained this relies heavily on sports analogies, one of which is the &amp;quot;undervalued prospect&amp;quot;, used in the book to highlight certain foods which lacked the reputation for being healthy, but were actually great things to have in your diet. I think the undervalued prospect is a good analogy for OneNote&amp;#39;s place within Office. I never really see it get hyped, but if you take the time to get to know it, OneNote has a lot to offer.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3867" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>The Fastest Web Form Out There</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/17/the-fastest-web-form-out-there.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/17/the-fastest-web-form-out-there.aspx</id><published>2008-02-17T22:28:15Z</published><updated>2008-02-17T22:28:15Z</updated><content type="html">&lt;p&gt;Recently Google Docs added a Forms feature to their spreadsheets. This feature allows you to generate a form that can be filled out via email or on a page hosted by Google. The submission of this form then populates the data back into your Google spreadsheet where the responses can be collated online or exported as an Excel spreadsheet.&lt;/p&gt; &lt;p&gt;I think I just made that sound more confusing and difficult than it is; it takes under a minute to set up, and you can see my &amp;quot;Ice Cream&amp;quot; sample form by following this link: &lt;a href="http://spreadsheets.google.com/viewform?key=p4Wm_X_NqY4oWmEuN8g25YA"&gt;http://spreadsheets.google.com/viewform?key=p4Wm_X_NqY4oWmEuN8g25YA&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This functionality has a lot of potential and is a great tool for creating small and simple surveys. It exists in a similar space to Microsoft&amp;#39;s InfoPath, but is much simpler and being Google, free. Speaking for lazy developers (is there any other type?), it is certainly not a bad thing to let non-technical users create and manage these kind of forms and save the technical users&amp;#39; efforts for more complex tasks. Or trying to speak from the non-technical users perspective, this is great since you can accomplish these seemingly simple data collection tasks without dealing with any irritable tech folks. [1]&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;[1] Note: As a software consultant I am obligated to point out that we never fit into this &amp;quot;irritable tech folks&amp;quot; category :)&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3800" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Windows Home Server: Install Impressions</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/17/windows-home-server-install-impressions.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/17/windows-home-server-install-impressions.aspx</id><published>2008-02-17T21:30:27Z</published><updated>2008-02-17T21:30:27Z</updated><content type="html">&lt;p&gt;&lt;/p&gt; &lt;p&gt;Following the recommendation of my co-worker &lt;a href="http://blogs.claritycon.com/blogs/mike_frank/default.aspx"&gt;Mike Frank&lt;/a&gt;, I decided to give Windows Home Server (WHS) a try. WHS has the capability to do a lot of different things, but straight out of the box I was looking to take advantage of its automated backup capabilities, data duplication, file sharing and remote access capabilities.&lt;/p&gt; &lt;p&gt;I have only had WHS installed for a few days, but my first impressions are very positive. I don&amp;#39;t know what I expected, but it just works. After I got it installed, setting up the connector software on my machine was easy and I was immediately setup for nightly backups. File sharing was also quick to setup and after a few well explained configuration changes to my router, I had a web site up so I could access my shared files and computers from anywhere with an internet connection. There is a lot more I want to do, including exploring Xbox 360 integration, putting a source control server on it and installing some of the many user created plug-ins, in particular for media management. &lt;/p&gt; &lt;p&gt;On the install side, I did run into some trouble. I built my own system, which is not the route that most consumers would probably take as there are a lot of solid looking pre-built options out there. I did some research beforehand to find parts that were compatible, but still had a problem getting my SATA hard drives recognized. &lt;/p&gt; &lt;p&gt;The first part of the install went smoothly, but then there is a part of the install that looks like it uses the Windows XP text based installer which does not have built in drivers for SATA drives. So, I was confronted with having to do the F6 &amp;quot;provide additional drivers&amp;quot; step, which means I had to have drivers on a floppy disk.&lt;/p&gt; &lt;p&gt;Since I have built a fair number of systems, I have a floppy drive (which sadly is still an essential tool for a system builder). However, I didn&amp;#39;t have any other computers around that I could install the drive on to load a floppy disk with the SATA controller drivers. The motherboard came with a CD of the drivers, so I could take the drivers off there to make a floppy, but I needed a machine I could boot into to do the copying. So kind of a chicken and egg problem since the server machine was not in a bootable state. &lt;/p&gt; &lt;p&gt;My solution was to reboot the server off of the install media for WHS and then pretend to load additional drivers in the first GUI based part of the installer. This part of the installer uses standard Windows file dialogs to let you search for additional drivers. Standard Windows file dialogs let you right click, copy and paste files, so I used this dialog to navigate to the drivers (on a USB key) and then copied and pasted them to the floppy disk which I had hooked up to the server. I then canceled out of that dialog, got back to the text installer and was ready for the F6 to floppy disk, which worked perfectly. So, that was annoying and more time consuming than I care to admit, but beyond that the install was straight forward. I will wait until I&amp;#39;ve had the server up and running for a while before I give WHS a full review though.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3799" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author></entry><entry><title>Graham's Law of Power</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/09/graham-s-law-of-power.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/09/graham-s-law-of-power.aspx</id><published>2008-02-09T21:03:45Z</published><updated>2008-02-09T21:03:45Z</updated><content type="html">&lt;blockquote&gt; &lt;p&gt;Because making programs short is what high level languages are for. It may not be 100% accurate to say the power of a programming language is in inverse proportion to the length of programs written in it, but it&amp;#39;s damned close. &lt;br /&gt;&lt;a href="http://paulgraham.com/arcchallenge.html"&gt;Paul Graham, &amp;quot;Take the Arc Challenge&amp;quot;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;By definition, there is &lt;i&gt;some&lt;/i&gt; optimal path from axioms up to a complete language. The Platonic form of Lisp is somewhere inside the block of marble. All we have to do is chip away till we get at it. &lt;br /&gt;&lt;a href="http://paulgraham.com/core.html"&gt;Paul Graham, &amp;quot;First Priority: Core Language&amp;quot;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Paul Graham, Lisp guru, founder of the startup company incubator Y Combinator and essayist, has always been somewhat of a lightening rod for controversy. He is highly opinionated and has a wonderfully concise and direct style of writing that does not back away from confrontation. So it was not too surprising to see the relish with which his detractors have criticized Arc, the language he invented, since an early alpha version was released recently.&lt;/p&gt; &lt;p&gt;Arc is a dialect of Lisp, with a focus on &amp;quot;exploratory programming&amp;quot; or rapid prototyping. A distinguishing feature of Arc is that it was/is built from the ground up with a focus on terse syntax that leads to short programs. As the first quote in this post illustrates, Graham believes that power is inversely proportional to program length. Program length is not equal to&amp;nbsp; character counts necessarily, rather it is based on the size of the tree you&amp;#39;d need to represent the program. So, the first example from Arc is a program that displays a web form with an input field that parrots back what you type in when you submit it:&lt;/p&gt;&lt;pre&gt;(defop said req
  (aform [w/link (pr &amp;quot;you said: &amp;quot; (arg _ &amp;quot;foo&amp;quot;))
           (pr &amp;quot;click here&amp;quot;)]
    (input &amp;quot;foo&amp;quot;) 
    (submit)))
&lt;/pre&gt;
&lt;p&gt;This example has 23 nodes according to Graham&amp;#39;s counting technique and he challenges anybody to produce a shorter program using a different language. &lt;/p&gt;
&lt;p&gt;I&amp;#39;m sure there will be no lack of responses to this challenge, but I find the whole premise to be flawed. The idea that a language inherently has a measurable amount of &amp;quot;power&amp;quot; in the first place is suspect. Having power means to possess controlling influence. In the case of a programming language what would it have influence over? The answer could be loosely summed up as the domain of the problem. &lt;/p&gt;
&lt;p&gt;To be more specific, if you are writing a telecommunications system, Erlang would be a very powerful language as it grew out of that domain; however, if you were creating a rich client side UI, you might use C++ or C# with WPF. Because programming languages are used to solve such a wide swatch of problems, it is impossible to have one controlling definition of power. Power for a programming language is completely dependent on context.&lt;/p&gt;
&lt;p&gt;The contra-argument to this is that I&amp;#39;m describing the libraries of languages, not their core syntax, structures and features. I would argue that you cannot evaluate a language outside of its libraries; even the definition of libraries is difficult, as in the case of Arc where a &amp;quot;core&amp;quot; language feature is a construct for creating web forms. This might be called a library in another language, but if that language decided to incorporate that library into the core, then would that language suddenly become more powerful?&lt;/p&gt;
&lt;p&gt;To be fair let&amp;#39;s say we ignore the problems with using the term power and accept the premise that certain languages will in general make a programmer more able to solve the problems they encounter. Graham&amp;#39;s premise is that brevity is the key to achieving this competitive advantage.&lt;/p&gt;
&lt;p&gt;Why would brevity be such an advantage? Less boilerplate/setup code, fewer things for the programmer to keep in their mind; these are what I could think of. I don&amp;#39;t find either of those reasons all that compelling. Certainly attractive and nice to have, but not enough of a reason to ditch one language for another. Unfortunately, Graham seems to find the idea pretty much self evident and does not offer much in the way of supporting evidence.&lt;/p&gt;
&lt;p&gt;Since Graham is obviously a smart guy, I got to thinking about why he would be so sure that brevity is the key component in designing a powerful language. I looked back at the example of Arc and was struck by the similarities to &lt;a href="http://code.whytheluckystiff.net/shoes/"&gt;Shoes&lt;/a&gt;, a domain specific language in Ruby for creating GUI&amp;#39;s. I spent some time creating an extremely primitive flash card program in Shoes and really enjoyed it. Here&amp;#39;s an example of the syntax to create a simple application with a button and an attached click event:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;pre&gt;Shoes.app {
  button(&amp;quot;Press Me&amp;quot;) { alert(&amp;quot;You pressed me&amp;quot;) }
}
&lt;/pre&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So Arc and Shoes possess similar compact syntax and Arc&amp;#39;s &lt;em&gt;aform&lt;/em&gt; construct looks like a DSL for creating web apps. Pushing the comparison further, Shoes is written in Ruby, a language strongly inclined to produce DSLs, which was strongly inspired by Lisp. And here we come full circle to what I think is the core of Graham&amp;#39;s argument.&lt;/p&gt;
&lt;p&gt;Graham&amp;#39;s affection for Lisp is well known; Arc is a dialect of Lisp and he explicitly states (as shown in the quote above) that he set out to design Arc with the goal of creating the true and pure (or Platonic) Lisp.&lt;/p&gt;
&lt;p&gt;So when Graham is saying that succinctness equals power, he is not saying anything he hasn&amp;#39;t said before. This is really another front in the long running argument between Lispers and advocates of other languages, where Lisp, for a laundry list of reasons (including the power of macros to make short programs), is held up by its advocates as the one true language and by its detractors as a jumbled mess of parentheses and arcane incantations.&lt;/p&gt;
&lt;p&gt;So Graham&amp;#39;s Law of Power could perhaps more clearly be stated as the power of a programming language is directly proportional to its &amp;quot;Lispness.&amp;quot; Or the more vulgar form that every other successful programming language is really just a poor implementation of Lisp.[1]&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;[1] I disagree with that argument, but if you are interested in hearing more, allocate a few hours and a couple of Google searches and you will find more than enough material from both sides to keep you busy. &lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3726" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author><category term="Ramblings" scheme="http://blogs.claritycon.com/blogs/peter_miller/archive/tags/Ramblings/default.aspx" /></entry><entry><title>What a marvelous predicament!</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/01/what-a-marvelous-predicament.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/02/01/what-a-marvelous-predicament.aspx</id><published>2008-02-01T14:17:00Z</published><updated>2008-02-01T14:17:00Z</updated><content type="html">&lt;p&gt;Fred Brooks&amp;#39; seminal work, &lt;i&gt;The Mythical Man Month&lt;/i&gt;, is rightly considered a classic on the topic of software development. Although it was originally written over 30 years ago, it is still a remarkably insightful and interesting read today.&lt;/p&gt; &lt;p&gt;The apparent timelessness of Brooks&amp;#39; work is surely due to its focus on managing and improving the software development life cycle, not on specific language techniques. Brooks&amp;#39; anticipates some of the tenants of extreme programming by suggesting rapid prototyping, extensive use of test cases and continuous customer interaction. He is optimistic about the benefits of object oriented development despite some initial reservations to the idea of keeping the code within components hidden from plain view. &lt;/p&gt; &lt;p&gt;He discusses the difficulties of estimation, the utility of keeping a project workbook (kind of a proto-wiki) and suggests a &amp;quot;surgical&amp;quot; team structure to maximize productivity. And of course, he presents and later defends the so-called &amp;quot;Brooks&amp;#39; Law&amp;quot;, that adding people to a project that is late will only make it more late.&lt;/p&gt; &lt;p&gt;In the epilogue to the 20th anniversary edition of &lt;i&gt;The Mythical Man Month&lt;/i&gt;, Brooks discusses how it has become impossible to keep up with all the new developments within the software industry:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The computer related intellectual discipline has exploded as has the technology... Today my intellectual life has seen me regretfully kissing subdiscipline interests goodbye one by one, as my portfolio has continuously overflowed beyond mastery. Too many interests, too many exciting opportunities for learning, research, and thought. What a marvelous predicament!&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;While marvelous, this is a predicament and as such, begs a solution. Brooks&amp;#39; hints at one when he discusses the difference between the essence and the accidental in software development in the chapter, &amp;quot;No Silver Bullet&amp;quot;. Briefly stated, the essence of software development is the modeling or description of a problem into the software realm, while the accidental is the actual implementation of the essence (or specification) into working code. Brooks&amp;#39; estimates that 90% of the effort in a project is the essence. And yet we spend a lot of time trying to maximize the 10% of the accidental.&lt;/p&gt; &lt;p&gt;Based on this ratio, if object oriented programming can streamline the 90% of the essence by providing a good conceptual framework to plan a product around, then it is a worthwhile addition; however, writing a program using an object oriented language without following object oriented concepts is not in and of itself an advantage. &lt;/p&gt; &lt;p&gt;Let&amp;#39;s return now to our marvelous predicament. It is almost tautological at this point that one developer cannot possibly master all their is to know within the field. Yet, most developers are by nature are very curious (a point Brooks makes early on) and so they will want to keep learning new things. So some selection criteria must be used to winnow the available choices. Looking to Brooks, a good criteria might be to concentrate on learning new things that let you more effectively attack the essence of software development, not the accidental.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3660" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author><category term="Ramblings" scheme="http://blogs.claritycon.com/blogs/peter_miller/archive/tags/Ramblings/default.aspx" /></entry><entry><title>Earth Toned Threads - .NET Parallel Extensions</title><link rel="alternate" type="text/html" href="http://blogs.claritycon.com/blogs/peter_miller/archive/2008/01/28/earth-toned-threads-net-parallel-extensions.aspx" /><id>http://blogs.claritycon.com/blogs/peter_miller/archive/2008/01/28/earth-toned-threads-net-parallel-extensions.aspx</id><published>2008-01-29T07:11:00Z</published><updated>2008-01-29T07:11:00Z</updated><content type="html">&lt;p&gt;Back in the pre-Facebook era, there was a certain political figure who has accused of suddenly dressing in earth tones on the request of an advisor who thought that these muted colors were reassuring to audiences. This plan, especially after it was revealed, did not have the desired effect.&lt;/p&gt;
&lt;p&gt;However, code is by nature easier to dress up than a person. And with the &lt;a href="http://msdn2.microsoft.com/en-us/concurrency/default.aspx"&gt;.NET Parallel Extensions&lt;/a&gt;, released as an add-on to the 3.5 .NET Framework as a CTP in December, Microsoft is attempting to take the edge off of threads by clothing them in an extra layer of reassuringly subdued abstraction.&lt;/p&gt;
&lt;p&gt;This weekend, I attended a session of the SoCal Rock &amp;amp; Roll Code Camp at Cal State Fullerton about these newly released extensions. The presenter, &lt;a href="http://blogs.neudesic.com/blogs/rinat_shagisultanov/default.aspx"&gt;Rinat Shagisultanov&lt;/a&gt;, gave a quick overview of what was in the extensions, as well as some working examples. There is a lot in there, so check it out yourself for all the details, but what really stuck out to me was a point Rinat made early in the session. To paraphrase, his point was that Microsoft already gave us the Framework with its threading capabilities and this extension did not change this, rather it gave us some nice building blocks on top of the existing Framework to make writing the code less intimidating.&lt;/p&gt;
&lt;p&gt;The curious might ask, like what? The most basic example would be the addition of the Parallel.ForEach construct , which can be used to quickly transform a strictly sequential execution path into a parallel one. This construct gets a little more complicated when you are actively working with shared state, but the basic idea is that the Parallel Extensions spins out a thread for each core and distributes the work between the cores without you having to write the plumbing code. There is also PLINQ (Parallel LINQ) for querying objects in parallel, as well as the Task, Future and TaskManager objects which allow for finer grained control of the distribution of items of work in parallel. (1)&lt;/p&gt;
&lt;p&gt;I won&amp;#39;t get any further into the details of the API&amp;#39;s at this point (although perhaps I will in a later post) because I want to return to the idea these extensions are really less intimated or earth toned threads. Threads could use the help, as they are pretty universally regarded as one of those &amp;quot;hard&amp;quot; topics in programming. &lt;/p&gt;
&lt;p&gt;Lots of programmers cringe when they see code in an application that starts spinning out threads. They begin to imagine the nightmares of debugging seemingly random errors and designing the appropriate access schemes for shared memory. It is somewhat a badge of honor to brave the depths of multi-threading and come out with an application that is reasonably stable.&lt;/p&gt;
&lt;p&gt;If threads are to be one of the prime mechanisms for parallelism and the importance of parallelism is increasing with multi-core machines, isn&amp;#39;t it bad that they are perceived to be so difficult and obtuse? One answer to that question is that they are not really all that hard and most programmers are just stupid. I call this the unintentionally dismissive guru stance; once you&amp;#39;ve figured something out, you cannot really remember how hard it was for you to do it. &lt;/p&gt;
&lt;p&gt;Another answer is that they are hard, but that&amp;#39;s OK, because threads are too powerful and dangerous for the average programmer. This is the intentionally dismissive grizzled vet stance; you&amp;#39;ve earned your stripes working on multi-threaded applications and you don&amp;#39;t need some newbie bumbler coming along and fouling things up.&lt;/p&gt;
&lt;p&gt;The answer that Microsoft has given with the Parallel Extensions is yes, threads hard and yes that&amp;#39;s a problem, so here&amp;#39;s some tools that give you a chance to get the parallelism you want (using threads under the covers), but only dive as deep into the intricacies of the threads as you absolutely have to. I call this the populist approach; give something to the masses (even if it&amp;#39;s not perfect), at the possible expense of being looked down upon by the elite.&lt;/p&gt;
&lt;p&gt;I have not gotten a chance to dig deep into the Parallel Extensions yet, but apparently it is due to be incorporated into the next base distribution of the Framework and what I have seen looks really promising. These extensions, especially when you deal with shared state, will still open up some dangerous traps for the unwary, but they lower the bar for entry and provide some nice base abstractions to work with. In fact, coupled with WCF services, you can see the outline of a .NET grid computing architecture with multi-threaded services distributed across multiple machines pretty easily out of the box. (2) So do yourself a favor and add this CTP to your long list of new parts of the .NET Framework to learn.&lt;/p&gt;
&lt;p&gt;(1) Rinat gave a more comprehensive breakdown of what these different API&amp;#39;s are and what they could be used for, so any confusion you may experience in reading my description is of my own doing. The slides and code he presented in the session are on his blog at: &lt;a href="http://blogs.neudesic.com/blogs/rinat_shagisultanov/archive/2008/01/28/27949.aspx"&gt;Code Camp, Fullerton, CA Jan 2008: Concurrent Programming in .NET (Parallel FX)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;(2) Some would actually argue that you should not really use multi-threading paradigms anywhere for concurrency; everything should be based on message passing between processes and thereby avoid the problems of accessing shared memory. That is an argument I am not prepared to take on, but for a strong version of the pro-argument see the language &lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt;, which is built around the principles of no-shared memory, processes and message passing.&lt;/p&gt;&lt;img src="http://blogs.claritycon.com/aggbug.aspx?PostID=3647" width="1" height="1"&gt;</content><author><name>pmiller</name><uri>http://blogs.claritycon.com/members/pmiller.aspx</uri></author><category term=".NET" scheme="http://blogs.claritycon.com/blogs/peter_miller/archive/tags/.NET/default.aspx" /></entry></feed>