Monday, August 10, 2009

Not Even a Magician

















"I don't know. I'm not a magic person. I just play second base."

Thursday, August 6, 2009

It Ain't Over 'Til It's Over

Fantasy Baseball has been good to me this year. In the two leagues I actually pay attention to, I'm in first place, one team by 4 games, the other by 19. And it's not that I draft well; I know I'm pretty bad at that sorta thing, and this year was no different (1 of the 10 guys I drafted in the last 5 rounds of these 2 leagues is still on my roster). No, it was all thanks to free agent pickups and waiver claims.

You don’t want to be Cowboy Jon praying Matt Wieters comes up in June while you sit in 8th place not even needing a catcher.   Or are you holding your waiver claim because you’re afraid someone is going to drop Prince Fielder?  Who are you, John Q. Law?  This is your job, why?  Wait, even better.  If you’re in a league with a guy who wears fancy dungarees and who would drop Prince Fielder, you shouldn’t be in that league.   If you need a guy for your roster, then claim him.  While your leaguemates are waiting for someone they deem worthy of a pickup, you’ll be grabbing all kinds of other players that are immediately useful.
That advice goes for free agents too. And better yet, free agents don't cost you anything other than the worst player on your roster.

Key players that I picked up off free agency/waivers this year:
  • Ben Zobrist
  • Mark Reynolds
  • Jon Lester (an impatient owner dropped him)
  • Andrew Bailey
  • Jordan Zimmerman (traded to get Casey McGehee)
  • Jake Fox (traded to get Leo Nunez)
I'm 19 games up in one league pretty much solely on the shoulders of Zobrist and Reynolds. Drafting is super important, as the basis of your team is formed in those first hours of the fantasy season. But even if your draft doesn't go according to plan (like drafting Garrett Atkins in the 4th round), you can still recover if you keep an eye on the game. 

Wednesday, April 29, 2009

Did Anyone Else Hear That?

I'm watching the Yankees @ Tigers game tonight on ESPN, and these commentaors have got to be the worst I've ever heard. They just seriously suggested that the 1-2 2 out pitch the ump called a ball was a good call because other umpires might've phoned it in and called it a strike just to get out of the inning. Seriously? Seriously. 

Thursday, April 9, 2009

Love-Hate Relationship




Look At the Time Stamp

Seriously, just look at when I posted this. Not doctored at all.

I just finished a daily merge for work. Yes, I took time off when I got home to eat dinner and watch a little TV. I still spent a whole day + some on a single daily merge. 

Sometimes, I just hate source control.

Sunday, March 29, 2009

Fantasy Baseball: Players I Own

I always end up have the same players on many of my teams. I try to avoid it, but my research always ends up pointing me at the same players. This year I did a little better in avoiding repetition:
  • Carlos Guillen: Tampa4, Work League (WL)
  • Albert Pujols: Nine Bo Jacksons (NBJ), Tampa4
  • Nick Markakis: Garrett Anderson (GA), Tampa4
  • Chris B. Young: GA, Tampa4
  • Josh Beckett: WL, Tampa4
  • Gil Meche: WL, Tampa4
  • Ted Lilly: GA, Tampa4
  • Brian Wilson: GA, Tampa4
  • Rich Harden: GA, Tampa4
Hmm, on second thought, my GA and Tampa4 teams are pretty similar. Those are the two leagues I paid the most attention to, so I guess I didn't really succeed in spreading my risk. Oh well.

Saturday, March 28, 2009

Programming Update

Today was New England Code Camp 11: Developer Stimulus Package. What an awesome name. Thanks to Chris Bowen for organizing it. Unfortunately for me, I could only stay for the first four sessions. Got to learn about Silverlight, F#, and .NET 4.0. As always, Richard Hale Shaw was excellent, and Andy Beaulieu was also quite good. Fun times for all.

These programming conventions always give me extra energy for working on projects. This one came at a great time, because I had stopped work on Walrus since all of my fantasy baseball teams had already drafted. I now know (thanks to RHS) how F# really fits in, and how to use it as a library extension to my C# projects. Yay!

I also need to work on smaller projects. Things I can build quickly and learn small things at once. I plan to build an ASP.NET MVC app soon, but it has to be super simple so I can get it out the door fast. Maybe I'll build a blog. Easy, but somewhat boring. I haven't thought this through yet.

Nick is also urging me on, mostly by blogging and conversations on the train. He's on Twitter now at @nswarr, so you can follow him if you want. Eric always gets mad points for energy boosts. 

Any ideas for what to put on edschwehm.com?

Thursday, March 26, 2009

Why I Don't Like SOLID Principles

SOLID princples:
  • Single responsibility principle
  • Open-closed principle
  • Liskov substitution principle
  • Interface segregation principle
  • Dependency inversion principle
This topic has been discussed to death in the tech circles, thanks to the whole tiff started by Jeff Atwood and Joel Spolsky. I'm just throwing my piece in the ring:


SOLID is good.
SOLID is not gospel.

The first rule of programming should be "use your brain." The first answer should always be "it depends." SOLID is not a silver bullet (because, as we know, there is no such bullet). There are going to be times where you need to write some code that is not pretty. Sometimes we acrue technical debt for valid reasons. Usually the reason is we need to implement some feature or bug fix fast, possibly because we're losing customers.

It really comes down to what Jeff said: "Quality really doesn't matter that much, in the big scheme of things." What matters is what we deliver to the customer. Of course, good code quality helps you deliver more and better apps to the customer. But the customer does not care that you followed the SOLID principles to the letter as long as the product is right.

Tuesday, March 17, 2009

Managing Risk With Bench Spots, Part 2

In Part 1, I discussed how you can use a bench spot as a hedge against a risky player you drafted. In this part 2, I'll discuss how to decide what to do with each of your bench spots.

You basically have four options when it comes to bench spots:
  • Platoon: One guy who mashes right-handed pitchers, one who wails on lefties.
  • Upside: Younger guys who might outperform expectations
  • Pitchers: In daily leagues, you could have extra pitchers to try to rack up counting stats.
  • Injury risks: As mentioned in part 1, you can backup your risky players.
Platoon players can often be had for cheap. Their season stats and projections are not going to look good because they hit something like .200/.300/.300 against opposite-handed pitchers. If you keep one guy who mashes righties and one you matches lefties, you can get the best of both worlds. The downside is that you have to check the matchups every day. Also these guys tend to be less-than-stellar players who could lose their job at any point. 

If you're reading this blog, you know about upside players. It's like drafting Evan Longoria or Colby Rasmus last year. Sometimes, you strike gold (see Longoria, 2008). Sometimes, the guy sits in the minors all year (see Rasmus, 2008). This category also includes guys like Elijah Dukes who have talent and always seem on the fringe of a breakout year.

In daily leagues, many managers will carry extra pitchers to try to rack up wins, saves, and strikeouts. This may not work as well with a Roto league (IP limit), but if you decide to draft pitching late, running extra pitchers out there can help offset the losses you made.

And finally, you can draft a backup for any of your risky picks. Better grab a backup 3B if you intend to draft Chipper Jones.

How do you decide what to do? By the time you're drafting bench players, you should already know how many injury backups you need. A good rule of thumb is that you want no more than half of your bench players as injury backups. You should also know if you need any platoon mates. You need to take care of these two cases first.

Once you've filled your obligations, then you can pick between upside players and extra pitchers. Make your picks based on your overall strategy (take pitchers if you need them, upside if you can). 

And finally, remember that players can fit into more than one category. Andy LaRoche is both a backup 3B and an updside player. You want all your bench players to be as useful as possible, so keep an eye of for guys that fill multiple needs.

Sunday, March 8, 2009

Managing Risk with Bench Spots, Part 1

Derek Carty at Hardball Times had a great three part series on injury risks and how they can lead to great rewards. The basic premise is that if you combine a partial season of a good talent with a partial season of a replacement level player, the combined value is much greater than the sum of the parts. I totally agree with this premise (you can see me arguing in favor of it in the comments).

You can use this strategy for any player who is expected to miss time:
  • Matt Wieters will start the season in AAA, but is expected to be called up as early as May.
  • Chase Utley will start the season on the DL, and should be back within a month or so.
  • Rich Harden is currently healthy, but you never know when he'll be injured.
  • Max Scherzer will be the 5th starter in Arizona, but if he's ineffective they might send him to AAA for some work (unlikely but possible).
Clearly the Utley situation is the most valuable; you know how long he'll be out, and you can reasonable guarantee he'll be great when we returns. The Harden situation is the worst; you don't know when/if/how long he'll be out and if he'll be effective when he returns. You need to make sure to balance your roster with these risks. 

Your bench spots are one of your greatest resources for managing risk. Instead of replacing an injured or ineffective player with a replacement player (i.e. free agent), you can replace him with a bench player. You chose your bench players based on your starters. If you draft Chipper Jones as your starting 3B, you'll likely draft another 3B sometimes in the late rounds. That 3B will be better than a replacement 3B. When you do this you're using a bench spot to hedge the risk you took by drafting Jones. (You can use DL spots in this fashion only if the player is starting the season on the DL, like Utley). 

One of the greatest arguments against this strategy is that each replacement player requires a bench or DL spot. Some leagues have as few as 3 bench spots and no DL spots. Thus you have to decide whether to use you bench spots for extra starting pitchers, high-upside players, platoon mates, or injury risks. When planning to draft a risky player, mark off on your draft sheet that one of your bench spots should be reserved for a backup. 

Next post I'll look into how you should decide to use your bench spots.

Thursday, March 5, 2009

Moneyball in Fantasy Sports

The main message of Moneyball was that Billy Beane built winning teams on the cheap by finding inefficiencies in the market and exploiting them. We can use that same tactic in fantasy baseball.

Let's examine a common fantasy expert recommendation: don't draft top-rated catchers in the top 100 picks. If you've been in many drafts, you've probably seen people who wait until the 19th round to pick up a catcher. In the same draft, someone probably drafted Joe Mauer in the 5th round. When you're deciding when to draft a catcher, you want to know what people think about catchers and the above recommendation. If you somehow know that everyone is following the above recommendation, you can bet that Russell Martin will be available in the 9th round and draft accordingly. That's a market inefficiency.

Another example: a common draft tenet is to not draft top-rated closers. If you know everyone is following this rule, but you really want Jonathan Papelbon, you can wait a few rounds more than you would normally to draft him.

It can be hard to figure out the trends of the draft while it's going on, especially in timed drafts like Yahoo's (90 seconds is not a lot of time). Some signs are obivous; position runs are the most obvious ones. When everyone is taking closers, the other positions are being neglected. Notice these trends.

Others inefficiencies are harder to spot. Typically you will only know how a drafter feels about single-spot positions (i.e. SS, 2B, and C) when they draft them, and then it's too late. The positions you can learn the most about are OF (undifferentiated), SP, and RP, since teams need multiple players for those positions. If you have time to keep track of your opponents drafting habits, you can see how they value those positions and make guesses as to when they might draft the next player.

You can also look at stat categories. Maybe runs are being undervalued. Maybe drafters are rushing to grab stolen bases. Keep an eye on available stats left on the board and how fast they leave the board.

You're not drafting in a vacuum; every other drafter is making moves, and every move they make carries a lot of information. In addition to your one draft sheet (you only have one, right?), you should have one scouting sheet. Take notes on your opponents. If you've played with them before, jot down your thoughts about them before the draft. If you can spot these trends before others do, you can get a huge advantage. 

(I'm hoping to handle some of this in Walrus, so keep your eyes peeled!)

Saturday, February 21, 2009

Just Do It

You know, Nike was right. 

Just do it.

Tuesday, February 17, 2009

I Love My Wife

I love Annie because she laughs at my lame jokes.
I love Annie because she picks up some of my lame jokes and uses them herself.
I love Annie because she has the best smile.
I love Annie because she doesn't mind if I burp in bed.
I love Annie because she understands me.
I love Annie because even though she understands me, she still loves me.
I love Annie because she's good with remembering things and I'm not.
I love Annie because she takes care of me when I need it.
I love Annie because she lets me take care of her when she needs it.
I love Annie because she reads my blogs.
I love Annie because she doesn't laugh at me when I have ridiculous thoughts or theories.
I love Annie because she makes me breakfast on Saturday (and usually Sunday) mornings.
I love Annie because for some weird reason she hates to make coffee, so I do it.
I love Annie because she plays fantasy sports and usually beats me.
I love Annie because she hates computers (and in doing so, shows she's smarter than I). 
I love Annie because she gives awesome hugs.
I love Annie because she's a pretty good kisser too.
I love Annie because she knows why I'm writing this list.
I love Annie because she smells really good, before and after perfume.
I love Annie because she loves to snuggle, and we fit together perfectly for snuggling.
I love Annie because she makes me smile.
I love Annie because she gets frustrated at little things that I can easily help her with, and then she smiles and says, "Oh, that was easy."
I love Annie because she likes playing racing video games with me.
I love Annie because she says things like "Why don't you go play Call of Duty with your boys," and she's not being sarcastic.
I love Annie because she has a great ass (oops, there goes the PG rating).
I love Annie because she buys me video games for Valentines Day.
I love Annie because she deals with all the craziness of my life.
I love Annie because she believes in her career and in helping people. 
I love Annie because she loves sitting on the couch and doing nothing.
I love Annie because she loves being productive and getting things done.
I love Annie because she laughs at me for recording Dollhouse because Eliza Dushku is in it.
I love Annie because she needs 8-10 hours of sleep a night.
I love Annie because she lets me keep my eyebrows huge by not trimming them. 
I love Annie because she loves me for me.
I love my wife :)

Sunday, February 8, 2009

A-Rod Did Steroids

When I saw the news on the ESPNNews ticker, I wasn't so much shocked as I was just disheartened. The whole time Bonds had been pushing to break Aaron's record, I wasn't too upset (well, ok, I was, but all those articles I wrote for the now-defuct BostonNow paper are offline so I can pretend I was calm) because I knew A-Rod would break Bonds' record and we'd have a new clean home run champion. But then this news came out. 

In the immortal words of Morpheus, "I have dreamed a dream. But now that dream has gone from me."

So now my whole world of baseball, the years I spent watching and learning and loving the game, are all finally revealed to be a complete fraud. Bonds, McGuire, and Clemens, they're not isolated users now; they were just the first to fall, harbringers of the truth. I really started watching baseball in 1996, right after McGuire started crushing pitches at a rate faster than anyone had ever before. So really, my personal baseball story is now the story of cheating and steroids. 

All right all right, I'm overdoing it a little. I still love baseball. I will still root for A-Rod. Maybe I'll appreciate guys like Jeter and Rivera more now. 

Let's just say that I've shifted my hopes to Pujols now. Man can that guy crush a ball. 

Saturday, February 7, 2009

Joel Vs. Kent Smackdown!

I've been listening to the Stackoverflow podcast for a while now and reading JoelOnSoftware for much longer than that. Joel recently started somewhat of a fight by laying the smackdown on SOLID design principles and 100% unit test code coverage.

Kent Beck was not fond of Joel's (self-admitted) generalization of SOLID principles. You can't really blame Kent, since Joel basically just dismissed Kent's whole deal. 

Joel said that the client-specific interfaces principle was probable designed and practiced by people who don't write much code. Kent did not go into details about why he disagreed, simply lamenting that Joel doesn't understand his own responsibility as a popular personality. 

Now, we could debate the merits of this until our ears turn blue*, but that's not what I have to add here. For people who are supposed to be leaders in their fields, they're not really thinking about things. Joel's most obviously talking about FogCreek-style software; shrinkwrap software that other software does not interface with. You know, where there is no client to have an interface with**? 

All I'm saying is that we need to use our brains before we talk. That's all.

*I happen to come down on the side of Joel on this one, except for public APIs (which Joel acknowledges as an exception as well. 

**Except the human client, but that's a whole other can of worms.

Tuesday, January 27, 2009

Game Log: Farcry 2; or, It's like Mercenaries but it doesn't suck.

Initial impressions: A good game. I like how the story and gameplay is weaved together. Starts with a now-classic "being driven in car but can move camera" scene, then gets you right into the action. A few dynamics have me impressed so far, but we'll see how they hold up.

Tuesday, January 20, 2009

All The Pics from Minnesota

Check out this album:

You can also check out the Flickr album, but it doesn’t have the nice auto-album feature that Windows Live does.

Sunday, January 18, 2009

Coming to You Live from Minnesota!

Annie and I are staying in Minnetonka, MN, in the loving wonderful home of Joe, Liz, and Jacob (Liz and Jake pictures below). We’ve wanted to come visit ever since Jake was born (August 8th, 2008), but various things have gotten in the way.

135413

We finally made it (after my company gave me a sizable bonus… Thank you GLG!)!

On a side note, I’m using this post to try out Windows Live Writer. Paul Thurrott has great things to say about it:

This is the single nicest blog editor I've ever seen ... and it works with just about every single blogging service there is, and not just Microsoft's Spaces service. If you do use Spaces, all the better: Setup is simple, and you'll be up and running in no time.

So far so good.

And check out this scattershot photo album I automatically created! I just selected a bunch of photos and said “Insert as Album”. Sweet.

Thursday, January 15, 2009

The Balance Between Safety and Speed; or, Does the Turtle Really Beat the Rabbit?

Eric and I argue about programming all the time and about every little thing, but we're really just arguing about one thing. I value safety, and he values speed. Let me elaborate.

The safety I'm talking about is making sure my code works right. I'm for strong typing because it can help find errors at compile time. I believe that databases have to enforce their constraints as best they can even if you're the only client. I prefer centralized version control (CVCS) over distributed version control (DVCS) because the restrictions CVCS enforces promote healthy branching and code. I believe in continuous integration, including full unit and integration tests.

The speed Eric talks about is being able to write "5.times.per.day" in Ruby and have it just work the way you expect. Eric loves git because he's able to get input seamlessly from developers around the world and easily integrate new code. And he loves easily discoverable features of his languages of choice.

Most of the time, the programming context determines the value of the two assets. Building a mission-critical app that handles financial data? Safety rules the day. Building a site to determine if it is Christmas or not? Speed please.

Programmer personality also is a significant factor. I know I make mistakes, so I prefer to use tools that prevent/detect said mistakes. I also know that others might use my code at some point, and as anyone who has ever worked with someone else knows, other people are dumb.

The reason I just started writing about this was because I had to change a "Thread.Sleep" call in one of my integration tests from 2 seconds to 5 seconds. To make this change and formally deploy the code to my project's development environment, I had to run the code through the entire 12 minute build process. And that's AFTER running the unit tests locally (5 more minutes). It would've been so nice to circumvent the whole process. And I wanted so much to do just that! But I held fast to my rules, and now I know the published package built from that build is ready to be released to QA.

Wednesday, January 14, 2009

Johan Santana SP +++ Is Pretty Good

Every baseball off season I prepare a note sheet with things I read or learn about baseball players that might help me come draft season. An example note from last season: "michael bourn of + like a cheap Juan Pierre; will get steals but kill your average". Sometimes I'm right ("brad lidge rp + give him a looksee") and sometimes I'm wrong ("nick swisher of/1b + especially in OBP leagues, slg .824 in ST over .464 career"). But I like writing these things down and taking stock.

My HSL note sheet for this off season has grown to 41 players (from A.J. Burnett to Zack Greinke, alpha-sorted by first name). I'm a little concerned that the majority of my notes are on starting pitchers (17). I also only have one negative note (sorry J.J. Putz). I've added a draft column to the sheet to suggest to myself what round I should target the player in. This information will work great with Walrus's "must-draft-by" feature.

There's just so much information out there and we can't keep it all in our heads the whole time. My HSL note sheet has been step one to organize my information. Walrus is step two.
All rights reserved. Take that!