You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.
Friday, Aug 17, 2007, 1:42 PM in .NET
Duck Typing for .NET!
For structural typing fans (and they'll be more of you over time -- trust me), David Meyer has posted a duck typing library for .NET. There are many reasons this is cool, but in summary, it allows for many of the dynamic features of languages like Python and Ruby to used used in any .NET language. Very cool.
Friday, Aug 17, 2007, 1:31 PM in The Spout
How to write a book - the short honest truth
I found this on digg.com and liked the short, honest style. Bottom line: anyone can write a book; it takes real work to write a good book.
Tuesday, Aug 14, 2007, 8:10 PM in The Spout
"How you doin'?"
I wanted to figure out how to emit a new CLR type at run-time using Reflection.Emit and Google revealed the following article: Generating Code at Run Time With Reflection.Emit in DDJ.As usual, I skip most of the initial prose to the first code sample (I don't need some author's fancy intro -- I just want the code!). Then, I'm reading along and I find some phrases I enjoy, e.g.
"If you plan on generating lots of calls to Console.WriteLine(), you should be aware that the ILGenerator class exposes a method for just that purpose: ILGenerator.EmitWriteLine() generates the exact same code as our example. (Could this be the first assembler ever devised that includes explicit support for creating "Hello, World" sample programs?)"
and
"When creating a dynamic assembly with Reflection.Emit, you must declare, ahead of time, what you plan on doing with it. Do you want to run it or save it? Or both? (Of course, if your answer is 'neither,' then you should probably should have stopped reading this article long ago.)"
By the end of the piece, I've enjoyed the story and it told me exactly what I wanted and then some, pointing out some pitfalls I would've missed, being entertaining along the way. It's rare that I enjoy an article so much and I'm thinking I should send the author an email, congratulating him/her on his/her tight, fun prose.
And then I get to the author bios:
"Chris Sells is a blah blah blah."
"Shawn Van Ness is a blah blah blah."
Of course, now I remember Shawn writing this piece and me helping him with the polish. At this point, I feel a bit like the Joey Tribbiani of Windows technical writing...
Thursday, Aug 2, 2007, 6:05 PM in Oslo
eWeek: Microsoft Moves Ahead w/ Software Modeling
I work on the same team as Don and Chris to which this article refers. There's few actual facts in this piece and some of those are wrong (love Chris like a brother, but he wasn't on the WCF team : ), but it's interesting that my little group is making its way into the news.
BTW, as a matter of context, I'm not a big codegen fan (in spite of my previous dealings : ) and it would be a mistake to think of "modeling" as "fancy codegen," in spite of what this article implies.
Tuesday, Jul 31, 2007, 8:03 AM
Take the Silverlight Tour
Shawn Wildermuth, author of the Silverlight appendix in Programming WPF, has put together a comprehensive 3-day shortcourse on Silverlight and is taking it on road to Atlanta, Boston, Chicago, San Fran, Dallas, Seattle and DC. Sign up today!
Saturday, Jul 21, 2007, 9:26 PM
Another One Bites the Dust!
Welcome to Microsoft, Scott Hanselman!
Tuesday, Jul 17, 2007, 3:51 PM in The Spout
Programming WPF, 2e (RTM Edition) on Amazon!
P.S. I read the QC1 (Quality Check 1), all 859 pages of it, in two solid days this weekend. I found a bunch of nits, all of which will be fixed before you see it in August. Wahoo!
Monday, Jul 16, 2007, 9:12 AM
Windows Home Server RTM Shipped!
I knew something was up when the Home Server team climbed onto a bus Friday afternoon outside of building 42. They were obviously celebrating something. This morning, I found out what it was -- Windows Home Service RTM shipped! Congrats, guys! I can't wait for the RTM bits to be available internally so I can install it. I've got a machine all picked out. : )
Saturday, Jul 14, 2007, 10:33 PM
Unpublished Microsoft Interviewing Tips
A friend of mine is going for an Microsoft interview next week and he IM'd me asking for any "unpublished tips" for interviewing at MS (apparently he'd already read all my published tips). Frankly, I don't know if these are published or unpublished, but these were the ones that I thought were most important:
- Your interviewer cares most about 1) how you think and 2) what you feel, so be vocal about both. You might not get the job, but if you do, it'll be a better fit than if you'd have kept your mouth shut.
- Don't be afraid to ask clarifying questions. This is more detail on the "let 'em know what you're thinking" point above. If you don't understand the problem fully, don't jump in to solve it before you do. Or, if they ask you something potentially scope-less, e.g. "Tell me about yourself," feel free to ask for a scope, e.g. "I'm 38 years old and a lot of stuff has happened. : ) Would you like to narrow that question down a bit for me?" (or something less smart-ass-like if you're not able to carry off smart-ass-ness with a smile).
- Let the interviewer know how you feel about the job. At Microsoft, you'll have quite a bit of latitude in how you do your job, so they want to know that you care about the same things they care about so they can set you loose and know good things are going to happen.
Think about the job before you show up so that you have an agenda. It often helps if you can list a bunch of reasons Microsoft is currently screwing the pooch in your area. I can't tell you how many times I've heard about someone railing against Microsoft because of something we're not doing right and that person gets a job offer to go fix the thing they were complaining about ("Put up or shut up" is a big part of the Microsoft culture).
One thing to watch out for: if you do have an agenda, make sure it's something in your proposed job scope. If you're hiring as a mid-level Program Manager, you're not likely to have much impact on how MS builds software all up, but you can definitely work to fix how your group-to-be is doing it. - Answer questions from your own experiences. If someone asks, "How do you deal with conflict," don't give them the stock, pat answer. Instead, reach into your experiences and pull out a specific example. This will give your answer more credibility. This technique runs the risk of the interviewer not liking how you handled the issue, but again, do you really want a job where you're not a good fit, but nobody knows 'til you've sold your house and put the kids into a new school?
- You have to like us, too. When Microsoft is interviewing you, remember that you're interviewing them, too. Make sure you're going to like the work you'll be asked to do and the people you'll be asked to work with. It's not good for *anybody* if you show up for work and don't fit in because you didn't ask questions. Plus, when the interviewer says "Do you have questions for me?" you better have some, or you're not going to come across as someone that actually cares about the position.
- Don't talk about money during the interview. There'll be a short window between the time they offer you the job and the time when you accept it that you'll be able to discuss compensation frankly. If you do it at the interview, you'll look like you're after the job for the money and not because you have a burning desire to fix something Microsoft is currently doing wrong or not doing at all.
Bottom line: your interviewer wants make sure you're a fit for Microsoft, a fit for their team, that you're smart and that you've got passion to do the work that they want you to do.
Good luck!
Sunday, Jun 17, 2007, 3:22 PM in Tools
Genghis moved to CodePlex
Shawn Wildermuth has moved Genghis to CodePlex because GotDotNet Workspaces is going away. I actually really like CodePlex, but not the state those pesky contractors left the Genghis bits in, so we'll be following up with another release in early July to bring sanity back. Thanks, Shawn!
Thursday, Jun 14, 2007, 7:31 PM
Hands on the Microsoft Surface
After raving about Microsoft Surface, I get a personal invitation from Robert Levy, a PM on the Surface SDK team to come take a look. Robert's job is to make sure it's possible for the partners that want to put a Surface into their hotels, stores and theme parks to build apps to help sell whatever they're selling.
There're currently no plans to enable just normal humans to program it, unfortunately, or even to sell the things except to corp partners. This is too bad, 'cuz I definitely want one for my family room. Man, talk about a conversation starter!
The demo apps were very cool. Of course, there were the apps that are shown on the surface web site and they really work. The ones that I thought were best were when you used physical devices to control what happens on the surface, e.g. turning a knob you drop onto the surface to adjust settings, putting a camera on the surface to get the pictures, putting a credit card on the surface to pay for your drinks, etc. Of course, just using your fingers to paint or drag stuff around was fun, too.
I can definitely see these things attracting a crowd at the zoo or the local phone store. It's a thing.
Thursday, Jun 14, 2007, 3:21 PM in The Spout
The T-Mobile Wing rocks! 'til the battery dies...
I was really loving my T-Mobile Wing with WM6, Pocket Office, external micro-SD slot, slamming keyboard, beautiful ClearType display, one-handed usage (even though it is a PocketPC, I almost never needed to pull out the stylus), blue tooth (very high quality!), wi-fi, Edge and a slamming keyboard! (yes -- it was that slamming.).
Unfortunately, I couldn't keep it. After four days of the battery going dead after 12 short hours of my normal usage, e.g. email, texting, surfing, etc, it was dead. I turned off wi-fi, blue tooth and DirectPush to no avail. The T-Mobile Wing is just too cool for the battery and T-Mobile didn't have a bigger one to give me.
So it's back to my i-mate smartflip (hurray for data sync!). I was *so* loving that slamming keyboard...
Thursday, Jun 7, 2007, 11:52 AM
Big Screen + Keyboard for my Cell Love? Love it!
I love the idea of the new Palm Foleo, i.e. my life fits on my cell phone in my pocket and my "laptop" is just a bigger display and full-sized keyboard. Of course, this presupposes the storage capacity to store my life on my cell phone (like I do currently on my laptop), which we're a ways from. Unfortunately, this means that the Foleo is likely ahead of its time and will therefore suffer, but it's another step down a good road (remember the "brick" computer that could plug into any keyboard/mouse?).
Tuesday, Jun 5, 2007, 10:38 PM in Fun
What's your programmer personality type?
Your programmer personality type is:
DHSB
You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.
You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.
You work best in a Solo situation.
The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.
You are a liBeral programmer.
Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We're not writing on paper anymore so we can take up as much room as we need.
Tuesday, Jun 5, 2007, 4:31 PM
LoadWithPartialName, I miss you...
When you make a call to LoadWithPartialName in .NET 2.0, you get the standard compiler error that you're using an obsolete function:
foo.cs(5,24): warning CS0618:
'System.Reflection.Assembly.LoadWithPartialName(string)' is obsolete:
'This method has been deprecated. Please use Assembly.Load() instead.
http://go.microsoft.com/fwlink/?linkid=14202 '
The problem is, unlike more obsolete function warnings, there's no good way I know of to reform the arguments from the obsolete function to the recommended replacement, i.e. Assembly.Load doesn't work if you give it a partial assembly name. Because of this, instead of code filled with Assembly.Load calls, I see this all over the place in production .NET 2.0 code:
#pragma warning disable 618
Assembly.LoadWithPartialName("foo");
#pragma warning restore 618
Maybe in .NET 3.5, we can get a helper function that wraps the #pragmas for us... : )