What APIs do I own?

Sorting it all Out
Michael Kaplan's random stuff of dubious value
Be sure to read the disclaimer here first!

What APIs do I own?

  • Comments 16

Yesterday, in a comment to my conversation about SHAnsiToUnicode/SHUnicodeToAnsi, Rosyna asked some interesting questions:

This actually brings up an interesting point. If someone working on one group at MS sees a problem in another group's software that affects them, can get just fix the other group's code?

Generally speaking, people would not directly change code in other groups. But you may work with them and provide opinions and expertise and assistance. There is a lot of dogfooding of products that also goes on....

There are exceptions, but by and large its how things that I have seen have worked.

Within a group, people will often work with code that others own to help fix bugs and load balance work -- we are all in a very cooperative environment. :-)

And when you're in a group at MS, how much code is your (individually, one person's) responsibility? An entire DLL? A few functions in a DLL? A lot of DLLs under the same "genre"?

That depends on the dev, on the group, on the complexity, and on the expertise. I can only really answer for me, so I will try to do that right now. :-)

I own the following APIs (and I know people who own more and people who own less):

  • CompareStringW
  • CompareStringA
  • LCMapStringW
  • LCMapStringA
  • GetNLSVersion
  • IsNLSDefinedString
  • FoldStringW <--- well, the less cool 2/5 of it
  • FoldStringA <--- well, the less cool 2/5 of it
  • GetStringTypeA
  • GetStringTypeW
  • GetStringTypeEx

Plus some that I do not own but kind of de facto own since they are thin wrappers around one of the above functions and their behavior comes off of them 100%, e.g. lstrcmpW, CharUpperW, CharNextW

Plus several new APIs I will talk about after Longhorn Beta 1 and Beta 2 are out:

  • ************
  • ********************
  • ***************
  • ***************
  • *************
  • ***************
  • ********************
  • ***************

(I may have added in some random extra stars to explicitly foil guessers. Sorry!)

Plus some tools and libraries:

  • MSLU (a.k.a. unicows.dll, Microsoft Layer for Unicode on Windows 95, 98, and Me Systems)
  • MSKLC (Microsoft Keyboard Layout Creator)
  • *************************

Plus the managed equivalents of the above:

  • CompareInfo class and the bulk of the methods/properties in it
  • Sortkey class and the bulk of the methods/properties in it
  • TextInfo <--- Well, the least interesting small piece of it!

Plus some various infrastructure pieces (e.g. I am the development owner of the Windows keyboard layouts, though it is actually the data PM who is the real owner; I am just the guy who checks them in and gets them into setup).

And I help out now and again with locales and such, though not as much as I used to.

And I am involved with Unicode, sometimes as an alternate rep, other times as just a technical person who participates.....

It's a living.:-)

 

This post brought to you by "の" (U+306e, a.k.a. HIRAGANA LETTER NO)

Comment on the blather
Leave a Comment
  • Please add 3 and 8 and type the answer here:
  • Post
Blog - Comment List
  • Wow, that *thoroughly* answered my questions. Thanks.
  • Interesting post! Roughly how many lines of code does that run to?
  • Hey Mike --

    I haven't a clue, I have always sucked at those sorts of estimates. I did manage to remove about 1000 lines of it in Longhorn by streamlining a few things, though. Negative production that week? :-)

    I suppose I should run one of those K-LOC tools on it all one of these days, though. It's one of those cool numbers you can bat around at [geeky] parties....
  • I used a little utility called "Counting" last week, which gives code/comment line counts. You can get it from here: http://www.codeguru.com/Cpp/data/data-misc/fileinformation/article.php/c4547/

    Neat little interface and very quick.
  • Michael, when you develop these API's, do you design the whole thing from the bottom up, or do "they" give you some prototypes and a specification to work off of?

    In other words, do you get to develop the whole thing or do you have to just implement what they tell you to?

    I'm just curious as to how much freedom they give you to work on these API's :)
  • Hey Mike --

    Someone pointed me to an internal tool. :-)

    Ok, all of the above stuff totals in at around just over 78,000 lines. About half is code I wrote from scratch (projects like MSLU and MSKLC), aznd of the other half some that I wrote, some that I have modified, and some that I just maintain.

    If memory serves, the Access wizard project was a bit larger than that, but that was mostly VBA so I don't think it counts. :-)
  • Hi Daniel,

    Many of the APIs listed there predate me, and I was a mere external user of them for years. But the stuff I have developed I have so far just about always been the person who wrote the design doc (I have also written many design docs for features in which I was interested but which I did not end up implementing myself).

    (see http://blogs.msdn.com/michkap/archive/2005/01/03/346090.aspx for my opinions on design docs)

    :-)

    In this group, devs have a lot of say in the design of what they develop. And there is a lot of meeting and discussing and deciding to help shape how it ends up....
  • Uh oh, forgot a project!

    Its actually more like 103K lines when you include it all....
  • Interesting post.
    Now two questions:
    - if we have a problem with some API, where can we complain?
    - can we play Hangman on the "stars API"?
    Is there an 'a'? Is there an "Ex" ? :-)
  • Hello Mihai!

    >>> - if we have a problem with some API, where can we complain?

    Well, you can always complain here, of course. Especially if it is one I own!

    >>> - can we play Hangman on the "stars API"?
    >>> Is there an 'a'? Is there an "Ex" ? :-)

    Heh heh heh -- no clues, like I said I even added extra stars to keep people from trying to guess. You'll find out soon enough....
  • The complain: a full family of Enum functions.
    On the happy side, none of them are yours :-)

    The functions do not take and extra parameter that can be used to transfer a pointer to a structure or a class.
    As a result, you have to use global variables or classes with static members (which is pretty much the same thing).

    Some functions get it right.
    Here is a list (probably not complete, and targeting I18N/L10N API):

    --- The Good ---
    EnumFonts
    EnumFontFamiliesEx
    EnumLanguageGroupLocales
    EnumSystemLanguageGroups
    EnumResourceLanguages
    EnumResourceNames
    EnumResourceTypes
    EnumUILanguages

    --- The Bad ---
    EnumCalendarInfo
    EnumCalendarInfoEx
    EnumDateFormats
    EnumDateFormatsEx
    EnumSystemCodePages
    EnumSystemGeoID
    EnumSystemLocales
    EnumTimeFormats

    --- The Ugly :-) ---
    ************
    ********************
    ***************
    ***************
    *************
    ***************
    ********************
    ***************
  • Hmmmm... not sure I understand. But you are right, I don't own any of them....
  • To me, the NLS API function LCMapString has a full-time job, one that is crucial to the fundamental fabric...
  • Jochen Kalmbach asks over in the Suggestion Box: Hi Michael! Short question: Is "CharNextExA" broken

  • You recently linked back to this article - just out of curiosity, what are the "Longhorn" (i.e. Vista) APIs that you starred out?

Page 1 of 2 (16 items) 12