Black Diversity in IT and Computer Science
If you haven’t had a chance to read Why Black Nerds are Unpopular by David Adewumi, you should run over there right now. It gives an interesting cultural explanation for why the author believes we don’t see many African Americans in IT / Computer Science. It’s the inspiration for this post, a sort of state of the world of black diversity in IT. In his article, David writes how few of his black friends are “nerds:”
I would say, as a young black male, there is a strong inverse correlation between being a nerd and black, and being popular. I’ve seen many black friends who are fairly intelligent that were mediocre students in high school, and either failed out or were equally mediocre at the University level. Why? Popularity is, as Paul mentions, often times a choice of priorities — some sacrifice intelligence for popularity — and for blacks, this probably happens for 9 out of every 10.
I would go so far as to say that the lack of black nerds is probably a cause for major concern, but within the scope of this writing, possibly too large a problem to properly address, although certainly an interesting one.
After some Googling, I was able to find data from the National Science Foundation (NSF), Science and Engineering Degrees, by Race/Ethnicity of Recipients: 1995-2004, with information about degree recipients partitioned by self-identified race:

In 2004, 5,934 black students out of 57,405 total (10.33%) received undergraduate degrees in computer science. Overall, among all degrees, 4.84% of black students chose a degree in Computer Science as opposed to just 3.15% of white students. I don’t have enough personal or intellectual background to discuss these figures, but to my uninformed eye, they look quite promising. More blacks (by percentage) are choosing to study Computer Science than whites (our baseline majority in the US). And, while at 8.4% black undergraduate students feel underrepresented, the news indicates graduation rates are improving.
America needs to moving forward on providing excellent education to all Americans, not just the privileged majority. Perhaps our next President–who looks to be Barack Obama–will be tougher on education than his “no child left behind” predecessor and we’ll see these numbers get even better.
Mint.com Review: Personal Finance Manager
I signed up for Mint.com, a personal finance manager, and I thought I’d post my reactions here. First, let’s walk through the process. You fill in your email address and passwords, and then almost immediately begin filling in sign-in information for the online banking service you use. The GUI is fast and intuitive:

Within minutes, Mint has pulled the most recent 132 transaction from four credit cards, a checking account, and paypal. They support hundreds of different accounts, from banking checking and savings, credit cards, macys and other store cards, as well as investment accounts. In the near future, they will support student loan accounts as well!
Yes, this is scary, but Mint claims they can keep you safe by not storing your banking login information themselves:
We ask for your online banking user name and passwords, but we do not see or store that information. That means no one at Mint, and no potential hackers of Mint.com, can access your banking credentials. Your online banking credentials are stored only with these institutions enabling Mint to automatically and securely update your transactions and saving you from updating, syncing or uploading financial information manually. All communication between Mint and its online financial service providers is encrypted using 128–bit SSL encryption, the financial industry standard for data protection.
The next step is to classify and review your transactions. Mint lets you put them in buckets–and naturally it will get a few wrong to start with–but you can set up rules to classify new transactions how you like. For example, I set one that sets any cheques with the amount of my rent to go into the rent bucket:

By doing this, you let them do some analysis on your spending or earning trends. Note, the trends feature appears to update daily, not in real time, so if you classify a bunch of transactions, it won’t update the trends page with your new categorization for some time. This is unfortunate, but probably necessary. This lets them make, say, a graph of your spending v.s. the average NY spender:


I guess I need to spend more money at Amazon and Best Buy to fit in these days. Lastly, there is their “ways to save” page, which is basically targeted affiliate ads with various banks. This is their revenue stream–getting you to sign up for new credit cards and open new accounts–so don’t trust anything it says:

The verdict? I love it, and I think it’s only going to get better. This is the new world, and services like Mint can make our lives infinitely easier! Please share your opinions about Mint.com, if you’ve ever experienced fraud after signing up, etc, below.
Update: There are some good reviews out there, too. PC Magazine says “Mint.com is a useful, intelligent, and free financial Web service that’s simple to set up and tracks your monetary life with little intervention on your part,” while Viewpoints has a single review which calls it “One of the best free money trackers on the Internet” and Girls Just Wanna Have Funds praises it for costing $50 less than MS Money.
How To Analyze Windows XP BSOD Minidump Files
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:

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:
- WinDbg - A windows debugger
- 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 availableSymbol 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 -yargument 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:

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 memoryDebugging Details:
——————
WRITE_ADDRESS: f78ab980
CURRENT_IRQL: 2FAULTING_IP:
nt!memcpy+130
804dab68 89448ffc mov dword ptr [edi+ecx*4-4],eaxCUSTOMER_CRASH_COUNT: 1
DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0xA
PROCESS_NAME: iexplore.exe
LAST_CONTROL_TRANSFER: from b0d2a3be to 804dab68STACK_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 0xb11bfd54STACK_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.
MPAA Needs No Evidence To Sue You
The following remark was made by Marie. L. van Uitert, MPAA attorney in the Jammie Thomas trial. She wrote in a brief:
It is often very difficult, and in some cases, impossible, to provide such direct proof when confronting modern forms of copyright infringement, whether over P2P networks or otherwise; understandably, copyright infringers typically do not keep records of infringement. Mandating that proof could thus have the pernicious effect of depriving copyright owners of a practical remedy against massive copyright infringement in many cases.
The rest of the brief goes on to list the reasons why the MPAA feels it should not have to meet the full burden of proof in its case (i.e. proving actual distribution). For them, the existence of a location where the copyright material could be copied is sufficient grounds for prosecution. When you take this off the internet, this is equivalent to suing some for 12 * $150,00 for loaning someone a CD they later copied.
For more coverage, see Wired and TorrentFreak.
Using the ImageShack XML API
If you wanted to start a free photo uploading site, but didn’t want to pay the fixed storage and bandwidth costs of Amazon’s S3 or another CDN service, you might be interested in the free ImageShack API. Currently, it allows you to upload a photo to the ImageShack service, and get back the image’s size, a photo URL, and a thumbnail URL. You can access their API by using a simple ImageShack php class:
class ImageShack
{
var $is_url = “http://www.imageshack.us/index.php”;
var $is_result = false;
var $is_result_parsed = false;
public function upload( $file )
{
// send the image to ImageShack
$ch = curl_init($this->is_url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 240);
curl_setopt($ch, CURLOPT_POSTFIELDS, array( ‘xml’=>‘yes’, ‘fileupload’=>‘@’.$file ));
curl_setopt($ch, CURLOPT_HTTPHEADER, array( ‘Expect: ’ ));
$this->is_result = curl_exec($ch);
curl_close($ch);
// Parse the result
$this->parse();
}
public function get_image_url()
{
return $this->get( “image_link” );
}
public function get_thumb_url()
{
return $this->get( “thumb_link” );
}
public function get_done_page()
{
return $this->get( “done_page” );
}
public function get_resolution()
{
return $this->get( “resolution” );
}
public function get_size()
{
return $this->get( “filesize” );
}
private function get( $key )
{
if( !$this->is_result_parsed )
return false;
return( $this->is_result_parsed[ $key ] );
}
private function parse()
{
if (strpos($this->is_result, ‘<’.‘?xml version=”1.0″ encoding=”iso-8859-1″?>’) === false)
$this->is_result_parsed = false;
$xmlData = explode(“\n”,$this->is_result);
$xmlr = array();
foreach($xmlData as $xmlDatum){
$xmlDatum = trim($xmlDatum);
if($xmlDatum != “” && !eregi(“links”,$xmlDatum) && !eregi(“xml”,$xmlDatum)){
$xmlDatum = str_replace(“>”,“<”,$xmlDatum);
list($xmlNull,$xmlName,$xmlValue) = explode(“<”,$xmlDatum);
$xmlr[$xmlName] = $xmlValue;
}
}
$this->is_result_parsed = $xmlr;
}
}
Accepting file uploads in PHP is almost trivial. You just need a form on a web page somewhere with multipart encoding, such as:
<form enctype="multipart/form-data" id="uploadform" method="post" action="http://example.com/path/to/upload">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576">
<input id="anchor_file" type="file" name="files[]" />
<input type="submit" value="" id="submitimages" name="submitimages" />
</form>
On the server side, you need to iterate through the special $_FILES array in PHP:
for($i = 1; $i < count($_FILES[’files’][’name’]); $i++){
$error = $_FILES[’files’][’error’][$i];
if($error !== 0) break;$data = array(
’name’ => $_FILES[’files’][’name’][$i],
’temp’ => $_FILES[’files’][’tmp_name’][$i],
’size’ => $_FILES[’files’][’size’][$i]
);// do something with $data now, like upload it to ImageShack
}
With these bits, it’s easy to write a wraparound interface to ImageShack. In the future, I hope their API also includes being able to query for photos, comments, and ratings after uploading; at the moment I see now way to do that.

