Friday, October 02, 2009
Last weekend I ran the Shoreline Shuffle trail 5K. It was my first trail race and also my first first place finish. As a bonus, I also broke 20 minutes, which I didn’t think was possible for me on a trail run. I’ve posted a full race report (with way too many pics) on my running blog.
Wednesday, September 23, 2009
TwitApps was a great tool, it would email you when somebody @mentioned you on twitter. But, alas, they are shutting down and leaving what I think is a huge hole.
So I built my own service that does the exact same thing.
To use the service, visit MentionNotifier, and subscribe to your @mentions. To get notified of updates, follow @MentionNotifier or @timhibbard on twitter.
Here are some of the FAQ’s:
Q: What is this?
A: It is a service to notify you by email when somebody has mentioned you in a tweet.
Q: Who do the emails come from?
A: MentionNotifier@gmail.com
Q: How quickly will I be notified of a new tweet?
A: Currently, it checks every minute.
Q: How does it work?
A: It uses the search API of twitter to check for your twitter username.
Q: Isn't that just a glorified RSS reader?
A: Yes.
Q: Will it work with hashtags?
A: Yes. Put in the search string you want to be notified on (#KUbball) and the email address to send new tweets to.
Q: Will I receive multiple emails if I get multiple mentions?
A: It will group the mentions into a single email each checking cycle.
Q: Will it work if I get a mention from somebody that protects their tweets?
A: No, because protected tweets are not part of the public timeline.
Friday, July 31, 2009
I use Gmail for my personal email, and as an archive for my EnGraph email, but haven’t been able to use it as my main email client as it appends a “On Behalf of” to messages sent from Gmail using a non-gmail address.
Google has recently released an update to Gmail allowing you to use an SMTP server of your choosing, which removes the “On Behalf Of”.
Now I can email my clients from Gmail and they don’t know the difference!
Friday, July 17, 2009
Pre-approval letter in hand, let the house shopping begin!10:10 AM Apr 28th
Apparently it's impossible to look at a house without the realtor begging to be your buyer's agent. Back off people!1:36 PM Apr 30th
Finally going live with software that I've been working on for 2+ years!3:59 PM Apr 30th
First install and we run into a proxy brick wall...smooth4:43 PM Apr 30th
Done with an exhausting day of house hunting. Found a lot that we liked. One that we LOVED, in shawnee of all places.6:40 PM May 2nd
We still aren't sure if we could actually leave lawrence though. So much coolness in this town.6:41 PM May 2nd
Found another very cool house in shawnee. Love this area, didn't even really knew it existed before this weekend.3:01 PM May 3rd
My fav website these days: http://land.jocogov.org/ - amazing how some people are asking 2-3% above appraised value. Crack smokers8:59 AM May 6th
We just had a realtor tell us she wouldn't accept our pre-approval letter from BofA. Umm, seriously?5:47 PM May 6th
Officially submitted an offer on the shawnee house. Many knots in stomach.1:31 PM May 9th
Ugh...their counter offer sucks and they probably aren't going to like our counter offer...preparing ourselves to walk away from this one9:12 PM May 9th
Counter counter offer submitted. This is starting to get fun. Bring it on!12:13 AM May 10th
Still in negotiations, only battling over closing and possession dates now. Everything else is ironed out.4:32 PM May 10th
Our counter offer was rejected over...get this...$172 of rent we asked for because they wanted to live in the home for 4 days past closing7:55 AM May 12th
@ericjgruber That's how we feel. If this was such a big deal, what else would they have been stupid about during the rest of the process8:09 AM May 12th
Couldn't have said it better myself - @chibb's take on our offer being rejected - http://bit.ly/6m1Wt8:12 AM May 12th
http://twitpic.com/51v8d - The camry is rocking the gowagon.com sticker. Thanks guys. Unrelated: Sorry @chibb :)2:49 PM May 12th
Ben and @chibb landed safely in Chicago and Ben was a champ during the flight!10:09 AM May 14th
I don't know if "trained" is the word I'm looking for, but my wife is out of town and I still put the toilet seat down10:12 PM May 14th
Ugh...I've been up all night with the Buffalo Wild Wings Flu. No trail run for me this morning.6:58 AM May 16th
I slept 13 hours and feel a lot better. Still a little light headed and queasy and down about 8 lbs from avg weight. Never eating BWW again.7:27 AM May 17th
Excited that @chibb and Ben come home today. Trying to get the house cleaned up before I go pick them up from the airport8:08 AM May 17th
Choking down oatmeal with no milk. Apparently I have the bug where you feel fine on Sunday, but kicks you in the junk on monday.2:57 PM May 18th
Great bday dinner with @chibb, Ben, @kylejarcher, Allie and Sophs - http://bkite.com/07W4y7:20 PM May 28th
Ben is growing up. Got rid of the infant car seat today and installed the @Britax1:46 PM May 30th
Just placed an offer on a great place in Lenexa8:21 PM May 30th
Our offer was accepted!!10:42 AM May 31st
My favorite part of our new house - Pic: http://bkite.com/084g211:41 AM Jun 1st
Buying a warranty actually paid off for me. Got a new TomTom 930 today cause 910 that I bought 3 years ago has been crapping out.2:31 PM Jun 6th
We hit a few snags today during the inspection and getting insurance. Hopefully all will be resolved quickly.8:37 PM Jun 8th
Heading to a WPF conference in Chicago via Pella, IA and Madison. Ben's first really big road trip. #fb7:12 AM Jun 11th
Round 2 of negotiations (post-inspection) are done!8:14 AM Jun 11th
Getting ready to check in for my classes. Gonna be a great day of WPF learning. - http://bkite.com/08qvX7:58 AM Jun 12th
Awesome trail run tonight with the crew from TrailHawks - they were gentle popping my trail cherry :) - http://bit.ly/6ifZo10:25 PM Jun 17th
Heading to KC with @chibb to P&L to spend a night boozin' celebrating my 30th, father's day, buying a house and getting a babysitter :)2:10 PM Jun 19th
Video of Ben crawling around and standing himself up for the first time - http://bit.ly/t9eiU9:59 PM Jun 21st
@fxdgear we have too much crap!9:40 PM Jun 24th
Closing on Lenexa house in 12 hours! #fb11:19 PM Jun 25th
Homeowners!11:09 AM Jun 26th
Thanks everybody. @chibb and I are thrilled. And also a bit exposed, didn't realize that there wasn't any blinds :)12:23 PM Jun 26th
Everything is off the truck and into the house. Many thanks to my dad for helping and Chels mom for watching Ben #fb10:43 PM Jun 28th
First ever #bike commute. 2.91 miles in 11 minutes and 2 seconds. Pretty easy ride. A few hills, but nothing major.2:01 PM Jun 29th
@mintchaos The place is an absolute disaster of boxes. I couldn't find any clothes so I came work in gym clothes :)3:40 PM Jun 29th
Backed up pipes! Poop in the basement! Yay for home ownership!! - http://bkite.com/097G01:18 PM Jul 1st
We are moved in enough that we can park one car in the garage! - http://bkite.com/09c4i12:08 PM Jul 3rd
Enjoying a beautiful night with @chibb on our new deck. -http://bkite.com/09fMg9:16 PM Jul 4th
I ran a 5:46 mile this morning. My fastest ever since high school -http://bit.ly/16tKNT9:02 AM Jul 10th
I promise to be a better blogger :)
Monday, March 23, 2009
This is a great tool for those circumstances where ordinary sarcasm isn’t quite enough to get the point across.
http://lmgtfy.com
In action: http://tinyurl.com/d2yyxl
Friday, February 27, 2009
Since my Dell D610 is three years old, I decided it was time for a new lappy. I finally decided on a E6400 from Dell.
Finally a machine that can actually run Vista. Here is my score:
So far I love it. I can have VS 2008 plus a couple virtual machines open and it doesn’t even blink.
Technorati Tags:
Dell,
E6400
Friday, February 20, 2009
I asked my first question on stackoverflow today. I want to make sure I’m unsubscribing from PropertyChanged events properly. Please head over and put in your two cents.
Monday, January 05, 2009
In ParaPlan 4.0, we use twitter to maintain a change log. I wanted to display this information to our users, so I wrote a little class that calls the RSS feed and uses LINQ to parse the data. All I need is the message and the date, so that is all it pulls out.
Here is the class:
public class Twitter
{
public string Message { get; set; }
public DateTime PubDate { get; set; }
public static List<Twitter> Parse(string User)
{
var rv = new List<Twitter>();
var url = "http://twitter.com/statuses/user_timeline/" + User + ".rss";
var element = XElement.Load(url);
foreach (var node in element.Element("channel").Elements("item"))
{
var twit = new Twitter();
var message = node.Element("description").Value;
//remove username information
twit.Message = message.Replace(User + ": ", string.Empty);
twit.PubDate = DateTime.Parse(node.Element("pubDate").Value);
rv.Add(twit);
}
return rv;
}
}
Our calling code looks like this:
var changes = new List<string>();
var fromTwitter = Twitter.Parse("ParaPlan");
fromTwitter.ForEach(t =>
changes.Add(t.PubDate.ToString("MM/dd/yy") + " - " + t.Message));
var list = new ListBox();
list.ItemsSource = changes;
Friday, January 02, 2009
On 12-20-2008, my wife Chelsea, gave birth to our beautiful baby boy Benjamin. It’s been a crazy exciting and busy couple of weeks so far. I’ve tried to respond to all the many people that have congratulated us on twitter and facebook, but if I forgot, thank you so much. All of your kind words and well wishes have been very appreciated!!
Many more pictures here.
Technorati Tags:
Benjamin
Tuesday, December 09, 2008
This code example will show how to hide a listbox from the user when it doesn’t have any items.
It involves binding the Visibility of the listbox to the Items.Count of the listbox. We run the Items.Count through a converter that will return a Visibility.Visible object if the Item.Count is not zero.
Here is the converter class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows;
namespace HideAListBox
{
public class ZeroCollapsedNonZeroVisible : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var rv = Visibility.Visible;
var val = 0;
int.TryParse(value.ToString(), out val);
if (val == 0)
{
rv = Visibility.Collapsed;
}
return rv;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Here is the window code:
<Window x:Class="HideAListBox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converter="clr-namespace:HideAListBox"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<converter:ZeroCollapsedNonZeroVisible x:Key="hideListBox"/>
</Window.Resources>
<DockPanel LastChildFill="True">
<Button Content="Add Item" Click="addItemClick" DockPanel.Dock="Top"/>
<Button Content="Clear Items" Click="clearItemsClick" DockPanel.Dock="Top"/>
<ListBox Margin="3" BorderBrush="Blue" Name="myListBox"
Visibility="{Binding ElementName=myListBox,
Path=Items.Count,
Converter={StaticResource hideListBox}}"/>
</DockPanel>
</Window>
The entire project can be downloaded here.
Tuesday, November 25, 2008
I try to use keyboard shortcuts as much as possible. Here are some that are handy when unit testing with Visual Studio:
Ctrl + R, A – Run all tests
Ctrl + R, T – Run tests in context (based on if cursor is in function, class, or namespace)
Ctrl + R, F – Runs all tests that are checked in Test Results – very handy because that window is impossible to navigate without a mouse
Ctrl + R, Ctrl + A – Run all tests in debug mode
Ctrl + R, Ctrl + T – Run all tests in context in debug mode
Ctrl + R, Ctrl + F – Run all checked tests in debug mode
Friday, November 21, 2008
The newest version of Google Sync adds a great new feature of syncing contacts. Now your Gmail contacts will stay up to date with your Blackberry contacts and vice versa.
Very nice!
Download page here.
Wednesday, November 19, 2008
TeamBuild is such a powerful tool. We use it to run our unit tests and publish our apps using ClickOnce. Recently we started using it to publish a web service. This code depends on MSBuildTasks from Tigris.
<PropertyGroup>
<DeploymentFolder>**SHARED FOLDER ON WEB SERVER**</DeploymentFolder>
<DeployServerName>**WEB SERVER NAME**</DeployServerName>
<ApplicationPoolName>ReportingWS</ApplicationPoolName>
<VirtualDirectory>ReportingWS</VirtualDirectory>
<WebBinariesLocation>$(BuildDirectoryPath)\Binaries\Release\_PublishedWebSites\ReportingWS</WebBinariesLocation>
</PropertyGroup>
<Target Name="AfterCompile">
<RemoveDir Directories="$(DeploymentFolder)" ContinueOnError="true" />
<Exec Command="xcopy /y /e /i $(WebBinariesLocation) $(DeploymentFolder)"/>
<WebDirectoryDelete VirtualDirectoryName="$(VirtualDirectory)"
ContinueOnError="true"
ServerName="$(DeployServerName)"/>
<WebDirectoryCreate VirtualDirectoryName="$(VirtualDirectory)"
VirtualDirectoryPhysicalPath="$(DeploymentFolder)"
ServerName="$(DeployServerName)"/>
</Target>
Essentially, we just copy the executable files from the Web Service to a shared folder on our web server and map a virtual directory to that shared folder.
Tuesday, November 18, 2008
This code snippet extends the functionality found in prop code snippet. It will populate the backing field in the property, check for equality in the setter and call PropertyChanged. It assumes you have a base class that handles the implementation of INotifyPropertyChanged.
When the snippet is called, it will generate code that looks like this:
private int myVar;
public int MyProperty
{
get { return myVar; }
set
{
if (!myVar.Equals(value))
{
myVar = value;
base.OnPropertyChanged("MyProperty");
}
}
}
To use this snippet, create a new text file at:
C:\users\<your user name>\Documents\Visual Studio 2008\Code Snippets\Visual C#\My Code Snippets
Call it “propINP.snippet”
Populate the contents of the file with this:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
<Title>propINP</Title>
<Author>Microsoft Corporation</Author>
<Description>Code snippet for property and backing field and INotifyPropertyChanged</Description>
<HelpUrl>
</HelpUrl>
<Shortcut>propINP</Shortcut>
</Header>
<Snippet>
<Declarations>
<Literal Editable="true">
<ID>type</ID>
<ToolTip>Property type</ToolTip>
<Default>int</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>property</ID>
<ToolTip>Property name</ToolTip>
<Default>MyProperty</Default>
<Function>
</Function>
</Literal>
<Literal Editable="true">
<ID>field</ID>
<ToolTip>The variable backing this property</ToolTip>
<Default>myVar</Default>
<Function>
</Function>
</Literal>
</Declarations>
<Code Language="csharp"><![CDATA[private $type$ $field$;
public $type$ $property$
{
get { return $field$;}
set
{
if(!$field$.Equals(value))
{
$field$ = value;
base.OnPropertyChanged("$property$");
}
}
}
$end$]]></Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Monday, November 17, 2008
On another personal note, Chels and I are expecting our first child (a strapping young man) on 12-26. My good buddy Matt, who stood at our wedding, and his wife are also expecting a few days before us. I wonder if our kids will ever figure out they were championship babies.

For a while now, one of my goals has been to run a 5K (3.1 miles) in under 20 minutes. This morning I finally broke that number.
Technorati Tags:
Running,
Nike+,
5K
Friday, November 14, 2008
According to my Blogflux search engine results for the last month, Google has not just cornered the market, they have virtually snuffed out the competition.
| Engine | Hits | Percentage |
| Google | 17596 | 98 |
| Yahoo | 202 | 1 |
| Ask Jeeves | 36 | 0 |
| AOL | 35 | 0 |
| MSN | 18 | 0 |
| Search.com | 6 | 0 |
I prefer to use web-based solutions when possible, but the other day the publish feature of google docs wasn’t working right, so I needed to install Windows Live Writer. I quickly found out that WLW doesn’t play nicely with Windows Server 2008.
Since WLW is written in .NET, I just installed it on an XP virtual machine and copied the Program Files folder over to my Server 2008 machine. Simple.
Wednesday, November 12, 2008
I went to the KU game last night with Kyle. We won very easily. On an odd note, the singer of the National Anthem was the daughter of the Emporia State coach, and was wearing a KU shirt.

Tuesday, November 11, 2008
Using colors is a simple way make your application less boring. You can change the color of the selected and unselected item in a ListBox by using code like this:
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightBlue"/>
</Style.Resources>
</Style>
This style can be put in the resources of the ListBox to just affect that ListBox, or it can be put in resources of the Window and it will apply these styles to all ListBoxes in the window. You can also use the Application.Resources of App.xaml and all ListBoxes in your application will have the same look and feel.