tag:blogger.com,1999:blog-37962825718747202272009-05-11T13:52:27.692-07:00Fear the CowboyGarrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comBlogger46125tag:blogger.com,1999:blog-3796282571874720227.post-48840505790060294282009-05-08T10:02:00.001-07:002009-05-08T10:05:24.224-07:00Using JScript as a batch scripting language (Part I)<p>As I <a href="http://www.fearthecowboy.com/2009/05/choosing-batch-scripting-language-on.html">mentioned a few days ago</a>, I chose JScript to script of the optimized PHP build process that I’ve built. JScript in-box on pretty much every modern Windows operating system, and provides a great deal of flexibility and benefits for a scripting language:</p><blockquote><p>- it’s syntax is C like. Very tasty.</p><p>- it gives access to <strong>*a lot*</strong> of functionality via COM and WMI.</p><p>- if you know enough about Windows Scripting Host and JavaScript, you can accomplish darn near anything if you want it bad enough.</p><p>- JScript’s regular expressions. While not the universe’s most powerful, they are certainly an integral part of the language. </p><p>- Prototypes allow you to do things to classes that can significantly boost productivity.</p></blockquote><p>It however does lack a few of the basic things that I’d like to see in a batch* scripting language:</p><blockquote><p>- an #include mechanism.</p></blockquote><blockquote><p>- Easy interaction with environment variables.</p><p>- Interaction and leveraging of external processes </p><p>- Analogs to the built in command-line functions like DIR, MKDIR, ERASE, RMDIR, etc. </p><p><em>* And, by “batch” scripting, I mean the scripting of external commands and programs to automate something that would otherwise be done by hand.</em></p></blockquote><p>I was thinking about all of this over the last few months and started experimenting. Along the way I came up with a basic library of functions that address the deficiencies in a rather clever way.</p><h2></h2><h4><u>First, let’s fix the lack of #include </u></h4><p>JScript (well, and VBScript) really didn’t do us any favors by not supplying us with the ability to reuse code in a simple fashion (And yes, I know about .WSC components, and I’m not keen on how <strong>*that*</strong> turned out. Ask me about that again later some time)</p><p>Anyway, #including another JScript file is pretty easy if you know what to do. Not pretty, but easy:</p><pre class="brush: js;">//---[Test01.js]----------------------------------------------------------<br />// includes the scripting library<br />eval( new ActiveXObject("Scripting.FileSystemObject").OpenTextFile("Scripting.js", 1, false).ReadAll() );</pre><p>The eval function gives us the ability to just run code that we pass in at runtime. This will give us a few little bumps along the way later, but for the most part, is pretty darn good.</p><br /><h4><u>How about those environment variables </u></h4><p>The WScript.Shell object has some methods that let us get at environment variables, but I wouldn’t exactly consider them “Script Friendly”. So, the first thing I did, was create a some basic functionality for exposing the environment as global variables. (Some of how this gets useful, comes a bit later.)</p><p></p><br /><pre class="brush: js;">//----------------------------------------------------------------------------<br />// Global variables<br />var GLOBALS=this;<br />var WSHShell = WScript.CreateObject("WScript.Shell");<br />var procEnvironment=WSHShell.Environment("PROCESS")<br />GlobalInit();<br /><br />// Loads the environment from into UPPERCASE variables in the global namespace.<br />// each variable is prefixed with a $<br />function loadEnvironment() {<br /> env = CollectionToStringArray(procEnvironment);<br /> for(each in env) {<br /> var v= env[each];<br /> if(typeof(v)=='string')<br /> if ((p = v.indexOf('=')) == 0 )<br /> continue;<br /> else<br /> GLOBALS['$'+v.substring(0,p).toUpperCase()] = v.substring(p+1) ;<br /> }<br />}<br /><br />// Sets environment variables with the all string variables in the global namespace<br />// that start with a $<br />function setEnvironment() {<br /> for(each in GLOBALS) {<br /> var t = typeof(GLOBALS[each]);<br /> if(t =='string' t=='number') {<br /> if( each.indexOf("$") == 0 ) {<br /> if( IsNullOrEmpty(GLOBALS[each]) )<br /> procEnvironment.Remove(each.substring(1));<br /> else<br /> procEnvironment(each.substring(1)) = GLOBALS[each];<br /> }<br /> }<br /> }<br />}<br /><br />// takes one of those funky-groovy COM collections and gives back a JScript<br />// array of strings.<br />function CollectionToStringArray(collection){<br /> var result = new Array();<br /> for( e = new Enumerator(collection); !e.atEnd(); e.moveNext() )<br /> result.push(""+e.item());<br /> return result;<br />}<br /><br />// returns true if the string is null or empty<br />// Yeah, I was thinking of c# when I wrote this.<br />function IsNullOrEmpty(str) {<br /> return (str "").length == 0;<br />}<br /><br />// Our function for bootstrapping the required environment.<br />function GlobalInit() {<br /> loadEnvironment();<br />}</pre><p>Now, we can easily access environment variables:</p><pre class="brush: js;">//---[Test02.js]----------------------------------------------------------<br />// includes the scripting library<br />eval( new ActiveXObject("Scripting.FileSystemObject").OpenTextFile("Scripting.js", 1, false).ReadAll() );<br /><br />WScript.echo( "Path is :" + $PATH );</pre><p>Next time, I’ll show how I added code to execute and capture other external commands, and show a few cool functions that make playing in JScript a bit simpler.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-4884050579006029428?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-62449786807961966642009-05-07T13:14:00.001-07:002009-05-07T13:47:11.606-07:00PHP 5.3 RC2 *Highly-Optimized* for Windows available<p>Howdy, </p> <p>I’ve been working for many months with <a href="http://blog.thepimp.net/">Pierre Joye</a>—well really, <strong>many </strong>people in the PHP community--on getting PHP to run faster on Windows.</p> <p>Pierre has been working rapidly on upgrading libraries (Pierre pioneered the work to get PHP and its hoard of dependent libraries updated and properly compiling on Windows), replacing old POSIX-emulation code with native calls, patching bugs, and about a million other things, all of which had a huge impact on performance and stability of PHP on Windows.</p> <p>For my part, I’ve been spending my time behind the scenes by feeding information to Pierre that he needs, testing, analyzing, and finally by constructing a new build process that enables us to take advantage of some pretty sweet optimization technology in Visual Studio.</p> <p>Starting today, you can find snapshot builds of PHP 5.3 that are built using my optimized build process on the <a title="Optimized Snapshots of PHP 5.3" href="http://windows.php.net/downloads/snapsoptimized/">windows.php.net</a> site:</p> <p><strong>Current PGO Optimized Snapshot:</strong></p> <blockquote> <p><a title="http://windows.php.net/downloads/snapsoptimized/php-5.3-nts-win32-VC9PGO-x86-latest.zip" href="http://windows.php.net/downloads/snapsoptimized/php-5.3-nts-win32-VC9PGO-x86-latest.zip">http://windows.php.net/downloads/snapsoptimized/php-5.3-nts-win32-VC9PGO-x86-latest.zip</a></p> </blockquote> <p><strong>A few Notes:</strong></p> <blockquote> <p>Over the course of the next couple of weeks, I’ll be explaining how this build process works, and making available the tools that make it all possible. </p> </blockquote> <blockquote> <p>Only the non-thread-safe version is available, so you need to use FastCGI with IIS in order to use it.</p> <p>Since this is a radically different build than the ones that had been traditionally used to create the Windows PHP binaries, you should download the binaries and test with them, but you probably should avoid using them in production just yet.</p> </blockquote> <p>If you have any feedback about the builds, leave me a comment, or send me mail at <br /> <br /><strong> <a href="mailto:garretts@microsoft.com">garretts@microsoft.com</a></strong></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6244978680796196664?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-43091561547417648542009-05-04T13:54:00.001-07:002009-05-04T13:57:35.046-07:00Choosing a batch scripting language on Windows<p>Right now, I’m automating an optimized build process for PHP on Windows that requires a substantial amount of scripting to create the results that I’m looking for. I wrote the first master script in CMD’s batch script, which gave me almost satisfactory results. Almost.</p> <p>Finding myself with the need to recreate the build script, I first had to choose which language to do it in. There are really only two criteria I use when selecting a computer language for a particular task:</p> <blockquote> <p>1. Does the language have the features/syntax to do the task as simply as possible?</p> <p>2. What’s the bootstrap? (ie, what the heck does it take to get the program up and running where it’s going.)</p> </blockquote> <p>Now, on one hand, I’ve been tweakin’ around building my own scripting language for about a year and a half now (g#), and when I’m working on something that only I will use, I’ll often use that. <strong>g# </strong>is a classless c# dialect that I added powershell to and tacked on a slew of extension methods and scripting hacks that make it kindof sweet. I’m not ready to release it to the world yet (I’ve decided upon a better architecture, and I’m going to re-write it) , so I don’t use it on things that I need to give to others—which makes it fail #2.</p> <p></p> <p>Ok, so I compile a short list of potential candidates, and weigh their potential:</p> <p><strong>.CMD/Batch:</strong></p> <blockquote> <p>Aside from the fact that it’s already failed me, and I’ve tried to make it ‘smarter’, in the end, there are some things that just end up getting to be too damn messy to implement. Oh, and it sucks.</p> </blockquote> <p><strong>BASH</strong></p> <blockquote> <p>Now, that would have been a <strong>great</strong> idea. Except that BASH isn’t native to Windows, and Cygwin isn’t… isn’t… ugh, don’t even bother.</p> </blockquote> <p><strong>Perl, Python</strong></p> <blockquote> <p>In my book, they can pass muster on #1… but #2… ooh. no thanks.</p> </blockquote> <p><strong>PowerShell</strong></p> <blockquote> <p>I’m *still* not a fan of PowerShell. Even assuming that it might already be on the target box, which takes care of #2, out of all the languages I’ve encountered, it’s the least pleasing to me. </p> </blockquote> <p><strong>C# </strong></p> <blockquote> <p>Scripting with C#? … well, it’s not really meant to do that. I’d like to just ‘run’ the script y’know? I did do a proof of concept a year or so ago, where I wrapped the c# in some JScript, that would automatically call the compiler, and pass arguments thru to the generated EXE:</p> <pre class="brush: js;">//@cc_on //@if (@_jscript_version &lt; 5)<br />#if false<br />//@end //@if (@_jscript_version &lt; 6)<br /> var args="";<br /> var exename = WScript.ScriptFullName.replace( /\.js$/gi , ".exe" );<br /><br /> var et=" /t:exe"; if( WScript.FullName.toUpperCase().indexOf("WSCRIPT.EXE" ) != -1 ) et=" /t:winexe";<br /> for( each =0; each&lt; WScript.Arguments.length; each++)<br /> args= args+" "+WScript.Arguments(each);<br /> var compilers = new Object(); compilers['.js.js'] = 'jsc.exe'; compilers['.cs.js'] = 'csc.exe'; compilers['.vb.js'] ='vbc.exe';<br /> var WSHShell = WScript.CreateObject("WScript.Shell") ;<br /> var fso = WScript.CreateObject("Scripting.FileSystemObject");<br /> var compiler = compilers[WScript.ScriptName.substr( WScript.ScriptName.length - 6).toLowerCase()];<br /> if( ""+compiler == "undefined" )<br /> WScript.quit(WSHShell.popup("Unable to determine compiler type from filename"));<br /> try {<br /> compiler = WSHShell.RegRead("HKLM\\Software\\Microsoft\\.NETFramework\\InstallRoot") + "v2.0.50727\\"+ compiler;<br /> if( !fso.FileExists( compiler ) )<br /> throw new Error(".NET 2.0 not found");<br /> if( fso.FileExists( exename ) )<br /> fso.DeleteFile( exename );<br /> } catch( e ) {WScript.quit(WSHShell.popup("You do not appear to have .NET 2.0 installed.\n\nYou must install .NET 2.0."));}<br /> var Pipe = WSHShell.Exec(compiler+et+" /nologo /out:\""+exename+"\" \""+WScript.ScriptFullName+"\"" );<br /> while(!Pipe.StdOut.AtEndOfStream)<br /> WScript.StdOut.WriteLine(Pipe.StdOut.ReadLine());<br /> if( fso.FileExists( exename) )<br /> var Pipe =WSHShell.Exec(exename);<br /> while(!Pipe.StdOut.AtEndOfStream)<br /> WScript.StdOut.WriteLine(Pipe.StdOut.ReadLine());<br /> WScript.quit(0);<br />//@else //@if (@_jscript_version &lt; 5)<br />#endif<br />//@end<br /> using System.Windows.Forms;<br /> <br /> public class MyMain<br /> {<br /> public static void Main( string[] args)<br /> {<br /> if( args.Length &gt; 1 )<br /> MessageBox.Show("Hello world to you "+args[1]);<br /> else<br /> MessageBox.Show("Hello world!"); <br /> }<br /> } <br />//@end</pre><br />but, really that’s just a tad weird. Plus, it’s just not convenient to do batch scripting in.<br /></blockquote><strong>VBScript</strong><br /> <blockquote><p>VBScript is a popular choice, it’s installed pretty much on all Windows boxes these days, but … I dunno.. There are some things that are just a PITA to do, and scripting external apps isn’t fun at all.</p></blockquote><strong>JScript</strong><br /> <blockquote><p>JScript is not too popular of choice--which in my opinion, very weird. Since JScript is essentially JavaScript, it offers a pretty damn flexible language that people enjoy, and there is lots of good references for how to do alot of things. Again, it’s already installed pretty much on all Windows boxes, and you have full access to COM and WMI, which on Windows can get you a huge amount of functionality.<br /> <br />On the down side, it’s not very “batch friendly”—it lacks the simplicity of executing a program, and leveraging the results for other purposes (like real batch scripting languages like BASH , or … PowerShell).</p>But, maybe with a bit of linguistic legerdemain, I can fix the shortcomings of JScript, and get a pretty cool language, with very little effort. (Which, I did, and I’ll post about next!) </blockquote><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-4309156154741764854?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-20393806148697520322008-08-11T14:49:00.001-07:002008-08-11T14:54:51.392-07:00RAID 5: These aren't the droids you're looking for.<p>My earlier post on <a href="http://www.fearthecowboy.com/2008/08/windows-home-server-drive-extender-vs.html"><em>Windows Home Server's Drive Extender vs RAID</em></a><em>,&#160; </em>a lot of what I said was a good example of somethin' my pappy once told me:</p> <blockquote> <p><em><strong>&quot;Good judgment comes from experience, and a whole lotta that comes from bad judgment.&quot; </strong></em></p> </blockquote> <p>Well, rest assured that I've had my share of bad judgement, as I'm sure others have, given some of the feedback I've received.&#160; Charlie pointed out to me some of the other really good reasons why you're better off not going with RAID5, rather than just using Drive Extender:</p> <blockquote> <p><strong><em>While RAID5 hardware is fast, it is also pretty much universally incompatible. In other words, if your RAID5 controller fails you will have to find an IDENTICAL controller to replace it or your array will be unreadable. <br /></em></strong>For those playing along at home, this is <strong>bad</strong>. If you think your data is valuable enough to keep around, and you're worried enough about failure that you're going to do something about it, think about what else will fail--not <strong><em>can</em></strong>, but <em><strong>will</strong>-- </em>hard drives, controller cards, motherboards, ram, network adapters, power failure.&#160; I'd mention the possibility of meteor strikes, but ... I'm gonna play the odds with that one.</p> <p>When I think about the how each of those failing is going to affect my ability to even recover data, the controller card is a nasty wildcard. There is no standard layout for how each controller card uses all that storage, and it's going to be needing replacement with the exact same controller. </p> <p><strong><em>All drives in a RAID5 array have to be the same size. </em> <br /></strong>Hey sure, no problem. I can get 750 gb drives the same size in the future... Uh, except there is no guarantee that the drives will be exactly the same size, (even if they are labeled the same), and it's possible that other changes in the future could render them so obsolete, that it could be hard to even source drives of a particular size.</p> <p>Furthermore, as you progress into the future, with Drive Extender, you can simply buy any size of drive that fits your budget, and add it to the server. No worries about how big, what brand, how fast, etc. </p> <p><strong><em>Drive Extender gives you the flexibility to NOT duplicate files that don&#8217;t need to be duplicated (making it MORE efficient than RAID 5 in some cases). <br /></em></strong>And this, is a really really good point too. Sometimes, I want to have data that I really don't care as much about, or I'm less worried about it being backed up and online.&#160; With Drive Extender, you can mark some content as not requiring duplication. Like maybe TV shows I've recorded on Media Center. Or those videos of my in-law's trip to Cleavland. You know what I mean.</p> <p><strong><em>RAID5 rebuild times with a single drive failure are often as long as your 3.5 month ordeal of recovery! <br /></em></strong>Well that's certainly true--I took all summer to restore my data, and I had no idea until I got it back if I would. </p> <p><strong><em>RAID deals at the block level and thus knows nothing about the interesting file information (metadata, etc&#8230;).&#160; Thus it will NEVER be able to be smart about your storage.&#160; But Drive Extender is file based and tons of innovation can happen (will happen!) leveraging this fact. <br /></em></strong>This is the point that I think is even more important, and yet so many folks will either ignore or not really understand.&#160; RAID is a system of aggregating <em>independent disks </em>and presenting that larger volume that to the OS as a single large drive. It works at a block level, meaning that your RAID system really knows nothing about files, just blocks. And because it's unaware of that, there is so many optimizations that can't be done with it. With file-level data redundancy, the system knows a lot more about it, and can begin to make decisions that would be much more beneficial.&#160; Think, down the line in a couple years, as I add a few more hard drives to my growing server--which <strong>already</strong> contains drives that are connected by Firewire, SATA, ATA and USB (*sigh*)--it's possible that the technology could realize that I rarely ever touch some kinds of data (or specifically, some types of data) and it could migrate those files to the slower media, and keep the faster media for things that need it.</p> </blockquote> <p>Now, my momma said that I should always end by sayin' somthin' nice, so I'll leave ya with this:</p> <p><em><strong>So is there anything good about RAID5 or are you just some sort of once-scorned-RAID-hater? <br /></strong></em>I've said it before but it bears repeatin': RAID--in general--is great for <strong>performance, </strong>and RAID5 adds to that, <strong>availability</strong>.&#160; My desktop at home has 1.4 terabytes of space, striped (that's RAID1). My desktop at work has 2.8 terabytes of storage, again, striped. Sure, sure, with 4 750 gb drives, and using striped storage, I'm subject to failure at 4x the rate I was before (probably more, cowboy math ain't that great... :D). On those systems, I'm not leaving anything there that I can't afford to lose, either because I've backed it up, or it's recreate-able. </p> <p>&#160;</p> <p>But WHOOOOOSH, it sure goes fast!</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-2039380614869752032?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-60345430516480971832008-08-11T10:02:00.001-07:002008-08-11T10:02:59.579-07:00Windows Home Server's Drive Extender vs RAID<p>I use <a href="http://en.wikipedia.org/wiki/Windows_Home_Server">Windows Home Server</a> at home to store *everything*... it's really quite a fantastic product. It has a feature called Drive Extender, for which Wikipedia describes nicely:</p> <p><em><b>Windows Home Server Drive Extender</b> is a file-based replication system that provides three key capabilities:<sup><a href="http://en.wikipedia.org/#cite_note-11">[12]</a></sup></em></p> <blockquote> <ul> <li><em>Multi-disk redundancy so that if any given disk fails, data is not lost </em></li> <li><em>Arbitrary storage expansion by supporting any type of </em><a href="http://en.wikipedia.org/wiki/Hard_disk"><em>hard disk</em></a><em> drive (</em><a href="http://en.wikipedia.org/wiki/Serial_ATA"><em>Serial ATA</em></a><em>, </em><a href="http://en.wikipedia.org/wiki/Universal_Serial_Bus"><em>USB</em></a><em>, </em><a href="http://en.wikipedia.org/wiki/FireWire"><em>FireWire</em></a><em> etc.) in any mixture and capacity </em></li> <li><em>A single folder namespace (no drive letters) </em></li> </ul> <p><em>Users (specifically those who configure a family's home server) deal with storage at two levels: </em><a href="http://en.wikipedia.org/wiki/Shared_resource"><em>Shared Folders</em></a><em> and Disks. The only concepts relevant regarding disks is whether they have been &quot;added&quot; to the home server's storage pool or not and whether the disk appears healthy to the system or not. <br /></em><em>Shared Folders have a name, a description, permissions, and a flag indicating whether duplication (redundancy) is on or off for that folder.</em></p> <p><em>If duplication is on for a Shared Folder (which is the default on multi-disk Home Server systems and not applicable to single disk systems) then the files in that Shared Folder are duplicated and the effective storage capacity is halved. However, in situations where a user may not want data duplicated (e.g. TV shows that have been archived to a Windows Home Server from a system running </em><a href="http://en.wikipedia.org/wiki/Windows_Media_Center"><em>Windows Media Center</em></a><em>), Drive Extender provides the capability to not duplicate such files if the server is short on capacity or manually mark a complete content store as not for duplication.</em></p> </blockquote> <p>Here at Microsoft, we have an internal mailing list for WHS, and every once in a while, someone asks one of the following questions:</p> <blockquote> <p>Isn't RAID better than Drive Extender? <br />Why should I use Drive Extender instead of RAID? <br />Which RAID card should I buy? <br />How good is software RAID5?</p> </blockquote> <p>I try to ignore those threads, but when the responses start coming in about the merits of RAID vs simply using DE, I end up getting itchy, and chime in. The topic came up again, this last weekend, and I recycled an old response, and it started looking like a good blog post... so here's the skinny.</p> <h3>First, the reason why you don&#8217;t want <i>Software</i> RAID 5</h3> <p>First, there&#8217;s a big gap between software RAID5 and hardware RAID5. Software RAID5 is slow. Damn Slow. Faster than that&#8230; maybe pretty damn slow. Not a great solution. You won&#8217;t be happy at the end of the day (see section below &#8220;<b>Why you don&#8217;t want RAID 5.</b>&#8221;)</p> <p><i>Hardware</i> RAID5 is fast. Zippity fast. So is<b> how fast you will lose your data.</b></p> <h3>Why you don&#8217;t want RAID 5</h3> <p>RAID 5 is not about data <b>integrity</b>&#8230; it&#8217;s about <strong>performance and availability</strong>.&#160; </p> <p><b>If you want your data to be safe</b>, replicate it. Back it up. Put it in more than one place at a time.</p> <p>If you use RAID5, you still need to back up your data.&#160; RAID5 is designed so that a single drive failure, will preserve your data, and make it available (but slower) until you get another drive in place, when it will rebuild the missing volume.</p> <p>Here&#8217;s the kicker. <b>What happens when a drive fails,</b> and you are not there? If the system is in use, it&#8217;s going to get <b>really really busy, </b>and all of the drives in the array are going to get a lot of use.</p> <p>When that hard drive fails (<i>and you are not planning for <b>IF</b> but <b>WHEN</b></i>), and the others pick up the slack, the chances of losing a second drive <i>go thru the roof</i>. <b>What will you lose if a second drive goes?</b></p> <p><b>This is common, especially in a server/computer in a home environment, </b>where the drives may not be busy most of the time.<b> </b></p> <p><b></b></p> <p>One other contributing factor to multiple drive failure in RAID5, is people tend to use the same brand of drives, especially if they are the same batch (ie, you bought them at the same time).</p> <h3>My personal experience with RAID5</h3> <p><b><u></u></b></p> <p>I had a server running RAID5 at home, it ran perfect for over a year (actually, close to two). One night after I went to bed, a drive failed. 3 minutes later another failed. This was a 2 terabyte RAID array.</p> <p>I came down in the morning to my worst nightmare. Every bit of &#8216;valuable data&#8217; I had in the world was now gone. In desperation I scoured the internet, and finally found a piece of software that (for $40!) could&#160; recreate every file that I still had data for, if not a little slowly. I rushed out and bought 3 750gb drives, and started to restore everything I had lost. The restore process took <b>3 and half MONTHS</b>, running full time, around the clock. The good news is that I was able to get one of the failed drives spinning again, and I lost a total of one file.</p> <h3><b>What did I learn</b>?</h3> <p><b>RAID5 doesn't back up my data.</b> Sadly, I thought it <b>was</b> safer. Worse than that, it was actually <strong>less</strong> safe. A single drive failure would have meant nothing. Add another drive, and keep chugging. Potentially, it may have taken a few hours to rebuild the lost volume, but I could have been using it while it did.</p> <p>A second drive failure would have meant I was offlined for the time it took to restore--<b>If I actually had a backup</b>. Still, not bad, considering that would have been less than the 3.5 months.</p> <p>But a two drive failure(which is fairly likely)<b>--without a backup--</b> is a nightmare.</p> <p>If you value your data, replicate. I now have a home server with 6 250gb drives and 3 750gb drives, and the data that I value is replicated. (and the really valuable data is foldershare&#8217;d to a friend&#8217;s house, and vice versa, giving us offsite backups too). Sure, it&#8217;s not as &#8216;space efficient&#8217; but at least I can deal with a drive failure.</p> <p>Raid 1 (mirroring) is the only RAID where a failure doesn&#8217;t increase drive activity drastically&#8212;well, reads are all going to one drive now, but if you had 8 drives mirrored in 4 sets, typical access won&#8217;t cause <b>all</b> the drives to get busier.</p> <p>Raid 0 of course, is purely about speed. Half the safety at twice the speed. That&#8217;s what I use in my desktops. (where I want it fast. I of course back up anything that I&#8217;m not willing to lose to the server.)</p> <h3>What is my Advice?</h3> <p><b><u></u></b></p> <p><b>Know this: if you are using hard drives, one day, <em>you will</em> experience a drive failure. Not 'might', but 'will. <br /></b>How you are affected depends on your choices. </p> <p><b></b></p> <p><b>Determine how valuable your data is. <br /></b>Stop thinking about the price of the hard drives. Disk Space is very cheap. It got cheaper while you were reading this. It's the stuff you store that's not. </p> <p><b></b></p> <p><b>Are you planning for the inevitable, or playing the odds? <br /></b>I can talk all day why DE is better than RAID, or why one particular strategy is better than the other. At the end of the discussion, you're still the one making your decision, and you're probably pretty smart. (You're reading my blog). Ask yourself: <em><strong>why are you doing what you are doing</strong></em>?</p> <p><b></b></p> <p>I'll leave the rest to your imagination.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6034543051648097183?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-58117534227921327752008-07-23T14:24:00.001-07:002008-07-23T14:24:48.215-07:00Interesting thing found at OSCON: Taint<p>I attended a session this morning called &quot;<strong>PHP Taint Tool: It Ain't a Parser</strong>&quot; by Luke Welling. Luke introduced a tool he's working on at OmniTI that is designed to assist in sniffing out where the potential for untrusted input is handled. From the session description:</p> <blockquote> <p><em>... You want to see where untrusted input can propagate taint within the application. In complex logic that might mean chasing many possible execution paths. Using an automatic tool to try to follow these paths without running all possible input variations is called static analyis. ...</em><em> The Taint tool allows the PHP engine to do as much as possible, then cuts in at the last stage to analyze the compiled opcodes and trace possible flow of execution.</em></p> <p><em>The Taint tool presents opcodes in a readable way, making it clear what lines of source got compiled into specific opcodes. It also performs a static analysis on the code, following the opcodes to attempt to trace all possible code branches and mark lines that tainted data can be passed to.</em></p> </blockquote> <p>Essentially, the tool uses the parts of the PHP engine to compile PHP code to opcodes, and then tracks where data comes and goes, and highlights the code that handles data that *could* be tainted--that is, input from the user either by POST or GET parameters.&#160; This provides a facility for a developer to identify the lines that they should closely review to ensure that they are not accidentally introducing security holes (like cross-site-scripting opportunities).&#160; </p> <p>Now, it's not-quite-ready for prime-time, but it's getting close, and the folks over at <a href="http://labs.omniti.com/">OmniTI</a> intend to release it as open source when they are ready.&#160; When this gets released, I'll be really excited, as it looks like it could be really good for hunting down security holes.</p> <p>I also attended Rasmus Lerdorf's (the Yahoo PHP guy) tutorial on <strong>&quot;PHP: Architecture, Scalability, and Security&quot; </strong>that was really quite good too, and he demonstrated a tool (<em>the name of which I can't remember now...grrr</em>) that they have at Yahoo that he points to a web page, and it starts throwing a large library of strings that may uncover security problems, but it does it from the client side.&#160; Unfortunately, he's <strong>not </strong>releasing it, not because he doesn't want to let folks find and fix their bugs, but because the release of a such a tool could bring about Internet Armageddon--it would likely find exploitable problems in the <em>vast majority </em>of the Internet.&#160; </p> <p>Both approaches to finding application holes are useful, and it's clear from both talks that this is still a really large problem that developers need to address.</p> <p><font face="aria" size="1">(I've had a problem with spam comments; I'll be addressing that soon, so if you see comments turned off you can drop me a email: garretts<i style="visibility: hidden">...</i>at<i style="visibility: hidden">...</i>microsoft<em><i style="visibility: hidden">...</i></em>dot<i style="visibility: hidden">...</i>com)</font></p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-5811753422792132775?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-16813049573428510532008-07-23T11:42:00.001-07:002008-07-23T11:42:54.232-07:00Hey, are you at OSCON?<p>This week I'm at <a href="http://en.oreilly.com/oscon2008/public/content/home">OSCON</a> in Portland, OR. I like what their site says about it:</p> <blockquote> <p><em>&quot;OSCON is the crossroads of all things open source, bringing together the best, brightest, and most interesting people to explore what's new, and to champion the cause of open principles and open source adoption across the computing industry.&quot;</em></p> </blockquote> <p>It really is exactly that. It seems like I've met so many people here, and have had so many great conversations, it's like time slows right down, and the universe is conspiring to squeeze everything it can into just a few days. </p> <p>I'm having a great time here, and with so much going on, I feel like a kid in a candy store. The biggest trouble I'm having is picking what sessions I want to attend, as there is just so many worth while.&#160; However, given the work I'm currently doing with PHP, I think I'll stick pretty close to the PHP related sessions for the most part.</p> <p>The last couple of years, Microsoft has had a fair number of people here, and this year is no exception. I keep bumping into people I know... Hey, if you're reading this, and you see me, stop and say hello!</p> <p>You can recognize me by my <a href="http://www.fearthecowboy.com/headshot.png">picture</a>.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-1681304957342851053?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-83697429160357462382008-07-21T12:56:00.001-07:002008-07-21T12:56:54.977-07:00Blame it on your lying, cheating, cold dead-beating, two-timing, double-dealing mean mistreating, loving heart<p>Ever notice how folks who blog sporadically (uh, like me!) always apologize for not blogging for a while, and then re-affirm their dedication to blogging regularly? And often, accompanying their apology, is also a reason. I was going to &quot;<a href="http://en.wikipedia.org/wiki/Blame_It_on_the_Rain">Blame it on the Rain</a>&quot; but the very thought of quoting <a href="http://en.wikipedia.org/wiki/Milli_Vanilli">Milli Vanilli</a> makes me shudder. </p> <p>So, instead, <a href="http://en.wikipedia.org/wiki/Patty_Loveless">Patty</a> gets to explain it for me.&#160; Well, now that I think about it, it really doesn't explain anything. But I was listening to that song last night, and the lyrics stuck in my head. </p> <p>..... Aaaaaanyway...</p> <p>The worst part about not blogging for weeks on end is that I can't just ramble on as if you know what I've been up to for the last last few weeks, but I'll try to catch ya up:</p> <p>Over the last several weeks, I've been moving my focus from doing &quot;Program Management&quot; tasks to more &quot;Software Developer&quot; tasks. You see, during the last year, I've discovered that I'm a Developer. Deep down, that's what I do best. Focusing in that direction is already paying off, and I'm finding that I'm accomplishing far more than I had before.</p> <p>So, rather than focus on simply facilitating, I've been actually compiling, debugging, coding... aaaahhh. It's so nice.</p> <p>And the best part: all the work that I'm doing is dedicated to getting Apache and PHP working much better on the Windows platform. I may just possibly have the absolute best job at Microsoft. </p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c9c60913-15c4-4cd6-851c-252207ce1594" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/OSCON" rel="tag">OSCON</a>,<a href="http://technorati.com/tags/PHP" rel="tag">PHP</a>,<a href="http://technorati.com/tags/Apache" rel="tag">Apache</a></div> <p>(Don't forget the updated .sig...)</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-8369742916035746238?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-10570256646613053352008-04-10T07:49:00.001-07:002008-04-10T07:49:13.294-07:00A funny thing happened on the way to ApacheCon<p>Back in January, I invited the Apache Software Foundation to attend the Windows Server 2008 Application Compatibility Labs, here on our campus in Redmond.&#160; In order to get as many developers as possible to attend, we even paid for flights and accommodations for some members.</p> <p>The week that Apache was here, was so valuable for both groups--the product groups got to see and understand what some of the issues were that some of the Apache projects have run into, and the Apache folks were able to get their hands on the developers who built the system. </p> <p>Myself and Bill Rowe had hammered out some details before I actually sent the invitation out. Along with posting it on some of the Apache Mailing Lists, I also posted the invitation on my own blog so that others could see what we're up to. And, as to be expected, there was a wide variety of comments posted--both positive, and ... less positive.</p> <p>My favorite though, was:</p> <blockquote> <p><em>&quot;Microsoft should go to Apache developers and see if Windows Server 2008 works correctly with Apache, not the other way around.&quot;</em></p> </blockquote> <p>In some ways, that would have been somewhat impractical--when the Apache folks visited us, they had the opportunity to meet with engineers and program managers from many different groups, in addition to getting access to the hardware in the lab and the expertise of the folks who run that.&#160; For us to pick up the 20 or so people from the product groups that they actually met with, and drag them all out to all the locations where Apache developers are--which is pretty much everywhere--would not have been possible.</p> <p>Still, I felt it would be more than valuable for me to go ApacheCon, so that I had the opportunity to meet with Apache developers where <em>they</em> roam. When Bill was in Redmond, he invited me to the Apache Hackathon--the couple of days at the beginning of the conference that developers could hang out and code.&#160; So, a snappy 10hr flight later, here I am at ApacheCon in Amsterdam.</p> <p>The Apache Foundation is an interesting community--or rather community of communities.&#160; It's not just one project (the http server is what most people think when they hear Apache), but literally dozens of top level projects, and a whole bunch more in the 'incubator' (where baby projects are cultivated until it is clear that it will have ongoing support and development).&#160; The hackathon is just a large room with tables where folks can come in, sit down open their laptops and start coding. It's actually a lot quieter than I imagined it would be.&#160; Naturally, the folks in communities tend to gravitate together and discuss their projects.</p> <p>As I'm not really on any project, I've been bouncing around chatting up different groups, getting their perspective of their own little chunk of Apache.&#160; Most of the people I've talked to aren't surprised at all that I'm here--which is definitely a change from conferences a year ago--and are excited to hear about our efforts.</p> <p>Now, for the funny thing.&#160; I booked my hotel a few weeks back, using the internal travel system here at Microsoft.&#160; The hotel that the conference is at was booked, so I looked for one nearby.&#160; Unfortunately, the tool doesn't let me search for hotels near another <em>hotel</em>, and I didn't know what else was close that I could search near (and my inability to read Dutch didn't help), so I used the tool to show me where the hotels were, I'd switch to <a href="http://local.live.com">http://local.live.com</a> and see how close it was, and if it was close, I'd switch to the other tool to check out the availability, and there was not much available. ... I guess I was distracted while I was doing it, and I ended up booking a hotel right next to the airport, which is in no way close to the conference, and so I spent the night in that hotel--and called the wonderful travel support folks who found me a hotel where I needed to be, and I moved there the next morning. Lesson learned: next time I travel to the Netherlands, I'm asking <a href="http://www.microsoft.com/opensource/heroes/hank.mspx">Hank</a> to find me a hotel. </p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-1057025664661305335?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-66168268979437685172008-03-24T15:22:00.001-07:002008-03-24T15:22:06.267-07:00How a cowboy spends two days in Boston: Drupalcon 2008<p>Howdy ya'll, </p> <p>I was recently in Boston, and managed to spend a couple of days at <a href="http://boston2008.drupalcon.org/">Drupalcon</a>, where <a href="http://port25.technet.com/">Port25</a> was a silver level sponsor for the event.&#160; The herd was over 800 attendees--all focused on <a href="http://drupal.org/">Drupal</a>.&#160; Needless to say, I was duly impressed.</p> <p><strong>What's Drupal?</strong></p> <p>Drupal, written in <a href="http://php.net/">PHP</a>, is an open source content management platform. It's equipped with a powerful blend of features, and supports a variety of websites ranging from personal weblogs to large community-driven portals.&#160; Drupal has been rapidly displacing a large number of other PHP based content management systems, and has an active community along with broad vendor support. </p> <p>Over the last year or so, Microsoft has been working hard to improve PHP's support on Windows.&#160; With the hard work from the SQL Server team, who recently published a new CTP of the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=85f99a70-5df5-4558-991f-8aee8506833c&amp;displaylang=en">native SQL Server PHP driver</a>, the <a href="http://learn.iis.net/page.aspx/375/setting-up-fastcgi-for-php/">FastCGI</a> work that the IIS team has done, and of course Zend, who we've been coordinating with--PHP is rapidly getting the support and attention it deserves. </p> <p><strong>So... Drupalcon?</strong> </p> <p>Ah Yes. From the humble beginnings in 2004, where 10 people attended the first Drupalcon, it's grown into a massive bi-annual event (one in <a href="http://boston2008.drupalcon.org/">North America</a>, and one in Europe) with over 800 attendees, plus sponsors. I was truly stunned at the sheer size of the event--I would have assumed a much larger affair.</p> <p><a href="http://boston2008.drupalcon.org/user/42">Kieran Lal</a> hosted a session early on Monday morning, in which he told how to get the most out of Drupalcon--and really, it was applicable to any conference, and I really enjoyed it. Between that session and the first keynote, I hung out, and got to know a bunch of folks.&#160; </p> <p><strong>Who are the people in your neighborhood?</strong></p> <p>Drupalcon was <strong>really </strong>quite special--of all the conferences I've been to, Drupalcon was home to the most friendly folk I've ever seen.&#160; Everybody was really fun to talk to, and they all were excited to hear about Microsoft's effort in making PHP run great on Windows. </p> <p>I spent about 45 minutes talking to <a href="http://www.garfieldtech.com/">Larry Garfield</a> about expanding support for databases in Drupal.&#160; Larry has done a tremendous amount of work for <a href="http://www.garfieldtech.com/blog/drupal7-database-update">Drupal 7 on database abstraction</a>--it's going to be pretty cool, trust me.</p> <p>I managed a few minutes of Kieran Lal's time, which was quite amazing, as he seemed to be doing a million things at once during the conference, and barely had a spare moment to catch his breath.&#160; We talked about the future of Drupal, and how Microsoft could get involved, and I think we're both pretty excited about the future.&#160; </p> <p><a href="http://buytaert.net/">Dries Buytaert</a> gave his traditional &quot;State of Drupal&quot; presentation (video can be found <a href="http://www.archive.org/details/DrupalconBoston2008-TheStateOfDrupal">here</a>), which contained a couple real eye openers:</p> <blockquote> <p>Drupal 6 had over 100,000 downloads in the first month of release, that's 2x over Drupal 5. Wow. That's pretty amazing.</p> <p>Drupal 7 (and beyond) appears to have one of the most well thought out plans in place--I can't recall another open source project that has such a detailed road map. </p> </blockquote> <strong>Then, I came home...</strong> <p>Aside from the jet-lag and the shortness of the trip, I enjoyed the conference immensely.&#160; We've been playing with Drupal in our lab over the last several months, and it's clear that the time has been well spent--Drupal is not only an emerging phenomenon, but the future looks even brighter.&#160; I reckon you'll be seeing many more posts from me in the future about it.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6616826897943768517?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-49937656350435528212008-03-03T11:31:00.000-08:002008-03-03T12:24:37.364-08:00The Apache Visit to the Microsoft Campus: Day Three<p>Day two moseyed late into the night...well for me anyway--cowboys wake with the sun.</p><p>Day three turned out to be a day full of surprises for me--most of the sessions were significantly more interesting than I would have guessed.</p><p>We started the day with a presentation by <b>Bill McKinley</b> on <a href="http://www.innovateon.com/product_server2008.aspx">Windows Logo Certification</a> (for which there is a great little quickie primer <a href="http://blogs.msdn.com/v3nkat/archive/2008/01/21/windows-server-2008-application-compatibility-and-logo-certification.aspx">here</a>). I highly recommend checking this out--the logo certification program provides some tools to assist with certification validation, and even if you have no interest in certification, running the tool will give you a rundown of potential issues that your customers will face.</p><p>After a break for more testing, <strong>Rob Mensching </strong>and <strong>Peter Marcu </strong>dropped by to give the team a thorough examination of <a href="http://wix.sourceforge.net/">WiX</a> (the open source Windows Installer XML toolset). Again, very cool stuff. Admittedly, there seems to be a somewhat steep learning curve, but it integrates nicely into build scripts, and has all the flexibility you'd ever need.</p><p>After lunch, we did some testing, with a quick little jaunt to the Microsoft Company Store, where the attendees took advantage of Microsoft Employee pricing on some software and hardware.</p><p>We rounded out the day with a session on <a href="http://msdn2.microsoft.com/en-us/isv/bb190483.aspx">Windows Error Reporting</a> -- you know when an app crashes, and you can send anonymous debug info to Microsoft? The information ends up in the WER system, where developers can register to get crash and hang information for their software and drivers. I knew that the information was collected, but previously, I had no idea how easy it is for app developers to get their hands on the data. I strongly recommend that you check it out.</p><p>While Wednesday was the last day for most of the attendees, a few stayed through Thursday, and I'll post a wrap-up on that tomorrow.</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-4993765635043552821?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-62485786369009422402008-03-03T11:30:00.002-08:002008-03-03T11:33:03.282-08:00The Apache Visit to Microsoft Campus: Day Two<p>Day two turned out to be quite a busy day! <p>First thing in the morning, we started off testing some Apache applications on Windows Server 2008, both the 64 and 32 bit versions.&nbsp; Right away, a few things were uncovered, primarily around UAC, data redirection (where Windows redirects writes to the file system and registry to safe locations for low-rights processes) and an odd issue with an event mutex that we're tracking down. <p>After getting a little testing done, we had a great in-depth presentation of IIS by Senior Program Manager <strong>Thomas Deml</strong>.&nbsp; Like the Core Networking presentation the day before, it was really informative, and the Apache folks took the opportunity to really drill down into the architecture of IIS. Why would they? Like I mentioned before, a number of Apache Projects (like Tomcat) support IIS in one way or another, and could benefit from tighter integration with IIS. <p>After lunch, <strong>Peter-Michael Osera</strong> and <strong>Li Shao</strong> spent a couple of hours addressing some of the C++ and toolset questions the Apache team brought.&nbsp; They really did an admirable job answering the questions that they could, and the ones that they didn't have answers to, they are following up via email over the next couple of days. <p>After that, some more time for testing rounded out the rest of the day. <p>For supper, Sam Ramji, took the team out to Ruths' Chris Steakhouse for a fantastic meal, and we had a great evening talking about nearly everything under the sun. <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6248578636900942240?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-67845975585890346562008-02-26T11:59:00.001-08:002008-02-26T11:59:49.027-08:00The Apache Visit to Microsoft Campus: Day One - afternoon<p>In the afternoon, we had <b>Ari Pernick</b> (along with a posse of extremely knowledgeable folks: <strong>Ali Turkoglu</strong>, <strong>Osman Ertugay</strong>, <strong>Serena Ho</strong>,<strong> Osama Mazahir </strong>and <strong>Barry McDuling</strong>) come out from the Core Networking group.&nbsp; They spent about two and a half hours going through details in the Windows Server 2008 networking stack, as well as a deep investigation of the HTTP.SYS technology. Now, I’m no slouch when it comes to this stuff, but I tell ya, I learned a lot yesterday just sitting in on that.&nbsp; From the water-cooler conversations that we had later in afternoon, I would expect that we’re going to see some interesting changes in Apache httpd, and Tomcat in the future. <p>After that, we took an hour and came up with a list of other issues and questions that the Apache folks had, so we can drag in some more product groups on Tuesday and Wednesday.&nbsp; <p>As for the evening, we all went out to the Rock Bottom Brewery for some food and drinks and some socialization—I took a few pictures, and I’ll get them up as soon as I can. </p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6784597558589034656?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-81169705661378070862008-02-25T11:56:00.001-08:002008-02-25T11:56:35.936-08:00The Apache Visit to Microsoft Campus: Day One<p>This morning, we've had the honor of hosting the Apache Software Foundation in the Windows Server 2008 Application Labs.&nbsp; They are here this week in order to get some deep knowledge about Windows Server 2008, and access to the folks from product groups who can help them make their apps work better under Windows Server.</p> <p>We asked them out to campus because we are extremely interested in having the Apache web server (well, all the Apache projects) run great on Windows Server 2008.&nbsp; Now, every time I say that, some folks always want to know "Why would you want that?" or "What do the IIS folks think about that?"</p> <p>Well, it turns out that some folks have apps that run on Apache.&nbsp; Yes, even on Windows. Sometimes, it's a matter of investment in a particular solution where their app uses Apache. It could even be that they just simply prefer the model that Apache provides. Regardless, it's important to us that those applications run as good as they possibly can on the Windows platform.</p> <p>As to the question about IIS, there are several Apache projects like Tomcat that currently support IIS, and hey, we'd like to have even better support.&nbsp; To make that happen, we've asked some folks from the IIS team to join us in the labs, where they can open up and give the assistance that is needed.</p> <p>So far, we've just gotten started, with two fine gentlemen from the Compatibility Lab (<strong>Pat Altimore </strong>and <strong>Maarten Van De Bospoort) </strong>presenting a great session about general compatibility issues with Windows Server 2008. </p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-8116970566137807086?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-69329030870286224632008-01-17T13:20:00.001-08:002008-01-17T13:20:23.785-08:00Binary File Formats for Word, Excel, PowerPoint<p><a href="http://blogs.msdn.com/brian_jones/archive/2008/01/16/mapping-documents-in-the-binary-format-doc-xls-ppt-to-the-open-xml-format.aspx">Brian Jones</a> posted yesterday about the availability of the docs for the binary file formats of Office Applications.&#160; </p> <blockquote> <p><em>... Microsoft indicated that the documentation of the Binary Formats has been available royalty-free [since 2006] under RAND-Z to anyone who requests it by sending an email to </em><a href="mailto:officeff@microsoft.com"><em>officeff@microsoft.com</em></a><em> </em></p> <p><em>Nevertheless, in response to requests for even easier access to the Binary Formats, Microsoft has agreed to remove any intermediate steps necessary to get the documentation, and will post it and make it directly available for a direct download on the Microsoft web site.&#160; Microsoft will also make the Binary Formats subject to its Open Specification Promise (see </em><a href="http://www.microsoft.com/interop/osp"><em>www.microsoft.com/interop/osp</em></a><em>) by February 15, 2008.</em></p> </blockquote> <p>Now, having the Binary Formats under the Open Specification Promise, is extremely exciting. The OSP itself:</p> <blockquote> <p><em>Microsoft irrevocably promises not to assert any Microsoft Necessary Claims against you for making, using, selling, offering for sale, importing or distributing any implementation to the extent it conforms to a Covered Specification (&#8220;Covered Implementation&#8221;), subject to the following. This is a personal promise directly from Microsoft to you, and you acknowledge as a condition of benefiting from it that no Microsoft rights are received from suppliers, distributors, or otherwise in connection with this promise. If you file, maintain or voluntarily participate in a patent infringement lawsuit against a Microsoft implementation of such Covered Specification, then this personal promise does not apply with respect to any Covered Implementation of the same Covered Specification made or used by you. To clarify, &#8220;Microsoft Necessary Claims&#8221; are those claims of Microsoft-owned or Microsoft-controlled patents that are necessary to implement only the required portions of the Covered Specification that are described in detail and not merely referenced in such Specification. &#8220;Covered Specifications&#8221; are listed below. </em></p> <p><em>This promise is not an assurance either (i) that any of Microsoft&#8217;s issued patent claims covers a Covered Implementation or are enforceable or (ii) that a Covered Implementation would not infringe patents or other intellectual property rights of any third party. No other rights except those expressly stated in this promise shall be deemed granted, waived or received by implication, exhaustion, estoppel, or otherwise. </em></p> </blockquote> <p>My first introduction to the OSP was back when I was in the Federated Identity team. When .NET 3.0 came out (which included CardSpace), I was thrilled when I found out that the protocols ended up in the OSP, which meant that there would be far less blockers in getting CardSpace adopted.</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e5a93899-0074-454e-ad12-fd6254007e08" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/office" rel="tag">office</a>,<a href="http://technorati.com/tags/file%20formats" rel="tag">file formats</a>,<a href="http://technorati.com/tags/CardSpace" rel="tag">CardSpace</a>,<a href="http://technorati.com/tags/Open%20Specification%20Promise" rel="tag">Open Specification Promise</a>,<a href="http://technorati.com/tags/OSP" rel="tag">OSP</a></div> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6932903087028622463?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-5155891465008344852008-01-16T14:13:00.001-08:002008-01-16T14:13:25.932-08:00VBScript: Betcha never thought of this one<p>I mentioned in a previous post that I had to solve a little issue with the wonderful <a href="http://www.citizeninsomniac.com/WMV/#WMCmd" mce_href="http://www.citizeninsomniac.com/WMV/#WMCmd">WMCMD.VBS</a> script that Alex Zambelli maintains.&#160; Because of some occasional nastyness, when the script is done--successful or not-- it tries to kill it's own process, in case any of the WM Encoder objects gets hung up.</p> <p>The original script uses WMI to look on the machine for the cscript process for the currently running script:</p> <table class="" style="font-size: 10pt; color: #000000; font-family: &#39;Consolas&#39;" cellspacing="0" cellpadding="2" width="100%" bgcolor="#ffffff" border="1"><tbody> <tr> <td class="" valign="top" width="100%"><font color="#000000" size="2"><span style="color: #00007f">function</span> TerminateEncoderProcess<span style="color: #000000">()</span> <br /> <br />&#160;&#160; <span style="color: #00007f">dim</span> objWMIService <br />&#160;&#160; <span style="color: #00007f">dim</span> objProcess <br /> <br />&#160;&#160; <span style="color: #00007f">On</span> <span style="color: #00007f">Error</span> <span style="color: #00007f">Resume</span> <span style="color: #00007f">Next</span> <br /> <br />&#160;&#160; <span style="font-size: 9pt; color: #007f00; font-family: &#39;Consolas&#39;">' Get Windows Manager object</span> <br />&#160;&#160; <span style="color: #00007f">Set</span> objWMIService <span style="color: #000000">=</span> GetObject<span style="color: #000000">(</span><span style="color: #7f007f">&quot;winmgmts:&quot;</span> _ <br />&#160;&#160;&#160;&#160;&#160; <span style="color: #000000">&amp;</span> <span style="color: #7f007f">&quot;{impersonationLevel=impersonate}!\\.\root\cimv2&quot;</span><span style="color: #000000">)</span> <br /> <br />&#160;&#160; <span style="font-size: 9pt; color: #007f00; font-family: &#39;Consolas&#39;">' Enumerate all CScript.exe processes</span> <br />&#160;&#160; <span style="color: #00007f">dim</span> colProcessList <br />&#160;&#160; <span style="color: #00007f">Set</span> colProcessList <span style="color: #000000">=</span> objWMIService.ExecQuery <font color="#000000" size="2">_&#160; <br />&#160;&#160;&#160; </font><span style="color: #000000">(</span><span style="color: #7f007f">&quot;Select * from Win32_Process Where Name =&quot; _&#160; <br />&#160;&#160;&#160; <font color="#000000" size="2"><span style="color: #000000">&amp;</span></font> &quot;'cscript.exe'&quot;</span><span style="color: #000000">)</span> <br />&#160;&#160;&#160; <br />&#160;&#160; <span style="color: #00007f">dim</span> strArguments <br />&#160;&#160; strArguments <span style="color: #000000">=</span> <span style="color: #7f007f">&quot;&quot;</span> <br />&#160;&#160;&#160; <br />&#160;&#160; <span style="font-size: 9pt; color: #007f00; font-family: &#39;Consolas&#39;">' Enumerate all command-line arguments</span> <br />&#160;&#160; <span style="color: #00007f">for</span> i <span style="color: #000000">=</span> <span style="color: #007f7f">0</span> <span style="color: #00007f">to</span> wscript.arguments.Length<span style="color: #000000">-</span><span style="color: #007f7f">1</span> <br />&#160;&#160;&#160;&#160;&#160; strArguments <span style="color: #000000">=</span> strArguments <span style="color: #000000">&amp;</span> <span style="color: #7f007f">&quot; &quot;</span> <span style="color: #000000">&amp; _ <br /></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; wscript.arguments<span style="color: #000000">(</span>i<span style="color: #000000">)</span> <br />&#160;&#160; <span style="color: #00007f">next</span> <br />&#160;&#160; strArguments <span style="color: #000000">=</span> Replace<span style="color: #000000">(</span>strArguments<span style="color: #000000">,</span> Chr<span style="color: #000000">(</span><span style="color: #007f7f">34</span><span style="color: #000000">),</span> <span style="color: #7f007f">&quot;&quot;</span><span style="color: #000000">)</span> <br /> <br />&#160;&#160; <span style="font-size: 9pt; color: #007f00; font-family: &#39;Consolas&#39;">' Kill the processes that match this one in name and arguments</span> <br />&#160;&#160; <span style="color: #00007f">For</span> <span style="color: #00007f">Each</span> objProcess <span style="color: #00007f">in</span> colProcessList <br />&#160;&#160;&#160;&#160;&#160; <span style="color: #00007f">if</span> InStr<span style="color: #000000">(</span><span style="color: #007f7f">1</span><span style="color: #000000">,</span> Replace<span style="color: #000000">(</span>objProcess.CommandLine<span style="color: #000000">,</span> _ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Chr<span style="color: #000000">(</span><span style="color: #007f7f">34</span><span style="color: #000000">),</span> <span style="color: #7f007f">&quot;&quot;</span><span style="color: #000000">),</span> <font color="#000000" size="2">_ <br />&#160;&#160;&#160;&#160;&#160; </font>Trim<span style="color: #000000">(</span>WScript.ScriptName <span style="color: #000000">&amp;</span> strArguments<span style="color: #000000">),</span> <span style="color: #007f7f">1</span> <span style="color: #000000">)</span> <span style="color: #000000">&gt;</span> <span style="color: #007f7f">0</span> _ <br /><span style="color: #00007f">&#160;&#160;&#160;&#160;&#160; then</span> <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; objProcess.Terminate<span style="color: #000000">()</span> <br />&#160;&#160;&#160;&#160;&#160; <span style="color: #00007f">end</span> <span style="color: #00007f">if</span> <br />&#160;&#160; <span style="color: #00007f">Next</span> <br />&#160;&#160;&#160; <br />&#160;&#160; <span style="font-size: 9pt; color: #007f00; font-family: &#39;Consolas&#39;">' What? Still not terminated? OK, kill first occurrence.</span> <br />&#160;&#160; <span style="color: #00007f">For</span> <span style="color: #00007f">Each</span> objProcess <span style="color: #00007f">in</span> colProcessList <br />&#160;&#160;&#160;&#160;&#160; <span style="color: #00007f">if</span> InStr<span style="color: #000000">(</span><span style="color: #007f7f">1</span><span style="color: #000000">,</span> objProcess.CommandLine<span style="color: #000000">,</span> _ <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; WScript.ScriptName<span style="color: #000000">)</span> <span style="color: #000000">&gt;</span> <span style="color: #007f7f">0</span> <span style="color: #00007f">then</span> <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; objProcess.Terminate<span style="color: #000000">()</span> <br />&#160;&#160;&#160;&#160;&#160; <span style="color: #00007f">end</span> <span style="color: #00007f">if</span> <br />&#160;&#160; <span style="color: #00007f">Next</span> <br /> <br /><span style="color: #00007f">end</span> <span style="color: #00007f">function</span> <br /></span></font></td> </tr> </tbody></table> <p>Unfortunatly, this script, when all else fails, tries to kill itself by finding the first running cscript, and killing it. Hmmm. not too good, I had multiple encoder script processes going on, and it kept killing the wrong one.</p> <p>A pity it seems so hard to find the current process in VBScript... until I thought about it a bit more:</p> <p mce_keep="true">&#160;</p> <table class="" style="font-size: 10pt; color: #000000; font-family: &#39;Consolas&#39;" cellspacing="0" cellpadding="2" width="100%" bgcolor="#ffffff" border="1"><tbody> <tr> <td class="" valign="top" width="100%"><span style="font-size: 9pt; color: #000000; font-family: &#39;Consolas&#39;"><span style="color: #00007f">function</span> TerminateEncoderProcess<span style="color: #000000">()</span> <br /> <br />&#160;&#160; GetObject<span style="color: #000000">(</span><span style="color: #7f007f">&quot;winmgmts:root\cimv2:Win32_Process.Handle='&quot;</span> _&#160; <br />&#160;&#160;&#160; <span style="color: #000000">&amp;</span> GetObject<span style="color: #000000">(</span><span style="color: #7f007f">&quot;winmgmts:root\cimv2:Win32_Process.Handle='&quot;</span> _ <br />&#160;&#160;&#160; &amp; CreateObject<span style="color: #000000">(</span> <span style="color: #7f007f">&quot;WScript.Shell&quot;</span><span style="color: #000000">).</span>Exec<span style="color: #000000">(</span><span style="color: #7f007f">&quot;cmd.exe&quot;</span><span style="color: #000000">).</span>ProcessId _&#160; <br /><span style="color: #000000">&#160;&#160;&#160; &amp;</span> <span style="color: #7f007f">&quot;'&quot;</span><span style="color: #000000">).</span>ParentProcessId <span style="color: #000000">&amp;</span> <span style="color: #7f007f">&quot;'&quot;</span><span style="color: #000000">).</span>Terminate <br /> <br /><span style="color: #00007f">end</span> <span style="color: #00007f">function</span> <br /></span></td> </tr> </tbody></table> <p><strong>Huh?</strong></p> <p>This version of the script spawns off a new <font face="Consolas">cmd.exe</font> process (which exits nearly instantly), but uses the process ID from that, looks up the process, and get it's parent process, and then terminate that.&#160; Nice thing is, it don't get confused :D</p> <div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9be40154-d1b6-43c3-84b1-75be646ab9a9" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/VBScript" rel="tag">VBScript</a>,<a href="http://technorati.com/tags/scripting" rel="tag">scripting</a>,<a href="http://technorati.com/tags/processes" rel="tag">processes</a></div> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-515589146500834485?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-35119773197022113432008-01-16T12:55:00.001-08:002008-01-16T14:10:49.931-08:00Looking for a few good outriders: PHP Developers<p>Hey y'all.</p><p>I've got some work goin' on that I sure could use a few hands that were real PHP savvy.</p><p>I'm looking for some short-term and some mid-term consultants to do some experimental work with PHP applications on Windows. I have need for some local (Redmond) and some can work from remote.</p><p>If you have some real fine PHP skills, including experience with databases, and have a track record of producing results, I'd be happy to hear from you.</p><p>Tell me... are you up to it?</p><p>Send me a mail: <strong>garretts at microsoft.com.</strong></p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-3511977319702211343?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-36340144064144965852008-01-15T15:35:00.001-08:002008-01-15T15:35:41.054-08:00Random Hacking: Windows Media Encoder and DirectShow<p>I'm a big fan of Vista Media Center, and a really big part of that is the fact that I can use an XBOX 360 as a really-nice media center extender. When learned that the fall update contained support for MPEG4 Advanced Simple Profile (that's DivX to you and me!) in AVI's I was quite ecstatic. I went out and bought a second Xbox360, and put it in the kid's playroom... then I found out that meant thru the Dashboard... </p> <p>*sigh*</p> <p>I never use the Dashboard to play videos... I always do so from Media Center. Over the years, I have archived a bunch of shows in DivX format, so that my kids can watch their shows over and over again. I didn't really want to go through the exercise of teaching my 5 yr old how to use the Dashboard, since she's already a Media Center expert, and I certainly didn't want to bother with setting up WMP to play the videos.</p> <p>So, I thought, for what has got to be the 100th time, should I convert my videos to WMV?&#160; I've tried this in the past, and always ran up against one or more issues. Primarily, most of the tools for WMV encoding are designed to be interactive. Or they suck. Or Both.</p> <p>So, last weekend I resurrected some batch file code I was using to play around with the Windows Media Encoder, along with the latest <a href="http://www.citizeninsomniac.com/WMV/#WMCmd">WMCMD.VBS</a> and a handful of other tools, and cranked out a nice little script that strings together them all so that I could trans-code a bunch of them in a row.</p> <p>After working through an interesting bug in the VBScript (the results of which are an upcoming post :D), and managing to finally get past my problems with 5.1 audio, and the result was pretty darned good. As a matter of fact, it was *really* good.</p> <p>...Which got me even more interested in making a tool that I could use without any interactivity at all, and use it to make all my videos in WMV.</p> <p>*hmmmm*</p> <p>So, even though my little batch solution worked pretty good, I started to work on a new tool in g# (a nifty little .NET-based script language I'm working on)... and found out that accessing some of the COM interfaces for DirectShow isn't exactly a walk in the park.. Ah, so be it, I went to C#, and cranked out a tool that generated the .NET bindings for the COM interfaces the way I wanted them.</p> <p>Having done all that, I'm reminds me of somethin' my pappy told me... &quot;<em><strong>There are three kinds of men: The ones that learn by reading. The few who learn by observation. The rest of them have to pee on the electric fence.</strong></em>&quot;&#160; Well, I think I ended up in the last category, but at least I learned somethin'... there's a reason why there isn't a lot of examples of DirectShow in .NET... but more on *that* on an upcoming post.</p> <p>Anyway, so I'm now deep into crankin' out a little automated trans-coder, in .NET, and when it's done, I'll see if I can post it on Codeplex, along with the source.</p> <p>Y'all might be wonderin', what in the name of creation I'm doin' ramblin' around today. Well, I dunno... just thought someone would like to know.</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-3634014406414496585?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-17572947892471358492008-01-15T14:59:00.001-08:002008-01-15T14:59:04.755-08:00PHP on IIS 7.0: Enhance Your Apps with the Integrated ASP.NET Pipeline -- MSDN Magazine, January 2008<p>As you might be aware, Microsoft release the FastCGI connector for PHP (when), and it's creating quite a stir.&#160; Mike Volodarsky wrote an article for MSDN magazine that talks about what benefits IIS 7.0 provides to PHP apps:</p> <blockquote> <p><em>... IIS had always supported PHP, but in a way that precluded many real-life PHP applications from being hosted in production environments. This was due to limitations in the two ways IIS offered for running PHP applications: using the Common Gateway Interface (CGI) protocol or using the PHP ISAPI extension.</em></p> <p><em>Because CGI requires a separate process for each request, apps hosted using CGI would perform poorly on Windows. Conversely, PHP apps using the IIS high-performance multithreaded ISAPI interface would often suffer from instability due to the lack of thread safety in some popular PHP extensions.</em></p> <p><em>In an attempt to solve these problems, the IIS team developed the FastCGI component. The open FastCGI protocol allows PHP and many other application frameworks that require a single-threaded environment (including Ruby on Rails, Perl, and Python) to run more reliably on IIS. Unlike the standard CGI implementation, FastCGI enables process reuse by maintaining a pool of worker processes, each processing no more than one request at a time, thus resulting in much-improved performance. FastCGI also benefited from a community-centric development and testing model.</em></p> </blockquote> <p>The article presents an interesting intersection of PHP and IIS 7.0, and how IIS can bring some serious benefits to those applications. Catch the whole article on the MSDN Magazine site: <a href="http://msdn.microsoft.com/msdnmag/issues/08/01/PHPandIIS7/default.aspx">IIS 7.0: Enhance Your Apps with the Integrated ASP.NET Pipeline -- MSDN Magazine, January 2008</a> .</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-1757294789247135849?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-6474767891584234922008-01-14T09:07:00.001-08:002008-01-14T09:07:48.644-08:00Convergence of my two worlds: FireFox and CardSpace<p>I've been meaning to write this out for a few weeks...</p> <p><a href="http://www.getfirefox.com">FireFox</a> has had an <a href="http://www.codeplex.com/IdentitySelector">extension</a> which allows <a href="http://CardSpace.netfx3.com">CardSpace</a> to be used as an Identity Selector on Windows, written by Kevin Miller (with some assistance from yours truly :D) for some time now.</p> <p>Kevin has joined Microsoft since then, and become a little too busy with his new Role to keep rolling on <a href="http://www.codeplex.com/IdentitySelector">upkeep</a>, and <a href="http://ignisvulpis.blogspot.com/">Axel Nennker</a> and <a href="http://www.codeplex.com/UserAccount/UserProfile.aspx?UserName=ahodgkinson">Andy Hodgkinson</a> have stepped up to continue development and take it into the future.</p> <p>They, in spite of me not mentioning it, have actually put out several releases in the last year, and are in constant contact with the CardSpace team and getting access all the information they need.</p> <p>Kevin and I are quite excited that Axel and Andy stepped up to do this, we'd like to have continued ourselves, but sometimes it's hard keeping up with the projects that aren't the day job.</p> <p>Thanks Axel and Andy!</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-647476789158423492?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-74508000863797286872008-01-11T09:37:00.001-08:002008-01-11T09:37:34.514-08:00Understanding Windows CardSpace : The Book!<p>Well, after what seems like... well, forever, <a href="http://blogs.msdn.com/vbertocci/">Vittorio</a>, <a href="http://blogs.msdn.com/card/">Caleb</a> and I have finally seen the day when our <a href="http://www.amazon.com/Understanding-Windows-CardSpace-Introduction-Independent/dp/0321496841/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1200072613&amp;sr=8-1">book is available</a>.</p> <p>About the book:</p> <blockquote> <p><em>&quot;Windows CardSpace empowers organizations to prevent identity theft and systematically address a broad spectrum of security and privacy challenges. </em>Understanding Windows CardSpace <em>is the first insider&#8217;s guide to Windows CardSpace and the broader topic of identity management for technical and business professionals. Drawing on the authors&#8217; unparalleled experience earned by working with the CardSpace product team and by implementing state-of-the-art CardSpace-based systems at leading enterprises, it offers unprecedented insight into the realities of identity management: from planning and design through deployment. &quot;</em></p> </blockquote> <p>Truly quite exciting. </p> <p>Not only is it a really great look at CardSpace, and identity technology in general, but the first section (which Vittorio wrote) is something quite remarkable--it really educates practically anyone on the fundamentals of cryptography and identity in a way I'd never seen before.</p> <p>I recommend this book wholeheartedly :D</p> <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-7450800086379728687?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-13842164234311320412008-01-09T12:17:00.001-08:002008-01-09T12:17:28.359-08:00Apache Developers Invited to Redmond<p>A little over a year ago, (when I was still on the <a href="http://cardspace.netfx3.com/">CardSpace</a> team) I woke up, and wandered over to my computer at home, and bleary-eyed started up a browser and saw the following:</p> <p><img src="http://fearthecowboy.com/mozilla-visit.png">&nbsp;<br>Whooosh! This was better than a triple-shot-breve-latte! I snapped fully awake, and started cranking out a few emails... this would be a great opportunity to get FireFox to support CardSpace!&nbsp; Who was this <a href="http://port25.technet.com/archive/tags/Sam+Ramji/default.aspx">Sam Ramji</a> guy? We have an <a href="http://port25.technet.com/">Open Source Software Lab</a>? Really? Mozilla coming to campus? Can the CardSpace team get some time with them? Yeee-haw!</p> <p>That one little post on Slashdot started a chain reaction of events that I would never have imagined.&nbsp; Now, of course, I'm part of the OSSL, and I get to see stuff like this taking shape first hand.</p> <p>Earlier today, I posted an invitation to several of the <a href="http://apache.org">Apache</a> Developer mailing lists:</p> <blockquote> <p><font face="Courier New" size="2">Howdy,</font> <p><font face="Courier New" size="2">My name is Garrett Serack, and I am the Community Program Manager in the Open Source Software Labs here at Microsoft.</font> <p><font face="Courier New" size="2">I would like to extend an official invitation to the Apache Software Foundation to participate in the Microsoft Windows Server 2008 Compatibility Labs here in Redmond. The Compatibility lab is scheduled for</font> <p><font face="Courier New" size="2">&nbsp;&nbsp; <strong>Monday February 25 2008 through Wednesday February 28 2008.</strong></font> <p><font face="Courier New" size="2"><u>WHAT IS IT?</u><br></font><font face="Courier New" size="2">The Windows Server 2008 Application Compatibility Lab is an event where we invite companies to bring their applications into our lab, and have the opportunity to perform compatibility testing with Windows Server 2008. In addition to gaining insight into Windows Server 2008, this also includes unprecedented access to various product groups (developers, architects and PMs) inside of Microsoft, who can lend their assistance, give technical information and answer design questions you may have.</font> <p><font face="Courier New" size="2">Normally, we request companies send 3-4 attendees, and we usually have 3-4 companies in the lab in a given week. Given the ASF's size and breadth, we've reserved the entire lab for the week for the Apache Foundation, and we'd like to see somewhere in the range of 15-18 people from a wide variety of projects attend. </font> <p><font face="Courier New" size="2"><strong><u>WHO SHOULD COME?</u></strong><br></font><font face="Courier New" size="2">We would be very interested in having several people from the Tomcat, HTTPD and Axis groups attend. Other projects including APR, Apache C++ Standard Library project, Harmony, and Maven.NET also come to mind. Any project that is impacted by the release of Windows 2008, or is looking to solve Windows-specific project issues, may profit from this opportunity.</font> <p><font face="Courier New" size="2">We are interested in having each project who deals with Microsoft Windows compatibility or portability to bring small contingent of 1 or 2 developers to the table, so please chat within your own PMC or even your dev@ list first to determine who is most interested in attending this camp on behalf of your project. Space is constrained, and we'd like to ensure that specific attention can be given to projects that need it.</font> <p><font face="Courier New" size="2"><strong><u>INSIGHT<br></u></strong></font><font face="Courier New" size="2">You might be interested in the "political" rational of why we value this chance to meet some of the ASF developers and help them work through Windows compatibility issues. You can see Sam Ramji's blog entry about why we asked Mozilla out:</font> <p><a href="http://port25.technet.com/archive/2006/09/20/Why-I-invited-Mozilla.aspx"><font face="Courier New" size="2"><a href="http://port25.technet.com/archive/2006/09/20/Why-I-invited-Mozilla.aspx">http://port25.technet.com/archive/2006/09/20/Why-I-invited-Mozilla.aspx</font></a></a></p></blockquote> <p>As for Apache, we're really keen to see their technology run great on Windows. <p>To some folks in the ASF, this isn't a surprise... <a href="http://port25.technet.com/archive/tags/Hank+Janssen/default.aspx">Hank</a> and I have already had good conversations with Apache folks in order to work out the dates and details. <div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-1384216423431132041?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-47460953029152310732007-10-22T12:54:00.001-07:002007-10-22T12:54:48.391-07:00Back in the Saddle<p>Hey There!</p> <p>I've been getting many people inquiring where I've been.&nbsp; The short story is, I hurt my&nbsp;back (inflamed disc), and was on short-term disability for a couple of months.</p> <p>Hmm. That's the long story too. :D</p> <p>I think the most important thing to bring out of that experience is, <em>when you have a small back problem, <strong>take care of it immediately</strong>, or it will be a big back problem</em>. It sounds logical and all, but up till this point, I've been nigh-invulnerable.&nbsp; I certainly never gave a couple moments of thought to any minor aches and pains, and never&nbsp;guessed the possible&nbsp;ordeal that&nbsp;I could&nbsp;be forced to endure.&nbsp;</p> <p>I'd like to personally thank my management and colleagues for allowing me the time to heal. </p> <p>Especially <a href="http://port25.technet.com/archive/tags/Sam+Ramji/default.aspx">Sam Ramji</a>--the most understanding and caring boss I've ever even heard of, never mind experienced.</p> <p>So... I am back!</p><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-4746095302915231073?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-59247605560607008942007-07-23T11:40:00.001-07:002007-07-23T11:40:10.192-07:00OSCON: First Post!<p>Those who have been around <a href="http://slashdot.org">slashdot.org</a> a while will certainly know of <a title="Robin Miller's Personal Website" href="http://www.roblimo.com/">Robin Miller</a>.&nbsp; I bumped into Robin this morning, away from OSCON, over at yonder Doubletree hotel, where I was meeting up with Eric Garulay, from <a href="http://www.aw-bc.com">Addison Wesley</a>. We're cooperatin' on a <a href="http://www.informit.com/promotions/promotion.asp?promo=4202&amp;rl=1">few upcoming podcasts</a>&nbsp;on Open Source (and one that I did back in June, on CardSpace).</p> <p>We're&nbsp;fixin' to meet up later this week, and point our video cameras at each other... Hopefully, we'll avoid creating some sort of rupture in the space-time continuum.&nbsp;&nbsp;It'll will prove to&nbsp;be&nbsp;an interesting conversation--I'm sure we're both gonna tell the other about how the cow ate the cabbage...</p> <p>Anyway, that'll be a whole 'nother post, I'm sure.&nbsp; I'm gonna go catch an afternoon session, and we'll see what&nbsp;shakes&nbsp;loose.&nbsp; I was in&nbsp;on one about PHP extensions... Cool Stuff, but it shore is alot of work. </p> <p>I better run-- looks like the grub will be ready soon.</p> <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:664c342b-ee32-4a32-a866-6d82f720d640" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/oscon" rel="tag">oscon</a>, <a href="http://technorati.com/tags/fearthecowboy" rel="tag">fearthecowboy</a>, <a href="http://technorati.com/tags/port25" rel="tag">port25</a>, <a href="http://technorati.com/tags/slashdot" rel="tag">slashdot</a>, <a href="http://technorati.com/tags/robin%20miller" rel="tag">robin miller</a></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-5924760556060700894?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.comtag:blogger.com,1999:blog-3796282571874720227.post-64238120443734547612007-07-19T06:05:00.001-07:002007-07-19T06:05:54.412-07:00OSCON: Open Source Convention in Portland<p>Next Week, OSCON, the open source convention is happening in Portland--I reckon I mentioned that before.&nbsp; I will be one of many many folks from Microsoft attending.&nbsp; It's real great that we're not only sending people to an event like this, but so many folks are actually <strong>expecting </strong>that we're going.&nbsp; I keep bumping into people who are goin', and the feedback we're getting is simply amazing.</p> <p>I think I'm going to have to be constantly drinking coffee the entire week--there's just so much to see and do at OSCON. Between the sessions, and the BOFs, and I'm sure, the parties... I'm gonna&nbsp;be more fidgety than a fryin' pan full of rattlesnakes.&nbsp;</p> <p>I'll be draggin' my&nbsp;video&nbsp;camera around, so if you run into me--I'm the 6'4"&nbsp;in the cowboy hat--flag me down and demand that I make you famous!</p> <p>See y'all there!&nbsp;</p> <div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:fc314971-1228-4825-a9a0-21fe1b0fec64" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/Open%20Source" rel="tag">Open Source</a>, <a href="http://technorati.com/tags/oscon" rel="tag">oscon</a>, <a href="http://technorati.com/tags/fearthecowboy" rel="tag">fearthecowboy</a>, <a href="http://technorati.com/tags/microsoft" rel="tag">microsoft</a></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796282571874720227-6423812044373454761?l=www.fearthecowboy.com%2Fdefault.htm'/></div>Garrett Serackhttp://www.blogger.com/profile/09450334848560474570noreply@blogger.com