Tag-Archive for » ruby «

Wednesday, December 02nd, 2009 | Author: renaebair

I think it’s fairly common for programmers to build applications to meet a personal need. When I found out I was pregnant with our third child this past May I didn’t intend to spend my pregnancy writing a Sinatra application for naming babies, but I’ve had so much fun and have really grown as a programmer by doing so.

At the beginning of the pregnancy I was using a google spreadsheet to create a list of name ideas for the baby that friends and family could add suggestions to. You can view it here. It worked ok for a couple of weeks until I realized it would be nice if people could add comments and share their opinions about each name. I also thought it would be better if people could rate each name so I could see the general popularity of the individual names. I could not find an application that already offered this service in a simple, straightforward way.

For anyone that’s ever had the experience of expecting a baby, they’ve gone through the process of trying to come up with names, receiving lots input from friends and family, and probably felt overwhelmed at trying to keep track of all the great (and not so great) ideas. Thus, I figured this must be a solved problem, yet, I couldn’t find a nice, simple solution for it. Alas, NamingTogether.com was born!

From the start I wanted this to be incredibly simple; the expectant mother or couple goes through a very minimal signup process; with just a few graces of your fingers across the keyboard you’re ready to go with your own name list and a unique link to provide to anyone that you want input from. I wanted the user’s friends and family to be able to add name ideas, leave comments, and rate names without having to login to the site or go through any nonsense.

Simple interface for adding and rating names

Simple interface for adding and rating names

I decided to use Sinatra for this application. Previously, I had only coded a few small projects in Ruby and had not learned Rails or Sinatra yet. I figured that since the application was going to be rather small and succinct, Sinatra would be a good fit. As Adam and I delved deeper into the development process we discovered that using Rails would have made our lives a lot easier, but we stuck with Sinatra nonetheless. We’ll be working on a really thorough post about the development process very soon, and we’ll cover the challenges we faced using Sinatra on this project.

I spent the first several weeks learning Sinatra and DataMapper and writing some very basic functionality, and when my demands for the application far outgrew my knowledge-base I turned to Adam for assistance. He really helped to pull the application together. He hadn’t played with Sinatra before either, so he got to learn something new by working on Naming Together.

Being married to a programmer certainly has its benefits; after our two kids are put to bed in the evening, we get to sit down together on the couch with our laptops and hack away at things together. Adam has always been a great teacher, so the craftsman and apprentice relationship works out really well for us. I have great memories of late night programming sessions together during the last several months.

This experience has enlightened me on the process of working with other people on a project, creating tickets, closing tickets, and holding myself accountable to get things done when I commit to them. I also have a more thorough understanding of git, and even got to use Heroku for this project.  I would not have gained this level of understanding in Ruby and Sinatra without working on an application that truly benefited me in some way.

As a stay at home mom to two young children, at the end of the day, I often have very little energy and motivation to hack away at random projects or to push myself to learn something new. And since I don’t program professionally, I don’t get that working experience that really helps new programmers to become great programmers. Working on this application was what pushed me to keep learning new things and to become a better programmer. I was so excited for the kids to fall asleep each night just so I could implement some new functionality, or look at Adam’s commits from the night before to make sure I understood what he had implemented.

Choosing a name for the application was also a pretty fun process. I had a textmate doc filled with random words, phrases or ideas that came to me throughout the process of writing this application. One day as I was staring blankly at the document, feeling rather hopeless about coming up with the perfect name, I asked myself for the hundredth time, “What is this application really about, at its core?” All of a sudden, the name just dawned on me as I answered, “It’s about naming our babies, together.”

After months of evening coding sessions, the application is now live and ready to be hammered on. I’ve got some open issues that we’re going to be working on soon, like pagination, options for sorting names, option for parents to veto names altogether, etc. I would love feedback about the application, as this is going to be something that I’m going to maintain and support, even after a name is decided for our own baby bundle, due this December.

Sunday, June 21st, 2009 | Author: renaebair

When Casey Rosenthal, organizer of the Maine Ruby User Group and hacker extraordinaire, asked me to recreate all of Matt Aimonetti’s slides for a CouchDB presentation, I was excited for the challenge. I had a lot of fun working with all 79 slides and replacing each racy photo with fps/frag-star related pictures. I think the frag star theme ended up working well throughout the whole presentation!

Casey did a great presentation on Couch DB with the slides at the RUG! Here are the slides in their entirety, enjoy!

View on Slideshare:

Or download the pdf:

Perform Like a frAg Star Slides

Monday, April 27th, 2009 | Author: renaebair

Well I finally have something to write about. I guess it takes some porn and a solid rift in the Ruby/Rails community to jostle me out of my mommy bubble. I’ve spent the last two days reading about Matt Aimonetti’s talk at GoGaRuCo and the reactions from Ruby developers and drama queens alike and I must say I’m underwhelmed at their reactions. It’s a good mix of the typical “Oh my god I’m a girl and I’m so offended, like, didn’t feminism cure us of this?” and, “Man, I’m a guy and that shit ain’t cool. I’m offended.”

I want to whine about two terms that are trolling around: “offended” and “professional”.

First of all, I have a hard time believing any man in that audience was offended at the sight of hot chicks. They might have been caught off guard, bemused, or confused at the boldness of the speaker, but they were not offended, not even chivalrously. And I’m sure most people there had a good chuckle at Matt’s attempt at humour. 

Was it “professional?” “Professional” is one of those words that is thrown around by people in big empty suits that are afraid of lawyers, and by people that want to be wearing big empty suits and wish they were in a position to fear lawyers.

When you pack up for a weekend at a fringy Ruby event you expect to be getting comfy with a raw, fringy crowd. You expect to hack in hotel lobbies, play Werewolf in the hallways, drink lots of scotch and Bawls, check to see if there are any hot dev chicks around and eat some tasty treats.

You don’t go to a Ruby conference wearing a big black suit, carrying a briefcase. You don’t go expecting to be bored to tears by a talk on J2EE. You don’t meet for drinks after presentations with potential business partners. No. No. No. You fucking hack, talk shit, play games and eat.

So big fucking deal if Matt Aimonetti showed you some chicks in thongs to make a somewhat amusing point. YES, Matt’s slides gave me major douche chills. It was odd and I didn’t quite like it. But I was not offended, nor did I care how professional/unprofessional it was. 

Also, I’m annoyed with all this banter about how Ruby & Rails will never be taken seriously if people put porn in their presentations. If anyone cared whether or not Rails would be taken seriously we would all be boycotting RailsConf Las Vegas. Anyone who goes to that sellout of a conference has no right reaming on Aimonetti for his porn. At least in his case, “the people voted for it.” 

I definitely think Matt was misguided. Where I think he went wrong was in assuming that the audience would get something valuable out of his talk after he distracted them with hot bodies. Generally hot chicks and processing data on an intellectual level don’t really go together that well.

Using hot chicks to grab the attention of your audience is just elementary. It’s the cheap and easy way to draw an analogy and get a laugh. In this case, I can see the correlation between the images and the message he was trying to deliver, but he could have been more clever by being less transparent. The whole thing seems more like a risky high school presentation (teehee!) than a thoughtful Ruby presentation.

Besides, porn is something we watch when we are alone; when we can convince ourselves that we’re normal, as we’re watching hot, wet, slippery bodies bump each other. Porn isn’t something we like to share with other people, strangers notably. 

But seriously, porn just doesn’t belong in a Ruby presentation. A Java presentation, maybe. They need something to invigorate and distract them from their tired reality. But Rubyists are already pretty damn happy people. We don’t need our presenter to try and make us feel good. Matz already has us covered. 

Matt might have had a better chance at wowing his audience and drawing them in had he used gaming references for flavor instead of bare skin. Know your audience, Matt! Hackers are geeks! Maybe then you’d have earned some geek cred, instead of creep cred. Ouch.

I’ve done a little reworking of his slides to show you how his presentation could have gone better:

 

Frag Star

 

I don’t think the Ruby community needs to submit to supporting PC rhetoric. Leave that to folks that wear the suits. Matt was misguided and a bit trigger happy, but what’s really wrong with his slides is his inability to connect with developers in a meaningful and fun way. We don’t like to share sexual experiences with our peers, especially on large projector screens. We like code and video games, maybe even a good ol’ game of Fluxx. It’s not a matter of offensiveness or professionalism, it comes down to not being a douche bag.

Thursday, March 19th, 2009 | Author: renaebair

All of this focus on a Rails Maturity Model has me wondering, what about Rails or Ruby Conservation? How do we take what has been so good about this language that we are all so passionate about and ensure that it doesn’t get side-swiped by the brooding enterprise transition? 

I went to my first Ruby User Group this evening and I’m still floating. I left thinking, “this is what the Ruby community is all about!” I feel like I’m finally getting it. This little community rocks! I get why Rubyists were outraged over RailsConf moving to Las Vegas. I get why Zed was so fucking pissed off in his ghetto rant. I get why Giles calls out Chad Fowler. I never really understood the understated awesomeness of the Ruby/Rails community until I actually sat at a user group and then had drinks with fellow Rubyists.

I cannot even begin to imagine what it would be like to sit in a .NET or a Java User Group. Do they even have those? I can picture it, though it pains me: lots of men in business suits, wielding expensive pens and dumb heavy Dell laptops. They talk in loud, booming voices, each trying to exert his own self-importance. They pretend to be interested as they listen some verbose mucky muck presentation, then they sit around in the office talking about their development environments and their enterprise software.

Tonight I sat in a room for 2 hours and I watched, I learned, I laughed. I had more fun than I’ve had in a long time. I watched an awesome guy wearings jeans and a t-shirt do a very informed presentation on state machines; he was even able to incorporate Batman into his slides! Then I saw a web designer give a whimsically animated presentation on Proce55or. And finally, a soft-spoken math guy showed us benchmark testing he wrote to compare Ruby 1.8 and 1.9.  Ruby itself affords its community a level of intimate camaraderie that many languages cannot offer. It’s natural to get excited about and attached to a language that is actually fun to use. It’s worth promoting, it’s worth preserving.

When I read that Rails was moving to Vegas it didn’t sit right with me. And I’m not even a legitimate Rails dev. Despite the organizer’s outright denial, it certainly is an omen that Rails is moving to the enterprise scene, and apparently they have no problem pairing that transition with “steaks and strippers.” And yes, realistically Ruby/Rails enterprise should make most devs happy because that ultimately means more job opportunities and probably higher salaries.

But, it’s bittersweet, because I have to wonder what the community will be like 5 years from now. Will it be this tight-knit and this organic? Will a total newb like myself receive tons of help and direction from people that I’ve never met, just because I share a passion for the same language? Will there be as much passion? Will there still be people working hard to offer fringe conferences like Ruby DCamp, and RubyFringe as alternatives to the Rails whore house that RailsConf is becoming?

It used to feel as though Ruby and Rails was led by the open community that it spawned, but now it seems that the future of Rails and Ruby lies in the hands of a scant few that appear to be empty suits.  I’m not naive enough to sit here and claim that Ruby shouldn’t go enterprise. It happens to all intrinsically good languages, in due time.

Ruby and Rails enterprising doesn’t have to be ghetto. RMM, for example is something that I think helps to setup a space for Rails in the enterprise world but at the same time declares it sacred. RMM will help improve the Ruby experience on the client side of things; anyone who has seen the horrific crimes that are committed against clients might agree that RMM might actually be a good idea. It allows a client to hold a few cards in their hand, and a balance of power isn’t a bad thing in a business transaction.

While there are people out there like Obie working to create a good space for Rails enterprise, we still need more people working to preserve the open, organic community space that attracted and kept so many of us here in the first place. 

So, thank you to the people that are working so hard to preserve the “niceness” of Ruby and Rails; like the guys that organize the user groups, plan the small local events, offer help to people on forums, contribute to open-source projects, and to people like Mike Gunderloy that invited me (despite my newbness) to work on his project in order for me to get some experience. And a big thank you to companies like Intridea and other small shops that let their Ruby developers, like my husband, work from their home offices or coffee shops. It’s all about being happy and doing things the right way. That’s what I love about Ruby, that’s what I love about Rails, and hell no I won’t be going to Vegas to witness the perversion of something beautiful.

Sunday, January 11th, 2009 | Author: renaebair

Before I became a parent I had a wonderful life that was all about me. I sought out fun and oh, the fun I had! I played board games, LOTS of video games, I drank beverages that actually had alcohol content, I danced around pagan fires in the dead of winter, and I had a habit of seeing live music. I read books! I planted flower gardens! I organized events! I had friends and we read each other’s tarot cards, we made herbal teas, and we traveled to fun places! I didn’t have a blog, I didn’t email much, and I certainly would not have had a use for Twitter, had it been around back then.

See, I even had time to color my hair and wear jewelry!

See, I even had time to color my hair and wear jewelry!

But that’s not my life anymore. Now I wake up early each day and I get my kids dressed. I try to feed them balanced meals throughout the day; we play with peg boards and make puzzles, we read stories, we dance in circles as we sing nursery rhymes, we paint, we color, we cook, we drive places, we do housework! It’s a much different life than I had before, but it’s an awesome life that I wouldn’t change.  I cherish every moment with my kids. In fact, I often get dreary eyed as I think about how empty my lap will feel when there are no kids to fill it, and how empty my home will be when there are no laughing voices filling its space. My friend Bryan shared something with me that his grampa told him before he passed away years ago: “I’d rather be up all night long hearing the voices of children than sitting alone in an empty, clean home.” I share that philosophy completely. 

Being a mommy is a crazy kind of fun!

Being a mommy is a crazy kind of fun!

I am trying to integrate some of my past hobbies into my new “adult” life as I search for balance as a mother and a regular humanoid. But what I keep finding is a lack of commonality between myself and others around me. I’ll find a super cool geek that doesn’t have kids, or find someone that has kids but the similarities end there. 

Of course I have grown in many ways since those days have come and gone. I’m not sure I’d get as much pleasure now from spending 100 hours of my time leveling up an Amazon in Diablo II. But there are more simple and similar pleasures like playing geeky board games and learning Ruby. Adam and I like to play Munchkin, Carcassonne, and Settlers of Catan pretty regularly. But those games are tough to play without more players. Our evenings together usually consist of programming on the couch together, listening to DJ Tiesto, or sitting out on the back porch on summer nights staring up at the stars above us, dreaming about life. 

Renae rocking out at Catan

Renae rocking out at Catan

We used to have a couple of friends with pretty common interests that we hung out with regularly. But now that I’m a parent and we’re in the middle of Maine, I can’t seem to find many friends in our area that enjoy gaming and geeking out. There’s more to me than coding and gaming, of course; I love watching independent films, Japanese films, anime, and laughing at the horrible videos on break.com. I like listening to different types of music. I care about sustainability and where my food and products come from. And I love coffee! Tell that to anyone in Maine and you’ll get this response “OMG, I LOVE coffee too!!! I go to Dunkin Donuts three times a day!”; to which I respond, “Ahhh….”; next topic. :) Being a pagan means I’m pretty drawn to the earth and her cycles, and I love celebrating the seasons and the natural rhythms of the earth. 

So, it’s pretty hard for me to find friends with common interests. Which is why most of my free time is spent in my dining room learning Ruby after the kids are in bed or reading Twitter! Adam asked me last week, “Why are you so addicted to Twitter?” Well, as a stay at home mommy without many local friends, it’s my only source of social interaction with people that are professionals, geeks, and parents. Today, I’ve been able to read about @MikeG1 griping about date parsing, @gilesgoatboy wishing he had more video games to play, and saw a picture of @SummerTulip’s piggie pancakes she made for her son. It’s this great eclectic mix of humans that I love to spy on because they are each like myself in some small way. It makes me feel connected to something that is like myself. The sum of twitter’s parts add up to a nice online friend. It sounds sad, but it can be hard to connect to anything in Auburn, Maine without getting the_hiv. :)

 

I know that my Twitter addiction needs to end someday. I spy an intervention sooner or later. But for now I’ll keep enjoying reading about the experiences of my twitter-folk friends and sharing my experiences with them. Twitter fills a niche in my life right now, and I’m thankful to be able to draw on a hand-selected community for wisdom, giggles, and inspiration!

Monday, December 08th, 2008 | Author: renaebair

Here’s the new hotness! Time Track now uses a single data file so it won’t junk up your hard drive with lots of dirty files on each run. It stores data for multiple projects including their time logs and total run times in a single file. I even got to use a hash for the very first time!

Adam helped me a lot with this refactoring because, honestly, I still suck and he’s the shit at refactoring, considering that’s what he does all day long (all night long too)! If you try to run the code make sure to enter the same project name on each iteration or you’ll just be adding times to new projects. The next step is to give the user an option to select from a project that’s already been created, but for now in order to get that effect you just have to type in the same project name each time. :)

Category: Uncategorized  | Tags: , , , ,  | 2 Comments
Sunday, November 30th, 2008 | Author: renaebair

 

Shack for my ugly codez

Shack for my ugly codez

After a chaotic holiday weekend and chaos with sugar-injected children, I finally found a free hour this weekend to create a nice, cozy class for the time_track app! Now it just needs a big refactor before I can start implementing new features and functionality. So far I think I’ve covered most of the Ruby basics other than blocks and procs but I’m not sure I’ll need those for this little program right now.

I finished Chris Pine’s “Learn to Program” book this evening. I’m looking forward to spending some time re-reading Why’s Poignant Guide To Ruby; I think I’ll find some nice gems (hahahaha) in there now that I have some more foundational knowledge of programming under my belt. 

For now here’s the new codez:

Thursday, November 27th, 2008 | Author: renaebair

OMG wow I need to learn how to use classes! I’ve been working on the time_track app and it’s getting so out of hand. I took the advice of Ben regarding the time formatting (see advice here) and I’ve also added reading/writing to a yaml file. At this point it’s incredibly bloated and needs some work, so that is the next step.

So far the application prompts the user to hit “enter” to being time tracking and then “enter” again to stop time tracking. When the user stops the tracking the two times are subtracted and the resulting time is stored in a yaml file. In addition, all of the times in that yaml file are added together and the running total is stored in another yaml file.

Yes, this is still a very simple little application. But I have delusions of grandeur for this app, so let me tell you all about its distant future! I want to create an open-source time tracking application that requires as little user input/maintenance as possible and has built-in fault systems to detect possible user error (in case the user leaves and forgets to stop the timer). I believe this would be incredibly useful to programmers that do a lot of client work and whose clients demand very accurate time logs.

Here is how it would run: When you open the application it sits unobtrusively in your menu bar (think Caffiene). When you click its icon with your mouse of choice (I prefer the Razer Lachesis; great for coding and gaming fun) it starts time tracking. You go about your work, writing beautiful code. When you want to stop tracking time you simply click the icon again in your menu bar. The total time is stored. You can click it again to start tracking time when you are ready to work some more.

The app will have a nice functionality that detects when there hasn’t been key strokes or mouse movement over a certain period of time and it will prompt the user for input to determine if they are still there. If it gets no response it will create a ticker at that very point in time (but won’t stop tracking) so that when the user returns (if they were ever really away) they can choose to look back and find out where they should have stopped the timer.

The app will of course calculate the time logged for any date range so that a programmer can keep very accurate time logs of his work on projects. There will also be a quick way to change between time tracking for different clients in case you end up working on multiple client projects a day. I’m very excited about it and I know it’s going to take a long time to write and will probably be quite impossible. But the delusion is there and I’m going to follow it! :)

So here’s the gross code I’ve written thus far and my next step will be to compact this all into a nifty little class:

Category: Uncategorized  | Tags: , , , , ,  | One Comment
Tuesday, November 25th, 2008 | Author: renaebair

I wrote my first little app in Ruby tonight. Well, that’s a lie. I’ve been writing cute little inapplicable apps for the last month but they’ve just been exercises out of Chris Pine’s “Learn to Program” book. Tonight I actually decided to write a very basic time tracking app armed only with the knowledge I’ve cultivated thus far and it came out swell. I know it’s quite basic and lame, so please laugh. I am laughing at it right now. But I’m learning as quickly as I can with only 2 hours of time a night available for learning Ruby. 

I did end up having to use a hack to display my time (from seconds) to a pretty-formatted date/time string. But I hope to come back to this problem later and come up with my own solution. It doesn’t store the data to a file yet but I’ll be adding that tomorrow evening. I know it will only take 5 minutes but the kids do wake up around 5am and I’d sure like to sleep now :)

Here’s the nuby code:

Category: Uncategorized  | Tags: , , , , , ,  | 3 Comments
Monday, November 24th, 2008 | Author: renaebair

 

Being unstable and bitchy is all part of my mystique

Being unstable and bitchy is all part of my mystique

I’ve been a rubyist for three weeks now and it’s my turn to rant.

Only a few years ago it was “fringy” and incredibly cool to be a rubyist. There was an underground camaraderie/elitism between fellow Ruby pioneers. They realized they were onto something so discreetly awesome that they would have an oportunity to claim fame and fortune as this language was introduced to the masses over the next few years. And claim their fame they did. But alas, now that the language has become significantly mainstream and generally accepted as legit, these expats (Java devs enjoying a more trendy and carefree life in ruby_land) are now hurriedly disclaiming it before anyone has a chance to notice that they are doing something mainstream.

The Rails community is just as bad. It has a larger market share of ranters and they are especially prissy. Shitting on Ruby and Rails is coder couture and everyone’s jumping on the bandwagon. What most of them fail to realize is that Zed Shaw beat them all to it. They aren’t the first to disown rails, though they proclaim their hatred with such shocking fervor that you’d think they were. The ranters that followed him are just callously ripping apart the very language that freed them from their boring (insert crappy language) jobs and offered them the beauty of a minimalist coding atmosphere. They are acting like petulant children that were spoiled for 18 years by adoring and forgiving parents, only to turn around and rebel for the sake of rebellion.

I understand there are shortcomings in both Ruby and Rails. Neither platform solves all problems nor do they claim to; sure, some of their frontmen would have you believe it does and it’s been marketed as such in many cases, but most programmers realize that Ruby isn’t the end-all of programming languages. Ruby isn’t the answer to all programming questions. There are plenty of great languages out there and more will inevitably be created. The most frustrating thing about this is that both Ruby and Rails are open source. Any one of these trendy haters could learn some C and make it all better. But who wants to spend time contributing when there’s no money to be made or fame left to be had?

In the Rails community I think the issue of elitism has been the cause of a lot of friction and lashing out. Those who have been unfairly excluded from the Rails lunch table seem to be especially vigorous in their attempts to bring down the popularity of the language. Then there are those that come to Ruby or Rails on the promise of the language being the universal remedy and they are disappointed, hurt, confused, even a bit ashamed once they realize that this is just another programming language/framework. They act as though they are waking up naked in cold shower after prison sex. First comes shame, then outright rage.

I don’t care if these assholes left decent paying java jobs for this “revolutionary” ride and were disillusioned. They should have had the foresight that there is no panacea of greatness. There is no single solution. What ruby does offer is a more intuitive way of coding. Its form is simple. It’s full of grace. Ruby is succinct. It’s not the messiah of languages though it attracts many messiah-figures and their fanboy prototypes. There is a market for it, there are people that love to code it, and that’s about it. I don’t want to hear you rant on about it like some burned lunatic just because you think we all need turn around and follow you on your way out the door.

There should be healthy discussion about the shortcomings of programming languages. It draws a landscape for new ideas and solutions. It gets a community thinking and working together. But what I am so annoyed with are the reformed evangelicals that are all of a sudden declaring that “this shit ain’t cool no more” and expect everyone to throw up their hands and say “Oh wow great leader, you’re right. Let’s just go learn [Scala, Erlang, Clojure, Whatever].”

I’m aware I’m just as uncool for ranting on the topic even though I’m ranting about the ranters. But I’m not attempting to be cool, no one reads my blog anyway, and I’m a mother of two babies who spends her time wiping poopy butts and scraping peanut butter out of carpets. The biggest decision I have to make on any given day is whether or not it’s ok to serve them a piece of chicken that’s not organic and then hope that the growth hormones won’t give my daughter porn-sized boobs three months from now. I play video games, I code a bit here and there, but I have no claim to fame. I’ve been writing Ruby code for three weeks. Seriously.

Ruby gave our family a launch pad for success. My husband was a quiet early adopter and he’s worked happily with the language for a few years. He’s been able to find a job with a sweet company that lets him work from home. Which means that he gets to work in his boxers and t-shirt, is able to have PB&J’s with us at lunchtime, and is always home for dinner at 5pm. I am quite enjoying the solace that comes from not being neck deep in the rat race.

For myself, I’ve been learning to program with a language that doesn’t make me want to cry. I remember doing C++ and Java homework in CS classes in college; I do believe I have post-traumatic Java syndrome. It’s unbelievable even to me that I have dared to get into programming again. But Ruby is making it easy; even fun. I’m happy to code with it, and I’m happy to be enjoying the amenities of the lifestyle it has provided for us. I’m sure I’ll have qualms with some aspects of it someday. And it will be ok to voice them. It’s ok to bite the hand that feeds you. Just don’t bite it off.

Category: Uncategorized  | Tags: , , ,  | 60 Comments