Hadoop and AWS and Python, Oh My!

| | Comments (0) | TrackBacks (0)
For an upcoming project at work, I needed to get a better idea of how the AWS services work together, and wanted to also see how the EC2 instances could be used for parallel processing.  Sadly, I do not love Java, and although I would use it if pressed, I wanted to see if I could find a pythony way to process some data using a hadoop setup.

So, based on this page, I created a mapper and reducer in python. The mapper looks through a file and spits out lines for each match it finds.  The reducer takes the stdout from that process (using hadoop streaming) and does the thinking, then spits out the result. The examples on that page are a fine place to start for this piece.  And you can time the process on your system here to get an idea of the speedup using the hadoop setup.

Next, I needed to get the files over to S3 so I can access them from my EC2 instance.  S3 instances are persistent, and transfers between S3 and EC2 are free, so I can run my processes an infinite number of times without incurring new costs for grabbing the files.  First, I created a bucket using the Python S3 tools, and then copied the files over using:

hadoop fs -put <file> s3://ID:SECRET@BUCKET/name_of_dir

There are, of course, other ways to move things to S3 buckets.  Pick one you like.

Now that all of my files are there for accessing, it's time to set up the hadoop instance.  

This part isn't included in toto anywhere, so I'll cover it here in detail.  This assumes you've done all of:
  • Set up yourself with an AWS account with EC2 and S3 access (including setting up a properly permissioned id_rsa-gsg-keypair as described here)
  • Created a bucket in S3 and populated it with files
  • Created a mapper.py and reducer.py and tested them with your files
  • Installed the hadoop tools on your local system and configured them as described here
Next, even though every piece of documentation says to do this:
bin/hadoop-ec2 run

That's a lie.  Try this instead:
bin/hadoop-ec2 launch-cluster <group_name> <number_of_slaves>

This will create a master hadoop node, and your slaves. For number_of_slaves you want to pick something <= 19 so that your total doesn't exceed 20 (unless you have special privileges).

Now we have to move our snazzy mapper and reducer to the master:

bin/hadoop-ec2-env.sh
scp $SSH_OPTS /path/to/mapper.py root@$MASTER_HOST:/home
scp $SSH_OPTS /path/to/reducer.py root@$MASTER_HOST:/home

'run' apparently used to then log you into your master, but since we're using launch-cluster, you'll need to do it yourself:

ssh $SSH_OPTS root@<your_new_master>

And there you are! On your new master. Awesome. Now let's move the data to our cluster (ID and SECRET are your AWS credentials, BUCKET is the bucket you created):
cd /usr/local/hadoop-<version>
bin/hadoop fs -mkdir files
bin/hadoop distcp s3://<ID>:<SECRET>@<BUCKET>/path/to/files files

Ok, great. Almost there. Now we need to run the thing:
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.18.0-streaming.jar -mapper mapper.py -file /home/mapper.py -reducer reducer.py -file /home/reducer.py -input files/* -output map-reduce.output
While it's running, you can check out the neat web report hadoop creates at http://<server_name>:50030.  Go ahead, check it out.  It's totally cool.

Hacking on Freebase

| | Comments (0) | TrackBacks (0)
Today, fighting a cold, I'm hacking in a totally unattractive way.  I'd love to redeem my hacking status by heading up to the Freebase Hack Day in a couple of weeks, but unfortunately that's the week I'll be visiting my corporate masters in Southern California.  Don't worry, I already sent in my absentee vote.  Democracy is still safe in our great nation.

For anyone else who has any ability to go spend a day, or even a few hours, at the Metaweb offices in San Francisco, I highly recommend going.  Freebase has always been a cool platform, but it's suffered somewhat from being overwhelming and difficult to approach.  The team is about to roll out Acre, a new application development platform, which makes it easy to create new applications and new ways to play with the content.  I hope to have time to play with Acre soon myself, because my brief introduction to it was really intriguing.  One of the things I love best about it is that it allows you to discover new things about the content you already know.  Connections between things, similarities (and lack thereof!).  Check out the video to get a better idea of how it works... 

The data in Freebase is growing continually, and is already far too big to really understand as a whole.  Creating windows into this data, or different ways to understand it, is one of those cases where it's almost more fun to create the solution than it is to come up with the problem.  So take this great opportunity to get yourself some interesting company, a t-shirt, free food, and time to play with some excellent toys.

Shameful Kindle Love

| | Comments (0) | TrackBacks (0)

Hi. My name is Kirsten, and I'm a gadgetaholic. My drug of choice generally comes from that shady company just over the hill from me in Cupertino. I have had 5 (or is it 6) iPods, not counting two iPhones. I've had umpteen mac laptops, a mini, a time machine... pretty much, they make it, I buy it. It's fair to say, then, that my design sense has a bent toward a certain aesthetic. I appreciate gadgets which try to magically know what I want. I'm willing to pay extra to avoid Microsoftian clumsiness in my day. So how, then, could I possibly like the Kindle?

The Kindle is a gadget unlike other 'e-readers'. When I asked to get one for my birthday last year, I wanted it because (erudite person that I am) I thought I would enjoy being able to read periodicals on this device, that it would increase the percentage of "grown-up" reading I did as a result - and that I wouldn't enjoy reading actual books on it at all. A second to redraw the page? I couldn't imagine relaxing with a book that had that kind of lag.

Then I got the Kindle, and I spent some time getting to know it. Yes, it's ugly and clumsy, in a warty orc kind of way. Tossing out the silly black tote-around cover helped a lot, but it stubbornly retained its "I'm a prototype" flung-together aesthetic. Other than the forward/back buttons, the interface is really pretty primitive. Everyone who picks it up accidentally changes the page forward or back... in fact, you can accidentally move forward in your book 20 pages just by tucking it under your arm to fish for something in your purse. The keyboard is clunky and not very responsive, and nobody ever gets the scroll wheel until you point it out to them.

But I confess I love the little guy. Once you figure out what that little scrolly wheel can do, it's pretty keen, and the shiny indicator is really cute. The ability to get books wherever you are, without tethering the Kindle (and you) to your computer, is amazingly useful.  While I love reading pretty much everywhere, books tend to present you with annoying ergonomic challenges. Holding the book open to the right page with one hand is something we've all mastered, and we've all found little tricks to help us with that part (edge of the dinner plate, anyone?). Turning the page, however, always requires some amount of negotiation with the book. Whatever else you're trying to do while you read, every minute or so you need to recruit your other hand to help with the turning of the page, and that's really a lot more annoying than you realize. I only know this now because the Kindle removes that annoyance. I settle into a comfortable position for reading and turning the page is a no-op (other than the delay, which turns out to be not that big a deal).

As far as reading periodicals and being a well-informed intellectual, I'm afraid that I haven't actually become a more erudite person. While the magic updates are great, the periodicals themselves are more difficult to scan in Kindle form than they are in paper-printed form. I can't glance at the paper and know all of the stuff from the front page. I don't want to plod through three different pages of headlines to know what's going on in the world, particularly not these days. 10 seconds is pretty much all I can stand to devote to absorbing our current situation before I'm ready to dive deeper or head to greener subjects.

So what do I actually *read* on the Kindle? Books! I love reading books on the Kindle. I can download the first couple of chapters of a book someone suggests for free and decide if I want to read the rest. I can grab free books from the Gutenberg project and read *them* (sadly, so far this has fallen into the category of "things I haven't really done yet" even though I did get Sense and Sensibility on my Kindle for reading). I particularly love that I can be reading the 7th book in a series, get to the end and then summon the next one immediately for me to read. I can read outside in full sunlight without getting a migraine from the glare of bright-white paperback pages. When I'm reading late at night, and my eyes get droopy, I can make the text bigger and get through a couple more chapters before I fall asleep. While I also have some textbooks and non-fiction books on there, the majority of my Kindle time is spent reading fluffy novels. 

Still, I'm not completely blinded by my love for this little guy. I can't borrow books on the Kindle and then return them. I'd like to be able to do that - I don't actually *need* to be able to access books I've read forever and ever once I've read them, with very few exceptions. A subscription service would be swell, sure, but I'd really just prefer that Amazon adopt the itunes rental model and rent me a book for 2 weeks for 20% of the price of the book. Or let me trade my Kindle books with other people. But even with these drawbacks, the Kindle is one of my favorite gadgets.

Projecting and Reacting

| | Comments (0) | TrackBacks (0)
The human condition is such that it's very difficult for us to avoid projecting our emotions on other people, using our stress to paint their words into something that amplifies what we're feeling.  It's an unfair tendency, and extremely difficult to avoid.  The stronger the emotion, the more powerful the projection, and the more likely we are to put ourselves (and those other people) into difficult positions.

For the last several months, I've been working incredibly hard on a project.  The project has had its ups and downs, and recently had a fairly serious crisis.  I was indirectly responsible for this crisis, and my boss spent a lot of time talking to me about how it had affected our credibility, and what we should do going forward.  While he was trying to encourage me to take a more sane stance going forward - make a reasonable schedule and keep it, I was feeling guilty about my culpability in the problem, and so I translated his words as "You're in the hole and you have to dig yourself out!"  So I made an impossible schedule (and hit my targets!) but was totally stressed, which distressed him greatly.  We finally talked about it and I realized that I had been projecting my fears/stress/guilt on him - a habit I try to avoid, but one which is so easy to slide into.  In this case, our discussion helped a great deal.  The schedule is well in hand, the customers are thrilled, but more importantly I am once again certain that my position is secure and I can take the time to do my job well.

It's not just engineery girls who find themselves in this position, though.  McCain's supporters, right now, are angry and afraid - and the McCain campaign has allowed many of those supporters to rev themselves into a frenzy.  I'll note that McCain has never called Obama a terrorist, but these frightened supporters are projecting their fear/anger onto his words and blowing them way out of proportion.  I'm pleased to hear that McCain has started talking those people down.  We're already in a situation where people are terrified about the economy and our country - situations less dire than this have caused violent outbreaks in the past.  Adding terrorist fear to this climate, and attaching that to your opponent is not just bad manners - it's dangerous and stupid. Unfortunately, when the projection is happening on such a massive scale, it's much harder to sit down and clarify your position.  I think McCain has started to see this tactic spinning out of control, and I hope that he's strong enough to rein in his supporters.   

Graduating to Grownup Math

| | Comments (0) | TrackBacks (0)
I've now spent almost a month working on my maths with Aleks.  We've gotten along famously, and I've gotten a handle on most of the things one might need in order to slide into harder math with relative ease.  Congratulations, me.  I've graduated!

I have a few branches I can choose from in order to further myself along the evolutionary path to "someone who can play with robots" and also "someone who can fully understand casual lunchtime conversation at work," not to mention "someone who can solve impossible problems in 42 seconds." 

I think my next steps should be Linear Algebra and The Theory of Computability.  After that I can look again at the algorithms and machine learning books, but for now I think this is the most obvious next step.  So, how to go about this?  I have at my disposal many people who know these things forwards and backwards, but I still need some guidance to grasp the concepts so I don't drive them insane and inadvertently cause my premature death.  I could just read the textbooks but history says I won't.

After some research, I've decided to take advantage of the MIT OpenCourseWare courses, which seem to have been put out there for people like me to slurp up difficult concepts.  At least for this, um, "semester."  I will take their Linear Algebra class (with super cool java applets to play with!) as well as the Theory of Computation.   I think I'll also sneak in some Street Fighting Mathematics, because that course just looks fun. I'll keep myself honest by journaling my progress and keeping my mentor/clone apprised of how I'm doing.  And of course you, my imaginary friends.

In my work life, I'm spending this week attempting the impossible - take some code from someone else, and make it work and sing with a tight deadline.  So far it's going well.  And this morning I made it through most of a Bikram class.  I must be getting back to something nearing normal.

You're either with us...

| | Comments (0) | TrackBacks (0)
Ah, election season. The honeycrisps are back in the produce section, the air has an unfriendly chill, and our level of discourse has degenerated to the level of grade-school boys.  Why is it that people who are so brilliant in every other area of their lives have to stoop to ad hominem attacks and meaningless digs whenever the national election rolls around?

I mean, look.  I'm no fan of Palin.  By all accounts, she is an extremely effective politician who should probably be considered a great candidate.  Is she a nice person?  Um, it doesn't seem like she is.  But aiming our slingshots at the low-hanging fruit (a pregnant daughter of an abstinence-only candidate) sullies us, not her.  Teenagers have sex, and they get pregnant.  There are more effective and less effective sex education methods, but we're not really discussing that.  The general feeling about her daughter's situation is more of a locker room "heh, heh, she had sex with a jock and she got pregnant!"  Many of the things Palin has said have indeed been somewhat laughable, but let's face it - we do have a history, as a nation, of electing Republicans with pretty but dumb running mates - and I have no illusions that Palin is stupid - so we have to do better than just to jump on the easy lobs they hit over the net at us, lest we cheapen the entire conversation.  It sometimes feels like the McCain camp must be feeding us silly Palin trivia just so that we can look ridiculous in our response.  

One of the things that made me most irritated during the *last* presidential election was the "You're either with us or against us" fear mongering that the republicans tended to throw out whenever someone questioned our activities in the middle east.  But what I'm hearing now from many Obama supporters feels just about as well thought out.  Over on Salon, there's an "Open letter to undecided voters" by someone who says they'll try to be neutral. Um, no.  Not neutral.  It's fine to have an opinion - but if you claim to be neutral when you aren't, then you're just as bad as FOX news. Or NPR.

The most recent economic events have been an excellent opportunity for us to point out that McCain was involved in the deregulation bill which almost certainly brought us to this crossroads.  For those of us not wanting to vote for the "Bridge to No Choice", simply telling pro-choice republicans that McCain thinks Roe V. Wade is an extremely effective way to help them realize how much his views have changed over the last few years.  Sticking with the above the belt facts doesn't empty our toolbox - it just leaves us with the ones we can use with some amount of dignity.

I'm going to do my part to call a spade a spade, and not try to fool people into agreeing with me through underhanded means.  If more of us do that, perhaps we can get through this election without feeling slimy.  And maybe... just maybe, if we don't make the blatant assumption that the people we're talking to are idiots, they'll listen to the meat of what we're saying.  And we might not end up with the guy who irritated us least... last.

In other news, since I'm sure you're all dying to know how my maths are coming... I spent last night wandering through trigonometric identities of all types.  And proofs.  Proofs are fun.

Mathing up for robotics

| | Comments (0) | TrackBacks (0)
Finally, I'm feeling human.  Between slamming my endocrine system into some kind of bizarre state and weaning off of Wellbutrin, I spent the last two weeks essentially in a supreme fog.  I think I'm emerging from it now, but boy do I ever dislike having such a huge lack of energy. Bleh.

I love working at AMI.  One of my favorite pastimes when in the office is hanging out with the Robotics team - I'm extremely fond of all of the team members and am fascinated by the topic.  Long ago, as a freshman at UCSC, I had thought I might do something mathy or sciency, but the super bizarre frizzy-haired lunatics who teach the intro courses in those divisions at Uncle Charlie's Summer Camp were enough to dissuade me forever.  Plus I made the horrible mistake one makes when taking a class in Linear Algebra - oh, this is easy... a couple of weeks pass... skip a class or three to write papers for your other classes and then come back, and... WHOA, what's that?  So I chose Philosophy.  Essentially Math for Dummies.  

So here I am, surrounded by PhDs of various hard sciences, who do amazing things with computers and robots, and wishing I could play with them[1].  Also wishing I could just go to lunch with these groovy folk and have some idea what they're talking about, although I somehow manage to follow along a lot of the time.  I had thought that my lack of math would eliminate me from the conversation, but it turns out I have a knack for the abstract mathematical theories involved in making robots tie their shoes.  And my clone insists that I understand the math just fine, I just need to work on understanding how the numbers move around.

I asked my boss (MathMan) what math topics I should learn in order to keep up in conversations around here, and he suggested instead that I read up on (or take classes in) Algorithms and Theory of Computability.  He assured me I didn't really need any math to get through those, and that math wasn't really necessary to get along around here.  So I got some books on those topics.  Turns out that yeah, you do need some math to get through those.  Apparently when you are the supreme high commander of Math Theory, you don't realize that there are actually some sentient beings who aren't cozy with vectors and matrices.  I also found myself fascinated by the NetFlix prize and machine learning, and so I picked up a couple of those books and discovered, again, yeah, I need some math.

But how does someone whose calendar is all full of important things like yoga classes, martial arts, mothering and actual work fit in learning math?  I mean, big math.  Calculus and linear algebra are a bare minimum to even get through the intro chapters in these books - but I don't want to spend hundreds of hours listening to someone spoon-feed me the stuff.  I want the matrix version of "I know Linear Algebra!"  And here's where ALEKS comes in - it's a website which will run you through various math topics, and it really does an excellent job of teaching.  It's excellent as enrichment for kids, and the parents get groovy reports and pie charts and everything.  And if, like me, you enjoy the game of filling up your various pie chart pieces - and the math is not terribly alien to you - you can learn (or relearn) quite a bit in a reasonably short amount of time.  I took AP Calculus in high school (um, that was a while ago) so I started with "AP Calculus Review".  Started at 39%, in 2 weeks worked my way up to 97% and so I switched to "College Algebra with Trigonometry" - started at 42% a week ago (the overlap isn't nearly as large as one might think) and now I'm up to 66%.


iChat Image(1592128026).jpeg
Now, Aleks doesn't go high enough for me - it stops at College Algebra with Trig, so I'm going to have to tackle real Calculus and Linear Algebra on my own.  But starting from "Just got through all of these topics" is going to make that a lot easier.  I'm still poking along with it (the current topics are much chewier than the earlier ones), but I've also started working on my Linear Algebra.  I bought a textbook,  but I also discovered an online text which seems more my speed.  Seems that Linear Algebra texts are the texts that math professors love to hate, and several of those professors have just written their own.  For Calculus I'm going to wait until I've slogged through all of my ALEKS pieces, and I have a nice little book.  And a DVD tutorial set with a helpful professor.

Once I'm done with those things I should be able to tackle my algorithms, machine learning, pathing, and recalcitrant computer books.  And then the robotics team and my boss can arm wrestle and figure out what stuff I can work on.

[1]And seriously, I'm just a little tired of web applications.  If nothing else, robots mean you never have to worry about Firefox's Javascript implementation.  
Last week after returning from burning man, I rejoined the work world from my standard perch in my woven rope hammock chair on the porch. The weather was perfect, warm and breezy, and so I was loathe to pay any attention when a hole appeared in the hammock. I tied it off without much thought, and set to ordering a new hammock to replace it, stubbornly staying in the chair typing on my computer while suspended three feet above the concrete. About 15 minutes later, without any fanfare, the hammock chair deposited my hind end unceremoniously on the concrete. Ow. I contemplated my position for a moment, which was funny even at the time - my feet were still up at the level of the hammock, I was tangled in rope, and my computer was still perched safely on my lap.  In situations like this, if someone else is around one tends to wish they weren't, because there is a lot of pride to be lost in these situations... However, there wasn't anyone around, and I sorely wished there were, because extricating myself from my webby prison was a puzzle I wasn't up to after having had my brains jarred.  I sat for a moment, then found a safe way to get myself, my computer, and my pride back up out of the chair, hmphed, and then went to sit inside.

A couple of days later I was whining at Kjerstin that I felt like I was concussed, although it seemed remarkably silly to feel that way.  I couldn't sleep, I was foggy and fuzzy, but I was sure that couldn't be the problem because my butt is not the same as my head.  And yet, jarring one's noggin doesn't always require direct contact... also, jarring your spine can have unexpected consequences.  But I was too foggy to realize this, and after several more nights without any reasonable amount of sleep, I was even dimmer.  This week I was doing really poorly - lost several pounds, still couldn't sleep, even fuzzier and dizzy, starting to border on truly stupid, with some fabulous tinnitis, heart palpitations, and a racing pulse thrown in for good measure.  The conclusion I drew?  That my Wellbutrin must be causing some 18-months-later side effects (this isn't as unreasonable as it sounds - it's happened before)

So after some cajoling from my concerned friends, I made an appointment to see my wonderful doctor, thinking that I was probably either suffering from Wellbutrin lashback or possibly adrenal or thyroid issues (or perhaps the spine jarring the week before? Nah...) Since I was on a roll, I decided that I should go see my chiropractor as well, since I had been sitting fairly still for over a week and my hips tend to complain when I do that.  It might have occurred to me to consider seeing her last week, after slamming my spine into cold concrete, but no, it did not.  But no matter, the right thing happened, I went to see my chiropractor. 

Dr. Taylor measured the readings on my spine, and noted with some surprise that I'd misaligned my spine somewhat severely, particularly in areas affecting (let's see)... the adrenal glands, the thyroid, and the parasympathetic nervous system (hello, lack of appetite). Once I explained to her about my fall - and subsequent symptoms - she said she was sure the two were related, adjusted me, and sent me on my way.  After being adjusted I was still exhausted, but the undercurrent of anxious desperation had dimmed a lot.  I did see my doctor, and we ended up deciding to test for a few other things, but the general gist is that the likeliest answer is the simplest one - I messed up my nervous system and it made me pay.

So, as always, I'm grateful to my friends for being my external brain pack.  And perhaps next time I'll be smart enough, even in my dimness, to realize that yes, in fact, the simplest explanation is almost always the answer.  Or not.  It's a good thing I have such helpful friends.


Welcome to the Polymath Palace!

| | Comments (0) | TrackBacks (0)
For all of you who have been beamed over to here from the PerlGoddess website, a little explanation is probably in order. Before I started working at my current company, building applications involving graph databases and freebase, I used to do all of my coding in Perl. Alas, this is no longer the case. In fact, since I started here I believe the only thing I've done with my Perl skills is some minor hackery on our Socialtext installation. And since I'm an OCD person, I'm afraid I'm not able to convince myself that it's ok to post about anything non-perl related on a PerlGoddess website. And so my blog has sat unloved and unposted upon for months, due to this somewhat bizarre neurosis.

When deciding what to name my new site, I tried hard to think of something that wouldn't paint me into a corner. Domestigirl was nice (until someone squatted on it), but kind of fenced me into cooking and knitting and the like, and it suffered a similar fate, although not as abruptly. PerlGoddess never really made it into "regular blogging" territory for the reasons mentioned above. The topics I might be motivated to post about are wide-ranging indeed - from martial arts to Adobe Flex to semantic web ideas to philosophy to singing (and let's don't forget cooking)... anyhow, you get the drift. I've got a lot going on and I'm frequently switching hobbies.

So, welcome to the Palace of Princess Polymath - blogging by a flibbertijibit (and sometimes, her clone). I promise that I'll try to use real words in describing whatever's flitting through my brain, and hope that the posts end up being amusing to someone (at least myself!) Coming soon, in no particular order:

  1. Ode to a Kindle
  2. Singing samples so I can join a band
  3. A review of the fabulous math site Aleks
  4. A discussion of maths large and small
  5. Some commentary on a scrabble game or New York Times crossword
... or perhaps something completely different. One just never knows. Anyhow, welcome.

What's old is new again...

| | Comments (0) | TrackBacks (0)

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 New Earth, 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.

Synedra's tweets

    www.flickr.com
    This is a Flickr badge showing public photos and videos from synedra. Make your own badge here.

    Find recent content on the main index or look in the archives to find all content.