<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32439350</id><updated>2011-04-21T16:10:36.303-07:00</updated><title type='text'>Drew: The Security Geek</title><subtitle type='html'>Bloggin' about being a security geek, testing, and my trials and tribulations at my new company, Essential Security Software.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>33</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32439350.post-116539862505578977</id><published>2006-12-06T01:42:00.000-08:00</published><updated>2006-12-06T01:50:25.056-08:00</updated><title type='text'>Note to Self</title><content type='html'>I should probably also post about a bug's (or in &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;Joel's terms&lt;/a&gt; "a case's") lifecycle, too. I sent out an email internally at work a while ago but I should probably follow up on that and post it for the intarweb to see, too.&lt;br /&gt;&lt;br /&gt;I'll try to cover what fits my work environment and also what is generally true elsewhere.&lt;br /&gt;&lt;br /&gt;I can find so many things to talk about to avoid trying to explain how the &lt;a href="http://safari.oreilly.com/0789728672/ch13lev1sec6"&gt;SRM&lt;/a&gt; works in Windows kernel-land, can't I? I've tried a couple of drafts, but it's not easy to just give the basic info instead of trying to explain the whole geeky picture. I obviously don't have the gift of technical writing. :-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116539862505578977?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116539862505578977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116539862505578977' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116539862505578977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116539862505578977'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/12/note-to-self.html' title='Note to Self'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116539762241225159</id><published>2006-12-06T00:57:00.000-08:00</published><updated>2006-12-06T01:33:42.443-08:00</updated><title type='text'>Bug vs Feature</title><content type='html'>I recently read &lt;a href="http://jobs.joelonsoftware.com/default.asp?982"&gt;this&lt;/a&gt; and was appalled. Why would any company intentionally seek out testers who enjoyed "a good debate about whether something is a 'feature' or a 'bug'"? (Neverminding that the OP's final quoted remark didn't actually ever have end quotes. And also never mind &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/12/strongly-considering-resigning-and-bit.html#links"&gt;why I was looking at that&lt;/a&gt; - just keeping my options open, but I'm way too stubborn to quit my current job yet.) What a *total* waste of time. I'd rather have someone on my team whose hobby was counting ceiling tiles. At least that's meaninful. To someone. I would guess.&lt;br /&gt;&lt;br /&gt;Much to my &lt;a href="http://www.chagrin-falls.org/"&gt;chagrin&lt;/a&gt; (or in the case of the link, Ohio's), I'm in that situation now, though. I sat in a meeting with person X who claimed that to his/her mind a "bug" is something that takes a little time to fix and a "feature request" is something that takes more time. I'm beginning to wonder where American (in this case) software engineers learn to speak English.&lt;br /&gt;&lt;br /&gt;If you're playing along at home, please use your own &lt;a href="http://www.google.com/"&gt;Google-fu&lt;/a&gt; to verify these common definitions as they apply to software:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Software_bug"&gt;bug&lt;/a&gt; - a software defect&lt;br /&gt;&lt;br /&gt;feature request - I'm gonna have to break this down a little. It's evidently not immediately obvious. A feature is &lt;a href="http://www.google.com/url?sa=X&amp;start=0&amp;amp;oi=define&amp;ei=bIp2RbG3PNC0YYbszL0E&amp;amp;sig2=MZjamdSCs_7S29zDKSsNmw&amp;q=http://wordnet.princeton.edu/perl/webwn%3Fs%3Dfeature&amp;amp;usg=__Rl-xp39-TX8NABrEkzgo3YNjYmk="&gt;a prominent aspect of something&lt;/a&gt;. Hmm. Not a very solid definition. Google-fo doesn't really get me much in the way of a meaty definition for "feature request" or "software feature". I guess I'll just try to make up a definition. Clearly a feature isn't a bug, right? So a feature request IMO is a request for a design change. Further, it must be not because of a defect in the software or the design. It's a request for extra originally unintended functionality. E.g. "Please make my blender also function as an AM/FM radio so that I can blend tasty smoothies while I listen to my favorite morning shock jocks."&lt;br /&gt;&lt;br /&gt;I'm not even going to touch the "is it a bug or a feature" debate. The only important question there is "what's best for the customers?" and if there's enough data there should be no argument.&lt;br /&gt;&lt;br /&gt;So I've put off my screed on (the next links mostly suck - don't bother) &lt;a href="http://www.teamapproach.ca/admin/DACL.htm"&gt;DACLs&lt;/a&gt;/&lt;a href="http://msdn.microsoft.com/library/en-us/secauthz/security/sacl_access_right.asp?frame=true"&gt;SACLs&lt;/a&gt;/&lt;a href="http://www.oreilly.com/pub/h/1466"&gt;MACLs&lt;/a&gt; and also &lt;a href="http://www.informit.com/guides/content.asp?g=windowsserver&amp;seqNum=233"&gt;MIC&lt;/a&gt; (new in Vista, though the idea's been around for a while) until next time. Unless I get sidetracked again.&lt;br /&gt;&lt;br /&gt;Actually, I might get sidetracked. I think I might need to explain threat modeling and even more so the terminology used ("threat", "&lt;a href="http://weblogs.asp.net/rhurlbut/archive/2005/11/15/430662.aspx"&gt;DREAD rating&lt;/a&gt;", &amp;amp;c.). I keep running into "define that term" roadblocks at work. Rather than invest in dead trees, I think I might blog it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116539762241225159?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116539762241225159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116539762241225159' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116539762241225159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116539762241225159'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/12/bug-vs-feature.html' title='Bug vs Feature'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116505665378111281</id><published>2006-12-02T02:05:00.000-08:00</published><updated>2006-12-02T02:50:53.800-08:00</updated><title type='text'>Strongly Considering Resigning . . . (and a bit of swearing)</title><content type='html'>(No linkies in this one. I'm too pissed off to bother. Next up (really) - a little more on the NT object manager and an intro to security descriptors/ACLs.)&lt;br /&gt;&lt;br /&gt;Ick!&lt;br /&gt;&lt;br /&gt;After recent work experiences I'm very strongly considering resigning. (No - really. Very seriously. And wondering where I could go right now.) And wondering why I didn't apply for that Principal QA job at Symantec. Damn. That's right up my alley. And in the bay area no less. I'm such a sucker.&lt;br /&gt;&lt;br /&gt;It doesn't seem to matter how many bugs I file. Nobody fixes them. (That's an exaggeration - out of the 100+ bugs open against our last release 2 or maybe 3 were fixed. The rest were punted to our new release. Forgive me please for exaggerating.) Even when I explain in *great* detail how to fix (step by step how to goddamned write the code) the bugs nobody bothers. Why do I do it? I really don't know any more.&lt;br /&gt;&lt;br /&gt;It doesn't seem to matter when I find serious security holes in our product. I guess they'll be fixed in version 2.x . . . Maybe. If the customers are lucky. Or if that ever ships. I can only hope that customer X (that I don't think I can mention yet) *demands* a higher quality of crap than the current ESS anus spews. Maybe then quality will matter . . .&lt;br /&gt;&lt;br /&gt;It also doesn't even seem to matter when I point out to our IT guy that one of our public-facing servers have *many* known vulnerabilities, at least one of which allows any unauthenticated attacker to shove arbitrary data onto the stack and overflow it. *grumble* That's almost surely exploitable and would give the attacker root on the box in our case. Worse yet, I hear that all of the accounts used to attach to those boxen use same/similar passwords. Our entire extranet is compromised. And maybe our intranet, too. Who's losing sleep over this? Maybe only I am. Goodbye, my sleep!&lt;br /&gt;&lt;br /&gt;I'm this far from writing 'sploit code so that someone will listen to me: '-----'&lt;br /&gt;&lt;br /&gt;I don't believe in ever writing 'sploit code. Ever. That's not only illegal (unless contractual and even then iffy) but immoral. But I'm at the point that I'm not sure how else anyone would ever listen to me when I say "this is a bug - please fix it ASAP".&lt;br /&gt;&lt;br /&gt;Damn. Sometimes it sucks to be a (the only?) security geek at a "security" company. At an alleged "security" company, that is. Working on an alleged "security" product.&lt;br /&gt;&lt;br /&gt;:-(&lt;br /&gt;&lt;br /&gt;Shit! Part of me misses Microsoft . . .&lt;br /&gt;&lt;br /&gt;(P.S. For anyone reading this internally at ESS, there are bugs filed. I can provide links if you can't find them.)&lt;br /&gt;&lt;br /&gt;(P.P.S. Ray - about that alleged penetration tester who tried to attack us - EVERYONE who wants to take over a box knows about the app I used - it's been around forever. Please please please let me know what he tried. I think whatever it was it's severely lacking. I finally tried the most obvious test and found ways to break into all of out public-facing servers. This is *scary*.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116505665378111281?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116505665378111281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116505665378111281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116505665378111281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116505665378111281'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/12/strongly-considering-resigning-and-bit.html' title='Strongly Considering Resigning . . . (and a bit of swearing)'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116494533030196384</id><published>2006-11-30T19:49:00.000-08:00</published><updated>2006-11-30T20:31:42.343-08:00</updated><title type='text'>File under: What WebSVN should have shipped with for Windows.</title><content type='html'>(Edit: adding links)&lt;br /&gt;&lt;br /&gt;I recently deployed &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;FogBugZ&lt;/a&gt; and got it integrated with my company's &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; server. A piece of this was installing &lt;a href="http://websvn.tigris.org/"&gt;WebSVN&lt;/a&gt; so that the &lt;a href="http://www.fogcreek.com/FogBugz/docs/40/Articles/SourceControl/TortoiseSVN.html"&gt;cool automagically-appearing links to sources and diffs&lt;/a&gt; would take users to useful web pages. I noticed the other day when I tried to diff versions of an RTF file that I got all kinds of formatting goo in my diff. That didn't make me happy. The solution was to &lt;a href="http://svnbook.red-bean.com/en/1.2/svn.advanced.props.html"&gt;set the svn:mime-type property&lt;/a&gt; on non-text files in our repository.&lt;br /&gt;&lt;br /&gt;In the interests of community, I give you my batch file to automate those changes. It doesn't do the &lt;a href="http://svnbook.red-bean.com/en/1.1/re06.html"&gt;svn commit&lt;/a&gt; - you'll have to do that yourself or modify the batch file.&lt;br /&gt;&lt;br /&gt;If anyone knows how to automatically have this happen on new files (autoprops is a per-client setting in the config file), please let me know.&lt;br /&gt;&lt;br /&gt;----------snip----------&lt;br /&gt;&lt;br /&gt;@echo off&lt;br /&gt;'&lt;br /&gt;' This batch file adds svn:mime-type properties on non-text files.&lt;br /&gt;'&lt;br /&gt;' NB: The lines with file extension and mime types must start with two apostrophes&lt;br /&gt;' and must have spaces between the apostrophe and the extension and between the extension&lt;br /&gt;' and the mime type.&lt;br /&gt;'&lt;br /&gt;' Drew 11/30/06&lt;br /&gt;'&lt;br /&gt;'' 323 text/h323&lt;br /&gt;'' acx application/internet-property-stream&lt;br /&gt;'' ai application/postscript&lt;br /&gt;'' aif audio/x-aiff&lt;br /&gt;'' aifc audio/x-aiff&lt;br /&gt;'' aiff audio/x-aiff&lt;br /&gt;'' asf video/x-ms-asf&lt;br /&gt;'' asr video/x-ms-asf&lt;br /&gt;'' asx video/x-ms-asf&lt;br /&gt;'' au audio/basic&lt;br /&gt;'' avi video/x-msvideo&lt;br /&gt;'' axs application/olescript&lt;br /&gt;'' bcpio application/x-bcpio&lt;br /&gt;'' bin application/octet-stream&lt;br /&gt;'' bmp image/bmp&lt;br /&gt;'' cat application/vnd.ms-pkiseccat&lt;br /&gt;'' cdf application/x-cdf&lt;br /&gt;'' cer application/x-x509-ca-cert&lt;br /&gt;'' class application/octet-stream&lt;br /&gt;'' clp application/x-msclip&lt;br /&gt;'' cmx image/x-cmx&lt;br /&gt;'' cod image/cis-cod&lt;br /&gt;'' cpio application/x-cpio&lt;br /&gt;'' crd application/x-mscardfile&lt;br /&gt;'' crl application/pkix-crl&lt;br /&gt;'' crt application/x-x509-ca-cert&lt;br /&gt;'' csh application/x-csh&lt;br /&gt;'' css text/css&lt;br /&gt;'' dcr application/x-director&lt;br /&gt;'' der application/x-x509-ca-cert&lt;br /&gt;'' dir application/x-director&lt;br /&gt;'' dll application/x-msdownload&lt;br /&gt;'' dms application/octet-stream&lt;br /&gt;'' doc application/msword&lt;br /&gt;'' dot application/msword&lt;br /&gt;'' dvi application/x-dvi&lt;br /&gt;'' dxr application/x-director&lt;br /&gt;'' eps application/postscript&lt;br /&gt;'' etx text/x-setext&lt;br /&gt;'' evy application/envoy&lt;br /&gt;'' exe application/octet-stream&lt;br /&gt;'' fif application/fractals&lt;br /&gt;'' flr x-world/x-vrml&lt;br /&gt;'' gif image/gif&lt;br /&gt;'' gtar application/x-gtar&lt;br /&gt;'' gz application/x-gzip&lt;br /&gt;'' hdf application/x-hdf&lt;br /&gt;'' hlp application/winhlp&lt;br /&gt;'' hqx application/mac-binhex40&lt;br /&gt;'' hta application/hta&lt;br /&gt;'' htc text/x-component&lt;br /&gt;'' htm text/html&lt;br /&gt;'' html text/html&lt;br /&gt;'' htt text/webviewhtml&lt;br /&gt;'' ico image/x-icon&lt;br /&gt;'' ief image/ief&lt;br /&gt;'' iii application/x-iphone&lt;br /&gt;'' ins application/x-internet-signup&lt;br /&gt;'' isp application/x-internet-signup&lt;br /&gt;'' jfif image/pipeg&lt;br /&gt;'' jpe image/jpeg&lt;br /&gt;'' jpeg image/jpeg&lt;br /&gt;'' jpg image/jpeg&lt;br /&gt;'' js application/x-javascript&lt;br /&gt;'' latex application/x-latex&lt;br /&gt;'' lha application/octet-stream&lt;br /&gt;'' lsf video/x-la-asf&lt;br /&gt;'' lsx video/x-la-asf&lt;br /&gt;'' lzh application/octet-stream&lt;br /&gt;'' m13 application/x-msmediaview&lt;br /&gt;'' m14 application/x-msmediaview&lt;br /&gt;'' m3u audio/x-mpegurl&lt;br /&gt;'' man application/x-troff-man&lt;br /&gt;'' mdb application/x-msaccess&lt;br /&gt;'' me application/x-troff-me&lt;br /&gt;'' mht message/rfc822&lt;br /&gt;'' mhtml message/rfc822&lt;br /&gt;'' mid audio/mid&lt;br /&gt;'' mny application/x-msmoney&lt;br /&gt;'' mov video/quicktime&lt;br /&gt;'' movie video/x-sgi-movie&lt;br /&gt;'' mp2 video/mpeg&lt;br /&gt;'' mp3 audio/mpeg&lt;br /&gt;'' mpa video/mpeg&lt;br /&gt;'' mpe video/mpeg&lt;br /&gt;'' mpeg video/mpeg&lt;br /&gt;'' mpg video/mpeg&lt;br /&gt;'' mpp application/vnd.ms-project&lt;br /&gt;'' mpv2 video/mpeg&lt;br /&gt;'' ms application/x-troff-ms&lt;br /&gt;'' mvb application/x-msmediaview&lt;br /&gt;'' nws message/rfc822&lt;br /&gt;'' oda application/oda&lt;br /&gt;'' p10 application/pkcs10&lt;br /&gt;'' p12 application/x-pkcs12&lt;br /&gt;'' p7b application/x-pkcs7-certificates&lt;br /&gt;'' p7c application/x-pkcs7-mime&lt;br /&gt;'' p7m application/x-pkcs7-mime&lt;br /&gt;'' p7r application/x-pkcs7-certreqresp&lt;br /&gt;'' p7s application/x-pkcs7-signature&lt;br /&gt;'' pbm image/x-portable-bitmap&lt;br /&gt;'' pdf application/pdf&lt;br /&gt;'' pfx application/x-pkcs12&lt;br /&gt;'' pgm image/x-portable-graymap&lt;br /&gt;'' pko application/ynd.ms-pkipko&lt;br /&gt;'' pma application/x-perfmon&lt;br /&gt;'' pmc application/x-perfmon&lt;br /&gt;'' pml application/x-perfmon&lt;br /&gt;'' pmr application/x-perfmon&lt;br /&gt;'' pmw application/x-perfmon&lt;br /&gt;'' pnm image/x-portable-anymap&lt;br /&gt;'' pot, application/vnd.ms-powerpoint&lt;br /&gt;'' ppm image/x-portable-pixmap&lt;br /&gt;'' pps application/vnd.ms-powerpoint&lt;br /&gt;'' ppt application/vnd.ms-powerpoint&lt;br /&gt;'' prf application/pics-rules&lt;br /&gt;'' ps application/postscript&lt;br /&gt;'' pub application/x-mspublisher&lt;br /&gt;'' qt video/quicktime&lt;br /&gt;'' ra audio/x-pn-realaudio&lt;br /&gt;'' ram audio/x-pn-realaudio&lt;br /&gt;'' ras image/x-cmu-raster&lt;br /&gt;'' rgb image/x-rgb&lt;br /&gt;'' rmi audio/mid&lt;br /&gt;'' roff application/x-troff&lt;br /&gt;'' rtf application/rtf&lt;br /&gt;'' rtx text/richtext&lt;br /&gt;'' scd application/x-msschedule&lt;br /&gt;'' sct text/scriptlet&lt;br /&gt;'' setpay application/set-payment-initiation&lt;br /&gt;'' setreg application/set-registration-initiation&lt;br /&gt;'' sh application/x-sh&lt;br /&gt;'' shar application/x-shar&lt;br /&gt;'' sit application/x-stuffit&lt;br /&gt;'' snd audio/basic&lt;br /&gt;'' spc application/x-pkcs7-certificates&lt;br /&gt;'' spl application/futuresplash&lt;br /&gt;'' src application/x-wais-source&lt;br /&gt;'' sst application/vnd.ms-pkicertstore&lt;br /&gt;'' stl application/vnd.ms-pkistl&lt;br /&gt;'' stm text/html&lt;br /&gt;'' svg image/svg+xml&lt;br /&gt;'' sv4cpio application/x-sv4cpio&lt;br /&gt;'' sv4crc application/x-sv4crc&lt;br /&gt;'' t application/x-troff&lt;br /&gt;'' tar application/x-tar&lt;br /&gt;'' tcl application/x-tcl&lt;br /&gt;'' tex application/x-tex&lt;br /&gt;'' texi application/x-texinfo&lt;br /&gt;'' texinfo application/x-texinfo&lt;br /&gt;'' tgz application/x-compressed&lt;br /&gt;'' tif image/tiff&lt;br /&gt;'' tiff image/tiff&lt;br /&gt;'' tr application/x-troff&lt;br /&gt;'' trm application/x-msterminal&lt;br /&gt;'' tsv text/tab-separated-values&lt;br /&gt;'' uls text/iuls&lt;br /&gt;'' ustar application/x-ustar&lt;br /&gt;'' vcf text/x-vcard&lt;br /&gt;'' vrml x-world/x-vrml&lt;br /&gt;'' wav audio/x-wav&lt;br /&gt;'' wcm application/vnd.ms-works&lt;br /&gt;'' wdb application/vnd.ms-works&lt;br /&gt;'' wks application/vnd.ms-works&lt;br /&gt;'' wmf application/x-msmetafile&lt;br /&gt;'' wps application/vnd.ms-works&lt;br /&gt;'' wri application/x-mswrite&lt;br /&gt;'' wrl x-world/x-vrml&lt;br /&gt;'' wrz x-world/x-vrml&lt;br /&gt;'' xaf x-world/x-vrml&lt;br /&gt;'' xbm image/x-xbitmap&lt;br /&gt;'' xla application/vnd.ms-excel&lt;br /&gt;'' xlc application/vnd.ms-excel&lt;br /&gt;'' xlm application/vnd.ms-excel&lt;br /&gt;'' xls application/vnd.ms-excel&lt;br /&gt;'' xlt application/vnd.ms-excel&lt;br /&gt;'' xlw application/vnd.ms-excel&lt;br /&gt;'' xof x-world/x-vrml&lt;br /&gt;'' xpm image/x-xpixmap&lt;br /&gt;'' xwd image/x-xwindowdump&lt;br /&gt;'' z application/x-compress&lt;br /&gt;'' zip application/zip&lt;br /&gt;&lt;br /&gt;' If svn.exe isn't in the %path%, bail out.&lt;br /&gt;svn.exe help &gt;nul&lt;br /&gt;if 0 neq %errorlevel% (&lt;br /&gt;echo You must have svn.exe in your path to use this batch file.&lt;br /&gt;goto EOF&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;' The evil for loops that do all the work (including parsing this batch file).&lt;br /&gt;for /f "usebackq tokens=1,2,3" %%i in (`type %0`) do (&lt;br /&gt;if "''"=="%%i" (&lt;br /&gt;for /f "usebackq tokens=*" %%l in (`dir /s /b *.%%j`) do svn ps svn:mime-type %%k "%%l"&lt;br /&gt;)&lt;br /&gt;)&lt;br /&gt;:EOF&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116494533030196384?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116494533030196384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116494533030196384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116494533030196384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116494533030196384'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/11/file-under-what-websvn-should-have.html' title='File under: What WebSVN should have shipped with for Windows.'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116494441966977682</id><published>2006-11-30T19:33:00.000-08:00</published><updated>2006-11-30T19:40:19.680-08:00</updated><title type='text'>A Post Without Substance</title><content type='html'>I keep either forgetting to write something here or I'm too busy/distracted/in need of non-computer-related activity that I've been ignoring my blog. :-(&lt;br /&gt;&lt;br /&gt;So even though I don't have anything of substance to post right now, I thought I'd put this up. It's my latest get rich quick scheme. I was reading &lt;a href="http://www.joelonsoftware.com/items/2006/11/30.html"&gt;Joel's blog&lt;/a&gt; and I found inspiration. Pretend I'm E. F. Hutton. Here we go . . .&lt;br /&gt;&lt;br /&gt;[drumroll]&lt;br /&gt;&lt;br /&gt;I can get rich by &lt;a href="http://www.fool.com/FoolFAQ/FoolFAQ0033.htm"&gt;shorting&lt;/a&gt; spam stock. Not only is it a foolproof investment, but I'll actually have a way to make money *from* annoying spammers! Sweet, eh?&lt;br /&gt;&lt;br /&gt;Am I brilliant or what?&lt;br /&gt;&lt;br /&gt;Yeah. I know: what.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116494441966977682?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116494441966977682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116494441966977682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116494441966977682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116494441966977682'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/11/post-without-substance.html' title='A Post Without Substance'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116296675212301983</id><published>2006-11-07T21:48:00.000-08:00</published><updated>2006-11-07T22:19:12.133-08:00</updated><title type='text'>So Finally Something About Security? The NT Object Model.</title><content type='html'>I keep meaning to start a series abut &lt;a href="http://www.microsoft.com/security/"&gt;security&lt;/a&gt;. At least on Windows (&lt;a href="http://en.wikipedia.org/wiki/Dave_Cutler"&gt;NT family&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;First, I should start by &lt;a href="http://www.microsoft.com/technet/sysinternals/utilities/WinObj.mspx"&gt;explaining the object manager&lt;/a&gt;. Then again, let's let someone else do it. Adrian groks this stuff. Check it out:&lt;br /&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=73995"&gt;http://channel9.msdn.com/ShowPost.aspx?PostID=73995&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(off topic) If you enjoy that you may enjoy Adrian's explanation of the NT heap manager:&lt;br /&gt;&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=207162"&gt;http://channel9.msdn.com/ShowPost.aspx?PostID=207162&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And if you want to kill some trees, I strongly recommend this for anyone into how Windows does its thing:&lt;br /&gt;&lt;a href="http://www.powells.com/biblio?show=HARDCOVER:NEW:0735619174:59.99;show_locs=no"&gt;http://www.powells.com/biblio?show=HARDCOVER:NEW:0735619174:59.99;show_locs=no&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tomorrow: a recap of what to know about the object manager as far as security goes, then an intro to access control lists (ACLs).&lt;br /&gt;Day after tomorrow: I'm planning a dive deeper into ACLs - ACEs.&lt;br /&gt;&lt;br /&gt;Please, someone, give me some feedback if you want to see how this relates to Unix, Unix-based systems (&lt;a href="http://www.linux.org/"&gt;Linux&lt;/a&gt;, &lt;a href="http://www.apple.com/macosx/leopard/index.html"&gt;OSX&lt;/a&gt;, &lt;a href="http://www.freebsd.org/"&gt;etc&lt;/a&gt;.) or to the NT predecessor (&lt;a href="http://www.openvms.org/"&gt;VMS&lt;/a&gt; (link is to Open VMS)).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116296675212301983?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116296675212301983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116296675212301983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116296675212301983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116296675212301983'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/11/so-finally-something-about-security-nt.html' title='So Finally Something About Security? The NT Object Model.'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116183728587625333</id><published>2006-10-25T21:07:00.000-07:00</published><updated>2006-10-25T21:34:45.890-07:00</updated><title type='text'>Put Away the Crayons</title><content type='html'>After that initial blue sky period which I prefer to think of as "&lt;a href="http://images.google.com/imgres?imgurl=http://www.screenselect.co.uk/images/products/screenshots/5/3125-4-large.jpg&amp;imgrefurl=http://www.screenselect.co.uk/visitor/product/3125-Blue-Velvet.html&amp;amp;amp;h=480&amp;w=640&amp;amp;sz=10&amp;hl=en&amp;amp;start=1&amp;tbnid=7fc3JmciPVuDqM:&amp;amp;amp;tbnh=103&amp;tbnw=137&amp;amp;prev=/images%3Fq%3D%2522blue%2Bvelvet%2522%26svnum%3D10%26hl%3Den%26lr%3D%26sa%3DG"&gt;huffing ether&lt;/a&gt;", we start to get down to the nity gritty. PMs drive writing &lt;a href="http://www.mojofat.com/tutorial/"&gt;functional specs&lt;/a&gt;. They *must* have buy in from dev and test, of course - t's that &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/10/three-legged-stool-of-software.html"&gt;three legged stool thing&lt;/a&gt;). At that point, devs can ground the pm wish lists in reality and testers can try to find spec bugs before any code is ever written. Then simultaneously (ideally) dev writes up a more technical spec and test writes a test plan.&lt;br /&gt;&lt;br /&gt;This is subject to a great deal of debate right now. There are many people calling for "&lt;a href="http://agilemanifesto.org/"&gt;agile development methods&lt;/a&gt;". Frankly, everyone I've ever known has used some of those agile methodologies whether they called them that or not. As someone focused on quality, I see the advantage in &lt;a href="http://www.agiledata.org/essays/tdd.html"&gt;test driven development&lt;/a&gt;. And I've certainly led &lt;a href="http://www.controlchaos.com/"&gt;scrums&lt;/a&gt; in the past, though we didn't call them that. Whatever it takes to get a cohesive team building &lt;a href="http://www.3dgameman.com/forums/showthread.php?t=44148"&gt;kick-ass software&lt;/a&gt; (just kidding with that last link). I'm not going to argue or belabor the point any longer.  These things are as trendy in software as &lt;a href="http://www.isixsigma.com/sixsigma/six_sigma.asp"&gt;cargo cult efficiency methodologies&lt;/a&gt; are in &lt;a href="http://www.asee.org/"&gt;*real* engineering&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While the devs and testers are busy trying to find ways to implement the master spec in their own realms, the pms try to guide them and start to push for schedule &lt;a href="http://www.wilsonart.com/design/index.asp?promo=oct06statspot"&gt;SWAGs&lt;/a&gt; (not those SWAGs, &lt;a href="http://acronyms.thefreedictionary.com/Scientific+Wild+Ass+Guess"&gt;but these&lt;/a&gt;). Oh - and don't forget prioritization. Somewhere in this mess of people scurrying about, the pms drive prioritizing the work that will need to be done both in terms of the features set forth in the pm's (pms'?) spec and in terms of the actual work items for everyone involved (called out by dev and test in their docs).&lt;br /&gt;&lt;br /&gt;Sometime soon after this, the devs and testers start coding. I'm not sure what the pms do at that point except keep asking more questions about schedule and priority. Oh - actually I *do* know. The pms do what they're infamous for - they try to push new features into the product. This is a continual process for them. It's why they're paid. Or why they seem to think they are. Frankly, feature creep seems like a sign of too many pms late in the cycle or too little pm thought early in the cycle to me. The venerable &lt;a href="http://www.microsoft.com/presspass/exec/valentine/default.mspx"&gt;Brian Valentine&lt;/a&gt; is known within Microsoft's Windows division for the times during the product cycle when he declared that (my paraphrasing) "developers should fix bugs, testers should verify fixes and continue to find new bugs, and pms should get the hell out of the way". (Yes, any other fans of Patton out there might recognize this as being similar to &lt;a href="http://www.military-quotes.com/Patton.htm"&gt;"lead me, follow me, or get the hell out of the way". &lt;/a&gt;I leave it as an exercise for the reader to determine how close or distant BrianV was to/from Patton.)&lt;br /&gt;&lt;br /&gt;Additionally, pms will drive cross-team initiatives. This is generally good news because it means that they're trying to make work for other teams and not yours. And if it's a pm from another team it's pretty easy to duck the work. Win-win for the people actually producing the software. If you're lucky your pm will prove to be a wonderful asset during this make-work phase because (s)he can be the bulldog that fights off other pms who try to take your time away from the job at hand: making all those new features work in less time than it is probably humanly possible. In a shop as small as mine is, that's not as likely, of course. But I'm writing mostly about economies of scale.&lt;br /&gt;&lt;br /&gt;I should probably call out an assumption at this point: testers contribute to the bottom line. In many places testing is an afterthought. Preferably (IMO) not an after-market thought. In others, testers are integral to producing a product. In some (and I've seen/heard about them - they exist) testers are little more than a drain on everyone else's resources.&lt;br /&gt;&lt;br /&gt;When things are balanced, I see it this way:&lt;br /&gt;&lt;br /&gt;PMs - Gather requirements and drive prioritization and scheduling. They're the connection to marketing and customers when people wish for new features. They are primarily motivated by making "cool things" (which may or may not even be technically possible) happen.&lt;br /&gt;&lt;br /&gt;Devs - Write the code. They are concerned with maintainability of their code base and understanding the deeper knowledge of what all their code does. They are primarily motivated by making "cool code" (which may or may not correspond to what customers need or want) happen.&lt;br /&gt;&lt;br /&gt;Testers - Test the code. They are concerned with the stability/quality of the product and how it interacts with anything else out there. They are primarily motivated by not letting customers ever see any bugs (which is both impossible and tends to be contrary to adding the changes that devs and pms want).&lt;br /&gt;&lt;br /&gt;Why do I start out with more silly links than I have toward the end? I think I usually begin in a whimsical mood and end on a much less whimsical one.  I should think about this a little more and maybe change up my style . . .&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.homestarrunner.com/sbemail.html"&gt;Stupid sbemail link.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116183728587625333?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116183728587625333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116183728587625333' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116183728587625333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116183728587625333'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/10/put-away-crayons.html' title='Put Away the Crayons'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116158811964170771</id><published>2006-10-22T23:21:00.000-07:00</published><updated>2006-10-23T00:21:59.666-07:00</updated><title type='text'>Crayons on the Tablecloth</title><content type='html'>After a hiatus (much needed both because of worky work stress and my first cold of the season), I'm &lt;a href="http://video.google.com/videoplay?docid=-3940806668555855882"&gt;back&lt;/a&gt;. On the topic of &lt;a href="http://www.essentialsecurity.com/"&gt;worky work&lt;/a&gt;, we shipped &lt;a href="https://www.secure.essentialsecurity.com/"&gt;Taceo 1.7&lt;/a&gt;. It sucks a lot less now. It's still kind of nasty but so much better that I'm not so embarrassed if you try it. I should blog a little about what we actually sell and why consumers might want it, but I'll leave that until later. Maybe when I need a break from working on my &lt;a href="http://www.halloween.com/"&gt;Halloween&lt;/a&gt; costume.&lt;br /&gt;&lt;br /&gt;I decided that before &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/10/three-legged-stool-of-software.html"&gt;defining each job function more clearly&lt;/a&gt; I'd walk through a typical development cycle and try to point out everyone's roles. This installment is about that initial pre-pre-pre-design phase. Or maybe it's still &lt;a href="http://www.designmuseum.org/"&gt;design&lt;/a&gt;. Either way, it's the thing that comes before people even start to write specs or plans or schedules. Consider writing a rougher than rough outline of an idea on a tablecloth. In &lt;a href="http://www.crayola.com/products/display.cfm?product=4"&gt;crayon&lt;/a&gt;. It's like that.&lt;br /&gt;&lt;br /&gt;Yes, usually the concept is supposed to happen from napkins but I want to emphasize something beyond that. It's BIGGER than a napkin. It's more substantial. Ok, so who am I kidding? This is all about designs on a napkin. (Why is it that GOOG can't find any of the Picasso napkin sketches I wanted to use as links here? *grrr*)&lt;br /&gt;&lt;br /&gt;Typically a PM has some idea of the product, the market, and how to help the product suit the market better. To the PM this is the goal. Fairly close, but there can be a lot of impossible demands from the blue sky PM.&lt;br /&gt;&lt;br /&gt;Typically (after v. 1, at least) a dev has some idea of how to beautify and/or extend his/her code. And to the dev this is the goal. This is technologically possible but often totally disregards the customers.&lt;br /&gt;&lt;br /&gt;These are two goals.&lt;br /&gt;&lt;br /&gt;Two entirely different goals.&lt;br /&gt;&lt;br /&gt;. . .&lt;br /&gt;&lt;br /&gt;?&lt;br /&gt;&lt;br /&gt;If you work where I work, this may seem all too familiar. It's not exactly desirable. But it's a &lt;a href="http://www.amazon.com/Patterns-Software-Tales-Community/dp/0195121236"&gt;common pattern&lt;/a&gt;. I know I saw it when I was &lt;a href="http://www.microsoft.com/"&gt;borg&lt;/a&gt;, too.&lt;br /&gt;&lt;br /&gt;Typically, test comes in after this point. I don't think it should but it does. I won't press this point but suffice it to say that there's something wrong with the pattern.&lt;br /&gt;&lt;br /&gt;During the &lt;a href="http://www.intellivisionlives.com/bluesky/history.shtml"&gt;blue sky&lt;/a&gt; phase of a project lots of ideas are bandied about. Pm typically has a wishlist from particular customers and/or marketing. Most of which aren't feasible as written. Dev typically has some desire to &lt;a href="http://www.refactoring.com/"&gt;refactor&lt;/a&gt; the code they've been saddled with supporting during the last release (because refactoring *always* makes everything better to the devs). Most of those cosmetic changes will take a very long time and add little value to the product. And test is usually left out. Mostly because it's still busy finding the bugs that the devs left in the last version of the product.&lt;br /&gt;&lt;br /&gt;Right.&lt;br /&gt;&lt;br /&gt;So that's how it usually goes. But how *should* it go?&lt;br /&gt;&lt;br /&gt;It should be a &lt;a href="http://en.wikipedia.org/wiki/Partnership_(cricket)"&gt;partnership&lt;/a&gt; from the start. And PM/dev/test should approach a new problem with open eyes but with full knowledge of the limitations of whatever existing system. PMs specialize in being a cross-group/customer/marketing bridge. They do personal politics that are tempered with a fairly solid understanding, technically, of the product/component they own. Devs approach things from a more pragmatic code-focused point of view. They want to make the best software that they can to meet customer needs while requiring as little of their time later in the cycle to support it. Cleverness up-front will be rewarded by less &lt;a href="http://www.historymatters.gmu.edu/d/5569/"&gt;scutwork&lt;/a&gt; later. Testers start to test every assumption made about customer demands or the market or some dev's idea of time-saving or even what group X *really* wanted. This saves them (and the rest of the team) time and money later. Together, all three &lt;a href="http://www.straightdope.com/mailbag/mzombiepower.html"&gt;flesh out&lt;/a&gt; what the spec should look like before the spec is ever written.&lt;br /&gt;&lt;br /&gt;But, obviously, this doesn't always happen.&lt;br /&gt;&lt;br /&gt;(P.S. Sorry if I'm a bit test-centric. That's my world at the moment. I've worn different hats in the past and I'm sure I will in the future, but at this time I'm a little too focused on being a tester at my startup.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116158811964170771?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116158811964170771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116158811964170771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116158811964170771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116158811964170771'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/10/crayons-on-tablecloth.html' title='Crayons on the Tablecloth'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116026048767011349</id><published>2006-10-07T14:19:00.000-07:00</published><updated>2006-10-07T15:34:47.683-07:00</updated><title type='text'>The Three Legged Stool of Software Development</title><content type='html'>&lt;a href="http://drewthesecuritygeek.blogspot.com/2006/10/i-was-going-to-post-about-my-thoughts.html#links"&gt;I gave up on "trinity"&lt;/a&gt; as the analogy pretty early on. "&lt;a href="http://www.museumreplicas.com/webstore/eCat/pirates_chest/capt_jack_tricorn_hat.aspx"&gt;Tricorn hat&lt;/a&gt;" also didn't work. Nor did "&lt;a href="http://www.preferredconsumer.com/sports/articles/bowling_ball.html"&gt;three bowling ball holes&lt;/a&gt;" of software development. "&lt;a href="http://en.wikipedia.org/wiki/The_Threepenny_Opera"&gt;Threepenny Opera&lt;/a&gt;" also didn't cut it. "&lt;a href="http://www.3inchesofblood.com/"&gt;3 Inches of Blood&lt;/a&gt;", while it had a certain appeal, also didn't quite work. So I finally settled upon the "&lt;a href="http://etc.usf.edu/clipart/4700/4789/stool_1.htm"&gt;three legged stool&lt;/a&gt;", so this blogpost is now hereby about the three legged stool of software development.&lt;br /&gt;&lt;br /&gt;Why a three legged stool? There are three &lt;a href="http://www.straightdope.com/classics/a1_065.html"&gt;disciplines&lt;/a&gt; typically involved in the process: development, program/project management, and testing. Each of those disciplines has a role and each of those roles need to 1) &lt;a href="http://zapatopi.net/belgium/"&gt;exist&lt;/a&gt; and 2) be &lt;a href="http://www.nidcd.nih.gov/health/balance/balance_disorders.asp"&gt;balanced&lt;/a&gt; with the others. Imagine a two-legged stool. For whatever reason, &lt;a href="http://www.google.com/imghp"&gt;Google Images&lt;/a&gt; has failed me, so you'll have to &lt;a href="http://www.imaginationcubed.com/Imagine"&gt;imagine&lt;/a&gt; it instead of looking at a &lt;a href="http://www.nasa.gov/multimedia/imagegallery/index.html"&gt;pretty picture&lt;/a&gt;. Without the third leg (you wouldn't believe the GOOG hits for "third leg" - unpublishable!), that stool is either going to fall over or have some &lt;a href="http://www.americanantigravity.com/"&gt;outside force&lt;/a&gt; to keep it upright. Now imagine a three legged stool with legs of unequal size. All legs touch the ground, but the seat of the stool just &lt;a href="http://www.youtube.com/watch?v=beYKDo8kqDw&amp;mode=related&amp;amp;search="&gt;isn't level&lt;/a&gt; (forgive me for the cheesy link, but I love that about SF!). In software development that just can't be right. So we try to have a stool with equal legs of dev, pm, and test holding up the seat of the software, of the customer. Keeping things on the &lt;a href="http://www.stanleytools.com/default.asp?TYPE=CATEGORY&amp;CATEGORY=LEVELS"&gt;level&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Synopses (I'll probably post more detail about these later):&lt;br /&gt;Developers - &lt;a href="http://www.yak.net/fqa/139.html"&gt;write the code&lt;/a&gt;, &lt;a href="http://www.onlamp.com/pub/a/onlamp/2005/08/11/fixingbugs.html"&gt;fix the bugs&lt;/a&gt;.&lt;br /&gt;PMs - drive &lt;a href="http://office.microsoft.com/en-gb/assistance/HA010864851033.aspx"&gt;cross-team collaboration&lt;/a&gt;, drive the &lt;a href="http://www.designmuseum.org/"&gt;design&lt;/a&gt; and the &lt;a href="http://www.amtrak.com/servlet/ContentServer?pagename=Amtrak/Page/Schedules_Index_Page&amp;amp;amp;amp;c=Page&amp;cid=1080072922206&amp;amp;ssid=3"&gt;schedule&lt;/a&gt;.&lt;br /&gt;Testers - &lt;a href="http://en.wikipedia.org/wiki/Software_testing"&gt;test the code&lt;/a&gt;, file &lt;a href="http://www.insects.org/"&gt;bugs&lt;/a&gt;, confirm fixes.&lt;br /&gt;&lt;br /&gt;Those synopses leave out a lot of &lt;a href="http://www.ddj.com/dept/architect/sdmag.jhtml"&gt;details&lt;/a&gt;. Everyone has equal input at all stages of the product cycle, for example (thank me later for no prescriptive/proscriptive PLC links so far). I should probably explain the product cycle and the duties within it before I go on too far. I really need to get into granularity of duties among leads, senior staff, and junior staff, too.&lt;br /&gt;&lt;br /&gt;I'll just leave you with one of my favorite &lt;a href="http://www.ddj.com/dept/architect/sdmag.jhtml"&gt;Patton quotes&lt;/a&gt; for now:&lt;br /&gt;Lead me, follow me, or get out of my way.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next up: Either a better definition on disciple duties, an overview of the product cycle, or my thoughts on leading vs being an individual contributor.&lt;br /&gt;&lt;br /&gt;Sorry to anyone expecting more security geekery so far. If you want that, look only &lt;a href="http://blogs.securiteam.com/index.php/archives/661"&gt;here&lt;/a&gt; and &lt;a href="http://blogs.securiteam.com/index.php/archives/663"&gt;here&lt;/a&gt;. :-) My head has been too wrapped up in procedural junk at work to be worried much about security lately. Eventually I really will get around to the &lt;a href="http://www.microsoft.com/ntserver/remove404.asp"&gt;NT security&lt;/a&gt; model and how it compares to &lt;a href="http://www.openbsd.org/security.html"&gt;others&lt;/a&gt; &lt;a href="http://www.nsa.gov/selinux/"&gt;in&lt;/a&gt; &lt;a href="http://www.apple.com/macosx/features/security/"&gt;the&lt;/a&gt; &lt;a href="http://www.ibm.com/systems/p/security/"&gt;industry&lt;/a&gt; or even to &lt;a href="http://en.wikipedia.org/wiki/Panopticon"&gt;ideals&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116026048767011349?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116026048767011349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116026048767011349' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116026048767011349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116026048767011349'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/10/three-legged-stool-of-software.html' title='The Three Legged Stool of Software Development'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-116001845660000274</id><published>2006-10-04T20:20:00.000-07:00</published><updated>2006-10-04T20:20:56.610-07:00</updated><title type='text'></title><content type='html'>I was going to post about my &lt;a href="http://www.cco.net/~jpete/deepthou.htm"&gt;thoughts&lt;/a&gt; on developers, program managers, testers and how those &lt;a href="http://www.positivediscipline.com/"&gt;disciplines&lt;/a&gt; fit together and I was going to entitle the blogpost "The Trinity of Software Development". Then I thought about it. On the &lt;a href="http://www.soundtransit.org/"&gt;bus&lt;/a&gt;. That's where I do my best thinking.&lt;br /&gt;&lt;br /&gt;Why "trinity"? That has &lt;a href="http://www.newadvent.org/cathen/15047a.htm"&gt;obvious religious overtones&lt;/a&gt;. And it would only be a matter of time until some &lt;a href="http://www.atheists.org/"&gt;atheist&lt;/a&gt;[1] came along and claimed it could all be done without any of the three. Not to mention the &lt;a href="http://www.manygods.org.uk/"&gt;polytheists&lt;/a&gt;[2]. Really. I'm not going to mention them. Why "trinity" indeed?&lt;br /&gt;&lt;br /&gt;So I decided not to post that long screed here. Instead, this is a placeholder for what I had intended to write. I think I'll pick some other &lt;a href="http://en.wikipedia.org/wiki/Software_engineering"&gt;tortured analogy&lt;/a&gt; instead. I think I'll go scribble something out on &lt;a href="http://www.weyerhaeuser.com/"&gt;dead trees&lt;/a&gt; and post it later tonight.&lt;br /&gt;&lt;br /&gt;[1] actually, from what I gather this was very similar to the early development org on the product I &lt;a href="http://www.essentialsecurity.com/"&gt;work on now&lt;/a&gt;. That's a long story and I don't want to paint too many black eyes on my workplace, though, so I'll skip it.&lt;br /&gt;[2] I could start to make an argument that either consulting or working at a &lt;a href="http://www.microsoft.com/"&gt;large software company&lt;/a&gt; might fit polytheism to varying degrees, but again I'll skip it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-116001845660000274?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/116001845660000274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=116001845660000274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116001845660000274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/116001845660000274'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/10/i-was-going-to-post-about-my-thoughts.html' title=''/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115993325705522960</id><published>2006-10-03T19:56:00.000-07:00</published><updated>2006-10-03T20:40:57.070-07:00</updated><title type='text'>Back to Real Life</title><content type='html'>This post wanders all over the place and has no real theme. Please forgive me. I'll post a more coherent post next.&lt;br /&gt;&lt;br /&gt;I'm back from &lt;a href="http://www.ashland.or.us/"&gt;Ashland&lt;/a&gt; and I'm &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/09/time-to-recharge.html#links"&gt;recharged&lt;/a&gt;. Mostly. The &lt;a href="http://www.ashland.or.us/"&gt;Shakespeare festival &lt;/a&gt;was wonderful. So was &lt;a href="http://www.blogger.com/profile/5348501"&gt;Mike's &lt;/a&gt;homebrew, despite its name (&lt;a href="http://www.goats.com/forums/news/396/"&gt;Goat Scrotum Ale&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Back here at &lt;a href="http://www.essentialsecurity.com/"&gt;work&lt;/a&gt;, we have about a week until we ship the new version of Taceo. There's a bunch of bugfixing, customer-pleasing (or at least &lt;a href="http://michael.hightechproductmanagement.com/2006/07/dont_annoy_customers.html"&gt;customer-not-too-terribly-annoying-anymore&lt;/a&gt;) goodness in the internal builds. There are some really scary code-churning changes afoot now in the thirteenth hour, but with any luck everything will work out. Or we'll back the changes out and still be better off than our last release. Either way it's much better than what you might have already &lt;a href="https://www.secure.essentialsecurity.com/DCenter/"&gt;tried&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;No surprise that nobody at work was celebrating &lt;a href="http://arstechnica.com/news.ars/post/20061003-7893.html"&gt;today's holiday&lt;/a&gt;. I didn't want to mention it. I thought I'd seem too flip.&lt;br /&gt;&lt;br /&gt;I recently found out that back at the &lt;a href="http://www.microsoft.com/"&gt;borg&lt;/a&gt; the &lt;a href="http://minimsft.blogspot.com/2006/10/microsoft-internal-transfers-just-got.html#links"&gt;internal transfer process is now easier&lt;/a&gt;. That would have been nice during my time there. I can only hope that changes like that won't stop the &lt;a href="http://www.businessweek.com/magazine/content/05_39/b3952001.htm"&gt;hemorrhaging of talent&lt;/a&gt; that provides such well-trained, highly-skilled, industry-savvy staff for startups like ours.&lt;br /&gt;&lt;br /&gt;For anyone in dev or test who happens to be reading my blog, you may want to check out &lt;a href="http://spietrek.blogspot.com/"&gt;Steve Pietrek's blog&lt;/a&gt;. He does a great job of collecting dev-interesting links daily, focusing mostly on &lt;a href="http://blogs.msdn.com/brada/archive/2004/01/09/48925.aspx"&gt;managed code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Since I'm rambling about almost anything, I'll also ask when the heck &lt;a href="http://www.tidelandthemovie.com/"&gt;Terry Gilliam's new movie&lt;/a&gt; is finally going to open here in the US. Ok. Here goes . . . When? (Answer: October 6.) Days are getting darker here in Seattle and I'm shifting back into filmgoing mode. I've been waiting for a chance to see that film all summer.&lt;br /&gt;&lt;br /&gt;End of rambles. Thanks for reading all the way to &lt;a href="http://www.shibumi.org/eoti.htm"&gt;the end&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115993325705522960?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115993325705522960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115993325705522960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115993325705522960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115993325705522960'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/10/back-to-real-life.html' title='Back to Real Life'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115949080230865040</id><published>2006-09-28T17:20:00.000-07:00</published><updated>2006-09-28T17:46:42.330-07:00</updated><title type='text'>Time to Recharge</title><content type='html'>It's time for me to go relax for a long weekend now.&lt;br /&gt;&lt;br /&gt;Roadtrip Checklist:&lt;br /&gt;Toothbrush? &lt;a href="http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;item=290027814955&amp;amp;category=13961"&gt;Check&lt;/a&gt;. No, I don't really have a Civil War reproduction toothbrush, but that's kinda cool isn't it?&lt;br /&gt;Change of Clothes? &lt;a href="http://jpeterman.com/default.asp?sid=W0644F1G44&amp;eid=GL002&amp;amp;bhcd2=1159489899"&gt;Check&lt;/a&gt;.&lt;br /&gt;Diet Pepsi? &lt;a href="http://en.wikipedia.org/wiki/Diet_Pepsi"&gt;Check&lt;/a&gt;.&lt;br /&gt;New Neil Gaiman book? &lt;a href="http://www.neilgaiman.com/works/books/fragilethings"&gt;Check&lt;/a&gt;.&lt;br /&gt;New Tom Waits CD? No. &lt;a href="http://www.amazon.com/gp/product/B000ICLHIE/ref=pd_rvi_gw_3/102-4180053-9368127?ie=UTF8"&gt;That&lt;/a&gt; won't be released until November. Oh, well.&lt;br /&gt;Stop thinking about work? Check. (Thus no link to work.)&lt;br /&gt;&lt;br /&gt;Great. Looks like everything's in order. I'm outta here until next week.&lt;br /&gt;&lt;br /&gt;It feels a little strange to leave without having today's &lt;a href="http://marmadukeexplained.blogspot.com/"&gt;Marmaduke explanation&lt;/a&gt;, but I'll find some way to deal with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115949080230865040?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115949080230865040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115949080230865040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115949080230865040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115949080230865040'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/time-to-recharge.html' title='Time to Recharge'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115934947198938997</id><published>2006-09-27T01:51:00.000-07:00</published><updated>2006-09-27T02:31:12.003-07:00</updated><title type='text'>Ugh!</title><content type='html'>Haven't been posting as regularly as I had wanted to. I've been a little too wrapped up in &lt;a href="http://www.fox.com/kingofthehill/"&gt;propane and propane accessories&lt;/a&gt;. Yeah - &lt;a href="http://www.essentialsecurity.com/"&gt;work&lt;/a&gt;. And when I haven't been at work I've been really busy trying not to be at work. Hitting that wall of crunchiness that says I have to slow down or I'll start to burn out.&lt;br /&gt;&lt;br /&gt;So not much blog posting. Oops. So much for personal goals . . .&lt;br /&gt;&lt;br /&gt;Yes, I'll get back to my &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/09/security-primer-in-no-particular-order.html"&gt;security primer&lt;/a&gt;. Give me a week or so.&lt;br /&gt;&lt;br /&gt;Current state of the Drew: Crunchy.&lt;br /&gt;&lt;br /&gt;In the last few weeks I think I've pretty much found every way I can (short of checking in my own damned fixes into the source tree (which I might start doing if those guys can't get their shit together)) to piss off my devs. Mostly, I'm just looking for ways to better manage our project. I want us all to be open and accountable. Is that so wrong? Well . . . maybe. I admit that I tend to forget that there are egos involved. I just look at an engineering problem as a problem with known parameters and find a way to solve it.&lt;br /&gt;&lt;br /&gt;So here I am. *sigh* At the very least, I know that Taceo 1.7 will &lt;a href="http://www.shopvac.com/"&gt;suck&lt;/a&gt; less than the &lt;a href="http://www.shopvac.com/"&gt;previous release&lt;/a&gt; (And what the crap is a DCenter? Is that what passes for the new cool? I'm so outta touch.) In fact, it will suck so much less that I would encourage you, my few (one?) readers (&lt;a href="http://www.blogger.com/profile/5348501"&gt;reader&lt;/a&gt;?), to try it out. In about two weeks or so. I'll let you know.&lt;br /&gt;&lt;br /&gt;For right now, I'm mostly considering my plans for changing process at ESS and my wonderful 3 day weekend in Ashland, OR for the &lt;a href="http://www.orshakes.org/"&gt;Shakespeare Festival&lt;/a&gt;. I really need that break. And more time with that W woman. *sigh* (reprise)&lt;br /&gt;&lt;br /&gt;Also on the up-side, I'm really looking forward to the new SDET lead who accepted our offer. I need to share my work stress. Um . . . duties. I hope he really knows he's in for startup-land. It's a wild ride compared to &lt;a href="http://www.microsoft.com/"&gt;Microsoft&lt;/a&gt;. Not so many &lt;a href="http://en.wikipedia.org/wiki/Dave_Cutler"&gt;superstars&lt;/a&gt; here. Hell, it makes *me* seem like some kind of &lt;a href="http://en.wikipedia.org/wiki/Raymond_Chen"&gt;superstar&lt;/a&gt;, but I'm &lt;a href="http://www.michaelrobertson.com/"&gt;not&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Actually there are many upsides. I'm just feeling a bit burnt and crunchy, so I'm probably coming off more negatively than I should. Apologies.&lt;br /&gt;&lt;br /&gt;(P.S. Why does Blogger's spell-checker suck so much? Is it because people expect so little of Google that they can keep shipping total crap?)&lt;br /&gt;&lt;br /&gt;(P.P.S. How many days does it take Google to realize that Blogger's certificate is expired? Is it more or fewer days than the number that it takes for me to figure out how the hell to send their tech support a mail to tell them that there's a problem and how to fix it? *grumble* Answer: less. It took a few days. In those few days I didn't know how to let Google know there was a problem. I tried. Multiple times. Customer service these days . . . Then again, I guess everything from Google is always in Beta, so it's not a problem.)&lt;br /&gt;&lt;br /&gt;(P.P.P.S. Whenever Google decides to 1. get serious about security and 2. get serious about customer sat, please someone let me know. I hear it's a great place to work. If you don't care about those things.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115934947198938997?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115934947198938997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115934947198938997' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115934947198938997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115934947198938997'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/ugh.html' title='Ugh!'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115900219618153860</id><published>2006-09-23T01:41:00.000-07:00</published><updated>2006-09-23T02:03:16.206-07:00</updated><title type='text'>Bug Meanings: Priority and Severity</title><content type='html'>With &lt;a href="http://www.insects.org/"&gt;bugs &lt;/a&gt;there is a kind of &lt;a href="http://www.mindtools.com/pages/article/newTED_08.htm"&gt;cost-benefit-style analysis&lt;/a&gt; that happens. Bugs typically have a &lt;a href="http://pubs.usgs.gov/gip/earthq4/severitygip.html"&gt;severity&lt;/a&gt; rating and a &lt;a href="http://www.usps.com/shipping/prioritymail.htm"&gt;priority&lt;/a&gt; rating. Severity ranges from "let's make a small feature change to make things 'better'" to "OMG . . . this totally kills the app and &lt;a href="http://xbox-linux.sourceforge.net/docs/remotedelete.html"&gt;users lose data&lt;/a&gt; - Armageddon!" Priority (which IMHO is misnamed and should be called something more like &lt;a href="http://en.wikipedia.org/wiki/What"&gt;"frequency"&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Likelihood"&gt;"likelihood") &lt;/a&gt;ranges from "almost never happens" to "a customer is always going to hit this bug no matter what". Based on those things, we analyze.&lt;br /&gt;&lt;br /&gt;Depending on the time we're at in the ship cycle, some of those bugs might not be severe enough or high-pri enough to fix. Ok. We all ship with bugs. That's &lt;a href="http://www.parasoft.com/jsp/aep/aep_practices.jsp?practice=CodingStd"&gt;standard practice&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The hard part is defining those cutoff choke points and what they mean in sev and pri numbers.&lt;br /&gt;&lt;br /&gt;If I were &lt;a href="http://www.feynman.com/"&gt;really smart&lt;/a&gt;, I'd propose an algorithm and then also a follow-up graph of some sort that would explain how software works through its &lt;a href="http://www.levela.com/software_life_cycles_swdoc.htm"&gt;lifecycle&lt;/a&gt;. I'm not so smart. I don't know how to do it. Every piece of software is different. It seems that as software engineers we're lacking here. Someone should be able to define these things and tie them to milestones in the product. If we were &lt;a href="http://www.interfacebus.com/Standard_org.html"&gt;*real* engineers&lt;/a&gt; . . .&lt;br /&gt;&lt;br /&gt;Expect a "part two" to this post in the next couple of weeks as I digest and expel ideas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115900219618153860?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115900219618153860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115900219618153860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115900219618153860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115900219618153860'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/bug-meanings-priority-and-severity.html' title='Bug Meanings: Priority and Severity'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115883047469930973</id><published>2006-09-21T01:55:00.000-07:00</published><updated>2006-09-21T02:21:14.783-07:00</updated><title type='text'>DRM Is Evil!</title><content type='html'>Well . . . I obviously don't quite believe that. If I did I wouldn't be working at a &lt;a href="http://www.essentialsecurity.com/"&gt;company&lt;/a&gt; (caution: blindingly new burgundy scheme!) whose current &lt;a href="https://www.secure.essentialsecurity.com/"&gt;sole product&lt;/a&gt; was a &lt;a href="https://www.secure.essentialsecurity.com/"&gt;DRM app&lt;/a&gt; (yeah -same link). But in many senses the ways that &lt;a href="http://www.sysinternals.com/blog/2005/10/sony-rootkits-and-digital-rights.html"&gt;DRM is applied to things like music&lt;/a&gt; in not exactly kind ways for the consumer (and moreover the way the rabid, frothing lawyers treat &lt;a href="http://trends.newsforge.com/article.pl?sid=06/07/20/1651223"&gt;ownership of Intellectual Property and enforcement of that&lt;/a&gt;) make DRM seem kinda bad. At best. Or maybe even just plain &lt;a href="http://www.portalofevil.com/"&gt;evil&lt;/a&gt; (NSFW - or anywhere with decency standards - just "no").&lt;br /&gt;&lt;br /&gt;Check out this interesting anti-DRM blog:&lt;br /&gt;&lt;a href="http://www.uninnovate.com/feed/"&gt;http://www.uninnovate.com/feed/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll get back to DRM probably sometime next week. I'll explain my insider's view of what it offers, how it falls short, and how it is seen (or misperceived).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I should also add that this is my own personal blog and my opinions are my own. They are not necessarily those of my employer (&lt;a href="http://www.essentialsecurity.com/"&gt;ESS&lt;/a&gt;) or anyone in any way associated with &lt;a href="http://www.imdb.com/title/tt0335013/"&gt;the company&lt;/a&gt;. If that wasn't already clear from the get-go, then for the sake of that guy who could fire me at a whim, please let it be clear now. Here are photos of him with the rest of the gang. I think they were all high on nitrous in front of some shrubbery at the time. I dunno. I wasn't there. &lt;a href="http://www.essentialsecurity.com/our_team.htm"&gt;LINK&lt;/a&gt; Also - ignore the text about them. Notice that they all have the same toothy smile. Could this explain the strange set of false teeth I happened upon in the storage room or are they actually all the same person (thus same teeth)? Oh, the mystery! Anywho . . . these opinions are my own and not those of the mothership (which my want to beam me up for refactoring or somesuch after reading this blogpost).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115883047469930973?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115883047469930973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115883047469930973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115883047469930973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115883047469930973'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/drm-is-evil.html' title='DRM Is Evil!'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115882893708539114</id><published>2006-09-21T01:32:00.000-07:00</published><updated>2006-09-21T01:55:37.230-07:00</updated><title type='text'>Security Primer in No Particular Order - preamble</title><content type='html'>I've decided that I haven't really blogged enough about &lt;a href="http://en.wikipedia.org/wiki/Computer_Security"&gt;security&lt;/a&gt; yet. And to really get into the issues, I need to be sure that anyone reading my blog has the background info before I just dive into some more in-depth topic. Because of these factors, I've decided to start a series: "Security Primer in No Particular Order".&lt;br /&gt;&lt;br /&gt;Why no particular order? Well . . . let's face it - I'm just not that organized [1]. And I'm sure that even if I were something would occur to me out of order after I'd published it. So no particular order.&lt;br /&gt;&lt;br /&gt;This is the "why I'm bothering to post the series and sorry it's not more helpful" post that kicks off the (at least) week or so of basic security know-how. I may amend this post or any of the ones to follow to add useful info.&lt;br /&gt;&lt;br /&gt;Maybe after that I expound on useful tools or even sneaky tester tricks. I think I should run with themes.&lt;br /&gt;&lt;br /&gt;So how do I explain computer security to my mom? Or my brother? Or some stranger on a bus who insists on talking to me despite that I'm trying to read a book? Hmmm. We'll see . . .&lt;br /&gt;&lt;br /&gt;Most certainly I'm going to refer often to places like &lt;a href="http://www.sans.org/"&gt;SANS&lt;/a&gt; and &lt;a href="http://www.rsasecurity.com/"&gt;RSA&lt;/a&gt; and others. Of course there will be some nod to gov't standards like &lt;a href="http://www.itl.nist.gov/fipspubs/"&gt;FIPS&lt;/a&gt;, too. And because I'm primarily focused on working on &lt;a href="http://www.microsoft.com/windows/"&gt;Windows&lt;/a&gt; ('cause most folks are), you'll get a fistful of links to &lt;a href="http://msdn.microsoft.com/"&gt;MSDN&lt;/a&gt; content and &lt;a href="http://www.kbalertz.com/"&gt;KB articles&lt;/a&gt; (why doesn't MSFT offer something like KBAlertz?).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] I couldn't find it online, but I seem to remember some (translated) Pablo Neruda poem that began something like (in English translation, and this misses a lot of the meaning): "All the fishes in the sees are all organized". Having grown up in a union town, it speaks to me. But in the non-union way it also speaks to me. Then again, it's not Google-able, so maybe I imagined it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115882893708539114?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115882893708539114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115882893708539114' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115882893708539114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115882893708539114'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/security-primer-in-no-particular-order.html' title='Security Primer in No Particular Order - preamble'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115872350690352533</id><published>2006-09-19T19:51:00.000-07:00</published><updated>2006-09-19T20:38:27.036-07:00</updated><title type='text'>Obscurity Rode in on a Dead Horse</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Security_through_obscurity"&gt;"Security by obscurity is not security."&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I don't know who originated that mantra, but if I did, I'd sign that person up for lots of &lt;a href="http://media.hormel.com/templates/knowledge/knowledge.asp?catitemid=16&amp;id=132"&gt;spam&lt;/a&gt;. Because I'm not a nice person. And because there's almost no one more worthy of &lt;a href="http://www.philipglass.com/"&gt;useless, repetitive garbage&lt;/a&gt; clogging up the daily works than the person who first said those words. I would consider it to be a kind of &lt;a href="http://www.wvu.edu/~lawfac/jelkins/lp-2001/intro/law_poems.html"&gt;poetic justice&lt;/a&gt;. We need more poetic justice in the world.&lt;br /&gt;&lt;br /&gt;In and of itself, there's nothing wrong with the *intent* of the statement. Regarding crypto algorithms, just not divulging the algo isn't as safe as using one with a known, tested strength. Ok. Fine. I accept that.&lt;br /&gt;&lt;br /&gt;The problem is that the statement has been so often misapplied to anything in the security realm that it loses its meaning. It becomes often wrong. Much in the same way that as it is repeated ad infinitum it becomes nothing more than a mantra. Mere dogma. Dogma that kind of rhymes. It rings through with the mellifluous tones of a dead horse being beaten. Repeatedly.&lt;br /&gt;&lt;br /&gt;How is it misapplied? Imagine that you stashed an extra house key in one of &lt;a href="http://search.ebay.com/rock-hide-a-key_W0QQfnuZ1QQfsooZ1QQfsopZ3QQxpufuZx"&gt;those fake rocks&lt;/a&gt;. (Who buys all of &lt;a href="http://www.flickr.com/photos/ollygator3/186951031/"&gt;those&lt;/a&gt; anyway?) Is it obscurity to hide the keys there? Sure. Is it security? If it mitigates against easy compromise of the key, then I'd claim it is.&lt;br /&gt;&lt;br /&gt;Security isn't just some academic thing. It's about mitigating against real risks in real life. This ain't rocket science. Anybody should be able to understand it. Risk: &lt;a href="http://66.102.7.104/search?q=cache:hTT114c5L0YJ:www.incommonfederation.org/docs/technical/InCommon_CA_Disaster_Recovery_from_root_key_compromise_ver_0.31.pdf+key+compromise&amp;amp;hl=en&amp;gl=us&amp;amp;ct=clnk&amp;amp;cd=1"&gt;key compromise&lt;/a&gt;. Our chosen mitigation: &lt;a href="http://www.cbsnews.com/stories/2006/01/23/world/main1227583.shtml"&gt;fake rock&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Perhaps a better mitigation would have been to not leave a key outside your house in the first place. But what if you had a requirement to be able to get into your house even if you had locked your keys inside the house? In real life there are other concerns than one would find in a strict academic (read "not real world") scenario. Maybe . . . just maybe . . . that "obscurity" was just the security that you needed to meet all of your requirements and still mitigate against easy key compromise.&lt;br /&gt;&lt;br /&gt;Sometimes obscurity *is* security. Conversely, the &lt;a href="http://www.cdi.org/blair/permissive-action-links.cfm"&gt;lack of obscurity&lt;/a&gt; may sometimes also be &lt;a href="http://en.wikipedia.org/wiki/Nuclear_deterrent"&gt;security&lt;/a&gt;. But that's another blogpost entirely.&lt;br /&gt;&lt;br /&gt;I wonder if I'll need to explain next how &lt;a href="http://www.aip.org/history/heisenberg/p08.htm"&gt;Heisenberg's Uncertainty Principle&lt;/a&gt; doesn't apply to prime time network TV programming . . .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115872350690352533?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115872350690352533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115872350690352533' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115872350690352533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115872350690352533'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/obscurity-rode-in-on-dead-horse.html' title='Obscurity Rode in on a Dead Horse'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115865117417389720</id><published>2006-09-19T00:03:00.000-07:00</published><updated>2006-09-19T00:32:54.246-07:00</updated><title type='text'>File.Exists Is Evil</title><content type='html'>For whatever reason, most colleges' computer science departments hate software. I don't know why. They just do. They seem to only teach single-threaded logic. Ok, so maybe it's not animosity, but laziness. Who am I to say? Nah . . . they hate software.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.io.file.exists.aspx"&gt;File.Exists&lt;/a&gt;. If you code to the CLR you're probably familiar with that. What does it mean?&lt;br /&gt;&lt;br /&gt;You call File.Exists and you find out that it exists. What does that mean?&lt;br /&gt;&lt;br /&gt;It means that at some point between the time that you called the function and the time it returned that file existed. Or didn't. That's it. That's all you know.&lt;br /&gt;&lt;br /&gt;Why is this bad?&lt;br /&gt;&lt;br /&gt;It's bad because people tend to take for granted that the result from File.Exists is always *still* true. This is a problem mostly because the function should have been called File.Existed. That's all you really know. It used to be there. No promise about its current availability. Period.&lt;br /&gt;&lt;br /&gt;Ok, so let's dig into it deeper. Why is this "evil" and not just "kinda wrong"?&lt;br /&gt;&lt;br /&gt;Because devs build assumptions. Developer assumptions often translate into bugs. (Trust me - I'm a tester!) Developers often assume that the result of File.Exists tells them whether or not a file exists. That's not what it does. It only says whether or not in some past time that file existed. Thus, there's an assumption. Thus, a (probable) bug. Ick!&lt;br /&gt;&lt;br /&gt;This is a race condition magnet. If you're reading this and you're a tester, then look for File.Exists in your devs' code. It's almost certainly the source of a bug. If you're a developer, ask yourself why you'd ever use File.Exists.&lt;br /&gt;&lt;br /&gt;1) Can I do X with the file?&lt;br /&gt;If this is your question, I recommend just trying to do X. Even if File.Exists works most of the time, those other times probably need to deal with whatever exception is thrown. Relying on File.Exists probably puts an implicit race in your code. Just don't go there.&lt;br /&gt;&lt;br /&gt;2) Did &lt;a href="http://en.wikipedia.org/wiki/Metasyntactic_variable"&gt;FOO&lt;/a&gt; write something?&lt;br /&gt;If it did, that log may not exist now. Chances are that you want something useful NOW and not a few milliseconds ago. Counting on FOO's file to have existed again introduces a race condition and there's probably an exception you're not wanting to handle. Just catch the exception and skip File.Exists. Make it simple.  And robust. Write good code.&lt;br /&gt;&lt;br /&gt;3) Should I overwrite or delete BAR?&lt;br /&gt;Um . . . same as the other stuff I just said. Don't. Just don't. Make your code thread-safe. Reliance on File.Exists doesn't do that.&lt;br /&gt;&lt;br /&gt;4+) Yes, there are more, but they're similar. I'll skip them.&lt;br /&gt;&lt;br /&gt;At best, File.Exists can be a fairly reliable way to know that something *didn't* exist. Even then, there's a race and you're not being threadsafe. At worst, you've opened your code to &lt;a href="http://www.catb.org/jargon/html/H/heisenbug.html"&gt;Heisenbugs&lt;/a&gt; that you may not be able to diagnose.&lt;br /&gt;&lt;br /&gt;I have no idea why anyone ever introduced such a construct as File.Exists. I can only tell you that it's evil. Avoid it. It only leads to bad code.  Let's hope that saner heads prevail in DevDiv and this goes the way of the &lt;a href="http://www.ucmp.berkeley.edu/diapsids/dinosaur.html"&gt;Democrats&lt;/a&gt;^H^H^H^H^H^H^H^H^Hdinosaurs.&lt;br /&gt;&lt;br /&gt;Ok, I got a bit glib there. I meant to show examples of crap code that counted (unreliably) on File.Exists. I couldn't do it. It was too painful. Please forgive me.&lt;br /&gt;&lt;br /&gt;(P.S. I lean a bit left, politically. Shut up already, lefties! It's a joke.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115865117417389720?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115865117417389720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115865117417389720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115865117417389720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115865117417389720'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/fileexists-is-evil.html' title='File.Exists Is Evil'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115822295591614016</id><published>2006-09-14T01:29:00.000-07:00</published><updated>2006-09-14T01:35:55.923-07:00</updated><title type='text'></title><content type='html'>&lt;a href="http://scobleizer.wordpress.com/2006/09/13/is-apple-copying-microsoft/"&gt;Scoble makes me react again&lt;/a&gt;. This reaction isn't that uncommon for me. I'm just blogging about it for the first time now. *sigh*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sweet! I have my gag feather poised carefully near Robert Scoble's uvula. Now all I have to mention is how Microsoft apes Apple and . . .&lt;br /&gt;&lt;br /&gt;*splut*&lt;br /&gt;&lt;br /&gt;Oh! It's all over now, folks. What a messy ending!&lt;br /&gt;&lt;br /&gt;(This is why nobody lets me make movies.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Um . . . who the heck cares? Technology feeds on its own and spawns better. Or sometimes worse. What prevails prevails.&lt;br /&gt;&lt;br /&gt;I don't really care whether my iNewFancyWidget came from Steve Jobs or Stevie Wonder as long as it's easy to use, makes me happier, and lasts until Stevie puts out a new album. I hope the iNewFancyWidget is accessible for blind folks . . .&lt;br /&gt;&lt;br /&gt;I don't really care who first invented the iNewFancyWidget as long as I can use it. If possible, for free. And to communicate with my friends and loved ones. Or to see pretty women naked in some more realistic way (pr0n drives tech).&lt;br /&gt;&lt;br /&gt;I just don't care. Gimme what I want. I don't care about its provenance. I'm like a pawn shop in that way, I suppose . . .&lt;br /&gt;&lt;br /&gt;(P.S. Yes, I'm skipping the technical post again tonight. I'll do it tomorrow.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115822295591614016?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115822295591614016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115822295591614016' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115822295591614016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115822295591614016'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/scoble-makes-me-react-again.html' title=''/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115812576645690856</id><published>2006-09-12T22:04:00.000-07:00</published><updated>2006-09-12T22:36:06.526-07:00</updated><title type='text'>Sleepy</title><content type='html'>I've already posted something today and I'm getting sleepy. I think I'll skip what I was going to post until tomorrow.&lt;br /&gt;&lt;br /&gt;The teaser is this, though: Tomorrow: &lt;a href="http://msdn2.microsoft.com/en-us/library/system.io.file.exists.aspx"&gt;File.Exists &lt;/a&gt;- File.Existed?&lt;br /&gt;&lt;br /&gt;Oooh . . . quite the cliff-hanger, eh? Yeah, you're right. It's going to be &lt;a href="http://www.theregister.co.uk/2004/10/22/bofh_2004_episode_36/"&gt;boring and geeky&lt;/a&gt;(yeah and so what if I like BOFH?). And existential. Oh, deeeeeeeep, man, you might be thinking after I dropped a word like "existential". Well . . . no. Not really. It's pretty &lt;a href="http://www.ushistory.org/Paine/commonsense/index.htm"&gt;common sense&lt;/a&gt; (not quite like that, actually) once you understand the sense of it. Just like all other common sense. And still boring and geeky.&lt;br /&gt;&lt;br /&gt;So check in tomorrow as we delve into the horrible development practices encouraged by File.Exists and the nasty nasty bugs that come of it. [Queue &lt;a href="http://www.theholidayspot.com/halloween/music.htm"&gt;spooky music&lt;/a&gt;. I'm outta here.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115812576645690856?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115812576645690856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115812576645690856' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115812576645690856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115812576645690856'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/sleepy.html' title='Sleepy'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115812370329424079</id><published>2006-09-12T20:18:00.000-07:00</published><updated>2006-09-12T22:01:43.363-07:00</updated><title type='text'>Storing Credentials on Windows</title><content type='html'>I was about to add a question to &lt;a href="http://blogs.msdn.com/oldnewthing/articles/166545.aspx"&gt;Raymond's queue&lt;/a&gt; so that I could get a definitive answer from one of the Windows shell gurus when I noticed this question posted June 26, 2004 (Over two years ago??? Does Raymond ever clean that thing out?):&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;How do I store a user's credentials (username/password for a web site or ftp site) securely?&lt;/div&gt;&lt;div align="center"&gt; &lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;The typical answer on Windows is to use &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/windataprotection-dpapi.asp"&gt;DPAPI&lt;/a&gt;. Namely, the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/cryptprotectdata.asp"&gt;CryptProtectData&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/cryptprotectdata.asp"&gt;CryptUnrprotectData&lt;/a&gt; APIs. And store the blob wherever you like. Registry, file system, in your left shoe, whatever. The up-side is that Windows takes care of all of the crypto mess. The down-side is that the key is derived from the user’s SID and password hash, so the encryption is only as strong as the user’s password and possibly a really inept attacker's inability to guess a SID (because any ept hacker could easily either figure it out or start enumerating).&lt;/div&gt;&lt;div align="left"&gt; &lt;/div&gt;&lt;div align="left"&gt;&lt;/div&gt;&lt;div align="left"&gt;I was the (then later "a") EFS tester at Microsoft for about 3 years. EFS is probably still the primary consumer of DPAPI within the OS. During that time I was also the backup tester for DPAPI.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115812370329424079?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115812370329424079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115812370329424079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115812370329424079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115812370329424079'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/storing-credentials-on-windows.html' title='Storing Credentials on Windows'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115803609498343898</id><published>2006-09-11T21:35:00.000-07:00</published><updated>2006-09-11T21:41:35.063-07:00</updated><title type='text'>Spelling Mistakes</title><content type='html'>Drat! Someone brought some of the previous posts' spelling mistakes to light. Thanks, someone! I'll put scrubbing my content on my to-do list.&lt;br /&gt;&lt;br /&gt;On a related note, why isn't "Google" in Blogger's dictionary? Is it because Google claims that &lt;a href="http://news.com.com/Google+wants+people+to+stop+googling/2100-1030_3-6106479.html"&gt;Google shouldn't be used as a verb&lt;/a&gt; even though the &lt;a href="http://www.oed.com/help/updates/latest-additions.html"&gt;OED&lt;/a&gt; and &lt;a href="http://www.mercurynews.com/mld/mercurynews/business/14985574.htm"&gt;Webster's&lt;/a&gt; say it's kosher now?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115803609498343898?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115803609498343898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115803609498343898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115803609498343898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115803609498343898'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/spelling-mistakes.html' title='Spelling Mistakes'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115803388117532053</id><published>2006-09-11T20:38:00.000-07:00</published><updated>2006-09-11T21:04:41.240-07:00</updated><title type='text'>Pesky Salesmen (Or Maybe Support Reps)</title><content type='html'>I'm posting this so that I can point an unnamed person who keeps emailing me at it and then reuse the same response the next time this happens to me. Feel free to cut and paste this or send a link to your own pesky salesman.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Not-so-dear stranger:&lt;br /&gt;&lt;br /&gt;I tried out several competing applications recently. I had a need that they all claimed to fill. They were each top hits when I searched for applications of that type. Your application was one of them.&lt;br /&gt;&lt;br /&gt;After evaluating them, I determined which one I wanted to use. Yours wasn't it.&lt;br /&gt;&lt;br /&gt;Before I had even finished my evaluation, I received an email from you thanking me for evaluating your product and telling me what it did. This struck me as odd, because if I hadn't already known what it claimed to do I wouldn't have downloaded it now would I?&lt;br /&gt;&lt;br /&gt;A few days later you emailed me again with an offer to help me in my evaluation. Persistent bugger, aren't you?&lt;br /&gt;&lt;br /&gt;A few days after that, yet another mail to see if I needed more time to evaluate your app. Trust me, I don't.&lt;br /&gt;&lt;br /&gt;Moreover, maybe it's just me, but I absolutely hate people trying to sell me things. Yes, I had shown some kind of interest by downloading the software in the first place, but that doesn't mean I wanted to talk to any sales or support staff. If I had, I would have taken the initiative (the same kind of initiative it took to understand what your product does and to download it) to either email or call your company. I'm not shy. Honest.&lt;br /&gt;&lt;br /&gt;Frankly, I wasn't intending to respond at all. I felt I'd already invested enough of my own time in using your software and determining that there are better products on the market. I felt that it wasn't worth spending more of my personal time dealing with you.&lt;br /&gt;&lt;br /&gt;The more I thought about it, though, the more I empathized with you. You're probably a nice enough fellow. You probably believe in your product and just want to show everyone how wonderful it is (or isn't). At the very least, I owe you this bit of advice: please don't sell so hard to me. Or anyone else who only downloads your app. We don't expect or want that. It's the kind of behavior that entirely sours people on a company.&lt;br /&gt;&lt;br /&gt;If you really want to be personally available to help me when I evaluate your product, I suggest you talk to your developers and have them make your contact information easily accessible through the application. The phone numbers and email address you sent me so that I could contact you with any questions? Put them in the app! For that matter, this is the 21st century - give me some IM contact info, too. Let me know up-front that my *personal* support or sales (or whatever your position is) representative for my trial of the product is Bill Smith (not his real name). But stay out of my face with it until I actually want help, please.&lt;br /&gt;&lt;br /&gt;Ok, that's enough ranting from me. I'm not trying to ruin your day. I was just hoping to provide some insight on this particular customer and give you some personal feedback. We only grow as people by helping other people grow, right?&lt;br /&gt;&lt;br /&gt;Thanks for your time and good luck in the future!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115803388117532053?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115803388117532053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115803388117532053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115803388117532053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115803388117532053'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/pesky-salesmen-or-maybe-support-reps.html' title='Pesky Salesmen (Or Maybe Support Reps)'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115803193468235154</id><published>2006-09-11T19:29:00.000-07:00</published><updated>2006-09-11T20:32:14.790-07:00</updated><title type='text'>Impress Your Coworkers!</title><content type='html'>When I arrived at work today I was surprised by a mail from the CEO telling me that he liked my blog. I wondered how he had even found it.&lt;br /&gt;&lt;br /&gt;Then I got an email from marketing telling me that I did a great job in driving traffic toward the company's website. Huh? The morning was only getting weirder.&lt;br /&gt;&lt;br /&gt;The marketing folks (whom I can't ever call "marketroids" here now because they'd know I said it) monitor the hits the ESS website gets. Apparently some people followed links from &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/09/file-under-schadenfreude-warning-i.html"&gt;this blogpost&lt;/a&gt; and visited the site. So everyone in marketing read my blog. And the CEO found it, too. That explained everything.&lt;br /&gt;&lt;br /&gt;I'd like to explain that I'm not in marketing, I'm not trying to shill anything here, and this blog is in no way attempting to represent that company I work for. So any claims that me putting in links like &lt;a href="http://www.essentialsecurity.com/"&gt;this one&lt;/a&gt; are really just some kind of marketing ploy are patently untrue. Seriously, though, this is my blog and it's about whatever I want to write. I don't want anyone to think otherwise.&lt;br /&gt;&lt;br /&gt;Moreover, if you visited ESS and downloaded Taceo, I'd like to let you know that I know that 1.6.5 is buggy. Lots of known bugs. We released it just after I was hired. Don't think for even a second that our up-coming 1.7 release (early October?) is going to be such crap. It will, of course, still be &lt;a href="http://drewthesecuritygeek.blogspot.com/2006/09/software-sucks-but-why.html"&gt;software&lt;/a&gt;. I'll even go so far as to say that if you haven't tried Taceo yet but you've been wondering about it . . . wait until October.&lt;br /&gt;&lt;br /&gt;Because I'd like tomorrow to be just as exciting as today was, I wrote that previous paragraph. I wonder who will say something to me about it. I wonder what those folks will say.&lt;br /&gt;&lt;br /&gt;Someone who shall remain nameless also requested that I not blog about anything too negative like KILLING THE PRESIDENT because it might cast a bad light on ESS. The sentence you just read was intended for that nameless person and for the wonder that is the Google search engine, which should make it easy to find my blog by searching for the phrase KILLING THE PRESIDENT. Luckily, Google knows about alternate forms that some words can have and can substitute them, so I shouldn't have to include phrases like TERMINATE THE LIFE OF THE CHIEF EXECUTIVE or DEAD-IFY DUBYA, but I'll include them anyway.&lt;br /&gt;&lt;br /&gt;On a side note, this means that some strangers have actually been reading my blog. Cool! Hello, strangers from the intarweb! Please make yourselves at home.&lt;br /&gt;&lt;br /&gt;Note to self: Archive a copy of Taceo 1.6.5 and 1.7 when it ships. These could be very useful in a few years when it's job hunt time again, assuming my next gig is also in test. What did I do at ESS? Well, in the first couple I months I helped shake bugs out so that this [point to 1.6.5 while making a disgusting face] worked like this [point to 1.7 accompanied by a less disgusting face].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115803193468235154?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115803193468235154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115803193468235154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115803193468235154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115803193468235154'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/impress-your-coworkers.html' title='Impress Your Coworkers!'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115788773558755304</id><published>2006-09-10T04:07:00.000-07:00</published><updated>2006-09-10T04:36:55.923-07:00</updated><title type='text'>Software Sucks - But Why?</title><content type='html'>&lt;a href="http://scobleizer.wordpress.com/feed/"&gt;Scoble&lt;/a&gt; always makes me react somehow. He makes me think. Sometimes I think he's brilliant; sometimes totally full of crap. But however he does it, he evokes a response from me. That's wonderful!&lt;br /&gt;&lt;br /&gt;One of those thought-invoking posts has been haunting me for over a day now. &lt;a href="http://scobleizer.wordpress.com/2006/09/08/from-seagate-to-sap/"&gt;He visited Seagate and blogged about it&lt;/a&gt;. What really grabbed me was this offhand comment:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;You rarely think about drives or storage media until they fail.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;And you don't, do you? But what's the implication therein? Think about it . . . ok, had some thinking time? Right! What about the things you worry about that haven't entirely crapped out? Things like software?&lt;br /&gt;&lt;br /&gt;Why does software suck?&lt;br /&gt;&lt;br /&gt;As a tester, this question is dear to me. I am constantly surrounded by software that sucks. A lot. I have no idea why. It is my own personal hell. Welcome to my world: software.&lt;br /&gt;&lt;br /&gt;Software sucks because people expect it to. Why code to a higher standard when everyone knows that the UX is gonna be crap? People expect it. Give them the status quo.&lt;br /&gt;&lt;br /&gt;Software sucks because (good?) developers are lazy. Make more with less. That's what they do. And the "with less" means it's gonna suck.&lt;br /&gt;&lt;br /&gt;Software sucks because testers don't bother to find the bugs. Ok, so I'm guilty of letting a few bugs ship, but not out of laziness or ennui. It happens.&lt;br /&gt;&lt;br /&gt;Are any of those good answers? I don't think so.&lt;br /&gt;&lt;br /&gt;In the case of something like Windows or Office, software sucks because 1) it has all kinds of compatibility problems and 2) because they're both expected to ship with *known* bugs (let alone the unknown ones), but more so because 3) they're not stable long-term. Those hard drives from Seagate are pretty stable technology. Seagate might make them larger. Or faster. But they aren't always trying to rearchitect the HDD with every release to make it "exciting". Hardware (once it is fairly venerable) is interested only in *working*. Software is far too experimental.&lt;br /&gt;&lt;br /&gt;Ok, so to build on that, why is software so pliable when hardware isn't? By its very nature, it's easier to change software than hardware. Even firmware updates are really software. Once the beige box is in someone's home it's going to be years untl that person buys a new beige box. Software is highly available as download from any number of sources.&lt;br /&gt;&lt;br /&gt;Let's try this from another angle. Software "engineers" aren't really engineers. They're hackers (in the older, less pergorative sense of the word). And worse, they're almost always playing with their code. They want to keep producing as much as possible. This is almost entirely antithetical to the hardware folks (measure a bunch of times; build once).&lt;br /&gt;&lt;br /&gt;Then again, maybe software sucks because the market bears it.&lt;br /&gt;&lt;br /&gt;*grumble*&lt;br /&gt;&lt;br /&gt;I'm sure I can come up with more. I've really only started to rant on the topic recently.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115788773558755304?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115788773558755304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115788773558755304' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115788773558755304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115788773558755304'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/software-sucks-but-why.html' title='Software Sucks - But Why?'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115788459102682539</id><published>2006-09-10T03:15:00.000-07:00</published><updated>2006-11-30T20:02:46.046-08:00</updated><title type='text'>Fixing the problem that DevDiv has with Authenticode</title><content type='html'>Someone(s) in the developer division at Microsoft do strong name signing. And they don't get Authenticode signing. Authenticode signing is the underlying junk that causes those popups you get in IE about whether or not to trust some publisher when you download an app. Strong name signing is about managed code and CLR stuffs. How does DevDiv not get Authenticode? Well . . . at some point in their building and strong name signing process, they remove the Authenticode signature from an EXE, but leave the info in the file's header that says an Authenticode signature is present. Result? A file that can no longer be Authenticode-signed, so the app either 1) can't ship or 2) will have some popup about an unknown publisher.&lt;br /&gt;&lt;br /&gt;Bummer.&lt;br /&gt;&lt;br /&gt;Here's code for a simple command line app that strips out all Authenticode signature info from a file, including just the entries in the file's header in case Visual Studio worked some nasty mojo on it. Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// delcert.cpp&lt;br /&gt;//&lt;br /&gt;// An app to make hiterto unsignable file signable again.&lt;br /&gt;//&lt;br /&gt;// 8/10/2006 - Drew&lt;br /&gt;//&lt;br /&gt;#define WIN32_LEAN_AND_MEAN&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;imagehlp.h&gt;&lt;br /&gt;#include &lt;malloc.h&gt;&lt;br /&gt;&lt;br /&gt;int wmain(DWORD argc, LPWSTR argv[])&lt;br /&gt;{&lt;br /&gt;    HANDLE hFile = INVALID_HANDLE_VALUE;&lt;br /&gt;    LOADED_IMAGE image;&lt;br /&gt;    DWORD dwResult = ERROR_SUCCESS;&lt;br /&gt;    LPSTR lpszImageName = NULL;&lt;br /&gt;    size_t cchImageName = 0;&lt;br /&gt;&lt;br /&gt;    wprintf(L"\n");&lt;br /&gt;    if(2 != argc  0 == wcscmp(L"-?",argv[1])  0 == wcscmp(L"/?",argv[1]))&lt;br /&gt;    {&lt;br /&gt;        wprintf(L"%s takes one parameter - a file name to strip of its embedded Authenticode signature.\n\n", argv[0]);&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    hFile = CreateFile(argv[1], GENERIC_READ  GENERIC_WRITE, FILE_SHARE_READ  FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL);&lt;br /&gt;    if (INVALID_HANDLE_VALUE == hFile)&lt;br /&gt;    {&lt;br /&gt;        dwResult = GetLastError();&lt;br /&gt;        wprintf(L"CreateFile failed with error 0x%08x\n", dwResult);&lt;br /&gt;        goto cleanupAndExit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if(ImageRemoveCertificate(hFile,0))&lt;br /&gt;    {&lt;br /&gt;        goto cleanupAndExit;&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        dwResult = GetLastError();&lt;br /&gt;        wprintf(L"ImageRemoveCertificate failed with error 0x%08x\n", dwResult);&lt;br /&gt;        if(ERROR_INVALID_PARAMETER != dwResult)&lt;br /&gt;        {&lt;br /&gt;            goto cleanupAndExit;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            wprintf(L"This happens when there's a listing in IMAGE_DIRECTORY_SECURITY\nin the PE's header, but the acutal Authenticode signature has been stripped.\nLet's fix that . . .\n");&lt;br /&gt;            dwResult = ERROR_SUCCESS;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    if(CloseHandle(hFile)) hFile = INVALID_HANDLE_VALUE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// This is somewhat sloppy, but if we're here we've almost certainly found a PE with an&lt;br /&gt;// IMAGE_DIRECTORY_SECURITY that has nonzero SizeOfRawData and/or PointerToRawData,&lt;br /&gt;// but the actual signature (that raw data) has been removed.&lt;br /&gt;//&lt;br /&gt;// What causes this? IIRC, strong name signing something that's already been Authenticode-signed.&lt;br /&gt;//&lt;br /&gt;// The workaround is to crack open the PE and write zeros into the directory entry so that everything&lt;br /&gt;// that eventually calls through the Image*Certificate* APIs won't choke.&lt;br /&gt;&lt;br /&gt;    cchImageName = wcslen(argv[1]) +1;&lt;br /&gt;    lpszImageName = (LPSTR)malloc(cchImageName); // Yeah - so I'm all old-school mallocy!&lt;br /&gt;    if(!lpszImageName)&lt;br /&gt;    {&lt;br /&gt;        dwResult = GetLastError();&lt;br /&gt;        wprintf(L"Malloc failed. GLE == 0x%08x\n", dwResult);&lt;br /&gt;        goto cleanupAndExit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if (-1 == sprintf_s(lpszImageName, cchImageName, "%S", argv[1]))&lt;br /&gt;    {&lt;br /&gt;        dwResult = GetLastError();&lt;br /&gt;        wprintf(L"Failed to copy argv[1] to string of chars. GLE == x0%08x\n", dwResult);&lt;br /&gt;        goto cleanupAndExit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if(! MapAndLoad(lpszImageName, NULL, &amp;image, FALSE, FALSE))&lt;br /&gt;    {&lt;br /&gt;        dwResult = GetLastError();&lt;br /&gt;        wprintf(L"MapAndLoad failed. GLE == 0x%08x", dwResult);&lt;br /&gt;        goto cleanupAndExit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    wprintf(L"certificates-&gt;Size == 0x%08x\n", image.FileHeader-&gt;OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size);&lt;br /&gt;    wprintf(L"certificates-&gt;VA == 0x%08x\n", image.FileHeader-&gt;OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress);&lt;br /&gt;    wprintf(L"Setting both fields to zero . . .\n");&lt;br /&gt;    image.FileHeader-&gt;OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size = 0;&lt;br /&gt;    image.FileHeader-&gt;OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress = 0;&lt;br /&gt;&lt;br /&gt;    if(! UnMapAndLoad(&amp;image))&lt;br /&gt;    {&lt;br /&gt;        dwResult = GetLastError();&lt;br /&gt;        wprintf(L"Failed to UnMapAndLoad. GLE == 0x%08x\n", dwResult);&lt;br /&gt;        goto cleanupAndExit;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;cleanupAndExit:&lt;br /&gt;    if(INVALID_HANDLE_VALUE != hFile) CloseHandle(hFile);&lt;br /&gt;    if(lpszImageName) free(lpszImageName);&lt;br /&gt;    if(ERROR_SUCCESS == dwResult) wprintf(L"Succeeded.\n");&lt;br /&gt;    wprintf(L"\n");&lt;br /&gt;    return dwResult;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115788459102682539?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115788459102682539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115788459102682539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115788459102682539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115788459102682539'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/fixing-problem-that-devdiv-has-with.html' title='Fixing the problem that DevDiv has with Authenticode'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115776216588585417</id><published>2006-09-08T17:09:00.000-07:00</published><updated>2006-09-08T17:36:06.580-07:00</updated><title type='text'>File Under: Schadenfreude (Warning: I swear in this one!)</title><content type='html'>&lt;a href="http://minimsft.blogspot.com/2006/09/kicking-spsa-can-again-raises-and-66th.html#c115749330219999380"&gt;This&lt;/a&gt; makes me laugh. Here is it in its full URL-y splendor in case you're a 'softie and don't want to accidentally visit Mini from work:&lt;br /&gt;&lt;a href="http://minimsft.blogspot.com/2006/09/kicking-spsa-can-again-raises-and-66th.html#c115749330219999380"&gt;http://minimsft.blogspot.com/2006/09/kicking-spsa-can-again-raises-and-66th.html#c115749330219999380&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I laugh the nervous laughter of an ex-Microsoft's who was increasingly ever more aware of draconian IT practices over the years. Ha. Ha ha. Ha! Ha ha ha ha ha. Oh, dear . . .&lt;br /&gt;&lt;br /&gt;I think Microsoft doesn't get it. Again. Surprise! ;-) Tech geeks live and breathe connectivity. They absolutely need their web access. But why? Is it the web? No. It's the information, stupid. Yes, that means Microsoft need to see mine's site. Because &lt;strong&gt;THAT'S WHAT PASSES FOR TRANSPARENCY AT MICROSOFT&lt;/strong&gt;. They need to know what's happening throughout the company. Even if that means watching all the troll food and its inevitable reactions scroll by (&lt;a href="http://minimsft.blogspot.com/2006/09/kicking-spsa-can-again-raises-and-66th.html#c115742612044532112"&gt;PgDn, PgDn, PgDn &lt;/a&gt;. . .). Hell, maybe that means getting their pr0n (no link - make your own). Whatever it takes to make them more productive. Who am I to say? Why does MSFT care what their employees read at work? At all? *harrumph*&lt;br /&gt;&lt;br /&gt;This totally stinks of Microsoft's leadership being afraid of the plebes. And they should be. If they hired right, all of those plebes are smarter and better fit to lead than the senatorial class of 68+ ("partner") folks laying down the laws.&lt;br /&gt;&lt;br /&gt;So what happens next, Microsoft? If you want to bleed talent, I'd love to hire some! Give me your smart, your driven, your undervalued masses . . .&lt;br /&gt;[Drew strikes a Statue of Liberty pose.]&lt;br /&gt;&lt;br /&gt;We're always hiring talent here at &lt;a href="http://www.essentialsecurity.com/"&gt;ESS&lt;/a&gt;. Even if the job board doesn't say so. Just try us. If you're a superstar we're not gonna say no. Then again, if you're a superstar you don't really need the invitation, do you? Just come on in!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115776216588585417?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115776216588585417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115776216588585417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115776216588585417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115776216588585417'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/file-under-schadenfreude-warning-i.html' title='File Under: Schadenfreude (Warning: I swear in this one!)'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115776040810282571</id><published>2006-09-08T16:47:00.000-07:00</published><updated>2006-09-08T17:06:48.123-07:00</updated><title type='text'>I Resolve . . .</title><content type='html'>I resolve to post something at least once a day. Something of content (links, even) at least twice a week.&lt;br /&gt;&lt;br /&gt;I need to just state that publicly. Gotta stop the slide into blog netherland.&lt;br /&gt;&lt;br /&gt;Ok, so here's something maybe of substance:&lt;br /&gt;&lt;br /&gt;I read Joel Spolsky's &lt;a href="http://www.joelonsoftware.com/rss.xml"&gt;blog&lt;/a&gt; pretty religiously. Meaning the feed shows up in &lt;a href="http://www.rssbandit.org/"&gt;RSS Bandit&lt;/a&gt; and eventually I get to it. I somehow ended up being the de facto build engineer a few weeks ago. While I was trying to figure out how to link &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;, &lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt;, our couple of email servers (don't even ask why we have separate POP3 *and* Exchange servers - I mean it - don't ask), my nightly build script (yeah, no link there 'cause it's some in-house kludge that I cooked up in a hurry), and product supports software (no name mentioned; nothing linked) I decided to look into that &lt;a href="http://www.fogcreek.com/FogBugz/"&gt;FogBugZ&lt;/a&gt; thing Joel's always peddling. Neat! In fact, very very neat. Our product support guy is looking into it right now and he seems impressed, too. I have this crazy feeling that a lot of the infrastructure problems I've been dealing with will go *poof* and I'll only have a few loose ends to tie up.&lt;br /&gt;&lt;br /&gt;Does anyone (if you're reading this) have any opinions about FogBugZ? Frankly, it makes that crapola I was using at Microsoft look like . . . ok, crapola. I'm not sure it scales to the level of Microsoft's money-making divisions (all two of them), mind you, but &lt;a href="http://www.essentialsecurity.com/"&gt;ESS&lt;/a&gt; isn't Microsoft. There are pluses and minuses in that, but so far I think I'm in the black.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115776040810282571?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115776040810282571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115776040810282571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115776040810282571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115776040810282571'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/i-resolve.html' title='I Resolve . . .'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115775854272010671</id><published>2006-09-08T16:33:00.000-07:00</published><updated>2006-09-08T16:35:42.726-07:00</updated><title type='text'>Man, I Gotta Get Better at This</title><content type='html'>It's been waaaaaay too long since my last post. I really need to post some poop about work. I'm sleep-deprived now from thinking through work-related stuff all night. My brain just wouldn't let me rest. I promise some more substantive post this weekend. (As if anyone is reading anyway.) Maybe I'll post that Authenticode signature pruning source code. Still have to get the ok from the CEO (my fault, not his).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115775854272010671?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115775854272010671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115775854272010671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115775854272010671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115775854272010671'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/09/man-i-gotta-get-better-at-this.html' title='Man, I Gotta Get Better at This'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115603360727369715</id><published>2006-08-19T17:15:00.000-07:00</published><updated>2006-08-19T17:26:47.303-07:00</updated><title type='text'>Too Busy to Blog? Say It Ain't So.</title><content type='html'>Nope. It's so. I've had a pretty busy last ten (ten???) days. Lots of hat-swapping as I got to play tester, developer, IT guy, and PM among other sundry duties. Here are some highlights:&lt;br /&gt;&lt;br /&gt;- I wrote a tool to work around a problem that Visual Studio can create with Authenticode signatures on EXEs and DLLs. Given that I was the Authenticode tester in my previous life at Microsoft and I understood the problem, I was the one to write an app to get around the Microsoft cruft. I'll blog about that soon and I'll ask Ray (our CEO) if he's cool with me even posting source code for the app.&lt;br /&gt;&lt;br /&gt;- I got to write a build script so that our devs could stop spending so much time manually doing different tasks to get a build out. Next week, I'll work on setting up a scheduled task to check Subversion for source changes and automagically build, share out the build MSIs, and send everyone a build mail. Maybe I'll even have the test machines automatically install the new build overnight so that I have shiny new bits waiting for me in the mornings.&lt;br /&gt;&lt;br /&gt;- I hacked an MSI to change the installer's behavior. Being able to continue the install even though files were in use and couldn't be updated hosed everything. Because we were about to release, the decision was to remove that option. Unfortunately this wasted some time for the folks in marketing who were nice enough to install the new build for us. I should really figure out some way to repay them for their kindness in helping test the software.&lt;br /&gt;&lt;br /&gt;- I got Bugzilla to mail people when bugs were updated. It was all new to me. Luckily it was in Perl, so it wasn't that difficult to understand. I guess that functionality had been broken since late April. Sheesh! No wonder the PM and the devs *and* Nan (the head of creative marketing) had all complained to me about how it didn't seem to work any more. Part of me wonders why nobody else bothered looking into the problem for the last 4 months, but I don't want to point fingers or throw stones, so I'll just shut up about that.&lt;br /&gt;&lt;br /&gt;- Did I mention that I'm *still* working on that spec for our product that should have existed eons ago? I got too sidetracked with testing and reproducing customer problems to put enough time into it so far. Progress: sluggish.&lt;br /&gt;&lt;br /&gt;- There was also a little management hat goin' on. I met with some recruiters to help determine what I'm looking for in a boss for me ('cause who in his or her right mind wants to be an SDET Lead?). And I also set up some phone screens with candidates to be my SDET peers. Based on their resumes, those should be fun. I hate to say it, but having recently gone through so many interviews myself, I started to enjoy interviews. Yeah - I know - weird.&lt;br /&gt;&lt;br /&gt;Lotsa stuff. I don't even think that covers everything. It definitely leaves out the near-daily fire drills. Those have to stop. Soon. Once I get a little more process in place.&lt;br /&gt;&lt;br /&gt;I think my next work-related blogpost will be about our product: what it does, what it doesn't do, how it helps people, and a bird's eye architectural overview. That might help my only reader so far that I know of understand what I'm working on now and it will also keep my focus on cranking out that spec. After that maybe I'll drill down into the technical, social, and general business worldy kind of problems with the model. Or maybe I won't. I suppose I should get Ray's ok first for that, too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115603360727369715?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115603360727369715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115603360727369715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115603360727369715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115603360727369715'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/08/too-busy-to-blog-say-it-aint-so.html' title='Too Busy to Blog? Say It Ain&apos;t So.'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115518139651547352</id><published>2006-08-09T20:39:00.000-07:00</published><updated>2006-08-09T20:43:16.523-07:00</updated><title type='text'>Security-related Daily WTF Post</title><content type='html'>I've been too wrapped up in both work and personal stuff lately. I've been behind in my news- and blog-reading. It's about sunset and I finally read today's Daily WTF post. (I should really link to them in that "links" sidebar when I have more time to pimp out my blog next weekend.)&lt;br /&gt;&lt;br /&gt;Anywho . . . here's the Daily WTF post. Enjoy!&lt;br /&gt;&lt;a href="http://thedailywtf.com/forums/thread/85272.aspx"&gt;http://thedailywtf.com/forums/thread/85272.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pop quiz: What wasn't right about that email? Try answering *before* reading the comments on the original blogpost.  Ouch.!Just . . . ouch.&lt;br /&gt;&lt;br /&gt;- Drew&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115518139651547352?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115518139651547352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115518139651547352' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115518139651547352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115518139651547352'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/08/security-related-daily-wtf-post.html' title='Security-related Daily WTF Post'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115517745277273819</id><published>2006-08-09T19:30:00.000-07:00</published><updated>2006-08-09T19:39:42.510-07:00</updated><title type='text'>Ramping Up on Everything</title><content type='html'>For the past several weeks I've been busy ramping up on everything at ESS. How does the product actually work? What . . . no spec? What's the codebase look like? How 'bout the build process? What's the release cycle like? Who the heck are the customers and how are we meeting their desires (or not)? All those things and more.&lt;br /&gt;&lt;br /&gt;After a great deal of ad hoc testing trying to figure out how things work (or should), I think I have a pretty good grip on what an end user would/should expect. So it's time for a test plan. ESS had nada for testing before I showed up. Nothing. Zip. This will be the first attempt anyone's made at a test plan. Ideally, I could start with a spec and build the plan from there, but things aren't always ideal.&lt;br /&gt;&lt;br /&gt;Luckily, the job of writing a spec has fallen to me, so the world is more ideal than I had thought. Or is it? I'm just some test schlub and I'm new to the product, but I'm the one expected to write the spec? Aaaaargh! And there's a crapstorm of testing that needs doing NOW because we're about to put out another dot release? Double aaaaargh! I'm just hoping to muddle through and have draft one ready for lots of red ink from the rest of the team by the end of the week.&lt;br /&gt;&lt;br /&gt;I'll drill down into what the product is, who the customers are, et al. in later posts.&lt;br /&gt;&lt;br /&gt;- Drew&lt;br /&gt;&lt;br /&gt;(P.S. I wonder whether or not I should actually use the spell-checker that Blogger offers. It's a cool feature, no doubt, but I want this to be off the cuff. Maybe a few misspellings work better than dictionary-perfect blogposts. I dunno.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115517745277273819?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115517745277273819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115517745277273819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115517745277273819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115517745277273819'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/08/ramping-up-on-everything.html' title='Ramping Up on Everything'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32439350.post-115510914802883868</id><published>2006-08-09T00:18:00.000-07:00</published><updated>2006-08-09T00:39:08.036-07:00</updated><title type='text'>Intro</title><content type='html'>So this is my frist p0st . . .&lt;br /&gt;&lt;br /&gt;Who I am:&lt;br /&gt;An ex-Microsoft dev in test. This means I live and breathe code. The sole tester at a startup. This means I'm interested or at least willing to take some chances and play "business". A total security geek. This means I'm all about either breaking into some system or securing it. That's the most interesting game of all . . . (Hack my blog - dare ya - go ' head - it's worth a laugh!)&lt;br /&gt;&lt;br /&gt;What this is all about:&lt;br /&gt;I'd ideally like to explain my job to my mom. Beyond that, it would be nice to explain it to all y'all, too . . .&lt;br /&gt;&lt;br /&gt;My sitch:&lt;br /&gt;After 7 years of Microsoft  (test dev in Windows security), I'm now a (*the*) tester at a startup doing DRM stuffs. We're "Essential Security Software" in case you're keeping score at home. This is my blog about the trials and tribulations of making a startup start up. In the security space. As some insider. That's it. My schtick. Not so sexy, maybe, but it's *mine*.&lt;br /&gt;&lt;br /&gt;More on the trials and tribulations of my job later. And probably also more about past things I should do even if the official documentation didn't.&lt;br /&gt;&lt;br /&gt;- Drew&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32439350-115510914802883868?l=drewthesecuritygeek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drewthesecuritygeek.blogspot.com/feeds/115510914802883868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32439350&amp;postID=115510914802883868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115510914802883868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32439350/posts/default/115510914802883868'/><link rel='alternate' type='text/html' href='http://drewthesecuritygeek.blogspot.com/2006/08/intro.html' title='Intro'/><author><name>Drew: The Security Geek</name><uri>http://www.blogger.com/profile/16937034695866630175</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
