<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"><channel><title>Devin's Thought Stream</title><link>http://www.devinvenable.com</link><description>
    A composite feed of Devin's bookmarks, blogs, pictures, 
    WIKI entries, and anything else he throws in the pot.
    </description><lastBuildDate>Sun, 05 Sep 2010 09:47:04 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Thrift vs. Protocol Buffers - Digital Digressions by Stuart Sierra</title><link>http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers</link><description></description><guid>http://www.delicious.com/url/3b2a7da495123c9aa58a782a5260bcb4#devinvenable</guid><pubDate>Fri, 03 Sep 2010 21:05:05 +0000</pubDate></item><item><title>Python web services with SoapLib « El blog de Carlos Ble</title><link>http://www.carlosble.com/?p=126</link><description></description><guid>http://www.delicious.com/url/12bac58d0ade39cf6f1b55d4b6dd5f92#devinvenable</guid><pubDate>Tue, 31 Aug 2010 18:53:19 +0000</pubDate></item><item><title>Django snippets: SOAP views with on-demand WSDL generation</title><link>http://djangosnippets.org/snippets/979/</link><description></description><guid>http://www.delicious.com/url/6a3bde708e36e85b5a9bf240d6e66fd3#devinvenable</guid><pubDate>Tue, 31 Aug 2010 18:42:43 +0000</pubDate></item><item><title>Python SOAP client with suds</title><link>http://www.jansipke.nl/python-soap-client-with-suds</link><description></description><guid>http://www.delicious.com/url/9f7a904e625f3b2a0a1cc183cac6af0e#devinvenable</guid><pubDate>Sun, 29 Aug 2010 23:25:53 +0000</pubDate></item><item><title>Help me find David Max Lee</title><link>http://devinvenable.blogspot.com/2010/08/help-me-find-david-max-lee.html</link><description>So I've got this old bandmate from twenty years ago that I'd like to locate.  As the title of this blog post suggests, his name is David Max Lee.  It's a full name constructed from rather common names and so it's been tricky hunting him down.  I finally gave in and paid one of the people finder sites a few bucks to help me track him down.  Here are some of the clues I have to his whereabouts:&lt;br /&gt;&lt;br /&gt;*  He should be about 43 years old&lt;br /&gt;*  He has lived in both Dallas and Arlington, TX&lt;br /&gt;*  He is a hacker in the sense that he likes to toy with computers and electronics&lt;br /&gt;*  He was once a member of the Dallas based band SPY  &lt;br /&gt;&lt;br /&gt;Speaking of SPY, I just recently found a copy of a low-budget video we made back in the 80's.  It's posted on youtube:&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/user/jhwhitaker#p/a/u/0/llj1prdX6lc&lt;br /&gt;&lt;br /&gt;David is the tallest one, most often standing on the far right in the group shots.&lt;br /&gt;&lt;br /&gt;The people finder site helped me locate records belonging to a David Max Lee born on  08/24/1967.  This might be him.  These were the given addresses and phone numbers:&lt;br /&gt;&lt;br /&gt;ADDRESS 1: &lt;br /&gt;4220 SILVERWOOD TRL,&lt;br /&gt;KELLER, TX 76248&lt;br /&gt;&lt;br /&gt;ADDRESS 2: &lt;br /&gt;8728 SARANAC TRL,&lt;br /&gt;FORT WORTH, TX 76118&lt;br /&gt;&lt;br /&gt;ADDRESS 3: &lt;br /&gt;1364 SHADY LN #1105,&lt;br /&gt;BEDFORD, TX 76021&lt;br /&gt;&lt;br /&gt;ADDRESS 4: &lt;br /&gt;9364 BRIARHURST DR,&lt;br /&gt;DALLAS, TX 75243&lt;br /&gt;&lt;br /&gt;ADDRESS 5: &lt;br /&gt;7225 FAIR OAKS AVE #301,&lt;br /&gt;DALLAS, TX 75231&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(817) 284-3834&lt;br /&gt;(817) 355-9464&lt;br /&gt;(817) 846-9077&lt;br /&gt;868-7653&lt;br /&gt;(817) 868-7653&lt;br /&gt;&lt;br /&gt;Following these leads, I found an amateur radio license issued to David M Lee.  This makes me think I'm on to the right David Lee, as amateur radio sounds like just the kind of thing David would be into.&lt;br /&gt;&lt;br /&gt;Call Sign: KD5YGM, Licensee ID: L00633781&lt;br /&gt;Grant Date: 06/26/2003, Expiration Date: 06/26/2013, Certifier: David M Lee&lt;br /&gt;Registrant: David M Lee, 8728 Saranac Trail, Fort Worth, TX 76118&lt;br /&gt;&lt;br /&gt;Read more: http://www.city-data.com/aradio/lic-Fort-Worth-Texas2.html#ixzz0xeMRm87v&lt;br /&gt;&lt;br /&gt;I found a second license issued to someone with the same name from 1996, but not sure that the two are related.&lt;br /&gt;&lt;br /&gt;Call Sign: KF4LAB&lt;br /&gt;Grant Date: 07/25/1996, Expiration Date: 07/25/2006, Cancellation Date: 07/26/2008&lt;br /&gt;Registrant: David M Lee, 3222 Lee Rd 56, Auburn, AL 36830&lt;br /&gt;&lt;br /&gt;Read more: http://www.city-data.com/aradio/lic-Auburn-Alabama.html#ixzz0xeN14UBW&lt;br /&gt;&lt;br /&gt;Unfortunately the trail went cold from there.  I heard a rumor a few years back that David is dead and I am hoping this is untrue.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-1847713672685831622?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-1847713672685831622</guid><pubDate>2010-08-25T13:08:14.482-07:00</pubDate></item><item><title>Anderson Santos - Finally cx_Oracle, Debian and Python 2.5</title><link>http://my.opera.com/curaloucura/blog/finally-cx-oracle-debian-and-python-2-5</link><description></description><guid>http://www.delicious.com/url/33f99f282142ac9fbfc16f3c813a3124#devinvenable</guid><pubDate>Tue, 24 Aug 2010 14:19:04 +0000</pubDate></item><item><title>Dynamic upload paths in Django</title><link>http://scottbarnham.com/blog/2008/08/25/dynamic-upload-paths-in-django/</link><description></description><guid>http://www.delicious.com/url/ec2aebccde19e459a3ba22beabbd33a8#devinvenable</guid><pubDate>Wed, 11 Aug 2010 15:06:40 +0000</pubDate></item><item><title>Ubuntu 10.04 with full cluster stack support « Florian&#8217;s blog</title><link>http://fghaas.wordpress.com/2010/05/03/ubuntu-10-04-with-full-cluster-stack-support/</link><description></description><guid>http://www.delicious.com/url/b166e40ab62875a152f9cee188a67231#devinvenable</guid><pubDate>Wed, 04 Aug 2010 14:08:42 +0000</pubDate></item><item><title>Linux-Helps: How to install and configure Linux-HA high avaliability heartbeat - 3.0 cluster on redhat rhel5</title><link>http://helpinlinux.blogspot.com/2010/05/how-to-install-and-configure-linux-ha.html</link><description></description><guid>http://www.delicious.com/url/2d7994129a5ac63758658bc80d72c0e6#devinvenable</guid><pubDate>Wed, 04 Aug 2010 13:36:01 +0000</pubDate></item><item><title>OpenGL Intellivision Man</title><link>http://devinvenable.blogspot.com/2010/07/opengl-intellivision-man.html</link><description>Not long ago I set out to turn an animated gif I found of the Intellivision Running Man into an OpenGL generated video clip.  My goal was to shrink the images into tiny bitmaps, a.k.a. 8-bit, and then use the resulting bitmap data as positioning information within a 3D space.  Another way of saying it: I wanted to render each pixel from the original images as a 3D block.  Jump to the video to get a better idea about what I mean:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=E1rXt0l2pxY"&gt;http://www.youtube.com/watch?v=E1rXt0l2pxY&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Along the way I took a few turns.  I never did reduce the image data to its smallest possible representation.  I did reduce the image size for each image to 24x24 pixels and I converted the image data to grayscale.  Using the handy PIL library, I was able to pull in the bitmap file data as a tuple of pixel values.  I used each "pixel" to offset the drawing position in pyglet's on_draw handler.  &lt;br /&gt;&lt;br /&gt;The code I used to render the animation is a hack of an example found here:&lt;br /&gt;&lt;br /&gt;http://code.google.com/p/pyglet-hene/source/browse/trunk/&lt;br /&gt;&lt;br /&gt;This is a fairly ugly hack, meaning I didn't work to make the code beautiful.  It's just the original code, chopped, altered and enhanced as needed to accomplish what I wanted to see rendered on the screen.  &lt;br /&gt;&lt;br /&gt;Though not provided here, to run this code an image directory needs to be provided named "data" containing a series of bitmaps.  My directory contains this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ls -ltr&lt;br /&gt;total 32&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 9.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 8.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 6.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 5.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 4.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 3.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 2.bmp&lt;br /&gt;-rw-r--r-- 1 dvenable dvenable 1654 2010-07-20 14:06 1.bmp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you are so inclined to try your own little experiment, find a favorite animated gif on the web, extract each frame, reduce size, convert to grayscale and drop your own images in a directory similar to the one I created here.  Your animation result should be similar to what I've produced here.&lt;br /&gt;&lt;br /&gt;And here's the complete source:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from pyglet.gl import *&lt;br /&gt;import pyglet&lt;br /&gt;from pyglet.window import *&lt;br /&gt;from pyglet import image&lt;br /&gt;import os&lt;br /&gt;from PIL import Image&lt;br /&gt;import glob&lt;br /&gt;from math import sin, cos&lt;br /&gt;&lt;br /&gt;window = pyglet.window.Window(width=640, height=480, resizable=True)&lt;br /&gt;&lt;br /&gt;y=0.0&lt;br /&gt;x=-10.0     &lt;br /&gt;z=10.0    &lt;br /&gt;xspeed = 0.5&lt;br /&gt;yspeed = 0.0&lt;br /&gt;lx=ly=0&lt;br /&gt;lz=-2&lt;br /&gt;angle=ratio=0.0&lt;br /&gt;&lt;br /&gt;boxcol = [ [1.0, 0.0, 0.0], # bright: red&lt;br /&gt;           [1.0, 0.5, 0.0],        # orange&lt;br /&gt;           [1.0, 1.0, 0.0],        # yellow&lt;br /&gt;           [0.0, 1.0, 0.0],        # green&lt;br /&gt;           [0.0, 1.0, 1.0],        # blue&lt;br /&gt;                        ]&lt;br /&gt;&lt;br /&gt;# Dark: red, orange, yellow, green ,blue&lt;br /&gt;topcol =[ [0.6, 0.0, 0.0],&lt;br /&gt;          [0.6, 0.25, 0.0],&lt;br /&gt;          [0.6, 0.6, 0.0],&lt;br /&gt;          [0.0, 0.6 ,0.0],&lt;br /&gt;          [0.0, 0.6, 0.6]]&lt;br /&gt;                        &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;box = None # display list storage&lt;br /&gt;top = None #display list storage&lt;br /&gt;&lt;br /&gt;yloop = None # loop for y axis&lt;br /&gt;xloop = None # loop for x axies&lt;br /&gt;&lt;br /&gt;bmpdata = None &lt;br /&gt;nextimg = 0&lt;br /&gt;files = None&lt;br /&gt;&lt;br /&gt;def load_image_data():&lt;br /&gt;    global bmpdata, bmpdatalen, files &lt;br /&gt;&lt;br /&gt;    files = glob.glob('data/*.bmp')&lt;br /&gt;    files.sort()&lt;br /&gt;    bmpdata = map(lambda x: Image.open(x).getdata(), files.__iter__())&lt;br /&gt;    bmpdatalen = len(bmpdata)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def build_lists():&lt;br /&gt;  global box, top&lt;br /&gt;  box = glGenLists(2)&lt;br /&gt;&lt;br /&gt;  glNewList(box, GL_COMPILE)    # new compiled box display list&lt;br /&gt;&lt;br /&gt;  # draw the box without the top (it will be store in display list&lt;br /&gt;  # and will not appear on the screen)&lt;br /&gt;  glBegin(GL_QUADS)&lt;br /&gt;  &lt;br /&gt;  # front face&lt;br /&gt;  glTexCoord2f(0.0, 0.0);       glVertex3f(-1.0, -1.0, 1.0)&lt;br /&gt;  glTexCoord2f(1.0, 0.0);       glVertex3f(1.0, -1.0, 1.0)&lt;br /&gt;  glTexCoord2f(1.0, 1.0);       glVertex3f(1.0, 1.0, 1.0)&lt;br /&gt;  glTexCoord2f(0.0, 1.0);       glVertex3f(-1.0, 1.0, 1.0)&lt;br /&gt;  # back face&lt;br /&gt;  glTexCoord2f(1.0, 0.0);       glVertex3f(-1.0, -1.0, -1.0)&lt;br /&gt;  glTexCoord2f(1.0, 1.0);       glVertex3f(-1.0, 1.0, -1.0)&lt;br /&gt;  glTexCoord2f(0.0, 1.0);       glVertex3f(1.0, 1.0, -1.0)&lt;br /&gt;  glTexCoord2f(0.0, 0.0);       glVertex3f(1.0, -1.0, -1.0)&lt;br /&gt;  # right face&lt;br /&gt;  glTexCoord2f(1.0, 0.0);       glVertex3f(1.0, -1.0, -1.0)&lt;br /&gt;  glTexCoord2f(1.0, 1.0);       glVertex3f(1.0, 1.0, -1.0)&lt;br /&gt;  glTexCoord2f(0.0, 1.0);       glVertex3f(1.0, 1.0, 1.0)&lt;br /&gt;  glTexCoord2f(0.0, 0.0);       glVertex3f(1.0, -1.0, 1.0)&lt;br /&gt;  # left face&lt;br /&gt;  glTexCoord2f(0.0, 0.0);       glVertex3f(-1.0, -1.0, -1.0)&lt;br /&gt;  glTexCoord2f(1.0, 0.0);       glVertex3f(-1.0, -1.0, 1.0)&lt;br /&gt;  glTexCoord2f(1.0, 1.0);       glVertex3f(-1.0, 1.0, 1.0)&lt;br /&gt;  glTexCoord2f(0.0, 1.0);       glVertex3f(-1.0, 1.0, -1.0)&lt;br /&gt;  glEnd()&lt;br /&gt;&lt;br /&gt;  glEndList()   # Done building the list&lt;br /&gt;&lt;br /&gt;  top=box+1&lt;br /&gt;&lt;br /&gt;  glNewList(top, GL_COMPILE)    # new compiled top display list&lt;br /&gt;  # Top face&lt;br /&gt;  glBegin(GL_QUADS)&lt;br /&gt;  glTexCoord2f(0.0, 1.0); glVertex3f(-1.0, 1.0, -1.0)&lt;br /&gt;  glTexCoord2f(0.0, 0.0); glVertex3f(-1.0, 1.0, 1.0)&lt;br /&gt;  glTexCoord2f(1.0, 0.0); glVertex3f(1.0, 1.0, 1.0)&lt;br /&gt;  glTexCoord2f(1.0, 1.0); glVertex3f(1.0, 1.0, -1.0)&lt;br /&gt;  &lt;br /&gt;  glTexCoord2f(1.0, 1.0);       glVertex3f(-1.0, -1.0, -1.0)&lt;br /&gt;  glTexCoord2f(0.0, 1.0);       glVertex3f(1.0, -1.0, -1.0)&lt;br /&gt;  glTexCoord2f(0.0, 0.0);       glVertex3f(1.0, -1.0, 1.0)&lt;br /&gt;  glTexCoord2f(1.0, 0.0);       glVertex3f(-1.0, -1.0, 1.0)&lt;br /&gt;  glEnd()&lt;br /&gt;  glEndList()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;     &lt;br /&gt;def load_gl_textures():&lt;br /&gt;        # load bitmaps and convert to textures&lt;br /&gt;        global texture, texture_file, texture_surf&lt;br /&gt;        #texture_file = os.path.join('data', 'cube.bmp')&lt;br /&gt;        texture_file = files[nextimg]&lt;br /&gt;        texture_surf = image.load(texture_file)&lt;br /&gt;        texture = texture_surf.get_texture()&lt;br /&gt;        glBindTexture(GL_TEXTURE_2D, texture.id)&lt;br /&gt;&lt;br /&gt;        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)&lt;br /&gt;        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;def init():&lt;br /&gt;    """&lt;br /&gt;    Pyglet oftentimes calls this setup()    &lt;br /&gt;    """&lt;br /&gt;    glEnable(GL_TEXTURE_2D)&lt;br /&gt;&lt;br /&gt;    load_image_data()&lt;br /&gt;    load_gl_textures()&lt;br /&gt;    build_lists()&lt;br /&gt;&lt;br /&gt;    glShadeModel(GL_SMOOTH) # Enables smooth shading&lt;br /&gt;    glClearColor(0.0, 0.0, 0.0, 0.0) #Black background&lt;br /&gt;    &lt;br /&gt;    glClearDepth(1.0)               # Depth buffer setup&lt;br /&gt;    glEnable(GL_DEPTH_TEST)         # Enables depth testing&lt;br /&gt;    glDepthFunc(GL_LEQUAL)          # The type of depth test to do&lt;br /&gt;&lt;br /&gt;    glEnable(GL_LIGHT0) # quick and dirty lighting &lt;br /&gt;    &lt;br /&gt;    #glEnable(GL_LIGHTING)  # enable lighting&lt;br /&gt;    glEnable(GL_COLOR_MATERIAL)     # enable coloring&lt;br /&gt;&lt;br /&gt;    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)       # Really nice perspective calculations&lt;br /&gt;       &lt;br /&gt;    &lt;br /&gt;     &lt;br /&gt;@window.event&lt;br /&gt;def on_draw():&lt;br /&gt;    global nextimg, bmpdata, x, y, z, lx, ly, lz&lt;br /&gt;&lt;br /&gt;    # Here we do all the drawing&lt;br /&gt;    glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT)&lt;br /&gt;&lt;br /&gt;    # Select the texture&lt;br /&gt;    load_gl_textures()&lt;br /&gt;    #glBindTexture(GL_TEXTURE_2D, texture.id)&lt;br /&gt;&lt;br /&gt;    xloop = 1&lt;br /&gt;    yloop = 1&lt;br /&gt;    &lt;br /&gt;    mandata = bmpdata[nextimg]&lt;br /&gt;    for idx in range (0, len(mandata)):&lt;br /&gt;        if (idx+1) % 24 == 0:&lt;br /&gt;            yloop += 1&lt;br /&gt;            xloop = 1&lt;br /&gt;        else:&lt;br /&gt;            xloop += 1&lt;br /&gt;        if mandata[idx] &lt; 100:&lt;br /&gt;&lt;br /&gt;            glLoadIdentity()        # reset our view&lt;br /&gt;            gluLookAt(x,y,z, x+lx , y+ly, z+lz, 0.0, 1.0, 0.0)&lt;br /&gt;&lt;br /&gt;            glTranslatef( xloop*1.8 - 30 ,&lt;br /&gt;                                      28 - yloop*2.4 ,&lt;br /&gt;                                      -60.0)&lt;br /&gt;            glColor3f(*boxcol[xloop % 4]) # select a box color&lt;br /&gt;            glCallList(box) # draw the box&lt;br /&gt;&lt;br /&gt;            glColor3f(*topcol[1])&lt;br /&gt;            glCallList(top)  # draw the top&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    return pyglet.event.EVENT_HANDLED&lt;br /&gt;      &lt;br /&gt;def moveMeFlat(direction):&lt;br /&gt;    global x, z, y, lx, lz, ly &lt;br /&gt;    x = x - direction*(lx)*0.75;&lt;br /&gt;    y = y + direction*(ly)*0.5;&lt;br /&gt;    z = z + direction*(lz)*0.5;&lt;br /&gt; &lt;br /&gt;def orientMe(ang):&lt;br /&gt;    global lx, lz&lt;br /&gt;    lx = sin(ang)&lt;br /&gt;    lz = -cos(ang)&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;def update(dt):&lt;br /&gt;    global z, angle&lt;br /&gt;    angle +=0.005&lt;br /&gt;    orientMe(angle)&lt;br /&gt;    moveMeFlat(0.5)&lt;br /&gt;&lt;br /&gt;def update2(dt):&lt;br /&gt;    global nextimg&lt;br /&gt;    if nextimg &lt; bmpdatalen-1:&lt;br /&gt;        nextimg += 1&lt;br /&gt;    else:&lt;br /&gt;        nextimg = 0 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;pyglet.clock.schedule_interval(update2, .1)&lt;br /&gt;pyglet.clock.schedule(update)&lt;br /&gt;        &lt;br /&gt;@window.event&lt;br /&gt;def on_resize(width, height):&lt;br /&gt;        if height==0:&lt;br /&gt;            height = 1&lt;br /&gt;        glViewport(0, 0, width, height)&lt;br /&gt;        glMatrixMode(GL_PROJECTION)&lt;br /&gt;        glLoadIdentity()&lt;br /&gt;&lt;br /&gt;        # Calculate the aspect ratio of the window&lt;br /&gt;        gluPerspective(45.0, 1.0*width/height, 0.1, 100.0)&lt;br /&gt;&lt;br /&gt;        glMatrixMode(GL_MODELVIEW)&lt;br /&gt;        glLoadIdentity()&lt;br /&gt;        return pyglet.event.EVENT_HANDLED&lt;br /&gt;        &lt;br /&gt;init()  &lt;br /&gt;&lt;br /&gt;pyglet.app.run()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-8222756479919894434?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-8222756479919894434</guid><pubDate>2010-07-30T12:33:42.350-07:00</pubDate></item><item><title>Cross-compile ActiveMQ-cpp on Centos 5</title><link>http://devinvenable.blogspot.com/2010/07/cross-compile-activemq-cpp-on-centos-5.html</link><description>To date an RPM for activemq-cpp is not available for Centos 5.  I found RPMs in Fedora 13 and 14 repositories, but due to dependencies on fresher libs, they won't install.    &lt;br /&gt;&lt;br /&gt;Building for 32 bit architecture on 64 bit Centos 5 was a bit tricky.  Here's the recipe I came up with that worked for me:&lt;br /&gt;&lt;br /&gt;Install dependencies:  &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yum install expat-devel zlib-devel uuid-c++-devel openssl-devel&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Download sources from here or other mirrors:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;wget http://www.carfab.com/apachesoftware/activemq/activemq-cpp/source/activemq-cpp-library-3.2.1-src.tar.gz&lt;br /&gt;wget http://mirror.candidhosting.com/pub/apache/apr/apr-1.4.2.tar.gz&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Extract archives and build APR first.  Note PKG_CONFIG_PATH, as this is one of the keys to ensuring that lib64 libraries are not found during link step.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@myserver] cd apr-1.4.2&lt;br /&gt;[root@myserver] ./configure --prefix=/usr --libdir=/usr/lib CXXFLAGS="-m32" LDFLAGS="-m32" CFLAGS="-m32" --build=i686-redhat-linux-gnu PKG_CONFIG_PATH=/usr/lib/pkgconfig &lt;br /&gt;[root@myserver] ./make&lt;br /&gt;[root@myserver] ./make install&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Next build and install ActiveMQ-cpp:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[root@myserver] cd ../activemq-cpp-library-3.2.1&lt;br /&gt;[root@myserver] ./configure --prefix=/usr --libdir=/usr/lib CXXFLAGS="-m32" LDFLAGS="-m32" CFLAGS="-m32" --build=i686-redhat-linux-gnu PKG_CONFIG_PATH=/usr/lib/pkgconfig --with-apr=../apr-1.4.2/apr-1-config&lt;br /&gt;[root@myserver] ./make&lt;br /&gt;[root@myserver] ./make install&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-7819147244151068149?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-7819147244151068149</guid><pubDate>2010-07-20T07:31:04.675-07:00</pubDate></item><item><title>devinvenable: A bunch of year old tweats are showing up with recent dates in my RSS feed.  Must figure out why...</title><link>http://twitter.com/devinvenable/statuses/18438023168</link><description>devinvenable: A bunch of year old tweats are showing up with recent dates in my RSS feed.  Must figure out why...</description><guid>http://twitter.com/devinvenable/statuses/18438023168</guid><pubDate>Tue, 13 Jul 2010 13:48:02 +0000</pubDate></item><item><title>qemu-img</title><link>http://devinvenable.blogspot.com/2010/07/qemu-img.html</link><description>qemu-img is a handy tool for converting one virtual machine image format into another.  &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;qemu-img convert windowsxp.img -O vdi windowsxp.vdi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I had need for its use after running into errors creating a virtual machine with virt-manager.  KVM managed by virt-manager has been my recent virtualization solution of choice, that is, until last Friday when I hit a snag creating a new virtual machine for WindowsXP.  The installation process got stuck and I wasn't able to recover.  Following advice from somewhere it the net-realm, I opted to create the image using this easy command line two-liner.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; dd if=/dev/zero of=vm8.img bs=2048k count=12000&lt;br /&gt; kvm -m 512 -cdrom winxp.iso -boot d v8.img&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The installation was successful and running the image from the command line using kvm was a snap, but what I really wanted was to place this image under the control of virt-manager.&lt;br /&gt;&lt;br /&gt;I couldn't find a nice option to import an existing image, so if it exists it is not very intuitive.  Apparently to place it under virt-manager's control I would need to create an xml file under /etc/libvirt/qemu/ and in addition I would probably need to convert the image from raw format to qcow2.  But after messing around with this for too long, a colleague recommended I use virtualbox.&lt;br /&gt;&lt;br /&gt;I used virtualbox in the past, so I figured a different approach might be worthwhile and  should get me beyond the headache in the short term. But what about the work I did creating the original image?  Installing WindowsXP is a hassle, not to mention the effort I'd put into installing subsequent software on the image.&lt;br /&gt;&lt;br /&gt;And that's where qemu-img came in. virtualbox only reads vmi formatted images, thus I converted my raw image to vmi.&lt;br /&gt;&lt;br /&gt;Updated: FAIL&lt;br /&gt;&lt;br /&gt;Importing the new vmi was easy enough, but once I created the new virtual machine and started it...I got this error from virtualbox-osi:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;"Failed to start the virtual machine windowsxp.  VirtualBox can't operate in VMX root mode.  Please disable the KVM kernel extension, recompile your kernel and reboot."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Okay...but I will silently resent you.&lt;br /&gt;&lt;br /&gt;Updated:  Original image hung after removing KVM.  At this point I'm going to throw up my hands and create a new image and fresh install.  I'm at the point of diminishing returns...&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-148068353075630881?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-148068353075630881</guid><pubDate>2010-07-13T07:18:18.228-07:00</pubDate></item><item><title>5. Built-in Types &#8212; Python v2.7 documentation</title><link>http://docs.python.org/library/stdtypes.html</link><description></description><guid>http://www.delicious.com/url/4baa0ca015a6d35d93f07d9ed19e79a7#devinvenable</guid><pubDate>Sat, 10 Jul 2010 00:23:47 +0000</pubDate></item><item><title>devinvenable: Lots of great opengl via pyglet information at http://tartley.com/.</title><link>http://twitter.com/devinvenable/statuses/18080923782</link><description>devinvenable: Lots of great opengl via pyglet information at http://tartley.com/.</description><guid>http://twitter.com/devinvenable/statuses/18080923782</guid><pubDate>Fri, 09 Jul 2010 01:52:45 +0000</pubDate></item><item><title>tartley.com : A website dedicated to oneself has been described as the greatest act of hubris. Welcome aboard.</title><link>http://tartley.com/</link><description></description><guid>http://www.delicious.com/url/ee26231a82b9704a8d0521ddb95d47f2#devinvenable</guid><pubDate>Fri, 09 Jul 2010 00:34:27 +0000</pubDate></item><item><title>Tutorial</title><link>http://www.pythonware.com/library/pil/handbook/introduction.htm</link><description></description><guid>http://www.delicious.com/url/25cd408518c5df0ce6103aab6b4b9098#devinvenable</guid><pubDate>Wed, 07 Jul 2010 16:59:56 +0000</pubDate></item><item><title>WorkingWithImages - wxPyWiki</title><link>http://wiki.wxpython.org/index.cgi/WorkingWithImages</link><description></description><guid>http://www.delicious.com/url/458da0a01ff63ec41582725559c495d5#devinvenable</guid><pubDate>Wed, 07 Jul 2010 16:57:20 +0000</pubDate></item><item><title>[SOLVED] PIL convert 16bit grayscale to 8 bit - Ubuntu Forums</title><link>http://ubuntuforums.org/showthread.php?t=1483265</link><description></description><guid>http://www.delicious.com/url/3c0c77d21aba35e933ae73f5a95b5852#devinvenable</guid><pubDate>Wed, 07 Jul 2010 16:57:06 +0000</pubDate></item><item><title>Going really 8-bit</title><link>http://devinvenable.blogspot.com/2010/07/going-really-8-bit.html</link><description>Back when I was a kid, my nerd friends and I would create graphics for our Commodore computers by filling filling in squares on graph paper and calculating the bitmaps. A single character on the Commodore 64 and Vic 20 was an 8x8 grid.  &lt;br /&gt;&lt;br /&gt;I recently found an 8-bit image fondly remembered from my youth, the Intellivision Running Man, in animated GIF format.  I converted the GIF to a short video, which I embedded in a &lt;a href="http://www.youtube.com/watch?v=6S1eo305mLQ"&gt;video project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Some of my video conversion notes were covered in &lt;a href="http://devinvenable.blogspot.com/2010/06/animated-gif-to-video.html"&gt;another post&lt;/a&gt; and some are on my &lt;a href="http://wiki.devinvenable.com/mediawiki/index.php/Video"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I want to extract the Intellivision Running Man bitmaps for use in an opengl project that I'm thinking about doing.  Though it would probably be simpler for me to just sit down with pen and paper to graph and calculate the bitmaps, I'm hoping to find tools that will allow me to extract the data directly from raw video. &lt;br /&gt;&lt;br /&gt;I first needed to reduce the screen resolution as much as possible by shrinking the video and dropping frames.  Here I shrank the video output to 24x24 and reduced the frame rate to 4 frames per second.&lt;br /&gt;&lt;br /&gt; ffmpeg -i intel.avi -r 4 -s 24x24 intel8bit.avi&lt;br /&gt;&lt;br /&gt;Next I extracted individual bitmap images:&lt;br /&gt;&lt;br /&gt; ffmpeg -i intel8bit.avi -f image2 foo_%5d.bmp&lt;br /&gt;&lt;br /&gt;I initially took one image into Gimp and used Desaturate to convert it to grayscale, and then I used Levels to reduce image to pure Black or White.  But I didn't want to repeat this again and again.  So I wrote a small Python script which achieved the same goal and along the way got to play with the PIL library, which I've not used before.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from PIL import Image&lt;br /&gt;import sys, os&lt;br /&gt;&lt;br /&gt;def bw(pt):&lt;br /&gt;    if pt&gt;126:&lt;br /&gt;        return 255&lt;br /&gt;    else:&lt;br /&gt;        return 0&lt;br /&gt;&lt;br /&gt;for infile in sys.argv[1:]:&lt;br /&gt;    f, e = os.path.splitext(infile)&lt;br /&gt;    outfile = f + "_mod" + e&lt;br /&gt;&lt;br /&gt;    im = Image.open(infile)&lt;br /&gt;&lt;br /&gt;    im = im.convert('L')&lt;br /&gt;    out = im.point(bw)&lt;br /&gt;&lt;br /&gt;    out.save(outfile)&lt;br /&gt;    print outfile&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;&lt;br /&gt;This little script loads a bitmap then uses convert() with the 'L' option to make it grayscale.  (I couldn't find a comprehensive list of options for convert---the documentation could use some work.)&lt;br /&gt;&lt;br /&gt;Finally, I used the point method that passes each pixel in the bitmap data to a custom function.  Your function can do anything, but mine just looks at the value, makes higher level grays absolute black and lower level grays absolute white.  point() returns a copy of the bitmap file (headers updated and intact) with the transformed result, which is then saved.&lt;br /&gt;&lt;br /&gt;At this point I have true black and white bitmaps.&lt;br /&gt;&lt;br /&gt;I wanted to quickly visualize my bitmap, to get a feel for how much more I want to reduce the size of my bitmaps.  This little script renders my images to screen as a series of X's.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from PIL import Image&lt;br /&gt;import sys, os&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for infile in sys.argv[1:]:&lt;br /&gt;&lt;br /&gt;    im = Image.open(infile)&lt;br /&gt;    data = im.getdata()&lt;br /&gt;    for idx in range (0, len(data)):&lt;br /&gt;        i = data[idx]&lt;br /&gt;        if i == 255:&lt;br /&gt;            print 'X',&lt;br /&gt;        else:&lt;br /&gt;            print ' ',&lt;br /&gt;&lt;br /&gt;        if (idx+1) % 24 == 0:&lt;br /&gt;            print ''&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The output looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;devin@studio:~/src/py$ python showdata.py /home/devin/Video/bitmaps/foo_00041_mod.bmp &lt;br /&gt;&lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X       X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X     X X X X X X X X X X &lt;br /&gt;X X X X X X X X                   X X X X X X X &lt;br /&gt;X X X X X                   X X X X X X X X X X &lt;br /&gt;X X X X X                   X X X X X X X X X X &lt;br /&gt;X X X X X                   X X X X X X X X X X &lt;br /&gt;X X X X X                     X X X X X X X X X &lt;br /&gt;X X X X X X                       X X X X X X X &lt;br /&gt;X X X X X X X X         X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X             X X X X X X X X X X &lt;br /&gt;X X X X X                         X X X X X X X &lt;br /&gt;X X X X X     X X X X X X X X     X X X X X X X &lt;br /&gt;X X X X X     X X X X X X X X     X X X X X X X &lt;br /&gt;X X X X X     X X X             X X X X X X X X &lt;br /&gt;X X X X X     X X X     X X X X X X X X X X X X &lt;br /&gt;X X X X X     X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X     X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X &lt;br /&gt;X X X X X X X X X X X X X X X X X X X X X X X X&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-6601108479457438249?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-6601108479457438249</guid><pubDate>2010-07-07T15:28:29.793-07:00</pubDate></item><item><title>Google Answers: Converting C++ DES code snippet to Java</title><link>http://answers.google.com/answers/threadview?id=398998</link><description></description><guid>http://www.delicious.com/url/ed0a57ad7541f033d3ea9ef5bf9e7db5#devinvenable</guid><pubDate>Thu, 01 Jul 2010 14:24:14 +0000</pubDate></item><item><title>RSA Laboratories - 2.1.7 What are Message Authentication Codes?</title><link>http://www.rsa.com/rsalabs/node.asp?id=2177</link><description></description><guid>http://www.delicious.com/url/4d9828e491d54bafe3e9f834a4afb758#devinvenable</guid><pubDate>Wed, 30 Jun 2010 21:05:15 +0000</pubDate></item><item><title>Animated gif to video</title><link>http://devinvenable.blogspot.com/2010/06/animated-gif-to-video.html</link><description>This little recipe worked for the basic job of converting the giv to an avi.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mplayer animated.gif -vo yuv4mpeg&lt;br /&gt;ffmpeg -i stream.yuv -an -r 24 -b 640 -s vga -aspect 4:3 test.avi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;However I wanted to loop the gif, but ffmpeg's -loop_input and -loop_ouput had no affect.  Decided to make a copy and cat a few times...but this didn't work as expected. (Save yourself time and don't copy this section!)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mencoder -oac copy -ovc copy -forceidx test.avi test2.avi -o test.avi&lt;br /&gt;mencoder -oac copy -ovc copy -forceidx test.avi test2.avi -o test.avi&lt;br /&gt;mencoder -oac copy -ovc copy -forceidx test.avi test2.avi -o test.avi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Tried this with no luck:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; mplayer -loop 10 test.avi -vo yuv4mpeg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Finally found a good way:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;avimerge -i test.avi test2.avi test3.avi - o mergedfile.avi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Sweet!&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-2567147368963986798?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-2567147368963986798</guid><pubDate>2010-06-25T07:08:56.212-07:00</pubDate></item><item><title>Logitech webcam issues with Ubuntu 10.04 LTS</title><link>http://devinvenable.blogspot.com/2010/06/logitech-webcam-issues-with-ubuntu-1004.html</link><description>&lt;span&gt;&lt;span&gt;Update:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Fixed (well, a workaround): &lt;span&gt;Setting environment variable LD_PRELOAD prior to running video problem solves issues on my box.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so cheese&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;---Original Text follows---&lt;br /&gt;&lt;br /&gt;cheese and other video programs have been working rather poorly on my AMD64 bit Ubuntu Studio install.  &lt;br /&gt;&lt;br /&gt;Errors like the following show up:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;libv4lconvert: Error decompressing JPEG: unknown huffman code: 0000ffd9&lt;br /&gt;libv4lconvert: Error decompressing JPEG: unknown huffman code: 0000ffff&lt;br /&gt;libv4lconvert: Error decompressing JPEG: unknown huffman code: 0000ffec&lt;br /&gt;libv4lconvert: Error decompressing JPEG: unknown huffman code: 0000ffff&lt;br /&gt;libv4lconvert: Error decompressing JPEG: unknown huffman code: 0000ffd9&lt;br /&gt;libv4lconvert: Error decompressing JPEG: unknown huffman code: 0000fffd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Rebuilding the latest drivers from linuxtv.org didn't help.  I'm still looking for a solution.&lt;br /&gt;&lt;br /&gt;Note: Same camera produces same error on a second computer running same version of Ubuntu.  &lt;br /&gt;&lt;br /&gt;lsusb&lt;br /&gt;&lt;br /&gt;Bus 005 Device 004: ID 046d:089d Logitech, Inc. QuickCam E2500 series&lt;br /&gt;&lt;br /&gt;gstreamer-properties is a great test tool for this kind of thing.  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm going to log a bug on this one.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-289976215868670245?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-289976215868670245</guid><pubDate>2010-06-24T18:49:21.591-07:00</pubDate></item><item><title>New RSS feed</title><link>http://devinvenable.blogspot.com/2010/06/new-rss-feed.html</link><description>If you are feeding this blog into Google Reader, update your settings and pull from here instead:&lt;br /&gt;&lt;br /&gt;http://www.devinvenable.com/rss/feed.xml&lt;br /&gt;&lt;br /&gt;I pull my activity from several sources (including blogger.com) to display a nicely formatted aggregate of my online activity on my home page.  But it hasn't been possible to subscribe to the aggregate until now.  I use Universal Feed Parser to combine my various feeds and had hoped that there would be a nice method to easily turn the parsed values back into serialized ATOM.  Poking around, I didn't find any such method, so I used PyRSS2Gen to pack the parsed dictionary back into RSS.  It probably would have been just as easy to load an XML library and just write out XML, but I didn't want to have to read specifications or, really, do much work on this.  Still took me at least an hour of my life, but that's not so bad.  If it wasn't kind of fun I wouldn't be monkeying with it on my day off!&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-1534850794621682982?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-1534850794621682982</guid><pubDate>2010-06-20T20:22:26.472-07:00</pubDate></item><item><title>Algebra Review in Ten Lessons</title><link>http://www.math.uakron.edu/~dpstory/mpt_home.html</link><description></description><guid>http://www.delicious.com/url/7ea496f30d607c1b5b4fe5478ac5a781#devinvenable</guid><pubDate>Wed, 16 Jun 2010 15:01:53 +0000</pubDate></item><item><title>devinvenable: SOMEDAY I will remember that when code changes fail to work when deployed that I should blame SELinux FIRST instead of hours later.</title><link>http://twitter.com/devinvenable/statuses/16008836142</link><description>devinvenable: SOMEDAY I will remember that when code changes fail to work when deployed that I should blame SELinux FIRST instead of hours later.</description><guid>http://twitter.com/devinvenable/statuses/16008836142</guid><pubDate>Sat, 12 Jun 2010 15:14:21 +0000</pubDate></item><item><title>devinvenable: Corporate gmail switch not as easy as I hoped.  Internal DNS and many other factors complicate the situation.</title><link>http://twitter.com/devinvenable/statuses/15822579113</link><description>devinvenable: Corporate gmail switch not as easy as I hoped.  Internal DNS and many other factors complicate the situation.</description><guid>http://twitter.com/devinvenable/statuses/15822579113</guid><pubDate>Thu, 10 Jun 2010 03:19:41 +0000</pubDate></item><item><title>devinvenable: Just switched the company over to corporate gmail.  So far...nothing has blown up.</title><link>http://twitter.com/devinvenable/statuses/15650361372</link><description>devinvenable: Just switched the company over to corporate gmail.  So far...nothing has blown up.</description><guid>http://twitter.com/devinvenable/statuses/15650361372</guid><pubDate>Mon, 07 Jun 2010 19:15:53 +0000</pubDate></item><item><title>Allow Sendmail on Centos to accept connections on port 25</title><link>http://devinvenable.blogspot.com/2010/06/allow-sendmail-on-centos-to-accept.html</link><description>Need to use sendmail as an MTA?  It's running but your box is not accepting incoming connections on port 25?&lt;br /&gt;&lt;br /&gt;Perhaps you need to do this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The default sendmail.cf file does not allow Sendmail to accept network connections from any host other than the local computer. To configure Sendmail as a server for other clients, edit the /etc/mail/sendmail.mc file, and either change the address specified in the Addr= option of the DAEMON_OPTIONS directive from 127.0.0.1 to the IP address of an active network device or comment out the DAEMON_OPTIONS directive all together by placing dnl at the beginning of the line. When finished, regenerate /etc/mail/sendmail.cf by executing the following command:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    m4 /etc/mail/sendmail.mc &gt; /etc/mail/sendmail.cf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then restart the service.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-8418300356204186413?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-8418300356204186413</guid><pubDate>2010-06-04T13:46:18.962-07:00</pubDate></item><item><title>Introduction to Using Visualizations - Google Chart Tools / Interactive Charts (aka Visualization API) - Google Code</title><link>http://code.google.com/apis/visualization/documentation/</link><description></description><guid>http://www.delicious.com/url/6b34087fb62f5d4160ac7d15105a5861#devinvenable</guid><pubDate>Thu, 03 Jun 2010 01:51:29 +0000</pubDate></item><item><title>A little something I need to remember...</title><link>http://devinvenable.blogspot.com/2010/06/little-something-i-need-to-remember.html</link><description>To turn off expandtab for editing makefiles, put the following in your vimrc:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;autocmd FileType make setlocal noexpandtab&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-4063561858453843113?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-4063561858453843113</guid><pubDate>2010-06-02T11:15:05.287-07:00</pubDate></item><item><title>Shrink PDF linux (command line)</title><link>http://devinvenable.blogspot.com/2010/05/shrink-pdf-linux-command-line.html</link><description>gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -sPAPERSIZE=a4 -dBATCH -sOutputFile=output.pdf input.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-902420371564820941?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-902420371564820941</guid><pubDate>2010-05-31T03:48:24.216-07:00</pubDate></item><item><title>Check Browser Compatibility, Cross Platform Browser Test - Browsershots</title><link>http://browsershots.org/</link><description></description><guid>http://www.delicious.com/url/9cc5bdcd3fb5af2993fea8d1c5aaa46c#devinvenable</guid><pubDate>Fri, 28 May 2010 19:54:45 +0000</pubDate></item><item><title>19 ffmpeg commands for all needs</title><link>http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs</link><description></description><guid>http://www.delicious.com/url/2d349db80d415620ed68a6b48ee2f67a#devinvenable</guid><pubDate>Wed, 26 May 2010 14:14:02 +0000</pubDate></item><item><title>Electric Duncan: A Sinfonia on Messaging with txAMQP, Part III</title><link>http://oubiwann.blogspot.com/2009/06/sinfonia-on-messaging-with-txamqp-part_18.html</link><description></description><guid>http://www.delicious.com/url/2e1e2856e3919e4dbde02266ac3922f5#devinvenable</guid><pubDate>Sat, 22 May 2010 05:50:03 +0000</pubDate></item><item><title>Just for fun</title><link>http://devinvenable.blogspot.com/2010/05/just-for-fun.html</link><description>&lt;pre&gt;&lt;br /&gt; .file "tiny.cpp"&lt;br /&gt; .local _ZStL8__ioinit&lt;br /&gt; .comm _ZStL8__ioinit,1,1&lt;br /&gt; .section .rodata&lt;br /&gt;.LC0:&lt;br /&gt; .string "Hello World"&lt;br /&gt; .text&lt;br /&gt;.globl main&lt;br /&gt; .type main, @function&lt;br /&gt;main:&lt;br /&gt;.LFB957:&lt;br /&gt; .cfi_startproc&lt;br /&gt; .cfi_personality 0x0,__gxx_personality_v0&lt;br /&gt; pushl %ebp&lt;br /&gt; .cfi_def_cfa_offset 8&lt;br /&gt; movl %esp, %ebp&lt;br /&gt; .cfi_offset 5, -8&lt;br /&gt; .cfi_def_cfa_register 5&lt;br /&gt; andl $-16, %esp&lt;br /&gt; subl $16, %esp&lt;br /&gt; movl $.LC0, 4(%esp)&lt;br /&gt; movl $_ZSt4cout, (%esp)&lt;br /&gt; call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc&lt;br /&gt; movl $_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_, 4(%esp)&lt;br /&gt; movl %eax, (%esp)&lt;br /&gt; call _ZNSolsEPFRSoS_E&lt;br /&gt; movl $0, %eax&lt;br /&gt; leave&lt;br /&gt; ret&lt;br /&gt; .cfi_endproc&lt;br /&gt;.LFE957:&lt;br /&gt; .size main, .-main&lt;br /&gt; .type _Z41__static_initialization_and_destruction_0ii, @function&lt;br /&gt;_Z41__static_initialization_and_destruction_0ii:&lt;br /&gt;.LFB966:&lt;br /&gt; .cfi_startproc&lt;br /&gt; .cfi_personality 0x0,__gxx_personality_v0&lt;br /&gt; pushl %ebp&lt;br /&gt; .cfi_def_cfa_offset 8&lt;br /&gt; movl %esp, %ebp&lt;br /&gt; .cfi_offset 5, -8&lt;br /&gt; .cfi_def_cfa_register 5&lt;br /&gt; subl $24, %esp&lt;br /&gt; cmpl $1, 8(%ebp)&lt;br /&gt; jne .L5&lt;br /&gt; cmpl $65535, 12(%ebp)&lt;br /&gt; jne .L5&lt;br /&gt; movl $_ZStL8__ioinit, (%esp)&lt;br /&gt; call _ZNSt8ios_base4InitC1Ev&lt;br /&gt; movl $_ZNSt8ios_base4InitD1Ev, %eax&lt;br /&gt; movl $__dso_handle, 8(%esp)&lt;br /&gt; movl $_ZStL8__ioinit, 4(%esp)&lt;br /&gt; movl %eax, (%esp)&lt;br /&gt; call __cxa_atexit&lt;br /&gt;.L5:&lt;br /&gt; leave&lt;br /&gt; ret&lt;br /&gt; .cfi_endproc&lt;br /&gt;.LFE966:&lt;br /&gt; .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii&lt;br /&gt; .type _GLOBAL__I_main, @function&lt;br /&gt;_GLOBAL__I_main:&lt;br /&gt;.LFB967:&lt;br /&gt; .cfi_startproc&lt;br /&gt; .cfi_personality 0x0,__gxx_personality_v0&lt;br /&gt; pushl %ebp&lt;br /&gt; .cfi_def_cfa_offset 8&lt;br /&gt; movl %esp, %ebp&lt;br /&gt; .cfi_offset 5, -8&lt;br /&gt; .cfi_def_cfa_register 5&lt;br /&gt; subl $24, %esp&lt;br /&gt; movl $65535, 4(%esp)&lt;br /&gt; movl $1, (%esp)&lt;br /&gt; call _Z41__static_initialization_and_destruction_0ii&lt;br /&gt; leave&lt;br /&gt; ret&lt;br /&gt; .cfi_endproc&lt;br /&gt;.LFE967:&lt;br /&gt; .size _GLOBAL__I_main, .-_GLOBAL__I_main&lt;br /&gt; .section .ctors,"aw",@progbits&lt;br /&gt; .align 4&lt;br /&gt; .long _GLOBAL__I_main&lt;br /&gt; .weakref _ZL20__gthrw_pthread_oncePiPFvvE,pthread_once&lt;br /&gt; .weakref _ZL27__gthrw_pthread_getspecificj,pthread_getspecific&lt;br /&gt; .weakref _ZL27__gthrw_pthread_setspecificjPKv,pthread_setspecific&lt;br /&gt; .weakref _ZL22__gthrw_pthread_createPmPK14pthread_attr_tPFPvS3_ES3_,pthread_create&lt;br /&gt; .weakref _ZL20__gthrw_pthread_joinmPPv,pthread_join&lt;br /&gt; .weakref _ZL21__gthrw_pthread_equalmm,pthread_equal&lt;br /&gt; .weakref _ZL20__gthrw_pthread_selfv,pthread_self&lt;br /&gt; .weakref _ZL22__gthrw_pthread_detachm,pthread_detach&lt;br /&gt; .weakref _ZL22__gthrw_pthread_cancelm,pthread_cancel&lt;br /&gt; .weakref _ZL19__gthrw_sched_yieldv,sched_yield&lt;br /&gt; .weakref _ZL26__gthrw_pthread_mutex_lockP15pthread_mutex_t,pthread_mutex_lock&lt;br /&gt; .weakref _ZL29__gthrw_pthread_mutex_trylockP15pthread_mutex_t,pthread_mutex_trylock&lt;br /&gt; .weakref _ZL31__gthrw_pthread_mutex_timedlockP15pthread_mutex_tPK8timespec,pthread_mutex_timedlock&lt;br /&gt; .weakref _ZL28__gthrw_pthread_mutex_unlockP15pthread_mutex_t,pthread_mutex_unlock&lt;br /&gt; .weakref _ZL26__gthrw_pthread_mutex_initP15pthread_mutex_tPK19pthread_mutexattr_t,pthread_mutex_init&lt;br /&gt; .weakref _ZL29__gthrw_pthread_mutex_destroyP15pthread_mutex_t,pthread_mutex_destroy&lt;br /&gt; .weakref _ZL30__gthrw_pthread_cond_broadcastP14pthread_cond_t,pthread_cond_broadcast&lt;br /&gt; .weakref _ZL27__gthrw_pthread_cond_signalP14pthread_cond_t,pthread_cond_signal&lt;br /&gt; .weakref _ZL25__gthrw_pthread_cond_waitP14pthread_cond_tP15pthread_mutex_t,pthread_cond_wait&lt;br /&gt; .weakref _ZL30__gthrw_pthread_cond_timedwaitP14pthread_cond_tP15pthread_mutex_tPK8timespec,pthread_cond_timedwait&lt;br /&gt; .weakref _ZL28__gthrw_pthread_cond_destroyP14pthread_cond_t,pthread_cond_destroy&lt;br /&gt; .weakref _ZL26__gthrw_pthread_key_createPjPFvPvE,pthread_key_create&lt;br /&gt; .weakref _ZL26__gthrw_pthread_key_deletej,pthread_key_delete&lt;br /&gt; .weakref _ZL30__gthrw_pthread_mutexattr_initP19pthread_mutexattr_t,pthread_mutexattr_init&lt;br /&gt; .weakref _ZL33__gthrw_pthread_mutexattr_settypeP19pthread_mutexattr_ti,pthread_mutexattr_settype&lt;br /&gt; .weakref _ZL33__gthrw_pthread_mutexattr_destroyP19pthread_mutexattr_t,pthread_mutexattr_destroy&lt;br /&gt; .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"&lt;br /&gt; .section .note.GNU-stack,"",@progbits&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-4202039055076320206?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-4202039055076320206</guid><pubDate>2010-05-20T14:04:42.359-07:00</pubDate></item><item><title>Mesa Home Page</title><link>http://www.mesa3d.org/</link><description></description><guid>http://www.delicious.com/url/2d3b13e1dbb4d48fee90a65a8c9c372c#devinvenable</guid><pubDate>Wed, 19 May 2010 01:16:47 +0000</pubDate></item><item><title>7 Lessons Learned While Building Reddit to 270 Million Page Views A Month via reddit.com</title><link>http://www.reddit.com/tb/c59j1</link><description></description><guid>http://www.delicious.com/url/adfb3506fe4961f452336c861a969678#devinvenable</guid><pubDate>Tue, 18 May 2010 02:11:32 +0000</pubDate></item><item><title>Improving Anti-spam system - Zimbra :: Wiki</title><link>http://wiki.zimbra.com/index.php?title=Improving_Anti-spam_system#Implementing_Whitelist.2FBlacklist</link><description></description><guid>http://www.delicious.com/url/07619cf01eccf5a1a81141edc5c4de98#devinvenable</guid><pubDate>Wed, 12 May 2010 22:58:18 +0000</pubDate></item><item><title>&#8226; View topic - Exclusion by email address</title><link>http://www.freespamfilter.org/forum/viewtopic.php?t=300</link><description></description><guid>http://www.delicious.com/url/076d51535c87071df4f58e810a8de215#devinvenable</guid><pubDate>Wed, 12 May 2010 22:52:28 +0000</pubDate></item><item><title>Railing against JAVA Application Servers</title><link>http://devinvenable.blogspot.com/2010/05/railing-against-java-application.html</link><description>I'm not sure I'm being fair nor objective, but each time I get saddled with a project which involves a JAVA Application Server, I just feel unhappy.&lt;br /&gt;&lt;br /&gt;Why?  Because I don't like the so-called Inversion of Control pattern---at least all of my experiences with it have been unpleasant.  One blogger at theburningmonk.com writes, "You have Macaroni code when your application is chopped up into many little pieces and it's difficult to see the big picture which may exist only in your (or some one else's!) head."&lt;br /&gt;&lt;br /&gt;Another blogger says, "In software design, you can often end up with Macaroni code when you overuse/misuse/abuse abstractions, and it's one of the main dangers of using Inversion of Control."&lt;br /&gt;&lt;br /&gt;This is my principal complaint as well.  It's all well and good to have code reuse, and encapsulation is a worthy goal.  Frankly the DRY principal is probably more important than either.  Many ills of poor software design can be cured simply by keeping the code compact, elegant and devoid of redundancy regardless of whether or not the code is procedural, object-oriented, or tiny atomic classes bound together by an XML configuration file.&lt;br /&gt;&lt;br /&gt;Procedural code gets a bad rap.  There is something beautiful about examining code that has a well defined entry and exit point.  It's beautiful when the debugger can be used to examine a code path from end to end.  It's beautiful because you can see the whole picture.  No diagrams needed to comprehend...no scrolling through hundreds of lines of XML to find the relationships.  It's all right there in the code, where IMHFO it belongs.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-5985820964018018797?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-5985820964018018797</guid><pubDate>2010-05-05T08:52:14.927-07:00</pubDate></item><item><title>devinvenable: Macaroni code: 1) When you overuse/misuse/abuse abstractions, 2) One of the main dangers of using Inversion of Control.</title><link>http://twitter.com/devinvenable/statuses/13382454792</link><description>devinvenable: Macaroni code: 1) When you overuse/misuse/abuse abstractions, 2) One of the main dangers of using Inversion of Control.</description><guid>http://twitter.com/devinvenable/statuses/13382454792</guid><pubDate>Tue, 04 May 2010 20:22:09 +0000</pubDate></item><item><title>devinvenable: Ha! Logged into facebook and got this: The File /var/www/lib/third-party/mobile-wurfl/wurfl-php-1.r2/WURFL/memcache does not exist!!!</title><link>http://twitter.com/devinvenable/statuses/13162173067</link><description>devinvenable: Ha! Logged into facebook and got this: The File /var/www/lib/third-party/mobile-wurfl/wurfl-php-1.r2/WURFL/memcache does not exist!!!</description><guid>http://twitter.com/devinvenable/statuses/13162173067</guid><pubDate>Sat, 01 May 2010 01:33:39 +0000</pubDate></item><item><title>Modes matter for password-less login</title><link>http://devinvenable.blogspot.com/2010/04/modes-matter-for-password-less-login.html</link><description>I typically setup keys to allow myself password-less access to remote development servers that I use all the time.  Today the typical ssh-keygen/deploy public-key routine didn't work as expected.  After deploying my public-key to the remote's authorized_keys, I still was getting prompted for a login.&lt;br /&gt;&lt;br /&gt;Found this in /var/log/secure.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Apr 28 12:51:35 theserver sshd[16285]: Authentication refused: bad ownership or modes for directory /home/theuser&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It turns out the the failure was due to the user's group permissions on the remote machine for two important folders.  Both the home folder and the .ssh folder had the following permissions: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;drwxrwx--- 36 theuser thegroup 4096 Apr 28 11:56 ..&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;chmod 700 for both /home/theuser and /home/theuser/.ssh fixed the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-3532126255308170256?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-3532126255308170256</guid><pubDate>2010-04-28T11:04:30.940-07:00</pubDate></item><item><title>Tulsa Developers tied to vendor technology</title><link>http://devinvenable.blogspot.com/2010/04/tulsa-developers-tied-to-vendor.html</link><description>From time to time I take a look around to see what kind of programming talent is available in the Tulsa area.  Most of what I find is tied to Oracle/Sun (Java) or Microsoft.&lt;br /&gt;&lt;br /&gt;It's no secret that Tulsa has been heavy into Microsoft technology for years now.  The community colleges and trade schools teach it, the recruiters can get their heads around it, and many conservative businesses would rather go with a name they know.  &lt;br /&gt;&lt;br /&gt;I remember a Williams employee steering me away from my Borland c++ compiler many moons ago, assuring me that Visual c++ was the future.  &lt;br /&gt;&lt;br /&gt;Well it was and it wasn't.  I embraced Visual c++ and talked my first (serious) employer into letting me use it to write an application for a Phillips petroleum project. That work experience propelled me to my next development job, one I kept for almost a decade.  &lt;br /&gt;&lt;br /&gt;I wrote a heck of a lot of code using Visual c++ and the MFC framework, until it became my job to port the code to Unix flavors.  For days, weeks, months I chased the not-quite-regular constants, the libraries that were similar but rarely identical to the standards.  It was then that I started going cold on Microsoft.&lt;br /&gt;&lt;br /&gt;I moved away from Microsoft development tools for a lot of reasons including a strong preference for open-source.  There's so much free and truly open support on the web. When combined with Linux, open-source makes it possible to examine every nook and cranny of source code down to the kernel level.  &lt;br /&gt;&lt;br /&gt;Why would new developers gravitate to vendor tools when &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; they can't examine what is going on under the covers, &lt;/li&gt;&lt;br /&gt;&lt;li&gt; they can't control how long the technology will be supported before the vendor deprecates (or abandons) it in favor of new vendor tools, &lt;/li&gt;&lt;br /&gt;&lt;li&gt; they can't really have any substantial influence over the evolution of the technology?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;I was thinking about these questions as I reviewed search results for "tulsa developers".  It turns up these sites and not much more.&lt;br /&gt;&lt;br /&gt;www.tulsadnug.org&lt;br /&gt;&lt;br /&gt;tulsajava.com&lt;br /&gt;&lt;br /&gt;Tulsa seems to have a flourishing Microsoft and Java community.  Who is representing everything else that's happening in computer science?  &lt;br /&gt;&lt;br /&gt;According to Tiobe.com, the most popular programming language is JAVA.  Microsoft-based technology doesn't rank until the fifth position, and then it falls off except for position eight.  In Tulsa, I'm sure Visual Basic and C# would contend for two of the first three slots.&lt;br /&gt;&lt;br /&gt;1. Java - 19.1%&lt;br /&gt;2. C - 15.2%&lt;br /&gt;3. C++ - 10.1%&lt;br /&gt;4. PHP - 8.7%&lt;br /&gt;5. Visual Basic - 8.4%&lt;br /&gt;6. Perl - 6.2%&lt;br /&gt;7. Python - 3.8%&lt;br /&gt;8. C# - 3.7%&lt;br /&gt;9. JavaScript - 3.1%&lt;br /&gt;10. Ruby - 2.6%&lt;br /&gt;11. Delphi - 2.1%&lt;br /&gt;&lt;br /&gt;We all know that Tulsa, Oklahoma is a conservative city and not well known for risk taking.  And perhaps there is more to the story that a simple web query immediately reveals.  Ping.fm is Tulsa-based.  Python-friendly Vidoop was founded here, though they relocated and then folded.  Perhaps they should have stuck around.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-2801356827107213100?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-2801356827107213100</guid><pubDate>2010-04-26T18:37:49.114-07:00</pubDate></item><item><title>Switch Primary Monitor in Ubuntu 10.4</title><link>http://devinvenable.blogspot.com/2010/04/switch-primary-monitor-in-ubuntu-104.html</link><description>The default Monitor Preferences dialog, while sweet, does not allow you to make your secondary monitor your primary. This is a problem if you want the top and bottom Ubuntu Panels displayed on the secondary monitor. Thankfully I found this sweet little script.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;#&lt;br /&gt;# Change Primary Monitor for Gnome&lt;br /&gt;# ver 1.0&lt;br /&gt;# &lt;br /&gt;# Copyright (c) 2010 michal@post.pl&lt;br /&gt;# &lt;br /&gt;# This file is free software. You can redistribute it &lt;br /&gt;# and/or modify it under the terms of the GNU&lt;br /&gt;# General Public License (GPL) as published by&lt;br /&gt;# the Free Software Foundation, in version 3.&lt;br /&gt;# It works for me. I hope it works for you as well.&lt;br /&gt;# NO WARRANTY of any kind. &lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# get list of top-level gnome panels&lt;br /&gt;getTopPanels() {&lt;br /&gt; gconftool-2 --all-dirs /apps/panel/toplevels&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# get monitor number for this panel&lt;br /&gt;getMonitor() {&lt;br /&gt; local PANEL=$1&lt;br /&gt; gconftool-2 --get $PANEL/monitor&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# set monitor to display on for given top-level panel&lt;br /&gt;setMonitor() {&lt;br /&gt; local PANEL=$1&lt;br /&gt; local NEW=$2&lt;br /&gt; gconftool-2 --set --type int $PANEL/monitor $NEW&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# return number of connected monitors&lt;br /&gt;getConnectedMonitors() {&lt;br /&gt; xrandr --query | grep -c '^.* connected'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# compute next monitor&lt;br /&gt;nextMonitor() {&lt;br /&gt; # number of monitors&lt;br /&gt; local CURRENT=$1&lt;br /&gt; local MONITORS=$2&lt;br /&gt; awk 'BEGIN{ print ('$CURRENT' + 1) % '$MONITORS'; }'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# logging finction&lt;br /&gt;log() {&lt;br /&gt; echo $@ 1&gt;&amp;2&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# main logic below #############&lt;br /&gt;&lt;br /&gt;MONITORS=`getConnectedMonitors`&lt;br /&gt;log "Detected $MONITORS connected monitors"&lt;br /&gt;&lt;br /&gt;getTopPanels | while read PANEL&lt;br /&gt;do&lt;br /&gt; MONITOR=`getMonitor $PANEL`&lt;br /&gt; NEW=`nextMonitor $MONITOR $MONITORS`&lt;br /&gt; log "Panel $PANEL is displayed on $MONITOR. Switching to monitor $NEW."&lt;br /&gt; setMonitor $PANEL $NEW&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-4783008585082805835?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-4783008585082805835</guid><pubDate>2010-04-21T16:14:39.490-07:00</pubDate></item><item><title>mod_security setup on Centos 5.4</title><link>http://devinvenable.blogspot.com/2010/04/modsecurity-setup-on-centos-54.html</link><description>Enable the EPEL repository.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Install via yum.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; yum install mod_security&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will load your basic mod_security configuration including the core rules.&lt;br /&gt;&lt;br /&gt;Next I had to set SecDataDir in the config.  This was not initially set and errors in the following form appeared in the log file.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ModSecurity: Unable to retrieve collection (name "", key ""). Use SecDataDir to define data directory first.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Fixed this up by creating SecDataDir and creating a directory for this purpose, making sure to give apache permission to use it.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;vim /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf &lt;br /&gt;( Added SecDataDir /usr/local/apache/modsec_data )&lt;br /&gt;mkdir /usr/local/apache&lt;br /&gt;mkdir /usr/local/apache/modsec_data&lt;br /&gt;chown apache:apache /usr/local/apache/modsec_data&lt;br /&gt;chown apache:apache /usr/local/apache&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After a restart modsecurity successfully began applying rules, but rather than blocking problem requests (my intention) it merely logged warnings.  I changed the SecDefaultAction in vim /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf from&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SecDefaultAction "phase:2,pass"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SecDefaultAction "phase:2,deny,log,status:403"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;vim /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-7717516833221891084?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-7717516833221891084</guid><pubDate>2010-04-15T07:41:45.928-07:00</pubDate></item><item><title>devinvenable: mod_security2.so easier to build from src for Centos 5.4 than monkey with 3rd-party RPM.</title><link>http://twitter.com/devinvenable/statuses/12180297003</link><description>devinvenable: mod_security2.so easier to build from src for Centos 5.4 than monkey with 3rd-party RPM.</description><guid>http://twitter.com/devinvenable/statuses/12180297003</guid><pubDate>Wed, 14 Apr 2010 19:39:10 +0000</pubDate></item><item><title>devinvenable: I wish I was as organized in the real world as I am in the virtual world.</title><link>http://twitter.com/devinvenable/statuses/12175924802</link><description>devinvenable: I wish I was as organized in the real world as I am in the virtual world.</description><guid>http://twitter.com/devinvenable/statuses/12175924802</guid><pubDate>Wed, 14 Apr 2010 17:55:23 +0000</pubDate></item><item><title>Gmail Tip: How To Browse Only the Unread Messages</title><link>http://www.dailyblogtips.com/gmail-tip-how-to-browse-only-the-unread-messages/</link><description></description><guid>http://www.delicious.com/url/fc39b310ae2517cca00baf38b26c48bb#devinvenable</guid><pubDate>Wed, 07 Apr 2010 13:20:23 +0000</pubDate></item><item><title>Trouble using sockets in Django view</title><link>http://devinvenable.blogspot.com/2010/03/trouble-using-sockets-in-django-view.html</link><description>I ran into an issue while writing socket communication in code that was called by a Django view handler.  After a Twisted-based and socket-based solution failed mysteriously, I discovered a telnet-based solution that worked.  &lt;br /&gt;&lt;br /&gt;Read more about it the details here:&lt;br /&gt;&lt;br /&gt;http://wiki.devinvenable.com/mediawiki/index.php/Interesting_socket_behavior_exhibited_while_processing_Django_view&lt;br /&gt;&lt;br /&gt;Comments or insights as to the cause of the problem behavior would be helpful.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-8230144352571550816?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-8230144352571550816</guid><pubDate>2010-03-30T12:15:10.721-07:00</pubDate></item><item><title>Everything You Always Wanted to Know about Twisted</title><link>http://mumak.net/stuff/twisted-intro.html</link><description></description><guid>http://www.delicious.com/url/af86d2ddd0f61cd9e1902b2630c418a8#devinvenable</guid><pubDate>Mon, 29 Mar 2010 19:48:01 +0000</pubDate></item><item><title>Amazon S3 Firefox Organizer(S3Fox) :: Add-ons for Firefox</title><link>https://addons.mozilla.org/en-US/firefox/addon/3247</link><description></description><guid>http://www.delicious.com/url/615e69f0999cf8a6562c5e6e2f60a011#devinvenable</guid><pubDate>Fri, 26 Mar 2010 18:59:26 +0000</pubDate></item><item><title>git merge</title><link>http://devinvenable.blogspot.com/2010/03/git-merge.html</link><description>I used to work with a guy named Jay who, when encountering a particularly complex or difficult programming challenge, would state aloud, "Now that's powerful."&lt;br /&gt;&lt;br /&gt;git is a powerful tool.  And it really is but, my God, it sure has a way with obscure error messages.&lt;br /&gt;&lt;br /&gt;At some point you'll not be able to pull changes from the master (I want to call it the HEAD via cvs, svn concepts) because you are in the middle of a conflicted merge. You'll know this because you'll see this message:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;You are in the middle of a conflicted merge. &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unlike svn update, which will pull the latest changes and automatically merge what can be merged and insert diffs where it can't, you need to manually merge the changes.  You can open the diff tool with this command:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;git mergetool&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;mergetool doesn't actually work out the diffs---you do.  It opens a default diff editor for each file in need of merging, which may be vimdiff if nothing else is installed on your system.  You compare the differences, edit to make any changes, and save the file.  mergetool then asks you if the diff is complete, and if so, opens the next file.  This continues until you have resolved all conflicts.&lt;br /&gt;&lt;br /&gt;By the way, mergetool works with a number of different diff tools.  See the man page for a complete list.  I went with &lt;a href="http://meld.sourceforge.net/"&gt;meld&lt;/a&gt;, the gnome diff editor.  Once installed via apt-get, mergetool opened meld without any additional configuration.  Not quite sure how it knew which one I wanted, but it guessed and got it right.&lt;br /&gt;&lt;br /&gt;So now you can pull the latest changes, right?  Not so fast.  You might see an error like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;fatal: You have not concluded your merge. (MERGE_HEAD exists)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ah, what does it all mean?  I find this to be common thought when using git.  Clemens Buchacher had &lt;a href="http://n2.nabble.com/PATCH-refuse-to-merge-during-a-merge-td2983703.html"&gt;the answer&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;The following is an easy mistake to make for users coming from version &lt;br /&gt;control systems with an "update and commit"-style workflow. &lt;br /&gt;&lt;br /&gt;        1. git merge &lt;br /&gt;        2. resolve conflicts &lt;br /&gt;        3. git pull, instead of commit &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Yes, that would be me: a fellow used to the "update and commit" style workflow.  &lt;br /&gt;&lt;br /&gt;For my case, I just had to commit once and then I could, finally, pull changes I had committed on another server.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-967980523680575910?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-967980523680575910</guid><pubDate>2010-03-25T13:17:12.959-07:00</pubDate></item><item><title>JSON API</title><link>http://www.flickr.com/photos/27165790@N06/4438570188/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4438570188/" title="JSON API"&gt;&lt;img src="http://farm5.static.flickr.com/4037/4438570188_15598c954f_m.jpg" width="240" height="139" alt="JSON API" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4438570188</guid><pubDate>2010-03-16T15:51:21Z</pubDate></item><item><title>XML API</title><link>http://www.flickr.com/photos/27165790@N06/4438570174/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4438570174/" title="XML API"&gt;&lt;img src="http://farm5.static.flickr.com/4057/4438570174_cc87ff2976_m.jpg" width="240" height="139" alt="XML API" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4438570174</guid><pubDate>2010-03-16T15:51:20Z</pubDate></item><item><title>Mashup Editor</title><link>http://www.flickr.com/photos/27165790@N06/4437794185/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4437794185/" title="Mashup Editor"&gt;&lt;img src="http://farm5.static.flickr.com/4071/4437794185_5e48570c1c_m.jpg" width="240" height="139" alt="Mashup Editor" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4437794185</guid><pubDate>2010-03-16T15:51:20Z</pubDate></item><item><title>Object with links to Related Records</title><link>http://www.flickr.com/photos/27165790@N06/4438570136/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4438570136/" title="Object with links to Related Records"&gt;&lt;img src="http://farm5.static.flickr.com/4030/4438570136_8212cc1be6_m.jpg" width="240" height="139" alt="Object with links to Related Records" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4438570136</guid><pubDate>2010-03-16T15:51:19Z</pubDate></item><item><title>Search Result Page</title><link>http://www.flickr.com/photos/27165790@N06/4437794141/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4437794141/" title="Search Result Page"&gt;&lt;img src="http://farm5.static.flickr.com/4053/4437794141_02a022c0ac_m.jpg" width="240" height="139" alt="Search Result Page" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4437794141</guid><pubDate>2010-03-16T15:51:19Z</pubDate></item><item><title>devinvenable: JAVA week! Today I'm writing a Postilion simulator using jPos.</title><link>http://twitter.com/devinvenable/statuses/10519967578</link><description>devinvenable: JAVA week! Today I'm writing a Postilion simulator using jPos.</description><guid>http://twitter.com/devinvenable/statuses/10519967578</guid><pubDate>Mon, 15 Mar 2010 14:36:07 +0000</pubDate></item><item><title>Sitting Under Canvas (8-bit)</title><link>http://www.flickr.com/photos/27165790@N06/4427321837/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4427321837/" title="Sitting Under Canvas (8-bit)"&gt;&lt;img src="http://farm3.static.flickr.com/2791/4427321837_bbb365f59a_m.jpg" width="100" height="144" alt="Sitting Under Canvas (8-bit)" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Something for a WIKI I'm setting up.&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4427321837</guid><pubDate>2010-03-12T21:28:26Z</pubDate></item><item><title>Create your own udev rules to control removable devices - Ubuntu Forums</title><link>http://ubuntuforums.org/showthread.php?t=168221</link><description></description><guid>http://www.delicious.com/url/279bf1172ea1832777851b9c0ecab150#devinvenable</guid><pubDate>Mon, 08 Mar 2010 20:23:05 +0000</pubDate></item><item><title>Mono Community - mod_mono permissions error.</title><link>http://www.gotmono.com/cgi-bin/yabb/YaBB.pl?board=INSTALL;action=display;num=1144871593</link><description></description><guid>http://www.delicious.com/url/46be828bf56852177884f12392b02961#devinvenable</guid><pubDate>Mon, 08 Mar 2010 20:22:59 +0000</pubDate></item><item><title>Automounting removable eSata drive on Centos 5.4</title><link>http://devinvenable.blogspot.com/2010/03/automounting-removable-esata-drive-on.html</link><description>So my boss says, "I don't get it.  When I have a gnome desktop open on the Centos box, my new eSata II removable mounts. But if I don't have a desktop open it doesn't get mounted when I reboot the box."&lt;br /&gt;&lt;br /&gt;I ask The Google about it, and it tells me:&lt;br /&gt;&lt;br /&gt;http://wiki.centos.org/TipsAndTricks/HAL&lt;br /&gt;&lt;br /&gt;But try as I might, gnome-volume-manager fails to detect and mount the eSata drive. The idea of running gnome daemons when in fact I'm working with a server in which gnome is rarely utilized (except for when my boss runs a remote desktop) gives me pause. Hmmm, I think, wouldn't this be a good job for udev rules?&lt;br /&gt;&lt;br /&gt;Running dmesg tells me that the device is present and that it's getting mounted as /dev/sdb1.  (Or you can tail /var/log/messages) Running the following gives me a list of attributes that are visible to udev on my device.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# udevinfo -a -p $(udevinfo -q path -n /dev/sdb)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;With this is see several attributes which can be used for matching when the udev rules are applied.  I take the following two:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    SYSFS{rev}=="ST6O"&lt;br /&gt;    SYSFS{model}=="Hitachi HDT72101"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I want to mount the block device as /media/removable each time the device is plugged.  I also want to unmount when the device is removed.  The following worked for me.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ACTION=="add",SYSFS{rev}=="ST6O",SYSFS{model}=="Hitachi HDT72101",KERNEL=="sd?1",NAME="REMOVABLE", RUN+="/bin/mount /dev/REMOVABLE /media/removable"&lt;br /&gt;ACTION=="remove",SYSFS{rev}=="ST6O",SYSFS{model}=="Hitachi HDT72101",RUN+="/bin/umount /media/removable"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For more information, refer to this helpful page.&lt;br /&gt;&lt;br /&gt;http://reactivated.net/writing_udev_rules.html&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-7554547157530322482?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-7554547157530322482</guid><pubDate>2010-03-08T14:03:40.304-08:00</pubDate></item><item><title>devinvenable: Heavy into refactoring c++ code today.  Reminds me of the golden olden days at Visionael.</title><link>http://twitter.com/devinvenable/statuses/9989402874</link><description>devinvenable: Heavy into refactoring c++ code today.  Reminds me of the golden olden days at Visionael.</description><guid>http://twitter.com/devinvenable/statuses/9989402874</guid><pubDate>Thu, 04 Mar 2010 20:32:57 +0000</pubDate></item><item><title>devinvenable: I couldn't make it to #pycon this year.  Where can I find video?</title><link>http://twitter.com/devinvenable/statuses/9538954857</link><description>devinvenable: I couldn't make it to #pycon this year.  Where can I find video?</description><guid>http://twitter.com/devinvenable/statuses/9538954857</guid><pubDate>Tue, 23 Feb 2010 19:25:13 +0000</pubDate></item><item><title>strptime</title><link>http://devinvenable.blogspot.com/2010/02/strptime.html</link><description>Can't find strptime in datetime because you're working in a Python 2.4 environment?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Python 2.4.3 (#1, Jul 27 2009, 17:56:30) &lt;br /&gt;[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&gt;&gt;&gt; from datetime import datetime&lt;br /&gt;&gt;&gt;&gt; d = datetime.strptime("21-JAN-08", "%d-%b-%y")&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "", line 1, in ?&lt;br /&gt;AttributeError: type object 'datetime.datetime' has no attribute 'strptime'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;strptime was added to datetime in 2.5.  Prior to 2.5 you pull it from the typically lower-level library 'time'.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; import time&lt;br /&gt;&gt;&gt;&gt; time.strptime("21-JAN-08", "%d-%b-%y")&lt;br /&gt;(2008, 1, 21, 0, 0, 0, 0, 21, -1)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ah, there it is.  Of course, you wanted a datetime, didn't you?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&gt;&gt;&gt; t = time.strptime("21-JAN-08", "%d-%b-%y")&lt;br /&gt;&gt;&gt;&gt; datetime(*t[0:6])&lt;br /&gt;&gt;&gt;&gt; datetime.datetime(2008, 1, 21, 0, 0)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-4550136795806421476?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-4550136795806421476</guid><pubDate>2010-02-22T07:22:18.759-08:00</pubDate></item><item><title>devinvenable: Or DON'T use toSource().  Forget it; that's a mozilla only extension. Better off using JSON.stringify(), available in most modern browsers.</title><link>http://twitter.com/devinvenable/statuses/9293925103</link><description>devinvenable: Or DON'T use toSource().  Forget it; that's a mozilla only extension. Better off using JSON.stringify(), available in most modern browsers.</description><guid>http://twitter.com/devinvenable/statuses/9293925103</guid><pubDate>Thu, 18 Feb 2010 17:57:42 +0000</pubDate></item><item><title>devinvenable: Need to convert a javascript object to string?  Don't download a special library or function; just use the javascript 1.3 toSource() method.</title><link>http://twitter.com/devinvenable/statuses/9241394395</link><description>devinvenable: Need to convert a javascript object to string?  Don't download a special library or function; just use the javascript 1.3 toSource() method.</description><guid>http://twitter.com/devinvenable/statuses/9241394395</guid><pubDate>Wed, 17 Feb 2010 16:50:12 +0000</pubDate></item><item><title>I love my retro layout.</title><link>http://www.flickr.com/photos/27165790@N06/4349554066/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4349554066/" title="I love my retro layout."&gt;&lt;img src="http://farm3.static.flickr.com/2748/4349554066_04340c6cd2_m.jpg" width="240" height="139" alt="I love my retro layout." /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4349554066</guid><pubDate>2010-02-11T19:24:07Z</pubDate></item><item><title>mod_mono, Centos 5 64 bit, and SELinux Part 2</title><link>http://devinvenable.blogspot.com/2010/02/modmono-centos-5-64-bit-and-selinux_09.html</link><description>The trick to creating a SELinux policy is setting the mode to be permissive, which prevents nothing but logs all of the infractions to audit.log, and then using the log to generate the policy.  After running my mod_mono based application for a bit in permissive mode, I used this command to generate a local policy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;egrep 'http|mono' /var/log/audit/audit.log | audit2allow -M myhttp&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is the result:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module myhttp 1.0;&lt;br /&gt;&lt;br /&gt;require {&lt;br /&gt; type httpd_tmp_t;&lt;br /&gt; type device_t;&lt;br /&gt; type initrc_t;&lt;br /&gt; type httpd_t;&lt;br /&gt; type httpd_sys_script_t;&lt;br /&gt; type http_port_t;&lt;br /&gt; type port_t;&lt;br /&gt; type inotifyfs_t;&lt;br /&gt; class process { execstack execmem getsched ptrace };&lt;br /&gt; class unix_stream_socket connectto;&lt;br /&gt; class chr_file { read write ioctl };&lt;br /&gt; class tcp_socket name_connect;&lt;br /&gt; class file execute;&lt;br /&gt; class sem { unix_read write unix_write associate read destroy };&lt;br /&gt; class shm { unix_read read write unix_write associate };&lt;br /&gt; class dir read;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#============= httpd_sys_script_t ==============&lt;br /&gt;allow httpd_sys_script_t http_port_t:tcp_socket name_connect;&lt;br /&gt;allow httpd_sys_script_t httpd_tmp_t:file execute;&lt;br /&gt;allow httpd_sys_script_t inotifyfs_t:dir read;&lt;br /&gt;allow httpd_sys_script_t self:process { execmem getsched ptrace };&lt;br /&gt;allow httpd_sys_script_t self:sem { unix_read write unix_write associate read destroy };&lt;br /&gt;&lt;br /&gt;#============= httpd_t ==============&lt;br /&gt;allow httpd_t device_t:chr_file { read write ioctl };&lt;br /&gt;allow httpd_t httpd_sys_script_t:unix_stream_socket connectto;&lt;br /&gt;allow httpd_t initrc_t:shm { unix_read read write unix_write associate };&lt;br /&gt;allow httpd_t port_t:tcp_socket name_connect;&lt;br /&gt;allow httpd_t self:process { execstack execmem };&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-1846763846745748395?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-1846763846745748395</guid><pubDate>2010-02-09T10:52:25.942-08:00</pubDate></item><item><title>mod_mono, Centos 5 64 bit, and SELinux</title><link>http://devinvenable.blogspot.com/2010/02/modmono-centos-5-64-bit-and-selinux.html</link><description>Getting mod_mono up and running on Ubuntu 9.10 is relatively simple.  Install the packages, drop in a test asmx file, browse to the URL and you are done.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;apt-get install libapache2-mod-mono mono-apache-server2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;My experience getting the same demo file with Centos 5 running SELinux was a bit more involved. First off, here's the complete simple web service.  You should be able to drop it into your document root and browse to the appropriate URL, once mod_mono is properly installed.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;%@ WebService Language="c#" Codebehind="TestService.asmx.cs" Class="WebServiceTests.TestService" %&gt;&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Web.Services;&lt;br /&gt;using System.Web.Services.Protocols;&lt;br /&gt;&lt;br /&gt;namespace WebServiceTests&lt;br /&gt;{&lt;br /&gt;    public class TestService : System.Web.Services.WebService&lt;br /&gt;    {&lt;br /&gt;        [WebMethod]&lt;br /&gt;        public string Echo (string a)&lt;br /&gt;        {&lt;br /&gt;            return a;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [WebMethod]&lt;br /&gt;        public int Add (int a, int b)&lt;br /&gt;        {&lt;br /&gt;            return a + b;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;On Centos 5, install these packages:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;yum install mod_mono xsp mono-web&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To enable mod_mono for Apache and run the xsp demo programs, add something like the following to the tail end of your http.conf file.  Be sure to check that the paths used here are the same on your machine.  (Note that I'm using a 64 bit Centos installation.)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;AddType application/x-asp-net .aspx&lt;br /&gt;AddType application/x-asp-net .asmx&lt;br /&gt;AddType application/x-asp-net .ashx&lt;br /&gt;AddType application/x-asp-net .asax&lt;br /&gt;AddType application/x-asp-net .ascx&lt;br /&gt;AddType application/x-asp-net .soap&lt;br /&gt;AddType application/x-asp-net .rem&lt;br /&gt;AddType application/x-asp-net .axd&lt;br /&gt;AddType application/x-asp-net .cs&lt;br /&gt;AddType application/x-asp-net .config&lt;br /&gt;AddType application/x-asp-net .Config&lt;br /&gt;AddType application/x-asp-net .dll&lt;br /&gt;AddType application/x-asp-net .asp&lt;br /&gt;DirectoryIndex index.aspx&lt;br /&gt;DirectoryIndex Default.aspx&lt;br /&gt;DirectoryIndex default.aspx&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Alias /demo /usr/lib64/xsp/test&lt;br /&gt;MonoApplications "/demo:/usr/lib64/xsp/test"&lt;br /&gt;MonoServerPath /usr/bin/mod-mono-server&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You are likely to run into myriad problems if using SELinux. Start with giving permissions to run mono to httpd.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;chcon -t httpd_sys_content_t '/usr/bin/mono'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Each time you hit your URL you will likely encounter another SELinux error.  You can repeat this process again and again until you come up with a final policy that will allow apache access to mono, its directories, and dependencies.  My final policy looked like this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module mymono 1.0;&lt;br /&gt;&lt;br /&gt;require {&lt;br /&gt;        type lib_t;&lt;br /&gt;        type tmp_t;&lt;br /&gt;        type mono_exec_t;&lt;br /&gt;        type httpd_t;&lt;br /&gt;        type httpd_sys_script_t;&lt;br /&gt;        class process ptrace;&lt;br /&gt;        class sock_file { write create };&lt;br /&gt;        class sem create;&lt;br /&gt;        class file { read execute_no_trans };&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#============= httpd_sys_script_t ==============&lt;br /&gt;allow httpd_sys_script_t self:sem create;&lt;br /&gt;&lt;br /&gt;#============= httpd_t ==============&lt;br /&gt;allow httpd_t lib_t:file execute_no_trans;&lt;br /&gt;allow httpd_t mono_exec_t:file { read execute_no_trans };&lt;br /&gt;allow httpd_t self:process ptrace;&lt;br /&gt;allow httpd_t tmp_t:sock_file { write create };&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Mono makes extensive use of a temp directory known as the wapi directory.  It is possible for you to specify your own temp directory in your http.conf file or else the default will be used: /tmp/.wapi.&lt;br /&gt;&lt;br /&gt;It took awhile to discover that /tmp/.wapi needed different permissions.  The best clue I could get from messages was:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Feb  8 08:43:32 carbon setroubleshoot: SELinux is preventing the mono from using potentially mislabeled files (mod_mono_server_global). For complete SELinux messages. run sealert -l a00a5946-cec1-4291-a410-e74c5f96edfd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This was corrected by running...&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;restorecon -R -v /tmp/.wapi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;...as suggested by sealert.  &lt;br /&gt;&lt;br /&gt;Just as I thought I was finished, as the mono test application was finally working, I found additional errors in the /var/log/audit/audit.log.  This policy was the fix:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;module mynotify 1.0;&lt;br /&gt;&lt;br /&gt;require {&lt;br /&gt;        type httpd_t;&lt;br /&gt;        type inotifyfs_t;&lt;br /&gt;        class dir read;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#============= httpd_t ==============&lt;br /&gt;allow httpd_t inotifyfs_t:dir read;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Are we done yet?  I sure hope so.  I read elsewhere on the web that there is a plan to get the proper SELinux configuration into the mod_mono RPMs.  Until that happens, I hope that this info will help you to get your mod_mono setup working.&lt;br /&gt;&lt;br /&gt;Note:  After rebooting, I had to relabel the temp and bin directory with these two commands:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;restorecon -R -v /tmp/.wapi&lt;br /&gt;chcon -t httpd_sys_content_t '/usr/bin/mono'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I'm currently looking for a better, permanent solution.&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-1625993131955630340?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-1625993131955630340</guid><pubDate>2010-02-08T11:07:21.199-08:00</pubDate></item><item><title>mod_mono - LinuxQuestions.org</title><link>http://www.linuxquestions.org/blog/indymaynard-261967/2009/11/1/modmono-2360/</link><description>mod_mono</description><guid>http://www.delicious.com/url/83ddadbe898bc857e1bf35d4f5e11854#devinvenable</guid><pubDate>Fri, 05 Feb 2010 14:44:44 +0000</pubDate></item><item><title>Writing a WebService - Mono</title><link>http://mono-project.com/Writing_a_WebService</link><description></description><guid>http://www.delicious.com/url/0b755adcd3add11213da3861ad99fef5#devinvenable</guid><pubDate>Mon, 01 Feb 2010 21:30:04 +0000</pubDate></item><item><title>ISO 9797 algorithm 3</title><link>http://devinvenable.blogspot.com/2010/01/iso-9797-algorithm-3.html</link><description>Last Friday I set out to implement ISO 9797 algorithm 3 using the OpenSSL library.  I did not have the specification handy, so I decided to to the best I could with what I could find by way of examples on the net.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I came across a description of the algorithm in this 2005 thread (http://www.derkeiler.com/Newsgroups/sci.crypt/2005-02/0374.html).  This was posted in a query by someone named Christian.  He also posted his keys, data and the expected answer.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;H0 = 0&lt;br /&gt;stages 1 to n: Hj = Enc(K, Dj XOR H{j-1})&lt;br /&gt;MAC = Enc(K, Dec(K', Hn))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Francois Grieu replied with, "This is very likely ISO/IEC 9797-1, using DES as the block cipher,&lt;br /&gt;padding method 2, MAC algorithm 3."  He provided an answer by sharing sample code in "some near-extinct dialect".&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;set m0 72C29C2371CC9BDB #message&lt;br /&gt;set m1 65B779B8E8D37B29&lt;br /&gt;set m2 ECC154AA56A8799F&lt;br /&gt;set m3 AE2F498F76ED92F2&lt;br /&gt;&lt;br /&gt;set pd 8000000000000000 #padding&lt;br /&gt;&lt;br /&gt;set iv 0000000000000000 #initialisation vector&lt;br /&gt;&lt;br /&gt;set k0 7962D9ECE03D1ACD #key&lt;br /&gt;set k1 4C76089DCE131543&lt;br /&gt;&lt;br /&gt;set xx {iv} # setup&lt;br /&gt;for mj in {m0} {m1} {m2} {m3} {pd} # for each block including padding&lt;br /&gt; set xx `xor {xx} {mj}` # chain&lt;br /&gt; set xx `des -k {k0} -c {xx}` #encrypt&lt;br /&gt;end&lt;br /&gt;set xx `des -k {k1} -d {xx}` #decrypt&lt;br /&gt;set xx `des -k {k0} -c {xx}` #encrypt&lt;br /&gt;echo {xx} #show result&lt;br /&gt;&lt;br /&gt;5F1448EEA8AD90A7 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I've implemented the same in c for the purpose of research. &lt;br /&gt;&lt;br /&gt;&lt;pre class="cpp"&gt;&lt;br /&gt;#include openssl/des.h&lt;br /&gt;#include memory&lt;br /&gt;#include string.h&lt;br /&gt;&lt;br /&gt;//message + padding&lt;br /&gt;const unsigned char msg[40] = { 0x72, 0xC2, 0x9C, 0x23, 0x71, 0xCC, 0x9B, 0xDB,&lt;br /&gt;                              0x65, 0xB7, 0x79, 0xB8, 0xE8, 0xD3, 0x7B, 0x29,&lt;br /&gt;                              0xEC, 0xC1, 0x54, 0xAA, 0x56, 0xA8, 0x79, 0x9F,&lt;br /&gt;                              0xAE, 0x2F, 0x49, 0x8F, 0x76, 0xED, 0x92, 0xF2,&lt;br /&gt;                              0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };&lt;br /&gt;&lt;br /&gt;//initialization vector&lt;br /&gt;unsigned char iv[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };&lt;br /&gt;&lt;br /&gt;unsigned char k0[8] = { 0x79, 0x62, 0xD9, 0xEC, 0xE0, 0x3D, 0x1A, 0xCD };&lt;br /&gt;unsigned char k1[8] = { 0x4C, 0x76, 0x08, 0x9D, 0xCE, 0x13, 0x15, 0x43 };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void print_hex(const unsigned char *bs, int n) {&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; n; i++)&lt;br /&gt;        printf("%02x", bs[i]);&lt;br /&gt;    printf("\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void des_ecb_crypt(unsigned char* input, unsigned char* output, int encrypt, unsigned char* key) {&lt;br /&gt;&lt;br /&gt;    des_key_schedule sched;&lt;br /&gt;    des_set_key((des_cblock *) key, sched);&lt;br /&gt;&lt;br /&gt;    DES_ecb_encrypt((const_DES_cblock *)input,&lt;br /&gt;                     (const_DES_cblock *)output,&lt;br /&gt;                     &amp;sched;,&lt;br /&gt;                     encrypt);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void xor_block(unsigned char* src, unsigned char* dest) {&lt;br /&gt;&lt;br /&gt;    for (int x = 0; x &lt; 8; x++) {&lt;br /&gt;       src[x] =  src[x] ^ dest[x];&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[]) {&lt;br /&gt;&lt;br /&gt;    unsigned char output[8];&lt;br /&gt;    unsigned char xx[8];&lt;br /&gt;    unsigned char block[8];&lt;br /&gt;    int offset = 0;&lt;br /&gt;&lt;br /&gt;    memcpy(xx, iv, 8);&lt;br /&gt;&lt;br /&gt;    // Chain and encrypt 5 8-bit blocks&lt;br /&gt;    for (int x = 0; x &lt; 5; x++) {&lt;br /&gt;&lt;br /&gt;        memcpy(block, &amp;msg;[offset] , 8);&lt;br /&gt;        offset+=8;&lt;br /&gt;&lt;br /&gt;        //set xx `xor {xx} {mj}` # chain&lt;br /&gt;        xor_block(xx, block);&lt;br /&gt;&lt;br /&gt;        //set xx `des -k {k0} -c {xx}` #encrypt&lt;br /&gt;        des_ecb_crypt(xx, output, DES_ENCRYPT, k0);&lt;br /&gt;        memcpy(xx, output, 8);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    des_ecb_crypt(xx, output, DES_DECRYPT, k1);&lt;br /&gt;    memcpy(xx, output, 8);&lt;br /&gt;&lt;br /&gt;    des_ecb_crypt(xx, output, DES_ENCRYPT, k0);&lt;br /&gt;    memcpy(xx, output, 8);&lt;br /&gt;&lt;br /&gt;    print_hex(xx, 8);&lt;br /&gt;    return 1;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-5002479557111081538?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-5002479557111081538</guid><pubDate>2010-01-26T08:04:53.443-08:00</pubDate></item><item><title>1.1 DES in CBC Mode (DES-CBC)</title><link>http://www.freesoft.org/CIE/RFC/1423/2.htm</link><description></description><guid>http://www.delicious.com/url/6dc5b1d497f83f5072b8157fe89e4be5#devinvenable</guid><pubDate>Mon, 25 Jan 2010 19:59:35 +0000</pubDate></item><item><title>CBC-MAC on the command line » Clinically Awesome</title><link>http://clinicallyawesome.com/post/148335787/cbc-mac-on-the-command-line</link><description></description><guid>http://www.delicious.com/url/e675289ac313c5dec6de5927d65396d6#devinvenable</guid><pubDate>Fri, 22 Jan 2010 18:43:30 +0000</pubDate></item><item><title>Finding hidden characters in file using Vim</title><link>http://devinvenable.blogspot.com/2010/01/finding-hidden-characters-in-file-using.html</link><description>Show newlines and tab location:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:set list&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Back to normal:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:set nolist&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;View open file as hex:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;:%!xxd &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width="1" height="1" src="https://blogger.googleusercontent.com/tracker/19895055-9091365409214815716?l=devinvenable.blogspot.com" alt="" /&gt;&lt;/div&gt;</description><guid>tag:blogger.com,1999:blog-19895055.post-9091365409214815716</guid><pubDate>2010-01-15T09:02:34.979-08:00</pubDate></item><item><title>internet transfer speeds &amp; file sizes - how fast? how much storage? -</title><link>http://www.lyberty.com/encyc/articles/kb_kilobytes.html</link><description></description><guid>http://www.delicious.com/url/5c431779b7cfb6ce598aa7f824c34530#devinvenable</guid><pubDate>Fri, 08 Jan 2010 19:54:15 +0000</pubDate></item><item><title>Linux &#8211; Iftop - &#8230;Details&#8230;</title><link>http://blog.deepreflect.net/2009/01/26/iftop/</link><description></description><guid>http://www.delicious.com/url/569893f9fbc1d30196ce3e5324f9bb1d#devinvenable</guid><pubDate>Fri, 08 Jan 2010 16:42:07 +0000</pubDate></item><item><title>Download time calculator</title><link>http://www.numion.com/calculators/Time.html</link><description></description><guid>http://www.delicious.com/url/3eded9d12ba1f8284a18111b1e2d176e#devinvenable</guid><pubDate>Fri, 08 Jan 2010 15:47:43 +0000</pubDate></item><item><title>etbe: creating a new SE Linux policy module</title><link>http://etbe.blogspot.com/2007/03/creating-new-se-linux-policy-module.html</link><description></description><guid>http://www.delicious.com/url/abcef707104b7350c9a0493ff1dd9feb#devinvenable</guid><pubDate>Fri, 08 Jan 2010 15:47:33 +0000</pubDate></item><item><title>45.2. Building a Local Policy Module</title><link>http://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-sel-building-policy-module.html</link><description></description><guid>http://www.delicious.com/url/a14e161a69965c6ac68e704899e1e8e4#devinvenable</guid><pubDate>Fri, 08 Jan 2010 15:47:33 +0000</pubDate></item><item><title>$ cheat git</title><link>http://cheat.errtheblog.com/s/git</link><description></description><guid>http://www.delicious.com/url/4771f1b9d67fd34676699adb333c2588#devinvenable</guid><pubDate>Fri, 08 Jan 2010 15:47:33 +0000</pubDate></item><item><title>What ports need to be open for Samba to communicate with other windows/linux systems?</title><link>http://www.cyberciti.biz/faq/what-ports-need-to-be-open-for-samba-to-communicate-with-other-windowslinux-systems/</link><description></description><guid>http://www.delicious.com/url/76d356cc5a91dfd4b5c7cccca72380bd#devinvenable</guid><pubDate>Tue, 29 Dec 2009 15:50:02 +0000</pubDate></item><item><title>Free Translation Online</title><link>http://translation2.paralink.com/</link><description></description><guid>http://www.delicious.com/url/d221d92277f6a5bce9e9bba37b1d99f9#devinvenable</guid><pubDate>Tue, 29 Dec 2009 15:49:52 +0000</pubDate></item><item><title>ZynAddSubFX Packaged</title><link>http://www.flickr.com/photos/27165790@N06/4221768301/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4221768301/" title="ZynAddSubFX Packaged"&gt;&lt;img src="http://farm3.static.flickr.com/2586/4221768301_eafff14157_m.jpg" width="240" height="143" alt="ZynAddSubFX Packaged" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The apt package of SynAddSubFX has always looked like crap on my computers.&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4221768301</guid><pubDate>2009-12-28T15:24:03Z</pubDate></item><item><title>ZynAddSubFX Compiled</title><link>http://www.flickr.com/photos/27165790@N06/4222530134/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4222530134/" title="ZynAddSubFX Compiled"&gt;&lt;img src="http://farm3.static.flickr.com/2535/4222530134_b1278f9c0d_m.jpg" width="240" height="143" alt="ZynAddSubFX Compiled" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you compile from source, the mysterious font size problems go away.  Does the geometry of the monitor on the computer the package is compiled on effect the outcome?&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4222530134</guid><pubDate>2009-12-28T15:24:02Z</pubDate></item><item><title>HowToSeq24Introduction - Community Ubuntu Documentation</title><link>https://help.ubuntu.com/community/HowToSeq24Introduction</link><description></description><guid>http://www.delicious.com/url/765f1026eb1e39465e884f6f32c14300#devinvenable</guid><pubDate>Sun, 27 Dec 2009 16:45:28 +0000</pubDate></item><item><title>Ubuntu Forums - View Single Post - [ubuntu] Ubuntustudio interface question</title><link>http://ubuntuforums.org/showpost.php?p=6272809&amp;postcount=3</link><description></description><guid>http://www.delicious.com/url/60c6b22e298fed4e24ba48c41a022ba3#devinvenable</guid><pubDate>Fri, 25 Dec 2009 03:35:12 +0000</pubDate></item><item><title>UbuntuStudioPreparation - Community Ubuntu Documentation</title><link>https://help.ubuntu.com/community/UbuntuStudioPreparation</link><description></description><guid>http://www.delicious.com/url/63eb8d918a7a1dff2ba62689f08a2e99#devinvenable</guid><pubDate>Thu, 24 Dec 2009 23:35:44 +0000</pubDate></item><item><title>Writing New Policy for a Daemon</title><link>http://vault.centos.org/4.5/docs/html/rhel-selg-en-4/selg-section-0128.html</link><description></description><guid>http://www.delicious.com/url/0a2c4caa2be21e9868d8df130ef84a46#devinvenable</guid><pubDate>Mon, 14 Dec 2009 19:54:17 +0000</pubDate></item><item><title>Software Synthesis</title><link>http://basicsynth.com/index.php?page=basic&amp;WEBMGR=16661ca05fb0b25d6b7f4dd2efd03323</link><description></description><guid>http://www.delicious.com/url/7c4b45f79f7851f206aee9ab2d3d13ac#devinvenable</guid><pubDate>Wed, 02 Dec 2009 21:42:46 +0000</pubDate></item><item><title>Ed Hellen's Python notes and examples</title><link>http://www.uncg.edu/phy/hellen/Python_Instructions.html</link><description></description><guid>http://www.delicious.com/url/6d66c94fd37d6db434772e7266730c86#devinvenable</guid><pubDate>Wed, 02 Dec 2009 20:07:36 +0000</pubDate></item><item><title>DSP tutorial</title><link>http://logix4u.net/DSP/Tutorials/DSP_tutorial.html</link><description></description><guid>http://www.delicious.com/url/daf12ebd375b1bf3aac5cd756f2b80e8#devinvenable</guid><pubDate>Wed, 02 Dec 2009 20:00:16 +0000</pubDate></item><item><title>Free Guitar Lesson - SC-002 - The Minor Pentatonic Scale</title><link>http://www.justinguitar.com/en/SC-002-MinorPentatonicScale.php</link><description></description><guid>http://www.delicious.com/url/f0fecd56d9ddaba2bd7002e2ea34b1a9#devinvenable</guid><pubDate>Fri, 27 Nov 2009 15:07:21 +0000</pubDate></item><item><title>How to fix your Windows MBR with an Ubuntu liveCD | ArsGeek</title><link>http://www.arsgeek.com/2008/01/15/how-to-fix-your-windows-mbr-with-an-ubuntu-livecd/</link><description></description><guid>http://www.delicious.com/url/f6b909ec7156948c2cea988d2e0d6d44#devinvenable</guid><pubDate>Fri, 27 Nov 2009 03:31:47 +0000</pubDate></item><item><title>lolas</title><link>http://www.flickr.com/photos/27165790@N06/4119825241/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4119825241/" title="lolas"&gt;&lt;img src="http://farm3.static.flickr.com/2523/4119825241_4c96bae138_m.jpg" width="220" height="240" alt="lolas" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4119825241</guid><pubDate>2009-11-20T19:54:23Z</pubDate></item><item><title>Crypto Nerd's Imagination</title><link>http://www.flickr.com/photos/27165790@N06/4118145366/</link><description>&lt;p&gt;&lt;a href="http://www.flickr.com/people/27165790@N06/"&gt;devinvenable&lt;/a&gt; posted a photo:&lt;/p&gt;
	
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/27165790@N06/4118145366/" title="Crypto Nerd's Imagination"&gt;&lt;img src="http://farm3.static.flickr.com/2792/4118145366_23e7aee4f5_m.jpg" width="240" height="147" alt="Crypto Nerd's Imagination" /&gt;&lt;/a&gt;&lt;/p&gt;</description><guid>tag:flickr.com,2005:/photo/4118145366</guid><pubDate>2009-11-19T19:13:45Z</pubDate></item><item><title>devinvenable: Since taking on a full time job, I tweet less.  Am I just less worried about networking? Tired of twitter?  Less narcissistic? Out of words?</title><link>http://twitter.com/devinvenable/statuses/2209939148</link><description>devinvenable: Since taking on a full time job, I tweet less.  Am I just less worried about networking? Tired of twitter?  Less narcissistic? Out of words?</description><guid>http://twitter.com/devinvenable/statuses/2209939148</guid><pubDate>Wed, 17 Jun 2009 17:58:49 +0000</pubDate></item><item><title>devinvenable: @adriap my influence?</title><link>http://twitter.com/devinvenable/statuses/2091648114</link><description>devinvenable: @adriap my influence?</description><guid>http://twitter.com/devinvenable/statuses/2091648114</guid><pubDate>Tue, 09 Jun 2009 16:59:52 +0000</pubDate></item><item><title>devinvenable: Fb app won't open.  Guess it's twitter time.</title><link>http://twitter.com/devinvenable/statuses/2050480369</link><description>devinvenable: Fb app won't open.  Guess it's twitter time.</description><guid>http://twitter.com/devinvenable/statuses/2050480369</guid><pubDate>Sat, 06 Jun 2009 01:44:40 +0000</pubDate></item><item><title>devinvenable: @ambersa42 wii fit? You are such a nerd!</title><link>http://twitter.com/devinvenable/statuses/2008923236</link><description>devinvenable: @ambersa42 wii fit? You are such a nerd!</description><guid>http://twitter.com/devinvenable/statuses/2008923236</guid><pubDate>Tue, 02 Jun 2009 21:52:17 +0000</pubDate></item><item><title>devinvenable: @geoffreysimpson thanks!</title><link>http://twitter.com/devinvenable/statuses/1949111846</link><description>devinvenable: @geoffreysimpson thanks!</description><guid>http://twitter.com/devinvenable/statuses/1949111846</guid><pubDate>Thu, 28 May 2009 16:48:55 +0000</pubDate></item><item><title>devinvenable: Best thing in the Android update: decent video recorder and viewer.</title><link>http://twitter.com/devinvenable/statuses/1949100944</link><description>devinvenable: Best thing in the Android update: decent video recorder and viewer.</description><guid>http://twitter.com/devinvenable/statuses/1949100944</guid><pubDate>Thu, 28 May 2009 16:47:51 +0000</pubDate></item></channel></rss>