<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0YCSHozeip7ImA9WhBbEE8.&quot;"><id>tag:blogger.com,1999:blog-11698705</id><updated>2013-05-08T12:06:09.482-04:00</updated><category term="space" /><category term="espn" /><category term="logging" /><category term="mpaa" /><category term="teamcity" /><category term="media" /><category term="technology" /><category term="continuous integration" /><category term="digital copy" /><category term="disney" /><category term="apple" /><category term="commercial" /><category term="import" /><category term="song" /><category term="maven" /><category term="u-socket" /><category term="github" /><category term="ngram" /><category term="paperless" /><category term="posterous" /><category term="dvd" /><category term="antipattern" /><category term="best_practices" /><category term="comic sans" /><category term="bluray" /><category term="trends" /><category term="brainteaser" /><category term="troubleshooting" /><category term="instagram" /><category term="daws" /><category term="family" /><category term="email" /><category term="geni.com" /><category term="nosql" /><category term="cycling" /><category term="401k" /><category term="tv" /><category term="zynga" /><category term="protection" /><category term="update" /><category term="doxie" /><category term="anecdote" /><category term="arduino" /><category term="personal finances" /><category term="parenthood" /><category term="oss" /><category term="triathlon" /><category term="facepalm" /><category term="java" /><category term="vulgar" /><category term="programming" /><category term="mac os x" /><category term="forecaster" /><category term="quirk" /><category term="slf4j" /><category term="paytrust" /><category term="infographic" /><category term="discovery_channel" /><category term="getglue" /><category term="versioning" /><category term="rest" /><category term="chrome os" /><category term="feel_good" /><category term="geneology" /><category term="running" /><category term="theft" /><category term="appengine" /><category term="swimming" /><category term="imap" /><category term="food" /><category term="identity" /><category term="play" /><category term="search" /><category term="project" /><category term="paranormal" /><category term="nsfw" /><category term="health" /><category term="go_kart" /><category term="fitness" /><category term="gmail" /><category term="foursquare" /><category term="handlecheck" /><category term="google" /><title>jaXzin.com</title><subtitle type="html">Stuff that interests me.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.jaxzin.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.jaxzin.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>61</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jaxzin" /><feedburner:info uri="jaxzin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>41.433851</geo:lat><geo:long>-73.295336</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/3.0/" /><entry gd:etag="W/&quot;A0YCSHoyeip7ImA9WhBbEE8.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-7104148683507433287</id><published>2013-05-08T11:44:00.001-04:00</published><updated>2013-05-08T12:06:09.492-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-08T12:06:09.492-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="swimming" /><category scheme="http://www.blogger.com/atom/ns#" term="space" /><category scheme="http://www.blogger.com/atom/ns#" term="fitness" /><category scheme="http://www.blogger.com/atom/ns#" term="cycling" /><category scheme="http://www.blogger.com/atom/ns#" term="triathlon" /><category scheme="http://www.blogger.com/atom/ns#" term="feel_good" /><category scheme="http://www.blogger.com/atom/ns#" term="running" /><title>My Journey to Fitness, a 5K, and my first Triathlon</title><content type="html">&lt;br /&gt;
&lt;div class="p1"&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-s8hhncgmjAY/UYp0TkoIaNI/AAAAAAAAGMU/Fqf3hVWLuFI/s1600/938613_10151595336337402_1698055019_o.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-s8hhncgmjAY/UYp0TkoIaNI/AAAAAAAAGMU/Fqf3hVWLuFI/s320/938613_10151595336337402_1698055019_o.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;At the finish line&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
My name is Brian and Sunday I became a triathlete. My journey started ten months ago when I decided to get back into shape after 15 years of being obese and out-of-shape with some yo-yo dieting in the middle. What changed? I'll get to that.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
This weekend I competed in the first ever &lt;a href="http://rocketmanflorida.com/"&gt;Rocketman Florida Triathlon&lt;/a&gt; which took place on the grounds of &lt;a href="http://www.kennedyspacecenter.com/"&gt;Kennedy Space Center&lt;/a&gt; at Cape Canaveral. In preparation I lost 50 lbs and 12 inches from my waist. But I'm getting ahead of myself.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I'm a huge space buff. As a kid I wanted to become an astronaut. I went to Space Camp in Titusville when I was 10. Before that, I saw my first shuttle launch at 7 while on vacation. It was the final launch of the Challenger. I've written about &lt;a href="http://www.jaxzin.com/2011/01/25-years-moment-in-time.html"&gt;&lt;span class="s1"&gt;that experience&lt;/span&gt;&lt;/a&gt;. I've seen three other launches since then including John Glenn's famous return to space as well as the final launch that ended the U.S. Shuttle Program.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
The idea of biking on the restricted grounds and getting closer than any civilian has to the iconic Vehicle Assembly Building and Space Shuttle launchpads was too much of a draw to let my poor fitness stop me from registering. I found out about it last August from my coworker, Lisa, and on the morning of September 1st I signed up the moment registration opened! I had 8 months to get in shape! Uh oh.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Rewinding a bit, I had already started getting in shape so in total I actually had ten months. I had started preparing for my first 5K race back in July. So what inspired me to get fit?&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I had a couple things that inspired me; feeling terrible and fat and unhappy, my sister-in-law who broke her pelvis was doing a 5K, my wife did a 100 day fitness challenge and later on told me it was to inspire me and I wasn't inspired and felt guilty, I saw an &lt;a href="http://www.bettermovement.org/2012/use-or-lose-looks-like/"&gt;&lt;span class="s1"&gt;MRI comparing the legs of a 70 yr old triathlete to a 70 yr old sedentary person,&lt;/span&gt;&lt;/a&gt; and being a father of young kids I want to be there for them as long as possible.&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
These were all great inspiration that kept me searching for the "thing" that would make me take care of my body, and sadly though those were all great reasons I still hadn't changed. The moment that clicked was during a visit to my sister and her husband's for my wife's birthday. We had spent the night and I was up early with my kids when I saw my brother-in-law, who is a big fit guy, go out for a run. That's when it clicked for me. "Oh, so people..like...go and workout." I know that might sound silly, especially since I've worked out before in my life. It was a different kind of epiphany for me this time. This time I realized it wasn't about the working out to burn calories, or to lose weight, or to get a great body. It's to have a different lifestyle. It's to stop delaying. It's to just do it because that's what you've got to do. Boring, but extremely enlightening to me when it clicked.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bTy0J58_MFw/UYp0fgy3f0I/AAAAAAAAGMc/QSt2SA-XKd4/s1600/939214_10151595333567402_480713021_o.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-bTy0J58_MFw/UYp0fgy3f0I/AAAAAAAAGMc/QSt2SA-XKd4/s320/939214_10151595333567402_480713021_o.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;I took this picture of the Vehicle Assembly&lt;br /&gt;
Building as I passed by on my bike&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
So on July 13, 2012 I began a 120 Day Healthy Living Challenge to myself. I would exercise and prepare to run the 5K on November 11.&amp;nbsp;I would do it as publicly as possible to keep myself motivated while sharing both my successes and my failures. It was sharing my failures publicly on Facebook, Twitter and Tumblr that turned out to be the most motivating and helpful thanks to the support and encouragement I got from friends. I would lose as much weight as I could, I set my goal to lose 56 lbs and get back to 180 lbs. I would count calories and use portion control. This was important because I've used pills and fad diets in the past, and they would work but the weight always came back. I wanted it to be a change I could maintain, and I felt that eating the foods I love, just less of them, was what would work. I'm a self-described foodie and love eating great tasting, well-executed food, so not having the flexibility to eat what I love wouldn't work.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Counting calories is boring and tedious, or so I've heard. Well I'm all math-nerdy so to me its just another data game along with stock trading, Fantasy Football, and how many miles I ran. But even I'll admit the idea of staring at nutrition labels and entering numbers into Excel would make me go cross-eyed. So in this day and age of "there's an app for that" it turns out...there's an app for that. &lt;a href="http://myfitnesspal.com/"&gt;&lt;span class="s1"&gt;MyFitnessPal&lt;/span&gt;&lt;/a&gt;. It lets you scan bar codes and search for foods by name which populates from a crowd-sourced database. Data is wrong or missing? Fix it yourself! But rarely do I need to, from Applebee's to Zaxby's, most major chains' and brands' nutrition data is already there, making it fast and easy to enter.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Weight loss is simple math, the calories you burn need to exceed the calories you eat. More exercise? Great you get to eat more food! No exercise? Welcome to a diet of carrot sticks. It really helped keep me motivated to exercise, just simply so I could have decent meals. MyFitnessPal calculates my goal intake per day and accounts for exercise I enter to let me know if I've eaten too much, too little or I'm on goal. &amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
You can get fancier and focus on other data points, but calories is where you should start if you want to lose weight. Oh and get a food scale to weight your portions. I held out way too long and it turned out I was underestimating my food portions, robbing me of precious calories to keep the hunger at bay.&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
You will get hungry. I was starving. I remember the first time I felt real hunger pains and thought I was sick. That made me realize just how much I overate if I never felt hungry. But to be fair, once I got used to the smaller portions the hunger pains went away. I get them from time to time still and I use that to guide me to a light snack like carrot sticks, (oh the irony).&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Along with eating smaller, I needed to start running. Don't start with running, bad idea. Start with walking. I ramped up quickly, since my goal was to workout every day for 120 days. That was a stupid goal, seriously. I ended up hurting myself and needing therapy on my knee. &amp;nbsp;Try to workout 3-4 days a week, rest days are as important as workout days for your body, it needs to recover. For me I started with walking around my neighborhood and on the treadmills at the &lt;a href="https://www.facebook.com/pages/ESPN-Wellness/116583991734013"&gt;ESPN Employee Wellness Center&lt;/a&gt;. I use &lt;a href="http://runkeeper.com/"&gt;&lt;span class="s1"&gt;RunKeeper&lt;/span&gt;&lt;/a&gt; on my phone to track my run data. It's been extremely helpful for tracking my progress and keeping me motivated. It seems everytime I'm down on myself I get another email from RunKeeper telling me that I broke another personal record. For an analytical mind like mine, data is key to staying motivated because it lets me quantitatively measure my progress.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Even with my injury, I progressed to running a 5K within a few months and on November 11 I became a runner, completing my first 5K race with a pretty decent time of 27 minutes, 3 seconds and beating my fitness goddess of a wife to the finish line by 4 seconds. She has since trounced all my personal records as I turned the heckling up to maximum and motivated her as she had motivated me. &lt;a href="https://www.facebook.com/media/set/?set=a.10151242188857402.486813.628402401&amp;amp;type=3"&gt;With my 120 Day Challenge completed&lt;/a&gt;, I've continued to count the days. I'm not sure when I'll stop counting. Triathlon day was Day 297.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Once I had completed that first goal of the 5K, it was time to focus on the triathlon. I was excited I had set a goal for the following Spring to keep me motivated through the winter and holidays. I got a pass to the local high school pool and began swimming after my kids were in bed every week that I could.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
For the bike, I decided to use the gym stationary bikes, which was a mistake in hindsight. After biking 36 miles on Sunday I now realized I should have prepared on a road bike earlier and with more determination since the race was so long. Lesson learned.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
See most triathlons are organized in three legs with this order: swim, bike, run. As someone described it to me, you don't want to drown, you don't want to fall off your bike, and you want to be on your own two feet at your most tired so the order makes sense. Most events have several different lengths, often referred to as Sprint (shortest), Olympic, Half-Ironman and Ironman (longest, though there exist longer one) and each has standard lengths for each leg of the race. The Rocketman Triathlon had a non-standard length for the bike portion. This was to allow all competitors to get out and around the launchpads. So the "small" and "medium" courses had the same 36 mile bike course while the "large" Half-Iron had a standard 56 mile course. So when I elected to register for the "small" Classic+, I was electing to bike the same amount as the "medium" International+ competitors. Ouch.&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Even with months to prepare, race day came more quickly than I imagined. All of a sudden my Dad and I were in his RV loaded with my best friend's bike headed for Florida! We arrived Saturday, to check-in which included a mandatory racking of my bike in the transition area, which is the area where competitors would switch from swim to bike and from bike to running. I was nervous to leave my friend's bike but thankfully for the tight security through the night nothing happened.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-y8wBCs_BAIY/UYp05oc9mVI/AAAAAAAAGMk/Mc9J_pI31Yo/s1600/939307_10151593426737402_1504421481_o.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="106" src="http://3.bp.blogspot.com/-y8wBCs_BAIY/UYp05oc9mVI/AAAAAAAAGMk/Mc9J_pI31Yo/s400/939307_10151593426737402_1504421481_o.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Part of the bike route from the VAB to Pad 39A&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Race morning I woke at 4:45am on sheer adrenaline alone, no alarm clock needed for me. I dressed, and we headed over and arrived just after 5:30am in the pitch black with a rapid-fire lightning storm off the coast that looked like it was filled with strobe lights. It was beautiful but I was focused on getting my bag of clothes and a towel over to my bike before the transition area closed before 6:15am. The first wave of competitors was set to start early and though my Wave 11 was to be in the water at 7:45am for an 8:00am start, I had to be here early. Next I got my timing chip, an ankle RF bracelet that tracked my movement on the course for the official race results. I was ready to go!&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
At 7:30, I was at the dock in my neon green rubber cap that marked my fellow male competitors ages 35-39. We filed down the dock together and got in the lukewarm water while the sky was grey and misting which made it feel quite cold, especially for Florida! We got in the water, and kept moving to stay warm before the 8:00am send off. It was fun, we counted down to the large red LED clock at the end of the dock and then I was swimming!&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Toward a large red buoy, I had to go out and back for a total of a quarter-mile swim. Seeing the water froth from arms, bumping a bit with others in the crowd, but still the river water was a light brown with my goggles under the surface. It was a lot different from watching the markings on the bottom of the Newtown High pool! The hardest part was navigation and keeping sight of the buoy. Suddenly I was rounding the buoy, I touched it for good luck. It felt fast like it was flying by. I headed back to the dock where the ladder was. I started swimming hard, feeling I was close. I popped my head up to discover in my excitement I was headed in the wrong direction and was off by about 90º! Oops, time to check my direction more regularly. Now that I was a bit flustered, the second half of the swim felt a bit slower. Then I was at the dock starting to climb the ladder when I felt hands on my back and a man shouting "Go, Go, GO!" I was startled and fell back in the water, and he pushed ahead of me. The ladder attendant called my urgent competitor rude and apologized to me so I guess that type of behavior isn't the norm. It didn't set me back, I actually found the man quite funny.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Now I was running up the dock and around the corner to the transition area! There was my Dad in the crowd shouting! Hi, Dad!! I rounded into the transition area and found my bike where I left it. I took a breath and started to dry off and get into my running socks and shoes. I only wore a regular men's bathing suit so I had to pull on a shirt. For my next triathlon I'll get the spandex shorts and shirts most of the other competitors had, but for my first it was overkill. Other competitors have special bike shoes, but I simply slip into my running shoes I've had for training the past few months. I put on a fanny pack with some food like an energy bar and some energy gummies. I put on my helmet, double-check I have everything I need and then I'm off!&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I ran from the transition area with my bike to the orange line where I was allowed to mount it. I swung my leg over and there I was, pedaling toward the Max Brewer Causeway, a large bridge from the mainland over to Cape Canaveral. It rises about 500 feet and is the only "hill" on the entire Florida flat course. With fresh legs I made it over the causeway with ease and topped out at 28.3 mph thanks to gravity as I came down the backside. I know my speed because I was wearing a GPS watch and I had RunKeeper on my phone in my pocket tracking my progress.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
For the next 19 miles things were looking good and I averaged about 17 mph, well above my goal of 15 mph. About 45 minutes later, at Mile 13, I reached the Vehicle Assembly Building. It's was wonderful, and I smiled for the professional photographer stationed there to take my picture. I went as slow as I could and even snapped a picture with my phone. I had made it! It gave me a second wind and I pedaled hard for the next big scenic view, Launchpad 39A which still has the tower for the shuttles standing upon it. It was awesome and could easily imagine a Space Shuttle Orbiter with an orange external tank and two tall white solid rocket boosters standing on the pad. I soaked in the moment. I was as close to this pad as I could get without being an astronaut or crew that get to go on the pad itself! The last big scenic point was the second Shuttle Pad 39B which currently has 4 tall lightning towers that look like radio towers, but the shuttle tower itself has been removed. It still was impressive to be that close to history.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
It was at this point that I realized I was 20 miles in and had seen the major sights. I had a second pass around the backside of the VAB at Mile 23 but I was starting to hit a wall. And then the wind picked up. The sun has come out around Mile 5, but this wind toward the ocean hit just as I was losing steam at Mile 20 and it made it feel like I was moving through molasses.&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
The last 16 miles were the hardest thing I have done in my life. It took me a little over an hour to do the first 20 miles. It took almost another two hours to finish the last 16 miles. Thankfully other cyclists were very encouraging as they passed. Many shouted things like "you've got this!" while others offered advice like "drop your gears and it will be much easier". I thanked every one and heeded all advice, but 16 miles is 16 miles. I hummed, I counted, I focused on the pain in my knees, I distracted myself with daydreams. Around Mile 25, near the exit of the restricted area, I remembered I had food. I might not have been thinking clearly since it took 5 miles of exhaustion before I realized it.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MqqfzFa2jrE/UYp1V-1K8UI/AAAAAAAAGMs/ifqGY-Le_N4/s1600/920893_10151593120037402_1866878860_o.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-MqqfzFa2jrE/UYp1V-1K8UI/AAAAAAAAGMs/ifqGY-Le_N4/s320/920893_10151593120037402_1866878860_o.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Checking in on Saturday at Space View Park&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
I ate the energy gummies (like candy jellies with vitamins) faster than I've eaten anything in my life. I started salivating profusely as I ate and realized how much I needed nutrition. At Mile 26 I approached the second water and Gatorade station. I grabbed a bottle of Gatorade and drank it like it was the nectar of the gods. I was getting a third wind, and being out of the restricted NASA area was a milestone of the end was coming, but I still had 10 miles to go. It wasn't an eventful 10 miles until I got to the causeway again.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
When I reached the causeway for the second time, it looked like it had grown by a thousand feet. I kicked my 26 speed bike into its lowest gear, looked down and just...kept...pedaling. I resolved not to get off and I didn't. There was a woman cheering for everyone at the top. She may be my favorite stranger ever. Using her as the light at the end of the tunnel I kept going as hard as it physically was, and when I reached her, I thanked her and coasted down the causeway to the bike dismount point.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I hopped off my bike and what I thought would be sweet relief turned into legs of Jell-O. If I hadn't had the bike to hold on to I would have hit the ground, no question. My father was there (he has the preternatural ability to find me in crowds) and he has the video proof of my near spill. It's quite funny to watch.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I jogged my bike back to its rack, took off my helmet and I was off again! My legs were asleep. You know that feeling when you lay on your arm and it not only gets numb but also is paralyzed? That's what my legs felt like. &amp;nbsp;But I willed them to start jogging, and I rounded the corner out onto the running course with my Dad cheering me on again (seriously, preternatural).&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
The run was definitely my strongest leg. Crazy since I was so exhausted at this point, but I love running and my training over the past 10 months has focused on running the most heavily. I hit the halfway point, which was also a turnaround point and was feeling great. I was even averaging a good pace, a 9 min mile which is a usual treadmill pace for me these past few months. And then the cramp hit. My left hamstring seized. I had read about cramps and knew it was a possibility, but I still wasn't prepared. I stopped, stretched, tried to make it let go. I had to keep moving so I went peg-leg and started walking funny. I was disappointed that I can't claim I ran this whole 3.2 mile leg of the race. I started to lose motivation and thought I might walk the final mile.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Then I saw two little girls giving everyone who would pass them a high five. I thought, these girls are reminding me I can do this. My leg uncramped enough for me to start jogging and I ran up to them, gave high fives and thanked them for getting me running again.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
As I approached the finish line I spotted my father. He was positioned at the final bend with a banner made by my kids attached to the nearest palm tree. He was fumbling to get his camera phone recording while also holding the banner up for me to see. I got near and realized he wasn't ready, so I jogged in place. He started recording and we laughed and I started jogging for the finish. A family of spectators just up ahead saw what was happening and the father said "well now you need to sprint for the finish to make up for it!" So somehow I found my last reserves and I sprinted as fast as I could the last few hundred feet to cross the finish line, hear my name and town announced, and to receive my medal.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
In the end, it was all worth it. I finished without injury, which is more than I can say for some of my fellow competitors. I saw sights I've dreamed of all my life and got closer to them than any non-NASA employee can get. I pushed the limits of my body further than I thought they could ever go. Seriously, I'm just a fat computer guy that sits in a chair all day. I am a stereotype. Not anymore.&amp;nbsp;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
I am a triathlete.&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Oh and how did my Dad and I celebrate?&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;blockquote class="tr_bq"&gt;
"Brian Jackson, you just completed the Rocketman Florida Triathlon? What are you going to do next?"&lt;br /&gt;
"I'm going to Disney World!"&amp;nbsp;&lt;/blockquote&gt;
&lt;div class="p1"&gt;
And we did, about an hour later.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-CEEm2g5TK3U/UYp1ouPxeII/AAAAAAAAGM0/_Lvpm5g68iw/s1600/472891_10151595577122402_1531502182_o.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-CEEm2g5TK3U/UYp1ouPxeII/AAAAAAAAGM0/_Lvpm5g68iw/s320/472891_10151595577122402_1531502182_o.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;At Disney's Wilderness Lodge to celebrate&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
During all of this I've been journaling my progress on Tumblr so please check out my posts there: &lt;a href="http://jaxzin.tumblr.com/"&gt;&lt;span class="s1"&gt;http://jaxzin.tumblr.com&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="p2"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="p1"&gt;
Also if you're data-driven like me and interested to see my race data....&lt;/div&gt;
&lt;div class="p1"&gt;
From RunKeeper (on my phone, didn't capture every leg of the race).&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s2"&gt;&lt;a href="http://runkeeper.com/user/jaxzin/activity/176159138"&gt;Bike&lt;/a&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://runkeeper.com/user/jaxzin/activity/176252218"&gt;Run&lt;/a&gt;&lt;span class="s3"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s2"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s2"&gt;From &lt;a href="http://amzn.com/B0025VKW5K"&gt;my Garmin GPS watch&lt;/a&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div class="p3"&gt;
&lt;span class="s2"&gt;&lt;a href="http://connect.garmin.com/activity/309458348"&gt;Swim&lt;/a&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;a href="http://connect.garmin.com/activity/309458351"&gt;T1&lt;/a&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;a href="http://connect.garmin.com/activity/309458358"&gt;Bike&lt;/a&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;a href="http://connect.garmin.com/activity/309458363"&gt;T2&lt;/a&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;a href="http://connect.garmin.com/activity/309458364"&gt;Run&lt;/a&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=CGmjg2Sqr2Y:wt5_WQfHIgk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=CGmjg2Sqr2Y:wt5_WQfHIgk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=CGmjg2Sqr2Y:wt5_WQfHIgk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=CGmjg2Sqr2Y:wt5_WQfHIgk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=CGmjg2Sqr2Y:wt5_WQfHIgk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=CGmjg2Sqr2Y:wt5_WQfHIgk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=CGmjg2Sqr2Y:wt5_WQfHIgk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/CGmjg2Sqr2Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/7104148683507433287/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=7104148683507433287" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/7104148683507433287?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/7104148683507433287?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/CGmjg2Sqr2Y/my-journey-to-fitness-5k-and-my-first.html" title="My Journey to Fitness, a 5K, and my first Triathlon" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-s8hhncgmjAY/UYp0TkoIaNI/AAAAAAAAGMU/Fqf3hVWLuFI/s72-c/938613_10151595336337402_1698055019_o.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Titusville, FL, USA</georss:featurename><georss:point>28.6122187 -80.80755369999997</georss:point><georss:box>28.3891042 -81.13027719999997 28.8353332 -80.48483019999998</georss:box><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2013/05/my-journey-to-fitness-5k-and-my-first.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUAQn88fSp7ImA9WhRbFU4.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-6018204860810595691</id><published>2012-02-05T16:08:00.000-05:00</published><updated>2012-02-06T08:50:43.175-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-06T08:50:43.175-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="u-socket" /><category scheme="http://www.blogger.com/atom/ns#" term="paytrust" /><category scheme="http://www.blogger.com/atom/ns#" term="paperless" /><category scheme="http://www.blogger.com/atom/ns#" term="family" /><category scheme="http://www.blogger.com/atom/ns#" term="doxie" /><category scheme="http://www.blogger.com/atom/ns#" term="personal finances" /><title>Paperless</title><content type="html">I've been slowly going paperless over the past decade. The first step on my journey started in 2000 when I signed up to use a payment service, &lt;a href="http://paytrust.com/"&gt;PayTrust&lt;/a&gt;, to receive my incoming bills, scan them, and put them online for me to pay. The next major step was probably when I got a digital camera to replace my traditional film cameras. It might not be considered a "paperless" use case, but it has lead to very little hardcopies over the years as monitors and HDTV with screensavers and &lt;a href="http://www.apple.com/appletv/"&gt;AppleTV&lt;/a&gt;s have become so beautiful. &amp;nbsp;Back to the paperless office, my next big step was eFileing my taxes but that didn't come until about 5 years later. Then suddenly about two years ago, I hit a real shift in my desire to go completely paperless when I got my &lt;a href="http://www.apple.com/ipad/"&gt;iPad&lt;/a&gt; and installed &lt;a href="http://evernote.com/"&gt;Evernote&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



digital notes...&lt;/h2&gt;
&lt;br /&gt;
If you aren't familiar with &lt;a href="http://evernote.com/"&gt;Evernote&lt;/a&gt; its an excellent app, available on all the major desktop and mobile OSes, that makes note-taking and organizing really simple. The killer feature is it keeps the notes in-sync across all instances, from my iPhone to my iPad to my multiple PCs.&lt;br /&gt;
&lt;br /&gt;
So when I got my iPad and discovered Evernote around the same time, I realized how going paperless was finally a reality. The only problem is that I have a file cabinet full of paper! I tried to just keep up with the incoming paper in our lives using our all-in-one scanner, but sitting in my office just isn't my idea of a fun time, and so that project has stagnated and the paper continues to go into the file cabinet.&lt;br /&gt;
&lt;br /&gt;
Then last week a &lt;a href="http://id.scottconnor.com/"&gt;friend on Facebook posted how he was going paperless&lt;/a&gt; and so I asked him his secret. He was nice enough to share that he was use a Doxie scanner. It was the first I had heard of it, but when I looked it up I knew it was exactly what I needed. &amp;nbsp;After convincing my wife that it was perfectly valid use of my unspent Christmas gift money, I ordered a &lt;a href="http://www.getdoxie.com/product/doxie-go/index.html"&gt;Doxie Go&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



portable scanning to the cloud...&lt;/h2&gt;
&lt;br /&gt;
My &lt;a href="http://www.getdoxie.com/product/doxie-go/index.html"&gt;Doxie Go&lt;/a&gt; came four days later, yesterday. Unboxing it, I knew it was what I have been waiting for. It is small, light and battery powered. I already had an &lt;a href="http://www.eye.fi/products/connectx2"&gt;Eye-Fi X2 Connect&lt;/a&gt; card so in about 5 minutes I had them set up to upload all scans directly to a new Evernote notebook I created and called Import.&lt;br /&gt;
&lt;br /&gt;
The reason I created a new notebook was two-fold. First, the Eye-Fi doesn't let you set which notebook it should add new scans to, and just uses the Evernote concept of a "default" notebook. So instead of having &amp;nbsp;to sort through an existing notebook for scans that need organizing, it will all go to a staging area for me to sort through. &amp;nbsp;This decision also affects the "forward an email to Evernote" feature I often use, so having both sources go to the same place for me to sift through isn't a bad thing.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



a family affair...&lt;/h2&gt;
&lt;br /&gt;
The second reason for a new notebook, is I can share it with my wife and we both have access to new scans. Seeing the size of the Doxie Go, we'll definitely be leaving it in the kitchen so my wife can scan all incoming mail. A shared Evernote notebook means she also gets instant access to the scans without a PC and without me in the way.&lt;br /&gt;
&lt;br /&gt;
Speaking of keeping it in the kitchen, I'm really excited that we have our &lt;a href="http://fastmac.com/usocket.php"&gt;U-Socket&lt;/a&gt; installed there since the Doxie Go doesn't come with a wall charger. I'm sure an iPhone charger would work too, but having the USB socket right in the wall for the Doxie is pretty cool too.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



lickable...&lt;/h2&gt;
&lt;br /&gt;
I can't speak highly enough of the user experience of the Doxie Go, from the first impression of the site, to ordering, to unboxing and installation; the experience is buttery and wonderful. They have definitely taken a page from Apple and made everything "lickable". About the only thing I could nit-pick about to this point was the order confirmation screen was the dull grey from some third-party payment service.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



...the ugly...&lt;/h2&gt;
&lt;br /&gt;
So nothing is perfect right? And the Doxie Go is no exception. Where it falls down is trying to bulk import a lot of paper. I have that file cabinet right? So I had planned to sit for 3 hours a night while I'm watch TV or something, bulk scanning everything we had for the next few months. Sadly the Doxie battery gave up about 40 scans after its full charge. So I said, fine I'll just keep it plugged in and stand at my kitchen counter. No go. The Doxie Go only pulls juice from the internal battery and won't stay powered off just the USB power. So I was able to scan for about 10-15 minutes, and will have to wait 2 hours for it to charge again. &amp;nbsp;This is clearly not the use case it was built for.&lt;br /&gt;
&lt;br /&gt;
Another nit-pick, &lt;a href="http://www.getdoxie.com/product/doxie-go/scanner.html"&gt;the marketing implies the Doxie Go has OCR built-in&lt;/a&gt; but its actually a software feature. So when you scan directly to Evernote you lose those additional features like auto-contrast and OCR. But its pretty moot for me, Evernote already has OCR that's pretty great.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;



final thoughts...&lt;/h2&gt;
&lt;br /&gt;
In the end, if all my incoming paper can be scanned and thrown away immediately, that's a huge improvement on what we have now. &amp;nbsp;For the file cabinet, I'll have to break it up into batches of 25 pages or so and slowly scan them over the coming years.&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=QGdnleEA9WQ:6aVo_62_SHs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=QGdnleEA9WQ:6aVo_62_SHs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=QGdnleEA9WQ:6aVo_62_SHs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=QGdnleEA9WQ:6aVo_62_SHs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=QGdnleEA9WQ:6aVo_62_SHs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=QGdnleEA9WQ:6aVo_62_SHs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=QGdnleEA9WQ:6aVo_62_SHs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/QGdnleEA9WQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/6018204860810595691/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=6018204860810595691" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/6018204860810595691?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/6018204860810595691?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/QGdnleEA9WQ/paperless.html" title="Paperless" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>1</thr:total><georss:featurename>19 Valley Field Rd S, Sandy Hook, CT 06482, USA</georss:featurename><georss:point>41.434096 -73.29517</georss:point><georss:box>41.432607999999995 -73.2976375 41.435584 -73.2927025</georss:box><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2012/02/paperless.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcHQnc9fCp7ImA9WhRbEEo.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-1267434571350481804</id><published>2012-02-01T00:05:00.000-05:00</published><updated>2012-02-01T00:27:13.964-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T00:27:13.964-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="mac os x" /><category scheme="http://www.blogger.com/atom/ns#" term="facepalm" /><category scheme="http://www.blogger.com/atom/ns#" term="anecdote" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title>Riddle: When isn't free space free?</title><content type="html">So tonight I discovered my hard drive was slowly being choked by some mysterious process writing gigs and gigs to it. So I moved 75GB of files to an external drive only to come back a few hours later and discover my free space was back down to 23 GB.&lt;br /&gt;
&lt;br /&gt;
Where did 50 GB of files come from in just a few hours!?&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Idea #1&lt;/h2&gt;&lt;h3&gt;Rogue process downloading large files...*cough*iTunes*cough*&lt;/h3&gt;I had &lt;a href="http://www.netuseapp.com/"&gt;NetUse Traffic Monitor&lt;/a&gt; running and it clearly showed that there was definitely not 50 GB of downloads in that time period.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Idea #2&lt;/h2&gt;&lt;h3&gt;Rogue process writing lots of log files&lt;/h3&gt;In my investigation of what to move to the external drive I used &lt;a href="http://grandperspectiv.sourceforge.net/"&gt;GrandPerspective&lt;/a&gt; to get a visualization and catalog of what was on my drive. Thankfully I hadn't closed that window so I could rescan and compare what had changed. &amp;nbsp;Here's the next head scratcher, it showed only a 4 GB total difference in used space between the two scans.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Idea #3&lt;/h2&gt;&lt;h3&gt;It was something on my wife's side which GrandPerspective couldn't see since it didn't have permissions to her files.&lt;/h3&gt;Nope, she only had 24 GB of files on her side.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Idea #4&lt;/h2&gt;&lt;h3&gt;Google for "mysterious hard drive full"&lt;/h3&gt;Surprisingly this got me some new ideas, like it was hidden files, or bad Time Machine backups to a non-existent external drive. Sadly they were not the problem. I even found &lt;a href="http://mac.elated.com/2007/12/08/mystery-of-the-disappearing-disk-space/"&gt;someone with the same problem but no solution&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Idea #5&lt;/h2&gt;&lt;h3&gt;Run 'du' to show what GrandPerspective can't see&lt;/h3&gt;A this point I realized that GrandPerspective was reporting 104GB of "miscellaneous used space". So Googling for more info, one of the &lt;a href="https://discussions.apple.com/thread/2368954?start=0&amp;amp;tstart=0"&gt;posts I stumbled on&lt;/a&gt; lead me to a page about &lt;a href="http://www.pinkmutant.com/articles/TigerMisc.html"&gt;Mac OSX Tiger Problems&lt;/a&gt; which introduced me to the BSD disk usage command 'du'. So it seemed like a lower-level command that would take some time, but would show me what GrandPerspective supposedly couldn't. Sadly it didn't and agreed with GrandPerspective that 804GB of my 931GB drive were being used while 'df -kh' agreed with the Finder that only 23GB were free. So four tools were giving me two different answers, that I had either 23GB free or 127GB free depending on which you asked.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Idea #6&lt;/h2&gt;&lt;h3&gt;Ask Google why 'du' and 'dk' can give different answers.&lt;/h3&gt;Sure enough, Google had an answer to &lt;a href="http://www.cyberciti.biz/tips/freebsd-why-command-df-and-du-reports-different-output.html"&gt;why 'du' and 'dk' can differ&lt;/a&gt;. Turns out a process can hold onto a deleted file and the file will be unaccounted but the disk space will still be considered used. So at this point I gave in (sorry, never figured out who the offender was) and restarted my computer. Sure enough, after the Finder came back up...I had magically cleared up nearly 87 GB of hard drive space.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Moral of the story&lt;/h2&gt;Try restarting first, even for disk free space issues apparently. #facepalm&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=bpqvZiM-ORI:QXJCvft8FrQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=bpqvZiM-ORI:QXJCvft8FrQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=bpqvZiM-ORI:QXJCvft8FrQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=bpqvZiM-ORI:QXJCvft8FrQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=bpqvZiM-ORI:QXJCvft8FrQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=bpqvZiM-ORI:QXJCvft8FrQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=bpqvZiM-ORI:QXJCvft8FrQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/bpqvZiM-ORI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/1267434571350481804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=1267434571350481804" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/1267434571350481804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/1267434571350481804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/bpqvZiM-ORI/riddle-when-isnt-free-space-free.html" title="Riddle: When isn't free space free?" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>19 Valley Field Rd S, Sandy Hook, CT 06482, USA</georss:featurename><georss:point>41.434096 -73.29517</georss:point><georss:box>41.432607999999995 -73.2976375 41.435584 -73.2927025</georss:box><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2012/02/riddle-when-isnt-free-space-free.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIEQ3g9fip7ImA9WhRVGU8.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-7579546222626880357</id><published>2012-01-18T08:15:00.001-05:00</published><updated>2012-01-18T16:01:42.666-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-18T16:01:42.666-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="project" /><title>For that rant you read...</title><content type="html">Yesterday, I saw a stranger ranting about how my local town doesn't consistently use their call system to notify people of snow delays. He then went on to list at least four other alternative sources he could choose from and was finally "forced" to find out from the local TV station.&lt;br /&gt;
&lt;br /&gt;
His rant was amusing because it reminded me of the comic Louis CK's bit about how everything is amazing, yet nobody's happy. It got me thinking that I wish someone had created a landing page that I could link a ranter like this guy to. Something in a similar tone to &lt;a href="http://dearrecruiters.com/"&gt;http://dearrecruiters.com&lt;/a&gt; and &lt;a href="http://lmgtfy.com/"&gt;http://lmgtfy.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
So that's what I did last night, I created &lt;a href="http://yourenothappy.com/"&gt;http://yourenothappy.com&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=260pZ7uglu4:gfTaJBd_Uyo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=260pZ7uglu4:gfTaJBd_Uyo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=260pZ7uglu4:gfTaJBd_Uyo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=260pZ7uglu4:gfTaJBd_Uyo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=260pZ7uglu4:gfTaJBd_Uyo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=260pZ7uglu4:gfTaJBd_Uyo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=260pZ7uglu4:gfTaJBd_Uyo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/260pZ7uglu4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/7579546222626880357/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=7579546222626880357" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/7579546222626880357?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/7579546222626880357?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/260pZ7uglu4/for-that-rant-you-read.html" title="For that rant you read..." /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2012/01/for-that-rant-you-read.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04NRnk7fyp7ImA9WhJREU8.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-6919763244267581173</id><published>2011-10-10T13:50:00.000-04:00</published><updated>2012-07-12T16:46:37.707-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-12T16:46:37.707-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="foursquare" /><category scheme="http://www.blogger.com/atom/ns#" term="espn" /><category scheme="http://www.blogger.com/atom/ns#" term="identity" /><category scheme="http://www.blogger.com/atom/ns#" term="family" /><category scheme="http://www.blogger.com/atom/ns#" term="getglue" /><category scheme="http://www.blogger.com/atom/ns#" term="zynga" /><category scheme="http://www.blogger.com/atom/ns#" term="feel_good" /><category scheme="http://www.blogger.com/atom/ns#" term="apple" /><title>A year like no other</title><content type="html">Today is a significant marker in my life, the first anniversary of the passing of my mother-in-law. Her death was sudden and I was unprepared for it.  While shocked and sad, after the week of mourning was over, I expected life to return to normal quickly. In many ways it did, but in retrospect I'm amazed at how much flux there was throughout the following year.&lt;br /&gt;
&lt;br /&gt;
In hindsight, I now see how depressed I was for several months after her death. It feels silly to say that, since I'm generally a happy person. The idea of me being depressed for a day let alone a month feels very out of character. But I was and it affected the decisions I made and blurred my focus, both personally and professionally. I've been searching during most of the past twelve months and it took a while to find myself again, as my wife has so patiently endured.&lt;br /&gt;
&lt;br /&gt;
My productivity at work took a nose dive for a while, partially because I became extremely disinterested in what I was working on. My disinterest led me to entertain notions of leaving ESPN. As the old cliche goes, I started thinking about what I wanted to do with the rest of my own life. I considered starting my own company and began working to that end. Around the same time I was contacted by Zynga, best known for the Farmville and Mafia Wars games on Facebook. I was flattered but the idea that I'd pickup my family and move seemed a bit crazy, so my thoughts turned to, "well if I'm really considering this, what is exciting in the network of people I already have and commutable?" This led to a string of interviews in the city at some great places like GetGlue and foursquare.&lt;br /&gt;
&lt;br /&gt;
The interesting thing is that these interviews, while they didn't lead to job offers they led to other interviews. My interview at foursquare led to an interview at  a &lt;a href="https://www.brewster.com/"&gt;stealth-mode startup&lt;/a&gt;. And that interview led to another interview where I got an job offer. In the end I didn't accept that offer but it's been a surreal ride to experience how the NYC tech startup scene works and how tightly-knit it is. The connections I've made have been pretty amazing, and I hope they will end up helping me someday when I start my own company. But that's for another year...let me continue.&lt;br /&gt;
&lt;br /&gt;
While all this was going on, I got an interview request from Apple. That ride took me from a clandestine interview hidden away in a New York hotel, to a trip to the Cupertino mothership, all the way to a job offer that nearly turned my family's world upside-down. We were "this" close to uprooting my wife and kids to the Bay Area, a continent away from everything we had ever known. In the end, leaving everyone we had ever known was too great a hardship to accept, and that was one of the biggest lessons I learned this year.  I took me quite a few extra months to learn it after I began reflecting on my own mortality, but for me, family and friends are too important to allow ambition to pull me away from them. I would have loved to have worked at Apple, lived in California, and have that notch on my resume, but I love seeing my kids playing with their grandparents more.&lt;br /&gt;
&lt;br /&gt;
So though my path doesn't lead to One Infinite Loop, it doesn't mean my ambition has ended with that journey. I can take an East Coast path to get where I want to go. Amazingly, it looks like that path stays at ESPN. On the exact same day, actually in the same hour that I got my offer from Apple, I got news that ESPN wanted to create the role for me that I had been asking for for years, as a build engineer. I started that new role last week, and I haven't been this happy professionally in a while. It's exactly where I want to be right now, which brings me to my second cliched lesson, everything happens for a reason. If things had played out differently, I would not have been at ESPN to accept the new role.&lt;br /&gt;
&lt;br /&gt;
With all that happened, Joanne hasn't been out of my thoughts for very long. I miss her, and I hope she is at peace. I know that right now, I am too.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=19BSA2TqJSE:0ftYlBecReo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=19BSA2TqJSE:0ftYlBecReo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=19BSA2TqJSE:0ftYlBecReo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=19BSA2TqJSE:0ftYlBecReo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=19BSA2TqJSE:0ftYlBecReo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=19BSA2TqJSE:0ftYlBecReo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=19BSA2TqJSE:0ftYlBecReo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/19BSA2TqJSE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/6919763244267581173/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=6919763244267581173" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/6919763244267581173?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/6919763244267581173?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/19BSA2TqJSE/year-like-no-other.html" title="A year like no other" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><georss:featurename>Home</georss:featurename><georss:point>41.434096 -73.29517</georss:point><georss:box>41.432607999999995 -73.2976375 41.435584 -73.2927025</georss:box><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/10/year-like-no-other.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMGSXc-eip7ImA9WhdVEU0.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-4057496765178969881</id><published>2011-09-15T11:24:00.000-04:00</published><updated>2011-09-15T11:27:08.952-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-15T11:27:08.952-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="best_practices" /><category scheme="http://www.blogger.com/atom/ns#" term="slf4j" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Simplifying logging with Maven and SLF4J (Part 2)</title><content type="html">So in my&amp;nbsp;&lt;a href="http://jaxzin.com/2010/09/simplifying-logging-with-maven-and.html"&gt;previous post&lt;/a&gt;&amp;nbsp;I explained how to simplify your logging with Maven and SLF4J. If you haven't read it yet, please do before reading more. &amp;nbsp;Since then I've discovered an easier and cleaner way to remove the secondary frameworks from your Maven dependency tree. &lt;br /&gt;
&lt;br /&gt;
Here's a revised overview of the steps:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Decided which logging framework will be your primary, aka who will actually write to your log file.&lt;/li&gt;
&lt;li&gt;Define the dependency scope of all the secondary frameworks to be '&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;provided&lt;/span&gt;'.&lt;/li&gt;
&lt;li&gt;Configure your project to depend on &lt;a href="http://slf4j.org/legacy.html"&gt;drop-in replacements&lt;/a&gt; of each secondary framework from SLF4J.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;h3&gt;Define secondary frameworks as provided&lt;/h3&gt;
&lt;br /&gt;
Use the dependencyManagement section for this. Its used when you might have a dependency transitively.
&lt;br /&gt;
&lt;script src="https://gist.github.com/1219531.js?file=gistfile1.xml"&gt;
&lt;/script&gt;
&lt;h3&gt;
Add dependency on SLF4J&lt;/h3&gt;
&lt;div&gt;
Add the following to your pom.xml&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;script src="https://gist.github.com/929283.js?file=gistfile1.xml"&gt;
&lt;/script&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
Conclusion&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So now in only 3 steps you can redirect all your logging to your primary logging framework without changing a line of code!&lt;/div&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=8h2Dw4ApBUQ:c9sxlQn6jGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=8h2Dw4ApBUQ:c9sxlQn6jGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=8h2Dw4ApBUQ:c9sxlQn6jGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=8h2Dw4ApBUQ:c9sxlQn6jGk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=8h2Dw4ApBUQ:c9sxlQn6jGk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=8h2Dw4ApBUQ:c9sxlQn6jGk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=8h2Dw4ApBUQ:c9sxlQn6jGk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/8h2Dw4ApBUQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/4057496765178969881/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=4057496765178969881" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/4057496765178969881?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/4057496765178969881?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/8h2Dw4ApBUQ/simplifying-logging-with-maven-and.html" title="Simplifying logging with Maven and SLF4J (Part 2)" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/09/simplifying-logging-with-maven-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UBQHk8cCp7ImA9WhdQEUw.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-8674839023878825013</id><published>2011-08-11T22:03:00.004-04:00</published><updated>2011-08-11T22:14:11.778-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T22:14:11.778-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oss" /><category scheme="http://www.blogger.com/atom/ns#" term="github" /><title>Newly open source</title><content type="html">Well its about 10 years too late for some of this stuff but I figured I'd open the source to my dead projects I have lying around.  Some are pretty raw, like my flocking applet from a college course, while others are completely functional and dare I say beautiful code, like my X10 Java library.&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/jaxzin/FlockingApplet"&gt;FlockingApplet&lt;/a&gt; - a graphical applet that simulates the flocking behavior of birds.&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/jaxzin/handlecheck"&gt;handlecheck&lt;/a&gt; - a web app that searches the web to see if your favorite username is taken.&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/jaxzin/gwt-common-widgets"&gt;gwt-common-widgets&lt;/a&gt; - a collection of Google Web Toolkit widgets&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/jaxzin/x10-java"&gt;x10-java&lt;/a&gt; - a Java library for home automation.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=qWg5MeZebeY:N_f_X2DL72s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=qWg5MeZebeY:N_f_X2DL72s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=qWg5MeZebeY:N_f_X2DL72s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=qWg5MeZebeY:N_f_X2DL72s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=qWg5MeZebeY:N_f_X2DL72s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=qWg5MeZebeY:N_f_X2DL72s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=qWg5MeZebeY:N_f_X2DL72s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/qWg5MeZebeY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/8674839023878825013/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=8674839023878825013" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8674839023878825013?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8674839023878825013?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/qWg5MeZebeY/newly-open-source.html" title="Newly open source" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/08/newly-open-source.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08DRHw4eSp7ImA9WhdSGEg.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-1325076594279383304</id><published>2011-07-28T09:24:00.004-04:00</published><updated>2011-07-28T09:31:15.231-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-28T09:31:15.231-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="parenthood" /><category scheme="http://www.blogger.com/atom/ns#" term="trends" /><category scheme="http://www.blogger.com/atom/ns#" term="family" /><category scheme="http://www.blogger.com/atom/ns#" term="tv" /><title>Parental Controls - The V-chip of 2011</title><content type="html">&lt;span&gt;I've done something that I swore I'd never do, I've set ratings limits on my TV. As a kid/teen/young adult I swore I'd never use the V-chip on my kids. My thought was, how can you not be around to see what your kids are watching that you need to lock down your TV!? Now with the wisdom of 5 years as a parent, I can't watch my kids every second of the day, and for that 30 seconds I leave them to go to the bathroom, they somehow always turn on Wanted or 300 or Zombieland or _____(fill in the blank with a rated R movie I own). My 20 year old self would be very disappointed, but my 33 year old self says "You don't know what you're talking about." (P.S. He'd totally be geeking out our setup at my house though with our iMac-based home media server with 150 GB of movies played via a settop box (AppleTV) on an HDTV.  1998 Brian thinks that's AWESOME!)&lt;/span&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=kHsQ5n5xXCs:nJNf_XWX4VU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=kHsQ5n5xXCs:nJNf_XWX4VU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=kHsQ5n5xXCs:nJNf_XWX4VU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=kHsQ5n5xXCs:nJNf_XWX4VU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=kHsQ5n5xXCs:nJNf_XWX4VU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=kHsQ5n5xXCs:nJNf_XWX4VU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=kHsQ5n5xXCs:nJNf_XWX4VU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/kHsQ5n5xXCs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/1325076594279383304/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=1325076594279383304" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/1325076594279383304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/1325076594279383304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/kHsQ5n5xXCs/parental-controls-v-chip-of-2011.html" title="Parental Controls - The V-chip of 2011" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/07/parental-controls-v-chip-of-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04NQ3w4fSp7ImA9WhZXE0g.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-5197486839024257513</id><published>2011-04-30T21:59:00.002-04:00</published><updated>2011-05-02T13:06:32.235-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-02T13:06:32.235-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="instagram" /><category scheme="http://www.blogger.com/atom/ns#" term="posterous" /><title>Tonight's project: Motor shield, assembled! Sadly no motors yet, but it makes the servo easier to use!</title><content type="html">&lt;div class='posterous_autopost'&gt;&lt;a href="http://instagr.am/p/DunPt/"&gt;&lt;div class='p_embed p_image_embed'&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/jaxzin/jFCiIBslvaeBIDIzFAntAIbxrcnGmzlczqfDHAszvwrwlwxeGnEsiAkndwlD/media_httpimagesinsta_dceHr.jpg.scaled1000.jpg"&gt;&lt;img alt="Media_httpimagesinsta_dcehr" height="500" src="http://posterous.com/getfile/files.posterous.com/jaxzin/jFCiIBslvaeBIDIzFAntAIbxrcnGmzlczqfDHAszvwrwlwxeGnEsiAkndwlD/media_httpimagesinsta_dceHr.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/a&gt;&lt;br /&gt;Taken at The Jacksons'&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=JMUF7629O74:fbpjKo0XBOg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=JMUF7629O74:fbpjKo0XBOg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=JMUF7629O74:fbpjKo0XBOg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=JMUF7629O74:fbpjKo0XBOg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=JMUF7629O74:fbpjKo0XBOg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=JMUF7629O74:fbpjKo0XBOg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=JMUF7629O74:fbpjKo0XBOg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/JMUF7629O74" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/5197486839024257513/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=5197486839024257513" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/5197486839024257513?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/5197486839024257513?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/JMUF7629O74/tonight-project-motor-shield-assembled.html" title="Tonight&amp;#39;s project: Motor shield, assembled! Sadly no motors yet, but it makes the servo easier to use!" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/04/tonight-project-motor-shield-assembled.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFQXo5cCp7ImA9WhZXE0g.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-4995879221750124260</id><published>2011-04-27T22:22:00.002-04:00</published><updated>2011-05-02T13:06:50.428-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-02T13:06:50.428-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="instagram" /><category scheme="http://www.blogger.com/atom/ns#" term="posterous" /><title>Tonight's project: Color LCD shield, assembled!</title><content type="html">&lt;div class='posterous_autopost'&gt;&lt;a href="http://instagr.am/p/Dnthr/"&gt;&lt;div class='p_embed p_image_embed'&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/jaxzin/CrzlrHqxDooavGkisBagkAjihxFgJnjgFdbqookJkigbhBqxgAbaJuuwuxJI/media_httpimagesinsta_vltfl.jpg.scaled1000.jpg"&gt;&lt;img alt="Media_httpimagesinsta_vltfl" height="500" src="http://posterous.com/getfile/files.posterous.com/jaxzin/CrzlrHqxDooavGkisBagkAjihxFgJnjgFdbqookJkigbhBqxgAbaJuuwuxJI/media_httpimagesinsta_vltfl.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/a&gt;&lt;br /&gt;Taken at The Jacksons'&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=O2erBQ1gvUk:Cvjn7arSFw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=O2erBQ1gvUk:Cvjn7arSFw8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=O2erBQ1gvUk:Cvjn7arSFw8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=O2erBQ1gvUk:Cvjn7arSFw8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=O2erBQ1gvUk:Cvjn7arSFw8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=O2erBQ1gvUk:Cvjn7arSFw8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=O2erBQ1gvUk:Cvjn7arSFw8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/O2erBQ1gvUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/4995879221750124260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=4995879221750124260" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/4995879221750124260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/4995879221750124260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/O2erBQ1gvUk/tonight-project-color-lcd-shield.html" title="Tonight&amp;#39;s project: Color LCD shield, assembled!" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/04/tonight-project-color-lcd-shield.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMBQH85fyp7ImA9WhZQFEk.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-5731629283038958809</id><published>2011-04-21T21:42:00.002-04:00</published><updated>2011-04-21T23:20:51.127-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T23:20:51.127-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="instagram" /><category scheme="http://www.blogger.com/atom/ns#" term="posterous" /><title>My first Arduino shield, assembled! The Protoshield</title><content type="html">&lt;div class='posterous_autopost'&gt;&lt;a href="http://instagr.am/p/DZN9T/"&gt;&lt;div class='p_embed p_image_embed'&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/jaxzin/fgoduEEdyDIjDABcaynAAiiwmEhpvIvAoDzFECHezyunmmkbFFAznInmhacE/media_httpimagesinsta_vAyek.jpg.scaled1000.jpg"&gt;&lt;img alt="Media_httpimagesinsta_vayek" height="500" src="http://posterous.com/getfile/files.posterous.com/jaxzin/fgoduEEdyDIjDABcaynAAiiwmEhpvIvAoDzFECHezyunmmkbFFAznInmhacE/media_httpimagesinsta_vAyek.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/a&gt;&lt;br /&gt;Taken at The Jacksons'&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=b0r5tWaiubA:7yOd_Va7rDY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=b0r5tWaiubA:7yOd_Va7rDY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=b0r5tWaiubA:7yOd_Va7rDY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=b0r5tWaiubA:7yOd_Va7rDY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=b0r5tWaiubA:7yOd_Va7rDY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=b0r5tWaiubA:7yOd_Va7rDY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=b0r5tWaiubA:7yOd_Va7rDY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/b0r5tWaiubA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/5731629283038958809/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=5731629283038958809" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/5731629283038958809?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/5731629283038958809?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/b0r5tWaiubA/my-first-arduino-shield-assembled.html" title="My first Arduino shield, assembled! The Protoshield" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/04/my-first-arduino-shield-assembled.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIFQXY9eSp7ImA9WhZQFEk.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-7811496763378056754</id><published>2011-04-07T12:00:00.002-04:00</published><updated>2011-04-21T23:21:50.861-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T23:21:50.861-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="instagram" /><category scheme="http://www.blogger.com/atom/ns#" term="posterous" /><category scheme="http://www.blogger.com/atom/ns#" term="food" /><title>Buffalo Pretzel Chips, the greatest snack ever and they sell them at the Cafe. Dangerous...</title><content type="html">&lt;div class='posterous_autopost'&gt;&lt;a href="http://instagr.am/p/C6tNM/"&gt;&lt;div class='p_embed p_image_embed'&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/jaxzin/lntFvhDbFqsjDEkabufoehrbCajjexupgoJwBFnjFixctfcCEbJBedwxckru/media_httpimagesinsta_zxspE.jpg.scaled1000.jpg"&gt;&lt;img alt="Media_httpimagesinsta_zxspe" height="500" src="http://posterous.com/getfile/files.posterous.com/jaxzin/lntFvhDbFqsjDEkabufoehrbCajjexupgoJwBFnjFixctfcCEbJBedwxckru/media_httpimagesinsta_zxspE.jpg.scaled500.jpg" width="500" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;/a&gt;&lt;br /&gt;Taken at ESPN Building 4&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=NJw7IdV_kNE:NiZp-qYyAYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=NJw7IdV_kNE:NiZp-qYyAYo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=NJw7IdV_kNE:NiZp-qYyAYo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=NJw7IdV_kNE:NiZp-qYyAYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=NJw7IdV_kNE:NiZp-qYyAYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=NJw7IdV_kNE:NiZp-qYyAYo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=NJw7IdV_kNE:NiZp-qYyAYo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/NJw7IdV_kNE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/7811496763378056754/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=7811496763378056754" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/7811496763378056754?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/7811496763378056754?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/NJw7IdV_kNE/buffalo-pretzel-chips-greatest-snack.html" title="Buffalo Pretzel Chips, the greatest snack ever and they sell them at the Cafe. Dangerous..." /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/04/buffalo-pretzel-chips-greatest-snack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIBQnszfip7ImA9WhZQFEk.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-543000490537448685</id><published>2011-02-25T14:48:00.002-05:00</published><updated>2011-04-21T23:22:33.586-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-21T23:22:33.586-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="go_kart" /><category scheme="http://www.blogger.com/atom/ns#" term="play" /><category scheme="http://www.blogger.com/atom/ns#" term="feel_good" /><category scheme="http://www.blogger.com/atom/ns#" term="posterous" /><title>Go-Kart Racing in Mt Kisco!</title><content type="html">&lt;div class='posterous_autopost'&gt;&lt;p&gt;Self-explanatory....&lt;/p&gt;  &lt;p&gt;  &lt;object height="224" width="400"&gt;  &lt;param name="allowfullscreen" value="true" /&gt;  &lt;param name="movie" value="http://www.facebook.com/v/10150112872392402" /&gt;&lt;embed src="http://www.facebook.com/v/10150112872392402" type="application/x-shockwave-flash" height="224" width="400"&gt;&lt;/embed&gt;  &lt;/object&gt;  &lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=TShk-5MI4eU:RLCDXcjPANk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=TShk-5MI4eU:RLCDXcjPANk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=TShk-5MI4eU:RLCDXcjPANk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=TShk-5MI4eU:RLCDXcjPANk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=TShk-5MI4eU:RLCDXcjPANk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=TShk-5MI4eU:RLCDXcjPANk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=TShk-5MI4eU:RLCDXcjPANk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/TShk-5MI4eU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/543000490537448685/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=543000490537448685" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/543000490537448685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/543000490537448685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/TShk-5MI4eU/go-kart-racing-in-mt-kisco.html" title="Go-Kart Racing in Mt Kisco!" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/02/go-kart-racing-in-mt-kisco.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIDQHY4eCp7ImA9Wx9VFks.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-8816103450160842588</id><published>2011-02-02T11:59:00.008-05:00</published><updated>2011-02-02T12:09:31.830-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T12:09:31.830-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="infographic" /><category scheme="http://www.blogger.com/atom/ns#" term="best_practices" /><category scheme="http://www.blogger.com/atom/ns#" term="versioning" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Best Practices with Maven: Versioning your Artifacts</title><content type="html">&lt;div&gt;I realized today that I had made this nice flowchart about two years ago of how I decide when to add qualifiers and increment version numbers, but I never shared it anywhere very useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is heavily based on the &lt;a href="http://docs.codehaus.org/display/MAVEN/Versioning"&gt;version numbering scheme&lt;/a&gt; that Maven inherently understands.  You should also checkout the excellent &lt;a href="http://mojo.codehaus.org/versions-maven-plugin/version-rules.html"&gt;versions plugin for Maven&lt;/a&gt; that include some great utilities for upgrading your plugins and dependencies.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_QEB9c0qhMLs/TUmN54ZKnfI/AAAAAAAAACY/6fg4ZyyXuOM/s1600/version_numbering.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 260px;" src="http://1.bp.blogspot.com/_QEB9c0qhMLs/TUmN54ZKnfI/AAAAAAAAACY/6fg4ZyyXuOM/s400/version_numbering.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5569138439750327794" /&gt;&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=hJC131hEuv8:5-nk_zlYkH8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=hJC131hEuv8:5-nk_zlYkH8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=hJC131hEuv8:5-nk_zlYkH8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=hJC131hEuv8:5-nk_zlYkH8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=hJC131hEuv8:5-nk_zlYkH8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=hJC131hEuv8:5-nk_zlYkH8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=hJC131hEuv8:5-nk_zlYkH8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/hJC131hEuv8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/8816103450160842588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=8816103450160842588" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8816103450160842588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8816103450160842588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/hJC131hEuv8/best-practices-with-maven-versioning.html" title="Best Practices with Maven: Versioning your Artifacts" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_QEB9c0qhMLs/TUmN54ZKnfI/AAAAAAAAACY/6fg4ZyyXuOM/s72-c/version_numbering.png" height="72" width="72" /><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/02/best-practices-with-maven-versioning.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUADQn4-eip7ImA9Wx9VFkw.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-1288478860527841069</id><published>2011-02-01T20:03:00.007-05:00</published><updated>2011-02-01T21:29:33.052-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-01T21:29:33.052-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oss" /><category scheme="http://www.blogger.com/atom/ns#" term="teamcity" /><category scheme="http://www.blogger.com/atom/ns#" term="github" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="continuous integration" /><title>TeamCity build triggering by GitHub</title><content type="html">So I started using &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt; for a side project and discovered their very cool feature of service hooks.  A &lt;a href="http://help.github.com/post-receive-hooks/"&gt;service hook&lt;/a&gt; allows a repository administrator to setup a callback to another service when a commit is made to the repository.  For example it can send an email, or chat a message via Jabber.&lt;br /&gt;&lt;br /&gt;Now continuous integration servers, like &lt;a href="http://jetbrains.com/teamcity/"&gt;TeamCity&lt;/a&gt;, can poll source control systems every few minutes to see if any changes have been committed.  But wouldn't it be more efficient to use a service hook to trigger a build?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Looking at GitHub's service hooks, there wasn't one already available to callback a TeamCity server, but right on that same page was a link to the open source repository for &lt;a href="https://github.com/github/github-services"&gt;GitHub Service Hooks&lt;/a&gt;. They "eat their own dogfood" so to speak and make it very easy to contribute new service hooks back to them.  So I took an evening, did my first &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; coding in a while which included more time getting Ruby setup and working on my Macbook than actually coding. In a few hours I had committed a TeamCity service hook to my fork of the project and &lt;a href="https://github.com/github/github-services/pull/47"&gt;requested them to pull the changes&lt;/a&gt; from my fork.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After just a few hours the pull was completed and the changes were in production, wow!  Turned out I had a few bugs and it took some back and forth to get it all ironed out, but its now available as a working service hook at GitHub!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;How to use the TeamCity service hook&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Begin by creating a new account on your TeamCity host.  Since this account will be used to kick-off the builds, its best to name it something like "GitHub Service Hook" so your developers will understand the build history when they see "Triggered by GitHub Service Hook".  Note the username and password you create as it will be used later.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, navigate to your GitHub repository and look for the Admin button and click it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://lh4.ggpht.com/_QEB9c0qhMLs/TUi7vCgX4LI/AAAAAAAAABc/Ywq7-0aUfMI/s800/admin_button.png" /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Select "Service Hooks" from the left sidebar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://lh5.ggpht.com/_QEB9c0qhMLs/TUi9Jdx39TI/AAAAAAAAACA/QYNQXUIlVIg/s800/service_hooks_menuitem.png" /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Select "TeamCity" from the submenu.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://lh4.ggpht.com/_QEB9c0qhMLs/TUi9Jm9dPDI/AAAAAAAAACM/y6x1z-VoUtg/s800/teamcity_menuitem_disabled.png" /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;In the form that appears, enter &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;the url to your TeamCity server (which can contain a path in the url if you run it on a shared host).&lt;/li&gt;&lt;li&gt;the build type ID which you can find in the address bar when you are on TeamCity and looking at the build you want to trigger (ex. "...?buildTypeId=bt123&amp;amp;...", in this example the ID is "bt123").&lt;/li&gt;&lt;li&gt;the username of the GitHub Service Hook user you created.&lt;/li&gt;&lt;li&gt;the password of the GitHub Service Hook user you created.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://lh3.ggpht.com/_QEB9c0qhMLs/TUi9JZxxMdI/AAAAAAAAACE/Dq9eoCjpbIk/s800/teamcity_form_notest.png" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once you press "Update Settings", the page will refresh and you should see the "TeamCity" sub menu item change to have a green dot.&lt;/div&gt;&lt;img src="http://lh5.ggpht.com/_QEB9c0qhMLs/TUi9Jnba4dI/AAAAAAAAACI/_z5DoE6-vWY/s800/teamcity_menuitem_active.png" /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you select "TeamCity" again, the form will reappear with a new "Test Hook" button.  Press this and it will manually trigger the build with the information you entered.&lt;/div&gt;&lt;img src="http://lh4.ggpht.com/_QEB9c0qhMLs/TUi9MpwRxgI/AAAAAAAAACU/jAycq_qs4hs/s800/testhook_button.png" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next time you push new commits to your GitHub repository, GitHub will trigger your TeamCity build!&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=88-3VPVOwx0:Qh5M0FzxiDY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=88-3VPVOwx0:Qh5M0FzxiDY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=88-3VPVOwx0:Qh5M0FzxiDY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=88-3VPVOwx0:Qh5M0FzxiDY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=88-3VPVOwx0:Qh5M0FzxiDY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=88-3VPVOwx0:Qh5M0FzxiDY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=88-3VPVOwx0:Qh5M0FzxiDY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/88-3VPVOwx0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/1288478860527841069/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=1288478860527841069" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/1288478860527841069?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/1288478860527841069?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/88-3VPVOwx0/teamcity-build-triggering-by-github.html" title="TeamCity build triggering by GitHub" /><author><name>Brian Jackson</name><uri>https://plus.google.com/111551702129959743024</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-dCcJXLHTEv4/AAAAAAAAAAI/AAAAAAAAE-Y/4oVnaFIINMY/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_QEB9c0qhMLs/TUi7vCgX4LI/AAAAAAAAABc/Ywq7-0aUfMI/s72-c/admin_button.png" height="72" width="72" /><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/02/teamcity-build-triggering-by-github.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ESXg9cSp7ImA9WhZaE0U.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-8360963433254801310</id><published>2011-01-28T22:09:00.002-05:00</published><updated>2011-06-29T16:53:28.669-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-29T16:53:28.669-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="space" /><category scheme="http://www.blogger.com/atom/ns#" term="family" /><title>25 Years, A Moment in Time</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.orlandosentinel.com/entertainment_tv_tvblog/files/2011/01/PX00153_911.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 167px; height: 256px;" src="http://blogs.orlandosentinel.com/entertainment_tv_tvblog/files/2011/01/PX00153_911.jpg" alt="" border="0" /&gt;&lt;/a&gt;"Daddy, what happened?"&lt;br /&gt;"It blew up, honey."&lt;br /&gt;&lt;br /&gt;My sister was five and she was the first speak.  I was seven and knew I was going to be an astronaut. We were in Florida on vacation and the shuttle was supposed to launch while we were there. My awesome parents drove us from our condo in North Palm Beach to the Cape, not once, not twice but three days in a row as the launch continued to get scrubbed due to cold weather.&lt;br /&gt;&lt;br /&gt;I remember the instant the shuttle blew up, watching it from the side of a nearby roadway, and I knew exactly what happened.  I remember the crowd gasp.  And I remember my sister pulling at my father's arm and being the first in the crowd to say anything.  I remember being annoyed, as most typical seven-year old brothers tend to get, when she asked a question I knew the answer to. I remember the look on my parents' face. I remember feeling sad. But most importantly,  I remember how proud I felt and how much more I wanted to be an astronaut that day.&lt;br /&gt;&lt;br /&gt;Today, I reflected on how did being there affect my life.  Most obviously it kept my passion for space alive and two years later, in July of 1988, I went to SpaceCamp. Later, as I neared the time to begin planning what I would do after high school, my parents spent countless hours researching the path to NASA including how to become an Air Force pilot and how they could get me the most prestigious recommendation they could to earn me entry into the Air Force Academy. In the end I didn't choose that path and instead chose a path into computer science, thanks mainly to the effect of Jurassic Park.&lt;br /&gt;&lt;br /&gt;Reflecting on the "what-if" of becoming an astronaut, as a now parent of two, I'm blown away by what my parents tried to accomplish for me. What an amazing thing, to have someone on this Earth who would go to any lengths possible to get you the right foundation to make your dreams come true instead of to laugh and scoff and say "sure Brian, an astronaut". And I'm blessed to have two, and now for the past decade I've had a third person too.&lt;br /&gt;&lt;br /&gt;The other thing I've realized is the coincidence that this year is the 25th anniversary of that day, and also the year the space shuttle program will end. As my wife and parents know, for the past few months I've made it clear that I will be taking Penelope down to Florida to see the next and penultimate space shuttle launch. If Wally was older and able to appreciate it I'd bring him too because I want my kids to experience, at least once, the wonder of watching a manned spacecraft launch to the heavens and the imagination it sparks with that tangible discovery that anything really is possible. The symmetry that mine and Penelope's first launch will be 25 years apart had escaped me until today and the thought is bittersweet because who knows when, or if, she and Wally might see another launch of a manned mission to space.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=ScIud0O_gWo:s3pigegT9T4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=ScIud0O_gWo:s3pigegT9T4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=ScIud0O_gWo:s3pigegT9T4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=ScIud0O_gWo:s3pigegT9T4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=ScIud0O_gWo:s3pigegT9T4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=ScIud0O_gWo:s3pigegT9T4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=ScIud0O_gWo:s3pigegT9T4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/ScIud0O_gWo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/8360963433254801310/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=8360963433254801310" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8360963433254801310?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8360963433254801310?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/ScIud0O_gWo/25-years-moment-in-time.html" title="25 Years, A Moment in Time" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2011/01/25-years-moment-in-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMHSHk6eyp7ImA9Wx9RFk0.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-9023194368755182625</id><published>2010-12-17T12:53:00.001-05:00</published><updated>2010-12-17T12:53:59.713-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-17T12:53:59.713-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="nsfw" /><category scheme="http://www.blogger.com/atom/ns#" term="search" /><category scheme="http://www.blogger.com/atom/ns#" term="vulgar" /><category scheme="http://www.blogger.com/atom/ns#" term="trends" /><category scheme="http://www.blogger.com/atom/ns#" term="ngram" /><title>Trends of Vulger Phrases</title><content type="html">&lt;div class='posterous_autopost'&gt;&lt;p&gt;Of course my mind first goes to &lt;a href="http://ngrams.googlelabs.com/graph?content=what+the+fuck,son+of+a+bitch,bloody+hell,you+suck,motherfucker&amp;amp;year_start=1800&amp;amp;year_end=2010&amp;amp;corpus=0&amp;amp;smoothing=3" title="typing vulgar phrases"&gt;typing vulgar phrases&lt;/a&gt; into Google's new N-gram Viewer but the results were pretty neat.&lt;/p&gt;  &lt;p&gt;&lt;a href='http://posterous.com/getfile/files.posterous.com/temp-2010-12-17/ruqbfCjjgnbIjHvyGCfqqsfghowoDyqJzcAhumqlCtaxiirbaAieHnuyvhgk/NgramVulgarities.png.scaled1000.png'&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2010-12-17/ruqbfCjjgnbIjHvyGCfqqsfghowoDyqJzcAhumqlCtaxiirbaAieHnuyvhgk/NgramVulgarities.png.scaled500.png" width="500" height="351"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=jFpoJOj63wg:wli14zTVf9g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=jFpoJOj63wg:wli14zTVf9g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=jFpoJOj63wg:wli14zTVf9g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=jFpoJOj63wg:wli14zTVf9g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=jFpoJOj63wg:wli14zTVf9g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=jFpoJOj63wg:wli14zTVf9g:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=jFpoJOj63wg:wli14zTVf9g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/jFpoJOj63wg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/9023194368755182625/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=9023194368755182625" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/9023194368755182625?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/9023194368755182625?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/jFpoJOj63wg/trends-of-vulger-phrases.html" title="Trends of Vulger Phrases" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/12/trends-of-vulger-phrases.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIHR308fSp7ImA9WhdVEU0.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-5648210414978212170</id><published>2010-09-14T17:35:00.012-04:00</published><updated>2011-09-15T11:28:56.375-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-15T11:28:56.375-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="best_practices" /><category scheme="http://www.blogger.com/atom/ns#" term="slf4j" /><category scheme="http://www.blogger.com/atom/ns#" term="logging" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Simplifying logging with Maven and SLF4J</title><content type="html">&lt;b&gt;UPDATE:&lt;/b&gt;Ceki commented below which prompted me to rewrite the third paragraph.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE 2:&lt;/b&gt;I have &lt;a href="http://www.jaxzin.com/2011/09/simplifying-logging-with-maven-and.html"&gt;a better way of configuring Maven and SLF4J&lt;/a&gt; now.&lt;br /&gt;&lt;br /&gt;The mismatch between logging frameworks always seems to come up in projects I've developed over the years.  Little-by-little I've learned and relearned how to navigate the nest of runtime logging that occurs in non-trivial applications.  With my latest project I think I finally converged on a solution that I'll carry forward to future projects.&lt;br /&gt;&lt;br /&gt;So what am I really talking about?  Have you ever been stumped, even for a short time, about where a certain log message is going and why it might not appear in your log?  Often this happens when you are trying to debug an issue with a third-party library that's using a different logging implementation them your application.  If you are nodding from familiarity, skip the next paragraph.&lt;br /&gt;&lt;br /&gt;Let's start from the beginning.  There are several logging implementations available for Java, the best known being &lt;a href="http://logging.apache.org/log4j/"&gt;Log4J&lt;/a&gt; and the &lt;a href="http://onjava.com/pub/a/onjava/2002/06/19/log.html"&gt;java.util.logging&lt;/a&gt; (JUL) API that was added in JDK 1.4.  You may also encounter Apache &lt;a href="http://commons.apache.org/logging/"&gt;commons-logging&lt;/a&gt; which is a logging facade for library developers to abstract their logging so library users are free to choose their own implementation such as Log4J.  But commons-logging has &lt;a href="http://articles.qos.ch/thinkAgain.html"&gt;well-documented issues&lt;/a&gt; so that's where &lt;a href="http://slf4j.org/"&gt;slf4j&lt;/a&gt; comes in as my logging facade of choice.  I actually code all my new applications to use the slf4j API directly because it adds functionality over the logging implementations like parameterized log messages that are only evaluated if the associated logging level is enabled.  But that's tangent to this post.&lt;br /&gt;&lt;br /&gt;So how have you solved the usage of multiple logging implementations?  In the past I've tried different techniques:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Configure each framework separately and have them write to their own log files.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Pro: Is there one?&lt;/li&gt;&lt;li&gt;Con: You need to monitor multiple files&lt;/li&gt;&lt;li&gt;Con: You need to understand the usage and configuration of each framework.&lt;/li&gt;&lt;li&gt;Con: If you are in a J2EE container you lose the log adminstration it provides.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Redirect everyone to standard out and redirect standard out to a file.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Pro: Its all going one place.&lt;/li&gt;&lt;li&gt;Con: Its all in standard out, even errors which can make adminstration tools fail to filter messages properly.&lt;/li&gt;&lt;li&gt;Con: You still need to configure each secondary framework including message formatting so all log lines follow the same pattern.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Write and connect bridges for each secondary framework so that they will log to one framework that is responsible for writing to the file, which I'll call the primary framework.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Pro: Its all going one place and category names, and levels are preserved through to the primary framework.&lt;/li&gt;&lt;li&gt;Pro: If the primary framework supports programmatic changes to log levels, it works for all frameworks.&lt;/li&gt;&lt;li&gt;Pro: If you are in a J2EE container that support live updating of log levels, it works for everything.&lt;/li&gt;&lt;li&gt;Con: You need to know what you are doing to develop the bridges, configure the bridge in each secondary framework and connect it all together properly.&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;So what's the magic solution I found?  Well its a variation of #3 but it doesn't require any coding or any real knowledge of how to configure secondary frameworks.  And I'll show you how to accomplish it using Maven and a logging facade API called SLF4J.&lt;br /&gt;&lt;br /&gt;Here is the overview of the steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Decide what the primary framework will be.&lt;/li&gt;&lt;li&gt;Ban all secondary logging framework in your projects.&lt;/li&gt;&lt;li&gt;Update your dependencies to exclude the banned dependencies.&lt;/li&gt;&lt;li&gt;Configure your project to depend on &lt;a href="http://slf4j.org/legacy.html"&gt;drop-in replacements&lt;/a&gt; of each secondary logging framework from SLF4J and to &lt;a href="http://slf4j.org/manual.html#swapping"&gt;use SLF4J to send everything to your primary framework&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Decide what the primary framework will be.&lt;/h3&gt;For my latest project, I'll be deploying to Glassfish which use JUL internally and has support in its admin console for live updating log levels without restarting the server, so it was easy to pick JUL as my primary framework.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Ban all secondary logging frameworks&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Add the following plugin to your pom.xml&lt;/div&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/929276.js?file=gistfile1.xml"&gt;&lt;/script&gt;&lt;br /&gt;&lt;h3&gt;Add exclusions&lt;/h3&gt;&lt;div&gt;This is where &lt;code&gt;mvn dependency:tree -Dincludes=log4j:log4j&lt;/code&gt; is really helpful.  If you try to build now, your build fail on the enforcer rule.  Run this command to find which dependency is including log4j and add the necessary &amp;lt;exclusion&amp;gt;.  Repeat until you find no more dependencies on log4j.  Repeat for each of the banned dependencies.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Add dependency on SLF4J&lt;/h3&gt;&lt;div&gt;Add the following to your pom.xml&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;script src="https://gist.github.com/929283.js?file=gistfile1.xml"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So in 4 steps you can redirect all your logging to your primary logging framework without changing a line of code!&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=IEmiyPBN_Yg:vD1RrPez6F8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=IEmiyPBN_Yg:vD1RrPez6F8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=IEmiyPBN_Yg:vD1RrPez6F8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=IEmiyPBN_Yg:vD1RrPez6F8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=IEmiyPBN_Yg:vD1RrPez6F8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=IEmiyPBN_Yg:vD1RrPez6F8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=IEmiyPBN_Yg:vD1RrPez6F8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/IEmiyPBN_Yg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/5648210414978212170/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=5648210414978212170" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/5648210414978212170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/5648210414978212170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/IEmiyPBN_Yg/simplifying-logging-with-maven-and.html" title="Simplifying logging with Maven and SLF4J" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>5</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/09/simplifying-logging-with-maven-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFRHc6fyp7ImA9Wx9VFks.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-2820233935111540096</id><published>2010-03-21T12:05:00.001-04:00</published><updated>2011-02-02T12:11:55.917-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T12:11:55.917-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oss" /><category scheme="http://www.blogger.com/atom/ns#" term="best_practices" /><category scheme="http://www.blogger.com/atom/ns#" term="versioning" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Best Practices with Maven: OSS forks</title><content type="html">&lt;div&gt;&lt;div&gt;Recently I came across a company that is forking several open source Java projects. I saw they were making a mistake that I also made a few years ago and have since learned from.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In Maven's distributed repository architecture project artifacts, like JAR files, are uniquely identified by a coordinate system composed of a group identifier, an artifact identifier, a version number, optionally a classifier, and a packaging type. For instance, the most recent version of the Apache Commons Lang project has a Maven coordinate (i.e.&lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;groupId:artifactId:version:classifier:type&lt;/span&gt;) of &lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;commons-lang:commons-lang:2.5::jar&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few years ago, if I wanted to make custom changes to this project I would get the source, make my changes and then deploy the result to our private Nexus repository under a new groupId such as &lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;com.jaxzin.oss:commons-lang:2.5::jar&lt;/span&gt;. That might seem reasonable. Then a year later or so I tried something different and changed the artifactId like this &lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;commons-lang:commons-lang-jaxzin:2.5::jar&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately there is a serious problem with both of these approaches. Maven supports transitive dependencies which means, if you include a dependency you get its dependencies 'for free'. But what happens when you depend on com.jaxzin.oss:commons-lang and indirectly include commons-lang:commons-lang? With either approach, Maven has lost all knowledge that these two artifacts are actually related. And when I say 'related' I mean they include different versions of the same classes. When Maven loses this relationship, it can't perform version conflict resolution and will include both versions in the output. It will compile against both in the classpath. If you are building a WAR file, it will include both in the WEB-INF/lib directory. If you are &lt;a href="http://maven.apache.org/plugins/maven-assembly-plugin/"&gt;assembling&lt;/a&gt; or &lt;a href="http://maven.apache.org/plugins/maven-shade-plugin/"&gt;shading&lt;/a&gt; an "uber"jar, it will include the classes from both in your giant jar with all its dependencies. And unfortunately, the one that 'wins' is nearly indeterministic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what's the solution? How do you properly fork an open-source project privately?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The trick is to change the version, and leave the groupId and artifactId alone. That way, Maven still can detect the relationship and can perform version conflict resolution. So to complete the example I would fork Commons Lang 2.5 to a new coordinate &lt;span class="Apple-style-span" style="font-family:'courier new';"&gt;commons-lang:commons-lang:2.5-jaxzin-1::jar&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now I do have one further suggestion, but it's of questionable practice and I'm not sure how well it works. You might consider forking version 2.5 to version 2.6-jaxzin. This way, if Maven attempt to resolve version conflicts, it will know that your fork is 'newer/better' than 2.5. Maven sees version with qualifiers as being older than the unqualified version. I think the assumption is that if you are qualifying a version its a pre-release version like 1.0-alpha-1, 1.0-beta-1, or 1.0-rc-1. You can &lt;a href="http://docs.codehaus.org/display/MAVEN/Dependency+Mediation+and+Conflict+Resolution"&gt;read more about how Maven version conflict resolution works&lt;/a&gt; and I know they have a major overhaul of this logic available in Maven 3.0 with the &lt;a href="http://maven.apache.org/mercury/index.html"&gt;Mercury&lt;/a&gt; project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But, in practice, when I've run into version conflicts like this I will add an exclusion clause where I depend on an artifact that is including the conflict transitively.&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=tN6TMJV7x0A:PflzCyj9sqw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=tN6TMJV7x0A:PflzCyj9sqw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=tN6TMJV7x0A:PflzCyj9sqw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=tN6TMJV7x0A:PflzCyj9sqw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=tN6TMJV7x0A:PflzCyj9sqw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=tN6TMJV7x0A:PflzCyj9sqw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=tN6TMJV7x0A:PflzCyj9sqw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/tN6TMJV7x0A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/2820233935111540096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=2820233935111540096" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/2820233935111540096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/2820233935111540096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/tN6TMJV7x0A/best-practices-with-maven-oss-forks.html" title="Best Practices with Maven: OSS forks" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/03/best-practices-with-maven-oss-forks.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUARXk5fyp7ImA9WxBbGUk.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-4039534899124125721</id><published>2010-03-18T15:20:00.002-04:00</published><updated>2010-03-18T15:24:04.727-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-18T15:24:04.727-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="feel_good" /><category scheme="http://www.blogger.com/atom/ns#" term="daws" /><title>Not for Adoption</title><content type="html">Last night was my first session as a volunteer at the Danbury Animal Welfare Society (DAWS).  I had attended an orientation a few weeks back and that's when I saw the facility for the first time, learned about the standard operating procedures and policies, and got to meet some of the cats I'll be working with.  Now I'm not a person that enjoys change or meeting new people, but other than my immediate family I don't think many people are aware because I try very hard to hide my discomfort.  Who knows, I could be wrong so feel free to call me out in the comments!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far, this entire experience is quite out of my normal comfort zone, but I'm forcing myself to do this for several reasons.  I learned about DAWS after attending their &lt;a href="http://www.picturesbypaula.com/Fundraisers/DAWS-3rd-PUPPY-LOVE-BALL-2010/11319537_MZWmB#794632388_Vzyf4"&gt;Puppy Love Ball&lt;/a&gt;, a fund-raiser they held in February, in support of &lt;a href="http://www.linkedin.com/pub/paul-caso/4/215/857"&gt;a friend of mine&lt;/a&gt; who was honored as their Person of the Year.  They premiered &lt;a href="http://www.youtube.com/watch?v=PJX8H2vJnQI"&gt;this mission video&lt;/a&gt; at the event and it had me hooked.  To learn that DAWS is a shelter that doesn't euthanize animals for non-medical reasons was a real inspiration to me.  I didn't even know this idea of a 'no-kill' shelter even existed.  Another reason, I have wanted to volunteer somewhere simply to give back to a community.  I'm not sure where my misunderstanding came from, but I've always imagined volunteering to be an unpleasant activity, like cleaning or manual labor.  So when I found out that I could volunteer to be a 'cat socializer', it sounded like a perfect fit.  Since my wife is very allergic to animal hair and dander, this would also be my chance to interact with cats on a regular basis without owning one.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;This next statement may come off as brutally honest, another reason I was outside my comfort zone is the facility.  Inside, its a clean, spacious and wonderful facility for the animals, but when I first arrived its exterior isn't exactly what I had expected especially since my introduction to DAWS was the grandeur of the Ball held at the &lt;a href="http://www.ethanallenhotel.com/"&gt;Ethan Allen&lt;/a&gt;.  The building looks like a large residential home and could easily be overlooked as a place of business.  After visiting the DAWS location in Bethel I understood the importance of the sign and landscaping that my friend Paul created.  Hearing about their goal to fundraise for a brand-new state-of-the-art facility by 2019, it made me even more impressed and connected with DAWS.  I'd love to be a small part of them reaching that goal.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I arrived last night a few minutes early, uncertain what to do.  Seeing others waiting outside for the door to open, I introduced myself and found out they were waiting to become adopters.  I was starting to get a little nervous since none were other volunteers.  Was I late? Was there a different entrance?  Did I not read an email fully?  After a few minutes I discovered I hadn't made a mistake when other volunteers arrived.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a few minutes we were let in and I introduced myself and was introduce to the other cat program volunteers that were there.   Unfortunately I'm joining the volunteer program at a time when everyone needs to be more hands-off with the cats because of a skin infection that is making the rounds in the shelter.  They have done an amazing job handling the situation.  I hope in a few weeks the issue will behind DAWS.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From what I gathered from the my first session, a two-hour evening consists of feeding the cats, playing with them, cleaning litter boxes and then finishing the night by getting everyone back in their cages.  This is the kind of volunteering I can handle!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The thing I really took away from last night though was my experience with a cat named Daphne.  She's a beautiful black &amp;amp; white cat and very reminiscent of the family cat I grew up with for 14 years named Purrina.  She has some trouble with her hind legs, and she seems a bit of a special-needs case because of it.  On her cage is a sign that reads "Not for Adoption" and those three words seemed to say so much about DAWS. Here is a cat that in many cases would be euthanized because no one goes to a shelter looking for a special-needs pet.  But instead DAWS, with their no-kill policy, chose to give this cat a chance to be adopted and she's so close to going home. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Daphne cemented why I want to give two hours of my week to DAWS, in a time when I feel like I don't have 5 extra minutes to spare.  If you are located in the greater Bethel/Danbury area, I encourage you to &lt;a href="http://daws.org/volunteer.html"&gt;donate your time&lt;/a&gt; or &lt;a href="http://daws.org/donate.html"&gt;donate your money&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;object width="320" height="193"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PJX8H2vJnQI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/PJX8H2vJnQI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="193"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=f6uSS9QpcDE:EPod5rzOjpc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=f6uSS9QpcDE:EPod5rzOjpc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=f6uSS9QpcDE:EPod5rzOjpc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=f6uSS9QpcDE:EPod5rzOjpc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=f6uSS9QpcDE:EPod5rzOjpc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=f6uSS9QpcDE:EPod5rzOjpc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=f6uSS9QpcDE:EPod5rzOjpc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/f6uSS9QpcDE" height="1" width="1"/&gt;</content><link rel="related" href="http://www.daws.org" title="Not for Adoption" /><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/4039534899124125721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=4039534899124125721" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/4039534899124125721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/4039534899124125721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/f6uSS9QpcDE/not-for-adoption.html" title="Not for Adoption" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/03/not-for-adoption.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABRXcyfCp7ImA9WxBbF0Q.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-8798925188206523729</id><published>2010-03-12T00:40:00.003-05:00</published><updated>2010-03-16T22:09:14.994-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T22:09:14.994-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="nosql" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>First Impressions from NoSQL Live</title><content type="html">&lt;p&gt;Today I drove up to Boston for the day to attend &lt;a href="http://nosqlboston.eventbrite.com/"&gt;NoSQL Live&lt;/a&gt;.  My experience so far within the NoSQL community has been limited to what we've built in-house at Disney and ESPN over the past decade to solve our scaling issues, more recently has been ESPN's use of &lt;a href="http://www.ibm.com/software/webservers/appserv/extremescale/"&gt;Websphere eXtreme Scale&lt;/a&gt;, and the very latest has been my own experimentation with HBase which hasn't gotten much further than setting up a four node cluster.  I've read a little about Cassandra, memcached, Tokyo Cabinet and that's about it.  So before the sandman wipes away most of my first impressions of the technologies discussed today, I wanted to record my thoughts for posterity or, at the very least, tomorrow.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://incubator.apache.org/cassandra/"&gt;Cassandra&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Cassandra seems to be the hottest NoSQL solution this month with press about both Twitter and Digg running implementations.  My impression, I'm wary of "eventual consistency".  I don't feel I understand the risk and ramifications well enough to design a system properly.  When &lt;a href="http://spyced.blogspot.com/"&gt;Jonathan Ellis&lt;/a&gt; of Rackspace Cloud mentioned that Digg needed to implement Zookeeper-based locking on top of Cassandra so that diggs get recorded correctly, I realized how poorly I understand eventual consistency and how risky it could be.  But my impression of Cassandra isn't all negative, it definitely seems to have less baggage than HBase by not being built on top of HDFS.  I'll get into what that means a little later.&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight:bold;"&gt;&lt;a href="http://memcached.org/"&gt;Memcached&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;Unfortunately the speaker that 'represented' memcached gave off a vibe that really turned me off to the product.  I know that's incredibly shallow, but this is first impressions after all and not perfectly-evaluated impressions.  &lt;a href="http://twitter.com/FallenPegasus"&gt;Mark Atwood&lt;/a&gt; sat on the first panel of the day "Scaling with NoSQL" and his whole attitude seemed to say "memcached is all you'll ever need and these guys next to me are just overdesigning hacks".  His answers were short and his tone was quite condescending even when addressing audience questions.  Not a very good first impression of him.  But luckily today wasn't my first impression of memcached as I was pointed in its direction just last week by a Disney colleague.  My research before today has me intrigued about using it as a replacement for ehcache as a second-level cache provider to Hibernate which we use as an ORM in one system at ESPN right now.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Document Oriented Databases (&lt;a href="http://basho.com/"&gt;Riak&lt;/a&gt;, &lt;a href="http://couchdb.apache.org/"&gt;CouchDB&lt;/a&gt;, &lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;)&lt;/b&gt;&lt;br /&gt;Wow, this is a subgroup of NoSQL technology that I had heard of in passing but was really unaware of what problem they were trying to solve.  Riak had the best answers for scaling and operational-ease.  With homogeneous nodes and consistent hashing, Riak promises that adding and removing nodes are seemless.  CouchDB and MongoDB sounded like a 'me too' answer so I'm interested to find out what that really means for each, or better yet what it doesn't mean.  But the concepts of document-oriented databases really meshes well with ESPN's current fantasy user database.  Our fantasy user profiles are stored in a traditional RDBMS as serialized maps of maps, one row for each user.  Since its serialized to a BLOB column its completely opaque to reporting and analytics.  To keep that model but have vendor support for divining information and having transparency into it sounds exciting.  I really need to look into these.  Riak definitely won this round of first impressions.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://1978th.net/tokyocabinet/"&gt;Tokyo Cabinet&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;This was a technology I was referred to by &lt;a href="http://twitter.com/heckj"&gt;a colleague&lt;/a&gt; and read through their site last week.  I was far from impressed then since it seems much too low-level for my taste, similar to my impressions of &lt;a href="http://carbonado.sourceforge.net/"&gt;Carbonado&lt;/a&gt; which we use at ESPN.  The lightning talk by &lt;a href="http://www.linkedin.com/in/flinnmueller"&gt;Flinn Mueller&lt;/a&gt; got me a little more interested. He seems to be doing interesting things but from an analytics and reporting perspective.  He was vague on how loads the data from his primary store and what the scale of the data is, so my first impression: its a toy.  I'm sure that's an unfair characterization but I'm not trying to be fair tonight.  But honestly, Tokyo Cabinet makes no bones that it punts on horizontal scaling which is the deal breaker for me.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://hypertable.org/"&gt;Hypertable&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;I looked at Hypertable (as in read their website) about 18 months ago on the suggestion of a colleague when discussing HBase around the same time.  This conference didn't change my opinion, which is "It's HBase but written in C".  It doesn't seem to bring anything else to the table which to me is a blocker.  JVM implementations are available for all the operating systems I use and so I don't like the idea of needing to find the right binary to download for a given box.  When it comes to Java vs. C, I choose Java but I'm also extremely biased as I've been a Java developer nearly my entire career.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://jimbojw.com/fullstack/"&gt;Full-stack JavaScript&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;This was my favorite of the lightning talks, and possibly my favorite of the conference.  It felt a &lt;i&gt;little&lt;/i&gt; tangential to the NoSQL topic, mainly because &lt;a href="http://twitter.com/jimbojw"&gt;Jim Wilson&lt;/a&gt; covered more than just data storage.  The idea, what if you could use JavaScript on your server, in your client and use JSON for talking between the layers and as the storage format?  Crazy, right?  I say brilliant.  His few slides were mildly embarrassing that dissected each of the popular stacks of today by how many languages you need to learn (Java, XML, etc) as well and the various impedance mismatches between layers (ORM, Object marshaling to JSON or XML, etc).  "ORM is an antipattern" was an enlightening take on something I've accepted as necessary.  Full-stack JavaScript is something I'll be lusting after for a long time, especially since he made it sounds so attainable with node.js, rhino and MongoDB.  As soon as his slides are online &lt;a href="http://jimbojw.com/fullstack/"&gt;I'll be linking to them&lt;/a&gt; as well as passing them around the office.&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;a href="http://hadoop.apache.org/hbase/"&gt;HBase&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;Well I saved HBase for last.  It's the one I've had the most experience with, though that experience can still be measured in hours.  As I hinted at earlier, this conference gave me the first impression that HDFS is a weight around the neck of HBase.  I was surprised to get that feeling from the room, since my impression has been purely positive so far.  It is also getting a lot of flack from the 'single point of failure' problem associated with the current HDFS architecture's Name Node.  Apparently performance is a dog since it was "only" designed to be highly distributed with no promise of when you'll get your data.  This burden seems to carry over to HBase.  But after talking to &lt;a href="http://twitter.com/ryanobjc"&gt;Ryan Rawson&lt;/a&gt; one-on-one at the end of the HBase lab, it's clear he is of the strong opinion that its getting a bad wrap.  He also makes very convincing arguments about the scale of what HBase is currently doing in real production environments vs. competitors like Cassandra.  It's very pursuasive and you can read more of the details in &lt;a href="http://old.nabble.com/Use-cases-of-HBase-to27837470.html"&gt;a very active thread I kicked off&lt;/a&gt; on the HBase user group earlier this week.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;HBase is still the front-runner of my personal candidates for a NoSQL option for ESPN as it has been for a long time.  Cassandra's design choice of eventual consistency is a little scary to me because I don't know yet how to design for it, not because it is inherently bad choice.  Documented-oriented databases just made a big blip on my radar.  Memcached is interesting if I want to stick with a traditional ORM-based architecture.  Tokyo Cabinet and Hypertable are all but off my radar.  And the lusty vixen of them all is a full-stack JavaScript architecture.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Disclaimer: Though I mention my employer ESPN in this post, these are my own personal opinions and don't represent the opinions of the company.  The final decision on this stuff is "above my pay-grade" as they say.&lt;/b&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=rNTWJHRSFSI:HJh81CoClJQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=rNTWJHRSFSI:HJh81CoClJQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=rNTWJHRSFSI:HJh81CoClJQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=rNTWJHRSFSI:HJh81CoClJQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=rNTWJHRSFSI:HJh81CoClJQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=rNTWJHRSFSI:HJh81CoClJQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=rNTWJHRSFSI:HJh81CoClJQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/rNTWJHRSFSI" height="1" width="1"/&gt;</content><link rel="related" href="http://nosqlboston.eventbrite.com/" title="First Impressions from NoSQL Live" /><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/8798925188206523729/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=8798925188206523729" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8798925188206523729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/8798925188206523729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/rNTWJHRSFSI/first-impressions-from-nosql-live.html" title="First Impressions from NoSQL Live" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>4</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/03/first-impressions-from-nosql-live.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGQX0_eip7ImA9WxBUEUw.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-9078642457324756403</id><published>2010-02-24T13:10:00.013-05:00</published><updated>2010-02-25T10:22:00.342-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-25T10:22:00.342-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="brainteaser" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><title>Java Puzzler</title><content type="html">I bought the book &lt;a href="http://amzn.com/032133678X"&gt;Java Puzzlers&lt;/a&gt; by Josh Bloch and Neal Gafter a few years ago and enjoyed it. If you aren't familiar with it, it covers rare, odd and usually counter-intuitive edge cases of Java in a brain-teaser style of presentation. For both a Java user and an analytical mind its a fascinating book.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well today I stumbled onto a puzzler of my own and thought I'd share. Can you tell me what the main method of this class will output?&lt;/div&gt;&lt;blockquote&gt;&lt;pre&gt;1 : public class Parser {&lt;br /&gt;2 :&lt;br /&gt;3 :  private static &amp;lt;T&gt; T parse(String s, Class&amp;lt;T&gt; type) {&lt;br /&gt;4 :    // Simple implementation only supports long primitive&lt;br /&gt;5 :    if(type == long.class) {&lt;br /&gt;6 :       return (T) Long.parseLong(s);&lt;br /&gt;7 :    }&lt;br /&gt;8 :    throw new UnsupportedOperationException(&lt;br /&gt;9 :                   "parse() only supports long right now!");&lt;br /&gt;10:  }&lt;br /&gt;11:&lt;br /&gt;12:  public static void main(String[] args) {&lt;br /&gt;13:    System.out.println(parse("1234", long.class).equals(1234));&lt;br /&gt;14:  }&lt;br /&gt;15: }&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div&gt;So what gets written to standard output? If you said 'true', then you'd be wrong. If you said 'false', then you'd also be wrong! The code above won't even compile! There are a few features of Java that are colliding here to give odd results, including generics, type erasure, primitive types and autoboxing.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So what happens exactly? You'll get a compile error like this:&lt;/div&gt;&lt;blockquote&gt;&lt;pre&gt;Error:line (6) inconvertible types&lt;br /&gt;found   : long&lt;br /&gt;required: T&lt;/pre&gt;&lt;/blockquote&gt;&lt;div&gt;The error is on the return statement line of the parse() method. Long.parseLong() returns a primitive long, but since a parameter type can only represent an Object type, you can't cast a primitive to an parameter type. Also, it appear auto-boxing doesn't work in this case, so it fails with a compiler error.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But wait, doesn't the code explicitly use the Class object that represents the long primitive, long.class? But see 'long.class' is syntactic sugar for the constant field Long.TYPE which is of the parameterized type Class&amp;lt;Long&gt; since type variables only support using Objects.&lt;/long&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So realizing this, we can change the return statement to use a Long instead of a long:&lt;/div&gt;&lt;blockquote&gt;&lt;pre&gt;    return (T) Long.valueOf(s);&lt;/pre&gt;&lt;/blockquote&gt;&lt;div&gt;Now the code will compile, but something is still wrong because it prints out 'false'.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Knowing that the return type of &lt;i&gt;parse("1234", long.class) &lt;/i&gt;is Long, take another look at the puzzle. Can you see the problem? This one is subtle. The numeric literal '1234' that is inside the call to equals() needs to be auto-boxed and since it is a literal int, it is boxed into a Integer. But an Integer object isn't considered equal to a Long object because they are different types, so equals() returns false.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So it a few interesting features combine for some strange behavior. Hope you enjoyed this puzzle!&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=DnZnmq1Ndsk:KJhqgPWjkL8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=DnZnmq1Ndsk:KJhqgPWjkL8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=DnZnmq1Ndsk:KJhqgPWjkL8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=DnZnmq1Ndsk:KJhqgPWjkL8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=DnZnmq1Ndsk:KJhqgPWjkL8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=DnZnmq1Ndsk:KJhqgPWjkL8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=DnZnmq1Ndsk:KJhqgPWjkL8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/DnZnmq1Ndsk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/9078642457324756403/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=9078642457324756403" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/9078642457324756403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/9078642457324756403?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/DnZnmq1Ndsk/java-puzzler.html" title="Java Puzzler" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>2</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/02/java-puzzler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MCRns4eyp7ImA9WxBXFEU.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-6353333133740275855</id><published>2010-01-25T23:29:00.006-05:00</published><updated>2010-01-26T00:57:47.533-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-26T00:57:47.533-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="family" /><category scheme="http://www.blogger.com/atom/ns#" term="paranormal" /><title>UFOs, Ghosts and Bigfoot</title><content type="html">So I hope you don't think I'm a complete loon, but I've always been interested in the paranormal, cryptozoology and lights in the sky.  I think it is driven by my need to try to answer all those unanswered questions in life. &lt;br /&gt;&lt;br /&gt;Lately I've been watching various 'reality' shows on these topics like MonsterQuest, Paranormal State and Ghosthunters.  Don't get me wrong, I'm not gullible enough to believe these shows are finding evidence of anything, its just some good ol' fashioned mind-numbing popcorn TV for me to fall asleep to.&lt;br /&gt;&lt;br /&gt;Watching them has reminded me of a few unexplained incidents I've had in my life and I wonder if you've experienced anything similar?  I've got three that all happened to me over a decade ago but were so unnerving that I remember them vividly.  So here are my campfire ghost stories, feel free to share yours!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incident #1: The Mysterious Flash&lt;/span&gt;&lt;br /&gt;I don't remember the exact date or even the season of this first incident, but my best guess is it happened during the summer of 1993.  It was the summer before my sophomore year of high school.  I had a goal to read 50 books that summer.  I know what you're thinking "wow, was he really that cool?"  My motivation was a challenge from my freshman English teacher that I couldn't do it, and I ended up proving him wrong.  The reason I'm telling you all this is to set the scene that I was in my bedroom reading a book around 10 o'clock at night. &lt;br /&gt;&lt;br /&gt;My Dad is awesome and years earlier had installed overhead track lighting in my room attached to a touch-sensitive dimmer switch.  The track lights hung from the ceiling and I had most of them pointed outward to face the walls so I wouldn't be blinded.  However the one light that hung near the head of my bed I faced inward to act as a reading light.  For whatever reason, I was laying in bed with the lights dimmed as low as I could and still be able to read.  I can't explain the inner workings of my 15 year old self but I liked the lighting that way. &lt;br /&gt;&lt;br /&gt;As I'm laying there in bed with my back propped against the wall my entire room is flooded with brilliantly blinding light!  I stare at my book and realize the light isn't coming from above me it's from behind me as I can see my shadow and the shadow of the book I'm holding cast against the far wall of my room like someone is holding a spotlight a few feet behind my shoulder.  And before I can react it's gone!  The whole flash takes about half a second.  Then as I turn to see where the light came from I come to the realization that I'm laying on the wall, it couldn't have possibly come from behind me and cast the shadows I saw. Now being rational, my first thought is that I imagined the shadows and it was a simple power surge so I go downstairs and ask my parents if they saw anything, but they hadn't.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incident #2: The 727 at 500'&lt;/span&gt;&lt;br /&gt;For this next incident I wasn't alone.  I was still in high school and my Mom and I were in the car together coming home from an after-school activity, probably band practice or musical rehearsal.  It was twilight and as we drove home I see a plane on the horizon.  As I watch it I realize it is not near the horizon because its far away, it's because it is close but flying low to the ground.  I pointed out the plane to my Mom and wondered out loud if something is wrong with it.  She was surprised and decided to pull over to watch it.  As the plane drew closer we both realized that it was a commercial airliner, not a small prop plane out of Danbury as I was expecting.  Now mind you, I grew up in the hills of New Milford where the closest airport that can land an airliner is 40 miles away.  It continued to approach us and at this point I realized it was traveling extremely slow for a jet of its size.  Finally as it passed directly overhead I realized it was the size of a 727, no more than 500 feet from the ground, and going maybe a 100 miles an hour which is very close to, if not less than, the stall speed for an jet like that.  But if that all wasn't strange enough, here's the part that haunts my mother and I to this day...it was dead silent. I mean so silent that the crickets stopped chirping.  The jet passed and disappeared past the treeline and we never heard a thing.  In that pre-internet age, my only recourse was to check the newspaper every day for at least a week. Nothing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Incident #3: Close Encounters of the Orange Kind &lt;/span&gt;&lt;br /&gt;My last weird event is probably the clearest of the three in my mind.  It was September of 1995 near the beginning of my senior year of high school.  My Dad and I were flying to Florida for the weekend so I could tour the Ringling School of Art and Design and see if it was where I wanted to spend the next four years of my life studying computer graphics.  In the end, I went to Trinity College in Hartford but that's another story. &lt;br /&gt;&lt;br /&gt;On this trip we flew down on a Friday night.  It was one of the first night-time flights I'd ever been on so I was pretty excited.  We were seated on the left side of the plane that faced the Atlantic Ocean for most of the trip.  Even without much to see but the blackness of the ocean I still sat watching out the window almost the entire trip.  Midway through the trip I got to see thunderhead clouds out on the horizon.  It was a lot of fun watching a lightning storm from 200 miles away.  But as I watching I realize that one of the clouds has begun to light up with a constant orange light.  The cloud wasn't lit in a diffuse way, it was very clear it was emanating from a point within the cloud.  If you've seen the movie Close Encounters of the Third Kind in the scene where the UFOs arrive you can only see points of lights within the clouds, it looked exactly like that but for only one light source.  I'm not saying I think this was a UFO, only that the special effects in this movie are a good approximation of what I saw.  So I immediately got my Dad to lean over and take a look to see if he had any idea what it was.  As we sat there and watched, it became extremely bright.  It was so bright that you could see the light cast through the windows onto the right wall similar to what happens when the setting sun is off the left wing.  We watched it brighten for about 30 seconds, stay at full brightness for a minute or two and then fade to nothing in about the same amount of time it took to arrive.  To this day I have no idea what I saw.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=iuoO-JkPlHc:TePEvFNTYIA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=iuoO-JkPlHc:TePEvFNTYIA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=iuoO-JkPlHc:TePEvFNTYIA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=iuoO-JkPlHc:TePEvFNTYIA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=iuoO-JkPlHc:TePEvFNTYIA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=iuoO-JkPlHc:TePEvFNTYIA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=iuoO-JkPlHc:TePEvFNTYIA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/iuoO-JkPlHc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/6353333133740275855/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=6353333133740275855" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/6353333133740275855?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/6353333133740275855?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/iuoO-JkPlHc/ufos-ghosts-and-bigfoot.html" title="UFOs, Ghosts and Bigfoot" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2010/01/ufos-ghosts-and-bigfoot.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMHQ3sycSp7ImA9WxNaEEQ.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-3212283377400274872</id><published>2009-11-24T15:22:00.001-05:00</published><updated>2009-11-24T15:27:12.599-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-24T15:27:12.599-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="chrome os" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>My thoughts on Google's Chrome OS</title><content type="html">Unless you've been living under a rock, you have heard that last week Google demonstrated their Chrome OS for the first time in public.  They also open-sourced what they have so far as the &lt;a href="http://code.google.com/p/chromium-os/"&gt;Chromium OS&lt;/a&gt; project.  You can watch an overview video here:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0QRO3gKj3qw&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/0QRO3gKj3qw&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;I followed the event, watched the YouTube videos and even played with a copy of Chromium OS via &lt;a href="http://gdgt.com/google/chrome-os/download/"&gt;gdgt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So here are my thoughts on my limited experience so far.  It seems like a perfect fit for the netbook market.  "Living in the cloud" seems like a great idea for the ability to access your data anywhere.  A verified boot system will be a godsend to anyone who has ever had reinstall an OS because it just got 'crufty'. &lt;br /&gt;&lt;br /&gt;But I don't understand why they have, so far, omitted the concept of a desktop.  One of the coolest features of Chrome is its ability to &lt;a href="http://www.google.com/support/chrome/bin/answer.py?answer=95710"&gt;turn a web app into a 'desktop' app&lt;/a&gt;, which prompted me to to find &lt;a href="http://fluidapp.com/"&gt;Fluid for the Mac&lt;/a&gt;.  Why force new users of Chrome OS to live in a browser when they could have still kept the concepts of a desktop with 'desktop' applications?  There is also a nearly direct analogy in Chrome OS between its tabs and the Windows task bar or Mac Dock.  So why make it feel so different instead of trying to fit into the conventions every other GUI-based OS already established?&lt;br /&gt;&lt;br /&gt;I know it is fun to "rock the boat" and "shake the tree", but I'm just not finding the benefits to tying so closely to existing browser paradigms instead of reusing some of the desktop conventions for this new 'web' OS.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=2FOJfO6nIcA:U2J_gCZo_f8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=2FOJfO6nIcA:U2J_gCZo_f8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=2FOJfO6nIcA:U2J_gCZo_f8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=2FOJfO6nIcA:U2J_gCZo_f8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=2FOJfO6nIcA:U2J_gCZo_f8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=2FOJfO6nIcA:U2J_gCZo_f8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=2FOJfO6nIcA:U2J_gCZo_f8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/2FOJfO6nIcA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/3212283377400274872/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=3212283377400274872" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/3212283377400274872?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/3212283377400274872?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/2FOJfO6nIcA/my-thoughts-on-googles-chrome-os.html" title="My thoughts on Google's Chrome OS" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>0</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2009/11/my-thoughts-on-googles-chrome-os.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UAQXk4eSp7ImA9WxNbFEw.&quot;"><id>tag:blogger.com,1999:blog-11698705.post-2213156772317753704</id><published>2009-11-16T16:40:00.005-05:00</published><updated>2009-11-16T17:40:40.731-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-16T17:40:40.731-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Maven and Legacy Projects</title><content type="html">Recently I've been helping a colleague introduce a dependency on a legacy project that hasn't been "Maven-ized".  Often the "easy way" to add a legacy dependency is to throw the JAR into our Nexus repository and be done with it.  But this legacy project was a little trickier and is my new poster child for why taking the easy way can lead to headaches and frustration.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Your legacy project might have compile-time dependencies you need.&lt;/span&gt;&lt;br /&gt;Maybe your legacy project implements an external API, or maybe it uses a library and exposes that usage in its API.  "So what", you say?  "I'll find it at compile-time for my project and I'll add the dependency."  Well, now every project that wants to use your legacy project is going to go through the same discovery and embed the dependency in their POM.  The right way is to define this dependency in the pom.xml for your legacy project so all dependent projects retrieve it transitively.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Your legacy project might have run-time dependencies you need.&lt;/span&gt;&lt;br /&gt;Similar to the last example, your legacy project might use a library but not expose it's use directly.  You won't discover the missing dependency until you try and run your project.  Here's where the power of the 'runtime' scope of a transitive dependency becomes obvious.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Your legacy project might include library classes within its JAR.&lt;/span&gt;&lt;br /&gt;Now here's a real yuck factor when it comes to dealing with other people's code.  Our example legacy project bundled a small subset of its dependencies right in its JAR.  It wasn't until after we threw it into Nexus that we discovered this rather severe violation of Maven standards.  The best solution, get access to the project's source, mavenize the project properly and release a 'pure' artifact.  If you don't have access to the legacy project's source you'll need to strip the extra classes from the artifact and construct a pom that includes the right dependency.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Summary&lt;/span&gt;&lt;br /&gt;So here's a really quick summary of why not to half-ass adding legacy projects into your Maven infrastructure:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Any transitive dependencies will be missing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With legacy jars that embed the classes they depend on you risk class file collisions&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=4ui7Mve9wF8:ndd64UB-tjw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=4ui7Mve9wF8:ndd64UB-tjw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=4ui7Mve9wF8:ndd64UB-tjw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=4ui7Mve9wF8:ndd64UB-tjw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?i=4ui7Mve9wF8:ndd64UB-tjw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=4ui7Mve9wF8:ndd64UB-tjw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jaxzin?a=4ui7Mve9wF8:ndd64UB-tjw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jaxzin?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jaxzin/~4/4ui7Mve9wF8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.jaxzin.com/feeds/2213156772317753704/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11698705&amp;postID=2213156772317753704" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/2213156772317753704?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11698705/posts/default/2213156772317753704?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jaxzin/~3/4ui7Mve9wF8/maven-and-legacy-projects.html" title="Maven and Legacy Projects" /><author><name>Brian R. Jackson</name><uri>http://www.blogger.com/profile/18049607104293304749</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="31" src="http://4.bp.blogspot.com/_t2S3mZKgJ3M/Svo1aBN7VVI/AAAAAAAAF7s/0pJdJd7bn2E/S220/jackson_brian_030507_twitter.jpg" /></author><thr:total>1</thr:total><gd:extendedProperty name="commentSource" value="1" /><gd:extendedProperty name="commentModerationMode" value="FILTERED_POSTMOD" /><feedburner:origLink>http://www.jaxzin.com/2009/11/maven-and-legacy-projects.html</feedburner:origLink></entry></feed>
