# posts

title: Fourteenth Thursday Literary Lines
date: 2007-08-23 14:20:25.000000
format: html
content:
  More Neruda today, the end of his poem <em>Autumn Testament</em>, from the work "Extravagaria".<br>If you all really like it I'll be happy to post the full text to Autumn Testament which numbers a few pages...<br><br>From having been born so often<br>I have salty experience<br>like creatures of the sea<br>with a passion for stars<br>and an earthy destination.<br>And so I move without knowing<br>to which world I'll be returning<br>or if I'll go on living.<br>While things are settling down,<br>here I've left my testament,<br>my shifting extravagaria,<br>so whoever goes on reading it<br>will never take in anything<br>except the constant moving<br>of a clear and bewildered man,<br>a man rainy and happy,<br>lively and autumn-minded.<br><br>And now I'm going behind<br>this page, but not disappearing.<br>I'll dive into clear air<br>like a swimmer in the sky,<br>and then get back to growing<br>till one day I'm so small<br>that the wind will take me away<br>and I won't know my own name<br>and I won't be there when I wake.<br><br>Then I will sing in the silence.


title: Fourteenth Tuesday Quotables
date: 2007-08-21 12:50:18.000000
format: html
content:
  "Our life consists partly in folly, partly in good sense; whoever writes on it only in a staid fashion and with measure, leaves more than half of himself behind." - Montaigne, <em>Essays</em><br><br>"Every strong and pure being feels he is something else than merely man and refuses, naively fearing it, to recognize himself one of an infinite number of copies of the species or of a type which repeats itself." - Paul Valery, <em>Varietes</em><br><br>"Cas de contredictoires vrais: Dieu existe, Dieu n'existe pas. Je suis tout a fait sure qu' il y un Dieu, en ce sens que je suis tout a fait sure que mon amour n'est pas illusion. Je suis tout a fait sure qu'il n'y a pas de Dieu, en ce sens que je suis tout a fait sure que rien de reel ne ressemble a ce que je peux concevoir quand je prononce ce nom. Mais cela que je ne peux concevoir n'est pas une illusion." - Simone Weil, <em>Unattainable Earth p. 117</em><br><br>"Denying, believing, and doubting completely are to man what running is to a horse." - Pascal, <em>Pensees</em>


title: Fourteenth Wednesday Songs of Summer
date: 2007-08-22 22:32:54.000000
format: html
content:
  John Mayer - Lenny/Man on the Side<br>Portishead - Biscuit<br>Muse - Stockhold Syndrome<br>Ted Leo and the Pharmacists - Timorous Me<br>The 88 - Over and Over<br>Pinback - Torch<br>Funkadelic - Maggot Brain<br>Christopher O'Riley - Bulletproof<br>Six Organs of Admittance - Lisboa<br>John Butler Trio - Ocean


title: Fourth Friday Linux Lesson
date: 2007-06-08 22:38:00.000000
format: html
content:
  So, I've been thinking about how I could improve these lessons and if anyone has ideas they should let me know (max, that's you :-). Anyway, I was reading full circle magazine early (it's an online rag all about Ubuntu) and they had a section on the directory structure in Linux which would definitely be useful for someone who isn't used to Linux. Thinking about this I realized that my requiring one application or command to go with one concept is an artificial and possibly bad constraint to place on these articles. I mean, file management involves (at least at the command line level) a minimum of two or three utilities and as many as you like really. One, cd to navigate the file system and two, rm to delete stuff. Potentially there are also commands like locate\find for searching, nano\vim for editing, apt-get\yum for installing\removing software, mkdir and rmdir to create and delete directories, and more still. Now, even though that list may appear intimidating it's really not and it's far from comprehensive as well. It is however really nice to just use whatever makes your life easier and ignore the rest. Anyway, let me know what you would be interested in hearing about next week cause I'd really like to know.<br><br>The concept for this week is file management and\or the Linux directory structure. The base of the Linux directory structure, the mother ship from which all other things spring, is "/". Under that you have an assortment of "/bin", "/boot", "/dev", "/etc", "/home", "/mnt", "/media", "/opt", "/root", "/tmp", "/usr", and "/var". "/bin" is where a lot of your basic command line utilities go so when you type a command in the terminal it starts by looking here. It's sort of like Program Files but it basically just holds executables or "binaries" hence bin. "/boot" holds the information the bootloader needs to get the system up and the configuration files for said bootloader. "/dev" holds all your devices. Literally. Your cdrom drives, hard drives, usb drives, audio and video cards, everything, has a "/dev" entry. So the operating system talks to your stuff through this directory and it sort of just maps out where everything is for your system. "/etc" holds a ton of configuration files which is nice though not everyone stores all their config data there. I guess that's a good thing. There are a few central documents of importance there you may find yourself playing with. More on that later. "/home" is just what it sounds like. That's where your user directories, desktop, and most of your other stuff is found. "/mnt" is a place where drives get "mounted" so you can read and\or write to them. Some distributions use "/media" instead of "/mnt" but they're essentially interchangeable. They are where <em>you</em> (not the operating system) go to check out CDs and USB drives and iPods and such. They do something called symlink (which is sort of like a precursor to hyperlinks on webpages) to the "/dev" entries for whatever you want to play with. "/opt" contains optional stuff you might install but not everything you do install. It's a grab bag. Mine's pretty much empty. It kind of has what you put in it. "/root" is the root user's version of "/home" it's normally pretty sparse and remember root is god so you don't want to play around in there. Root might get pissed at you. "/tmp" is just what it sounds like, temporary files and stuff. "/usr" is the real Program Files. This is where a ton of your shit ends up going and you'll notice it has subdirectories like "bin" "docs" etc. Finally, there's "/var" which I mainly find myself going in to peek around the "log" subdirectory. That's a pretty decent overview of the Linux filesystem.<br><br>The utilities to keep in mind with file management for me have been "mkdir", "rmdir", and "rm", "cp" and "mv". That's really all I use. mkdir and rmdir are two sides of the same coin. mkdir makes directories and rmdir removes them but, interestingly enough, only if they're empty. The syntax looks like this "mkdir mp3s" and "rmdir mp3s". Since you'll want to put your mp3s there you can use cp to copy them over. It'd be easier to use mv but run with me on this. Say all your mp3s are in "/home/your_username/downloads/music" you could use "cp /home/your_username/downloads/music/*.mp3 mp3s" and it would copy all your files with the .mp3 extension (*.mp3) to the mp3s directory. Then you could do "cd /home/your_username/downloads/music" and "rm *.mp3". That's not very efficient though, is it? It'd be easier to just blow away the directory. Well, you can. With rm -R. "rm -R /home/your_username/downloads/music" will remove files recursively starting at /home/your_username/downloads/music. That is, it deletes everything in the directory as well as the directory itself. Interestingly you can rename things with the mv command and that might be the easiest way to do this. For example, "mv /home/your_username/downloads/music /home/your_username/downloads/mp3s" then "mv /home/your_username/downloads/mp3s /wherever/you/want/mp3s". Generally I do file management from the file browser. I still like a GUI for it but if you're running into permissions errors it helps to come down and "sudo rm -R" or cp or mv something. Of course, if you don't know what file is giving you permissions errors you might not want to do that. Anyway, this hasn't been explained beautifully so let me know if this makes sense and\if you have questions.


title: Fourth Monday Update
date: 2007-06-04 20:52:00.000000
format: html
content:
  Summer: Week 3: Finished<br><strike>TVS<br>Sonya<br>Filled out forms for SPSU apartment.<br>Got in contact with SPSU Computer Science professor. Arranged meeting.<br>Saw <em>Knocked Up</em>.<br>Accidentally helped out scads of strangers on LJ!</strike><br>Still didn't: Programming Chaper 2, GYM! Double Shame on me. This must get rectified this week.<br>Unexpected: Read bunches, figured out fall living situation, saw a good movie, and helped people.<br><br>I'm gonna be honest. Somehow I just realized that it was summer this weekend. I think it occurred to me that traditionally summer just meant I played video games all day but what struck me was that if I wanted to I could do that! Can you believe it? Guys, SUMMER IS HERE!?<br><br>Summer: Week 4: Schedule<br>Monday<br>Work out Budget based on past expenses, expected income.<br>Work on VMs a little.<br>GYM!<br>Finish Cradle to Cradle.<br>Tuesday<br>TVS<br>Meet Juan Guzman (CS Professor) at SPSU at 4:15.<br>Start Infotopia or The Future of Ideas or The Wealth of Networks or <em>something</em>.<br>Wednesdsay<br>TVS<br>GYM!<br>Reading.<br>Music Library Work.<br>Thursday<br>TVS<br>Friday<br>Chill. (Reading, Music Library Work, potentially build Empathy from source and install CompComm if it's out.)<br><br>News for 6/4/07:<br>First, <a href="http://blogs.gnome.org/trackback/xclaesse/2007/06/01/0">Empathy 0.6 was released</a>. Talk about release early, release often. These guys are on fire.<br><a href="http://fedoraproject.org">Fedora 7 was also released to the world</a>. While this release isn't particularly noteworthy for it's technical achievements it is noteworthy for it's infrastructural or community achievements which may facilitate greater innovation and work in the future. Here's looking forward to F8.<br>The team over at <a href="http://www.pcsx2.net">PCSX2 released a progress update</a>. Good to hear from them.<br>Good progress is being made on the <a href="http://www.eff.org/deeplinks/archives/005286.php">battle against the NSA's Illegal Spying Program</a>.<br>Apparently there are <a href="http://www.technologyreview.com/blog/duncan/17611/">fungi that make energy from radiation</a>. They eat it the way plants eat sunlight in photosynthesis. Interesting.<br>Microsoft talks about <a href="http://www.popularmechanics.com/technology/industry/4217348.html">surface computing</a> but I'm more interested in <a href="http://www.perceptivepixel.com/">Perceptive Pixel</a> with Jeff Han. This does make it look like Microsoft wants to move out of the desktop war though which is intriguing.<br><a href="http://www.techreview.com/Biotech/18809/">James Watson has a copy of his own, personal genome</a>. That's just cool. Personal genomics is around the corner and who more fitting to be a first customer than Watson? <a href="http://www.techreview.com/Biotech/18795/">Personal medicine is around the corner</a> too.<br>People are looking into <a href="http://www.techreview.com/Energy/18790/">using superconducting cables in Manhattan's power grid</a>. Damn.


title: Fourth Thursday Literary Lines
date: 2007-06-08 05:30:00.000000
format: html
content:
  Okay. I'm kind of going to cheat today. I was planning on moving on from Milosz after posting what are <em>probably</em> my three favorite poems of his and post an excerpt from Borges today. The problem is I haven't gotten around to reading the Borges. So, for now, Borges will have to wait until next week and then hopefully I'll have read it. For now, here is another Milosz poem i'm intensely fond of.<br><br>At Dawn<br>How enduring. How we need durability.<br>The sky before sunrise is soaked with light.<br>Rosy color tints buildings, bridges, and the Seine.<br>I was here when she, with whom I walk, wasn't born yet<br>And the cities on a distant plain stood intact<br>Before they rose in the air with the dust of sepulchral brick<br>And the people who lived there didn't know.<br>Only this moment at dawn is real to me.<br>The bygone lives are like my own past life, uncertain.<br>I cast a spell on the city asking it to last.


title: Fourth Tuesday Quotables
date: 2007-06-05 19:18:00.000000
format: html
content:
  "But ultimately a regulation is a signal of design failure. - William McDonough<br><br>"The stone age didn't end because we ran out of stones." - William McDonough<br><br>"You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete." - R. Buckminster Fuller


title: Fourth Wednesday Songs of Summer
date: 2007-06-07 05:29:00.000000
format: html
content:
  Andrew Bird - Simple X<br>Jason Mraz - Unfold<br>White Stripes - Ball and Biscuit<br>Eels - Fresh Feeling<br>Primitive Radio Gods - Standing Outside a Broken Phone Booth with Money in my Hand


title: Free Time, Free Agent
date: 2008-09-18 15:22:50.000000
format: html
content:
  I was let go this morning. I have $800 to my name. Oh, and rent's coming up.<br><br>I'm also quite excited though. Things really weren't too great between my former employer and I. It just wasn't a good fit though there are many positive things to be said about the company, the workplace and the people there. I'm excited about future opportunities and, naturally, hope that I get to do work with Linux. :-)<br><br>I'll be spending most of the rest of the day preparing for that awesome <a href="http://redlinernotes.com/blog/?p=720">Linux Conference I keep mentioning</a> that's going down this Saturday. If you know of anyone that needs an I.T. worker or has some contract work for me feel free to drop me a line though. Time to keep my nose to the grindstone.<br><br>Quick Edit: Apparently, someone has the same idea as me about how to do Free Educational Content Distribution. Go Stanford! I can't say I'm a huge fan of their programs approach (start with a Pascal-ish language, move towards Java, then on to C++ and a few others; maybe it's the ordering I disagree with...) but I expect the quality and coverage to be excellent. That said, they're distributing via Youtube, iTunes, something called Vyew and torrents for both MP4s and WMVs. Well done, Stanford. Well done!


title: From Distro-Hopping to Good Easy
date: 2008-07-07 17:47:20.000000
format: html
content:
  Linux is a complicated beast. Unlike Windows and Mac there are literally hundreds of different competing versions or distributions vying for attention and often catering to a specific niche. Beginning Linux users are often all waved towards the two or three most popular and general-purpose distributions and with good reason. While three distributions in particular (Ubuntu, Fedora, Suse) seem to dominate and are good places to start, I have often experienced a desire to see what else exists with Linux since there is so much in the way of choice. Additionally, Linux distributions tend to have one release or more a year while Windows and Mac tend to see a new version only every few years. The three distributions I mentioned earlier all strive to issue a new release every six months and they all do so at roughly the same time often with no more than a month separating them.<br><br>While this may at first seem undesirable there is no pressure to upgrade but there is also no cost to upgrade (remember, they're free!). Some upgrades have a few more bugs or new features than others but upgrades tend to be relatively safe and easy. Moreover, because of the regular releases large changes happen gradually and there is little to no learning curve. It's also worth noting that upgrading does not require you to reinstall the operating system. It's usually just an hour or two of downloading and a reboot.<br><br>So, "Distro Release Season" comes twice a year if you use Ubuntu, Fedora, or Suse. That's even better than Christmas! However, this release cycle rather disappointed me. Ubuntu's Hardy Heron was a bit buggier than I'd like. Fedora 9 seems better and better every time but they still lack a few software packages I want. To be honest, I've never been interested in Suse much. I'd also been meaning to move to a more stripped-down version of Linux for a long time. Ubuntu and Fedora come with a lot of bells and whistles that I may not necessarily need and that slow my system down.<br><br>It was time to try something new and, this season, I decided to go with <a href="http://www.archlinux.org/">Arch Linux</a>. I won't go too deeply into my decision to use Arch. There are a lot of very good things about it and though it's not easy the way Ubuntu is, it's simple and worth the effort you put into it. You can make it into whatever you want it to be and that's precisely what I've done. I've spent about a week setting it up to perform as I'd like and with the programs I'd like. I've documented the entire process and will post that here as my personal "<a href="http://diveintomark.org/archives/2007/03/15/good-easy-2007">Good Easy</a>". A good easy, for those who haven't heard of one, is a detailed description of someone's computer configuration. One reason I'd like to do one is that it's handy in case I have to duplicate it at some point in the future. It might be nice to do a Good Easy for my server at some point as well. I detail a bit at the end how to turn your installed system into a Live CD. I plan to do a little bit more work and remove personal data to turn that Live CD into something I could distribute at some point though mostly just to a few nerd friends. I wouldn't expect, or want, to take users from the wonderful Arch Linux after all.<br><br>My Good Easy...<br><!--more--><br><br><strong>Install:</strong><br>The installer may look a bit scary but it's not too bad. I would recommend partitioning your drive beforehand with Gparted or reusing existing partitions.<br><br>Set the mountpoints for ext3 partitions and the swap space. I'd hold off on NTFS partitions until later.<br>Install packages selecting base-devel packages and sudo, wireless-tools, ntfs-3g, netcfg and openssh. Go to configure system and allow automatic hardware detection and usb boot devices. In rc.conf, set hostname and timezone, then set eth0="dhcp". We'll be adjusting this later but that's enough for now. In locales make sure that the locales you want are uncommented, then write and exit. Set the root password and nearest pacman mirror then return to the main menu. Install grub to your boot drive once you've added any necessary boot entries. You're done with the base install! Reboot and login as root.<br><br><strong>Some Basics (A new user, ssh, sound):</strong><br>Add any partitions to /etc/fstab that you didn't initially and create mountpoints for them. Use ntfs-3g for NTFS partitions.<br>Insert 'sshd: ALL' rights for ssh to /etc/hosts.allow and add sshd to the daemons list in /etc/rc.conf, then run the adduser command and give wheel, storage, audio, video, optical groups to the new user. Edit /etc/sudoers and comment out the line for the wheel group. Logout by typing exit at the command prompt and try logging back in as the new user.<br><br>To get sound working, run sudo pacman -Sy alsa-lib alsa-utils, then run amixer set Master 90% unmute and amixer set PCM 85% unmute and sudo alsactl store.<br><br>Then add alsa to the /etc/rc.conf daemons list.<br><br><strong>GUIs GUIs GUIs! ...and a login manager:</strong><br>Install the xorg group with <code>sudo pacman -Sy xorg</code> then check drivers with <code>sudo pacman -Ss xf86-video</code> and install one appropriate for your video card. For a window manager, install xmonad, openbox, gmrun, xcompmgr, openbox-themes and obconf like so: <code>sudo pacman -Sy xmonad openbox gmrun xcompmgr openbox-themes obconf</code>. For a login manager, install slim, archlinux-themes-slim and slim-themes with pacman and add slim to the daemons<br>in /etc/rc.conf. Then edit /etc/slim.conf to set themes to archlinux-retro,subway,fingerprint and set sessions to openbox,xmonad.<br>I use Openbox as my Window Manager at this point but hope to experiment with Xmonad down the line.<br><br>To get menumaker installed from the AUR (Arch User Repository) follow these instructions (you probablya want this):<code><br>mkdir -p ~/.config/openbox and cp /etc/xdg/openbox/* ~/.config/openbox/<br>mkdir ~/builds<br>cd ~/builds<br>wget http://aur.archlinux.org/packages/menumaker/menumaker.tar.gz && tar -zxvf *.gz<br>cd menumaker && makepkg -s && sudo pacman -U *.pkg.tar.gz && mmaker -vf openbox</code><br><br>For a system tray, I recommend stalonetray. Install it like so:<code><br>cp /etc/stalonetrayrc ~/.stalonetrayrc<br>nano ~/.stalonetrayrc</code> and change fuzzy_edges to 1, transparent to true, and icon gravity to NE.<br><br>I use the following pack so that I have icons for things but you may prefer another.<br><code>mkdir ~/.icons && cd ~/.icons<br>wget http://download22.mediafire.com/bdtdcgm4y1bg/49yjtxmu0z4/Crashbit.tar.bz2 && tar -zxvf Crash*.bz2</code><br><code>nano ~/.gtkrc-2.0</code> and insert<code><br># ~/.gtkrc-2.0<br>gtk-icon-theme-name = "Crashbit"</code><br><br>I add a run command to the Alt-F2 key by modifying the configuration files that come with Openbox.<br><code>nano ~/.config/openbox/rc.xml</code> and add this to the keyboard section:<code><br><keybind key="A-F2"><br><action name="execute"><execute>gmrun</execute></action><br></keybind><br><keybind key="C-A-L"><br><action name="Execute"><br><execute>xscreensaver-command -lock</execute><br></action><br></keybind></code><br><br>It's nice to have good wallpaper but I get bored with backgrounds after a while. What I do is dump a ton of good wallpapers (try <a href="http://www.desktopography.net/">Desktopography</a>, for example) into a Wallpapers folder and then have the script run each time I login (or if I suddenly want a new wallpaper). Start off by making the script.<br><br>nano ~/wallpaper.sh and add<br><code>#!/bin/bash<br>WALLPAPERS="/home/yourusername/path_to_your_wallpapers"<br>ALIST=( `ls -w1 /home/yourusername/path_to_your_wallpapers` )<br>RANGE=${#ALIST[@]}<br>let "number = $RANDOM"<br>let LASTNUM="`cat $WALLPAPERS/.last` + $number"<br>let "number = $LASTNUM % $RANGE"<br>echo $number > $WALLPAPERS/.last<br><br>feh --bg-scale $WALLPAPERS/${ALIST[$number]}</code><br><br>Note that those ` are backticks not single quotes('). I got a little tripped up by that. To make the script executable do the following.<br><code>chmod +x ~/wallpaper.sh && touch path_to_your_wallpapers/.last</code><br><br>I also like to run conky to monitor CPU usage, the current song playing, whether there are updates and other such things.<br><code>nano ~/.conkyrc</code> and insert the following.<br><br><code># Use Xft?<br>use_xft yes<br>xftfont Terminus 8<br><br># Update interval in seconds<br>update_interval 1<br><br># This is the number of times Conky will update before quitting.<br># Set to zero to run forever.<br>total_run_times 0<br><br># Create own window instead of using desktop (required in nautilus)<br>own_window  yes<br>own_window_transparent yes<br>own_window_type desktop<br>own_window_hints undecorate,sticky,skip_taskbar,skip_pager<br><br># Use double buffering (reduces flicker, may not work for everyone)<br>double_buffer yes<br><br># Minimum size of text area<br>minimum_size 512 16<br><br>maximum_width 1560<br><br># Draw shades?<br>draw_shades no<br><br># Draw outlines?<br>draw_outline no<br><br># Draw borders around text<br>draw_borders yes<br><br># Stippled borders?<br>stippled_borders 0<br><br># border margins<br>border_margin 6<br><br># border width<br>border_width 1<br><br># Default colors and also border colors<br>default_color 738A88<br>#default_shade_color white<br>#default_outline_color black<br>own_window_colour 3C4746<br><br># Text alignment, other possible values are commented<br>#alignment top_left<br>#alignment top_right<br>alignment bottom_left<br>#alignment bottom_right<br><br># Gap between borders of screen and text<br># same thing as passing -x at command line<br>gap_x 8<br>gap_y 8<br><br># Subtract file system buffers from used memory?<br>no_buffers yes<br><br># set to yes if you want all text to be in uppercase<br>uppercase no<br><br># number of cpu samples to average<br># set to 1 to disable averaging<br>cpu_avg_samples 2<br><br># number of net samples to average<br># set to 1 to disable averaging<br>net_avg_samples 2<br><br># Force UTF8? note that UTF8 support required XFT<br>override_utf8_locale yes<br><br># Add spaces to keep things from moving about?  This only affects<br>certain objects.<br>use_spacer none<br><br># Append this to TEXT on laptops...| ${color FCFCFC}${battery_percent}<br><br>TEXT<br>${time %H:%M} | ${exec date "+%A %e %B"} ${color} | cpu: ${color FCFCFC}${cpu}%${color} | mem: ${color FCFCFC}$memperc%${color} | down: ${color FCFCFC}${downspeed eth0}kb/s${color} | up: ${color FCFCFC}${upspeed eth0}kb/s${color} | uptime: ${color FCFCFC}${uptime}${color} | root drive: ${color FCFCFC}${fs_used /} / ${fs_size /}${color} | music: ${color FCFCFC}${mpd_title 32}${color} | updates: ${color FCFCFC}${texeci 3600 perl ~/scripts/arch-updates/conky-updates.pl}</code><br><br>I should also note that the all of the stuff under text should be on one line.<br><br>To check for software updates we need to do a little more work.<br><code>mkdir ~/scripts/arch-updates && nano ~/scripts/arch-updates/conky-updates.pl</code> to insert:<br><br><code>#! /usr/bin/perl -w<br>use strict;<br># November 15, 2006<br># Daniel Vredenburg (Vredfreak)<br># This is a program that checks for package updates for Arch Linux<br>users.<br><br>open (MYINPUTFILE, "/home/yourusername/scripts/arch-updates/updates.log") or die "No such file or directory: $!";<br><br>my $i = 0;<br>while()<br>{<br>if (/^(.*)\/(.*)(\..*\..*\.)/)  {<br>#print " \n";<br>$i++;<br>}<br><br>}<br>if ($i == 0) {<br>print "up to date";<br>} else {<br>print "available ($i)";<br>}<br>close(MYINPUTFILE);</code><br><br>Thanks again to Daniel for this script. Make the script executable next.<br><code>chmod +x ~/scripts/arch-updates/conky-updates.pl</code><br><br>There's yet more to do for the update notifications.<br><code>nano ~/scripts/arch-updates/pacsync.sh</code> and insert:<br><br><code>#!/bin/bash<br><br># This issues a command to 1. Sync the package database,<br># 2. Check for upgradable packages, 3. print the URL of any possible<br>upgrade.<br># The output of our command gets written to updates.log, which we will<br>use<br># conky_updates.sh to parse to see if there are any available updates.<br><br>pacman -Syup --noprogressbar > /home/yourusername/path/to/updates.log</code><br><br><code>touch /home/yourusername/path/to/updates.log && sudo cp ~/scripts/arch-updates/pacsync.sh /etc/cron.hourly/</code><br>Thanks again to Daniel Vredenburg (Vredfreak) for this great script.<br><br>To tie it all together, we'll now write the startup script that tells what window manager and programs to start on login.<br><code>nano ~/.xinitrc</code> and add this:<br><code>#!/bin/sh<br>#xcompmgr -cC & ;;uncomment this if you want compositing enabled (for true transparency, drop shadows, etc.)<br>~/wallpaper.sh & ;;the wallpaper script<br>xscreensaver -no-splash & ;;a screensaver program<br>thunar --daemon & ;;to keep the file manager checking for flash drives, cds, etc, being plugged in<br>/usr/lib/wicd/tray.py & ;; a networking and wireless client<br><br>DEFAULT_SESSION=twm<br><br>case $1 in<br>openbox)<br>(sleep 1 && stalonetray) & ;; start the system tray<br>conky &<br>exec /usr/bin/openbox-session<br>;;<br>xmonad)<br>/home/redline/scripts/dzconky &<br>exec /usr/bin/xmonad<br>;;<br>*)<br>exec $DEFAULT_SESSION<br>;;<br>esac</code><br><br>This script will log you into the twm window manager unless you hit F1 at the login screen. If you do, it will toggle between Openbox and Xmonad as the window manager.<br><br><strong>The Good Easy:</strong><br>The following command will install most of the cool and useful programs in the known universe including a bunch of programming languages, a version control system, IM client, Movie and Music players, and of course Firefox. All we're down to now is fine tuning and (optionally) making a Live CD of the installed system.<br><br><code>sudo pacman -S mercurial xarchiver pidgin feh rxvt-unicode firefox flashplugin gforth ruby lua erlang ghc python sbcl drscheme emacs thunar mc xmonad xmonad-contrib openbox mplayer mplayer-plugin mpd ncmpc sonata codecs dzen2 transmission rtorrent conky epdfview libnotify libdvdread libdvdcss libdvdnav lynx dvd+rw-tools ttf-ms-fonts ttf-dejavu terminus-font zip unzip hicolor-icon-theme xchm scrot gqview stalonetray xscreensaver virtualbox thunar-volman qt3 sdl amule transset-df</code><br><br>Configure thunar-volman by opening thunar and going to edit->preferences->advanced, then enabling volume management and<br>clicking configure. This will finish enabling you to hotplug flash drives, cds, dvds, etc and have them automount properly.<br><br>Virtualbox was one of the programs installed and will enable you to try out or use other Operating Systems as VMs like VMWare or Parallels. Enable it for your account with the following:<br>Run <code>sudo gpasswd -a yourusername vboxusers</code> and then add vboxdrv to the modules section in /etc/rc.conf.<br><br>MPD and Sonata are the music players installed. You could write a book on all the different ways to use MPD (including as a home music server!) but for a lone workstation the following configuration works well for me.<br><code>sudo cp /etc/mpd.conf.example /etc/mpd.conf<br>sudo nano /etc/mpd.conf</code><br>Change the user from mpd to your username and change the music and playlists directories making sure they are uncommented, then run:<br><code>sudo chown -R yourusername:users /var/lib/mpd/*<br>sudo touch /var/run/mpd/mpd.pid<br>sudo chown -R yourusername:users /var/run/mpd/*<br>mkdir ~/Music/Playlists<br>mpd --create-db<br>sudo chown -R yourusername:users /var/log/mpd/*</code><br>Add mpd to the daemons list in /etc/rc.conf, then run <code>nano .config/sonata/sonatarc</code> and add your username and password to the audioscrobbler section and set use_audioscrobbler to True if you want to enable it to scrobble your tracks to Last.FM.<br><br>There are a few programs we'll have to build ourselves to use. Our CD Burner, Xfburn is a good example. The following commands should get the job done.<br><code>cd ~/builds<br>wget<br>http://aur.archlinux.org/packages/xfburn/xfburn.tar.gz && tar -zxvf xfburn.tar.gz && cd xfburn && makepkg -s && sudo pacman -U *.pkg*</code>.<br><br>I use MIT-Scheme because I like it's interaction mode in Emacs and it's good for the SICP exercises. This program takes a few HOURS to compile though even with a powerful system and it can't be compiled on a system with less than 512mb of RAM, maybe less than 1GB. At any rate, you may not need it. If you do, I advise doing this:<br><code>cd ~/builds<br>wget<br>http://ftp.gnu.org/gnu/mit-scheme/snapshot.pkg/20080130/mit-scheme-c-20080130.tar.gz<br>&& tar -zxvf mit*.tar.gz && cd mit-scheme-c-20080130/src && etc/make-liarc.sh && make install && sudo cp etc/xscheme.el<br>/usr/share/emacs/site-lisp/ && cd /usr/bin && sudo ln -s /usr/local/bin/mit-scheme scheme</code><br>Then <code>nano .emacs</code> to insert <code>(require 'xscheme)</code> and save and exit.<br><br>I don't have an iPod. If you do you can probably just <code>sudo pacman -Sy gtkpod</code> and be in good shape but I use gnomad2 to load my music player with songs. To get it:<br><code>cd ~/builds<br>wget http://aur.archlinux.org/packages/gnomad2/gnomad2.tar.gz && tar -zxvf gnomad2.tar.gz && cd gnomad2 && makepkg -s && sudo pacman -U *.pkg*</code><br>Then <code>sudo nano /etc/sudoers</code> and insert this below %wheel All=(ALL) ALL:<br><code>%wheel ALL=NOPASSWD: /usr/bin/gnomad2<br>%wheel  ALL=NOPASSWD: /sbin/reboot</code><br>This will make it possible to add menu entries for gnomad2 and to reboot the system that don't require passwords to be entered.<br><br>To setup wireless install wicd with <code>sudo pacman -S wicd</code>.<br>Disable the network daemon and any network interfaces wicd should manage, then add hal and wicd to the daemons list in rc.conf and run <code>sudo gpasswd -a yourusername network</code>.<br><br>To create a mercurial repository so I can hack code and do a bit more work on the menu I run<br><code>cd ~ && hg clone http://redlinernotes.com/code<br>mmaker -vf openbox</code><br><br><strong>Fiddly Stuff:</strong><br>Now, we're done with most of the serious business. From here on out it's mostly fiddly stuff. Fixing application settings to my preferences and so on. You've come this far though, why not go all the way? :-)<br><br>I adjust some commands to menu.xml to make my life easier. This menu is the one that shows up when you right-click on the desktop, by the way.<br><code>nano ~/.config/openbox/menu.xml</code> and change the execute command for emacs to <code>urxvt -e emacs -nw</code> and the execute command for gnomad2 to <code>sudo gnomad2</code>. I'd also suggest adding an item that executes <code>sudo reboot</code>.<br><br>Make urxvt windows borderless and enable mouse control of window transparency by editing rc.xml and inserting:<br><code><application name="urxvt"><br><decor>no</decor><br></application></code><br>beneath <code><applications></code> and inserting<br><code><mousebind button="C-Up" action="Press"><br><action name="Execute"><br><execute>transset-df -p --inc 0.2</execute><br></action><br></mousebind><br><mousebind button="C-Down" action="Press"><br><action name="Execute"><br><execute>transset-df -p --min 0.2 --dec 0.2</execute><br></action><br></mousebind></code><br>beneath the frame context in mousebindings.<br><br>To get dzen to display something useful in Xmonad pipe our already finished conky script into it like so:<br><code>nano ~/scripts/dzconky</code> and insert:<br><code>#!/bin/sh<br><br>FG='#aaaaaa'<br>BG='#1a1a1a'<br>FONT='-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*'<br>conky | dzen2 -e  -h '16' -w '1560' -ta r -fg $FG -bg $BG -fn $FONT</code><br><br>And then make it executable...<br><code>chmod +x ~/scripts/dzconky</code><br><br>The Xmonad config file will still need to be modified to work with that properly. I may or may not address that in an upcoming post.<br><br>The last thing I do is set the Openbox theme to Onyx with Obconf and go crazy perfecting my ~/.config/openbox/menu.xml file.<br>It's a bit big to quote here so I'll link to it as a sample. <a href="http://www.redlinernotes.com/docs/menu.xml">Here it is</a>.<br><br><strong>LARCH IT!</strong><br>The cool part of this is as least partly that after building your own version of Linux from the ground up (with some help from Arch's package system) that you can make a Live CD out of it and give it to your friends. Hopefully you won't leave personal information or data on it though. Then again, if you're using it as your own personal install CD there's no better way to go. Here's how to do it.<br><br><code>sudo nano /etc/pacman.conf</code> and insert this:<br><code>[larch5]<br>Server = ftp://ftp.berlios.de/pub/larch/larch5.3/i686/</code><br>then <code>sudo pacman -Syu && sudo pacman -S larch larchin larch-live larchify dosfstools</code>.<br><br>Finally, <code>sudo ./larchify /</code> to generate a restore/live cd image and burn it with <code>wodim -v dev=/dev/cdrw /.larch/mylivecd.iso</code>. Done and Done! Here's how it looks for me with everything finished. Click on the title of each picture for the high resolution version.<br><br>(Editor's Note: These pictures actually show the not quite finished system sans-transparency and the conky updates script. Also, at present wired connection users might as well not setup wicd as it won't autoconnect on boot though you can connect through it. Just leave dhcp enabled for eth0 in rc.conf.)<br><br><a href="http://www.redlinernotes.com/images/screenshots/070708_clean.jpg">Clean Desktop</a>:<br><img src="http://www.redlinernotes.com/images/screenshots/070708_clean.jpg" alt="Clean Desktop 07/07/08" /><br><br><a href="http://www.redlinernotes.com/images/screenshots/070708_dirty.jpg">Slightly Dirty Desktop</a>:<br><img src="http://www.redlinernotes.com/images/screenshots/070708_dirty.jpg" alt="Slighty Dirty Desktop 07/07/08" />


title: Full of Ideas
date: 2011-02-01 03:07:54.000000
format: html
content:
  For some reason I keep coming with ideas that I don't have time to execute on tonight. So this is going to be the dumping grounds.<br><br>1) The RIAA creates a service/social network for DJs where they license (probably DRM'd) stem files so people can mashup artists can get exactly the sample they want. You could do a 99 cent per stem model or bundle all the stems for a track for $5 or something. The license would demand that redistribution was forbidden but non-commercial derivative works were fine. The point? Being a mashup artist/DJ these days is all about being a performance artist anyway. DJs and mashup artists often give away their music anyway so this is a straight win for them. Haven't you ever wanted to sample that one track but just the bassline at that one point in the song? Now you can. And now the RIAA can work on monetizing a huge amount of previously *ignored* content that it owns the rights too. The songs aren't the only valuable property.<br><br>2) Dope Wars for Mobile with Augmented Reality style, Location-based trades. C'mon. Next time you're at the MARTA station, go hunting for the Smack stash while you wait for the train. Have leaderboards and turf wars. Try to recruit people into your gang or what have you. Play with your friends. Win.<br><br>3) I can't wait until the day that livecoding is cool. When will it happen? Probably when people are making sick music live with code on the regular. We haven't seen that artist yet. And it's tricky to think of how you can make code flexible and expressive enough to be a good instrument. There are three types of sounds you'll use in a sense: samples, synths and effects. Beyond that, you need some level of templating/sequencing and mixing support. You also really want a client/server or development/production thing going on. If you're doing it live, unless you rehearse and preplan stuff you're going to come up with some bad ideas. Have a server going that loops the current measure or something and have the DJ's headphones hooked up to the client where you experiment then select a hunk and "push". Oh God do I wish this software existed...<br><br>4) A song of the day site...if you don't already know what I'm talking about from my Facebook posts...well, don't worry about it. But think about this: We don't need the RIAA. We already handle both the Distribution and Promotion angles of the music biz either way. And people like sharing music. 8tracks is an interesting model here. It takes the abstract idea of a mixtape and tries to give that a life of its own and socialize it. We can do that for all our media, music is just the easiest at the outset from what I can tell. In my opinion, the only thing like this that's really taken root is reddit for websites. Let's be more interesting.<br><br>5) So privacy and censorship are serious issues on many people's minds lately and with good reason. Things in Egypt are pretty crazy. I don't know anything about distribution or security but using things like PGP and XMPP OTR have made me wonder how we can make them ubiquitous, largely unnoticed, user-friendly and everyday phenomena. I'd say it's just a question of ensuring that stuff is activated on shipping products but then you have to deal with key management. Users don't want to have to put their keys on a new device or fiddle around so their identity is established and stuff interoperates. I don't have a solution for that...and that is the real issue. It occurred to me though that with all the data stored on social services an interesting way to handshake with your friends would be to prompt them to disclose their most recent foursquare check-in or last.fm scrobble and confirm it against the upstream servers. It's interesting in the sense that it should change regularly so no key is valid for a very long time. It's interesting in that you could randomize which service was used (Facebook activity, foursquare, last.fm, tripit, youtube, reddit, etc). It just interests me. The problem is all that data is usually publicly available anyway. I'm also not a security wonk so I'm sure the idea is riddled with dumb even if the data was private. Oh, well. I guess my point was that's easier in some sense than key distribution because no regular person knows or cares what a private key is. But they're all interested in their social data. Hmm.<br><br>PS: Yes, privacy and anonymity are two separate and equally important issues. I'm talking about privacy above.


title: Fumbling through February
date: 2009-02-05 02:18:44.000000
format: html
content:
  Some days (or nights) you just feel like an idiot. There's no rhyme or reason and there's just no stopping it. I suspect that it's a result of wanting to do so many things and being unable to cover it all. The last week or so has flown by. Everything seems to be moving very quickly. I've done alright on some of my new year's resolutions but others have fallen behind. Clearly, I'm blogging enough and I've been exercising and/or skateboarding fairly frequently. I haven't extracted samples from my music library since around the second week of school though and I haven't made any progress on HTDP or really any code.<br><br>Moreover, I'd like to participate in the Summer of Code if at all possible and really want to work my way all the way through Real World Haskell and The C Programming Language in the near future. The latter things will have to wait for academics and essentials. I just hate not being able to do it all. I think I have the time, I'm just not dedicated enough. I'm not sure.<br><br>That said, things have been going pretty well in 2009. Even better than 2008 which was mostly good to me aside from some work troubles and restlessness towards the end. Things with Teresa are outstanding, I'm at least partly enjoying school, I'm dealing with financial aid and I've got friends and hobbies on the weekend. I'm doing well in my classes and need to get back to that for now. There's work left to do.<br><br>Aside from work there are two interesting things in the next two days. Tomorrow, a Killzone 2 demo is launching on the European PSN. It should prove interesting as a technology showcase. I remember reading a cool paper about it but I can't remember where I found it. Aha. Google found it for me but be warned it's a PDF. So here's a quick primer on the <a href="http://www.guerrilla-games.com/publications/dr_kz2_rsx_dev07.pdf">Deferred Rendering techniques</a> they used if you're interested<br><br>Alien Workshop is releasing Mind Field on Friday and I'm quite looking forward to seeing that. They've got a hell of a team these days and Heath Kirchart has the ender. I always liked Kirchart. While we're on a skateboarding note I should mention "<a href="http://www.theberrics.com/">The Berrics</a>". The Berrics is a combination of the first names of Steve Berra and Eric Koston, close friends and prominent pro skaters who co-own this private skatepark. They've decided to hold a rather <a href="http://theberrics.com/batb.php">far-ranging Game of Skate</a> and I might as well get in on the action and post my foolish bracket before things get further along:<br><br>Marc Johnson will beat Berra, sorry Steve. I saw footy that showed Erik Ellington beat Jimmy Cao which wraps up the second round. For the quarterfinals, Benny Fairfax will take out Erik Ellington, Marc Johnson will take out Billy Marks, Mike Mo Capaldi will take out Mike Carroll and in an upset PJ Ladd will take out Eric Koston. For the semis, Marc Johnson will take out Mike Mo (this is actually probably an upset) and Benny Fairfax will take out PJ Ladd (this is <em>definitely</em> an upset). Finally Marc Johnson will take the crown.<br><br>Okay. Enough of this whiny nonsense. Back to work. *sigh*


title: Funcalls and Fun w/Code
date: 2008-09-29 17:49:22.000000
format: html
content:
  Life: I have a part-time job interview tomorrow and I've gotten by so far through contract work. I'm also <i>really</i> enjoying not having a car. I've picked up some new tunes and am in guitar fingerpicking mode. I should learn how to myself, really. For now though I'm just listening to Kaki King and Andy McKee. Oh, and Calexico too. They're awesome. Moving on...<br><br>Techie stuff: I've pretty much completely switched to <a href="http://xmonad.org/">Xmonad</a>. It's great and I've polished up my key layout and config for it. There will be some changes in that sense in my next RedLinux release (Fast Amazon download mirror and install guide <a href="http://redlinernotes.com/blog/?p=724">here</a>). For example, there won't be a Caps Lock key in my Linux. It will just be another Control key. It's not like you use it anyway, right? I'm also starting to finally get comfortable with emacs and slime. And <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> is a really fun and great book to pick up lisp. More on all that later. Here are some fun code snippets:<br><br><pre lang="lisp"><br>(dotimes (x 30)<br>  (dotimes (y 30)<br>    (format t "~3d" (* (1+ x) (1+ y))))<br>  (format t "~%"))<br></pre><br><br><pre lang="lisp"><br>(do ((n 0 (1+ n))<br>       (cur 0 next)<br>       (next 1 (+ cur next)))<br>      ((= 10 n) cur))<br></pre><br><br>Pop quiz: What do these two Common Lisp snippets do?<br>Answers: <pre lang="lisp">(reverse '(The first prints out a multiplication table up to 30x30. The second computes the 11th fibonacci number.))</pre><br><br>And the first macro:<br><pre lang="lisp"><br>(defmacro do-primes ((binder lbound ubound) &rest expr)<br>  `(do ((,binder (next-prime ,lbound) (next-prime (1+ ,binder))))<br>         ((> ,binder ,ubound))<br>      ,@expr))</pre><br><br>Sure it's useless but it makes sense and points the way to some great possiblities. Additionally, destructured lists like so are grand. That's enough lisp to bug you folks with for one day. Deuces.


title: Future Projects…
date: 2008-03-02 22:08:29.000000
format: html
content:
  I'm looking to make a "You might be an Oglethorpe Kid if..." list. Any suggestions?<br><br>I was driving to Oglethorpe Friday night and after seeing a license plate ("ADD 7018" I think...) I had this interesting idea for a function:<br><br>1. Takes an integer (i.e. 7018) as it's single argument.<br><br>2.  Converts it to a list of integers (i.e. {7, 0, 1, 8}).<br><br>3. Adds the head of the list to the concatenated integer of the tail (i.e. 7 + 018).<br><br>4. Repeat until it's a 1 digit value and return that value.<br><br>So, on the first run you'd wind up with 025, then 25, then 7. Notice anything interesting? That's the first integer in the list. I'd like to write another function that runs the first million numbers through this function and then outputs the results in a nice readable table. That'd be interesting.<br><br>Anyway, in other news if you check I've updated the <a href="http://www.redlinernotes.com/">frontpage</a> on my site to be a bit more accurate with regards to my current activities. I also started categorizing all my old blog entries back in January and I'm done so now everything is tagged and you can pull up stuff by topic. Say if you wanted to read all my <a href="http://www.redlinernotes.com/blog/?cat=28">bad poetry</a> for example. Or my crazy <a href="http://www.redlinernotes.com/blog/?cat=48">essays</a>, all my rants involving <a href="http://www.redlinernotes.com/blog/?cat=9">Linux</a>, or posts with <a href="http://www.redlinernotes.com/blog/?cat=33">Pictures</a>, etc. Of course, the search function always works too.<br><br>I watched Lecture 2-a of the <a href="http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/">SICP Lectures</a> last night. The first half hour made sense but the half hour after that was more like the sound of my brain melting. I'm going to try a few of the problems and see how it goes. I also might work on some goofy playlists. If you've got some goofy playlist\artist\song you've been rocking out to recently post it in the comments. Alright, wish me luck.


title: Git For Dummies...
date: 2009-10-22 19:53:02.000000
format: html
content:
  A friend asked me for a simple tutorial. So here one is. Also, just because I can:<br><br>My workflow roughly looks like:<br><code><br>Start or clone git repository: [git clone $URL] OR [mkdir project; cd project; git init]<br>Make some changes: HACK HACK HACK, ensure the files are tracked: [git add $FILES]<br>Review my changes: [git status], [git diff]<br>Uh oh, a choice!: if (I like these changes)<br>                           then [git commit] // ideally, your $EDITOR environment variable is set to the editor you like.<br>                           else [git checkout -- $FILES] // yes, the dashes should literally be there. this reverts the files to the last commit's state.<br>Repeat.<br></code><br><br>I didn't cover pushing and pulling (collaborating) or branching above (working on separate features simultaneously).<br>Let's do that now:<br><code><br>Get a list of branches and show the current branch: [git branch]<br>Start a new branch to work on: [git branch $NAME]<br>Switch to a different branch: [git checkout $NAME]<br>Delete a branch you don't want anymore or are finished with: [git branch -d $NAME]<br>Merge changes from one branch into another branch: [git merge $SENDER $RECIPIENT] // Branch recipient gets senders changes.<br>List tracked repos (online, github, etc): [git remote]<br>Track a friends repo (or one online, github, etc): [git remote add $URL]<br>Send your changes to a repo you have write access to: [git push $REMOTE $NAME] /* remote can be a url or one of your remotes.<br>                                                                                                                 name is a branch on your machine. note that master is a branch. */<br>Retrieve and merge in a friends changes: [git pull $REMOTE $NAME]<br></code><br>There are a bunch of blog tutorials. The best way to find them is to go to programming.reddit.com and search for "git tutorial" or "git intro".<br><br>Other than that, there are two free git books I know of:<br>Pro Git - http://progit.org/book/<br>The Git Community Book - http://book.git-scm.com/


title: Goals for 2015
date: 2015-02-21 15:18:00.000000
format: md
content:
  ## Recreation and Balance

  For years, I've been focused on production. Even my "relaxing" activities aside from
  throwing dinner parties or going to concerts with friends have been productive in nature.

  * Open Source
  * Trying to Make Music
  * Pseudo-Competitive Smash Brothers Melee

  You get the idea. For the past 5 years or so, I've been terrible at doing things purely
  for recreation and fun. I struggle not to think of it as "wasting time". I'm always anxious
  about my technical abilities, my ability to find employment, my preparedness for the future.
  Rationally, I know that's all pretty ridiculous but I struggle to unwind all the same.

  Work life balance has for a while seemed a relic of a bygone era. But I want to turn that
  around this year. Ironically, I've worked more 50 and 60+ hour weeks this year than any
  previous one. It turns out becoming responsible for the education of 15 people in a 12-week
  programming bootcamp is pretty demanding. That's why I'm listing these purely recreational
  goals to try and commit myself to doing some things *just for fun*.

  ## Recreational Goals

  #### Reading

  1. The Causal Angel by Hannu Rajaniemi
  2. Saga by Brian K. Vaughan
  3. One of Idoru or Pattern Recognition by William Gibson
  4. One of Redemption Ark by Alistair Reynolds or The Player of Games by Iain Banks
  5. Prince of Persia journals
  6. One of Transmetropolitan / Y: The Last Man

  #### Gaming

  1. Retro/Kickstarted: Hyper Light Drifter
  2. New Adventure: One of Rime or Legend of Zelda Wii U
  3. Nostalgia: One of Ocarina of Time, Fez, or Pokemon Red/Blue
  4. Sci-fi: One of SW: KoToR or Mass Effect
  5. Fantasy: Final Fantasy III or Chrono Trigger or Final Fantasy IX or Earthlock
  6. Magic: Play more Magic the Gathering with James, spend money on cards. Be a kid.

  #### Visual

  * Watch at least 2 documentaries about creative passions: Cooking, Indie Games, etc
    * Citizenfour
    * Outerlands?
    * Game Loading?
    * Mind of a Chef?
    * No Map for these Territories?
    * One of Modulations / Hi-Tech Soul

  #### Vacation

  * Take at least one trip to the beach for no less than 5 days.
  * Take at least one trip to see: James, Burke, or Justin.


title: Goals for 2015
date: 2015-01-01 18:15:00.000000
format: md
content:
  ## Technical Goals

  I've been in a technical rut for a while. Sure, I learned new things
  at my job but limited myself outside of it by sticking to projects I
  wasn't motived about and only working with tools I was familiar with.

  As much as anything, 2015 is going to be about playing with new projects,
  experimenting with new tools, and focusing on fundamentals again.
  Seeing as I have 3 big goals here, I might just try to tackle one each
  semester. :)

  ### Ocaml

  To that end, my primary goal will be to [learn Ocaml][rwo] and build
  something cool with it. I'm leaving that just as open ended as it sounds.

  I'm interested in Ocaml for a variety of reasons. Its origin dates from
  a time before Intel and Microsoft created a 20-year dominant platform.
  It was envisioned as a systems language, much like Lisp, to compete with
  C++.

  That said, it employs pattern matching and a strong, static type
  system like Haskell. Unlike Haskell, it has a fairly simple runtime and
  compiler built to give *very clear* intuition about code performance.
  While Ocaml is strongly functional, it provides for use of imperative
  state without monad machinations (sorry [@James](http://twitter.com/jdabbs)).

  There are other reasons but I think this is a good start. I'd be interested
  in everything from writing an IRC bot, to scripting tasks, to NES reverse
  engineering tools (i.e. lots of graph manipulation), to [OpenMirage][om] toys.

  [om]: http://openmirage.org/
  [rwo]: https://realworldocaml.org/

  ### Javascript / Frontend

  I've leaned towards backend work in my career where possible. After helping
  TA Tim's Frontend engineering course last semester I finally want to pick up
  some front end skills. I'm not angling to get much better from a design or
  HTML/CSS perspective, but have a definite interest in [mithril][lotj] and
  Clojurescript's [om][clj_om]. Elm also seems really cool but I'd prefer to
  stick to slightly less alien tech for the time being.

  I'm considering porting my [Nintendo emulator][famiclom] to Clojurescript
  and getting it to use canvas but I worry about getting bogged down as I did
  with the Lisp version. It was fairly painless getting a
  [rough cl-6502 port][cljs-6502] up in Clojurescript in a few days though.

  [lotj]: http://lhorie.github.io/mithril/
  [clj_om]: https://github.com/swannodette/om
  [famiclom]: https://github.com/redline6561/famiclom
  [cljs-6502]: https://github.com/redline6561/cljs-6502

  ### Algorithms

  To be honest, my algorithms chops have never been terribly good. I think
  one thing that's intimidated me working on [trowel][trowel] is a lack of
  confidence in my algorithmic reasonining. So I'll be working through the
  latest edition of Sedgewick's [Algorithms][sedgewick] with a particular
  focus on graphs. With any luck I'll actually make some progress on trowel.
  Maybe I'll even wire it to an om app with some [logic programming][core-logic]
  or [constraint propagation][screamer] tricks.

  [sedgewick]: http://algs4.cs.princeton.edu/home/
  [trowel]: https://github.com/redline6561/trowel
  [core-logic]: https://github.com/clojure/core.logic/wiki/A-Core.logic-Primer
  [screamer]: http://nikodemus.github.io/screamer/


title: Goals for 2015
date: 2015-01-01 17:50:00.000000
format: md
content:
  2014 was a huge year. Notably, I moved in with Norma, switched jobs
  from writing code to [teaching how to code][hello_ironyard], and
  learned more about [how to manage myself][starting].

  [starting]: http://blog.kingcons.io/posts/Starting-Again.html
  [hello_ironyard]: http://atlanta.theironyard.com/post/105713862140/

  I've got plenty of things to work on in 2015 so I'm breaking this into
  a sequence of posts based on subject. I'd like to broadly note that
  for my first semester (roughly January through March) I might barely
  get anything done and **that is okay**. I've never taught before and I
  expect that learning curve to take up most of my time until early
  April. Now without any further ado ...

  ## A Few Goals for 2015

  1. [Personal][personal] (forthcoming)
  2. [Technical][technical]
  3. [Musical][musical] (forthcoming)
  4. [Competitive][competitive] (forthcoming)
  5. [Recreational][recreational]

  [personal]: Goals-for-2015-Personal.html
  [technical]: Goals-for-2015-Technical.html
  [musical]: Goals-for-2015-Musical.html
  [competitive]: Goals-for-2015-Competitive.html
  [recreational]: Goals-for-2015-Recreational.html


title: Good Things
date: 2009-09-09 21:40:51.000000
format: html
content:
  So, what are some good things that have been happening lately?<br><br>- Good things continue to happen around the <a href="http://arstechnica.com/gadgets/news/2009/08/nokia-evolves-away-from-internet-tablets-with-new-n900.ars">N900</a>. Specifically, Nokia has announced they <a href="http://www.engadgetmobile.com/2009/09/09/nokia-putting-foot-down-on-maemo-wont-allow-carrier-customizat/">won't allow carrier customization of the phone</a>. Presumably, that includes jailing the user or preventing access to the terminal/root access. Here's hoping. Secondly, Thomas Thurman has begun writing a <a href="http://blogs.gnome.org/tthurman/2009/09/06/n900-tutorial-contents/">tutorial series on developing software for Maemo 5</a> that looks quite helpful.<br><br>- <a href="http://lambda-the-ultimate.org/user/1250">Per Vognsen</a>, perhaps better known as the mighty <a href="http://www.reddit.com/user/psykotic">psykotic</a> on reddit, has finally <a href="http://backpackhacker.com/">got a blog</a> up and running. I can't yet understand his first few entries but I'm glad he's putting his thoughts out there on a forum he's in control of.<br><br>- GHC 6.12.1 is nearing release. The first release candidate is <a href="http://www.mail-archive.com/glasgow-haskell-users@haskell.org/msg17185.html">planned for September 14th</a>. Even though I'm going to be focusing on Lisp for a bit, I think the Haskellers have an awesome language and I'm very impressed with the work that's going on in GHC.<br><br>- Speaking of languages that impress, the Factor developers are chugging along as usual getting alot done. I do hope Slava releases 1.0 in the next year though. :) I won't go over all the specifics but you can read about the progress on <a href="http://factor-language.blogspot.com/">Slava's blog</a>. It's a pretty enjoyable peek into compiler hacking. Also, though I hoped the ARM port would be revived <a href="http://github.com/slavapestov/factor/commit/9f33d7e0fac8a402890f3ee51c9c4917fa08be36">it appears PPC will receive that attention</a>. C'est la vie.<br><br>- <a href="http://jacobian.org/writing/snakes-on-the-web/">Snakes on the web</a> was a talk given at a recent Python conference and proved pretty interesting. As I mentioned, I'm increasingly getting into webdev so hearing an inside perspective on the state of the field was fun.<br><br>- Finally, the R7RS process has gotten underway and <a href="http://scheme-reports.org/2009/position-statement.html">the current proposal</a> is to split Scheme into two separate languages. One for academia and one for industrial use, or <a href="http://scheme-reports.org/2009/working-group-2-charter.html">one big</a>, <a href="http://scheme-reports.org/2009/working-group-1-charter.html">one small</a> essentially. I don't know how I feel about this. But at this point I'm pretty Common Lisp focused anyway. And since R6RS was essentially ignored anyway, I'll wait and see how that community responds to whatever develops. The results from R7RS are still at least a year out. Reddit discussion <a href="http://www.reddit.com/r/lisp/comments/9cpwj/scheme_should_designate_two_separate_but/">here</a> and <a href="http://www.reddit.com/r/programming/comments/9cptr/scheme_should_designate_two_separate_but/">here</a>.


title: Guides to Hacks
date: 2007-06-05 16:15:00.000000
format: html
content:
  <a href="http://ubuntuforums.org/showthread.php?t=122402">Setting up VNC with GDM Login</a> <a href="https://help.ubuntu.com/community/VNC">with steps to edit gdm.conf from here</a><br><a href="http://ubuntuforums.org/showthread.php?t=420034&amp;highlight=tomcat">Installing up Tomcat 6 on Feisty</a><br><a href="http://ubuntuforums.org/showthread.php?t=422472">Configuring Tomcat 6 on Feisty</a><br><lj-cut text="My .conkyrc">background        no<br>update_interval        1.0<br>double_buffer        yes</lj-cut><br><br>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,skip_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


title: Hacker Culture and The Road Ahead (poor man’s draft)
date: 2007-07-04 19:24:00.000000
format: html
content:
  <p style="margin-bottom: 0in">Of late there has been a growing awareness and concern over the migration of applications from our desktops onto the Internet and the emergence and rise of Software-as-a-Service (SaaS) along with a consequent deluge of predictions about the death (or irrelevance) of the desktop. While these discussions are not without merit I feel they share some general flaws in approach which I seek to address here.</p><br><p style="margin-bottom: 0in">One of the hard parts about engaging in such discussions is that they do not constrain themselves to a purely technical realm. Much about the Hacker Culture is, or was, revolutionary due to it's contribution to the larger movements of desktop computing and the internet and this awareness of prior revolutionary behavior coupled with the endless proclamations of revolution in the industry that pass for marketing lead to a confused understanding of what revolutions really did occur, where they have led us, and what might lie on the road ahead.</p><br>Thanks to the general muddiness of these still fresh (and some would say ongoing) revolutions, discussions about something as simple as the migration of applications and functionality from a local machine to a networked server bring with them issues of law, technology, history, politics, economics, marketing, sociology, and innovation. The capacity for simple discussion of events as they are has become impossible. Given this state of affairs, I will do my best (through my biases, which are many) to sort through the rabble.<br><br>Most responses to the statement that applications are moving from the desktop to the web fall into one of two camps. The first being that the desktop is as important as it's always been and\or that the web isn't significantly infringing on the desktop's importance and functionality. The second response is that there are no open source web services and open source needs to figure out how to compete in this new emerging market. Both are knee jerk reactions, one just comes from a position of invulnerability or incredulity while another comes from a position of fear or paranoia.<br><br>Before going any further I'd like to state some of my assumptions and\or biases. First, the desktop is changing. There are some forces undoubtedly at work that change the extent to which our data and applications are local and thus our computer is losing some of it's centrality and being distributed out on "the grid" of the internet. Second, the desktop hasn't changed. This may seem contradictory to the first assumption but I don't think it is.<br><br>What I mean essentially by this is that the next paradigm beyond that of the desktop, GUI, keyboard and mouse hasn't arrived yet and until it does things largely will be the same. We will still need an OS to talk to the hardware and software besides a browser to do many things we do, especially given that high speed internet access is not yet available everywhere all the time. Finally, while the next paradigm beyond that of the desktop may presently exist in the wild we cannot distinguish it as the next paradigm until it has already run it's course. We will not know the world has changed until it has.<br><br>In terms of the responses to the idea that applications are moving webward, I'd like to start with Perspective A. The person who believes Perspective A thinks that the desktop isn't changing or that it's functionality and importance aren't threatened by the rise of web applications. I'd like to refute this by offering myself as a personal example. I've never used a mail client. Ever. Thunderbird, Outlook, Evolution, iMail, any of it. All my e-mail has always been webmail and even trying to think of e-mail as being an offline phenomena that I have saved locally to look at when I'm offline is an odd and foreign concept. The idea of a mail client is, for me, irrelevant. I think that's enough to show that the desktop is changing.<br><br>Now to address Perspective B. The person who believes Perspective B believes that Open Source will lose relevance in a world where net-accessible advertising-sponsored software (gmail) is available if Open Source does not create equivalent software. This is misguided on a number of levels. Not least of which is related to the fact that open source emerged in response to a lack of Richard Stallman's access to printer drivers. The scratch your own itch element of web services is not available. There is no platform to begin copying. There is no central service upon which other services are built besides the backbone of the net itself, which is just Linux Clusters anyway. There isn't a Unix to begin copying.<br><br>A lack of a target is no small problem. The initial starting goal of developing a UNIX-like Operating Environment was crucial to open source getting off the ground in a meaningful way, at least as far as Linux is concerned. There is no web equivalent. The problems run deeper than this though and can be drawn out further by remembering the early moniker of free software. Freedom to modify is not a valid goal of a webapp and not only because of the client-server model. Web software doesn't sleep. It's always live and there are always users. This wouldn't be a large problem given the nature of SCMs like bazaar today. Just create a new branch. And yet the notion of a server trying to run multiple versions of a web app or service is simply ludicrous. The notion that Facebook as a platform is a walled garden is not necessarily misguided if applied liberally to other web apps. Freedom of data can be a concern but on the web freedom of code will have to take on a new form. Perhaps this is a problem we should confront.<br><br>And whereas the 80s and 90s left hackers free to tinker with little consequence for the majority of the world the extent to which the personal computer has invaded the workings of human civilization make even minor undertakings more serious in influence than the GNU C Compiler was the day it was started. Finally, the entire conversation is too wrapped up in notions of maintaining relevance and influence. Open Source at last has something to lose even if it's legacy is invulnerable. Whatever emerges next will emerge independent of our actions. Hopefully we will see it coming and aid it's rise or even have a hand in it but we cannot act out of fear. Tinkering away like a bunch of crazed kids with legos got us here and it will get us wherever there is too. Even if open source loses the war over code, the inroads made in the war over organizing methods or production are likely to change the face of the society.<br><br>********************************NOTES********************************<br><br>tech thoughts (mac\linux, web\desktop, ubiquitous computing\pc). it's really about time i wrote something on open APIs and web\desktop. can open source happen on the web? linus made a replacement for unix. there is no central web app\top\thing to replicate in this fashion.<br>things to tackle:<br>hacker culture came from academic underground. tinkerers. web 2.0 came from where?<br><br>people think open source should "compete" but with what? the only thing to compete with that even approaches web platform status in the way unix approached workstation platform status is google. how do hackers compete with that exactly? there is no web 2.0 target the way there was a unix OS target. and are all web app vendors now just walled gardens, facebook is aol, etc? that's weird. that doesn't make sense. but really the only unwalled web garden is the browser. and that's on the desktop.<br><br>what about the politics of all this? the politics then in the 70s\80s\early 90s and the politics of technology now? it's gone from nobody caring to tons of people. it affects everyone now. we have to have a goal to move into this new space.<br><br>open source as a method of production versus open source as tools of production. most of the tools of production are already in existence. the web apps simply apply open source production methodologies to already existing tools of production. the web IS open source. stop yelling about the proprietary web. when we're speaking about open source on the web we can only be worried about one of three things. legal data\property squabbles, the tools themselves (apps), or the methods (open source\social web\web 2.0).<br><br>also, modifying services to work on your own server the way we used to modify code on our own systems requires the server infrastructure in the first place which few people have. plus i would assume it contributes to a loss in the network effects of web apps.<br><br>how does fear\relevance\influence play into things? are we afraid of microsoft, google, etc? were we then? what are we struggling against? a lot of maneuvering seems to be about inert versus potent forces. microsoft is pretty impotent and google is clearly the next 800-pound gorilla but what is the thing people are afraid of?<br><br>finally, there is a difference between the significance of platforms\communities\ecosystems and the things we fear and the next big thing. product life cycles account for something here. the OS isn't a point of competition anymore. it's not a market with billions in it. it's not hot and it's not a point of innovation. it's in the background. even with apple it's 90% background. applications are mostly background too. there are cms and crm and inventory and other business apps and integrated suites that are still relevant but it's not what i'd call a point of innovation.


title: Hangman's Hope
date: 2008-10-17 08:02:04.000000
format: html
content:
  The last week has been really, really hard. Mostly because I've been confronted with something I hoped wouldn't have to happen: The necessity of returning to academia. I've applied to a few more jobs and we'll see what happens there. I got turned down by King &amp; Spalding in a letter today and am going to call tomorrow and ask why. I'm really just not getting enough done on my own to justify being out of school. I'm not learning enough. Perhaps I do need the structure. I'm disappointed but I have to re-evaluate based on my experience. State changes and given my present state I'm looking at returning to SPSU in the Spring or Fall of next of year. There's some notion of transferring to GA Tech as well but I'm not sure what I think about that.<br><br>One nice thing about SPSU would be that I'd at least have the spare time to continue pursuing LISP and other personal studies. It's also worth noting that a significant motivation in this year off was to at least get the fundamental concepts of programming down some before being buried in the specifics of the monstrous languages used to instruct most Freshman in Computer Science these days (i.e. Java; pythonistas at Tech, you're lucky).<br><br>Anyway, tonight I was frustrated with the fact that I hadn't written any code in a long time and I hadn't written a real program of my own in an even longer time. For one reason or another, implementing Hangman in Common Lisp seemed like a good idea. Now, I'm not claiming that hangman is ever any great feat...except maybe if you write it in <a href="http://en.wikipedia.org/wiki/Brainfuck">BrainFuck</a>. Nor is it any great feat to write it in under a hundred lines. Worse still is that it lacks any ASCII art. That said, I did this in a few hours, found it pretty fun and think it came out fairly readable and concise in the end. After all, how couldn't it? It's hangman.<br><br><pre lang="lisp"><br>;; Hangman<br>;; Brit Butler <redline6561@gmail.com><br>;; v.01<br>;; Feature Ideas: ASCII hangman. Eliminate explicit elt references and other hackish<br>;; stuff, especially show-letter. Import dictionary in place of *word-list*.<br><br>(defparameter *word-list* '("cookies" "kittens" "fairies"<br>			    "unicorns" "words" "linux"<br>			    "lisp" "music" "songs"<br>			    "sex" "love" "fun"<br>			    "code" "cease" "and"<br>			    "desist" "read" "print"<br>			    "eval" "loop" "macro"))<br><br>(defparameter *turn-count* '())<br>(defparameter *letters-picked* '())<br>(defparameter *word-in-progress* '())<br>(defparameter *solved-word* '())<br><br>(defun hangman ()<br>  (setf *turn-count* 7)<br>  (setf *letters-picked* '())<br>  (select-game-type)<br>  (work-on-word))<br><br>(defun select-game-type ()<br>  (if (y-or-n-p "Would you prefer to have a word chosen at random?")<br>      (set-the-words (elt *word-list* (random (length *word-list*))))<br>      (set-the-words (string-downcase (read-prompt "Please input your desired word: ")))))<br><br>(defun set-the-words (word-of-the-run)<br>  (setf *solved-word* word-of-the-run)<br>  (setf *word-in-progress* (make-array (length word-of-the-run)<br>                                       :initial-element #\- :element-type 'character))<br>  (format t "~a~%" *word-in-progress*))<br><br>(defun read-prompt (query-string)<br>  (format *query-io* query-string)<br>  (read-line *query-io*))<br><br>(defun check-letter (letter)<br>  (if (already-picked? letter)<br>      (format t "You already picked that goofball! Try again...~%")<br>      (push letter *letters-picked*))<br>  (cond ((is-in-word? letter) (show-letter letter))<br>	((not (is-in-word? letter)) (decf *turn-count*)<br>	 (format t "Nope. Not in there. ~a turns left.~%" *turn-count*))))<br><br>(defun is-in-word? (letter &key (start 0))<br>  (position letter *solved-word* :start start))<br><br>(defun already-picked? (letter)<br>  (position letter *letters-picked*))<br><br>(defun show-letter (letter)<br>  (setf (elt *word-in-progress* (is-in-word? letter)) letter)<br>  (format t "~a~%" *word-in-progress*))<br><br>(defun pick-a-letter (&key (message "Pick a letter please: "))<br>  (let ((rtn (read-prompt message)))<br>    (if (> (length rtn) 1)<br>	(pick-a-letter<br>          :message "We only need ONE letter thank you very much. Try again: ")<br>	(check-letter (elt rtn 0)))))<br><br>(defun work-on-word ()<br>  (pick-a-letter)<br>  (word-finished?))<br><br>(defun word-finished? ()<br>  (if (= *turn-count* 0)<br>      (game-over)<br>  (if (string= *solved-word* *word-in-progress*)<br>      (play-again? "Congratulations.")<br>      (work-on-word))))<br><br>(defun game-over ()<br>  (format t "Sorry. The word was ~a.~%" *solved-word*)<br>  (play-again? "You're all out of turns. Game over."))<br><br>(defun play-again? (message)<br>  (format t "~a~%" message)<br>  (if (y-or-n-p "Would you like to play again?")<br>      (hangman)<br>      (format t "Thanks for playing!~%")))<br></pre>


title: Hello?
date: 2007-08-23 01:05:04.000000
format: html
content:
  Hi.<br>Without meaning to be a burden, encouragement would be a good thing for me right now. If you have any lying around and are interested, feel free to pass it my way.<br><br>I have in mind a future,<br>Perhaps in Chicago, then Montana,<br>Or maybe the white sands of the<br>beaches of my youth.<br>But the desire for home is an illusion,<br>Found in people not in places,<br>The trinkets I call thoughts are<br>only treasure if they're shared.<br>How can I swear myself<br>to safely guard your things,<br>and always maintain interest<br>in the head from which thought springs?<br>For my love is the attent<br>of the brook that babbles beyond<br>your lips. But in a world<br>ever warming, how can I promise<br>the well won't run dry?<br>Am I a dam holding<br>water which once broken<br>sends old currents back<br>to sea? That water<br>needed to return to<br>that amorphous oblivion.<br>It's vitality left<br>long ago.


title: Help me, Community! Thoughts, questions, comments?
date: 2007-07-27 16:58:22.000000
format: html
content:
  Inspired by:<br>http://www.openparenthesis.org/2007/07/25/moglen-oscon/<br>http://www.openparenthesis.org/2007/07/24/moglen-oreilly/<br>http://www.openparenthesis.org/2007/07/24/freedom-in-a-new-context/<br>http://tieguy.org/blog/2007/07/22/evaluating-a-freeopen-service-definition-rough-draft/<br><br>Moglen and O'Reilly at OSCON are coming from very different positions. Certainly Moglen is focused on his efforts on the GPLv3 granting Open Source another 10 years of safety with which they can acquire more permanent safety through public policy and patent reform. Moglen's accusations of Tim O'Reilly and the Open Source movement as being Web 2.0 blathering profiteers at this point is perhaps uncalled for but points towards an interesting difference. We might call what Moglen and Stallman are after a right to computation. They think people should be able to compute whatever they want, wherever they want, whenever they want, however they want. This doesn't mean they don't believe in strong encryption on data. This doesn't mean they don't believe in money in software. This means they think there's no reason that the software you use to manipulate your data should be out of your control and that it should be available to you from any computer at any time. O'Reilly et al see no reason that Open Source Software doesn't meet those requirements and are interested in the opportunities that really are inherent in web services. They see that as the next space to really advance the state of computing and user rights. "Your data, your software, anywhere" seems to be the idea.<br><br>The difference here is really that Moglen and Stallman are measuring progress in legal terms while the Open Source Movement is measuring progress in market terms. As Lessig said, Law is Code but intellectual property law is different the world over...and is nigh impossible to enforce with the advent of digitization and the web anyway. Thought has broken loose. The Free Software camp is deeply aware of the fact that they have created a new political form based around a new concept of property rights. That new political form has as it's goal empowering communities by lowering the barriers to contribution. This has led to a method of production more efficient than preceding methods which has caught the attention of industry and ascended to the world stage. Open Source is that method of production, that method of organization. But Open Source as a meme was designed to keep politics out of the discussion because the term "Free Software" wasn't selling well to corporations. By eliminating the communist-sounding rhetoric the Open Source meme has done much better in the corporate space. Centrally though we must keep in mind that Open Source succeeds because it lowers the barriers to contribution and fosters community. It increases the benefit for everyone involved. This is what Moglen is trying to remind us. And it is certainly important that we begin cementing some of these norms and protecting some unprotected aspects of the maturing "Free/Open" political model through public policy and reform. The legal codes must be prepared to defend us as well as the establishment they are presently geared toward.<br><br>Licenses are only a small part of this. It is thankful that Free and Open Source Software (FOSS) has grown important enough that industry leaders such as Google, IBM, Sun, Intel, etc are contributing to it and will defend it (legally and politically) from attack. It is not enough. The Open Source movement is less concerned with how to defend and advance the sociopolitical status of our model than they are with observing it's market effects. It has opened up new avenues in terms of how to work and the software industry is busy doing what it has always done, trying to figure out how to capitalize on improved methods. Though they may be Improved Methods for Achieving Deteriorated Ends. In America though we tend to measure progress through the market and that is not entirely misguided. As in Cass Sunstein's Infotopia the market has historically proven an excellent way to aggregate information. But it is being shown up by more decentralized methodologies that have arisen in the Information Age. Valuing Knowledge is a traditionally hard problem but it grows more important as our assets lean more and more towards intellectual property and further and further from capital invested and factories and so forth.<br><br>It may be acceptable for Moglen to serve as a shock to the Open Source ecosystem through venting at OSCON in O'Reilly's general direction, not that I believe his attacks were meant to be personal on anyone in the Open Source community. In fact, if anything I would characterize Moglen's acts as public lament. But while it may be appropriate for him to try to invigorate those at OSCON I am not sure that it makes sense for him to try to invigorate those at IBM. Perhaps Ubuntu or Red Hat but even this I'm not convinced of. At some point, IBM decided the Eclipse code it had invested $40 million dollars into would be more valuable if they gave it away for free. Why? Because that meant they got free additional developers to work on the project. What is our product now? It's not software, it's not knowledge, it's not collaboration. Our product is a community. We finally stepped beyond knowledge and material goods to deliver the asset of the individual. Our product is our people. That's the philosophy. We're just trying to find ways to improve discussion. Communities are the ones producing things and the more knowledgeable, passionate, interested people/parties we can involve in the discussion, the more valuable things said community can produce.


title: Holiday Greetings
date: 2007-12-23 05:59:21.000000
format: html
content:
  Hello there, everyone. I've only dropped off the face of the earth. I'm not dead. Neither is Dad. So far we're all holding together well. He's had his brain radiated a few times and had bone infusions. Chemo begins shortly after Christmas. There is a Doctor who has talked about remission and on the whole I think we're optimistic. Or fighters anyway. Now, on to all the other business.<br><br>I'll be in Montana from the 2nd to the 11th, so I've got that coming up. I'll be in Bozeman if you're wondering. It'll be nice to get away for a bit...even if it is for a family reunion with people I haven't seen in a good while, my biological Dad's side of the family. For those who don't know, Mom divorced and the all too awesome feller suffering from Lung Cancer is (technically) my Step-Dad.<br><br>I need to draft up a schedule for the new year to figure out how I'm getting my studies done. And whose lectures and course materials I'll be following as I have a choice in some cases. More on that soon. There's also been a ton of great nerd discussion floating around the blogosphere of late, some of which I'll try to comment on in the next couple of days. In the meantime, here's a trivial nugget of thought.<br><br>I watched Lecture 1A of the classic MIT Structure and Interpretation of Computer Programs series tonight and something struck me, mostly because Sussman brought the idea to the forefront with clarity at some point. He said something fairly fundamental that borders on self-evident when Computer Science is viewed introspectively but I hadn't formerly considered. In essence, Computer Science is about how to knowledge and process rather than declarative knowledge or fact. Thus, a programming languages job is to serve as a description of process and provide tools towards that end.<br><br>The part of this that I hadn't formerly considered is that this is why we bother, or even focus, on learning new programming languages and methods of abstraction rather than focusing on writing specific programs. Sure, many schools recommend a course in Compiler, Operating System, or Programming Language Design and there are plenty of blog posts detailing such undertakings in an effort to enhance skill and knowledge in the field but nothing is so popular or so emphasized as learning new languages. Regularly and of different paradigms and abstractions, if possible. There's something to think on in greater depth here about why that is that I haven't seen eloquently written about by Yegge, Graham, Braithwaite, Atwood, or anyone else. Perhaps if I can capture what it is, I'll write about it. In the meantime, it's just a thought.


title: How to Make Delicious Chicken Tenders
date: 2011-01-28 00:20:32.000000
format: html
content:
  For about two years I've been occasionally throwing parties to play video games or watch TV and movies. Over that time, I started luring people in with the promise of Fried Chicken and I think I've refined this recipe enough that it's pretty good. There are a good number of other things I cook but they tend to be stolen recipes (say from the <a href="http://thepioneerwoman.com/cooking/">Pioneer Woman</a> or <a href="http://www.youtube.com/watch?v=vW1zwHhBctY#t=3m27s">Alton Brown</a>) and this is the only one I can come close to calling my own. At any rate, here we go.<br><br>This recipe makes ~3 lbs of chicken tenders which works out to between 18 and 24 pieces. There are three parts to these tenders. There is a hot sauce we'll marinade them in, the breading and the tenders themselves. Aside from the list of ingredients you'll need a deep frying pan, tongs, a mixing bowl, the usual measuring cups and some gallon freezer bags. I tend to get a bag as close to ~3lbs as I can of Chicken Tenderloins the same day I plan to cook them and leave them in the sink to thaw for 4-5 hours before I cook them. The breading and hot sauce don't take very long so they can be done early or just before cooking the chicken.<br><br>First comes the sauce...<br><br>Ingredients:<br>3 Tbs. Butter<br>3 Tbs. Olive Oil<br>4 (large-ish) to 6 (small-ish) cloves garlic, minced<br>2 Tsp each: Cayenne Pepper, Sea Salt or Kosher Salt, Black Pepper<br>2 Bottles of Texas Pete Buffalo Wing Sauce. Approx 18 oz. each.<br><br>Start by melting the butter and olive oil in a saucepan on medium heat. Once the butter is melted, add the garlic and sautee it until golden brown. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/02-garlic.jpg" alt="Mmm...Garlic" width="480" height="640" /><br><br>Normally I'm good and mince (or talk someone else into mincing) fresh garlic but I was lazy and used some of the pre-minced stuff this time. You'll be pretty distracted with other aspects of the hot sauce anyway. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/03-cheater.jpg" alt="CHEATER!" width="480" height="640" /><br><br>Next you'll want to get 2 teaspoons of Cayenne Pepper, Sea Salt or Kosher Salt (Kosher here) and Ground Black Pepper ready along with 2 bottles of Texas Pete Buffalo Wing Sauce.<br><img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/04-flavor-country.jpg" alt="Flavor Country" /> Add the spices once the garlic is golden brown, then pour in the first bottle of Texas Pete and stir. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/06-stir.jpg" alt="Stir" /> Once it's blended nicely, add in the second bottle of Texas Pete and stir occasionally until it begins to boil. You can have a taste if you like but your nose should give you fair warning of what you're in for. Once it starts boiling, reduce the heat to low and let it simmer for 5 minutes, then remove it altogether and allow it to cool. This will make enough for at least 2 batches of tenders, probably 3 or 4. The sauce is excellent on a few sides as well and refrigerates fine so I just try to keep some on hand. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/14-remember-us.jpg" alt="Yummy Hot Sauce" /> See? Plenty. That's got to be 4 cups at least.<br><br>Now let's prepare the breading...<br><br>Ingredients:<br>3 Cups Flour<br>4 Tsps. Kosher Salt or Sea Salt<br>3 Tsp. Paprika<br>2 Tsp each: Garlic Powder, Cumin, Cayenne Pepper, Black Pepper<br>1/3 cup Buttermilk<br><br>The breading is good because we just the throw the damn spice rack at it. Here's our cast of characters. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/10-the-breading-cast.jpg" alt="The Cast" /> Start by putting 3 cups of flour in a mixing bowl and then add the other spices but hold off on the buttermilk for now. You should have a lovely splash of colors in there. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/12-flour-and-friends.jpg" alt="Flour and Friends" /> Now stir gently with a fork until the flour appears blended. Before you start cooking the tenders, slowly pour in the buttermilk while stirring with the fork. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/24-better-flour-plus-buttermilk-equals-breading.jpg" alt="Better Flour + Buttermilk = Breading" /> This will help the breading adhere to the tenders and makes a wonderful difference in how consistently your tenders retain their breading.<br><br>Finally! Let's make some chicken.<br><br>Ingredients:<br>~3 lbs. Chicken Tenders/Tenderloins<br>1 Cup Hot Sauce<br>3 Tbs. Cornstarch<br>A bunch of vegetable or canola oil.<br><br>This is the gross and rather unpleasant part. We're going to reach into our bag of mostly thawed chicken tenderloins and drop them into a gallon freezer bag filled with a cup of Hot Sauce and 3 tablespoons of Cornstarch. Oh, did I forget that part? Grab a gallon freezer bag and mix those two together in it. Then set the two bags up in your sink and you're ready to go. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/17-the-setup.jpg" alt="The Setup" /> Get some warm to hot water running, take each tenderloin out of the bag, give it a little rinse to make sure it isn't stiff and at the very least has all the ice off it then plop it in the marinade. Once you've done this with all the tenderloins, seal the bag (I recommend Ziploc) and shake it around a bit until everything seems well coated. Once that's done you'll want to marinade the chicken for 1-2 hours at room temperature. Lay them down flat and even somewhere and set a timer. Go do something useful. I suggest writing code or making good playlists. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/20-do-something-else.jpg" alt="Do Something Else" /><br><br>Once the tenders are almost done marinating you can go ahead and start heating the oil and cooking other parts of the meal. It'll take 20-30 minutes to cook 3lbs of tenders 3 at a time once the oil is hot. As a side, I heartily recommend some Crispy Crowns. No Tater Tots aren't good enough and no, Kroger brand knock-offs won't quite work. Ore-Ida, contact me for payment details. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/28-subtle-product-placement.jpg" alt="Subtle Product Placement" /><br><br>Put your deep frying pan on the stove, add several inches of Canola or Vegetable Oil and set the stove to medium. Now we'll start breading the tenders. Pick them up from the bag and give them a little shake to drip off any excess marinade, then toss them into your mixing bowl and shake it around a bit. It's all in the wrist. Also, if anyone wants to buy me a <a href="http://www.google.com/search?&amp;ie=UTF-8&amp;q=lumix+gf1">Lumix GF1</a> I'll take better pictures. Promise. After the black box shaking magic, you'll get some nice, well-breaded tenders. If you're not satisfied feel free to use your hands to lightly rub or pat some breading into them. Then lay them on some plates with paper towels. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/29-breaded.jpg" alt="Output" /><br><br>About now it's time to test if the oil is hot. Toss a little pinch of breading in and you should see this happen: <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/30-the-oil-is-hot.jpg" alt="The Oil is Hot!" /> If it did, you are now "Go for Chicken". Lower 3 pieces in with the tongs and get excited. They should bubble up somewhat substantially. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/31-we-are-go-for-chicken.jpg" alt="We are go for Chicken" /> I tend to cook them about a minute and a half a side. After 3 minutes (or a little more, use your own discretion) is up, take them out one by one with the tongs letting any excess oil drip off before placing them on a serving plate to cool. Let me know if you have any suggestions for improvements. <img class="aligncenter" src="http://redlinernotes.com/images/fried_chicken/34-decadence.jpg" alt="Decadence" />


title: HTDP Section 02
date: 2008-05-19 03:25:27.000000
format: html
content:
  <p>So, I've finally gotten around to cleaning up <a href="http://www.redlinernotes.com/blog/?p=887">SICP Section 1.3</a>. It's not quite done but it's damn close. For now, I want to start posting some of the <a href="http://en.wikipedia.org/wiki/How_To_Design_Programs">HTDP</a> code I've been writing to get back in the hacking habit over the past few days. I also have some of <a href="http://www.amazon.com/Concrete-Abstractions-Introduction-Computer-Science/dp/0534952119">Concrete Abstractions</a> done and in my source code repository but it's nothing substantial. Without further ado, here's HTDP Section 02 (of 43!). Sections 03 and 04 will go up tomorrow. Note: I skipped HTDP Section 01 because there are no exercises or problems whatsoever.<br /><br><!--more--><br /><br>Resources:<br /><br>Read: Sections <a href="http://htdp.org/2003-09-26/Book/curriculum-Z-H-4.html#node_chap_1">01</a> and <a href="http://htdp.org/2003-09-26/Book/curriculum-Z-H-5.html">02</a><br /><br>Watch: Nothing. To my knowledge there are no online lectures based around HTDP. Correct me if I'm wrong.<br /><br>Checked against: Nothing. Again, to my knowledge there are no available sources to check your answers beyond the locked solutions on the official site and message boards. That's one reason I'm excited about doing HTDP this way along with SICP. The plethora of SICP resources stand in contrast to an absolute dearth of resources for HTDP.</p><br><p>Exercises</p><br><p>2.1.1:<br /><br>Dr. Scheme does have operations for squaring (sqr x), computing sines (sin x), and finding maximums (max x). If you are not running in the HTDP Beginning Student Language though these functions may not be available.</p><br><p>2.1.2:</p><br><pre><br>(sqrt 4)<br>2<br>(sqrt 2)<br>#i1.4142135623730951<br>(sqrt -1)<br>0+1i<br><br>;;(tan x) determines the tangent of a given angle.<br></pre><br><p>2.2.1:</p><br><pre><br>(define (Fahrenheit->Celsius fahr)<br>  (* (- fahr 32) (/ 5 9)))</pre><br><p>The teachpack worked as intended. Just go to Language -> Add Teachpack. Feel free to test the different convert-*s on your own.</p><br><p>2.2.2:</p><br><pre><br>(define (dollar->euro dollars)<br>  (* .642 dollars)) ;; as of 05/18/08<br></pre><br><p>2.2.3:</p><br><pre><br>(define (triangle side height)<br>  (/ (* side height) 2))</pre><br><p>2.2.4:</p><br><pre><br>(define (convert3 first second third)<br>  (+ (* 100 third) (* 10 second) (* 1 first)))</pre><br><p>This was sort of counter-intuitive. The idea that this is related to something in an Algebra book is true but misleadingly so. You could try to do something fancy with max but that's not the idea.</p><br><p>2.2.5:</p><br><pre><br>(define (f n)<br>  (+ (/ n 3) 2))<br><br>;;The evaluations for 2, 5, and 9 are 2.6, 3.6 and 5, respectively.<br><br>(define (f n)<br>  (+ 10 (sqr n)))<br><br>;;The evaluations for 2 and 9 are 14 and 91, respectively.<br><br>(define (f n)<br>  (+ 20 (* (sqr n) .5)))<br><br>;;The evaluations for 2 and 9 are 22 and 60.5, respectively.<br><br>(define (f n)<br>  (- 2 (/ 1 n)))<br><br>;;The evaluations for 2 and 9 are 1.5 and 1.8, respectively.</pre><br><p>2.3.1:</p><br><pre><br>(define (tax income)<br>  (* .15 income))<br><br>(define (netpay hrs)<br>  (- (wage hrs) (tax (wage hrs))))<br><br>;;supplementary functions:<br>(define (wage hrs)<br>  (* 12 hrs))</pre><br><p>2.3.2:</p><br><pre><br>(define (sum-coins pennies nickels dimes quarters)<br>  (+ (* .01 pennies) (* .05 nickels) (* .1 dimes) (* .25 quarters)))<br></pre><br><p>2.3.3:</p><br><pre><br>(define (total-function attendees)<br>  (- (* 5 attendees) (+ 20 (* .5 attendees))))<br></pre><br><p>2.4.1:<br /><br>(10) causes the interpreter to expect a function, procedure or expression but it is in fact primitive data, i.e. a number.<br /><br><br>(10 + 20) is incorrect because the expression uses infix rather than prefix notation but the error from the interpreter is the same. This is due to the fact that the interpreter has been given a number rather than an procedure as it's operator.<br /><br><br>(+ +) fails because the operator + is only given one argument (it requires a minimum of two) and that argument is a function which is the wrong type of input.</p><br><p>2.4.2:</p><br><pre><br>(define (f x)<br>  (+ x 10))<br>;;The argument to f needed to be changed.<br><br>(define (g x)<br>  (+ x 10))<br>;;There was a missing open-paren before the + operator.<br><br>(define (h x)<br>  (+ x 10))<br>;;The open-paren was in front of x when it should have been in front of h.</pre><br><p>2.4.3:</p><br><pre><br>;;> (+ 5 (/ 1 0))<br>;;/: division by zero<br>;;> (sin 10 20)<br>;;sin: expects 1 argument, given 2: 10 20<br>;;> (somef 10)<br>;;reference to an identifier before its definition: somef<br></pre><br><p>2.4.4:</p><br><pre><br>(define (somef x)<br>  (sin x x))<br><br>;;> (somef 10 20)<br>;;somef: this procedure expects 1 argument, here it is provided 2 arguments<br>;;> (somef 10)<br>;;sin: expects 1 argument, given 2: 10 10</pre><br><p>The section ends with a bit on program design. It makes the important note of having human solved examples to test against. Sounds like an argument for unit tests to me.</p>


title: HTDP Section 03
date: 2008-05-19 13:43:29.000000
format: html
content:
  As promised, here’s Section 03 with 04 soon to follow. Sections 03 and 04 are pretty unremarkable and the questions and answers are pretty self-explanatory. Again, you can check all the latest code in <a href="http://www.redlinernotes.com/code">my repo</a> by going to manifest, then books, htdp, and navigating to the various source files.<br><!--more--><br>Resources:<br>Read: Section <a href="http://www.htdp.org/2003-09-26/Book/curriculum-Z-H-6.html#node_chap_3">03</a><br>Watch: Nothing. To my knowledge there are no online lectures based around HTDP. Correct me if I’m wrong.<br>Checked against: Nothing. Again, to my knowledge there are no available sources to check your answers beyond the locked solutions on the official site and message boards. That’s one reason I’m excited about doing HTDP this way along with SICP. The plethora of SICP resources stand in contrast to an absolute dearth of resources for HTDP.<br><br>Exercises<br><br>3.1.1:<pre><br>(define (attendees ticket-price)<br>  (- 870 (* 150 ticket-price)))</pre><br><br>This function will give incorrect answers for negative values of ticket-price.<br><br>3.1.2:<pre><br>(define (revenue ticket-price)<br>  (* (attendees ticket-price) ticket-price))<br><br>(define (costs ticket-price)<br>  (+ 180 (* .04 (attendees ticket-price))))<br><br>(define (profit ticket-price)<br>  (- (revenue ticket-price) (costs ticket-price)))</pre><br><br>(profit 3) returns the best price which is 1063.2.<br><br>3.1.3:<br>Both program definitions return the same results for inputs of 3, 4<br>and 5.<br><br>3.1.4:<pre><br>(define (profit ticket-price)<br>  (- (revenue ticket-price)<br>     (cost ticket-price)))<br><br>(define (revenue ticket-price)<br>  (*  (attendees ticket-price) ticket-price))<br><br>(define (cost ticket-price)<br>  (* 1.5 (attendees ticket-price)))<br><br>(define (attendees ticket-price)<br>  (+ 120<br>     (* (/ 15 .10) (- 5.00 ticket-price))))<br><br>(define (profit price)<br>  (- (* (+ 120<br>	   (* (/ 15 .10)<br>	      (- 5.00 price)))<br>	price)<br>     (* 1.5<br>	   (+ 120<br>	      (* (/ 15 .10)<br>		 (- 5.00 price))))))</pre><br><br>Both programs return the same results but profit margins have changed based on the new costs. (max (profit 3) (profit 4) (profit 5) is now (profit 4).<br><br>3.2.1:<pre><br>(define fixed-costs 180)<br>(define price-per-attendee .04)<br>(define start-attendees 120)<br>(define attendees-per-dime 15)<br>(define dime .10)<br>(define start-price 5.00)</pre><br><br>3.3.1:<pre><br>(define inches-in-cm 2.54)<br>(define inches-in-ft 12)<br>(define feet-in-yard 3)<br>(define yards-in-rod 5.5)<br>(define rods-in-furlong 40)<br>(define furlongs-in-mile 8)<br><br>(define (inches->cm inches)<br>  (* inches-in-cm inches))<br><br>(define (feet->inches feet)<br>  (* inches-in-ft feet))<br><br>(define (yards->feet yards)<br>  (* feet-in-yard yards))<br><br>(define (rods->yards rods)<br>  (* yards-in-rod rods))<br><br>(define (furlongs->rods furlongs)<br>  (* rods-in-furlong furlongs))<br><br>(define (miles->furlongs miles)<br>  (* furlongs-in-mile miles))<br><br>(define (feet->cm feet)<br>  (inches->cm (feet->inches feet)))<br><br>(define (yards->cm yards)<br>  (feet->cm (yards->feet yards)))<br><br>(define (rods->inches rods)<br>  (feet->inches (yards->feet (rods->yards rods))))<br><br>(define (miles->feet miles)<br>  (yards->feet (rods->yards (furlongs->yards<br>                             (miles-furlongs miles)))))</pre><br><br>3.3.2:<pre><br>(define pi 3.14159)<br><br>(define (volume-cylinder radius height)<br>  (* pi (sqr radius) height))</pre><br><br>3.3.3:<pre><br>(define pi 3.14159)<br><br>(define (area-cylinder radius height)<br>  (* 2 pi radius (+ radius height)))</pre><br><br>3.3.4:<pre><br>(define (area-pipe inner-radius length thickness)<br>  (+ (* 2 pi length (+ inner-radius thickness))<br>      (* 2 (- (* pi (+ inner-radius thickness))<br>               (* pi inner-radius)))))<br><br>(define (area-pipe inner-radius length thickness)<br>  (+ (area-pipe-side inner-radius length thickness)<br>     (* 2 (area-pipe-ring inner-radius thickness))))<br><br>(define (area-pipe-side inner-radius length thickness)<br>  (* 2 pi length (+ inner-radius thickness)))<br><br>(define (area-pipe-ring inner-radius thickness)<br>  (* 2 (- (* pi (+ inner-radius thickness))<br>          (* pi inner-radius))))</pre><br><br>This problem reminds me of several in SICP in that the real difficulty with it is a misunderstanding of the question. Once you understand what is desired it’s pretty easy to bang the code out. This seems analogous to the idea that once you have a well-understood, well-specified set of requirements producing the code is trivial and that the requirements are the difficult part. Of course, this leads to blather about how good enough specifications (and UML Diagrams) are equivalent to code (which is bullshit). People forget that requirements change and that unambiguous well-specified requirements are often impossible.<br><br>3.3.5:<pre><br>(define (height time)<br>  (* .5 time (speed time)))<br><br>(define (speed time acceleration)<br>  (* time acceleration))</pre><br><br>3.3.6:<pre><br>(define (Celsius->Fahrenheit cels)<br>  (+ 32 (/ (* cels 9) 5)))<br><br>(I 32)<br>(Celsius->Fahrenheit (Fahrenheit->Celsius 32))<br>(Celsius->Fahrenheit (* (- 32 32) (/ 5 9)))<br>(Celsius->Fahrenheit (* 0 (/ 5 9)))<br>(Celsius->Fahrenheit 0)<br>(+ 32 (/ (* 0 9) 5))<br>(+ 32 (/ 0 5))<br>(+ 32 0)<br>32</pre><br><br>Plainly, these functions are inverses of each other though that should be self evident. Since they are inverses their composition returns the original input. The stepper returns the same results.<br><br>Well, that’s it for Section 03. It seems that the first 8 Sections at least deal with language primitives and fairly basic material. It certainly is easier to progress through HTDP relative to SICP but I have had the sense that I was learning more in SICP. We’ll see if this changes at all once I progress beyond the early sections though I haven’t decided whether I’ll keep going through HTDP or forge ahead on SICP.


title: HTDP Section 04
date: 2008-05-19 14:13:12.000000
format: html
content:
  Well, here's Section 04.<br><!--more--><br>Resources:<br>Read: Section <a href="http://www.htdp.org/2003-09-26/Book/curriculum-Z-H-7.html">04</a><br>Watch: Nothing. To my knowledge there are no online lectures based around HTDP. Correct me if I’m wrong.<br>Checked against: Nothing.<br><br>Exercises<br><br>4.1.1:<br>1. (and true true) -> true<br>2. (or true false) -> true<br>3. (not false)     -> true<br><br>4.1.2:<br>1. (a) true,  (b) false, (c) true<br>2. (a) false, (b) false, (c) true<br>3. (a) false, (b) false, (c) false<br><br>4.2.1:<br><pre><br>;;1.<br>(define (is-between-3-and-7? n)<br>  (and (> n 3) (<= n 10)))<br><br>;;2.<br>(define (is-between-3-7? n)<br>  (and (> n 3) (< n 10)))<br><br>;;3.<br>(define (is-between-3-9? n)<br>  (and (>= n 3) (< n 9)))<br><br>;;4.<br>(define (is-1-3-or-9-11? n)<br>  (or (is-1-3? n) (is-9-11? n)))<br><br>(define (is-1-3? n)<br>  (and (> n 1) (< n 3)))<br><br>(define (is-9-11? n)<br>  (and (> n 9) (< n 11)))<br><br>;;alternate implementation in case the first smacks of premature optimization:<br>;;(both suffer from an ominous arbitrary function naming schema!)<br>(define (is-1-3-or-9-11? n)<br>  (or (and (> n 1) (< n 3))<br>      (and (> n 9) (< n 11))))<br><br>;;5.<br>(define (is-outside-1-3? n)<br>  (not (and (>= n 1) (<= n 3))))</pre><br>4.2.2:<br><pre><br>;; 1. | | | | | | | | | | |<br>;;   -5         0         5<br>;;        (-----)<br>;; Contract: in-interval-1? : number -> boolean<br>;; Purpose: To test if a number is between -3 and 0.<br>(in-interval-1? -2)<br>(and (< -3 -2) (< -2 0))<br>(and true true)<br>true<br><br>;;2.  | | | | | | | | | | |<br>;;    0         5         10<br>;;    --) (----------------<br>;; Contract: in-interval-2? : number -> boolean<br>;; Purpose: To test if a number is less than 1 or greater than 2.<br>(in-interval-2? -2)<br>(or (< -2 1) (> -2 2))<br>(or true false)<br>true<br><br>;;3.  | | | | | | | | | | |<br>;;    0         5         10<br>;;    --)       (----------<br>;; Contract: in-interval-3? : number -> boolean<br>;; Purpose: To test if a number is less than 1 or greater than 5.<br>(in-interval-3? -2)<br>(not (and (<= 1 -2) (<= -2 5)))<br>(not (and false true))<br>(not false)<br>true</pre><br>4.2.3:<br><pre><br>;;1.<br>(define (is-solution-1? x)<br>  (= (+ (* 4 x) 2) 62))<br><br>;;2.<br>(define (is-solution-2? x)<br>  (= (* (sqr x) 2) 102))<br><br>;;3.<br>(define (is-solution-3? x)<br>  (= (+ 2 (* 4 (sqr x)) (* 6 x)) 462))</pre><br>10 is a solution to 3. 12 and 14 are not solutions.<br><br>4.2.4:<br><pre><br>;; I don't know what specific test cases the authors are referring to for problems 2.2.1 - 2.2.4 so I'll just make up a few.<br>(= (Fahrenheit->Celsius 32) 0)<br>(= (dollar->euro 20) 12.8399) ;; as of 05/18/08<br>(= (triangle 5 2) 5)<br>(= (convert3 9 2 7) 729)</pre><br>4.3.1:<br>The left cond is legal. The right cond is illegal because it's second clause has no answer to evaluate. The last cond is illegal because it has no second clause to evaluate.<br><br>4.3.2:<br>(a) .040<br>(b) .045<br>(c) .060<br><br>4.3.3:<br>(a) 40<br>(b) 121<br>(c) 595<br><br>4.4.1:<br><pre><br>(define (interest x)<br>  (cond ((<= x 1000) (* .04 x))<br>        ((<= x 5000) (* .045 x))<br>        (else (* .05 x))))</pre><br>4.4.2:<br><pre><br>(define (tax x)<br>  (cond ((<= x 240) 0)<br>        ((<= x 480) (* .15 x))<br>        (else (* .28 x))))<br><br>(define (netpay hrs)<br>  (- (grosspay hrs) (tax (grosspay hrs))))<br><br>(define (grosspay hrs)<br>  (* 12 hrs))</pre><br>4.4.3:<br><pre><br>(define (pay-back charges)<br>  (cond ((<= charges 500) (* .025 charges))<br>        ((<= charges 1500) (* .05 charges))<br>        ((<= charges 2500) (* .075 charges))<br>        (else (* .01 charges))))</pre><br>4.4.4:<br><pre><br>(define (how-many a b c)<br>  (cond ((> (sqr b) (* 4 a c)) 2)<br>        ((= (sqr b) (* 4 a c)) 1)<br>        ((< (sqr b) (* 4 a c)) 0))) ;; or else 0))<br>;; (how-many 1 0 1) = 0</pre><br><br>If we didn't assume the equation was proper we'd need to check (with<br>a cond) to see if a equaled 0 and return an error if it did.<br><br>That does it for Section 04. Hopefully, I'll get my act together and wrap up SICP Section 2.1 in the next week or so. :-) You've gotta work on some hard stuff too, right? Besides it's more interesting anyway.


title: I can’t stop reading gapingvoid…or posting entries…
date: 2007-10-03 03:27:33.000000
format: html
content:
  <img src="http://www.gapingvoid.com/i%20don't%20have%20a%20blog-thumb.jpg" title="Blogging is a coping mechanism" alt="Blogging is a coping mechanism" height="225" width="400" />


title: I got yer jetty server right here!
date: 2007-06-19 15:50:00.000000
format: html
content:
  Jetty Install Process:<br>Install JDK 6u1 from Sun:<br>Grab the bin file and run:<br>sudo chmod +x *.bin<br>sudo sh ./jdk*.bin<br>sudo mv jdk1.6.0_01 Java6u1<br>sudo mv Java6u1 /usr<br>sudo update-alternatives --install /usr/bin/java java /usr/Java6u1/bin/java 300<br>sudo update-alternatives --config java<br>Select whichever number corresponds to /usr/Java6u1/bin/java<br><br>Grab latest jetty from website and run:<br>sudo mkdir /opt/jetty<br>sudo chown $USER /opt/jetty<br>Unzip to /opt/jetty<br>Throw timekeeper in /opt/jetty/webapps via sudo cp -R timekeeper /opt/jetty/webapps<br>sudo chown -R jetty /opt/jetty<br>sudo chmod -R ugo+rw /opt/jetty<br>sudo cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty<br>sudo touch /etc/init.d/jetty<br>set JETTY_HOME=/opt/jetty and JAVA_HOME=/usr/Java6u1 in /opt/jetty/bin/jetty.sh<br>set Log location in /opt/jetty/etc/jetty.xml to /opt/jetty/logs<br><br>Get Jetty to accept connections on port 80:<br>sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080<br><br>Get Jetty to run on bootup:<br>sudo ln -s /etc/init.d/jetty /etc/rc2.d/S86jetty<br><br>Load Balancing Modifications:<br>Research ongoing.


title: I Have No Idea
date: 2007-07-11 18:25:00.000000
format: html
content:
  Looking out on murky skies<br>I want to sound the bell,<br>Shout til my throat's gone,<br>Raise a little hell.<br>But there's no answer to the call<br>That will echo back to me<br>Because only time will tell<br>So I just have to wait and see.<br>And I want to be subversive,<br>Yeah I want to go against the grain,<br>Strike a few nerves and maybe<br>Cause a little pain.<br>But I get the sense that all of<br>That would simply be in vain,<br>Like a character on camera<br>Trying to escape the frame.<br><br>And though I don't know<br>What in days to come<br>Will still remain,<br>I'm waiting for it like<br>The dry earth waits<br>To greet the rain.<br><br>For I don't stand in the road<br>Looking out upon the fork.<br>I stand in amber fields of grain<br>Writing a cartographer's report.<br>Rather than traversing a garden<br>Full of forking paths,<br>I'll travel through the weeds<br>And meet you in the aftermath.


title: I knew they were cool…
date: 2008-07-16 11:48:59.000000
format: html
content:
  Two random quotes this morning from two random sources, Andy Wingo (programmer living in spain and working three days a week. Oh, the jealousy!!!) and Paul Kedrosky (VC\Finance Guy).<br><blockquote>"Perhaps I am more than usually jealous of my freedom. I feel that my connections with and obligations to society are at present very slight and transient. Those slight labors which afford me a livelihood, and by which I am serviceable to my contemporaries, are as yet a pleasure to me, and I am not often reminded that they are a necessity. So far I am successful, and only he is successful in his business who makes that pursuit which affords him the highest pleasure sustain him. But I foresee that if my wants should be much increased the labor required to supply them would become a drudgery. If I should sell both my forenoons and afternoons to society, neglecting my peculiar calling, there would be nothing left worth living for. I trust that I shall never thus sell my birthright for a mess of pottage.<br><br>H. Thoreau<br>10 January, 1851"</blockquote><br><a href="http://wingolog.org/archives/2007/12/18/in-which-our-protagonist-changes-jobs">Sourced from Andy Wingo</a><br><br>Quote deux...<br><blockquote>"To be truly challenging, a voyage, like a life, must rest on a firm foundation of financial unrest. Otherwise you are doomed to a routine traverse, the kind known to yachtsmen, who play with their boats at sea--"cruising", it is called. Voyaging belongs to seamen, and to the wanderers of the world who cannot, or will not, fit in. If you are contemplating a voyage and you have the means, abandon the venture until your fortunes change. Only then will you know what the sea is all about.</blockquote><br><blockquote>Little has been said or written about the ways a man may blast himself free. Why? I don't know, unless the answer lies in our diseased values. A man seldom hesitates to describe his work; he gladly divulges the privacies of alleged sexual conquests. But ask him how much he has in the bank and he recoils into a shocked and stubborn silence.</blockquote><br><blockquote>"I've always wanted to sail to the South Seas, but I can't afford it." What these men can't afford is <em>not</em> to go. They are enmeshed in the cancerous discipline of "security". And in the worship of security we fling our lives beneath the wheels of routine---and before we know it our lives are gone.</blockquote><br><blockquote>What does a man need---really need? A few pounds of food each day, heat and shelter, six feet to lie down in---and some form of working activity that will yield a sense of accomplishment. That's all---in the material sense. And we know it. But we are brainwashed by our economic system until we end up beneath a pyramid of time payments, mortgages, preposterous gadgetry, playthings that divert our attention from the sheer idiocy of the charade.</blockquote><br><blockquote>The years thunder by. The dreams of youth grow dim where they lie caked in dust on the shelves of patience. Before we know it, the tomb is sealed.</blockquote><br><blockquote>Where, then, lies the answer? In choice. Which shall it be: bankruptcy of purse or bankruptcy of life?"</blockquote><br>From Sterling Hayden's Wanderer <a href="http://paul.kedrosky.com/archives/2008/07/16/words_to_live_b.html">via Paul Kedrosky</a>


title: I was on Redmonk?
date: 2007-08-27 12:44:36.000000
format: html
content:
  Somehow I made one of <a href="http://www.redmonk.com/jgovernor/2007/03/24/links-for-2007-03-24/">Governor's link posts way back in March</a> and totally missed it. I have no idea how I missed that. What I'm really wondering though is how in the world he found me to begin with. James, are you reading this? Additionally, at least it looks like I'm reading the right things.<br><br>Also, I'm trying to get permission from Sweeney to blog about the things we've been discussing. I don't know if I mentioned to you guys that I received a very nice e-mail back from him that went into some good detail on his opinion. I'll keep you all posted. I know you can't wait! More later...


title: I’m Back.
date: 2007-07-22 00:01:00.000000
format: html
content:
  I'm back. The beach trip had it's ups and downs but I'm glad to be back and there's plenty that I missed in the computing world that I'm catching up on. I did get a few books read while I was there though and met a skateboarder and a guitarist that were fun to hang out with. I hadn't skated like that in a while. The books read: Emergence by Steven Johnson, The Mutt by Rodney Mullen, Identity by Milan Kundera, and snippets of Jerzy Kosinski's Passing By, Cass Sunstein's Infotopia and Seth Lloyd's Programming the Universe. Yep yep. More soon to come.<br><br>Edit at 5:10 PM: I also just acquired the upcoming Aesop Rock album "None Shall Pass". How long have I been home? Two hours. When did this leak? Two days ago. When is it coming out? August. Nice.


title: In Motion
date: 2009-05-10 21:22:32.000000
format: html
content:
  I'm not quite sure where to begin. The last week flew by between finals, moving and family matters. Teresa and I are moved in and mostly unpacked in the new apartment. We're pretty happy here so far. Grades are coming in and so far I've gotten a B in Discrete Mathematics and As in CS and Technical Writing. I expect I'll also get an A in Global Issues but I'm a little disappointed in my Discrete grade so maybe I'll work through some of Rosen's book over the summer.<br><br>The biggest news from last week pertains to Dad. Mom and Dad got news from the doctors that the cancer was no longer responding to treatments and was getting worse. He can't walk without assistance and has been moved into the dining room. He's now under hospice care. It's hard to say how much time we'll have with him but the odds are good that he won't make it to Autumn. I just hope he gets one more Father's Day. I'm actually off to go fix Mom some Couscous and Parmesan Crusted Chicken for dinner but in the next 24 hours I hope to get a blog post up with a tour of the apartment posted.<br><br>After that, I'm hoping to spend the week playing with Haskell, Lisp and maybe some Discrete Math or Calculus before summer classes start on the 18th. I'd also like to throw a pool party somewhere in there. As for how I'm doing with Dad, I've had a lot of time to prepare and I'm just thankful for the 15 or so years we had. That said, I expect the hammer just hasn't dropped yet. We'll see.


title: It might be fun, I might be wrong...
date: 2009-03-19 00:50:28.000000
format: html
content:
  I've done a very poor job adhering to my schedule today. I'm still in the spring break mentality and not really wanting to work. I worked hard Monday and Tuesday. I'm not sure what happened today. At any rate, I need to remember to make myself write some Lisp, Haskell, or Python for fun this weekend. I should also probably write some C# for school.<br><br>Three quick things I stumbled on today that made me happy:<br><a href="http://funcall.blogspot.com/2009/03/fast-forward-to-1985.html">Joe Marshall continuing to talk about his history with lisp</a>, how he found it, etc.<br><br><a href="http://piumarta.net/software/lib6502/">lib6502 by Ian Piumarta</a>. I <a href="http://www.reddit.com/r/programming/comments/1084y/ask_reddit_what_is_your_favorite_cpu_instruction/">keep hearing that the 6502 had a really nice ISA</a> and I'm considering whether an eventual fun project (like 5 or more years out) might be to write a basic lisp or scheme interpreter targeting the 6502. Maybe I could get away with working on it some in an Architecture or Programming Language Concepts course. Somehow it sounds tricky/crazy. Could I write one in 5 months? I'm still an idiot. Maybe I won't be in a year or so.<br><br>Last, there's some interesting guitar modeling software for PC...and articles about how to emulate other people's guitar setups, <a href="http://www.gibson.com/en-us/Lifestyle/Features/how-to-capture-john-mayers-gui/">including John Mayer</a>. Now, that may sound ridiculous...but here's something else that makes me happy that not many people know. <a href="http://www.youtube.com/watch?v=ruMX0GrvwAI">John Mayer can play the everloving shit out of his guitar</a>. There are a lot of little Stevie-isms in there. As in the <a href="http://en.wikipedia.org/wiki/Stevie_Ray_Vaughan">late great</a> <a href="http://www.youtube.com/watch?v=tWLw7nozO_U">Stevie Ray Vaughan</a>, whom I dearly love. Is there anyone besides Mayer that's keeping the SRV style alive today that I should know about?<br><br>I'm still more interested in sampling than being a guitarist myself but I like to noodle now and again. Speaking of which, go back and listen to the <a href="http://www.last.fm/music/Gorillaz/Gorillaz">first Gorillaz album</a>. Great, right? :)


title: It's a strange Saturday
date: 2009-01-24 23:00:45.000000
format: html
content:
  I meant to post an entry about all sorts of nerdy and interesting computer things I've been reading but it's been delayed. I'll probably regret posting this but it's the first thing I've written poetry-wise since July. It was sort of an experience.<br><br>Fear<br><br>I want the biggest hug I have inside me to swallow you up,<br>Like the reals swallow the rationals.<br>I don't want to go back to the beginning,<br>I'd rather see forward to understand where<br>I'm going. The whence question is<br>imprecise and leads me down paths,<br>many with thorns,<br>and only more imprecise questions.<br><br>The waters remain muddy so I climb the ladder out<br>until I find myself in clouds, fluffy and inarticulate.<br>Floating amid a mass of almost fluid abstractions,<br>they leak rain all over my parade.<br>I want to be more than you,<br>encompass you,<br>surpass you.<br><br>I lost sight of God just over a distant moon.<br>I hope I didn't offend him, my absent-mindedness<br>is often misperceived. But his opinion is not my concern.<br>I must be ever mindful that even if I find him and think<br>God is everywhere, that my invention is my own and is fractal<br>...or homoiconic. I cannot trust myself.<br><br>I rode the solar winds further up to get a better view<br>but everything was opaque, only more black boxes. I<br>couldn't fathom how to measure the cardinality so I<br>counted off an Aleph One, resolved to return<br>once I was the wiser. Higher still then until I saw it.<br><br>Our patchwork universe was being held together by holes.<br>Dark holes which pulled at us as the drain does the droplets.<br>And this was too much for me.<br>I know my monkey brain is too small.<br><br>And then I saw you. I remembered, "A ha.<br>I''ve left my sphere." And I looked back<br>and saw it. I'm not sure how long it will last.<br><br>It didn't look like much. Small and dirty and ignorant.<br>But I saw a quiet room on a sunday flooded with light and you.<br><br>Maybe it will be enough.


title: It’s Just Funny
date: 2007-07-11 21:13:00.000000
format: html
content:
  I'm sorry but who does this? <a href="http://www.xkcd.com/">He</a>'s so awesome.<br><img src="http://imgs.xkcd.com/comics/np_complete.png" alt="Comic about NP-Completeness" />


title: It’s Over
date: 2007-06-25 22:39:00.000000
format: html
content:
  It's really over with Sonya and me. For one reason or another, I thought there was a chance for round 2. There definitely is not. I just got off the phone with her. She won't be giving me that chance. All told, I'm glad I tried. I really needed to try and get her back for myself but that didn't work. So, on to whatever is next. I think I'll be okay but I don't really know. If anyone does want to hang out with me over the next few days or send hugs or kisses or anything though let me know. I've got orientation at SPSU from 7-3 but I'm free after that. Call me or leave a comment.<br><br>-Peace


title: It's True
date: 2009-03-28 22:21:35.000000
format: html
content:
  This is just a quick link post. There may be one or two comments but I'll try to keep my mouth shut and I promise I won't ramble on like an idiot about language preferences. I know I don't write enough code.<br><br>Pixar is making another movie called <a href="http://en.wikipedia.org/wiki/Up_(2009_film)">Up</a> and it's out at the end of May, God bless them. I am amazed by the consistent quality stuff they churn out and really can't wait. <a href="http://www.youtube.com/watch?v=mN4HJKd_efM">Trailer here</a>. Watch it!<br><br>Also on the entertainment front, <a href="http://www.youtube.com/watch?v=ZiwQtSx6zHw">I think this is rendered and not real</a> but I wish I could pay money to play it. I spent a large portion of my childhood playing Mega Man 2 so the idea of Mega Man 2.5D is positively awesome.<br><br><a href="http://rc3.org/2009/03/27/do-what-you-cant-not-do/">Via Rafe Colburn</a>: <a href="http://daringfireball.net/2009/03/obsession_times_voice">Obsession Times Voice</a>. Makes the point that you should do what you can't help but do, not what you love.<br><br><a href="http://community.haskell.org/~ndm/hlint/">HLint</a>: Personally, I wish every language had a library like this. Hi, let me suggest more idiomatic expressions of your code. Also, <a href="http://holumbus.fh-wedel.de/blog/?p=21">the Holumbus developer's blog</a> made me very happy in just one sentence: "There’s no reason why Haskell can’t be used to build distributed systems, so let’s do it." Damn skippy, sir. Damn skippy.<br><br><a href="http://tunes.org/cliki/learning_20lounge.html">TUNES Learning Lounge</a>: Filled with lots of good stuff.<br><br>Dreamsongs by Richard Gabriel: <a href="http://www.dreamsongs.org/MobSoftware.html">Mob Software</a>. Every now and then I forget about Richard Gabriel. Then I stumble across his work and remember that he's a great thinker. I particularly enjoyed the section on The Changing Face of Software.<br><br>I stumbled on the blog of Daniel Lyons, who <a href="http://storytotell.org/articles/2009/03/06/hiding-complexity">coincidentally responded</a> to <a href="http://redlinernotes.com/blog/?p=762">my recent post on where to put the abstractions in CS</a> and had some nice followup questions. He also has a good post on <a href="http://storytotell.org/articles/2008/12/29/fuck-this-industry-and-while-were-at-it-fuck-joel-spolsky">some of the problems with the industry</a> and another post on <a href="http://storytotell.org/articles/2008/08/12/complexity-and-the-engine-of-evaluation">complexity and languages</a>.<br><br>My <a href="http://carcaddar.blogspot.com/2009/03/p-cos-blew-my-mind.html">favorite summary of ILC 2009</a> so far is Vladimir Sedach's, primarily because of the remarks on patch loading, the commentary around Sussman, and the link to Mob Software reminding me that, sure, parallelism is one problem but <a href="http://en.wikipedia.org/wiki/Amorphous_Computing">Amorphous Computing</a> and long-lived systems provide a whole new bag of interesting problems to start working on. I remember stumbling onto <a href="http://web.mit.edu/jakebeal/www/">Jacob Beal</a> and <a href="http://www.eecs.harvard.edu/~rad/">Radhika Nagpal</a>'s pages a while back. Apparently it's also going by <a href="http://amorphous.ibisc.fr/">Spatial Computing</a> now and there is a good presentation on it <a href="http://web.mit.edu/jakebeal/www/Talks/spatial-computing-tutorial.pdf">here</a>. Also, <a href="http://metageek.livejournal.com/88648.html">who knew Pascal Costanza plays Magic</a>? I might just have to go to one of these Lisp conferences after all. :)<br><br>Speaking of Sussman's comments, Jao Ortega has posted for the first time in almost a year on that very subject. He's gone into <a href="http://programming-musings.org/2009/03/29/sussmaniana/#comment-30849">more depth on Sussman's talks</a> than anyone else I've seen.<br><br>One last interesting point that I gathered that Vladimir made explicit from Shivers and Sussman is "that unspecified behaviour actually gave you more opportunity for expressive power" which makes me a little sad. I still haven't decided <a href="http://alarmingdevelopment.org/?p=85#more-85">how I feel about formalism</a>. I need to write more code first. Still, my initial reaction is not exactly positive.<br><br>I need to figure out what I think of <a href="http://theprogrammersparadox.blogspot.com/2008/12/best-of-programmers-paradox.html">this</a> later.<br><br>Last but not least I've got to mention <a href="http://arstechnica.com/open-source/news/2009/03/google-launches-project-to-boost-python-performance-by-5x.ars">the work on Unladen-Swallow</a>. The project (which has support from Google) is looking to create a branch of CPython which performs 5 times faster and get it upstream. They've already made a first release with some solid gains and I'll look forward to keeping an eye on them.


title: Jetty, Upstart, and Hell
date: 2007-06-07 20:15:00.000000
format: html
content:
  <hr style="color: #ffffff" size="1" /> 			<!-- / icon and title --> 		 		 		<!-- message --><br><p class="ubuntu_messagebody" id="post_message_2793386">Hi lazyweb, I've been trying to get an install of jetty on ubuntu that will load during boot up and I've run update-rc.d jetty defaults but it's not working. What am I doing wrong?<br>Jetty Install Process:<br>Install JDK 6u1 from Sun:<br>Grab the bin file and run:<br>sudo chmod +x *.bin<br>sudo sh ./jdk*.bin<br>sudo mv jdk1.6.0_01 Java6u1<br>sudo mv Java6u1 /usr/lib<br>sudo update-alternatives --install /usr/bin/java java /usr/lib/Java6u1/bin/java 300<br>sudo update-alternatives --config java<br>Select whichever number corresponds to /usr/lib/Java6u1/bin/java<br><br>Grab latest jetty from website and run:<br>sudo mkdir /opt/jetty<br>sudo chown $USER /opt/jetty<br>Unzip to /opt/jetty<br>Throw timekeeper in /opt/jetty/webapps via sudo cp -R timekeeper /opt/jetty/webapps<br>sudo chown -R jetty /opt/jetty<br>sudo chmod -R ugo+rw /opt/jetty<br>sudo cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty<br>sudo touch /etc/init.d/jetty<br>set JETTY_HOME=/opt/jetty and JAVA_HOME=/usr/lib/Java6u1 in /opt/jetty/bin/jetty.sh<br>set Log location in /opt/jetty/etc/jetty.xml to /opt/jetty/logs<br>sudo ln -s /opt/jetty/bin/jetty.sh /etc/init.d/jetty<br>sudo update-rc.d jetty defaults<br><br>HALP?<br><br>Thanks.


title: Just a Feeling
date: 2009-10-13 23:33:16.000000
format: html
content:
  Last time I blogged, I was midway through midterms and just starting to work on some lisp projects. It's hard to imagine that was only a week ago. Since then, midterms are over, I've realized my only difficult class is Algorithm Analysis (the nature of whose difficulty I've blogged about <a href="http://redlinernotes.com/blog/?p=1059">before</a>) and <a href="http://gitorious.org/paktahn/paktahn/commit/409608a33e6be5709469975273bcb76054266411">become an official Open Source contributor</a>. Admittedly, it's on a small scale but when I was just getting interested in open source a few years ago I never would've figured this would happen so soon. It's been a great learning experience so far and incredibly fun. I still need to get started working on adding libvorbisfile bindings to Andy Hefner's Mixalot but today I'm going to try to dump some links out of my browser, get some thoughts down and do some Algo homework.<br><br>I mentioned recently that I've been wanting to write a lisp post but been unsure what to focus on. I've wanted to respond to posts made by others in various places over the last few months asking about the <a href="http://www.reddit.com/r/programming/comments/8qogg/uncommon_lisp_and_other_ideas_from_this_years/">liveliness</a> <a href="http://www.reddit.com/r/programming/comments/8ou7k/caring_about_programming_languages/">or</a> <a href="http://www.reddit.com/r/programming/comments/8nm5q/the_myth_of_lisp_superiority/">validity</a> of lisp as well as <a href="http://www.reddit.com/r/lisp/comments/9p2sq/what_is_the_next_big_thing_for_common_lisp/">whether the language is still changing</a> or <a href="http://ccl.clozure.com/irc-logs/lisp/2009-09/lisp-2009.09.25.txt">whether the departures of prominent Common Lisp users matters</a> (search for the second occurrence of "norvig"). Experienced lispers might just ignore that question at this point, I don't know. It does come up far too often. For my part though I want to try and address this because I know the more attention I've paid to the lisp community, the more I've seen how active, alive and, most importantly, friendly it is. It's been a little surprising in some ways compared to the false preconceptions one can get from blog and reddit chatter. Now, it may be undermanned. There's certainly more work to go around than people to do it but that's true of many places. Anyway, I simply have to get some of this out of my system. Here are a few thoughts...and links.<br><br>First of all, just this morning I poked around for libraries on concurrency and parallelism and found the following: <a href="http://common-lisp.net/project/erlisp/">erlisp</a>, <a href="http://common-lisp.net/project/erlang-in-lisp/">erlang-in-lisp</a> (which <a href="http://common-lisp.net/pipermail/erlang-in-lisp-devel/2009-January/000071.html">may become active again, who knows</a>), <a href="http://www.cliki.net/cl-future">cl-future</a>, <a href="http://www.cliki.net/csp">csp</a>, <a href="http://www.cliki.net/pcall">pcall</a>, <a href="http://www.cliki.net/eager-future">eager-future</a>, <a href="http://common-lisp.net/project/cl-muproc/">cl-muproc</a>, <a href="http://common-lisp.net/project/cl-stm/">cl-stm</a>, <a href="http://github.com/adlai/chanl/commits/master">chanl</a>, <a href="http://github.com/vy/patron/commits/master">patron</a>, <a href="http://www.cliki.net/Philip-Jose">philip-jose</a>, <a href="http://code.google.com/p/cl-mpi/">cl-mpi</a>, <a href="http://repo.or.cz/w/cl-cluster.git">cl-cluster</a> and, of course, the distributed schemes <a href="http://code.google.com/p/termite/">Termite</a> and <a href="http://web.media.mit.edu/~vyzo/gerbil/index.html">Gerbil</a>. Poking around for GUI libraries I quickly found: <a href="http://github.com/dmitryvk/cl-gtk2/commits/master/">cl-gtk2</a>, <a href="http://www.peter-herth.de/ltk/">ltk</a>, <a href="http://common-lisp.net/project/mcclim/">mcclim</a>, <a href="http://repo.or.cz/w/commonqt.git">commonqt</a>, <a href="http://github.com/cddr/celtk/commits/master">celtk</a>, <a href="http://github.com/Ramarren/cells-gtk3/commits/master">cells-gtk3</a>, <a href="http://tobias.rautenkranz.ch/lisp/cl-smoke/">cl-smoke</a>, <a href="http://common-lisp.net/project/cello/">cello</a>, <a href="http://www.wxcl-project.org/language/en/">wxCL</a>, <a href="http://common-lisp.net/project/cells-gtk/">cells-gtk</a>, <a href="http://www.cliki.net/Lisp-Tk">lisp-tk</a>, <a href="http://www.cliki.net/clg">clg</a>, and <a href="http://common-lisp.net/project/cl-ncurses/">cl-ncurses</a>. Even cl-ncurses has seen <a href="http://common-lisp.net/pipermail/cl-ncurses-devel/2009-September/000083.html">some recent activity</a>! :)<br><br>Now I grant some of these libraries are unmaintained and others are code stubs that never quite got off the ground. But 6 of the concurrency libs were started this year and of those 6, 3 have seen code updates in the past 3 weeks. Of the GUI libs, the CommonQT and CL-GTK2 bindings have both seen commits in the last month. Sadly, the libraries are spread out all over everywhere from Cliki to Github to random repositories dotting the cyber landscape. There are many reasons the library situation isn't perfect but it isn't dead either. Just look at all the <a href="http://common-lisp.net/project/clbuild/clbuild/projects">projects</a> and <a href="http://common-lisp.net/project/clbuild/clbuild/wnpp-projects">work-in-progress-projects</a> in clbuild! Moreover, there are discussions about what Lisp needs to move forward. Some of them involve <a href="http://ilc2009.scheming.org/node/48">CLtL3</a>, a new standardization effort, and others involve infrastructure improvements, <a href="http://ilc2009.scheming.org/node/10">a central package respository for example</a>. The <a href="http://www.cliki.net/Lisp%20-%20Next%20Generation">talk is out there</a>. <a href="http://www.reddit.com/r/lisp/comments/9kux3/four_chapters_of_nick_levines_new_lisp_book_are/">Books are still being written</a>, people are still <a href="http://www.lisphacker.com/projects/sbcl-arm/port-log.txt">working on the implementations</a> and <a href="http://ccl.clozure.com/irc-logs/ccl/2009-09/ccl-2009.09.21.txt">making</a> <a href="http://www.reddit.com/r/lisp/comments/9swyw/ecl_v9102_released_some_build_problems_solved/">releases</a>, <a href="http://www.lisphacker.com/temp/notes.txt">low level experiments</a> are still being done even though the <a href="http://bc.tech.coop/blog/061115.html">lisp machines are gone</a>...<a href="http://collison.ie/blog/2008/04/lisp-machines">well</a>, <a href="http://www.cliki.net/VLM_on_Linux">mostly</a>.<br><br>But mostly I just wanted to put this all out there for now. To celebrate the tremendous, if seemingly fractured, development and FUN people are having with this language. Because that's what I'm having. Fun. You want in on it? Then get ready to get your hands dirty.


title: Just cause it makes me smile.
date: 2007-05-16 22:12:00.000000
format: html
content:
  Proof of pwnage:<br>Exhibit A: <a href="http://img459.imageshack.us/img459/782/screenshotzm5.png" target="_blank"><span>http://img459.imageshack.u</span><wbr></wbr><span>s/img459/782/screenshotzm5</span><wbr></wbr>.png</a><br>Exhibit B: <a href="http://img515.imageshack.us/img515/4038/screenshot1pp6.png" target="_blank"><span>http://img515.imageshack.u</span><wbr></wbr><span>s/img515/4038/screenshot1p</span><wbr></wbr>p6.png</a>


title: Just for Fun
date: 2008-09-10 20:05:53.000000
format: html
content:
  There's so much I've been meaning to post about lately and so much that's been going on. It's <em>very hard</em> to keep up with it all. This will consequently seem a bit scattered but it's largely divided into Gifts, Linux Stuff (which continues to bring me perpetual joy), programming language stuff and hardware stuff.<br><br>Redlinux: I've been working on my own ArchLinux Derivative over the past few months and mentioned it a bit here. I'm hoping to get an ISO for an installable LiveCD of it online by the end of September with a sort of beginner's guide and homepage for it set up here. There won't be a forum or anything initially. Just e-mail me for feedback/help. We'll see how that goes. I'm calling it Redlinux. Also, I put all the default *rc files and other important config files (including new user documentation and the changelog) in a new folder on the site. It's at <a href="http://redlinernotes.com/docs/redlinux/">http://redlinernotes.com/docs/redlinux/</a>. Redlinux is currently at version v.07. The initial online release will incur an automatic version bump to the nearest .x0 rounding up.<br><br>Logos: I'm looking to get a sort of logo for the site. I'm not sure where to go with this. I also need a separate logo for Redlinux. Any ideas are welcome. I have one for a site logo. It's a <a href="http://en.wikipedia.org/wiki/Shebang_(Unix)">Unix Shebang</a> combined with a lowercase <a href="http://en.wikipedia.org/wiki/Lambda">Lambda</a>. Like so: <strong>#!&lambda;</strong>. I think it's pretty cool but it'd take some work to make it prettier.  The <a href="http://levien.com/type/myfonts/inconsolata.html">Inconsolata font</a> would be a good start. I don't think they have a lowercase lambda symbol though. :-(, Sad Panda. I'm thinking we call it the *Lambdabang*. Eh, eh?<br><br>Gifts: I've been thinking about money and my actual needs and wants a good deal lately. Part of that comes from having to constantly figure out finances due to being young and broke in a struggling economy. The other part is me thinking about the few material things I enjoy and which I'd like to prioritize. Good ideas for gifts for me that I hadn't previously considered are Internet Hosting (and you know I'll want pretty serious control over the box. Maybe <a href="http://www.linode.com/">linode</a> or <a href="http://lylix.net/archlinux">lylix</a>.), a subscription to <a href="http://www.lwn.net/">LWN</a> (Linux Weekly News) which I've been enjoying a lot lately (the back issues are free) and various books from <a href="http://www.amazon.com/gp/registry/wishlist/32H7I8DJX2WWE?reveal=unpurchased&filter=all&sort=priority&layout=standard&x=18&y=11">the amazon wishlist</a>, as always. Cooking supplies might also be good but I'm probably best off picking those myself. Homemade good food. It's expensive, but fun!<br><br>Hardware: I've been thinking about buying a new computer for about a year to a year and a half now. I recently moved into the "strongly considering it/planning it" phase and started saving. This box would probably end up replacing my aging homemade beast of a "<a href="http://redlinernotes.com/hardware.html">main desktop</a>" which would in all likelihood become my server box. I decided fairly early on I wanted the new system to be a laptop because I'd really like to be able to go portable at any time and not be at a loss for processin power. Plus, that'll make it easy for me to move around lifestyle and home-wise which seems reasonable at the moment. To be honest, my needs are essentially met by my current equipment and the extra processing power wouldn't go to use too much as I don't game anymore. The Thinkpad A31 (present laptop) hates secure wireless networks for some reason and I wasn't able to wrestle it into submission. A larger concern would be hardware dying in the Desktop. It's still going strong but we're passing the 4-year mark and you can never be too sure. Besides, I'd love to catch some of the new emerging tech like Multicore processors, new wireless standards (Wi-Max and draft-n, I'm looking at you), and Solid State Drives! I'd also love to be able to get something based on <a href="http://en.wikipedia.org/wiki/AMD_Fusion">AMD's upcoming Fusion processors</a> but that's still a year out and I'm not sure I'll wait that long. I like the direction they've gone with the Athlon series and feel that they're more motivated than Intel to innovate. Always have. They're still not as fantastic about supporting Open Source as Intel though and that's beginning to become a deal breaker for me. Especially considering that their <a href="http://en.wikipedia.org/wiki/AMD_mobile_platform#Shrike_platform">Shrike mobile platform</a> may use broadcom wifi or something equally messy where Linux is concerned. I know I want something 12 or 13", preferably 13, with a minimum of 4 hours of battery life, a dual-core processor and a 60GB SSD. Ideally, it'll be Shrike-based (that's waiting a year), have HDMI or Displayport out with good Linux support and draft-n or Wi-Max. Vendorwise, I'm torn between IBM/Lenovo and Dell. I've had good experiences with Thinkpads (IBM, now Lenovo) and like them but they're not the best Open Source company. Dell has been making a real push in that direction of late and have some very competitive looking offerings which I could even <a href="http://www.dell.com/content/topics/segtopic.aspx/linux_3x?c=us&cs=19&l=en&s=dhs">buy with Ubuntu pre-installed</a>. My final three is presently a tie between the <a href="http://shop.lenovo.com/SEUILibrary/controller/e/na/LenovoPortal/en_US/special-offers.workflow:ShowPromo?LandingPage=/All/US/Landing_pages/ThinkPad_notebooks/2008/X300">Lenovo X300</a>, the <a href="http://configure.us.dell.com/dellstore/config.aspx?reconfigure=true&vw=icon&cart=ActiveCart&id=c5f3159b-40ce-4cc9-a652-86bc10fd928e&ecomm=ecomm.dell.com&c=us&l=en&cs=19">Dell XPS M1330</a> and the <a href="http://www.dell.com/content/products/productdetails.aspx/laptop_latitude_e4300?c=us&l=en&s=biz">Dell Latitude E4300</a>. I'll be coming back to re-evaluate when I've got about $1,500 stashed away. :-)<br><br>Languages: In the near future, I'd like to get a post up revising some of my former opinions on Programming Languages. Particularly of the Scheme family. Some of my earlier ramblings now seem quite misguided. Plus I've been playing around with Common Lisp more and though I'm not quite a fan of the funcall syntax I'm starting to grok some of the reasoning for multiple namespaces. My experiences with PLaneT vs. ASDF-Install bear that out. *shivers* Collisions are <b><em>ugly</b></em>.<br><br>Linux Tip: Ever been frustrated trying to transfer directories with spaces in them via scp? I have. There are one or two things that seem like they should work but don't. I've been too lazy to look up how to do it until today. Here's how:<br><code>scp -r "user@host:/path/to/directory\ withspace/" .</code><br>Simple, right? Duh.<br><br>I was going to mention how Linux Kernel Hackers make me happy and throw a few quotes from the mailing lists on here but I think this is more than enough for now. Later, folks.


title: Just wow…
date: 2007-08-16 16:49:50.000000
format: html
content:
  A <a href="http://precisionauto.livejournal.com/">friend of mine</a> posted this:<br><br><img src="http://i14.photobucket.com/albums/a309/tremspeed/irna.jpg" title="Mind Boggling" alt="Mind Boggling" align="middle" height="240" width="320" /><br><br>I'm speechless.


title: Keep It Together
date: 2009-10-06 15:25:26.000000
format: html
content:
  So, the last time I really posted a personal update I didn't have many good things to say. I was a bit depressed. But I seem to have climbed out of that hole. Midterms are mostly over and I have a much better feel for my classes with them behind me. The only one I haven't taken is the American Government midterm which I'll take tomorrow at 3pm. A decent amount of stress is off now that they're out of the way. I'm still a bit overextended. I'm pulled in many directions by a desire to do many things but I might as well be honest. I like it that way.<br><br>Particularly, I'm trying to contribute to two different pieces of Open Source Software. One is Mixalot, a suite of Common Lisp libraries for interfacing with Linux's ALSA sound sytem and playback of MP3 files. The other is Paktahn, a package management wrapper for Arch Linux which is meant to replace Yaourt. Paktahn is also written in Common Lisp. Notice a trend? I want to use Mixalot to work with Ogg Vorbis (*.ogg) files which it doesn't support. I told Andy Hefner I'd like to try and contribute some libvorbisfile bindings which would let Mixalot work with that file format. Unfortunately, that involves interfacing with C code which I don't know much about. It's definitely an order of magnitude harder than most things I've worked on before. Plus I've had exams...so I haven't gotten much done on that front yet. Leslie Polzer is writing Paktahn and he pointed me in the direction of a fairly straightforward, well-defined problem that needed solving. I got around to working on that and have made pretty good progress. With a little more work it may even make it upstream for the next release. That's wicked fun!<br><br>I've wanted to write a blog post on Lisp for a little while but couldn't narrow down what about Lisp to focus on. Lately I had been looking at mailing lists, documentation and source code repos for a lot of Common Lisp libraries. Perhaps what shocked me most was the realization that Lisp has plenty of work to go around for silly noobs like myself. There are all sorts of trivial little tasks all over the place that maintainers are too busy solving real problems to fix. And that's awesome! I can be very helpful probably to a wide number of different projects. Now, I don't know a lot and I don't have time to "help" near as much as I'd like...but I can still learn something and be of use. And I'm pretty happy about that. So Common Lisp: Have fun on the fringe, benefit from learning a non-standard language with some awesome features, be useful and get mentored by some smart folks. What's not to love? I'll try to post something more thoughtful about this later. But for now, all I have to say is that this is a really good thing and I can't wait to see where it takes me.<br><br>For now though, it's back to studying.


title: Keeping Up With The Joneses
date: 2008-03-19 04:13:07.000000
format: html
content:
  <p>It's an unusually late post for me tonight so I'm keeping it short as I'm pretty exhausted. Sanford, I'll get to your comment tomorrow once I can form a coherent thought.</p><br><p>One, I need to get motivated/cranking on SICP again. I've made progress since finishing Section 1.2 and I think Higher-Order Functions are great but I need to move forward. If you have words of wisdom/encouragement, feel free to speak them.</p><br><p>Two, I really enjoyed listening to a song called Green Gloves by The National tonight. When I heard Fake Empire I wondered but if the rest of the album is this good that seals it. Have they been this amazing all along and I was just missing it? Seriously, this is the first thing since Yeasayer that's just knocked me over.</p><br><div align="center"><br><style type="text/css"> @import url(http://skreemr.com/styles/embed.css); </style><br><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">The National - Green Gloves</td> <td WIDTH="16" CLASS="sk-topright"><img style="padding:0;border:0;" SRC="http://skreemr.com/images/corner-topright.gif"/></td> </tr><br><p> <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://perchmusic.com/Perchmusic/may07/05%20green%20gloves.mp3"></embed> <img style="padding:0;border:0;vertical-align:bottom" src="http://skreemr.com/images/skreemr_logo_small_name_only.png"/> </td><br><p> <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=6B524450555F&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><br></p></div><br><p>What do you guys think?</p>


title: Kindred Spirits?
date: 2007-08-05 19:04:32.000000
format: html
content:
  Dear Google,<br><br>I've been thinking about what you might be able to do for me lately. Surely you realize that you are the de facto Web Software incumbent, even in those market segments that were just born yesterday. I was thinking, you might really be able to help me out and make Orkut not pointless at the same time. Just help me find people that are reading the same things I am in Google Reader so I don't feel crazy. That is, help me find non-programmers that can't stop themselves from reading Steve Yegge, Paul Graham, Kerneltrap, TIRDC, the Redmonk Guys, Luis Villa, Worldchanging, XKCD, Patrick Logan, NJ Patel, O'Reilly Radar, Glyn Moody, Matt Asay, TEDTalks, and Lambda the Ultimate. Bonus points if you find females within 50 miles and 3 years of myself. Also, if subjects read Milosz and Kosinski in their spare time, it helps. Okay. Now please.<br><br>PS: I'm helping Ken Boa with some computer problems tomorrow. Sanford referred me. Does anyone else find this somewhat surreal? God, are you stalking me again?


title: Labor Day Leisure
date: 2007-09-04 00:52:48.000000
format: html
content:
  I have to say this labor day has been fairly leisurely. I probably should have done more homework and there are definitely some things I need to get written and posted up on the blog but I'll get to that as soon as I can. I've been feeling a bit under the weather the last 24 or 48 hours. I think I have a bit of a throat thing but hopefully it will pass in another day or two. Here is tonight's fantastic reading:<br><a href="http://blog.p2pfoundation.net/revisiting-the-cathedralbazaar-metaphor-why-both-eric-raymond-and-nicholas-carr-got-it-partly-wrong/2007/08/11">Peer Production Models</a><br>http://www.sauria.com/blog/2007/08/25/scalability-concurrency/<br>http://www.russellbeattie.com/blog/java-needs-an-overhaul<br>http://intertwingly.net/blog/2007/08/25/Lean-Languages-and-Libraries<br>http://bitworking.org/news/158/ETech-07-Summary-Part-2-MegaData<br>http://redmonk.com/sogrady/2007/08/26/links-for-2007-08-27/<br><br>I'll try to find my words for all this soon...


title: Language Adoption and Lisps
date: 2008-04-03 01:12:53.000000
format: html
content:
  Long-Winded Preface<br>This is my (marginally informed but mostly inexperienced) personal opinion. I have a habit of thinking about things prematurely and overanalyzing them but I indulge in it. It seems most lispers at some point or another either do <a href="http://bc.tech.coop/blog/040111.html">a roundup of the available lisps</a> to decide on an implementation, <a href="http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html">try to figure out why lisp isn't more popular</a>, or try to figure out why <a href="http://www.paulgraham.com/avg.html">other languages seem to be growing towards it</a>. I have an opinion on these issues after obsessing over them for a month or two and in the interest of believing some useful knowledge came from that obsession I'll document my opinions here. I should note that I don't yet consider myself a "lisper" for two reasons. One, I haven't yet encountered a formal definition of that term or a sufficiently common form of usage. Two, I simply haven't written enough lisp yet though I am sold on it to date.<br><br>Factors in Language Adoption<br>There are a few things that seem to drive adoption of programming languages generally but I'm interested in a small subset of programming languages so I'll be covering an appropriate subset of influencing factors. Specifically, I'm interested in languages that are not owned or pushed by a corporation but still have achieved some prominence among language elitists and/or some mainstream success. (4/7/08 Edit: This mostly serves as a disclaimer that I won't cover C, C++, C#, or Java here.)<br><br>As far as I can tell, these languages all have some of these critical features:<br>1. A single or dominant implementation.<br>2. A module system that works across implementations.<br>3. A killer app or great libraries.<br><br>Case(in_point) -&gt;<br>The languages I'm thinking of are the following: <a href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a>, <a href="http://en.wikipedia.org/wiki/Perl">Perl</a>, <a href="http://en.wikipedia.org/wiki/PHP">PHP</a>, <a href="http://en.wikipedia.org/wiki/Lua_(programming_language)">Lua</a>, <a href="http://en.wikipedia.org/wiki/Ruby_(programming_language)">Ruby</a>, <a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)">Haskell</a>, <a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)">Erlang</a>, and <a href="http://en.wikipedia.org/wiki/OCaml">OCaml</a>. Smalltalk is a perhaps crucial omission from this list but I count both Smalltalk and Lisp on a different language plane because of the sheer history surrounding them. I simply feel more factors are at play.<br><br>That said, all of these languages have achieved some preeminence for one reason or another though Haskell, Erlang, and OCaml are certainly not in the mainstream. Erlang sneaks in because of it's recent hype explosion and the limited use it's seen in industry, OCaml sneaks in on the virtue of it's infamous use at Jane Street alone, and Haskell I'm letting in both for it's proselytizing FP userbase and interesting programs (Darcs, Xmonad).<br><br>We can see quite clearly that several of these languages have one standard implementation (excluding ports to the JVM or CLR) including Perl, PHP, Lua, and Erlang, Python, and Ruby. As I already mentioned, Haskell has interesting programs at work and OCaml has some commercial usage. Lua has heavy use in the Video Game industry for scripting among other places. Erlang is used at Amazon, Ericsson, Nortel, and T-Mobile. Python, Perl, and PHP are the languages that built that web and Ruby has taken off since all that Rails business.<br><br>Common Objections<br>Many people complain about the <a href="http://c2.com/cgi/wiki?SocialProblemsOfLisp">communities being elitist</a> or the implementations being insufficient or the <a href="http://fare.livejournal.com/77842.html">syntax being odd</a>. I'd say those are the three complaints I see the most. Certainly, the syntax does scare a few folks. Certainly, there are cases where a lisper doesn't handle a noob with the proper tact. Certainly, there are cases where it makes more sense to use another language on a project in lieu of Lisp. I do not believe that parentheses will deter those actually interested in stretching their abilities and learning a new language. I do not believe that a few flames are indicative of the general lisp community. I do not believe that lisp not being ideal in a given scenario is necessarily a problem with the available implementations.<br><br>The Punchline<br>What I've failed to talk about is point 2 (a standard module system) which I think is presently the most serious drawback to the Lisps. Lisp will never have a standard de facto implementation. There are plenty of implementations already on the scene and many of good quality, combined with the fact that some implementations are designed around a spec (RnRS). I grant that this entire problem could be solved if the Schemes at least standardized on R6RS, or at least the R6RS module system but apparently that isn't happening.<br><br>As I've said, we'll never have a standard implementation and, from what I can tell, the absence of both a standard implementation and a standard module system simply slaughters the code portability that would help a healthy community of code sharing. This precludes the libraries and interesting programs that lead languages out of the elitist ghetto. Most programmers won't touch a language regardless of it's feature set if they can't be productive with it fairly rapidly without writing the sort of libraries they've come to expect. If there is something wrong with lisps, this is it. Very few programmers will seriously try a new language without easily available libraries that make the language have a batteries-included feel to it.<br><br>Now, I realize that <a href="http://groups.google.com/group/comp.lang.scheme/msg/e1a107ccd60810a3">standardizing all Schemes</a> on <a href="http://lambda-the-ultimate.org/node/2429">R6RS</a> is impractical but we don't need even that. If we could manage to just get the three largest Scheme implementations to unite on one module system we would have made tremendous progress. I'd say the three largest Schemes in userbase with a module system are: PLT Scheme, Gambit-C, and Chicken Scheme or Bigloo Scheme. If we could get even these 3 or 4 implementations to standardize, I think it would be enough to really get things rolling. Even 2 of them standardizing on modules might be enough to pull others in. I can't personally think of a bigger win.<br><br>The Inflammatory Bit<br>I don't mention Common Lisp here because, again I stress personally, I hope we stop encouraging it as a starting point for newcomers. I don't think it's a good way to encourage people to use Lisp. I consider it more fragmented and thorny than Scheme for the beginner though I acknowledge it at least has a dominant implementation, from what I can tell, in <a href="http://en.wikipedia.org/wiki/SBCL">SBCL</a>. I realize that it has contributed a great deal and I don't mean to discredit it's achievements. It simply seems something better left to the experienced.<br><br>Personally, my disagreement with CL probably stems from two things. One, I dislike the design decision of separate namespaces for functions and arguments. Secondly, I feel that if most of CL's added functionality could be bolted on to a Scheme implementation through the use of libraries then why not have a Scheme implementation with said libraries and allow that to usurp the role played by prior CL implementations. I do grant that would be a lot of work to redo without good cause. At any rate, these are my inexperienced preliminary observations and my opinion may change drastically over the next few years as I have time to give it a fair chance and read through PAIP and On Lisp.<br><br>The greatest advantages of Common Lisp over Scheme I would expect to hear as arguments are it's use of CLOS and Namespaces, it's libraries, and it's quality implementations. I believe all of those are solvable issues in Scheme provided a standard module system enters the picture. I also have some opinions about why the Schemes should focus on distribution and concurrency after modules and further opinions on compilation to C versus native code. I leave that for another time.<br><br>Conclusion<br>In short, the central problem lisp must overcome for mainstream success (which may not even be desirable) is a standardized module system. The lack of a module system prevents a culture of code sharing which is preventing the creation of a software ecosystem around lisp. This is, at root, a sociological problem emerging from a technical problem. The lack of a standard module system and shared code produces the social effect of Lisp's continued obscurity. Lisp's obscurity does not stem from some deep difficulty inherent to the language, noob-averse communities, shoddy implementations, or the Lots of Spurious Irritating Parentheses.


title: Languages
date: 2007-06-08 21:06:00.000000
format: html
content:
  On Tuesday I was quite relieved to be off work. It had been a stressful day at the office but I had exciting dinner plans with friends (trivia night at Benchwarmers with Justin and Bria, for the curious). I had finished <em>Cradle to Cradle</em> by McDonough and Braungart the day before and needed to start on my next summer reading book. Nothing on <a href="http://redline6561.livejournal.com/161845.html">my list</a> really suited though. Most of the books are rather academic and while I find social production fascinating academic writing wasn't really something I was ready for. With that in mind I stopped in two bookstores while I was running afternoon errands and walked away with a copy of <a href="http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/0596006624">Paul Graham's <em>Hackers and Painters</em></a>. I'm about 50 pages in at the moment and have really enjoyed reading it for the past few days. I'm sure some bits will make it into my next quotables. However, it has raised a number of questions\issues\thoughts in my mind for which I consulted the collective intelligence of "teh interwebs\tubes" this morning and stumbled upon someone who had made both <a href="http://www.xach.com/lisp/taste-for-the-web.html">a parody of Paul Graham</a> and what is (in my mind) <a href="http://www.idlewords.com/2005/04/dabblers_and_blowhards.htm">a more serious\grounded critique</a>. Perhaps the most nerd-controversial thing Graham talks about is programming languages. There are few things more hotly contested in the programming world. In the critique of Graham though, what I found most interesting were the analogies drawn to other internet authors like Eric Raymond. I finally stumbled on this quote on a different site: "Every 5 minutes you spend writing code in a new language is more useful than 5 hours reading blog posts about how great the language is."<br><br>And it was at about that moment that I realized that (formal and\or programming) languages are completely incidental. Graham notes early in the book that Computer Science has a real mix of participants. The computer science building at a university might contain honest-to-goodness mathematicians who get their work filed as computer science for funding purposes, a middle ground of those studying computers without making things with them, and programmers trying to make software. For the programmer, language is incidental. The language is only a tool towards creating software...and arguing about programming languages is in some way similar to the creation-evolution debate in suburban America. If you're a scientist it's possible that such a debate matters. It can affect how you approach your work and\or your starting assumptions. Similarly, if you're a computer scientist at a university it affects your research. If you're a programmer though, or a suburban American, than any group can be right. It's effectively incidental to your daily life. If you live in suburban America and are neither a pastor nor a scientist than it matters not whether God created the universe or whether it began out of nothingness one day and it matters not whether it took ages or attoseconds. You will still get out of bed, dress, tend to whatever dependents you have (dogs, children, spouses, etc) and go to work. That is what you will do three hundred and fifty days a year, regardless. Similarly, the programmer can be using the world's best language or it's worst but they will still roll out of bed and try to produce software with it. The only point at which language can conceivably matter to the programmer is if it can ease software development and this is a very personal, very individual thing. The same <em>might</em> be said of SCMs (souce control management systems).<br><br>The extent to which people fanatically advocate languages, architectures, etc. beautifully exhibits how intrinsically subject to network effects technology and specifically information technology (that is, computers) are. It's not an issue of simple memetics. Why do mac users advocate mac? Why do linux users advocate linux? Why do python users advocate python or perl users perl? Why do nvidia owners advocate nvidia or amd users amd? Why do PS3 owners advocate PS3 or Wii owners Wii? Simply because the ability to manipulate all that information that you use computers to manipulate in your life (and there is lots of it) whenever you want and wherever you want is good. The information becomes more useful as its accessibility increases. You would never bother typing journal entries into a computer if they couldn't be posted to the internet. There would just be no damn point. You'd keep a journal. At some point Graham tries to draw a distinction between the popularity contest of high school which he argues as being pretty arbitrary and the popularity contest of the real world which supposedly is less so. Here's a thought: Neither of them are arbitrary and both of them are examples of human beings making decisions based on incentives, not that economics has any concrete idea how to explain any of this human behavior beyond such a simple premise. Clearly though the implications are profound. If there is a less mainstream technology which has become an integral part of life for an individual they will fervently advocate the technology so that others adopt it in an effort to keep the engineers hired to maintain and\or improve the technology around as long as necessary. The support industry itself advocates the technology in an effort to maintain their jobs.<br><br>Everybody hopes to know or be involved in the next big thing because it's tied to their employability. If you're looking for work, you'll try to learn Java before Algol. This may be dumb because Algol would certainly distinguish you more from the mobbish competition. Moreover, whatever companies do need Algol coders would have little in the way of alternatives and probably have to pay decently. You'd have a bit more bargaining power potentially. Of course, so would they. Take the job or be unemployed. Really though, the whole thing is just ridiculous. The fact that all we want computers for is to do useful and interesting things complicates the issue as does the fact that the differences in languages cause differences in the ease of solving certain programming problems and also perform differently where speed is concerned. And I'm convinced that just ordaining a standard language, platform, architecture, etc would result in a net productivity\innovation loss. Besides, the majority of programmers get employed in spite of all this and many innovations make it to prominence. I still don't buy the quote from Almost Famous about pop music being good because so many people like it but there's something much more complex at work here that I just feel like is slipping off the tip of my tongue and hiding in the back of my head. I guess it sort of reminds me of what McDonough said about nature having good waste (which in some sense means no waste). The extra blossoms produced by a cherry tree litter the ground but in a good sense. It's all so that one new cherry tree will emerge but it manages to fertilize the "littered" area anyway. Almost like it's all about making goods with positive network effects. And certainly languages like ripping off each others features. As do markets. So maybe this good waste is what we're really after. Markets definitely don't make good waste when they produce things. It's clear that our way of making stuff is pretty borked. But there's definitely something to be said for letting all our ideas fly around and crash into each other. But...what does it mean if there are no experts left? Were we wrong about the concept of the expert to begin with?


title: Latest Learnings
date: 2008-01-16 04:34:47.000000
format: html
content:
  So, I've been meaning to post about the things I taught myself in Montana and my course of study and a course schedule through May/syllabus but I had to recover some partitions on my desktop. My laptop also was caught between Ubuntu Hardy Alpha 2 and Alpha 3. I'm not getting into it. It's a long story. Anyway, now that all my systems are running flawlessly I'll speak a little on the aforementioned subject matter.<br><br>I have a long term plan for a course of study but no hard schedule yet. I have to divide up readings and problem sets and link them with lectures and such. I plan to have such a syllabus done and up for viewing by the end of the week. As for the long term plan of study there are 6 Programming Texts and 3 Math Texts that I'd really like to get through. If I get through the first 3 Programming Texts (or even the first 2) and 1 or 2 of the Math Texts I'd consider it a successful year. They're all fairly rigorous and I'd like to cover them in depth. Of late, I've been debating the order in which to approach the programming texts. Either SICP, CTM, HTDP or HTDP, CTM, SICP. Some of the stuff in SICP is a bit difficult and some of the stuff in HTDP is a bit easy so far. This is another thing I'm hoping to have worked out by the end of the week so that I can get going.<br><br>Once I do have a syllabus I'll post it and then post notes on readings and lectures and solutions to exercises as I go along so feel free to follow along and ask questions. You can only help me learn more. So far, I read the first 40 pages of SICP in Montana. That's Chapter 1 (of 5), Section 1.1. I've got notes typed up on the lecture and reading and most of the examples solved. I'll get those posted up by Friday as the first entry whatever my course of study turns out to be. Also, Friday I will be going to that Yeasayer concert. So far Ben Grad and Minor are talking about going too. Any more takers? Have you guys liked Yeasayer as much as I have? Isn't that Red Cave song from yesterday awesome?<br><br>Finally, here are some good Lessig quotes my readings in Montana of The Future of Ideas (Pgs. 1 - 99):<br><br>"The very idea that nonexclusive rights might be more efficient than exclusive rights rarely enters the debate. The assumption is control, and public policy is dedicated to maximizing control." - Lawrence Lessig, The Future of Ideas, Pg. 86<br><br>"Where we have little understanding about how a resource will be used, we have more reason to keep that resource in the commons. And where we have a clear vision of how a resource will be used, we have more reason to shift that resource to a system of control." - Lawrence Lessig, The Future of Ideas, Pg. 88-89<br><br>"The point is more than theoretical. In essence, the changes in the environment of the Internet that we are observing now alter the balance between control and freedom on the Net. The tilt of these changes is pronounced: control is increasing. And while one cannot say in the abstract that increased control is a mistake, it is clear that we are expanding this control with no sense of what is lost. The shift is not occurring with the idea of a balance in mind. Instead, the shift proceeds as if control were the only value." - Lawrence Lessig, The Future of Ideas, Pg. 99


title: Learning Melee
date: 2014-11-22 15:00:00.000000
format: md
content:
  ## Disclaimer

  This post is mostly written for myself. It assumes familiarity with
  various terms, people, equipment, etc. If you find it useful or
  entertaining, whether you play melee or not, cool. This post is not
  intended to be a training guide. I'm not good enough to be educating
  beginners, just to observe my experience over the last year.

  If you **do** want to get started with Melee, you need a few things:

  * Good condition [Gamecube Controller][gc] (Nintendo-only, no knockoffs)
  * A CRT or [lagless setup][lagless], I rock a BenQ RL2455HM with the
    Sewell Wii-to-HDMI converter and an Avermedia LGP for recording
  * A Gamecube and Melee disc, or better,
    Wii and [20xx hack pack][20xx] on SD card
  * Familiarity with the basics of smash as a series
    and a character to focus on
  * A *good* guide, maybe check the resources at the end :)

  [gc]: http://astore.amazon.com/smashboards00-20/detail/B0017KIBAI
  [lagless]: http://www.reddit.com/r/smashbros/comments/26got5/quick_followup_to_miom_lag_article/
  [20xx]: http://smashboards.com/threads/the-20xx-melee-training-hack-pack-3-02-update-pal-chars-more-alt-stages-costumes-new-debug-menu.351221/

  ## Enter Melee

  I'm not a gamer. The last time I really put substantial time into
  video games was high school. I also wouldn't describe myself as a
  competitive person. But for whatever reason, I've always been
  competitive in [Smash Bros][smash_series]. I want to win.

  Late last October, I stumbled on [a documentary][smashdoc] detailing
  the history of the competitive smash brothers scene. I was riveted.
  I was suddenly aware of a massive depth to the game I'd hitherto
  missed. I had to know more, I had to try to my hand at competitive play.

  [smash_series]: http://en.wikipedia.org/wiki/Super_Smash_Bros.#Gameplay
  [smashdoc]: https://www.youtube.com/playlist?list=PLoUHkRwnRH-IXbZfwlgiEN8eXmoj6DtKM

  ## Why Do This?

  In addition, I've always struggled with things I'm not immediately
  good at. I'm terrible at being patient with myself, at viewing life
  (and goals) as a journey and not a destination to be reached post
  haste. Melee remains an excellent opportunity to practice being loving
  and patient with myself, and handling failure and defeat gracefully.

  As I said before, it's a monumentally deep game. Like in chess,
  character positioning and board layout is paramount. As in poker,
  bluffing and calling your opponent's bluffs is crucial. There's also
  an executional aspect. Professional players routinely execute 300
  actions per minute and have to perform complex controller inputs in a
  20th of a second window or less. Not to mention just learning the
  properties of 25 characters, their moves, and the Rock Paper Scissors
  of what beats what in which situations.

  I've been at it for a while now. I'm still not good but I'm much more
  at peace with that than I was when I started. Here are a few things
  I've learned playing melee the past year. A lot of these things are
  habits I've had to work hard to break. Just remember not to get
  discouraged. Melee can be very unforgiving.

  ## Rule Number 1: Keep It Fun

  You have to stay motivated. If things get too serious and you're not
  having fun you're going to play less and your skill will plateau.
  There are a lot of things beginners have to absorb and a plethora of
  suggestions, bordering on rules, about how to practice. Feel free to
  violate anything anyone says in order to keep things fun.

  A few semi-regular suggestions I violate in the name of fun are:

  * Focus on 1 character

  >  I play 2 seriously (Sheik/Marth), 2 semi-seriously (Fox/Falcon),
  >  and 2 for fun (Pikachu/Doc Mario). If I don't switch it up, I find
  >  myself getting frustrated with progress on a single character.
  >  And when playing with friends, it can be surprisingly rejuvenating to go
  >  play a quick falcon ditto after an hour or more of serious play.
  >
  >  Additionally, I find some characters make certain kinds of practice
  >  more rewarding. For me, Fox makes it really fun to practice tech
  >  skill and Marth makes it really fun to practice spacing. Those
  >  characters really emphasize those attributes which makes the practice
  >  payoff very clear.

  * Don't practice against CPUs ... (above level 5, to hone your mental game, etc)

  >  The big argument here is that CPUs ingrain bad habits. Especially
  >  if all you're trying to do is win. So don't try to win. PPMD talks
  >  about doing something called [shadowboxing][shadowboxing],
  >  essentially playing the CPU like a human opponent. The 20xx hack pack
  >  is supposed to improve their behavior in various ways, especially DI.
  >  I find it helpful to practice tech skill at a level where the CPU
  >  will punish me if I'm too slow or miss an input.

  [shadowboxing]: http://smashboards.com/threads/falco-discussion-thread.256826/page-439#post-14739329

  ## Rule Number 2: Structure Your Play

  > Editor's Note: Some of the advice in this section is specific to me
  > because I don't attend or plan to attend lots of local tournaments.
  > The core advice of separating different kinds of play still applies.

  To play competitively, you're going to wind up doing 3 things:

  1. Practicing tech skill
  2. Experimenting with your play
  3. Competing seriously

  It is important that you keep these things distinct. For example,
  I try to spend 20-30 minutes a day practicing tech skill. I move
  around the stage, working on flubs or things I execute too slowly.
  I try to learn new tech (such as waveshines). I don't go to many
  local tournaments so I experiment with different approaches and
  punishes against a CPU. Finally, when I want to be competitive
  I play (seriously) against friends.

  Initially, you'll want to blur all this together. You'll be playing
  semi-seriously with a friend and be tempted to try "new stuff":
  platform movement, wavedashing, the "Ken combo", getting an off stage
  Falcon Punch. Don't give in to the temptation. Melee requires you to
  *adapt* to your opponent above all else. If you're too busy obsessing
  over moves you want to land, you'll limit your options and your play
  will suffer for it. This isn't to say you shouldn't try to work on
  specific things in matches with your friends. Just that tech skill you
  haven't mastered and particular combos are not those things.

  To emphasize further, **don't practice specific combos**. Part of
  Melee's depth comes from DI, or *Directional Influence*, the upshot of
  which is that getting a specific combo might be impossible depending
  on the *opponent's actions*. Long story short, DI allows you (and your
  opponent) to change the direction a hit knocks them in, potentially
  making follow up attacks miss. The interesting choices in melee come
  *in between hits* as you watch what your opponent does and react to
  it. While there are "guaranteed" combos in specific situations
  (character a vs character b at XX%), most of our combos come from
  *reacting* not planning.

  ## Rule Number 3: Work To See The Neutral Game

  If you've spent years playing Smash casually, you'll largely see the
  game as hitting or being hit, offense or defense. But that brutal
  simplification will limit your ability to see the larger game.
  Two common adages fall under this section:

  1. Don't Mindlessly Approach (your opponent)
  2. Don't Mindlessly Trade (hit for a hit)

  The takeaway is, **It's better to not get hit than to get a hit**.

  You'll be tempted to rush in right away, ignore that impulse. You'll
  be dying to hit them back for hitting you, re-establish good footing
  instead. The "neutral game" is everything that happens outside of
  getting a hit or combo and trying to escape being hit. The sooner you
  can see encroaching on an opponent's space on the stage as a useful
  form of micro-aggression, the better off you'll be. Just positioning
  yourself in a threatening way is a hugely useful tool.

  **Don't force your play into a false dichotomy of attacking or defending.**

  ## Rule Number 4: Remember Where Your Good Options Are

  > Editor's Note: This rule was originally called "Stay Grounded" and
  > came from my reflections on the Marth v Link matchup with my buddy
  > Max. Some of this section will be dependent on the matchup.

  **Stage position** is important. Let's say it again: Stage position is
  really, *really* important. When I first started playing Marth, I
  always wanted to approach in the air. Just all the time. Lord knows
  why. But being in the air takes away a *huge* number of movement
  options. Your opponent can plan around and react to your play more
  easily when you have fewer options.

  I wound up above Max a lot and got punished. Even if your character
  has good aerial attacks, unless you're talking cross up nairs with
  Pikachu or Fox there are probably safer, better approaches.  So, being
  above your opponent is usually a pretty negative situation.

  In general, center stage is a great place to be, and above the
  opponent, in a corner, or on the ledge, are bad places to
  be. Platforms are a bit more of a mixed bag. But remember where on the
  stage you have advantage and where your good options aren't available
  and figure out *why* that is.

  In addition, **spacing** is really important. Spacing is more than
  just trying to throw out attacks from a safe distance, or thinking
  about your opponent's range. It also has to do with thinking about the
  range at which your character performs best. Marth and Falcon, for
  example, are mid-range powerhouses, while Fox and Sheik generally need
  to get in close to be really effective. Know where your character
  performs well and remember to stay in that effective range as much as
  possible.

  ## Rule Number 5: Do Think About Options, Action States, and Transitions

  Kirbykaze's blog posts explain this much more clearly than I will.
  Any time you can keep most of your options open while limiting your
  enemy's, do it. That's a huge advantage. And any time you can narrow
  their range of choices you have a much better chance of predicting
  their play, or finding a tactic that covers every possible outcome.

  Since Melee is so much about **movement and positioning**, being fast
  is key. And indeed, most of the executional aspects of high-level play
  are in service of eliminating as much **lag** as possible from your
  character's moves. It's useful to try to build a formal model here.

  Every move in the game has a set duration, though certain moves (dash
  dancing, wave dashing, aerials) can be shortened to varying degrees.
  Once you've committed to a move, the opponent knows more or less how
  long the move's hitbox will be active, how long you'll be unable to
  execute a different move, etc.

  Consequently, speed mostly comes from transitioning quickly *between*
  moves or, as Kirbykaze's blog says, "action states". The better you
  get at switching between shielding, standing, walking, dash dancing,
  wavedashing, and attacking, the faster you'll be. Seamlessly and
  quickly transitioning between these states is vastly more valuable
  than L-canceling all your down aerials.

  This is something I'm just now realizing and trying to improve
  on. It's very appealing to just work on l-canceling or short hops or
  wavedashing but misses the real point. The connecting tissue *between*
  action states is where most of our sluggishness comes from.

  ## Don't Give Up

  Finally, it should be obvious that regular, focused practice makes a
  big difference. I'm going to try to practice 20 minutes a day, 5 days
  a week going forward. I'm still figuring out exactly what that practice
  regimen will consist of, probably mostly tech skill and movement with
  Sheik and Marth. Wavedashing and L-canceling are muscle memory, sure,
  but practicing the basics shouldn't ever really stop.

  And I'm still not where I want to be but I've had [a][falcon_gfy]
  [few][fox_gfy] [good][marth_gfy] [moments][sheik_gfy]. I hope this
  has been an interesting post on some things I've struggled with
  while learning melee. Happy smashing and if you're in Atlanta and
  want a game, feel free to drop me a line.

  ## Resources

  I **really** enjoy Kirbykaze's blog and writings about the game.
  Two particularly good posts are [Movement Drills, Part 1][movement1]
  and [Tactics][tactics].

  [movement1]: http://myneverendingbrainstorm.blogspot.com/2014/10/diy-ssbm-movement-drills-part-12.html
  [tactics]: http://myneverendingbrainstorm.blogspot.ca/2014/10/i-recently-posted-this-question-to-my.html

  Various people have posted articles for beginners on getting better:

  * [Mango](http://www.reddit.com/r/smashbros/comments/1so93m/mango_talks_about_improving_at_melee_from_the/)
  * [NMW](http://www.reddit.com/r/SSBM/comments/2jc3gb/nmws_guide_to_getting_good_at_melee/)
  * [sleepyk](https://docs.google.com/document/d/1_6o5NHvI9P8-qHp2M8w1gDzL_-JNonEE81Mh4ulY1PY)
  * [Albert](http://www.reddit.com/r/smashbros/comments/2ebkwv/getting_better_at_smash/)

  Read. Them.

  [fox_gfy]: http://gfycat.com/SadBlondHalcyon
  [falcon_gfy]: http://gfycat.com/FaithfulSnoopyHornshark
  [marth_gfy]: http://gfycat.com/MiniatureSphericalBufeo
  [sheik_gfy]: http://gfycat.com/AlarmingAdmiredCarpenterant


title: Leaving College to Leverage Compulsion
date: 2008-03-28 20:15:31.000000
format: html
content:
  I realized in the shower this morning that while I’ve made a few statements about my decision to leave college I haven’t really given much explanation. Moreover, I haven’t explained a tremendous amount about my views on education or the modern system of education. Those views I’ll hold for a later post. This one will be short and sweet.<br><br>I spent 3 and a half <a href="http://www.redlinernotes.com/blog/?p=401">wonderful years at Oglethorpe University</a> and half a year at Southern Polytechnic State University before deciding to leave formal education for a while. Before I state why I left, I think it’s important to note what I feel I benefited from while I was there.<br>1. An incredible community of mentors and peers to learn from (Oglethorpe), particularly social skills my Emo (ahem, Freshman) year.<br>2. A <a href="http://www.redlinernotes.com/blog/?p=403">library filled with interesting books</a> with ideas waiting to be digested (Oglethorpe, I only started using it Sophomore year).<br>3. A forced exposure to subjects I otherwise wouldn’t have studied (essentially the CORE program, again, Oglethorpe).<br>4. Time to figure some things out for myself (Oglethorpe and SPSU). And yes, I realize this one is pretty vague.<br><br>So, why did I leave? Well, there are a number of reasons but three stand out as prominent.<br><br>1. Burnout. I was miserable with school post-Sophomore year. I liked college but I couldn’t stand school. I felt like it was keeping me from learning all the things I really wanted to learn. There are plenty of books I knew I wanted to read, think about, and work my way through but I couldn’t due to prior academic obligations. I was unmotivated when it comes to those obligations so I shirked them in favor of personal study. The implication is that I knew I was getting an arbitrary education. Pursuing the paper for the paper, so to speak. And that didn’t sit well with me, both because it was preventing my personal education and not supporting my future in a direct fashion. I essentially avoided working both on schoolwork and my work to try to force myself towards a degree while hating the degree because I didn’t plan to use it. I felt like a failure most days. That alone was reason enough to leave. Or, in the words of Mark Twain, “I never let school get in the way of my education.”<br><br>2. Once I came to realize I wanted to study computer science and programming (they are arguably different) I realized there were very few schools that had the sort of program of study I was looking for. Of those that had something adequate, fewer would let me learn it the way I wanted to (at a moderate pace for fun as opposed to Ivy League sink or swim). Finally, I could get in to probably none of those schools ruling out the option of rigorous formal education. Now it would seem that I have a contradiction on my hands. I don’t want the hardship of Ivy League or heavy workload schools but I want the rigorous education. I believe that by slowing the pace you can keep the fun and rigor without the sink or swim aspect of the experience. The important thing is good material, a good approach to the material, and good supplementary material (including peers) to learn and reinforce from. The community of learning is significant but I don’t believe formal education is necessary for that.<br><br>3. I had enough of an idea for a course of study to actually do it. That is, I knew well enough what texts were <a href="http://redlinernotes.com/images/first_books.jpg">good texts to study</a>, there were lots of online lectures and materials, and programming is very much a <a href="http://www.norvig.com/21-days.html">learn by doing</a> thing. Some of the best in the field have no formal training and it’s a field that’s historically unusually receptive to alternative training and heretical types. <a href="http://www.paulgraham.com">Paul Graham</a>, I must admit, had something to do with this as well. His essays led me to remember that I <a href="http://paulgraham.com/love.html">really would love</a> to <a href="http://paulgraham.com/notnot.html">try being an entrepreneur</a> at some point. Additionally, they reminded me that if I ever do end up a decent programmer I’ll probably want to work somewhere obscure that would give me maximum freedom in how and what I coded (languages, frameworks, etc etc) as opposed to at a Megacorp. Agile coding with five buddies? *shrug* Sounds good. “What are we going to make?” Working with a ton of people on some accounting or CRM program in Java? Shoot me now, please. To do what I wanted to do, I really just needed to draft a syllabus and get going. <a href="http://www.redlinernotes.com/blog/?p=638">So I did</a>.<br><br>But I think the truth is really that I left college to leverage my compulsion to learn. I was compelled to learn these things, to read books on Programming, IP Law, Peer Production, Poetry,  and plenty of other things and I’m terrible at stopping myself the way I needed to in formal education. So why not leave formal education for a bit? It seemed like the best thing to do and three months in I have to say it seems like a pretty prudent decision. I can think of two concrete reasons to go back, either because I couldn’t find work and was starving or I couldn’t learn something I wanted to. Let me be explicit, I haven’t decided not to go back but if I don’t encounter a concrete need to I probably won’t. Just wanted to be clear.<br><br>So what do you think?


title: Legal Links
date: 2009-07-22 14:11:23.000000
format: html
content:
  Today's linkpost will focus on two topics. One is the NSA's immoral spying activities which <a href="http://news.cnet.com/8301-10784_3-9845595-7.html">Obama promised to fix</a> on his campaign trail and the other is the ever expanding mire of modern Intellectual Property Law.<br><br>Let's start with the NSA. There have been three separate arstechnica articles lately about the failures of the NSA spying program. One of the articles discussed the extent to which <a href="http://arstechnica.com/tech-policy/news/2009/07/nsa-program-too-secret.ars">the program's secrecy made it useless to traditional intelligence workers</a>, another talked about how the warrantless wiretapping that was exposed was <a href="http://arstechnica.com/tech-policy/news/2009/07/black-box-origins.ars">just the tip of the iceberg</a> and a third <a href="http://arstechnica.com/tech-policy/news/2009/07/r2e-nsas-power--and-money-sucking-datacenter-buildout-continues.ars">condemned the continuing money being thrown into data centers for the NSA</a> whose output we cannot quantify or evaluate.<br><br>That said, it all made me realize just how much arstechnica is an echo chamber for my own views. In Cass Sunstein's book <a href="http://www.amazon.com/Republic-com-Cass-Sunstein/dp/0691070253">Republic.com</a> and <a href="http://www.salon.com/news/feature/2007/11/07/sunstein/">other places</a> he is a bit more alarmist about this than I would be but he's still a smart guy and onto something. With that in mind, I should at least comment that there does seem to be some positive pressure for Obama to live up to his promise, however meager, between <a href="http://www.examiner.com/x-536-Civil-Liberties-Examiner~y2009m6d16-Feingold-questions-Obama-on-warrantless-wiretapping">angry senators</a> and increased news coverage. In addition, some hold a <a href="http://acandidworld.com/2009/07/17/is-obama-following-through-on-his-promise-to-end-warrantless-wiretapping-should-he/">much more balanced view that promotes waiting and seeing</a>. The NSA position was a major factor in my support of Obama though or at least the belief that he would bolster what are, in my view, weakened civil liberties and constitutional law...and I'm a bit impatient and touchy about it.<br><br>As for stupid IP law, the madness just goes on and on. It's hard to know where to begin. I think I blogged about this already but a quick and obvious example is a music industry group that thinks they should be able to charge you each time your phone rings if you have a "musical ringtone". As a matter of fact, they're cleverly <a href="http://arstechnica.com/media/news/2009/06/ringing-up-cash-ascap-suing-att-for-ringtone-performance.ars">suing AT&T over it</a>. At least my enemies are fighting each other. But let's just break their view down for a second. So, you can buy little 10-15 second clips of songs to serve as ringtones when people call you now. And these guys think that whenever someone calls you...and that song, or clip of a song, plays in public, <a href="http://www.eff.org/deeplinks/2009/06/ascap-wants-be-paid-">it counts as a public performance of the work and copyright law entitles them to money</a>. What? The same group <a href="http://www.nytimes.com/1996/12/17/nyregion/ascap-asks-royalties-from-girl-scouts-and-regrets-it.html?pagewanted=1">struggled to get girl scouts to pay royalties for singing copyrighted songs around a campfire</a>, such as "Happy Birthday" and "Row, Row, Row". I don't normally swear on this blog but might I say, Get The Fuck Out. You have no idea what music, or culture for that matter, is good for. Just leave. I get pretty irate about this stuff. <a href="http://arstechnica.com/tech-policy/news/2009/07/industry-study-claims-strong-copyrights-fuel-economic-engine.ars">Strange conclusions</a> are being reached about what good copyright law is doing.<br><br>On the bright side though, Obama has made a <a href="http://arstechnica.com/tech-policy/news/2009/06/obamas-uspto-choice-supports-patent-reform.ars">USPTO choice which supports patent reform</a>. Patent law, like copyright law, has gotten wildly out of hand in the last two to three decades and I fervently hope Mr. Kappos takes steps to bring some sanity to the system. Above and beyond that, there are still reports coming from academia alleging that <a href="http://arstechnica.com/media/news/2009/06/researchers-conclude-piracy-not-stifling-content-creation.ars">piracy is not stopping artists</a> and the <a href="http://arstechnica.com/tech-policy/news/2009/06/swedish-pirate-party-headed-to-european-parliament.ars">pirate party has made it to parliament in Europe</a>. There are also <a href="http://rc3.org/2009/07/23/a-shopping-cart-for-reuse-rights/">continuing efforts to try new approaches</a> that adapt to modern conditions. Let's just consider IP Law to have two sides and call it a day for now. And I don't mean <a href="http://pwang.wordpress.com/2009/07/14/in-defense-of-bsd-licenses/">BSD</a> vs <a href="http://zedshaw.com/blog/2009-07-13.html">GPL</a>. Sheesh.


title: Less fun, More funk
date: 2008-09-15 17:21:18.000000
format: html
content:
  9 months into &quot;the real world&quot; I'm a bit perplexed. With all this talk of industry and full-time jobs, I for some reason expected that &quot;the real world&quot; would expect you to be industrious. Apparently, I am mistaken and while you'd want to end up at a job that challenges, drives and energizes you it is by no means a necessity. I've been thinking about this a lot and at some point will write more and possibly even wrap up that emerging philosophy series of posts. Particularly because I've been having lots of discussions that concern economics and/or politics lately and there seem to be some tenuous strands between those things. I go back and forth on what we need to do about the majority of people that accept and have no issue with the status quo, or at least lack the drive, energy or determination to get outside, above or beyond it. I would say that's probably 90% of us and am pretty sure I am in that category myself at present. It certainly seems unreasonable to demand the peak of human achievement from everyone and highly questionable whether people would universally like being at the peak of their potential achievement, or near it. I'll try to elaborate on those thoughts enough for them to be coherent in the near future.<br><br>Found some good reading\watching this morning though I sometimes wonder when\how\if I'll get to all of it. One good thing is the <a href="http://www.tele-task.de/page42_mode1_series653.html#">S3 2008 conference</a> (unrelated to <a href="http://en.wikipedia.org/wiki/Amazon_S3">Amazon's S3 architecture</a> ) which includes <a href="http://www.tele-task.de/page50_lecture3621.html">video footage of a presentation</a> on the <a href="http://research.sun.com/projects/lively/">Lively Kernel</a> . That's pretty cool stuff and I hope I get a chance to watch it tonight. Also there was a paper co-authored by Pascal Costanza on <a href="http://p-cos.net/documents/s32008.pdf">Reflection in Programming Languages</a> , specifically Lisp. I've read the first few pages and though some of it is over my head I think I can stumble my way through it. I really am hoping to get around to reading this paper by David Wiley titled <a href="http://opencontent.org/docs/ososs.pdf"><em>Online Self-Organizing Social Systems: The Decentralized Future of Online Learning</em> </a> . Will referred it to me and it looks quite good. I'm even tempted to read <a href="http://www.cs.utexas.edu/users/EWD/transcriptions/EWD07xx/EWD750.html">some Dijkstra</a> .<br><br>I'm interested in getting some of the piano work of <a href="http://en.wikipedia.org/wiki/List_of_compositions_by_Maurice_Ravel#Piano.28s.29">Ravel</a>, <a href="http://en.wikipedia.org/wiki/Erik_Satie">Satie</a>, and <a href="http://en.wikipedia.org/wiki/List_of_compositions_by_Claude_Debussy#Solo_piano_music">Debussy</a>. I have Debussy's Children's Corner and like that. Then again, maybe I just need more Masashi Hamauzu.<br><br> A final thought: Why are 90% of the good technical lectures on the web in RM format which I must tediously rip to download an offline copy? No, I do not trust your site to stay up with the content I want forever. Even if you're google or wikipedia. <a href="http://www.pchristensen.com/blog/articles/ripping-and-encoding-streaming-rm-or-how-i-defeated-realplayer/">Thanks, Peter</a>.


title: Lessons from cl-6502
date: 2013-07-05 11:44:00.000000
format: md
content:
  This will be the last post about emulation that doesn't involve graphics or disassembly of old NES games, I promise. [cl-6502](https://github.com/redline6561/cl-6502) **0.9.5** is out and, in my testing with SBCL, pretty snappy. [The book](http://redlinernotes.com/docs/cl-6502.pdf) has received updates and is also available [on lulu](http://www.lulu.com/shop/brit-butler/cl-6502-a-readable-cpu-emulator/paperback/product-21100284.html). Below is the 'Lessons Learned - Common Lisp' chapter:

  ## Structures can be preferable to classes

  Structures are much more static than classes. They also enforce their slot types.
  When you have a solid idea of the layout of your data and really need speed,
  they're ideal.

  ## CLOS is fast enough

  CLOS, for single-dispatch at least, is really quite fast. When I redesigned the
  emulator to avoid a method call for every memory read/write, my benchmark only
  ran ~10% faster. I eventually chose to stick with the new scheme for several
  reasons, performance was only a minor factor.

  ## Destructuring is more expensive than you think

  My second big speedup came, indirectly, from changing the arguments to the
  opcode lambdas. By having the opcode only take a single argument, the CPU, I
  avoided the need to destructure the opcode metadata in `step-cpu`. You **don't**
  want to destructure a list in your inner loop, no matter how readable it is!

  ## Eval-when is about *data* more than code

  That is, the times I found myself using it always involved computing data at
  compile-time that would be stored or accessed in a later phase. E.g. I used
  it to ensure that the status-bit enum was created for use by `set-flags-if` and
  the `*mode-bodies*` variable was bound in time for `defaddress`. Regardless,
  [try to go without it](http://fare.livejournal.com/146698.html) if possible.

  ## Use DECLAIM (and DECLARE) wisely

  *DECLAIM* is for global declarations and *DECLARE* is for local ones. Once you've
  eked out as many algorithmic gains as possible and figured out your hotspots with
  the profiler, recompile your code with `(declaim (optimize speed))` to see what
  is keeping the compiler from generating fast code. Letting the compiler know the
  *FTYPE* of your most called functions and inlining a few things can make a big 
  difference.


title: Lessons from Coleslaw
date: 2013-01-06 14:40:00.000000
format: md
content:
  Is there anything more pointless than a new blog engine? Probably not. 4 months ago, I wouldn't have thought that I would be distracted from my [Lisp 6502 emulator](http://github.com/redline6561/cl-6502) so long or that I'd have this much fun writing blogware. It is amazing, however, just how much you can do with a bit of time and ~600 lines of lisp.

  Lately I've come to realize my favorite part of hobby programming is that I essentially treat it as creative writing. One of the reasons I love Lisp and find myself using it so much for hobby code is how easily it enables me to experiment with new coding styles. In [Coleslaw](http://github.com/redline6561/coleslaw)'s case, this has meant a stronger focus on CLOS and API design.

  I like to think there's a clear stylistic shift in my projects, from the earlier and messy imperative of [Paktahn](http://github.com/redline6561/paktahn), through the neat but overly macro-heavy [cl-scrobbler](http://github.com/redline6561/cl-scrobbler), to the more balanced style of my present day code. It's no surprise that some of my favorite lisp luminaries, Peter Seibel and Luke Gorrie, talk a lot about [code as literature](http://lists.lugod.org/pipermail/vox/2011-June/008627.html) and [readable programs](http://blog.lukego.com/blog/2012/10/24/readable-programs/). Hopefully, I will continue to progress in that tradition.

  Coleslaw 0.8 is hereby released. The biggest features are multi-site publishing and support for new content types. Here is an example bookmark or tweet-like content type that may ship in a future release, [Shouts](http://paste.lisp.org/display/134453). See the [NEWS](https://github.com/redline6561/coleslaw/blob/master/NEWS.md) for further details. It's time to get back to [Memory Mappers](http://wiki.nesdev.com/w/index.php/Mapper) for a bit and see if I can't get actual NES emulation going in pure Common Lisp. See you next time, Planet Lisp.


title: Let That Which Does Not Matter Truly Slide
date: 2008-09-25 22:23:34.000000
format: html
content:
  Being unemployed is starting to get scary if only because I don't know how I'm going to make it to the next thing. There's a next thing I'd really like to see happen though and I'm prepared to risk a fair amount to get it. I may need an interim thing to pay bills until the next thing is actuality though. That's tricky business. If you know of anybody that would be interested in a contract I.T./Linux/Computer nerd, please let me know to get in touch with them.<br><br>My buddy <a href="http://wilkesborosquare.blogspot.com/">Chris Blair started his blog</a> in the last few days with a review of an old Business Sim game but he's already got up entries on everything from Football to SpaceX's Falcon1. Good stuff.<br><br>Kris Osterhage also recently dove into the blogging world first <a href="http://fightonfire.blogspot.com/">with blogspot</a> but then quickly migrated <a href="http://krow684.livejournal.com/">to livejournal</a>. He's blogged on gaming and hardware mostly but he recently put up some politics entries and...well, I'm not ready to dive into that yet. Call me preoccupied. Those conversations can get long and bitter and for the moment, my energies are best spent pretending this isn't an election year.<br><br>Now, on to RedLinux. At long last, I've got a really fast mirror for RedLinux so if you're looking to download an ISO to try it out, downloading it from my Amazon S3 mirror is the way to go. Just <a href="http://s3.amazonaws.com/redlinux/redlinux.iso">click here</a>. So, if you'd like to try it out just download that ISO, burn the ISO to a CD (if you're not familiar with this google can help) and reboot your computer with the CD in the drive. Then follow my simple installation guide:<br><br>*****<br><br>Wait for the CD to boot to the login screen. Type guest as the username, hit enter and then type guest as the password and hit enter. Tada. You're now using RedLinux. To get to my analog for a "start menu" just right-click on the desktop. You'll see something like <a href="http://redlinernotes.com/images/redlinux/install/menu.jpg">this</a>.<br><br>Open a Terminal by clicking terminal, then <a href="http://redlinernotes.com/images/redlinux/install/terminal.jpg">simply type</a> "sudo /opt/larchin/run/larchin.py" entering guest for the password when prompted. After a moment, the installer will pop up <a href="http://redlinernotes.com/images/redlinux/install/installer_home.jpg">like so</a>. Personally, with Linux installations I like getting the hard part out of the way first so once Larchin is up click on "Edit Partitions Manually" and then select the Gparted option <a href="http://redlinernotes.com/images/redlinux/install/gparted.jpg">like this</a>. It will pop up Gparted which should look something <a href="http://redlinernotes.com/images/redlinux/install/windows_only.jpg">like this</a> if you're on a Windows only or Mac only machine. If you're partition layout is more complicated than that (i.e. your drive doesn't end in one large partition) than you may want to ask a friend (or me) for help. I'll be more than happy to give you a hand over the phone or, if possibly, in person.<br><br>It would also be a good idea at this point to pull up another terminal as before and <a href="http://redlinernotes.com/images/redlinux/install/thunar.jpg">typing "killall thunar" </a>to make sure that the file manager doesn't try to automatically open any of the partitions as you're working on them. If the terminal complains that there is no thunar process when you tell it to killall them, then you're in good shape and can get back to Gparted. Just type exit to close the terminal.<br><br>Once back in Gparted, click on the partition and select the resize button in the top left to get <a href="http://redlinernotes.com/images/redlinux/install/resize2.jpg">this screen</a>, then click the ending right arrow and drag it to the left to shrink the partition <a href="http://redlinernotes.com/images/redlinux/install/resize3.jpg">like so</a>. Once installed, RedLinux will take up about 2.5GB (~2500MB) so I'd give it at least 3000MB but you can go as high as Gparted will let you really. Click "Resize/move" once you're satisfied and you should end up <a href="http://redlinernotes.com/images/redlinux/install/new.jpg">hereabouts</a>. Select the unallocated space and click the new partition button to get <a href="http://redlinernotes.com/images/redlinux/install/new2.jpg">this dialog</a>. Set the filesystem to be ext3 and then reduce the size until a little over 1000MB of free space will remain afterwards, then click add. Select the unallocated space and click the new partition button once again, this time setting the file-system type to linux-swap and then clicking add and you should end up with something <a href="http://redlinernotes.com/images/redlinux/install/new3.jpg">like this</a>. Before moving forward, note the /dev/sda* numbers of your partitions. Know which one is swap and which is ext3.<br><br>You've now reached the scary/boring step. Click the apply button near the top center and click the <a href="http://redlinernotes.com/images/redlinux/install/apply.jpg">apply confirmation</a> to have Gparted save your changes to the disk. <a href="http://redlinernotes.com/images/redlinux/install/apply2.jpg">This</a> could take anywhere from 10-20 minutes depending on the size of your hard disk but shouldn't take much longer than that. Once <a href="http://redlinernotes.com/images/redlinux/install/apply3.jpg">it's done</a>, exit Gparted and select "Use existing partitions/finished editing partitions" in the <a href="http://redlinernotes.com/images/redlinux/install/gparted.jpg">Larchin</a> installer. It will ask you about the swap partition at <a href="http://redlinernotes.com/images/redlinux/install/installer_swap.jpg">the next screen</a>, and the box next to your swap partition number should be checked. Click okay. It will now ask you to select the install partition and should have defaulted to your ext3 partition. Hit the checkbox under format and <a href="http://redlinernotes.com/images/redlinux/install/installer_mountpoint.jpg">click the dropdown</a> under Mount Point to select "/". It will request <a href="http://redlinernotes.com/images/redlinux/install/installer_confirm.jpg">one more confirmation</a> that it has your information down correctly. Hit okay to proceed. <a href="http://redlinernotes.com/images/redlinux/install/installer_installing.jpg">The installation</a> <a href="http://redlinernotes.com/images/redlinux/install/installer_installing2.jpg">will proceed</a> <a href="http://redlinernotes.com/images/redlinux/install/installer_installing3.jpg">accordingly</a>.<br><br>Almost done. All you need to do now is <a href="http://redlinernotes.com/images/redlinux/install/installer_rootpass.jpg">give it a root password</a> (this is not the same as your regular logon/user password. Pick something that <em>else</em> that you'll remember). Write it down somewhere if it makes you feel more comfortable. You really shouldn't ever need it. Last but not least, tell it to <a href="http://redlinernotes.com/images/redlinux/install/installer_grub.jpg">install grub to your MBR</a> and <a href="http://redlinernotes.com/images/redlinux/install/installer_done.jpg">you're done</a>! Click okay to exit the installer and then right-click on the desktop and click reboot. When you're computer reboots you should have the option of booting into your brand new RedLinux install. The username and password will still be guest, so <a href="http://www.redlinernotes.com/docs/redlinux/new_user_guide.txt">read the new_user_guide online</a> or by logging in, right-clicking to open the start menu, opening a text editor and then opening "new_user_guide.txt". Happy hacking!


title: Like New Music...
date: 2009-03-05 14:40:22.000000
format: html
content:
  You, offworlder, your clangs and drones<br>only return quizzical stares.<br>And then I hear it, layers and patterns,<br>a structure unfolds.<br>And I begin to hear something warm and<br>viscous like the wet earth.<br>I was mistaken. You are one of us.<br>Come in and make yourself at home.<br><br>Two quick complaints:<br>EA Blackbox should literally go punch themselves in the crotch. The Community Center, Parkade, et al DLC for Skate 2 is embarrassing. Throwing a bunch of crap all over the place is not helping me, is not respecting or doing justice to the original and is not level design. Go screw yourselves and give me my five bucks back. All you want me for is my money.<br>Dear Street Fighter IV shotos, particularly Ken scrubs, you all aggravate me. And bring out my larger issue with SFIV. I never failed to enjoy a fight in Smash Bros, even if I lost. Why is it that all the online matches are miserable, even the ones I win? I may have more to say about this and SFIV later. Just wanted to whine for now.<br><br>Two quick shout outs:<br>Don Gerz is tearing it up with good poetry. See <a href="http://dongerz.livejournal.com/38739.html">Flying</a> and <a href="http://dongerz.livejournal.com/40071.html">Lost Realities</a>. Mmm mmm good.<br>Been listening to really weird music lately. Abstract and ambient stuff. Particularly taken with Rivers of Sand by Fennesz. I like it, I think, but am also not entirely sure what to make of it. Am also enjoying Philip Jeck, Triosk, Tipper and Tim Hecker. Weird bunch. Should I go see Watchmen this weekend? I'm thinking yes. But when?<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">Fennesz - Rivers Of Sand</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://daktari2006.free.fr/kongfuzi/playlist/fennesz.riversofsand.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=66594652535961&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: LIMIT and OFFSET in Postmodern
date: 2010-04-25 17:58:09.000000
format: html
content:
  I've been using the Postmodern library in Common Lisp to access PostgresQL databases of late and it's been a pretty good experience.<br><br>That said, I had a little trouble using LIMIT and OFFSET to get DAO objects and wanted to put an example online in case anyone else has trouble with this. Future Postmoderners, May Google protect you.<br><br>You'll want to use query-dao instead of select-dao and wrap the limit around a select statement. It winds up looking something like this:<br><pre lang="lisp"><br>(query-dao 'card<br>  (:limit (:select (:distinct 'name) :from 'card) 10 0))<br></pre><br><br>In this example, we're selecting the first 10 rows (that are distinct by name) from the card table. Obviously, you could use <code>'*</code> instead of <code>(:distinct 'name)</code> to select from all rows.<br><br>That's not much of a post but here it is. Once I'm through finals I'll try to start posting a bit more regularly. Then again, I'll be moving once in May and once in June so we'll see what happens.


title: Lingering Promises
date: 2008-06-30 03:34:06.000000
format: html
content:
  <p>So, where the hell have I been? I mean, I haven't posted in almost two weeks? What's worse is that I've promised posts on education, governance, my attempt to nail down my own philosophical views and more programming stuff. All of them are at different stages of completion.</p><br><p>The fact that nothing has made it's way up here makes me feel lazy though and the fact is I've been working quite hard but on different things. As I've noted here, the real world does suck it out of you. Part of that is that my job of late has drained me rather than energized me. I'm looking to rectify that. Thankfully the 4th of July is coming up. Those long weekends are always nice.</p><br><p>Things are about the same at the house as they have been. I feel like I'm learning a decent amount by being on my own though and I'm constantly reminded of how wonderful the people in my life are and how much I love them. Hopefully, I'll get more time to work hard, be productive and be incredible in my own right.</p><br><p>Also, Wall-e is fantastic and one of the best movies I've seen in a long time. It's just beautiful so go see it. Remember to love.</p>


title: Links and Things
date: 2007-09-17 12:56:54.000000
format: html
content:
  Quick Monday Morning Post. So, what's been going on lately?<br>-<a href="http://arstechnica.com/news.ars/post/20070916-gtkpod-coders-crack-apples-new-ipod-checksum.html">Apple acts like tools again by being evil and using lock in on consumers</a>. This is one reason I won't buy an iPod or iPhone. I would eventually be forced to switch my Operating System. Thanks, but no. All the same, Linux developers cracked Apple's hashes inside 72 hours, making iPods on Linux workable again.<br>-<a href="http://arstechnica.com/news.ars/post/20070914-sco-files-for-chapter-11.html">SCO finally gets called out, screwed</a>. They don't own Linux, their case was thrown out, and they've filed for Chapter 11. *grin* 'Bout time. Note: Pissed shareholders. Don't lie to your shareholders.<br>-<a href="http://www.amd.com/us-en/Corporate/VirtualPressRoom/0,,51_104_543~119372,00.html">AMD has released ATI video card specs and is helping develop an open source driver</a>. Makes me glad I'm an AMD/ATI guy.<br>-<a href="http://www.lshift.net/blog/2007/09/16/erlang-on-neo1973-cellphone">Erlang is running on the OpenMoko</a>. This makes me giddy for all kinds of reasons. And it's one more reason I <em>really, <strong>really</strong></em> want an <a href="http://www.openmoko.org/">OpenMoko</a>. Maybe I'll be able to get one for Xmas and replace my current phone. *crosses fingers*<br>-A "<a href="http://www.theregister.co.uk/2007/09/14/system_call_sploits/page2.html">whole new class of vulnerabilities</a>" has been discovered apparently and it specifically targets multicore architectures. I'm a bit skeptical about the whole new class nonsense. Of course, it also happens to only work when shared memory is involved. Oh, hello Erlang. Don't you have shared nothing semantics? That's nice. I like those.<br><br>The to read/listen/watch list:<br><a href="http://lambda-the-ultimate.org/node/2455">Online Video Course on Monads</a><br><a href="http://feeds.feedburner.com/~r/pmarca/~3/157443648/the-three-kinds.html">The Three Kinds of Platforms on the Internet</a><br>I'm continually impressed by the guys at <a href="http://enfranchisedmind.com/blog/archive/2007/09/16/361">Enfranchised Mind</a> (on Intellectual Property today).<br><a href="http://fishbowl.pastiche.org/2007/09/14/on_social_networks">On Social Networks</a><br><a href="http://www.cs.washington.edu/homes/djg/papers/analogy_oopsla07.pdf">The Transactional Memory/Garbage Collection Analogy</a><br><a href="http://blogs.sun.com/bonwick/entry/space_maps">How Space Maps work in ZFS</a><br><a href="http://fanf.livejournal.com/78346.html">Interesting thoughts on the handling on Strings in Programming Languages</a>. Note for non-nerds: Strings are lists of characters. You know, text.<br>Also, I need to learn <a href="http://www.codinghorror.com/blog/archives/000951.html">more</a> <a href="http://www.jakevoytko.com/blog/2007/09/16/number-theory-for-programmers-part-1/">math</a>.<br>Finally, <a href="http://www.codinghorror.com/blog/archives/000953.html">password storage</a> and security. Yep. It's good to know.<br><br>The Cool Web 2.0 thingy list:<br><a href="http://www.meebo.com/">Meebo</a> - IM everywhere.<br><a href="http://yubnub.org/">YubNub</a> - A web command line. Holy Shit, that's brilliant!<br><a href="http://o20db.com/db/setup/">A better list than mine...</a>


title: Linux on Intel Macs
date: 2013-05-21 16:30:00.000000
format: md
content:
  ## Every. Single. Time.

  Installing linux on a Mac never manages to be pleasant. I always remember, "Oh, yeah. I got this to work before." and dive in cheerily only to shortly recoil at what a fucking nightmare it is.

  These days I use [crunchbang](http://crunchbang.org/), a very clean Debian-based distro. It's hard to even know who to be mad at. You'd think the installer would just detect the EFI/GPT stuff and "do the right thing" by now. Or be able to resize HFS+ partitions.

  ## Out of Desperation
  For whatever reason, I had to resort to this:

  1. Resize OS X with Disk Utility to 50% of the current partition size.
  2. Install [rEFInd](http://www.rodsbooks.com/refind/) as rEFIt is now deprecated/unmaintained.
  3. Burn a CD (!!!) since EFI doesn't want to boot from unrecognized USB drives.
  4. Boot from the CD and install linux to the freespace.
  5. When prompted to install the bootloader, install it on the *linux partition*, **not** the disk!
  6. Do whatever it takes to get a linux command prompt, rescue disk, whatever. Mount the new install at /target.
  7. Run:

          mount -o bind /dev /target/dev
          mount -o bind /sys /target/sys
          mount -o bind /proc /target/proc
          chroot /target

      Now you can actually do useful things, like fix the broken fucking bootloader!
      Note that you may need to `ifconfig eth0 up && dhclient eth0` for network access.
  8. Install and use gptsync on the drive with the linux partition:

          apt-get update && apt-get install gptsync && gptsync /dev/sda

  9. Reboot and pray.

  ## In Conclusion

  Now your glorious Linux distro should boot on your "is-it-designed-not-to-work-with-a-single-fucking-Open-Source-thing?" Mac. Of course, you may need to apt-get remove the busted radeon drivers and add xforcevesa to the linux invocation in your /boot/grub/grub.cfg *and* remember to always gptsync after any future update-grub operations but...yeah, fuck all these goddamned computers.


title: Lisp is Lovable
date: 2009-05-27 15:59:11.000000
format: html
content:
  I'm about to run to class but I thought I'd throw up a Lisp solution I coded to the Funny Words problem which <a href="http://redlinernotes.com/blog/?p=937">I worked through in Haskell</a> earlier. I used <a href="http://www.sbcl.org/manual/Saving-a-Core-Image.html">sb-ext:save-lisp-and-die</a> thanks to <a href="http://mikael.jansson.be/log/freezing-lisp-in-time">a helpful guide</a> to dump a core image and used unix's <code>time</code> command to time it. The output of <code>time ./funnyWords.core english-words.txt</code> was as follows:<br>real	0m4.053s<br>user	0m3.913s<br>sys	0m0.057s<br><br>That's significantly shorter than the corresponding Haskell time and I wonder why. This code is a lot more imperative but I'm curious exactly where the speedups are. By the way, LOOP is awesome. As for the differences, I'll spend time sorting it out when I have time later. NOTE: solrize posted an improvement to my Haskell code that made it run in umm...half a second? Less? The main speedup seemed to be coming from using Data.Map and using the sort of each word as the key during insertion. That way, you get isAnagram for free, among other things. If you have thoughts on this code or the earlier Haskell code, where the differences lie or how to make them lispier or haskellier please let me know! :) Here's the code:<br><pre lang="lisp"><br>;; how to find words like cosmicomics:<br>;; words which can be split into anagrams by the middle letter<br>;; PRESENTLY ASSUME THAT ALL WORDS ARE LOWERCASE! how can we type/test for this?<br><br>(defparameter *dict* nil)<br>(defparameter *results* nil)<br>(defparameter *file* nil)<br><br>(defun main ()<br>  (let ((*file* (or (second *posix-argv*)<br>		    *file*)))<br>    (funny-words *file*))<br>  1)<br><br>(defun funny-words (wordlist)<br>  (let ((result nil))<br>    (with-open-file (in wordlist)<br>      (loop for word = (read-line in nil) while word do<br>	(push word result)))<br>    (setf *dict* result))<br>  (mapcar #'partial-find *dict*))<br>;;  (concat-map #'partial-find *dict*))<br><br>(defun is-anagram (word1 word2)<br>  (string= (sort (copy-seq word1) #'char-lessp)<br>	   (sort (copy-seq word2) #'char-lessp)))<br><br>(defun has-joiner (word1 word2)<br>  (let ((strlen (- (length word1) 1)))<br>    (char= (elt word1 strlen) (elt word2 0))))<br><br>(defun is-funny-word (word1 word2)<br>  (and (has-joiner word1 word2)<br>       (is-anagram word1 word2)<br>       (not (string= word1 word2))))<br><br>(defun build-word (word1 word2)<br>  (concatenate 'string word1 (subseq word2 1)))<br><br>(defun same-length (word lst)<br>  (loop for item in lst<br>	when (= (length word) (length item))<br>	  collecting item))<br><br>(defun partial-find (word)<br>  (loop for item in (same-length word *dict*)<br>	when (is-funny-word item word)<br>	  do (let ((answer (build-word item word)))<br>	       (push answer *results*)<br>	       (print answer))))<br><br>;;(defun concat-map (f lst)<br>;;  (loop for item in lst appending (funcall f item)))</pre>


title: Livejournal Problems
date: 2007-06-02 07:24:00.000000
format: html
content:
  Some of you may be experiencing problems posting. Apparently, various livejournals\livejournalers are unable to post entries beyond a certain length. I'm unclear on what that length is but I've found a way around the problem. Use this link to post your entries from a web proxy: "http://anonymouse.org/cgi-bin/anon-www.cgi/http://www.livejournal.com/update.bml" and it will go through. Just enter the link, fill out your username and password but<em> don't login</em> and then type out your entry and hit submit. Done and done. Personally I think the problem is linked to your IP address but if it works who cares.


title: Living with Ben
date: 2008-02-29 00:24:09.000000
format: html
content:
  Living with Ben was pretty bad ass. We stayed up late arguing about stuff that only one of us really knew anything about (computers or philosophy), made crazy playlists, played smash bros, and generally had lots of fun. Dan was awesome too but he just hid in his room a lot and then popped out and surprised everybody with amazingness. You wouldn't know it from looking at the guy but he was totally the comic relief.<br><br>I mention this though because Ben and I might end up living together again sometime after May. I'm for it. And just so you all know, I'm really hoping to live within around Peachtree Industrial, near Oglethorpe. So, if you know good apartment complexes, guest houses, etc, Holla.<br><br>Anyway, we worked on this one playlist for like...two weeks or something? I don't know. We came up with a first version which was pretty bad ass by itself but it diverted from the direction I had in mind originally (it started off as my baby) after the Broken Social Scene track...or maybe the Ambulance LTD track. Long story short, I spent another few days to come up with this Version 2 which pretty much sticks to my original vision. Here it is for your thoughts and enjoyment:<br><br><br>1. The Faces - Ooh-ooh-la<br>2. Blind Melon - No Rain<br>3. Fastball - Out Of My Mind<br>4. The Five Stairsteps - O-o-h Child<br>5. Marvin Gaye - Where Are We Going<br>6. The Beatles - Come Together<br>7. Ambulance LTD - Young Urban<br>8. Broken Social Scene - Looks Just Like The Sun<br>9. Psapp - Tricycle<br>10. Massive Attack - Teardrop<br>11. Corinne Bailey Rae - Trouble Sleeping<br>12. Regina Spektor - On The Radio<br>13. Gnarls Barkley - St.Elsewhere<br>14. Jamie Lidell - What's The Use<br>15. Elliot Smith - Son of Sam<br>16. Ambulance LTD. - Arbuckles Swan Song<br>17. Cat Power - Willie


title: Looking Back, Looking Forward
date: 2011-01-03 01:02:26.000000
format: html
content:
  <h3>A 2010 Overview</h3><br>So it's apparently 2011 now. That happened fast.<br><br>As I wrote <a href="http://www.reddit.com/r/lisp/comments/eukls/your_year_in_lisp/c1b324j">on reddit</a>, I think my year went very well where Lisp is concerned. Aside from Lisp, I can happily say that I'll be receiving my degree in May after completing 3 more courses: CS Capstone, an independent study on Functional Programming with Haskell and Chemistry I. I have 2 potential part time gigs for Spring and enough prospects in general that I'm not afraid of being unable to find a job when I graduate which is nice. I also have enough <a href="http://redlinernotes.com/docs/priorities.txt">code projects and ideas</a> to bury myself. I'm pretty happy ultimately with how 2010 turned out. I made some more progress in my development as a programmer and have almost wrapped up my time as an Undergraduate. Finally! It was tough breaking up with my girlfriend of 2+ years, Teresa, back in May but I still feel good about it in the sense that it was the right thing to do. Most of all, I stayed true to myself and I had fun.<br><br><h3>Upcoming Code Stuff</h3><br>Now for a brief update on Paktahn, Weblocks, Clockwork and the CL Web Primer series...<br>First of all, the CL Web Primer series is not over. I haven't given up I've just been busy with other projects and some end of year decompression. There's actually going to wind up being one more post about Clockwork itself once I implement the last feature (and maybe do some CSS styling to make it look less like ass). By that point, the Postmodern backend which has been merged into Weblocks should be production ready. The main issue now is that you have to manage the DB connections for each request thread manually which is a real pain. I'm working on fixing it at the moment by extending the Store API and hooking into handle-client-request. Hopefully that will be done tomorrow or at least by the end of this week and get merged shortly after.<br><br>Once the Postmodern backend is going and the last clockwork post is made I have ideas for several projects to make use of the Postmodern store. One is a RESTful blog with Wordpress import and crossposting support for Livejournal. Another is a Magic the Gathering card/deck database similar to Deckbox. There are a few other ideas but I'll likely do one of these two and continue the CL Web Primer series with it.<br><br>Ah, Paktahn. I would be a little frustrated with us if I were a user. It's been a while since I've had time to hack on bugs or new features and there are 4 or 5 important bugs I'd like to squash so we can get a release out before school starts back up. It'd be particularly nice to get some fresh blood on the project. I can instruct or help reasonably well I just think Leslie and I are pretty preoccupied with other projects. It's a question of time mostly, so if there are any Archlinux using Lispers that have any interest *please* feel free to contact me on <a href="http://twitter.com/redline6561">twitter</a>, <a href="http://facebook.com/redline6561">facebook</a>, <a href="mailto:redline6561@gmail.com">gmail</a>, <a href="http://github.com/redline6561/paktahn">fork it on github</a>, leave a comment, etc.<br><br><h3>Holiday Hacking</h3><br>Personal hacks...<br>Over the holidays, I did a good bit of hacking on <a href="http://github.com/redline6561/dotemacs">emacs </a>and <a href="http://github.com/redline6561/dotfiles">dotfiles</a>. I also switched from using Chromium to using Conkeror as my browser and from Pidgin to Erc+Jabber.el (emacs modes) as my chat clients to force me into the Emacs mindset a little bit more. For a long time, I've had emacs and stumpwm installed but not really treated them as extensible lisp software that I should be playing with. I also improved my server config and its corresponding build process a bit. You're probably asking why do this. There are a lot of reasons why. All I'll say about it for now is that Archlinux+SBCL+Emacs+Stumpwm+Conkeror is about as close as you can get to a modern day lisp machine and it is a lot of fun.<br><br>Other than that, I threw together a version of tic-tac-toe that should never lose as part of a job application. I'd never written any Search algorithms before and knew nothing of Minimax so that was a fun learning experience. As usual, <a href="http://github.com/redline6561/tic-tac-toe">the code is on github</a>. One other thing I've toyed with is a backup script which is made easier by the fact that I recently started using SSH agent. Between that and another Common Lisp script I use called randomfile, I ought to throw those up in my dotfiles in a scripts directory and then make a blog post about CL *nix Scripting or something. Who knows, by 2012 maybe I'll have gotten around to it. ;)


title: Lusting for a Laptop
date: 2008-10-24 06:02:36.000000
format: html
content:
  <img style="vertical-align: middle;" src="http://www.technolust.us/trust.PNG" alt="Trust your Technolust" /><br><br>I promised to go into more detail about this yesterday and I meant it. I called my good friend <a href="http://krow684.livejournal.com/">Kris</a> earlier today and filled him on my plans. Hardware purchasing plans, that is, assuming I go back to school. Kris and I are in agreement that purchasing and/or assembling new hardware is one of the most exciting and fun things in the world. It's good old technolust at work. Part of why it's exciting for me is that I only make computer purchases every 4 or 5 years and for the most part I manage to not care about hardware outside that time period.<br><br>Now, I have gotten a $300 laptop off eBay and an LCD in the past two years but that's not what I'm talking about. <a href="http://www.redlinernotes.com/hardware.html">My personal computer (the desktop)</a> which I hand-built back in the summer before my Freshman year of college is what I'm talking about. Any self-respecting nerd has a primary computer which stands above the rest. That's what I'm talking about. Anytime you think of replacing that you have the freedom to dream. My needs and desires have changed a lot between now and then though.<br><br>Then I wanted a powerful computer that could play games and do anything else I wanted. As much as was possible with the $1,500 or so dollars I had available anyway. That largely meant a desktop. These days I want something lightweight with excellent battery life. Something portable. Something which is great for running Linux and playing with code but future proof as well that could replace my aging desktop at home. Now, as I've mentioned before the desktop appears to be in great shape and is plenty powerful enough but it certainly isn't mobile and you never know when hardware might start failing. The laptop I have now is alright but...well, the wireless only works on unsecured networks in Linux and the battery life tops out at around 45 minutes. Some of that could be worked around but it's less than ideal for the commuting programmer student I'll hopefully be come January.<br><br>I've been aware of this desire for about a year now. The desire to rid myself of the desktop (or at least relegate it to server duties) and get some better mobile hardware. So I've been keeping my eyes on the laptop market. In that time only 8 machines have caught my eye and only 1 is really a reasonable option. The 8 machines I considered were the <a href="http://system76.com/product_info.php?cPath=28&amp;products_id=76">System76 Darter Ultra</a>, the <a href="http://www.zareason.com/shop/product.php?productid=16159&amp;cat=0&amp;page=1">ZaReason UltraLap SR</a>, the <a href="http://www.dell.com/content/products/RBIredirect.aspx?rbi=GKiitGAbBa2SB+6V9bxpRyvwm4g6Tn36wTwLVrus+1Yk1iSYlI8tpShc0L6a76U+xxNknT+/JMtiiGCipwtTDVR3gD7rP0D5Bw+DRgttMrSH4k1GVuvVsT7Kgb28G8X59A54CcfPDTOXlUFeRUB5Xg==">Dell XPS M1330</a>, the <a href="http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/systemconfig.runtime.workflow:LoadRuntimeTree?sb=:00000025:000019D3:&amp;smid=6194D04805DF4296B0D1A64481A943A4">Lenovo X200</a>, the <a href="http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/systemconfig.runtime.workflow:LoadRuntimeTree?sb=:00000025:00001409:&amp;smid=AB685843BDD4412BB8FAB17D26FADACF">Lenovo X300</a>, the <a href="http://shop.lenovo.com/SEUILibrary/controller/e/web/LenovoPortal/en_US/systemconfig.runtime.workflow:LoadRuntimeTree?sb=:00000025:00001AEB:&amp;smid=FB7AF02917DF464B80B47A578BC9DD24">Lenovo X301</a>, the <a href="http://www.dell.com/content/products/productdetails.aspx/laptop_latitude_e4200?c=us&amp;l=en&amp;s=bsd">Dell Latitude E4200</a> and the <a href="http://www.dell.com/content/products/productdetails.aspx/laptop_latitude_e4300?c=us&amp;l=en&amp;s=bsd&amp;cs=04">Dell Latitude E4300</a>. What I needed was a laptop which had A) weight under 4 lbs and battery life in excess of 5 hours, B) an Solid State Drive option, C) LED Backlighting (again at least optionally), C) good Linux support (in-kernel graphics, sound and wireless drivers, preferably working suspend/resume), D) a docking option and E) preferably some sort of next-gen AV out option whether HDMI or DisplayPort.<br><br>At first, I forgot I'd need a dock. The Darter, the UltraLap and the XPS M1330 were quick considerations because they have Ubuntu pre-installed and the hardware works brilliantly. They're also quite affordable. The Darter lacks an SSD option but the warrantied isn't voided by buying an aftermarket SSD and installing it and it's otherwise excellent and <em>very</em> cheap. The UltraLap is a bit heavy and short on the battery life but otherwise good. None of them have a docking option though and none of them have HDMI or DisplayPort out.<br><br>Of the remainder, only the Latitudes and the X200 have docking stations. The X300 and X301 have many positive qualities, meet every other requirement (except maybe the HDMI/DisplayPort) and at least the X300 is reasonably affordable compared to the Latitudes. The closer I got to really needing to make a decision though the more I realized the docking station was a real deal breaker. If this thing is going to replace my desktop at home I want to be able to walk in the door, drop it on the dock and get to work with the keyboard, mouse, LCD setup at my desk, no questions asked.<br><br>The Latitudes, for their part, just came out and (consequently) are just too damn expensive. They also don't have any kind of option to ship without an optical drive which (let's be honest) I (and probably you) would only use to install the Operating System (if you do that) and load a few applications. There's a USB CD-ROM in the Oglethorpe computer lab I can use for that. The X200 does have such an option though and it is the X200 I will happily get assuming I'm accepted to SPSU and get some student loans taken out. Besides this tiny little 12 incher weighs 3.5 lbs with the largest battery you can get for it and people have used it unplugged in excess of 8 hours! It's not quite as thing as the Macbook Air but it's close and almost as lightweight (with the extended battery).<br><br><img src="http://cache.gizmodo.com/assets/images/gizmodo/2008/08/x200front.jpg" alt="Sexy, Sexy Laptop" /><br><br>The last issue to work out was whether or not to get a SSD included or upgrade it later. There are 2 reasons for that. One being that the SSD option bumps the price up by $830 on the X200. Pretty drastic, right? Additionally, all the kinks aren't quite worked out of SSD drives yet. There are several people I'm aware of that have been very happy with SSD-based laptops for 6-months to a year now (<a href="http://www.codinghorror.com/blog/archives/000927.html">Jeff Atwood</a> and <a href="http://redmonk.com/sogrady/2008/09/24/apone/">Stephen O'Grady</a>, I'm looking at ya'll) but a Linux filesystems expert whose opinion I trust, <a href="http://valhenson.livejournal.com/25228.html">Val Henson, has made some stern comments on the matter</a>. <a href="http://torvalds-family.blogspot.com/2008/10/so-i-got-one-of-new-intel-ssds.html">Even Linus Torvalds is happy with his</a> but at the X200's $800+ dollar price point I can wait and upgrade later when the hardware is better and the prices are cheaper. For now, I've at least found out <a href="http://forum.thinkpads.com/viewtopic.php?t=66489">the X200 uses a Samsung drive</a> which OCZ sells rebranded <a href="http://computers.pricegrabber.com/hard-drives/m/70821147/">on pricegrabber.com</a>.<br><br>That's it for tonight. Hardware is always exciting and I hope I get to start hacking on an X200 before New Year's. That said, I've got to get some sleep tonight so that I can get back to hacking tomorrow. I made a list of code projects today among other things and there's plenty to do come morning.


title: Make it happen!
date: 2009-09-29 14:54:56.000000
format: html
content:
  So, I've been mad about <a href="http://en.wikipedia.org/wiki/NSA_warrantless_surveillance_controversy">certain government activities</a> for years and the way the government has ignored them or brushed aside activities to end them.<br><br>We may <em>finally, <strong>really</strong> </em>have a chance to stop this now and to roll back some of the very real damage that's been done. Please, <em>everyone</em>, <a href="https://secure.eff.org/site/Advocacy?cmd=display&amp;page=UserAction&amp;id=441">support the efforts</a> to <a href="http://www.eff.org/deeplinks/2009/09/eff-supports-new-bill-repeal-telco-immunity">repeal telecom company immunity</a> and <a href="http://www.eff.org/action/rein-government-spying">reform the long unrestrained surveillance laws</a>.<br><br>I've got a phone call or two to make.<br><br>PS: Apparently, <a href="http://www.engadgetmobile.com/2009/09/29/nokia-samsung-toshiba-and-sony-align-on-mobile-high-definition/">some companies think the world needs yet another HD video connector standard</a>. My face enters my hands. That is all.<em></em>


title: March 19, 2009
date: 2009-03-20 02:35:33.000000
format: html
content:
  You know what today was missing? Some Milosz.<br><br>I bombed a math quiz today. I mean, actually bombed. As in I think I got a zero.<br>Guess it's time to go re-read the sections and redo the homework.<br><br>I wrote a poem recently about how progress is deceptive because it doesn't feel like progress. It feels like plodding along. But I was mostly just trying to convince myself.<br>I don't think I really believe it.<br><br>I keep thinking to myself, "you've got a year or two to really excel.<br>If you can't manage that, you'll be an average person. Forever."<br>I have difficulty ascertaining whether or not my level of stress<br>or ambition, for that matter, is appropriate.<br><br>Something I accidentally wrote on the bus ride home:<br><br>I never know why we put up with each other.<br>The mystery of your flared temper or my<br>sudden detachment. But we keep blowing along,<br>buoyed by unseen currents and dancing<br>in dwindling circles. I sometimes wish,<br>might I cut the chase and stand in the center?<br>But we are opposed magnets in a small room,<br>unable to meet each other, unable to rest.<br><br>Hell with it. Here's some good sad bastard music just because.<br><object width="480" height="295" data="http://www.youtube.com/v/fMVQ1synlaU&amp;hl=en&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/fMVQ1synlaU&amp;hl=en&amp;fs=1&amp;rel=0" /><param name="allowfullscreen" value="true" /></object>


title: Marvin Friggin’ Gaye
date: 2007-06-18 20:38:00.000000
format: html
content:
  I'd like to give a shout out to some people that have been loving on me. This morning that's gonna be Ember Melcher, Cathryn McCrimmon, Bria Rose, Dallas Greene, Amanda Nichols, Jason Soby, Eric Gulley, and my father (who talked to me for an hour at 2:30 am) John Glenn. I'd also like to take this opportunity to note that Marvin Gaye's What's Going On is fucking magical and can fix almost anything. That's right. I'm dancing and I'm clapping. Thank you folks. I feel like I've really made some progress. I no longer feel like there's something wrong with me or it was something I did or didn't do. Let's see if I can't maintain that.<br><br>PS: A huge thanks also goes out to Maziar Vafadari and Eric for dealing with me yesterday and also for everyone who commented on my post on Friday. It really has made a difference. Thank you.<br><br>PPS: While I'm not sure if I'm behind the new Spoon album yet (is it out for consumption or do I just have it leaked?), I'm so behind the new Maroon 5 (even though I can't really listen to it much right now), Andrew Bird (in my top 5 for this year easily), and White Stripes. I'll keep you guys posted about the new Aesop Rock, Pinback, and Radiohead as soon as I get my grimy virtual hands on them.


title: Me, lately
date: 2008-07-14 17:17:34.000000
format: html
content:
  It's been pretty hard to maintain a positive spirit and spin on things lately. Times are hard economically, my financial margins are narrow to non-existent and new jobs are hard to find. I've also been trying to contact some people at <a href="http://www.ccs.neu.edu/">Northeastern </a>to look into going to school there (mostly because it's so hard to find the time\energy for self-study at present)  but the trail dead-ended. I've been unable to reach <a href="http://www.ccs.neu.edu/home/shivers/">Olin Shivers</a> (who seems pretty <a href="http://www.scsh.net/docu/html/man.html">awesome</a> [best acknowledgments ever], <a href="http://www.ccs.neu.edu/home/shivers/advisor-stmt-original.txt">incidentally</a>) so that's all inconclusive. Really, I'm looking to see how much work it would be to get accepted. I'm fairly enamored with their program <em>and </em>faculty and for one reason or another Boston sounds lovely.<br><br>I'm still hacking at <a href="http://www.redlinernotes.com/blog/?cat=4">SICP</a> when I have the energy/time but it's been really hard lately. I believe that I'm on the right path because knowing more about programming is something I have wanted for a long time but it's hard to stay the course or to stay emotionally charged up about the course. Part of that is because, as the <a href="http://www.redlinernotes.com/blog/?p=908">Emerging</a> <a href="http://www.redlinernotes.com/blog/?p=871">Philosophy</a> posts suggest, the problems I'm <em>really interested</em> in solving are not <em>Computer Science</em> problems. They're social problems. The oft-heard first project suggestion for hackers to "scratch an itch" or "fill a need" falls flat for me. The computer does everything I want it to do. I'm not looking for it to do more.<br><br>I am making progress with SICP, I'm just behind schedule. I'm hung up on the last 4 problems (2.13-2.16) in Chapter 2.1 but I <a href="http://www.redlinernotes.com/code">recently started plowing ahead</a> on Chapter 2.2 to get some momentum again and am about a third of the way through it. If anyone has advice or feels like working through them with me feel free to contact me via blog, IM, e-mail, etc.


title: Meandering Towards Monday
date: 2007-09-23 21:32:12.000000
format: html
content:
  It's been a nice, leisurely weekend thus far. I've been meaning to post more and to post some things that are a bit less technical but I've been bad about making the time of late. This is a smattering of things that have been backed up in my head.<br><br>I realized recently that there's a Milosz poem I never threw up here that I really wished I had. It's titled <em>Diary of a Naturalist</em> and taken out of his work <em>From The Rising of The Sun</em>.<br><br>My generation was lost. Cities too. And nations.<br>But all this a little later. Meanwhile, in the window, a swallow<br>Performs its rite of the second. That boy, does he already suspect<br>That beauty is always elsewhere and always delusive?<br>Now he sees his homeland. At the time of the second mowing.<br>Roads winding uphill and down. Pine groves. Lakes.<br>An overcast sky with one slanting ray.<br>And everywhere men with scythes, in shirts of unbleached linen<br>And the dark-blue trousers that were common in the province.<br>He sees what I see even now. Oh but he was clever,<br>Attentive, as if things were instantly changed by memory.<br>Riding in a cart, he looked back to retain as much as possible.<br>Which means he knew what was needed for some ultimate moment<br>When he would compose from fragments a world perfect at last.<br><br>Isn't that nice? Here's one I wrote that just sort of flew out this afternoon:<br>The world is not chaos or justice,<br>Mere good and bad happening all round.<br>Swept under the rug in our wake,<br>Dust returning to dust, in clumps at that.<br>We do not like to go quietly, or alone.<br>But what of the unquantifiable interim?<br>Ah, qualified not quantified: Rich, peerless,<br>Are there stories greater than our own?<br>Certainly not with more twists, turns, surprises.<br>Still, here I am, trying to understand how:<br>I have become trapped like a fly in amber.<br>Like those who have come before me, now<br>Teachers, who sought after explications for the<br>Milieu of an era, the abstract of an age.<br><br>I'm not sure what I think but I may be warming up to it. Now that that's out of the way.<br><br>Top 5 Books I couldn't live without:<br>Unattainable Earth by Czeslaw Milosz<br>Hackers &amp; Painters by Paul Graham<br>Orthodoxy by G.K. Chesterton<br>The Success of Open Source by Steven Weber<br>The Future of Ideas by Lawrence Lessig<br><br>Honorable Mentions:<br>Selected Essays by Jerzy Kosinski<br>The Blue Octavo Notebooks by Franz Kafka<br>The Trial by Frans Kafka<br>Tender is the Night OR The Great Gatsby by F. Scott Fitzgerald<br>The Unbearable Lightness of Being by Milan Kundera<br><br>Of late, I've also really been enjoying reading Founders at Work by Jessica Livingston. If you're considering ever starting your own company or if you'd just be edified by reading about people succeeding outside the system/convention and innovating I'd highly recommend picking it up. There's also a book called Coders at Work in progress at the same publisher by a different author. That book is composed of interviews with some of the world's premiere programmers and it may find it's way onto the can't live without list. At least, I expect it will.<br><br>As my last point today, I'd like to congratulate Electronic Arts. They have successfully made the first good skateboarding video game in years. This is a huge thing for me because I love skateboarding games because I'm a big skate nerd and it's taken way too long for someone to best Tony Hawk's Pro Skater 2. Honestly, what happened to you Neversoft? Anyway, I highly endorse EA Blackbox's new game skate. It's amazz-z-zing. I might need to end up getting one more game console after all. Alright, more later folks.


title: Mercurially Me
date: 2008-10-23 05:34:39.000000
format: html
content:
  Something non-techy for starters, Don Gerz has posted <em><b><a href="http://dongerz.livejournal.com/23625.html">three</a> <a href="http://dongerz.livejournal.com/23162.html">separate</a> <a href="http://dongerz.livejournal.com/23516.html">entries</a></b></em> about <a href="http://en.wikipedia.org/wiki/Watchmen">Alan Moore's Watchmen</a> in the last week. In two days, actually. And (perhaps due to my prodding) Kris Osterhage threw up a post mentioning <a href="http://krow684.livejournal.com/2690.html">his Watchmen experience</a> among other things. It's fun. Maybe I should try to re-read it and write a nice essay before the movie comes out in March.<br><br>I haven't been getting quite enough done lately but what else is new. I have been learning some good things and as always there's good stuff coming down the pipe. I've banged out the features I thought my version of hangman was most lacking, <a href="http://redlinernotes.com/code/rev/f45aff949729">a real word-list\dictionary</a> and <a href="http://redlinernotes.com/code/rev/554d25b9fc4a">a fix for a bug</a> I may not have mentioned. If a letter occurred more than once in a word (i.e. "o" in "cook") and was guessed only the first instance of the letter would show up. Those fixes are committed and I'm moving on to things like the <a href="http://redlinernotes.com/blog/?p=732#comment-8818">cleanup suggestions</a> <a href="http://www.xach.com/">Xach</a> made and then who knows.<br><br>Finishing <a href="http://www.gigamonkeys.com/book/">PCL</a> is probably next on the priority list. I took some crappy notes which I keep telling myself to turn into a "Common Lisp for Schemers" series of articles but I haven't gotten around to it. Maybe because I'll just embarass myself but that's what the internet is for so I'll probably do it anyway. I've also been wanting to finish the Picture Language stuff in SICP 2.2. But whenever I try to load the <a href="http://planet.plt-scheme.org/display.ss?package=sicp.plt&amp;owner=soegaard">SICP module</a> in DrScheme my CPU utilisation goes through the roof and it just sits there for a while. Personally, I'm not one for waiting as this seems to happen with <em>any module on PLaneT</em>. It's probably just me though and I'm willing to look into it more later. There are some <a href="http://mitpress.mit.edu/sicp/psets/ps4hnd/readme.html">.scm files for MIT-Scheme</a> on the SICP site and I'm still considering what to do.<br><br>Also, I've been peeking at Scheme implementations again. I'm still fond of the massive concurrency option of Gambit/Termite and I like DrScheme for it's strong community and many good features...but my heavens, Chicken Scheme is <a href="http://chicken.wiki.br/Eggs%20Unlimited%203">armed to the teeth with eggs</a>. Is it even for real? That looks like fun to me. Implementation surfing is a dangerous distraction when you should be writing code though. I'll worry more about scheme implementations when I bang out a x86_64 edition of <a href="http://redlinernotes.com/blog/?p=723">RedLinux</a> before college starts (hopefully in the Spring). I'll write more about that tomorrow but I've been <a href="http://redlinernotes.com/blog/?p=715">worrying about my upgrade path</a> for a while now and going back to school has brought some of those issues back to the front for me. My laptop positively refuses to get on a secured wireless network. Now, that's probably something to fix with a usb wifi card or something but the battery life is also under an hour. I'll just say I've been thinking about it a lot and come to some conclusions.<br><br>Additionally, <a href="http://www.oopsla.org/oopsla2008/">OOPSLA</a> and <a href="http://www.lisp50.org/">Lisp50</a> just wrapped up. I really wanted to go but I wouldn't have been much more than a fanboy at this point and my funds were limited. Hopefully videos of a few talks and more blogging on the conference will trickle out. The clatter about <a href="http://www.clojure.org/">clojure</a> continues to grow too. It's something worth keeping an eye on no doubt.<br><br>Last but not least, more mercurial fun tonight. What you didn't guess from the title? I found two good sources on Mercurial today. The first was a general <a href="http://wiki.geeklog.net/wiki/index.php/Using_Mercurial">mercurial guide</a> and the other dealt with <a href="http://xtalk.msk.su/~ott/en/writings/emacs-vcs/EmacsMercurial.html">emacs integration</a>. On to some quick tips.<br><br>Let's assume you forgot to setup your username in .hgrc and you've just fired off the old add-commit. You haven't pushed (and we'll assume no one had the ability to pull) yet so no one has to know about your silly mistake and crazy machine name. Just run <code>hg rollback</code> to eliminate that last commit but be forewarned that you can't rollback a rollback. For simpler cases where you've added, removed or something similar but haven't committed yet just use <code>hg revert</code>. You can also use <code>hg revert filename</code> to undo changes to a particular file.<br><br>Also, I'm enjoying using mercurial.el in emacs. Just drop mercurial.el into your emacs/site-lisp directory and <code>(require 'mercurial)</code> into your .emacs file. <code>C-c h s</code> does hg-status and <code>C-c h c</code> will start a commit but allow you to unmark any files you don't want to commit before doing so. <code>C-c h a</code> is hg-add and <code>C-c h U</code> is hg revert, <code>C-x v u</code> being for the current file only. <code>C-c h <</code> works as hg-pull and <code>C-c h u</code> is hg-update. Finally, <code>C-c h ></code> is hg-push. There you have it folks. Mercurial in a paragraph. I'm a bit tired so that's all for tonight. See you tomorrow.


title: Midweek Miscellany
date: 2009-07-24 00:35:53.000000
format: html
content:
  So, a quick post of things that have been happening.<br><br>It's official. Apple and Palm are at war. And I couldn't be happier about it. Apple has pulled stupid, anticompetitive maneuvers many a time that simply serve to frustrate users of its software. One is making sure that iTunes <em>only works</em> with iPods. Palm made a phone that was designed to sync with iTunes and sync it did. Apple intentionally released a patch to iTunes shortly after the release of Palm's Pre phone that broke that functionality. <a href="http://www.engadgetmobile.com/2009/07/23/palm-webos-1-1-now-available-fixes-itunes-sync/">Palm has just released a fix</a> that restores the sync functionality. So guys, are you just gonna keep doing this or will there be a court date I should know about?<br><br>The HTC Hero has finally <a href="http://gizmodo.com/5318860/htc-hero-review-tragically-flawed">started</a> <a href="http://www.slashgear.com/htc-hero-review-2149880/">to</a> <a href="http://www.mobilecrunch.com/2009/07/20/review-htc-hero/">see</a> <a href="http://www.engadget.com/2009/07/23/htc-hero-review/">reviews</a> drop and while the software is good, the phone's CPU is old and underpowered...so now I'm waiting...again...for either a wild Maemo phone announcement from Nokia or some solid reviews (or just confirmation at this stage) about the Sony Ericsson Xperia X3 (aka "<a href="http://www.engadgetmobile.com/tag/rachael/">Rachael</a>"). I certainly wouldn't mind getting the Hero but it looks like my next phone purchase won't come until at least Xmas.<br><br>In the meantime, there are plenty of other things holding my interest. One is the <a href="http://www.amazon.com/Coders-at-Work-Peter-Seibel/dp/1430219483">Coders at Work</a> book <a href="http://www.gigamonkeys.com/">Peter Seibel</a> is working on. It's <a href="http://codersatwork.com/endgame.html">schedule</a> keeps getting pushed back but it should be out "Real Soon Now". <a href="http://www.nicklevine.org/">Nick Levine</a> is also working on a book called "Lisp Outside the Box" for O'Reilly that has some <a href="http://lisp-book.org/contents/">cool contents</a>. No word on a release date yet though. I'll be watching.<br><br>One piece of big and great news is that <a href="http://redlinernotes.com/images/teresa.jpg">Teresa</a> has switched to <a href="http://ubuntu.com/">Ubuntu</a>. Jaunty i386, to be specific. Her XP install kept having problems and I didn't feel like spending time fixing them. Since switching her last weekend, things have gone quite smoothly.<br><br>I also had a little interest in trying Karmic out because of their <a href="http://tarpon.wordpress.com/2009/06/19/google-android-ubuntu/">Android support</a> but didn't feel like messing with my partition table. I figure I'll upgrade her system when it releases and won't have an Android phone anyway. I still have a little bit of a distro fixation lately it seems because I finally want to play with a source-based distribution and have been particularly intrigued by Daniel Robbins' Funtoo project. It's a gentoo derivative and given how much free time I have I'll likely <a href="http://funtoo.org/en/articles/funtoo/quick-install-howto/">try it</a> in Virtualbox soon. It'd have to be <em>insanely great</em> to pull me away from Arch however. As OSWatershed.org attests, <a href="http://oswatershed.org/">Arch's "stable\current" packages just can't be beat</a>. :) Of course, there are disclaimers on OSWatershed.org's site about the numbers. I'm not trying to start a flame war and I'll be trying Funtoo unstable/future anyway.<br><br>My buddy <a href="http://trashed-ideas.net/">Max</a> posted a link to <a href="http://www.youtube.com/watch?v=B-m6JDYRFvk&eurl=http%3A%2F%2Ftrashed-ideas.net%2F&feature=player_embedded">coder girl</a>. This doesn't fit in anywhere, it just makes me speechless. Cheers.


title: Miracle Day
date: 2009-10-29 00:55:19.000000
format: html
content:
  Ever since I blogged about good things happening to me last week, I've been slipping into depression. And the descent became rapid. The last three days were the worst of it. I had almost completely lost my ability to function. Just getting on the bus and making it to class, that was pretty good. That was an accomplishment. There were a variety of reasons for this but certainly one of the most prominent was how overwhelmed I felt by my Algorithms class. The first test had decimated most of the class (a handful of people got better than a 60) and the second one was today. Thankfully, it was a much gentler test than the first.<br><br>It's the teacher's first semester at my school and if my sources are accurate one of the reasons the second test was so much easier is that he has received enough complaints to be on some sort of probation. Whether or not that's warranted or not I can't say. What I can say is that I came into this semester drained. Partly due to prior semesters and a bit of academic exhaustion, partly due to <a href="http://redlinernotes.com/blog/?p=972">Dad's recent death</a>. I was hoping my courses would re-energize me this Fall. I found that all my courses drained me. It was terrible. Thankfully, I started <a href="http://gitorious.org/~redline6561">working on some Open Source Software</a> and that has been a real boon to me. Being able to share my enjoyment of programming and feel productive with somebody else helped give me a boost that I really needed. It kept me afloat. That said, if I had bombed the test today I don't know if I would've been able to handle it well.<br><br>I was concerned that if I bombed the test (which seemed probable) I would be so defeated that I'd have a hard time picking myself up and making a good effort on my other courses. Bombing the second test would have meant near certain failure in the class and I wasn't in a good position to take that blow. Thankfully, I'm still in college and I caught a break. A lot of people complained and the second test was a good bit easier. Whether that's fair or not is out of my hands. In the real world, I won't get many breaks or second chances. I'll just be required to meet the bar. Period. And sooner or later I'll miss it. I will fail. At which point, I'll just have to pick myself up. But not today. Today I'm going to keep trying to float and start working on finding my optimism.<br><br>Here's a pros and cons analysis and some oddly well timed material I stumbled on today.<br><br>Cons:<br>He's easing up on us. We already weren't understanding the material well. Now he's easing up on us.<br><br>Pros:<br>I am not going to fail the damn class.<br>I can study CLRS and Kleinberg-Tardos and Levitin (all Algorithms books) at home to my heart's content, this semester and/or after. I've always vastly preferred self-study and learning by experimentation anyway. :)<br><br>Tasty links that might also cheer you up:<br><a href="http://github.com/raganwald/homoiconic/blob/master/2009-10-20/high_anxiety.md#readme">High Anxiety</a> - Raganwald's new github-thing<br><a href="http://github.com/raganwald/homoiconic/blob/master/2009-05-01/optimism.md">Optimism</a> - Also Raganwald's new github-thing<br><br>A song I've been enjoying:<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">Two Door Cinema Club - Something Good Can Work</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://imyouare.com/files/audio/two_door_cinema_club-something_good_can_work.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=625E4453515E6216&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: MIT-Scheme is Broken in Hardy
date: 2008-04-15 15:57:01.000000
format: html
content:
  <strong>UPDATE</strong>: There is a fix for this posted on my blog <a href="http://www.redlinernotes.com/blog/?p=681">here</a>. I figured everyone would find that via google but all the traffic seems to be coming here instead. Hit the link.<br>Now, I realize both that I can use another Scheme to work on <a href="http://www.redlinernotes.com/blog/?cat=4">SICP</a> and that I can use Launchpad to submit a [patch/bug report/etc] but this is still kind of frustrating. At any rate, <a href="http://packages.debian.org/sid/mit-scheme">going to the source</a> didn't work so I can't just use Debian's unstable packages. Going back in time and using a <a href="https://launchpad.net/ubuntu/+source/mit-scheme/7.7.90+20070205-1ubuntu1/+build/332908">Gutsy</a> or <a href="http://packages.debian.org/etch/mit-scheme">Debian Etch</a> build might do the trick though. I filed a <a href="https://bugs.launchpad.net/ubuntu/+source/mit-scheme/+bug/217792">bug report</a>. We'll see what happens. *sigh* Maybe they're all just trying to tell me to <a href="http://wingolog.org/archives/2008/04/07/fedora-is-the-new-ubuntu">listen to Andy Wingo</a>. I've been meaning to play around with F9 anyway. I always do. Distro release season is so fun and it comes twice a year! More on that later.<br><br>For the curious, MIT-Scheme when run from the command line will produce the following error:<br>Largest address does not fit in datum field of object.<br>Allocate less space or re-configure without HEAP_IN_LOW_MEMORY.


title: Morning View
date: 2007-07-01 08:45:00.000000
format: html
content:
  Ladies and Gentlemen,<br><br>By dawn their will be <em>something</em> on "redlinernotes.com". I've been hacking on the server since Friday and spent a good deal of time on it so far.<br><br>It's given me it's fair share of trouble, in part because of a poorly supported network chipset and in part because of an esoteric Linux distribution. I purchased a better supported network card in the first case and have switched back to my beloved Ubuntu in the second.<br><br>At any rate, the server is on the network downstairs in it's permanent location in our basement. As soon as Ubuntu Server 6.06.1 is done installing I'll ssh into the machine and get back to it.<br><br>This has been quite a journey. Stay with me readers. The time is almost here!<br><br>Regards,<br>Editor-in-Chief<br><br>PS: Ben, are these paragraph breaks prettier?


title: Mounds of Milosz
date: 2007-09-24 17:41:30.000000
format: html
content:
  It seems I just can't help myself when it comes to this guy. Here's some of his work from <em>Second Spaces</em> which I believe is the last of his poems that were published.<br><br>From Part III, Treatise on Theology:<br>4. I Apologize<br>I apologize, most reverend theologians, for a tone not befitting the purple of your robes.<br>I thrash in the bed of my style, searching for a comfortable position, not too sanctimonious and not too mundane.<br>There must be a middle place between abstraction and childishness where one can talk seriously about serious things.<br>Catholic dogma is a few inches too high; we stand on our toes and for a moment it seems to us that we see.<br>Yet the mystery of the Holy Trinity, the mystery of Original Sin, the mystery of the Redemption are well armored against reason.<br>Which tries in vain to get straight the story of God before His creation of the world, and when the separation into good and evil occurred in His Kingdom.<br>What in all that can be grasped by little girls in white for First Communion!<br>If even gray-haired theologians concede that it is too much for them, close the book, and invoke the inadequacy of the human tongue.<br>But it will not do to prattle on about soft little Jesus in the hay of His manger.<br><br>And also this one, from Part III's Treatise on Theology as well:<br>15. Religion Comes<br>Religion comes from our pity for humans.<br>They are too weak to live without divine protection.<br>Too weak to listen to the screeching noise of the turning of infernal wheels.<br>Who among us would accept a universe in which there was not one voice<br>Of compassion, pity, understanding?<br>To be human is to be completely alien amid the galaxies.<br>Which is sufficient reason for erecting, together with others, the temples of an unimaginable mercy.<br><br>That one actually reminds me of <a href="http://www.redlinernotes.com/blog/?p=223">something I wrote once</a>...


title: Moved In
date: 2008-05-04 22:10:57.000000
format: html
content:
  Things might be a bit quiet from me for a few days. I've moved into my new house on Windsor Pkwy and am really enjoying it. We have warm water and electricity but no internet until May 13th. It's tough but free Wi-Fi from my Alma Mater isn't far away. I'll try to post some pictures up later this week and give you all "the tour". In the meantime I've got to cook dinner and work on a presentation about the AV Equipment at the Office. It's a glamorous IT life, I tell ya. Feel free to call me for directions and visit!<br><br>Update: So, apparently the landowner's DSL still hasn't been cut off. The internet is among the utilities that are up in the air at present. Everything should be straightened out soon.


title: Moving Out
date: 2008-04-28 13:44:32.000000
format: html
content:
  Briefly, I just wanted to mention for those that don't know that I'm moving into a new house later this week. I'll be living with 4 of my friends (Ben, Teresa, Lizzi, and Amy) less than a mile from Oglethorpe University and I'm quite excited about it. Ben and I are sharing a bedroom in the basement and the girls are upstairs. I'll also get to take Marta in to work. Take that gas prices! Anyway, organizing for the move and dealing with taxes has deterred my programming progress somewhat. Of course, my own laziness is always a factor but I promise there will be more code soon.<br><br>Other than that I was wondering if anyone was subscribed to this blog via feed (RSS or Atom) and if so what Feed Reader they used (Google Reader, RSSOwl, etc)? What's the story people?


title: Music and Movies
date: 2007-07-31 15:14:07.000000
format: html
content:
  So, I'm thinking about blowing away 15,000 mp3s. What's that? Heresy you say? Why would I after having amassed such a massive music library blow most of it away? Well, somewhat predictably I just don't listen to all 17,300 some songs too often. There are about 2,500 songs that I really listen to and those have been loaded on my brand spanking new Creative Zen player. So, do I blow the rest away and free up 60 or 70 GBs of space? It seems prudent to me. We'll see. I'm not exactly running out of space but it's a consideration.<br><br>Additionally, I should probably watch a few Google videos later. They might prove interesting. I already enjoyed the first two.<br><a href="http://video.google.com/videoplay?docid=-6972678839686672840">Linus Torvalds on Git</a><br><a href="http://video.google.com/videoplay?docid=1742374580386548257">OSS Speaker Series: The State of the Linux Kernel</a><br><a href="http://video.google.com/videoplay?docid=4454301923024286590">Building a LAMP Stack for the Life Sciences</a><br><a href="http://video.google.com/videoplay?docid=-8538240380002213699">7 Ways to Ruin a Technological Revolution</a><br><a href="http://video.google.com/videoplay?docid=3480148850517625338">Signals, Truth, and Design</a><br><a href="http://video.google.com/videoplay?docid=-6856727143023456694">Away with Applications: The Death of the Desktop</a><br><a href="http://video.google.com/videoplay?docid=2159021324062223592">Everything is Miscellaneous</a><br><a href="http://video.google.com/videoplay?docid=-6972678839686672840">A New Way to look at Networking</a>


title: My .hgignore
date: 2009-01-14 23:25:29.000000
format: html
content:
  Before I forget it or fail to version it somewhere I want to post the contents of my .hgignore file. You may or may not find it useful if you're a mercurial user but it's really for me. :)<br><br>syntax: glob<br>*.elc<br>*.orig<br>*~<br>\#*<br>.DS_Store<br>unversioned/*<br>.hgrc<br>.hgignore


title: My Lisp Summer Project
date: 2013-06-21 14:58:00.000000
format: md
content:
  ## cl-6502 0.9.4

  I haven't been doing any hacking on [coleslaw](https://github.com/redline6561/coleslaw) or [famiclom](http://github.com/redline6561/famiclom) for the last month. I've been focused almost entirely on my 6502 CPU emulator. In particular, I've been optimizing it and turning it into a ["readable program"](http://blog.lukego.com/blog/2012/10/24/readable-programs/).

  The optimizations have gone swimmingly, taking [cl-6502](https://github.com/redline6561/cl-6502) from 3.8 emulated mhz circa May 1st (commit eecfe7) to 29.3 emulated mhz today (commit b729e8).(0) A factor of 8 speedup feels pretty good though it would be fun to coax more speed out later.

  (0): All figures obtained with SBCL 1.1.4 on Debian 64-bit on an old Thinkpad X200. See [this 6502 forum post](http://forum.6502.org/viewtopic.php?f=2&t=2241&start=60#p26265).

  I feel that the readability of the program has remained, maybe even improved, through all that optimization. The same overall design is in place; most refactorings were, approximately, tweaking macros and their callsites. The readability is especially improved when the code is broken into chapters, each with an introduction for context, and typeset with LaTeX. The latter is done thanks to a simple Makefile and some [very nifty code](https://github.com/redline6561/cl-6502/tree/master/src/doc) swiped from Luke Gorrie's [snabbswitch](https://github.com/SnabbCo/snabbswitch/wiki). If you've been curious about how cl-6502 is implemented or just wanted to dive in, there's never been a better time. Grab [the book](http://redlinernotes.com/docs/cl-6502.pdf)!

  ## NES + Lisp + Static Analysis = ?

  I'm still planning to make famiclom a full NES emulator. I won't consider it done until I can play Mega Man 2 with it. Hopefully using a USB controller. It doesn't make much sense for [Lisp in Summer Projects](http://lispinsummerprojects.org/) though. I've already started the project, the scope is ill-defined, and I want to work on something fresh and new to me. So I've come up with a project that I can't possibly complete instead. It'll be great!

  In short, I intend to rewrite Super Mario Bros 1. ... in a not-yet-existing lisp-like macro-assembler/incredibly simple compiler. I already have a 6502 assembler/disassembler in cl-6502 and a tool to parse NES roms in [romreader](https://github.com/redline6561/romreader). There's also a very thorough annotated disassembly of Super Mario Bros [floating around](http://redlinernotes.com/docs/smbdis.asm). I've got a good start on a static analyzer that will take the SMB binary and an entry point and try to build a [CFG](http://en.wikipedia.org/wiki/Control_flow_graph) of the game. The current scheme won't work with [memory mapped titles](http://en.wikipedia.org/wiki/Memory_Management_Controller) but it's good enough for Mario.

  ## Wild Speculation

  Once I have a graph representation of Mario Bros, I'll try both manual analysis of the annotated disassembly with a pen and pad, and automated analysis on the graph using Lisp. I'll try to find as many idioms and patterns as possible to condense and improve readability of the code. Then, somewhere in early August, I'll start trying to rewrite the source and see how far I can get.

  This approach is probably completely: insane, unworkable, unviable, inadvisable, and just all around wrong. But I think I'll have fun and learn something, so it's good enough for me. And hell, who knows, maybe I'll get lucky and be able to attend [ECLM](http://eclm.eu/) next year. :)


title: Nerd Out
date: 2007-08-17 12:27:58.000000
format: html
content:
  So, <a href="http://patricklogan.blogspot.com/2007/08/dunno.html">I apparently asked a good question</a> on Patrick Logan's <a href="http://patricklogan.blogspot.com/2007/08/andre-pang-video-on-concurrent.html">blog</a>. And he gave me a good answer:<br><br>"I can see someone making the argument in some domain I don't usually work in that shared memory threads are better than shared nothing message passing for performance reasons. Some hard-real time scenario, some huge number crunching scenario, etc. where every byte and every cycle has to count in the extreme. But the irony then is that STM seems far more suited to a language like Haskell, which is also unlikely to be suited for these performance scenarios.<br><br>My only fear is that for the masses including myself, we need *simple* mechanisms, and the fewer of those, the better. Shared nothing messages seem to scale up, out, and down. STM seems more complicated, and an incomplete solution, and only a solution for shared memory."<br><br>Indeed. Aside from <a href="http://video.google.com/videoplay?docid=2953846492344274158">Andre Pang's Erlang and Concurrency talk</a>, I've watched <a href="http://video.google.com/url?docid=-5240896304418824367&amp;esrc=sr2&amp;ev=v&amp;q=transactional%2Bmemory&amp;srcurl=http%3A%2F%2Fvideo.google.com%2Fvideoplay%3Fdocid%3D-5240896304418824367&amp;vidurl=%2Fvideoplay%3Fdocid%3D-5240896304418824367%26q%3Dtransactional%2Bmemory%26total%3D23%26start%3D0%26num%3D10%26so%3D0%26type%3Dsearch%26plindex%3D1&amp;usg=AL29H21Zj9FmLqbUyNkMe7xU_vr8CsdkWA">Adam Welc's Google Tech Talk on Transactional Memory</a> and am planning on listening to <a href="http://www.blip.tv/file/317758/">Simon Peyton-Jones OSCON talk on STM</a> later today. Now, whether I'll end up listening to the <a href="http://video.google.com/videoplay?docid=5442492239822665187&amp;q=transactional+memory&amp;total=23&amp;start=0&amp;num=10&amp;so=0&amp;type=search&amp;plindex=0">other</a> <a href="http://video.google.com/videoplay?docid=4575567975642725150&amp;q=transactional+memory&amp;total=23&amp;start=0&amp;num=10&amp;so=0&amp;type=search&amp;plindex=2">two</a> Google Tech Talks on Transaction Memory I don't know. I have, as mentioned, read <a href="http://www.cs.princeton.edu/~dpw/popl/06/Tim-POPL.ppt">Sweeney's POPL slides</a>.<br><br>So far, I end up thinking two things hearing these talks.<br>1) This is an ugly hack.<br>2) Overhead, overhead, overhead.<br><br>At any rate, It's nice to be involved in a high-level nerd conversation with very smart people. That's always fun.


title: New Years, Music, and Poetry
date: 2008-01-02 04:13:44.000000
format: html
content:
  I've been hooked on this song for the past 48 hours or so by a group called Yeasayer. It's finding stuff like this that convinces me to bother with end of year album lists and such.<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">Yeasayer - Sunrise</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.ohmpark.com/promo/01%20Sunrise.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=675F4655545965&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>I also just sort of got this poem in my head while brushing my teeth. This is a draft. What do you think? What would you call it?<br><br>As though expecting to hear a proclamation,<br>any moment now, "Poetry is no longer recognized<br>as one of the forms of art. You lot may<br>go on about your business." No more need:<br>to try to compress the world into words,<br>as if we could capture what fleets from us<br>in a phrase given the proper amount of<br>pressure. It is true that one should write<br>a poem only under incredible duress.<br>That way should we ever be caught,<br>stuffing the universe into a handbasket,<br>we might appear less greedy.<br>And less foolish.<br><br>Finally, I'm going to be out of town for a week. I'll be back next Wednesday. See you guys then!


title: NIL
date: 2008-07-18 13:12:46.000000
format: html
content:
  I'm less than my best this morning. I woke up exhausted, I struggled towards the office. I met a Microsoft developer on the train. You could tell from the Silverlight and CodingHorror stickers on his laptop. He seemed like a nice enough guy. However, he was going south towards Downtown and the only Atlanta office listed on the microsoft site is in Alpharetta. Was he fooling me? Is there an unlisted office? Who knows.<br><br>I don't believe I have enough of a work ethic. Surely, I would be more than I am if that were the case. Enough of that talk, it tires me already. I read some Neruda a moment ago. It's beautiful enough that I'm compelled to post it. It's taken from his book <strong><a href="http://www.amazon.com/Extravagaria-Texas-American-Pablo-Neruda/dp/0292720831">Extravagaria</a></strong> and titled <em>Soliloquy at Twilight</em>.<br><br>Given that now perhaps<br>we are seriously alone,<br>I mean to ask some questions-<br>we'll speak man to man.<br><br>With you, with that passerby,<br>with those born yesterday,<br>with all those who died,<br>and with those to be born tomorrow,<br>I want to speak without being overheard,<br>without them always whispering,<br>without things getting changed<br>in ears along the way.<br><br>Well then, where from, where to?<br>What made you decide to be born?<br>Do you know that the world is small,<br>scarcely the size of an apple,<br>like a little hard stone,<br>and that brothers kill each other<br>for a fistful of dust?<br><br>For the dead there's land enough!<br><br>You know by now, or you will,<br>that time is scarcely one day<br>and a day is a single drop?<br><br>How will you be, how have you been?<br>Sociable, talkative, silent?<br>Are you going to outdistance<br>those who where born with you?<br>Or will you be sticking a pistol<br>grimly into their kidneys?<br><br>What will you do with so many days<br>left over, and even more,<br>with so many missing days?<br><br>Do you know there's nobody in the streets<br>and nobody in the houses?<br><br>There are only eyes in the windows.<br><br>If you don't have somewhere to sleep,<br>knock on a door and it will open,<br>open up to a certain point<br>and you'll see it's cold inside,<br>and that that house is empty<br>and wants nothing to do with you;<br>your stories are worth nothing,<br>and if you insist on being gentle,<br>the dog and cat will bite you.<br><br>Until later, till you forget me-<br>I'm going, since I don't have time<br>to ask the wind more questions.<br><br>I can scarcely walk properly,<br>I'm in such a hurry.<br>Somehwere they're waiting<br>to accuse me of something<br>and I have to defend myself;<br>nobody knows what it's about<br>except that it's urgent,<br>and if I don't go, it will close,<br>and how can I hold my own<br>if I knock and nobody opens the door?<br><br>Until later, we'll speak before then.<br>Or speak after, I don't remember,<br>or perhaps we haven't even met<br>or cannot communicate.<br>I have these crazy habits-<br>I speak, there is no one and I don't listen<br>I ask myself questions and never answer.


title: Ninth Monday Update
date: 2007-07-09 17:35:00.000000
format: html
content:
  Summer: Week 8: Finished<br><strike>See Ember<br>TVS<br>Gym<br>Site<br>Reading<br>FFXII<br>Lunch with Eric and Aaron<br>SPSU Run Around. Figure out credits. (started)</strike><br>Unexpected: July 4th party w/Sonya, Jess, Brandon, and (temporarily) Eric. Saw Live Free or Die Hard with Ben, Transformers with Jessie, Got Hacker Culture essay draft posted.<br><br>Summer: Week 9: Schedule<br>Monday<br>Go to SPSU to work more on transfer credits<br>Call Sonya<br>See Bria when she gets off work at 3<br>Tuesday<br>TVS<br>Dentist at 3:15<br>Gym<br>Trivia Night with Justin and Bria?<br>Wednesday<br>TVS<br>Sonya at 4<br>Beach Trip preparation? Playlists, etc.<br>Thursday<br>TVS<br>Gym<br>Crash at Chris' house.<br>Friday<br>Movie with Olivia? Good Will Hunting?<br><br>News for 7/9/07:<br>We'll start with something reasonably important first. <a href="http://kerneltrap.org/node/11721">There has been a Linux Kernel release</a>. Available now at a mirror near you, the Linux Kernel version 2.6.22.<br>On the Fourth we were lucky to get <a href="http://www.reactos.org/en/newsletter_27.html">an update from the ReactOS team</a>. Work appears to be progressing pretty well and 0.3.3 should be out in no time.<br>That's about it for Open Source actually. I can't help feeling like I'm forgetting something but this is what I've got. All told, I think things are a little quiet since everyone is gearing up for <a href="http://guadec.org">GUADEC</a>!<br>In a surprising development, Allofmp3.com was shut down this week after years of happy quasi-legal gray-area Russian operation.<br>The Microsoft-Novell deal is still not done with it's controversy, though it is very much on the back burner for even most who were initially concerned (aka me) at this point. Here's <a href="http://arstechnica.com/news.ars/post/20070708-microsoft-says-novell-deal-not-affected-by-gpl-3.html">the latest courtesy of the wonderful Ars Technica</a>.<br>And there have been some more <a href="http://www.technologyreview.com/Nanotech/19015/">breakthroughs in Data Storage Density</a>.<br><a href="http://www.technologyreview.com/Infotech/19010/">A recent study has shown that some amount of noise in telecommunications can actually improve throughput and bandwidth. Shocking</a>.<br>Finally, <a href="http://www.worldchanging.com/archives/007000.html">I read something awesome the other day about Vertical Farming</a>. Yeah. Read that.<br>There have been plenty of other awesome blog posts, studies, etc that I've read this week but honestly I'm too lazy to post them. Beg and I'll grab excerpts or see what I can dig up. ;-)


title: Ninth Thursday Literary Lines
date: 2007-07-12 23:53:00.000000
format: html
content:
  My Neruda hasn't come in the mail yet so you all are stuck with another week of Milosz. This week's poem is titled Nonadaptation.<br><br>I was not made to live anywhere except in paradise.<br>Such, simply, was my genetic inadaptation.<br>Here on earth every prick of a rose-thorn changed into a wound,.<br>Whenever the sun hid behind a cloud, I grieved.<br>I pretended to work like others from morning to evening,<br>but I was absent, dedicated to invisible countries.<br>For solace I escaped to city parks, there to observe<br>and faithfully describe flowers and trees, but they changed,<br>under my hand, into the gardens of Paradise.<br>I have not loved a woman with my five senses.<br>I only wanted from her my sister, from before the banishment.<br>And I respected religion, for on this earth of pain<br>it was a funereal and a propitiatory song.


title: Ninth Tuesday Quotables
date: 2007-07-11 07:25:00.000000
format: html
content:
  Today's Quotes are on the birth of the internet:<br><br>"Most of the great leaps of the computer age have happened despite, rather than because of, intellectual property rights. Before the Internet the proprietary network protocols divided customers, locked them into providers and forced them to exchange much of their data by tape. The power of the network was not unlocked by IPR. It was unlocked by free and open innovation shared amongst all." - Alan Cox<br><br>"AT&amp;T's views were once memorably summarized in an exasperated outburst from AT&amp;T's Jack Osterman after a long discussion with Baran. 'First', he said, 'it can't possibly work, and if it did, damned if we are going to allow the creation of a competitor to ourselves." - Lawrence Lessig


title: Ninth Wednesday Songs of Summer
date: 2007-07-11 16:57:00.000000
format: html
content:
  Ratatat - Kennedy<br>Spoon - The Ghost of You Lingers<br>John Legend - Ordinary People<br>Spoon - Finer Feelings<br>The Sea and Cake - Colony Room


title: Normal Thoughts, Nerd Thoughts
date: 2009-02-01 00:18:46.000000
format: html
content:
  I'm going to try to keep this short. Top 5 things that have been stuck in my head the last 2 days.<br><br>1: Actually, 1 hasn't been stuck in my head it's a few interesting news bits from this morning. One being <a href="http://lynch.foreignpolicy.com/posts/2009/01/27/obama_on_al_arabiya">an interesting interview and look at Middle East policy with Obama</a>, the other being <a href="http://mediamatters.org/countyfair/200901280009?show=1">Jessica Alba calling out Bill O'Reilly on WWII neutrality</a>. I normally wouldn't post the latter sort of junk but I found it pretty funny for one reason or another.<br><br>2: Amon Tobin is awesome. Literally, awesome. My favorite two albums of his are Supermodified and Permutation but I can't choose between those two. Seriously though, just listen to <a href="http://www.youtube.com/watch?v=yp_WfPRnHME">Nightlife</a> off of <a href="http://en.wikipedia.org/wiki/Permutation_(album)">Permutation</a> or <a href="http://www.youtube.com/watch?v=TCuUcTi_iSg">Slowly</a> off of <a href="http://en.wikipedia.org/wiki/Supermodified_(album)">Supermodified</a>. Listen to those for me. Please. Tell me they're not masterfully composed or beautiful. It's all sample-based. He's staggering.<br><br>3: I'm going to be moving by the end of may. I need to save up for a down payment on an apartment (with Teresa) somewhere nearby and public transit accessible. I may also change internet service providers. If I do that, does it make sense to buy hosting from <a href="https://www.linode.com/faq.cfm">someone</a> (I'd definitely choose a <a href="https://www.linode.com/avail.cfm">Linode 360 in Atlanta at $20/month</a>)? I'd still keep a server at home for, uh..."file transfer operations", media serving and SSH access or some such. I just don't want to have to run redlinernotes.com off of it for bandwidth and downtime reasons.<br><br>**Computer Nerd warning: I think what follows may be the most concise explanation of what really interests <em>me</em> in Computer Science that I've written, namely item 5. Item 4 is prerequisites, sort of. If you want to understand some of the reasons I'm into computing and the questions that interest me you could do worse than read what follows. Note that I think Computer Science is <em>generally</em> one of the most interesting fields that exists because it lets you study anything: Games, AI (Psychology/Philosophy/Ontology/Nature of intelligence), Theory of Computation (Mathematical Foundations of Logic), User Interface Design/HCI (Psychology/Aesthetics/Usability), Programming Languages (Linguistics). etc...but what follows are my personal reasons, not general ones.**<br><br>4: I posted <a href="http://www.reddit.com/r/programming/comments/7t5vi/the_highlevel_cpu_challenge/">this reddit thread</a> yesterday but the topics debated are so interesting to me I'm going to post it again. Consequently, I've spent this morning peeking at <a href="http://www.memetech.com/">things like this</a>, and <a href="http://lambda-the-ultimate.org/node/3089">a</a> <a href="http://www.bitc-lang.org/docs/papers/PLOS2006-shap.html">lot</a> <a href="http://www.bitc-lang.org/docs/papers/APLAS2008.html">of</a> <a href="http://www.bitc-lang.org/docs/osverify-2004/osverify-2004.html">the</a> <a href="http://www.bitc-lang.org/docs/papers/PLOS2006-shap.html#brewer2005thirty">work</a> <a href="http://srl.cs.jhu.edu/~shap/">Jonathan Shapiro</a> has been doing over the last few years, particularly <a href="http://en.wikipedia.org/wiki/BitC">BitC</a> and <a href="http://en.wikipedia.org/wiki/Coyotos">Coyotos</a>. I came into programming last year excited about my understanding that to support <a href="http://gigaom.com/2008/11/08/programming-a-parallel-future/">the trend</a> <a href="http://blog.monstuff.com/archives/000333.html">towards</a> <a href="http://en.wikipedia.org/wiki/Parallel_computing">parallelism</a> we had to rework something significant on at least one of the following levels {<a href="http://en.wikipedia.org/wiki/Computer_architecture">Computer Architecture</a>, <a href="http://en.wikipedia.org/wiki/Operating_system">Operating Systems</a>, <a href="http://en.wikipedia.org/wiki/Programming_language">Programming Languages</a>}.<br><br>I also understood that the field had a lot of lovely innovations which (debatably) never conquered the mainstream such as <a href="http://en.wikipedia.org/wiki/Lisp_programming_language">Lisp</a>, <a href="http://en.wikipedia.org/wiki/Unix">Unix</a> on one side, <a href="http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs">Plan 9</a> on the other, <a href="http://en.wikipedia.org/wiki/RISC#RISC_and_x86">RISC architectures</a>, etc. One always has to struggle with <a href="http://en.wikipedia.org/wiki/Worse_is_better">Worse is Better</a>. Note that I did say debatably, Lisp/Scheme increasingly influence recent languages, Unix is slowly working towards the consumer market through <a href="http://en.wikipedia.org/wiki/Mac_OS_X">OS X</a> and <a href="http://en.wikipedia.org/wiki/Linux">Linux</a> and has always been strong in Industry, Plan 9...well...[pdf warning]<a href="http://www.superfrink.net/athenaeum/utah2000.pdf">Rob Pike has some interesting words</a>[\pdf], and Intel's x86 chips apparently hardware translate the <a href="http://en.wikipedia.org/wiki/Complex_instruction_set_computer">CISC</a> <a href="http://en.wikipedia.org/wiki/Instruction_set">ISA</a> <a href="http://www.reddit.com/r/programming/comments/7ecrl/ask_proggit_why_do_we_use_x86_processors/c06fx5r">down to some sort of RISC-like micro-ops</a>.<br><br>The point is the solutions which were elegant or "technologically superior" did not tend to be the ones favored by the market for various reasons. Note that I am not saying we all should be using Lisp Machines. These technologies were beaten in the market for good reasons but that doesn't mean they were a direction we shouldn't pursue. Consequently, I am beginning to understand that because the foundations of this industry which has taken over the world since 1970 are in many ways <a href="http://74.125.47.132/search?q=cache:Dnl1Us2w9RwJ:www.cs.berkeley.edu/~zf/papers/ivy-hotos05.pdf+Thirty+Years+is+Long+Enough:+Getting+Beyond+C&amp;hl=en&amp;ct=clnk&amp;cd=1&amp;gl=us&amp;client=firefox-a">fundamentally unsound</a> that we should harbor a desire to eventually rework those foundations. Namely by the insertion of abstractions to aid the modern programmer in issues of parallelism and secure and reliable code.<br><br>5: I guess the question that really gets me is, "<em><strong>Where should all this abstraction be?</strong></em>". That is, what are the right layers in which to have the abstractions we settle upon? I think a number of things suggest that the Computer Architecture and Operating System layers are not the correct ones and that the abstractions should wind up in our Programming Languages. Backwards compatibility and the price-performance competition with existing industry being the principle obstacles to Architecture and Operating Systems. Of course, once you've figured out where the abstraction should be you have to move on to "<em><strong>How do we create these abstractions and put them in their place?</strong></em>" or the question of implementation which is for all intents and purposes much harder. This has taken way too long to write and I'm pretty spent at the moment. Hopefully, I'll get a chance to flesh out these ideas later.<br><br>**/end nerdery**<br><br>PS: It's begun. Mike Miller was right. I'm doomed to be a Computer Historian...


title: Not my best day ever...
date: 2009-06-13 19:13:07.000000
format: html
content:
  So, I'm trying to be productive and having some difficulties. I've been low energy since Dad died and I don't think that's a secret. I'd really prefer a vacation to four accelerated summer courses and various other responsibilities. That said, this week was midterms and I've mostly survived. The grades won't be my best ever but I also don't think there is cause for much concern. Besides, I had a 3.76 GPA last semester bringing my cumulative (at SPSU) up to 3.4. I'll live.<br><br>I'm actually trying to wrap up the last midterm right now so that I can spend the remainder of my time between now and Tuesday working on Project 1 for Data Structures, the specficiations for which seem somewhat ambiguous to me. Anyway, back to work for now.<br><br>One quick note. <a href="http://www.theberrics.com/batb2.php">Battle of the Berrics 2</a> has started. Make your brackets, people! I've made mine, I'll detail it in a separate post soon.<br><br>And a quick song:<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">Groove Armada/Richie Havens - Hands of Time</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.andrew.cmu.edu/user/ntb/song1.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=625E4353515562&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: Notes from Bozeman
date: 2008-01-10 04:31:27.000000
format: html
content:
  I have learned that Montana is<br>a lonely state. Filled with that beauty<br>which could only belong to abject desolation.<br>They tell me it is the fastest<br>growing county in the state. And here<br>I can more clearly pick out:<br>the howling on the wind,<br>the tracks of my pursuers,<br>and the flock that will follow.<br>What is it, I wonder, that draws us<br>together in our loneliness? Is it some<br>incomprehensible wonder at an unceasing<br>orderless motion? I no longer search<br>the skies for a conductor. My search more often<br>turns inward. And there, clockwork reigns.<br>A silent oscillation between misanthropy<br>and optimism. A confusion at the whispered words<br>of justice. And no sense whatsoever<br>of how through it all a warm hearth is found.<br>And home.<br><br>By chance I left Neruda at home, whom<br>Yevtushenko reminded me of. By chance I found<br>that slumbering desire to be everyone, sense<br>everything, and connect with the ineffable essence<br>of the world. And though I may never<br>make peace with this curse of oneness I<br>am confident that there lies in wait for me<br>some richness to call mine that shall not fade.<br><br>But I am also unsure any of us<br>are deserving of such a future when<br>I see:<br>our capacity for insular obstinance,<br>our apparent lack of stewardship,<br>or our bottomless apathy, mindless consumerism,<br>moral ambivalence, and<br>petty categorical divisions<br>into imagined communities.<br><br>What will it take to stimulate interest<br>and invoke participation in the human<br>cause? Or shall we continue on as an inert<br>public, a chemical cesspool acting out the<br>steps of a process written long ago?


title: Now we're cooking with gas...
date: 2008-10-26 05:23:37.000000
format: html
content:
  As a word of warning, my blog may be a bit flooded with good old "linkposts" for the next few days. The biggest reason for that is I had a few old sessionstore.js files laying around that I had saved for one reason or another with good links in them. The other main motivation is that I'll actually refer back to stuff I post and/or link to in here as opposed to losing it forever. So...just thought I'd warn you in advance.<br><br>I've enjoyed trying to pick up cooking a thing or two since living on my own and I'm no master chef but I'm slowly getting a bit better. Perhaps unfortunately, I've been indulging in my darker side lately though and trying to perfect a Fried Chicken Recipe. I'm trying to come up with a good almagation by experimenting with 3 separate recipes:<br><a href="http://atourtable.blogspot.com/2004/12/buttermilk-fried-chicken-tenders.html">One</a>, <a href="http://74.125.45.104/search?q=cache:QJdAsN8Yk98J:www.elpasotimes.com/dining/ci_10538558+http://www.elpasotimes.com/dining/ci_10538558&amp;hl=en&amp;client=firefox-a&amp;gl=us&amp;strip\ =1">Two</a> and <a href="http://googleblog.blogspot.com/2004/05/chicken-la-king.html">Three</a>.<br><br>The last recipe (from Google's former chef) is particularly tricky because it's industrial-sized (30 cases of free-range chicken) and uses every spice known to man. I haven't quite gotten around to converting the measurements for our portions and figuring out how much money I'd sink into a spice rack. At least the second time I made chicken was considerably better than the first. I'll take slow but steady progress.<br><br>I think next I'd like to make a Chicken Caprese. Sonya made one that was lovely back when we were dating and I've poked around for some recipes but haven't found anything <a href="http://www.foodnetwork.com/food/cda/recipe_print/0,1946,FOOD_9936_31356_PRINT-RECIPE-4X6-CARD,00.html">quite equivalent</a>. I remember she served it over pasta (maybe with a mushroom cream sauce). I'll probably just ask Sonya for her recipe.<br><br>I know that Teresa and I are cooking at her parents for Thanksgiving. We rather foolishly requested the task. :-) Hey, if people pay, we'll cook. At any rate, I'm planning on deviating from Turkey and running with my mother's classic Pork Tenderloin for the main course. At some point on the trip though I'm hoping to try out Pioneer Woman's <a href="http://thepioneerwoman.com/cooking/2008/09/good-ol-basic-chocolate-chip-cookies/">Chocolate Chip Cookies</a> and <a href="http://thepioneerwoman.com/cooking/2007/06/cinammon_rolls_/">Cinnamon Rolls</a> recipes. I already made the <a href="http://thepioneerwoman.com/cooking/2008/08/dairy-contest-finalist-recipe-the-awesome-est-blueberry-muffins/">Blueberry Muffins</a> and they were lovely. Pretty much everything on her site looks fantastic. Maybe it's because she starts most recipes with a stick or two of butter. *sigh* My death approaches.<br><br>I also have some recipes for Tiropetes (cheese mixture wrappred in filo bread...mmm) and Greek Meatballs that I need to try in the near future. It'd be nice to pick up homemade hummus and <a href="http://recipes.ebox.cz/spanokopitta.html">spanokopitta</a> as well. Then all I would need to throw a Mediterranean cook-off at my house would be a good kebab recipe. Any pointers?<br><br>I'm also torn <a href="http://vietworldkitchen.typepad.com/blog/2007/06/chicken_pho_noo.html">between</a> <a href="http://steamykitchen.com/blog/2007/07/14/vietnamese-chicken-noodle-soup-pho-ga/">two</a> Pho Ga (Vietnamese Chicken Noodle soup, I swear by it) recipes and interested in grabbing a samosa recipe or two but <a href="http://www.google.com/search?hl=en&amp;client=firefox-a&amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;hs=bUd&amp;q=samosa+recipe&amp;btnG=Search">they're rather abundant</a>. A Thai Peanut Noodle recipe wouldn't hurt either. But I'll probably stick to <a href="http://www.atlsaigoncafe.com/coverpage.htm">Saigon Cafe</a> and <a href="http://www.theroseofindia.com/">Rose of India</a> for the time being to be honest. Other than that I just want to cook a Peppercorn New York Strip and bribe Dusty into handing over his French Onion Soup recipe. I tried one that was decent but it didn't quite knock me on my ass like his. I'll keep working on it.<br><br>Also, I now know I'm truly far into Linux nerd territory becuase I don't give a damn about the Gnome and Ubuntu discussions about how to envision a next-generation desktop and be competitive with Apple when it comes to user friendliness. First I had to explain to my Windows friends that I didn't care about playing video games anymore. Then I had to explain to my Mac OS friends that I appreciated control, freedom, tinkerability and programming potential to aesthetics. Now I'll have to explain to the Ubuntu people that I just want a command prompt, a tiling window manager and some package repos. :-)


title: Odds and Events
date: 2008-09-17 14:36:11.000000
format: html
content:
  Good morning. Plenty has happened since yesterday. Let's recap.<br><br>Nick Ali has written up some <a href="http://boredandblogging.com/?p=388">details about Atlanta Linux Fest</a> in his blog. It's this Saturday on Northside Pkwy from 11am-6pm, there's pizza for $5 and I'll have my laptop and my ArchLinux derivative in case you want to see it along with download links and (if I can get some blank CDs) hard copies. <strong><em>You should come!</em></strong> I'll make it fun. I promise. Don't you all wonder why I'm so crazy about this shit sometimes? You'll know.<br><br>I was wondering where I'd host the ISOs for my ArchLinux derivative. It looks like that problem is solved. I give you <a href="http://en.wikipedia.org/wiki/Badongo">Badongo</a>. They have a 700mb upload limit and files stay up until they're inactive for 90 days if you're a free member. That's pretty excellent. Hopefully, I'll put out releases every three months or so though they'll mostly be package updates in all likelihood. At some point in the future (circa me getting a new laptop) I plan to do an Arch64-based RedLinux build and get images for it online. Now if only I can get the RedLinux portion of my site up by Saturday...<br><br>In bad tech news, I may have to get a computer with <a href="http://www.apple.com/itunes/download/">iTunes</a> going just for iTunes U. I don't know if that content is DRM'd and I suspect I could strip it out anyway. I guess I'm still evaluating my options for <a href="http://redlinernotes.com/blog/?p=718">stealing an education</a>.<br><br>In neat tech news, I'm generally more excited than the stuff Amazon is doing with <a href="http://www.amazon.com/AWS-home-page-Money/b?ie=UTF8&amp;node=3435361">AWS</a> than the stuff Google is doing these days technically. Let it never be said that I don't think the <a href="http://arstechnica.com/news.ars/post/20080916-ahoy-matey-google-tries-to-patent-floating-data-centers.html">Floating Data Center idea</a> is pretty kick ass though.<br><br>Final tech note, Wordpress optimization seems to be about two things. <a href="http://elliottback.com/wp/archives/2007/04/15/why-my-wordpress-site-is-so-much-faster-than-yours/">Installing WP-Cache or something similar</a> and <a href="http://www.codinghorror.com/blog/files/matt-mullenweg-wordpress-mysql-recommendations.txt">database tuning</a>. I mean, really, it's about reducing the number of times that PHP calls or database accesses need to occur but I should learn more about databases. Later on that is, when I'm thinking about building real sites.<br><br>Note to <a href="http://www.benchwarmersgrill.com/clairmont.html">Benchwarmers Clairmont</a>: I know you have a 21 and over age limit set. I'm 22. My <a href="http://redlinernotes.com/images/she_is_hardcore.jpg">girlfriend</a> and my buddy Kris aren't. We won your trivia night last week and things were cool with us then. We showed up this week and someone ID'd the whole table and asked us to leave. Here's a hint: If we're not planning on ordering alcohol and just want to play trivia and eat food you're losing business by asking us to leave. It's not like we haven't been there dozens of times before. Just a thought.<br><br>I'm looking at various options for housing next year. Our lease expires in May and I'm not sure what I'll be up to or where I'll be working but I suspect I'll want to live in roughly the same area I'm in now. I don't know that I'd want to be in the same house. The rate is good, the location is good, the home itself is really pretty decent. That said, managing 5 people in a house is a little...bleh. Teresa and I are both fond of the idea of Post Oglethorpe as a lot of our friends are there and it's close to school for her. I'm not sure how I feel about <a href="http://www.everyaptmapped.com/apartments/atlanta,georgia,ga/post+oglethorpe.html">the prices</a> though. I'd certainly want 3 people in a 2 bedroom since there are cheaper options than Post Oglethorpe available. <a href="http://atlanta.bizjournals.com/atlanta/stories/2008/08/18/daily31.html">Post Oglethorpe was sold</a> just this August though. Maybe new management will bring changes. Time will tell.


title: Of Revolutions, or sometimes I think I should just act as a news feed\aggregator
date: 2007-05-04 00:17:00.000000
format: html
content:
  May 1st was a watershed day. It was a big day for digital revolutions for two reasons. One, Dell announced they would be selling machines with Linux pre-installed. Two, HD-DVD encryption was broken and when media companies tried to censor this fact the web denizens responded in a massive virtual riot. The tenuous connection between those two things is that they both demonstrate the growing power of networks over hierarchies where structures of organization or authority are concerned. I realize this may seem a ridiculous or unsubstantiated claim and if you want I'll argue it with you personally or in the comments. To start though I just thought I'd post a few links.<br>First, a link to the official dell announcement: <a href="http://direct2dell.com/one2one/archive/2007/05/01/13147.aspx">Ubuntu on Dell. Yay</a>.<br>Second, a nice visualization of the extent of the HD-DVD rioting: <a href="http://www.google.com/search?q=09+F9+11+02+9D+74+E3+5B+D8+41+56+C5+63+56+88+C0">900 thousand google results when I searched regarding the riot</a>.<br>Third, news stories about the HD-DVD rioting: from <a href="http://www.forbes.com/technology/2007/05/02/digital-rights-management-tech-cx_ag_0502digg.html">Forbes</a>, and the <a href="http://www.nytimes.com/2007/05/03/technology/03code.html?_r=1&amp;hp&amp;oref=slogin">New York Times</a>, <a href="http://thelede.blogs.nytimes.com/2007/05/02/the-day-the-digg-users-revolted/">twice</a>. I'm sure there are others.<br>Finally, a few different views and examples of the protest: <a href="http://www.youtube.com/watch?v=Qgj7Z52616Y">Youtube</a>, <a href="http://blog.sesse.net/blog/tech/2007-05-03-00-52_dear_helpdesk.html">IPv6 addresses</a>, <a href="http://www.pthree.org/2007/05/02/image-puzzle/">an Image Puzzle</a>, <a href="http://www.youtube.com/watch?v=L9HaNbsIfp0">a Song</a>, <a href="http://flickr.com/search/?w=all&amp;q=09+F9+11+02+9D+74+E3+5B+D8+41+56+C5+63+56+88+C0&amp;m=text">a flickr search</a> and our new celebrity of course has <a href="http://09-f9-11-02-9d-74-e3-5b-d8-41-56-c5-63.com/">it's own website</a>. <a href="http://09f911029d74e35bd84156c5635688c0.com/">Two, in fact</a>.<br><br>While I feel these produce a pretty good pastiche of May 1st's two events and their significance it may not be fully evident. If that's the case, let me know in the comments or contact me and I'll try to explain it in a short but thorough post later. I may just do it anyway...<br><br>Update: Added the flickr search link. Very cool. Also wrote that second piece but it didn't end up being so short.


title: Off Every Wall in the Building
date: 2009-06-25 14:11:15.000000
format: html
content:
  Quick thought: It may be the saddest aspect of contemporary American culture that we pursue quick fame and riches over what is worth doing.<br><br>Things aren't bad over here. School is wrapping up in the next two to three weeks so I'm about to enter another pseudo-crunch mode and I feel like I just wrapped up midterms and Spring finals before that. My plan is to try and spread the crunch out so as to not kill myself. To that end, I'll be writing a short essay on WMDs this weekend, starting CS Project 2 and hopefully starting work on my portion of the WMDs group project and my persuasive speech. My persuasive speech is about IP Law, of course. There are so many good things to say when it comes to IP Law. It's <a href="http://www.eff.org/deeplinks/2009/06/ascap-wants-be-paid-">more relevant</a> than most of my peers realize. (Note: I don't rock music ringtones.)<br><br>Also, <a href="http://brookrunskateboardpark.com/">Brookrun</a> really is an awesome skatepark. I plan to buy an annual pass and head over there at least once a week for a good while. Unfortunately, I busted my phone skating there last night. I bailed a backside 180 launching off some pyramid. Oh, well. I needed a new phone anyway. Now I just need an intermediary phone until I upgrade to a smartphone...which has me wondering, do I really need to upgrade to a smartphone? GPS and mobile Internet would be damn handy. Plus, they double as MP3 players and I could code for it if it was an Android or (presumably) Maemo phone. *sigh* Anyway, my running of two potential smartphones (<a href="http://engadgetmobile.com/tag/i7500">Samsung i7500</a>, <a href="http://engadgetmobile.com/tag/n900">Nokia N900</a>) has widened to three (<a href="http://engadgetmobile.com/tag/hero">HTC Hero</a>) as of yesterday's HTC unveiling. None of the damn things have release dates stateside though. Get it together US Carriers.<br><br>I've also been enjoying some of my music that I haven't listened to in a while. Old stuff, like Incubus. Seriously, Make Yourself is a quite lovely album as is Morning View. They probably qualify as summer music for me but then...<a href="http://www.last.fm/user/Redline6561/tracks">I listen to everything always</a>.<br><br>So here are four songs I've enjoyed rediscovering lately.<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">Modest Mouse - This Devil's Workday</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.snuhfiles.com/sound/modest_mouse-this_devils_workday.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=625B4A51515B6615&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><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">Modest Mouse - 16The Good Times Are Killing Me</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.celticsoup.com/goodtimeskilln.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=615C4656555D62&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><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">Incubus - Nowhere fast</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://saezien76.free.fr/Music/Incubus/Incubus%20-%20Make%20yourself/02%20Incubus%20-%20Make%20yourself%20-%20Nowhere%20fast.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=625F4554515F6A13&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><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">Winterpills - A Benediction</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://philipprice.com/winterpills/tunage/music/Winterpills_A_Benediction.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=60524B505D5A65&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: Official Fix for MIT-Scheme in Hardy
date: 2008-05-05 15:34:39.000000
format: html
content:
  Bug reports work! Finlay McWalter commented on the bug report saying that the package maintainer, Chris Hanson, found a fix for the issue. <a href="http://ubuntuforums.org/showthread.php?p=4868292">His fix</a> is far better than <a href="http://www.redlinernotes.com/blog/?p=897">my workaround</a>. Apparently, AppArmor is preventing applications (such as MIT-Scheme) from accessing lower memory. The fix is to edit /etc/sysctl.conf and change the vm.mmap_min_addr value from 65536 to 0. Afterwards, MIT-Scheme works just fine.<br><br>In other news, this has been a really disastrous Monday.


title: Officially Summer
date: 2009-07-21 01:17:25.000000
format: html
content:
  My summer has arrived. I've really just been recooperating since I turned in my last paper last Thursday. I've started work on a bunch of linkposts that will go up over the next week as I try to dump browser tabs like a madman. I'm definitely in excess of 100 tabs. It's bad. Other than that, I've been doing precious little. Mostly working on my social calendar. It's been nice. I have been exploring some Jazz though. I don't care if they're obvious picks, I've been really enjoying Miles Davis, John Coltrane, Bill Evans and Dave Brubeck.<br><br>At this point I'm practically decided that I should get a <a href="http://www.engadget.com/hub/htc-hero">HTC Hero</a> somewhere between now and next January to replace my current phone. It depends on when AT&T starts carrying them and at what cost. Other than that, my Battle at the Berrics 2 predictions were on point this weekend which was nice. That said, a part of me thinks it's going to come down to Torey Pudwill vs Paul Rodriguez based on footage of both of them actually playing skate. Whatever happens, it's sure to be ridiculous. Maybe I'll post a "revised" bracket at the end of Round 1, or each round, but no promises.<br><br>Baked some Chocolate Chip Cookies tonight from <a href="http://thepioneerwoman.com/cooking/2008/09/good-ol-basic-chocolate-chip-cookies/">the Pioneer Woman's recipe</a> but I think I'm looking for something a bit more chewy. Maybe I just need to bake them differently but I'll worry about that later. For now, I'm enjoying cookies. I'm going to go learn org-mode for a bit and try and organize some task lists to work on between now and August 24th when school starts back up. Linkposts and lisp code will be here very shortly, I'm sure.


title: On Aaron Swartz
date: 2013-01-13 12:36:00.000000
format: md
content:
  I can't remember a death feeling this much like a personal attack. The best way I can describe the *feeling* is this: One of my heroes was slaughtered by my government for defending my beliefs. Of course, the sad reality is that Aaron took his own life, persecuted or not. As a disclaimer, I never knew him over the net or otherwise but I always looked up to him as one of our brightest lights. As written in another article, I have always aspired to be more like Aaron and can see myself winding up in his position, fighting his battles. That's probably why he is the most significant activist of this generation for me. To everyone else who is grieving, I love you. Hold together and we will create the better world that Aaron was so clearly fighting for.

  EDIT: Initially, I had intended this post to explain in greater detail _why_ Aaron's death has affected me as much as it has. I couldn't quite find the words but John Atkinson has done a beautiful job capturing my feelings [on his blog](http://discountgeni.us/2013/01/13/why-am-i-so-upset-about-aaron-swartzs-suicide/). Please read it.

  Other articles on Aaron's death follow:

  * [Wall Street Journal](http://online.wsj.com/article_email/SB10001424127887324581504578238692048200404-lMyQjAxMTAzMDEwMzExNDMyWj.html)
  * [Washington Post](http://www.washingtonpost.com/blogs/wonkblog/wp/2013/01/12/aaron-swartz-american-hero/)
  * [New York Times](http://www.nytimes.com/2013/01/13/technology/aaron-swartz-internet-activist-dies-at-26.html)
  * [CNN](http://edition.cnn.com/2013/01/15/opinion/weinberger-aaron-swartz/index.html)
  * [Boston Globe](http://www.bostonglobe.com/metro/2013/01/15/humanity-deficit/bj8oThPDwzgxBSHQt3tyKI/story.html)
  * [The New Yorker](www.newyorker.com/online/blogs/newsdesk/2013/01/everyone-interesting-is-a-felon.html)
  * [Quinn Norton](http://www.quinnnorton.com/said/?p=644)
  * [Lawrence Lessig](http://lessig.tumblr.com/post/40347463044/prosecutor-as-bully)
  * [Cory Doctorow](http://boingboing.net/2013/01/12/rip-aaron-swartz.html)
  * [John Atkinson](http://discountgeni.us/2013/01/13/why-am-i-so-upset-about-aaron-swartzs-suicide/)
  * [Danah Boyd](http://www.zephoria.org/thoughts/archives/2013/01/13/aaron-swartz.html)
  * [Doc Searls](http://blogs.law.harvard.edu/doc/2013/01/12/losing-aaron-swartz/)
  * [Naked Capitalism](http://www.nakedcapitalism.com/2013/01/aaron-swartzs-politics.html)
  * [MuckRock](https://www.muckrock.com/news/archives/2013/jan/14/aaron-swartz-1986-2013/)
  * [QuestionCopyright](http://questioncopyright.org/remembering_aaron_swartz)
  * [Tim Berners Lee](http://lists.w3.org/Archives/Public/www-tag/2013Jan/0017.html)
  * [Eugene Eric Kim](http://eekim.com/blog/2013/01/aaron-swartz/)
  * [Derek Willis](http://dwillis.net/post/40483840271/on-aaron-swartz)
  * [Ben Adida](http://benlog.com/articles/2013/01/13/aaron/)
  * [Remember Aaron Swartz](http://www.rememberaaronsw.com/) and the corresponding [github repo](https://github.com/rememberaaronsw/rememberaaronsw)
  * [The Aaron Swartz Archive](http://archive.org/details/aaronsw)
  * Aaron's [Guerilla Open Access Manifesto](http://pastebin.com/cefxMVAy)


title: On Data Loss
date: 2011-10-27 21:02:24.000000
format: html
content:
  I've been meaning to blog more and have a more long-form, personal post in the works. Hopefully I'll get that out tonight. I don't reflect as much through writing as I used to and I miss that. Anyway, something interesting just happened at work. We have a beloved IRC bot at my office named olga. One of our favorite features of olga is that she'll write a haiku for us on demand. More precisely, we can give her a phrase that is five or seven syllables and she'll remember it. When we ask her to construct a haiku she picks two random 5-syllable phrases and a random 7-syllable phrase. The most impressive invocation of olga haiku I've seen to date is: "What we do in life / Is there a step I'm missing? / Inexorably". I wish *I'd* fucking written that. It's gorgeous. <br><br>So...I inadvertently deleted all of olga's sevens. Someone was asking for an example of how to *remove* an entry and I posted an example that apparently matched a perl regex to nuke the universe. So I trust perl even less now and I've never even actually used it. The fiasco resulted in <a href="https://github.com/thepeopleseason/olga/commit/9b2c50c7057e7c4483a7bc21e782fef2e940b684">this delightful github commit</a> fixing the vulnerability. We modify olga's haiku database a few dozen times a day conservatively. It's like a collective cultural store for our exceedingly delightful and nerdy hackers. After the chaos and laughter subsided, a coworker and I grepped through our irc logs of the past few months searching for matches to the "haiku add.*sevens" pattern. We'll probably be able to restore things decently enough. There are server admins with still more extensive logs we may be able to get access to...but that's not what's interesting about this to me. What's interesting about this to me...is the emotional response we had to the whole event which made me think that data loss with computers in modern times can be somewhat akin to a <a href="http://en.wikipedia.org/wiki/Phantom_limb">phantom limb</a> sensation.<br><br>Think about it. You have *no* idea how much data you have and, if you're a quirky statistical outlier archivist-type like me, only a vague idea of what the most important and recent elements in that dataset are. You probably don't even know *where* your data is. It's on Google's servers, Amazon's servers, your phone, your PC (possibly several) and maybe even your personal server. Even if you're not a hacker/computer type, you've got data coming out of your ears. In modern society, effectively *EVERYONE* is an information packrat. And the question is, what cognitive and emotional burden does that sort of behavior result in?<br><br>The most interesting part to me is that I suspect many cases of data loss aren't troublesome unless you're aware of them. We have *so much* data that unless you're sure an operation accidentally deleted data you didn't intend to lose, you might never miss it. How big is olga's 7-phrase dataset? I have no idea. But I honestly expect it's in the high hundreds if not thousands of phrases. If we lost 100 of them...would we ever notice? Doubtful. But *knowing* that a bunch of data was accidentally lost feels like losing property except for the fact that it's hard to assess just what value that property had, what measures can or should be taken to ameliorate the event, what meaning the loss really has.<br><br>This has funny implications for SciFi authors as well. The idea of memory diamond or some sort of storage medium for someone to record their entire life (<a href="http://en.wikipedia.org/wiki/Lifelog">lifelogging</a>) is predicated on the fact that no data would ever be lost...because at that scale, you simply don't know what is important and what can be lost because the *value* of the data is context-sensitive, especially temporally. Moments of nostalgia make it impossible to say, "Scrap this, lose that", and if you don't know what data has been lost then the whole thing is suspect. And don't laugh *too* hard, between Steve Mann, the MIT Media Lab and folks at Yale and elsewhere there's a decent amount of research towards making lifelogging possible. Anyway, I just wanted to get some of these thoughts down. It's definitely been another fun day at the office. :)<br><br>Editor's Note: Discussions with a coworker have reminded me of two things:<br>  1) We really are likely statistical outliers much more than this post suggests. I tried to hint at this possibility with the archivist bit but it's never the less important to reinforce.<br>  2) People obviously know the difference between important data and unimportant data. This interesting phantom limb-like effect really seems to come out with tons of miscellaneous, less important data (IRC logs, browsing history, etc) that you keep because you can rather than essential information or emotionally substantive data (photos, videos, MP3s, certain emails, etc).


title: On Inaction
date: 2013-03-04 16:28:00.000000
format: md
content:
  ### Seeing Value

  I've been experiencing the [Dunning-Kruger effect](http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect) a lot lately. At least, I've been feeling like a fraud. And while I could list reasons I'm not a great programmer, asking why I felt like a fraud has led me to something more interesting. I don't think I've worked at a company where I knew "where the money is coming from". What does that mean exactly?

  * I haven't worked for a company whose revenue comes from a product I use or want to use.
  * I haven't worked for a company in an "obvious" growth market.
  * The software I write generates revenue *indirectly* through customers I never interact with.

  All of this creates a surprising problem for me: The value I add is **opaque** from my perspective. I take it on the word of my superiors and peers that any value is present. This makes it essential that I trust and enjoy working with those people.

  ### The Mythical Customer

  It might not be immediately apparent why this is a problem. Find a company with decent people and culture and you don't need to be directly connected to the product or customers. Just churn out code and have fun. Advertisers will foot the bill. While it's true that you can sustain a business this way it certainly isn't ideal. The issue comes from just how decoupled the product becomes from the revenue. When it's time to grow revenue, you have to do it by attracting more eyeballs. Here's how that works:

  1. A Product Manager decides on new features or a UI overhaul to increase site traffic.
  2. Programmers implement those features with small tweaks and adjustments.
  3. The changes are released and traffic is measured for an increase. A good shop will use A/B testing to try and at least ground these decisions in data.
  4. Improved numbers are sent to advertisers to garner more customers and/or revenue.

  But Product Managers are not users. Programmers are not users. Advertisers are not users. Sure, we use the product some to verify the code works during testing but we're not *invested* in it. A/B testing is not the same as user input. There is also no requirement that you correlate traffic with actual perceived value. Many companies just read traffic **AS** perceived value. Frankly, that's bullshit. Our loyalty is necessarily to the advertisers. They pay us...but the users are the real customers. The product just happens to be paid for by collecting data about how they use it.

  ### So What?

  Thus far, none of this should surprise anyone who has worked in the tech industry. Hell, this shouldn't surprise anyone with a Facebook account. It points however to a serious cultural problem in many tech companies: not letting (or demanding) your technical experts be, well, technical experts. A friend of mine calls this "{} for $". Many people rant about this as "Taylorism in software". It cannot be overstated that no programming paradigm nor software engineering methodology will eliminate the need to connect engineers to the product. Similarly, letting the engineers take the reigns is not anathema to good product design or improved value to the business. And this is *not* new. Quoth Don Eastwood in a **1972** Status Report on MIT's Incompatible Timesharing System:

  > "In general, the ITS system can be said to have been designer implemented and user designed.
  > The problem of unrealistic software design is greatly diminished when the designer is the implementor.
  > The implementor's ease in programming and pride in the result is increased when he, in an essential
  > sense, is the designer. Features are less likely to turn out to be of low utility if users are their
  > designers and they are less likely to be difficult to use if their designers are their users."

  Earlier in the report, Eastwood says, `The system has been incrementally developed almost continuously since its inception.` Hello, agile kids. I'll say it again. Any company _pretending_ that software engineering methodology or a given technology replaces the need to connect engineers with what they're building deserves to be skewered. The reason knowing "where the money is coming from" is so essential is that software is different than any other product in history. Because the design in a fundamental sense *is* the product. If you don't know what I'm talking about, I'd encourage you to watch [Glenn Vanderburg's talk](http://www.youtube.com/watch?v=LlTiMUzLMgM) from RailsConf 2011. If your engineers don't understand the reason for what they're building, then the *product* can at best accidentally support the business. If you think you or your company can just scrape by for your whole career without getting eaten, I'd encourage you to [reevaluate that assumption](http://arstechnica.com/business/2013/02/androids-are-going-to-take-our-jobs-and-thats-great/).

  ### Finding Alternatives

  One big reason most companies are hierarchies more concerned with maintaining market position than creating value is the inherent risk. Real growth comes from bets and empowering people to change what's needed to find "a better way" or "The Right Thing"...and that's terrifying. Few individuals or institutions have the guts, bravery, and stamina for continuous reinvention. It's exhausting. Not to mention that it puts the focus squarely on a company's employees. It seems our best chance at winning big comes from those kinds of risks though. [Github](http://www.youtube.com/watch?v=mrONxcyQo4E) and [Valve's](http://assets.sbnation.com/assets/1074301/Valve_Handbook_LowRes.pdf) experiments in distributed management are a brilliant step in this direction.

  ### In the Interim

  A lot of what has had me feeling like a fraud is remembering how much I have to learn. Learning is a kind of reinvention itself though and one of the reasons I've loved computers since the beginning. So I'll keep learning and next time I'm in a programming interview, I look forward to asking the other hackers, `Do you know where the money is coming from?`


title: On Interactive Retrocomputing
date: 2012-06-18 04:27:59.000000
format: html
content:
  Lately, I've been working on an emulator for the <a href="http://en.wikipedia.org/wiki/MOS_Technology_6502">MOS 6502</a> processor in Common Lisp that I've been boring enough to name <a href="http://github.com/redline6561/cl-6502">cl-6502</a>. The emulator is basically finished as is the disassembler. There are also pretty solid docs. An assembler should be added soon and hopefully a helper utility or two and unit tests. But why do this? Well, for a couple of reasons.<br><br>1) I never did enough Systems Programming. I never did any assembly in college and wrote an absolute paucity of C (granted, that's my fault). I never learned enough about the inner working of Operating Systems or how to exploit memory hierarchies. I want to know more about how the machine works at a low level. Writing an emulator in a high-level language isn't a great way to do that but I wanted to anyway. Writing some assembly programs to run on this emulator might help though and I hope to do some of that later.<br><br>2) I was curious how concise, extensible, and performant an emulator could be written with Common Lisp. Most emulators are written in C/C++ for performance reasons. There are a few in Java (for portability?) or Javascript for what we now call portability but even these are not terribly high-level from a design perspective. I don't have all the answers to this question yet but I'm excited by some of the work I've done so far. In particular, writing macros for <a href="https://github.com/redline6561/cl-6502/blob/master/src/cpu.lisp#L184">Addressing Modes</a> and <a href="https://github.com/redline6561/cl-6502/blob/master/src/cpu.lisp#L255">Opcodes</a> has been quite helpful and I expect CLOS's :before, :after, and :around methods to go a long way where extensibility is concerned. I'm hoping the EQL-specialized methods, SBCL, and perhaps some shrewd profiling can lead to good performance. Also, <a href="https://github.com/redline6561/cl-6502/blob/master/src/disassemble.lisp">45 lines of code</a> for a 6502 disassembler doesn't seem bad to me. :P<br><br>3) <a href="http://www.youtube.com/watch?v=tjcvR5McmSg">ICU64/Frodo Redpill</a>. I'm not wild about static types and I tend to write tests after the fact because I view programs as clay until they're ready to be fired in the kiln. Roly Perera's work on <a href="http://dynamicaspects.org/blog/2012/06/10/self-explaining-computation/">self-explaning computation</a> interests me a lot as does Chris Granger's work on <a href="http://www.chris-granger.com/2012/05/21/the-future-is-specific/">Light Table</a>. Rapid feedback loops are important. Maintaining flow is important. As far as I'm concerned, all emulators should strive towards the sort of "peek/poke the machine" experience that ICW/Frodo Redpill offers. Games are a very easy way to get people to engage with computers. Everybody likes games. And lots of folks at some point in wondering about programming, ponder how much is involved in changing something about a game they like. With a system like ICU/Frodo Redpill they could literally /see/ the answer. Add an integrated editor and you're in pretty interesting territory. Feel like changing something about the "hardware"? Feel like having breakpoints and step debuggers pop up on arbitrary memory accesses or instruction executions? You got it. But ICU64/Frodo Redpill has this all locked down on desktops. Why not do as much as possible with HTML5, &lt;canvas&gt;, and Clojurescript? I'm not going to be the guy to come up with the next <a href="http://en.wikipedia.org/wiki/The_Mother_of_All_Demos">Mother of all Demos</a> ... but I hope to make something cool. And if I'm really lucky, I'll have something interesting to play with online by <a href="http://thestrangeloop.com/">Strange Loop</a> on September 23rd. I've already got a 6502 emulator. What's next?


title: On John Glenn
date: 2009-06-16 22:35:52.000000
format: html
content:
  I might as well go ahead and post this. I'm unlikely to objectify or improve the writing and I'm unlikely to ever be satisfied with it. I can't seem to toss it either. It does show some facet of the story. Please don't take what follows as sufficiently capturing my father.<br><br>In so many ways, I am not sure I will ever be able to explain John Glenn. And how could I? To some extent, it feels like he'll forever be the inside scoop that belongs only to my Mother and I. A sort of eternal "you had to be there". This is, of course, not entirely true. We are far from the only people to have gotten a glimpse of the man John Glenn was as the testaments of others indicate. But there is, I think, no substitute for being able to observe him up close and without pause for nearly 20 years. And it's quite tricky to explain just how blessed I am for being privy to the view. Blessed. That's a word I don't use a lot. I'm not a very religious man, certainly not as religious as my Mother. Or my Father. Yet in this case I'm not sure the word blessed covers it. So how would I explain it? The best I've been able to come up with so far is this: My Father was a man so good that my Mother and I were able to let him die. Had he been any less of a man, we would've been unable to bear his departure.<br><br>It sounds crazy, doesn't it? You would think that the more wonderful a man is the more terrible he is to lose. My Mother has suggested in conversation that she and I did well to not be selfish (as we usually are) and act supportive of him in his final days but that thinking seems erroneous to me. I disagree with the notion that such strength or fairness came from us. Indeed, my good qualities of that nature I have not acquired, I have inherited. In fact, it may be more accurate to say I came upon them by osmosis but I'm getting ahead of myself. In the days following his death, people had a great deal to say about my Father and the kind of man he was. It was very kind but mostly prosaic. I (and perhaps Mom too) kept our mouths shut not because we had few words but because we didn't want to upset people with the radicalness of our speech. The truth is, John Glenn must have been out of his mind because after a period of prolonged observation he decided to join himself at the hip with both my Mother and I. And that was over 15 years ago.<br><br>Due to social niceties, people hear that sort of talk and laugh and try to progress the conversation. Unfortunately, it's the truth. When Mom and Dad met, Mom and I were both a wreck. We both individually had some problems but the two of us together were so messed up that you'd have more optimism about fixing corruption in politics. Lost causes, I believe is the term. None of this, mind you, seemed to phase John Glenn. He placed himself right into the center of our world as though he noticed a chair with his name on it and simply knew it was where he was supposed to be. He became our rock. He kept Mom and I from smashing into each other like two great asteroids and spinning off into the void forever. The way he did it is in large part the thing I can't explain. One of his college friends described him at the reception after the funeral as "constant". Though such a simple description falls short it has the right flavor to it.<br><br>No matter how turbulent Mom and I got, no matter how serious our disputes or misbehavior, no matter our rage, John was calm, John was patient. But above and beyond that, he didn't join our yelling, he didn't engage in our hatefulness and he wasn't indifferent to our points of view. Mom has referred to him as a saint many times but I don't recall any stories of saints going through as many trials, or any so difficult. Again, social customs will tell you to take this last statement lightly. If I were you, I wouldn't. Dad was there through military school, through wrecked cars, through run-ins with the law, through run-ins with schools, through years of squandered opportunity and irresponsibility, through years of disrespect and animosity towards authority which simply did not befit a man of his character and warmth. I don't know if I'd call that patience, it's starting to sound like it borders on masochism. Maybe he was out of his mind. Of course, masochists endure punishment in pursuit of their own pleasure. John Glenn was never preoccupied with his own pleasure. He had higher ends.<br><br>Through it all, you couldn't help but observe that he was still loving, still calm and still supportive. He was constant. He was still there, not about to quit. He was still putting in more than good a faith effort, doing more than his part, giving it more than just the old "college try". And you had to get the sense watching that he had the right idea. He was a lot happier than I in my misery and angst or Mom as a worry wart. Victory through osmosis. If you can't beat em, join em.  John Glenn kept being the kind of person we all ought to be, until those of us subject to repeated exposure finally just came around. I'm actually not a little snot anymore and Mom is half-way to being as loving and patient as he was. That would be a lot for anybody but coming from where she used to be it's crazy. Just ask her.<br><br>It wasn't just that though. John Glenn made time for us. He worked from home so he could set his own schedule, so he could see us more and so that he could stop whatever he was doing to help us whenever we needed to talk to him throughout his work day. I'm honored to say I was in a band with him. That was in High School, you know, when your parents are supposed to be really lame. He played lead guitar, my friend played bass, I played drums. He picked up a dumb collectible card game with me in Middle School. In High School, I was supposed to read The Great Gatsby, The Scarlet Letter and Walden in a particular class so he got copies of all three and read them at night with me, highlighting interesting sections and discussing them with me later. Who does that? I mean, what kind of person voluntarily does that? He played video games with me and my friends. Not all of them mind you but he had a few. He'd try to know what I was interested in and even dabble or become passingly familiar with it to enrich discussion. And in later years we would go running at the park together. All that is above and beyond just putting up with me and my mother and keeping us from going crazy. That's the kind of man he was.<br><br>So when I say that if he had been any less of a man, Mom and I would've been unable to bear his departure, I'm not kidding. John Glenn didn't have an effect on our lives or treat us very well. John Glenn saved us. He taught us to love, to communicate, to wait for the right thing to come along, to have faith in ourselves, to have faith in living and just trying to do our best and make it. In the end, I think he benefitted from us to some degree but I can't call it parity. Of course, John Glenn was never watching the scales. I finally got my act together before the end and he got to see me thrive a little, thank goodness. Thanks to him, Mom and I are on excellent terms and won't tear each other to tatters. We can communicate. And as for Dad and I, well by the time the end was near in my mind there was no ground left to cover. No last minute questions or concerns. I didn't have to tell him how I felt the same way he didn't have to tell me. He had shown me.


title: On Languages and Libraries
date: 2008-11-04 03:41:19.000000
format: html
content:
  At this point there are a few languages I'm set on learning, a few I'm eyeing as potential future candidates, a few languages I'll dabble in and a few I'm trying to avoid for one reason or another. I thought I'd post about them and link to their main package indexes where appropriate. I'll have a more intelligent article on languages and libraries down the line.<br><br>Languages I'm set on learning:<br><a href="http://en.wikipedia.org/wiki/Scheme_programming_language">Scheme</a>: Scheme has several implementations and libraries depend on said implementation. I'm a Chicken Scheme and PLT Scheme fan so I'll be using <a href="http://planet.plt-scheme.org/">Planet</a> and <a href="http://chicken.wiki.br/Eggs Unlimited 3">Eggs</a> for libraries. I realize I vouched for Gambit Scheme a while back due to it's concurrency options with Termite. I hereby publicly retract that view and promise to update the On Schemes article or follow it up in the near future.<br><a href="http://en.wikipedia.org/wiki/Common_Lisp">Common Lisp</a>: I'm an SBCL fan and will happily use <a href="http://www.cliki.net/index">cliki</a> in my library questing. ASDF-Install does the rest.<br><a href="http://en.wikipedia.org/wiki/C_(programming_language)">C</a><br><a href="http://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a><br><a href="http://en.wikipedia.org/wiki/Forth_(programming_language)">Forth</a><br><a href="http://en.wikipedia.org/wiki/Java_programming_language">Java</a><br><a href="http://www.python.org/">Python</a>: Where I shall be aided through the powerful <a href="http://pypi.python.org/">PyPi</a>.<br><a href="http://en.wikipedia.org/wiki/Bash">BASH</a><br><br>Languages I'm keeping an eye on:<br><a href="http://en.wikipedia.org/wiki/Factor_programming_language">Factor</a>: And it's lovely <a href="http://docs.factorcode.org/content/article-vocab-index.html">indexed vocabulary</a>.<br><a href="http://en.wikipedia.org/wiki/Haskell_(programming_language)">Haskell</a>: The magnificent <a href="http://hackage.haskell.org/packages/hackage.html">HackageDB</a> will aid me in that quest.<br><a href="http://en.wikipedia.org/wiki/Erlang_programming_language">Erlang</a><br><a href="http://en.wikipedia.org/wiki/Clojure">Clojure</a><br><br>Languages I'll dabble in:<br><a href="http://en.wikipedia.org/wiki/JavaScript">Javascript</a><br><a href="http://en.wikipedia.org/wiki/Io">Io</a><br><a href="http://en.wikipedia.org/wiki/Lua_(programming_language)">Lua</a>: <a href="http://lua-users.org/wiki/LibrariesAndBindings">Bindings galore</a>.<br><a href="http://en.wikipedia.org/wiki/Perl">Perl</a>: For use with the almighty <a href="http://www.cpan.org/">CPAN</a>.<br><a href="http://en.wikipedia.org/wiki/Ruby_(programming_language)">Ruby</a>: RubyGems will be used in conjunction with <a href="http://www.railslodge.com/ruby_gems">RailsLodge's directory</a> for great joy.<br><br>I refuse to mention the languages I'd like to avoid. I'd likely start a flamewar for heaven's sake.


title: On Minimalism
date: 2009-11-15 00:09:07.000000
format: html
content:
  <h3>Introduction</h3><br>Today, I want to talk about something I've been meaning to get around to for a while. Specifically, I want to mention some realizations I've had about restrictions-as-strengths as it relates to programming languages. This blog post was so long in coming in part because I had conflated that issue with a desire to also discuss the source of brittleness (or non-modularity) in programs and how this all tied back to the foundations of programming and CS. Obviously, that's too much for one post. There are three questions here and each is important to me. Later, I'll blog about the other issues and hopefully write a summary to tie it all together.<br><h3>Background</h3><br>Programming is really hard. We've known this for a while. As <a href="http://en.wikiquote.org/wiki/Hal_Abelson">Hal Abelson said</a>, "Anything with Science in the name, isn't." Software engineering is no better off. Certainly no one would argue that we know how to build software as well as structural engineers know how to build bridges. Difficulty in software doesn't stem from a single source but as programmers we need to localize it as much as possible. One way we do this historically has been through tools: Our programming languages with their compilers, profilers and debuggers, our operating systems, and other bodies of code to reuse (libraries).<br><h3>The Meat</h3><br>Software has many demands placed upon it. First and foremost it needs to be functional by which I mean correct and relatively stable. Beyond that it needs to be reasonably fast and there are often other concerns from user friendliness to security. All of these concerns introduce complexity to our software, that complexity needs to be managed and I think a central question in managing that complexity is how to partition and quarantine it. I did <a href="http://redlinernotes.com/blog/?p=762">a rather poor and embarrassing job of at least raising that question</a> a while back. I was lucky enough to find <a href="http://www.storytotell.org/blog/2009/03/06/hiding-complexity.html">an outstanding attempt at an answer on Daniel Lyons' blog</a>. It was completely coincidental though, he hadn't read my article.<br><br>Daniel framed this problem as one of seeking minimalism. I see the same answer from a slightly different angle. To me, there seems to be a pattern of trying to handle complexity by restricting the actions of the programmer. For example, in Peter Seibel's Coders at Work there are numerous mentions of how different subsets of C++ are chosen by different teams of programmers to reduce the complexity of overlapping or interrelated features. People will entirely abandon templates or operator overloading. Douglas Crockford mentions making sure to <strong><em>never</em><span style="font-weight: normal;"> use the </span></strong><code>continue</code> statement in his code. These are examples of programmers simplifying their own mental model to make problem solving more tractable.<br><br>Languages do this too of course, the most prominent examples from my very limited experience being Haskell forcing you to think in terms of its type system or Factor forcing you to think in terms of its stack. Adapting to the constraints may be awkward or difficult at first but they do provide real benefits. The Glasgow Haskell Compiler is capable of remarkable optimizations because it can assume that you've adhered to the restrictions of immutability and laziness. Judicious use of the type system can eliminate entire classes of possible bugs and restricting the use of mutable state simplifies parallel programming and concurrency. Through use of the stack, Factor strongly encourages <a href="http://concatenative.org/wiki/view/Concatenative%20language/Simplicity">thinking about the dataflow</a> of your program. I've heard this sort of thing expressed before as a language being opinionated about how to solve a problem and there are plenty of diatribes on the failure of one paradigm (opinion) or another, <a href="http://apocalisp.wordpress.com/2008/12/04/no-such-thing/">especially</a> <a href="http://winterkoninkje.livejournal.com/58607.html">OO</a> since it's been dominant for so long. But let's not confuse this issue as being about particular paradigms or programming languages.<br><br>There are languages on the other end of the scale.  I tend to think of Common Lisp as the primary one. (Disclaimer: I've written far more code in CL than anything else. My coding experience in every other language is positively trivial by comparison.) Common Lisp has been described by many others as being agnostic or happy to let you express a problem any way you can think how. Then again, Common Lisp requires you to think in Abstract Syntax Trees. It's the rift between opinionated and unopinionated languages that I'm curious about. Of course, Haskell and Lisp are (generally speaking) <a href="http://news.ycombinator.com/item?id=942180">solving different problems</a> as lispm (Rainer Joswig) notes on hackernews.<br><br><a href="http://carcaddar.blogspot.com/2009/03/i-think-i-finally-understand-what-alan.html">Vladimir Sedach suggests that the rift is about metaprogramming</a>. More specifically, he states that Lisp and Smalltalk are self-describing computational systems. Lisp is written in Lisp. Smalltalk is written in Smalltalk. It's that old <a href="http://en.wikipedia.org/wiki/Meta-circular_evaluator">metacircularity</a>/<a href="http://en.wikipedia.org/wiki/Homoiconic">homoiconicity</a> chestnut. Furthermore, he mentions that Haskell can't be self-describing because it's built on <em>two</em> computational systems. The type system is one and the language built atop it is another. Besides as Vladimir says, "If type systems could be expressed in a metacircular way by the systems they were trying to type, they wouldn't be able to express anything about types (restrictions on computational power) of that system." Factor's FAQ even mentions that <a href="http://concatenative.org/wiki/view/Factor/FAQ/What's%20Factor%20like%3f">they avoided purity and static types to enable the benefits of metaprogramming</a> and interactive development. Personally, I know what I miss most in Haskell is an environment like SLIME. Interactive development of that style has an entirely different feel to me.<br><br>These observations about types and metaprogramming were a revelation to me and clearly, it's a limitation on the expressive power of something like Haskell. The question seems to remain open however as to whether or not such restrictions are enough of a strength to offset their cost. It seems to me that it must be situational<em> </em>but I'm interested in a more in-depth examination of the problem. Unfortunately, I can't offer such an examination myself today. Googling around a bit I found a discussion has started on hackernews about lisp while I wrote this. In the discussion <a href="http://news.ycombinator.com/item?id=942014">jerf writes largely about this issue</a>.  Jerf suggests that the other end of the restricted/unrestricted scale is Java which sounds about right to me. He also suggests that the problem with maximum empowerment languages is that they don't scale to large team sizes and (correspondingly) large programs.<br><br>Of course, there are counterexamples like ITA Software but macros were thoroughly debated even among friends at ILC 09 as <a href="http://danweinreb.org/blog/the-international-lisp-conference-2009-succeeded">harmful or helpful to team programming</a>. Vladimir Sedach again has a good grasp on <a href="http://news.ycombinator.com/item?id=645338">their utility</a>. In my opinion, neither Factor nor Lisp has resolved this question yet but more companies are getting involved with metaprogramming whether it be in Ruby or something else. I hope methods of containing the destabilizing facets of metaprogramming will emerge. Where Common Lisp is concerned, I think <a href="http://fare.livejournal.com/137450.html">Fare's XCVB is an interesting opportunity</a> in this direction and I'm watching it intently.<br><h3>The Takeaway</h3><br>Enabling single programmer productivity is important but so is enabling teams. Java as an extreme example of restriction has caused at least as many problems as it has solved. Languages with powerful metaprogramming features often need to be restrained in some fashion when used by large teams. There must be a middle ground somewhere. I say this because eventually our systems (codebases) become huge and unwieldy and we need our languages to support the difficult task of controlling that complexity and of keeping them modular and malleable. That problem of verbosity and inflexibility is precisely what metaprogramming tries to solve. I'll write about the problems in achieving modularity more in my next post.


title: On my birthday
date: 2010-08-07 04:04:40.000000
format: html
content:
  It's getting harder and harder to post. I'm done with summer classes. Two A's and a C, so Fall will have to be better. The C was in my easiest class funny enough. I've got 16 days of freedom left. Today was my birthday.<br><br>I felt compelled to post something...and I settled on poetry since I don't have my own words handy at the moment. I grabbed Neruda because I post too much Milosz and the page happened to fall open to this. It wasn't what I had in mind....but I might have to give up and just let it be.<br><br>The Son<br><br><br><blockquote>Ah son, do you know, do you know<br>where you come from?<br><br>From a lake with white<br>and hungry gulls.<br><br>Next to the water of winter<br>she and I raised<br>a red bonfire<br>wearing out our lips<br>from kissing each other's souls,<br>casting all into the fire,<br>burning our lives.<br><br>That's how you came into the world.<br><br>But she, to see me<br>and to see you, one day<br>crossed the seas<br>and I, to clasp<br>her tiny waist,<br>walked all the earth,<br>with wars and mountains,<br>with sands and thorns.<br><br>That's how you came into the world.<br><br>You come from so many places,<br>from the water and the earth,<br>from the fire and the snow,<br>from so far away you journey<br>toward the two of us,<br>from the terrible love<br>that has enchanted us,<br>that we want to know<br>what you're like, what you say to us,<br>because you know more<br>about the world we gave you.<br><br>Like a great storm<br>we shook<br>the tree of life<br>down to the hiddenmost<br>fibers of the roots<br>and you appear now<br>singing in the foliage,<br>in the highest branch<br>that with you we reach.</blockquote><br><br>PS: The more I read <a href="http://redmonk.com/sogrady/">Stephen O'Grady</a> and <a href="http://www.antipope.org/charlie/">Charles Stross</a> (and I've only read Accelerando and Halting State...and his blog over the last 3 months) the dumber I feel and the more I'm aware of how much I don't know but want to know.


title: On Precarity
date: 2008-09-23 00:36:54.000000
format: html
content:
  A number of my friends have started blogs recently and I'm pretty happy about it. Now I just need to talk Burke and Will into starting them. Anyway, I'll link to those guys later. This isn't about that. This is about being broke.<br><br>In addition to being jobless, I'm now carless. That car was a piece though, if sold will probably be sold at a loss and over 4 thousand dollars have been spent on it's maintenance as of tomorrow...since January. I'm normally pretty polite on here but FUCK THAT CAR.<br><br>That said, I think being broke has many lessons and interesting prospects and, to be honest, I can't say I'm sad about losing the car or my former job. Both are things I've been meaning to do for a while. I've figured out that I can now live (sans car+job) on $800 a month. I just need a source of income. Ha. Anyway, I have some interesting opportunities to explore in front of me and a short period of time to seize them. All the same, if you know of anyone needing I.T. help for around $20/hr or if there's a good way to work from home let me know. With all that in mind, I give you Sterling Hayden:<br><blockquote>"What does a man need—really need? A few pounds of food each day, heat and shelter, six feet to lie down in—and some form of working activity that will yield a sense of accomplishment. That’s all—in the material sense. And we know it. But we are brainwashed by our economic system until we end up beneath a pyramid of time payments, mortgages, preposterous gadgetry, playthings that divert our attention from the sheer idiocy of the charade.<br /><br>The years thunder by. The dreams of youth grow dim where they lie caked in dust on the shelves of patience. Before we know it, the tomb is sealed.<br /><br>Where, then, lies the answer? In choice. Which shall it be: bankruptcy of purse or bankruptcy of life?”</blockquote><br><br><p style="text-align: left;"><br>Damn right. Oh, one more relevant, and lovely, quote but this time from the ever quotable <a href="http://bushidobrown.livejournal.com/">Ben Grad</a>:<br>"I spent the summer looking for a job, and now that I have one I am mainly angry all the time.  Or at least all the time I'm in the office."<br><br>Think like Sterling Hayden, treat your lives like a challenging voyage (otherwise they won't be very interesting) and build them on a firm foundation of financial unrest.</p>


title: On Schemes…
date: 2008-03-05 21:28:56.000000
format: html
content:
  One thing I've been thinking about a lot lately (even if it's premature) is what <a href="http://en.wikipedia.org/wiki/Scheme_(programming_language)#Implementation">scheme implementation</a> I want to settle on. Presumably at some point I'll be developing real applications. Or at least applications that I'll want to be able to pass along to one or two friends. At that point I'll need a way to pass said applications on without asking the friends to download and install the scheme environment themselves. See, Scheme is a <a href="http://en.wikipedia.org/wiki/Lisp_programming_language">LISP</a> and LISPs are interpreted languages. There are native code compilers but they're not guaranteed.<br><br>So, my wishlist for a scheme implementation was something that was fairly fast, had a good <a href="http://en.wikipedia.org/wiki/Foreign_function_interface">FFI</a> because we live in an inexorably <a href="http://memeagora.blogspot.com/2006/12/polyglot-programming.html">polyglot programming</a> age, could compile native binaries to be passed on to whomever without requiring a scheme install on their part, and decent library\module support. Other interesting features would be support for concurrency, documentation and community size, the corresponding development activity, and <a href="http://groups.google.com/group/comp.lang.scheme/msg/e1a107ccd60810a3">R6RS compliance (or plans of compliance)</a>.<br><br>This already cut my options down pretty quickly. The standout option was PLT Scheme/MzScheme. Bill Clementson proclaimed it <a href="http://bc.tech.coop/blog/040111.html">the best open source LISP</a> and in the general case I might agree with him. Now, I am another person that disagrees with DrScheme as an editor but I wouldn't let that stop me from using it. There's no reason one can't incorporate it into emacs, after all.<br><br>However, I couldn't find a way to force PLT Scheme to produce a standalone executable <a href="http://tachyon.elem.com/pltdoc/drscheme/drscheme-Z-H-2.html#node_sec_2.6">instead of a launcher</a> and a cursory google does not lend me to believe that there is any way. That's more or less a deal breaker for me. PLT Scheme has incredible momentum and fantastic module support but what's a guy to do? There may be a way <a href="http://64.233.167.104/search?q=cache:QCmDuRmb2OEJ:download.plt-scheme.org/doc/103p1/pdf/mzc.pdf+standalone+executable+mzscheme&amp;hl=en&amp;ct=clnk&amp;cd=1&amp;gl=us">in here</a> but I'm not really looking to embed MzScheme in whatever standalone I want to produce.<br><br>As I said, the options were already limited. <a href="http://en.wikipedia.org/wiki/Ikarus_(Scheme_implementation)">Ikarus</a> is of course the closest thing to R6RS but it's still sitting at 0.0.3. It's receiving heavy attention but I wouldn't use it yet. It's more something to <a href="https://code.launchpad.net/~aghuloum/ikarus/ikarus.dev">keep an eye on</a>. <a href="http://en.wikipedia.org/wiki/Scheme_48">Scheme48</a> and <a href="http://en.wikipedia.org/wiki/Scsh">Scsh</a> would be great for Unix scripting but I'm interested in something with a larger community and more cross-platform nature.  <a href="http://en.wikipedia.org/wiki/GNU_Guile">Guile</a> has limitations to it's garbage collector that I question, it was designed as an extension language, and the community seems fairly small.<br><br><a href="http://en.wikipedia.org/wiki/Bigloo">Bigloo</a>, <a href="http://en.wikipedia.org/wiki/Gambit_(Scheme_implementation)">Gambit</a>, and <a href="http://en.wikipedia.org/wiki/Chicken_Scheme">Chicken</a> were the remaining options and of the three Gambit swayed me over. It's hard to say what factors exactly did the trick. Bigloo, Gambit, and Chicken all have FFI's to C and will generate native code. All three have active communities and decent module systems. I think what really compelled me in the end were three things, Gambit had some <a href="http://www.iro.umontreal.ca/~gambit/bench.html">impressive benchmarks (even though they were on the Gambit homepage)</a>, I was compelled by <a href="http://snow.iro.umontreal.ca/?tab=Home">Snow as a package system</a>, and the fact that <a href="http://lambda-the-ultimate.org/node/841">Termite</a> is implemented on top of Gambit and it had such lightweight threads was highly compelling. After all, I do think concurrency via lightweight threads and message passing is going to matter a lot down the road so that was a pretty enticing bonus. As a final bonus, <a href="http://bitwize-devblog.livejournal.com/5566.html">it runs on the OLPC</a>.<br><br>So, now I had to figure out how to set it up. I won't keep you waiting but I should first note that I'll be installing the terminal (no-X) version of emacs because GTK emacs annoys me (aesthetically speaking).<br><pre><br>sudo apt-get install emacs-snapshot-nox gambc</pre><br>Create a desktop launcher thusly:<br><pre><br>locate emacs-snapshot.desktop<br>sudo nano /your/path/to/emacs-snapshot.desktop</pre><br>Change name to Emacs Snapshot (nox)<br>Change Terminal to true<br>Change Exec to /usr/bin/emacs-snapshot-nox)<br><br>Then install <a href="http://www.neilvandyke.org/quack/">quack</a>:<br><pre><br>cd /usr/share/emacs/site-lisp<br>sudo wget http://www.neilvandyke.org/quack/quack.el</pre><br>And to start out you'll want to edit your .emacs using<br><pre><br>sudo nano ~/.emacs</pre><br>to look something like this:<br><pre><br>(require 'quack)<br>(custom-set-variables<br>  ;; custom-set-variables was added by Custom.<br>  ;; If you edit it by hand, you could mess it up, so be careful.<br>  ;; Your init file should contain only one such instance.<br>  ;; If there is more than one, they won't work right.<br> '(quack-default-program "gsi")<br> '(quack-pretty-lambda-p t))<br>(custom-set-faces<br>  ;; custom-set-faces was added by Custom.<br>  ;; If you edit it by hand, you could mess it up, so be careful.<br>  ;; Your init file should contain only one such instance.<br>  ;; If there is more than one, they won't work right.<br> )</pre><br>And last but not least, a few choice commands:<br>C-x 1 kills all other windows<br>C-x C-s saves the buffer<br>C-x C-c exits immediately<br>M-x run-scheme RET drops you into the repl<br>C-d backs you out of runlevels<br>C-/ is undo<br>ESC-` Menu Bar<br><br>Snow will come next<a href="http://www.acooke.org/cute/GettingSta0.html">...</a>


title: On Slow Processing
date: 2011-06-29 04:25:49.000000
format: html
content:
  To paraphrase the writing of Matt Albie, "This is not the blog post we intended when the week began." <a href="#ref-1">[1]</a><br>Ed. Note: This is 1000 words of self-indulgent drivel. Welcome to the World Wide Blogosphere.<br><br>Things have been moving wildly fast of late. It's been pretty damn hard to know what to make of it, frankly. As a consequence of things moving so fast, I've been pretty far outside my normal routine for over a month...almost 2 months. In some ways, I view the divergence and my activities (vastly more drinking and socializing than normal) as a coping mechanism. You've got to try to either make sense of the new world or keep yourself from being freaked out or crippled by it. Evolve. Fast. Under the surface, I know that the real work is going on. The slow processing. I *hate* slow processing.<br><br>Slow processing is what happened after Dad died a little over 2 years ago. It's what happened after I broke up with Teresa a little over 1 year ago. Thankfully, this year has been a brighter, less traumatic side of slow processing spurred on by graduation, an apartment with one of my dearest friends and a truly great job. Slow processing is important. It helps you figure out where you went wrong or what has changed about your circumstances and environment that necessitates new goals and outlooks.<br><br>I think in a lot of ways, I'm doing slow processing because I only had my life figured out this far. Survive to 20s, get a good job...blank space. That's stressful. And terrifying. I know I want to be married at some point though I still have a lot of fears about having kids. In part because a) you have to take as a given that you're going to make serious mistakes and b) there are enough people doing it that there's no way to distinguish yourself or your kid. The amount of faith required is tremendous. It gives me respect for the people that do it in some ways...but I'm sort of wary and distrustful of the whole enterprise. Then again, you can't fix the earth having too many of the "wrong kind" of people without trying to make some of the "right kind". Some huge presumptions and judgments being made in that very sentence though, eh? Who has the right to reproduce? Unfair.<br><br>My bigger problem is that I don't know what my personal goals are. I'm settling into a rhythm now, getting back into exercise, cooking, skateboarding and hobby hacking (though only on the weekends, weeknights I'm still drained from work). My boss and others seem to be satisfied with my performance at Cox so far and I'm thankful for that. I, however, am much less satisfied. I don't want to say *unsatisfied* but I'm certainly not patting myself on the back and thinking I'm a bad ass when I get home. It's more like, "Keep at it. You'll get there." ... if not necessarily that gentle and kind. You have to push yourself, you can't trust *anybody* else to know your limits or do it for you. I was thinking earlier that your 20s is all about being (almost) totally and consistently unsatisfied with your performance and position in life...but it makes more sense to me as a lifelong outlook really. That said, you *have* to find a way to do it that doesn't tear down your efforts to improve and demotivate or it just destroys you. I'm still working on that...<br><br>So where does that leave us? It's back to that very tiresome, age-old question of what matters. I've got limited time here, even less of which when my body is in peak physical condition and tonight I wanted to run until the whole thing turned to slag. I think marriage is important to me personally because I want to share and trust myself with someone. I don't want to wonder who will provide a good sounding board for my thoughts at a given time...and the world moves too fast and life is too short to spend alone. As for life goals, I don't have a good grasp on them at the moment. I read about some of the work done on Google+ today and have been following various compiler developments with a decent amount of interest of late. I doubt I'll ever be quite that good a programmer. The sacrifices are significant.<br><br>So what can I do in my time that matters? I'm fine with the answer that "nothing really matters" and I do not say that with a heavy heart. There's something very beautiful about the arbitrary right to sketch out and gradually stumble upon or decide the meaning of your existence. Sure, only a handful of people will notice your absence a year after your death and only a handful more will really hinge on your existence while you're alive. So what? That's plenty to live for. But I don't think it answers the question of real, higher-level goals and objectives. So do you strive to be the best in the world at something you care about? Or love people near to you and have a content, maybe average, life? I don't know. I'm a little disgusted by too much self-indulgence and taking it easy. It seems like settling too much, though that word and my mental approach to the question is condescending, pre-judgmental and full of bias. Then again, I'm not motivated enough by a particular cause to forgo consideration of the self and forsake all else whether the cause be civil liberties, IP law, art or optimizing compilers. I guess I'm just in an awkward middle period again. As my good friend Max would say, "C'est la vie." As the office IRCbot olga has said, "What we do in life... / Is there a step I'm missing? / Inexorably."<br><br><div id="ref-1"><br><h6>[1] Watch more Studio 60. It's good for you.</h6><br></div>


title: On Trunks
date: 2009-04-14 04:25:27.000000
format: html
content:
  I can't believe it's mid-April. That's just wrong. Everything is going really well but it's hard to believe how fast this semester has gone by. Last week was pretty good. It just seems like so much is happening. I'll say this, I have a really fantastic and interesting group of friends whom I deeply care about. It's good stuff. This morning was adventurous. No fewer than three trees came down in our yard. It was pretty epic.<br><br>One thing that helped a lot lately was a song...<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">John Hiatt - Have A Little Faith In Me</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://boxstr.com/files/4845247_eamhj/05%20-%20Have%20A%20Little%20Faith%20In%20Me.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=6258425750546314&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><br>Things haven't been easy in a lot of ways and it's been hard to keep the faith. Then again, I don't seem to be the only one that's struggling right now. Also, this is going to be another rather linkpostish entry. Sorry.<br><br><a href="http://www.youtube.com/user/ucberkeley">UC Berkeley has a youtube channel</a>. More and more institutions are doing this (The Obama Administration, anyone?) and I think it's a good thing. Stanford has some too but I'm more specifically interested in <a href="http://www.youtube.com/view_play_list?p=35AB6393499F79BF&amp;page=3">their CS</a> <a href="http://www.youtube.com/view_play_list?p=2562A626EBE02183">Colloquia</a> than anything else I've seen.<br><br>Speaking of the Obama Administration, I'm a bit frustrated with them and there are two primary reasons. One is that, apparently, <a href="http://rc3.org/2009/04/13/obama-abandons-habeas-corpus/">Habeas Corpus is too good for some people</a> even though we're shutting down Gitmo. I spoke to a friend today who remarked, "What on earth is there that two consecutive presidents would be afraid of releasing?". I hope it's not the will and fury of a fickle American public. The second is that they've actually <a href="http://www.eff.org/deeplinks/2009/04/obama-doj-worse-than-bush"><strong><em>STRENGTHENED</em></strong><em></em> the Bush Administration's position on Warrantless Wiretapping</a>. I'm particularly livid about this because this is one of the biggest reasons I wanted Obama in office in the first place. The Consitution is increasingly in tatters and I'm pretty sure that counts as a broken campaign promise. The EFF's <a href="http://www.eff.org/deeplinks/2009/04/bankston-on-olbermann">Kevin Bankston spoke about it on Countdown with Keith Olbermann</a>.<br><br>Here's one link that just doesn't go anywhere else. It's a <a href="http://en.wikipedia.org/wiki/The_Unreasonable_Effectiveness_of_Mathematics_in_the_Natural_Sciences">very interesting Wikipedia article about Math in the Sciences</a> and relates to some of my ideas about math being "<a href="http://redlinernotes.com/blog/?p=719">the Thing at the Bottom</a>". I may write a little more about that later on but I've been thinking about it a little more often lately.<br><br>I've been a little interested in <a href="http://en.wikipedia.org/wiki/Live_coding#Live_coding">live coding</a> lately but the <a href="http://www.slavepianos.org/rd/sw/sw-01/help/tutorial/tutorial.lss">available software is</a> <a href="http://www.slavepianos.org/rd/sw/sw-01/help/tutorial/tutorial.lss">still not quite</a> what I'm looking for. That said, <a href="http://impromptu.moso.com.au/">Impromptu</a> is the closest if only it wasn't OSX-only. I hate non-cross platform software in 200x. I even considered <a href="http://www.insanelymac.com/forum/index.php?showtopic=128832&amp;mode=threaded">installing Hackintosh OSX on my X200</a> to get it going. I'll probably end up playing with <a href="http://www.pawfal.org/fluxus/">Fluxus</a> as it seems like the next best thing but it has to be built from source. *sigh* Gross! At least <a href="http://aur.archlinux.org/packages.php?ID=18055">there's an AUR package</a>.<br><br>Now that <a href="http://www.archlinux.org/news/443/">Kernel 2.6.29 and an updated X stack and Intel video card drivers are downstream</a>, the software release I'm most looking forward to is <a href="https://wiki.mozilla.org/Firefox3.5">Firefox 3.5</a>. I spend a large portion of my life in that browser so any significant updates, especially those with performance improvements, are a big deal. Mozilla is already <a href="http://arstechnica.com/open-source/news/2009/04/mozilla-reveals-roadmap-for-firefox-36-scheduled-for-2010.ars">planning for Firefox 3.6</a> however and they seem to have quite ambitious plans indeed. Unfortunately, one other project I've been eyeing for quite some time seems to be struggling. OpenMoko, whom I was hoping would eventually produce a replacement for my aging Nokia phone, <a href="http://arstechnica.com/open-source/news/2009/04/openmoko-hits-a-snag-hangs-up-on-its-next-gen-phone.ars">appear to be struggling mightily</a> and the later models I was hoping for have been cancelled I'll together. I'll be crossing my fingers for their survival. They were indeed innovating but look like they might go the way of the OLPC project. Reinvention into obsolescence.<br><br>Beyond that, there have been a few cute things on Reddit of late. A <a href="http://www.indiangeek.net/programmer-competency-matrix/">Programmer Competency Matrix</a> got put up recently and was, of course, lambasted for being bullshit. That said, it's cute and fun and for CS *students* it would serve as a pretty decent reminder for the things they ought to really have down by the time they enter the workforce. I'm talking about the log(n) column too not just the other stuff.<br><br>I'm a little confused about <a href="http://wiki.archlinux.org/index.php/CPU_Frequency_Scaling">CPU Frequency Scaling</a>. I've removed cpufreq from my Daemons array due to <a href="http://redlinernotes.com/blog/?p=800">reasons I mentioned before</a>. Namely, it wasn't doing anything and may have actually been causing problems. Now this guy is talking about how <a href="http://jasondclinton.livejournal.com/72910.html">it's fail anyway</a>. This is the same cpufrequtils we're talking about right? How did this get so widespread as good practice? Silly herd mentalities. Shame on me!<br><br>I hope to start exposing myself to new music a bit more regularly. Between <a href="http://www.last.fm/home/recs">Last.fm's recommendation engine</a> and the backlog of pirated songs spanning everything from <a href="http://en.wikipedia.org/wiki/Tapes_%27n_Tapes">Tapes 'n Tapes</a> to <a href="http://en.wikipedia.org/wiki/Triosk">Triosk</a> I think I'll be busy for a while.<br><br>I'm still distracted by personal code but I'm doing an awful job spending time on it. There's a nice article <a href="http://www.xhbml.com/archives/42">here</a> about using Lisp for shell scripting. I love that kind of small practical example, even if you get looked down upon for being a newb reading it. You've got to teach yourself somehow and bootstrap yourself somewhere, right? I'm also looking forward to trying out <a href="http://excess.org/urwid/tutorial.html">Urwid</a> this week to work on a user interface for Pycooker. If I have problems I can always fall back on <a href="http://www.amk.ca/python/howto/curses/">Curses</a>. More on the abomination of my intended progress later.<br><br>Finally, I'd like to cook these <a href="http://fleagirlsfleas.blogspot.com/2006/09/cream-cheese-wontons.html">Cream Cheese Wontons</a> sometime in the near future but I don't know where I can get some wonton skins. Anybody have any ideas? That's all I can think of for tonight. Now if only I didn't have school in a few hours.


title: On Visible Programming
date: 2012-09-26 20:13:00.000000
format: md
content:
  I have a bad feeling that I'm about to piss off a lot of people. Oh, well.

  [Bret Victor](http://twitter.com/worrydream) gave a very interesting talk at [Strange Loop](http://thestrangeloop.com) called "Visible Programming". From what I can tell, Bret is a very smart guy and an accomplished UI designer. I was surprised to find that while I agreed with many (all?) of his premises I disagreed with most of his argumentation. As I've received a question or two about it, I'll try to clarify my thoughts here.

  I have three core points:

  1. His vision requires [reflection](http://www.p-cos.net/documents/s32008.pdf) and an editor is the wrong place for it.
  2. Many examples were domain-specific and/or trivial but he didn't talk about general editor extensibility.
  3. Much he suggests is already done or can be done with some solid effort and available technology.

  ## On Relective Systems

  Ironically, I gave [a talk](http://redlinernotes.com/docs/talks/wtdm.html) on a different but overlapping topic a few weeks back. As mentioned in Chris Granger's talk, examples like the ones he and Bret Victor gave are much easier when working with a dynamic runtime. Unfortunately, dynamic is conventionally interpreted as a language with dynamic types and, put simply, we should try to change that. I argue that a dynamic language is one that allows you to inspect values and update function and class definitions while the program runs. This is formally known as [reflection](http://en.wikipedia.org/wiki/Reflection_(computer_programming)). What *I* believe dynamic language advocates care about is the ability to work with a "live" system, not the presence or lack of static type checking.

  Being able to visualize program execution means having a snapshot of the program state during each step of execution. Setting aside the impractical size of such a thing for programs with arbitrarily large working data sets, this requires either A) annotating every line or function call with logging statements/function tracing, or B) instrumenting the language runtime in some fashion to retrieve values during execution. That's why these examples are much easier with a reflective language like Javascript where you can hook arbitrary behavior into the Object prototype.

  Trying to get an editor to do this for all languages is a fool's errand without a nice reflective runtime and API to retrieve data from. It's hard enough with that stuff! And that means we need reflective compilers and interpreters *before* we can have an ideal editor.

  ## On Editor Extensibility

  Many of Bret's examples were highly domain specific. While it makes sense to have a simple interface for toying with values in a visualization/drawing program, it's harder to see how to usefully apply that to something like protein folding software or even RSS feed parsers. Having editor extensibility *in addition* to reflective systems enables arbitrary widgets or modes for dealing with a given problem domain or data visualization need. Plain and simple, there's no way to build-in useful visualizations that are universally applicable. I admit I am not a designer or gifted at visualization so I may have simply struggled here.

  ## What can be done today

  Bret essentially wants to make the experience of programming more tractable through interactivity and tangibility. He suggested 5 key requirements:

  1. Enable the programmer to read the vocabulary.
      * Mouseovers/tool-tips on all source tokens is largely available today and seems to address this.
  2. Enable the programmer to follow the flow.
      * A visualization to step through execution could be written *somewhat* easily given something like Common Lisp's [trace](http://www.sbcl.org/manual/Function-Tracing.html).
  3. Enable the programmer to see the state.
      * This is essentially a more elaborate visualization that requires a bit more trace data than the above.
  4. Enable the programmer to create by reacting.
      * Suggests that editor not only autocompletes function names but default values too so you can see their effect immediately.
      * Function name autocompletion exists in many IDEs. Pervasive default values are easier for typed than "untyped" languages. Still requires runtime support!
  5. Enable the programmer to create by abstracting.
      * Essentially demonstrated a refactoring system here. Keep feeling like I missed something key about his argument.

  ## TL;DR

  While philosophically well-formed, Bret seems to miss the fact that *runtime support* is required for a Visible Editing Experience to emerge. If the industry still doesn't understand that dynamism is about the runtime rather than types, clamoring for a magic editor will get us nowhere. I want to see a more interactive, tangible environment in the future as well but we cannot get there by arguing that IDE/editor writers need to step up their game. We need to make a concerted argument for the resurrection of highly reflective systems in both research and industry. Once systems with [robust reflective capabilities](http://www.vpri.org/pdf/rn2006001a_colaswp.pdf) are widespread, realizing a vision such as that described will be a week long hack rather than a decade-long million man-hour slog.

  I'd also like to examine how far reflection can scale and a bit about making such a thing applicable to both novices and experts but I need more time to compose my thoughts so I'll save that for a future post. Any comments on this post or its mistakes, of course, are welcome.


