Two unintended consequences of Microsoft open sourcing:
1. Google Chrome (on Windows) uses the Windows Template Library (WTL) published under the Ms-PL
2. Mono outpaces Java for Linux desktop application adoption. An interesting quotation from the article:
“It is an interesting irony that Microsoft's sponsored technology, which is open source, is allowing developers to be more productive on Linux than other tools for Java and C++ development”
Irony, indeed.
SOme quick notes on Microsoft and PHP things that are in motion. Things is such a great Anglo-Saxon word.
July CTP of PHP SDK for Windows Azure. If you are more visual, Rob Bagby has an excellent post and more excellent screencast overview:
Also, pop over to the online webcasts CodeWorks, which is hosted and run by PHP|Architect. These are sponsored by Microsoft.
If you prefer to read magazine style, the May issues of PHP Architect Magazine is a free download. Compliments of Microsoft.
The FOSS community has been concerned about the difficulties, pros and cons of including Mono-built applications as a part of standard Linux builds. Both Pro and Con.
Most recently, the Ubuntu Technical Board posted to their Ubuntu Developer Announce mailing list their extermely pragmatic position on Mono applications.
Today Microsoft extended the Community Promise to the two underlying ECMA (and subsequent ISO) standards that cover the CLI and C#. These promises had already covered other EMCA standards such as OpenXML, so it was quite logical that the CLI and C# would follow. Well, in a sane universe anyway.
As the Mono project (and Moonlight) are based on these standards, the Community Promise would logically extend to these environments.
Hopefully now we can all just build cool software, not argue about licenses, patents and other distractions. Now let's fix Outlook's HTML rendering!. :-)
(Thanks to
John BouAntoun for the original link,
Peter Galli for the original blog post, and Microsoft for doing the right thing.)
ntpro: Where was something kick-ass like this for the first 2500 #TechEd US registrations? Screw the party ... http://bit.ly/10iUtu
WindowsITPro: TechED Australia attendees each score HP Netbook: TechEDAustralia attendees will get more than a bag and t-shir.. http://tinyurl.com/n2spkc
nigelwadsworth: @jeffa36 Very tempted to go this year after reading this. 2006 was the last TechEd I went to.
wstan: WTF! This year no TechEd event in Malaysia but Microsoft is giving HP Mini netbook with Windows 7 to each paying TechEd Australia attendee.
BrianFarnhill: Just heard about the netbooks being given out at TechEd this year - man I wish I could go :-(
@freitasm: Microsoft Oz giving HP Mini with Windows 7 to each of 2,300 TechEd attendees. Microsoft NZ giving away seven digital cameras.
orinthomas: TechED.au is giving away a netbook to all paying attendees. I suspect that attendance (especially at my sessions ;-) will be good.
hollingsworth: Nice bit of marketing and community-building there Nick - TechEdfolk get free Netbook http://bit.ly/rEz9w via @NickHodge
ANZTechEDSecure: Holycrap! Free netbook to paying TechED.au attendeeshttp://is.gd/1iCky #auteched
Alegrya: must find some $$ for that TechEd ticket!! RT @NickHodge: And Sekrit Projekt #1 goes public: http://bit.ly/rEz9w
davidfowl: @DamianEdwards Wow I went to the wrong teched
Andrew Dugdell has started a blog following us HP mini-note/netbook guys on our 10 week journey to TechEd 2009.
(the image above is not displayed at actual size)
Mini Packages
Yes!, paid delegates to Australia's TechEd 2009 are each receiving Microsoft Windows 7 on a HP 2140 Mini notebook (aka: netbook). Pop over to the TechEd 2009 web site to register to see all the terms and conditions etc.
Mini-note Relevant Speeds and Feeds:
Screen: 10.1”
HD: 160Gb
Memory: 2Gb
Wireless: 802.11 a/b/g
Processor: Intel Atom 1.6GHz N270
Delegates will be able to take their HP Mini back to work to show off Windows 7, or just loan the device for the duration of TechEd. Of those returned, Microsoft will be donating these these loan to charity.
Imagine each and every delegate with a mini-note roving around TechEd doing everything online; Messenger, Office Communicator, Twitter’n, downloading presentations … the list is endless.
Also imagine the IT skills provided to those less fortunate than ourselves.
Big Things: A Call-out to the TechEd Community:
What would you like to see running across these 2000+ devices?
- A mass Azure stress test web application?
- A magical Powershell configuration script?
- A WPF-based network game?
- A new Windows 7 based WinForms/Win32 Twitter client that doesn’t suck?
Ideas are endless … we’d love to get you, the community, involved in creating interesting scenarios.
Let the big ideas flow!
Photo thanks to James Dumay
Thanks to all for questions, and attending on Thursday night. Big ups to the Googlers (including the cheeky @pamelafox!) for their hospitality.
Linkages for relevant Pythonic and IronPythonic stuff:
And for the committed Pythonic reader, Jim Hugunin at the recent PyCon (March 2009): IronPython: Directions, Data and Demos
Need to test your website against new and old versions of Microsoft Internet Explorer? Microsoft offers a set of VPCs free specifically for this purposes. They are downloadable as .vhd images, and include the base operating system. Of course.
http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en#filelist
These VPC images expire in April, 2009
(Caution: Ruby application names are as prolific, esoteric and funny as Microsoft code names)
The previous post (broadly) demonstrated how to use a combination of URL Rewrite and FastCGI to put a Ruby on Rails application on IIS7.5.
As Rails, Merb (which I am reliably informed is what all the cool kids use today) and Sinatra
Another more common method of deploying Rails applications is behind a small web server such mongrel, thin or whilst development ruby’s inbuilt WEBrick. These servers are attached to one instance of the ruby application with a front-end web server acting as the reverse proxy server. This server forwards requests from the outside world to one of the instances of your ruby application; and ‘proxies’ the response back to the browser on the client.
Using an reverse proxy server architecture provides various goodness: easy instance creation, simple scaling and relatively easy deployment. If you get the configuration right.
To deploy a reverse proxy server with IIS previously required third party ISAPI such as ISAPIRewrite.
As complex deployments are becoming more common, Microsoft has released the Microsoft Application Request Routing Version 1 for IIS 7 (get it here). Note that the server also requires URL Rewrite.
The following is my simple setup.
How to Setup
As I have mongrel installed on my development machine, and am experimenting with sinatra: mongrel is chosen as the default server.
With a simple batch script, I launch the instances of my simple application. The ruby application is hi.rb. In this instance, ruby.exe is in my PATH. The '-p 4567' tells Sinatra and Mongrel to use port 4567 as the listening port. There are mechanisms to make these services. This machine is development only, so I’ll leave that alone
@ECHO OFF
ruby.exe hi.rb -p 4567
Install Microsoft Application Request Routing Version 1 for IIS 7. Note that the server also requires URL Rewrite.
Launch the Internet Information Services (IIS) Manager
Create a Server Farm. A farm is a collection of servers (IIS7 and others) the server is going to farm the incoming requests to

Provide a name for your farm

On my test server, I wish to use multiple ports on the same server. That is, more than one application instance bound to separate ports.
Type the address (without the port) of an application instance. After clicking “Add”, click on the entry in the server address, and click on the “Advanced settings…”. Sinatra’s default port for an instance is :4567. As extra instances are added; add them to the farm with the appropriate port.
NOTE 1: The UI when adding a httpPort for each address is a little weird. What I found working is to type the Server address:, expand ‘applicationRequestRoutin’, enter the port (if not the default port 80), click add. Then re-click on the entry in the list, and re-enter the httpPort (as it seems to revert back to :80)
NOTE 2: Each server address must be unique in the Server farm. Therefore, if you have multiple instances of the same application, although on separate ports, on the same server: you will need to do some work on the DNS or hosts file. On my test machine, I have created aliases in my machine’s hosts file to the same server (run Notepad.exe as administrator!):
%windir%\System32\drivers\etc\hosts
127.0.0.1 localhost localhost-1 localhost-2
Server farms can also exist across physical IP addresses: this may be different IIS instances, different virtual machines or different physical machines.

To match the incoming requests with a particular farm, a URL Rewrite Rule is automatically created.

The below rule will matching any incoming request (which you may wish to tweak) to the server farm. Note the Action properties: pointing to a particular farm, passing on the {R:0}, or the pattern matched in the Match URL:

The .config file
The configuration (on my machine) looks something like:
%windir%\System32\inetsrv\config\applicationHost.config
<webfarms>
<webfarm enabled="true" name="localhost">
<server enabled="true" address="localhost-1">
<applicationrequestrouting httpport="4567" />
</server>
<server enabled="true" address="localhost-2">
<applicationrequestrouting httpport="4568" />
</server>
<applicationrequestrouting>
<loadbalancing algorithm="WeightedRoundRobin" />
<protocol httpversion="Http10" />
</applicationrequestrouting>
</webfarm>
<applicationrequestrouting>
<hostaffinityproviderlist>
<add name="Microsoft.Web.Arr.HostNameRoundRobin" />
<add name="Microsoft.Web.Arr.HostNameMemory" />
</hostaffinityproviderlist>
</applicationrequestrouting>
</webfarms>
For Further Research
- The Server Farms have extra features for checking the health of instances. Wiring these into mongrel would be cool.
- Load Balancing mechanisms: wiring these for deeper integration
- IronRuby. Now that would be cool.
Having spent the weekend working on Ruby on Rails with IIS/SQLServer 2008 Express backend via FastCGI, here are some tips to get you going:
- The best resource is Ruslan’s post on Rails and IIS7. In fact, go and bookmark this site right now. In Ruslan’s post, the web.config shown is best edited in a text editor.
- When installing IIS7.5 on Windows 7 Beta (build 7000) is easy: Using the Control Panels\Programs, Turn Windows Features On/Off. Underneath the Internet Information Services, you need to also install the CGI feature (to get FastCGI)
- Windows 7 and URL Rewrite: This forum post http://forums.iis.net/t/1154240.aspx will get you going whilst Windows 7 is in beta
- Database connectivity to SQLServer seems to be a common question. Installing the option “sqlserver adaptor” which is now an optional part of ActiveRecord:
gem install activerecord-sqlserver-adapter --source=http://gems.rubyonrails.org
Connecting via the ODBC adaptor via the SQL Native Client worked, rather than the ADO connector. My connector string looked something like this:
development:
adapter: sqlserver
mode: odbc
dsn: Driver={SQL Native Client};Server=.\SQLEXPRESS;Database=xxxxx;
- As I am installing underneath the IIS7 root directory (that is: http://server/myapp) there are 3 small Rails tweaks required inform the application all the goodies are in a subdirectory:
in config/environment.rb, the header, define a global variable:
PATH_PREFIX = '/myapp'
in config/environment.rb, in the Initializer, set the asset home directory:
Rails::Initializer.run do |config|
config.action_controller.asset_host = PATH_PREFIX
in config/routes.rb, ActionController::Routing::Routes.draw:
map.connect PATH_PREFIX + '/:controller/:action/:id'
map.connect PATH_PREFIX + '/:controller/:action/:id.:format'
end
John Resig, a developer at the Mozilla Foundation, presented at Yahoo! on jQuery. More specifically, John talks about the Document Object Model (DOM) … and the mess that web developers deal with across browsers.
A question from a recent workshop given by my colleague in evangelism, Delicategenius (please note: I was merely the apprentice to the sorcerer in this workshop)
Q: How do you add elements and attributes in the CSS/Developer Tools of Internet Explorer 8?
As we have seen in a previous post, it is possible to in-line edit elements to tweak a layout. Sometimes, you need to do more to get your design into shape.
Step 1:

By default, the Developer Tools shows a HTML display view. Click on the CSS tab on the left
Step 2:

Adding an Attribute to a rule is simple: right click on the rule name, and select “Add Attribute”. Type the attribute and colon, just as you would in a text editor
Step 3:

Similarly, adding a rule allows you to add another CSS rule such as “BODY P” or similar. Using Step 2 above, you can add Attributes to this rule.

Clicking the disk icon (Save) will save the results of your hard work, so you can reincorporate into your web site.

Yay! Internet Explorer 8 gets closer to final release. A Release Candidate is what happens after a beta release. Microsoft thinks its ready for prime time, but until the rest of the world tests this under live fire, we are never 100% sure.
So, please install and test, test, test. We want to hear how IE8 works for you. The more web sites you test, the better.
As you are aware, Windows only permits the installation of one browser at a time. Installing IE8 will remove the IE7 or IE6 from your machine.
In the interim, how do you test your web sites? It may not be time to install a release candidate to all the PCs in your environment. But you still need to test.
Thankfully, there is a surprisingly magical and unexpected answer:
Microsoft has released a set of Virtual PC “VMs” which you can download, install and run. Free of charge. For testing.
http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&displaylang=en#filelist
So, please upgrade to IE8. And be safe in the knowledge you can still test against older browsers.
A common question from Web developers is: “when in IE6 going to die?”
Yesterday, visiting the developers behind a large Australian web site, we had a squiz (translated: squiz is Australian for look) at browser use statistics. One highlight was during the week, a larger percentage of users were using Internet Explorer 6. On weekends, and during holidays, the percentage of Internet Explorer 7 users increased. That is, home users have upgraded their browsers to later versions that are standards complaint.
Our hypothesis was that Enterprise organisations have not upgraded their standard installed browser from IE6 to IE7.
If you think about it, when doing online banking from home: you want to ensure your transaction is as secure as possible. And bidding on eBay or updating your Facebook status should be as quick as possible. IE7, and other standards compliant browsers help.
The cost of this reluctance to upgrade is that a browser released in late 2001, pre-XHTML and CSS2 W3C standards recommendations is still out there in the wild. That is, large organisations are using a non-standards compliant browser. One argument for remaining on IE6 is that intranet applications are written to support IE6. These legacy applications are throttling the use of later, more secure and faster web browsers.
Thankfully, in Microsoft Internet Explorer 8 has a change:

The Tools>Compatibility View Settings displays the following dialog box:

“Display intranet sites in Compatibility View.” Better yet, this is turned on by default.
For organisations that spend time working with the Internet Explorer Administration Kit (a prerelease is available for IE8) – this can be customised.
This will aid Enterprise organisations install the latest, fastest and most standards compliant web browser. If you are in charge of creating Standard Operating Environments or developing Intranet applications: please write them to be standards compliant. Your future users, and external web developers will be really, really happy.