# posts

title: 10 Great Hacking Albums
date: 2012-06-06 18:23:52.000000
format: html
content:
  My posts on this blog have leaned away from technical content for the last year, tending towards the introspective and music or poetry. I'm hoping to start shifting back in the other direction for a little bit and plan to write about my latest personal hacking project soon. In the interim, here are 10 favorite albums to write code to off the top of my head. I will note at the outset that I prefer ambient and instrumental music for hacking. Ambient stuff in particular seems to naturally encourage a state of "<a href="http://en.wikipedia.org/wiki/Flow_%28psychology%29">flow</a>" for me. Also, here's a link to some <a href="http://c2.com/cgi/wiki?MentalStateCalledFlow">C2 wiki discussion on flow</a> as it relates to programming. Also, as long as we're throwing out great hacking music I might as well <a href="http://soundcloud.com/redlinernotes">shill the mixtapes I've been working</a> on the last two months. :) All three are pretty solid. And there's a one hour extended mix that mashes together I/Omega and Lost Without a Traceback that isn't on soundcloud. Ping me if you're interested. There are some track changeups and much improved transitions in the I./Omega half.<br><br><strong>Hackerjams</strong>:<br>Tim Hecker - Harmony in Ultraviolet<br>Tim Hecker - An Imaginary Country<br>Tim Hecker - Ravedeath, 1972<br>Fennesz - Venice<br>Fennesz - Black Sea<br>Fuck Buttons - Tarot Sport<br>Rustie - Glass Swords<br>Araabmuzik - Electronic Dream<br>Four Tet - There Is Love In You<br>Amon Tobin - Supermodified<br><br>(Honorable Mentions: Tycho - Dive, Washed Out - Life of Leisure)<br><br>If you were to proceed through the above albums in sequence, you'd start with some fantastic downtempo ambient/noise stuff with Hecker and Fennesz, shift into uptempo "noisetronica" with the Fuck Buttons, transition into the over the top and in your face Rustie, ride those dancey vocals and synths into Araabmuzik, and then start winding down with the more midtempo vocals of There Is Love In You and the outstanding groove of Supermodified.


title: 2 Years later…
date: 2008-02-26 17:42:19.000000
format: html
content:
  and the <a href="http://en.wikipedia.org/wiki/NSA_call_database">NSA/Telcos lawsuits</a> are still going. The Bush Administration is still saying it was necessary to wiretap the phones of hundreds of millions of Americans without warrants. The <a href="http://en.wikipedia.org/wiki/NSA_call_database#Government_and_public_response">Government is still pushing to grant retroactive immunity</a>. And it's generally a whole big mess. Doesn't anyone (in our Government) care about <a href="http://en.wikipedia.org/wiki/NSA_call_database#Internet_monitoring">privacy or the violation of the Constitution</a>?<br><br>Sorry I haven't posted in so long (11 days). I guess I've been distracted. An essay I've working on should be up soon, as should a code/sicp update.<br><br>Here are some things to chew on and <a href="https://secure.eff.org/site/Advocacy?alertId=365&amp;pg=makeACall">yell at your local politicans</a> about:<br><a href="http://www.eff.org/deeplinks/2008/02/myth-facts-about-retroactive-immunity-and-attorneys">Myth/Facts about Retroactive Immunity</a><br><a href="http://www.eff.org/deeplinks/2008/02/republicans-block-fisa-talks">Republicans block FISA talks</a><br><a href="http://www.eff.org/deeplinks/2008/02/telecom-immunity-stripping-amendment-fails-senate-battle-lines-drawn-conference-sh">Telecom Immunity Passes in the Senate</a><br><a href="http://www.bloomberg.com/apps/news?pid=20601087&amp;sid=abIV0cO64zJE&amp;refer=">Domestic Call Database started before 9/11</a><br><br>Seriously, just click yell at your local politicians if you want to help.<a href="http://www.eff.org/deeplinks/2008/02/republicans-block-fisa-talks"> </a>


title: 2010 Already?
date: 2010-01-02 04:07:07.000000
format: html
content:
  It's hard to believe it but the new year is already upon us. 2009 was a big year. Dad's death was a serious blow but I have to recognize that a lot of good came my way too. I started genuinely programming, moved into an apartment with Teresa and finished half of a BS in CS at SPSU. One more year like last year and I'll at least have a diploma...but the further I go down the programming rabbit hole, the more ignorant I realize I am. It's not like I'll even approach competence at the end of 2010. Oh, well. That's how it is and I can deal with that. Hell, I think that's part of why I like what I'm doing.<br><br>Speaking of programming, I haven't done near enough of that over the break but I'm trying to get back on top of things this week before classes start. At least my classes this semester require code. I also have a cool internship lined up. Yet another reason to get coding. I <a href="http://redlinernotes.com/blog/?p=753">made a number of resolutions last year</a>, some successful, some not. I blogged regularly but I didn't exercise enough. I maintained a 3.5 or better GPA the first two semesters but didn't excel during the fall. Some of that may have had to do with Dad's death, I really hadn't expected him to die in 2010. I think more of it had to do with burnout (on SPSU, not CS) and not liking any of my classes/professors. I also spent virtually no time reading HTDP and little time sampling my music.<br><br>My predictions weren't half bad. I was wildly optimistic about the drop in SSD prices but much closer than I would've guessed about the game console war being almost a draw by the end of 2009. Apple has continued to infiltrate the mainstream but I think Linux had more progress in 2008 than 2009. Sadly, neither of my IP Law predictions came to pass and that area needs progress as much as ever.<br><br>I'm not going to bother with predictions for 2010 or resolutions either. I think it's better to work, enjoy what I'm doing and see where it takes me. Happy New Year. And good night.


title: 2011 in Review
date: 2012-01-01 03:07:22.000000
format: html
content:
  'I am only a man: I need visible signs. I tire easily, building the stairway of abstraction.' - Veni Creator, Czeslaw Milosz<br><br>So...I haven't written here in a while. I actually have a half-written post about how I'm disappointed with this administration and we're on a slippery slope towards throwing away some of our fundamental freedoms, like ...oh I don't know, habeas corpus...but since I started writing it the situation has deteriorated further. So great. I figured a year in review might be a little easier to write.<br><br>I'm exhausted. 2010 was a tough year but 2011 was a lot harder. On the other hand, the rewards have been greater. I've graduated, gotten a great first job, a lovely 12th story midtown apartment, written about twice as much code on personal projects as last year, and done some solid financial planning. Burke is moving to Indiana for a new job and I think he'll be much happier there. Luckily I found somebody to take his spot so we won't have to break lease.<br><br>Last year, Xach started a reddit thread on /r/lisp called 'Your Year in Lisp' which I <a href="http://www.reddit.com/r/lisp/comments/eukls/your_year_in_lisp/c1b324j">replied to</a> with some positive thoughts. This year has been even better. I wrote *a lot* more code. By comparison, last year I worked on 2 open source lisp projects and about 4 personal projects. This year I worked on about 8 personal projects and 2 open source projects.<br><br>What's really nuts is my realization that I've only been hacking real code for two years. I'd been reading <a href="http://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs">SICP</a>(starting in January '08) and hacking little snippets under 100 lines previously but never worked on a substantive piece of code. My first commit on a real codebase was <a href="https://github.com/redline6561/paktahn/commit/ad0c103b5eddd77a497955f75d9808bca0d8dedc">this nasty diff</a> to paktahn which I <a href="http://redlinernotes.com/blog/?p=1097">wrote about in this blog</a> so long ago.<br><br>That was in October 2009. Before that, the most interesting and largest scale code I'd written was a script to process my ATT csv call logs. October 2010, I was still mostly hacking Paktahn though I did some minor work on Weblocks and also did some part-time PHP hacking. That was the first code I got paid to write. This October, I was putting the finishing touches on <a href="http://github.com/redline6561/cl-scrobbler/">cl-scrobbler</a>, a Lisp library for <a href="http://www.last.fm/help/faq?category=99#201">scrobbling</a> to <a href="http://www.last.fm/">last.fm</a>, and integrating it with <a href="http://vintage-digital.com/hefner/software/shuffletron/">Shuffletron</a>.<br><br>I've been talking to Andy Hefner, the original author of Shuffletron, about merging my changes upstream and hope to find time to make that happen in 2011. I've started work on a <a href="http://media.ccc.de/browse/congress/2010/27c3-4159-en-reverse_engineering_mos_6502.html">MOS 6502</a> emulator in Lisp. The 6502 is the CPU that powered the original Nintendo. Also, I'm professionally hacking on a scary big Python CMS. There's also work I'm doing to get Paktahn to a state where I can pass off my role as maintainer to some interested guys that have been helping me with it. This decision is partly motivated by the fact that I switched to Debian recently and Paktahn is an archlinux specific tool.<br><br>I don't know what will come in the new year. I mostly hope to survive. Aside from continuing to improve my performance at work, I'd really like to increase my knowledge of Systems Programming in the coming year. That's going to mean a lot of C hacking. The last few months I've lost a lot of motivation and fire when it comes to personal hacking and studies. That will honestly be my biggest struggle going into the new year. Thank God I've got two more days to catch my breath.<br>


title: 2014, Day One
date: 2014-01-01 14:49:00.000000
format: md
content:
  ## What's new?

  I've been away for a while and I needed it. My priorities in the past 6
  months have shifted pretty drastically from the last few years
  "hacking, blogging, hacking, blogging". It was a long overdue shift to
  grow in new ways, form new relationships, and rediscover old hobbies. So,
  here's the latest:

  ### I Love Smash Brothers
  For years, traditional competitive sports haven't clicked for me. I compare
  myself to others reflexively but avoid active competition. I'm trying to
  compare myself to others less, bad habits die hard. But I encountered a
  [documentary series about Smash Brothers](http://www.youtube.com/playlist?list=PLoUHkRwnRH-IXbZfwlgiEN8eXmoj6DtKM)
  back in October and was reminded that a video game is the one place I've
  found competition fun, win or lose.

  It's crazy how much free time I've spent since then learning about a game
  I'd already put a few thousand hours into in college. There is incredible
  depth to the game and while I grant that calling a video gamer an "athlete"
  sounds ridiculous on its face, I now believe eSports are deserving of a
  mainstream audience even if they never find it.

  Personally, I'm enjoying getting better at the game and learning to be
  patient with my own progress. I've gained some appreciation for how people
  get so excited about traditional sports. I'd strongly encourage you to
  watch the first episode of the documentary if you have any interest in
  competitive gaming whatsoever, even if you think the very notion silly.

  ### I Love Electronic Music
  I've told myself for a long time that I would try to make music one day.
  I've played the guitar and the drums though am self-taught at both and
  never got serious enough to develop a real aptitude. I also have a long
  held love of electronic music, particularly sample-based wizardry such
  as [Amon Tobin's Supermodified](http://www.youtube.com/watch?v=2pcWeF0-zZw&list=PL54E8B89C71BD49BB&index=1).

  I'm finally pursuing this passion. I've purchased a copy of an old-school
  "tracker-style" software called [Renoise](http://www.renoise.com). While
  I'm not composing actual songs yet, I've been greatly enjoying sampling
  music and video games from my youth and constructing odd melodies and
  instruments. I've also been learning the basics of sound synthesis from my
  friend, [Matt Simpson](https://soundcloud.com/threv). Sound design is a
  crazy, crazy thing.

  ### I Love My Job
  I've been working for [Emcien](http://www.emcien.com) since May and it's
  been a great environment to grow as a software engineer. Aside from me,
  there are 5 engineers and I've been able to pair with people to quickly
  get up to speed on the products and learn new tools and techniques.
  In particular, I've enjoyed doing my first serious C hacking ever on the
  engine that powers Emcien's data analytics products.

  ## Epilogue
  I've also spent a huge amount of time this year with my beautiful
  girlfriend, Norma, and [her two dogs](http://redlinernotes.com/images/norma_and_the_pups.jpg).
  I've tried to see friends in town a bit more, I've played video games and
  read sci-fi novels a bit more. I'm remembering what leisure feels like and
  I have *no* regrets. I still want to finish the Lisp NES emulator and other
  projects but I'm branching out for a little while ... and my timeframe is
  flexible. Good luck with your 2014.


title: 3 Years In
date: 2012-05-18 13:00:01.000000
format: html
content:
  It's been 3 years since Dad died, 2 years since I've been single. It's hard to believe, really. And wouldn't you know, I had a dream about Dad for the first time in a while. He had cancer but was still alive. We'd all moved back to Cross Creek where I'd spent the first decade of my life or so. I had my job at CMG, I think, and I was talking to Dad who confided in me that he and Mom were having serious financial trouble. I remember being shocked that something hadn't been mentioned to me sooner and feeling guilty for somehow missing that I could have helped for so long. I'd just been enjoying life as I am these days, a good job, good friends, etc. I was talking to Mom or Dad about how I could support them when I woke up. In the dream, Dad still had all his hair. I don't think I've ever had a dream about him post-hair and post-chemo. I'm thankful for that. He wasn't the same person once his hair was gone.<br><br>I'd been a bit depressed the first half of this week and I couldn't figure out why. It wasn't until talking to mom Tuesday night that she reminded me we were coming up on the 3-year anniversary. I'd thought about it when someone asked about dad a few weeks back but it slipped my mind. I'm thankful for my job and coworkers, I love them dearly and even on my grumpiest, most "Office Space-y" days I'm happy to be in the office. I'm thankful for my friends who keep Atlanta fun and keep life interesting even when we all just want to have a drink and be together at the end of a long day. I'm thankful for my mother, who's weathered plenty and still figuring out how to have fun. Mostly, of course, I'm thankful for dad. I still don't know how he did it all. But thanks to him, I can too.


title: A Brief, "Postmodern" Shout-out
date: 2010-04-12 01:11:48.000000
format: html
content:
  Things have been crazy lately but I'm not here to give a full update. I will say that there's been good with the bad, family, friends and supporters all the while and that the bad is mostly the usual bureaucratic and financial troubles that are just a part of life. I'm trying to post more regularly. Today is a brief programming post.<br><br>This semester I've been taking a database course and we're building a small, silly webapp as the final project. The course uses SQL+PHP and I asked my professor if he wouldn't mind if I used SQL+Common Lisp. He accepted and so I've been using the <a href="http://marijn.haverbeke.nl/postmodern/">Postmodern</a> library for Common Lisp to talk to my Postgresql database. Postmodern has been really nice to use so far but there's one thing that I had a little trouble with that I'd like to document here.<br><br>Generally, if you're writing classes in Lisp you're using CLOS and an example might be something like this:<br><pre lang="lisp">(defclass user ()<br>  ((username<br>    :initarg :username :reader :username)<br>   (password<br>    :initarg :password :reader :password)<br>   (salt<br>    :initarg :salt :reader :salt)<br>   (email<br>    :initarg :email :reader :email)<br>   (first-name<br>    :initarg :first-name :reader :first-name)<br>   (last-name<br>    :initarg :last-name :reader :last-name)<br>   (zip<br>    :initarg :zip :reader :zip)))</pre><br>Postmodern has a nice method for interacting with the database via class definitions that it coins "Database Access Objects". Note that DAOs neither are nor attempt to be a full ORM solution, a very sane decision in my humble and inexperienced opinion. Anyway, to make a normal class into a DAO class is easy, just do this:<br><pre lang="lisp">(defclass user ()<br>  ((username<br>    :col-type string<br>    :initarg :username :reader :username)<br>   (password<br>    :col-type string<br>    :initarg :password :reader :password)<br>   (salt<br>    :col-type string<br>    :initarg :salt :reader :salt)<br>   (email<br>    :col-type string<br>    :initarg :email :reader :email)<br>   (first-name<br>    :col-type string<br>    :initarg :first-name :reader :first-name)<br>   (last-name<br>    :col-type string<br>    :initarg :last-name :reader :last-name)<br>   (zip<br>    :col-type integer<br>    :initarg :zip :reader :zip))<br>  (:metaclass dao-class)<br>  (:keys username))</pre><br>All you have to do is add col-types to each slot so the system knows what type is stored in the database rows, list the components of the primary key and declare it a member of the dao-class metaclass. With that done, you can easily work with CLOS objects and fairly seamlessly select, update, delete or instantiate+insert them into the database. Creating the table itself can be done as follows: <code>(execute (dao-table-definition 'user))</code>. However, this is really intended as a shortcut for cases where you have a simple table definition.  Say you wanted to allowed users to own collections of things, maybe collectible cards, and track those in the database as well. You ought to have foreign key constraints on the database so that collections couldn't be owned by users that didn't exist or consist of cards that didn't exist or were made up.<br><br>In the case where foreign key constraints are desired or other more complex checks should be made, the preferred method is to write a deftable definition in addition to the class and then create the table with <code>(create-table 'class)</code> or <code>(create-all-tables)</code> if you have several tables. This <em>would</em> make for nasty code duplication since you'd still need a dao-object class to interact with the tables as nicely as possible. Thankfully, there's a macro to clear the situation up and import the simple parts from your dao-class specification. A possible deftable for the collection class might look like this:<br><pre lang="lisp">(deftable collection<br>  (!dao-def) ;; Import the existing info from the dao-class definition.<br>  (!foreign 'user 'username) ;; Ensure that the username that owns the collection exists in our user table.<br>  ;; Ensure that each card in a collection has a name and edition corresponding to a card in our database.<br>  (!foreign 'card '(card-name card-edition)<br>	          '(name edition)))</pre><br>Of course, if your tables are already created and you just want to access them or you want to create them at the psql prompt, you don't care about any of this. Hmm...I guess that's supposed to go at the top. Anyway, a more careful and thorough reading of the documentation would've shown me this but examples are nice and here one is in case anyone googles around for it like I did. As far as I can tell, this is the preferred current approach for table creation. Corrections welcome and thanks to Marijn Haverbeke for writing postmodern. It's been wonderful so far.


title: A Common Lisp Web Development Primer, Part 1
date: 2010-09-19 19:57:54.000000
format: html
content:
  <strong>Disclaimer Pt.1</strong>: There are many people smarter and more qualified than me when it comes to CL web development. Thankfully, this article is covering basics and my knowledge should be sufficient. Correct me where wrong, of course.<br><strong>Disclaimer Pt.2</strong>: This article will deal more with config files, programming environment setup and the CL web dev landscape with a follow up article to introduce a specific framework, examples, etc.<br><strong>Edit of Nov 12, 2010</strong>: This article has been updated to reflect modern Common Lisp best practices (i.e. <a href="http://quicklisp.org/">Quicklisp</a>).<br><h3>The Hardware</h3><br>The first thing to talk about is where our application will be served. This was recently <a href="http://www.reddit.com/r/lisp/comments/d7rlx/ask_rlisp_do_any_cl_implementations_work_well_on/">discussed on lisp.reddit</a>. Unlike languages like PHP, Perl, Ruby or Python, shared hosting is not prevalent for lisp though <a href="http://www.tech.coop">tech.coop</a> is a notable exception. In general, a VPS or similar setup will be required. I've heard good things about people using <a href="http://www.slicehost.com/">Slicehost</a>, <a href="http://www.linode.com/">Linode</a> and <a href="http://www.thrustvps.com/">ThrustVPS</a>. Personally, I use Linode's smallest instance for $20 a month and have been quite happy with it. I've run hunchentoot, lighttpd, postgres and mysql on it simultaneously without issue but that wasn't under significant load. I'm also aware of at least one startup using Lisp on top of <a href="http://aws.amazon.com/ec2/">Amazon's EC2</a>. Heck, you may have a server you'd like to run out of your home. For our purposes, I will assume you have a reliable internet-facing Linux box and root access.<br><h3>The Linux Distro and Programs</h3><br>Any Linux distribution should be suitable for lisp web server duties. Personally, I would lean towards <a href="http://www.archlinux.org/">Archlinux</a> as their default install is quite lean and they keep very recent versions of SBCL(1.0.42), CMUCL(20a) and others packaged. There's even a <a href="http://aur.archlinux.org/packages.php?ID=25565">CCL AUR package</a> (<a href="http://wiki.archlinux.org/index.php/Arch_User_Repository">Archwiki AUR article</a>) maintained by <a href="http://blog.viridian-project.de/">Leslie Polzer</a>. Whatever distribution you wind up using to follow along with this series I recommend you also install screen, emacs, sbcl and lighttpd with your package manager. You should also grab the VCS pentafecta of darcs, git, mercurial, subversion and cvs.<br><h3>Setting up Emacs and SLIME</h3><br>Note that there are many other, probably better, Emacs+SLIME tutorials out there. Since the original writing of this article, Quicklisp has become the dominant method for acquiring Common Lisp libraries. Instructions for its use are here and the clbuild instructions are maintained below for posterity. First grab quicklisp with <code>curl -O http://beta.quicklisp.org/quicklisp.lisp</code> then load and install it by running <code>sbcl --load quicklisp.lisp,</code> followed by evaluating <code>(quicklisp-quickstart:install)</code>, <code>(ql:add-to-init-file)</code> and <code>(ql:quickload "quicklisp-slime-helper")</code>. Finally, add <code>(setq inferior-lisp-program "sbcl")</code> and <code>(load (expand-file-name "~/quicklisp/slime-helper.el"))</code> to your ~/.emacs.<br><p style="padding-left: 30px;"><strong>Alternate clbuild instructions</strong><br>The first thing to do is grab clbuild. At least until <a href="http://www.quicklisp.org/">quicklisp</a> is released, clbuild will remain the easiest way to get all the necessary lisp libraries to get cranking on web development in linux. I like to keep clbuild in ~/builds but place it where you like. Download it with <code>darcs get http://common-lisp.net/project/clbuild/clbuild</code>. Then cd into the clbuild directory and make it executable by running <code>chmod +x clbuild</code>. I'd also add the directory to your path in .bashrc or add an alias like <code>alias clbuild='/home/redline/builds/clbuild/clbuild'</code>.</p><br><p style="padding-left: 30px;">With that done, it's time to start grabbing libraries. First, get <a href="http://common-lisp.net/project/slime/">SLIME</a> by running <code>clbuild update slime</code>. Then you'll want to run <code>clbuild slime-configuration</code> and stick that in your ~/.emacs file, taking care to change the <code>(setq inferior-lisp-program "/home/.../.../clbuild/clbuild lisp")</code> to <code>(setq inferior-lisp-program "sbcl")</code> or "/usr/bin/sbcl" or whatever is appropriate.<br><strong>End clbuild-specifics</strong></p><br>At this point you should be able to ssh into your development server, run emacs -nw (for no-window-system/terminal mode) and then type M-x (alt-x) slime and enter to get to a lisp prompt.<br><h3>Getting the Lisp Libraries</h3><br>After talking with Leslie a bit, I'll be using weblocks-dev over weblocks-stable. Weblocks-dev use is encouraged over stable at this time. Quicklisp uses weblocks-dev already and makes this insanely easy, just evaluate <code>(ql:quickload 'weblocks)</code>. Done.<br><p style="padding-left: 30px;"><strong>clbuild specifics</strong><br>If you'd like to use weblocks-dev, open /path/to/your/clbuild/wnpp-projects in your favorite text editor and change the following:<br>1) Find elephant and change it's darcs repo from blah/blah/blah/elephant to blah/blah/blah/elephant-1.0<br>2) Find weblocks and change it's hg repo from http://www.bitbucket.org/skypher/weblocks-stable/ to http://www.bitbucket.org/S11001001/weblocks-dev/<br>3) Find cl-prevalence and change it's repo to cl-prevalence get_hg http://www.bitbucket.org/skypher/cl-prevalence/<br>Then run <code>clbuild update weblocks</code> and, if prompted about whether or not to download dependencies, enter 'y'. Let it work it's most excellent magic.<br><strong>End clbuild-specifics</strong></p><br><br><h3>The Framework Selection</h3><br>There are a multitude of ways to do web development in Common Lisp. There are web servers such as <a href="http://www.cliki.net/araneida">Araneida</a> and <a href="http://www.cliki.net/AllegroServe">Portable Allegroserve</a> (both effectively unmaintained), <a href="http://weitz.de/hunchentoot/">Hunchentoot</a> (which is dominant in the way *Ediware* often is), Apache with <a href="http://www.cliki.net/mod_lisp">mod_lisp</a>, relatively obscure or undocumented combination server/frameworks like <a href="http://hoytech.com/antiweb/">Antiweb</a>, <a href="http://github.com/lnostdal/SymbolicWeb">Symbolicweb</a>/<a href="http://github.com/lnostdal/SW-HTTP">SW-HTTP</a> and <a href="http://github.com/vii/teepeedee2">Teepeedee2</a> and frameworks like <a href="http://weblocks.viridian-project.de/">Weblocks</a>, <a href="http://common-lisp.net/project/ucw/">UCW</a> and <a href="http://www.cliki.net/RESTAS">RESTAS</a>.<br><br>I wanted something relatively commonly used and well-documented but I wanted a framework as opposed to just using libraries like CL-WHO, Parenscript and Postmodern on top of hunchentoot. Since <a href="http://ifelipe.net/">UCW already has a blog series</a> and I've worked with Leslie on <a href="http://github.com/redline6561/paktahn">Paktahn</a> a while, Weblocks was a natural choice for me.<br><h3>The App Setup</h3><br>I already run a wordpress blog and some other stuff on a lighttpd server on my Linode. Consequently, it made sense to just map a subdomain to my lisp experiments and leave the rest alone. To do this with lighttpd, add the following to /etc/lighttpd/lighttpd.conf:<br><pre lang="lua">$HTTP["host"] =~ "testbed.redlinernotes.com" {<br>              proxy.server = ( "/" => ( ( "host" => "127.0.0.1",<br>                                          "port" => 4242 ) ) )<br>}</pre><br>Now you wouldn't want your webapp to not restart if you had to reboot the server would you? Of course you wouldn't. I've <a href="http://xach.livejournal.com/215066.html">taken a cue from Xach</a> and daemonized it via screen as follows:<br>Open /etc/rc.local in your favorite text editor and insert a line similar to <code>su redline -c 'screen -d -m -S screenslime -c /home/redline/webapps/screenrc'</code>. This will ensure that the redline user starts a screen instance in detached mode with the name "screenslime" when the system boots that will use /home/redline/webapps/screenrc as it's configuration. If you don't know what any of that means, don't worry. It means screen is cool and you want it.<br><br>Now, you should add something like the following to whatever file you listed as your screenrc:<br><pre>chdir /home/redline/projects<br><br>screen emacs -nw<br>screen sbcl --userinit /home/redline/.sbclrc --load /home/redline/webapps/init.lisp</pre><br>This will ensure screen defaults to the /home/redline/webapps directory, starts an emacs instance in no-window-systems mode in screen window 0 and starts sbcl loading your .sbclrc and a lisp init script for your webapp(s) in screen window 1.<br><br>Next, we need to actually write the init file for your webapp. For now, it will be quite simple as I'm just playing with weblocks. In the next article, we'll build something (probably un) interesting. In your init.lisp file (or whatever you called it) insert something like:<br><pre lang="lisp">(ql:quickload '(weblocks swank))<br><br>(setf swank-loader::*contribs* '(swank-c-p-c swank-arglists<br>                                 swank-fuzzy swank-fancy-inspector<br>                                 swank-package-fu))<br>(swank-loader::loadup)<br>(swank:create-server :dont-close t<br>                     :port 4010<br>                     :coding-system "utf-8-unix")</pre><br>This will ensure weblocks loads and swank serves on port 4010 so that we can use SLIME to connect and work on the running system. Note that you could've also put <code>(load "/path/to/my/.sbclrc")</code> or inlined the following as the first line(s) in your init file and avoided the --userinit portion of the sbcl invocation in screenrc. My .sbclrc simply points sbcl to the clbuild libraries like so:<br><pre lang="lisp">(require 'asdf)<br>(setf asdf:*central-registry* '("/home/redline/clbuild/systems" *default-pathname-defaults*))</pre><br>Unless you're using clbuild, you won't need this in your .sbclrc but if you are it's important that you do this so that sbcl can find the lisp libraries we downloaded with clbuild. If you don't, it'll be looking in ~/.sbcl/systems.<br><br>Finally, I would also add a bash alias to your ~/.bashrc to get you right back to where you were with screen+SLIME. Mine is <code>alias webslime='screen -dR'</code>. I also added <code>stty -ixon</code> to my .bashrc as detailed in <a href="http://redlinernotes.com/blog/?p=1227">my last post</a> because screen was capturing keystrokes I wanted sent to emacs. Xach pointed out that this could be toggled in screen with C-a C-f but I preferred having it as a default.<br><br>See, now that was mostly painless, wasn't it? Next time I'll cover the basics of weblocks and develop a simple starter application. Or if I'm feeling particularly lazy, maybe I'll just walk us through the simple-blog example-app. Cheers.


title: A Common Lisp Web Development Primer, Part 2
date: 2010-11-16 03:19:24.000000
format: html
content:
  <strong>Disclaimer</strong>: This blog will not teach you Common Lisp. That is a (mostly) solved problem. See Peter Seibel's <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> and Peter Norvig's <a href="http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ref=pd_sim_b_3">PAIP</a>. Other oft-recommended texts include Keene's <a href="http://www.amazon.com/Object-Oriented-Programming-Common-Lisp-Programmers/dp/0201175894/ref=pd_bxgy_b_text_b">OOP in CLOS</a>, PG's <a href="http://www.paulgraham.com/onlisp.html">On Lisp</a> and Kiczales et al's <a href="http://www.amazon.com/Art-Metaobject-Protocol-Gregor-Kiczales/dp/0262610744">The Art of the Metaobject Protocol</a>. This blog will also not teach you good style, I'm too young for that. It hopefully demonstrates non-atrocious style though. I'm learning web development as I go, so don't count on expert understanding there either.<br><strong>Disclaimer Pt. 2</strong>: For the foreseeable future all these projects will be weblocks-based. If that's not your cup of tea you can check out the <a href="http://restas.lisper.ru/en/index.html">RESTAS docs and examples</a>, <a href="http://ifelipe.net/">Felideon's blog on UCW</a>, <a href="http://www.adampetersen.se/articles/lispweb.htm">Adam Petersen's slightly bitrotted sans framework article</a> or "defect" to Clojure and look at all the <a href="http://github.com/weavejester/compojure">Compojure</a> stuff and maybe <a href="http://github.com/brentonashworth/sandbar">Sandbar</a>.<br><h3>Introduction</h3><br>It's taken far longer than I hoped to get this second article off the ground. For those of you who missed Part 1, <a href="http://redlinernotes.com/blog/?p=1232">look here</a> and if you'd rather see code than this article's commentary, the code is available <a href="http://github.com/redline6561/clockwork/">on github</a>. It's worth noting that Part 1 was originally written with clbuild in mind but has since been updated with instructions for quicklisp also. Part 2 details the construction of <a href="http://clockwork.redlinernotes.com/">Clockwork</a>, a simple clone of the now defunct <a href="http://www.viddler.com/molzy/videos/72/">yourli.st</a>, an email reminder service. Clockwork allows you to schedule a reminder and brief note which is sent to you by email or text message at the predetermined time. Right now international numbers aren't supported but I'd be happy to see patches.<br><h3>Future Plans</h3><br>There's still a good amount of stuff in the <a href="http://github.com/redline6561/clockwork/blob/master/TODO">TODO</a> and I have further projects in mind after this. Part of the reason this article was so long in coming is that I've been helping Leslie by testing out his new form-widget library. The other reasons are that I have school and (until recently) was working plus I'm learning web development as I go. The next article will go into polishing this application and will likely be much more Javascript and CSS than Lisp. I'm working on getting a <a href="http://marijnhaverbeke.nl/postmodern/">postmodern</a> backend written, tested and merged into Weblocks right now. Once that's done I plan to continue this series by developing a RESTful blog that can import entries from Wordpress and maybe crosspost to livejournal as that should prove more interesting...but like Linus' said, "Talk is cheap, show me the code".<br><h3>Resources, Libraries and Project Skeleton</h3><br>Weblocks docs are not in an ideal state and hopefully this blog series will help that some. Four things worth being aware of for a beginner are the <a href="http://groups.google.com/group/weblocks">Google group</a>, the <a href="http://viridian-project.de/~sky/weblocks-stable/docs/gen/weblocks-package/index.html">TINAA-generated docs</a>, the <a href="http://trac.common-lisp.net/cl-weblocks/wiki/UserManual">User Manual</a> and <a href="http://viridian-project.de/~sky/user-guide.stx.html">User Guide</a>. As usual, googling specific concepts will lead you to blog entries and mailing list posts that may or may not be out of date.<br><br>We'll begin by using weblocks helper to create a project skeleton by evaluating <code>(wop:make-app 'clockwork "/home/redline/projects/")</code>. If you've been following along since Part 1, you'll also want to push that path onto the ASDF central registry so you can use quicklisp to load the clockwork system in your server init file (<code>~/webapps/init.lisp</code>). <code>(push "/home/redline/projects/clockwork/" asdf:*central-registry*)</code> will do the trick. Then add a <code>(ql:quickload '(clockwork))</code> line at the bottom of the file followed by <code>(clockwork:start-clockwork :port 4242)</code>. At this point, you should be able to reboot the server and run <code>screen -dRR</code> or similar to get a screen session with emacs and an sbcl instance with clockwork and swank running. They'll be in different windows which you can switch to with C-a (control-a) and the window number. Numbers start at 0. Enough of that, this isn't a GNU Screen tutorial. Go to the emacs instance and run M-x slime-connect making sure to change the port to that specified in the init file. At this point, you're connected to SLIME and can evaluate <code>(in-package :clockwork)</code> and finally get hacking! You should also be able to reach clockwork in the browser at localhost:4242 but there's not much there yet...<br><br>To begin with, you'll need some libraries to send emails and schedule reminders to be sent in the future. <a href="http://www.sbcl.org/manual/Timers.html">SBCL provides a Timers facility</a> which we could use for this but it's usually worth doing a little extra work to write portable Common Lisp. To this end we'll use the <a href="http://www.cliki.net/trivial-timers">trivial-timers</a> library as a wrapper and <a href="http://common-lisp.net/project/cl-smtp/">cl-smtp</a> for emails. We'd also like to handle timezones and time arithmetic properly so we'll use the <a href="http://common-lisp.net/project/local-time/">local-time</a> library for that. We'll also be doing some minor string handling which <a href="http://www.cliki.net/SPLIT-SEQUENCE">split-sequence</a> winds up being an easy solution for so grab that too. Add those to the <code>:depends-on</code> clause in clockwork.asd in the project directory and then run <code>(ql:quickload 'clockwork)</code> at the REPL. Quicklisp will download and load the new libraries for you. It's that easy. Finally, add <code>:local-time</code> to the <code>:use</code> clause of the defpackage in clockwork.lisp and import the split-sequence symbol from the split-sequence package.<br><h3>Data and Weblocks Stores</h3><br>By default Weblocks defines a <a href="http://common-lisp.net/project/cl-prevalence/">cl-prevalence</a> backend ("store") which persists data to the "data/" directory in the clockwork project folder. The store itself is defined in conf/stores.lisp and that's where you would go to define additional stores if you wanted them. Weblocks has a special variable, *default-store*, and DEFSTORE sets that variable after defining a store so the last store defined in stores.lisp will act as the default. Weblocks also supports <a href="http://common-lisp.net/project/elephant/">elephant</a> and <a href="http://clsql.b9.com/">clsql</a> but for now, we'll focus on other aspects of the framework and delve more into the Store API in a later article. If you're curious now though the <a href="http://bitbucket.org/S11001001/weblocks-dev/src/tip/src/store/store-api.lisp">Store API is clearly defined and documented</a>.<br><br>The only data we really care about is the reminders our users will generate. For our purposes, a reminder consists of some number of recipients, a title, a summary of the event it's reminding you of, the time of the event and how far before the event you'd like to be reminded. A class definition falls out of this rather naturally and we'll add an id slot so prevalence will know how to store it. Create a src/reminder.lisp file, insert the following and add the file to the :components clause of clockwork.asd.<br><br><pre lang="lisp"><br>(in-package :clockwork)<br><br>(defclass reminder ()<br>  ((id :reader reminder-id) ;; all classes to be persisted with cl-prevalence need an id slot<br>   (emails :reader reminder-emails<br>           :initarg :emails<br>           :type list)<br>   (title :reader reminder-title<br>          :initarg :title<br>          :type string)<br>   (timestamp :reader reminder-timestamp<br>              :initarg :timestamp<br>              :type timestamp)<br>   (summary :reader reminder-summary<br>            :initarg :summary<br>            :type string)<br>   (at :reader reminder-at<br>       :initarg :at<br>       :type timestamp)))<br></pre><br>Now that we have a rough idea of what data we care about, lets look at how to send messages.<br><h3>Emails and Text Messaging</h3><br>Text messaging is actually quite simple to support thanks to the <a href="http://en.wikipedia.org/wiki/List_of_SMS_gateways">SMS gateways</a> run by the major carriers. SMS gateways allow us to send an email to an address which represents a phone number. This is then converted to a text message and forwarded on to the recipient's cell phone free of charge. The downside to this is that it's carrier specific so you have to know the cell carrier of the recipient. It would be nicer to just take a number and figure out what carrier services it but <a href="http://en.wikipedia.org/wiki/Local_number_portability">Local Number Portability</a>, among other things, makes this tricky. Whitepages.com has an API for looking this up but their information was out of date for my cell phone and they had a 200 request per API key per day limit. <a href="http://www.twilio.com/">Twilio</a> and <a href="http://data24-7.com/">Data24-7</a> offer for-pay APIs but for this example app I'll be staying free and cheap. I'll be coldly forcing my users to select their carrier from a dropdown if they want SMS support.<br><br>Since we don't know whether our users really care about their privacy or what kind of data they'll be putting in these reminders, we'll do the responsible thing and send the emails via Encrypted SMTP. I'll be using a gmail account I registered for the service since Google provides free, encrypted SMTP on all their accounts. Let's write a quick helper macro for using it. Create a src/messaging.lisp file, insert the following and add it to the :components clause of clockwork.asd.<br><br><pre lang="lisp"><br>(in-package :clockwork)<br><br>(defparameter *mail-server* "smtp.gmail.com")<br><br>(defmacro with-encrypted-smtp ((&key to subject style<br>                               (from "cl.ockwork.webdev@gmail.com"))<br>                               &body body)<br>  `(cl-smtp:send-email ,*mail-server* ,from ,to ,subject<br>                       (if (eql ,style :html)<br>                           (with-html ,@body) ;; TODO: make a nicer render style<br>                           ,@body)<br>                       ;; it's worth noting send-email takes a :cc argument<br>                       :ssl :tls<br>                       :authentication '(,*smtp-user* ,*smtp-pass*)<br>                       ,@(when (eql style :html)<br>                               '(:extra-headers<br>                                 '(("Content-type"<br>                                    "text/html; charset=\"iso-8859-1\""))))))<br></pre><br>Note that we haven't defined *smtp-user* or *smtp-pass* yet. There are two questions you should be asking. Why a macro and what is it doing? The why is debatable in this case. I wanted the syntax to jump out at me and read a certain way when I use the encrypted SMTP. That's all. The what is fairly straightforward. The macro is syntactically similar to with-open-file and others. It takes keyword arguments for the recipient, sender (with a default value), subject and style of the message along with a message as the body and then sends an email via encrypted SMTP (and cl-smtp's send-email function) with the credentials provided. If the style is :html, it goes to the trouble of specifying a few additional headers.<br><br>Since we haven't defined the user and pass, let's do that now. Create a conf/config.lisp file, insert the following and add it to your clockwork.asd.<br><pre lang="lisp"><br>(in-package :clockwork)<br><br>(defparameter *smtp-user* "yourusername@gmail.com")<br>(defparameter *smtp-pass* "yourpassword")<br></pre><br>Obviously, you don't want this puppy in source control. Consequently,  I committed it before I filled in the user and pass values then ran <code>git update-index --assume-unchanged conf/config.lisp</code> which tells git to ignore all future changes to the file. Be forewarned, that command might be reversible but I don't know how. Go ahead and add in your username and password, reload the system at the REPL with <code>(ql:quickload 'clockwork)</code> and test it out. You should be able to send yourself an email. Now let's add some helpers for SMS. Return to the src/messaging.lisp file and we'll add a variable defining a mapping of Carriers to SMS Gateway servers and a function for determining if an email address belongs to one of the listed SMS gateways. Add the following code to the bottom of the file.<br><pre lang="lisp"><br>(defparameter *sms-gateways*<br>  ;; list is derived from http://en.wikipedia.org/wiki/List_of_SMS_gateways<br>  '(("AT&T/Cingular" . "txt.att.net")<br>    ("Alltel" . "text.wireless.alltel.com")<br>    ("Boost Mobile" . "myboostmobile.com")<br>    ("Cincinatti Wireless" . "gocbw.com")<br>    ("MetroPCS" . "mymetropcs.com")<br>    ("Sprint/PCS" . "messaging.sprintpcs.com")<br>    ("Sprint/Nextel" ."page.nextel.com")<br>    ("T-Mobile" . "tmomail.net")<br>    ("US Cellular" . "email.uscc.net")<br>    ("Verizon" . "vtext.com")<br>    ("Virgin Mobile" . "vmobl.com")))<br><br>(defun sms-mail-p (email)<br>  (let ((domain (second (split-sequence #\@ email))))<br>    (member domain *sms-gateways* :key #'cdr :test #'equal)))<br></pre><br><br><h3>A Few Reminder Methods</h3><br>We still need methods to send a reminder, delete it when we're through with it and schedule it to be sent at a later time. Let's create those now. Since users aren't required to register to send a reminder, we'll put off letting them delete reminders from the system for now. When they submit the reminder form, a reminder will be instantiated, persisted and scheduled for later sending and deletion. We'd like to offer the user the ability to send reminders by email, text message or both so we'll assume that a list of emails are stored in the emails slot of the reminder and loop through each one, sending it with the macro we defined earlier. Then we'll use Weblocks Store API to delete the object from the datastore. Add the following code to the end of src/reminder.lisp.<br><pre lang="lisp"><br>(defgeneric send-and-delete (reminder)<br>  (:documentation "Send the user their reminder as requested and then remove it from the datastore."))<br><br>(defmethod send-and-delete ((reminder reminder))<br>  (loop for email in (reminder-emails reminder) do<br>    (with-encrypted-smtp (:to email :subject (reminder-title reminder)<br>                              :style (if (sms-mail-p email)<br>                                         :plain<br>                                         :html))<br>      (reminder-summary reminder)))<br>  (delete-persistent-object-by-id *default-store* 'reminder (reminder-id reminder)))<br></pre><br><br>Finally, we'd like to schedule the reminder to be sent at a later date. Assuming that the timezone differences are handled beforehand and that the reminder's at slot contains a timestamp for when the message should be sent according to the server's timezone, the local-time and trivial-timer libraries make defining a schedule method pretty easy. We'll just use the local-time library and a let to compute the seconds from the present until the time to send the reminder, make a timer whose function calls send-and-delete on the reminder and schedule it with a delay of the number of seconds computed. The only tricky bit is to pass :thread t to make-timer so that each timer is triggered in a new thread. If this isn't done, the timer will try to interrupt an arbitrary thread to run it's function which, put plainly, is unreliable. Another alternative would be to have a dedicated thread for sending reminders and pass that as the argument to :thread but we'll take the easy way out this time. Add the following code to the end of reminder.lisp. Here are links to my versions of the files: <a href="https://github.com/redline6561/clockwork/blob/master/src/messaging.lisp">messaging</a>, <a href="https://github.com/redline6561/clockwork/blob/master/src/reminder.lisp">reminder</a>.<br><br><pre lang="lisp"><br>(defgeneric schedule (reminder)<br>  (:documentation "Schedule the reminder to be sent at the time the user requested."))<br><br>(defmethod schedule ((reminder reminder))<br>  (let ((secs-until-reminder (round (timestamp-difference (reminder-at reminder) (now)))))<br>    (trivial-timers:schedule-timer<br>     (trivial-timers:make-timer (lambda ()<br>                                  (send-and-delete reminder)) :thread t)<br>     secs-until-reminder)))<br></pre><br><br><h3>Next Time...</h3><br>This article got long. It may be too high-level for some, too low-level for others and too wordy for everybody. In addition, this isn't the most thrilling software ever constructed. Next time we'll get into more Weblocks specifics and work on the frontend to get the form and a jQuery calendar up and going. Please let me know if there are questions I can answer, things you'd like covered in more depth or other thoughts on how to improve this series. Thanks for reading.


title: A Common Lisp Web Development Primer, Part 3
date: 2010-11-22 04:24:03.000000
format: html
content:
  <strong>Disclaimer</strong>: What? You haven't already read the first two parts? Feel free to go ahead and do that. The same disclaimers apply. (require '<a href="http://redlinernotes.com/blog/?p=1232">cl-wdp-part1</a> '<a href="http://redlinernotes.com/blog/?p=1243">cl-wdp-part2</a>)<br><br><h3>Today's Topics</h3><br>The main topics we'll be covering are Weblocks widgets, forms and views along with a brief example of creating a presentation to use jQueryUI's <a href="http://jqueryui.com/demos/datepicker/#inline">Datepicker</a>. There will also be a brief aside on what to do after an emergency reboot or power outage relating to cl-prevalence and trivial-timers. By the end the <a href="http://clockwork.redlinernotes.com/">clockwork site</a> will be fully functional.<br><br><h3>Form-widgets, Widgets and Views</h3><br>The User Guide has pretty nice expository summaries of <a href="http://viridian-project.de/~sky/user-guide.stx.html#Widgets">Widgets</a> and <a href="http://viridian-project.de/~sky/user-guide.stx.html#Views">Views</a>. The bottom line is that Widgets are what Weblocks pages are composed of and views are different ways to render those widgets. A macro called <a href="http://viridian-project.de/~sky/weblocks-stable/docs/gen/weblocks-package/macro-defwidget.html">defwidget</a> is used to construct widgets which are just new classes which inherit from the widget-metaclass. Don't worry if you don't know what that means. Essentially, you define widgets for the data you care about working with and then you define views to render that data, whether as a form for editing, a table for comparing multiple items or some other representation.<br><br>Leslie has been working on some new <a href="http://bitbucket.org/S11001001/weblocks-dev/src/1efb9f404367/contrib/lpolzer/form-widget.lisp">form-widget</a> code intended to <a href="http://groups.google.com/group/weblocks/browse_thread/thread/ac89bf70b29f625c#">remove some of the sharp edges of the current system</a>. As this site is basically just a form it made sense for me to try to use this new code (and Leslie wanted me to help him bang on it). Consequently, one thing you'll need to do is add (load "/path/to/weblocks/contrib/lpolzer/form-widget.lisp") to your init.lisp file that runs on startup. It should be placed after weblocks is loaded and before the loading of clockwork.<br><br>Last time we defined a reminder class with slots for the data we really care about: a list of emails, a title and summary and timestamps for when to send that message and when the event itself occurs. However, it won't do to ask our users to input timestamps or to tell us the "email" for their cell phone's SMS gateway. To that end, we'll define a view to gather the information we really need to construct the timestamps and other parts of the reminder. We need to know whether they want to be notified by email, text message or both. We'll need the corresponding contact info, including their cell carrier if they want to be notified by text message. We'll also need to note the event date, timezone and time as well as how long before the event they'd like to be reminded and a message and title. I've also thrown in a "honeypot" field. In theory, spam bots will indiscriminately fill it so we won't get any bogus submissions because the form won't validate. Maybe later we'll replace this with reCaptchas.<br><br>So let's get to it and define a view for our form in a new file src/forms.lisp. Insert the following code:<br><pre lang="lisp"><br>(in-package :clockwork)<br><br>(defview reminder-form-view (:type form :caption "Schedule an Event Reminder..."<br>			     :buttons '((:submit . "Submit")) :persistp nil)<br>  (send-as :present-as (dropdown :choices '(("An email and a text." . :both)<br>					    ("Just an e-mail." . :email)<br>					    ("Just a text." . :text))<br>				 :welcome-name "How to send it")<br>	   :requiredp t)<br>  (email :satisfies 'valid-email)<br>  (cell-number :satisfies 'valid-cell-number)<br>  (cell-carrier :present-as (dropdown :choices *sms-gateways*))<br>  (event-date :present-as (calendar) :requiredp t)<br>  (event-hour :present-as (dropdown :choices *hour-choices*)<br>	      :requiredp t)<br>  (event-minute :present-as (dropdown :choices   '(("00" . 0)<br>						   ("15" . 15)<br>						   ("30" . 30)<br>						   ("45" . 45)))<br>		:requiredp t)<br>  (timezone :present-as (dropdown :choices *timezones*)<br>	    :requiredp t)<br>  (remind-me :present-as (dropdown :choices '(("At the event" . 0)<br>					      ("5 minutes before" . 300)<br>					      ("10 minutes before" . 600)<br>					      ("15 minutes before" . 900)<br>					      ("30 minutes before" . 1800)<br>					      ("45 minutes before" . 2700)<br>					      ("1 hour before" . 3600)<br>					      ("2 hours before" . 7200)<br>					      ("1 day before" . 86400)<br>					      ("2 days before" . 172800)<br>					      ("1 week before" . 604800)<br>					      ("2 weeks before" . 1209600)))<br>	     :requiredp t)<br>  (subject :requiredp t)<br>  (summary :present-as (textarea :rows 5))<br>  (honeypot :label "Leave this blank" :satisfies #'null))<br><br>(defparameter *timezones*<br>  '(("UTC-12:00 (Eniwetok, Kwajalein)" . -43200)<br>    ("UTC-11:00 (Midway Island, Samoa)" . -39600)<br>    ("UTC-10:00 (Hawaii)" . -36000)<br>    ("UTC-09:00 (Alaska)" . -32400)<br>    ("UTC-08:00 (Pacific Time)" . -28800)<br>    ("UTC-07:00 (Mountain Time)" . -25200)<br>    ("UTC-06:00 (Central Time)" . -21600)<br>    ("UTC-05:00 (Eastern Time)" . -18000)<br>    ("UTC-04:00 (Atlantic Time, Caracas)" . -14400)<br>    ("UTC-03:30 (Newfoundland)" . -12600)<br>    ("UTC-03:00 (Brazil, Buenos Aires, Georgetown)" . -10800)<br>    ("UTC-02:00 (Mid-Atlantic)" . -7200)<br>    ("UTC-01:00 (Azores, Cape Verde Islands)" . -3600)<br>    ("UTC+00:00 (Lisbon, London, Casablanca)" . 0)<br>    ("UTC+01:00 (Berlin, Brussels, Copenhagen, Madrid, Paris)" . 3600)<br>    ("UTC+02:00 (Kaliningrad, South Africa)" . 7200)<br>    ("UTC+03:00 (Baghdad, Moscow, Riyadh, St. Petersburg)" . 10800)<br>    ("UTC+03:30 (Tehran)" . 12600)<br>    ("UTC+04:00 (Abu Dhabi, Baku, Muscat, Tbilisi)" . 14400)<br>    ("UTC+04:30 (Kabul)" . 16200)<br>    ("UTC+05:00 (Ekaterinburg, Islamabad, Karachi, Tashkent)" . 18000)<br>    ("UTC+05:30 (Bombay, Calcutta, Madras, New Delhi)" . 19800)<br>    ("UTC+05:45 (Kathmandu)" . 20700)<br>    ("UTC+06:00 (Almaty, Colombo, Dhaka)" . 21600)<br>    ("UTC+07:00 (Bangkok, Hanoi, Jakarta)" . 25200)<br>    ("UTC+08:00 (Beijing, Hong Kong, Perth, Singapore)" . 28800)<br>    ("UTC+09:00 (Osaka, Seoul, Sapporo, Tokyo, Yakutsk)" . 32400)<br>    ("UTC+09:30 (Adelaide, Darwin)" . 34200)<br>    ("UTC+10:00 (Eastern Australia, Guam, Vladivostok)" . 36000)<br>    ("UTC+11:00 (Magadan, New Caledonia, Solomon Islands)" . 39600)<br>    ("UTC+12:00 (Auckland, Fiji, Kamchatka, Wellington)". 43200)))<br><br>(defparameter *hour-choices*<br>  (loop for i from 0 to 23<br>     collecting `(,(format nil "~d" i) . ,i)))<br></pre><br>So here we're defining a view called reminder-form-view and passing in a list of arguments *about* the view as well as a list of fields in the view. In the list of arguments about the view we note that it's a form and we don't want to persist the form contents directly. We use a variety of keywords in the list of form fields to get the behavior we want including :present-as, :requiredp, :satisfies and :label. Present-as allows us to make something a dropdown or any other defined presentation. Note that some presentations do take arguments. Dropdown in particular takes a list of dotted pairs representing the Dropdown choice and it's corresponding value. Requiredp does what you'd expect and marks a form field as required. Satisfies takes a lambda or the name of a function which will validate the field's data. By default, the view will "humanize" the field names and use those humanized names as labels. If you want a different label for some reason, you can achieve that with the :label keyword.<br><br>Now we have a form that takes all the data we need to construct a reminder but we still need to validate the emails and cell phone numbers. Additionally, we'll need to write helper functions to construct the email list and timestamps that the reminder's emails and timestamp slots will be set to. Consequently, add this code to the bottom of the file:<br><br><pre lang="lisp"><br>(defun valid-email (user-input)<br>  "Ensure that there is an @ and a . and input not containing @s before and after each."<br>  (or (cl-ppcre:scan "^[^@]+@[^@]+\\.[^@]+$" user-input)<br>      (values nil "Your email must have an @, a . and text before and after both.")))<br><br>(defun valid-cell-number (user-input)<br>  "Ensure that only numbers are given and there are at least 10."<br>  (or (cl-ppcre:scan "^[0-9]{10,}$" user-input)<br>      (values nil "Your number must have only numbers and at least 10 of them.")))<br><br>(defun get-emails (form-data)<br>  (with-form-values (send-as email cell-number cell-carrier) form-data<br>    (let ((sms-mail (concatenate 'string cell-number "@" cell-carrier)))<br>      ;; this was an ecase with keywords but weblocks converts<br>      ;; the keywords to strings somewhere in form submission<br>      (cond ((string= send-as "BOTH") (list email sms-mail))<br>	    ((string= send-as "EMAIL") (list email))<br>	    ((string= send-as "TEXT") (list sms-mail))))))<br><br>(defun get-timestamps (form-data)<br>  (with-form-values (event-date event-hour event-minute<br>		     remind-me timezone) form-data<br>    (let* ((hour (parse-integer event-hour))<br>	   (minute (parse-integer event-minute))<br>	   (reminder-time-period (parse-integer remind-me))<br>	   (timezone (parse-integer timezone))<br>	   (datestring (split-sequence #\- event-date))<br>	   (day (parse-integer (first datestring)))<br>	   (month (parse-integer (second datestring)))<br>	   (year (parse-integer (third datestring)))<br>	   (event-time (encode-timestamp 0 0 minute hour day month year :offset timezone)))<br>      (list event-time<br>	    (timestamp- event-time reminder-time-period :sec)))))<br></pre><br><br>The validation functions are ORs with the function testing the input as the first clause and a VALUES form returning nil (a failed submission) and an appropriate error message as the second. The helper functions use the with-form-values macro to grab the relevant fields of the form and construct the resulting slot. Get-timestamps is rather nasty but we're essentially just grabbing all those fields pertaining to the time, parsing the integers from them and passing those on to the appropriate <a href="http://common-lisp.net/project/local-time/manual.html#Creating-timestamp-Objects">timestamp</a> <a href="http://common-lisp.net/project/local-time/manual.html#Manipulating-Date-and-Time-Values">functions</a> in the local-time library.<br><br><h3>A Calendar Presentation</h3><br>It would certainly be better to have a nice calendar than have users enter dates as strings and then try to validate them and God forbid we roll our own given the number of Javascript calendars already out there. Since it's fairly well established I opted for the <a href="http://docs.jquery.com/UI/Datepicker">jQueryUI Datepicker</a>. Previously to use Javascript libraries you needed to download them and place them in your Weblocks project's pub/script folder but thanks to a quick patch by Leslie Polzer remote dependencies are now also supported. In case you didn't read the previous article, when you first start a project with <code>(wop:make-app 'name "/path/to/app")</code> weblocks generates a defwebapp form and a basic package for that app along with setting up a store and some basic resources. To include the jQuery code on our page we'll modify our defwebapp form in clockwork.lisp like so:<br><pre lang="lisp"><br>(defwebapp clockwork<br>    :prefix "/"<br>    :description "Fire-and-Forget Event Reminders"<br>    :init-user-session 'clockwork::init-user-session<br>    :autostart nil                   ;; have to start the app manually<br>    :ignore-default-dependencies nil ;; accept the defaults<br>    :hostnames '("clockwork.redlinernotes.com")<br>    :dependencies '((:stylesheet "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/themes/ui-darkness/jquery-ui.css")<br>		    (:script "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js")<br>		    (:script "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js")<br>		    (:javascript-code "var $jquery = jQuery.noConflict();"))<br>    :debug t)<br></pre><br><br>First let's note that this will include these dependencies in the "HEAD" of every page. If you want to have per-widget dependencies Weblocks does support that by (if I'm not mistaken) defining a <a href="http://common-lisp.net/project/cl-weblocks/docs/weblocks-package/generic-efunction-widget--public--dependencies.html">widget-public-dependencies</a> method specialized on that widget. Since we only have one page in this app anyway we'll just list them here. We've done that by adding entries to the dependencies list that use Google's CDN to supply the minified jQuery and jQueryUI libraries along with a stylesheet for the jQueryUI stuff. We added the :hostnames argument which specifies that requests to any host besides those listed are to be ignored. This is particularly helpful if you're running multiple webapps off of one server but want them to share a Lisp image and port rather than fire up separate Hunchentoot servers for each one. Additionally, we're inlining the js code that calls <code>jQuery.noConflict()</code> in the header because Weblocks uses prototype and scriptaculous out of the box and jQuery will happily steal the <strong>$</strong> global variable from Prototype which causes all sorts of havoc. While there is interest in removing the prototype and scriptaculous dependencies it hasn't happened yet. It would be greatly appreciated if any developer felt like taking a little time to tackle this.<br><br>So now that we've included the JS code, let's write a presentation. The presentation lets us add the code <code>:present-as (calendar)</code> to a slot in our View and have it render as a calendar. This presentation will be a little different as we're using Leslie's new form-widget code. A more traditional coverage of presentations can be found in <a href="http://uint32t.blogspot.com/2008/04/weblocks-presentations.html">this blog post</a>. Create a new file in the src directory called calendar.lisp and insert the following code:<br><pre lang="lisp"><br>(in-package :clockwork)<br><br>;; calendar presentation<br>(defclass calendar-presentation (input-presentation)<br>  ())<br><br>;; calendar form-widget code<br>(define-widget calendar-field-widget (field-widget)<br>  ()<br>  (:default-initargs :parser (lambda (raw-value)<br>			       (values t raw-value))))<br><br>(defmethod field-presentation->field-widget-class ((presentation calendar-presentation))<br>  'calendar-field-widget)<br><br>(defmethod render-field-contents ((form form-widget) (field calendar-field-widget))<br>  (with-html<br>    (:input :type "hidden" :name (name-of field) :value (datestring))<br>    (:div :id "datepicker"<br>      (send-script '($jquery (lambda ()<br>			       (ps:chain ($jquery "#datepicker")<br>					 (datepicker (ps:create date-format "dd-mm-yy"<br>                                                                min-date 0<br>								on-select (lambda (date inst)<br>									    (ps:chain ($jquery "[name=event-date]")<br>										      (val date))))))))))))<br><br>(defun datestring ()<br>  (subseq (format-timestring nil (now) :format '((:day 2) "-" (:month 2) "-" :year)) 0 10))<br></pre><br><br>So what's going on here? First we define a calendar-presentation class and a calendar-field-widget class along with a simple method to map the presentation onto the widget-class. Then we write the bulk of the code, a render-field-contents method which generates the HTML and Javascript. We'll use a hidden input field with a name equal to the field in the view that gets initialized to today's date. That will be followed by a div containing the Javascript code for the datepicker written with Parenscript (indentation suggestions welcome) which sets the hidden input field whenever a date is selected.<br><br><h3>Putting it all together...</h3><br>Now that we have all the pieces we need we can hook them together. You'll note that a src/init-session.lisp file already exists and contains a defun for init-user-session. This function sets up the widget tree and creates a new session when users visit the site. Remove the old definition and insert the following into the file:<br><pre lang="lisp"><br>(defun init-user-session (root)<br>  (setf (widget-children root)<br>	(make-reminder-form)))<br><br>(defun make-reminder-form ()<br>  (let ((reminder-form (make-instance 'form-widget :on-success 'submit-reminder-form)))<br>    (form-widget-initialize-from-view reminder-form 'reminder-form-view)<br>    reminder-form))<br></pre><br>We're just defining a separate function <code>(make-reminder-form)</code> to create our form instance here rather than defining it inline in the init-user-session code. Make-reminder-form itself creates an instance of the form-widget class which runs a function called submit-reminder-form when the form is successfully submitted (i.e. passes validation, etc). Note that we have not yet defined submit-reminder-form. Because the form is really based on a view and not a widget or class we want to persist we'll use form-widget-initialize-from-view in conjunction with the reminder-form-view we defined earlier. Note that you may need to restart the webapp after redefining the init-user-session function. Run <code>(restart-webapp 'clockwork)</code> and check the homepage. You should now have a nice form complete with jQuery Datepicker. But of course, nothing useful happens on submission. Time to fix that by going ahead and defining submit-reminder-form. Open src/init-session.lisp back up and insert the following:<br><br><pre lang="lisp"><br>(defun submit-reminder-form (widget)<br>  (let ((new-reminder (create-reminder widget)))<br>    (schedule new-reminder)<br>    (persist-object *clockwork-store* new-reminder))<br>  (reset-form-widget widget))<br><br>(defun create-reminder (form-data)<br>  (with-form-values (subject summary) form-data<br>    (let ((timestamps (get-timestamps form-data)))<br>      (make-instance 'reminder<br>		     :emails (get-emails form-data)<br>		     :title subject<br>		     :summary summary<br>		     :timestamp (first timestamps)<br>		     :at (second timestamps)))))<br></pre><br>Note that I wrote this in a way that's fairly natural to Lisp. I wrote submit-reminder-form in what almost resembles pseudocode and ensured it expressed my intent before worrying about writing a helper function to make that possible. So submit-reminder-form creates a new-reminder by passing the widget to create-reminder, schedules and saves that new-reminder in the Prevalence store and then resets the form. To make this possible, create-reminder uses with-form-values to scrape out the subject and summary from the form, then we grab the timestamps and emails using the functions we wrote for that earlier and instantiate the reminder object accordingly. At last the site is fully functional for sending email or text message reminders!<br><br><h3>Recovering from Failure</h3><br>We haven't covered what to do in case of an emergency reboot or other failure. Since everything is persisted by prevalence on submission the *clockwork-store* will still have our reminders. All we have to worry about is ensuring that all the timers get rescheduled. This is so simple it hurts. Reopen src/reminder.lisp and add the following code to the bottom of the file:<br><pre lang="lisp"><br>(defun recover-reminders ()<br>  "A function to reschedule reminders after a reboot. Based on testing,<br>any that expired during the reboot will be sent when the schedule method is called.<br>Better late than never, right?"<br>  (mapcar #'schedule (find-persistent-objects *clockwork-store* 'reminder)))<br></pre><br><br>Calling <code>(recover-reminders)</code> will schedule all the reminders in the store and whether Linux, SBCL or trivial-timers is to thank, a timer that's scheduled in the past will trigger immediately so you don't have to worry about some being lost during the reboot itself. Just add <code>#:recover-reminders</code> to the export list in the clockwork defpackage in clockwork.lisp and then call it after you load clockwork in your init.lisp file that runs when the server starts. Here's my <a href="http://github.com/redline6561/dotfiles/blob/master/server/configs/webapps/init.lisp">init.lisp</a> as an example.<br><br><h3>Next time...</h3><br>At this point we've seen a tiny bit of the Store API and the default Prevalence store and learned a little about widgets and views. We still need to cover actions and navigation/dispatchers and it wouldn't hurt to demonstrate user registration and authentication as well as use of a SQL backend. Sooner or later we'll get around to all of those things.<br><br>Right now I'm working on a postmodern backend for weblocks and may also work on styling, polish, error handling and potentially a new feature or two for clockwork. Based on what gets done, the next article will either cover the beginning of a new project or continued improvements to clockwork.


title: A Computer Science Undergraduate Education for Under $1,000
date: 2008-06-09 18:52:59.000000
format: html
content:
  In the style of my former post on a <a href="http://www.redlinernotes.com/blog/?p=913">Math Undergraduate Education</a>, this post proposes a list of texts suitable for a rigorous and well-rounded foundation in Undergraduate Computer Science. A future post will cover the philosophical details and practical implementation of such an approach.<br><br>This list skews towards theory rather than practicality (or Computer Science as opposed to Programming, if you prefer) but tries to maintain a suitable balance. Consequently, outside study of particular languages (e.g. ruby, php, html, css, javascript, erlang or haskell, python or lua) is assumed. It is advised to work on practical projects (setting up source code repositories and servers, open source software contribution, web development, etc) as applicable since these subjects are covered at best loosely during the course of study.<br><br>This list of 24 texts costs about 900 dollars when bought used off of Amazon.com. Click on the book's title to get forwarded to it's Amazon.com page. The ordering of the list loosely conforms to increasing difficulty but it is not a recommendation as to structure. I will probably delve into those details in the aforementioned future post.<br><br><a href="http://www.amazon.com/How-Design-Programs-Introduction-Programming/dp/0262062186">How To Design Programs by Matthias Felleisen, Matthew Flatt, Robert Findler and Shriram Krishnamurthi</a><br><a href="http://www.amazon.com/Structure-Interpretation-Computer-Programs-Engineering/dp/0262011530/ref=pd_bxgy_b_text_b">Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Sussman</a><br><a href="http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ref=pd_sim_b_title_6">Paradigms of Artificial Intelligence Programming by Peter Norvig</a><br><a href="http://www.amazon.com/Algorithms-Sanjoy-Dasgupta/dp/0073523402/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213032179&amp;sr=1-1">Algorithms by Sanjoy Dasgupta, Christos Papadimitriou and Umesh Vazirani</a><br><a href="http://www.amazon.com/gp/product/0262032937/ref=pd_cp_b_2?pf_rd_p=317711001&amp;pf_rd_s=center-41&amp;pf_rd_t=201&amp;pf_rd_i=0073523402&amp;pf_rd_m=ATVPDKIKX0DER&amp;pf_rd_r=0X96HKCRJFMTQ9E7GD65">Introduction to Algorithms by Thomas Cormen, Charles Leiserson, Ronald Rivest and Clifford Stein</a><br><a href="http://www.amazon.com/Computer-Networks-Andrew-S-Tanenbaum/dp/0133499456/ref=ed_oe_h">Computer Networks by Andrew Tanenbaum</a><br><a href="http://www.amazon.com/Programming-Language-Pragmatics-Second-Michael/dp/0126339511/ref=ed_oe_p">Programming Language Pragmatics by Michael Scott</a><br><a href="http://www.amazon.com/Computer-Organization-Design-Hardware-Interface/dp/0123706068/ref=pd_sim_b_title_3">Computer Organization and Design by David Patterson and John Hennessy</a><br><a href="http://www.amazon.com/Introduction-Computing-Systems-gates-beyond/dp/0072467509/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213035196&amp;sr=1-1">Introduction to Computing Systems by Yale Patt and Sanjay Patel</a><br><a href="http://www.amazon.com/Operating-System-Concepts-Windows-Update/dp/0471250600/ref=sr_1_4?ie=UTF8&amp;s=books&amp;qid=1213035537&amp;sr=1-4">Operating System Concepts by Abraham Silberschatz, Greg Gagne and Peter Galvin</a><br><a href="http://www.amazon.com/Operating-Systems-Design-Implementation-Second/dp/0136386776/ref=ed_oe_h">Operating Systems: Design and Implementation by Andrew Tanenbaum and Albert Woodhull</a><br><a href="http://www.amazon.com/Humane-Interface-Directions-Designing-Interactive/dp/0201379376">The Humane Interface by Jef Raskin</a><br><a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=pd_sim_b_title_20">Code Complete by Steve McConnell</a><br><a href="http://www.amazon.com/Real-Time-Rendering-Third-Tomas-Akenine-Moller/dp/1568814240/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1274274001&amp;sr=1-1">Real-Time Rendering by Tomas M'Oller</a><br><a href="http://www.amazon.com/Artificial-Intelligence-Modern-Approach-Prentice/dp/0137903952/ref=pd_sim_b_title_9">Artificial Intelligence by Stuart Russell and Peter Norvig</a><br><a href="http://www.amazon.com/Introduction-Theory-Computation-Second-Michael/dp/0534950973/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213036027&amp;sr=1-1">Introduction to the Theory of Computation by Michael Sipser</a><br><a href="http://www.amazon.com/Modern-Cryptography-Practice-Hewlett-Packard-Professional/dp/0130669431/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213036076&amp;sr=1-1">Modern Cryptography: Theory and Practice by Wenbo Mao</a><br><a href="http://www.amazon.com/Hackers-Delight-Henry-S-Warren/dp/0201914654">Hacker's Delight by Henry Warren</a><br><a href="http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504">Purely Functional Data Structures by Chris Okasaki</a><br><a href="http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/ref=pd_sim_b_title_28">Compilers: Principles, Techniques, and Tools by Alfred Aho, Monica Lam, Ravi Sethi and Jeffrey Ullman</a><br><a href="http://www.amazon.com/Lisp-Small-Pieces-Christian-Queinnec/dp/0521545668/ref=pd_sim_b_title_27">Lisp In Small Pieces by Christian Queinnec</a><br><a href="http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/">Programming Languages: Application and Interpretation by Sriram Krishnamurthi</a><br><a href="http://www.amazon.com/Types-Programming-Languages-Benjamin-Pierce/dp/0262162091/ref=pd_sim_b_title_4">Types and Programming Languages by Benjamin Pierce</a><br><a href="http://www.amazon.com/Concepts-Techniques-Models-Computer-Programming/dp/0262220695/ref=pd_sim_b_title_14">Concepts, Techniques, and Models of Computer Programming by Peter Van Roy and Seif Haridi</a><br><br>There are a few caveats to this list that should be noted.<br><br>1) As mentioned it does not presume to teach language-specific or platform-specific knowledge. It is slanted towards theory and books on how to write C or HTML, do Linux Kernel Development or learn the Win32 API, or work with OpenGL or TCP/IP should be purchased separately.<br><br>2) Since it does not deal heavily with specific languages, it does not make any prescriptions about what languages one should know. Generally, I believe it's good to know a language which epitomizes each of the major programming paradigms whether these paradigms are valid or not (as Krishnamurthi posits in PLAI). This means at least one OO language, one stack-based language, one functional language, and one logic/constraint language. I'd recommend Smalltalk for Object Orientation, Forth for a stack language, Erlang or Haskell for a functional language, and Prolog for a constraint language. Beyond that it would probably be reasonable to learn C as a good representation of the von Neumann architecture and "for culture" and hypothetically python, perl, or ruby to learn a web/glue/scripting language.<br><br>3) The list could certainly be shorter. It leans towards functional programming, lisp, and programming languages due to my own personal interests and some material could be omitted from those areas correspondingly. Notably, Distributed Systems and Databases are conspicuous absences from my list. This is because I have yet to find any sort of consensus about quality books on either subject. I'm not interested in Databases but I'm certainly interested in Distributed Systems. Computer Networks is about as close as this list gets.<br><br>The beauty of this list, if there is one, is that the basis is strong enough that one could jump off in any direction after it's completion. If you were interested in video games get more books on rendering and physics, if you're interested in cryptography and security get more books on that, etc, but the foundation should be strong enough for any direction you'd like to go in. This list may get updated in the future. It's far from perfect but it does seem to me like a pretty reasonable place to start.


title: A Few Good Links
date: 2007-10-17 22:06:46.000000
format: html
content:
  Here's some quality stuff I read today:<br><br><a href="http://diveintomark.org/archives/2007/10/16/oh-good-grief?retitled">-http://diveintomark.org/archives/2007/10/16/oh-good-grief?retitled</a>:<br><br>Yes, Apple is ridiculous and anti-interoperability. That is, if you are outside their ecosystem they'd really prefer to pretend you don't exist. In some cases they have to make exceptions, NTFS formatted drives, Microsoft Office/Entourage, etc. but for the most part you're screwed. Great strategy. Loving company. Count me out. The way to foster value is through openness. Just saying. Eventually, Apple will shrivel and die and all the things they invented for however many years (besides OpenDarwin\OpenStep) will be lost to everybody.<br><br><a href="http://blog.reindel.com/2007/10/17/simplicity-is-still-my-favorite-feature">-http://blog.reindel.com/2007/10/17/simplicity-is-still-my-favorite-feature:</a><br><br>Speaking of Apple though, we could talk about the thing they get right. Design. And Simplicity. This really is a feature and don't forget it. It matters and will make a huge difference to you and your users.<br><br><a href="http://focs.wordpress.com/2007/10/17/dont-learn-rails/">-http://focs.wordpress.com/2007/10/17/dont-learn-rails/:</a><br><br>Now for a change of pace. A recommendation not to learn Rails and count on successfully doing a web startup. I think the takeaway here is don't get hypnotized by the bubble hype and think for yourself.<br><br><a href="http://clojure.sourceforge.net/">-http://clojure.sourceforge.net/:</a><br><br>Time for another change of pace. To languages. So here we've got essentially a LISP dialect running on the JVM with macros, immutable/persistent data structures, an optional STM implementation, and it compiles to bytecode while staying completely dynamic? Huh. Haha. Hahahahahaha! Wow. Just wow. That's awesome. I'm gonna need to write more on this.<br><br><a href="http://blog.slickedit.com/?p=125">-http://blog.slickedit.com/?p=125:</a><br><br>Showing that pushing yourself is the best way to really learn and the path to follow. Experience and schooling can't match passion. And you can defeat the qualifiers myths, generally, if you can prove you know your stuff.<br><br><a href="http://www.whattofix.com/blog/archives/2007/10/sapirwhorf_and.php">http://www.whattofix.com/blog/archives/2007/10/sapirwhorf_and.php:</a><br><br>Two important things to note. 1: What you do and what you know effects what you can think and how you think. 2: Programmers are going to have a hard time thinking of what's disruptive with their heads buried in code all day.<br><br><a href="http://www.codinghorror.com/blog/archives/000979.html?repost">-http://www.codinghorror.com/blog/archives/000979.html?repost</a>:<br><br>And to unwind you at the end of it all? The man himself, Jeff Atwood, reminding you that you should just do it for the love and if you're not having fun, you're doing the wrong thing. Thanks, Jeff.


title: A Fun, Maybe Useful Exercise...
date: 2012-08-18 04:34:09.000000
format: html
content:
  A random walk through 30 years of history...<br><br>1960s: Lisp, Simula, Algol, our hallowed forefathers<br>1971: Unix released in Assembly, the advent of time<br>1972: Unix ported to C or, the advent of Portable/Commodity OSes<br>1973: ML interpreter in lisp appears, the advent of Typed FP?<br>1974: Deutsche+Greenblatt, the advent of LispM Dreams, fast implementations<br>1975: Sussman and Steele, the advent of Scheme<br>1976: Copyright Act of 76, the advent of Proprietary Software<br>1977: Apple II, Atari 2600, the advent of 'hobby computing'<br>1978: 8086, The first BBS, TCP split into TCP/IP, the advent of networking<br>1979: CADR LispM paper published, the advent of Single-User Workstations?<br>1980: Smalltalk-80, the advent of OOP? (76 wasn't released outside PARC)<br>1981: Symbolics LM-2 sells, the advent of the LispM<br>1982: Commodore 64; Sun-1 workstation or, the advent of the Unix Workstation<br>1983: MSFT announces Windows; Stallman founds GNU, the advent of free software<br>1984: Apple Macintosh or, the advent of consumer graphical PCs<br>1985: Symbolics registers first domain, NES, Intel sells 386, the advent of home computing? (spreadsheets, office suites, etc)<br>1986: IETF is formed, IMAP is developed, efforts to add OO to Common Lisp, more standards<br>1987: GNU Compiler Collection, the advent of free toolchains<br>1988: Soundblaster, MS-DOS 4.0, a boring year<br>1989: General Public License, the arrival of free software<br>1990: Haskell 1.0, Caml Light, the arrival of Typed FP? not quite yet...<br>1991: Linux 0.01, the advent of open source<br>1992: Alpha+OpenGenera, Linux GPL'd, Windows 3.1 is released, the advent of the Dark Ages<br>1993: Pentium I released, the advent of the "One True"(ly bad) Architecture<br>1994: Linux 1.0, XFree86, Red Hat, the advent of the distro<br>1995: IE 1, AOL 3 hits 2 million users, the advent of the net<br>1996: Linux 2.0 w/SMP, Apache leads web servers, the arrival of open source<br>1997: Wifi+HTTP 1.1, CD-RWs+Office 97, IE 4+google.com, nullsoft founded, the advent of the modern age<br>1998: US v MSFT, Netscape open sources Mozilla, the 6-year browser war purgatory<br>1999: Google Incorporates, the advent of Search


title: A Gaping Conditional (Void)
date: 2008-06-03 18:06:47.000000
format: html
content:
  If (hierarchy ==  <img src="http://www.gapingvoid.com/Moveable_Type/archives/zzzzazzdggg49.jpg" title="Corporate Heirarchy" alt="Corporate Heirarchy" />) { //then...<br><br><img src="http://www.gapingvoid.com/Moveable_Type/archives/zzzmkghilkj19.jpg" title="Same Cross, Different Nails" alt="Same Cross, Different Nails" />;}<br><br>I actually like my job a good deal. I've been meaning to post this for a while though. I just felt like you could do conditional statements with the <a href="http://www.gapingvoid.com/">gapingvoid comics</a>. It's frightening stuff and I've never been quite sure what to make of it.


title: A healthy debate, anyone?
date: 2007-10-31 04:05:54.000000
format: html
content:
  I would love to hear arguments as to what necessitates the current system of education beyond simple job training and skills certification.<br><br><strong><em>More Importantly:</em></strong> I would like to hear a reasoned argument as to what subjects cannot be learned faster outside of the educational system (note: this does not mean without structure or guidance) than in it and why this might be.<br><br>Any takers?


title: A Huge Weekend...and sleepiness
date: 2010-10-04 03:02:14.000000
format: html
content:
  It's been a big weekend. I'm pretty exhausted and not entirely ready for the week to come but I'll have to get a good night's sleep and let that suffice as preparation. I'm still working on the weblocks/lisp stuff. Should have a blog article up by this Friday with any luck and there are plans for more in the series.<br><br>I enjoyed a friend's wedding in San Antonio the past two days. One thing I noticed today is that I never posted a Milosz poem that seemed appropriate to the weekend's events. I figured I would have by now. I'm quite fond of it so here it is, from Unattainable Earth, page 9:<br><br><em>After Paradise</em><br><blockquote>Don't run any more. Quiet. How softly it rains<br>On the roofs of the city. How perfect<br>All things are. Now, for the two of you<br>Waking up in a royal bed by a garret window.<br>For a man and a woman. For one plant divided<br>Into masculine and feminine which longed for each other.<br>Yes, this is my gift to you. Above ashes<br>On a bitter, bitter earth. Above the subterranean<br>Echo of clamorings and vows. So that now at dawn<br>You must be attentive: the tilt of a head,<br>A hand with a comb, two faces in a mirror<br>Are only forever once, even if unremembered,<br>So that you watch what is, though it fades away,<br>And are grateful every moment for your being.<br>Let that little park with greenish marble busts<br>In the pearl-gray light, under a summer drizzle,<br>Remain as it was when you opened the gate.<br>And the street of tall peeling porticos<br>Which this love of yours suddenly transformed.</blockquote>


title: A Math Undergraduate Education for Under $1,000
date: 2008-06-09 15:21:48.000000
format: html
content:
  In the next few days, I'm hoping to write an article about education that serves as a follow up to <em><a href="http://www.redlinernotes.com/blog/?p=908">Towards a new HR</a> </em>and <a href="http://www.redlinernotes.com/blog/?p=871"><em>Secondhand Standards</em></a>. It will explain a bit more about the feasibility and philosophy behind this post.<br><br>All this post is meant to do is propose a list of texts that are rigorous and provide a well-rounded foundation in Undergraduate Mathematics. Be forewarned that it leans more towards Algebraists than Topologists. Lest anyone think I'm a total quack I plan to eventually work through all of these myself and have been researching which math texts are good on and off for a few months now. <a href="http://en.wikipedia.org/wiki/Self-taught">Autodidacticism</a> (to my thinking) doesn't work without good books. I also have a list for an Undergraduate Computer Science education but I'm not quite done with it.<br><br>There are 20 texts and their total cost is about 700 dollars when they're bought used off Amazon. This also covers most all of what you would learn in High School Mathematics. Click on the book's title to get forwarded to it's Amazon.com page. The ordering of the list loosely conforms to increasing difficulty but it is not a recommendation as to structure. I'll probably go into such details at a later date.<br><br><a href="http://www.amazon.com/Mathematics-Elementary-Approach-Ideas-Methods/dp/0195105192/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1213023096&amp;sr=1-1">What is Mathematics? by Richard Courant and Herbert Robbins</a><br><a href="http://www.amazon.com/How-Solve-Aspect-Mathematical-Method/dp/0691023565/ref=ed_oe_p">How to Solve It by G. Polya</a><br><a href="http://www.amazon.com/How-Prove-Structured-Daniel-Velleman/dp/0521446635/ref=ed_oe_p">How to Prove It by Daniel Velleman</a><br><a href="http://www.amazon.com/Algebra-I-M-Gelfand/dp/0817636773/ref=ed_oe_p">Algebra by I.M. Gelfand and Alexander Shen</a><br><a href="http://www.amazon.com/Functions-Graphs-Dover-Books-Mathematics/dp/0486425649/ref=pd_sim_b_title_1">Functions and Graphs by I.M. Gelfand, E.G. Glagoleva and E.E. Shnol</a><br><a href="http://www.amazon.com/Method-Coordinates-I-M-Gelfand/dp/0817635335/ref=pd_sim_b_title_2">The Method of Coordinates by I.M. Gelfand, E.G. Glagoleva and A.A. Kirilov</a><br><a href="http://www.amazon.com/Trigonometry-I-M-Gelfand/dp/0817639144/ref=pd_bxgy_b_text_b">Trigonometry by I.M. Gelfand and Mark Saul</a><br><a href="http://www.amazon.com/Calculus-Michael-Spivak/dp/0914098896/ref=pd_sim_b_title_16">Calculus by Michael Spivak</a><br><a href="http://www.amazon.com/Discrete-Mathematics-Applications-Kenneth-Rosen/dp/0072424346/ref=ed_oe_h">Discrete Mathematics and it's Applications by Kenneth Rosen</a><br><a href="http://www.amazon.com/Introduction-Probability-Dimitri-P-Bertsekas/dp/188652940X/ref=wl_it_dp?ie=UTF8&amp;coliid=I3N8GBYO6GFT6A&amp;colid=32H7I8DJX2WWE">Introduction to Probability by Dimitri Bertsekas and John Tsitsiklis</a><br><a href="http://www.amazon.com/Introduction-Linear-Algebra-Undergraduate-Mathematics/dp/0387962050/ref=ed_oe_h">Introduction to Linear Algebra by Serge Lang</a><br><a href="http://www.amazon.com/Linear-Algebra-Undergraduate-Texts-Mathematics/dp/0387964126/ref=pd_bxgy_b_text_b">Linear Algebra by Serge Lang</a><br><a href="http://www.amazon.com/Mathematical-Introduction-Logic-Second/dp/0122384520/ref=cm_cr_pr_sims_t">A Mathematical Introduction to Logic by Herbert Enderton</a><br><a href="http://www.amazon.com/Classical-Introduction-Modern-Graduate-Mathematics/dp/038797329X/ref=wl_it_dp?ie=UTF8&amp;coliid=I3KZ5SX04PIQWE&amp;colid=32H7I8DJX2WWE">A Classical Introduction to Modern Number Theory by Kenneth Ireland and Michael Rosen</a><br><a href="http://www.amazon.com/Topology-2nd-James-Munkres/dp/0131816292/ref=ed_oe_h">Topology by James Munkres</a><br><a href="http://www.amazon.com/Topics-Algebra-I-N-Herstein/dp/0471010901/ref=ed_oe_p">Topics In Algebra by I.N. Herstein</a><br><a href="http://www.amazon.com/Algebra-Michael-Artin/dp/0130047635/ref=pd_bxgy_b_text_b">Algebra by Michael Artin</a><br><a href="http://www.amazon.com/Ordinary-Differential-Equations-Morris-Tenenbaum/dp/0486649407/ref=wl_it_dp?ie=UTF8&amp;coliid=I333UMN273NMYZ&amp;colid=32H7I8DJX2WWE">Ordinary Differential Equations by Morris Tenenbaum and Henry Pollard</a><br><a href="http://www.amazon.com/Principles-Mathematical-Analysis-Third-Walter/dp/007054235X">Principles of Mathematical Analysis by Walter Rudin</a><br><a href="http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025">Concrete Mathematics by Ronald Graham, Donald Knuth and Oren Patashnik</a>


title: A Morning Repose
date: 2008-04-16 14:08:39.000000
format: html
content:
  This is a Czeslaw Milosz poem that should have found it's way here a long time ago. It's called <i>Preparation</i>.<br><br>Still one more year of preparation.<br>Tomorrow at the latest I’ll start working on a great book<br>In which my century will appear as it really was.<br>The sun will rise over the righteous and the wicked.<br>Springs and autumns will unerringly return.<br>In a wet thicket a thrush will build his nest lined with clay<br>And foxes will learn their foxy natures.<br><br>And that will be the subject, with addenda. Thus: armies<br>Running across frozen plains, shouting a curse<br>In a many-voiced chorus; the cannon of a tank<br>Growing immense at the corner of a street; the ride at dusk<br>Into a camp with watchtowers and barbed wire.<br><br>No, it won’t happen tomorrow. In five or ten years.<br>I still think too much about the mothers<br>And ask what is a man born of woman.<br>He curls himself up and protects his head<br>While he is kicked by heavy boots; on fire and running,<br>He burns with a bright flame; a bulldozer sweeps him into a clay pit.<br>Her child. Embracing a teddy bear. Conceived in ecstasy.<br><br>I haven’t learned yet to speak as I should, calmly.


title: A New Poem
date: 2011-08-11 23:36:50.000000
format: html
content:
  I haven't posted poetry in almost a year. I've been trying to write a little more lately and managed something tonight. As always, it would be better to leave it on the disk, rewrite, rewrite...but here it is.<br><br><i>Natural Forces</i><br><br>How do birds die, I wonder?<br>Does it feel unnatural to them without<br>the flutter of wings? Death is not gentle.<br>No one dies gliding down on soft currents.<br>It will not take you in your home,<br>you shall be removed from it. Hence birds,<br>only sensing weight, levity forgotten.<br><br>I think of this too much and lose my stomach.<br>I should be capturing my youth enjoying<br>music, all our souls singing out,<br>streams of gorgeous women, glittering smiles<br>and brave eyes ready to dance and forget,<br>cauliflower with parmesan, the smell of magnolias,<br>the succulent crimson juice torn<br>from beneath the skin of a plum.<br><br>But I arrive home and recognize only weariness in myself.<br>I seek a long drink and some place to rest my head,<br>tired of these huge thoughts which so clearly will not fit.<br>And I remember days my heart ran with the wind,<br>crashed with the waves, set with the sun.<br>


title: A Quick Warning, A Quick Recipe
date: 2008-11-04 02:11:58.000000
format: html
content:
  You will probably be bombarded by a deluge of catch up blog posts/linkposts from me tonight. Sorry. That said, I made something for dinner tonight which was cheap, quick and reasonably tasty (i.e. not <em>tooo</em> bad). I made servings for two and I don't have measurements on anything but what the hell.<br><br>Salad:<br>Three handfuls of Baby Arugula<br>1 Chopped Pear<br>Four or Five Palmfuls of Shredded Asiago Cheese<br>Magical Paul Newman's Olive Oil and Vinegar<br>Mix/toss with fork and serve.<br><br>Entree:<br>Some form of noodles (I used spaghetti)<br>16 or so oz of Alfredo Sauce (I used Classico Four Cheese)<br>1 Chopped Chicken Breast sauteed with a healthy coating of Lemon Pepper.<br><br>Cold water or some Smirnoff Ice variant to drink. Vanilla Ice Cream with blueberries for dessert.<br><br>Simple, cheap, yum.


title: A Quiet Saturday
date: 2012-03-17 20:44:30.000000
format: html
content:
  I need another dose of Milosz. Perhaps you do too. Here we go...<br><br><strong>Guardian Angel</strong><br><br>In my dreams my guardian angel takes the form of a woman,<br>Not always the same one. He knows that I, a fleshly creature,<br>Need a lover's touch. We don't make love,<br>But there is a closeness between us, and understanding.<br><br>I never believed in the presence of angels, but my dreams have changed,<br>And when, recently, I found an underground grotto filled with treasure,<br>And we were moving the sacks together, I asked him<br>For one more moment of the dream, which gave me peace.


title: A Quiet Weekend at my Getaway Home
date: 2007-11-03 03:14:02.000000
format: html
content:
  First off, I'd just like to thank everybody who commented on my last post. There was some lively discussion and I feel like I benefitted from all that. Thanks.<br><br>So, Mom and Dad have me house sitting. That's cool with me though because they have a cozy little place and it'll give me an excuse to cook and eat real food which is always fun. I don't get to try cooking much.<br><br>In other news, this week had more going on than I would've liked but I've persevered and all told I'm doing pretty well at School, Work, etc. Now, with that out of the way...<br><br>I've been thinking about hardware and software lately, as usual. Some of this is related to the recent PS3 purchase and some of this is just...unrelated...to anything really.<br><br>On the hardware end I've been thinking a lot about display technology. See, I have this nice idea that I'll buy a monitor that I can use for my video game console(s) and my PC and I can never need to own a TV. The problem with that is that display technology is completely ridiculous. 10 years ago it was easy. With CRTs things were pretty fixed. There were a few good manufacturers and you got one of those models in the price range (size) you could afford and that was it.<br><br>Ever since the invention of the flat screen that possibility has gone out the window. Which isn't to say it's unbelievably hard to find reasonably priced (and very lightweight/sexy) flatscreens, more that there are tradeoff costs involved that I don't remember being present 10 years ago. Specifically, you pretty much have a scale with speed (response times) on one end and picture quality (color reproduction, etc) on the other end.<br><br>Regardless of what you are told on the box, you are trading some of one for the other on some level. Now some of the nicer picture quality leaning displays have pretty good response times and some of the nicer speed leaning displays have decent color reproduction but you still have that trade off.<br><br>But then there's this one other problem...you have to remember I want to use this as a TV for my game console. So it needs some form of video-in besides VGA and DVI cables. S-Video or HDMI would be preferable though Composite(RCA) or Component would probably be fine too. This pretty much narrows my choices to two displays, the BenQ FP222WH (which has HDMI) or the Dell 2007WFP (which has S-Video and Composite).<br><br>Now, my personal leaning is to the Dell 2007WFP regardless of the fact that the video quality isn't as good as the almighty HDMI. The thing is though then you have to figure out how to get that pesky audio out into your desktop speakers...and then what? A switcher appliance? Or manually unplugging and replugging every time you switch between systems? Elegance is such a tricky thing. I just can't help but feel like better solutions should exist in this space. Maybe Apple will finally make a games console and make it easy on all of us.<br><br>That said, the PS3 I do find to be pretty amazing because for all their stupid mistakes, and there are plenty, Sony has made it a pretty good and <em>VERY</em> open system. The only remotely closed thing they've tried to do is lock out access to the RSX (the video card) via a hypervisor.<br><br>I've never quite understood the rational behind that decision but I read this week over on <a href="http://airlied.livejournal.com/">dave airlie's blog</a> that some progress is being made at getting access to it and working 3D in spite of that. He's a hacker working at Red Hat by the way for those of you who may not know. Anyway, I found a wealth of programming resources for the PS3 and look forward to playing around with those when I get a chance.<br><br>That's it for now. I'm taking the weekend off. But I'm prepping two very exciting articles for next week, one is about my generation's value judgments and the other is about shifts in the hardware market (mostly GPUs and CPUs) and upcoming architectures. Which one would you guys prefer first?<br><br>PS: Bria Rose, every time you send me a mix CD God unkills several thousand kittens and Prince makes Doves Cry. You are awesome. Now, like I've said, come home.


title: A rant about 8tracks
date: 2011-01-09 06:15:54.000000
format: html
content:
  A few months back I discovered a playlist sharing service called <a href="http://www.8tracks.com/">8tracks</a>. It allows you to upload tracks or search among already uploaded tracks to create playlists (with a minimum of 8 songs) that you can then share with your friends. There were some light but sensible requirements on playlists, they couldn't contain more than 2 songs by the same artist or from the same album. As a listener, you could skip to the next track in a playlist but you couldn't do that more than...I think twice an hour. Otherwise, that was it. You could follow people to get informed about their new mixes and there were some commenting and tagging features. It's a simple idea but it had a slick interface and it was very easy to browse around and add your own playlist. In other words, good fun.<br><br>I immediately threw up <a href="http://8tracks.com/redline6561/alchemy">two</a> similar <a href="http://8tracks.com/redline6561/music-that-needs-air">playlists</a> I'd come up with way back in 2006 or so, listened to a playlist or two of a friends and did some work. I visited 8tracks once in a while to look for new music and meant to get around to posting more playlists of my own. I finally got around to working on a playlist over the holidays but had some nasty suprises in store when I tried to upload it. The RIAA (record labels) have forced 8tracks to remove community tracks so I have to upload each song myself AND after the playlist has been listened to <em>once</em> by a given listener the track order is <strong>randomized</strong> on each future listening.<br><br>Now 8tracks is doing their best to appease these foolish companies that think this will somehow help their bottom line by keeping people from listening to or discovering new music. 8tracks is also doing their best to not let this ruin the service and, if you're a Mac user, they have provided a tool that will let you drag and drop playlists from iTunes and automatically do all the song uploading for you. Why would that matter? Because even with decent upload bandwidth you're looking at spending ten minutes looking for files on your filesystem and waiting for them to upload. But I don't use iTunes, or use a Mac...or Windows for that matter.<br><br>I was really excited about 8tracks as a service and hoping to use it more in the future. I know the site is working towards rectifying the situation to restore the old functionality and I sincerely hope they find success. There are a number of reasons that this state of affairs is really terrible for them. Here are a few:<br><ul><br>	<li>The whole <strong>point</strong> of a good mixtape involves the sequencing of tracks for coherency, flow, emotional potency and storytelling. Does the music industry really not understand that randomizing a mix at worst fundamentally destroys it or at best turns it into just a selection of songs?</li><br>	<li>I'm pretty sure it won't magically force people who otherwise *weren't* buying music (like me) into purchasing albums. Keeping people from being exposed and engaged in music is not the way to market penetration, relevance or consumer interest. Guaranteed.</li><br>	<li>One significant reason the site was such a joy was the simplicity of it. You simply searched for songs, dragged them into a list, arranged them and hit save. It was easy to use, attractive and fun. This is one of those "design really counts" moments. Forcing the user to open a file browser constantly and sit around waiting on uploads immediately limits the site to those with fast connections or patience and dedication. You've taken a potentially large market and limited it to a much smaller number of hardcore users.</li><br>	<li>Let's not even mention the fact that 8tracks has to worry about an entirely new technical problem. If they're storing each user's songs individually, how do they manage to consolidate the 8,000 uploads of Bad Romance or what have you? I'm sure you could binary diff the files or get a SHA-1 hash of them as they come in and then have duplicate files just point to an entry in a Distributed Hash Table or something. Unless they do the hashing client side (which admittedly isn't hard) they're still going to have to deal with a lot of bandwidth usage for all those identical copies being uploaded. This isn't impossible by any means, it's just unreasonable. Their is no reason this is a problem which they should have to spend their time on. It doesn't do anything to enhance the core values or draw of their site. It does *nothing* for their value proposition to me, the consumer. That said, users had the option of uploading files all along if they weren't in the "community tracks" so hopefully the developers were already doing something like this.</li><br></ul><br>As I understand it, 8tracks is a side project for a number of folks and none of them yet work on it full time. It shows a delightful level of polish if that is indeed the case. A huge part of that polish came from the User Experience which has, at least in my opinion, been severely damaged by the record labels. What's so sad is that this site did nothing but allow users to discover and share new music in a fun and interesting way and it was engaging in large part because the User Experience/Design was just damn good. Given the limitations that <strong>were already there</strong> I sincerely doubt anyone was trying to avoid buying music by skipping through playlists and listening to music there. Any human over the age of 6 is smart enough to just listen to the radio (or internet radio) or navigate to filestube.com or a torrent site by now. Keep shooting yourself in the foot, recording industry. Maybe one of these days you'll get a whole red cent out of it.


title: A short update and emacs/screen note
date: 2010-09-14 14:00:14.000000
format: html
content:
  In short, I'm busy but life has been really good lately. I've been learning new skateboarding tricks (fakie backside 180 kickflips FTW), the weather is good, music is good, the 20 hour a week job has been good and classes have been...well, pretty easy so far. Plus I've been busy socially. Having a car and not being broke may have something to do with that.<br><br>Moving on, I've been playing with <a href="http://weblocks.viridian-project.de/">weblocks</a> a lot the last few days. I've got a nice little setup that I look forward to posting about here at some point but I was getting frustrated by my screen session hanging whenever I tried to search or save in emacs. The common denominator there is C-s and it turns out that C-s and C-q stop and resume output on a terminal. This is well covered under a <a href="http://web.mit.edu/gnu/doc/html/screen_14.html">Flow Control section</a> in the screen manpages. The best solution seems to be to disable flow control and if you can't do that, tell emacs to switch some keybindings around to deal with it.<br><br>The two options I noticed for disabling flow control were running "stty -ixon" and adding it to your .bashrc or adding "defflow off" to your .screenrc. Zach Beane was kind enough to comment and note that you can also use C-a C-f in screen to toggle the control flow setting between on, off and auto (which he normally prefers). As the .screenrc entry will be specific to screen while the other will affect all shell usage, I'd prefer to stick to the .screenrc method but it didn't seem to work so I'm using the bash trick as well. That's all for now. Hope this helps somebody one day. Cheers, folks.


title: A Small Update
date: 2010-02-08 16:40:14.000000
format: html
content:
  It's been a while since last post. I'm going to try to maintain that this year. If I don't have something worth putting up, screw putting something up. Maybe there will be some longer, better written essays as a result. For now, I'm putting up poetry which I haven't done in a <a href="http://redlinernotes.com/blog/?cat=4">*long* time</a>. Wrote this one on the bus to school. Feels okay. PS: I've really fallen in love with Band of Horses <a href="http://en.wikipedia.org/wiki/Everything_All_the_Time">first album</a>.<br><br>Dopplegangers<br>I can only see another in you and<br>how she must wind up in 10 years,<br>though I barely knew her.<br><br>So you have a husband, two daughters.<br>Biscuits in a cafe on a cool Sunday.<br>A man seemingly earnest, invested.<br><br>Is this what becomes of us?<br>I remember it differently.<br>Lazy promises I made myself<br>about who we each would be.<br><br>Please, let us remain ever becoming.


title: A Summer Schedule and 10,000 Hours
date: 2010-05-17 13:00:35.000000
format: html
content:
  Today is the first day of my summer courses. I'll be taking Distributed Computing, Programming Language Concepts, Information Security Administration, Astronomy and the corresponding Astronomy lab and cramming all that into 8 weeks. Hooray. The Distributed Computing and PLC courses are online which helps ease my scheduling and transportation concerns somewhat...though by the end of summer there is a possibility I'll have a car again obviating my need to take public transit an hour and a half to get to campus. As it stands, classes are Monday through Thursday, start between 10 and Noon and end by 3pm everyday.<br><br>That ought to give me plenty of time to work on personal studies...but there's a problem with that. I haven't been good about making my personal CS studying <a href="http://redlinernotes.com/blog/?p=638">structured</a> since the great 2008 <a href="http://redlinernotes.com/blog/?p=665">experiment</a>/<a href="http://redlinernotes.com/blog/?p=750">debacle</a>. There are a lot of reasons for that experiment's failure. I lost steam studying only SICP in 2008 and not having any immediate idea how to write software that was useful to me or anybody else. Perhaps more significantly, I wound up with not only a full time job but also housewife duties in May 08 which practically ended the time and tight scheduling that had been crucial to my progress. I'm likely still going to have housewife duties but I think I can carve out enough time this summer to give things another go.<br><h3>Why Bother?</h3><br>Long before <em>Outliers</em>, many studies suggested that 10,000 hours of practice are required to achieve expertise. Peter Norvig has a post called "<a href="http://norvig.com/21-days.html">Teach Yourself Programming in Ten Years</a>" that is often linked to in discussions of learning to program and it links to a few of these studies. ...but that link is, perhaps, a bit over cited and it's impact softened as a consequence. I prefer the <a href="http://news.ycombinator.com/item?id=1061101">comment by nostrademons on that post</a>, reproduced here for posterity:<br><blockquote><span style="color: #000000;">I don't think it works quite like that.</span><br><br><span style="color: #000000;">When I got my first programming job, straight out of high school, I finished tasks in 2 days that took the other programmers there 4 months. I figured that if I was that much faster than them, I ought to be able to become a world-class programmer in just a couple years (or more accurately, I thought I could become a world-class physicist in my 4 years of college and then a world-class programmer in the 2 years afterwards).</span><br><br>So I resolved to take all the shortcuts I could. I'd read all the classic books in the field and learn from those with more experience than me. I'd take internships with experienced, accomplished programmers and pick their brains for everything I could. I'd take on volunteer coding tasks so I could get some experience building things on my own. I'd cherry-pick all the tough courses at college so I got the best part of a CS degree without having to sit through stuff I already knew.<br><br>I did all that. I've read all the classic CS books - GoF patterns, Mythical Man Month, Extreme Programming stuff, Pragmatic Programmer, Knuth, SICP, TAPL, Dragon Book, On Lisp, etc. I've worked with programmers that wrote large chunks of curses, Rogue, vi, Jini, JavaSpaces, HotSpot, Gallery, Stratus, Equalogic, DEC compilers, Python, Google, and a bunch of other projects they don't brag about. I wrote Amherst's course-evaluation system, and rewrote the software for a 100k-user site, and wrote one of the front-page hits for [haskell tutorial]. I have that CS degree, and aced the algorithms class of which you speak, and took compiler design and OS and computer graphics too.<br><br>It's been 9.5 years since that first programming job, and it still feels like I have a really long way to go before I'm actually a world-class programmer.<br><br>The part I didn't realize, in my youthful arrogance, was that I was comparing myself to the wrong people. When Norvig tells you how to become a programmer in 10 years, he's assuming you're already taking all the shortcuts you can. It still takes 10 years. Most of the people you'll meet straight out of high school, or in most colleges, or in random companies, will never become programmers in the sense that Norvig's talking about. Eventually they'll give up trying, and start grumbling on Reddit about how the software industry is mostly boring cubicle farms where they push around Enterprise JavaBeans and never use the algorithms that they learned in college.</blockquote><br><span style="color: #000000;">Let me just say, I *love* this comment. I've thought about printing it out, hanging it over my bed and reading it before I go to sleep every night just for the kick in the ass it gives me. I'm probably too relaxed to ever achieve the level of expertise nostrademons is talking about (and see the "experiment" link above if you don't believe me) but I want to keep learning. I think it is far too easy in this field to not follow both theory and practice, to either stop writing code or stop keeping up with the theory. I have a real passion and interest for programming and I plan to try to avoid that.</span><br><h3><span style="color: #000000;">How To Do It</span></h3><br>I'm not sure to what degree schoolwork, paid work or personal projects can contribute to the 10,000 hour figure. I feel like if it's not a concerted effort to get better in an area where you are weak or otherwise generate forward motion, if it's not dedicated practice rather than plodding repeated movements, it doesn't count. Many of us are adults though and if you want 8 hours of sleep 7 nights a week with social time, transit time, time to eat and time to relax then a week goes from 168 hours to 112 hours to 72 hours (after a 40 hour workweek) to less really quick.<br><br>Assuming you set aside an hour every work day (M-F) for dedicated personal studies, 52 weeks a year, it would take you about 40 years to achieve 10,000 hours. I have to assume Norvig or others would include school or a job assuming that it continued to push your limits. Otherwise, we're talking 20 hours a week (or 4 hours after work+school+etc every workday) to get there in 10 years. At any rate, I've said I'm in no rush and that I'm probably too relaxed to achieve the level of expertise discussed above. As a consequence, I'll only do 5 hours a week from 4-5pm Monday through Friday.<br><br>I'm not going to have quite as structured a study plan as I did in 2008 though I will be doing the exercises, there will be specific books I study from and hopefully I'll find time to blog about it and not just push to github. Monday-Tuesday will be <a href="http://csapp.cs.cmu.edu/">Computer Systems: A Programmer's Perspective by Bryant and O'Hallaron</a>, Wednesday-Thursday will be <a href="http://www.aw-bc.com/info/kleinberg/index.html">Algorithm Design by Kleinberg and Tardos</a> and Friday will be <a href="http://norvig.com/paip.html">Peter Norvig's Paradigms of Artificial Intelligence Programming in Common Lisp</a>. Let's see how this goes...


title: A tentative Strange Loop 2012 Schedule
date: 2012-06-17 00:30:57.000000
format: html
content:
  <a href="http://thestrangeloop.com">Strange Loop</a> has posted their <a href="https://thestrangeloop.com/schedule">schedule</a> for 2012 and my company has been kind enough to send me. Without further ado, here's my current thought on which talks I'll attend. I just can't wait for September. :)<br><br><strong>;; Sunday, September 23 (Emerging Languages Preconf)</strong><br>-- 7:30 flight? ZOMG WHAT WAS I THINKING?!?<br>09:30 Jeremy Ashkenas - Symbiotic Languages: Transpiling into Javascript<br>10:30 Ostap Cherkashin - Bandicoot: code reuse for the relational model<br>11:30 Hakan Raberg - Clever, Classless and Free?<br>12:40 Michael Fogus - The Reemergence of Datalog<br>13:20 Brian McKenna - Roy<br>14:40 David Herman - Rust<br>15:50 James Noble - Grace: an open source educational OO language<br>16:30 Jose Valim - Elixir: Modern Programming for the Erlang VM<br>17:10 David Pollak - Visi: Cultured &amp; Distributed<br><br>-- STRAAAAANNNGE LOOOOP<br><strong>;; Monday, September 24</strong><br>09:00 Michael Stonebraker - In-Memory Databases<br>10:00 Dustin Getz - Monad Examples for normal people, in Python and Clojure<br>11:00 Pieter Hintjens - Software Architecture using ZeroMQ<br>-- (or Functional Design Patterns - Stuart Sierra)<br>12:20 Neil Milstead - Augmented Reality and CV<br>13:00 Craig Kersteins - Postgres Demystified<br>14:00 Neha Narula - Executing Queries on a Sharded Database<br>-- (or Clojurescript by David Nolen)<br>15:30 Scott Vokes - Data Structures: The Code That Isn't There<br>-- (or Lessons from Erlang by Garrett Smith, Types vs Testing by Paul Snively and Amanda Laucher) GAAH<br>16:30 Rich Hickey - The Database as a Value<br>17:30 Lars Bak - Pushing the Limits of Web Browsers<br>20:00 Matthew Taylor - Humanity 2.0<br><br><strong>;; Tuesday, September 25</strong><br>09:00 Jeff Hawkins - Computing Like the Brain<br>10:00 Chris Granger - Behind the Mirror<br>11:00 Nathan Marz - Runaway complexity in Big Data...and a plan to stop it<br>12:20 Carlton Mills - Computer Architecture of the 1960s<br>13:00 Oleg Kiselyov - Guess lazily! Making a program guess and guess well<br>14:00 Cliff Moon - The Audubon Society for Partial Failures<br>15:30 Ola Bini - Expressing Abstraction, Abstracting Expression<br>-- (or Building visual, data-driven UIs with ClojureScript)<br>16:30 Bret Victor - ?<br>-- And then I'm out because of my 7:30 flight. Sorry Brendan Eich!<br><br>&nbsp;


title: A Year Ago Today
date: 2010-05-18 13:00:04.000000
format: html
content:
  <a href="http://redlinernotes.com/blog/?p=972">A year ago today</a>, my Dad, John M. Glenn Jr died of non-smokers lung cancer. Mom and I still miss him terribly but I think if he were here he'd be proud of how we've carried on and on how much we've accomplished and enjoyed in the intervening time. Wherever you are John Glenn, you are loved and remembered. We were lucky to know you.


title: Adulthood and Academics
date: 2008-05-14 03:39:37.000000
format: html
content:
  Admittedly, the title of this post is a misnomer. I'm no adult yet. I am trying my damnedest to keep this house running smoothly though. As of today I think we're up on all the utilities and I've got a Static IP here with AT&amp;T so I can move my server at some point. Work's been going well and I'm taking MARTA in to simplify my life a bit. I'm cooking (if you can call it that) and keeping the dishes done and the house clean with regularity. I'd say I've almost settled into a groove. I say almost because the people actually staying in the house won't stabilize until after May 25th. Heck, even I'm gone from the 17th to the 24th to house sit for my parents. For the most part though I'm enjoying myself.<br><br>Additionally,  I'm way behind on programming. I know. I've had a lot going on but my progress the last month or two is still just shameful. I've started HTDP to get the juices flowing again and am already through Section 03. It's definitely more straightforward than SICP if less revelatory. I'm considering going ahead and trying to blow through HTDP completely over the next month or two. Then I could circle back to SICP and hopefully be better prepared. I haven't decided on anything yet other than tidying up the presently unadorned answers to SICP 1.3 and then posting what I've got from HTDP so far. I am more than half-way through SICP 2.1 but I'm wondering if it makes more sense to knock out HTDP considering the difference in pace between the books. I'll let you know as I move forward. I'm hoping to get a post up with some pictures of my new digs in the next week or so. Feel free to drop me a line if you'd like to swing by.


title: After a long absence...
date: 2010-03-26 19:44:03.000000
format: html
content:
  It's been a long time since I've posted. I meant to take it easy on myself with blogging this year but not that easy. It has been a damn crazy year so far though. Thankfully, I've had a good time writing code and picking up an old hobby or two. I've been playing Magic the Gathering again (I know, I'm a nerd). The sun is out and my skateboarding is markedly less crappy than a few months ago. But I miss writing.<br><br>Today I'm posting a piece I started a few weeks ago. I'm still not quite pleased with it (it seems a bit over the top) but I probably never will be. I think I'll just call it "Words".<br><br>I remember having words and<br>never knowing whence they came.<br>I often stumbled into them, embarassing myself<br>before greater edifices to literature.<br>Though I had no hope of greatness, of poetry,<br>I miss that corpus into which I could pour:<br>childish thoughts and old desperation,<br>longings and abstract hopes for things<br>I even still cannot name.<br><br>Where did my words all run off to?<br>I used to fit into them so nicely.<br>A bit of my foot in this one, a leg in that one.<br>Even a nice place for my fingers to keep me<br>from grasping at everything, insatiable.<br>I wore them around proudly, pointing to each<br>in turn and saying, "Look! Here. This is who I am."<br><br>But these days I am naked and scared to venture outdoors.<br>I still run into words sometimes.<br>A few in the sink with the dirty dishes,<br>others left in a coat pocket with a crumpled bill.<br>Yet it is only by accident we are in the same place.<br>My words are on fire and that's how I've been.<br><br>PS: You should all pay some attention to the new albums "Gorilla Manor" by the Local Natives and "Tourist History" by Two Door Cinema Club. They're helpful, also good for the spring season. Cheers.<br><br>PPS: Special thanks to Don Gerz and Max Kelley for accidentally providing motivational material to keep blogging.


title: After an Absence
date: 2007-10-17 03:19:59.000000
format: html
content:
  Oh, hello. You're the only one reading today aren't you? You are. Welcome.<br><br>10 days? 10 DAYS? Where have I been? Busy I suppose. And in case you noticed the server being down, it turns out the router it sits behind decided to go crazy...which is almost comforting. /*This entry dedicated to <a href="http://weblog.raganwald.com/2007/10/until-you-understand-how-forth-is.html">Raganwald</a>, <a href="http://xkcd.com/329/">XKCD</a>, Radiohead, and Amazon.com for keeping me occupied and away from you guys for so long.*/ So, what's been going on?<br><br>First, I actually wrote something today. It's been a while since that happened and it felt good. It's not fantastic but it's a start and maybe I'll be able to polish it up some in the future. I don't know that it was inspired by the following Milosz quote, but the quote resounds particularly with me today so I'm shoving it in your face anyway.<br>"There must be a middle place between abstraction and childishness where one can speak seriously about serious things." - Czeslaw Milosz, Second Space, 4. I Apologize (pg. 49)<br><br>And here's the as yet untitled poem, please file naming suggestions below:<br>How surprised was I to learn that the dichotomy was not that of good and evil, as expected.<br>Rather, torn between shame and the frivolity of a bottomless awe.<br>Bound mesmerized to the spectacle of the world and all the marvelous constructions within it.<br>I found myself vertiginous, perhaps self-aware, but certainly unsure how to contribute to so great a vista.<br>As though asked to add new colors to the horizon, or change the sound of the ocean on a starry night.<br>That task is too monumental for me, I said. But awe is not enough, my immense wonder is insufficient.<br>Still, it is better to make public a frivolous and joyous etonnement than to admit<br>to the truth: That every man is a thunderclap receding into the distance, and silence.<br><br>Second, on Friday we had the best video game tournament in probably 10 months or so, IMHO. I actually did well in Melee with Zelda/Sheik. Semifinals well. The small atmosphere and various special appearances made the evening though. Derin and Pete were both able to come and I had lost touch with Derin so that was particularly awesome.<br><br>Third, the new Radiohead album is out and it's outstanding. What's more outstanding is that Radiohead are releasing and self-distributing the album as a download via their website and you decide what to pay them for it. That actually might not be more outstanding than the album itself which could be the best thing since OK Computer. More to come but I really like it and the early favorites are Reckoner and Jigsaw Falling Into Place followed by Nude and All I Need. I'm still pretty skeptical about the last track, Videotape. There's a <a href="http://www.youtube.com/watch?v=O0MI3gtaqfY">live acoustic version on Youtube</a> that just sounds better to my ears.<br><br>Fourth, I figured if I'm really going to take a year off to self-study and see if learn more/better/faster/stronger/etc that I'd better come up with a sort of reading list. Thank goodness for <a href="http://www.amazon.com/gp/registry/wishlist/32H7I8DJX2WWE/">Amazon.com wishlists</a>. I figured I might as well include a bunch of the stuff from my earlier book lists as well. The Computer Science stuff is thither.<br><br>That's all for now. More later.


title: Ah, programming...
date: 2012-08-28 20:14:15.000000
format: md
content:
  I just saw this over on [PLT Alain de Botton](http://twitter.com/pltalaindeb)'s twitter feed and couldn't resist collecting and reposting it here:

  The Goldilocks Principle for Programming Languages:

  1. Everyone with less theoretical knowledge than me is an idiot noob whose code is gibberish.
  2. Everyone with more theoretical knowledge than me is a pointy-headed elitist whose code is gibberish.
  3. My level of theoretical knowledge is just right and my code is clear and deep.

  Addendum: I was an idiot 5 minutes ago, and will be an elitist in 5 minutes. Where's my beautiful code gone?

  What a charming, weird little enterprise hacking is.

  PS: With any luck I've got a _very_ cool announcement coming in the next few days. Also, blogging is a lot more fun using emacs+git. I may just start doing it more.


title: Albums of the year thoughts...
date: 2010-11-14 20:21:27.000000
format: html
content:
  I've been enjoying a lot of music of late and since the year is coming to an end thought it might be fun to try and think about what my Top 5 Favorite Albums I've found this year are. Obviously then this is about personal preference rather than some supposedly objective notion of quality. Hopefully I'll write a follow up piece in the first week or so of 2011 with my final thoughts/judgments.<br><br>Last.fm has some <a href="http://www.last.fm/user/Redline6561/charts?rangetype=year&amp;subtype=albums">strong data-based opinions</a> on this but they're also wrong about some things. For example, at some point I managed to play Bibio's album or a song or two off of it but then forgot and had to leave to do something. Except my player was on repeat...and scrobbling. It kind of makes me wish that last.fm stopped paying attention to scrobbles if the same track had already been scrobbled 10 or more times. Or exposed an option to enable such behavior.<br><br>Shoo-ins include:<br><ul><br>	<li>Laura Veirs - July Flame (This record is staggeringly beautiful and makes me wonder how I had never heard of Laura Veirs before. I find myself convinced that everyone everywhere should enjoy this album. It sounds that gorgeous.)</li><br>	<li>The Morning Benders - Big Echo (It's insanely listenable. I just put it on and catch myself nodding my head regularly.)</li><br>	<li>Metric - Fantasies (I know, it's from 2009. I just discovered it. Deal. Need to move? This is your album. Infectious.)</li><br></ul><br>Other possibilities include:<br><ul><br>	<li>Jay-Z - The Blueprint 3 (The first half really wants to win, the second half not so much.)</li><br>	<li>The National - High Violet (It's uniformly gorgeous but too dark to be listened to as much as I'd like...)</li><br>	<li>The Bloody Beetroots - Romborama (I did listen to this a decent amount but I just don't love it that much.)</li><br>	<li>Local Natives - Gorilla Manor (For a random debut this was quite impressive but my listening tapered off after a bit and I haven't gotten back to it quite yet.)</li><br>	<li>Band of Horses - Infinite Arms (I enjoyed this album and still listen to it some but it's nowhere near as good as their previous two albums. And to be fair, I spent the first half of this year discovering and falling in love with those previous two albums so maybe they'll sneak into my final list.)</li><br>	<li>Tame Impala - Innerspeaker (Another delightful album that my listening has tapered off for.)</li><br>	<li>Teebs - Ardour (I've just started listening to this but it's *very* enjoyable. We'll see how long it keeps up.)</li><br>	<li>White Rabbits - It's Frightening (I listened to this a lot early this year but it trailed off and it's doubtful it will make it on my list though it is a solid album.)</li><br></ul><br>Albums I expected to be shoo-ins that really weren't include:<br><br>(NOTE:  Being on this list doesn't mean the album is not in the running. It means I expected it to be a shoo-in.)<br><ul><br>	<li>Gorillaz - Plastic Beach (After Demon Days I was prepared for an incredible album. I was thoroughly underwhelmed by Plastic Beach though think Empire Ants is one of the better songs Gorillaz have produced.)</li><br>	<li>Massive Attack - Heligoland (This was much closer to my expectations after a few listens than Plastic Beach but I'd still put on Blue Lines or Mezzanine long before Heligoland. Hopefully the Burial remixes will come to fruition. To be fair I spent half the year waking up to Paradise Circus. It's that good.)</li><br>	<li>Four Tet - There Is Love In You (This is a very good album but I don't listen to it that much. Whether that's because of how minimal it is or not I'm not sure.)</li><br>	<li>Broken Social Scene - Forgiveness Rock Record (This wasn't as good as I was hoping but was more in the realm of Heligoland level disappointment than Plastic Beach. Meaning it's good it just doesn't measure up to previous efforts. Really, BSS will probably never top You Forgot It In People for me. World Sick, Sweetest Kill and All to All are insanely good songs though.)</li><br>	<li>Two Door Cinema Club - Tourist History (I got really hooked on a number of early singles and EPs by this band after discovering them through <a href="http://twitter.com/bos31337">Bryan O'Sullivan</a>'s twitter feed. They're wildly good and infectious pop. Good high-energy music. Hell, they were the soundtrack for the first half of the year along with lots of Band of Horses. But they reworked the singles on the EPs and I think the new versions are worse. This is a really good album but not quite a shoo-in. And it really should've been. Keep your eyes on these kids.)</li><br></ul><br>I was hoping I'd find an analog to last year's discovery of Jon Hopkins' Insides or Ametsub's Nothings of the North but I haven't yet. If you know of something along those lines I should be hearing, please do let me know. Granted, since I discovered those albums late last year/early this year they could make it in my final list but we'll just have to wait and see. All for now.


title: Albums of the Year
date: 2011-01-02 19:36:10.000000
format: html
content:
  I haven't written an Albums of the Year post since the end of 2005. Generally, I don't write Albums of the Year posts either because I'm lazy and don't feel like it or am a bit sensitive about running my mouth. Obviously, such a post is stuck in the realm of subjectivity and opinion but even though I listen to *a lot* of music I never am as versed as I feel I ought to be to write one of these.<br><br>This year I've tried to be more open about my music taste though, particularly through a series of "Song of the Day" posts on Facebook, a complete log of which I've been keeping <a href="http://redlinernotes.com/docs/song-of-the-day.txt">here</a>. Each entry is a song that either came on shuffle and reminded me of why and how much I enjoy it or something that was stuck in my head. I try to limit myself to a few songs per artist so as to not flood people with whatever I've just discovered/rediscovered. It's not a perfect picture of what I've been listening to this year...but then neither is my data on <a href="http://last.fm/user/redline6561">last.fm</a>.<br><br>As in previous years, a big part of this year's listening10 will be catching up on albums from the prior year that I missed. I check in on a few end of year lists over the holidays and always find a lot of good stuff that slipped past my radar. As a consequence, I'll be listing 5 albums from last year that I may have downloaded but only really "clicked" for me or were discovered in 2010 along with 10 albums actually released in 2010. Then I may list a few albums I've already found for 2011 that slipped past me or some expected home run albums that weren't. I'll update this post to expand a bit on each entry in the next week or so. Let's begin.<br><br>Top 10 Albums of 2010:<br>1. Laura Veirs - July Flame: I can't believe I haven't seen this on other end of year lists. It's an incredible and beautiful album that deserves far more recognition than it is getting. I've listened to this at least once a month since I discovered it. It consistently thrills and delights me.<br>2. The Morning Benders - Big Echo<br>3. Teebs - Ardour<br>4. The National - High Violet<br>5. Four Tet - There Is Love In You<br>6. Shad - TSOL<br>7. Band of Horses - Infinite Arms<br>8. Broken Social Scene - Forgiveness Rock Record<br>9. Two Door Cinema Club - Tourist History<br>10. Tame Impala - Innerspeaker<br><br>Top 5 Albums of 2009 discovered in 2010:<br>1. Metric - Fantasies<br>2. Jay-Z - Blueprint 3<br>3. Jon Hopkins - Insides<br>4. Local Natives - Gorilla Manor<br>5. Bloody Beetroots - Romborama<br><br>Top 5 Albums of 2010 I'm likely to discover in 2011:<br>1. Flying Lotus - Cosmogramma<br>2. Emeralds - Does It Look Like I'm Here?<br>3. Janelle Monae - The Archandroid<br>4. Cee Lo Green - The Lady Killer<br>5. Deerhunter - Halcyon Digest<br><br>Top 5 Albums in 2010 that I expected to rule but were only good:<br>1. Gorillaz - Plastic Beach<br>2. Two Door Cinema Club - Tourist History<br>3. Massive Attack - Heligoland<br>4. Girl Talk - All Day<br>5. Band of Horses - Infinite Arms


title: Albums_to_Pirate
date: 2007-06-14 20:17:00.000000
format: html
content:
  Aesop Rock - None Shall Pass<br>Pinback - Autumn of the Seraphs<br>Radiohead - As yet untitled 7th album<br><br>Anything you guys think I'm missing?


title: All Over Everywhere
date: 2009-04-02 20:31:30.000000
format: html
content:
  This week has ended up being pretty nice, if off the wall. Teresa and I were getting locked into an apartment over at the <a href="http://aventineatashford.com/">Aventine at Ashford</a>. I'm also beginning to dig into Financial Aid applications for 2009-2010 and preparing for all the schoolwork I've got to do in April. Oh, and before I beat you with them I might as well warn you that <em>this is another linkpost</em>.<br><br>I'm planning on doing some hacking with a friend this weekend and was looking at data structures on Wikipedia, primarily <a href="http://en.wikipedia.org/wiki/Radix_tree">Radix Trees</a> and <a href="http://en.wikipedia.org/wiki/Prefix_tree">Tries</a>(Prefix Trees).<br><br>Looking at which languages had libraries already, I found that Haskell's ByteString-Trie was written by a fellow named wren ng thorton. I chased a few links and stumbled on wren's livejournal where I read<a href="http://winterkoninkje.livejournal.com/55848.html"> my favorite thing</a> since the Minimal Social Compact. I may not be smart enough to follow every thread in there but I'm smart enough to know that his thoughts resonate and I wish wren the best of success. I really enjoyed <a href="http://winterkoninkje.livejournal.com/58607.html">Objects are a Big Pile of Fail</a> too but for different reasons.<br><br>Speaking of Haskell, Conal Elliott's blog hosted a really good discussion on <a href="http://conal.net/blog/posts/notions-of-purity-in-haskell/">what portability means in terms of semantics</a>, <a href="http://www.haskell.org/pipermail/glasgow-haskell-users/2009-April/017008.html">GHC 6.10.2 was released</a> and the <a href="http://projects.haskell.org/pipermail/haskell-platform/2009-April/date.html">Haskell-Platform Mailing List</a> put out a call for volunteers to help Duncan and Dons et al help get it out the door. You can say a lot of things about that language but you can't say it doesn't have momentum. Mmmm.<br><br>That other language I'm fond of has had some fun developments recently. It's not a huge deal necessarily but there's an interesting article by Slava Pestov on <a href="http://factor-language.blogspot.com/2009/04/sup-dawg-we-heard-you-like-smalltalk-so.html">implementing a SmallTalk front end to Factor's VM</a>. That's good fun.<br><br>Yesterday was eventful. I fixed some drywall and got a book in the mail. I'm rather excited about it. Its called <a href="http://www.amazon.com/Elements-Computing-Systems-Building-Principles/dp/0262640686/ref=ed_oe_p">The Elements of Computing Systems</a> and between the book and <a href="http://www1.idc.ac.il/tecs/">companion web site</a> (see: <a href="http://www1.idc.ac.il/tecs/plan.html">study plan</a>), you'll build a computer from top to bottom out of NAND gates. A minimal Operating System implemented in a High Level Language, implemented on a VM, implemented on an Assembler, implemented on Machine Code, implemented on a specific Computer Architecture, implemented from Chips and Gates on whatever substrate proves suitable. Beneath that, of course, is Physics.<br><br>Also, it's been a long time since I was regularly checking Anandtech but when Anand keeps kicking out awesome articles about <a href="http://www.anandtech.com/storage/showdoc.aspx?i=3535&p=1">SSDs</a> and <a href="http://www.anandtech.com/video/showdoc.aspx?i=3469&p=1">the development of breakthrough graphics products</a> I've gotta keep checking in for more. Keep it up, Anand! He's also managed to turn me into an OCZ Vertex fanboy.<br><br>Last but not least, it's important that somebody tell the Music Industry (and the Content Industry as a whole, actually) to bug off but <a href="http://arstechnica.com/tech-policy/news/2009/04/harvard-p2p-lawyer-file-swapping-is-fair-use--no-really.ars">I'm not sure that Charlie Nesson would be my first choice for the job</a>. That said, it's important that somebody is trying to do it and I at least appreciate his goal of turning Copyright into a matter which people actually think about. <a href="http://arstechnica.com/tech-policy/news/2009/03/billion-dollar-charlie-vs-the-riaa.ars">We'll see what happens</a>.


title: Almost 23
date: 2009-08-05 21:50:33.000000
format: html
content:
  Tomorrow will be my 23rd birthday. Frankly, it's hard to believe that August has arrived. These summer weeks seem to be flying by. That said, I'm reasonably excited and much less stressed about my birthday than I was earlier this week. There are a host of reasons I stress over my birthday but I'll talk about that another time. Maybe tomorrow. :)<br><br>There will be a little get together at the apartment starting at 9 tomorrow evening. Nothing too particular, mostly video games but with the potential to include skateboarding, programming, music, movies and other nerdery.<br><br>Friday night Teresa and I see <a href="http://teelakallisto.livejournal.com/">Devon</a> for the first time in a while and then Saturday we're going on a week long vacation to Charleston and Williamsburg. It should be awesomesauce. Hopefully, I'll get some more Common Lisp code written.<br><br>Tonight is sort of the last hurrah of my dear friend <a href="http://twitter.com/burkehramsey">Burke</a> being in town. He's going back to Indiana to complete his studies at Purdue before Teresa and I will be back from vacation. He had been in town for a summer internship at McKesson. Tonight will likely involve: Sushi, Skateboarding, Music/Code/etc in that order. Good times.


title: Almost Done
date: 2009-07-07 00:14:40.000000
format: html
content:
  I've been increasingly disconnected from everyone lately. School has been a fairly large part of that. After 7 months of non-stop activity including moving, the death of my father and the death of my girlfriend's father, I'm ready for a little break and a little quiet. Thankfully, from July 20th the August 24th I won't have to think about due dates and my time will be my own. I hope to be a bit more social and communicative then...but I get the feeling I'll still need to turn a few folks down to build energy back up.<br><br>The 4th of July weekend was pretty good. I wasn't as productive as I could have been but I made good headway on my CS schoolwork which would've been a real pain this week otherwise. The last class for CS is Thursday and it's the final exam. I'm hoping to do the final project in Lisp (I've already done it in C++ as required) and post a screencast of my solution to the class Google Group by then. The teacher has expressed interest in seeing it. Unfortunately, that will have to be behind my other classwork in priority. The class I'm really most wanting to be over is also the last one to end, Weapons of Mass Destruction. It satisfies a requirement for a Science, Technology and Society course and was the only such Summer '09 offered course that really fit my schedule. It's hard to explain why that class has become the one I really want to avoid schoolwork-wise but at least it will be over soon.<br><br><a href="http://theberrics.com/batb2.php">Battle at the Berrics 2</a> kicked off last weekend and while my first two predictions were spot on I also think they were obvious. My whole bracket was shot this weekend when <a href="http://theberrics.com/dailyopspost.php?postid=1161">Torey Pudwill beat Jimmy Carlin</a>. I didn't have Carlin going to the finals or anything but I was hoping that Carlin would just edge out Pudwill first round so I wouldn't have to consider Pudwill going all the way. I also was wrong about Janoski v. Ramondetta. Some major reworkings are in order and I hope to post them soon.<br><br>Also this weekend, I checked out a Kaki King album from last year titled <a href="http://en.wikipedia.org/wiki/Dreaming_of_Revenge">Dreaming of Revenge</a>. She just seems to get better and better. I also stumbled on what I found to be some deeply amusing <a href="http://en.wikipedia.org/wiki/Chiptune">chiptune</a> by a fellow named Tugboat. It's essentially an <a href="http://www.youtube.com/watch?v=LtBa8ydHcYY">NES-style 8-bit megamix</a> of hip-hop songs from the last few years. Cute. It seems there's plenty more chiptune where that came from and I really don't know how I feel about that.<br><br>Finally, I've got a list of tricks I'd like to land over at <a href="http://brookrunskateboardpark.com/resources/the-park/">Brookrun</a> before Fall semester starts and various unprioritized goals regarding lisp programming on the same timeline. I probably should also wrap up the funnyWords programs in lisp and haskell with the <a href="http://redlinernotes.com/blog/?p=982&cpage=1#comment-3776">suggested</a> <a href="http://redlinernotes.com/blog/?p=937">optimizations</a> and some sort of review post. What are you guys up to?


title: Almost Perfect Arch Install Guide
date: 2007-06-10 10:28:00.000000
format: html
content:
  I'll fill in the blanks for the curious and also just to have this in a bit more well-documented format later. I still need to get the vncserver up and get pypanel working. Besides that this config is 95% there. Maybe I'll throw the other LAMP pieces on there later and run Ampache or something (Apache, MySQL, PHP). Then again maybe I should do it with cherokee, jetty, or lighttpd. We'll see. Oh, and it needs an IM client. I'm sort of holding out for empathy. Additionally, I may update all this to get it to run Compiz standalone rather than Openbox at some point. Screw DEs (Desktop Environments) though. This is purely an exercise to get away from them and see what I think of a DE-less universe.<br><br><p text="Crazy Ass Hacking" class="ljcut">Install ArchLinux<br>Edit rc.conf: change hostname to "redlinux" or whatever you prefer, change eth0="dhcp", set timezone.<br>Set password. Fix fstab how you like it. Install grub or not.<br>Reboot. Login as root. adduser redline. pacman -S sudo. add redline to /etc/sudoers. logout. login as redline.<br>sudo pacman -S xorg openbox pypanel obconf lynx xf86-video-ati libgl-dri rxvt-unicode vsftpd feh thunar firefox slim xterm flashplugin j2re openssh vnc xinetd gtk-theme-switch2 gtk-engines alsa-lib alsa-utils gmrun quodlibet totem ttf-ms-fonts ttf-dejavu ttf-bitstream-vera gnomebaker abiword codecs conky xchat<br>run xorgconfig. make sure the mouse is set to /dev/mouse. run "cd /etc/xdg/openbox", "mkdir -p ~/.config/openbox", and "sudo mv *.xml ~/.config/openbox". add "slim, sshd, alsa" to the daemons field in rc.conf. run "sudo nano /etc/hosts.allow" and add "sshd:all" to the file. run "nano ~/.xinitrc" or if necessary for write privileges "sudo nano ~/.xinitrc". comment out wmaker and add at the bottom:<br>"pypanel &amp;<br>conky &amp;<br>urxvt &amp;<br>feh --bg-scale "/path/to/yourimage.jpg"<br>exec openbox"<br>run "sudo nano ~/.conkyrc" and make it look like this:<br>"background        no<br>update_interval        1.0<br>double_buffer        yes use_xft            yes<br>xftfont            Purisa:size=07.5<br>xftalpha        1.0<br><br>own_window        no<br>own_window_transparent    yes<br>own_window_type        override<br>own_window_hints    undecorated,below,sticky,skip_taskbar,sk<br><br><wbr></wbr>ip_pager<br>#on_bottom        yes<br>#on_top            yes<br><br>minimum_size        300 50<br>draw_shades        no<br>draw_outline        no<br>draw_borders        yes<br>draw_graph_borders    no<br>stippled_borders    0<br>border_margin        3<br>border_width        0<br><br>default_color        white<br>default_shade_color    black<br>default_outline_color    black<br><br>alignment        top_right<br>gap_x            57<br>#gap_y            34<br>gap_y            10<br><br>no_buffers        yes<br><br>TEXT<br>${color black}$nodename - $sysname $kernel on $machine Uptime:${color blue} $uptime ${color black}- CPU Usage:${color red} $cpu% ${color black}RAM Usage:${color blue}$mem/$memmax - $memperc% ${color black}Down:${color blue}${downspeed eth0} k ${color black}Up:${color blue} ${upspeed eth0} k ${color black}Swap Usage:${color blue} $swap/$swapmax - $swapperc% ${color black} Disk Usage: ${color blue} ${fs_used /bin/bash}/${fs_size /bin/bash} - ${fs_free_perc /bin/bash}% Free"<br><br>then run "sudo nano ~/.pypanelrc" and add:<br><br>"<br><pre>BG_COLOR        = "0xfaebd7"    # Panel background and tint (Antique White)TASK_COLOR      = "0xffffff"    # Normal task name colorDESKTOP_COLOR   = "0xffffff"    # Desktop name colorCLOCK_COLOR     = "0xffffff"    # Clock text color<br><br>TASK_SHADOW_COLOR      = "0x000000"FOCUSED_SHADOW_COLOR   = "0x000000"SHADED_SHADOW_COLOR    = "0x000000"MINIMIZED_SHADOW_COLOR = "0x000000" DESKTOP_SHADOW_COLOR   = "0x000000"CLOCK_SHADOW_COLOR     = "0x000000"<br><br>SHADE           = 64<br><br>ABOVE           = 1             # Panel is always above other appsAPPICONS        = 1             # Show application iconsAUTOHIDE        = 0             # Autohide uses the CLOCK_DELAY timer aboveSHADOWS         = 1             # Show text shadowsSHOWLINES       = 0             # Show object separation lines"<br><br>SHOWBORDER      = 1             # Show a border around the panel"<br><br>run "sudo gpasswd -a redline audio", then "amixer set PCM 85% unmute", and "sudo alsactl store".finally, run "nano ~/.config/openbox/rc.xml" and add a keybinding for gmrun like this:"&lt;keybind key="A-F2"&gt;&lt;action name="execute"&gt;&lt;execute&gt;gmrun&lt;/execute&gt;&lt;/action&gt;&lt;/keybind&gt;"<br><br>That's about it.</pre>


title: Always On
date: 2007-06-23 11:59:00.000000
format: html
content:
  Clumsily Jim reached for his cell phone to turn off the alarm. The interest to get out of bed was nonexistent but of course everyone is interested in eating. After work he drove home. Maybe he'd go to the gym later. Later, after eating dinner with his parents, he slept. Of course, there was more to Jim and Jim's life than this but I feel I have described enough. No doubt you are picturing a man you'd think of as boring and to tell the truth Jim thought of himself in much the same way. While most of Jim's friends were interested in partying or young, boisterous things Jim preferred a sort of contemplative reverie that proved anathema to most of his would-be companions. Such seclusion tends to produce odd, misshapen little creatures and he was no exception. His mane was always a bit disheveled and no matter what he wore he always felt that the idea of it being an outfit rather than a smattering of fabrics was some elaborate ruse bound to be seen through any minute.<br><br>Gor was Jim's ancestor. It's hard to say how distant an ancestor but it is fair to say that it was distant enough that Gor had no concept of ancestry. Nor a concept of concepts for that matter. I mention Gor here only to note that beyond this there is virtually nothing I can tell you about him. If anyone should know about Gor one would think it should be Jim. But Gor's very name was unknown to him. Prehistory is odd that way. If our protagonist had known of his ancestor it is almost certain that he would want to know all about him but his notion of his ancestor was as vague as Gor's notion of notions. If there is such a thing as Posthistory perhaps it will weave these threads together better.<br><br>Jim's antisocial behavior stemmed from something that had grown in the back of his head as a child. He wasn't sure what it was but it would occasionally throb due to some change in...who knows what. Perhaps the air pressure. When it throbbed in this way it induced a discomfort in Jim so profound that he withdrew from whatever environ he was currently inhabiting and when there was nowhere to withdraw to physically, he drew inward. Over the years Jim began to associate the discomfort with things. Naturally, any creature that has a certain level of mental function where language is concerned at some point tries to find a sign for the things that matter in his experience of reality. In the case of his discomfort, Jim was gradually associating the sensation with untruth which is neither truth nor lie nor half-truth. In fact, this idea of untruth itself might be more fairly called discontinuity. Jim like most of his kind was a very simple creature though and there were many discontinuities that were suppressed in his weaker moments or, in his ineptitude, missed altogether.<br><br>There are considerable difficulties to being an "intelligent" being with a short lifespan. For one, the preoccupation with death is incredibly wasteful. It wastes time, thought, energy. I'm pretty sure it just wastes except potentially at the moment of it's acceptance but then this is speculation on my part. If I wasn't immortal my speculation might be wasteful too. Once you're immortal and time isn't a limited resource though the capacity to waste time goes out the window with it's scarcity. At any rate, Gor didn't have to worry about a lot of this. Some cosmic mercy bestowed him with an utter lack of time with which to ponder anything so great, abstracted, and ominous as death. He had more immediate concerns. Jim though had all too much time on his hands, not that he wasted great swaths of it pondering some sort of end. Jim did ponder a great deal on the order of things though which after some schooling led him to the door of history. Jim, being a clever sort, regarded history in the right way. Some presumably great creatures had introduced to the notion of history several hundred years prior the notion of progress and the two blended quite naturally in the minds of most. Jim however saw that the notion of progress was a hypothesis designed to fit the data. Things were getting more complex and that complexity was the face of progress. But of course entropy would take care of eroding the past to give it a nice exponential decline all the way back to the x-axis of prehistory. History never learned to be itself in high school but it got straight As on all of it's memetics tests.<br><br>One of the difficulties with intelligent mortality is the tendency to miss long term trends, particularly cycles. The preoccupation with the immediate is so great that local distortions and occurrences seem much more than they are. Most parents forget by the time they choose to raise children that diversity and difference is important. At a certain age in the cycle, notions of progress and community give way to the pursuit of easy living in walled gardens. Children oftentimes miss this aim of the parents and see them as callous and evil only to themselves lose interest in the great struggle years later. And so trends ebb and flow in our Always On society but the changes are too slow and enormous to be seen like tidal waves under the ocean rather than obelisks in the desert. The complexity has grown such that we can no longer distinguish right from wrong or progress from decline, obsessed though we be with such undertakings. And now that we are at last acknowledging the idea of healthiness in method we are trying to discover the healthy way to do everything. Healthy living, healthy relationships, healthy innovation and markets, healthy production and consumption (we call that sustainability). But our concept of health is trapped inside the confines of our mortality. A southern belle's ideas about the necessity of a certain etiquette differ hugely from those of a New Yorker and neither is healthier for their biases, nor does either know a healthier living. So, here we are at the beginning of the 21st century and we've begun to understand everything about how little we know.<br><br>We're beginning to understand how life works and biology functions. We're beginning to understand what makes materials act the way they do and what fundamental forces hold sway in the universe. And somewhere some scientist realized that the entire universe and all of time, history and prehistory and posthistory alike, were technically equivalent to a computation in which atoms and energy were data sets and changes over time were the results of functions fed into functions. So it was that Jim rose one morning and climbed the ladder of abstraction, stepping above the past, present, and future into a darkness in which he said, "It must be so. It has already been computed who knows how many times. Our iteration is uncounted and uncountable. We will solve for the mystery of existence once again. And if by grace our knowledge grows fast enough we might escape the tangles of our chaos before it crashes down over us. If only we could sharpen the edges of old glyphs or dull the background noise of the present. Alas, we are mired in the modern and mystified by the moth-eaten. The earth is a muddy, muddy place."


title: An Absence
date: 2008-04-02 13:47:11.000000
format: html
content:
  These words are caught food<br>from the flipping plate,<br>recorded here for your<br>careful entertainment,<br>your frolicking scrutiny.<br>But I can't help wondering<br>what I missed which fell in the sea,<br>and what shore those words<br>finally washed upon. Mostly,<br>I wish they were here.


title: An Emulator Design Pattern
date: 2012-06-22 17:49:15.000000
format: html
content:
  <div>Going into this project, I knew almost nothing about emulation. I still know very little. But I was tired of seeing emulators written in C and Java for performance or portability that wound up looking like a big switch statement sooner or later. My 6502 emulator is ANSL CL and should run anywhere that sbcl, clisp, ccl, or any other fine Common Lisp implementation will run. Granted, if a totally new processor architecture comes out, it's probably easier to cross-compile/port a 6502 in C than the CL compiler hosting cl-6502 but I digress. I wanted to write a fast, high-level emulator. The closest thing I found to an emulator design that I liked was py65 but even that was a bit less abstract than I would've hoped.</div><br><div></div><br><div>I'm still searching for ways to improve the core abstractions that I have (and no doubt there are many hardcore low-level hackers that would be disgusted by my work) but I'm enjoying the process and here are some preliminary thoughts...</div><br><div></div><br><h3>Addressing modes!</h3><br>&nbsp;<br><div><br><div>Addressing modes, addressing modes, addressing modes. This is the biggest difference between assembly language and the languages I use day to day. Hence, it's a crucial abstraction to get correct. For the first time, Common Lisp's notion of "<a href="http://www.lispworks.com/documentation/lw50/CLHS/Body/05_aa.htm">generalized places</a>" has been a real boon. There were two nuances to addressing modes that I found I really needed to account for.</div><br><div><br><ul><br>	<li>Some modes access CPU registers, others RAM. (This mostly just effects the way I need to use setf.)</li><br></ul><br><ul><br>	<li>Most opcodes use the byte /at/ an address rather than the address, but sometimes an opcode *does* need the address.</li><br></ul><br></div><br><div></div><br><div>To solve these issues and abstract some code patterns, I wrote a macro called <a href="https://github.com/redline6561/cl-6502/blob/master/src/cpu.lisp#L184">defaddress</a>. It defines a method on the CPU that returns the address computed by the mode /and/ generates a setf function that sets the register in the CPU struct or the byte in memory based on a cpu-reg keyarg to the macro. Finally, to solve the issue that we most often want the byte, opcodes are defined as either being :raw or not (the default). If they're not, instead of passing the mode symbol to be funcalled, we pass a lambda that gets the byte at the address computed by the mode. So far, concerns seem nicely separated. Time will tell if I've struck on the right design here.</div><br><div></div><br><h3>Opcodes</h3><br>&nbsp;<br><div>Opcodes in cl-6502 are really mnemonics, a set of opcodes that encode the same language primitive but for different addressing modes. As long as the foundation of addressing modes as funcallables is there to support the opcodes, you can write any opcode cleanly with a single body of code shared across all addressing modes. This has made me deeply happy as it seems to me to be _THE RIGHT THING_.</div><br></div><br><div></div><br><div>The implementation of <a href="https://github.com/redline6561/cl-6502/blob/master/src/cpu.lisp#L255">defopcode</a> is a bit hairy, particularly the <a href="http://fare.livejournal.com/146698.html">EVAL-WHEN</a> block to make sure metadata about the opcodes gets set in the *opcodes* array at load-time, but the supporting defins macro is fairly clean. The important thing is that opcode definitions wind up looking <em>marvelous</em>. For example, here's ASL and BCC:</div><br><pre>    (defopcode asl (:docs "Arithmetic Shift Left" :raw t)<br>        ((#x06 5 2 'zero-page)<br>         (#x0a 2 1 'accumulator)<br>         (#x0e 6 3 'absolute)<br>         (#x16 6 2 'zero-page-x)<br>         (#x1e 7 3 'absolute-x))<br>      (update-flags (funcall mode cpu) '(:carry))<br>      (let ((result (wrap-byte (ash (funcall mode cpu) 1))))<br>        (update-flags result)<br>        (funcall setf-form result)))<br><br>    (defopcode bcc (:docs "Branch on Carry Clear" :track-pc nil)<br>        ((#x90 2 2 'relative))<br>      (branch-if (lambda () (zerop (status-bit :carry cpu))) cpu))</pre><br><div>ASL defines 5 methods here each with a different addressing mode but sharing the same body. They update flags in the status register as expected, increment the program counter properly, and put metadata in *opcodes* to aid with dispatch and disassembly. Not bad, eh?</div><br><div></div><br><h3>Objects, Functions, Macros, Whatever!</h3><br>&nbsp;<br><div>So far, I've mostly just used objects (read: <a href="http://en.wikipedia.org/wiki/Common_Lisp_Object_System">CLOS</a>) to define some conditions, two core methods on the CPU (step and execute), and the instructions themselves. The CPU itself is defined as a Struct rather than a Class. All the instructions are methods EQL-specialized on the opcode and the opcode alone which should make dispatch <a href="http://www2.parc.com/csl/groups/sda/publications/papers/Kiczales-Andreas-PCL/for-web.pdf">pretty speedy</a>. The methods reference the *cpu* global directly and since Common Lisp has /<a href="http://john.freml.in/lisp-features">usable global variables</a>/ that look up the most recent binding in the current thread on reference, I should be able to run many instances safely in different threads on a single core. Just do something like...</div><br><pre>    (make-thread :foo (lambda ()<br>           (let ((*ram* (make-array (expt 2 16) :element-type '(unsigned-byte 8))<br>                 (*cpu* (make-cpu))))<br>             &amp;body))) ;; and we're off to the races!</pre><br><h3>What's next?</h3><br>&nbsp;<br><br>I have a bunch of potential ideas for what's next. I want to extend this work towards full NES emulation in the browser. There isn't a formal ordering of priorities or milestones yet (cause this is kind of an art project), but coming up with a sane, RESTful API to sit on top of cl-6502 is probably the next step. Hopefully I'll get some time to hack on that this weekend.<br><ul><br>	<li><strong>cl-6502</strong>: An assembler! Unit tests + bug fixing.</li><br>        <li><strong>famiclon</strong>: An NES emulator backend built on romreader and cl-6502. Video, Sound. Input?<br>	<li><strong>Qeng-Ho</strong>: Hunchentoot+ST-JSON, REST API wrapping cl-6502+famiclon, No persistence! Multiple CPUs! Internal private API for now.</li><br>	<li><strong>Pham-Nuwen</strong>: Clojure+Clojurescript@<wbr>Deepclouds.net. Persistence! Nice web interface. Graphics w/canvas! Etc...</wbr></li><br>	<li><strong>cl-z80</strong>: DO THAT SHIT! (how hard could it be? just another 8bit thing. see <a href="http://emu-docs.org/" target="_blank">emu-docs.org</a>)</li><br></ul>


title: An Escher Videogame and other nerdities
date: 2008-01-22 17:22:47.000000
format: html
content:
  <p>One of the games I'm most excited about coming out this year is called echochrome. It's coming out for Playstation 3 and the PSP. No US release date has been announced but it will land in Japan on March 19th. While I normally don't bother with writing about games, this one's special. It's one of the most novel concepts for a game I've seen in years. In short:  you rotate a scene featuring an <a href="http://en.wikipedia.org/wiki/Impossible_object" title="Impossible Object (wikipedia)">Impossible Object</a> such that an automated walking man can navigate it. It's a perspective-based puzzle game. Here look:<br><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/QfICeBtVv8U&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/QfICeBtVv8U&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object><br><br>Also, everybody is writing about CS Education lately which is awesome considering I've been thinking about it so much. Just look at all this mess:<br /><br><a href="http://enfranchisedmind.com/blog/2008/01/21/what-good-is-a-cs-degree/">The Enfranchised Mind article</a> (which may be the best of the bunch) and <a href="http://reddit.com/r/programming/info/666ji/comments/">associated reddit comments</a><br /><br><a href="http://weblog.raganwald.com/2008/01/no-disrespect.html">Raganwald' No Disrespect article</a> and <a href="http://reddit.com/r/programming/info/666lg/comments/">associated reddit comments</a><br /><br>and <a href="http://www.amazon.com/gp/blog/post/PLNKUURHQRKBJYSU">Mark Guzdial's take</a> and <a href="http://reddit.com/r/programming/info/665c2/comments/">associated reddit comments</a><a href="http://reddit.com/r/programming/info/665c2/comments/"></a></p><br><p>It may sound like a cop-out but I think Abelson and Sussman had this right all along. We're so hopelessly early in the existence of Computer Science as a discipline that we don't have a clue what it really is yet. And when you don't know what something is, it's pretty hard to know how to present it. Or steer it's course. That's all for now.</p><br><p>Finally, a paper got thrown on LTU about a <a href="http://lambda-the-ultimate.org/node/2622">dependently typed version of Scheme</a>. Very intriguing.</p>


title: An Update on Updates
date: 2009-08-13 20:49:05.000000
format: html
content:
  Dear Friends,<br><br>I appear to have entered into a coma. I'm not depressed, sad or grieving but I am a victim of constant exhaustion and perpetually low energy. I expected to only need rest the two weeks after classes wrapped up and then be able to spend 3-4 weeks "playing". Playing meaning working on things that I like, Lisp, Haskell, reading CS books, weekly blogging and the like.<br><br>This has not come to pass. Instead, I'm on vacation and very blob-like. Some of this has to do with my father's passing. What I'm sure of is that I need this time and that growing as a person, learning more about code and so on, will disappointingly have to wait.<br><br>A lot has been happening (nerd news-wise) and the tabs in my browser have filled back up. It's not up to the record number of spring semester (200+?!?) but I hope to dump out a few linkposts and clean out the cruft over the next week or so. Before classes start back up. Oy vey.<br><br>In the meantime, I'm missing you folks.<br><br>PS: My <a href="http://redlinernotes.com/blog/?p=1011">berrics bracket</a> is <a href="http://www.theberrics.com/dailyopspost.php?postid=1239">totally f-ed</a>. Thanks a lot, Chris Haslam! ;)


title: An Update
date: 2008-09-05 20:07:29.000000
format: html
content:
  Wow. So I started a post on Friday (I think, maybe Tuesday) but I must not have saved or finished it. It's not sitting in my drafts folder. Anyway, I've been a bit up and down lately but I'm really glad Fall is starting. It may be my favorite season. I dig the cooler weather. I got my wisdom teeth out yesterday morning and that went smoother than I expected. I miss chewing food but other than that have no real complaints. I haven't needed much of the hydrocodone (basically vicodin) they gave me and haven't been sleepy or incoherent much either. In fact, I've been up since 8am today and really enjoyed catching up on e-mails and little things like that. Ah, vacations.<br><br>Newsflash: Cooking is really fun. I've cooked a little ever since moving into the house and meant to move on to more advanced dishes but really stuck to basics (pasta, pizzas, burgers + dogs, sauteed chicken) for the first month or two. Recently though I found some <a href="http://www.thepioneerwoman.com/cooking/">food blogs</a> and have been trying to cook real meals. I started this monday with made from scratch blueberry muffins and filet mignon and mashed potatoes for dinner. It was wicked good. In the upcoming weeks I'm hoping to pick up fried chicken and empanadas. Tonight I may just try to figure out french onion soup. :-)<br><p style="text-align: left;">So, the next two months are huge. September there are three major Linux Conferences (X Developers Summit, Linux Plumbers Conference and the Kernel Development Summit) going on and a fourth in Atlanta. The one in Atlanta (Atlanta Linux Fest 2008) is on Saturday, September the 20th and I couldn't be more excited. It's from 11am-6pm over on Northside Pkwy and I signed up as soon as I heard about it. Plus I just got my wisdom teeth out. October there are lots of Linux Distribution releases (particularly <a href="http://www.ubuntu.com/">Ubuntu</a> and <a href="http://fedoraproject.org/">Fedora</a>) and a number of awesome games coming out for PS3 including <a href="http://en.wikipedia.org/wiki/LittleBigPlanet">LittleBigPlanet</a>, <a href="http://en.wikipedia.org/wiki/Fallout_3">Fallout 3</a> and <a href="http://en.wikipedia.org/wiki/Bioshock">Bioshock</a>. I'd really like to get the custom <a href="http://archlinux.org/">ArchLinux</a> derivative I've developed over the summer out by October, too. Even if that just means putting the ISO on megauploads and creating a page for it on my site.</p><br><p style="text-align: left;">Beyond that, I'm just trying to get back into programming. I haven't moved as quickly as I'd like but I am having fun. I'm really tempted to try to learn about <a href="http://factorcode.org/">Factor</a>, a concatenative language (like Forth) developed by Slava Pestov. It looks really cool but I can't quite afford to get sidetracked at the moment. If you're interested in what it's like trying to write a modern programming language though they've got a great blog and Slava has made some great posts on the Compiler Architecture lately. My big programming focus at the moment though is trying to do some hacking for a startup in NYC. I got contacted by one of their developers and think I can learn a lot from them though how much I'll be able to help is still up for debate. At the moment, I'm mostly writing glue code for Common Lisp libraries but I'm really enjoying it. It's also made me realize just how crucial libraries and the way they're handled by a language is. I can't believe they managed to leave module systems out of the RnRS for so long! I can also see why Common Lisp opted for multiple namespaces but I'm still not sure I like it. And I definitely just don't like the syntax for funtion calls after being used to Scheme. Ah, well. There is no perfect language.</p><br><p style="text-align: left;">Feel free to swing by the house if you want to help me learn to cook or see me looking like a chipmunk.</p>


title: Another Emacs/Slime Cheatsheet
date: 2008-10-12 05:37:04.000000
format: html
content:
  <p style="text-align: left;">I've been picking up more and more <a href="http://en.wikipedia.org/wiki/GNU_Emacs">Emacs</a> and <a href="http://en.wikipedia.org/wiki/SLIME">SLIME</a> while working my way through <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> over the last week or two. I'm really happy with it as a work environment at this point but have tons left to learn. I haven't even written any elisp code to script it. Of course, I haven't had a need yet. I'll get there and I'll update this as I learn new things. I'll just note that I'm also quite attached to ArchLinux as my distro and, increasingly, Xmonad as my window manager. It's the first time I've felt really settled on an Operating System/environment since moving to Linux. Maybe ever. I'm pretty happy about it and aside from using <a href="http://redlinernotes.com/blog/?p=723">RedLinux</a> as a way to see what I like, I've posted all the config files <a href="http://www.redlinernotes.com/docs/redlinux/">here</a>. Before the cheatsheet here's a <a href="http://unixhelp.ed.ac.uk/shell/jobz5.html">quick Linux tip on killing processes</a> I found. Try passing -1 or -9 to kill along with the PID. Try -1 first then -9 if all else fails. On to the cheatsheet.<br><br>EDIT: Yes, it's ugly. Piss off. I miss monospaced fonts already, I'm grumpy, I'm tired, it's 1:40 am and I haven't been up this late in forever. I'll fix it later. ;-P</p><br>;;Emacs Cheatsheet:<br><br>; C-7                         Undo.<br>; C-8                         Backspace.<br>; C-s                          I-search forward.<br>; C-v                          Page-down<br>; M-v                         Page-up<br>; M-&lt;                        Beginning of document/file.<br>; M-&gt;                        End of document/file.<br>; C-l                          Center screen on cursor.<br>; C-n                         Next-line/Down-arrow<br>; C-p                         Previous-line/Up-arrow<br>; M-f                         Forward a word<br>; M-b                         Backward a word<br>; M-bksp                    Delete previous word.<br>; C-k                         Send a line to the kill ring. Cut.<br>; C-y                         Place a line from the kill ring. Paste.<br>; C-x C-f                    Find (or create) a file and open it in the buffer.<br>; C-x C-s                    Save the file in the buffer.<br>; C-x b                       Switches to a buffer. Type for a specific buffer or hit enter to go with the default (last buffer).<br>; C-x o                       Moves the cursor between windows.<br>; C-x 0                       Closes the current window if other windows exist. (Kill this window.)<br>; C-x 1                       Makes the current window the only window. (Kill all other windows.)<br>; C-h t                       Start the emacs tutorial.<br>; C-h k                       Prompts for a keystroke and tells what command it invokes.<br>; C-h w                      Prompts for a command and describes the keystroke it's bound to.<br>; C-h b                       Displays a list of bindings to various commands.<br>; C-u num command   Repeats the given command num times.<br><p style="text-align: left;">;; Slime Cheatsheet:</p><br>; M-p                                  Is the up arrow for the slime repl.<br>; C-c C-c                             Sends an s-expression to slime.<br>; C-c C-k                             Compile and load the file represented by the current buffer.<br>; C-C C-L                             Load a file in slime, defaults to the file in the current buffer.<br>; C-c C-z                              Pulls up the repl in a frame and moves the cursor there.<br>; C-c RET                             Runs macroexpansion.<br>; , quit                                 Kills the running inferior-lisp and closes all the SLIME buffers.<br>; q                                       Leave the debugger and return to the repl.<br>; M-x Slime-inspect               Run the inspector.<br>; M-x Slime-profile-package   Run the profiler.<br>; M-x Slime-profile-report      Check the profiler results.<br>; M-x Slime-profile-reset        Reset the profiler.


title: Another Home Stretch
date: 2009-11-30 00:04:07.000000
format: html
content:
  I'm way behind on my blogging schedule. It's been over two weeks since the last one.<br><br>It's hard to believe 2009 is almost over. It's been an overwhelming year with a fair amount of negatives (dad's death, girlfriend's dad's death) but also a lot of positives (back in school with good grades, a nice apartment, fun programming projects, an internship for 2010 and a deepening relationship with the lovely <a href="http://redlinernotes.com/images/teresa.jpg">Teresa</a> <a href="http://redlinernotes.com/images/she_is_hardcore.jpg">Finn</a>).<br><br>This semester has been much harder on me compared to the last two for reasons I won't elaborate on here. My last two big papers are due by tomorrow and Dec 4th, respectively. Then I'll be pretty free until exams on the 14th and 16th. I'm almost there but the end seems wildly far away. In part because I'm having trouble focusing on doing what <em>I need to do today</em>. I'm preoccupied with all kinds of concerns about graduating on time, finances, finding a job, where I'll be moving and other things that just flat out <strong>don't matter right now</strong>.<br><br>Though there are personal projects I'd love to work on, I may be a vegetable most of this holiday season.<br><br>Back to paper writing...


title: Apprehensive About April
date: 2009-04-07 03:31:00.000000
format: html
content:
  I sort of forgot that schoolwork all bunches together for a nice crunch towards the end of the semester. Consequently, I'm juggling a fair bit at the moment. Not least because I'm also sorting out Financial Aid and Housing for the next year. On the bright side, I've got some fun projects in the works and I'm not <i>too</i> worried about my classes. I can say I'll be very glad to be done with the semester, even though my summer classes start May 18th. Thankfully, they all are in the afternoon Monday through Thursday.<br><br>Here are a few other things that have been going on:<br><br>President Obama gave the Queen of England an iPod loaded with 40 Showtunes. <a href="http://www.eff.org/deeplinks/2009/04/first-sale-president-obama-and-queen-england">And we don't know if that's legal</a>. Think our Intellectual Property laws are messed up yet?<br><br>Apparently there's a <a href="http://www.concretedisciples.com/skateparksdb/skateparks_display.php?id=3363">pretty nice concrete skatepark near me</a>. With any luck Burke and I will be regulars over the summer while he's here. :)<br><br><a href="http://code.google.com/p/unladen-swallow/updates/list">Unladen Swallow seems to be moving along nicely</a>. I jumped in to check on their progress. Speaking of Python, Mark Pilgrim is working on <a href="http://diveintopython3.org/table-of-contents.html">Dive Into Python 3</a> and it's online. There are also a few fun articles <a href="http://linuxgazette.net/109/pramode.html">on</a> <a href="http://www.ibm.com/developerworks/library/l-prog.html">Functional</a> <a href="http://www.ibm.com/developerworks/library/l-prog2.html">Programming</a> <a href="http://ivan.truemesh.com/archives/000392.html">in</a> <a href="http://ivan.truemesh.com/archives/000411.html">Python</a>. Oh, and <a href="http://paddy3118.blogspot.com/2009/04/abuse-of-pythons-in-built-data.html">Named Tuples kind of rock</a>. You'll need Python 2.6 to use them though.<br><br><a href="http://bugs.archlinux.org/roadmap/proj6">Arch Linux is planning an April release</a> and they've got a fair amount slated to get done. I'm rather excited about it.<br><br>Some Last.fm devs implemented a <a href="http://github.com/erikfrey/bashreduce/tree/master">MapReduce framework in Bash</a> <a href="http://blog.last.fm/2009/04/06/mapreduce-bash-script">over the weekend</a>. I think it's awesome.<br><br>John Cowan has an endearing list of <a href="http://ccil.org/~cowan/essential.html">Essentialist Explanations</a> about languages that's fun to peruse.<br><br>Last but not least, I've been on a real John Mayer streak lately but here are two other songs that I've really enjoyed. <a href="http://www.last.fm/music/The+Folk+Implosion/_/E.Z.+L.A.">E.Z. L.A. by The Folk Implosion</a> is simply awesome. That whole album is, so get that. <a href="http://www.last.fm/music/Aesop+Rock/None+Shall+Pass/No+City">No City by Aesop Rock</a> is also quite excellent. I still prefer <a href="http://en.wikipedia.org/wiki/Labor_Days">Labor Days</a> though. In other news, <a href="http://en.wikipedia.org/wiki/John_Mayer#Solo_discography">Mayer</a> and <a href="http://en.wikipedia.org/wiki/Gorillaz#Third_album">the Gorillaz</a> have albums slated to come out in the near future. You're thrilled, right?<br><br>


title: April Adventures
date: 2012-04-15 21:21:09.000000
format: html
content:
  I've been working on some of the depression issues mentioned a few posts back, making progress. Been making a concerted effort to have fun. Lots of weekend trips to Athens, socializing, concerts, that sort of thing.  Starting to create things again too! I've made a mixtape for the first time....like a proper mixtape. Did it in Audacity. Didn't try to do tempo/beat-shifting or anything fancy, just 29 minutes of cutting and fading. I still think it turned out quite well for a first effort. It leans strongly in the electronic/dance direction so if that's a big turn off for you steer clear. Anyway, onwards and upwards. And to steal from Milosz and Neruda: "Yes, this is my gift to you. Above ashes on a bitter, bitter earth. To you, to the one who unknowingly has awaited me, I belong and acknowledge and sing."<br><br>Here's the <a href="http://redlinernotes.com/docs/iomega.mp3">mix</a> and the <a href="http://redlinernotes.com/docs/iomega_tracklist.txt">tracklist</a>. (EDIT: Here's a vastly improved version of the <a href="http://redlinernotes.com/docs/iomega_final.mp3">mix</a>, the associated <a href="http://redlinernotes.com/docs/iomega_final_tracklist.txt">tracklist</a>, and where you can <a href="http://soundcloud.com/redlinernotes/iomega">listen online</a>.)


title: ArchLinux64 on the X200
date: 2008-12-10 19:39:06.000000
format: html
content:
  As I mentioned before, I have been hankering for a nice, shiny new ultraportable for almost a year and Christmas came early in 2008. I <a href="http://redlinernotes.com/blog/?p=735">settled on a Lenovo Thinkpad X200</a> (formerly IBM) for a number of reasons.<br><br>1) It has a dock. I really wanted something with a dock since I'll be commuting with this puppy everyday for a while.<br><br>2) It weighs under 4 lbs, under 5 in the laptop bag with a power cord, and gets over 6 hours of battery life under most use scenarios, sometimes as much as 9 hours.<br><br>3) It's relatively affordable compared to similar ultraportables and I'm a big Thinkpad fan. This model also avoids touchpads which I dislike and ships without an optical drive which is a plus. After all, how often do you really use your optical drive? Save on weight. Save on power. There's a DVD/RW in the dock for when you're home anyway.<br><br>I've had it since Monday and the results are in. It's a lovely, lovely little machine and any complaints I have would be directed at software rather than hardware. That's the way it should be. I had it shipped with Windows Vista Basic because there was no option to have it shipped without an OS or with Linux and having it shipped with XP meant adding the cost of XP to the purchase price. You effectively purchase Vista and XP. Ridiculous. Therefore, the first order of business was to get Vista scrubbed off and XP SP2 installed. Now, it may seem ridiculous to worry about running XP instead of Vista but I'll cut it short and just call it a personal choice rather than defend the decision. I believe there are performance and compatibility reasons to do so as well. Google around and decide for yourself.<br><br>I have an XP Pro disc but if you try to install from it the installer blue screens. There were two separate problems in my case which both needed addressing. The first being that my disc was XP SP0 and XP SP2 is required to recognize some of the hardware. The second being that even XP SP2 needs a driver added to recognize the Intel Storage Controller unless you want to fiddle with BIOS settings for the controller before and after the install. I decided the best path was to Slipstream Service Pack 2 and the requisite drivers onto my XP install disc. Slipstreaming is inserting new updates, service packs or fixes into an old installer for a given piece of software. The program I used to do it was <a href="http://www.nliteos.com/">n-lite</a>. Microsoft kindly offers a <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=049C9DBE-3B8E-4F30-8245-9E368D3CDB5A&amp;displaylang=en">free download of SP2</a> and Lenovo, of course, offers a <a href="http://www-307.ibm.com/pc/support/site.wss/migr-70477.html">download for the Intel Storage Controller Driver</a>. I should note that you still need an original XP disc for n-lite to copy down to the hard drive and modify before you burn yourself the updated (slipstreamed) version. When slipstreaming the Intel Drivers make sure to select textmode drivers instead of PNP and select the  Intel ICH9M-E/M SATA AHCI Controller as the device to support. That about does it for Windows. Afterwards it's just the normal grab all the drivers from Lenovo runaround.<br><br>Linux has proven to be a bit more interesting. I used gparted on a LiveCD to shrink Windows' NTFS partition to 30GB of the 160GB drive in the laptop. Then I fired up the latest ArchLinux64 CD to install that. Afterwards I found that neither the ethernet card nor the wireless card in the laptop was recognized by the old kernel version. My solution was to grab my trusty USB Flash Drive and another PC, head to mirrors.unixheads.org (my Arch repo mirror of choice) and follow the links down to the most recent x86_64 kernel package. I downloaded the package onto the Flash Drive and then installed it with pacman -U, hooked it to a wire and grabbed the iwlwifi-5000-ucode package and added iwlagn to the modules array in /etc/rc.conf to enable wireless. Goodbye, networking problems.<br><br>I had stated that I'd be making a dual RedLinux v.014 release in the near future on i686 and x86_64. Apparently I didn't do my homework though as I found that the flashplugin and virtualbox-ose packages are only available on i686. Granted, flashplugin for x86_64 is in testing as Adobe <a href="http://lwn.net/Articles/307466/"><em>finally released a 64-bit alpha</em></a> for Linux recently. They've been dragging their feet on 64-bit Linux support for years...so tentatively go Adobe. That said, it could be a while before that moves from testing to extra. Apparently <a href="http://bbs.archlinux.org/viewtopic.php?pid=458790">there might be legal issues</a>. While <a href="http://archlinux.org/pipermail/aur-general/2008-December/thread.html">perusing the mailing lists</a> to learn more I <a href="http://archlinux.org/pipermail/aur-general/2008-December/003122.html">stumbled upon some big transitions in the ArchLinux camp</a>. There are lots of reasons this will likely end up an exciting and good thing but I'll be keeping a close eye on it. As for virtualbox-ose, I just traded it for the virtualbox_bin aur package. In the process I lost a little <a href="http://en.wikipedia.org/wiki/Free_software">software freedom</a> but I <a href="http://en.wikipedia.org/wiki/VirtualBox#Proprietary_vs._open_source">gained some features</a>. I then asked pacman to go download and install about 70 or 80 packages (2gb worth) set up a few config files and called it a day.<br><br>The next morning however, I found a few things amiss. The most serious issue for me at the moment is that when docked on the Ultrabase, Linux failes to pump audio out through the dock's headphone port making the use of external speakers a pain. There's a <a href="https://bugs.launchpad.net/archlinux/+source/alsa-driver/+bug/285834">bug filed in Launchpad</a> but I can't find anything in alsa's bugtracker because you need an account to browse it. That could surely do with a bit more openness. At any rate, I'm not sure how soon to expect a fix on that as it's surely not affecting many people so I'm keeping my eyes peeled for workarounds. There is nothing on the ALSA mailing lists either.<br><br>After that, my main concern was getting suspend working. Yes, I can hear your groans but it's not that bad. I promise. The issue was a some sort of concurrency related nastiness in the current xf86-video-intel driver that was causing problems on resume. A <a href="http://www.thinkwiki.org/wiki/Install_Ubuntu_8.10_%28Intrepid_Ibex%29_on_an_T400#Suspend.2FHibernate">nice workaround script</a> was posted here to get it to work properly by disabling one of the cores during the suspend operation. A new XServer with improved Xrandr (display hotplugging) and xf86-video-intel driver will release with Kernel 2.6.28 in January which will also conveniently fix the issue of dealing with the external monitor connected to the Ultrabase. It presently only detects it when booted up on the base and the resolution options are less than perfect. The new drivers will indeed be nice. I also got to learn a bit about <a href="http://wiki.archlinux.org/index.php/Pm-utils">pm-utils</a> and <a href="http://wiki.archlinux.org/index.php/Cpufrequtils">cpufrequtils</a> throughout all this. Both of which you should install to get the most out of your battery life. Oh, and powertop. <a href="http://www.lesswatts.org/projects/powertop/">Glorious powertop</a>. Hell, check out all of lesswatts.org while you're at it.<br><br>That's most of what I've been up to for tuning at this point. Next is probably just a little <a href="http://wiki.archlinux.org/index.php/Extra_Keyboard_Keys_in_Xorg">xmodmap</a> and /etc/sudoers magic to get a few of these functions keys doing what I want. Then I'll probably just wait on alsa, kernel and xorg/xf86-video-intel updates. I'll also probably end up using lxrandr to play with the Xrandr settings when the new release happens. The other fun thing I learned in all of this is just how well loved Thinkpads are and a few signs of their support among linux users through things like the <a href="http://ubuntuforums.org/showthread.php?t=907936&amp;highlight=x200">Ubuntu X200 Owner's Thread</a> and the <a href="http://www.nabble.com/Linux-Thinkpad-f13633.html">linux-thinkpad mailing list</a> with their <a href="http://www.nabble.com/X200-Battery-Life-td20188937.html">discussion on maximizing battery life</a>.<br><br>For now, I'm very happy with the new machine and probably will continue to tweak settings for a while. Turning knobs is fun after all. I also got a 1TB external drive for backup with the laptop and a Scorpius M10 mechanical keyswitch keyboard for use with the dock. The keyboard is lovely except for some spacebar sticking so I'm filling out a form to get that replaced. Ah, the joys of computing.


title: Away for a Bit
date: 2007-07-14 05:39:00.000000
format: html
content:
  Ladies and Gentlemen,<br><br>I'm going away to the beach from this Saturday to the next (7/14-7/21). There will be no posts during that time period...which is sort of tragic because I could be covering <a href="http://www.guadec.org">GUADEC</a>. But a vacation is more important. I need to remember how important it is to take time off and slow down. So, this should be good. I'll still welcome phone calls as it will be a little quiet where I am. Who knows, I may call you. I'll be down at <a href="http://www.rivardnet.com/RNS/search/propertydetail.aspx?ID=91">Sweaty Palms</a> in Grayton Beach, FL for those curious. It should be fun. Look at how easy I've made it to stalk me. Alright. Leave some love. You can begin missing Livejournal entries about music, poetry, and computer junk approximately now.


title: Back For More
date: 2009-08-20 21:46:18.000000
format: html
content:
  Today has been better than the last few days. I may be coming out of my emotional coma which would be convenient since school starts next Monday. I got some lisp written and I'm sketching out some fun stuff to work on and talk about here soon.<br><br>A lot of my struggle lately has been feeling overwhelmed by how much I want to know and my failure to find the time and energy to absorb some of it.<br><br>I feel like I'm learning to learn at 23. I know a few things about that.<br>1. It's not going to be fun.<br>2. It's about being disciplined, setting measured goals and meeting them.<br><br>In the past, I'd gotten bogged down on personal programming\CS learning goals and tried to restart elsewhere or change the goals to regain momentum. No more resets. Persistence is the name of the game.<br><br>Though I'm smart, I spent most of the years between 12 and 22 not committing myself in academics and pursuits of the mind. In some regards, I feel like I'm playing catchup. That's what <em>some</em> of this "I feel like I'm learning about learning" stuff is about. Picking the discipline back up. Because the fact is, the only way to really master Computer Science on the level I want to is to put in <a href="http://norvig.com/21-days.html">at least 10,000</a> <a href="http://www2.umassd.edu/swpi/DesignInCS/expertise.html">quality hours</a>.<br><br>I'm not a genius and I don't want to be. I want a fair amount of work/play balance. Of course, CS is in many ways play for me. That said, I want to be <em>more like</em> hackers like Slava Pestov, Luke Gorrie, Per Vogsnen, Edward Kmett and Wren Thornton. I respect each of them for different reasons but they all understand the field on a pretty broad level. I'll keep working in that direction because I want that breadth. It'll take a while...but it took them a while. Hell, aside from Slava I think all those folks are over 30. It's worth the investment though. Thinking about the issues is just too fun.<br><br>Note to self: Just remember, you don't know how brilliant you can be. You won't ever be von Neumann...but don't get convinced that you're stupid. Or a failure.<br><br>More soon...


title: Back from Montana
date: 2008-01-10 04:27:49.000000
format: html
content:
  I'm home and I had a great time. I'll give a more complete update later after my first day of full time work and a good night's sleep. I'm also sort of working on a top 40 most listened to songs of 2007 post. First here's something I wrote while I was in Montana. I'll post the second in my next post.<br><br>"Unsustainable Earth"<br>I was never brilliant, only distracted.<br>Ever present in an ill-defined elsewhere.<br>But I was born into a decomposing country.<br>And if this Eden is decaying into wasteland<br>I must ask myself: What was the time of death?<br>And is it too late for the surgeon's blade or the<br>pastor's cross to return life to a forsaken land?<br><br>I have no certainties about our salvation,<br>or our chances of salvation. Perhaps the end<br>will come like a burst of fire from the furnace.<br>Perhaps we will be swallowed as though in a swell<br>of the ocean. Perhaps there will be opportunity for<br>escape, to foreign lands or a more profitable future.<br>But avoiding the dystopian concerns too few. And the earnest<br>simplicity of obliviousness will lead untold numbers to oblivion.<br><br>There are good stories to be told here though<br>this may not have been an era of the brave and the<br>decent. I do not contend that we should not be reproached.<br>Still, an ending befitting our gluttony is to be resisted.


title: BATB 3
date: 2010-05-21 13:57:52.000000
format: html
content:
  Battle at the Berrics 3 is coming up. For those of you who don't know what that is, it's a <a href="http://en.wikipedia.org/wiki/Game_of_%22S.K.A.T.E.%22">game of Skate</a> between some of the worlds best skateboarders. For those of you who don't know what Skate is, it's like Horse in Basketball except you spell Skate and battle over skateboarding tricks rather than shots from various parts of the court.<br><br>As I said, this is BATB 3. BATB <a href="http://theberrics.com/batb.php">1</a> and <a href="http://theberrics.com/batb2.php">2</a> were both awesome and had some of the most ridiculous and consistent skating I've ever seen, particularly in the finals and semis. Consequentially, trying to predict who is going to win is totally ridiculous. Barring the possibility of injuries or other nonsense, the finals are just as likely to be decided by somebody having a really off day as anything else. I mean, take Mike Mo vs Torey Pudwill for example. Is *anyone* excited to call that? All the same, here is my preliminary bracket. I'll try to figure out the semi-finals and finals later. Also, if you feel like debating these picks feel free to let me know where I'm way off. Even though I'm not. I've seen the future people. This is it:<br><br>BATB3<br><br>Quad 1<br>Chris Cole vs. Joey Brezinski - Chris Cole<br>Danny Garcia vs. Johnny Layton - Danny Garcia<br>R2 - Chris Cole<br>Gilbert Crockett vs. Shane O'Neill - Shane O'Neill<br>Greg Lutzka vs. Eric Koston - Greg Lutzka<br>R2 - Shane O'Neill<br><br>Quad 2<br>Cesar Fernandez vs. Benny Fairfax - Benny Fairfax<br>Josiah Gatlyn vs. PJ Ladd - Josiah Gatlyn<br>R2 - Josiah Gatlyn<br>Cory Kennedy vs. Jimmy Cao - Cory Kennedy<br>Erik Ellington vs. Ryan Gallant - Ryan Gallant<br>R2 - Cory Kennedy<br><br>Quad 3<br>Peter Ramondetta vs. Mike Mo Capaldi - Mike Mo<br>Mark Appleyard vs. Brandon Biebel - Mark Appleyard<br>R2 - Mike Mo<br>Rick Howard vs. Marc Johnson - Marc Johnson<br>Torey Pudwill vs. Marty Murawski - Torey Pudwill<br>R2 - Torey Pudwill<br><br>Quad 4<br>Dennis Busenitz vs. Chico Brenes - Dennis Busenitz<br>Paul Rodriguez vs. Sean Malto - Paul Rodriguez<br>R2 - Paul Rodriguez<br>David Gonzales vs. Billy Marks - Billy Marks<br>Heath Kirchart vs. Steve Berra - Heath Kirchart<br>R2 - Billy Marks<br><br>Q1 - Chris Cole<br>Q2 - Cory Kennedy<br>Q3 - Torey Pudwill<br>Q4 - Billy Marks<br><br>Semi-Finals 1+2 - Cory Kennedy<br>Semi-Finals 3+4 - Billy Marks<br><br>Finals - Cory Kennedy<br>Runner-Up - Torey Pudwill


title: Battle at the Berrics 2 Predictions
date: 2009-06-25 14:14:28.000000
format: html
content:
  I said I'd do it. Here they are:<br><br>			  -- <br>			  ROUND ONE WINNERS <br>CHRIS COLE <br>DENNIS BUSENITZ <br>HEATH KIRCHART <br>RICK HOWARD <br>CHRIS HASLAM <br>JIMMY CARLIN <br>JOSIAH GATLYN <br>GUY MARIANO <br>CORY KENNEDY <br>LUCAS PUIG <br>STEFAN JANOSKI <br>MARK APPLEYARD <br>PAUL RODRIGUEZ <br>KERRY GETZ <br>SILAS BAXTER NEAL <br>JERRY HSU <br>			  -- <br>			  ROUND TWO WINNERS <br>CHRIS COLE <br>RICK HOWARD <br>CHRIS HASLAM <br>GUY MARIANO <br>LUCAS PUIG <br>STEFAN JANOSKI <br>PAUL RODRIGUEZ <br>SILAS BAXTER NEAL <br>			  -- <br>			  ROUND THREE WINNERS <br>CHRIS COLE <br>CHRIS HASLAM <br>LUCAS PUIG <br>PAUL RODRIGUEZ <br>			  -- <br>			  SEMI FINALS WINNERS <br>CHRIS HASLAM <br>PAUL RODRIGUEZ <br>			  -- <br>			  THIRD PLACE RUNNER UP <br>CHRIS COLE <br>			  -- <br>			  WINNER <br>CHRIS HASLAM <br> 


title: Before Bed...
date: 2010-07-01 06:06:01.000000
format: html
content:
  At over 5 weeks, this may be a new record for time without posting to this blog. That's okay though. I've had more important things to do lately.<br>For now, I just wanted to post a song I've enjoyed today. It's by the band Hammock and titled Shipwrecked. Lyrics and song follow:<br><br><blockquote>On a cold night<br>We lay down<br>Under starlight<br>We breakdown<br>Spend our whole life<br>Seeking shelter<br>Til the last time,<br>Gone forever...	</blockquote><br><br><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/BACunS0riec&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/BACunS0riec&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>


title: Beginning
date: 2009-06-23 03:45:24.000000
format: html
content:
  This is just going to be a quick post before I get back to work. Things rather suck lately. And when I say things, I mean summer school. I'm just not motivated about my work. I don't really feel like I'm learning and growing as much as I could be. I'm interested in doing what energizes me and spending time with the people I love, doing what I love. Unfortunately, I've got to make it to August before relaxation can become a priority. On the other hand, I have phenomenal support from most everyone in my life, I'm happy with most aspects of how my life is going and mom and I seem to be handling Dad's death pretty well.<br><br>So what have I been enjoying lately? Pixar's Up means a great deal to me and I've seen it 3 times now, <a href="http://nymag.com/movies/profiles/54318/">Armond White</a> <a href="http://the-following-preview.blogspot.com/2009/05/armond-white-and-pixars-up.html">be damned</a>. I've been skateboarding a lot more and I finally got around to checking out <a href="http://www.concretedisciples.com/skateparksdb/skateparks_display.php?id=3363">Brookrun Skatepark</a> with my good friend Burke, <a href="http://twitter.com/BurkeHRamsey/status/2266074724">see</a>? It's just 10 minutes away. Yes!<br><br>On the technical side, I've been playing more and more with lisp (I love it so) even though I can't stop reading the haskell reddit. Hell, <a href="http://www.haskell.org/pipermail/haskell/2009-June/021442.html">Haskell is even about to wind up on the iPhone</a>. I also have pulled down a bunch of <a href="http://xach.livejournal.com/221433.html">Erik Naggum posts</a> which I'd like to read and hopefully learn something from. Last but not least, I'm looking forward to getting a phone in the near future to replace my aging Nokia and I'm leaning towards an Android handset (the Samsung i7500/Galaxy) or a rumored Nokia running Maemo 5. Either way, it'll be August before I know for sure at which point I'll try to defend the reasoning behind my purchase.<br><br>There's plenty of other stuff I'd love to post but that's it for now. Hopefully, I'll have a chance to post more and dump some links out of the browser closer to the weekend. Back to schoolwork. :(<br><br><div align="center"><style type="text/css"> @import url(http://skreemr.com/styles/embed.css);</style><table cellpadding="0" cellspacing="0"><TR> <TD WIDTH="16" CLASS="sk-topleft"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topleft.gif"/></TD> <TD CLASS="sk-toprow">Chemical Brothers - Where do I begin</TD> <TD WIDTH="16" CLASS="sk-topright"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topright.gif"/></TD></tr><TR VALIGN="MIDDLE"> <TD WIDTH="16" CLASS="sk-lightleft3"/> <TD CLASS="sk-lightback3"> <embed class="SkreemRPlayer" wmode="transparent" style="height:24px;width:290px;" src="http://skreemr.com/audio/player.swf" quality="high" bgcolor="#ffffff" width="290" height="24" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="playerID=1&bg=0xCDDFF3&leftbg=0x357DCE&lefticon=0xF2F2F2&rightbg=0xF06A51&rightbghover=0xAF2910&righticon=0xF2F2F2&righticonhover=0xFFFFFF&text=0x357DCE&slider=0x357DCE&track=0xFFFFFF&border=0xFFFFFF&loader=0xAF2910&soundFile=http://overlandtrucks.com/system-f/where_do_i_begin.mp3"></embed> <img style="padding:0;border:0;vertical-align:bottom" src="http://skreemr.com/images/skreemr_logo_small_name_only.png"/> </td> <TD WIDTH="16" CLASS="sk-lightright3"/></TR><TR><TD WIDTH="16"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomleft.gif"></TD><TD CLASS="sk-bottomrow">Found at <a href="http://skreemr.com/link.jsp?id=66524A57525F65&source=embed">skreemr.com</a></TD><TD WIDTH="16"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomright.gif"></TD></TR></table></div>


title: Belated Blogging
date: 2008-11-03 22:50:51.000000
format: html
content:
  A lot has been happening lately and I guess I've been too wrapped up in it to write anything down here. I've been readmitted to <a href="http://www.spsu.org/">SPSU</a> for the Spring 09 semester, have filed the <a href="https://fafsa.ed.gov/">FAFSA</a> and am currently looking into financial aid options. I'll have more on that soon but I am planning on going. Better to be there and learning than out of school doing Help Desk work and not learning enough about programming. That said, I'm totally out of funds about now and a part-time Help Desk position would be wonderful for the foreseeable future (i.e. post starting at SPSU). Or a contract position until school starts.<br><br>Due to the aforementioned brokeness I won't be grabbing <a href="http://en.wikipedia.org/wiki/LittleBigPlanet">LittleBigPlanet</a> which a few people have asked me about. I am impressed with some of the things people have churned out with it though including a <a href="http://arstechnica.com/journals/thumbs.ars/2008/10/07/littlebigplanet-used-to-create-1600-part-calculator-video">working 1,600 part calculator</a> and a <a href="http://www.ripten.com/2008/11/03/littlebigplanet-gradius-level-video/">recreation of Gradius</a>. Cute.<br><br>Will also got back in touch with me which I was quite happy about and I <a href="http://redlinernotes.com/code/rev/bb8dc37124e9">made some changes at his suggestion</a> to my little hangman program. It's down to 115 lines of code and is pretty polished at this point. The only way to go forward would be to add new features but I'll put that aside until I've finished <a href="http://www.gigamonkeys.com/book/">PCL</a>. I also may have a quick weekend project to write a BASH script for RedLinux in the near future thanks to <a href="http://en.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html">some of the</a> <a href="http://tldp.org/guides.html">great resources at the Linux Documentation Project</a>. I've got some ideas for a future RedLinux release but I'll likely put that off until December or so.<br><br>What else has been going on lately? Well, OOPSLA and Lisp50 happened <em>fairly recently</em> and I couldn't make it but I've enjoyed reading about it thanks to <a href="http://lispy.wordpress.com/2008/10/">articles on Lispy's blog</a> and <a href="http://lukego.livejournal.com/17711.html">some words from Luke Gorrie</a>. I'm still pretty jealous of Luke Gorrie as he always seems to be playing with <a href="http://lukego.livejournal.com/18214.html">neat ideas</a> <a href="http://lukego.livejournal.com/18161.html">and technologies</a> and generally hangs out with the "<a href="http://lukego.livejournal.com/17442.html">cool kids</a>" a lot. He was at OOPSLA and Lisp50 and then <a href="http://lukego.livejournal.com/18540.html">managed to be hanging out with Alan Kay</a>, Ian Piumarta and co at <a href="http://www.vpri.org/">VPRI</a> when <a href="http://factor-language.blogspot.com/2008/11/west-coast-trip-100-success.html">Slava Pestov came through</a> to talk about <a href="http://factorcode.org/">Factor</a>. What a jerk! (jk lukego) There's a <a href="http://www.youtube.com/watch%3fv%3df_0QlhYlS8g%26amp%3bfmt%3d6">great video of Slava's Factor talk</a> which he delivered at Google as well. It would be neat if some of the Lisp50 talks made it online but somehow I don't expect to see that happen. I've also been keeping an eye on the <a href="http://blog.gmane.org/gmane.comp.file-systems.btrfs">btrfs</a> and <a href="http://lists.freedesktop.org/archives/xorg/2008-November/">xorg</a> mailing lists but that's not too relevant really. BTRFS for 2.6.29!<br><br>I've been doing a little bit of reading on <a href="http://en.wikipedia.org/en/Lisp_Machine">Lisp Machines</a> of late and hope to run one in a VM when/if I get <a href="http://redlinernotes.com/blog/?p=735">an X200</a>. I'd also love to run a copy of <a href="http://www.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES-0.01">Linux 0.01</a> <a href="http://kerneltrap.org/Linux/Dusting_Off_the_0.01_Kernel">in QEMU</a> or VirtualBox and maybe <a href="http://www.reactos.org/">ReactOS</a> as well. Nothing like a small, well-understood system right? A nice external keyboard wouldn't hurt either as mine has gotten a bit beaten down over the years and is a PS/2 keyboard so it won't play with the X200. <a href="http://www.reddit.com/r/programming/comments/7apqt/ask_progreddit_can_you_recommend_me_a_good/">Reddit has some suggestions</a> and I'm rather leaning towards a <a href="http://daskeyboard.com/">Das Keyboard</a> but one of the mechanical-switching Cherry units would be fine too. Paul Stamatiou has some <a href="http://paulstamatiou.com/2008/09/02/back-to-college-shopping-guide-off-campus-edition">interesting suggestions about back to school stuff</a> but I'll mostly stick to his thoughts on study habits and motivation. I think I've got the rest sorted out. His thoughts on <a href="http://paulstamatiou.com/2008/08/21/how-to-live-the-cloud-life">living the cloud life</a> and <a href="http://paulstamatiou.com/2008/02/12/how-to-download-with-newsgroups">using newsgroups</a> should be useful though.<br><br>That's all for now. I'm off to skateboard and shower while there's still some good sunshine out before hunkering down with more lisp. Did I mention a <a href="http://www.sbcl.org/news.html">new version of SBCL</a> came out? Don't forget to vote tomorrow. Keep an eye on things with the help of <a href="http://www.gigamonkeys.com/election/election.xul">Peter Seibel </a>and <a href="http://www.xkcd.org/intrade/">Randall Munroe</a>! Fivethirtyeight.com won't hurt either. ;-)


title: Beloved Games
date: 2013-10-19 14:49:00.000000
format: md
content:
  I'm still on a break from recreational programming. I've been gaming a bit to remember why I was writing an Emulator in the first place and got the idea for this article. Here are 16 games that left a major impression on me (and 4 honorary mentions) presented in something close to Autobiographical order:

  Elementary School:

  * [Mega Man 2](http://en.wikipedia.org/wiki/Mega_Man_2)
  * [Mechwarrior 2](http://en.wikipedia.org/wiki/MechWarrior_2:_31st_Century_Combat)

  Middle School:

  * [Command & Conquer: Red Alert](http://en.wikipedia.org/wiki/Command_&_Conquer:_Red_Alert)
    -- also, Starcraft
  * [Pokemon Blue](http://en.wikipedia.org/wiki/Pok%C3%A9mon_Red_and_Blue)
  * [The Legend of Zelda: Ocarina of Time](http://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Ocarina_of_Time)
  * [Final Fantasy VIII](http://en.wikipedia.org/wiki/Final_Fantasy_VIII)

  High School:

  * [Metal Gear Solid](http://en.wikipedia.org/wiki/Metal_Gear_Solid)
  * [Tony Hawk's Pro Skater 2](http://en.wikipedia.org/wiki/Tony_Hawk%27s_Pro_Skater_2)
    -- also, Thrasher: Skate & Destroy
  * [Gran Turismo 2](http://en.wikipedia.org/wiki/Gran_Turismo_2)
  * [Freelancer](http://en.wikipedia.org/wiki/Freelancer_%28video_game%29)
    -- also, Descent: Freespace

  College:

  * [Sid Meier's Alpha Centauri](http://en.wikipedia.org/wiki/Sid_Meier%27s_Alpha_Centauri)
  * [Super Smash Bros](http://en.wikipedia.org/wiki/Super_Smash_Bros.)
    -- also, Super Smash Bros Brawl
  * [Ratchet & Clank](http://en.wikipedia.org/wiki/Ratchet_%26_Clank_%28video_game%29)

  Present:

  * [Super Stardust HD](http://en.wikipedia.org/wiki/Super_Stardust_HD)
  * [Journey](http://en.wikipedia.org/wiki/Journey_%282012_video_game%29)
  * [Fez](http://en.wikipedia.org/wiki/Fez_%28video_game%29)


  Certainly there have been other titles/series I've enjoyed putting hours into: Naughty Dog's Uncharted, Bethesda's Skyrim, Borderlands, and so on. But the above are the games which uniquely effected me. Each holds special nostalgic value, many represent discovery of a genre or fictional setting that I've come to love. Hell, the Tony Hawk's Pro Skater series got me [skateboarding in real life](http://redlinernotes.com/images/skatepark/IMG_6268.JPG) and I'm not sure I would have owned an [Acura NSX](http://redlinernotes.com/images/nsx_mountains.jpg) if not for Gran Turismo.

  It would be fun to do a similar list for Movies (would I have become a programmer without Hackers?) or Music. I'll call this good for now. :)


title: Better than TV
date: 2009-06-01 17:06:02.000000
format: html
content:
  Here are a few video lectures I've enjoyed that simply never could have made it to Television. Too much of a niche audience I suppose. They'll go from most comprehensible to non-nerds/programmers to incomprehensible to non-nerds/programmers. Soon I'll post up something actually productive or cool. For now, it's all school.<br><br>I still really like <a href="http://www.infoq.com/presentations/archaeopteryx-bowkett">Giles Bowkett's RubyFringe presentation</a> from last year. It really starts in after the musical presentation of the first seven minutes. It's good fun even if you don't program and you can see a glimmer of why programmer's would be interested in what it is they do.<br><br>I also fervently love "The Graphing Calculator Story" which I read in text somewhere before stumbling across <a href="http://www.youtube.com/watch?v=Dl643JFJWig">this video</a>.<br><br>Finally, I watched <a href="http://blog.cusec.net/2009/01/05/zed-shaw-the-acl-is-dead-cusec-2008/">Zed Shaw's CUSEC talk</a> last night and was forced to conclude that I both like Zed Shaw and very much like his talk.<br><br>Now, when you need a break, watch something.


title: Big Changes for Coleslaw
date: 2014-09-22 10:36:00.000000
format: md
content:
  I'm working towards 1.0 and Coleslaw's basic architecture seems to have
  settled down. The areas of focus for 1.0 will be better error handling,
  command-line conveniences, more content types, and possibly some new
  ways to ingest data.

  Coleslaw 0.9.6 will be released this Saturday and, not long after,
  make it into the next quicklisp release. Seeing as it contains big
  changes, some of them breaking, I thought I'd put out an announcement.

  ## Coleslaw 0.9.6

  Coleslaw 0.9.6 unifies how we handles URLs throughout the application and
  simplifies the deploy strategy. The good news is, this makes the install
  process easier for new users. The bad news is, if you've got an existing
  install, you'll need to add a new plugin `(versioned)` to your config
  file for the old deploy behavior.

  That's not so rough, right? In addition, custom themes and plugins that
  haven't been upstreamed may need some minor tweaks. The [NEWS][news]
  has more details.

  Feel free to grab the `basic-deploy` branch from my [repo][repo] and
  try it out. There are some new [docs][docs] and the README has been
  cleaned up. There's also a plugin for [Twitter Summary Card][ts-card]
  support and the usual smattering of bugfixes.

  ## Going Forward

  While I'm happy to maintain Coleslaw if no one else steps up to work on it,
  I'm going to try and shift my focus towards emulation work and weird lisp
  noodling. If you're interested in taking on a co-maintainer role or working
  with me on the project please get in touch. I've been very appreciative of
  the help and interest thus far. If there's anything I can do to make the
  project more approachable or help people get started, do let me know.

  [repo]: https://github.com/redline6561/coleslaw
  [docs]: https://github.com/redline6561/coleslaw/blob/basic-deploy/docs/
  [news]: https://github.com/redline6561/coleslaw/blob/basic-deploy/NEWS.md
  [ts-card]: https://dev.twitter.com/cards/types/summary


title: Blog Changes and Folk Implosion
date: 2007-07-30 19:35:44.000000
format: html
content:
  Okay, I'd like to start by saying that Folk Implosion's One Part Lullaby is <em>such</em> a good album and I'd really forgotten that.<br><br>That being said, I'm just notifying readers not to expect the Friday Linux Lessons anymore. I've sort of...missed posting them the last two weeks due to crazy events but I've also sort of run out of steam.<br><br>Consider yourself notified. If you want me to write a Linux Lesson or help you with computer questions please tell me. This even extends to Windows and Mac users and covers questions like "Brit, how do you manage to pirate everything ever?" Just ask and I'll be more than happy to answer.<br><br>Fridays are now Q&amp;A days. Tuesdays, Wednesdays, and Thursdays may or may not see changes soon. I'll keep you posted.


title: Blogging Hoo Ha
date: 2007-08-16 16:54:26.000000
format: html
content:
  I was just thinking about something...blogs may be more useful for soliciting help when you know next to nothing about something than when you know a good deal about something. For example, if I post an exceedingly technical question my readership is (statistically) unlikely to know the answer. Sure, if Dave Airlie and Patrick Logan and a bunch of other hackers read my blog I might get a quick response but it's pretty unlikely. However, if I ask a general question about which I'm simply clueless there are much better odds of getting a meaningful and informative response from my readers. As a thought, this probably isn't worth blogging. But it struck me...and I did. So there.


title: Blogging Overhaul
date: 2012-08-22 09:37:11.000000
format: html
content:
  Folks, this Wordpress blog will soon disappear. I've wanted to get rid of Wordpress for a while and half-wrote some blog software back in Spring 2011. Some coworkers had a similar plight so we all agreed to finish our blog engines in a one week sprint. I'm done and will likely switch over in the coming days. My livejournal, for those of you still reading that, will no longer receive crossposts and go dark. The blog will be at http://blog.redlinernotes.com/ and there will be an RSS feed at http://blog.redlinernotes.com/rss.xml. There is no ATOM support at this time but...you know, <a href="http://github.com/redline6561/coleslaw" title="Coleslaw">patches welcome</a>. :) For the curious, the new software is called Coleslaw after a nickname of my favorite poet Milosz. It's basically a jekyll-alike in Common Lisp. Anyway, see you on the other side.


title: Breaking Livejournal
date: 2007-06-01 23:06:00.000000
format: html
content:
  You may have noticed that I didn't make a Third Thursday Literary Lines post yesterday. That's because I broke Livejournal. I wrote a post, hit the post button and then went to change the status of the post from private to public as it was posting. The post didn't go through successfully and I haven't been able to post any number of things to my livejournal from my computer since. I am posting this from a friend's computer and suspect it will go through after which blogging will resume as normal with the (belated) Third Thursday post and today's Third Friday post.<br><br>Don't ask me how I knew this would fix it.<br><br>Stupid Web apps.


title: Breaking Radio Silence
date: 2014-05-05 13:12:11.000000
format: md
content:
  ## Long time, no blog.

  I've been offline for a while. I burned out last July and only really
  started hacking on my lisp projects again in March. So what's changed
  in the last two months? Actually, kind of a lot.

  ## Coleslaw 0.9.4

  [Coleslaw][coleslaw] 0.9.4 is hereby released. I apologize that 0.9.3
  which went out in the last quicklisp release had an embarrassing
  escaping bug.

  The most fun part of **Coleslaw** is trying my hand at API
  design. Lisp is a great tool for writing extensible software and
  Coleslaw has been a good proving ground for that since everyone has a
  slightly different set of requirements for their blogware.

  I've been reading Sonya Keene's
  [Object Oriented Programming in CL][oop_in_cl] lately which led to a
  large refactoring around the new [Document Protocol][doc_protocol].
  I'm not prepared to say anything intelligent about protocols yet,
  but thankfully plenty of people have done so elsewhere. This
  [blog post by sykopomp][sykoblog] isn't a bad place to start.

  In addition to the document protocol and the usual litany of bugfixes,
  Coleslaw now has a new theme based on bootswatch readable,
  user-defined routing, support for static pages, and greatly expanded
  docs.

  The main things to tackle before 1.0 are a plugin to support
  incremental compilation for very large sites and a twitter/tumblr
  cross-posting plugin.

  ## cl-6502 0.9.7

  Additionally, someone actually found a use for my
  [Readable CPU emulator][cl-6502]! [Dustin Long][dustmop] was working
  on a homebrew Nintendo game and wanted a way to unit test his code, so
  he's been using *cl-6502* to get cycle counts and otherwise check
  behavior. Naturally, the very basic assembler got on his nerves so he
  sent me a nice pull request adding support for labels, compile-time
  expressions, and decimal, hex, and binary literals. Thanks, Dustin!

  I also rewrote the addressing modes again, reduced consing, and made
  debugging easier by using [Alexandria's][alexandria] **named-lambda**
  for all the opcodes. The [cl-6502 book][6502_book] has been updated,
  of course.

  ## Upcoming

  With any luck, I'll get back to work on [famiclom][famiclom] or tools
  for analyzing old NES games like Super Mario Bros and Mega Man 2. It's
  good to be back.

  [doc_protocol]: https://github.com/redline6561/coleslaw/blob/master/docs/hacking.md#the-document-protocol
  [alexandria]: http://common-lisp.net/project/alexandria/
  [6502_book]: http://redlinernotes.com/docs/cl-6502.pdf
  [oop_in_cl]: http://www.amazon.com/Object-Oriented-Programming-COMMON-LISP-Programmers/dp/0201175894
  [coleslaw]: https://github.com/redline6561/coleslaw
  [famiclom]: https://github.com/redline6561/famiclom
  [sykoblog]: https://sykosomatic.org/2010/10/chillax-and-protocols/
  [cl-6502]: https://github.com/redline6561/cl-6502
  [dustmop]: https://twitter.com/dustmop


title: Brick by Brick
date: 2009-03-10 19:34:08.000000
format: html
content:
  So spring break is finally here and I've gotten nothing done the past...5 days. I threw a small get together on Friday, went to a <a href="http://www.justinmorgancomedy.com/">friend's stand up</a> show on Saturday, saw the Watchmen on Sunday, and saw <a href="http://www.justinmorgancomedy.com/">the same friend</a> yesterday to watch Synecdoche, NY...which reminded me that I just don't get Charlie Kaufman films. The Kaufman films amaze me they're just incomprehensible. I can't infer the meaning to his metaphors, usually.<br><br>That's not all I've done these past few days but you get the picture. Worse (or better) still, my social schedule is booked. I'm already hanging out with people Tuesday night, Wednesday night, Friday night and Saturday night. It's ridiculous. I'm never going to get my math homework done. Anyway, where was I?<br><br>The more I think about it the more interested I am in writing or composing music of my own and there's no question that I want to do it digitally. I may even write my own software tools to do it but that's way down the line. A lot of the trouble is I don't know how to get started making music on a machine at all. Or off one. It's sort of this big, ominous thing for me. I don't think of myself as being that creative or talented anyway but I don't care. I'm going to try it. I'm still sampling things occasionally. I just need to find some piece of software to help me string it all together.<br><br>I've been at least a little productive. I've cranked through the first few chapters of Real World Haskell and would like to keep a one chapter a day pace. The <a href="http://redlinernotes.com/code">code is browsable</a> on the new server's <a href="http://en.wikipedia.org/wiki/Mercurial_(software)">mercurial</a> repo. One good thing has occurred to me these past few days. Spring break isn't wildly different than my normal schedule. Sure, I don't have homework or Tuesday or Thursday classes but I don't think that's holding me back from being truly productive or learning things I want. If I just invent the right structure for myself I think I can do still more than I'm doing now. It's something worth thinking about.<br><br>After all, there's so much out there to study. I'm interested in picking up some <a href="http://en.wikipedia.org/wiki/Category_theory">Category Theory</a> from a (<a href="http://en.wikipedia.org/wiki/DjVu">djvu</a>) copy of <a href="http://www.amazon.com/Conceptual-Mathematics-First-Introduction-Categories/dp/0521478170">Conceptual Mathematics</a> I found out on the interwebs. I'll probably buy a copy at some point, I have a problem when it comes to books. Anyway, aside from that there is tons of great free material out on the web. Herbert Wilf's <a href="http://www.math.upenn.edu/%7Ewilf/DownldGF.html">Generatingfunctionology</a> and <a href="http://www.math.upenn.edu/%7Ewilf/AeqB.html">A=B</a> are both available free online and there is an interesting text on the <a href="http://www.trillia.com/zakon1.html">Basic Concepts of Mathematics</a> and one on <a href="http://www.efgh.com/math/algebra/">Modern Algebra</a>, and another on <a href="http://web.archive.org/web/20071111181302/http://germain.umemat.maine.edu/faculty/wohlgemuth/">proofs</a> that I may work on. Beyond that, there's <a href="http://www.crsr.net/Programming_Languages/SoftwareTools/index.html">tons of</a> <a href="http://en.wikibooks.org/wiki/Haskell">free material</a> on <a href="http://www.lisperati.com/haskell/">Haskell</a> and <a href="http://www.adampetersen.se/articles/lispweb.htm">Lisp</a> so I have no reason to be bored. Oh, and as always Brian and Robert over at Enfranchised Mind are always putting out <a href="http://enfranchisedmind.com/blog/posts/programming-doesnt-suck-or-at-least-it-shouldnt/">good</a> <a href="http://enfranchisedmind.com/blog/posts/the-programmer-is-dead-long-live-the-developer/">articles</a>.<br><br>Last but not least, BT wrote the entire song that follows in the CSound programming language. Granted, it took him 6 months and hundreds of pages of code but still...<br><div><!--  @import url(http://skreemr.com/styles/embed.css); --><br><table border="0" cellspacing="0" cellpadding="0"><br><tbody><br><tr><br><td class="sk-topleft" width="16"><img style="padding:0;border:0;" src="http://skreemr.com/images/corner-topleft.gif" alt="" /></td><br><td class="sk-toprow">BT - All That Makes Us Human Contin</td><br><td class="sk-topright" width="16"><img style="padding:0;border:0;" src="http://skreemr.com/images/corner-topright.gif" alt="" /></td><br></tr><br><tr valign="middle"><br><td class="sk-lightleft3" width="16"></td><br><td class="sk-lightback3"><object width="290" height="24" data="http://skreemr.com/audio/player.swf" type="application/x-shockwave-flash"><param name="bgcolor" value="#ffffff" /><param name="align" value="middle" /><param name="flashvars" value="playerID=1&amp;bg=0xCDDFF3&amp;leftbg=0x357DCE&amp;lefticon=0xF2F2F2&amp;rightbg=0xF06A51&amp;rightbghover=0xAF2910&amp;righticon=0xF2F2F2&amp;righticonhover=0xFFFFFF&amp;text=0x357DCE&amp;slider=0x357DCE&amp;track=0xFFFFFF&amp;border=0xFFFFFF&amp;loader=0xAF2910&amp;soundFile=http://dave.thehhp.net/music/bt/BT-This_Binary_Universe-CD-2006-eMF/01-bt-all_that_makes_us_human_continues-emf.mp3" /><param name="src" value="http://skreemr.com/audio/player.swf" /><param name="wmode" value="transparent" /><param name="quality" value="high" /></object> <img style="padding:0;border:0;vertical-align:bottom" src="http://skreemr.com/images/skreemr_logo_small_name_only.png" alt="" /></td><br><td class="sk-lightright3" width="16"></td><br></tr><br><tr><br><td width="16"><img style="padding:0;border:0;" src="http://skreemr.com/images/corner-bottomleft.gif" alt="" /></td><br><td class="sk-bottomrow">Found at <a href="http://skreemr.com/link.jsp?id=6259435656546A12&amp;source=embed">skreemr.com</a></td><br><td width="16"><img style="padding:0;border:0;" src="http://skreemr.com/images/corner-bottomright.gif" alt="" /></td><br></tr><br></tbody></table><br></div>


title: Brookrun and Bibio
date: 2009-06-29 18:14:28.000000
format: html
content:
  I've gotta say, I had a really good weekend. Part of that was due to the fact that I did very little "real work". I also got to hang out with <a href="http://trashed-ideas.net/">two</a> <a href="http://twitter.com/burkehramsey">people</a> I'm quite fond of. The other contributing factors were finding a delightful new album by a guy named <a href="http://en.wikipedia.org/wiki/Bibio">Bibio</a> and spending one very enjoyable evening at <a href="http://brookrunskateboardpark.com/">Brookrun Skatepark</a>. In fact, I just happened to pick up <a href="http://skateboard.about.com/od/skateboardingdictionary/g/5050Grind.htm">50-50s</a> at Brookrun. Nothing to brag about certainly but it was nice to just try them and land a few after a half-dozen trys or so on some little box. Oh, and AT&T managed to repair my crummy phone I broke last weekend so I could put off buying a new one a little longer.<br><br>The next two weeks will not likely be as fun due to finals coming up. One class ends earlier than the others so its final is the 9th. It happens to be Data Structures, the most interesting and challenging of my courses. This week's crunch is all going to be Weapons of Mass Destruction and Computer Science. (Edit: I actually found out my last Public Speaking speech will be due the day before my Data Structures Final Exam and Final Project. Thrilling, add one to the crunch.) The week after that will be Software Ethics and Public Speaking. I have to admit, I'm less worried about the latter two. Good music should make a difference though and nothing helps listening to good music like good headphones. I'd previously owned a pair of <a href="http://www.headphone.com/guide/by-manufacturer/sennheiser/sennheiser-hd-212-pro.php">Sennheiser HD-212</a>s for a little over 4 years. They were definitely getting long in the tooth but I had no plans of replacing them until I accidentally left them at the bus stop back in May. There was a long search for an appropriate replacement which culminated in my purchase Saturday of some <a href="http://www.headphone.com/guide/by-manufacturer/audio-technica/audio-technica-ath-m50s-w-straight-cable.php">Audio Technica M50</a>s. Thus far, I am quite pleased. They certainly make Bibio sound good.<br><br>Speaking of Bibio, the album is wonderful. I'm not sure how to explain it. It's a collage of different sounds, the guy has a very wide range of styles on display. Everything from hip-hop beat production to folk. I still really like tracks 1, 4 and 7. Seriously though, just <a href="http://myspace.com/mrbibio">give the title track a listen</a>. It's lovely, isn't it? I'm also getting into Minus the Bear but haven't spent enough time listening to it to call out anything in particular. Well, maybe the song <a href="http://skreemr.com/link.jsp?id=6B5E4350555E65&artist=Minus%20The%20Bear&title=El%20Torrente">El Torrente</a>. I've also decided to do a little bit of Rap and Hip-Hop mining to see what I can find that I like. I've always been partial to Aesop Rock and The Fugees...but that's certainly not digging deep or challenging myself. I believe Rap has more to offer. Potential listening includes: Edan, Madvillain, Ghostface Killah, The Roots, Cannibal Ox and Jay Dilla with smatterings of N.W.A., Public Enemy, De La Soul, Nas, Atmosphere, Gang Starr, Rakim, Notorious B.I.G., Madlib, Talib Kweli, Mos Def and A Tribe Called Quest.<br><br>I'll keep you guys posted on how it goes. I'm still really enjoying lisp. I intend to make it back to Haskell but I expect most of my "play code" to be in Common Lisp for a little while. I've got so many tabs open in my browser backlog that whenever I finally decide to do a linkpost it'll be positively massive. Maybe I'll try to break it up in chunks though, yeah? Anyway, that's all for now. Back to schoolwork. July 22nd can't come soon enough.


title: Buffer Overflow; Core Dump
date: 2007-08-15 13:16:08.000000
format: html
content:
  Wow. I have been thinking about <em>The Concurrency Problem</em> waaaayyy too much the last 48 hours or so. I'm coming around about STM and am really hoping I get an e-mail back from Tim Sweeney answering some questions I had. Yes, <em>that</em> <a href="http://en.wikipedia.org/wiki/Tim_Sweeney_(game_developer)">Tim Sweeney</a>.<br><br>All the same, I'd rather Erlang or some other message passing functional+concurrent programming model get adopted than a non message-passing model such as Haskell. Erlang just seems cleaner to me. I just like it a bit better. Perhaps that will all change as I actually start trying to write code with them (Erlang, Haskell). Anyone who feels like coming along and writing something better that has the advantages of both without the disadvantages of either feel free. What I'm trying to say is, feel free to invent NBL.<br><br>Okay, here's what I've been reading:<br>http://www.algorithm.com.au/talks/concurrency-erlang/<br>http://patricklogan.blogspot.com/<br>http://patricklogan.blogspot.com/2007_02_04_patricklogan_archive.html<br>http://lambda-the-ultimate.org/node/1277<br>http://lambda-the-ultimate.org/node/2048#comment-25151<br>http://www.tbray.org/ongoing/When/200x/2007/06/07/Concurrency<br>http://enfranchisedmind.com/blog/archive/2007/08/13/323<br>http://enfranchisedmind.com/blog/archive/2007/02/08/191<br>http://www.dehora.net/journal/2007/08/phat_data.html<br>http://tech.puredanger.com/2007/08/14/concurrency-terracotta/<br>http://www.cincomsmalltalk.com/userblogs/ralph/blogView?showComments=true&amp;printTitle=Erlang,_the_next_Java&amp;entry=3364027251<br>http://www.defmacro.org/ramblings/concurrency.html<br>http://yarivsblog.com/articles/2006/08/16/why-erlang-is-a-great-language-for-concurrent-programming<br>And of course, the thing that started it all:<br>http://www.gotw.ca/publications/concurrency-ddj.htm


title: Bursting Browsers
date: 2009-01-29 02:49:08.000000
format: html
content:
  My browser is filling up with tabs and I'm tired of it so it's time for a link dump. There were probably also things from my Google Reader that I wanted to post in here but that thing moves so fast I can never keep up with it. Honestly, it's impossible. Maybe I should start reading less.<br><br>This year is starting to come together nicely. I'm enjoying school a lot and as far as I can tell so far I've been kicking ass and taking names...not that I should brag about it. It's not like I'm in a really tough school and it's not like I'm far into my major. Oh, well.<br><br>I still find the two most interesting topics in Computer Science to be Operating Systems and Programming Languages. We're still so early in the computer age. I think there's a long way left to go. I don't have anything smart to say about OSes and PLs because there is too much I have left to learn. Instead, in the next few days I hope to talk a bit about Emacs and LaTeX. I swear by that text editor at this point. The more you use it the more you get sucked into it I suppose...but I can imagine switching from Firefox to Emacs for browsing.<br><br>Speaking of which, Firefox 3.1 Beta 3 should be coming out soon and we all should want that. It's about time Tracemonkey got here...and if you have any memory usage improvements or additional stability bring them my way. I'm a ridiculous internet user to be sure and I average about 40 tabs most of which have a decent amount of javascript or images but I still think we can do better. Hammer away guys!<br><br>Now then, about those links:<br>- First of all, there are some notes from a POPL 2009 track that I found highly interesting <a href="http://plgrand.blogspot.com/">here</a>. I hope that things are indeed shaken up as much as they suggest over the next 10 to 15 years. There is cause for optimism as much as despair. It's been <a href="http://lambda-the-ultimate.org/node/3193">posted on LtU</a> and hopefully some good comments will turn up there.<br><br>- Bruce Schneier thinks we should have <a href="http://rc3.org/2009/01/21/data-breach-notification-laws/">Data Breach Notification laws</a>. Makes sense don't you think?<br><br>- The Scheme Language Steering Committee is <a href="http://www.r6rs.org/steering-committee/election/announcement.html">going through an election</a> soon and I'm pretty interested in taking part. Naturally, they have a fantastic lineup of <a href="http://www.r6rs.org/steering-committee/election/nominees.html">nominees</a>. I'm one of those people that's a little dissatisfied with R6RS but I am unaware of the historic RnRS before R5RS so I should probably read up before voting. Who am I kidding though? I'll never find the time. We'll see what happens.<br><br>- Following up from the first article, the links <a href="http://www.reddit.com/r/programming/comments/7t5vi/the_highlevel_cpu_challenge/">here</a> to the original article, follow up, and LoperOS are all fairly interesting. I'm actually pretty happy with the state of computing as it is these days but I don't have to write code professionally...and I'm certainly not opposed to escaping todays methods\tools\PLs\OSs\ISAs\etc.<br><br>- Speaking of tools though we do have some incredible tools today, like <a href="http://www.ptlsim.org/">this Cycle Accurate x86 simulator</a>. I don't know when I would need it...but it is there.<br><br>- There have been some interesting thoughts on the economic stimulus lately. I think three of my favorites are <a href="http://business.theatlantic.com/2009/01/how_economists_analyze_the_stimulus.php">this one</a>, <a href="http://feeds.feedburner.com/~r/worldchanging_fulltext/~3/520503687/009345.html">this one</a> and <a href="http://krugman.blogs.nytimes.com/2009/01/10/romer-and-bernstein-on-stimulus/">this one</a>. <a href="http://www.aaronsw.com/weblog/economicbs">This post</a> talks about how to spot economic BS which is of course also useful in these hectic times. We'll still forget <a href="http://rc3.org/2009/01/04/why-financial-regulation-is-necessary/">these lessons</a> in a scant few years, I fear.<br><br>- I still think there's a good bit wrong with both our economic and education systems at several levels but they're the best we have right now. After all, our <a href="http://www.thedailybeast.com/blogs-and-stories/2009-01-09/dirty-secrets-of-college-admissions/full/">college admissions processes are admittedly pretty arbitrary</a>. Hopefully they'll improve in the future but in the meantime I think a lot of the problems are summed up well <a href="http://andrewfarmer.name/2008_02_mis_education">here</a>. In the meantime, let's all just <a href="http://www.ltlprints.com/blog/think-differently/">think differently</a> and remember <a href="http://www.joeydevilla.com/2008/12/30/branford-marsalis-take-on-students-today/">what Brandon Marsalis said</a>.<br><br>- Bruce Sterling has a good bit to say about the <a href="http://www.well.com/conf/inkwell.vue/topics/343/Bruce-Sterling-State-of-the-Worl-page01.html">State of the World in 2009</a> and though this is one hell of a thread there are some extremely interesting views present. It's definitely worth a half hour or so of reading, even if you can't finish it.<br><br>- As for thinking about the future, keep these two things in mind: <a href="http://radar.oreilly.com/2009/01/work-on-stuff-that-matters-fir.html">Work on something that matters</a> and this probably will be a <a href="http://www.newscientist.com/article/mg20126881.400-genetic-manpulation-becomes-a-hobby.html?DCMP=OTC-rss&nsref=online-news">Genomic century</a>.<br><br>- While we're on the not quite computing train, I might as well mention the wonderful works of Elizier Yudkowsky again whose <a href="http://www.overcomingbias.com/2009/01/fun-theory-sequence.html">recent series on Fun Theory</a> has provided some throught provoking material. *shrug* Maybe it suits you maybe not. Here is a <a href="http://www.overcomingbias.com/2009/01/fun-theory-laws.html">summary</a>. There has also been some talk on Overcoming Bias about <a href="http://www.overcomingbias.com/2009/01/tribal-biases-and-the-inauguration.html">Obama's Inauguration</a> and <a href="http://www.overcomingbias.com/2009/01/set-obamas-bar.html">Setting the Bar now</a>. That's certainly worthwhile too.<br><br>- Speaking of Operating Systems and Foundations of Computing and all that bull, here's something worth reading/thinking about. I haven't actually used Plan 9 but there are (I think) <a href="http://news.ycombinator.com/item?id=447435">some very good comments in this thread</a> and things worth pondering.<br><br>- This is interesting if only because it seems reasonably honest/unbiased and <a href="http://web.mac.com/jimbokun/iWeb/Site/Blog/AB35C167-7755-4113-938C-968F65256D76.html">explains many of the pros and cons</a> of a broad array of languages. That said, I don't see any concatenative languages represented and that makes me a little sad.<br><br>- Last but not least are a few thoughts on our new president from Rafe Colburn: <a href="http://rc3.org/2009/01/22/a-great-day-for-america/">Thank God the torture is over</a> and <a href="http://thecaucus.blogs.nytimes.com/2009/01/22/obama-picks-critic-of-warrantless-wiretapping-for-slot-at-justice-dept/">this choice makes me deeply, deeply happy</a>.<br><br>Between <a href="http://code.google.com/edu/">Google Code University</a> is pretty cool but what I'm really excited about is their <a href="http://code.google.com/soc/">Summer of Code</a>. In the past I've read about it but if I can learn enough and get my act together quickly enough I may actually be able to participate this year! We'll see. A friend offered to <a href="http://lispnyc.org/soc2009.clp">mentor me for LispNYC</a> if I can come up with <a href="http://lispnyc.org/wiki.clp?page=soc-student-rr">an appropriate project</a> and I'm both flattered and excited but I've got <a href="http://patricklogan.blogspot.com/2008/12/building-lisps.html">a lot to learn</a> between now and then before I can do anything really useful. Back to my lisping. On a related note, I would keep my eye on this site over the next few months. I expect we'll all be seeing some <a href="http://kloudshare.com/">really neat stuff</a>.<br><br>Finally, a few tangents. Some of the stuff people create in LittleBigPlanet is <a href="http://arstechnica.com/gaming/news/2008/12/littlebigplanet-used-to-create-32-cell-computer-game-of-life.ars">astounding</a>. <a href="http://www.biscade.com/office/">These</a> <a href="http://www.stefandidak.com/office/index.php#homeoffice1">guys</a> need to stop their home computer office wars...but I think I can say I actually prefer my setup to theirs. I've made good choices based on my needs, so have they. That's enough for now. I should try doing something <em>actually</em> productive. Later guys.


title: Catching Up
date: 2009-09-02 03:10:31.000000
format: html
content:
  I was hoping to make a few posts today but I'm working on homework for tomorrow so that won't come to pass. I wanted to get something up before tomorrow though so I thought I'd mention a recent technology development that has brought me some joy.<br><br>I've been putting off getting a smartphone for a few years now. At first, because I didn't think I would make good use of the extra features and more recently because I wasn't satisfied with the available options. That dissatisfaction was primarily of a sort of political nature rather than a technical one. That is, I was satisfied with the quality of the technology available but not satisfied with the freedom and control it allowed. I seem to have <a href="http://redlinernotes.com/blog/?p=614">written briefly about this before</a> in 2007. I'd like to expand on it at some point, in particular on <em>What Technological Freedoms Are and Why They Are Worth Fighting For</em>. I wonder if there's an interested audience. Then again, much of what I write may be without that.<br><br>For a time, there was an effort for a technically mediocre but politically liberated device called the OpenMoko which I was following mostly back in 2007. They made a valiant effort but ultimately fell short of what I deemed a suitable product. Also, my phone was less in need of replacing in 2007. More recently, I've been <a href="http://redlinernotes.com/blog/?p=1034">watching</a> <a href="http://redlinernotes.com/blog/?p=1023">the</a> <a href="http://redlinernotes.com/blog/?p=1007">cell phone market</a> with an eye towards replacing my aging Nokia around Xmas. Android phones had been striking an acceptable but less than perfect balance between freedom and technical excellence but they still weren't quite what I wanted. There had been whispers for months about a Nokia phone which would be based on Open Source and thoroughly awesome.<br><p style="text-align: left;">Finally, they announced it. It looks to be completely and ridiculously awesome. There are a few <a href="http://www.youtube.com/watch?v=GhTtsZATwBQ">over the top</a> <a href="http://www.youtube.com/watch?v=Au_uRmoy8Fs">videos</a> and two <a href="http://www.youtube.com/watch?v=RP5R-5NX1BE">hands-on</a> <a href="http://www.youtube.com/watch?v=SyGblwHyNXs">videos</a> (warning: latter video in Italian) but if you're really interested check out the <a href="http://maemo.nokia.com/n900/specifications/">specs</a> and <a href="http://maemo.nokia.com/features/">software features</a> pages. Very Happy. Also, possibly the most important thing...Freedom:</p><br><p style="text-align: center;"><img class="aligncenter" src="http://redlinernotes.com/images/n900_root.png" alt="N900: Jailbroken on Arrival" /></p><br><p style="text-align: left;">Anyway, I'll be fiending for that thing until it's in my hands. In the mean time, I hope to get some more posts up. Surely, I can crank out one during my Algorithms class tomorrow. Explanation forthcoming...</p>


title: CL Web Primer Progress Report
date: 2010-11-07 21:20:29.000000
format: html
content:
  Wow. It's been way too long since I've written about this. Naturally, software takes longer than expected. I also helped Leslie test features that were in beta so migrating to those and working out their kinks slowed things down a little.<br><br>But long story short, the next entry in the CL Web Primer series should be coming very soon. 7 days at the latest. If you just want to read the code, it's at <a href="https://github.com/redline6561/clockwork">http://github.com/redline6561/clockwork</a>.<br><br>Defining a <a href="https://github.com/redline6561/clockwork/blob/master/src/calendar.lisp">jQueryUI Datepicker presentation</a>, 38 lines.<br>Defining a <a href="https://github.com/redline6561/clockwork/blob/master/src/messaging.lisp">simple text messaging system</a>, 37 lines.<br>Defining <a href="https://github.com/redline6561/clockwork/blob/master/src/reminder.lisp">a reminder class and methods to schedule the reminder to be sent, send it and delete it</a>, 47 lines.<br>Defining a <a href="https://github.com/redline6561/clockwork/blob/master/src/forms.lisp">form for users to fill out, a list of timezones and validation functions to ensure the input is good</a>, 109 lines.<br><a href="https://github.com/redline6561/clockwork/blob/master/src/init-session.lisp">Putting it all together</a>, 27 lines.<br>Learning about web programming (I know, giving myself too much credit there...) with Common Lisp and <a href="http://weblocks.viridian-project.de/">Weblocks</a>? Priceless.<br><br><a href="http://clockwork.redlinernotes.com/">The site is still quite ugly</a> and <a href="https://github.com/redline6561/clockwork/blob/master/TODO">needs a lot of work</a> and a few more features but at least it's functional now.<br>Until next time...


title: Clojure/Slime on Arch (and maybe elsewhere)...
date: 2010-05-22 13:00:56.000000
format: html
content:
  This is just a quick configuration post.  On <a href="http://archlinux.org/">Archlinux</a>, <a href="http://aur.archlinux.org/packages.php?ID=22530">clojure</a>, <a href="http://aur.archlinux.org/packages.php?ID=35340">clojure-contrib</a> and <a href="http://aur.archlinux.org/packages.php?ID=22205&amp;detail=0">swank-clojure-git</a> packages are already available from the <a href="http://wiki.archlinux.org/index.php/Arch_User_Repository">AUR</a>. I'm a big fan of Common Lisp and use it for most of my programming, so I wanted to be able to use any of the 3 common lisp implementations installed from distro packages along with SBCL git built with <a href="http://common-lisp.net/project/clbuild/">clbuild</a> or clojure without much fuss. Though there are <a href="http://disclojure.org/where-to-start/">a</a> <a href="http://riddell.us/ClojureWithEmacsSlimeSwankOnUbuntu.html">fair</a> <a href="http://felipero.com/1446961">number</a> of articles on clojure/emacs/slime setup and still more a google search away, I found it a bit of a pain to get things going the way I wanted.<br><br>I can't vouch for whether or not this will work for non-Arch users but if you have clojure and swank-clojure installed then aside from changing paths or setting environment variables this ought to work for you. (Let me know if I'm wrong, of course.)<br><br>I've got my lisp implementations defined as follows:<br><pre lang="lisp">(setq slime-lisp-implementations<br>  '((ccl  ("ccl64"))<br>    (ecl  ("ecl"))<br>    (sbcl ("sbcl"))<br>    (sbcl-git ("/home/redline/builds/clbuild-dev/clbuild" "lisp"))))<br>(setq slime-default-lisp 'sbcl-git))</pre><br>If that looks completely alien to you or you don't already have some additional code in your .emacs for SLIME setup, you're in the wrong place. You probably just want an easy <a href="http://github.com/technomancy/emacs-starter-kit">Emacs starter kit</a> for clojure. Or, alternately, to look at <a href="http://github.com/redline6561/dotfiles/blob/master/.emacs">my full .emacs file</a>.<br><br>And the following big chunk to get swank-clojure and the rest set up:<br><pre lang="lisp">(add-to-list 'load-path "/usr/share/emacs/site-lisp/clojure-mode")<br>(require 'clojure-mode)<br>(add-to-list 'load-path "/usr/share/emacs/site-lisp/swank-clojure")<br>(require 'swank-clojure)<br>(add-hook 'clojure-mode-hook<br>          '(lambda ()<br>             (define-key clojure-mode-map "\C-c\C-e" 'lisp-eval-last-sexp)<br>             (define-key clojure-mode-map "\C-x\C-e" 'lisp-eval-last-sexp)))<br>(eval-after-load "slime"<br>  `(progn<br>     (require 'assoc)<br>     (setq swank-clojure-classpath<br>           (list "/usr/share/clojure/clojure.jar"<br>                 "/usr/share/clojure/clojure-contrib.jar"<br>                 "/usr/share/emacs/site-lisp/swank-clojure/src"))<br>     (aput 'slime-lisp-implementations 'clojure<br>           (list (swank-clojure-cmd) :init 'swank-clojure-init))))</pre><br>At this point, you should be able to start Emacs and then do M- - M- x slime, followed by enter and either the word clojure or one of your lisp implementations. Alternately, you could just do M-x slime and get sbcl-git. See? Not so bad after all.


title: Coleslaw 0.9.2 and other lispiness
date: 2013-05-11 20:41:00.000000
format: md
content:
  ## Coleslaw 0.9.2
  It still amuses me that my most successful project to date is a blog engine. Not that I'm complaining about having contributors. When I [last mentioned it](http://blog.redlinernotes.com/posts/Lessons-from-Coleslaw.html), version 0.8 had just been released. Since then there have been 2 new contributors and a bunch of new features. I think the code has mostly improved in cleanliness.

  The biggest changes are new [shiny docs](https://github.com/redline6561/coleslaw/tree/master/docs), a new tags implementation, cleanups to theming, and plugins for Google Analytics, Github Pages, and Sitemap Generation. For the full details, see the [changelog](https://github.com/redline6561/coleslaw/tree/master/NEWS.md).

  My plans for 1.0 are primarily to take advantage of the extensible content types added in 0.8 and add some sort of tumblr-like auto-embedding support. But I probably won't get around to working on that for a spell. Why?

  ## Other Lispiness
  Because my [lisp emulation experiment/art project](http://github.com/redline6561/famiclom) is ongoing. [Nyef](http://www.lisphacker.com/) was kind enough to share some code he'd hacked up for NES emulation years ago and it helped give me the motivation to rewrite famiclom's PPU (Graphics Card). The former code was largely cribbed from Patrick Walton's [sprocketnes](https://www.github.com/pcwalton/sprocketnes) and I didn't understand it very well. I've hit the [nesdev wiki](http://wiki.nesdev.com/w/index.php/Nesdev_Wiki) again and am getting more comfortable with the PPU's actual workings. The code is on github in the `new-ppu` branch and I'm hoping to spend more time on it this coming week.

  I also spent the last week porting cl-6502 to clojurescript for giggles. Heresy, I know. ;) <br/>
  [cljs-6502](https://github.com/redline6561/cljs-6502) is in a basic working state but there are bugs aplenty and I haven't implemented the assembler or disassembler. The must frustrating part was dealing with A) differences in macro hygiene and B) poor macro debugging facilities.

  The browser is a fun target though. I'll have to try [parenscript](http://common-lisp.net/project/parenscript/) *or* ... [*jscl*](https://github.com/davanzp/jscl)! JSCL is a full CL->JS compiler in early development, which I contributed a tiny patch to for `fboundp`. It's a great project and if you have any interest in helping implement a lisp, I'd encourage you to get involved. The maintainers are very approachable and there's plenty of fun hacking to be had.

  All for now. It's time to play around trying static analysis of Nintendo ROMs with Lisp. I'm bound to learn something...hopefully.


title: Coleslaw Lives!
date: 2012-08-26 12:42:00.000000
format: md
content:
  ### New Beginnings
  So, Coleslaw is alive (you're looking at it) and I've done a clean reinstall on my server for the first time since 2008 or so. Thank GOD.

  With any luck, I'll get back to hacking emulators now. :) But first... a test of some features! I should really overhaul the README for [coleslaw](http://github.com/redline6561/coleslaw) too.

  ```lisp
  ;; God do I love being able to write this post in emacs. And commit and push to publish.
  (defun slug-char-p (char)
    "Determine if CHAR is a valid slug (i.e. URL) character."
    (or (char<= #\0 char #\9)
        (char<= #\a char #\z)
        (char<= #\A char #\Z)
        (member char '(#\_ #\- #\.))))

  (defun slugify (string)
    "Return a version of STRING suitable for use as a URL."
    (remove-if-not #'slug-char-p (substitute #\- #\Space string)))
  ```

  ### A LaTeX/mathjax test...
  $$
  \lambda \scriptstyle{f}. (\lambda x. (\scriptstyle{f} (x x)) \lambda x. (\scriptstyle{f} (x x)))
  $$


title: Now with even more Lisp!
date: 2012-09-19 20:47:00.000000
format: md
content:
  I haven't finished my [headless NES emulator](https://github.com/redline6561/famiclom) in time for [Strange Loop](http://thestrangeloop.com/). On the other hand, I have done some cool things that I didn't anticipate. Here's what's been going on in hackland lately:

  ## [Coleslaw](https://github.com/redline6561/coleslaw): Heroku & Plugins
  The majority of my efforts have been related to my new blogging engine, Coleslaw. I've substantially cleaned up the rendering pass, added optional RSS feeds for specific tags, revamped the plugin architecture, and added a plugin for [Disqus](http://www.disqus.com/) support. Jose Pereira also wrote a [heroku buildpack](https://github.com/jsmpereira/coleslaw-heroku) for running Coleslaw so if you feel like having a simple managed install, problem solved!

  While docs are still needed, here is a rough overview of the plugin architecture. I'll add a simple, hello-world-ish example to the README shortly.

  * Plugins are lisp files placed in coleslaw's ```plugins``` directory.
  * Each plugin should define a package ```:coleslaw-$filename``` where $filename is the name, excluding extension, of the plugin.
  * The package should export a function named ```enable``` that can be called to activate the plugin.

  * ```enable``` is mostly useful for adding Javascript to the page via ```add-injection``` or passing initialization args elsewhere.
      * ```add-injection``` takes a cons like ```(js-string predicate)``` and a location (```:head``` or ```:tail```) to insert it.
      * The predicate should take a single content object as argument. A content object can be either a POST or an INDEX.
      * The predicate will be called at render time and a non-nil return value will cause the injection to be included in the page.
  * Plugins can also extend ```render-content``` to support new post formats such as ReStructuredText or modify ```deploy``` with ```:before```, ```:after```, or ```:around``` methods to support deployment to S3, serving via Hunchentoot, etc.

  * End users take advantage of plugins by enabling them in their .coleslawrc's :plugins list.
      * A plugin given as a symbol will call ```enable``` with no args whereas a plugin given as a list will call ```enable``` with the args after the plugin's name.

  ## [Colorize](https://github.com/redline6561/colorize/) Reborn
  I am pleased to announce I've taken over as maintainer of colorize. It provides the syntax highlighting in Coleslaw's [3bmd](https://github.com/3b/3bmd) markdown mode. I've backported patches from lisppaste to colorize for Haskell, Erlang, Python, and a number of other languages. I also added very rudimentary support for Clojure highlighting. While I'm interested in seeing further language support (particularly Clojure and [Rust](http://rust-lang.org/)) I lack the time to work on further coloring modes myself. If you have any inclination to hack on colorize to add support for new languages or otherwise improve it please feel free to contact me. I'm more than happy to review and merge pull requests. :)

  ## [Wanting Types, Demanding Mirrors](http://redlinernotes.com/docs/talks/wtdm.html)
  I delivered a final Lunch and Learn at CMGdigital on Dynamic Systems. I have a screencast of it like [my last talk](http://vimeo.com/redline6561/on-programmer-archaeology) but I haven't uploaded it yet. I'm a bit more out of my depth this time and am still considering tweaking the content and rerecording. The slides are linked above though and I would welcome comments. I'm also working on a Magic the Gathering tutorial/unsession for Strange Loop and an Emacs Crash Course for my new coworkers at Primedia. Finally, I'm giving a talk on the internals of cl-6502 to the [Atlanta Lisp User Group](http://www.meetup.com/Atlanta-Lisp-User-Group/events/76874632/) on October 1st.

  ## [Vacietis](https://github.com/vsedach/Vacietis) and [trivial-dump-core](https://github.com/rolando2424/trivial-dump-core)
  Vladimir Sedach has been working on a C to Common Lisp compiler called Vacietis for a while now. It's become mature enough to generate Lisp executables for small C programs. However, dumping executables isn't a portable CL feature so I contributed a minor pull request to use trivial-dump-core to improve portability from ccl to clisp, sbcl, and ccl. I hope trivial-dump-core sees more use and gains support for more implementations as portable executable creation would be a nice thing to have.


title: Confronting Impostor Syndrome
date: 2015-03-10 19:57:00.000000
format: md
content:
  For the bulk of my professional career as a software developer, I've felt like a fraud.
  To some extent, I think various aspects of tech hiring practices and tool fads/fetishes
  in the software industry create or exacerbate this feeling in most of us.

  I read Joel Spolsky's Java Schools article way back when, before I was really programming.
  I looked down on Web Dev for a long time. I played with lisp, played with emulation.
  ... But I've been a professional web dev. Why am I fighting it and being hard on myself
  for not being a systems programmer?

  I flogged myself for some time, a little voice in my head saying that web devlopment
  "isn't real programming". I would flog myself for not being good at web development
  when I hadn't embraced it. I would flog myself for not being knowing systems programming
  when I haven't put any time into it.

  Sure, there's plenty I still don't know. But "I don't know but I can figure it out" is the
  right instinct to have. Trying a bunch of stuff and not finishing is vastly better than paralysis.
  Exploring *any* ecosystem and building better apps is better than misguided elitism.

  **I'm a hacker**, through and through. I want to learn, want to improve, want to synthesize
  new things from my understanding, grow, share, and change. I looked up to the hackers of lisp
  lore and AI Labs. But that hero worship has become negative, is distracting me from just
  building things.

  Part of the reason that little voice is in my head (and I listened to it for so long)
  is because I thought I didn't have a chance in this industry.

  I've been a successful developer for years but often unable to enjoy my jobs because
  I've been too uncomfortable to *embrace* them. Then feared I'll be found out as a fraud,
  not a "real programmer".

  I've been telling my students that since they understand the major components in web development
  and have some understanding of how they fit together, their real focus to grow should be practice.
  Constantly building bigger things, trying to make each piece more cleanly than in the past,
  gradually knowing how to solve harder and harder problems.

  I stopped taking my own advice at some point. It's time to build new things again.
  Bigger things. Not the prettiest or the best, but real.


title: Cool Waters Ahead
date: 2012-03-09 04:39:23.000000
format: html
content:
  Disclaimer: This is going to be a much more personal entry than normal. Just to get down some recent thoughts and revelations that I've had. I've read people talking about blogs as subject-focused, about building them almost like products. But this thing is a record, a mosaic, and a journal. So here we go.<br><br>On and off depression is the one thing I still really feel like is holding me back and don't like about myself. Part of the reason I stayed single (even became single in the first place) was to address this issue. I've resisted taking medication since I went cold turkey in February of 2005. For the seven years prior to that, I had been on a daily cocktail of Tegretol (a mood stabilizer), Risperdal (an anti-psychotic), Effexor XR (an anti-depressant) and Adderall (ADHD med/legalized extended release cocaine). It was a non-trivial cocktail. I may take up a light antidepressant until I can learn to keep myself in the upswing without it. But this post is less about that and more about celebrating continuing to become mentally and emotionally healthier and making it as far as I have.<br><br>Let's start with that last part. The meds I used to be on were *not* an accident and though I didn't love the experience they had their use. I demonstrated many of the precursors for Bipolar Disorder and the primary reason I was on the meds was to curb the likelihood of my brain ingraining the sort of patterns that can only be fought by regular Lithium intake later. I have a close blood relative who has suffered from Schizophrenia and another who received 33 shock treatments over the course of a bad episode. I think we can safely say that things have panned out so far. I've been medication free for 7 years and all indications are that the meds steered me away from forming some pretty deep canyons for the chemicals in my brain to run through.<br><br>In addition to that, and please believe this still sounds slightly ridiculous to me, I'm a survivor. I've actually been through a lot of shit and even when I acknowledge that I don't really tend to give myself credit for pushing beyond it. Granted, I had a lot of help. I've been surrounded by a lot of tolerant, patient people that saw through the problems and helped buy me time to work through them. One thing in particular that I've forgotten about is just how much my biological father fucked with me when I was younger. (Not my Dad, John, whom I <a href="http://redlinernotes.com/blog/?p=989">regularly miss</a> and <a href="http://redlinernotes.com/blog/?p=1002">dearly love</a>.) Here are some examples:<br>* When I was 2, my father left me on the sidewalk outside our condo and went to work for the day. A neighbor found me at or on my way to the Bohler Road MARTA bus stop and brought me home. This, perhaps unsurprisingly, prompted a divorce.<br>* When I was 3, he told me that Mom wanted a girl, not a boy. I was rather passive aggressive when I got home.<br>* When I was 5, I said to Mom, "Terry is emotionally unavailable to me, isn't he?". Frankly, I still find this a little hard to believe, precocious though I was.<br>* When I was ~8, I remember riding back from the liquor store in his Toyota Celica with some wine and him opening it and having me pour some into a cup for him. Classy.<br><br>I was also molested by a step-brother (Terry was unaware of this), suffered through a bit of military school in Boonville, Missouri where I was one of the smallest and youngest children, and probably some other stuff. So it wasn't easy. I spent the first 18 or 19 years of my life not feeling safe, not trusting myself to connect with society or the world. When you get burned so much, why bother? But I came around. I'm remarkably functional, even warm. I *like* people. That's kind of a fucking miracle. And there is some strength in me to get to where I am today. It's something worth respecting and I'd do well to remind myself of that once in a while.<br><br>Tonight, I'm taking the opportunity to remember that with my blend of genetics and chemistry I could've wound up a total sociopath or just a non-functional, drug dependent nutter. I want to get healthier still and become an even more fully realized version of myself that isn't as prone to bouts of low energy that I coast through. So I'll figure it out and fix it. And I'll achieve.


title: Counterweight
date: 2009-09-19 16:41:45.000000
format: html
content:
  Just pushing rocks up hills,<br>We starry-eyed symbols analysts,<br>The world turns under our feet<br>out of balance, again.


title: Counting Down
date: 2009-01-13 00:45:25.000000
format: html
content:
  It's been a pretty eventful holiday season. I wrecked my Maxima on Dad's birthday (the 23rd), in particular. I didn't want to mention something until I had a concrete opinion to express and now I do. It was for the best. Seriously. I had spent considerable amounts of money trying to keep the car in good repair this year, it wasn't paid off yet and my parents and I had long since agreed it was a lemon but had no way to get rid of it.<br><br>Luckily, the insurance has paid off the car, I'm fine and this enables me to cancel my insurance and have a bit more financial leeway for the coming school year. I had to figure out a method of public transit from Brookhaven to Marietta but that didn't turn out to be too tricky. It ultimately just means I'll spend about 3 hours twice a week (Tuesdays and Thursdays) on CCT and Marta. Today I went for the first time as a test run. The ride was enjoyable and afforded me a bit of time to get some sampling done. I took care of a few on-campus errands, bumped into several disparate acquaintances such as John Valentine and some Fayeteville folks and scoped out food options.<br><br>In short, I'm ready for school to start even though they're going to make me learn C#. I hope I can use <a href="http://en.wikipedia.org/wiki/Mono_(software)">Mono</a> most of the way.<br><br>I keep reading about the economy, <a href="http://www.economist.com/world/unitedstates/displaystory.cfm?story_id=12903453">earmarks and entitlements</a>. Is no one else thinking that the real issue here is sustainability, limited resources and population control? <a href="http://www.ted.com/index.php/talks/marvin_minsky_on_health_and_the_human_mind.html">Minsky gave a talk on this</a> but he's not the first person to raise the issue. When are we going to admit the planet can't indefinitely support 6 billion people or at least do the math/research to prove that it can? That's the question I'd really like us to be thinking about. If we want to be honest and accountable, the big picture is the only place to talk. The futurists and sustainability freaks seem to be pretty much the only people doing that. I'll rant about that more later but I wanted to at least note that it's been occupying increasing amounts of headspace for the past 6 months.<br><br>Speaking of mindspace, I still really love <a href="http://factor-language.blogspot.com/2008/12/discussion-of-concatenative-languages.html">ogling the stack languages</a>. I played with Forth a little bit but didn't get too far. It was just a fun diversion from Lisp at the time. I still really want to check out Factor.  Frankly, after seeing how fast the factor guys grow the ecosystem and libraries around the language <a href="http://factor-language.blogspot.com/2009/01/advantages-of-concatenative-and-stack.html">I believe their productivity gain claims</a>. Go Planet Factor, Go Slava. I'm sure I'll get around to playing with it sooner or later. I have a nightly installed and FUEL setup...which actually <a href="http://factor-language.blogspot.com/2009/01/screencast-editing-factor-code-with.html">popped up on Reddit</a> today ironically enough.<br><br>The only consumer-y thing I can think of that I'm excited about for the foreseeable future is the upcoming release of a PS3 game called Skate 2. Skate 2 is really just a patched-up and glorified Skate 1 to me. I'm still excited and I don't mean to speak ill of EA Blackbox but I could care less about much of the new stuff. I just wanted custom soundtracks, a tripod camera and good PS3 framerates. It comes out on January 21st and I'll disappear for a week in all likelihood exploring all it's corners.<br><br>I still marvel at and love my new <a href="http://redlinernotes.com/blog/?p=749">X200</a> and btdubs, <a href="http://lwn.net/Articles/314325/">btrfs is in for 2.6.29</a>. For the record, I've had a newsgroups subscription with <a href="http://www.news.astraweb.com/">Astraweb</a> for about a week now. I've poked around for a few Oscar screeners but haven't observed anything I couldn't find on <a href="http://isohunt.com">isohunt</a> or <a href="http://thepiratebay.org">thepiratebay</a>. Sure, the download speed is a boon but I'm looking for content that isn't readily available on other networks. I've checked out nzbmatrix and alt.binaries.nl. What am I missing?<br><br>The RIAA has said they're giving up lawsuits and <a href="http://consumerist.com/5114467/riaa-to-stop-suing-file-sharers?skyline=true&amp;s=x">trying something else</a>. I'll be keeping an eye out and looking for service that don't discriminate to Static IP users with their own blogs or pander to RIAA/MPAA/etc. In IP related news, <a href="http://www.youtube.com/watch?v=EzsBv2HDaRo">Lawrence Lessig appeared on the Colbert Report</a>. He has much more interesting things to say beyond what was covered so I'd recommend picking up some of his books, reading them free online or at least reading the Wikipedia articles on <a href="http://en.wikipedia.org/wiki/Code_and_Other_laws_of_Cyberspace">his first book</a> and <a href="http://en.wikipedia.org/wiki/Free_content">Free Content</a>.<br><br>I've also been catching up on my music obsession over the cold season and particularly enjoyed <a href="http://www.youtube.com/watch?v=DrQRS40OKNE">White Winter Hymnal by Fleet Foxes</a> and <a href="http://www.youtube.com/watch?v=iL4mywCOJXA">Grounds for Divorce by Elbow</a> the last few days. Also, I love Battles at least a little bit for writing <a href="http://www.youtube.com/watch?v=1LLAN29W-4w">Tonto</a>, <a href="http://www.youtube.com/watch?v=IpGp-22t0lU">Atlas</a> and <a href="http://www.youtube.com/watch?v=p44kzQMixZ0">Leyendecker</a>. I'm also enjoying Amon Tobin all over again because <a href="http://www.youtube.com/watch?v=p44kzQMixZ0">he's a damn genius</a>.<br><br>I haven't been keeping up tremendously well with my New Years Blogging resolution, as you may have noticed, but I think that will change now that I'm busier. I've been doing much better with the music sampling and skateboarding. On to the coding and schooling.


title: Crazy Days
date: 2007-07-06 06:39:00.000000
format: html
content:
  I'm not sure if I'm going to post a Linux Lesson tomorrow. I'm pretty sure I will but I almost would rather teach myself some Python Programming and post a few explanations and/or code snippets. We'll see what happens. I've been reading a blog lately by this guy Steve Yegge and <a href="http://steve-yegge.blogspot.com">it's amazing</a>. Seriously. I just read an article he wrote last March today called, "Moore's Law is Crap" and it was one of the most entertaining, wonderful things I've read in weeks. The guy's just dynamite. His essays\rants swing from hardcore nerd discussions about compilers and syntactic structure to the usefulness of math and being happy with your job. That might not sound like much of a swing but I think it is. Did I mention he works for Google? Anyway, here's a snippet I really liked today.<br><br>"I don't know why I blog. I'm just compelled; it just happens whether I like it or not. Don't read too much into my blogs. My opinions change from day to day. The only things I've learned, the only universal constants, are that I don't know very much, and that public whale explosions are just about the funniest thing human beings can experience during our stay on Earth. I don't know why that is, either." - <a href="http://steve-yegge.blogspot.com/2006/03/moores-law-is-crap.html">Moore's Law Is Crap by Steve Yegge</a>


title: Current Craziness
date: 2009-05-03 05:40:15.000000
format: html
content:
  So, how about a personal update to go with that code madness? I have my last two finals in Discrete Math and CS 102 Tuesday. Then I get to pack and fill out change of address forms in preparation for Teresa and I moving to our new place Tuesday. Then I have about a week before May 18th when summer session starts to square away things with the old house\landlord (cleaning, etc) and relax a bit. I'm looking forward to my Data Structures course this summer as well as to the Sixteenth Haskell Community Activities Report and the release of Pixar's Up. I hope to go see Up with a ton of people when it releases. Also, <a href="http://blogs.gnome.org/edwardrv/2009/03/24/pitivi-progress-summer-of-code-and-android/">Pitivi was supposed to finally drop the first release of their 0.13.x branch in April and that date has slipped a bit</a>. Hopefully they'll put out a release soon.<br><br>Last but certainly not least, Dad has moved into the dining room and is now getting around via a wheelchair. I don't get the impression that the cancer is beginning to win and he can walk a little but odds are good he'll never be back to full mobility. Pray for him if you can and if you're interested in tracking his progress Mom is keeping a journal <a href="http://www.caringbridge.org/visit/johnmglennjr/journal">here</a>.<br><br>Just because I need it, here's some Sigur Ros:<br><div align="center"><style type="text/css"> @import url(http://skreemr.com/styles/embed.css);</style><table cellpadding="0" cellspacing="0"><TR> <TD WIDTH="16" CLASS="sk-topleft"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topleft.gif"/></TD> <TD CLASS="sk-toprow">Sigur Ros - Svefn-G-Englar</TD> <TD WIDTH="16" CLASS="sk-topright"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topright.gif"/></TD></tr><TR VALIGN="MIDDLE"> <TD WIDTH="16" CLASS="sk-lightleft3"/> <TD CLASS="sk-lightback3"> <embed class="SkreemRPlayer" wmode="transparent" style="height:24px;width:290px;" src="http://skreemr.com/audio/player.swf" quality="high" bgcolor="#ffffff" width="290" height="24" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="playerID=1&bg=0xCDDFF3&leftbg=0x357DCE&lefticon=0xF2F2F2&rightbg=0xF06A51&rightbghover=0xAF2910&righticon=0xF2F2F2&righticonhover=0xFFFFFF&text=0x357DCE&slider=0x357DCE&track=0xFFFFFF&border=0xFFFFFF&loader=0xAF2910&soundFile=http://stopokaygo.typepad.com/web/files/sigur_ros_svefngenglar.mp3"></embed> <img style="padding:0;border:0;vertical-align:bottom" src="http://skreemr.com/images/skreemr_logo_small_name_only.png"/> </td> <TD WIDTH="16" CLASS="sk-lightright3"/></TR><TR><TD WIDTH="16"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomleft.gif"></TD><TD CLASS="sk-bottomrow">Found at <a href="http://skreemr.com/link.jsp?id=6559435354556A&source=embed">skreemr.com</a></TD><TD WIDTH="16"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomright.gif"></TD></TR></table></div>


title: Dad's Visitation and Funeral
date: 2009-05-20 03:25:13.000000
format: html
content:
  Normally I don't write these "Note" things but you know what they say about exceptional circumstances. This will be cross-posted to my blog and is stolen from Mom's caringbridge journal.<br><br>Thursday, May 21, 6 - 8pm:<br>Visitation at HM Patterson's (Spring Hill facility) Atlanta GA<br><br>Friday, Mary 22, 10am:<br>Funeral Service at All Saint's Episcopal Church, Atlanta, GA<br><br>Friday, May 22, immediately following the service:<br>Graveside service at Arlington Cemetery (Sandy Springs)<br><br>Friday, May 22, immediately following Graveside service:<br>My aunt and uncle, Sandy and Spencer Wiedemann, have graciously offered to open their home to those who would like to gather.<br>Their address is 340 Cameron Ridge Dr, Atlanta, GA 30328.


title: Damn Servers...
date: 2008-08-01 12:59:51.000000
format: html
content:
  It's been a good while since I posted last. After meaning to do it for months, I've finally migrated to a new web server. I'm self-hosting so I have no one to yell at about everything taking so long but myself. At any rate, I've migrated my Desktop, Server and Laptop from Ubuntu Linux to the <a href="http://redlinernotes.com/blog/?p=697">custom Arch Linux build</a> I've been working on lately. Some old links in old posts are broken at the moment but I'm hoping to repair them in the coming weeks.<br><br>For now, I'm just glad this thing is back up and functioning after the week of chaos. I'm <a href="http://redlinernotes.com/code">still committing code</a> as regularly as I can and for the first time in a long time <a href="http://redlinernotes.com/jukebox">Redline Radio</a> is live again as well. Let me know if you're interested in getting access. We will now return to the regular posting schedule. :-)


title: Dead Players
date: 2008-01-22 17:12:10.000000
format: html
content:
  The long weekend was really nice. It was good to get the time off and I’m excited about this week.  I even talked to Teresa a little about potentially going back to school and maybe becoming a professor down the road. We’ll see. Unfortunately, my beloved MP3 player decided it was going to die on me. And the thing is, without being able to listen to my music everywhere I fall apart a little. The gym’s harder and less fun. Work isn’t quite as good. Ditto for driving places. Haven’t you noticed FM radio is mostly awful? Anyway, now I have to figure out what to do about that missing piece of technology. I don’t know when I’ll do it but I’ll probably try to replace it sooner rather than later due to my predilection with mobile music. Plus payday is on Thursday.<br><br>The player I had before broke because it’s a hard drive player. It has moving parts. And you have to recognize that’s sort of an undesirable design limitation on something you take to the gym or are really mobile with. Hard Drive based players are just much more likely to fail. Flash players (which don’t have moving parts) have existed for years but they’ve only recently gotten into a storage capacity range that makes them eligible for my dollars.<br><br>That said, this throws a kink into my technology roadmap a little. Before my player’s death I was pretty well set up for this year. Sure, at some point down the line I wouldn’t mind a mobile game system (the PSP) or a new phone that I can check e-mails on (the OpenMoko) but I really don’t consider those essentials. Now, I need a new MP3 player and playing MP3s is something the PSP and OpenMoko are well-equipped to do. Nothing like consolidation of devices, right? Thing of it is, whatever I’m going to use needs to interoperate with Linux well and have a 16gb capacity or more. The MP3s stored on my current player took up about 13gb but it helps to have growing room.<br><br>The nice thing about getting the PSP would’ve been that it’s competitively priced with an MP3 player and would play games AND stream music from my PS3…but I’d have to be near a wifi access point. I could store the music on a memory stick and then I wouldn’t need to stream it wirelessly from home but 16gb memory sticks for the PSP aren’t coming out til March and even then they’ll be more expensive than the PSP itself. So, that’s out. SDHC memory (which the OpenMoko uses) also haven’t reached sizes above 12gb and the phone is prohibitively more expensive then a replacement player or the PSP.So, at this point it looks like getting another Creative Zen Vision M 30gb (which I did like before it’s untimely demise) or a SanDisk Sansa View 16gb. The Sansa is a $50 bump over the Zen’s ~$125 but there might be one cheaper on craigslist and I’m thinking I’ll go with that due to mostly positive reviews and it’s durability and size-benefits from being flash-based. Anyway, it was fun to at least consider the OpenMoko and PSP Slim. I did a sizeasy comparison of the devices and my current phone (the Nokia 2610) to see how they all matched up for room in my pocket. Wanna see?<br><br><img src="http://www.redlinernotes.com/images/compare.jpg" title="Gadget Sizeasy Comparison" alt="Gadget Sizeasy Comparison" />


title: Dear Hackers
date: 2014-07-16 12:33:00.000000
format: md
content:
  (In which I talk about my *feeeeeeels*)
  <img src="http://redlinernotes.com/docs/talks/trp/feels.gif">

  Disclaimer: This post comes in the middle of an existential crisis.
  I'm struggling a lot with programming as a career choice and feeling
  disconnected from a community of excited hackers. These feelings and
  opinions are my own and I think it's totally fine if you don't
  subscribe to them or want to write me off as an F-ing idiot.

  ### Love First

  A lot of the ideas in this post have been buzzing around in my head
  since I saw [Jen Myers](https://twitter.com/antiheroine) deliver her
  keynote at Strangeloop last year.

  I've been keeping my thoughts in my head mostly because I'm already an
  established programmer. A lot of the motive for the talk was to
  be more welcoming to newcomers and minorities that struggled to be
  included in our communities. But I think this problem affects all of
  us, every last one, regardless of gender, race, or class.

  The short version is that I think the tone of programming communities,
  especially online ones, is horrific. It's filled with religious debate
  over things *less* important than getting people excited about and
  interested in computing. For me, whether it's smart people posturing
  for social status or individuals genuinely trying to enlighten others
  is irrelevant.

  Our first reaction to any comrade, any other person passionate about
  and interested in building things with computers, any human crazy and
  masochistic enough to try and expand the capabilities of these absurd
  machines, should be empathy and love.

  This may seem ridiculous at first glance. It's harder than it sounds.

  ### The Same Old Arguments

  You already know the religious wars I'm talking about. They're silly
  little things. Are static or dynamic types better? (For some, is there
  even such a thing as being dynamically typed?) Is Vim or Emacs
  better? Should I learn programming with PHP or Haskell? Should my app
  use JSON, XML, or a self-describing binary format? Is programming
  math, art, or craft? Can code be literature?

  For a host of reasons, these are questions we have a vested interest
  in. And I think, more often than not, our motive is to encourage more
  learning and exploration. But the conversation is almost always full
  of condescension and judgment, especially if the medium for response
  is limited. We simply **cannot** let supporting curiosity become
  secondary to proselytizing "the right thing".

  Plain and simple, turning a prompt for exploration into a right-or-wrong
  religious debate is **curiosity destroying**. And that's precisely the
  opposite of our intent, the opposite of what we as a community should
  aspire to.

  Our opinions are important, and I'm not precluding the existence of a
  right answer. But someone pondering a tricky subject isn't best met by
  bludgeoning them over the head with a conclusion. As long as the principal
  motive of those we interact with is the fractal question "**Why?**",
  we are together.

  This connects to a lot of things. It connects to people wondering if
  they're good at programming, or how to know such a thing. It
  contributes to impostor syndrome. I've struggled to hack on hobby code
  for fun because I don't feel like I can be proud of it. Not smart
  enough, not groundbreaking enough, not important enough. And I know
  that's silly, because there are [more important things][comprehensible]
  to worry about.

  So the more we can get away from emphasizing that the most important
  thing in programming is **being right**, the better that will be for
  newcomers, for hobbyists, and I believe, for all of us.

  [comprehensible]: http://blog.redlinernotes.com/posts/Towards-Comprehensible-Computing.html

  ### Epilogue

  I'm reminded of an Alan Perlis quote in SICP:

  > "I think that it's extraordinarily important that we keep the fun in computing.
  > ... We began to feel as if we really were responsible for the
  > successful, error-free, perfect use of these machines. I don't think we are.

  > I think we're responsible for stretching them,
  > setting them off in new directions, and keeping fun in the house."

  I'm not perfect at this either. It is difficult to never be dismissive,
  let alone to always be gentle. But sometimes people are just trying to
  make it through the day. Not use the best tool, not come up with a
  groundbreaking solution, not fix the world. We need to try to meet
  other programmers where *they* are. Not move them to our habitat
  before empathizing, before loving.


  Ironically, I know this has been a bit of a high-horse diatribe.
  At least let me give you a gift for coming so far and listening to me
  ramble so much. Here, have something I love, bits of Milosz:

  ```
  To whom do we tell what happened on the earth,
  for whom do we place everywhere huge mirrors
  in the hope that they will be filled up and will stay so?

  I think that I am here, on this earth,
  To present a report on it, but to whom I don’t know.
  As if I were sent so that whatever takes place
  Has meaning because it changes into memory.

  To find my home in one sentence, concise, as if hammered in metal.
  Not to enchant anybody. Not to earn a lasting name in posterity.
  An unnamed need for order, for rhythm, for form,
  which three words are opposed to chaos and nothingness.

  What did I really want to tell them? That I labored to transcend my place and time,
  searching for the Real. And we could have been united only by what we have in common:
  the same nakedness in a garden beyond time, but the moments are short
  when it seems to me that, at odds with time, we hold each other's hands.
  And I drink wine and I shake my head and say: "What man feels and thinks will never be expressed."
  ```


title: Decompression
date: 2012-01-29 19:14:13.000000
format: html
content:
  It's time to spend an afternoon at the High Museum of Art. But first, I've found a new poet: Wislawa Szymborska.<br><br><b>I'm Working On The World</b><br>I'm working on the world,<br>revised, improved edition,<br>featuring fun for fools,<br>blues for brooders,<br>combs for bald pates,<br>tricks for old dogs.<br><br>Here's one chapter: The Speech<br>of Animals and Plants.<br>Each species comes, of course,<br>with its own dictionary.<br>Even a simple "Hi there",<br>when traded with a fish,<br>makes both the fish and you<br>feel quite extraordinary.<br><br>The long-suspected meanings<br>of rustlings, chirps, and growls!<br>Soliloquies of forests!<br>The epic hoots of owls!<br>Those crafty hedgehogs drafting<br>aphorisms after dark,<br>while we blindly believe<br>they're sleeping in the park!<br><br>Time (Chapter Two) retains<br>its sacred right to meddle<br>in each earthly affair.<br>Still, time's unbounded power<br>that makes a mountain crumble,<br>moves seas, rotates a star,<br>won't be enough to tear<br>lovers apart: they are<br>too naked, too embraced,<br>too much like timid sparrows.<br><br>Old age is, in my book,<br>the price that felons pay,<br>so don't whine that it's steep:<br>you'll stay young if you're good.<br>Suffering (Chapter Three)<br>doesn't insult the body.<br>Death? It comes in your sleep,<br>exactly as it should.<br><br>When it comes, you'll be dreaming<br>that you don't need to breathe;<br>that breathless silence is<br>the music of the dark<br>and it's part of the rhythm<br>to vanish like a spark.<br><br>Only a death like that. A rose<br>could prick you harder, I suppose;<br>you'd feel more terror at the sound<br>of petals falling to the ground.<br><br>Only a world like that. To die<br>just that much. And to live just so.<br>And all the rest is Bach's fugue, played<br>for the time being<br>on a saw.


title: Digital Lifestyle Efficacy (or a Theory of Technology Purchases)
date: 2007-10-20 19:53:50.000000
format: html
content:
  News: I got a PS3 60gb off craigslist Thursday for $350 complete with 2 wireless controllers and 2 games (madden and fight night, since exchanged for cash; sports games not my thing). And yes it's working fine. Linux will be on it soon! For those of you screaming that I'm crazy to get a PS3, see essay below (which is actually about technology purchases generally and hopefully quite good, so fear not).<br><br>Preface: I wrote this 3 or 4 days ago to get these thoughts down that I'd never quite bothered to formally articulate. I'll probably continue to refine this over time. I actually think it's not bad. Sure, it's a bit biased at points but on the whole this isn't bad information. And I'd love any formal rebuttals to any of my points. Cross-examination is good. Thanks for proofing folks.<br><br>So, I have a closet obsession with technology. Actually, maybe that's not quite in the closet. The obsession I'm really going to talk about here I'm calling Digital Lifestyle Efficacy, mostly because I can't think of what else to call it.<br><br>//Digital Lifestyle Efficacy is probably best defined as my philosophy towards technology purchases. It is, in essence, a desire to have your technology interoperate, serve it's purpose well, not restrict the user (you), and be as multi-functional as possible. Let me elaborate a bit on this.<br><br>There are a variety of product categories for which everyone owns a piece of technology. Here are a couple:<br>Laptop (and/or Desktop/Workstation)<br>Server<br>Cell Phone<br>Portable Media Player<br>Video Game Console<br>I'm not saying that everyone owns one of each of these but that everyone owns at least one of these items. That is, just about everybody has a computer, game console, cell phone, or media player. Many people have one of each of these. Your product categories may vary, as may your mileage. (i.e. Home Theater equipment might be on your category list).<br><br>So, every now and then I think about buying a product that falls into one of those categories. Right now, my next purchase will likely be a Game Console, then I'll replace my Phone, then my Laptop. There are some interim enabler purchases I'll talk more about later as well. I can predict all that now and explain why I've made those choices by the following guiding principles and rules.<br><br>I will here try to list those principles and give an example of each, followed by some general rules to follow in selecting hardware, and the example of my present gadgetry and where it's going. These principles and rules should really be followed by everybody, as far as I can tell, save the openness one of which much more can be said/argued. They are not a reflection of personal preference except where explicitly stated.<br><br>//Principles:<br><br>Openness - This doesn't deal with consoles as much. For phones, computers, and media players it's essential though. Openness <em><em>in this sense</em></em> means the ability to get my data on or off as a device, the ability to migrate between service providers and\or solutions with a minimum of hassle and, preferably, the ability to modify the software running on the system in concern (and the hardware if it's a computer).(Note: This principle is what tends to knock out most Apple products for me. If not for this, everything I own would probably be an Apple product; Unfortunately, Apple doesn't believe in letting me think for myself and do what I want. Sorry, Apple + Apple Fans. No sales for you.)<br><br>Interoperability - For a device to be interoperable, it has to work with the other products I own. Bonus points if there is a common aesthetic, a sort of aesthetic interoperability, between them. [Apple wins in this category of course, though they make rare aesthetic blunders as well (see the recent iPod Nanos).] There was a time when iPod support was unavailable on Linux. Given that I run Linux on my computer, that made iPods an untenable solution for me. Were I to replace my car stereo (more than unlikely), it would have to support input from my Media Player, ideally through the ubiqitous 1/8" mini jack. Products that take advantage of open standards are generally a win here.<br><br>One-Item-per-Category\Sufficiency: You should never, EVER, under any circumstances require more than one product from any given category to deliver the full functionality you require. That is, you should never need two cell phones or two Media Players. I extend this further to try and eliminate whole categories where overlap makes this possible. For example, you won't see a TV, DVD Player, or Pager on my list because those functions are taken care of by other items on the list. My Computer or Game Console serves as my DVD player and an appropriate monitor will take care of displaying video from the Game Console in lieu of a TV. A TV tuner card will enable the PC to handle cable TV as well. Cell phone's now take care of pager functionality in the form of missed calls and caller ID. Called ID almost means you don't even need an answering machine.<br><br>//Rules:<br><br>I only have one real universal rule. The other rule is a preference. The preference is for something to be as OPEN SOURCE (not open as above) as possible without compromising the other principles. My next phone, the OpenMoko, will be fully open source and run Linux without any proprietary bits. My next console, the PS3, can dual-boot Linux and act as a server.<br><br>The rule is to buy at the optimum time in the market life cycle. This is where a little bit of extra research and knowledge tends to go a long way. Not everyone knows where to find said knowledge or what to make of it so this section may be example heavy. First though, it's crucial to note here that computers are composed of many smaller parts, both hardware and software, and that these are independent products and categories in their own right. That said, we're off.<br><br>Technology Market Lifecycles:<br>These vary across product categories. For example, Consoles are generally good for 3-5 years and <em><em>depending on how you build them</em></em> so are computers. That's critically important.<br><br>This is why I built a computer in August of 2004 that is only now <em>beginning</em> to show it's age.<br><br>It's not just about buying the most powerful thing available at the time, or the newest, and hoping it lasts a while. That's often a decent way to get completely screwed and many people miss out on the finer details of this. Now, to be fair, most people who care this much about their technologies (as we're talking here about computers that are hand-built or at least built from hand-selected parts) are already nerdy enough to know the finer details. All the same this a part of my knowledge that I've never really thought to get down on paper.<br><br>All the examples I can think of fall into three (admittedly broad) subcategories. One, technology that is about to face competition from a revolutionary technology. Two, technology that is about to face competition from an evolutionary technology. And Three, technology that is about to shift to a competing technology which invalidates the earlier type.<br><br>I'll try to give examples of each to make my thinking a bit more clear on this. One is occurring now in the storage market as Solid-State Storage devices are replacing traditional Magneto-Optical Media (Flash drives are replacing Hard Drives). Two occurred recently when the slew of DirectX 10 (DX10) video cards came along to replace the DirectX 9 (DX9) cards. Three occurred when Apple shifted their product line from the PowerPC processors to Intel processors. Each of these have some caveats which I'll elaborate on.<br><br>Now, just because a revolutionary technology is disrupting things doesn't mean you should switch immediately for a particular product category. For example, I had to replace my Portable Media Player this summer and even though Flash-based Media Players are getting cheaper and that shift is inevitably occurring there was one thing that kept me from getting a Flash-based solution. There wasn't one that was available in the size range I wanted (~30 GB). That compromised the sufficiency principle. Even though it became clear a decade ago that LCDs would eventually become the display of choice my desktop still uses a CRT, partly due to cost and partly because I'm waiting on an LCD that will double as a TV for the Game Console.<br><br>Where evolutionary technologies are concerned my rule of technology purchasing comes out in full force. Whenever you're considering upgrading a product (say a CPU) to an evolutionary technology, make sure there's not a revolutionary technology waiting around the corner. Pinpointing the optimum place in the Technology Lifecycle can be fairly tricky. I can give a few examples of this and figuring out when to yield to this is probably the hardest part of technology purchasing to get right. Example 1: During the summer of 2004, I put off purchasing an Athlon XP based computer because I knew the Athlon 64 architecture was right around the corner. Example 2: I messed up by skimping and getting a Socket 754 based motherboard instead of going with the Socket 939 platform which had more longevity and features like PCI-Express and SATA even though I got the Athlon 64 bit right. Never skimp on your motherboard. Example 3: I am deferring my laptop purchase until AMD releases their GPU/CPU integrated processors in 2008/2009. The upcoming CPU/GPU convergence and the shift to multi-core processors is one of the biggest upheavals in hardware in the history of computing. Possibly the biggest. There have been a number of such revolutionary shifts lately, which is unusual. In storage (Flash versus Magneto-Optical), in Processing (Multi-core and Cpu/Gpu convergence), in Wireless (Wi-Fi versus Wi-Max), in Displays (LCD vs. LED), in optical drives (DVD vs. Blu-ray vs. hd-dvd), etc.<br><br>Finally, you would've been an idiot to purchase a Powerbook right before the Macbooks came out UNLESS you A)Just didn't know or B)Wanted to do something with the PPC architecture specifically.<br><br>So, that's generally how I figure out how to buy hardware. Motherboards are about the most complicated piece of the puzzle as you've got to make sure your motherboard will support any additional component purchases you plan to make over the next couple of years.<br><br>//Me, Specifically:<br>Right now, I've got an old Nokia phone, a medium-aged Thinkpad A31, a PS2, and a Creative Zen Vision:M 30GB, along with my desktop and my server. I should note that my desktop is likely to soon become my server and my server is likely to soon be retired. My upcoming purchases are a PS3, followed by a Dell 2007WFP LCD, then an OpenMoko phone to replace my Nokia, and finally (around a year or two from now, roughly when I graduate) a new laptop. By that time, laptops will be more widely using Solid State Storage and LED screens as well as Wi-Max and if I'm lucky I'll be able to get a DX10-level GPU/CPU combo from AMD as well all in a nice ultraportable form-factor. Maybe it'll even come with Linux from the Factory...<br><br>Now, to share a display and speakers between the media player, game console, and laptop (and, optionally, desktop/workstation) some additional infrastructure is required. My solution is to have a docking station for the laptop that my speakers are plugged into. When I get the PS3 and the monitor the monitor will go into the docking station and the PS3 will go into the monitor. I am also likely to need to get an audio switcher so the PS3 and Laptop can share the speakers. At that point it may be reasonable to get a USB Keyboard/Mouse to switch between the laptop and the PS3. Wireless Keyboard/Mouse might be a plus.<br><br>Before you ask, I'm getting a PS3 because of my need to play certain Sony-Exclusive titles and it plays the most software I want out of the next generation. I'm getting an OpenMoko because it runs Linux and is the most open phone on the market that still does what I need. I'm getting a Dell 2007WFP because it's the only flatscreen in the size and price range I need that I would trust to display PS3 games well. And I'm getting the laptop described above because I just have better taste then you. Also, my company biases are towards Sony consoles, AMD processors, and ATI video cards. Alright, that's it. Comment below.


title: Disabling SCIM in Hardy
date: 2008-03-11 17:25:24.000000
format: html
content:
  If anyone else has been struggling/annoyed/ready-to-kill due to the SCIM program that runs by default in Ubuntu Hardy I found, thanks to <a href="http://weblog.verwilst.be/2008/03/11/scim-in-ubuntu-hardy/">this gentleman</a>, that you can disable the application altogether by doing the following:<br><pre><br>sudo update-alternatives --set xinput-all_ALL /etc/X11/xinit/xinput.d/none</pre><br>Restart your X server and that should be it!<br><br>EDIT: I received an anonymous comment from a British locale user that said the original solution switched him back to English. A cursory google didn't turn up anything tremendously helpful/enlightening, <a href="https://wiki.ubuntu.com/InputMethods/SCIM/Setup">just this</a>, and I'm lazy tonight so I hypothesize that /etc/X11/xinit/xinput.d/default sets your locale to the setup default and /etc/X11/xinput.d/none disables SCIM altogether. Maybe I'm right. YMMV.


title: Disparate Discourse
date: 2009-01-22 04:42:03.000000
format: html
content:
  Before I bore you, I should mention something worth reading. There was an interview with <a href="http://en.wikipedia.org/wiki/Clay_Shirky">Clay Shirky</a> I read that I thought was just excellent. It's on the response to technological change and some of the effects of the change (the newspaper industry esp.). It's in 2 parts and it's definitely worth it. Check it out: <a href="http://www.cjr.org/overload/interview_with_clay_shirky_par.php?page=all">Part 1</a> and <a href="http://www.cjr.org/overload/interview_with_clay_shirky_par_1.php?page=all">Part 2</a>. Also, if you've ever wondered about the people who write adware, here's <a href="http://philosecurity.org/2009/01/12/interview-with-an-adware-author">an interview with one</a>. There's a little bit of geek speak but it's not too bad and he certainly has some interesting things to say.<br><br>I've had a lot on my mind I've wanted to mention here but I've been distracted by real life lately. You know, school, keeping up the house, budgeting, exercise, a small social life, etc. It's been a big January. Obama got inaugurated and seems to be taking his first steps well. EA Blackbox disappointed me by not including Custom Soundtracks, one of the few features I cared about, in the PS3 version of Skate 2. And wouldn't you know it, I'm just loving SPSU. I can't explain why. I especially don't know when I found it so miserable last time. The classes aren't more challenging (except for maybe my programming course) but I'm just enjoying myself a lot more. Maybe that year off really did benefit me. I'm also really loving the public transit I take two days a week to get there. If I can get through the next 30 years without a car, I'm liable to try.<br><br>My 2 school days, Tuesday and Thursday, are both 13+ hour days. I leave at 7:30 and get back home around 9:00. It's worth having the rest of the week off though. My first class is Technical Writing which I at first hated and still think is pretty dumb. Thankfully, it's the sort of class where if you just keep your head down and do what you're told you'll do well. I'm normally not good at that but I'm managing so far and it's been getting a little easier as I've gotten less afraid the teacher will grade my work arbitrarily.<br><br>The really odd thing which I don't know how to relate is that I'm making friends at SPSU. Last time I made a point of going to class and back to my dorm. I spoke to few (or no) people in my classes and was this ghost guy that happened to live on campus but spent most of his time at work or his Oglethorpe girlfriend's dorm. I'm still near Oglethorpe and I still see the folks I care about, particulary <a title="T. Finn" href="http://redlinernotes.com/images/teresa.jpg">that girl</a>. That said, I run into people constantly throughout the day and they want to talk or hang out with me. The lunchroom, the hallways, just walking around. It bothered me a little initially because I was used to sitting around people watching and reflecting during that time and people kept coming up to me. It seems that people my age don't really <em>reflect</em> much to me for some reason. Anyway, it was weird getting approached all the time at first but it's fun now.<br><br>I have a Global Issues class which is <em>sort of</em> politics and probably should've been covered by a bit of Core 3 but I'm signed up for the 2nd of something like 6 debates and mine is on the issue of population control. I'm all about that and I've been thinking a bit about <a title="Sustainability Wikipedia entry" href="http://en.wikipedia.org/wiki/Sustainability">sustainability</a> and <a title="Anomie Wikipedia entry" href="http://en.wikipedia.org/wiki/Anomie">anomie</a> lately. I still don't have anything smart to say though. I have a Discrete Math class in which I actually adore the professor. Literally. She's precious. She bounces all over the damn room because she has ADD so bad she can't hold still. Or she's just that excited about Discrete Math. She specializes in <a href="http://en.wikipedia.org/wiki/Extremal_graph_theory">Extremal Graph Theory</a> after all. Anyway, her enthusiasm makes all the difference. I've sort of made the class fun for myself additionally by picking up <a href="http://en.wikipedia.org/wiki/LaTeX">LaTeX</a> to typeset all my math homework. It all ends up looking like <code>$\forall x \in Z^+ p | \sim p \to (q \lor r)$</code> or some such. God bless the almighty <a href="http://en.wikipedia.org/wiki/GNU_Emacs">Emacs</a>. I (almost) live in there. If you want to understand why someone would subject themselves to such a thing instead of just using a Word Processor like MS Word, <a href="http://ricardo.ecn.wfu.edu/~cottrell/wp.html">read this</a>.<br><br>I've got a few programs I need to write. I need to write an application to help me keep up with my budget and I need to write a cookbook application to help me store and keep track of my favorite recipes. I'm definitely writing the cookbook app in <a href="http://en.wikipedia.org/wiki/Chicken_(Scheme_implementation)">Chicken Scheme</a> and may or may not write the budget app in Common Lisp. By the way, I'm looking for a simple but stellar Chili recipe. Anybody have one they're willing to share?<br><br>Part of my recent joy has been that I'm less concerned about changing the world with my life. It's sad to me quite often but the amount of effort required to not be an ordinary person is tremendous and the sacrifices great. I'll try to explain that in more detail later but in short I'd like to spend my life with a loved one quietly but intently. It's hard in some sense not to end up sleepwalking through your life and going with the flow. Anyway, for now I've got to get this posted and get to bed in the next 10 minutes so I'll be well rested for my 14 hour day tomorrow. Good night.


title: Double Posting
date: 2007-07-24 17:52:06.000000
format: html
content:
  Ladies and Gentlemen,<br><br>The first steps in getting the new site up have been completed. The content from livejournal has been moved over and my posts now show up both on livejournal and at "http://www.redlinernotes.com/blog" . While work on the site is ongoing the basic functions are up and you should be able to poke around and let me know what you think. I'll keep you posted as new developments arise.


title: Downtime Considered Harmful
date: 2008-05-28 01:25:32.000000
format: html
content:
  <p>At long last, <a href="http://www.redlinernotes.com/">the site</a> is live again. Clearly the downtime ended up being a little longer than expected. This was caused by a few things.</p><br><p>One thing was that there were not 3 prong outlets where the server needed to go. This hosting facility (house) is a little old and the only places the DSL line runs have 2 prong outlets. So that slowed me down a bit.</p><br><p>Secondly, there are 2 network cards on the server (one integrated in the mobo, the other's PCI). Linux was confusing the two. I could've fixed that Saturday evening, I grant you. I had previous engagements and better things to do the last few days though.</p><br><p>Finally, Bellsouth seems to be suffering more DNS outages over the last few days which caused a bit of chaos here. Anyone who has experienced this or has any questions about it feel free to ask me. If you are having DNS issues, I advise setting your secondary DNS to one of the <a href="http://www.opendns.org/">OpenDNS</a> servers or getting one of your friends to do so.</p><br><p>EDIT: This was originally written on Tuesday the 27th. Further delays were experienced due to internal political issues in the house but all is now resolved and the site has been up since last night. A blog entry with photos of the house is planned for later today.</p>


title: Dozing Off
date: 2014-05-07 15:13:00.000000
format: md
content:
  Life is going pretty well. Norma and I have moved into a new
  apartment. I'm figuring out how to balance work and my other goals. My
  student loans will be paid off by my 28th birthday in August.

  I decided to work from home today. I slept poorly, I think it's the
  pollen. I've been thinking a lot about what I want lately. Neither
  Academia nor Industry quite seem to fit. Academia only cares about
  work that advances the state of the art in specific subfields,
  Industry only cares about work that advances the bottom line.

  My goals don't quite fit in with either of those things. I want to
  write software to help people understand
  [how other software works][comprehensible].
  Specifically, a Nintendo Emulator and set of tools for observing and
  modifying old games on the fly. And so I find myself thinking about
  how to work fewer hours so I can find more time for my 'art projects'
  without sacrificing hobbies, relationships, and a social life.

  I've been too drowsy today to get meaningful work done on work or
  hobby projects, but here's what I thought about in the shower:

  * I should add a proper JIT compiler to cl-6502 that uses the
    "compile-to-closures" technique described by [xach][xach-closures].
  * I should fix [trowel][trowel] so that it can correctly compute the
    control flow graph of simple (NROM) NES games that aren't
    self-modifying. Like I meant to do [last summer][lisprojects].
  * I should implement the [UNROM mapper][unrom] for [famiclom][famicl]
    using neth, sprocketnes, or tenes for reference if needed. That way,
    I could play with Mega Man 1 and its [annotated code][mm1.dis] in
    addition to [Super Mario Bros][smb.dis].
  * I should start on a lispy macroassembler/compiler to 6502 because
    there are idioms to capture in these games and [neslisp][neslisp]
    isn't gonna cut it.
  * Also, I thought about adding crossposting support and 'embeddables'
    to [coleslaw][clsw] briefly but that doesn't count. That's my one
    halfway 'practical' piece of software. People do like to blog.

  Seriously, is there somewhere I can do an MFA but really just write
  weird artsy software for 2 years?

  Oh, well. Time to take a nap and then try to write some code to find
  Biconnected Components in C again.

  [comprehensible]: http://blog.redlinernotes.com/posts/Towards-Comprehensible-Computing.html
  [xach-closures]: http://xach.livejournal.com/131456.html
  [lisprojects]: http://blog.redlinernotes.com/posts/My-Lisp-Summer-Project.html
  [famicl]: https://github.com/redline6561/famiclom
  [trowel]: https://github.com/redline6561/trowel
  [clsw]: https://github.com/redline6561/coleslaw
  [unrom]: http://wiki.nesdev.com/w/index.php/UxROM
  [mm1.dis]: http://bisqwit.iki.fi/jutut/megamansource/maincode.txt
  [smb.dis]: https://gist.github.com/1wErt3r/4048722#file-smbdis-asm
  [neslisp]: http://freecode.com/projects/neslisp


title: Dreams and Schemes
date: 2007-10-22 02:51:17.000000
format: html
content:
  Of late, I'm not sure what I aspire to.<br><br>There are things that I'm certainly interested in and want to do. I also really would like to have a fairly deep understanding of computing and a good ability to program.<br><br>It's funny. I have a feeling the way you end up great is by not trying to be great. I have a feeling you end up being great by not caring about greatness too much and just doing what you love. And I'm still not sure how much I love programming. I'm certainly unsure I love being taught it. But I've always preferred self-teaching with computers.<br><br>Your thoughts?


title: E-mails on Wordpress
date: 2008-03-05 04:54:12.000000
format: html
content:
  <p>For those who don't know, <a href="http://www.wordpress.org/">Wordpress</a> is the blogging software I run on <a href="http://www.redlinernotes.com/">my server</a>. Whenever a comment is left though if it passes through my spam filters it goes to a moderation queue to be approved by me. This is practical for two reasons: 1) In spite of my spam filter (<a href="http://en.wikipedia.org/wiki/Akismet">Akismet</a>) being competent, it's not perfect and stuff still slips through. 2) I have low enough traffic that I can keep up with the moderation queue pretty closely.</p><br><p>However, until today there was a drawback to this. Wordpress is supposed to send out e-mails for various reasons but it never worked and the reason is that the program it needed to send mail (called sendmail, cleverly enough) I didn't install by default with Ubuntu 6.06 Server (now upgraded to 8.04). </p><br><p>Now, <a href="http://en.wikipedia.org/wiki/Sendmail">sendmail</a> is not a mail client like Outlook, Thunderbird, or iMail. It's a <a href="http://en.wikipedia.org/wiki/Mail_transfer_agent">MTA</a> (Mail Transfer Agent) and frankly I have no desire to run an MTA on my server. That's overkill and it's just one more thing that can get hacked. So today, I did two things. 1) Set up ssmtp as an alternative that pushes everything to my gmail account. 2) Installed a plugin so I get notifications whenever a comment is in the moderation queue and the user gets an e-mail letting them know too.</p><br><p>Here's how I did it:<br /><br>For the debian-based kids, try running:</p><br><pre><br>sudo apt-get install ssmtp</pre><br><p>After that completes, you're going to want to:</p><br><pre><br>sudo nano /etc/ssmtp/ssmtp.conf</pre><br><p>There are six values you'll want to change in here and they should look like the following:<br /><br><br>mailhub=smtp.gmail.com:587<br>AuthUser=youremail@gmail.com<br>AuthPass=pass<br>UseSTARTTLS=YES<br>hostname=machinehostname<br>FromLineOverride=YES</p><br><p>From there you'll want to hit Ctrl-O Ctrl-X to save and exit. After that you'll need to tell your php configuration to use ssmtp instead of the default (sendmail). So type:</p><br><pre><br>sudo nano /etc/php5/apache2/php.ini</pre><br><p>and hit Ctrl-W, then type sendmail and hit enter to search for sendmail in the document. You should find something called sendmail_path, modify it to look like:<br /><br><code>sendmail_path = /usr/sbin/ssmtp -t -i -au username -ap password -am LOGIN</code></p><br><p>Restart your Apache server to take advantage of the changes by typing:</p><br><pre><br>sudo /etc/init.d/apache2 restart</pre><br><p>Finally, download <a href="http://weblogtoolscollection.com/b2-img/2007/03/modnotifyauthor.zip">this</a> to your server and unzip it into /wordpress_root/wp-content/plugins and activate it in the plugins menu. That's it!</p><br><p>References:<br /><br><a href="http://www.igvita.com/2007/08/29/ssmtp-relay-mail-delivery-in-rails/">SSMTP Gmail Guide</a><br /><br><a href="http://www.davidhurst.co.uk/2007/06/19/php-mail-and-ssmtp-on-debian-linux/">SSMTP Guide for PHP on Debian/Ubuntu</a><br /><br><a href="http://weblogtoolscollection.com/archives/2007/03/15/wp-plugin-notify-author-on-comment-moderation/">Wordpress Plugin</a></p>


title: Eat Food, Sleep, Have Visions
date: 2008-09-12 16:19:27.000000
format: html
content:
  Wow. What a day. I've been managing to keep fairly busy lately but also enjoying myself a good deal. So what's in store today? A word about music, a bit about games, some programming thoughts (on Factor and Common Lisp) and a mention of RedLinux.<br><br>Music: <a href="http://en.wikipedia.org/wiki/Four_Tet">Four Tet</a> has been making me really happy for the past 24-48 hours. I've known and liked Four Tet for a few years now but I think just how good he is at what he's doing only hit me recently. Two tracks did the trick for me and both are off his album Everything is Ecstatic. One is titled 'Smile Around The Face' and the other is titled 'And Then Patterns'. I'm posting a streaming link to 'Smile Around The Face' because it's awesome. There's a pretty interesting list of his 9 most influential records <a href="http://www.boomkat.com/article.cfm?id=15">here</a> and some interviews <a href="http://www.guardian.co.uk/music/2003/dec/12/1">here</a> and <a href="http://www.themilkfactory.co.uk/interviews/fourtetiw.htm">here</a> that I may read later. As a sidenote, I'm jealous of all those NCF kids and their Walls. I want to throw a wall. If I did though I'd probably be silly/lame and try to sneak this track in...<br><br><div align="center"><style type="text/css"> @import url(http://skreemr.com/styles/embed.css);</style><table cellpadding="0" cellspacing="0"><tr> <td WIDTH="16" CLASS="sk-topleft"><img style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topleft.gif"/></td> <td CLASS="sk-toprow">Four Tet - Smile Around The Face</td> <td WIDTH="16" CLASS="sk-topright"><img style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topright.gif"/></td></tr><tr VALIGN="MIDDLE"> <td WIDTH="16" CLASS="sk-lightleft3"/> <td CLASS="sk-lightback3"> <embed class="SkreemRPlayer" wmode="transparent" style="height:24px;width:290px;" src="http://skreemr.com/audio/player.swf" quality="high" bgcolor="#ffffff" width="290" height="24" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="playerID=1&bg=0xCDDFF3&leftbg=0x357DCE&lefticon=0xF2F2F2&rightbg=0xF06A51&rightbghover=0xAF2910&righticon=0xF2F2F2&righticonhover=0xFFFFFF&text=0x357DCE&slider=0x357DCE&track=0xFFFFFF&border=0xFFFFFF&loader=0xAF2910&soundFile=http://www.bighassle.com/mp3/newbrmWEBsong/02%20Smile%20Around%20The%20Face.mp3"></embed> <img style="padding:0;border:0;vertical-align:bottom" src="http://skreemr.com/images/skreemr_logo_small_name_only.png"/> </td> <td WIDTH="16" CLASS="sk-lightright3"/></tr><tr><td WIDTH="16"><img style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomleft.gif"></td><td CLASS="sk-bottomrow">Found at <a href="http://skreemr.com/link.jsp?id=6A5D475D525B&source=embed">skreemr.com</a></td><td WIDTH="16"><img style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomright.gif"></td></tr></table></div><br><br>Games: I've been saying that one of my favorite things about the new game consoles is the downloadable games. Xbox 360 and PS3 seem particularly strong in this category to me though the Wii has old mainstays from Nintendo lore to prop it up. I've already mentioned <a href="http://redlinernotes.com/blog/?p=641">echochrome</a> and <a href="http://redlinernotes.com/blog/?p=616">everyday shooter</a> here in the past and they're both quite good but I don't think I've mentioned <a href="http://en.wikipedia.org/wiki/Super_Stardust_HD">Super Stardust HD</a>. It has been and continues to be simply delightful. Some video tips on the game were recently released as a free downloaded on the PSN and convinced me to pick up the $4.99 single player expansion pack. They also released a free patch for the game so that you could play music off the PS3 hard drive once that functionality was possible through firmware updates. If anyone who has worked on the game is reading this: Excellent, excellent work guys. Really. This is how to build a title and continually improve it, create community, etc. I look forward to your future releases.<br><br>Languages: I'm going to separate my blathering here into sub-ramblings based upon the language concerned. First up, <a href="http://en.wikipedia.org/wiki/Common_Lisp">Common Lisp</a>. I've been having some fun working with a friend to get a simple Gmail scraper/wrapper API developed in Common Lisp that would allow me to connect to accounts grab and compose messages, etc. We were relying on a CL library named mel-base to achieve this. I've been doing development locally and in the process gotten a bit more familiar with <a href="http://www.sbcl.org/">SBCL</a>, <a href="http://common-lisp.net/project/slime/">SLIME</a> and <a href="http://www.cliki.net/ASDF-Install">ASDF-Install</a>. I've definitely come around to the idea that there is a place for both Common Lisp and Scheme which I, in misguided form, <a href="http://redlinernotes.com/blog/?p=668">derided some time back</a>. There are certainly pros and cons to each. At any rate, the combination of ASDF-Install, SBCL and SLIME is pretty great. That said, I realized after a bit of tinkering that mel-base lacks SSL support even here in 2008. That means it won't work with most (if not all) of today's web-based e-mail services which require SSL to encrypt the connection to the server (you know, so people can't steal your password and e-mails). I'm quite surprised it isn't there by now but assume the maintainer has been busy. Luckily, there is a CL library for SSL called CL+SSL, appropriately. I'm very tempted to find a way to patch SSL support (with a dependency on CL+SSL, of course) into the POP3, IMAP and SMTP folders in mel-base and contribute the patch upstream for the next release. I have no idea what I'd be doing really and I'm fairly intimidated but it seems like a good start and a reasonable place to help and try my hand. There are <a href="http://redromelogic.com/blog/display?id=19">some other people who have pursued this</a> though that I should get in touch with first to make sure no patches are already in circulation for SSL. Next up, <a href="http://en.wikipedia.org/wiki/Factor_programming_language">Factor</a>. I've been interested in <a href="http://en.wikipedia.org/wiki/Concatenative_programming_language">stack-based languages</a> since I first learned of them and still am quite intent on learning <a href="http://en.wikipedia.org/wiki/Forth_(programming_language)">Forth</a> in the near future. Possibly as my first non-lisp language. I stumbled into some blog entries by Phil Dawes on <a href="http://www.phildawes.net/blog/2007/11/23/the-factor-attraction/">why he likes Factor</a> and <a href="http://www.phildawes.net/blog/2008/03/12/beginning-factor-is-like-programming-assembler/">has enjoyed learning it</a>. He also has <a href="http://www.phildawes.net/blog/2008/04/08/digging-into-factors-compiler/">an excellent post digging down into the versatility and usefulness of the compiler</a>. Speaking of which, the <a href="http://planet.factorcode.org">Planet Factor</a> blog offers some of the clearest insight into the development and internals of a programming language I've ever read, particularly one as young as Factor. Keep an eye on this one. You've got one more year, Slava. I want my 1.0.<br><br>RedLinux and Logos: I'm solidifying "plans" for the v.08 update to RedLinux. You can catch a glimpse <a href="http://www.redlinernotes.com/docs/redlinux/changelog.txt">at the changelog</a>. I also have some logo designs (Thanks, Neil!) for <a href="http://www.redlinernotes.com/images/lambdabang/">the lambdabang</a>, I just need to decide on size and color. Once I get a logo for RedLinux, I'll start working on the web page for it and get the ISOs up. End of September? We just might be able to do that.


title: Education
date: 2008-11-04 04:11:06.000000
format: html
content:
  I've received and/or stumbled over a lot of great education links over the past 6-9 months. Most of them come from <a href="http://williamhalliburton.com/">William Halliburton</a> but a few are from other places.<br><br>Let's start out with the famous <a href="http://www.ted.com/index.php/talks/ken_robinson_says_schools_kill_creativity.html">Ted Talk by Sir Ken Robinson</a> and <a href="http://www.spinninglobe.net/againstschool.htm">John Taylor Gatto's Against School</a>.<br>Then it's time for a good dose of <a href="http://www.infed.org/thinkers/et-illic.htm">Ivan Illich</a>, say his work <a href="http://www.preservenet.com/theory/Illich/Deschooling/intro.html">Deschooling Society</a>. And generally, anything from the site <a href="http://infed.org/">infed.org</a>.<br>Finally, some <a href="http://en.wikipedia.org/wiki/Pedagogy_of_the_Oppressed ">Pedagogy of the Opressed</a> should be <a href="http://web.archive.org/web/20070920153809/http://marxists.anu.edu.au/subject/education/freire/pedagogy/index.htm ">absorbed</a>. Mmmm. Good thought food right?<br><br>Now what?<br>If you've actually read all this and you're a computer nerd it's worth thinking about how to use computers and actually <em>implement this damn stuff</em>.<br>Start with John Wiley's <a href="http://opencontent.org/docs/ososs.pdf">Online Self-Organizing Social Systems</a> paper. <a href="http://opencontent.org/">John Wiley's site</a> is full of good resources and <a href="http://opencontent.org/blog/">his blog</a> and <a href="http://opencontent.org/docs/">other papers</a> are good as well. It might be worth reading a bit about <a href="http://instructor.aviation.ca/content/view/140/75/">Connectivism</a> here too.<br><br>I'm not as much of a fan of <a href="http://en.wikipedia.org/wiki/Learning_object_metadata">Learning Object Metadata</a> as a solution but it's a prominent idea so you're best off at least being <a href="http://ltsc.ieee.org/wg12/">familiar with it</a>. Finally, it's good to be familiar with what others have done that's already out there so have a look at the <a href="http://openlearn.open.ac.uk/ ">Open University</a>, <a href="http://schoolofeverything.com/">School of Everything</a> and <a href="http://www.learnhub.com/">Learnhub</a>. Let me know your thoughts.


title: Eighth Friday Linux Lesson
date: 2007-07-07 01:42:00.000000
format: html
content:
  Okay. So I was having a really hard time thinking of what to cover this week and ran this command "  <span id="st" name="st" class="st">history</span> | awk '{print $2}' | awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c | sort -n | tail | sort -nr" on the command line to see what commands I use the most. Long story short that gave me an idea for what to do this week.<br><br>This week's concept is that of process management. Process management is what happens when you hit control-alt-delete in Windows to end task on that stupid program that just won't close. The concept is analogous in Linux. Occasionally something gets so out of line that you just have to beat it over the head and tell it to go away. It's also nice to be able to tell what is really eating your system resources.<br><br>So, there are two commands for this week. "ps" and "kill". "ps" lists all active processes when run with the -ax arguments like so: "ps -ax". This gives you a nice list of all processes running and their associated pid (process id numbers). Those id numbers can be passed to "kill" to kill the associated process like so: "kill your_idnumber". It's that easy. The process should cough and wheeze and go down pretty quick and that tends to be a good feeling when it's pissed you off enough to kill it in the first place. So, there you are. That's really all I've got for this week. I'm pretty out of it and uninspired of late. If anyone has any ideas or suggestions feel free to pass them along.


title: Eighth Monday Update
date: 2007-07-02 15:43:00.000000
format: html
content:
  Summer: Week 7: Finished<br><strike>TVS<br>Call Sonya<br>SPSU Orientation<br>Gym<br>Ubuntu Gutsy Alpha 2 Install.<br>Banking<br>Buy Server<br>Work on Server<br>Hang out with Justin/Bria</strike><br>Unexpected: Hard but necessary conversation with Sonya, Good excuse to view office space and subsequent viewing, Actually getting site up.<br><br>Summer: Week 8: Schedule<br>Monday<br>TVS<br>See Ember?<br>Josh's Birthday Party<br>Tuesday<br>TVS<br>Gym<br>Site<br>Reading<br>FFXII?<br>Wednesday<br>Liz's July 4th party.<br>Site<br>FFXII<br>Reading?<br>Thursday<br>TVS<br>Lunch with Eric and Aaron at Mellow Mushroom @ 11:45. Hells Yeah!<br>Gym<br>Friday<br>SPSU run around. Figure out credits. Ew.<br><br>News for 7/2/07:<br><a href="http://en.wikipedia.org/wiki/IPhone">The iPhone happened</a>. Yes, it did. It wouldn't be fair of me to pretend this isn't (at least in my circles) news. I think things are being blown out of proportion and that the iPhone isn't as cool as some <em>other efforts</em> (ahem) but it's news.<br><a href="http://www.openmoko.org">OpenMoko</a> finally made <a href="http://lists.openmoko.org/pipermail/announce/2007-June/000013.html">a progress update</a> on the announce-list slating the phone to be released in October for $450. Mark me down, please. The more I see and read the more excited I get. This thing is going to be awesome!<br><a href="http://www.mesa3d.org/relnotes-7.0.html">Mesa 7.0 finally hit</a>. OpenGL 2.1 here we are. 3.0 here we come!<br><a href="http://www.pcsx2.net/">PCSX2 has also released a bit of an update</a> stating that the upcoming version will prefer a new BIOS dump which allows for more complete emulation. Curious.<br><a href="http://www.winehq.org/?announce=0.9.40">Wine version 0.9.40 has been released</a> with lots of DirectX improvements. Keep hammering away!<br><a href="http://www.fsf.org/news/gplv3_launched">GPLv3 released</a>. It's impossible to say that's not significant even if it's immediate ramifications are uncertain or minor.<br><a href="http://abock.org/2007/06/27/my-hack-week-the-new-banshee/">Some really interesting hack work is being done on Banshee</a>. If all pans out it might beat out Rhythmbox and Quod Libet and Songbird as my next Music Player/iTunes replacement/software-thingy.<br>Some <a href="http://www.technologyreview.com/Infotech/18970/">Intel researchers are looking at potential algorithms to add resolution to video</a> in real-time with massively parallel systems.<br>Biomimicry is back again as we use <a href="http://www.technologyreview.com/Nanotech/18966/">carbon nanotubes to make substances as sticky as gecko's feet</a>.<br><a href="http://www.technologyreview.com/Biotech/18988/">In a staggering achievement, scientists at the J. Craig Venter Institute have transplanted an entire intact genome from one organism to another</a>. However you want to look at it, the ability to force an organism to change species is a pretty huge achievement on any scale.<br>Finally, <a href="http://www.sciencedaily.com/releases/2007/06/070628183428.htm">Ohio University Researchers have created some really cool nanofibers</a>. Seriously, this might be one of the more exciting things I read this week.


title: Eighth Thursday Literary Lines
date: 2007-07-05 21:40:00.000000
format: html
content:
  More Milosz today. I don't know. I'd swear it's good for the soul. I also feel so...illiterate posting Milosz all the time. It's just good for me though. Anyway, I've always loved this one and it seems particularly relevant today. What do you guys think?<br><br>Temptation<br>Under a starry sky I was taking a walk,<br>On a ridge overlooking neon cities,<br>With my companion, the spirit of desolation,<br>Who was running around and sermonizing,<br>Saying that I was not necessary, for if not I, then someone else<br>Would be walking here, trying to understand his age.<br>Had I died long ago nothing would have changed.<br>The same stars, cities, and countries<br>Would have been seen with other eyes.<br>The world and it's labors would go on as they do.<br><br>For Christ's sake, get away from me.<br>You've tormented me enough, I said.<br>It's not up to me to judge the calling of men.<br>And my merits, if any, I won't know anyway.


title: Eighth Tuesday Quotables
date: 2007-07-04 03:44:00.000000
format: html
content:
  "Meaning and value depend on human mind space and the commitment of time and energy by very smart people to a creative enterprise. And the time,  energy, and brain power of smart, creative people are not abundant. These are the things that are scare, and in some sense they become scarcer as the demand for these talents increases in proportion to the amount of abundant computing power available." - Steven Weber<br><br>"Let me go out on a limb and suggest that those who see hints of a new class ideology developing around information technology are not necessarily wild-eyed. "Bit-twiddlers" are neither exactly proletariat nor bourgeoisie. They may not own the means of production in the sense that Marx argued, but they certainly do have significantly control over those means, in a more profound way than the term "symbols analysts" or "knowledge workers" captures. As a rough generalization, they value science and technological problem-solving elegance equally at least with profit." - Steven Weber<br><br>"Each member of society can have only a small fraction of the knowledge possessed by all, and...each is therefore ignorant of most of the facts on which the working of society rests...civilization rests on the fact that we all benefit from knowledge which we do not possess. And one of the ways in which civilization helps us to overcome that limitation on the extent of individual knowledge is by conquering intelligence, not by the acquisition of more knowledge, but by the utilization of knowledge which is and which remains widely dispersed among individuals." - Friedrich Hayek


title: Eighth Wednesday Songs of Summer
date: 2007-07-04 18:35:00.000000
format: html
content:
  Incubus - Are You In<br>The Sea and Cake - Four Corners<br>Outkast - Rosa Parks<br>Jump, Little Children - Too High<br>Ratatat - Nostrand


title: Eleventh Friday Linux Lesson
date: 2007-08-03 13:14:05.000000
format: html
content:
  Hell with it. How's this for a Linux Lesson?<br><br><img src="http://fosswire.com/wp-content/uploads/2007/08/fwunixrefshot.png" title="Linux Commands" alt="Linux Commands" align="middle" height="595" width="460" />


title: Eleventh Monday Update
date: 2007-07-30 13:14:10.000000
format: html
content:
  Summer: Week 10: Finished<strike><br>Call Sonya<br>Apple Interview at Noon<br>Laundry<br>Bank<br>Call SPSU about housing with Burke<br>Order Justin's Birthday Present<br>Gym<br>Figure out what happened to my paycheck<br>TVS<br>Import Livejournal into new Blog</strike><br>Unexpected: Get MP3 player, begin standard summer music library overhaul.<br><br>Summer: Week 11: Schedule<br>Monday<br>Finish Music work on Zen Vision MP3 Player<br>Gym<br>Read Rebel Code or Java Illuminated<br>Acquisition Laptop. Load Ubuntu Gutsy Alpha 3.<br>Tuesday<br>TVS<br>Read More<br>Work on Laptop. Start Java Programming?<br>Wednesday<br>TVS<br>Gym<br>Thursday<br>TVS<br>Friday<br>See Rick at Noon<br>Chill<br>Gym<br><br>News for 7/30/07:<br><a href="http://www.reactos.org/en/newsletter_29.html">ReactOS has released 0.3.3 RC1</a> and are seeking testers.<br><a href="http://www.winehq.com/?announce=0.9.42">The WINE guys have just released 0.9.42</a>.<br>Some preliminary work on getting the "Free Java" <a href="http://www.advogato.org/person/jserv/diary.html?start=6">Cacao JVM to run on OpenMoko</a> has been done.<br>Microsoft has submitted their "Shared Source" license to OSI for review in an effort to try to get in on the Open Source game. Naturally, <a href="http://effiejayx.wordpress.com/2007/07/27/no-i-dont-want-to/">some debate</a> and <a href="http://tirania.org/blog/archive/2007/Jul-27.html">differing views</a> have emerged. We'll see what happens.<br>Scientists at <a href="http://www.technologyreview.com/read_article.aspx?id=19108">Berkeley have managed to coerce nanostructures into self-assembling.<br></a><a href="http://www.technologyreview.com/Biztech/19095/page2/">Thin Film Solar has had a breakthrough</a> making it commercially viable.<br>Finally, <a href="http://www.technologyreview.com/Biztech/19109/page2/">a number of former Xerox PARC researchers are trying to be first to market with a Natural Language Search Engine</a>.


title: Emacs and MIT-Scheme on Hardy
date: 2008-04-21 17:55:30.000000
format: html
content:
  <p>Okay, quick update. The <a href="http://www.redlinernotes.com/blog/?p=896">feature I'm missing from edwin</a> has a name and that name is "Scheme Interaction Mode". This feature is provided in Emacs by using <a href="http://ftp.gnu.org/gnu/mit-scheme/utilities.pkg/xscheme.el">xscheme.el</a>. Just <a href="http://www.redlinernotes.com/blog/?p=878">replace (require 'quack) with (require 'xscheme)</a> in your .emacs file. Unfortunately, xscheme only works with MIT-Scheme so as far as I can tell there isn't a general purpose Scheme Interaction Mode for Emacs that works across Schemes. I'll dig around more about that. In the mean time, I got MIT-Scheme to work on Hardy by compiling from the portable C on their website as described <a href="http://www.gnu.org/software/mit-scheme/liarc-build.html">here</a>. It took over an hour though. It's not a solution I'm too pleased about and half makes me want to downgrade to Gutsy or switch to a distro that has support for MIT-Scheme altogether. At any rate, more on all this down the line.</p>


title: Encounters with an XO
date: 2008-04-15 03:28:56.000000
format: html
content:
  So, I recently received my <a href="http://laptop.org/laptop/">OLPC XO</a>. After playing with it a bit I'm pleased with it but I don't think that has terribly much to do with the device itself. I didn't really buy it to support One Laptop Per Child though I think the idea of a small, comprehensible system would go a long way towards engendering a new generation of hackers the way something like the <a href="http://en.wikipedia.org/wiki/Commodore_64">Commodore 64</a> or <a href="http://en.wikipedia.org/wiki/Amiga">Amiga</a> did. OLPC: Way more hardcore than your middle school's Laptop Program. It is a goal I can identify with and support but I did this because I think it's a neat piece of hardware produced by passionate people. It may not be <a ref="http://dlweinreb.wordpress.com/2007/11/20/xo-the-next-lisp-machine/">the next Lisp Machine</a> but it's pretty cool nonetheless.<br><br><img src="http://www.redlinernotes.com/images/XO_Excitement.jpg" /><br><br>I was ecstatic when I got the thing. Naturally, I fiddled with the initial setup a bit but quickly wanted to move on to other things, namely emacs and lisp since I'm working through <a href="http://www.redlinernotes.com/blog/?cat=4">SICP</a> at the moment. It was trivial to use yum to install emacs-nox and also quite straightforward to set up quack. What surprised me was how easy it was to compile Gambit on the XO <a href="http://bc.tech.coop/blog/080111.html">as seen on Bill Clementson's blog</a>.<br><br><img src="http://www.redlinernotes.com/images/XO_Lambda.jpg" /><br><br>Once that was done two things really started to eat at me. 1) I wanted to try getting a Debian-based install running on the XO. 2) I wanted a different Window Manager. I just am not comfortable with Sugar for some reason and I definitely wanted a browser with tabs. Looking into getting Debian going on the XO made me realize that <a href="http://wiki.laptop.org/go/Activation_and_Developer_Keys">getting a developer key</a> was my first priority and I'd advise anyone with an XO to do it. Then you can play with the Forth prompts at boot, etc.<br><br><img src="http://www.redlinernotes.com/images/XO_Boot.jpg" /><br><br>As for <a href="http://en.wikipedia.org/wiki/Window_manager">Window Managers</a>, I've always had a bit of a fetish for them. Of late, I've been meaning to try out a <a href="http://en.wikipedia.org/wiki/Tiling_window_manager">tiling window manager</a> and I got my choices down to <a href="http://www.nongnu.org/ratpoison/">ratpoison</a> (which has the most bad ass <a href="http://www.nongnu.org/ratpoison/keyboards/">supported hardware page</a> ever), <a href="http://www.suckless.org/wiki/dwm">dwm</a>, and <a href="http://xmonad.org/">Xmonad</a>. For a variety of reasons, I'm itching to try Xmonad on one of my boxes soon but that will have to get in line behind setting git up on my blog server. At any rate, Xmonad is pretty awesome and <a href="http://xmonad.org/images/photo-cjb-olpc.png">it runs on the XO</a>. I'm not sure how much of it is Haskell Voodoo and how much of it would be beginner-friendly but I'm sure that a full-featured 1200-line Window Manager has something to teach. I'll be keeping my eye on the <a href="http://book.realworldhaskell.org/">upcoming book</a>. More on all that later.<br><br>I read somewhere on laptop.org that they'll rebase a later build on FC9. I hope it's started before F10 hits and I hope that by F10 the <a href="http://fedoraproject.org/wiki/Features/GoodHaskellSupport">'Good Haskell Support' ticket</a> gets completed. Long story short, I ran olpc-update debian-big on the XO and found that it's not really what I'm looking for. I'll probably later get Xubuntu Hardy on a Flash Drive and then replace the Window Manager with Xmonad but until then Sugar will be fine.<br><br>So, aside from my inane banter, is the XO any good? Well, good for what? The stock configuration is good for a limited set of uses but I imagine it'd be great for kids or if, like Luke Gorrie, you're hacking Forth.<br><br><img src="http://www.redlinernotes.com/images/XO_SD.jpg" /><br><br>An oft overlooked ability of the XO is it's SD expansion slot. If I was looking to do serious programming on it I'd slap the biggest SD card I could in there and hit the road. As long as what you're doing doesn't eat processor and RAM like crazy and you can port your tools over, it's a great travel box. Your hands will get used to the keyboard...eventually.<br><br><img src="http://www.redlinernotes.com/images/XO_Keyboard.jpg" />


title: Endless Blather
date: 2009-03-26 02:55:34.000000
format: html
content:
  This post has everything.<br><br>It seems like a lot has happened in the past day or two. I'm all wrapped up preparing for a test tomorrow but there are other interesting things afoot. <a href="http://redlinernotes.com/images/teresa.jpg">Teresa</a> turned 20 today and there's going to be a party in her honor on Sunday. <a href="http://kernelnewbies.org/Linux_2_6_29">Kernel 2.6.29</a> has been released, it turns out <a href="http://www.codemonkey.org.uk/2009/01/18/forthcoming-p4clockmod/">cpufrequtils was never really doing anything</a> and <a href="http://www.digitalsomething.com/news/2077.html">Skate 2 finally got a patch enabling custom soundtracks</a>. EA Blackbox, even though you're two months late I'll take back some of those mean things I said. Speaking of games, someone <a href="http://www.gamefaqs.com/console/ps3/file/943711/56008">finally wrote a Fei Long Guide for SFIV</a>. It should hold some good lessons but I think I've got a lot of it down by this point.<br><br>I've got the webserver setup to play around with <a href="http://weblocks.viridian-project.de/documentation">weblocks</a>, <a href="http://planet.plt-scheme.org/package-source/vegashacker/leftparen.plt/4/1/planet-docs/leftparen/index.html#(part._tutorials)">leftparen</a> and <a href="http://tutorial.happstack.com/">happstack</a>. Hopefully one day I'll actually spend some time on that. It would be nice <a href="http://weblocks.viridian-project.de/installation">if weblocks was asdf-installable</a>. I don't know.  Maybe I'll just prototype GUIs in <a href="http://www.call-with-current-continuation.org/eggs/3/qt.html">Chicken Scheme</a>, <a href="http://common-lisp.net/project/commonqt/">Common Lisp</a> and <a href="http://wiki.python.org/moin/PyQt4">Python</a>. QT seems to be the cross-platform GUI toolkit of choice. It's the only one with recent bindings for all three languages.<br><br>Oh, before I forget, if you're interested in the best general write-up on SSDs I've yet seen you should <a href="http://www.anandtech.com/storage/showdoc.aspx?i=3531">read this article</a> from Anandtech. Generally I prefer the stuff at <a href="http://arstechnica.com">Arstechnica</a> but I've yet to see anyone with an article this thorough and excellent on SSDs. Well done, guys. Speaking of which, OCZ Vertex 120GB are under $400. OCZ, you've earned my faith by this one. I'll choose you guys when I have cash to blow via pricegrabber.<br><br>There are endless good recipes on the Pioneer Woman's website. I had an abundance of Chicken, I check under Entrees->Chicken and find Braised Chicken and Parmesan Crusted Chicken. I've tried the <a href="http://thepioneerwoman.com/cooking/2009/02/parmesan-crusted-chicken/">Parmesan Crusted Chicken</a> and the <a href="http://thepioneerwoman.com/cooking/2009/03/braised-chicken/">Braised Chicken</a>. The Parmesan Crusted Chicken was pretty fantastic. Braised Chicken was tasty but I didn't like it as much.<br><br>The <a href="http://www.reddit.com/r/programming/comments/84uqb/ask_proggit_what_is_the_best_language_to_use_for/">arguments about concurrent and parallel programming are ongoing</a>. <a href="http://hackage.haskell.org/trac/ghc/">GHC is planning a new release for Autumn</a>. I really hope the <a href="http://haskell.org/haskellwiki/Haskell_Platform">Haskell Platform</a> is off the ground by then. Also, if you use Xmonad there's a good guide to Urgency Hooks <a href="http://braincrater.wordpress.com/2009/03/14/pimp-your-xmonad-4-urgency-hooks/">here</a>. Open Source development is still being thoughtfully explored. See, <a href="http://www.linuxjournal.com/content/free-beer-economy">The Free as in Beer Economy</a> and <a href="http://freesouls.cc/">Freesouls</a>.<br><br>The International Lisp Conference '09 has been going on and different people have said different things about it. Andy Wingo seems to have some <a href="http://wingolog.org/archives/2009/03/23/international-lisp-conference-day-one">decent</a> <a href="http://wingolog.org/archives/2009/03/24/international-lisp-conference-day-two">writeups</a>. Sadly, some of the things he say make me think of what Paul Snively said in <a href="http://www.cliki.net/Paul%20Snively">his Road To Lisp survey</a> (which I realize is likely quite dated), "My own thinking is that Lisp is the cockroach of programming languages: it'll be the only one left after the apocalypse. Not bad for a dead language." Maybe in a few decades I can hope I don't suffer <a href="http://www.overcomingbias.com/2009/03/echo-chamber-confidence.html">the bias of echo chambers</a>. Maybe not.<br><br>Last but not least I'll just note that I'm really enjoying Elbow tonight while doing math. Really enjoying it.<br><br><div align="center"><style type="text/css"> @import url(http://skreemr.com/styles/embed.css);</style><table cellpadding="0" cellspacing="0"><TR> <TD WIDTH="16" CLASS="sk-topleft"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topleft.gif"/></TD> <TD CLASS="sk-toprow">Elbow - Weather To Fly</TD> <TD WIDTH="16" CLASS="sk-topright"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topright.gif"/></TD></tr><TR VALIGN="MIDDLE"> <TD WIDTH="16" CLASS="sk-lightleft3"/> <TD CLASS="sk-lightback3"> <embed class="SkreemRPlayer" wmode="transparent" style="height:24px;width:290px;" src="http://skreemr.com/audio/player.swf" quality="high" bgcolor="#ffffff" width="290" height="24" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="playerID=1&bg=0xCDDFF3&leftbg=0x357DCE&lefticon=0xF2F2F2&rightbg=0xF06A51&rightbghover=0xAF2910&righticon=0xF2F2F2&righticonhover=0xFFFFFF&text=0x357DCE&slider=0x357DCE&track=0xFFFFFF&border=0xFFFFFF&loader=0xAF2910&soundFile=http://moviesofmyself.typepad.com/home/files/06_weather_to_fly.mp3"></embed> <img style="padding:0;border:0;vertical-align:bottom" src="http://skreemr.com/images/skreemr_logo_small_name_only.png"/> </td> <TD WIDTH="16" CLASS="sk-lightright3"/></TR><TR><TD WIDTH="16"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomleft.gif"></TD><TD CLASS="sk-bottomrow">Found at <a href="http://skreemr.com/link.jsp?id=6B524355525A66&source=embed">skreemr.com</a></TD><TD WIDTH="16"><IMG style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-bottomright.gif"></TD></TR></table></div>


title: Endorsements
date: 2008-11-04 03:11:01.000000
format: html
content:
  This wasn't on my list of things to post about tonight but...here I am anyway. Everyone seems to be writing an endorsement but I won't write my own. Many others have expressed my views in a much more elegant prose than I could muste. I will be voting for Obama tomorrow though and I'd like to note a few of the endorsements I've read which I felt were significant.<br><br><a href="http://andrewsullivan.theatlantic.com/the_daily_dish/2008/11/barack-obama-fo.html">Andrew Sullivan</a><br><a href="http://www.politico.com/arena/perm/Cass_R__Sunstein_BDDDA786-0C3A-44E4-B22C-6FA964EB6199.html"> Cass Sunstein</a><br><a href="http://radar.oreilly.com/2008/10/why-i-support-barack-obama.html">Tim O'Reilly</a><br><a href="http://www.esquire.com/features/esquire-endorsements-2008/esquire-endorses-barack-obama?click=main_sr">Esquire</a><br><a href="http://www.economist.com/world/unitedstates/displayStory.cfm?story_id=12516666&amp;source=features_box_main">The Economist</a><br><br>Those meant something to me and have had some influence in my own decision. I'm not trying to sway anyone at this late date but I did want to make a statement of my own beliefs and thoughts on the matter, even if they're a scattered amalgamation of others thoughts. Please vote tomorrow in support of whichever candidate embodies your beliefs whatever they may be.<br><br>Edit: Aside from standard news, these links should prove useful for tracking the prediction markets as the election goes down. <a href="http://www.gigamonkeys.com/election/election.xul">The first</a> has more data but requires Firefox 3. The latter is <a href="http://www.xkcd.org/intrade/">free of such requirements</a>. They'll refresh themselves so don't wear out your reload button.


title: Euthanasia
date: 2008-07-07 14:24:37.000000
format: html
content:
  I am not opposed to it.<br>I lived fully and well,<br>spending time perched in<br>dogwoods and chairs to<br>try and learn the lessons<br>of machines, men and dogs<br>in their cacophonous chorus.<br><br>I am not opposed to it.<br>I eventually did settle<br>with my own thoughts<br>after years of combat.<br>I knew rebellion, fought<br>a long war and nurtured<br>a false hope. Thankfully<br>in the end my carapace<br>had been punctured.<br><br>I am not opposed to it<br>though I am weary of the<br>dignity and the chase.<br>Who are we to be so presumptuous?<br>Who are we to assume that in our<br>affairs we should be entitled to<br>the presentation, if not the<br>substance, for all our days?<br><br>I am not opposed to it<br>though nod to a fear and<br>hubris that is hard-argued<br>as judgment. Still, if for<br>a year I loved and loved well<br>then I need not keep those<br>cherished ones waiting.<br><br>I am not opposed to it.<br>I recognized early that time was<br>my valued asset and treated<br>it accordingly. I fought for<br>ground in a society enamored<br>with the ephemeral. I won.<br>Mistakes were made, the wrong<br>losses suffered and less than<br>the best gains accomplished.<br>But in the end, I stand by my time.


title: Everything in the World
date: 2008-10-12 05:08:07.000000
format: html
content:
  I can't believe it's already October. It seems like only yesterday that I decided to take a break from school. For that matter, it seems like only yesterday that I became unemployed...but this was week 3 and a pleasant week it was. I'm continuing to try and buckle down and be more productive in various ways in spite of the fact that I don't <em>really</em> need money for another month and a half or so. So, what's been going on of late?<br><br>The Employment World: My interview with <a href="http://www.kslaw.com/">King and Spalding</a> went pretty well. It was very straightforward and none of the technical questions were remotely difficult. By the sound of it, it will also pay more than my last job. That's a good and bad thing. It's good because a decent wage would be nice and my last job wasn't one in my opinion. It's bad because it may be more remedial than my last job. It's a little retroactively upsetting to realize that I'd be paid more here for what sounds like substantially less difficult technical work. We'll see. I also know it'll take a week or two before they let me know whether or not I'm on the list for an in-person interview. Thanks to everyone who asked about it and or wished me well. Devon and Don, I'm looking at ya'll.<br><br>The Education World: My friend Will keeps sending me awesome links to research, papers, sites and articles. I also had a fascinating conversation on schools and education with Oglethorpian Chris Latshaw and was reminded why I love Oglethorpe in the process. Conversations like those made the school worth it. I should get around to writing more about all that next week. Also, (to Will) I'm half-way through <a href="http://www.gigamonkeys.com/book/">Practical Common Lisp</a> and hung up on an element of the chat program. I'm being a sissy about e-mailing you questions. I'll write this one off soon, I promise but I'm just trying to wrap a sane Chat UI around the Spread library. I'll send more details soon. Finally, I've downloaded about 100GB of video lectures about coding and math this week. I spent an afternoon queuing them up and left it running a few days. Remember me <a href="http://redlinernotes.com/blog/?p=718">complaining about everything being in Real Format</a>? Well, I still won in the end. It wrapped up this afternoon. My apologies to the Internet Archive's <a href="http://www.archive.org/details/arsdigita">Ars Digita mirror</a>. They must feel violated.<br><br>The Linux World: The <a href="http://arstechnica.com/journals/linux.ars/2008/10/10/linux-kernel-2-6-27-officially-released">Linux Kernel version 2.6.27 was released Friday</a>. Development will start on 2.6.28 now. I'm excited about 2.6.28 because I'm hoping <a href="http://www.linuxfoundation.org/en/Linux_Weather_Forecast/filesystems#Btrfs">btrfs</a> gets pushed into mainline. That could take a little while but it's still fun. Also, this is the first time that release season has come around and I'm really not interested in Ubuntu or Fedora. <a href="http://www.archlinux.org/">Arch</a>/<a href="http://redlinernotes.com/blog/?p=723">RedLinux</a> has me pretty satisfied.<br><br>The Code World: There are some <a href="http://www.tele-task.de/page42_mode1_series653.html">really cool lectures at the S3 conference</a>. I <a href="http://redlinernotes.com/blog/?p=717">posted about it before</a> because Dan Ingalls presented the Lively Kernel but at this point I'm also really interested in the STEPS project and Ian Piumarta's work. Partially because I'm <a href="http://lukego.livejournal.com/16036.html">really jealous of Luke Gorrie</a>, again. And I hope that OLPC XO's really do become more reflective and Lisp Machine like. Beyond that, I stumbled on two web framework tutorials lately, neither of which I have the time to work through really. Sad. One is in <a href="http://www.bluishcoder.co.nz/2008/10/factor-web-framework-example.html">Factor</a> and the other is in <a href="http://docs.plt-scheme.org/continue/index.html">PLT Scheme</a>. Sexy!!!<br><br>The Friends World: Don Gerz has written a number of things that caught my eye lately. Particularly a <a href="http://dongerz.livejournal.com/19419.html">piece about Kierkegaard</a>. Lex has also written some provocative <a href="http://flyingover.livejournal.com/538776.html">questions about Banksy</a>. I hope she'll post her paper when it's done. She's also looking to try Ubuntu in the near future. Go lex! <a href="http://krow684.livejournal.com/">Kris Osterhage</a> <em>simply hasn't been posting enough</em>. ;-)<br>Chris Blair <a href="http://wilkesborosquare.blogspot.com/2008/10/this-election-is-horrible.html">wants this election to be over</a>. I'm rather with him on that one.<br><br>That's most of it. I need to write up a cheatsheet for the emacs and slime commands I'm using and then 2 or 3 articles on the stuff about Common Lisp I've been learning. Maybe at the end of it all I'll go back and revise my positions from the <a href="http://redlinernotes.com/blog/?p=668">Language Adoption and Lisp</a> article. Other than that, I'm trying to get through Season 2 of 30 Rock before Season 3 kicks off at the end of this month and really enjoying the break from employment that I have. Now somebody hire me already! More soon, everyone.


title: Everything is Code
date: 2007-05-21 09:41:00.000000
format: html
content:
  So, we seem to be gradually acquiring a philosophy of code. Definitely not every member of the species is but there's this sort of growing awareness in certain groups that things really are ultimately pretty simple...and also code driven. It's not that information matters, it's that information is matter. The mathematicians might've been the first. It's hard to say but they definitely had some sort of head start towards this thought process\philosophy. Later the rest of the hard sciences started getting involved. Things really kicked off with the advent of Digital Circuits and Computer Science. 0s and 1s could be used to describe or simulate pretty much anything...given enough memory and time. If it's computable, the Universal Turing Machine can do it. Then something happened again, in 1972 Walter Fiers deciphered the complete genome of the Bacteriophage MS2. Genetic sequencing began to take off. Somewhere in this process, when we really began uncovering the power of the genome and the expressiveness of the genetic code our efforts naturally shifted from reading the code to writing it. Increasingly, we are discovering that not only the virtual worlds of the computer but our actual reality are programmable. We can cause chickens to have more wings, we can make E.Coli produce plastic for stitches stronger than those available, caused cows to birth gaurs, and Australia is looking into making Tasmanian Tigers walk the earth for the first time in 70 years by birthing them from wolves. And we have created entirely new genomes. Born that which did not exist. Hopefully, we will soon discover for the inorganic universe what we have discovered for the organic and virtual universes. Maybe one day we will even discover a code which governs the fundamental forces (gravity, electromagnetic, strong, weak).<br><br>For now, I'm curious about the Genetic Code. Certainly, there is an analogue between the machine code of 0s and 1s and the Genetic Code or As, Ts, Gs and Cs. We could even define A as 0, T as one third, G as two thirds, and C as 1 to draw this analogue out a little further. I would argue that the growth of computer science was fueled by a number of things but lowering the barriers to entry for programming was certainly one of them. That is, nobody codes in binary. Even long ago, everyone coded in assembler. Now, I'm not entirely (or even remotely) comfortable advocating that the emerging industry of genetic engineering try to emulate computer science. There are way too many bugs in our programs. However, linguistically speaking, I'm curious if there is an analogue to higher level languages in computer programming such as Assembler, C, Python, Basic, PHP, etc and if there aren't such languages how one might go about creating them. Anyone have any thoughts on this?


title: Fall Schedule
date: 2007-07-27 16:52:16.000000
format: html
content:
  SPSU Schedule<br>Intro to Computing Disciplines - CSE 1002  - 001 - 03:00 pm - 03:50 pm     MW     J-ATRIUM BLDG 217<br>Prog and Problem Solving I     - CSE 1301  - 002 - 1:30 pm - 2:45 pm TR J-ATRIUM BLDG 217<br>Prog and Problem Solving I     - CSE 1301  - 053 - 03:00 pm - 04:40 pm     T     J-ATRIUM BLDG 251<br>C Programming                  - CS 2123   - 002 - 07:30 pm - 08:45 pm     TR     J-ATRIUM BLDG 161<br>Discrete Mathematics           - MATH 2345 - 002 - 12:00 pm - 12:50 pm     MWF     D-CLASSROOM 234<br><br>More SPSU details soon to come...


title: Faster than sense
date: 2011-05-15 03:51:35.000000
format: html
content:
  Things have been moving really rapidly of late. 11 days ago I was taking my last exam, 5 days ago I had my 3rd interview with Cox, 4 days ago I got the job offer and accepted, today I applied for a 12-month lease on a 2 bedroom 12th story apartment in Midtown with one of my oldest and dearest friends. It all feels like a surreal, ridiculous, out-of-body experience. I'm not altogether sure how to cope with or interpret the change at the speed it's happening. I've been trying to just relax and give myself time off. Soon it will be time to start familiarizing myself with Django and Python though. And there's no end of work to do on Coleslaw.<br><br>I've set up a Windows box to pursue two things I haven't in a *long* time. Some light PC gaming and Music Production. I've played with Ableton some but haven't really dug in yet. Here's hoping I actually spend some time learning about making music this Summer and Fall.<br><br>I am genuinely excited about the job and also the new apartment. Cox honestly seems like a fantastic place to work filled with smart and cool folks. I'm slightly intimidated simply by virtue of the fact that it will be my first full-time programming position and I expect the learning curve to be substantial but I'll overcome. And having a budget for real food so I can try new recipes again will be fantastic.


title: Fifteenth Monday Update
date: 2007-08-27 12:39:29.000000
format: html
content:
  Week 14: Finished<br><strike>tvs<br>gym<br>classes<br>ren and dani ~9:30.<br>jeff taylor at 10:15 at caribou<br>dr. carpenter at 7.<br>skate. with chris friday night after rick.<br>skate with burke saturday morning around 8:30.<br>video game party with max saturday night.<br>sanford at 11.<br>movie with ben. call him!</strike><br><br>Week 15: Schedule<br>Monday<br>tvs 7-11<br>discrete mathematics - math 2345 002 - 12:00-12:50pm D-Classroom 234<br>intro to computing disciplines - cse 1002 001 - 03:00-3:50pm J-Atrium 217<br>gym<br>write e-mail to tim sweeney asking for permission to publicize conversation.<br>help pete with his computer after class.<br>actually do school work?<br>tuesday<br>tvs 7-11<br>prog and problem solving i - cse 1301 002 - 01:30-2:45pm J-Atrium 151<br>prog and problem solving i - cse 1301 053 - 03:00-04:40pm J-Atrium 251<br>c programming - cs 2123 002 - 07:30-08:45pm J-Atrium 161<br>lunch with olivia at 11:30?<br>wednesday<br>tvs 7-11<br>discrete mathematics - math 2345 002 - 12:00-12:50pm D-Classroom 234<br>intro to computing disciplines - cse 1002 001 - 03:00-3:50pm J-Atrium 217<br>gym<br>thursday<br>tvs 7-11<br>prog and problem solving i - cse 1301 002 - 01:30-2:45pm J-Atrium 151<br>prog and problem solving i - cse 1301 053 - 03:00-04:40pm J-Atrium 251<br>c programming - cs 2123 002 - 07:30-08:45pm J-Atrium 161<br>ren and dani,<br>friday<br>tvs 7-11<br>discrete mathematics - math 2345 002 - 12:00-12:50pm D-Classroom 234<br>gym<br><br>News for 8/27/07:<br>Later.


title: Fifteenth Thursday Literary Lines
date: 2007-08-30 13:56:50.000000
format: html
content:
  Yesterday's post did quite well on reddit and my server handled the traffic as well so that's nice. Expect more details and thoughts on "The Concurrency Problem" as well as a general update tomorrow.<br><br>As for today, it's more Neruda. Today's poem is titled <em>I Will Return</em>, from his work "The Stones of Chile".<br><br>Some other time, man or woman, traveler,<br>later, when I am not alive,<br>look here, look for me<br>between stone and ocean,<br>in the light storming<br>through the foam.<br>Look here, look for me,<br>for here I will return, without saying a thing,<br>without voice, without mouth, pure,<br>here I will return to be the churning<br>of the water, of<br>its unbroken heart,<br>here, I will be discovered and lost:<br>here, I will, perhaps, be stone and silence.


title: Fifteenth Tuesday Quotables
date: 2007-08-28 14:26:18.000000
format: html
content:
  I feel compelled to post a translation of last week's quote from Simone Weil. It's a gorgeous quote:<br><br>"The case of true contradictions: God exists, God does not exist. I am absolutely sure that there is a God, in the sense that I am absolutely sure my love is not an illusion. I am absolutely sure that there is no God, in the sense that I am absolutely sure nothing real resembles what I can conceive when I pronounce that name. And yet something I cannot conceive is not an illusion." - Simone Weil, <em>Unattainable Earth, p.117</em><br><br>"For me the principal proof of the existence of God is the joy I experience any time I think that God is." - Rene Le Senne, <em>Unattainable Earth, p.82</em><br><br>I've been needing lots of Milosz lately. It's good stuff.<br><br>"How do we live on the surface pretending not to feel the terror? In this epoch which I have experienced and which has not been narrated? In this night and not any other destiny, my own, of which I think at night, unable to tell the verdict from chance. How can we be so restrained, conversing in cautious words?" - Czeslaw Milosz, <em>Unattainable Earth, p.62</em><br><br>"Since my youth I have tried to capture in words a reality such as I contemplated walking the streets of a human city and I have never succeeded; that is why each of my poems seems to me the token of an unaccomplished oeuvre. I learned early that language does not adhere to what we really are, that we move in a big make-believe which is maintained by books and pages of newsprint. And every one of my efforts to say something real ended the same way, by my being driven back to the enclosure of form, as if I were a sheep straying from the flock." - Czeslaw Milosz, <em>Unattainable Earth, p.32</em><br><br>"Who will assure me that I perceive the world the same way other people do? It is not improbable that I am a deviation from the norm, an oddity, a mutation, and that I have no access to what they experience. And if that is the case, what right do I have to pronounce general opinions on man, history, the difference between good and evil, society, systems; as if I did not guess that my difference, though hidden, influences my judgments, changes proportions?" - Czeslaw Milosz, <em>Unattainable Earth, p.63</em>


title: Fifteenth Wednesday Songs
date: 2007-08-29 13:09:45.000000
format: html
content:
  Coldplay - Message<br>Radiohead - Airbag<br>B.B. King - The Thrill Is Gone<br>Radiohead - Videotape<br>Jump, Little Children - Singer


title: Fifth Friday Linux Lesson
date: 2007-06-16 04:31:00.000000
format: html
content:
  Dear Readers,<br><br>Due to unforeseen events that have slightly scrambled my brain there will not be a Linux Lesson today. In the interest of maintaining quality and not just banging something out I will wait to write and post this entry. The odds are great that it will arrive tomorrow. I apologize for the delay and thank you in advance for your understanding.<br><br>Editor-in-Chief,<br>Brit Butler


title: Fifth Linux Lesson; First Saturday, hopefully only
date: 2007-06-16 20:39:00.000000
format: html
content:
  Good afternoon netizens. Fear not, in spite of great adversity and personal difficulty I am here to bring you this week's Linux Lesson. It occurred to me that I was so foolish in our inaugural Linux Lesson that I taught you only the cd command and not the ls command. This is incredibly silly. These two should almost always be known in tandem. So with that in mind here we go.<br><br>Today's concept is finding files and getting file information via the terminal. Obviously, we've discussed things like permissions and file management on here before. However, rather than guessing where a file is or what permissions it has wouldn't you like to know? That's what we hope to cover today.<br><br>So, command number one. "ls" which stands for list. Clever, right? Maybe not but this handy little devil will solve most of your file searching and permission checking problems. For example, say you're looking for the "xorg.conf" file we mentioned a few weeks ago. If you think it's in /etc/X11 then you can do "cd /etc/X11" and then type "ls" or you could type "ls /etc/X11". Additionally, if you want to be shown hidden files you can append -a like so "ls -a /etc/X11" and to be shown permissions for files you can append -l like so "ls -l /etc/X11" or both in any order "ls -la /etc/X11" there are other options you can use but those are the two I find useful. When you check permissions with -l the output might look a little crazy to you. Probably something like this:<br>-rw-r--r-- 1 redline redline       1751 2007-02-04 15:21 aptrepository.asc<br>drwxr-xr-x 8 redline redline       4096 2007-06-14 19:01 Desktop<br>drwxr-xr-x 5 redline redline       4096 2007-04-17 22:48 doom3<br>lrwxrwxrwx 1 redline redline         36 2007-04-17 22:48 doom3-dedicated -&gt; /home/redline/doom3//doom3-dedicated<br>-rw-r--r-- 1 redline redline   21145838 2007-04-17 22:41 doom3-linux-1.3.1.1304.x86.run<br>lrwxrwxrwx 1 redline redline         26 2007-02-04 11:38 Examples -&gt; /usr/share/example-content<br>-rw-r--r-- 1 redline redline       1300 2007-03-17 02:04 file.txt<br>-rw-r--r-- 1 redline redline       1209 2007-03-17 02:03 file.txt~<br>-rw-r--r-- 1 redline redline      20017 2007-02-22 20:17 hs_err_pid5956.log<br>-rw-r--r-- 1 redline redline          0 2007-05-16 17:31 logfile.txt<br>-rw-r--r-- 1 redline redline     151552 2007-06-03 22:58 nautilus-debug-log.txt<br>drwxr-xr-x 3 redline redline       4096 2007-02-21 19:18 Photos<br>-rw-r--r-- 1 redline redline      44628 2007-02-27 08:48 python-gtkglext1_1.1.0-2feisty_i386.deb<br>drwxr-xr-x 2 redline redline       4096 2007-04-04 19:35 scripts<br>lrwxrwxrwx 1 redline redline         36 2007-04-12 09:11 TransGaming_Drive -&gt; /home/redline/.cedega/Doom 3/c_drive<br>-rw-r--r-- 1 root    root     684455936 2007-06-13 00:27 ubuntu-custom-live.iso<br>-rw-r--r-- 1 redline redline 3004403712 2007-05-31 20:21 windows.img<br>drwxr-xr-x 3 redline redline       4096 2007-04-22 00:57 workspace<br>-rw-r--r-- 1 redline redline 5368709120 2007-06-08 17:53 xubuntu-test.img<br>The permissions are found on the far left followed by the owner and group access file size, date last modified, and file name. Some of the files you'll notice have a -&gt; and then another file listed. This is because they are something called a symlink which is effectively the same thing as a Windows shortcut. As for the permissions on the far left, I admit they look a little weird. Let me explain it this way, permissions are doled out separately on Unix-based systems to users, groups, and owners. Someone owns the file and generally speaking the owner has the right to choose who has access to it and whether they have read-only or read-write access as well as whether or not the file is executable. Groups are collections of users which share a given set of rights. Generally, you don't have to worry about groups. On your own computer you'll either own something or not. If you don't own it that means root (the superuser account) probably owns it in which case sudo comes in handy. Users are a more generic entity that probably only matters if people are remotely accessing a directory to upload files over the web but here I'm getting into things I don't know so I'll shut up. For our purposes and most beginning users purposes the only thing that matters is that you own the file and have read or write access to it. That can be seen in the permissions on the far left. The r stands for read, w for write, and x for executable. I believe that the first three are for the owner, the second three are for the group, and the third three are for users but don't quote me. We'll pick up here next week with some more permissions commands and a command to resolve the questions I've opened about permissions towards the end of this lesson. See you then.


title: Fifth Monday Update
date: 2007-06-11 22:50:00.000000
format: html
content:
  Summer: Week 4: Finished<strike><br>TVS<br>Sonya<br>Finish Cradle to Cradle.<br>Start next book.<br>Met with Dr. Guzman at SPSU. Talked Functional Programming.<br>Worked on VMs. Figured out server problems.<br>Gym</strike><br>Still Didn't: Programming Chapter 2! To be rectified today.<br>Unexpected: Arch Linux Hack Guide (90% complete), Good technical writing (Software's Top 10 post). Finished Hackers &amp; Painters by Paul Graham.<br><br>Summer: Week 5: Schedule<br>Monday<br>Take Cody (my wonderful 13 year old Shetland Sheepdog) to the vet for annual checkup.<br>Programming Chapter 2.<br>Gym.<br>Bank.<br>Tuesday<br>TVS<br>Running at the park with Dad?<br>Start next book: Infotopia, Wealth of Networks, or Emergence. Probably Emergence.<br>Wednesday<br>TVS<br>Reading<br>Gym<br>Thursday<br>TVS<br>Running at the park with Dad?<br>Reading<br>Friday<br>Chill (Programming Chapter 3. Install empathy (from source if necessary.))<br>Gym<br>Sonya?<br>Finish the Arch Guide.<br><br>News for 6/11/07:<br>First, like clockwork another version of Empathy has been released: <a href="http://blogs.gnome.org/xclaesse/2007/06/09/announce-empathy-07/">0.7</a>. This is unbelievable. Xavier Claessens is making point releases faster than my car's running out of gas. God bless him.<br>The Compcomm developers are finally <a href="http://www.ubaight.com/pipermail/compcomm/2007-June/000813.html">getting embroiled in discussion about releasing 0.1</a>. Keep an eye on that <a href="http://www.ubaight.com/pipermail/compcomm/2007-June/date.html#start">mailing list</a>. We're getting there.<br>In a rather shocking development, <a href="http://www.reactos.org/en/newsletter_25.html">Alex Ionescu has left the ReactOS project</a> after rewriting over half of the kernel and effectively serving as project lead for several years. Alex left on amicable terms and there is someone to replace him so things should move along on schedule however <a href="http://www.reactos.org/en/newsletter_26.html">the team will be skipping this month's 0.32 release to drop 0.33 on us in July</a>.<br><a href="http://symphonyos.com/cms/?p=16">SymphonyOS has finally dropped a release</a> after about  a year's silence with 2007-06. I've got to say though unless the project picks up significant momentum I feel like they should just focus on the <a href="http://en.wikipedia.org/wiki/Mezzo_(desktop_environment)">Mezzo desktop</a> and drop the rest of the OS development.<br>This has also been <a href="http://tirdc.livejournal.com">a good week for the ATI driver based on various postings to the effective newsletter</a>, so I'm pretty pleased.<br>It's been a surprisingly large week for more general scientific developments as well:<br><a href="http://www.technologyreview.com/read_article.aspx?id=18836">Researchers at MIT have invented the first wirelessly powered lightbulb</a>. That's right. They've unplugged us. I leave to your imagination where this goes next.<br><a href="http://www.technologyreview.com/read_article.aspx?id=18822">Some crazy folks built a device that can simulate the effects of a hurricane</a>. I just don't know.<br><a href="http://www.technologyreview.com/read_article.aspx?id=18832">Advances have been made in convincing stem cells to morph into various kinds of tissue</a>.<br><a href="http://www.technologyreview.com/read_article.aspx?id=18827">A startup called LS9 is building hydrocarbon-based biofuels using synthetic biology</a>. Expect synthetic biology to play a big part in saving the planet.<br><a href="http://www.technologyreview.com/read_article.aspx?id=18834">Candidate genes for 7 diseases including cardiovascular disease and diabetes have been found</a> thanks to a gene testing chip roughly the size of an iPod or Blackberry.<br><a href="http://www.technologyreview.com/read_article.aspx?id=18838">Finally, a new record has been set in Quantum Cryptography by European researchers</a>. More generally this is an advance for Quantum Computing which offers numerous promises over computing as it is today. Any advance in how we handle qubits is a good advance.


title: Fifth Thursday Literary Lines
date: 2007-06-14 15:39:00.000000
format: html
content:
  I finally got around to reading some Borges last night and he's lovely. Today's excerpt comes from his story <em>The Ethnographer</em> in his collected fictions:<br><br>"He must have forseen the difficulties that lay ahead for him; he would have to convince the red men to accept him as one of their own. He set out upon the long adventure. He lived for more than two years on the prairie, sometimes sheltered by adobe walls and sometimes in the open. He rose before dawn, went to bed at sundown, and came to dream in a language that was not that of his fathers. He conditioned his palate to harsh flavors, he covered himself with strange clothing, he forgot his friends and the city, he came to think in a fashion that the logic of his mind rejected. During the first few months of his new education he secretly took notes; later, he tore the notes up - perhaps to avoid drawing suspicion upon himself, perhaps because he no longer needed them."


title: Fifth Tuesday Quotables
date: 2007-06-13 05:40:00.000000
format: html
content:
  Dear Friends:<br>Sorry if I've been bad about responding to comments or e-mails for the past 24 hours or so. Today's been very busy. In fact, after this quick break to keep up my summer blog series I'm going to get back to working on something so that our servers at work will finally go up tomorrow. I'd also like to thank everyone for the tremendous response and support I got on my "Real World" post. It really did mean a lot.<br><br>"<font face="verdana" size="2">As a thirteen-year-old kid, I didn't have much more experience of the world than what I saw immediately around me. The warped little world we lived in was, I thought, <em>the world.</em> The world seemed cruel and boring, and I'm not sure which was worse." - Paul Graham</font><br><br><font face="verdana" size="2">"As far as I can tell, the concept of the hormone-crazed teenager is coeval with suburbia. I don't think this is a coincidence. I think teenagers are driven crazy by the life they're made to lead. Teenage apprentices in the Renaissance were working dogs. Teenagers now are neurotic lapdogs. Their craziness is the craziness of the idle everywhere." - Paul Graham</font><br><br><font face="verdana" size="2">"To the popular press, "hacker" means someone who breaks into computers.  Among programmers it means a good programmer. But the two meanings are connected.  To programmers, "hacker" connotes mastery in the most literal sense: someone who can make a computer do what he wants—whether the computer wants to or not. To add to the confusion, the noun "hack" also has two senses.  It can be either a compliment or an insult.  It's called a hack when you do something in an ugly way.  But when you do something so clever that you somehow beat the system, that's also called a hack.  The word is used more often in the former than the latter sense, probably because ugly solutions are more common than brilliant ones. Believe it or not, the two senses of "hack" are also connected.  Ugly and imaginative solutions have something in common: they both break the rules.  And there is a gradual continuum between rule breaking that's merely ugly (using duct tape to attach something to your bike) and rule breaking that is brilliantly imaginative (discarding Euclidean space)." - Paul Graham</font><br><font face="verdana" size="2"><br>"It says a great deal about our work that we use the same word for a brilliant or a horribly cheesy solution.   When we cook one up we're not always 100% sure which kind it is.  But as long as it has the right sort of wrongness, that's a promising sign. It's odd that people think of programming as precise and methodical.  <em>Computers</em> are precise and methodical.  Hacking is something you do with a gleeful laugh." - Paul Graham<br></font>


title: Fifth Wednesday Songs of Summer
date: 2007-06-14 01:30:00.000000
format: html
content:
  Blue Merle - Burning in the Sun<br>Maroon 5 - Infatuation<br>Spoon - Vittorio E.<br>Sufjan Stevens - The Dress Looks Nice on You<br>Jamie Lidell - Music Will Not Last


title: Figuring Out what to Factor Out
date: 2007-10-06 20:48:00.000000
format: html
content:
  All our lives we optimize for things. That is to say, we go to great lengths making some types of experiences more likely to occur, less costly, or easier than others. We do this in relationships, optimizing for sex and sleep or perhaps a joint exploration of new vistas, for example. We do this in work and school, optimizing our behavior so that we stay very good at our present work style most often. Here are some things I would like to try to optimize for (in my life) right now:<br><br>-To put more (of myself) into what I'm doing. To be in things fully, not half way. This goes for school and work, particularly.<br>-To stop hating a certain someone. This is a counterproductive, eats-away-at-you feeling. Not the sort of thing that can lead to anything good.<br>-To choose a core subset of people that I can really care about and to love them religiously.<br><br>With regards to figuring out the future:<br>-To do more actual exploration by doing and less exploration by reading (reddit, for example). This (reddit instead of work/programming) is a way to stagnate. I need to optimize habits that will make me more likely to do more work and real things, especially new and creative things.<br>-To build a knowledge base with del.icio.us instead of feeling like I need to read and remember and blog about everything. del.icio.us is the net journal.<br><br>With regards to relationships:<br>-To be less afraid. To be aware that what is lost is never what is needed and that the road to come is already paved. The interesting part of the journey is walking it and seeing who joins you. I need to be more mindful of that.


title: Finding Time
date: 2013-09-16 10:23:00.000000
format: md
content:
  ## My Recent Absence

  You may have noticed it has been two months since I've done any serious hacking
  on my open source projects. That is no accident. It has been a little over 5
  years since I decided that [programming would be my future](http://blog.redlinernotes.com/posts/Leaving-College-to-Leverage-Compulsion.html).

  That decision worked out far better than I could have hoped. I find programming
  immensely rewarding and, for someone who has only been doing it for 5 years, I
  think I'm doing [reasonably well](http://redlinernotes.com/docs/cl-6502.pdf). I
  have a [steady job](http://www.emcien.com) that I'm happy with and rewarding
  friends and hobbies.

  But I'm tired. I'm stepping back and trying to take stock of how I use my time at
  a high level. I'm not micro-optimizing. I'm asking, for the first time in quite a
  while, how I want to divy up what free time I have and what my priorities are.
  I'm not sure when I'll come back to programming. I am sure that when I do, my
  focus and enjoyment of it will be improved. But there is so much I want to do
  besides code.

  It's been a big year. I had two jobs before my present one. I briefly had a
  [supercar](http://redlinernotes.com/images/nsx.jpg). I started a new
  relationship for the first time since 2007. So perhaps it is no surprise that
  I haven't found as much time for hacking. That other forms of creation have
  fallen by the wayside a bit.

  I miss the huge chunks of time I had in college. I want to both consume and
  create. To consume music, video games, MOOC courses, books I've been meaning to
  read [for ages](http://redlinernotes.com/images/a_few_books.jpg). To create code,
  [mixtapes](http://soundcloud.com/redlinernotes), [music](http://renoise.com) of
  my own, and who knows what else. But even though its hard to think of all that I
  get done versus all that I want to do and each weekend flies by like a screaming
  jet, I have to admit that things are going pretty well.

  <img src="http://redlinernotes.com/images/norma_and_the_pups.jpg" alt="To New Beginnings" width="70%"/>


title: First Friday Linux Lesson
date: 2007-05-19 02:27:00.000000
format: html
content:
  This series is going to be meatier than the other four and also more diverse. Since people who use computers on a regular basis generally know how to do the things they need to do I'm going to be teaching things that most people may or may not use but which should often be new. At least initially, I'll be starting with a concept, then moving on to a useful command, application, hotkey/shortcut, hack/tip, code snippet/language feature, etc. Also, these "lessons" will be linux-centric because it qualifies as new knowledge for many people and because I love it so damn much. I don't think I could interest myself in writing windows tutorials every week. This series will generally assume that the reader is using a GNOME-based distribution (I like Ubuntu, but Fedora and Arch are nice too) where applicable.<br><br>For the inaugural post we're starting off with the only sensible thing:<br>(Concept) The Terminal, also known as the command prompt or the ominous opaque cause of digital doom.<br><br>The Terminal, more familiar to many as the command prompt, can be found in Linux by hitting Alt-F2 and typing "gnome-terminal" then pressing enter or by going to the Applications Menu, Accessories (or System Tools if you're using Fedora), then Terminal. The terminal need not be dangerous or painful to use. In fact, sometimes I find that it's vastly preferable to something with a GUI.<br><br>We're also starting off with the only sensible command: "cd".<br>cd is the change directory command. It allows you to (unsurprisingly) change the directory you're in which in turn enables you to navigate the file system to accomplish various tasks. cd can be used in one of two ways, to enter a folder in the folder you're in or to enter a specific folder anywhere on the system. Let's see how that looks. If you're in a folder, say your user's Home folder, and there is a subfolder in that folder called Desktop you would navigate to it like this, "cd Desktop" or like this, "cd /home/USERNAME/Desktop". The only thing to be mindful of is that it's case sensitive but that will get you around the Linux filesystem.


title: First Monday Update
date: 2007-05-14 23:12:00.000000
format: html
content:
  Summer: Week 1: Goals<br>Todo:<br>Monday<br>Bank Deposit\Finances<br>Haircut<br>Econ Ch. 13, 6<br>Start Programming (C, Python, or a Functional Language {Haskell, Erlang, OCaml})<br>Talk to Mom about Blockbuster Movie Delivery. Begin Piracy Scheduling. Or open Netflix account.<br>Tuesday<br>Gym<br>Kower<br>Blank CDs?<br>Write Tech Stuff?<br>Work on repartitioning System for Space. Switch Arch to Else? Yup. Fedora 7.<br>Wednesday<br>Prepare for Econ Test<br>E-Mail Charlie Paparelli something. Job hunting.<br>Thursday<br>Econ Test<br><br>News For 5/14/07:<br>ATI Claims Plans to Improve (possibly open) Radeon Drivers on Linux. Big Deal if they follow through but much skepticism.<br>ATI releases R600. More Forward-Looking than G8x by Nvidia but also 6 months late. Need to play catch up a bit. Performance competitive but verdict still out.<br>Microsoft has decided Open Source is in violation of 235 of their patents. More on this later perhaps but generally considered a nuisance rather than a threat. (See groklaw.)<br>Intel is concerned about the slowness of software in catching up with their multicore roadmap.<br>The Supreme Court made a ruling on Patent Law and Prior Art that promises to help improve the Patent Cold War and also invalidate whole flocks of software patents.<br>The price of polysilicon used in solar panels skyrocketed.


title: First Thursday Literary Lines
date: 2007-05-18 04:40:00.000000
format: html
content:
  Starting it off with one of my favorites:<br><br>Annalenna by Czeslaw Milosz<br><br>"It happened that sometimes I kissed in mirrors the reflection of my face; since the hands, face and tears of Annalena had caressed it, my face seemed suffused to me divinely beautiful and as if suffused with heavenly sweetness." - Oscar Milosz, <em>L'Amoreuse Initiation</em><br><br>I liked your velvet yoni, Annalena, long voyages in the delta of your legs.<br>A striving upstream toward your beating heart through more and more savage currents saturated with the light of hops and bindweed.<br>And our vehemence and triumphant laughter and our hasty dressing in the middle of the night to walk on the stone stairs of the upper city.<br>Our breath held by amazement and silence, porosity of worn-out stones and the great door of the cathedral.<br>Over the gate of the rectory fragments of brick among weeds, in darkness the touch of a rough buttressed wall.<br>And later our looking from the bridge down to the orchard, when under the moon every tree is separate on its kneeler, and from the secret interior of dimmed poplars the echo carries the sound of a water turbine.<br>To whom do we tell what happened on the earth, for whom do we place everywhere huge mirrors in the hope that they will be filled up and will stay so?<br>Always in doubt whether it was we who were there, you and I, Annalena, or just anonymous lovers on the enameled tables of a fairyland.


title: First Tuesday Quotables
date: 2007-05-15 19:48:00.000000
format: html
content:
  Imagine this design assignment: design something that makes oxygen, sequesters carbon, fixes nitrogen, distills water, accrues solar energy as fuel, makes complex sugars and food, creates micro-climates, changes colors with the seasons and self-replicates… Why don’t we knock that down and write on it. - <a href="http://en.wikipedia.org/wiki/William_McDonough">William McDonough</a><br><br>You can't incent a dead person. No matter what we do, <a href="http://en.wikiquote.org/wiki/Nathaniel_Hawthorne" title="Nathaniel Hawthorne">Hawthorne</a> will not produce any more works, no matter how much we pay him. - <a href="http://en.wikipedia.org/wiki/Lawrence_Lessig">Lawrence Lessig</a>


title: First Wednesday Songs of Summer
date: 2007-05-16 20:28:00.000000
format: html
content:
  Jamie Lidell - When I Come Back Around<br>Justin Timberlake - Summer Love<br>Scissor Sisters - I Don't Feel Like Dancin'<br>Maroon 5 - Wake Up Call<br>Girl Talk - Overtime


title: For Don and Lex
date: 2008-02-14 04:18:01.000000
format: html
content:
  Eduardo Galeano, Voices of Time, <i>Soul in Plain Sight</i>, <em>pg.98</em>:<br><br>"According to an ancient belief, the tree of life grows upside down. Its leaves burrow into the earth, its roots gaze at the sky. It offers not its fruits but its origins. Rather than hiding underground what is most intimate, most vulnerable, it bares its roots, exposing them to the winds of the world.<br> "That's life," says the tree of life."<br><br>I haven't fallen off the face of the earth just yet. More soon guys. I'm hoping to get a SICP progress update posted this weekend as well as (maybe) a REAL ESSAY on REAL THINGS!<br><br>Expect me to tie together transcendentalists, the green and possibly civil rights movements, and lisp. Yeah, who knows.


title: For Posterity
date: 2011-07-11 01:15:06.000000
format: html
content:
  "Where does humility come from? From sitting down and putting little signs on paper with the hope of expressing something. I am able to spend whole days on the occupation, but as soon as  I finish I see that I did not express anything. I would like to consider myself a genius; I do not manage it. To tell the truth, I don't know where the geniuses of literature are whom I should envy. Those of the past are caught in the manners and style of their period; those of today move with difficulty in a transparent jam that is slowly coagulating. And I, always insatiable, just as in this moment when I come to the window, see a tower with a clock, snow underneath it on the lawns of the Ann Arbor campus, a girl walking on a pathway, and the very act of being here, by the window, in this moment similar to any other, i.e., unrepeatable, with the whiteness of the snow and the movement of legs observed from above, is sufficient to initiate my lament on the insufficiency of language." - Czeslaw Milosz, Unattainable Earth, Pg. 40


title: Form, Order, Rhythm
date: 2007-12-31 04:30:36.000000
format: html
content:
  "To find my home in one sentence, concise, as if hammered in metal. Not to enchant anybody. Not to earn a lasting name in posterity. An unnamed need for order, for rhythm, for form, which three words are opposed to chaos and nothingness." - Czeslaw Milosz, Unattainable Earth, Pg. 141 (the last page)<br><br>"Since my youth I have tried to capture in words a reality such as I contemplated walking the streets of a human city and I have never succeeded; that is why each of my poems seems to me the token of an unaccomplished oeuvre. I learned early that language does not adhere to what we really are, that we move in a big make-believe which is maintained by books and pages of newsprint. And every one of my efforts to say something real ended the same way, by my being driven back to the enclosure of from, as if I were a sheep straying from the flock." - Czeslaw Milosz, Unattainable Earth, Pg. 32<br><br>"I have always aspired to a more spacious form<br>that would be free form the claims of poetry or prose<br>and would let us understand each other without exposing<br>the author or reader to sublime agonies.<br><br>In the very essence of poetry there is something indecent:<br>a thing is brought forth which we didn't know we had in us,<br>so we blink our eyes, as if a tiger had sprung out<br>and stood in the light, lashing his tail.<br><br>That's why poetry is rightly said to be dictated by a daimonion,<br>though it's an exaggeration to maintain that he must be an angel.<br>It's hard to guess where that pride of poets comes from,<br>when so often they're put to shame by the disclosure of their frailty.<br><br>What reasonable man would like to be a city of demons,<br>who behave as if they were at home, speak in many tongues,<br>and who, not satisfied with stealing his lips or hand,<br>work at changing his destiny for their convenience?<br><br>It's true that what is morbid is highly valued today,<br>and so you may think I am only joking<br>or that I've devised just one more means<br>of praising Art with the help of irony.<br><br>There was a time when only wise books were read,<br>helping us to bear our pain and misery.<br>This, after all, is not quite the same<br>as leafing through a thousand works fresh from psychiatric clinics.<br><br>And yet the world is different from what it seems to be<br>and we are other than how we see ourselves in our ravings<br>People therefore preserve silent integrity,<br>thus earning the respect of their relatives and neighbors.<br><br>The purpose of poetry is to remind us<br>how difficulty it is to remain just one person,<br>for our house is open, there are no keys in the doors,<br>and invisible guests come in and out at will.<br><br>What I'm saying here is no, I agree, poetry,<br>as poems should be written rarely and reluctantly,<br>under unbearable duress and only with the hope<br>that good spirits, not evil ones, choose us for their instrument." - Czeslaw Milosz, Ars Poetica, New and Collected Poems Pg. 240


title: Fourteenth Monday Update
date: 2007-08-20 18:35:48.000000
format: html
content:
  Summer: Week 13: Finished<br><strike>21st Annual Checkup/Physical @ 9:45<br>Dental Appointment @ 2:30<br>Gym<br>Read and\or listen to Google TechTalks on Concurrency.<br>TVS<br>Program a little Erlang?<br>Talk to boss about fall schedule.<br>Cousin visiting for dinner.<br>See Ren and Dani?<br>Start packing. See people?<br>Burke is in town! Help him move in?<br>Move in. School starts. Oh, boy.</strike><br>Unexpected: Saw <em>Superbad</em> with Kris, Asked for raise.<br><br>Week 14: Schedule<br>monday<br>tvs 7-11<br>discrete mathematics - math 2345 002 - 12:00-12:50pm D-Classroom 234<br>intro to computing disciplines - cse 1002 001 - 03:00-3:50pm J-Atrium 217<br>gym<br>whatever<br>tuesday<br>tvs 7-11<br>prog and problem solving i - cse 1301 002 - 01:30-2:45pm J-Atrium 151<br>prog and problem solving i - cse 1301 053 - 03:00-04:40pm J-Atrium 251<br>c programming - cs 2123 002 - 07:30-08:45pm J-Atrium 161<br>hang out with marian james!<br>wednesday<br>tvs 7-11<br>discrete mathematics - math 2345 002 - 12:00-12:50pm D-Classroom 234<br>intro to computing disciplines - cse 1002 001 - 03:00-3:50pm J-Atrium 217<br>gym<br>whatever<br>thursday<br>tvs 7-12<br>prog and problem solving i - cse 1301 002 - 01:30-2:45pm J-Atrium 151<br>gym.<br>c programming - cs 2123 002 - 07:30-08:45pm J-Atrium 161<br>ren and dani ~9:30.<br>friday<br>tvs 7-10<br>jeff taylor at 10:15 at caribou<br>discrete mathematics - math 2345 002 - 12:00-12:50pm D-Classroom 234<br>dr. carpenter at 7.<br>skate. with chris friday night after rick.<br>saturday<br>skate with burke saturday morning around 8:30.<br>gym.<br>party with max saturday night?<br>sunday<br>sanford at 11.<br>movie with ben. call him!<br>movie with ren and dani. call them!<br><br>News for 8/20/07:<br>I'll fill this in later. It's getting hard to do the news. I'm busy and stuff!


