Last week I fixed a bug by adding a splash screen to DVD Maker. Well, I'm not sure you can really call it a splash screen, since it's only 10x10 and it only shows up off-screen, but it's still a splash screen, at least in concept.
The bug was related to how DVD Maker starts. If you have had the opportunity to run DVD Maker, you may have notice that it has a propensity to launch underneath underneath other windows. This happens because of a weird limitation in wizards, a weird layout manager, and weirdness between windows versions.
Our group uses a dialog layout technology to handle layout out our dialog controls. For a normal app, it's pretty simple, but wizards have this strange limitation - the wizard size is set based on the size of the first page, and you can't change it. So, if you have multiple pages of different sizes, you need to run layout on all of them to figure out a size that works for all of them, and then use that size.
Our framework does this by creating a temporary dialog, loading a wizard page into it, running the layout code, and then saving the size. Do this for all the wizard pages, and you're golden.
Which works great on Windows XP. But on Vista, something that changed, and when you destory that first temporary dialog, the system says, "Hey, that application has no active windows. We better make somebody else the active window". So, it chooses an application, and your wizard window now comes up behind that application.
At least, it does that sometimes. Sometimes it works.
The fix is to have another window that can keep your app the active one when you destroy the temporary. In other words, the aforementioned splash screen. Add one of those, and things are just peachy.
(with all due apologies to John Steinbeck, and noting that my mother would be happy that I knew the author without having to look it up. (though I did check to be sure)).
Robert (who gets no special "use my last name" treatment here) wrote a post entitled Ethically bankrupt personas, a line pulled from a Scott Bellware article entitled Mort or Elvis? A question for a Bygone Era. Which led me to this post...
The existence of developer personas (well, to be pedantic, the outside knowledge of the existence) has led to a considerable (and in my mind, somewhat unwarranted) amount of angst around the underlying meaning of the personas.
It's certainly true that the names of the personas - Mort, Elvis, and Einstein - haven't helped things (though "Elvis" has been fairly benign, and forced one of our PUMs to come to a team meeting dressed as Elvis, a picture that was featured on an early C# website (now *that* would have been a good trivia question).
But in the end, personas are a tool that the VS teams use to help make decisions about how the product should work, and as a shorthand when talking about their users.
Or, to put it a different way, it's about differences in philosphy and work styles between developers. And there are pretty big differences, and woe to you if you don't keep this in mind. If you're building a C# product, you need to know Elvis well. If you're building a library or platform that you hope will be used by all the personas, you're likely going to disappoint one or more of them (I will note that it is certainly possible to disappoint all three, though good manners preclude me from giving examples).
So, I do see the value of personas, if only as a first step in trying to decide what will be less or more important for your users. But I don't think it's a replacement for talking to your users to find out what real people think.
The Windows group also have their personas. The one we care about most in the DVD Maker work is one named Abby.
I should also note that I'm in agreement with Scott on the whole Agile side of things. When I was within that C# team, I was a vocal advocate (among others) for providing support for customers working that way (and even for using it ourselves), but the value of Agile is still working its way into the Microsoft psyche. From what I've seen, VS Team System is not the answer I was hoping for.
Of course, you may want to discount what I say, since I'm a prototypical Elvis...
I'm sick, and, as a courtesy to my co-workers, I decided to stay at home. A courtesy, I will note, that is not always extended.
I started getting a scratchy throat on Friday, and tried my usual aggressive avoidance. I mixed and poured concrete Saturday, went on a ride Sunday morning, and then put up deck beams Sunday.
Which didn't really seem to work that well...
Q Magazine released a list of the 50 worst albums ever.
1. Duran Duran - Thank You2. Spice Girls - All Their Solo Albums!3. Various - Urban Renewal: The Songs Of Phil Collins4. Lou Reed - Metal Machine Music5. Billy Idol - Cyberpunk6. Naomi Campbell - Babywoman7. Kevin Rowland - My Beauty8. Mick Jagger - Primitive Cool9. Westlife - Allow Us To Be Frank10. Tim Machine - Tin Machine Ii11. Limp Bizkit - Chocolate Starfish And The Hot Dog Flavored Water12. Tom Jones - Mr Jones13. Bruce Willis - The Return Of Bruno14. Terence Trent Diabolical - Neither Fish Nor Flesh15. Various - Sgt. Pepper's Lonely Heart Club Band - OST16. Spice Girls - Forever17. Bob Dylan & The Grateful Dead - Dylan And The Dead18. Crazy Frog - Crazy Hits19. Goldie - Saturnz Return20. Mariah Cary - Glitter OST21. The Clash - Cut The Crap22. Robson & Jerome - Robson & Jerome23. Alanis Morissette - Supposed Former Infatuation Junkie24. Lauryn Hill - MTV Unpugged 2.025. The Cranberries - To The Faithful Departed26. Vanilla Ice - Hard To Swallow27. Destiny's Child - Destiny Fulfilled28. The Rolling Stones - Dirty Work29. Various - Christmas In The Stars: Star Wars Christmas Album30. Michael Jackson - Invincible31. Stevie Wonder - Woman In Red32. Ace Of Bass - The Sign33. Billy Ray Cyrus - Some Gave All34. Fishspooner - #135. Puff Daddy - Forever36. Kula Shaker - Peanuts, Pigs & Astronauts37. Shania Twain - Come On Over38. Chris Rea - The Road To Hell Pt239. Big Country - Undercover40. The Others - The Others41. Paul Simon - Songs From The Capeman OST42. Babylon Zoo - The Boy With The X-Ray Eyes43. The Travelling Wilburys - Vol 344. Kiss - Music From The Elder45. William Shatner - The Transformed Man46. Oasis - Standing On The Shoulders Of Giants47. Ozzy Osbourne - Under Cover48. Milli Vanilli - All Or Nothing49. Neil Young And The Shocking Pinks - Everybody's Rocking50. Beck - Midnight Vultures
There is a copy of #32 in my house, which IIRC correctly was purchased by my wife, though since I listen to it as well, I guess I should could it as mine. But that's the only one that I own.
Time to fess up. What ones do you own? What's missing from the list.
(From Respectful Insolence, a nice medical/science blog that I read...)
If you ride in a group, you've probably had the experience of riding with people who don't know the etiquette of a group ride. Or maybe you've been that person who didn't know the etiquette.
Either way, you might want to read:
Unwritten rules of a group ride
When C# Express was announced last fall, it was promotionally discounted as free for a year.
The permanent pricing has now been announced. Starting November 7th, 2006, the price will now be $0.
Yes, the discount is now permanent.
Go read Dan's post, not for the pricing parts, but for the other cool stuff he talks about.
Some nice answers in the comments to the quiz . I'll touch on some of them. Probably.
I think I'll put all the remaining questions into a jumbo part 3.
1) Java has a >>> operator. C# doesn't. Why?
Java needs that weird operator because it doesn't have unsigned types, but C# does.
2) When can a readonly field be assigned to?
Readonly fields can be assigned with initializers or in the appropriate constructor (static or instance, depending on the the field flavor).
C# and the Runtime
3) What does [FieldOffset(12)] do?
When placed on a field in a structure, it says that when marshalling the structure (ie creating an unmanaged version), this field should be offset 12 bytes from the beginning of the structure. It's most typically used when you have to deal with nasty C/C++ unions.
C# and other languages
4) Perl and C# are alike because...
They both have foreach.
Maurits noted that they both have regexes and anonymous subroutines (closures/delegates). Strictly speaking, regexes aren't part of C# but rather are part of the BCL, and I didn't think of the delegates one, so both of those answers are wrong.
5) How many people were in the Visual C# Product Unit when C# was first disclosed?
JamesCurran got the right answer for the entirely wrong reason. He advocated C# usage going back to the early 1990s, and while there were some discussions around that back then, they didn't use the C# name, and didn't get disclosed. But he did get the right answer - at least, the overly pedantic answer, which was the one that I was planning on using.
The answer is zero, for the simple reason that everybody working on the team was part of the C++ team at the time, and the C# product unit didn't come around until (IIRC) sometime that fall.
The real answer to the question, "how many people worked full-time on the first version on C# before that?", is 15 +- 2. Ish.
6) Explain the history of the 'hort' data type, and how it relates to C#...
I had intended to include the nice story here, but alert reader Mark Steward found where I had talked about it before. So go read the "story" section of that post.
7) What do the following people have in common, and how are each of them related to C#? James Newkirk Peter Solich Lutz Roeder
I was surprised that nobody got this one. There are two possible answers. The right one is that each of them have been deeply involved with a very useful C# utility:
James Newkirk - NUnit
Peter Solich - CLR Profiler
Lutz Roeder - .NET Reflector
So, if you ever see these guys, thank them.
Peter also lent a considerable amount of expertise to the C# language design process during his tenure on the design team.
8) In his "Introduction to C#" talk at the first .NET PDC, Joe Nalewabau started his talk off by saying that his manager would upgrade him to first class on his trip back home if all his demos worked. Was this the truth, or was it a clever presentation device?
No and Yes. Yes and No.
Take your pick.
In a spendidly inspired bit of presentation wizardry, Joe came out on stage and hooked the audience on his story. All of us in that hall wanted his demos to work. Masterful.
And completely fabricated.
But... His manager was also there in the hall, and agreed to upgrade him on the trip back for doing such a great presentation.
9) In this presentation, Joe made a joke about the PDC speaker shirts. What sport did his joke refer to?
Speaker shirts are one of the anti-perks of speaking at a conference. You get a shirt (or, if you're lucky, two shirts) to get you through 4 or 5 days at a conference, and you get to be noticebly poorly-dressed and sweaty (for they are often polyester) for that entire time. I've gotten perhaps 35 or 40 shirts from the talks that I've done, and I currently own 3 or 4 of them.
But those PDC shirts set a new standard.
Nine more innane and largely irrelevant questions. I'm going to leave comments open so you can put forth your own answers.
In San Francisco...
Life sized mousetrap game
I played soccer through much of my childhood, back when children were still allowed to participate in sports that had seasons. I played club soccer in the fall through middle school, and then in high school also played school soccer in the spring.
I think I started in 1976, the second year that there was organized socceer in my home town, and our initial coaches were parents, and the sum total of their knowledge was contained in the booklet they got from the league.
As I got older, we got a British coach who was much more skilled, and when I got to high school, our coach was a Frenchman named Francois. We like Francois, mostly because his accent was so thick that none of our parents could understand him (my mother said that he practiced his accent to keep it that way).
Around that time, there were a number of asian refugees that settled in our area, and one of them, a player by the name of Vu Tran, joined our team. He was pretty good player, but not a great one, so we were always wondering why Francois always wanted us to see Vu play.
(say it out loud...)
Fegh Maha is:
1) A little know Morocan tennis player.
2) An album from Australian comedy trio Tripod
3) Both 1 & 2
Alert and interested readers (who number in the low single digits) will remember that a while back, I linked to a video by Tripod.
Which led me to order their album Middleborough Road through Amazon. Which is a pretty good album - I especially like "Hot Girl in the Comic Shop", which passes well for an Elvis Costello tune. But it's a studio album.
Studio albums are not the strength of comedy trios. It becomes more about the music - adding instruments, getting clean tracks - and less about the comedy, since there's no live audience. And yes, Tripod can sing, but like "A lonely grain of corn" by Uncle Bonsai (another comedy trio backed with a single guitar, hmm...), there's something missing in the studio. Comedians do not relate to microphones the way they do to real people.
So, after listening to M. Rd. for a while, I went on the website and ordered a copy of Fegh Maha, their live album. Which is genius.
Disc one features the 60's inspired "Krap Karate", which is about the kind of karate you learn if you only watch bad martial arts films, and the touching "Fabian", about one of the lesser known christmas characters.
Disc two features "Ghost ship", an "Iron Maiden" style song, and Maryanne, a touching ballad. Both of which are some of the funniest bits of performing I've heard in a long, long time.
When I was a kid in the 1970s, one of my friends had the Vertibird, a tethered helicopter game. It was really cool.
Now you can relive what was considered "cool" in the 70s with VertiSim.
There's a new display technology out there, and I'm confident it's going to be hotter than DLP, LDC, or even plasma.
Because of the cost, my guess is that you'll initially see it at events such as concerts.
(I suggest watching the showreel in the gallery. Dig that dancin...)
I did warn you that these would be trivial. Here are the answers:
1) How many loop constructs does C# have, and what are they?
for, foreach, while, do
Or, perhaps, that's only two, given that for and foreach and while and do are variants of each other.
2) What is the difference between “ref” and “out”?
From the runtime perspective - and the perspective of other languages - there is no difference between the two - they are both "pass by reference".
In C#, "out" means:
3) What does
Why would you use it?
This gives a name to an indexer. Because the C# syntax never shows the name, it doesn't matter to C# code, but it does to VB code. By default, the indexer is named "Items". If you were adding an indexer for a string, you might want to call it "Characters". Or, perhaps "DramatisPersona"...
4) You are a troublemaker in a group of Java and C# programmers. What should you say?
Checked exceptions have been - and still are - one of the hot topics between the two communities, with lots of strong opinions.
I like these resources:
Does Java need checked exceptions? (Eckel)
The Trouble with Checked Exceptions (Hejlsberg)
Java theory and practice: The exceptions debate (Goetz)
My opinion is that checked exceptions address an issue that isn't high on the list of issues that need to be addressed, and impose a significant burden (both in language complexity and in programmer busy work) while doing so.
5) How many conference rooms has the C# language design team met in over the years?
One, a small conference room in the second floor of building 42.
Okay, that's not strictly correct - there been a few meetings elsewhere - but at least 95% of the meetings have been in that room.
How were you supposed to know this? Well, Anders has said it publicly at least once, and I think he did in this video (well worth it even if he didn't say it in that one).
6) Which of the following are not spare-time pursuits of mine?
All MSDN columns include an author bio at the bottom ("Reginald Codesqueezer is an evangelist in the programmer kitchen accessories group at Microsoft, where he is working on the release of CodeWok 2.0.")
Way back, when .NET was young, I wrote a chapter for a .NET book about the C# language (sometime shortly after my book was published). I don't remember the book or really what the chapter was about, but I do know that the publisher asked me for a bio, I forget, the publisher asked me again, and I sent off something that I thought might be funny, which showed up in the book.
Which leads us to the answer, easily verified with a search engine ("eric gunnerson cat juggling"), which is that these are all spare time pursuits of mine, making this a trick question.
When I started writing my MSDN column, I had a pretty blah bio, but after a while, I wondered how much attention my editor was paying to what I wrote, so for the last few columns, I started changing the last line of my bio.
The bio in my current book ends with, "In his spare time, he enjoys skiing, cycling, home improvement, microcontroller-based holiday decorations, pinball, Halo2, and writing about himself in the third person", which my Apress editor really liked.
7) What does typing the following do:
b) Print an error message
c) Compile the latest version of my multi-player version of SpaceWar!
The C# team had a problem. Every day, posts were showing up on our internal discussion group saying, "When I try to compile this program, it's complaining that it can't find this class, but I have a using statement". Or, they would say, "this code works when I compile it in Visual Studio, but it doesn't work from the command line".
The problem was that the compiler only referenced mscorlib.dll and system.dll by default, and you really can't do anything of interest without referencing other assemblies. It didn't show up in VS because when you create a project in VS, it adds a default set of assembly references to the project.
So, we needed a way to fix that. We considered some elegant solutions so that all compiles wouldn't have to pay the price of opening a bunch of assemblies that weren't necessary, but it turned out that the perf cost wasn't significant.
So, we decided to add a response file. The concept of response files wasn't original - VC++ has supported them for quite a while - but I do think the concept of having a default response file was new. If you find csc.exe on your system (mine lives at C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727), you'll find that there's a csc.rsp file there that lists all the "default" assemblies. You can edit that file if you want, or you can put your own csc.rsp file in a directory.
Interestingly, because the response file is just used as input to the compiler, you can put filenames in there too, which means the correct answers to the question are "b" or "c".
The addition of the default response file fixed the command-line problem, but led to the reverse problem, since VS (for perf reasons, IIRC) didn't reference as many assemblies automatically as the command-line compiler did.
SpaceWar! rocked, BTW.
8) What was the name of .NET before it became .NET?
Next Generation Windows Services (NGWS), pronounced "Nugh-was" (though rarely pronounced at all).
This marketing name was replaced by the elegant and much-easier-to-say ".NET", which would go on to confuse millions of customers worldwide.
9) Current Visual C# PUM Scott Wiltamuth was the PM for the C# language during the first version, but often worked remotely because of a long commute. How long was his commute?
Around 8 hours - 6 hours on the plane, and an hour at either end.
Scott worked remotely from Hawaii, and did a pretty remarkable job doing so.
Keith gets it right. The answer is the fuel turbopump for the space shuttle main engine.
And there's a bit of a story there...
There are a variety of different ways to make liquid fuel rockets work. In simple rockets, you use pressure in the tanks to force propellant into the combusion chamber. But you can't run the pressure that high (tanks can't take it), so you don't get much efficiency. But it's simple.
To do better, you need to use some sort of pump. The simplest thing to do is to run the fuel and oxidizer through tubing in the nozzle to heat it up. This gives you high pressure which use you use drive a turbine which pump more fuel and oxidizer in. This gives you more power, but is also limited in how much propellant and oxidizer you can get into the rocket engine.
If that's not enough power - and a vehicle like shuttle needed a really high-power design - you burn the some of the hydrogen and oxygen, and use that to drive a turbine (which drives a pump), and then send the exhaust into the combustion chamber to add to your thrust.
Well, there are a lot more details, but that's the basic idea.
The oxygen turbopump is the baby one. It burns hydrogen and oxygen at about 1500 degrees, spins at 23,700 RPM, and generates 26,800 hp.
The hydrogen turbopump is bigger (remember your chemistry if you wonder why). It burns at about 2000 degrees, spins at 36,200 RPM, and generates a cool 76,000 hp. All in a 3 foot long tubine that weighs 775 lbs.
Not surprisingly, that puts the pumps right at the edge of materials design. The original intention was that the engines would fly lots of missions with minimal service, but like lots of things on shuttle, the full engine is pulled and refurbished after flight.
Because of their advanced design, the main engines were thought to be a big risk factor, but there's only been one main engine early shutdown in the history of the program and 5 pad aborts before launch. Counting all the static tests, rocketdyne has an accumulated run time of a million seconds on these engines now.
Somewhat interestingly, the turbopumps in the block II engine are produced by Pratt & Whitney (I think the originals were done by Rocketdyne), which are better than the original ones. Interestingly, improvements to the engines over the years (such as better turbopumps) have yielded engines that now can produce up to 109% of their original design thrust.
I do find some of the other answers intriguing, and I wouldn't be surprised if you could build (or somebody has built) a small turbine that would exceed the that power/weight ratio, small normally being easier than large.
With jet engintes, there's no easy conversion between thrust and hp, but if you look at typical commercial jet engines, you might see 12 hp/lb or so. Most of the high power ones couldn't be used to power a pump.
I looked a bit at the nano-motors, but didn't find enough data to really be able to tell one way or another.
First additional hint:
This engine produces in excess of 96 hp/lb.
That is not a misprint. Take the # of hp it produces, divide it by the # of pounds it weighs, and you'll get a number that's a little over 96.
Who makes the engine (ie an engine with an output shaft that you could use to drive a pump or something...) with the highest power/weight ratio, and what is that engine used for?
The common gasoline engine uses a 4-stroke cycle conceptualized by the German engineer Nikolaus Otto in 1876.
The english term "Automobile" is an anglicized version of the term "Otto-Mobile", which was applied to the first vehicles using such gasoline engines.
A few days ago Rory wrote a post entitled Ten Minutes of Sincerity - Enthusiasthma, in which he argues that there is such a thing as too much passion.
Which got me thinking about one of my pet peeves. What do following words all have in common:
They're what I call "Mom and Apple Pie" words, for two reasons.
First, they all have a positive connotation. Who wouldn't want to be more agile, more innovative? Who is going to argue against having a more synergistic approach? Shouldn't everybody have passion?
Combine that with the fact that these words are used in a content-free environment, and you get a nice-sounding platitude that means nothing, but makes it sound like you are for changing things.
You don't think we should have more apple pie? What's wrong with you? Why do you hate your mother?
People who want to make an organization more agile don't say, "We're going to improve agility". They say, "we're going to get rid of <x>, we're going to change <y>, we're going to release every <x> months".
People who want to improve synergy say, "Our users are trying to do <x>, and it's way too hard. What do I need to do to help you fix this?"
With those sorts of people, you can have rational discussions about the benefits and disadvantages of changes.
But don't talk to me about being more agile or innovative without specifics.
BTW, I'm all for Mom, but I prefer Apple-blueberry, because I like the extra tartness...
Two years ago, I was 28.
And now, I'm 28 again.
28, using the septendecimal system.
I figure I can keep this up every other year pretty much indefinitely.
To celebrate my birthday, I dug 3 1 cubic foot holes in my front yard, and covered them with plastic.
(Thanks to all who sent me email questions for this test. I've elected to do something different with those, but you will see them in the future (adhering to my usual blog standard of "will"...))
Welcome to the C# trivia quiz. This is the first set of questions, and answers and future sets of questions will follow on a quasi-stochastic basis. Please fill in the answer box completely with a #2 pencil, keep your eyes on your own quiz, and put your pencils down promptly when you hear the bell.
All of the questions can be answered with publicly-available information, unless imposing such a requirement would get in the way of a good story. Note that I have chosen a rather liberal interpretation of the word "public".
Comments are disabled for the quiz, but if you want to blog your answers elsewhere to show off, knock yourself out. I've organized the questions into categories to add variety to the process. They are: