- My father passed away in 2009
- I've gotten old. At least I feel old. The weight has got to go. Sometimes I wonder if quitting smoking was such a good idea - I was a lot thinner then.
- I need to wear glasses for certain things. So far I haven't gone to see an eye doctor - I just get those drug store reading glasses.
- I'm in a different band - Laughing Through Your Fingers - http://laughingthru.com - I'm really fortunate to be playing with these folks. They are dear friends and way better musicians than I am.
- Our dog Bonsai passed away in 2009
- I play guitar a lot these days. When the band isn't gigging, I sit in with folks when I can and play at local open mics, jams, etc.
- New car, guitars, etc.
- Somehow I ended up singing backup vocals - who thought that was a good idea? I can't play or sing very well so doing them at the same time brings the fail.
- People have pretty much stopped buying CDs. In fact, they try not to pay for music at all.
- I've switched teams at work - I was working on Visual Studio but a couple years ago I switched to working on our mobile OS which became Windows Phone 7
- We finally got rid of Bush. But we got Obama. I suppose that's a trade up and definitely better than McCain but it's depressing to think this is the best we can do.
Saturday, April 02, 2011
Is this thing on?
Wednesday, September 13, 2006
Mopping Janet
For the past few months Chefdino and I have been putting together a band. The primary goal is to create original music. We went through Craig's list here in Raleigh to put it together.
I hadn't really started a band from scratch in years. What an ordeal...
My wife turned 40
She turned 40 last Thursday. I wanted this birthday to be memorable in a fun way. So no serious gifts! That's not to say she didn't get some cool stuff, just no jewelry or appliances or anything that is overly typical for a birthday. I mostly went with a theme of getting her stuff she enjoyed growing up. So here's a run down of the goodies:
- The kids each painted her a picture and I framed them - Nicholas did the family and Danny did a beach scene - very cool stuff!
- Then the kids painted her a wooden stool - basically a really nice barstool type chair - she can use this in her own crafts work area. It's very colorful. Our kids rock!
- Melissa was really into the pogo stick as a kid. She'd bounce up and down the stairs and all around the neighborhood. So I got her the FLYBAR 1200! This thing is a serious piece of hardware. It can go up to six feet in the air! Oh hell yes, this thing is cool!
- She also really got into the hula hoop. In fact, she one the hula hoop contest at a large family affair a couple years ago. She smoked everyone. So naturally I got her several hula hoops. As it turns out I should have bought those online because they were sold out everywhere around here - I had to go to 8 stores to find them.
- I got her a talking ALF doll. If you don't remember the show ALF then this will mean nothing to you. If you remember the show, you are probably already giggling. It's pretty funny. Our smaller dog wants to tear ALF to shreds. I think he gets pissed that ALF is always saying "here, kitty, kitty".
- Then there were a bunch of things like a paddle ball set, kaleidoscope, etc.
The day before her birthday the kids were so excited about the gifts that we gave them to her a day early - LOL.
We had a party on Saturday. It was a great crowd and a great time. It's really kickass to be surrounded by great people.
Oh, in keeping with the theme of things I had bought a ton of candy from our childhood era. You can get anything on the Internet. Stuff like wax lips, pixie stix, Zotz, Charms, bottle caps, those wax bottles with colored sugar water in them, etc. All the kids at the party went nuts with this stuff. It started off as a pretty big box full of candy. I couldn't believe how much those little monsters ate! I was lucky to get some Zotz!
Melissa had treater herself to a new outfit for the party. She looked great. Really great.
She had a blast. We had friends and family from out of town as well as some of the excellent folks we've come to know since we've moved to NC.
Wednesday, September 06, 2006
Queensryche
The House of Blues is not that big of a venue but it was PACKED. The crowd reaction sounded like an arena - the crowd was LOUD. There were a couple drunk a**holes near us that kept spilling drinks and bumping into us - so I farted. Oh, and after the last tune Scott Rockenfield tossed a couple sticks out and of course people went diving for them and came up throwing punches - Scott just shook his head in disbelief and walked out. What kind of moron throws down for a pair of drum sticks?
Sunday, May 14, 2006
Mother's Day
Melissa spent a lot of time making the soup - a delicious ham and bean soup with her own personal touches. I love it.
After she got the beans soaking last night, started the stock, and everyone else went to bed (Karen and Laura were here for the weekend), Melissa came down and helped me untangle cables in the jam room. There were a LOT of cables and she was really helpful. It made a pretty tedious task fun because we got to just enjoy each other's company.
This morning Melissa got the soup going and it cooked for hours. Yum. It was GOOD. Real GOOD.
Ideally I would have been more helpful but I kept fading out today - I've had severe throat problems for a couple days and it really kicked my butt today.
The kids made some very cool cards/drawings for Melissa and were pretty darn good today.
It was a great day for me - Melissa I hope it was for you too.
HippieSound Inaugural Jam
Dino was over today with his wife and daughter celebrating Mother's Day (hope y'all had a good one by the way). We snuck off down to the basement for a while and just fooled around with some bits and pieces of stuff for some songs. We're both a bit rusty but who cares - it was fun!
I just plugged my nylon string Godin guitar into the PA and started noodling song ideas. Later I busted out the Taylor T5 and noodled some more. Given a lull of any kind I tend to just move on to something else so we were all over the map.
It's been funny to discover that despite a lot of common musical ground and our close ages that we really don't know many songs in common. It's just as well, I want to do original music anyhow.
Thursday, May 11, 2006
Tuesday, May 02, 2006
Floyd Rose V24 Arrow Arrives!
More pics are available here.
HippieSound Studios Done!
Wednesday, April 12, 2006
The Man Who Sold The World
Friday, April 07, 2006
Bush joke
Bush says "how many people are in a brazillian?"
Workflow for Team Foundation?
We have a number of scenarios we'd like to enable in future releases of Visual Studio Team Foundation that would really benefit being part of a generalized workflow framework. Things like code review/checkin processes, build release and staging, etc. And no matter how many scenarios you cover, customers will always come up with more. Building workflow into a system can be hard enough without having to make it extensible too. Fortunately, Microsoft is working on the Windows Workflow Foundation as part of WinFX. This looks very promising. One of the folks on the team, Mark Schmidt, has written an authoring tool that looks interesting.
A company I worked for many years ago developed a huge workflow system for OS/2 and Unix so I've always been intrigued by this stuff. It was ginormous and had all sorts of memory limits, usability was poor (it used lots of non-modal windows - and I mean lots), and everything was so darned generic that as a user you really had too much of the implementation exposed to you. The problem is that it was a generalized engine that wasn't really a proper API that had a GUI slapped on top of it. When what you really want is an engine that manages the flows and allows you to build a tailored customer experience that is relevant for your scenarios.
Stay tuned...
Musical Journey Part 7
Then it came time to play the high school talent show. Lots of obstacles here. First, I was in trouble for some reason or another and was on restriction of some sort. Eric pleaded the case to my dad that it was not fair to the rest of the band to miss the opportunity so my folks relented and I could play the show. Then the talent show committee (or whatever it was) said Mike D. couldn't play in the band because he didn't go to our high school. So I filled in on bass - it sucked because we couldn't play the more interesting tunes we had planned on. Also, I didn't know the bass parts for the tunes we did play beforehand so I had a quick crash course on the tunes. We pulled it off and basically rocked the house. Of course we lost to some girl that did a really boring Asian dance. What a bunch of BS!!! Still, the talent show led to us getting to play a couple more keg parties.
Friday, March 31, 2006
Wednesday, March 29, 2006
How to get the active Team Foundation Server and Project from an Add-In
Ed Hintz posted "How to Write a Team Foundation Version Control Add-in for Visual Studio" which is a great guide to writing an add-in to integrate with Team Foundation version control. I won't repeat that info her. If you want to do something that is related to the active Team Server and/or Project from within a VS Add-In or VSIP package then read on.
First make sure you have a reference to Microsoft.VisualStudio.TeamFoundation - either follow Ed's steps to add them via the REG.EXE commands for convenience or load them using the Browse tab on the Add Reference dialog - in a default installation the assembly will be in "%programfiles%\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies".
Next add a using clause:
using Microsoft.VisualStudio.TeamFoundation;
Create a member variable in your Connect class for the TeamFoundationServerExt object:
private TeamFoundationServerExt _tfsExt;In your OnConnection method, initialize the _tfsExt object:
_tfsExt = _applicationObject.GetObject("Microsoft.VisualStudio.TeamFoundation.
TeamFoundationServerExt") as TeamFoundationServerExt;
The TeamFoundationServerExt object exposes two things:
- ActiveProjectContext - a
public sealed class ProjectContextExt DomainName is the display name of the current server and DomainUri is the actual URI of the current server. And ProjectName is the display name of the current server and ProjectUri is the Team Project URI. Note that these values can be null if there is no active server or project. Your ProjectContextChanged handler should look like this: Within your handler you requery the ActiveProjectContext property of the TeamFoundationServerExt object.
{
public string DomainName { get; }
public string DomainUri { get; }
public string ProjectName { get; }
public string ProjectUri { get; }
}
{
}
Will Code For Food
This article originally appeared in the Wall Street Journal several years ago. It's come up from time to time at work and most folks find it to be an amusing tale so I figured I'd post this before I lose track of it.
In these dark days of dot-com despair, Web developer Brian Yangas never thought a practical joke would yield three job leads in an hour.
Recently Patrick Husting, eHome Inc.'s chief technology officer and co-founder, told Mr. Yangas and 30 of his co-workers at the company's Bellevue, Wash., tech office that the online real-estate brokerage would shut all of its 11 regional sales offices and lay off the employees there.Only the tech office would remain open while eHome tried to sell its technology. But the company might run out of money, so Mr. Husting suggested the employees be prepared and start looking for other work.
Mr. Yangas, a self-described "quirky guy," didn't fix up his resume; he fixed up a cardboard sign. It read "Web Developer...dot-com went bust...will code for food (or options)...hungry -- sober."
He arrived at work at 8:30 the next morning, bundled against the November chill in a hardy brown twill jacket and baseball cap. Sign in hand, he strolled out to the nearby highway-exit ramp and waited to make his co-workers laugh as they arrived. Mr. Yangas, 31, hoped his joke would "relieve the anxiety," he says. "You know, lighten the mood."
For the first 10 minutes, passing drivers essentially ignored the avid foosball player. Then some of the commuters, most of whom he didn't recognize, "started to notice and laugh, so I thought I'd stay a bit longer," he says.
A man driving "maybe a Toyota" shouted "Cogenix is hiring!" Mr. Yangas recalls. Cogenix is a database-application and Web site maker based in nearby Redmond, Wash. About five minutes later, Cami Cole, an associate with information-technology recruiter Maxim Group, stopped and asked "Are you really a Web developer?" Mr. Yangas nodded, and Ms. Cole handed him a business card with the parting words, "I can get you a job."
After about 45 minutes, Mr. Yangas went inside to warm up. He came back out at 10am because his boss wanted a picture of the prank. While Mr. Yangas was waiting for Mr. Husting to find a camera, "a long-haired guy in a blue truck" yelled, "Go to Microsoft campus building D. Ask for Tim."
"I wasn't sure what to think about it at first," Mr. Yangas remembers, "but later that day, no one was doing any work," so he headed down to the Microsoft campus. "I thought, it's been a weird day so far; let's see what fate brings."
He found the D building on Microsoft's Red West campus. It was three or four stories high and Mr. Yangas, who had caught only a fleeting glimpse of his contact, worried he wouldn't find the right Tim.
But he did. With the help of a new receptionist who didn't know a soul in the building but did have access to a photo database of employees, Mr. Yangas located what he thought might be the right extension.
The receptionist called: "There's this guy down here who said you yelled to him on the street." Tim Noonan, a development manager for Microsoft's MSN Explorer group, came down to meet Mr. Yangas, took him back to his office and talked to him for 15 to 20 minutes before passing him on to other members of Mr. Noonan's team.
"We're always looking for good developers, so why not" talk with Mr. Yangas, Mr. Noonan says. "And if he's as good a developer as he is at coming up with this scheme then woo-hoo! We value creativity."
Mr. Yangas "was pretty excited" about the outcome: Mr. Noonan called him back for a second, formal interview a few weeks later. And yet another rolled around a week later. Among other things, he was asked to write code on a dry-erase board and was interviewed during lunch to see if he could answer tough questions while eating. The interview lasted nine hours.
Thursday brought good news. A human-resources representative called to say the company would be making him a job offer early in the new year, once "the numbers guy comes back from vacation."
Meanwhile, eHome hasn't shut down. Since the pre-Thanksgiving meeting, Mr. Yangas's current employer has decided to reposition itself as a technology company. EHome's Web site is up and running, the company is referring leads to former agents and receiving referral fees.
So Mr. Yangas, who has two kids and is paying off a home mortgage and a minivan, says he hasn't "gone back out" with his sign. He was encouraged by the job leads, he says, but, in fact, "I was actually kind of hoping for money."
Tuesday, March 28, 2006
The best thing you can get for your iPod
The Bose SoundDock. Really. It is way cool. It is way expensive too but given the simplicity, elegance, and sound quality it is well worth it. Too many iPod docking units have subwoofers, separate speakers, lots of switches, look clunky, etc.
When I told my wife I was going to put a stereo in our living room that she had meticulously decorated she gave me a very skeptical look. Then I brought the SoundDock home and she liked it pretty much from the get go - "you mean I just plug my iPod in and that's it?" Yep. And it charges the iPod as well so I/she can just grab it and go. Since we got it we've had a lot of guests and pretty much everyone is amazed at the sound produced by that little gizmo. I'm sure we've inspired a few iPod and Bose purchases. The downside is that the SoundDock isn't very versatile - it just works with the iPod and that's it.
HippieSound Studios Construction Week 6
This he helped me level the floor. I started to do it myself. This shit was supposed to be self leveling concrete. Um. Yeah. You level it yourSELF. Fuckers. I've done a bunch of construction work but have never used a trowel in my life. I didn't screw it up though because when he came over and helped me out we knocked it out pretty quick.
Flashing Dialogboxes
This example demonstrates how to flash a dialog in the taskbar after performing a long running operation from the command line. A good example of how this is useful is in the VS Team Foundation version control toolset. Naturally, it includes a command line utility (TF.EXE) to perform source control operations. Sometimes these operations can be very lengthy and in the end result in a dialog box popping up - performing a lengthy GET operation that results in conflicts to resolve is a good example of when this would happen.
Our own UI framework does quite a bit more than this - this is just a scaled down example of what happens when a dialog is invoked from the command line. Many of our dialogs end up getting displayed in Visual Studio, standalone Windows apps, Excel, the command line, etc. So in our framework the method to show a modal dialog is actually virtual so the appropriate thing happens in each environment.
using System;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
namespace ConsoleFlasher
{
class Program
{
static void Main(string[] args)
{
Thread.Sleep(5000); // Lengthy operation...
using (MyForm form = new MyForm())
{
UIHost.ShowModalDialog(form);
}
}
}
static class UIHost
{
static public DialogResult ShowModalDialog(Form form)
{
return ShowModalDialog(form, null);
}
//********************************************************************************************
/// <summary>
/// Display a modal dialog a windows application.
/// </summary>
/// <param name="form">The form to display.</param>
/// <param name="parent">The parent window for window stack ordering.</param>
//********************************************************************************************
static public DialogResult ShowModalDialog(Form form, IWin32Window parent)
{
bool isTopLevel = parent == null;
form.ShowInTaskbar = isTopLevel;
form.MinimizeBox = isTopLevel;
form.ShowIcon = isTopLevel;
if (isTopLevel)
{
// Attach an event handler so maybe we'll flash the title in the taskbar
form.Activated += new EventHandler(OnModalDialogFormActivate);
// This is where you would also set your app icon on the dialog as well.
}
DialogResult result = form.ShowDialog(parent);
if (isTopLevel)
{
form.Activated -= new EventHandler(OnModalDialogFormActivate);
}
return result;
}
//********************************************************************************************
/// <summary>
/// On form activate for a modal dialog for the console. We check to see if we are the
/// foreground window and flash the taskbar if we aren't.
/// </summary>
/// <param name="sender">Form to activate</param>
/// <param name="e">Standard event args</param>
//********************************************************************************************
static private void OnModalDialogFormActivate(object sender, EventArgs e)
{
Form form = sender as Form;
if (form != null)
{
Debug.Assert(form.Visible, "Form should already be visible for FormActivate");
IntPtr foregroundHwnd = NativeMethods.GetForegroundWindow();
// First see if we're in the foreground
if (foregroundHwnd != form.Handle)
{
IntPtr consoleHwnd = NativeMethods.GetConsoleWindow();
// We're not in the foreground so let's see if our console is.
if (foregroundHwnd != consoleHwnd)
{
// We're not in the foreground and neither is our console window so let's
// flash the user.
int flashCount = 1;
// make sure we read the count from the system and respect this for accessibility
NativeMethods.SystemParametersInfo(NativeMethods.SPI_GETFOREGROUNDFLASHCOUNT, 0, ref flashCount, 0);
NativeMethods.FLASHWINFO fwi = new NativeMethods.FLASHWINFO();
fwi.cbSize = (UInt32)Marshal.SizeOf(typeof(NativeMethods.FLASHWINFO));
fwi.dwFlags = NativeMethods.FLASHW_ALL;
fwi.dwTimeout = 0; // This will get the system default which is the caret blink rate
fwi.uCount = (UInt32)flashCount;
fwi.hwnd = form.Handle;
// blinky, blinky, blinky
NativeMethods.FlashWindowEx(ref fwi);
}
else
{
// Our console has the input focus so let's be a bit more agressive...
NativeMethods.SetForegroundWindow(new HandleRef(form, form.Handle));
}
}
// Don't call us again...
form.Activated -= new EventHandler(OnModalDialogFormActivate);
}
else
{
Debug.Fail("Invalid sender in OnModalDialogFormLoad");
}
}
}
static class NativeMethods
{
public const int SPI_GETFOREGROUNDFLASHCOUNT = 0x2004;
public const int FLASHW_STOP = 0;
public const int FLASHW_CAPTION = 0x00000001;
public const int FLASHW_TRAY = 0x00000002;
public const int FLASHW_ALL = (FLASHW_CAPTION | FLASHW_TRAY);
public const int FLASHW_TIMER = 0x00000004;
public const int FLASHW_TIMERNOFG = 0x0000000C;
[StructLayout(LayoutKind.Sequential)]
internal struct FLASHWINFO
{
public UInt32 cbSize;
public IntPtr hwnd;
public UInt32 dwFlags;
public UInt32 uCount;
public UInt32 dwTimeout;
}
[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
public extern static int FlashWindowEx(ref FLASHWINFO fwi);
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern bool SystemParametersInfo(int nAction, int nParam, ref int value, int ignore);
[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
internal static extern IntPtr SetForegroundWindow(HandleRef hwnd);
[DllImport("user32", SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
internal static extern IntPtr GetForegroundWindow();
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false)]
internal static extern IntPtr GetConsoleWindow();
}
}
