<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>The Perl Goddess</title>
        <link>http://www.perlgoddess.com/perlgoddess/</link>
        <description>
creator
mom
rogue
strategist</description>
        <language>en</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Wed, 09 Apr 2008 19:48:36 -0800</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>What&apos;s old is new again...</title>
            <description><![CDATA[I swear I meant to write this post a month ago, and in a horrible burst of irony never managed to find the time to do so, but here it is anyhow.  I think I should warn everyone that my only degree is in Philosophy, and I've managed to shove that part of me down for a while, but apparently navel-gazing is the new black and so I'm dusting off my old philosophical thoughts and letting them out to play.

My friends were all reading <a href="http://www.amazon.com/New-Earth-Awakening-Lifes-Purpose/dp/0525948023">A New Earth</a>, and since I wanted to find out what the fuss was about I instructed my Kindle to fetch it for me and set to reading it.  After reading it, I had a few thoughts... 

First, I'm very pleased that Oprah is encouraging people to read and discuss things like this.  These topics are important in our lives and by and large we just don't make the space for them.  Along with that I am highly amused that Tolle chose to cast Jesus as the ultimate Taoist.  Don't get me wrong, the bible is all filled with examples of what a zen individual Jesus was, but the churches in our world today tend to shy away from this kind of thought.

My main impression of the book is that it's a nice melding of Taoist and existentialist philosophies, which I tend to like because those are two of my favorites.  And reading it reminded me that I need to consciously take the time to remember the things that are important to me.  Letting things go that don't serve me is something that regularly escapes my priority list, and my internal list says this is more important than anything else.

I did come to a realization after reading the book (although it was ideas I'd processed before).  I spend way too much of my time feeling guilty that I can't do all the things I want to do.  I have my priorities - my family, my work, my friends.  And so many other things seem cool and wonderful, and I keep wanting to engage with new groups of people doing new things, that when I can't find the space I feel sad... which is silly.  The reason I can't find space for new things is that my life is filled with wonderful friends and family, and a fabulous job.  I'm not willing to give up any of my current things to have new things, and that's perfectly reasonable.

Oh yeah, one other thing.  One of my priorities has always been my health (even though I let it slip in importance sometimes) and to that end I'm doing the Danskin Triathlon at Disneyland this year - I've even talked some of my friends into joining me, and I'm really excited about it.  I even made a website for our training and encouraging.  So I guess that makes it family, friends, work and health.  Oh, and singing! I've decided that's important too, and I'm going to sign up for a class.  But that's it!  Nothing else!  If only I didn't  live in such an amazing town, I wouldn't have to make these terribly difficult choices.  ]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2008/04/whats-old-is-new-again.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2008/04/whats-old-is-new-again.html</guid>
            
            
            <pubDate>Wed, 09 Apr 2008 19:48:36 -0800</pubDate>
        </item>
        
        <item>
            <title>Getting something done</title>
            <description><![CDATA[I'm sure I'm not the only one who gets periodically overwhelmed by the number of things I'm not doing right.  I still <a href="http://www.naturemoms.com/no-shampoo-alternative.html">shampoo my hair</a>, my kids <a href="http://children.webmd.com/news/20040702/video-games-tv-double-childhood-obesity-risk">watch TV and play video games</a> and despite my best efforts we still seem to end up with transfats and other evil plastic foods in my house.  Every time I turn around, there's something new to feel guilty about, and the packrat research monster inside of me insists that I need to dive deeply into every single topic to determine the truthfulness of the claim, which just increases my anxiety about my worth as a human being, while not actually giving me space in my head to contemplate anything of actual worth.

I have spent many an hour railing against the mean and nasty high bandwidth world, providing so much chaos and so few answers... but in a moment of clarity, I discovered that these gifts brought to me by the intertubes, clamoring for my attention, are not actually the main source of my anxiety.  My anxiety comes from having too many things bouncing around in my brain like colored balls in a Busy Ball Popper.  And I have found something that actually helps.

I read <a href="http://www.davidco.com/">Getting Things Done</a> a while back, and it kinda was ok, and seemed like a pretty good idea, but I wasn't really sold.  Then a few weeks ago I was pointed to <a href="http://www.omnigroup.com/applications/omnifocus/">OmniFocus</a>, a GTD tracker for the Mac, and I discovered that if you wrap up a good set of ideas in a cute and sexy UI I will actually use it.  And when I spend my time actually doing things instead of scrambling to remember which next thing I was supposed to be doing, things get done faster, and I am calmer.  I sort of feel like I'm playing that game from ST:NG where they had the little brain game that gave you zaps of happiness whenever you make a goal.  I check a box, it gets a line through it, and I feel a little swell of pride.  It integrates pretty nicely with my iphone (courtesy of <a href="http://www.toodledoo.com">Toodledoo</a>) and it allows you to see all your 'errands' or 'phone things' in a list separate from the project they're associated with.  Which is great when you're trying to get all those lame phone calls out of the way at once.

I'm not sure if I'm really any closer to zen mastery, but I sure feel happier.  Even though I've been battling the most rotten cold ever this week, I've gotten a lot done for home and work, and I don't feel like the world is sitting on my shoulders, waiting to collapse.  And now I can check off the item marked "Make blog post about OmniFocus."  Woo.  That felt good.  Maybe I should call and schedule that dentist appointment next.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2008/03/getting-something-done.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2008/03/getting-something-done.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">gtd</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">omnifocus</category>
            
            <pubDate>Fri, 14 Mar 2008 17:47:46 -0800</pubDate>
        </item>
        
        <item>
            <title>The Universe in Reverse</title>
            <description><![CDATA[At <a href="http://www.pantheacon.com/">Pantheacon</a> last week I attended a talk by a Tarot guy.  It was really interesting, and I learned a great deal (and reminded myself that I want to learn more).  One of the concepts he brought up was "reversed" cards - when the card is laid out upside down.  Various people have all sorts of descriptions of what this means, but his was really interesting - a reversed card means that your path is blocked, that there will be some struggle getting to the other side.  "Huh," I thought, "I wonder what that means."  You see, my path is rarely blocked, the universe usually steps aside gracefully to let me get where I need to go, and the very notion is puzzling to me.

This week I think that all my cards are upside down.  It's the only possible explanation.  I started off the week with a driving desire to knock things off of my to-do list so I could feel like a superior person (superior, that is, to the person I am with a long undone to-do list).  In that spirit, earlier this week I spent three days diligently trying to get an appointment for a mammogram to celebrate my new oldness (finally succeeded, went yesterday). My post from Wednesday described the contortions I needed to do in order to achieve a relatively simple technical task.  Yesterday, after getting my mammogram, I thought "hurray! I can now get a couple more things done and become that superior person!"  

But the universe, she likes to play with me.  My way is free and clear *except* when I start pushing, trying to assign extra importance to things.  My car registration is due, and I wanted to take care of it - but first, living in California as I do with a newly old car, I needed to get my smog check done.  So yesterday, after my mammogram, I went to our mechanic, hoping to get two more things off my list.  No, sorry, they were too busy to do a smog check then, but they assured me that if I came back this morning at 8:00 they could do both lickety split.  Came back at 8:00 this morning, asked for smog check/oil change again, left the car there for 90 minutes, came back and... no, they hadn't done the smog check.  In fact, the front desk lady insisted that I had not actually asked for it.   And then the front desk fellow helpfully suggested that I could come back tomorrow morning and get it done first thing.  Oddly, I didn't take this offer.  I'm afraid to say that I stomped out, angered by the thwarting of my quest, and resolving not to darken their doorstep again (a side note - I have been a loyal customer of theirs for 10 years, despite increasingly mindboggling displays of incompetence).

So, the stomping.  It amuses the universe. It causes her to turn my life into an Infocom game.  You remember... "Oh, sure, I have the flibjar you need.  But before I can give it to you, you need to get a blopspur from my sister."  So every simple task becomes an epic quest, and by the time you finish the game you feel like you've scaled a mountain.

Anyhow, I headed down to the Shell station at the other end of town (this is, um, 2 miles from the first place) and they said "Sure, no problem, smog check, 20 minutes."  Headed to Starbucks, and came back in 20 minutes to receive the first actual goodie in my quest - the smog check certificate.  Woo!  Heady with my success, I determined to drive down to the AAA office RIGHT THEN to pay my registration (I had lost my registration renewal form a few weeks ago, dooming me to an in-person interaction).

Down to the AAA office I drove.  On the way, I thought "I know, I'll call and renew victoria's prescription for Singulair, because the acacia trees are killing her."  Of course, the pharmacy had no record of such a prescription, so I need to call the doc and get a new one.  Ah well, just one more flibjor to retrieve in my quest to get things done.  Arrived at the AAA office ready to end my quest.  But, oh dear, my AAA membership expired.  So I waited fairly impatiently for a new member dude to come and fetch me to take me off to new member creation.  Note that it would have been virtually impossible for the waiting at the AAA office to even scratch the surface of the inevitable wait should I go directly to the DMV, so I took my medicine as graciously as I could.  Eventually he came, I got my new membership, and... I paid my registration!  There are now stickers on my car indicating my right to drive the car for another year.

*Whew*

The universe does this to me to remind me that I want to strive for zen mastery. The more grumpy I get about the way things are, the more things appear to increase my grumpiness.  Eventually I remember.  Like now.  I remember.  I'm sure it'll last forever... or at least until the next time my to-do list looks overwhelming and I decide to hang my self-image on my ability to get it trimmed down efficiently, and the universe turns all the cards upside-down to remind me to retain perspective.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2008/02/the-universe-in-reverse.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2008/02/the-universe-in-reverse.html</guid>
            
            
            <pubDate>Fri, 29 Feb 2008 12:07:03 -0800</pubDate>
        </item>
        
        <item>
            <title>Django is great^h^h^h^h^hfrustrating</title>
            <description><![CDATA[Don't get me wrong.  I do like <a href="http://www.djangoproject.com">django</a>.  I've been working back and forth in <a href="http://www.pylonshq.com">Pylons</a> and Django, trying to learn each of them well enough so that I can figure out which one will give the right answer when I know better what the powers that be want.

So, if you, like me, have a debian etch box upon which you want to install django, have it work with the tutorials in the book and on the site (thus needing python2.5), using mod_python so that you can work on a remote server, with postgres, do the following:

<ul>
	<li>Use the Django from subversion.  It lives in http://code.djangoproject.com/svn/django/trunk (don't forget to uninstall python-django if you've already installed that.</li>
	<li>It requires python2.5.  The packaged version is fine. <code>apt-get install python2.5</code></li>
	<li>Get mod_perl as a package, because it will make all the connections correctly (but it will be linked to python2.4), and then</li>
	<li>Install  apache2-prefork-dev so that you have the right apxs2 to build mod_python against python2.5</li>
	<li>Download mod_python from http://ftp.wayne.edu/apache/httpd/modpython/mod_python-3.3.1.tgz</li>
	<li>Configure it (with --apxs=/usr/bin/apxs2)</li>
	<li>Install it</li>
	<li>Get psycopg from  http://www.initd.org/pub/software/psycopg/PSYCOPG-2-0/psycopg2-2.0.5.1.tar.gz.  Don't get fancy and try the new one.  It doesn't work.</li>
	<li>python setup.py install that sucker</li>
	<li>And then restart everything and all should be lovely in the world</li>
</ul>

So that's...
<pre>
svn co http://code.djangoproject.com/svn/django/trunk django
ln -s `pwd`/django /usr/lib/python2.5/site-packages/
ln -s `pwd`/django/django/bin/django-admin.py /usr/local/bin
apt-get install python2.5 libapache2-mod-python apache2-prefork-dev
wget http://ftp.wayne.edu/apache/httpd/modpython/mod_python-3.3.1.tgz
tar xzf mod_python-3.3.1.tgz
cd mod_python-3.3.1
./configure --apxs=/usr/bin/apxs2
sudo make install
cd ..
wget http://www.initd.org/pub/software/psycopg/PSYCOPG-2-0/psycopg2-2.0.5.1.tar.gz
tar xzf psycopg2-2.0.5.1.tar.gz
cd psycopg2.2.0.5.1
sudo python setup.py install
sudo /etc/init.d/apache2 restart
</pre>

I spent a good deal of today trying to find these answers.  So, you're welcome :-)]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2008/02/django-is-greathhhhhfrustratin.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2008/02/django-is-greathhhhhfrustratin.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">debian</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">django</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">postgresql</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">pylons</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">python</category>
            
            <pubDate>Wed, 27 Feb 2008 18:23:08 -0800</pubDate>
        </item>
        
        <item>
            <title>Ravelry and Saucery</title>
            <description><![CDATA[This weekend some <a href="http://www.fickleknitter.com">friends</a> visited and we had a fabulous time playing together.  One of our outings was to <a href="http://www.knittinguniverse.com/flash/events/EventDetail.php?EventID=41">Stitches West</a>, the land of yarn, patterns, and other knitting goodness.  I had a wonderful time petting all the yarn, and found myself pulled back into the whole knitting thing.  One of the booths was for <a href="http://www.ravelry.com/">Ravelry</a>, a relatively new social knitting site.  Michelle insisted that this was the coolest site ever created, and that I should take a look (knowing, as she did, that I'm dealing with various cool ways to visualize data).  <a href="http://infotrope.net/blog/2007/12/27/in-which-i-join-ravelry/">Skud</a> has also sung their praises, which led me to believe that they must in fact be pretty cool. I got a chance to shoulder-surf behind Michelle while she demonstrated the wonder that is this site... and I have to agree.  This is an amazing site.  

Although I haven't yet gotten my invitation, I've already done a bunch of thinking about why this is such a great site.  I think one of the main innovations is the integration with existing knit blogs.  People have been knit blogging for years, and most of them have a devoted following, making them reluctant to move their knit musings to a new place.  Allowing people to integrate their narrative blog posts in with their more structured data on ravelry, and point back and forth between them gives the most actively posting knitters incentive to use the site and keep it filled with new and glorious content.  I do like the stash tracking and the forums, but I have to say that integrating with people's existing content is inspired.  In fact, I think I'll make a knitting blog again here (and fold it in with this one using MultiBlog) so that when I finally get my invitation I'll have some posts to look at.

So now *I'm* inspired.  I'll probably offer a hand in making the site better, just because it seems really amazing.  But I also spent a good deal of time today looking around for something similar for cooking.  There are tons of food bloggers too, churning out content on a regular basis which is all chaotically scattered about the blogosphere.

I have to do some work with Django and Pylons over the next couple of days, and one of the things I'll be contemplating is whether I could make a similar site with Django.  I think it would be great to have a site which integrates existing blogs (like Ravelry does), and also allows users to link to recipes they've made (and link to the place from whence it came, with the option to buy the book from Amazon where appropriate). There could be forums and communities for different cooking types or cuisines, and probably other fabulous linky things I'm not thinking of now.  There won't be a stash tracker or anything, although kitchen equipment is something I'm always interested in.  I'd love to know who else made a given recipe from one of my 72,000 cookbooks.  I'd also like to know who owns each of them and what their favorite recipes are from that book.  And what adaptations they've made to make them more wonderful. 

For now I'll just play with Django and await further inspiration (and my invitation!) but I hope to have some time to noodle about this in my "spare time."]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2008/02/ravelry-and-saucery.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2008/02/ravelry-and-saucery.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">cooking</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">django</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">ravelry</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">stitches west</category>
            
            <pubDate>Mon, 25 Feb 2008 17:28:36 -0800</pubDate>
        </item>
        
        <item>
            <title>Configurable FreeSpin</title>
            <description><![CDATA[A few months ago, Ketan Anjaria (aka KidBombay) made a cool <a href="http://kidbombay.com/clients/freebase/freeSpin/">spin viewer</a> for things in freebase.  One of my projects at <a href="http://www.appliedminds.com">Applied Minds</a> is going to be springboarding off of that code, so I started off by changing the code to make the client configurable.  We're contributing our changes back to the code base, and Metaweb is going to release the FreeSpin code as Open Source soon at which point folks can play with the code themselves, but in the meantime anyone can create their own viewer for their favorite freebase types by grabbing the swf file and creating an xml file to drive the viewer.

I have an example of the <a href="http://www.perlgoddess.com/FreeSpin/FreeSpin.swf">VentureSpin</a> client, which is controlled by an <a href="http://www.perlgoddess.com/FreeSpin/freeSpin.xml">XML file</a> in the same directory.  Similarly, there is a <a href="http://www.perlgoddess.com/FilmSpin/FreeSpin.swf">FilmSpin</a> client, controlled by its own <a href="http://www.perlgoddess.com/FilmSpin/freeSpin.xml">XML file</a>.

<span class="mt-enclosure mt-enclosure-image"><img alt="FreeSpin.jpg" src="http://www.perlgoddess.com/perlgoddess/FreeSpin.jpg" width="400" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;"/></span>

To make this all work for you, all you need to do is grab one of the FreeSpin.swf files and put it on your own web server, and create a freeSpin.xml file (I know, the capitalization is a pain, I promise to fix that soon) in the same directory, and it should work like a charm.

If you do use it, let the folks at <a href="http://blog.freebase.com/?p=91">Metaweb</a> know where your viewer is so they can see how people are browsing their data.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2008/01/configurable-freespin.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2008/01/configurable-freespin.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">flash</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">freespin</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">kidbombay</category>
            
            <pubDate>Wed, 30 Jan 2008 11:14:25 -0800</pubDate>
        </item>
        
        <item>
            <title>Flex and Flickr and DisplayShelf</title>
            <description><![CDATA[I've been working with the fabulous DisplayShelf code from simplyscheming.com to try to make various types of browsers in Flex.  Yesterday, I *just about* had it working to browse images from flickr, but I ran into the old 'checkpolicyfile' problem.  Even though Flickr has been nice enough to put crossdomain.xml files on all their static servers, the DisplayShelf code needs to manipulate the image as a bitmap to make the groovy reflection underneath the picture.

I found places where people fixed this problem by changing LoadContext, and other places where people added trustContent to the Image, but I couldn't figure out how to make this work correctly in the context of DisplayShelf.

Fortunately, there in the code was a reference to someone I'd worked with a zillion years ago (ok, 13), and I pinged him to ask for help.  He gave me the magic answer, which looks like this (you'll need to 'view source' to see it, I'm not sure how to get HTML-ish things to show up in MT).

<pre>Original DisplayShelf component in mxml:
<local:displayshelf id="shelf" borderthickness="2" bordercolor="#000000" dataprovider="{dataSet}" enablehistory="false" width="7" angle="10" popout=".35" change="currentInfo();">

New DisplayShelf component:
<local:displayshelf id="shelf" height="300" borderthickness="2" bordercolor="#000000" dataprovider="{DataModel.getInstance().photoInfo}" enablehistory="false" width="5" angle="10" popout=".35" change="currentInfo();">
				<local:itemrenderer>
					<mx:component>
						<mx:image trustcontent="true">
					</mx:image></mx:component>
				</local:itemrenderer>
				</local:displayshelf>
</local:displayshelf></pre>

Seemed a little obscure, but it works and now my browser is happy.

Thanks to <a href="http://www.rictus.com/">NJ</a> for saving my sanity :-)

]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/11/flex-and-flickr-and-displayshe.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/11/flex-and-flickr-and-displayshe.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">flex flickr security</category>
            
            <pubDate>Thu, 15 Nov 2007 11:07:44 -0800</pubDate>
        </item>
        
        <item>
            <title>Working like Sheep</title>
            <description><![CDATA[I have a friend who hearkens from the heartland of America, and is thus more schooled than I in the cosmic truths to be found on a farm.  We were discussing the relative dimness of various farm animals, and he mentioned that sheep were pretty much the stupidest animals around.  I asked why, and he said that a lamb, when confronted with a meadow full of tall grass, will eat through the grass, leaving a 1-lamb-wide path behind them.  When the lamb is full, however, it is faced with a horrible situation.  Walls of grass surround it on the front and the sides.  After looking left and right in a panic, the lamb will start to bleat piteously, hoping for someone to rescue it from its plight, eventually sitting down to wait until it's hungry again so that it can extend the path further.  I'm not sure how true the story is, but it makes for a compelling mental image.

I was having lunch with my friend <a href="http://www.eekim.com/">Eugene</a> yesterday, and we started talking about my last post on making space, and about the sheep analogy, and I realized that in fact the two are very related.  I frequently find myself in a position where I am trying to solve a difficult problem.  The more I push, the more the answer eludes me, but I have this underlying fear that if I break away and come back to the problem with fresh eyes, I'll lose the context I've worked so hard to achieve.  The reality is that I'm just like the lamb.  The answer I need will only be clear when I back up.  The context I've built up is *broken*, which is why I'm not finding the answer.

I spent a lot of yesterday working like a lamb, pounding my head against a problem which turned out to be fairly simple to solve after I returned from lunch.  Chastised by the universal forces, I meekly turned off the computer at 5 so that my brain cells could recharge before I tackle the next problem this morning.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/11/working-like-sheep.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/11/working-like-sheep.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
            <pubDate>Tue, 13 Nov 2007 06:46:44 -0800</pubDate>
        </item>
        
        <item>
            <title>We interrupt your regularly scheduled programming...</title>
            <description><![CDATA[... to mention that I now have red hair.

<span class="mt-enclosure mt-enclosure-image"><img alt="" src="http://www.perlgoddess.com/perlgoddess/redhair.jpg/IMG_0125.JPG" width="300" height="400" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;"/></span><br />

And now, back to the program.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/11/we-interrupt-your-regularly-sc.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/11/we-interrupt-your-regularly-sc.html</guid>
            
            
            <pubDate>Fri, 09 Nov 2007 10:51:24 -0800</pubDate>
        </item>
        
        <item>
            <title>Creative Space</title>
            <description>So I&apos;ve now been at my new job for about 2 months, and there&apos;s a major contrast between my last job and this job.

We&apos;ll start with the negatives because there aren&apos;t many.  I&apos;m a remote worker at a company that does most of its collaboration and communication in person, so I&apos;ve had to work hard at staying in touch with the people at the office. It helps that I go down there at least once a month to touch base, and I&apos;m getting to know the folks (and they me) so remote communication is more effective.  Also, without anyone checking in with me every day it takes more discipline to buckle down on days when my motivator unit is broken.  And I&apos;m currently the only person on my &apos;team&apos; which makes it a little hard to get traction.  And I miss all my ex-coworkers.

Now, the positives.  Unlike the company I came from, there is no drama here.  Of course, it&apos;s replaced by its own special type of politics, of a grown-up type I&apos;m somewhat unaccustomed to.  Fortunately I seem to be negotiating these new waters fairly well, and the end result of this environment is that my job is much, much less stressful.  Being the only remote worker also means that I&apos;m almost never interrupted for anything, and my velocity when I&apos;m writing code or reading documentation is generally quite high.  And working somewhere that brainstorming is a valued activity has given me the opportunity to discover that in fact I&apos;m good at thinking up ideas, when I have some time to do so.

All in all, the positives far outweigh the negatives, and I feel like I&apos;m learning, contributing, and working in a positive environment.  It&apos;s still hard to get out of the habit of feeling horribly guilty if I&apos;m out of contact for a bit, but I&apos;m slowly becoming more relaxed and just enjoying the work I&apos;m doing.  It seemed very odd to me, coming from a place of such urgency to a place that seems so much more laid back, but the folks at AMI have the space to think up cool stuff - without that space it&apos;s so much harder to let the magic happen.

I know that small startups have less space to allow their employees to stop and think and explore, but I wonder if sometimes the need to rush creates more need to rush, and squelches the innovative ideas best suited to an agile, entreprenurial company.  I was reminded of this several times when working at Socialtext, when I stopped rushing around for a few days and as a result found the solutions to the problems that had been pestering me for weeks.

Companies need to create space for their employees, especially when the employees aren&apos;t good at doing so for themselves.  People need to create space for themselves.  All of us, all programmers, have found ourselves staring intently at the screen, the zone long past, trying to find the solution to a problem... and then flash on the solution as soon as we step away to feed ourselves and look at the sky.  Make space for yourself, and try to help others around you find space for themselves as well.</description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/11/creative-space.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/11/creative-space.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
            <pubDate>Sat, 03 Nov 2007 09:29:33 -0800</pubDate>
        </item>
        
        <item>
            <title>Perl Makes Good Programmers</title>
            <description><![CDATA[I bet you think that I'm kidding, right?  Perl allows programmers to build extremely bad habits, doesn't force discipline, encourages shortcuts that simply aren't possible in other languages.  But I'm actually serious.

I had a conversation with my new boss a few weeks ago that went something like this:
Boss: Do you know what data driven design is?
Me: No.
Boss: <explains the concept> (google it if you don't know :-)
Me: Oh.  That's how I code.
Boss: Good

So it occurred to me to wonder why it was that I code that way, what with my lack of formal education and all.  I went to the <a href="http://pghpw.org/">Pittsburgh Perl Workshop</a> last weekend (my OpenID presentation went great, thanks for asking - I used sock puppets to describe the user/website/server interaction) and spent a great deal of time thinking about how perl people write code and why, and I realized that I code this way (with reusable, modular, configurable code) *because* I work in Perl.

The easiest way to get started doing something with Perl is to pull down some helper code from CPAN.  All of that code (ok, not all of it, but most of it... well, ok, the parts I actually use) was written in a modular way, designed to be configured to work for multiple applications.  The more time someone spends writing Perl code, the more likely they are to approach each new problem in a modular way (I need something to do A and B, and then C to tie them together) - this makes it easier to use CPAN to reduce your workload, but also means that when you write the code you're likely to avoid hard coding anything in the program itself.

When I started working in Flex, I was a little frustrated that it was so difficult to find examples where developers had pulled the configuration information out into a separate file, but the truth is that's not terribly surprising.  First, there simply aren't nearly as many examples of Flex code out there, so it's harder to find any specific thing.  Second, without the external community pushing developers to think beyond their current application, it's easy to fall into the habit of taking the shortest path to "done."  Working with Perl (and some seriously critical programmers) for (ack!) thirteen years has given me an allergy to hard coding *anything* in my programs.  Which makes it harder for me to spit out something quick and dirty, but makes the things I *do* make much more powerful.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/10/perl-makes-good-programmers.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/10/perl-makes-good-programmers.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">pragmatic programmer</category>
            
            <pubDate>Thu, 18 Oct 2007 18:58:21 -0800</pubDate>
        </item>
        
        <item>
            <title>Now I remember why I do this job...</title>
            <description><![CDATA[Today I had one of those days you get as a programmer, when everything coalesces in a perfect way to shine a happy light on the universe.  I had a list of bugs and a single feature I wanted to add to my Flex program.  The single feature (dynamic filtering based on values in a set of arrays) took me a long time, and I wrestled with it mightily for several hours.  I wanted desperately to make a filter which was extensible, which was easy to add new fields to, and passing variables around in Flex is not something I've become comfortable with.

So there I was, pounding my head against the thing, frustrated and feeling incompetent, until 4PM when a light shined down upon me from the sky, the scales fell from my eyes, whatever cliche you want to use... and the feature was complete.  And when the dust cleared, I realized that 3 of the bugs on my 'to-do' list had gotten fixed in the process of creating this feature.

It's an awesome day when you feel "done" with what you're working on. I wasn't even tempted to start on something else... I just basked in the glow of having gotten it done.

For anyone wandering here from flex land who wants to see the code, here it is:
<pre>

private var filterObj:Object = {this:filterThis,that:filterThat};

// These arrays are populated elsewhere with a list of strings to filter on
private var textObj:Object = {this:"",that:""};

private function filterAll():void {
            	var filtered:Boolean = false;
            	var filterType:String; 
       
            	for (filterType in filterObj) {
            		if (filterObj[filterType].length > 0)
	    			filtered = true;
            	}
            	
            	if (filtered) {
     			dataSet.filterFunction = filterGeneralSet;
            		dataSet.refresh();
 	       } else {
            		dataSet.filterFunction = null;
            		dataSet.refresh();
            	}

private function filterGeneralSet(item:XML):Boolean {
            	var filterType:String;
            	var element:String;
            	var myArray:Array;
            	
              // This is an 'and' filter where everything has to match for the element to return true
            	for (filterType in filterObj) {
    				if (filterObj[filterType].length > 0) { 
    					myArray = filterObj[filterType];
	    				for each (element in filterObj[filterType]) {
	    					var itemFilter:String = item.child(filterType)[0];
	    					if (itemFilter != element) {
	    						return false;
	    					}
	    				}
	    			}
            	}
            	return true;
            }
</pre>]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/10/now-i-remember-why-i-do-this-j.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/10/now-i-remember-why-i-do-this-j.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">filtering</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">flex</category>
            
            <pubDate>Mon, 08 Oct 2007 21:00:03 -0800</pubDate>
        </item>
        
        <item>
            <title>Perl Docs vs. Other Docs</title>
            <description><![CDATA[I've been fussing with Flex this week (as I threatened earlier) and even with my fabulous experience of the tutorials, I have to admit that I've been seriously spoiled by working with Perl for so long.  It's such a mature language that someone else has *always* done something similar to what I'm trying to do, so I can find something to crib off of and get most of the work done.  Even outside of CPAN, folks have code samples and examples and conversations on mailing lists explaining why things work (or don't).

Flex is not so much with the easy documentation.  I consider myself an expert on finding the answer to puzzling questions, and this week I've been faced with many, many puzzling questions which are not easily answered in the book(s) I have nor on any site I can find.  Sure, someone has generally answered the basic question but I never seem to need help with those.

For example, yesterday I tried to figure out how to coerce an XMLList into an Array.  Seems like it should be simple.  I have a list of XML things.  Please tell me what their labels are.  Thank you.  Perl wouldn't have any trouble giving me an array from something array-ish.  But no.  I spent a couple of hours trying to shove the square peg into the round hole, and at lunch went by Borders to peek at one of the books there and discover that the only way to make an Array out of XMLList entries is... to iterate over the list and shove them in one by one.  Ick.

Turns out I didn't really want to put an array in there anyhow, since I want to be able to change the list on the fly and do magical things with it - so passing in the collection itself was the right thing.  But hey, the yak needed shaving, so I spent the time to do it right.

And this morning I wanted to do something fairly simple.  I wanted to make a button glow when you push it, and unglow when you push it again.  This is not hard.  I want to maintain the state of the button in a variable which I'll use elsewhere.  Surely someone has wanted to do this before... but I couldn't find any examples.

I did, however, figure it out, so I'll put it here in case anyone else is trying to glow and unglow buttons in Flex.

<pre>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			public var Glowing:Boolean = false;
			
			public function glowMe():void {
				if (Glowing) {
					buttonGlow.reverse();
					Glowing = false;
				} else {
					buttonGlow.play();
					Glowing = true;
				}
			}
		]]&gt;
	</mx:Script>
	<mx:Glow id="buttonGlow" color="0x99FF66" alphaFrom="1.0" alphaTo="0.0" duration="100" target="myButton"/>
	
    <mx:Panel x="10" y="10" width="200" height="300" layout="absolute">
		<mx:Button x="40" y="60" label="View" id="myButton" mouseUpEffect="{buttonGlow}" click="{glowMe()}; myLabel.visible=true;"/>
	</mx:Panel>
</mx:Application>
</pre>]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/10/perl-docs-vs-other-docs.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/10/perl-docs-vs-other-docs.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">button</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">documentation</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">flex</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">glow</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
            <pubDate>Fri, 05 Oct 2007 07:01:31 -0800</pubDate>
        </item>
        
        <item>
            <title>Conceptual Reference Books vs. Tutorials</title>
            <description><![CDATA[I need to learn Flex so that I can throw together a demo of an application in the next couple of weeks.  I know what I need to do, some other kind soul has done the programming and even published the source for the hardest element in the application, so I just need to ramp up on the language so I can take that code and run with it.

Being a research queen, I headed over to Amazon to look at the reviews for Flex books.  I read all of them and decided on <a href="http://www.amazon.com/Programming-Flex-comprehensive-creating-applications/dp/059652689X/ref=pd_bbs_sr_1/002-5921026-3072023?ie=UTF8&s=books&qid=1191279022&sr=8-1">Programming Flex 2</a>... forgetting, apparently, that I have the attention span of a gnat and so a conceptual programming book is doomed to fail to teach me something new.

I did make it through 100 pages before MEGO (My Eyes Glaze Over) set in and I stopped being able to understand any of the words on the page.  I shook the cobwebs out of my head and went back to Amazon and discovered that I probably wanted <a href="http://www.amazon.com/Essential-Guide-Flex-ActionScript-3-0/dp/1590597338/ref=pd_bbs_sr_3/002-5921026-3072023?ie=UTF8&s=books&qid=1191279022&sr=8-3">this book</a> instead, since it's in a tutorial format instead of the bone-dry lecture format of the other one.  I was going to head down to Borders to get it, but my daughter called to be picked up from school so I didn't get the chance.

Having returned home, I hunted for reasonable online FlexBuilder tutorials and found that Adobe actually has some really good tutorials in their documentation.  Turns out that there's also a <a href="http://weblogs.macromedia.com/mchotin/archives/2007/09/30_days_of_free.cfm">special deal</a> with their training provider for 30 days free, so I signed up for that.  In fact, these two training courses map almost exactly to the book I didn't end up buying and I'm probably going to get more out of an online presentation.

So, having read 5 chapters/100 pages of a perfectly good reference book in 3 hours this morning, I had a vague understanding of the overall application and how it worked, but no idea at all how to do anything in the application.  Doing 11 tutorials later in the day (about 2 hours) got me much closer to where I want to be - I finally said "uncle" when my brains started dribbling out of my ears.  I plan to spend the next couple of days doing more tutorials and then I think I'll have more than enough experience to do what I need to do. Heck, a goodly part of my job is going to be making prototypes - I might as well learn this one really well before trying out OpenLaszlo.

What did I learn?  O'Reilly makes really good reference books, but I just can't learn from them.  I need someone to tell me how to do various things and I'll pick up all of the intricacies from that.  I'm good at identifying when my kids aren't learning something with a particular method, but it's harder to remember that I have the same limitations.  On the other hand, the O'Reilly book will be a good reference, so it wasn't a waste of money.]]></description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/10/conceptual-reference-books-vs.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/10/conceptual-reference-books-vs.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">flex</category>
            
            <pubDate>Mon, 01 Oct 2007 15:44:30 -0800</pubDate>
        </item>
        
        <item>
            <title>Pragmatic (don&apos;t be dumb) Programming</title>
            <description>Since I have no formal degree in programming, I have been extremely fortunate to work on teams of very talented, smart and diligent coders.  Wherever I have worked, the bar has been high, the code has been challenging, and the expectation is that everyone on the team will do their best work every time.  The terminology used among these various teams has varied, but the general sentiment is always &quot;Don&apos;t do something you&apos;re going to regret later.&quot;  Don&apos;t tie the data to the code, don&apos;t make it hard to extend the program, don&apos;t tie code together unless you have to, don&apos;t make assumptions about what people will do with the application... in short, don&apos;t be dumb.  When we were working on the REST interface for Socialtext it was one of the best projects, because decoupling the data from the functions was useful and fun and it just *felt right.*  The words used to describe these concepts were general terms like abstraction, pluggability, configurability.

Coming to Applied Minds, I find myself awash in new vocabulary words and frequently find myself scurrying to look up a term that&apos;s been thrown my way.  Fortunately, once I do that it generally turns out that yes, I do that, whatever it is.  For instance, Data Driven Design falls under abstraction, configurability, and &quot;Don&apos;t be dumb.&quot;  But I didn&apos;t know that.  

I have to learn a couple of new languages next week in order to create a demo application for us to play with, so I headed off to Borders to pick up a book or two.  While I was there, I also picked up the &quot;Pragmatic Programmer&quot; book which I heard referred to so frequently by my cohorts at Socialtext.  Yesterday and today I read through it and discovered that it is all full of &quot;Don&apos;t be dumb.&quot;  Things I have observed and internalized, but couldn&apos;t articulate quite yet.  

The book is an excellent discussion of the way a good programmer behaves, the things they do and don&apos;t do, and how to incorporate them into your workflow.  Many of the sections are likely to add more overhead to your project up front - test harnesses, contracts, decoupling, abstraction of metadata.  But the return on investment is huge.  *Not* doing these things, paying attention only to the here and now and neglecting the future, is where almost everybody gets caught.  

I have a strong tendency to want to get to the finish line as quickly as possible, and am frequently stung by not doing these things.  Here, I&apos;m starting a new project.  It&apos;s not a rush (well, the demo wants to be created in two weeks, but that will be a true &quot;throwaway&quot; prototype for the purposes of playing with the UI elements).  So I&apos;m pledging to myself that I&apos;ll keep the discipline necessary to do things right, take the extra time to think abstractly and control the interfaces between the moving parts.

It&apos;s a good book.  If you are a programmer and you haven&apos;t read it, you probably should.</description>
            <link>http://www.perlgoddess.com/perlgoddess/2007/09/pragmatic-dont-be-dumb-program.html</link>
            <guid>http://www.perlgoddess.com/perlgoddess/2007/09/pragmatic-dont-be-dumb-program.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Geek Stuff</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">pragmatic programmer</category>
            
            <pubDate>Fri, 28 Sep 2007 15:41:28 -0800</pubDate>
        </item>
        
    </channel>
</rss>
