Test Post

July 27th, 2008

This is just a quick test. Ignore me. ;~)

DorkbotPDX 0x01

March 27th, 2008

DorkbotPDX 0x01 will be taking place on March 30th at the PNCA Graduate Studios building (1432 NW Johnson St.). Doors will be opening up around 6 -- show up early if you want to meet other dorks or find out what makes us tick.

The lineup of speakers is:

  • Cathy Swider - Using LEGO Mindstorm NXT robots with students to create art
  • Ward Cunningham - What If Bacteria Designed Computers?
  • David Frech - Bootstrap yourself into conviviality by writing your own Forth

Talk Descriptions:

Using LEGO Mindstorm NXT robots with students to create art. As alternative to competitive competitions or skill challenges, LEGO ArtBots facilitates students to learn basic programming and robotic mechanical design for the purpose of creating line drawings or watercolor paintings. Students write short programs and attach sub-assemblies to hold brushes and markers to create the art. The robot moves autonomously with the assistance of light, touch and rotation sensors creating interesting and sometimes unpredictable results. It is hoped this approach will generate interest in engineering and computer science among new groups of students.

What If Bacteria Designed Computers? This talk explores Bynase, the biologically inspired protocol that Cybord computers use to signal values amongst themselves. The primary value of Bynase is that it drives system designers into novel tradeoffs with analogies in biological systems. A second value of Bynase is that it encourages casual small-scale hardware/software projects suitable for one-off art or educational projects.

Bootstrap yourself into conviviality by writing your own Forth. Forth is a simple language that yet has enormous expressive power. This paradox invites investigation. In this talk David proposes to explain - abstractly at first by talking about some philosophical ideals that Forth embodies, and then concretely by giving a short tutorial of the language that I implemented, muForth - how Forth can be both simple and powerful.

Speaker Bios:

Cathy Swider is the Project Administrator for the Oregon Robotics Tournament & Outreach Program (ORTOP), a program of Industry Affairs, Oregon University System. She has been involved with LEGO Robotics for seven years as a FIRST LEGO League Coach, co-founder of the LEGO Robotics Day Camp for Girls and Girl Scouts-ArtBot Camp. She is currently working with Saturday Academy and Grant High School to introduce LEGO ArtBots to more students.

Ward Cunningham, best known as the inventor of the Wiki, is a computer programmer who takes inspiration from life's processes ranging from cell signaling to cultural evolution. His day jobs include serving as Chief Technology Officer of AboutUs.org, a growth company hosting the communities formed by organizations and their constituents. Ward also co-founded the consultancy, Cunningham & Cunningham, Inc., has served as a Director of the Eclipse Foundation, an Architect in Microsoft's Patterns & Practices Group, the Director of R&D at Wyatt Software and as Principle Engineer in the Tektronix Computer Research Laboratory.

David has been tinkering with computing devices since the mid-70s, starting with a Motorola 6800 evaluation kit and an Altair 8800. He was introduced to Forth in 1980; didn't understand it completely until about 1990; and since then has implemented Forth at least four times. He is currently interested in using modern functional languages (such as Haskell and OCaml) as target compilers.

2008!

January 1st, 2008

I'm not big on resolutions or anything, but sometimes I feel it's good to draw an arbitrary line in the sand in order to make changes you'd like to see in yourself, your life or whatever. So here's a few thoughts on what I'm going to take a stab at doing in 2008. Maybe none of these will work out or maybe they all will, who can say. Some of them are just half-formed ideas afterall.

  • I'd like to make this the year of green tea for me. I know this sounds silly, but having once been a near green tea junky, I've since slid back to being a devoted coffee drinker. Mind you, I don't plan to stop drinking coffee or anything. I just hope to at least get back into the habit of starting my day with a small pot of the green stuff.

  • My back is in awful shape. I regularly suffer from headaches and all sorts of other discomfort becuase of a bad back. Part of this is just a life long habit of poor posture, but it was made worse by a rather nasty car wreck I was in nearly 10 years ago. No permanent damage was done, so really it's just a matter of training my muscles to do the right thing. I've done physical therapy and chiropractic and all that, but I'm now convinced that building core strength using some rather simple and well-tested approaches is the right thing to do. That leads me to...

  • Re-establishing a regular exercise habit. I grew up as a weakling. I was never good at sports. However, I found out in the latter part of my twenties that not only can I do exercise, but I actually really enjoy it and my body type is such that I respond to it quickly. Who would have thunk it? I've been pretty lax about doing any real consistent excercise for a long while, but my goal is to get back into regular strength training and then add in a good bit of cardio over the next few months.

  • Related to that, I need to spend a lot more time outside. It's a dangerous trap when you're a technical sort to get caught sitting in front of the computer for FAR too many hours a day. This isn't itself a bad thing (well, one could argue about that), but the problem is when it takes away from doing other things. Like breathing fresh air, getting exercise, etc. My goal is to start taking a nice walk outside at least once a day. Of course, having dogs makes that a lot more likely and easy, but I'm talking a real serious walk. Something that gets the lungs pumping a bit and clears the head.

  • Reading is something I love doing, so this one will be easy: I'm hoping to start reading a lot more regularly. I'd like to quantify this and say I'll read a book a week or something like that. But it's not easy since so much of what I read takes other forms (online, printed material, etc.). I'll just leave this one be in terms of setting goals and promise myself that I'm going to read as much as possible.

  • The next one is also pretty hard to put into specifics, so I'm going to leave it for another post. To sum it up, though, I have a plan for an autodidactic program I'll be putting myself through. It's not fully expanded, yet, but I'll try and get it into more complete terms as I talk about it in my later posts.

  • Again, something to be expanded up on later: the "career" plan. I'm not sure how much I'll spell out here in terms of what I want to be doing, but I'll definitely talk a bit more about what I'm going to do to get there. Expect more on the subject in the near future.

Ok, that's quite a list. As I said, I don't really expect all of these to be stunningly successful this year, but I also don't think any of them are that far from the direction I'm already moving in. so it shouldn't take huge leaps to make things happen.

Here's to another great year. Happy 2008!

Something to write about

December 26th, 2007

Greg Borenstein has put together a list of 50 blog posts he'd like to see in 2008. His theme that drives the list is "I know Ruby. Now what?" I see at least a couple in there that I could probably write a few useful sentences about, so maybe I'll have to give it a shot. What I really like about this list is that there are a number of ideas in there that could be written up in fairly short posts while still saying something worthwhile. Also, it covers a good deal of ground. There's more than a handful that I'd love to see written up, too. So get to it!

Here's a little tidbit that took me somewhat by surprise. I was poking around on my laptop trying to debug an issue with a Ruby library I'm trying to use. I ended up trying to find the man pages for the TCP socket API. Not the Ruby interface, but the native stack. The thing is, the Ruby TCPSocket class just wraps around the native implementation. But when I tried to find the man pages, they weren't there. I thought I had all the basic development packages installed, but apparently, there is a separate package for the development man pages. It turns out you need to do an 'apt-get install manpages-dev' to get them.

A quick twitter hack

October 19th, 2007

So, a friend of mine asked me to put together something that would update a particular twitter account every so often with content from a text file he sent me. Of course, anyone who has spent more than 30 seconds playing with twitter4r knows how simple this is, but I thought I'd post the code here just for posterity. It's not doing anything fancy whatsoever.

All it requires is a text file with the posts each on a separate line and a twitter.yml file that looks like this:

prod:
  login: user
  password: pass

I just went ahead and hard coded this to use prod as the environment since this is only a short-lived project. Anyway, here's the code, simple as it is:

#!/usr/bin/env ruby
require 'rubygems'
require 'twitter'
require 'twitter/console'

env = 'prod'
config_file = 'twitter.yml'

status = File.open('updates.txt') do |f|
  l = f.readlines
  l[rand(l.size)].chomp
end 

twitter = Twitter::Client.from_config(config_file, env)

twitter.status :post, status

High on Fire

October 17th, 2007

I just had to share this (hope the embedded object works)

This is a review I wrote on Amazon for Programming Collective Intelligence by Toby Segaran. I decided I should post a copy of it here for safe keeping. I hope to write a more detailed review of it at some point, but we'll see how far that idea gets.

I first learned of this book just a few weeks ago, shortly before it was available. I immediately read the sample chapter on the publisher's website and was certain I had to get a hold of a copy.

I was not in the least bit disappointed with what I found. It has been quite a while since I've looked at any Python code (I'm more of a Ruby fan, personally), but the code is easy to follow and it's a simple matter to extract the basic concepts into any language.

I have spent quite a few years now watching the field of machine intelligence from the sidelines, occasionally reading the odd technical write up or wikipedia article, trying to wrap my brain around the basic ideas. The thing is, it's not clear to me that in some regards, it's not that complex. It's just that most of the existing books and articles are written for those immersed in the field. This book is not like that. It explains things in clear language that is easy to follow, using simplified examples and making excellent use of graphics to "show" you how it works.

If you really want to dig in deep, Segaran provides exercises at the end of each chapter and gives you an appendix full of mathematical formulas (the "pure" representation of the algorithms).

Finally, I should mention that the last chapter does what so many other technical books should but don't: it clearly summarizes everything he has shown you. He does this in a straightforward way so that you won't have to go searching through the book, rereading everything again, to put these techniques into practice.

This is a brief review I wrote of Practical Ruby for System Administration by André Ben Hamou. I was going to try and have it published elsewhere, but decided I should post it here.

Ruby has been growing at a staggering rate of popularity over the last couple of years. In particular, its use as a web-programming language has probably not failed to get many peoples' attention. However, given the precedence set by languages like Perl and Python for use in systems administration related work and the undisputed reality that Ruby has been influenced by these predecessors (in particular Perl), it should come as no surprise that its growth in the sysadmin world has been similarly on the upswing. It should also be no shock to see books like Practical Ruby for System Administration, by André Ben Hamou, starting to appear on the shelves.

The Good


This book attempts to give a brief introduction to the capabilities of Ruby as applied to the varied needs of the system administrator. While this is a large and complicated field and the book is relatively slim at 239 pages (including the index), André manages to squeeze in a basic if not complete introduction to Ruby. He also covers some of the more useful tricks such as metaprogramming and the large variety of options available for the ruby command line. Related to this, one particular highlight is the section in chapter 2 on one-liners: those incantations that are such a common feature in the sysadmin's toolbox.

André discuss performance concerns, which one would tend to think aren't generally an issue for administrators, but he points out some good examples of why this might be worth considering. He also provides solid discussions of object storage and retrieval, file management, testing and documentation; all important topics for writing production worthy and maintainable code.

In addressing areas of practical application, he discusses data access (including retrieval from web-based systems), general networking and network monitoring. His chapter on network monitoring is especially relevant as he demonstrates how to access device information over SNMP, a mainstay of systems management.

The Not-so Good


Overall this book leaves me feeling a bit like it's missing some major pieces and takes a particularly slanted view of the world of system administration. Among other things, he dismisses LDAP outright (how many sysadmins are going to have to integrate with Active Directory at some point?).

There is also a heavy focus on Rails. Mind you, this book is not called Practical Rails for System Administration. Its focus is purported to be about using Ruby for everyday tasks, yet, he has the reader install the entire Rails framework just to use the ActiveRecord (AR) object-relational mapping library for database access. The code needed to access AR without Rails is marginal at best, but he doesn't even mention it.

Overall, I can't say exactly that I'd recommend this book. It's useful and has a lot of good information, but I feel it could lead someone in the wrong direction on a lot of issues and it fails to address some important points. As an introduction to the world of Ruby from a sysadmin perspective, it might serve some utility, but I would hope the reader finds other sources of information for most of their daily chores.

So, just a couple quick updates.

First, if you've visited here in the last month or so (not just reading my feed), you probably noticed that I set up my del.icio.us bookmarks to actually get saved as posts here. Over the course of time, it started looking pretty awful considering my relatively infrequent posts (I mean the real posts with actual content written by me).

So, I've reconfigured the del.icio.us tool that was posting those links here to save them to a separate category called, appropriately enough, 'Bookmarks.' You can find this in the list on the right. Currently, they don't appear anywhere else on the blog, but at least they're getting saved here. Eventually, I'll probably add snippet to the sidebar that will show the latest handful of links. I just need to figure out a way to do this that loads enough of the content to make it worthwhile since so many of the sites I link to have such useless page titles set -- which is, of course, the default name used for the link. Occasionally I change the name of the link myself, but often I forget to do or otherwise choose not to.

Anyway, for those of you who just read my stuff via the feed, you probably won't notice a big difference. Since I run my feed through Feedburner, I simply reconfigured it to start adding in my daily del.icio.us posts again. Handy tool, that Feedburner.
So, in the effort to get myself setup to work on my desktop machine, I've been thinking about a different approach to my workspace configuration. I'm not talking about the physical workspace, though I've had many thoughts about that, too. This is about my virtual workspace. Really, truly virtual.

Some people know that I've been a long-time fan of VMware. I think I first started using around 1999 or 2000, when it was still a very early and somewhat rough bit of software. But it was already quite exciting to me then and quite useful.

I'm also a hardcore Linux user -- it's my preferred desktop. Though I have, at time, given in and used various Windows flavors when employers have required, it's always been with extreme reluctance. And, of course, I always end up tricking it out with Cygwin and a million little utilities to make it as unix-like as possible.

Anyway, given my fondness for Linux and VMware, I often think about ways to use virtual Linux machines to improve my setup. I've already been using a development system contained in a virtual machine for quite a while -- at least, for the day job development needs. I run Jboss and Eclipse directly from the development VM, running the Eclipse UI over an SSH tunnel, which automatically redirects the X-Windows connection to my local system.

But it finally occurred to me that I could take this a couple steps further. In particular, I realized that I could log directly into a desktop running in a VM via XDMCP. So, while I was backing up the latest stuff from my soon to be missing laptop, I began setting up a new Linux VM on my desktop with the latest release candidate of Ubuntu.

I got everything installed and updated and finally today had time to log out of my current session on the desktop machine and into the VM. It turns out that it works great! Everything runs over a local, virtual network, so it's almost as fast as if it were all running completely locally (really, it is completely local -- it just has a little more indirection in the mix).

The great thing about this setup is that I can configure a cron job to put the VM to sleep using VMware's scripting tools, creating a quick backup of the system to my NAS, and then wake it back up without even noticing it. Of course, I'll set it up to run at some obscene hour of the night when I'm not likely to be using it. I can always add a few checks to make sure I'm not currently logged in.

Once I get a new laptop, I'll just transfer this whole rig over to the new system. I'm not quite sure how I'll handle things like putting the whole laptop to sleep, but I'm sure a little trickery (read: lots of Bash scripting) can handle that. I'll report back here when the experiment is complete.
Ok, so here's the deal, my laptop (supplied by my employer) is kaput. The BIOS started report SMART errors about a month ago, but I didn't worry about it too much. I never got any errors while using it, so I just backed everything up and figured eventually I'd get them to send me a new drive.

But then it got worse: the LCD started going crazy. It would randomly fade to a sort of greenish, off-white color. I could usually get it back to normal by moving the lid around a bit. It was acting like the connections were going bad in the hinge, but it just kept getting worse and worse. I was really afraid that the cable would just give up completely at some point. Yesterday, it got to where I couldn't reliably work on it at all.

So its about to head off back to Austin, likely never to return. Hopefully I'll get a replacement soon, but probably not for a couple weeks at the soonest. Instead I'm tied to my desktop now.

Mind you, my desktop is one hell of a machine (again, its worked-supplied). But I had grown into the habit of moving around to various positions around the house to do my work. My favorite spot was sitting in the recliner in the living room. It was a lot easier on my back.

See, I've got a bad back. I've had issues since I was in high school, roughly, on account of my bad posture, but it all got much worse when I was in a bad accident in my mid-twenties. It's usually not a big deal, but something I did about a week or so ago messed it up again pretty badly. It feels approximately like a mild pinched nerve. Anyone who has ever had a pinched nerve in their back will know that even a "mild" one is not fun.

So I'll be limiting my time in front of the computer to strictly what is necessary to get my work done and the occasional checking of email. Of course, maybe it will mean I'll be more focused when I am sitting here. We'll see.

I figured this was as good of an excuse as any to finally update this blog. Ever since I set up my del.icio.us posts, it seems as though the automated portions of the blog are overtaking any semblance of human presence around here. I've got to make sure that isn't the case, of course!

So, I've got more to say, but I'll save it for tomorrow's post. Yes, there will be a post tomorrow. You can count on it.

So, the other night at DorkbotPDX, there was a discussion about techniques for making images searchable. The idea was to come up with something beyond what Google Images gives you and have something more in depth -- among other things, the idea of categorizing things like Pandora does, using collective organization based on a large body of contributors, was discussed. There were a lot of interesting ideas thrown around, but most of them seemed to rely on this approach of using large social structures to generate the relevant metadata.

In a bit of the sort of serendipity that the internet seems to bring with near frightening regularity, the next day I read this post on O'Reilly Radar about the new O'Reilly book Programming Collective Intelligence. This book appears to discuss exactly the kind of development tasks that are necessary to make possible the systems we were discussing.

Intrigued by this, I downloaded the sample chapter and started reading. It's a very engaging book and I'm looking forward to getting my own copy. However, the example code is all in Python. I'm not a Python programmer, though I do have a good bit of familiarity with the language and, in the past, have written a handful of utilities using it. But even still, I don't think this would be an issue: I'm well familiar and to a degree quite versed in a handful of languages that are very similar to Python. Which makes it easy enough to understand what the examples are trying to do.

This brought up a stream of thoughts, though, that have been rattling around in my head for some time now. The fact is that when it comes to languages like Python, Ruby, Java, C, etc. there is enough similarity that I can make my way through a given example (for those with which I am less familiar) without any great difficulty. The problem is that outside of these common paradigms (for lack of better descriptors, imperative and object-oriented) of programming languages, I am not so comfortable.

Unfortunately, there is a growing undercurrent of languages that work outside of that world. Haskell Erlang, OCaml, Scala, Prolog... the list goes on. All very interesting and worth understanding, but I feel largely out of my depth when looking at examples in these environments. It's just not right.

For a long time it's been clear to me that in order to continue to push my abilities as a developer and technologist in general, I need to continue to expand the scope of my understanding and knowledge. Functional, logical and other language styles are clearly a necessary addition to my repertoire.

Once again the Portland Ruby Brigade will be hosting an evening of wide ranging talks about Ruby. This year the focus is on people doing strange things with Ruby. Strange, of course, is anything just a bit outside the usual. If you've created a new Ruby-based interface for hacking your brand new internet-enabled phone (rPhone anyone?) or composed your latest bit of metaprogramming magic, we'd love to hear about it.

Rather than having a fixed list of presenters, we're keeping it open-ended and free form. We'll use the lightning talk inspired approach and give you each a 10 minute slot to tell us what you can cram in. Make it especially interesting and we might even give you an extra minute or two. Let us know (send email to tlockney+foscon@gmail.com) in advance if you are interested in presenting or show up early on the 24th to sign up for any remaining slots (we'll hold a few open until the event itself).

This will all be taking place on Tuesday, July 24th, 7:30PM at Holocene (http://www.holocene.org/) here in Portland, Oregon. This just happens to be the same week as O'Reilly's Open Source Convention and the final day of Ubuntu Live. So if you're in town for either of those or close enough to come join us anyway, you're more then welcome.

There will be plenty of Ruby fun going on and lots of socializing with other people interested in Ruby. Last year, FOSCON II was overflowing. We've found a new venue to fit you all in, so why would you miss it?

http://upcoming.yahoo.com/event/216872 or http://foscon2007.com

So, it occured to me that after soliciting everyone in DorkbotPDX to post the announcement for this to their blogs, I failed to do so myself. Bad self! So, here it is, the official announcement for the first ever DorkbotPDX event:

Come join DorkbotPDX, people doing strange things with electricity, for our inaugural event at Vendetta on June 24th at 5pm. If you're a hacker, painter, engineer or sculpture, musician or maker you'll fit right in. We bring together the tech and art worlds and enjoy it all over a pint of beer. We'll have presentations and performances by these fine folks:

Jason Plumb is a software engineer by day...hardware hacker, reverse engineer, and experimental sound geek by night. He will provide an overview of the Essential Reality P5 glove controller and explain how it can be used with free and open-source software to create and manipulate sound.

Jesse Fox studied music composition and physics at Bates College before getting a Master's Degree from the Center for Computer Research in Music and Acoustics at Stanford University. He will discuss his involvement with the League of Electronic Musical Urban Robots (LEMUR) and describe the detailed technical recreation of George Antheil's "Ballet Mecanique", which includes xylophones, bass drums, tam-tam, pianists, electric bells, a siren, airplane propellers, and a volley of player pianos.

Donald Delmar Davis, principal research anarchist at D3 Laboratories, will overview the deconstruction of Arduino and Wiring platforms to create artistic robot platforms with AVR microcontrollers. "AI Begins With Self Destruction"

paint & copter create multi-media experiences of regurgitated and improvised media. By synthesizing live and pre-manipulated video feeds, field recordings and live instrumentation, Paint and Copter filter cultural noise and reprocess it into a new, mesmerizing thread.

We will also have a brief open-mic of sorts referred to as Open Dork. This is a show and tell where you can have the mic for a few minutes to discuss your latest project, vent about frustrations trying to get your art grant or tell us about the intricacies of the color blue. It's your time to tell us what you think we need to hear.

Festivities will begin at 5pm and you can expect them to last until they kick us out. Please bring yourself, your friends and any thing you'd like to share.

http://dorkbotpdx.org/wiki/dorkbotpdx_0x00