Longhorn People & Groups

As told by Oliver Fisher, Lead Software Design Engineer

  • Maybe the ecomony actually is picking up...

    Last week I had a cool Friday afternoon experience: I was cold called by a recruiter.  In six years of working at Microsoft, this is the first time that’s happened to me!  I’d heard rumours of this happening when I first started at Microsoft while the tech bubble was still growing but I was still fresh out of university so no one ever called me.  (Although I did get a bizarre set of phone calls from a brokerage firm straight out of Boiler Room.)

     

    After the recruiter introduced herself, I actually started to laugh and had to tell her that this was my first ever recruiting call.  She seemed to understand my enjoyment of the experience.  She made her pitch for the small networking firm about to grow and asked my interest.

     

    Of course, I blew the whole thing by asking what city we were talking about.  I hadn’t noticed whether it was a forwarded call from my office or if it was a direct call to my house in Ottawa.  I think the recruiter ended up being more interested in my work situation that I was in the job!  I forgot to ask all sorts of interesting questions (like how much it paid).

     

    I found two things interesting about this experience.

     

    First, the recruiter really did her job well.  Even though I wasn’t interested, she wanted to know if I could give her any referrals.  I wasn’t comfortable doing that because I was a manager at Microsoft and felt I had a responsibility to not poach at work.  She didn’t give up though and said she’d send me an email with details about the company that I could pass on to other people so they could contact her if they wanted.  Needless to say, I still have ethical problems doing that – but the email was interesting.

     

    Second, this was clearly a cold call.  The recruiter had called me through the main switchboard and didn’t have my direct number.  She seemed to know that I was a developer, but didn’t know that I was a lead or that I worked on Windows or even what my email alias was.  I wonder where the heck she got my name from.  Steve suggested that it may be because of this very blog.  So, if you’re a recruiter reading this, please make me an incredibly lucrative offer.  (I will require a corner office with a private bathroom and I don’t want to work on Fridays or Mondays…)

  • Monday Morning

    We call our team “People & Groups”.  Today, someone from another team sent me a log file for a People & Groups scenario called “png.xml“.  I stared at the name for about 3 minutes trying to figure out why they'd sent me a log for a picture scenario.  Then it dawned on me...  I guess it really is Monday morning.
  • Arnold Schwarzenegger

    The other day we found out that Steve (one of our developers) has the same phone number as Arnold Schwarzenegger!  Steve had a bizarre voice mail from someone looking for Arnie.  We're not sure why Steve's greeting led them to believe that they should actually leave their number...  We scratched our heads for a minute, but then realized that area code 415 was in California (one digit different from Redmond's 425).  So a quick reverse phone number lookup confirmed that Steve's phone number is identical to the California Governor's Office!  Apparently this explains several phone messages that Steve has recieved over the years.  The only question is how we can use this for profit and fame...
  • Delayed Flight

    It's currently 8:30pm.  My flight was supposed to take off at 6:05pm.  It's now scheduled to take off at 9:30pm.

    I'm sitting in the Air Canada lounge in Toronto on my way to Seattle and I'm bored.  They've got a free wireless network in here so I'm hooked in nice and fast and I thought I'd revive my blog.  I've never really stopped thinking about it but the move from gotdotnet.com slowed me down.  And, I've finally registered darkcanuck.ca but still haven't gotten around to getting a static IP at home.  Eventually this blog will move there when I get off my ass...

    I'm on my way from Ottawa, where I live, to Seattle, where I work.  I started working for Microsoft as a developer in June 1998.  I lived in Seattle for a couple of years, but my girlfriend Kristi was in law school in Toronto so I commuted back there a lot.  Finally, in March 2001 I decided to move back to Toronto.  I was lucky enough to have a great set of people that I worked with who were willing to try letting me work remotely.  I've been working from Toronto (and then Ottawa) ever since then (so I guess it worked out).  I fly to Seattle for about one week every month to spend some face time with the rest of the team, but apart from that I just talk to them on the phone and via IM and email.

    As a result of that, I spend a lot of time on planes, specifically Air Canada planes.  Right about now, I should be going to stand in line to try to get on this delayed flight.  I'll probably post again in half an hour when they delay the flight again...

  • Spam

    Since the PDC I've been monitoring newsgroups. So, I diligently followed our internal guidelines for setting up and posting to newsgroups. That includes stuff like a legal disclaimer that I don't really know what I'm doing and that even if I did Microsoft would deny all knowledge of my existence. It also included a suggestion to use my real email alias (oliverf) but to modify the domain to something like online.microsoft.com. A human can figure out what my real email address is (get rid of the red "online."), but a spam scraper won't.

    I wish I'd followed that advice. I posted a reply to a question with my real email address in the reply-to field. I assume I was thinking, you know, I don't get any spam right now. Maybe some of it would actually be useful to me. Who knows what fabulous products I'm missing out on? And, wouldn't it be convenient if Microsoft just mailed me security updates right to my inbox as attachments?

    Within about 3 hours of that post, I started to get spam. I used to get spam to my university email address but I think that was before spam really took off. It wasn't that big an issue. For whatever reason, my Microsoft email address didn't ever get spam. Spammers don't seem to target us for their random alias generation tools, or maybe they haven't got to the letter 'o' yet.

    I changed my Outlook Express settings to oliverf@online.microsoft.com for subsequent posts, but that whole barn door thing comes to mind... I guess I'm now just sharing the pain that most people go through. Maybe Microsoft will let me change my alias...

  • CS0071

    We ran into a problem yesterday that took a while to figure out.  It was one of those programming issues where you know there are about 3 lines of code you need to write, but figuring out which 3 lines takes a while.

    We had two interfaces with events with the same name and the same object needed to implement both.  We knew this wasn't a problem for methods so we suspected that it wasn't a problem for events either.  We just had to figure out the C# syntax.

    Our first attempt went something like this:

    class MyClass : NS1.IFoo, NS2.IBar
    {
        event NS1.MyEvent NS1.IFoo.EventName;
        event NS2.MyEvent NS2.IBar.EventName;
    } 

    That produced compiler error CS0071: An explicit interface implementation of an event must use property syntax.  A quick search on MSDN got us some sample code. Too bad the sample code was incorrect.  I've filed a bug with MSDN.

    Based on the incorrect sample code, attempt number two was roughly:

    class MyClass : NS1.IFoo, NS2.IBar
    {
        event NS1.MyEvent NS1.IFoo.EventName
        {
            get { return null; }
            set { }
        }
    } 

    That produced compiler error CS1055: An add or remove accessor expected.  This time MSDN was more helpful and gave us the correct syntax, although the code still didn't actually work.

    class MyClass : NS1.IFoo, NS2.IBar
    {
        event NS1.MyEvent NS1.IFoo.EventName
        {
            add { EventName += value; }
            remove { EventName -= value; }
        }
        void FireEventName()
        {
            if (EventName != null) { EventName(); }
        }
    } 

    As we typed the code, it seemed like it wasn't going to work.  The add accessor calls the add accessor which calls the add accessor, etc.  Interestingly, the compiler didn't castigate us for that but it did complain about our attempt to fire the event with CS0079: The event can only appear on the left hand side of += or -=.

    This time MSDN's sample code gave use the full picture and we used a couple of private events.  The final code went something like this.

    class MyClass : NS1.IFoo, NS2.IBar
    {
        private event NS1.MyEvent InternalEvent1;
        private event NS2.MyEvent InternalEvent2;
        public event NS1.MyEvent NS1.IFoo.EventName
        {
            add { InternalEvent1 += value; }
            remove { InternalEvent1 -= value; }
        }
        public event NS2.MyEvent NS2.IBar.EventName
        {
            add { InternalEvent2 += value; }
            remove { InternalEvent2 -= value; }
        }
        void FireEvents()
        {
            if (InternalEvent1 != null) { InternalEvent1(); }
            if (InternalEvent2 != null) { InternalEvent2(); }
        }
    } 

    You probably already knew all of this.  But my inept Google search didn't really find much (but I can never find anything) and Inside C# doesn't talk about this.  Maybe this will be helpful, although I still have my doubts that anyone will ever read this blog...

    The process did confirm two beliefs.  First, MSDN contains all the information that you need if you can just find it.  Second, the makers of C# are way smart and have thought of everything. Well, probably not everything or they wouldn't be working on Whidbey.

  • Contact Addresses

    Unfortunately the WinFS Contact schema for addresses is pretty ugly in the PDC build.  We're working to fix it, but for now you're going to have to live with some pain.

    Person.PersonalAddresses is just there to trick you.  The shell UI isn't actually hooked up to it.  We used to use it and store the information in a PostalAddress, but then someone invented Locations and we thought it would be cool to use them instead (I blame Walter).  Sadly, we couldn't convert all the code right away so we had to leave the PersonalAddresses collection in place.  I think everything is converted by now, but we didn't take it out for the PDC just so we could confuse everyone.  Sometimes we suck...

    So, you should use Contact.Locations instead.  If you look at the schema you'll see that Contact.Locations is a collection of WinFS.Links.  That means this isn't as easy to use as the Person.PersonalAddresses collection.  You' ll have to do a FindOne for the target of each link and build your own collection.  This will become much nicer and cleaner with the next batch of WinFS changes, but for now the code below may help.

    using WinFS = System.Storage;
    internal static ArrayList GetAddresses(WinFS.Contact.Person p)
    {
        ArrayList coll = new ArrayList();
    
        foreach (WinFS.Link linkLoc in p.Locations)
        {
            string strFilter = "ItemIDKey=" + WinFS.Util.ByteArrayToHexString(
                                                    linkLoc.TargetKey);
            WinFS.Core.LocationElement loc = WinFS.Core.LocationElement.FindOne(
                                                    p.ItemContext, strFilter);
            if (loc != null && loc is WinFS.Location.Address)
            {
                coll.Add(loc);
            }
        }
        return coll;
    }
    

    All I can say is sorry...

  • Going Home

    I'm sitting in an airport, but I'm not going where you'd expect.  Although I work in Redmond, I actually live 2000 miles away in Ottawa, Ontario. (Ottawa is the capital of Canada, if you haven't heard of it.)  Most of the time I work remotely and the PDC is no different.  Although I really wanted to go, I managed to lose two coin tosses and got relegated to newsgroup duty.  Although, having seen those wonderful black shirts that Microsoft staffers have to wear, I might actually be happy to be home.  I have a special pair of PDC day-pants to wear all week (but, I'll leave the whole topic of day-pants for another post...)

    So, please keep me entertained this week. Post stuff to the newsgroups.  We'll be watching them and would love to hear your feedback and answer any questions we can.

  • Removed Entry

    Jon and I had a couple of entries about workarounds for some PDC problems.  Apparently we got in trouble for posting them before Monday.  Stay tuned, they'll be back when they're actually useful.

    We'll try to keep you updated with information about Windows "Longhorn" People & Groups.  We'd also love to hear your feedback when you get a chance to see it next week.  Jon will probably have more in-depth technical information and bug workarounds because his team worked on the People & Group controls.  But, I'm better looking...

  • Am I Interesting?

    Blogging seems to be the new fad so I thought I'd try it out.  It also seems to be a really good way of communicating with customers and hopefully getting some feedback on what we've been building in Windows "Longhorn", which you're about to see during the PDC next week.

    Frankly, I'm not sure that I have enough interesting stuff to tell anyone though.  Actually, that's not true.  I really love my job and I work on some totally cool new stuff for Windows: People & Groups.  I'm just not sure how much I'm allowed to tell the world yet.  Eventually someone from LCA at Microsoft is probably going read this and get me fired.  Maybe I should post my resume next...


© 2009 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker