Elliott C. Back: Technology FTW!

Windows 7 Wallpaper Download (Official)

Posted in Graphics, Microsoft by Elliott Back on November 9th, 2008.

I think that I found the official wallpapers that are going to be used in Windows 7, whenever Microsoft gets around to releasing it! They’re quite pretty, and quite high-res. Take a look, and let me know what you think:

It’s almost like they took cues from Apple with these, which are smooth gradients and curves. No more boxy Windows in Windows 7! Update: I got these from somewhere else, but reader Skidzopedia has a download link.

Animated Gif Stops with Javascript / Click?

Posted in Browsers, Code, Interface, Javascript, Microsoft by Elliott Back on November 3rd, 2008.

If you’ve ever tried to get an animated .gif file to continue playing in IE after a link is clicked, javascript runs for a form submit, or the window.location is set to a new URL, then you’ve probably already gone through the phases of frustration, and come straight to Google.

Here’s the setup. You’ve got a piece of javascript redirecting the user on a click (yes, I know this is a bad idea). Hopefully you got this from a legacy app:

<script language="javascript"><!--
function go(href) {
     $('spinner').style.display = '';
     location.href = href;
}
//--></script>
<a href="defaultAction.htm" onClick="go(this.href);return false">go</a>

Internet Explorer stops animated gifs when there is a javascript event, so if you try this code, it’s going to fail dramatically. What you need (for IE6 and IE7) is a hack:

<script language="javascript"><!--
function go(href) {
     $('spinner').style.display = '';
     location.href = href;
     $('spinner').src = $('spinner').src;
}
//--></script>
<a href="defaultAction.htm" onClick="go(this.href);return false">go</a>

Yes, reassigning the src attribute of an img will cause the image to keep animating, even when in the process of loading the next page. Note–this doesn’t work as well in Firefox. For that, you should either (a) upgrade the application to load data through AJAX, not URL redirection, or (b) use an iframe pointing to the image.

PS, if you need some ajax loading indicators, there’s a bunch!

Windows XP Sucks

Posted in Errors, Microsoft, Windows XP by Elliott Back on August 6th, 2008.

This lovely error screen, a window randomly drawn multiple times across the screen, cloned to hell, is a reason why I dislike the Microsoft Windows XP operating system:

windows-xp-sucks.jpg

As abstract art, though, I think it might get decent reviews!

How To Analyze Windows XP BSOD Minidump Files

Posted in Computers & Technology, Hardware, Microsoft, Windows, Windows XP by Elliott Back on July 1st, 2008.

If you’ve been getting a lot of BSOD (Blue Screen Of Death) in Windows XP, the Windows debugging tools can help you find out what’s wrong with your computer. In this guide, we’ll walk you through what you need to do to analyze the minidump files that DrWatson leaves behind when Windows crashes.

First, you need to turn on debugging information in Windows. Right click on My Computer, select Properties, and click on the Advanced tab, and click on the Settings button under Startup and Recovery. You’ll see a screen like this:

startup-and-recovery.png

You want to have the “Small Memory Dump” and “Small dump directory” fields filled in. If they’re already setup that way, great. If not, change them, restart, and wait for a BSOD stop error to occur so that you can investigate the problem.

Second, now that you have the memory dump files in C:\WINDOWS\Minidump\Mini???????-??.dmp, you need software from Microsoft to read and interpret them. Download:

  1. WinDbg - A windows debugger
  2. Windows XP SP2 Symbols - A system “dictionary”

Some people try to debug their system might get an error like this:

d -z Mini062808-01.dmp

Microsoft (R) Windows Debugger Version 6.9.0003.113 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Loading Dump File [Mini062808-01.dmp]
Mini Kernel Dump File: Only registers and stack trace are available

Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path. *
* Use .symfix to have the debugger choose a symbol path. *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
*********************************************************************
* Symbols can not be loaded because symbol path is not initialized. *
* *
* The Symbol Path can be set by: *
* using the _NT_SYMBOL_PATH environment variable. *
* using the -y argument when starting the debugger. *
* using .sympath and .sympath+ *
*********************************************************************
Unable to load image ntoskrnl.exe, Win32 error 0n2
*** WARNING: Unable to verify timestamp for ntoskrnl.exe
*** ERROR: Module load completed but symbols could not be loaded for ntoskrnl.exe
Windows XP Kernel Version 2600 (Service Pack 2) UP Free x86 compatible
Product: WinNt, suite: TerminalServer SingleUserTS Personal
Kernel base = 0×804d8000 PsLoadedModuleList = 0×8055b620
Debug session time: Sat Jun 28 22:05:53.137 2008 (GMT-4)
System Uptime: 0 days 4:01:15.706

This error can be fixed by installing the Windows XP SP2 symbols pack above, or another Microsoft symbols pack.

Third, open up WinDbg by clicking Start, Programs, Debugging Tools for Windows (x86), and then WinDbg. You need to set the symbol path to wherever you installed the Windows symbols in the last step. You can do this from File then Symbol File Path, where you want to paste SRV*c:\windows\symbols*http://msdl.microsoft.com/download/symbols:

symbol-file-path.png

Finally, you just need to open a dump file from File, Open Crash Dump, and at the prompt type !analyze -v. You’ll then see output like the following:

!analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************

IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an interrupt request level (IRQL) that is too high. This is usually caused by drivers using improper addresses. If a kernel debugger is available get the stack backtrace.

Arguments:
Arg1: f78ab980, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000001, bitfield :
bit 0 : value 0 = read operation, 1 = write operation
bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 804dab68, address which referenced memory

Debugging Details:
——————
WRITE_ADDRESS: f78ab980
CURRENT_IRQL: 2

FAULTING_IP:
nt!memcpy+130
804dab68 89448ffc mov dword ptr [edi+ecx*4-4],eax

CUSTOMER_CRASH_COUNT: 1
DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0xA
PROCESS_NAME: iexplore.exe
LAST_CONTROL_TRANSFER: from b0d2a3be to 804dab68

STACK_TEXT:
f78a9dc4 b0d2a3be f78ab980 8a1f8107 00000006 nt!memcpy+0×130
WARNING: Stack unwind information not available. Following frames may be wrong.
f78aa29c b0d2a640 8a204000 8a1f8008 8a1f800e w70n51+0×2a3be
f78aac00 b0d0b11a 8a204000 89cd6fd8 89cd628c w70n51+0×2a640
f78aae30 b0d20abe 89cd6000 f78aae44 8a01c3a0 w70n51+0xb11a
f78aae4c b0d1d037 89cd6000 89b7e000 00000001 w70n51+0×20abe
f78aaf3c b0d1c77b 8a060658 89f328d0 f78aaf84 w70n51+0×1d037
f78aaf90 b0d1dcf6 89cd6000 f78aafab f78aafd0 w70n51+0×1c77b
f78aafac b0d1de4b 89cd6000 f78aafd0 f7445f09 w70n51+0×1dcf6
f78aafb8 f7445f09 89cd6000 8a127528 8a12778c w70n51+0×1de4b
f78aafd0 804dcbd4 89cd62a0 89cd628c 00000000 NDIS!ndisMDpcX+0×21
f78aaff4 804dc89e b11bfd54 00000000 00000000 nt!KiRetireDpcList+0×46
f78aaff8 b11bfd54 00000000 00000000 00000000 nt!KiDispatchInterrupt+0×2a
804dc89e 00000000 00000009 bb835675 00000128 0xb11bfd54

STACK_COMMAND: kb

FOLLOWUP_IP:
w70n51+2a3be
b0d2a3be ?? ???

SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: w70n51+2a3be
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: w70n51
IMAGE_NAME: w70n51.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 3ee71b51
FAILURE_BUCKET_ID: 0xA_W_w70n51+2a3be
BUCKET_ID: 0xA_W_w70n51+2a3be
Followup: MachineOwner
———

In this particular case, we’re debugging a Dell Inspiron 5150 which has been recently having sporadic hard crashes. The bluescreen message it got, Stop 0×0000000A or IRQL_NOT_LESS_OR_EQUAL, is almost always an indication of a driver error. Googling for w70n51.sys (from the crash dump) shows it to be Intel PRO/Wireless LAN 2100 3B Mini PCI adapter software, which should be updated to resolve the bluescreens.

Bury that lede - What Windows Designers don’t know about UI

Posted in Interface, Microsoft by Elliott Back on April 5th, 2008.

Flow|state, a user interface design blog, recently ragged on the Windows Vista file copy dialog for obscuring important information about the files it’s copying. Specifically, Vista warns about files with the same name, and asks you what you want to do with them:

moving-a-file-in-windows-vista.png

Can you see the disaster in progress? Most users can’t either.

This dialog has buried the lede. It focuses the user’s attention on the fact that there is another file with the same name in the destination folder. It fails to point out a much, much more interesting condition: The user is about to overwrite a newer file with an older file.

So he suggests the dialog read “There is a newer file with the same name in this location,” increasing the number of recognizable file attributes from one, the file name, to two. What other kind of file attributes are there? I can list a few:

  • Path (implied)
  • Name (explicit)
  • Date created / modified / accessed (suggested)
  • Size
  • Type
  • State
  • Permissions
  • Ownership
  • File System
  • Mount

I think these are all equally important attributes. By flow|state’s logic, the dialog should really read “There is a newer, substantially larger file with the same name in this location. The current file is a video, but your new file is music owned by a different user, your mom.” This is obviously ridiculous.

The best way to do this is what linux does–just move the file. If you want to get clever, use a command pattern to make it reversible.

Next Page »