Skip to content

A Small Update

08-Feb-10

It’s been a while since last post. I’m going to try to maintain that this year. If I don’t have something worth putting up, screw putting something up. Maybe there will be some longer, better written essays as a result. For now, I’m putting up poetry which I haven’t done in a *long* time. Wrote this one on the bus to school. Feels okay. PS: I’ve really fallen in love with Band of Horses first album.

Dopplegangers
I can only see another in you and
how she must wind up in 10 years,
though I barely knew her.

So you have a husband, two daughters.
Biscuits in a cafe on a cool Sunday.
A man seemingly earnest, invested.

Is this what becomes of us?
I remember it differently.
Lazy promises I made myself
about who we each would be.

Please, let us remain ever becoming.

Paktahn 0.8.2 and other news…

13-Jan-10

The last week has been thoroughly insane in ways both good and bad. As a gift, I had my thoroughly aged Nokia 6010 replaced by a shiny new Nexus One. Much as I would’ve liked an N900 they aren’t subsidized by any carrier and so will remain out of my price range. I’ve also switched service to T-Mobile and thus far been quite satisfied. Then again, coming from a phone without a data plan I have no way of evaluating the 3G I’m getting.

The holidays were good. I have a skateboard again so when the weather clears up I can get back to enjoying that.  Time with mom was really good as was some peace and quiet and time to reflect. I took the opportunity to discover some new music as I usually do and also to read two novels by Vernor Vinge that I thoroughly enjoyed: A Fire Upon the Deep and A Deepness in the Sky. Careful, those wiki links have spoilers. As for the music, I’ve considered compiling a top 5 favorite albums of 2009 list but haven’t gotten around to it. Besides, last.fm should tell you most of that. I will say I’ve been deeply enjoying Jon Hopkins, Ametsub and Minus the Bear this week. It’s kind of an odd mix.

Moving on, I got back into code last Tuesday after a long holiday absence. I really needed the break to recharge. 2009 was a full year. I spent the bulk of the second half of last week and the weekend writing code, reading code or screwing around with configuration files…which are all things I enjoy a good bit. Over the break I had fooled around with a new window manager (StumpWM in lieu of XMonad) and started using clbuild instead of asdf-install. I also spent a little time adding a lot of projects to clbuild in case I felt like playing with them. In the course of all this fiddling, I made a fresh archlinux install in a new partition with essentially nothing but Lisp and C compilers, a tiling window manager, Chromium, Emacs and a music player. To some degree, I’m fleshing it out still. It’s a dumb diversion but every now and then I just have to rip my system up a little. It’s hard to explain.

On Sunday, after 3 months of work Leslie and I finally made the Paktahn 0.8.2 release. For all intents and purposes, the wait was worth it. A lot of new features and fixed bugs are present but there is still so much on my Paktahn.todo list. And of course there are bugs to fix. It’s hard to explain why I’m so invested in Paktahn. Part of it is the work I’ve put in to date, part of it is how pleasant it’s been working with Leslie and how much I’ve learned. Another large part is that there is great joy in having written some part of my day to day software and having a (relatively) deep understanding of it. It’s kind of silly because AUR Helpers are a dime a dozen (or two dozen) but I’m still having fun.

The Paktahn release was not without some drama though. Almost immediately after the release I started having odd issues building paktahn with sbcl. The resulting executable would exit as soon as you ran it complaining of a fatal error and a lost gc invariant. Not what you want to see. The bad thing was the error was intermittent and I couldn’t isolate the cause. I had issues with it in my old archlinux install as well as the new one, with old and current checkouts of my code and with a checkout of Leslie’s tree. I’m pretty sure I tried it with a fresh, recompiled sbcl and also tried removing all fasls and recompiling. I got very confused in the course of all that trying to figure out what happened. I should’ve been taking notes. At this juncture, it builds fine again and I can’t get it to act up. :( Ah, well. At least I can get back to developing. It certainly gives me some impetus to finish the CCL port I started Dec 28th.

So on to school this semester. I’m interning at a company called Kloudshare and have begun work on open sourcing a portion of their code. It’s good fun and I hope to have more to share on that note very shortly. The administrative person I spoke with before break failed to get the internship registered in SPSU’s system though so I spent a good deal of Tuesday getting that worked out with her. Then I had the unpleasant experience of learning that online courses are *substantially* more expensive than offline ones. Apparently, the state doesn’t subsidize them because they can be taken advantage of by anyone or something like that. In my case, I was just trying to avoid an hour and a half commute both ways and try to find more time to code. I guess you really can’t have it all. Now I have to jump through more financial aid hoops. Joy.

Soon I hope to have some code to show here. Maybe I’ll spend 10 minutes and just throw my dotfiles up on github for the hell of it tomorrow. Other than that…I miss long form writing, poetry, essays…but my focus is elsewhere. Plus I’m tired. The rest will have to wait for another day.

2010 Already?

01-Jan-10

It’s hard to believe it but the new year is already upon us. 2009 was a big year. Dad’s death was a serious blow but I have to recognize that a lot of good came my way too. I started genuinely programming, moved into an apartment with Teresa and finished half of a BS in CS at SPSU. One more year like last year and I’ll at least have a diploma…but the further I go down the programming rabbit hole, the more ignorant I realize I am. It’s not like I’ll even approach competence at the end of 2010. Oh, well. That’s how it is and I can deal with that. Hell, I think that’s part of why I like what I’m doing.

Speaking of programming, I haven’t done near enough of that over the break but I’m trying to get back on top of things this week before classes start. At least my classes this semester require code. I also have a cool internship lined up. Yet another reason to get coding. I made a number of resolutions last year, some successful, some not. I blogged regularly but I didn’t exercise enough. I maintained a 3.5 or better GPA the first two semesters but didn’t excel during the fall. Some of that may have had to do with Dad’s death, I really hadn’t expected him to die in 2010. I think more of it had to do with burnout (on SPSU, not CS) and not liking any of my classes/professors. I also spent virtually no time reading HTDP and little time sampling my music.

My predictions weren’t half bad. I was wildly optimistic about the drop in SSD prices but much closer than I would’ve guessed about the game console war being almost a draw by the end of 2009. Apple has continued to infiltrate the mainstream but I think Linux had more progress in 2008 than 2009. Sadly, neither of my IP Law predictions came to pass and that area needs progress as much as ever.

I’m not going to bother with predictions for 2010 or resolutions either. I think it’s better to work, enjoy what I’m doing and see where it takes me. Happy New Year. And good night.

Vacation Time

17-Dec-09

At long last, this year is drawing to a close. I’ve ended my semester on a mostly positive note and am looking forward to the Christmas holidays. Why you ask? Well, for a few reasons.

There are people to catch up and hang out with. I’ve got books to read: A Deepness in Sky and maybe Diaspora. There may be some light video gaming between FFXII and Borderlands. But mostly, I have projects. I need to dive in to the code I’ll be working with on my internship next semester…but not just to get a head start. The company I’ll be working with is working on some pretty cool stuff and there are plenty of places where even a naive fellow like myself could be of help, provided I don’t get in people’s hair/workflow too much. I want to try to get a Paktahn release out by Christmas with Leslie. That means giving a good read through of the analysis of why SBCL’s PKGBUILD fails on x86_64, fixing it and getting the result to juergen. Also for Paktahn, I want to start work on a branch using Unix-options for CLI argument handling and look over/improve a proxy branch I’ve been working on. Maybe a unit tests branch, as well. Besides that I have some programming books I’d like to read a bit of (and you have to do the exercises!) and various other small projects to toy with.

All that has to wait until at least tomorrow though. I’m taking today off to be with my girlfriend and relax a bit. She leaves Sunday at which point I’ll go full into project-mode, I expect. :)

There’s probably more to say here but I’m forgetting whatever it is…and my rice is ready. Cheers.

Unwind-Protect

09-Dec-09

The semester is finally drawing to a close. I had my last class sessions today. Exams are on Monday and Wednesday followed by a much needed break. It’s been a long 3-semester year with more twists and turns than I could’ve guessed. No matter what happens, the break will be here soon.

I have a variety of projects to work on over the break. I have one code base to get familiar with and another to get features and bug fixes written for. I also need to finally get around to writing the successor post to On Minimalism. Between the writings of Brian Hurt, Paul Snively and Roly Perera I’m getting a better idea what my thoughts and issues are and can hopefully come up with something good to say. I also might push out another “redlinux” release for the hell of it and have various other pet projects.

Now, for the recreational stuff. I’m going through another exploratory phase in my music listening and need to filter through some of the stuff I’ve pulled down from the vastness of the net. I just finished the first fiction reading I’ve done since…oh…Summer 2007? It felt good to read for pleasure again. I read Vernor Vinge’s A Fire Upon the Deep and was thoroughly impressed. I’m looking forward to reading A Deepness in the Sky over the break.  Maybe Rainbow’s End or Greg Egan’s Diaspora if I’m feeling up to it. I can say that recharging my batteries will be my priority for whatever remains of December after finals. That and figuring out where I am in life and sensible goals for the next year. Of course, spending some time with Mom will figure prominently as well.

Another Home Stretch

29-Nov-09

I’m way behind on my blogging schedule. It’s been over two weeks since the last one.

It’s hard to believe 2009 is almost over. It’s been an overwhelming year with a fair amount of negatives (dad’s death, girlfriend’s dad’s death) but also a lot of positives (back in school with good grades, a nice apartment, fun programming projects, an internship for 2010 and a deepening relationship with the lovely Teresa Finn).

This semester has been much harder on me compared to the last two for reasons I won’t elaborate on here. My last two big papers are due by tomorrow and Dec 4th, respectively. Then I’ll be pretty free until exams on the 14th and 16th. I’m almost there but the end seems wildly far away. In part because I’m having trouble focusing on doing what I need to do today. I’m preoccupied with all kinds of concerns about graduating on time, finances, finding a job, where I’ll be moving and other things that just flat out don’t matter right now.

Though there are personal projects I’d love to work on, I may be a vegetable most of this holiday season.

Back to paper writing…

On Minimalism

14-Nov-09

Introduction

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.

Background

Programming is really hard. We’ve known this for a while. As Hal Abelson said, “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).

The Meat

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 rather poor and embarrassing job of at least raising that question a while back. I was lucky enough to find an outstanding attempt at an answer on Daniel Lyons’ blog. It was completely coincidental though, he hadn’t read my article.

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 never use the continue statement in his code. These are examples of programmers simplifying their own mental model to make problem solving more tractable.

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 thinking about the dataflow 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, especially OO since it’s been dominant for so long. But let’s not confuse this issue as being about particular paradigms or programming languages.

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) solving different problems as lispm (Rainer Joswig) notes on hackernews.

Vladimir Sedach suggests that the rift is about metaprogramming. 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 metacircularity/homoiconicity chestnut. Furthermore, he mentions that Haskell can’t be self-describing because it’s built on two 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 they avoided purity and static types to enable the benefits of metaprogramming 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.

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 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 jerf writes largely about this issue.  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.

Of course, there are counterexamples like ITA Software but macros were thoroughly debated even among friends at ILC 09 as harmful or helpful to team programming. Vladimir Sedach again has a good grasp on their utility. 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 Fare’s XCVB is an interesting opportunity in this direction and I’m watching it intently.

The Takeaway

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.

Way Behind

10-Nov-09

So, I’m coming up on the two week mark since my last blog post. Sorry about that. A big reason why is that I have been working on a post that might actually have some substance to it. It’s still about programming and CS but it might actually have something interesting to think about. Sadly, it’s not done yet. In lieu of that, I’ll post some quick bits of news.

  • I’ve still been hacking on paktahn like a fiend whenever I can.
  • I’ve started playing Final Fantasy XII again. I love that game series. Also, it’s soundtracks.
  • I finally caved and got a twitter account. I’m kind of embarassed but I was following a bunch of people by checking their twitter page a few times a day. It’ll save time on that, at least.
  • It’s rather hard to sum up all the music I’m into but my top 15 artists on Last.fm is a really good starting point. If there are any you haven’t heard of, they’re worth at least giving a shot.
  • I cannot wait to be done with school. Optimistically I can fanagle my way into getting credit for a literature course from my Oglethorpe days. If I do that and never get a D or F in any courses, I can graduate by December 2010. That’s 5-6 courses a semester, 3 semesters a year. Otherwise, it’s May 2011 for me. Blerg.
  • On Dad: I think I only really started missing him recently. I think in Summer I didn’t even have time to process his death (or just didn’t know what to think), August-September I was depressed and now I just miss him sometimes. It’s not terrible but there’s definitely a time or two a week where I’m all, “Man! I wish Dad was hear to {talk to, hang out with, listen to music with, play guitar with, play video games with, watch movies with, be a family with, etc, etc, etc}”.

I was going to add a number of different “newsy” things here such as: the recent successes about PATRIOT act and State Secrets reform, the enjoyable experience of working with the ECL compiler developers, some thoughts on my first Factor program (which still needs some touch up work) and various other things but I’ll leave that til another day because sadly, I have a test tomorrow to study for. More coming your way soon, folks.

Miracle Day

28-Oct-09

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.

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 Dad’s recent death. 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 working on some Open Source Software 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.

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.

Here’s a pros and cons analysis and some oddly well timed material I stumbled on today.

Cons:
He’s easing up on us. We already weren’t understanding the material well. Now he’s easing up on us.

Pros:
I am not going to fail the damn class.
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. :)

Tasty links that might also cheer you up:
High Anxiety – Raganwald’s new github-thing
Optimism – Also Raganwald’s new github-thing

A song I’ve been enjoying:

Two Door Cinema Club – Something Good Can Work
Found at skreemr.com

Git For Dummies…

22-Oct-09

A friend asked me for a simple tutorial. So here one is. Also, just because I can:

My workflow roughly looks like:

Start or clone git repository: [git clone $URL] OR [mkdir project; cd project; git init]
Make some changes: HACK HACK HACK, ensure the files are tracked: [git add $FILES]
Review my changes: [git status], [git diff]
Uh oh, a choice!: if (I like these changes)
then [git commit] // ideally, your $EDITOR environment variable is set to the editor you like.
else [git checkout -- $FILES] // yes, the dashes should literally be there. this reverts the files to the last commit's state.
Repeat.

I didn’t cover pushing and pulling (collaborating) or branching above (working on separate features simultaneously).
Let’s do that now:

Get a list of branches and show the current branch: [git branch]
Start a new branch to work on: [git branch $NAME]
Switch to a different branch: [git checkout $NAME]
Delete a branch you don't want anymore or are finished with: [git branch -d $NAME]
Merge changes from one branch into another branch: [git merge $SENDER $RECIPIENT] // Branch recipient gets senders changes.
List tracked repos (online, github, etc): [git remote]
Track a friends repo (or one online, github, etc): [git remote add $URL]
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.
name is a branch on your machine. note that master is a branch. */
Retrieve and merge in a friends changes: [git pull $REMOTE $NAME]

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”.

Other than that, there are two free git books I know of:
Pro Git – http://progit.org/book/
The Git Community Book – http://book.git-scm.com/