Windows Task Manager Keyboard Shortcut
23-Jan-09
Maybe everyone else already knows this, but I just found out and I’m so happy.
CTRL-SHIFT-ESC brings up the Windows Task Manager. No more CTRL-ALT-DELETE click the button dance. Woo hoo!
Maybe everyone else already knows this, but I just found out and I’m so happy.
CTRL-SHIFT-ESC brings up the Windows Task Manager. No more CTRL-ALT-DELETE click the button dance. Woo hoo!
Most build servers set an environment variable BUILD_NUMBER on every build that is auto-incremented. We can do this using WiX proprocessor. (Note, the link is for WiX 2.0 Manual, I couldn’t find a reference for WiX 3.0 Preprocessor. Maybe it’s the same? Probably not.)
I wanted to increment my WiX installers Product Version field automatically based off this number.
Here’s the top of my Product.wxs:
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <!-- Set version based on build_number env. variable. --> <?ifdef env.BUILD_NUMBER ?> <?define PRODUCTVERSION="1.0.$(env.BUILD_NUMBER).0"?> <?else?> <?define PRODUCTVERSION="1.0.0.0"?> <?endif?> <Product Id="THE_GUID_YOU_GENERATED" Name="My Application Name" Language="1033" Version="$(var.PRODUCTVERSION)" Manufacturer="My Manufacturer Name" UpgradeCode="THE_GUID_YOU_GENERATED"> ...
The ifdef part is very picky. At first I tried <?ifdef $(env.BUILD_NUMBER) ?>, which totally doesn’t work. Then I tried <?ifdef BUILD_NUMBER ?>, which also totally doesn’t work. The above is the only thing I could get to work, which goes against what this guy says. The WiX documentation for the preprocessor is pretty shoddy.
Also notice that I am incrementing the 3rd of the 4 version numbers. Why? No idea. Maybe you can tell me.
So YMMV, Caveat Emptor, and all the crap.
WiX Arcanum!
Ok so I’ve got an idea for a stateless network/application service. Check it out.
It’s a simple concept. The service will accept requests that are wrapped in a protocol specific envelope, perform an action, and then return results in a similar protocol specific envelope. Simple! Clients will perform a series of actions, get a series of results, and generally navigate the world.
Now, the totally awesome part: My Custom Implementation. Every request that comes in will logically specify what type of request type it is. Maybe it’s “List Employees” or “Process this Order”. Each request type will have some sort of textual key associated with it like “ListEmployees”. I’m going to take that textual key associated with a request, look for a file in the software project’s directory with the same name as the key, run it, and that file will be responsible for displaying the results.
In case you’re wondering, I just re-invented Http, and hopefully illuminated one of the more insane aspects of it: Why do requests map to files in our software applications in almost all http servers?? Am I the only one that thinks that is absolutely insane?
I understand that it sort of started out that way with static html files and stuff, which is fine, I can still see that use case being valuable. But we don’t even call Http Servers “Web Servers” anymore, they are marketed as “Application Servers”, ostensibly designed to serve applications. Too bad they almost all focus on the use case of serving html or jpegs of kittens with guns.
This rant was all brought on by a post from Phil Haack entitled Handling Formats Based On Url Extension. In it he describes jumping through hoops to essentially perform an action that can be simplified as “I want to perform one action based on one request type, and a different action based on a second request type”?
How is it that this can still be so difficult? Why can’t we enable a mode in our Application Servers that simply says, “Ok, you know what? I’m not serving static Html. Give me the damn requests and let me decide what I want to do with it.”
How much time have you personally spent trying to get craft some ASP.NET Routing Rule (or MonoRail Routing rule, or mod_rewrite rule) because application server X is just completely hell bent on matching http://foo.com/employee/add to to a file named add.html or add.aspx in a directory named employee?
Imagine if NServiceBus or MassTransit routed messages to components based on their filenames? Epic Fail!
If you’re going to call yourself an Application Server, at least pretend like you’re actually in the business of serving applications.