I had a mates PC over for a visit the other night (and him too with a very nice home made thai beef curry and sticky rice - yum). He reported that the PC was taking ages to get to the login screen and when he booted in safe mode it got stuck for ages loading c:\windows\system32\crcdisk.sys. Initially I was a tad concerned because any driver not starting properly, or taking ages to load, and with the words 'crc' and 'disk' in the name sounds like a world of pain is about to unfold. Googling around showed loads of folk with the same problem but no real definitive answers/solutions. There was a rumour/theory that some nvidia nforce chipset driver update was the cause and that reverting to a previous system checkpoint would get things going again. Being that the box was a Dell XPS with said chipset I gave this a go and knocked the machine back to a restore point earlier in the week when the PC did actually work... but no joy. After a few hours of head scratching and mucking about with Vista's recovery mode I was about to give up and suggest to pal in question that he take the box to PC World or somewhere to get it checked over. It's been years since I did PC fault diags, I'm a dev now and the hardware world has moved on quite a bit since I fiddled about with interrupt jumpers and olde worlde stuff like that. Anyway, just as I was about to pack it in, I noticed that the second DVD drive in the PC was flashing its wee light at me which I failed to notice earlier (mainly because this behemoth of a box has doors and flaps and all kinds of flare, it being a gamer box and all that, so I never caught the flickering first time around). So I opened the drive tray and there was a recordable DVD sitting there looking at me. I removed said item, rebooted the box and hey presto normal behaviour resumed. Turns out that pal's lovely wife and her mate were trying to burn tunes (onto DVD :-| ) and having problems with the media. Looks like Vista was booting, having a sniff at the DVD drives and was waiting for the offending drive to come ready before moving along, obviously this troublesome frisby was being a bit of bugger for the drive to read. What's most annoying about this is that the Vista boot-from-dvd-recovery mode does the same trick, so you sit there thinking something *must* be really shafted about the machine So, word to the wise, before starting down the hairy arse road of pulling your PC apart to resolve boot failures/loitering-around-on-crcdisk.sys issues, check there's no dodgy media in your DVD/CD drives first.
[Updated: Fixed some shocking spelling and truly awful grammar, never drink a bottle of wine and blog] Three months ago I cancelled my Sky sub and reduced it to their so called 'Freesat' package. This was because I wasn't watching anything other than BBC News 24, and also because most of the channels I was paying for were pretty awful, even BBC 4 seems to be reduced to endless recycling of the same programming. Subsequently I've found myself involved in other more interesting activities where even the need to switch on the set top box has become even less of a must. BBC News 24 was my last 'need to see' channel on 'broadcast TV', but sadly its cable and 'red top' condescending style of presentation finally turned me off. So...now that I've finally weaned myself off of broadcast telly I decided to bin my sat receiver. The house has no arial and I've unbolted the Sky dish from the wall. I also made a point of cutting up my Sky card just to be sure temptation didn't get the better of me. I also took the righteous step of cancelling my TV license, something I've longed to do for years. This should be an interesting step because whilst I still have my 40" LCD for playback of HD and DVD content, I've no doubt that the TV licensing authorities will swing by the house with their rubber gloves and give me a vigorous probing. Stopping watching broadcast telly this last month or so has allowed me to plough through four books (this month alone) and return to scoping out new music (my true love), whereas otherwise I'd be glued to the box decaying my brain and doing little else in the evenings. I really look forward to the day when the telly licensing racketeers come round the house to do their 'statutory' checkup now that they don't get their telly tax. I'll report back on how that goes. One thing I'll say though, it's hard to give up telly, but it's well worth it. You get way more things done in an evening...like Eve. :)
For a while I've had Stross in my sights to add to the reading pile, and grabbed copies of The Atrocity Archives, The Jennifer Morgue and Halting State (Martin gave Halting State a favourable review). The Atrocity Archive is actually one of Stross's early/first works but it wasn't published until 2006. It's in the form of a novel with a novella tacked on the end, though this doesn't spoil the enjoyment. The book is a pretty unusual combination of spy novel, scifi and occult. I'm not a big fan of horror/occult but this book rocks and I read it cover to cover over a couple of evenings. It has all the best elements of a modern hip spy novel with a healthy dose of science fiction/fact and the occult aspects of the writing is fortunately more Lovecraft than Denis Wheatly. 7/10 - A bloody good romp.
We all take our fresh drinking water supplies as a given every time we fill our kettles. The Blue Death traces the history of the goal of clean drinking water from the days when cholera was rife in the UK to present day water borne disease outbreaks and the dangers still inherent in our present supply systems. Fascinating stuff. 8/10
Just grabbed the new NIN Ghosts album. I got the $5 download of all 36 tracks in FLAC and it's pretty good value and the album is excellent. Reznor's sound has come a long way from the gloom and doom inspired nail-your-balls-to-a-plank-of-wood grittyness of the 90's. I liked the sound so much I was going to blow the $300 asking price for the super deluxe box set, but thankfully my bank account was spared the clean out because it was gone by the time I'd made my mind up. I settled for the $75 edition instead. This is another ground breaking example from another artist willing to take a chance and release his material in a DRM free format in return for sales, i.e. if people think the material is any good then they'll part with the money. Made me spend the extra dosh and I haven't listened to NIN for years. Good show Trent!.
I tend to leave my machines on for days or weeks on end. I've recently switched to Vista full time and that switch started with a new PC I bought for the lounge. I noticed that after being left on for around 24-36 hours the task bar would go all transparent or white and the task bar buttons would cram into the left hand side. There was other oddness going on such as the start menu getting corrupted. At first I thought it was a fault with the graphics card (sinking feeling) or possibly the driver but a reboot would make the problem go away for another 24-36 hours and then it would come back. This smelled of a resource leak somewhere because there was a reasonably identifiable trend in time and the fault manifesting itself. I googled around for a bit and discovered that there's a known problem with a GDI object leak in ComCtl32.dll. More about it here and how to fix - The Windows desktop may stop updating correctly after a Windows Vista-based computer has been running for an extended period of time (http://support.microsoft.com/kb/932406/en-us)
For a long time I've experienced some odd behaviour where IE 7 refuses to open any more tabs even though there's only a couple open, or, sometimes a tab will open but just say 'Connecting...' and no content is rendered. At first I thought it was an IE 7 bug but then I noticed Firefox do the same thing. At other times drop down menus and context menus would render with only half to a quarter of the menu items that should be present. Then things would get really weird and Windows would refuse to open application windows (there exe would launch but no UI) or even task manager. I had a hunch it was some kind of resource leak or I'd reached some upper limit of some heap memory somewhere (e.g. not enough contiguous memory due to fragmentation) because closing some apps or windows would make the problem go away for a short while. I googled around for a bit to see if this was a known issue but came up with nada. I guess because my computers are never rebooted for days or weeks at a time then this 'leak' was a slow burner that most folks wouldn't notice if they shut their PC's down immediately after use. Then I came across this article in Jeff Atwood's Coding Horror site - http://www.codinghorror.com/blog/archives/000966.html And this gem of a link http://blogs.zdnet.com/Bott/?p=269 in the comments. The article describes how to increase the desktop heap size to a value that makes the weirdness go away. Just in case the article goes offline for whatever reason, here's the registry key and value to play with - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems Edit the string value 'Windows' which contains - %SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,8192,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16 The number in red is the value to tinker with. This works with both Vista and Windows 2003 Server. I haven't tried XP but should probably work there as well.
We rolled out .NET Framework 3.0 SP1 via our update server this week. Then the support ticket queue started to fill up with complaints that ASP.NET 2.0 apps were being denied write access to their site private data folders and public facing web folders. Coincidentally, this service pack also installs .NET Framework 2.0 SP1 as well if it's not already installed, which it wasn't on our servers. Turns out that if .NET 2.0 SP1 isn't already previously installed then for some odd reason the machine.config and web.config files are 'tampered' with by the .NET 3.0 SP1 installer. These alterations cause the <identity impersonate="true|false" /> in machine.config to be removed and for the trust level in web.config to be reset to Full. Just so you know.
Pro LINQ by Joseph Ratz (APress) This is without a doubt one of the bests treatments of LINQ in all its (RTM) forms I've read so far. So good in fact that I read it from cover to cover in just four days. If there's a book on LINQ you're considering buying then this should be the one. Windows PowerShell Cookbook by Lee Holmes (O'Reilly) Even if you've never dipped your toes into PowerShell world then grab a copy of Windows PowerShell Cookbook. It's way more readable than Windows PowerShell In Action by Bruce Payette (Manning) which is a pretty thorough tome but maybe not the best text to be starting out with and getting productive. Cookbook got me up to speed and writing scripts to assist me migrate 7500 websites from our old shared hardware to our shiny new Virtual Iron environment in the space of a couple of days.
We've been putting off deploying PHP on the shared windows platform (IIS 6.0) until now - FastCGI RTM! Yay! We'll probably get this rolled out at the back end of the year after we've moved data centres and got our new Virtual Iron platform bedded in.
The MSDN docs don't really do Generic Search Predicate delegates justice and I think they're an often overlooked and underused tool in your utility belt. A typical example in MSDN shows something like - 1: using System; 2: using System.Collections.Generic; 3: class Example 4: { 5: static void Main() 6: { 7: List<string> dinosaurs = new List<string>(); 8: dinosaurs.Add("Tyrannosaurus"); 9: dinosaurs.Add("Amargasaurus"); 10: dinosaurs.Add("Mamenchisaurus"); 11: dinosaurs.Add("Deinonychus"); 12: dinosaurs.Add("Compsognathus"); 13: 14: // Find first dino ending with 'saurus' 15: Console.WriteLine("First dino ending with 'saurus': {0}", dinosaurs.Find(EndsWithSaurus)); 16: 17: // Find last dino ending with 'saurus' 18: Console.WriteLine("Last dino ending with 'saurus': {0}", dinosaurs.FindLast(EndsWithSaurus)); 19: 20: // Get list of dino's ending with 'saurus' 21: List<string> dinos = dinosaurs.FindAll(EndsWithSaurus); 22: Console.WriteLine("All dino's ending with 'saurus':"); 23: foreach(string dino in dinos) 24: { 25: Console.WriteLine(dino); 26: } 27: } 28: 29: private static bool EndsWithSaurus(string dinosaur) 30: { 31: return dinosaur.EndsWith("saurus"); 32: } 33: }
Without re-hashing the docs, the generic collection classes typically implement the following methods (and others):
<T> Find( Predicate<T> match ) List<T> FindAll( Predicate<T> match ) int FindIndex( Predicate<T> match )
...and so on. When these methods are executed, behind the scenes the generic collection is iterated over and for each element the EndsWithSaurus method is called whilst passing the the current element. If you disassemble each of the above methods in List<T> in mscorlib.dll this is what we see:
1: public T Find(Predicate<T> match) 2: { 3: if (match == null) 4: { 5: ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 6: } 7: for (int i = 0; i < this._size; i++) 8: { 9: if (match(this._items[i])) 10: { 11: return this._items[i]; 12: } 13: } 14: return default(T); 15: }
1: public List<T> FindAll(Predicate<T> match) 2: { 3: if (match == null) 4: { 5: ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 6: } 7: List<T> list = new List<T>(); 8: for (int i = 0; i < this._size; i++) 9: { 10: if (match(this._items[i])) 11: { 12: list.Add(this._items[i]); 13: } 14: } 15: return list; 16: }
1: public int FindIndex(Predicate<T> match) 2: { 3: return this.FindIndex(0, this._size, match); 4: } 5: public int FindIndex(int startIndex, int count, Predicate<T> match) 6: { 7: if (startIndex > this._size) 8: { 9: ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index); 10: } 11: if ((count < 0) || (startIndex > (this._size - count))) 12: { 13: ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.count, ExceptionResource.ArgumentOutOfRange_Count); 14: } 15: if (match == null) 16: { 17: ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 18: } 19: int num = startIndex + count; 20: for (int i = startIndex; i < num; i++) 21: { 22: if (match(this._items[i])) 23: { 24: return i; 25: } 26: } 27: return -1; 28: }
Predicate<T> match is a delegate that you the developer write to define the elements you wish to match. In the code example above, the line: 21: List<string> dinos = dinosaurs.FindAll(EndsWithSaurus);
is simply syntactic sugar. We could actually rewrite this as -
1: List<String> dinos = dinosaurs.FindAll( delegate(string dinosaur) { return EndsWithSaurus(dinosaur); } ); 2: 3: Console.WriteLine("All dino's ending with 'saurus':"); 4: foreach (string dino in dinos) 5: { 6: Console.WriteLine(dino); 7: }
The C# compiler takes care of creating the predicate delegate for us. Now that we understand the mechanics, here's an example of using Predicate<T> delegates to parse some command line arguments. We have a simple console application that accepts one mandatory switch and some optional switches:
userinfo -user:<username> [[-setpassword:<password>] [-showinfo ] | -deleteuser]
The -user:<username> switch is mandatory. -setpassword and -showinfo can be used together but not if -deleteuser is present. The switches can be supplied in any order. Here's the sample, it's incomplete but you should get the idea:
1: using System; 2: using System.Collections.Generic; 3: 4: class Program 5: { 6: static int Main(string[] args) 7: { 8: if (args.Length == 0) return Usage(ErrorLevel.NoArgs); 9: 10: // Load args array into a generic list of strings 11: List<string> switches = new List<string>(args); 12: 13: // Asking for help? 14: if (switches.FindIndex(FindHelp) > 0) return Usage(ErrorLevel.DetailedHelp); 15: 16: string username; 17: ErrorLevel errorLevel; 18: if (!TryParseUsername(switches, out username, out errorLevel)) return Usage(errorLevel); 19: 20: 21: // Check that -deleteuser is not present with -setpassword and -showinfo 22: if (switches.Exists(FindDeleteSwitch) && (switches.Exists(FindSetPasswordSwitch) || switches.Exists(FindShowInfoSwitch))) 23: { 24: return Usage(ErrorLevel.DeleteSwitchIsExclusive); 25: } 26: 27: if(switches.Exists(FindDeleteSwitch)) 28: { 29: // Delete user 30: } 31: else 32: { 33: if(switches.Exists(FindSetPasswordSwitch)) 34: { 35: // Set password 36: } 37: 38: if(switches.Exists(FindShowInfoSwitch)) 39: { 40: // Show info about user 41: } 42: } 43: 44: return (int)ErrorLevel.NoErrors; 45: } 46: 47: 48: private static bool FindHelp(string s) 49: { 50: s = s.Replace("/", "-"); 51: return s.Equals("-help", StringComparison.InvariantCultureIgnoreCase) || 52: s.Equals("-?", StringComparison.InvariantCultureIgnoreCase); 53: } 54: 55: private static bool FindUserSwitch(string s) 56: { 57: s = s.Replace("/", "-"); 58: return s.StartsWith("-user:", StringComparison.InvariantCultureIgnoreCase); 59: } 60: 61: private static bool FindDeleteSwitch(string s) 62: { 63: s = s.Replace("/", "-"); 64: return s.Equals("-deleteuser", StringComparison.InvariantCultureIgnoreCase); 65: } 66: 67: private static bool FindSetPasswordSwitch(string s) 68: { 69: s = s.Replace("/", "-"); 70: return s.StartsWith("-setpassword:", StringComparison.InvariantCultureIgnoreCase); 71: } 72: 73: private static bool FindShowInfoSwitch(string s) 74: { 75: s = s.Replace("/", "-"); 76: return s.Equals("-showinfo", StringComparison.InvariantCultureIgnoreCase); 77: } 78: 79: private static bool TryParseUsername(List<string> switches, out string username, out ErrorLevel errorLevel) 80: { 81: // Simple example, we just want to find the -user switch 82: username = switches.Find(FindUserSwitch); 83: 84: // Returns null if no match 85: if (username == null) 86: { 87: errorLevel = ErrorLevel.UserSwitchMissing; 88: return false; 89: } 90: 91: // Check that we have a valid <username> part of -user:<username> switch 92: string[] temp = username.Split(':'); 93: if (temp.Length != 2 || temp[1].Length == 0) 94: { 95: errorLevel = ErrorLevel.UsernameMissing; 96: return false; 97: } 98: 99: username = temp[1]; 100: errorLevel = ErrorLevel.NoErrors; 101: return true; 102: } 103: 104: private static int Usage(ErrorLevel errorLevel) 105: { 106: Console.WriteLine("Usage: useradmin -user:username [ [-setpassword:password] [-showinfo] | -deleteuser ]"); 107: 108: switch(errorLevel) 109: { 110: case ErrorLevel.UserSwitchMissing: 111: Console.WriteLine("-user:<username> is mandatory."); 112: break; 113: 114: case ErrorLevel.UsernameMissing: 115: Console.WriteLine("-user:<username>, <username> is missing."); 116: break; 117: 118: // Other error level messages 119: // ... 120: 121: case ErrorLevel.DeleteSwitchIsExclusive: 122: Console.WriteLine("-deleteuser is exclusive of -showinfo and -setpassword"); 123: break; 124: 125: default: 126: break; 127: } 128: 129: 130: 131: if(errorLevel == ErrorLevel.DetailedHelp) 132: { 133: Console.WriteLine("Detailed help:..."); 134: } 135: return (int)errorLevel; 136: } 137: 138: public enum ErrorLevel 139: { 140: NoErrors, 141: NoArgs, 142: DetailedHelp, 143: UserSwitchMissing, 144: UsernameMissing, 145: DeleteSwitchIsExclusive 146: // Other error level values as necessary 147: } 148: }
Today a customer had racked up over 40,000 temp files in their wacky perl based CMS/Commerce app on their dedicated server. We needed to delete everything older than 4 hours. Explorer borked just trying to list the files whilst refreshing as new files were being added at a rate of 600-800 an hour. Their app is supposed to delete these temp files each time a new page request arrives but hasn't been able to keep up and so the app was dragging along at a seriously unhealthy pace. Enter PowerShell!: get-childitem *.* | where {$_.lastwritetime -le [datetime]::Now.AddHours(-4)} | foreach ($_) { remove-item $_.fullname }
Customer reckons it's safe to delete files older than 4 hours so we'll set this up to run as a scheduled task to run every 15 mins and give the perl web app a bit of a break.
Suck up even more of that PowerShell goodness by adding a PowerShell Here to your explorer context menu: ; ; "PowerShell Here" ; ; Copy and paste to a file called PowerShellHere.inf then right click and 'Install' ; [version] signature="$CHICAGO$" [PowerShellHereInstall] CopyFiles = PowerShellHere.Files.Inf AddReg = PowerShellHere.Reg [DefaultInstall] CopyFiles = PowerShellHere.Files.Inf AddReg = PowerShellHere.Reg [DefaultUnInstall] DelFiles = PowerShellHere.Files.Inf DelReg = PowerShellHere.Reg [SourceDisksNames] 55="PowerShell Here","",1 [SourceDisksFiles] PowerShellHere.INF=55 [DestinationDirs] PowerShellHere.Files.Inf = 17 [PowerShellHere.Files.Inf] PowerShellHere.INF [PowerShellHere.Reg] HKLM,%UDHERE%,DisplayName,,"%PowerShellHereName%" HKLM,%UDHERE%,UninstallString,,"rundll32.exe syssetup.dll,SetupInfObjectInstallAction DefaultUninstall 132 %17%\PowerShellHere.inf" HKCR,Directory\Shell\PowerShellHere,,,"%PowerShellHereAccel%" HKCR,Directory\Shell\PowerShellHere\command,,,"%11%\WindowsPowerShell\v1.0\PowerShell.exe -NoExit" HKCR,Drive\Shell\PowerShellHere,,,"%PowerShellHereAccel%" HKCR,Drive\Shell\PowerShellHere\command,,,"%11%\WindowsPowerShell\v1.0\PowerShell.exe -NoExit" [Strings] PowerShellHereName="PowerShell Here" PowerShellHereAccel="PowerShell Here" UDHERE="Software\Microsoft\Windows\CurrentVersion\Uninstall\PowerShellHere"
...and also disturbing...like the people with no faces in my dreams...
I've had endless problems over the years getting 802.11 wifi networks to work properly. I think this is mostly due to the fact that the allocated spectrum (2.4Ghz) is a bit of a free for all. In my street/locale there's at least five 802.11 networks, going by the number of visible SSID's I can see when my wireless adapter went on the hunt, and probably a few more that have their SSID's hidden. DECT handsets also live in the same part of the radio spectrum so it's a pretty busy old place. The main problem I've had with Wifi is that after selecting an initial channel (say 2), this works quite well for a day or two and then for some reason the quality of the connection drops out to <20% leaving me with a 1-2Mb wifi connection. Changing to another channel solves the problem for a day or two and then we're back to square one. It surprises me that modern access points and Wifi adapters don't have the intelligence to hop around the available 'channels' to maintain the best possible connection. Even with the wifi adapter 10 meters way from the the access point and in clear line of sight, it's impossible to maintain a steady connection of at least 20Mb on 54g. I've tried three different access points and numerous wifi dongles and adapters without any real success. My house is a timber frame plasterboard stud partion construction, so it's not even as if there's some medievil stone wall for the waves to penetrate. The recent purchase of a PS3 meant that I needed network connectivity in the lounge again and I was also getting pretty fed up tripping over the cable that runs from the hall to the office supplying the connection to my DSL router. A solution was needed. Then I spotted these in PC world - They're ethernet over power line adapters. You start off with a kit of two and then just keep adding. The initial cost is a bit high at £80.00 for the first two, but the advantages of a reliable and secure 85Mb connection far outweigh the initial wallet hit. The range on the adapters is pretty good too (quoted at up to 200m) and they're a piece of cake to setup. Well worth the investment if you've had enough of fickle wifi connections.
Om - Variations on a Theme Rather good and reminiscent of Black Sabbath, circa Paranoid era, but heavier. Also quite melodic for the genre (doom metal) compared to the likes of Sunn O))) who are, to be honest, an acquired taste in the same way that jellied eels and steamed donkey genitals are - 7.5/10. Sleep - Jerusalem More doom metal and a bit heavier than the Om release, that said it's still very listenable and has been on my foobar2000 daily playlist for quite a few days now - 7/10. Flotation Toy Warning - The Bluffers Guide to the Flight Deck Some friends might say I was only attracted to this little gem because of the band name and album title, Eric :P , how could you possibly think that?. This is a great record, laid back sounds, with pinches of Flaming Lips, Radiohead, Grandaddy bubbling to the surface. Takes a couple of listens then the tracks bed in nicely 8/10. The Dragons - Bfi It's a bunch of tunes they (The Dragons) recorded in 1969. Some DJ called Strictly Kev from Ninja Tunes contacted them about a track called Food for my Soul that he wanted to sample. Things progressed, one thing led to another and they ended up releasing Bfi. Rather good collection of psyche jazz rock from the era. Food for my Soul is really catchy - 7/10. The Datsuns - Outta Sight / Outta Mind Maybe I haven't listened to it enough but it kinda misses the mark compared to the first album. Sadly Outa Sight/Outa Mind Doesn't have the raw balls out 70's Led Zep rock thing going that was present in their debut spinner - 6/10. Caribou - Andorra If a little avante garde, the first two albums (The Milk of Human Kindness and Up in Flames [under former name of Manitoba]) I bought were quite groundbreaking and eminently listenable productions. Could be that I've not played Andorra enough, but I don't think it deserves the rave reviews I've seen dotted about the various music sites because it just isn't hooking me the same way - 6/10. Simian Mobile Disco - Attack Decay Sustain Release A load of rubbish. Sounds like some bland nonsense you hear played at an over 30's singles night, you mileage may vary however - 0/10.
Ok..so you deployed your ASP.NET to your shared hoster and the first time you browse to the site you get this: Server Error in '/' Application. Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine. Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off". <!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
Notes: The current error page you are seeing can be replaced by a custom error page by modifying the "defaultRedirect" attribute of the application's <customErrors> configuration tag to point to a custom error page URL.
<!-- Web.Config Configuration File -->
<configuration>
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="mycustompage.htm"/>
</system.web>
</configuration>
As we all know, and as the description explains, <customErrors mode="RemoteOnly" /> tells ASP.NET to not render any detailed exception information to the remote browser. So you follow the instructions and set <customErrors mode="Off" /> in web.config so you can see what the problem is from your remote location. You hit F5 to reload the app and still you get the same error message advising you to set <customErrors mode="Off" />. You dutifully check your sanity and web.config and sure enough mode="Off". What's going on?
There are times when ASP.NET 1.1 can't start your site because it can't parse your web.config file. This can be due insufficient rights for the worker process to access the web folder or your web.config is clobbered e.g. an invalid or misspelled config tag. A typical example is uploading ASP.NET 2.0 code to a 1.1 site that hasn't yet been switched to run 2.0, your web.config contains 2.0 tags such as <connectionStrings /> and 1.1 chokes on it and refuses to render the detailed error even though <customErrors mode="Off" />.
The problem here is that unless you can get console access to the server to open a browser, you've got no way of seeing the underlying error. You could of course log a support ticket with your hoster and ask them nicely to logon to the box that the site is hosted on, browse to your app and report back the detailed exception info. All very well, but your ticket might not get dealt with for a few hours and you're right up against a deadline set by your PM to "get that site up in 30 minutes or I'll rip you head off and p....". You're also likely to get away with this type of request just once or twice with the hoster support guys before they either ask for money or tell you to quit bothering them and work it out for yourself. So what do you do?
I had this very same problem tonight. Shared hoster is in the states, it's a mates website, Server Error in '/'... in the browser window, <customErrors mode="Off" /> and no detailed exception info. I ask him to log trouble ticket with support to ask nicely if they would browse to the site on the server and report back the error. Still waiting, mates site is still down. Then it occurred to me that if he's got ASP.NET, then he'll also likely have ASP support. So here's how to get that pesky error message without accessing the console:
showerror.asp -
<% Dim xmlHttp Set xmlHttp = Server.CreateObject("MSXML2.ServerXmlHTTP") xmlHttp.open "GET", http://www.mybrokensite.com/default.aspx, false xmlHttp.send Response.Write xmlHttp.responseText %>
Load that up into the same webspace as the ASP.NET app and then browse to it. What you should see is the error message that you'd only be able to see at the console, even with <customErrors mode="Off" />. The reason this works is because when the ASP.NET page is requested by the showerror.asp script, the request is originating from the same site/server as the broken ASP.NET app and so ASP.NET sees this and helpfully responds by rendering the detailed error. We capture the response in the xmlHttp object and spit out the responseText to your remote browser.
ASP.NET 2.0 isn't quite as anal as 1.1 when it comes to rendering errors about broken web.config files, but there have been cases (which I can't remember off hand) where even 2.0 just falls back to recommending setting <customError mode="Off" /> and you sit there with one one hand tearing your hair out, the other reaching for the advil/valium.
Yay! dasBlog 2.0 (2.0.7226.0) shipped last week and works with ASP.NET 2.0 running under Partial Trust. The upgrade was a piece of cake with just one gotcha. The instructions here are for when you only have FTP access to your web server. If you have direct console access then there's no need to download /content and /SiteConfig. Just make a copy of your dasblog www folder and do the steps online. 1. Unzip the web files dasBlog-2.0.7226.0-Web-Files.zip file
2. Download your web.config file and, if necessary, merge any changes you made to the 1.x version into the 2.0 config file. I didn't have to but you might.
3. Grab a copy of any of the stock templates you modified from /themes. I lost a bunch of changes I made to one template the last time I upgraded because I modified the original but didn't call it something else. When I upgraded last time I overwrote the template. Duh!
2. Download your /content folder (make a backup) and copy to the freshly unzipped /dasblogce/content folder
3. Download the contents of /SiteConfig (again make a backup) and copy to /dasblogce/SiteConfig
4. The gotcha: Edit /dasblogce/web.config and remove the line with <trust level="Medium" originalUrl="" /> (around line 73). The reason for this is that most ISP's wrap <system.web> in the master web.config file with a <location allowOverride="false"> to prevent you from changing the trust level. The presence of <trust level="Medium" originalUrl="" /> in dasBlog's web.config will throw up this error: Server Error in '/' Application. Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. Parser Error Message: This configuration section cannot be used at this path. This happens when the site administrator has locked access to this section using <location allowOverride="false"> from an inherited configuration file. Source Error: Line 71: </system.diagnostics>
Line 72: <system.web>
Line 73: <trust level="Medium" originUrl=""/>
Line 74:
Line 75: <!-- level="[Full|High|Medium|Low|Minimal]" -->
Source File: d:\xxxxxx\yyyyyy\www\web.config Line: 73
Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832
5. Drop to a command line prompt and cd to upgradedasblog folder then the run the dasblogupgrader.exe tool on your /content folder e.g.
dasblogupgrader c:\dasblog\dasBlog-2.0.7226.0-Web-Files\dasblogce\content
6. Answer the questions it asks of you. You'll be the better judge than I on how to answer. Apparently answering yes to everything is fairly harmless.
7. Upload the contents of your /dasblogce to your website.
8. Job done. But remember it is very worthwhile spending a little extra time taking a full copy of the whole of your 1.x dasBlog site so you can roll back if it completely blows in your face.
If you're looking for a hoster that has a proven environment for running dasBlog and many things .NET related then please forgive me if I shamelessly plug the company I work for :) :
http://www.tollon.net and http://www.ukuhost.net
In a world where online fraud and identity theft are rampant we're encouraged (and rightly so) to choose strong passwords. I always add a couple (at least) of non-alpha numeric characters into the mix along with mixed case and numbers pretty much on everything from my home/work PC to online sites. On sites that maintain and permit access to sensitive data such as online banking, or in this case it was a credit scoring site, you'd think they'd encourage enhanced password complexity....sadly not. I encounter so many large brands in the online banking and finance sector that seem to think we're too stupid to use characters like !"£$%^&*(){}:@~;'#,./?><|\ in our passwords either that or they don't trust their data access code or DB. I really can't see any reason why I can't use $ or * in a password unless they've been up to some really funky stuff. I could sorta understand why they might just take a belt and braces approach to preventing the use of ' or " just in case there's some unwashed mucky line of code that does string sql = "SELECT * FROM table WHERE something = " + Request.Form["password"]; But then you'd expect there to be nothing of the sort given that SQL injection attacks are pretty well documented and understood and banks should be running secure code. Sigh.
It's been a while since I've stuck anything new on the site, partly due to laziness, partly because there's not much to write home about. Until now... After several months of pouring over issues of What HiFi etc, I just replaced my TV and home cinema system. I had a 32" JVC CRT (which was a behemoth taking up far too much space and of course could only fit in the corner of the living room) and a 2nd hand Sony DAVS800 (which gave up the ghost a couple of months back). Whilst the JVC was a nice telly with a nice enough picture, it was just too big for the room. Anyway when the Sony DAV packed in it was the catalyst to get serious about upgrading. Telly Samsung LE40M87 40" 1080p LCD. This is an utterly awesome piece of kit and rather nice to look at too. The picture quality is spectacular, although it does take some time to fiddle with the settings to get things to your liking. Even nicer is that it comes with 3 HDMI inputs amongst an slew of other connectivity options including a VGA connector for your 'media centre' PC (although you can convert DVI to HDMI with the relevant dongle which apparently permits playback of HiDef content even with the notorious ICT flag set provided that your DVI interface is HDCP compliant). What I love about flat screens is that you don't have to cram them into a corner like you have to with big CRT's. I've got mine against one of the long walls in the lounge which means the speaker positioning is much simpler. I also got a large and useful piece of lounge real estate back which is nice :). BluRay Player This is in the guise of a Sony Playstation 3. At 420 quid it was the cheapest player on the market and it's also a pretty slick games console to boot. PC world had a pretty good deal which included 2 SixAxis controllers, RidgeRacer 7 and Resistance: Fall of Man. For an extra 17 pounds I grabbed a DVD remote at the same time because I was uncertain whether the controllers would provide full DVD remote functionality. Incidentally, the remote and controllers are Bluetooth wireless - yay! no wires. As a BluRay player I can't fault the PS3 and Sony keep on top of the system software updates for the PS3 which means that the present release is pretty bug free with regard to disk playback unlike the current crop of dedicated HD-DVD and non-Sony BluRay players. Additionally one of the latest updates allows the PS3 to upscale normal DVD's to 1080p. The combination of upscaling and feeding the A/V to the Onkyo (see later) and then from the Onkyo (all via HDMI) to the Samsung definitely improves the quality of lower resolution content on larger HD panels. One of the problems with HD TV's is that low resolution content can appear washed out, ragged and ill defined (imagine running your PC at 800x600 on a panel designed to run at 1280x1024), for example, skin tones can appear waxy and weird. Not so with the new 1.9x release of the PS3's system software provided that your video endpoint is HDMI. I could write another 2000 words about how excellent the PS3 is as a games console when hooked up to a big HD telly and 5.1 sound (Motorstorm is outstanding, I'd have bought the PS3 just on the strength of this game alone) but I'll leave that for another time. The only drawback at the moment with most of the current crop of games is that they don't utilise the full 1080p capability of the PS3. The three that I have run at 720p but it certainly doesn't mean that the picture quality looks bad. In fact, had I not eventually read the back of the boxes to find this out I'd have been none the wiser because the picture quality is tremendous even at 720p. Newer games such as Grand Turismo and a reworked WipeOut which are due for release later this year will in fact begin to take advantage of the higher resolutions. In fact I've downloaded flOw and it's absolutely beautiful in all its 1080p goodness. Surround Sound Amp/Processor I initially had a budget of around £250 and after seeing Onkyo kit getting pretty good reviews I had settled on an Onkyo TX-SR505 (RRP ~£250). However the guys at the hifi shop persuaded me to spend a bit more and go for the the TX-SR605 to get that bit of extra power and also because it supports HDMI 1.3a and I'm very glad I took their advice. It's not the most handsome looking lump of technology but who needs looks when you hear what this baby does. The '605 is also a pretty capable stereo amp too and when paired with my B&W 685's the sound is crisp, controlled and well presented. In fact my Marantz 6010 is going on eBay because the Onkyo is way better! Speakers At the beginning of summer (partly due to it being my fault because the speaker wasn't properly centred on the stand because I was doing some rewiring), one of the cats managed to knock one of my beloved B&W 602 S2's off its stand and break something expensive inside. Fortunately my home contents insurance accident cover came good and with the proceeds from the claim I bought a pair of B&W 685's as replacements. When I got these home I was initially disappointed because they're physically much smaller than the 602's, but looks are deceiving and these units, now that they've been run, in pump out enough decibels to blow the double glazing out whilst remaining totally in control of the sound...all the way up to 11. They're also very good at lower volumes as well, unlike the 602's which preferred to be driven harder. The other benefit of the smaller stature of the 685's is that they don't physically dominate the room like the 602 obelisks did. I'm using the 685's as the front left/right speakers. For rears I recycled a pair of old Mission 780SE's which I was using in my study with an old NAD 3020. The missions in the study got replaced with a pair of dinky little Mission M30i's I picked up on ebay for only 40 quid and they're like new and sound just fine for that size of room. I intend to replace the Mission 780's with a pair of B&W 686's when finances permit but they'll do just fine for now. For a sub I've borrowed my mates Panasonic active unit but come November this will get replaced with a Rel Quake which is quite a beast. Rel specialise in sub woofers and it's been recommended over the equivalent priced B&W. Obviously if you count the speakers so far then you'll notice I haven't made mention of the front/dialogue speaker. This is going to be a B&W HTM62 and should arrived at the end of the week. Even without the centre speaker (the '605 can be configured to downmix to a variety of speaker combinations such as 4.1 or even just plain stereo) the sound tracks to movies are simply astonishing, I found myself ducking during one bullet ridden scene in Blackhawk Down. I'm looking forward to adding the B&W centre which should round off the sound just nicely. Putting it all together The HD movie experience is amazing. I bought Starship Troopers and Blackhawk Down on BluRay and both these films (whilst already excellent) are totally transformed into a new and exciting A/V experience because of the picture quality/size and the sound. The other week I caught some random movie on a conventional telly and let me tell you, you never want to go back. I also rented Apocalypto on BluRay, now I'm not a huge fan of Mr Gibson these days, but Apocalypto is a stunning film. The subject matter is unconventional and an interesting take on Mayan culture but - WOW!!! - visually it's gobsmacking especially in glorious 1080p. I'm so glad that I got to see it first time round in HD because it's just made for this media. If you're undecided or not totally convinced about HD then I suggest sampling Apocalypto (or parts of) at your local hifi/AV store in a demo room, you'll get the cheque book out there and then. BluRay or HD-DVD? This is a format war that's going to run on for a good bit. I went the BluRay route simply because the available HD-DVD players are pretty expensive and HD-DVD seems to be a standard in flux. The recent announcement of multi layer HD-DVD's to boost the storage capacity to 45GB (BluRay is 50GB as standard) has sown the seeds of uncertainty as to whether the first and second generations of players will be able to read these disks. Additionally my confidence in HD-DVD at the moment was somewhat dented by various warnings in the product pages for Toshiba's line of players. For example: http://www.home-entertainment.toshiba.co.uk/consum... "Because HD DVD is a new format that makes use of new technologies, certain disc, digital connection and other compatibility and/or performance issues are possible. This may, in rare cases, include disc freezing while accessing certain disc features or functions, or certain parts of the disc not playing back or operating as fully intended. If you experience such issues, please contact Toshiba Customer Solutions. Some features subject to delayed availability" Yuk...that was enough to put me off and Toshiba are suppose to be the main developer of HD-DVD technology. It is annoying however that the victims of this format war will ultimately be the consumer because studios such as Paramount and Disney have announced that they will only be releasing content on HD-DVD and of course Sony Motion Pictures (Sony hardware are the proponents of BluRay) will restrict their premier content to BluRay to establish market penetration for BluRay. Eventually hardware vendors such as Samsung will begin shipping more affordable dual format players in the next year or so, but at the moment it's a pain that upcoming releases such as The Matrix Trilogy (HD-DVD only) will only be available in one or the other format. That said, the HD release I'm really looking forward to in December will fortunately be available in both formats - Blade Runner - The Final Cut, properly remastered unlike the shoddy DVD effort that appeared back in 2001. Conclusion If you've got the money get HD'd.
Can't remember where this came from, though I suspect Dave was responsible - 
Been a bit busy with work and some personal projects so the blog has the look of a deserted town with tumbleweed blowing about. Anyhoo, I thought I'd share this addictive little number with you just in case you haven't gotten hooked on it already - Desk Top Tower Defense: http://www.handdrawngames.com/DesktopTD/. I managed to lose two hours of my life due to this game the other night. It's like crack.
This should be good...Richard Dawkins is being interviewed on The O'Reilly Factor on Fox News. I really respect Dawkins and I am very glad that a man of his intellect, credibility and influence within the scientific community is standing up and saying the things that need to be said about religious belief and its influence on secular matters such as the governance of our country (e.g. why do christian faiths have the right to interfere with and have say in who is eligible to adopt children?) and education (creationist theory has been quietly chip chipping at our school science curriculum). It's well worth listening/watching some of his previous interviews and debates here and here. The man argues the atheist case eloquently, politely and is (as the strap line of his website says) truly an oasis of clear thinking. You should buy Dawkins' last book, the God Delusion, it's an eye opener and whilst you're at it get The End of Faith by Sam Harris as well.
Time flies, and I can hardly believe it's over two years since I started doing the radio gig for Heartland FM. The experience has been great and it's fostered a deeper interest and love of music I'd never had before. I've always been into my tunes and bands, but presenting the show has made me really focus on finding new material to play each week rather than just picking odds and sods (repetitively perhaps over a cycle of 4 weeks) from my own reasonably healthy catalogue. Like tonight for example, I played a bunch of stuff that turned up over the last week or so that, say five years ago, I'd probably never have considered listening to let alone heard of e.g. Comus (early 70's psychedelia/folk/rock), Sven Libaek (film/tv music compositions), Gudrun Gut (German industrial pop/trance) and Litmus (Spacerock!). One of the great joys about the time slot I go out in is the flexibility to play whatever the hell I takes my fancy. Because the show goes out after the 'watershed' I'm not restricted to 'radio edits' which can really spoil a track. I also get to play longer tracks or sets of tracks such as the three by Colosseum below from the album The Valentyn Suite. I usually reserve the best part of the last half hour of the show just to be able to 'treat' listeners to tracks such as those from The Valentyne Suite or some Tangerine Dream or some other lengthy epic. Meanwhile I put my feet up, turn the monitors up to 11, turn down the studio lights and kick back - it's all very chilled and relaxing. People often ask what kind of music I play on the show and it's always hard to answer that question other than to say that it's heavily influenced by John Peel, Prog, Jazz, Electronica and Psychedelia; check out the playlist below or if you're in the area tune in. Anyhoo without further ado, here's the playlist from tonight: LCD Sound System - North American Scum The Fall - I Can Hear The Grass Grow Jello Biafra + The Melvins - Voted Off The Island The Earlies - Bad Is As Bad Does Gudrun Gut - Cry Easy Litmus - Infinity Drive Belbury Poly - The New Mobility Man - It Is As It Must Be Sven Libaek - In the Wave 65 Days Of Static - 65 Doesn't Understand You Comus - Song To Comus Colosseum - The Valentyne Suite - Theme One: January's Search Colosseum - The Valentyne Suite - Theme Two: February's Valentyne Colosseum - The Valentyne Suite - Theme Three: The Grass Is Always Greener Kraftwerk - The Model
So... we did as much testing as we could possibly do before rolling SP2 out to the hosting platform. We deployed. It all seemed tickety... until a customer reported that his classic ASP app had stopped sending emails from some functionality implemented in his Session_OnEnd() event handler in global.asa. Sure enough, he was right. We ran up a test environment with SP1 + latest updates, tested, and the event fired just fine. Installed SP2 and bonk... no Session_OnEnd() event. Rolled the test environment back to SP1 and all was well again. News groups and google searches confirm similar experiences from other (annoyed) devs/admins. That'll teach us to be so diligent.
A coupla weeks back we had an internal discussion which was kinda prompted by a question raised by dedicated customer - "My server is supposed to have 4GB of memory, how come I don't see it all?" Jeff Atwood over at Coding Horror probably has one of the better explanations I've read that explains where the missing memory goes - Dude, Where's My 4 Gigabytes of RAM?
I kinda do this as a bookmark for myself as much as anything else. There's been a number of times folk have called the station post-show asking what a track is and I can't remember :-|. Anyhoo, for your viewing pleasure.... Union of Knives - Operated On Midlake - Roscoe Grandaddy - Collective Dreams of Upper Class Elegance Squarepusher - Planetarium Belbury Poly - The New Mobility Nouvelle Vague - Killing Moon The Postal Service - The District Sleeps Tonight Quantic - An Announcement to Answer Mint Royale - Blue Song Chemical Brothers - Hey Boy, Hey Girl Six Organs of Admittance - Attar Kling Klang - Rocker Mono - Com(?) Electrelane - Film Music The Guess Who - American Woman
Gotta say I like it. I've lived with Beta 2 since it came out but didn't have the video card with enough "va va voom" to run Aero. Now having lived with Vista RTM on the new machine for nearly a week, I love it. The new UI is slick, luxurious and makes XP look clunky and 'Classic' look and feel (which I normally revert to), feel like going back in a Windows 3.1 time machine. I also like the navigation tweaks they've done to explorer and the search doodah that lives on the start menu. This time I won't be falling back to old style menus and classic look and feel. On a related note, there's been loads of moans and complaints about Vista and drivers and app compatibility. Seems we've forgotten the early days of XP. Patience people, Vista is new, the vendors are going to take a while to get their drivers just right, app compatibility issues will be overcome in due course and the world will move on and this time next year we'll have forgotten all about this. I guess I've been pretty lucky because the Dell Precision 380 had no bother with regard to drivers (ok I had to grab the Vista compatible iaStore.sys driver for the SATA controller from Intel), and everything just works. I'm no MS fanboy, but well done MS.
So...just as I got round to installing the January CTP bits into their shiney new machine, the March CTP arrives (via Sam Gentile's blog). Not so bad though because the May 2006 Linq CTP bits have been rolled into this CTP which is nice. Out of all the funky new stuff, the namespace that piques my interest most: System.AddIn.Hosting. I'm in the middle of redoing the shared hosting/managed dedicated server provisioning bits. Unfortunately we don't have the resources to completely redo everything and make it all MPS friendly so we're taking a step along that road with some proprietry code that will be plugin based and way more extensible than what is currently in production. I wish System.Addin.Hosting was available in the .NET 3.0 RTM. Ho hum. Read more about System.AddIn.Hosting on the CLR Add-In Team blog here: http://blogs.msdn.com/clraddins/archive/2007/01/12.... There's also a VPC build of the Orcas March CTP here.
I just got a new 17" flat screen telly for the study. The big problem was that I didn't want to run cables or pay for a new Sky box to get a signal into the room so I got me one of these: It's a Philips SLV5400 video sender unit. The source end allows you to plug in up to four different SCART sources e.g. DVD, Sat, VHS etc. Your telly plugs into the fifth pass through AV SCART outlet. There's also a set of four IR transmitters on a wire that you place strategically near to the IR sensors of the source boxes. At the other end is a box that you plug into the remote TV. The AV signal and handset IR signal are transmitted over 2.4Ghz point to point wireless. The remote end box also has a handset and buttons on the front so you can choose which source to watch. All in all it works really well, I can sit at my desk in the office and change channels on the Sky box and do all the things I would expect to do if I was at the source end. I've seen these gadgets in the past and the implementation, build quality and signal quality was pretty poor. The SLV5400 though is slick and well executed and importantly the signal quality is top notch, there are no sparklies, hum lines or other discernable noise/degradation. 8/10.
Warning...boring story about my new PC ahead...:-) The two old Athlon XP based boxes I used to run Virtual Servers on finally bit the big green banana. One just plain refused to boot and the other would run for a bit and then just freeze. After a cursory look around the insides I decided it was time to retired these old faithfuls. Both machines were self builds that over the years got rolling upgrades of motherboards, processors, memory, graphics cards and hard disks. The oldest of the two machines was originally bought 10 years ago as a self build Pentium 2-266Mhz box based on a SuperMicro motherboard and the other one was originally built with almost equally ancient Athlon bits roughly 7 years ago. In addition to these noisy old workhorses (the PSU fan bearings were shot on both, but the fans did turn) I have a couple of newer machines. One is for personal non-development use and it's currently got beta 2 of Vista running at the moment, but sadly its GeForce Ti-4200 video card doesn't score well enough to get the Glass UI running. The other PC is my company supplied Dell Precision 370 P4-2.8 with 4Gb of RAM. This runs Windows Server 2003 and all my dev tools. Anyhoo...I still needed a decentish box to run as a Virtual Server host and to dual boot Vista Ultimate but also as a fallback machine should the works Dell crap out at any point. There wasn't a huge amount of cash to spend but I wanted something that would at least match the performance of my company Dell Precision (circa 2005 tech). After shopping around I decided I couldn't be arsed doing another self build. Previous experiences of pissing about trying to nail down the culprit in DOA/intermittent faults and getting the likes of Dabs or Overclockers to turn around faulty stuff has left me pretty wary and weary of all that carry on. Also the economics, timewise, of self building just aren't worth it to shave maybe at best 75-100 notes off of the price of something I could buy ready made and just plug in and go. I no longer have the enthusiasm, time nor inclination to waste whole evenings pouring over jumper settings, mysterious BIOS 'advanced' configurations and trying to shoehorn components into a case that has wrist slicing sharp edges etc etc...you know the kind of nonsense I'm on about. So I wanted a ready made box and I also wanted a Dell because they're generally quite well put together and reliable. So off to the Dell website. Unfortunately pretty much everything I tried to customise on the Dell website pushed the prices way over my budget. The Dell warehouse site had one or two refurbed boxes that nearly matched my requirements but were let down on things like not enough memory or crappy video card and the price being just a bit much after adding VAT and they're whopping carriage charges. Then I remembered these guys - http://www.europc.co.uk - they're based in Glasgow and specialise in selling refurbished and nearly new Dell hardware (amongst other makes). On their website they had a whole raft of Dell Precisions (370's, 380's, 670's etc) and the one that caught my eye was a Precision 380 (last year's model) spec'd as P4-3Ghz HT CPU, 512mb of DDR2-533 RAM, NVidia Quadro 285 dual head video card, Firewire, USB 2, DVD-RW, Sound, Intel SATA RAID controller and (this is the best bit) a pair of 74GB Western Digital Raptor 10,000 RPM SATA drives (which I've configured as a RAID 0 striped set). The cost of the box ? £289 inc VAT and carriage and 6 month warranty. I had to buy an additional 2Gb of memory from Crucial which added another 100 quid and when surfing around ebay I caught sight of a XFX NVidia 7900GTX PCIe video card for just 115 quid. So all in all for a grand total of a shade over 500 quid I've ended up with a reasonably powerful desktop. The chassis on this thing is impressive too. It's fabricated out of chunky steel and stuff like the drive enclosures/mountings and side panels don't make ownership of a philips screwdriver mandatory to get inside to perform upgrades etc. It's way better built than it's predecessor the 370 which seemed to be a Dell experiment in how much metal they could replace with bendy plastics. Ok it's maybe last years tech and it's not 64bit or dual core or any of the funky new core duo stuff that's out now, but it'll run Vista quite happily and host multiple Virtual Machines without sweating it too much. And finally, when that box was new (last February, the service tag lookup indicates a shipping date of 2/2/06) it probably retailed for around £1400 so all in all....bargain!
It's been a while since I posted a show playlist and should keep doing it each week because I often get asked "what was that track you played three weeks ago?". Anyhoo here's what got played last week: My Latest Novel - When We Were Wolves The Fall - I Can Hear The Grass Grow Midlake - Roscoe Soft Machine - Why Am I So Short Soft Machine - So Boot If At All Aerogramme - Indiscretion #243 System 7 - Coltrane Groundhogs - Split Part 1 Union of Knives - Operated On Oneida - Distress Boris - Pink Mono - Com(?) Lemon Jelly - Rambling Man Port Royal - Flares Part 2 King Crimson - In The Wake of Poseidon If your flying up the A9 past Pitlochry on a Thursday night then tune into 97.5FM for 3 hours of excellent tunes starting at 9pm with Chris Stanton and then from 10pm for Eric and myself. You can catch the station in Perth as well and the local taxi driver says he even gets the station when driving up the hill out of Inverness!
I'm pretty much regarded as Mr PC support guy for most of my family and friends and this tool is the mutts nuts for doing support when a phone call just isn't cutting it. For example, do you really want to ask your family member or pal to run RegEdit? nah, one slip of the finger, one critical registry key deleted and you're in a world of pain. The other thing you also don't want to be doing is opening up ports on firewalls so you can get remote desktop access, that's just asking for a whole other world of hurt. Enter Copilot from Fog Creek. This is a really handy remote assistance tool that doesn't require you to mess with pesky firewall ports so you can get access to your family member's desktop. I've used it a few times now and have a Pay as You Go Plan setup because it's so handy. Go have a look and see for yourself. 10/10.
I don't have much call for colour printing, so I bought a plain old black and white laser instead. It cost me about GBP170.00 at the end of 2004 and it's been a valiant workhorse in my office ever since. Two years and approximately 3000 pages later the toner low warning light came on, although the print quality is still excellent. A replacement toner cartridge including VAT + carriage set me back GBP42.00. That's two years of really economic high quality black and white printing (I even ran it with the toner economy mode turned off). If I still had the HP inkjet I'd have been changing the black ink cartridge every ream (500 sheets) of paper at GBP25.00 a pop. If you do a heap of b/w printing then a decent laser like the Brother HL5140 will spit out 16-20 ppm, has a resolution of 600 DPI, has a decent size paper cartridge (~250 sheets I think) and its running costs, even within the first two years, will be a fraction of an inkjet under similar use. Just out of interest I printed off the printer's self test/status page and fuser still has ~77000 pages of life left, the drum has ~17000 pages to go and it only paper jammed 3 times This thing will still be going strong long after most folk will have replaced their cheapy ink guzzling inkjets three times over. 10/10. Anyway talking of paper jams I found this funny, your mileage may vary - 
My advice here is don't bother, or if you already have, skip to the last couple of scenes to see Nicholas Cage being hobbled and then set alight in the Wicker Man. It's a crying shame the thing wasn't big enough to fit in the rest of the cast and crew, I'd have lit the damn bonfire myself. This is a truly awful remake of this classic movie. Go buy the original. Anthony Schaffer must be flipping in his grave. 0/10.
As much as I regard most Apple products as being overpriced and overly hyped design statements, I gotta say the new iPhone is, at a glance, quite a sexy looking bit of kit and I might even be tempted. That said, I wonder how well it'll stand up to the rigours of life cohabiting with pockets full of change, keys and other such abrasive and scratchy objects folk carry around with them. I also wonder what the battery life is going to be like and whether it'll be a user serviceable item (i.e. can morts replace them without having to send away to a service centre), that would be the clincher for me. I also had a good old chuckle at this this slide captured from the MacWorld 2007 keynote:  "Killer app is making calls" - no shit !?
In my spare room there was a large plastic bag of paperwork which was heading for the incinerator, it was all neatly tied up ready to go. This is what happens when you don't close the door to the spare room properly and you have a couple of kittens with an hour or two to kill before teatime: 
Just noticed I got tagged by Spence on the '5 Things You Didn't Know About Me' meme that's been doing the rounds. So here's my bit of trumpet blowing - 1. I don't have a CS degree or any sort of higher education qualification to my name. I left high school in 1985 after finishing 6th year with 9 'O' grades (I flunked my 5 highers two years in a row - something to do with the BBC Micro my folks got me when I was 16 I think, but I did learn 6502 assembler inside out and how to program 6522 VIA's - didn't help a hell of a lot with higher chemistry though). The noticeable lack of highers put me at a bit of a disadvantage when it came to choosing computer related further education. To cut a long story short, I managed to leave college with no HND due to my distinct lack of interest in 'data processing', punched cards, management accounting, out of date organisational theory and other tired old subjects that belonged in the 70's. That said, I was lucky to to work at the local Data General/PC shop during vacations and picked up a whole bunch of real world skills that got me my first full time programming job in 1989 (Clipper, C and DBase II/III). I've never looked back or regretted my lack of formal academic qualifications. Through hook and by crook, I've managed a field service/tech services team, run a 20,000 sq ft data centre, ridden the crest and trough of the development dot com boom and bust (remember client side java applets? CORBA anyone?), and now I work as a senior dev and ASP.NET security & hosting specialist for a web hosting organisation. 2. Until I was about 16 I actually wanted to do something scientisty. I always had an interest in computers dating back to my introduction to the school Apple II in 1979 but I initially had my sights set on being a chemist or a geologist or an astronomer (even earlier when I was four or five I was gonna be an astronaut, but hell who wasn't?). I still buy New Scientist when there's stuff on the cover about black holes, dark matter and exotic particle physics. 3. Some folk do the rebel roadtrip in their teens, I waited until my 20's. Back then I had a 28" waistline, hair down my back, used to love mosh pits and looked like I shoulda been on the roadcrew for any grungy SubPop label band you might care to mention - Tad, Mudhoney, Superchunk...take your pick. And oddly/annoyingly enough I didn't start smoking until I was 23. The present circumference of my waistline shall remain a secret for the time being though :-). 4. I love music. I've got a reasonable stash of 1500 albums in my MP3 library (and heaps of vinyl that isn't) and in a flush month I can quite happily blow 150-200 notes on CD's. I'm also presenter on a radio show for a local radio station and enjoy introducing the locals and casual passers by to the aural delights of Silver Apples, Comets on Fire, God Speed, The Mars Volta and healthy wads of Krautrock, prog and psychedelia. Sadly I'm no musician but boy can I belt out a face melter on my air guitar :) 5. I'm a procrastinating workaholic. I can fart around for ages at the start of a new project avoiding getting anything definitive or concrete down, and then at some random time in the evening a switch in my brain gets thrown and you'll see me signed into MSN at weird hours whilst I keybash into the dawn. So that's me done and now I tag: Colin William Martin Alistair Mark
I've been trying quit smoking for the last 4 years. Sometimes I get to week 3 or 4, go for a drink (or 3) and magically a smoke pops into existence in my gob. I quit again on New Years day and have been just fine without them. My clothes smell nice again, the house smells good too and my wallet is still laden down with the wad of tenners I took out last week. I haven't even missed the magical fix that those stinky coffin sticks delivered 10 or 15 times a day....until today. Today is very different, today I just want to tear someone a new asshole, turn the cats into oven gloves and pop up to the 24hr garage and wash cars with a petrol hose and matches. Even the NR gum (of which I usually chew just a few pieces a day) doesn't seem to be abating the mood imbalance that I know is just a hump along the road of giving up. But as my work colleague Gary cheerfully pointed out, "Stick with it, cats can be replaced, lungs can't". Grrrr!
Every now and again I have to dip my toes into the world of Apache, PHP, Perl and MySQL. I'm mostly a windows/.NET guy these days and I find it a tad difficult remembering all the incantations and dance steps all this stuff needs to get up and running on my Windows box because of its infrequent use and my sieve like memory. This happened last night when an old mate of mine phoned up in a bit of a panic about his PHP based website not working just as it should. After farting around for ages getting PHP to work on IIS 6, getting it to load it's mysql libs (unsuccessfully) etc etc, another mate (Colin) pointed out XAMPP. XAMPP (http://www.apachefriends.org/en/xampp.html) is a handy sized distro of all of these bits that can be fired up on demand (in a manner not unlike InstantRails) with minimal frigging around. Granted there's five minutes needed to fine tune Apache and PHP but once sorted set the whole lot is nicely sandboxed away from interfering with my day to day windows dev stuff. How handy.
Way back in the mists of time I wrote my first article on this blog which was about the identity under which the Application_Start() event executed under when it fired. To recap, when this event fires, it executes under the identity of the worker process account. Even if you are running with impersonation enabled, it will always execute as the worker process identity. Recently we had a couple of support tickets where a customer was experiencing a problem where their DNN installation prompted for a login and when the login was dismissed an exception was thrown along the lines of: Access to the path '<path to site>\Portals\_default\EventQueue\Application_Start--12228d21 -d778-48e1-8209-db7ea3f16a6e.config' is denied. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. It turns out that DNN (4.3 is the oldest version I've looked at so far) spins off a background thread in the Application_Start() event which does a bunch of stuff that requires write access to a DNN website's web folder. The reason why the error only shows itself infrequently is because the ASP.NET application domain needs to shutdown (after a period of inactivity) and then restart before the Application_Start() event is fired again. If you're hosting in a properly configured and secured shared hosting platform then the ASP.NET worker process should only have read access to the site web folder (to monitor for file changes) and only the impersonated anonymous account (unique to your site) will (optionally) have write access to the web folders. Additionally, your ASP.NET 2.0 hosting environment should also be configured to run under Partial Trust (MS have fixed various security related problems related to running ASP.NET under Partial Trust in ASP.NET 2.0 and there is now no excuse for running under Full Trust). Two solutions to this problem have been suggested by the DNN dev team. One is not practical in a high volume shared hosting platform and the other is basically insecure. One of the solutions suggested by the DNN team is to ask your shared hosting company to create a separate Application Pool for each site that needs to run DNN and run these Application Pools under their own unique identities. The unique identity then gets full write access to the DNN web folder. This is not a practical solution because the overhead of one site/one application pool could mean running several hundred application pools (and worker processes). Most hosting companys are going to be running between 1 to 20 application pools depending on the level of protection/isolation they feel is necessary for the type and value of the shared hosting plan offered. Another solution proposed by the DNN team is a potential security hole. If your hosting company is unable to provide a separate application pool they suggest asking your hoster to enable write access for the worker process account. This is a recipe for disaster because another user on the server could possibly call RevertToSelf(), undo impersonation (and thus execute under the worker process identity) and then begin hunting for other websites with write permissions assigned to the worker process identity. I'm still left frustrated and gobsmacked at the number of software vendors that still don't get ASP.NET security and ASP.NET security in shared hosting platforms in particular. I'm sure the reason why the DNN guys expect the Application_Start() event to be able to fire up a thread to perform tasks that require write access is because they have their own dedicated box where they can make all sorts of tweaks to suit themselves, or the shared hosting platforms they tested against are running badly configured and secured ASP.NET 2.0 environments.
Got me one of these -  Rather nice cross between PDA and phone.
|