Change Windows XP Home to XP Pro

It requires modifying the installation CD (just two bytes), but for the brave: HOWTO Change Windows XP Home to Windows XP Pro – Gizmodo

Lessee, judging by Microsoft’s Windows XP Comparison Guide, that should get you:

  • System Restore
  • NTBackup
  • Fast User Switching
  • Offline Files
  • Remote Desktop
  • hardware support (Dynamic Disks, Multiple Processors)
  • security (Access Control, EFS)
  • IIS, and
  • domain support (Group Policy, Assigned Software Installation, Roaming Profiles, RIS).

Of these features, everything but IIS and domain support can be useful to many home users.  In particular, there’s no way the first three — System Restore, NTBackup, and Fast User Switching — should have ever been left out of XP Home — ALL users could benefit from them. Whoops, had some bad info before I checked the XP Comparison Guide (and I was caught editing, so I can’t just erase it now!  Good catch Ed!) — It looks like FUS and System Restore are in XP Home. My opinion stands for NTBackup and Remote Desktop, tho.

For those less venturesome (or unwilling to reinstall), it is possible to install NTBackup on XP Home.  See Ed Bott‘s “The amazing hidden backup program“.


I’ve implemented Dean Edwards‘ Star-Light for code-formatting here.  It’s an awesome (and useful!) demonstration of the power of DHTML Behaviors.

Oh, and it’s free (just a Creative Commons license).

And it works in both IE and Firefox*.

All it takes is a linked stylesheet and a CSS class on the target code section (specifying the language of the code), and Star-Light dynamically formats and colors it in the browser. 
For example, this code:

<pre class="vbscript">
' this is a "comment"
'' so is 'this'
DIM string
string = "' string '"
call msgbox("Hello ""Dean""!")
FUNCTION getText(a, b, c)
	getText = a + b & cstr(c)

displays thusly:

' this is a "comment"
'' so is 'this'
DIM string
string = "' string '"
call msgbox("Hello ""Dean""!")
FUNCTION getText(a, b, c)
	getText = a + b & cstr(c)

The supported languages are CSS, HTML, Javascript, PHP, and XML.  (For fun, it can also enhance plaintext conversation text: emoticons into images, *bold* into bold, /italic/ to italic, _underline_ to underline, plus enhancing “>” quoted sections.)

Coolest of all, though, it’s highly extensible via language modules.  I glanced through the code to see if I could make it support VBScript.  The engine is pretty complicated, but each module is a simple HTC file.

From there, it was easy to create a new module for VBScript and plugin the appropriate keywords straight from Microsoft’s Windows Script 5.6 Documentation.  I sent my VBScript module (working above) to Dean — he made a couple improvements, and said he’ll include it with the rest soon.  (I may also create modules for VB6 or VB.Net, but there’s a lot stuff to those languages…)

I don’t mean to gush, but: Very Cool.

Unfortunately, Dean hasn’t yet documented how to do write your own module (I figured it out on my own), but it’s pretty easy for someone who knows HTCs and has a language reference to copy/paste.

* Another gee-whiz bit: despite the coolness of DHTML Behaviors, they are normally only supported by Internet Explorer.  But Dean’s done a wonder, and written a Mozilla XBL wrapper which makes Mozilla/Firefox support DHTML Behaviors too! (which is of course wrapped into Star-Light).  This situation should be the poster child for the de-facto standards camp -vs- the slow academic W3C types, but more on that another day.  Meanwhile, I’ll sit back and regret my rationale “DHTML Behaviors are IE-only anyway, so I’ll go ahead and use all this other IE-specific code.” Like, uh, VBScript….. (dough!)

Finally saw the Enterprise finale..


Bad acting.  I guess Frakes & Sirtis are several years outta practice (and shape).  And who wrote that dialog anyway?

Bad effects.  Can’t think of a good excuse here.  I mean, really: stars between the camera and the ship?!? (space-fireflies???)

Bad production.  Tons of obvious overdubs.  They must’ve already pink-slipped the sound engineer.  (Not to mention the amateur-looking phasers…)

Why end an otherwise decent series (and legacy) on a bad note??  Bah!


“slapped together”

An observation: Door Store -vs- Vote-For-Me yard signs

Traditional email spam like the unsolicited Door Store ads they drop on my step (in plastic covers to maximize slipping).

Comment spam is a “We’re voting for Mr. Shmiggle” sign put in my yard without my consent.

Now that I’ve worked it out, I understand why comment spam irks me so much more, because it (ab)uses my reputation for its own (search engine) advancement.  But I don’t want to put up a fence by closing comments tho, because I do want my friendly neighbors to visit and talk to me.

So anyway, if anyone using .Text 0.95 is interested, here’s my code to negate the search engine benefit to the comment spammers:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
	Dim reqURL As String = Request.CurrentExecutionFilePath
	IF reqURL.toLower().indexOf("/archive/")<0 OR Request.Form.ToString()<>"" THEN EXIT SUB
	'-- get content
	Dim oWriter As New StringWriter()
	Server.Execute(reqURL, oWriter)
	Dim strResponse As String = oWriter.ToString()
	oWriter = Nothing

	'-- find comment section
	Dim iStart As Integer, iStop As Integer
	iStart = strResponse.IndexOf("<div id=""comments"">")
	IF iStart>0 THEN iStop = strResponse.IndexOf("</div>", iStart)

	If iStart <> -1 And iStop <> -1 Then
		'-- nofollow comment section's links
		DIM strTarget as string = strResponse.Substring(iStart, iStop - iStart)
		DIM strTargetFixed as string = _
			strTarget.replace("<a target=""_new"" href=""http", _
			"<a target=""_new"" rel=""nofollow"" href=""http")
		strResponse = strResponse.replace(strTarget, strTargetFixed)
	End If

	'-- send content
	Response.End()		'prevent conventional response
End Sub

Just replace the standard Application_BeginRequest procedure with this one in the global.asax.vb file (or absorb mine into it.)  It intercepts outgoing comments and dynamically inserts rel=”nofollow” into any contained links.

It won’t prevent comment spam, but it will negate the search engine benefit to the comment spammer, turning the “Vote-For-Me” signs into mere litter in your yard.

One catch:  this breaks .Text’s inline “Remove Comment” links.  You can still delete them in the the admin area’s Feedback section, tho.  Since the comment spam seems to come in waves, that’s an easier way to delete them all at once anyway.

(I guess my next goal is actually preventing comment spam via a captcha or challenge-reponse mechanism, but til then I feel more luxury of time to explore possibilities.)

Comments closed?

This sucks, but the gambling comment spam has hit a critical limit, and I’ve wasted a stupid amount of time trying to solve it (without luck). 

So I’ve closed commentsAnd now reopened, with my own clever nofollow solution.

To enumerate my frustrations:

* The code for both .Text and Community Server’s code is way too complicated.  Why is an open-source app — which is supposed to encourage hacking from other devs — full of such highly-abstracted code??  A main reason I settled on CS/.Text was because I know fairly well (and ASP extremely well).  Unfortunately, the extreme complexity/abstraction and lack of decent docs pretty much cancels that out.  I’ve seen PHP apps which were easier to figure out (and I barely know PHP).

….If I’m going to waste this much time on fixing one little thing (comment spam), it’s so tempting to just write my own.  I specifically tried to avoid that, though, because I have so many other technical time-drains.


A better RDP client: Royal TS

Microsoft currently has two official RDP clients:  Remote Desktop Client (built-in to Windows XP Pro, and downloadable for nearly anything else), and the Remote Desktops MMC snapin (from the Windows 2003 Administration Tools Pack).

They have all the right features between them, but neither has all of them in one place.  The Remote Desktop Client has the most options, but can’t connect to console session (aka “session 0”) and is meant for one remote connection at a time.  The Remote Desktops Snap-in can do these two things, but is missing tons of other options, plus one especially dumb limitation:  It can’t connect to a port other than standard 3389.  (It gives an error “The server name cannot contain the following characters: spaces, tabs , ;  :  ” < > * + = \ | ? ,”  — Another over-zealous coder under-thinking his validation logic!)


Microsoft says the Remote Desktop Client can connect to the console session, via a command-line switch.  Not sure why it’s not a checkbox on the options dialog , but it doesn’t work for me anyway.  It removes the %sessionname% environment variable, but Terminal Services Manager still shows the session is a “RDP-TCP#” name.  Oh well. (turns out the console session has to already be logged in). 

Something else I found: you can’t connect to the console remotely with a non-admin account — it gives you an error that “To log on to this remote console session, you must have administrative permissions on this computer.”

The standalone Client is best when you’re working in-depth on one remote machine.  The Snap-in is better for when you’re working lightly on several machines, and don’t need the extra options.  In daily use, I usually find myself switching between the Snap-in and the Client.  It’s a small but constant pain.

This is all to say that I just found Royal TS from code4ward, which is a free, open-source (C#) app, which attempts to combine the best of both programs.  (It’s like the Snap-in interface, but on steroids.) 

I’ve been using it for a few days, and it’s very good.  I only wish it could do a better full-screen, or use less screen real-estate with the embedded view.  I may try my hand at C# just to hack it up.

Hm, the author’s site is down now.  Hopefully it’s temporary.  Meanwhile, here is is on Snapfiles: