Friday, September 2, 2011

Jenkins script for mass-update of email recipients


This is a handy Jenkins Groovy script that can be used to update all the mail recipients for your Maven projects.  If you have a ton of projects, this can be way-faster than changing them each by hand.  I'm putting this here for the Googling and my own notes.

import hudson.plugins.emailext.*
import hudson.model.*
import hudson.maven.*
import hudson.maven.reporters.*
import hudson.tasks.*


// For each project
for(item in Hudson.instance.items) {
  println("JOB : "+item.name);
  for( reporter in item.reporters) {
    if(reporter instanceof MavenMailer) {
      reporter.recipients = "new@email"
    }
  }
}

Sunday, January 23, 2011

Music of 2010

Melanie's post has inspired / shamed me into posting my own Music of 2010 review. I say shame because, well, I'll let the music do the talking:
  1. Kylie Minogue - Get Outta My Way - 9/3/2010 - 67 - 0.47
  2. P!nk - So What - 9/24/2010 - 52 - 0.43
  3. Superchunk - Learned to Surf - 9/24/2010 - 51 - 0.42
  4. Robyn - Hang With Me - 9/24/2010 - 47 - 0.39
  5. Drake, Kanye West, Lil Wayne & Eminem - Forever - 9/15/2010 - 47 - 0.36
  6. The Hold Steady - Hurricane J - 5/15/2010 - 93 - 0.37
  7. Yolanda Be Cool & Dcup - We No Speak Americano - 10/20/2010 - 28 - 0.29
  8. Lil Wayne - A Milli - 9/15/2010 - 38 - 0.29
  9. Taylor Swift - Love Story - 3/16/2010 - 98 - 0.31
  10. Macklemore - The Town - 8/24/2010 - 42 - 0.27
  11. The Lonely Forest - Live There - 8/20/2010 - 43 - 0.27
  12. Passion Pit - Little Secrets - 10/13/2010 - 25 - 0.24
  13. The Cinematic Orchestra - To Build a Home - 10/3/2010 - 27 - 0.24
  14. Aloe Blacc - Take Me Back - 9/3/2010 - 35 - 0.25
  15. Daft Punk - Da Funk - 8/24/2010 - 37 - 0.24
  16. Fitz & The Tantrums - Dear Mr. President - 8/24/2010 - 36 - 0.24
  17. Ke$ha - Blah Blah Blah (feat. 3OH!3) - 3/21/2010 - 77 - 0.25
  18. Balmorhea - Settler - 9/3/2010 - 32 - 0.23
  19. Ryan Adams - Come Pick Me Up - 8/26/2010 - 33 - 0.22
  20. James Brown - I Got the Feelin' - 9/2/2010 - 29 - 0.20
Because I'm a nerd, this is super complicated. Each entry includes the artist, song name, date added to my library (all 2010), total play count, and average number of plays per day. The songs are sorted by the average number of plays per day. I went this route because I thought raw play count gave too much weight to songs I had added earlier in the year. However, I'm not totally happy with this new system either, as I tend to listen to song A LOT when I first get them so they tend to be peaky and then taper off. Maybe if iTunes every kept an exact record of each song I played, I could go back and make things REALLY complicated, but until then.

Also, by not just going by raw play count, I avoided having to put Taylor Swift at the top of my list. However, it's not clear that Kylie Minogue or P!nk is much better. But who am I to deny my pop tendencies?

Thursday, September 23, 2010

Downhill Furniture Race and 30th Birthday Celebration

In a little more than a week, I'll be turning 30, which means I have precious few days of my 20s left to do stupid things and chalk it up to "emerging adulthood". What kind of stupid things, you ask?

Downhill Furniture Race and 30th Birthday Celebration

When: Saturday, Oct 2 - 2pm onward - Couches start rollin' at 4pm, sharp!
Where: Woodlawn Park - Shelters 4 or 5
What: Wheels + Furniture + Steep Hill
After party: Smokin' Petes BBQ in Ballard or UW Medical, as appropriate

Anyone who has known me long enough can tell you that I have a soft spot for putting wheels on things and racing them down hills. Basically, the following thought bubble pops into my head every few minutes:

We've got some furniture we want to get rid of and thus a dream is born.

For Racers:

Want to join the fun? We'll be setup starting at 2pm in one of the shelters on the map, working on our vehicles. I'll have a couch and chair, some wheels, some tools, and some crazy ideas. Feel free to join in. You'll be amazed what a few bucks will buy you at the Goodwill. If you do plan on racing, bring a helmet. Note that brakes and steering are encouraged when contemplating your design. Races officially start at 4pm, rain or shine!

For Observers:

Don't feel like death defying? Come watch the mayhem anyway. We'll be setup from 2pm onward working on the furniture. Feel free to come hang out. Refreshments and snacks will be provided. Races officially start at 4pm, rain or shine!

For the glory:

What's at stake here? How about the illustrious Winner's Cup!

Also, after the racing and assuming anyone is left alive, we'll be after-partying at Smokin' Pete's BBQ in Ballard and probably drinking away our troubles in some Ballard bar after that.

Planning on coming? Planning on racing? Drop me an email at bdferris@gmail.com to let me know.

Monday, February 1, 2010

Nerd: Trouble with Google Maps API, script tag, and jspx

I use jspx in a couple of places for OneBusAway, which is an XML-ified version of the venerable Java Server Pages (jsp) standard. I recently had a mysterious issue where I couldn't get a page to load properly that was referencing a <script> element for loading the Google Maps API. It turned out to be a problem with the way a jspx file is treated as an XML document. In my source file, I had something like this:

<script type=\"text/javascript\" src=\"…\"></script>

However, when that snippet is parsed as XML and spit back out again, it ends up looking like:

<script type=\"text/javascript\" src=\"…\"/>

That's a problem, because the Google Maps API does some script injection in the head of the html document on loading that seems to break if you use <script/> instead of <script></script>. Why? I don't really know. However, it was an issue on Firefox 3.5 that almost drove me insane.

Thankfully, there is a simple hack to fix the issue. Just insert a CDATA section in your own script tag and it won't be collapsed by the XML parser:

<script type=\"text/javascript\" src=\"…\"><![CDATA[<!-- -->]]></script>

Did the trick for me. I post it here so that Google might index it and help out somebody else out there some day.

Saturday, December 19, 2009

The Ferris 2009 Music Top 20

It's the end of the year, which means it time for christmas trees, overeating, and year-in-review lists. For my lists, I wanted to get an idea of what I was listening to in 2009. Unfortunately, though iTunes tracks playcounts, you can't break it down by year. Instead, I decided to look at the play counts for songs that I added in 2009 (though the song may have actually come out much earlier). Either way, it paints a pretty clear picture of what I listen to. Here's the top 20 artist + song + playcount.

1) Michele Williams - We Break the Dawn (Karmatronic Club Remix) [99]
2) DymeDef - Get Down [81]
3) Kate Havnevik - Timeless [66]
4) Passion Pit - Sleepyhead [65]
5) Cascada - Evacuate the Dancefloor [64]
6) Danger Mouse & Jemini - Ghetto Pop Life [62]
7) School of Seven Bells - Half Asleep [54]
8) Free Energy - Free Energy [51]
9) Phoenix - 1901 [50]
10) Basement Jaxx - Raindrops [49]
11) Madcon - Beggin' [46]
12) Michael Jackson - Scream [45]
13) Starfucker - Biggie Smalls [44]
14) The Unicorns - I Was Born (A Unicorn) [44]
15) KRS-One - Illegal Business [42]
16) Dirty Projectors - Stillness is the Move [40]
17) Fresh Espresso - The Lazerbeams [40]
18) Meiko - Reasons to Love You [39]
19) Q-Tip - Move [39]
20) Black Eyed Peas - I Gotta Feeling [37]

Trends: Dance music is my guilty pleasure. Michele Williams, Cascada, Basement Jaxx, Madcon, Black Eyed Peas and even a little MJ (rip). Toss in some hip-hop (DymeDef, Danger Mouse, KRS-One, Fresh Espresso, Q-Tip) and some indie-ish stuff (Passion Pit, School of Seven Bells, Free Energy, Phoenix, Starfucker, Dirty Projectors) along with everything else, and you are left with a rockin playlist. If you are a Brian Ferris that is (god help you).

Saturday, September 12, 2009

Urban Death March

Amy and I are celebrating our one-year wedding anniversary this weekend. Though we have a couple things planned for the weekend, we decided to go on a hike to Discovery Park in Seattle. I had never been and our goal of going there last week was complicated by cougar problems.

We left the apartment around 8am, swung by Cafe Besalu for some killer French pastries and then the hike was on. And boy did we hike:


View Urban Hike in a larger map

The main leg ended up being over nine miles! We hiked the full perimeter of Discovery Park and Magnolia Bluff. Once we got to Interbay, we cheated and caught a bus back to Ballard (because seriously, who hikes Interbay?) for a lunch at Smokin' Pete's BBQ (best brisket + ribs + sweet tea in Seattle, hands down). Add a little more mileage for the walk home, and bang: 10 miles. Crazy stuff.

Monday, September 7, 2009

Drawing the US is Hard

In this YouTube video (linked from BoingBoing), Senator (!) Al Franken free-hand draws a map of the United States with impressive attention to detail. I thought it'd be fun to try it myself. In fact, I encourage you to go give it a shot right now. Don't look at a map of the US before you start... you'll ruin all the fun.

Here is my result (click for a larger version):

Drawing the US: Fail

All in all, the results are pretty embarrassing, but not a complete failure. Let's look at some of the finer details:

1) Somehow Wisconsin ended up on the left-hand side of Minnesota.
2) Utah snuck up between Nevada and Idaho, when it belongs between Nevada and Colorado.
3) Whoops... where is New Jersey?
4) The NE is a general disaster.

How did yours turn out?

Wednesday, January 28, 2009

Zipcar: Revisited

My last blog post was a bit of a rant against Zipcar. In addition to the blog post, I also did some complaining on Twitter. Lo and behold, all that complaining did some good. A Zipcar rep saw my tweet and sent me an email. The key portions:
Our new policy will be that you can make a reservation and then cancel it within 30 minutes (as long as you don't start the car) and there will be no charge for the reservation.

With the new policy if you realize you've forgotten something in a car, you can make a reservation, walk to the car and retrieve your item, then walk home and cancel the reservation. Or you can make and cancel the reservation via your cell phone if you're standing next to the car.
Awesome, I say. Zipcar is back in my good graces.

Tuesday, January 27, 2009

Zipcar

I could spend a whole post talking about the things I love and appreciate about Zipcar, but screw that. Time to vent about the bad stuff.

1) No 30 minute reservations. Minimum of one hour. If Rachel Ray can cook an entire meal in 30 minutes, then surely I can run a quick errand in 30 minutes as well. LAME.

2) Lost item policy. Forget your gloves in the car? Don't realize it until the next morning? You have to reserve the car for another hour (again, not 30 minutes) to retrieve your gloves. I know I screwed up by forgetting my gloves, but it's a perverse incentive when it's about the same price to buy new gloves as it is to make a reservation for an hour to retrieve the gloves. Plus, the car just sits there for an hour now, unusable by anybody else.

3) No cars near my house. What more can I say?

I place blame for 1) and 2) on Zipcar, since Flexcar never had these problems. I'll cut them some slack on 3) because Flexcar had the same problem. It's mostly my fault for living in a neighborhood where everyone drives.

Venting complete.

Saturday, January 17, 2009

Waffles!

Waffles!

I love waffles. LOVE them. They are possibly my favorite breakfast food, which is saying a lot, because I love most all breakfast foods. LOVE. To me, a waffle is this crispy-on-the-outside, soft-on-the-inside, buttery-all-over dimpled round of perfection. Eaten hot off the iron with butter, syrup, jam, etc, it simply can't be beat.

Sadly, for oh so many, a waffle is a frozen disc pulled from the freezer, maybe toasted or more likely microwaved until it reaches the consistency of a warmed-over kitchen sponge. It's nasty! Sure, if you put enough syrup on it, maybe you'll forget that you're eating a waffle at all, especially once you go into a sugar coma. But the world deserves better!

As such, I've made a habit of giving people waffle irons as wedding presents, whether they ask for one or not. But getting the right waffle iron is tricky. Personally, I am blessed with not one, but three waffle irons:

Waffle Irons

The white NC State-ified model on the left is a Sunbeam-Oster model that my sister Elizabeth gave me back when I left for college. Ten years later, it is still a solid workhorse that has been there through the good times (like that time I had waffles for breakfast) and bad (like that time I spilled waffle batter on my keyboard in the dorm room while having waffles for breakfast).

The Cuisinart on the right is a special heart-shaped waffle iron that I gave to Amy as a Chritmas present a few years back. It tends to make very thin waffles that get extra crispy as result, but are just a little too thin for my tastes.

The model in the middle is the Cuisinart (Model WMR-CA), which we received as a wedding present. This model is interesting, because it's the same model I tend to give as wedding presents to other people, mostly because it's the one waffle iron that Bed, Bath, and Beyond typically carries as a floor model. Thus, it's pretty ubiquitous.

Having given this waffle iron as a present many a time, I am a little embarrassed to admit that I'd never actually used one myself. My first reactions were not good: my waffles tend to cook way too quickly, burrning the outside before the middle could finish, which ultimatetly meant that the two sides of the waffle stuck to the iron, ripping the waffle in half when you opened it up. Not good.

Part of this is a function of my waffle recipe. My favorite by far is the Light, Crisp Waffle recipe from Fine Cooking. When done right, these waffles live up to their name: crisp on the outside, light and fluffy on the inside. As a bonus, they will stay crisp when left in the oven at 200ยบ, which is key when you want to serve waffles to a group of people at the same time, but don't want your waffles to get all soggy while you build up a sufficient stockpile for service. The recipe is a little extra work, including separating an egg and beating the egg whites with a hand mixer, but again, the result can be awesome.

Except the light-and-crispy action that makes this waffle so good make it susceptible to pulling apart in the waffle iron as I described above. A more typical recipe (see Alton Brown's, for example) is a little thicker so the resulting waffle holds together better. But it's not as light and tasty!

I've since learned a few tricks that have brought this waffle iron back in my good graces.

1) Grease the waffle iron. Yes, I know, the waffle iron already has a non-stick surface, but an extra hit of cooking spray will go a long way towards keeping your waffles from sticking.

2) Keep the waffle iron on the lowest heat setting. For my iron, anything hotter than that would cook the outside of the waffle way too fast. Your mileage may vary, of course.

3) Ignore the red-light green-light for knowing when your waffle is done. While the light may be ok for determing when your waffle iron is hot enough to add batter, it doesn't seem to be a good indicator of when your waffle is done. Instead, I just set a kitchen timer. On the three of my waffle irons, 3 minutes is about the perfect amount of time to cook a waffle, so you might try that as well, and adjust to taste.

Tuesday, December 23, 2008

Pie Time

Melanie and I got together to practice making pie crust yesterday. We ended up making three pies:

Apple Bacon Cheddar Pie ABC

Yes, my friends, that's an Apple Bacon Cheddar pie. It remains to be seen if it's actually tasty, but those of you attending Arun and Rachel's holiday party will get to find out. We also made a cherry pie:

Cherry

Finally, we made a chocolate-peanut butter cream pie, not pictured here. I'd like to think that I imparted some knowledge of making crust to Melanie, but she's mostly right that I'm a control freak in the kitchen. Sorry Melanie!

Brian Ferris: Pie Maker

My Mom's New Dog

My mom got a new dog:

Mom's New Dog Mom's New Dog

She's a French bulldog named Georgie, Gi-Gi, Georgette or something like that. She's a rescue dog from a puppy mill, but she seems to be quickly on her way back to health under my mom's care. For the snort-tastic effects of Gi's battle with a respiratory infection, make sure to watch this with your sound on:



See more photos in the Flickr set.

Saturday, December 13, 2008

Pie Drives the Traffic

I noticed a bump in my blog traffic the day before Thanksgivig. Wow, 50 visits in one day! I'm big time...

Thanksgiving Pie Crust Bump

It took me a few minutes to figure out why I was getting all the traffic, until I figured out which page everyone was visiting from Google:

Pie Crust For Fun and Profit

Gotta love the pie.

Friday, November 21, 2008

Domestic Me

Our refrigerator door has never been very good about closing, but things got particularly bad in the last week. Specifically, a few chunks of mangled plastic fell off the base of the door and suddenly it didn't want to close at all. To actually get it to close, you had to physically lift the door about an inch and shove it into place. Not exactly great.

I decided to try to fix it myself, since getting our landlord and most likely a repairmen involved seemed like a pain. I'm posting this mostly so anyone Googling about their GE Model # TFF22RC or TFF22RCB refrigerator and its broken door might learn something useful.

After looking at the mangled pieces of plastic at the base of the door and comparing them against the working parts at the base of the freezer door and against the GE parts manual (door parts only), I figured out that the part I needed was drawing part # 16 or the Hinge Cam Riser (full part #WR2X4901). I actually needed two, since both the cam attached to the hinge and the door itself were broken.

The parts from GE were $10 each (scam!), but I found them online for $5.99 for a pack of two. Score.

The hardest part of removing the door was transferring all the condiments from the door into the fridge proper. Then I just unbolted the bracket at the top of the door and there you are:

The Fridge Door ... Where It Does Not Belong


Fridge Sans Door

I taped some plastic where the door used to be, since the operation takes some time. At this point you can get a clearer look at the hinge and the mangled cam:

All Kinds of Ugly

I unbolted the hinge pieces from the door and the base of the fridge. Replacing the cam on the door was a piece of cake, but the cam on the hinge is actually riveted into place, so I had to drill out the rivet and replace it with a bolt. The result is here:

New Cam, Meet Old Cam

Good as new. I put the door back in place and now it closes like charm.

Wednesday, November 19, 2008

OneBusAway

So I've been working on a project called http://onebusaway.org/ since early summer. OneBusAway provides an easy-to-use interface to real-time bus tracking data provided by Metro King County. The main killer feature is a phone number you can call, punch in your bus number, and the system will then tell you the predicted arrival time for the buses at that stop. The key here is "predicted", as the system can tell you when your bus is running late or if it's already gone by. OneBusAway is made for all the cold and rainy nights here in Seattle when you can't help but wonder if your bus is ever going to come. In addition to the phone number, there is a website, iphone, and SMS interface.

The system currently gets about 400 hits a day on the website. It's interesting to see the usage patterns:

OneBusAway Usage


The main thing to note is that people don't ride the bus as much on the weekends ;)

OneBusAway has been written about in a couple of local blogs: Seattle Transit Blog and Bus Chick, to mention. However, OneBusAway hit the big time when we are actually mentioned in honest-to-god print media:

OneBusAway in Seattle Magazine!

Ok, I realize that's just a link to a website, but here's proof that it appeared in the actual print edition:

OneBusAway in Seattle Magazine

Tuesday, November 18, 2008

San Luis Obispo to Yosemite Valley

Last weekend, I rendezvoused with my sister Elizabeth and my dad down in San Luis Obispo, where my dad is working. After taking in the local wildlife:

I wish I could swim and nap at the same time

we piled in my dad's truck and headed for Yosemite National Park. Yosemite, to put it simply, is awesome. A valley of steep granite cliffs carved by glaciers, the views are incredible.

Yosemite Valley

Yosemite is full of iconic scenery: Half Dome, El Capitan, Yosemite Falls:

Half Dome Yosemite Valley - El Capitan, Half Dome, Bridal Veil Falls Yosemite Falls


Yosemite is also full of bears. You have to keep your food locked up at all times in steel bear boxes, as the bears have no qualms ripping the door off your car to grab a loaf of bread sitting inside. Though my sister Frances lost her entire weeks worth of food to a bear the last time we were in Yosemite (his name was Yogi I guess?), we had no run-ins this time. We also had no run-ins with showers either. The hat head was epic:

No showers + wearing a hat all day = oh god

Our intrepid crew went on one hike while we there: the 4.6 mile, 3400 vertical feet trail to Glacier Point. Note the squiggly line with all the switch backs that goes straight up the side of the mountain:

We hiked the steep, squigly line going straight up the mountain

The hike was tough, but the views were worth it:

Half Dome and Nevada Falls

Friday, November 7, 2008

Lego Mindstorm Drawing Robot

Back in the fall of 2007 (yup, I've been delinquent about posting this), I took a class in the School of Art here at UW called ART 383 - Interaction Design - Designing Behaviors. The class basically involved building cool interactive robots with Leog Mindstorm robotic kits. What's not to love about that?



My team built a drawing robot:



The Spydr Drawing Robot



We called it the Spydr bot: it hung on a white board using two almost invisible strands of fishing line, making it appear to float in space as it moved over the surface of the board.



Once we worked out the crazy math involved in converting geometric drawing commands into the proper motor controls, we could do some relatively precise drawing:



The Spydr Drawing Robot The Spydr Drawing Robot



From there, the sky is the limit. Check out this highly stylized Mona Lisa:





The class was a blast, and though it didn't put me any closer to graduation, I would definitely take it again. I mean, come on. Legos!

Obama!

Tuesday... was good. Obama won! Dino lost! Prop 1 passed here in Seattle.



Also, I made my friend Nancy an Obama cake for her birthday:



Obama Cake

Sunday, June 29, 2008

Pie Transport

I went over to watch the Eurocup 2008 final at a friends house today and I promised I would bring a pie. Here is the pie:



Blueberry Pie

I've never made a blueberry pie before. Seemed to turn out ok. My friend lives a little over 7 miles away in Mt. Baker. Getting there by bus would have required two transfers, so I decided to bike it. That means I needed some sort of pie transport unit for my bike. Thanks to Emily and Mark's recent wedding present and a little bit of ingenuity, I came up with the following:



Hot Pie on Bike Action

It actually worked really well in that the pie made it with narry a misplaced berry. I wish I could say the same. I sort of got "lost" on my way there and ended up going up and down a few too many hills in Madrona. I earned my piece of pie to say the least.

Monday, March 10, 2008

Google Reader Shortcut Bug

Procrastinators of the world! Troubling news...



I'm a big fan of Google Reader, and by big fan I mean total addict. I need my feeds and I need them now. However, it looks like there was an update to the program last Wednesday, and I've got bugs! Specifically, I'm a big fan of the keyboard shortcuts (j and k for life) and they are not working like they should. When I click a link to read a story, read said story, close the tab and come back to Google Reader, the keyboard shortcuts don't work until I click in the window. I've confirmed the bug on Firefox 2.0.0.12 on both Mac OS X and Linux. This may sound trivial, but it has really cut into my procrastination productivity.



If you are a fan of Google Reader (bonus points if you are reading this in Google Reader right now) and have also noticed this bug, let Google know by posting a message to the bug's thread on the official Google Reader problems forum.