<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Random crap direct from Michael Marineau himself ;-)</description><title>The Site of Mike</title><generator>Tumblr (3.0; @marineam)</generator><link>http://blog.marineau.org/</link><item><title>"Terrorist," you keep using that word...</title><description>&lt;p&gt;Just to be clear, there is no such thing as a terrorist. It is a bullshit marketing term along the lines of &amp;#8220;cyber warfare,&amp;#8221; &amp;#8220;cloud computing,&amp;#8221; and &amp;#8220;synergy&amp;#8221; that is overused to the point of being meaningless. If the incidents are rare or the group behind them is small just stick with &amp;#8220;mass murder&amp;#8221; or perhaps &amp;#8220;heinous crime.&amp;#8221; This applies to Boston, London, New York, etc. If attacks are common and part of a larger movement then call it &amp;#8220;war&amp;#8221; or &amp;#8220;total war&amp;#8221; if you want to be specific. This applies to parts of the Middle East and Africa.&lt;/p&gt;
&lt;p&gt;If you must use the terms &amp;#8220;terrorist&amp;#8221; and &amp;#8220;terrorism&amp;#8221; please remember that there are two fairly broad definitions in use. A technical definition: the motive is political and the target is the general public rather than an individual (assassination) or military (war). And a blatantly racist definition: those behind the attack are Arab, Muslim, or what ever other overly broad group of people we feel like dehumanizing and vilifying. Official government statements seem to at least try to stick to the technical definition, the media and people in general seem to prefer to just be racist. If you doubt this then try to explain &amp;#8220;they hate our freedom&amp;#8221; that I&amp;#8217;ve heard so often over the past dozen years. (Hint: no one hates our freedom.)&lt;/p&gt;
&lt;p&gt;End of rant&amp;#8230;&lt;/p&gt;
&lt;p&gt;In other news I&amp;#8217;ve got a bunch of photos of some of the various memorial sites that have appeared around Boston to post online soon. Hopefully some turned out well, I found it to be a particularly difficult subject matter to photograph.&lt;/p&gt;</description><link>http://blog.marineau.org/post/48582137880</link><guid>http://blog.marineau.org/post/48582137880</guid><pubDate>Sun, 21 Apr 2013 22:30:00 -0400</pubDate><category>rants</category><category>boston</category></item><item><title>timeshaiku:

A haiku from the article:  Don’t Let Your Signed...</title><description>&lt;img src="http://25.media.tumblr.com/9ec4c2f1cdb1fec75e20329bc1586bfd/tumblr_mklat3teBr1s9exp4o1_500.gif"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://haiku.nytimes.com/post/46865852246/the-family-mutt-nabs-it-and-reduces-it-to-a-gooey" class="tumblr_blog"&gt;timeshaiku&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;A haiku from the article:  &lt;a href="http://nyti.ms/X7gyWq"&gt;Don’t Let Your Signed Memories Turn Into a Plot Twist&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Every single time…&lt;/p&gt;</description><link>http://blog.marineau.org/post/46905004665</link><guid>http://blog.marineau.org/post/46905004665</guid><pubDate>Mon, 01 Apr 2013 22:32:58 -0400</pubDate><category>random</category></item><item><title>Yet another blog migration</title><description>&lt;p&gt;It has been years since I&amp;#8217;ve really done much with my website and its neglected Drupal instance was further out-of-date than any PHP web application should be. However I don&amp;#8217;t like deleting things so I&amp;#8217;ve migrated the posts over to Tumblr. (That&amp;#8217;s where the cool kids are these days right?) Maybe I&amp;#8217;ll start using it again, maybe not. :)&lt;/p&gt;
&lt;p&gt;For something a bit more interesting try my other site: &lt;a href="http://geekyknot.com"&gt;Geeky Knot&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.marineau.org/post/46706443246</link><guid>http://blog.marineau.org/post/46706443246</guid><pubDate>Sat, 30 Mar 2013 18:33:06 -0400</pubDate><category>misc</category></item><item><title>The ABCs of the Interwebs</title><description>&lt;p&gt;Google&amp;#8217;s instant search is kinda dangerous, now you don&amp;#8217;t have to even finish typing a search before getting distracted and forgetting the original task at hand. Today&amp;#8217;s distraction (so far) is seeing what sites come up for just a single letter:&lt;/p&gt;
&lt;p&gt;A: Amazon.com&lt;br/&gt; B: Bank of America&lt;br/&gt; C: Craigslist&lt;br/&gt; D: Dictionary.com&lt;br/&gt; E: ESPN or eBay&lt;br/&gt; F: Facebook&lt;br/&gt; G: Google&lt;br/&gt; H: Hulu&lt;br/&gt; I: iTunes&lt;br/&gt; J: JetBlue&lt;br/&gt; K: Kayak&lt;br/&gt; L: Lowe&amp;#8217;s&lt;br/&gt; M: MapQuest&lt;br/&gt; N: Netflix&lt;br/&gt; O: Orbitz&lt;br/&gt; P: Pandora&lt;br/&gt; Q: BrainyQuote&lt;br/&gt; R: Red Sox&lt;br/&gt; S: Southwest Airlines&lt;br/&gt; T: Target&lt;br/&gt; U: UPS&lt;br/&gt; V: Verizon Wireless&lt;br/&gt; W: The Weather Channel&lt;br/&gt; X: Xbox 360&lt;br/&gt; Y: Youtube&lt;br/&gt; Z: Zillow&lt;/p&gt;
&lt;p&gt;This list isn&amp;#8217;t global by any means, Google&amp;#8217;s location detection has a big influence on what results it shows. I tried the same after setting my location to Google Central (Mountain View, CA). That area seems to be more interested in the IRS, Kohl&amp;#8217;s, and Redbox.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46372016818</link><guid>http://blog.marineau.org/post/46372016818</guid><pubDate>Sat, 28 May 2011 16:39:00 -0400</pubDate><category>misc</category></item><item><title>Nagcat: a monitoring framework for Nagios</title><description>&lt;p&gt;I am pleased to announce the first public release of &lt;a href="http://code.google.com/p/nagcat/"&gt;Nagcat&lt;/a&gt;! This is a project I have been working on at &lt;a href="http://itasoftware.com/"&gt;ITA Software&lt;/a&gt; over the past several months for monitoring the complex applications we run. It is intended to be used with &lt;a href="http://nagios.org/"&gt;Nagios 3.x&lt;/a&gt; and is written in Python.&lt;/p&gt;
&lt;p&gt;I just finished cutting the release and setting up its new project site and now I think it is time for a beer so this announcement is rather short. I&amp;#8217;ll be posting some HOWTOs and other information here in the future.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46371742916</link><guid>http://blog.marineau.org/post/46371742916</guid><pubDate>Sun, 15 Mar 2009 21:25:00 -0400</pubDate><category>code</category><category>nagcat</category></item><item><title>Tip of the day: Log tweek for Apache+Squid</title><description>&lt;p&gt;I recently reconfigured my server to run Squid in front of Apache in hopes that it will hold up under load a little better now (&lt;a href="http://alex.polvi.net/"&gt;Polvi&amp;#8217;s site&lt;/a&gt; is just too damn popular with web crawlers). To keep people who like reading their Apache logs happy I wanted to make Apache log the original client instead of 127.0.0.1. Here&amp;#8217;s the best I&amp;#8217;ve come up with so far:&lt;/p&gt;
&lt;pre&gt;# Set using the normal REMOTE_ADDR value first
SetEnvIf Remote_Addr "(.*)" TRUE_REMOTE_ADDR=$1
# Pick the last ip address off the proxy list if we can
SetEnvIf X-Forwarded-For "([0-9\.]+)$" TRUE_REMOTE_ADDR=$1

LogFormat "%{TRUE_REMOTE_ADDR}e %l %u %t \"%r\" %&amp;gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
&lt;/pre&gt;
&lt;p&gt;Seems to be working so far :-)&lt;/p&gt;</description><link>http://blog.marineau.org/post/46371426718</link><guid>http://blog.marineau.org/post/46371426718</guid><pubDate>Wed, 15 Oct 2008 05:21:00 -0400</pubDate><category>howto</category></item><item><title>Tip of the day: Using GPG trasparently in vim</title><description>&lt;p&gt;Vim&amp;#8217;s built in encryption feature is pretty handy but it&amp;#8217;s algorithm is only strong enough to protect against a casual observer. For good encryption something else is required but I still want something that is fairly transparent. I&amp;#8217;ve come up with a little solution using GnuPG, just add the following to your &lt;code&gt;.vimrc&lt;/code&gt; to automatically encrypt and decrypt *.gpg files. (Replace GPGKEYID with your key id of course)&lt;/p&gt;
&lt;pre&gt;au BufNewFile,BufReadPre *.gpg :set secure viminfo= noswapfile nobackup nowritebackup history=0 binary
au BufReadPost *.gpg :%!gpg -d 2&amp;gt;/dev/null
au BufWritePre *.gpg :%!gpg -e -r GPGKEYID 2&amp;gt;/dev/null
au BufWritePost *.gpg u
&lt;/pre&gt;</description><link>http://blog.marineau.org/post/46370944271</link><guid>http://blog.marineau.org/post/46370944271</guid><pubDate>Tue, 19 Aug 2008 00:54:00 -0400</pubDate><category>howto</category></item><item><title>I took this photo earlier this evening from the roof of my...</title><description>&lt;img src="http://25.media.tumblr.com/ebf72048448b2e20d2588df721bd5aec/tumblr_mkah24TI8p1s7ojlgo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I took this photo earlier this evening from the roof of my apartment building along with a few &lt;a href="https://picasaweb.google.com/101041686198237983780/BostonSkyline"&gt;others&lt;/a&gt;. This place has a pretty good view of the city which should be nice for fireworks tomorrow. :-)&lt;/p&gt;</description><link>http://blog.marineau.org/post/46369420649</link><guid>http://blog.marineau.org/post/46369420649</guid><pubDate>Fri, 04 Jul 2008 03:33:00 -0400</pubDate><category>life</category></item><item><title>I am in the process of settling into my new home having all...</title><description>&lt;img src="http://25.media.tumblr.com/1d70d70d41b9e6ca47206f3198997f2f/tumblr_mkahaypr3S1s7ojlgo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I am in the process of settling into my new home having all sorts of adventures but this one tonight is stupid enough to deserve a blog post. It turns out if I turn my air conditioner on the coldest setting and let it run for a day it tends to turn into a block of ice. The photo below was taken just a few minutes ago during the thaw process, and this is after an hour and scraping some off.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46369870963</link><guid>http://blog.marineau.org/post/46369870963</guid><pubDate>Wed, 02 Jul 2008 05:24:00 -0400</pubDate><category>life</category></item><item><title>I am in the process of cleaning out all my stuff so I can move...</title><description>&lt;img src="http://24.media.tumblr.com/65acc9c5b1bb9acfc840b38f96309822/tumblr_mkaiqeOHgh1s7ojlgo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I am in the process of cleaning out all my stuff so I can move to Boston with a fairly minimal car load. I tend to collect all sorts of random things over the years which makes this process a bit difficult. (Why on earth do I have my pogs from elementary school?) On the up side I’ve found a few amusing things in the process. One such item is below. Way back when during my freshman year a couple girls compiled these “Rules of Engagement” and presented them to a group of guys including myself in a meeting of sorts. And yes, it does in fact start off with a quote from “Mystery Science Theater 3000.”&lt;/p&gt;</description><link>http://blog.marineau.org/post/46372471491</link><guid>http://blog.marineau.org/post/46372471491</guid><pubDate>Fri, 20 Jun 2008 06:58:00 -0400</pubDate><category>life</category></item><item><title>Class inheritence in C</title><description>&lt;p&gt;For a while now I have been slowly developing a touchscreen music player to replace the stereo in my car. Although that concept should be fairly simple the project has turned into a bit of a playground for learning how to implement an X toolkit using nothing but C, XCB, and Cairo. One of the more recent legs this project has grown is an object oriented system for C which supports class inheritance and method overriding for use in my toolkit.&lt;/p&gt;
&lt;p&gt;At this point I&amp;#8217;ve got it almost the way I like it. Defining a class in a header looks something like this:&lt;/p&gt;
&lt;pre&gt;CLASS(mtk_widget, mtk_object)
        int x, y, w, h;
        struct mtk_window *window;
        struct mtk_widget *parent;
        cairo_surface_t *surface;
METHODS(mtk_widget, mtk_object, int x, int y, int w, int h)
        void (*init)(mtk_widget_t *this, mtk_widget_t* parent);
        void (*draw)(mtk_widget_t *this); /* children must implement this */
        void (*update)(mtk_widget_t *this);
        void (*mouse_press)(mtk_widget_t *this, int x, int y);
        void (*mouse_release)(mtk_widget_t *this, int x, int y);
        void (*mouse_move)(mtk_widget_t *this, int x, int y);
        void (*set_geometry)(mtk_widget_t *this, int x, int y, int w, int h);
        void (*set_parent)(mtk_widget_t *this, mtk_widget_t *parent);
END
&lt;/pre&gt;
&lt;p&gt;This defines a new class named &lt;em&gt;mtk_widget&lt;/em&gt; based on the base class &lt;em&gt;mtk_object&lt;/em&gt;. The extra arguments to the &lt;em&gt;METHODS&lt;/em&gt; macro are additional arguments for the object constructor.&lt;/p&gt;
&lt;p&gt;To actually implement the class the corresponding C file will have something like this:&lt;/p&gt;
&lt;pre&gt;/* more methods up here */

static void set_parent(mtk_widget_t *this, mtk_widget_t *parent)
{
        this-&amp;gt;parent = parent;
}

mtk_widget_t* mtk_widget_new(size_t size, int x, int y, int w, int h)
{
        mtk_widget_t* this = mtk_widget(mtk_object_new(size));

        SET_CLASS(this, mtk_widget);
        this-&amp;gt;x = x;
        this-&amp;gt;y = y;
        this-&amp;gt;w = w;
        this-&amp;gt;h = h;

        return this;
}

METHOD_TABLE_INIT(mtk_widget, mtk_object)
        METHOD(init);
        METHOD(draw);
        METHOD(set_geometry);
        METHOD(set_parent);
METHOD_TABLE_END
&lt;/pre&gt;
&lt;p&gt;Methods can (and probably should) be static functions. The &lt;em&gt;METHOD_TABLE_INIT&lt;/em&gt; macro defines the function &lt;em&gt;_mtk_widget_class_init()&lt;/em&gt; to fill up a hidden structure named &lt;em&gt;_mtk_widget_class&lt;/em&gt; which is the class virtual method table. Each object then has a pointer tucked away inside to its class&amp;#8217;s method table (set by the SET_CLASS macro). One thing that is a bit clunky about this is that the program must somehow call &lt;em&gt;_mtk_widget_class_init()&lt;/em&gt; before the class is ever used. I would like to be able to do away with that by using GCC&amp;#8217;s &lt;em&gt;constructor&lt;/em&gt; function attribute so it magically runs before &lt;em&gt;main()&lt;/em&gt;. However the class hierarchy must be initialized in order but a way to order the constructors was not added until GCC 4.3. I&amp;#8217;m using 4.1 on my system so that feature will have to wait for now.&lt;/p&gt;
&lt;p&gt;Actually using objects looks something like this:&lt;/p&gt;
&lt;pre&gt;int main (int argc, char *argv[])
{
        mtk_window_t *window;
        mtk_widget_t *widget;

        mtk_init();

        window = new(mtk_window,640, 480);
        widget = mtk_widget(new(mtk_text, 0, 0, 640, 480, "WHEE"));
        call(window, mtk_container, add_widget, widget);

        mtk_main();

        mtk_cleanup();

        return 0;
}
&lt;/pre&gt;
&lt;p&gt;Pretty strait forward, &lt;em&gt;call()&lt;/em&gt; is a bit weird though. It takes the arguments &lt;em&gt;(object, class name that defined the method, method name, method arguments)&lt;/em&gt;. I would like to be able to get rid of the class argument somehow (it is used to cast object to the correct type) but I haven&amp;#8217;t come up with a solution yet. I have a similar clunkyness with my &lt;em&gt;super()&lt;/em&gt; macro for calling a parent class&amp;#8217;s method when doing method overriding.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s pretty much it. As with the rest of this project it is a good example of making things more complicated than they need to be but it was an interesting challenge to put together.&lt;/p&gt;
&lt;p&gt;The code for the above macros and base class can be found in this &lt;a href="https://github.com/marineam/charlie-mtk/blob/master/src/include/mtk_object.h"&gt;header&lt;/a&gt; and &lt;a href="https://github.com/marineam/charlie-mtk/blob/master/src/mtk/object.c"&gt;c file&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;UPDATE: After posting this I fixed the extra verbosity in the call() macro by (ab)using &lt;a href="http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html"&gt;unnamed structs and unions&lt;/a&gt;. This allowed flattening the class hierarchy&amp;#8217;s method namespace. Combined with liberal use of void* the extra casting could go away. &lt;/em&gt;&lt;em&gt;Also, I seem to have added a signal mechanism.&lt;/em&gt;&lt;/p&gt;</description><link>http://blog.marineau.org/post/46614555262</link><guid>http://blog.marineau.org/post/46614555262</guid><pubDate>Wed, 07 May 2008 21:43:00 -0400</pubDate><category>code</category></item><item><title>Gentoo, the OSL, and Xen</title><description>&lt;p&gt;Quite a few of the projects hosted at the &lt;a href="http://osuosl.org/"&gt;OSU Open Source Lab&lt;/a&gt; are using Xen virtual machines. If you are associated with one of those projects you may be interested to know what exactly our current setup is and what my future plans for it are. If you are not currently hosted by us maybe you will be some day. :-)&lt;/p&gt;
&lt;p&gt;Since last fall the I have been running a Xen cluster at the OSL which is slowly replacing our original independent Xen hosts. We currently host a total of 41 Xen virtual machines which include projects like &lt;a href="http://busybox.net/"&gt;Busybox&lt;/a&gt;, &lt;a href="http://inkscape.org/"&gt;Inkscape&lt;/a&gt;, an &lt;a href="http://oftc.net"&gt;OFTC&lt;/a&gt; IRC node, the &lt;a href="http://freenode.net/"&gt;Freenode&lt;/a&gt; website, the &lt;a href="http://forum.laptop.org"&gt;OLPC user support forums&lt;/a&gt;, and many others. Currently 17 of those are on the new cluster split between 3 of the 6 available host nodes. The other 24 virtual machines are still on two of our older independent Xen hosts.&lt;/p&gt;
&lt;p&gt;The older Xen hosts are just boxes loaded with lots of disk and ram, with the virtual machines running off of the local disk space. The problem with this setup is that Xen and Linux kernel upgrades are incredibly difficult. Since the virtual machines cannot easily move to another host upgrading Xen requires taking an outage for all 8 to 12 virtual machines running on that host. To complicate matters Xen can be a bit troublesome to install/upgrade sometimes so it is not uncommon for such an upgrade to take much longer than expected. To improve this situation I built out our Xen cluster.&lt;/p&gt;
&lt;p&gt;The cluster currently consists of 6 Xen hosts which are part of a 14 blade IBM Bladecetner that was donated to us by Intel. The 6 hosts each have 4GB of RAM and dual Pentium 4 processors and can typically run between 6 and 8 virtual machines depending on RAM and CPU needs. The remaining 8 blades will eventually be built out as more hosts but currently are waiting on RAM. (Anyone have a pile of 1GB PC2100 sticks laying around?) All of the disk space is hosted via iSCSI on a separate disk node. The current disk node is a Dell 2650 with 260GB of disk for virtual machines and is serving up that space with &lt;a href="http://iscsitarget.sourceforge.net/"&gt;ietd&lt;/a&gt; since we don&amp;#8217;t have a hardware based iSCSI target card.&lt;/p&gt;
&lt;p&gt;The good thing about this new setup is I can migrate virtual machines between host nodes on demand while they are running so I can easily upgrade the host nodes as needed. Maybe some day I will get better monitoring set up so I can move virtual machines around to balance CPU load but that&amp;#8217;s not planned for the near future. The bad thing is I still have a single point of failure with the single disk node. Also the disk node doesn&amp;#8217;t have very much disk space so we have nearly filled it up which is why the cluster is only running 17 virtual machines. So the setup is not perfect but it&amp;#8217;s a pretty good start using hardware that was either donated or we already had.&lt;/p&gt;
&lt;p&gt;Down the road I want to replace the current disk node with two boxes replicating the data using &lt;a href="http://www.drbd.org/"&gt;DRBD&lt;/a&gt; and set up graceful fail-over between the two using heartbeat. The current plan is to upgrade the disk space on our &lt;a href="http://ftp.osuosl.org/pub/"&gt;mirror&lt;/a&gt; servers and use some of the old disk arrays for the Xen cluster. This will give us about 3TB total for 1.5TB of redundant disk space between the two disk nodes. That will give us enough space to move all of our existing virtual machines over to the cluster with room for 30-40 more for a total of 54-64. That won&amp;#8217;t quite fill up the Xen host nodes which can probably host 80-90 virtual machines while keeping one host node as a hot spare. It will be enough room for about a year and a half worth of growth and should enable us to provide great up time for the hosted projects. :-) Unfortunately with this plan the Xen upgrade is waiting on the mirror upgrade which is waiting on money to buy the new disks and I have no idea when that is going to happen. Hopefully something will pull though soon, the mirrors have been needing this upgrade for nearly a year now.&lt;/p&gt;
&lt;p&gt;And how does Gentoo fit into all of this? All of the Xen and disk hosts run Gentoo and are managed by our central cfengine system. I have been maintaining the Xen packages for Gentoo to keep them in working order for use at the OSL and the whole setup seems to work pretty well now. Hopefully later today I&amp;#8217;ll have a chance to start rolling packages for Xen 3.1.3 and 3.2.0.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A comment from an older version of my blog:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Very nice to read about the Xen setup the OSL uses. Incidentally, I was working on a Xen instance today too, but for a different reason: I need to support a legacy (and yes, closed source) application that still has SCO Unix format, and Xen just turns out to come in very handy for that, because I can run NetBSD on one VM and whatever I like on another: &lt;a href="http://fredericiana.com/2008/02/17/xen-netbsd-vm-on-a-debian-dom0/"&gt;&lt;a href="http://fredericiana.com/2008/02/17/xen-netbsd-vm-on-a-debian-dom0/"&gt;http://fredericiana.com/2008/02/17/xen-netbsd-vm-on-a-debian-dom0/&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All in all, I really like Xen and though I still find it quite hard to handle in some parts, it grew on me already :).&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.marineau.org/post/46615817473</link><guid>http://blog.marineau.org/post/46615817473</guid><pubDate>Sat, 02 Feb 2008 22:23:00 -0500</pubDate><category>osl</category><category>gentoo</category></item><item><title>Tidbits on Computer Science education</title><description>&lt;p&gt;&lt;em&gt;This is a blog entry from 2008 that for some reason I never polished and published at the time. During my migration to Tumblr I figured I might as well publish it as-is. Perhaps I&amp;#8217;ll revisit the subject some time, my perspective has changed since it was written. :)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I just read a couple articles, &lt;a href="http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html"&gt;Computer Science Education: Where Are the Software Engineers of Tomorrow?&lt;/a&gt; and a follow up &lt;a href="http://itmanagement.earthweb.com/career/article.php/3722876"&gt;Who Killed the Software Engineer? (Hint: It Happened in College)&lt;/a&gt;. If you haven&amp;#8217;t read them yet do so; they are pretty short and to the point as well. The basic idea is that computer science education has gotten dumbed down over the years though reducing requirements in things like math and algorithms and using Java far to much as a beginning programming language.&lt;/p&gt;
&lt;p&gt;Reading those reminded me of the problems I&amp;#8217;ve seen here at OSU. Luckily the problems they describe don&amp;#8217;t quite apply here. Java is used as a beginning programming language but C is currently used in courses such as Data Structures and Operating Systems I/II. OSU has actually moved away from Java over the past few years which is a very good thing. When I took the Data Structures course it was still using Java which was a good exercise in uselessness. It&amp;#8217;s was oh so much fun implementing data structures that were already available. The Operating Systems II course also moved to C, it used to be use Java and a phony OS called Nachos but now uses Linux. I even got to help put together some of the first projects for the course during the switch over. :-) Then there is the Computer Languages course which uses a handful of things such as Lisp, Haskel, Python, and Prolog depending on who is teaching. And of course there is some assembly in the Computer Architecture courses. So students do have to use a few different things and I sure hope they take the opportunity to learn more in classes that don&amp;#8217;t care about what language is used. I suspect many do just fall back on Java though. :-(&lt;/p&gt;
&lt;p&gt;One thing that the Java problem reminds me of though is the CS department&amp;#8217;s quest for a &amp;#8220;platform for learning.&amp;#8221; Electrical Engineering has a program called &amp;#8216;TekBots&amp;#8217; which basically starts every student off their freshman year with a little robot on wheels and over the years courses add on new things allowing the bot to do slightly more sophisticated things. If a similar &amp;#8220;platform&amp;#8221; is ever found for CS I&amp;#8217;m a bit worried what it might look like and what it would do. If it was a single application that students would slowly implement/replace parts of they would probably get tied to a single language and a single application design. I also suspect that CS students would tend to hate such a system far more than the EEs hate the TekBots.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46703919228</link><guid>http://blog.marineau.org/post/46703919228</guid><pubDate>Tue, 22 Jan 2008 04:46:00 -0500</pubDate><category>code</category></item><item><title>Waffles!</title><description>&lt;p&gt;By popular demand* here is my mom&amp;#8217;s pancake/waffle mix recipe. I&amp;#8217;m not sure where it originally came from but it is damn tasty. Enjoy.&lt;/p&gt;
&lt;pre&gt;Mix:
 3 1/2 C white flour               Combine all ingredients, mixing
 3 1/2 C whole wheat flour         together to resemble fine meal.
 1/2 C   wheat germ
 1/2 C   soy flour                 Tip: To make life easy add the
 1/2 C   cornmeal                  oil last and mix in with a whisk
 1 T+1 t salt                      or some sort of pastry blender.
 3 T     baking powder
 1 T+1 t baking soda
 1/2 C   oil

Pancakes:                          Waffles:
 1 Cup   mix                        Same as pancakes plus 2-3 Tbsp oil
 1       egg                       
 1 Cup   buttermilk
&lt;/pre&gt;
&lt;p&gt;*And by popular demand I mean Beth asked me, so I might as well post it here since I have to type it up anyway.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46616093891</link><guid>http://blog.marineau.org/post/46616093891</guid><pubDate>Fri, 04 Jan 2008 06:35:00 -0500</pubDate><category>food</category></item><item><title>OSL Beer Fund</title><description>&lt;p&gt;So, here is a crazy idea that I actually got around to implementing: The OSL Beer Fund. As a sysadmin for the Open Source Lab I work with a lot of people via email and IRC from all over the world. As a student I don&amp;#8217;t exactly have much of a budget to travel to far off conferences to meet up with many of those people. So the idea is this: if you would like to help save our sanity or simply say thanks to one of us but can&amp;#8217;t meet up for beers in person why not contribute a couple bucks to our beer fund? In return we can even give your favorite server a little extra luvin&amp;#8217;. Just contribute via paypal to beerfund_AT_osuosl.org.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt;&lt;br/&gt; The OSL Beer Fund is not associated with the &lt;a href="http://osuosl.org/"&gt;OSU Open Source Lab&lt;/a&gt; in any &lt;a href="http://osuosl.org/contribute/rackathon"&gt;official&lt;/a&gt; way. It just happens to have the email account &amp;#8216;beerfund&amp;#8217; under the osuosl.org domain, by chance a random letter generator gave us the acronym &amp;#8216;OSL&amp;#8217; to use as the fund&amp;#8217;s name, and somehow all beer purchased with the fund manages to go to students who work for the Open Source Lab (and who are of age of course). How that all worked out I don&amp;#8217;t know, we sure didn&amp;#8217;t plan it. ;-)&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.marineau.org/post/46616404229</link><guid>http://blog.marineau.org/post/46616404229</guid><pubDate>Wed, 08 Aug 2007 07:35:00 -0400</pubDate><category>osl</category></item><item><title>Summer Beach Trip!!</title><description>&lt;p&gt;I just got back from spending the weekend at the beach with a couple of my friends. We had a great time, go go summer! After spending last weekend with my family, half the week in Portland for OSCON, and now this weekend at the beach I haven&amp;#8217;t actually been in Corvallis much this past week. :-) Oh, and I&amp;#8217;ve posted &lt;a href="https://picasaweb.google.com/101041686198237983780/BeachTripWithFoco"&gt;some photos&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46616813548</link><guid>http://blog.marineau.org/post/46616813548</guid><pubDate>Mon, 30 Jul 2007 07:04:00 -0400</pubDate><category>life</category></item><item><title>Giving a chroot its own hostname with chname</title><description>&lt;p&gt;Since 2.6.19 Linux has supported a really nifty little feature: utsname namespaces. This is meant for use in fancy container systems but can be useful for simple chroots as well. By creating a chroot in a new namespace the chroot can be given its own hostname. This can be useful for managing a chroot as an independent host or simply making it easy to see if you are in the chroot or not.&lt;/p&gt;
&lt;p&gt;A while back I wrote a little tool called &lt;a href="http://code.google.com/p/chname/"&gt;chname&lt;/a&gt; to make use of the feature when not using a fancy container system. It will start a new process, such as chroot, with a new hostname:&lt;/p&gt;
&lt;pre&gt;chname newhost chroot /chroots/newhost /bin/bash&lt;/pre&gt;
&lt;p&gt;And poof!&lt;/p&gt;
&lt;p&gt;Hopefully someone else will also find this useful. For Gentoo users it is already in the Portage tree so just emerge it. :-)&lt;/p&gt;
&lt;p&gt;Be sure to compile your kernel with CONFIG_UTS_NS=y&lt;/p&gt;
&lt;pre&gt;General setup  ---&amp;gt;
  [*] UTS Namespaces
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;br/&gt; For those wondering &amp;#8220;Why bother?&amp;#8221; I originally wrote this to make running cfengine in a chroot easier. Our cfengine setup at the OSL configures systems based on hostname. Without changing the hostname cfagent must be run as:&lt;/p&gt;
&lt;pre&gt;cfagent -q -D newhost -D newhost_osuosl_org -N oldhost_osuosl_org&lt;/pre&gt;
&lt;p&gt;Which is kind of annoying sometimes. Also, thanks to a bug/feature in cfengine if a system hosts a chroot it must always be referred to in the cfengine config as the full oldhost_osuosl_org instead of the nice and shorter oldhost class. It is impossible to unset the class oldhost, but at least undefining oldhost_osuosl_org works. Maybe I&amp;#8217;ll fix cfengine some day so undefining oldhost works but I kinda like the chname method better.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46688543379</link><guid>http://blog.marineau.org/post/46688543379</guid><pubDate>Mon, 23 Jul 2007 18:58:00 -0400</pubDate><category>code</category><category>gentoo</category></item><item><title>Cake, Xen, and other such things</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/058f4829242c0489e306b09b134a4a87/tumblr_inline_mkhl32RTe91qz4rgp.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Basically, I need a smaller laptop. My current one is breaking, heavy to carry around, and most importantly the screen blocks to much of the fire that I am sitting in front of at the moment. Go go back yard fire pits! :-)&lt;/p&gt;
&lt;p&gt;Over the past month I have been working full time at the &lt;a href="http://osuosl.org/"&gt;OSL&lt;/a&gt; and have been getting quite a bit done which is a very welcome improvement over the school year. I think I accomplished more in the first week of the summer than I did over the entire previous term. I can hardly remember what all I did, but the biggest things have been rewriting our internal inventory app and Xen stuff.&lt;/p&gt;
&lt;p&gt;Our original app was written in Ruby on Rails, was slow as heck, and adding stuff required figuring out a new and strange looking language. (And after our experience with trying to run a busy RoR site none of us sys-admins wanted anything to do with it anything in RoR.) Over a couple weeks I managed to plop a new &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt; based interface on top of the old database, add a handful of new features like automatic database schema upgrades, a simple visual view of each rack, and the whole thing runs a lot faster than the old one did. The app mostly does what we need it to so I&amp;#8217;ve stopped development, any fancier features can wait until &lt;a href="http://raivproject.osuosl.org"&gt;RAIV&lt;/a&gt; is done.&lt;/p&gt;
&lt;p&gt;On the Xen front, I spent part of last week getting the 3.1.0 ebuilds ready to go along 2.6.18 and 2.6.20 kernels! Finally no more 2.6.16! :-) The only significant issue that I know of at this point is that the 2.6.20 kernel will not run as a x86_32p guest on a x86_64 Xen, but since support for that is new to 3.1.0 and the 2.6.18 kernel is working I&amp;#8217;m not going to worry about it to much. So unless something significant crops up I&amp;#8217;m going to push it all into the portage tree early next week.&lt;/p&gt;</description><link>http://blog.marineau.org/post/46689376730</link><guid>http://blog.marineau.org/post/46689376730</guid><pubDate>Tue, 03 Jul 2007 01:53:00 -0400</pubDate><category>osl</category><category>gentoo</category></item><item><title>Random find in my email: Chocolate!</title><description>&lt;p&gt;So I just finished importing all my mail archives starting from the beginning of college into Gmail and randomly found this recipe that I had sent to someone a few years back:&lt;/p&gt;
&lt;pre&gt;No-Bake Chocolate Cookies

2 c. sugar                              1/2 tsp. vanilla
1/2 c. cocoa                            1/2 c. peanut butter
1/2 c. butter or margarine              3 c. quick oats
pinch of salt
1/2 c. milk

In large saucepan, combine sugar, cocoa, butter, salt, and milk. Bring
to a boil and boil for 1 minute, stirring constantly.

Remove from heat and add vanilla, peanut butter, and oats. Mix quickly
and drop by tsp. onto wax paper to cool.
&lt;/pre&gt;</description><link>http://blog.marineau.org/post/46689726599</link><guid>http://blog.marineau.org/post/46689726599</guid><pubDate>Sat, 09 Jun 2007 20:22:00 -0400</pubDate><category>food</category></item><item><title>I’ve finally gotten around to posting my photos from...</title><description>&lt;img src="http://25.media.tumblr.com/9ad177bfe13e6aa4d4f91c85595f2a9a/tumblr_mkhlue3qKC1s7ojlgo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I’ve finally gotten around to posting my &lt;a href="https://picasaweb.google.com/101041686198237983780/Ecuador"&gt;photos from Ecuador&lt;/a&gt;. Perhaps I’ll write more about the trip some day but for now feel free to browse through them. :-)&lt;/p&gt;</description><link>http://blog.marineau.org/post/46690378018</link><guid>http://blog.marineau.org/post/46690378018</guid><pubDate>Sat, 19 May 2007 21:11:00 -0400</pubDate><category>life</category></item></channel></rss>
