<?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-20416786</id><updated>2011-12-21T07:04:41.358-08:00</updated><title type='text'>Random Bits</title><subtitle type='html'>Ramblings on technology, programming, information security, music, humor, philosophy.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20416786.post-432801289445425177</id><published>2008-10-09T20:57:00.001-07:00</published><updated>2008-10-09T20:58:24.921-07:00</updated><title type='text'>HUM Playing Reunion Show New Year's Eve 2008!!1!!</title><content type='html'>&lt;p&gt;My favorite band &lt;a href="http://www.myspace.com/hum"&gt;HUM&lt;/a&gt;, who broke up years ago, is playing a show new years eve at The Double Door.&amp;#160; What is even SUPER MORE AWESOMER is that they're playing with one of my favorite existing bands &lt;a href="http://thelifeandtimes.net/"&gt;The Life and Times&lt;/a&gt;.&amp;#160; My wonderful wife actually found out about the show looking for a birthday present for me.&amp;#160; I can't believe that I didn't hear about this sooner.&amp;#160; I got my tickets and will commence preparations for rock!&amp;#160; Science!&amp;#160; Loud guitar!&amp;#160; Open bar!&amp;#160; Our tickets are ordered.&lt;/p&gt;  &lt;p&gt;&amp;quot;I'll send you flowers made of silent tiny pieces of the sun.&amp;quot; - HUM&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-432801289445425177?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/432801289445425177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=432801289445425177' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/432801289445425177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/432801289445425177'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2008/10/hum-playing-reunion-show-new-year-eve.html' title='HUM Playing Reunion Show New Year&amp;#39;s Eve 2008!!1!!'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20416786.post-2597245095097966444</id><published>2008-10-09T20:41:00.001-07:00</published><updated>2008-10-09T20:44:17.210-07:00</updated><title type='text'>Visual Basic 6 Support for Microsoft's LOC Counter</title><content type='html'>&lt;p&gt;Microsoft has released a great free lines-of-code (LOC) counter.&amp;#160; It is available for download here: &lt;a title="http://code.msdn.microsoft.com/LOCCounter" href="http://code.msdn.microsoft.com/LOCCounter"&gt;http://code.msdn.microsoft.com/LOCCounter&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The tool, however, doesn't come with VB6 support.&amp;#160; As much as I hate VB6, we still have a ton of it where I work.&amp;#160; Luckily, the tool is extensible and by editing the LineCounters.xml file and creating some regular expressions I was able to get it to work pretty well with VB6.&amp;#160; The LineCounters.xml file is installed in the same directory as the program.&amp;#160; Open it in your favorite text editor and plop in the following lineCounter section (after one of the /lineCounter closing tags of course):&lt;/p&gt;  &lt;p&gt;&lt;!--&lt;br /&gt;{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Dina;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;}??\fs20 \cf1 &amp;lt;\cf3 lineCounter\cf1  \cf4 name\cf1 =\cf0 "\cf1 VB6\cf0 "\cf1 &amp;gt;\par ??  &amp;lt;\cf3 fileExtension\cf1 &amp;gt;\cf0 cls\cf1 &amp;lt;/\cf3 fileExtension\cf1 &amp;gt;\par ??  &amp;lt;\cf3 fileExtension\cf1 &amp;gt;\cf0 bas\cf1 &amp;lt;/\cf3 fileExtension\cf1 &amp;gt;\par ??  &amp;lt;\cf3 fileExtension\cf1 &amp;gt;\cf0 frm\cf1 &amp;lt;/\cf3 fileExtension\cf1 &amp;gt;\par ??  &amp;lt;\cf3 fileExtension\cf1 &amp;gt;\cf0 dsr\cf1 &amp;lt;/\cf3 fileExtension\cf1 &amp;gt;\par ??  &amp;lt;\cf3 codeArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 Blank lines\cf0 "\cf1  \cf4 isCode\cf1 =\cf0 "\cf1 false\cf0 "\cf1 &amp;gt;\par ??    &amp;lt;\cf3 expression\cf1 &amp;gt;\cf0 ^\\s*$\cf1 &amp;lt;/\cf3 expression\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 codeArea\cf1 &amp;gt;\par ??  &amp;lt;\cf3 codeArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 ' comments\cf0 "\cf1  \cf4 isCode\cf1 =\cf0 "\cf1 false\cf0 "\cf1 &amp;gt;\par ??    &amp;lt;\cf3 expression\cf1 &amp;gt;\cf0 ^\\s*'.*$\cf1 &amp;lt;/\cf3 expression\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 codeArea\cf1 &amp;gt;\par ??  &amp;lt;\cf3 codeArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 VB6 Class and Form Garbage\cf0 "\cf1  \cf4 isCode\cf1 =\cf0 "\cf1 false\cf0 "\cf1  \cf4 multiLine\cf1 =\cf0 "\cf1 true\cf0 "\cf1 &amp;gt;\par ??      &amp;lt;\cf3 startExpression\cf1 &amp;gt;\cf0 ^VERSION\\s.*$\cf1 &amp;lt;/\cf3 startExpression\cf1 &amp;gt;\par ??      &amp;lt;\cf3 endExpression\cf1 &amp;gt;\cf0 ^Option Explicit.*$\cf1 &amp;lt;/\cf3 endExpression\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 codeArea\cf1 &amp;gt;\par ??  &amp;lt;\cf3 codeArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 VB6 File Attributes\cf0 "\cf1  \cf4 isCode\cf1 =\cf0 "\cf1 false\cf0 "\cf1 &amp;gt;\par ??      &amp;lt;\cf3 expression\cf1 &amp;gt;\cf0 ^Attribute\\s.*$\cf1 &amp;lt;/\cf3 expression\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 codeArea\cf1 &amp;gt;\par ??  &amp;lt;\cf3 codeArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 VB6 Option Explicits\cf0 "\cf1  \cf4 isCode\cf1 =\cf0 "\cf1 false\cf0 "\cf1 &amp;gt;\par ??      &amp;lt;\cf3 expression\cf1 &amp;gt;\cf0 ^Option Explicit.*$\cf1 &amp;lt;/\cf3 expression\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 codeArea\cf1 &amp;gt;\par ??  &amp;lt;\cf3 pspMetricArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 Class\cf0 "\cf1  \cf4 toCount\cf1 =\cf0 "\cf1 true\cf0 "\cf1  \cf4 caseSensitive\cf1 =\cf0 "\cf1 false\cf0 "\cf1  &amp;gt;\par ??    &amp;lt;\cf3 pspMetricAreaStartFlag\cf1 &amp;gt;\cf0 '(\\W)*PSP_METRICS_CLASS_BEGIN\cf1 &amp;lt;/\cf3 pspMetricAreaStartFlag\cf1 &amp;gt;\par ??    &amp;lt;\cf3 pspMetricAreaEndFlag\cf1 &amp;gt;\cf0 '(\\W)*PSP_METRICS_CLASS_END\cf1 &amp;lt;/\cf3 pspMetricAreaEndFlag\cf1 &amp;gt;\par ??    &amp;lt;\cf3 PspMetricNameFlag\cf1 &amp;gt;\cf0 (?\cf4 &amp;amp;lt;\cf0 =PSP_METRICS_CLASS_BEGIN(\\W)*:(\\W)*)(\\w)*\cf1 &amp;lt;/\cf3 PspMetricNameFlag\cf1 &amp;gt;\par ??    &amp;lt;\cf3 ObjectType\cf1 &amp;gt;\cf0 (?\cf4 &amp;amp;lt;\cf0 =\cf4 &amp;amp;lt;\cf0 Object_Type\cf4 &amp;amp;gt;\cf0 (\\W)*:(\\W)*)(\\w)*\cf1 &amp;lt;/\cf3 ObjectType\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 pspMetricArea\cf1 &amp;gt;\par ??  &amp;lt;\cf3 pspMetricArea\cf1  \cf4 name\cf1 =\cf0 "\cf1 Method\cf0 "\cf1  \cf4 toCount\cf1 =\cf0 "\cf1 true\cf0 "\cf1  \cf4 caseSensitive\cf1 =\cf0 "\cf1 false\cf0 "\cf1  &amp;gt;\par ??    &amp;lt;\cf3 pspMetricAreaStartFlag\cf1 &amp;gt;\cf0 '(\\W)*PSP_METRICS_METHOD_BEGIN\cf1 &amp;lt;/\cf3 pspMetricAreaStartFlag\cf1 &amp;gt;\par ??    &amp;lt;\cf3 pspMetricAreaEndFlag\cf1 &amp;gt;\cf0 '(\\W)*PSP_METRICS_METHOD_END\cf1 &amp;lt;/\cf3 pspMetricAreaEndFlag\cf1 &amp;gt;\par ??    &amp;lt;\cf3 PspMetricNameFlag\cf1 &amp;gt;\cf0 (?\cf4 &amp;amp;lt;\cf0 =PSP_METRICS_METHOD_BEGIN(\\W)*:(\\W)*)(\\w)*\cf1 &amp;lt;/\cf3 PspMetricNameFlag\cf1 &amp;gt;\par ??    &amp;lt;\cf3 ObjectType\cf1 &amp;gt;\cf0 (?\cf4 &amp;amp;lt;\cf0 =\cf4 &amp;amp;lt;\cf0 Object_Type\cf4 &amp;amp;gt;\cf0 (\\W)*:(\\W)*)(\\w)*\cf1 &amp;lt;/\cf3 ObjectType\cf1 &amp;gt;\par ??  &amp;lt;/\cf3 pspMetricArea\cf1 &amp;gt;\par ??&amp;lt;/\cf3 lineCounter\cf1 &amp;gt;}&lt;br /&gt;--&gt;&lt;/p&gt;  &lt;div style="font-size: 10pt; background: white; color: black; font-family: dina"&gt;   &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;lineCounter&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;VB6&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;cls&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;bas&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;frm&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;dsr&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;fileExtension&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Blank lines&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isCode&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;^\s*$&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;' comments&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isCode&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;^\s*'.*$&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;VB6 Class and Form Garbage&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isCode&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;multiLine&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;startExpression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;^VERSION\s.*$&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;startExpression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endExpression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;^Option Explicit.*$&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;endExpression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;VB6 File Attributes&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isCode&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;^Attribute\s.*$&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;VB6 Option Explicits&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;isCode&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;^Option Explicit.*$&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;expression&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;codeArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Class&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;toCount&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;caseSensitive&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaStartFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;'(\W)*PSP_METRICS_CLASS_BEGIN&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaStartFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaEndFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;'(\W)*PSP_METRICS_CLASS_END&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaEndFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PspMetricNameFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;(?&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;=PSP_METRICS_CLASS_BEGIN(\W)*:(\W)*)(\w)*&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PspMetricNameFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ObjectType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;(?&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;=&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;Object_Type&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;(\W)*:(\W)*)(\w)*&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ObjectType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricArea&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;Method&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;toCount&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;caseSensitive&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaStartFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;'(\W)*PSP_METRICS_METHOD_BEGIN&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaStartFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaEndFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;'(\W)*PSP_METRICS_METHOD_END&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricAreaEndFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;PspMetricNameFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;(?&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;=PSP_METRICS_METHOD_BEGIN(\W)*:(\W)*)(\w)*&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;PspMetricNameFlag&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;ObjectType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;(?&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;=&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;Object_Type&lt;span style="color: red"&gt;&amp;amp;gt;&lt;/span&gt;(\W)*:(\W)*)(\w)*&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;ObjectType&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;pspMetricArea&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0px"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;lineCounter&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Note that for this to work properly to remove the garbage at the top of a form file the forms must have &amp;quot;Option Explicit&amp;quot; in them.&amp;#160; This worked for me as that has always been a standard.&amp;#160; Hopefully it is useful for someone else.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-2597245095097966444?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/2597245095097966444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=2597245095097966444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/2597245095097966444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/2597245095097966444'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2008/10/visual-basic-6-support-for-microsoft.html' title='Visual Basic 6 Support for Microsoft&amp;#39;s LOC Counter'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-523142651727209820</id><published>2008-09-15T20:52:00.000-07:00</published><updated>2008-09-15T21:34:44.638-07:00</updated><title type='text'>Guitar Effects Pedal Board - Ninja Style</title><content type='html'>Almost everyone uses Velcro to secure guitar effects pedals to their pedal boards and, until recently, I was no exception. Unfortunately, the Velcro on my board just wasn't sticking well anymore so I began looking for other options. The board itself was still very nice. It was constructed for me by my former bassist (who is now a carpenter for good reason) and I wanted to reuse the board. I stumbled across the following solution on the Internet somewhere so I cannot take credit for it. I just thought I would provide a write up and some pictures for anyone else who is tired of being oppressed by the tyranny of Velcro.&lt;br /&gt;&lt;br /&gt;All you need to mount your pedals securely is a plank of wood (the pedal board itself), a bicycle chain, a bicycle chain repair tool, and some small wood screws. A drill also helps and I also used some cat5 data cable staples to clean up the job a bit.&lt;br /&gt;&lt;br /&gt;The idea is to use links from a bicycle chain to mount the pedals securely to your pedal board. If you have the chain you will need to use the repair tool to break the links apart:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EroiUCXdGnw/SM8vYX7YQdI/AAAAAAAAAAQ/-rxDY5HIzcI/s1600-h/IMG_0340.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_EroiUCXdGnw/SM8vYX7YQdI/AAAAAAAAAAQ/-rxDY5HIzcI/s320/IMG_0340.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246464186696352210" /&gt;&lt;/a&gt;It was difficult to use this cheap tool (about $5 at Wal Mart) to break the links apart so I assisted myself with a pair of vice grips which resulted in me breaking the tool:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8v_0ZbvpI/AAAAAAAAAAY/PJQjocVvCxA/s1600-h/IMG_0341.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8v_0ZbvpI/AAAAAAAAAAY/PJQjocVvCxA/s320/IMG_0341.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246464864353500818" /&gt;&lt;/a&gt;After going back to buy two more of the same tool I ended up with a pile of links:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8wbx4XEoI/AAAAAAAAAAg/JBVhOyHg7xg/s1600-h/IMG_0342.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8wbx4XEoI/AAAAAAAAAAg/JBVhOyHg7xg/s320/IMG_0342.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246465344714248834" /&gt;&lt;/a&gt;Once you have the links you need to attach them to the bottom of your pedals using the existing screws on the bottom of the pedals whenever possible:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EroiUCXdGnw/SM8wz65BKYI/AAAAAAAAAAo/YylWj9KxBuY/s1600-h/IMG_0343.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_EroiUCXdGnw/SM8wz65BKYI/AAAAAAAAAAo/YylWj9KxBuY/s320/IMG_0343.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246465759449786754" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8xA01HDpI/AAAAAAAAAAw/JFiF2vY3AnA/s1600-h/IMG_0344.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8xA01HDpI/AAAAAAAAAAw/JFiF2vY3AnA/s320/IMG_0344.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246465981161082514" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EroiUCXdGnw/SM8xNeSXfTI/AAAAAAAAAA4/OgcsTTZ6L94/s1600-h/IMG_0345.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_EroiUCXdGnw/SM8xNeSXfTI/AAAAAAAAAA4/OgcsTTZ6L94/s320/IMG_0345.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246466198448078130" /&gt;&lt;/a&gt;Then, screw them down to the board using the wood screws:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_EroiUCXdGnw/SM8yOIlYDNI/AAAAAAAAABA/lSK22z1DAhk/s1600-h/IMG_0347.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_EroiUCXdGnw/SM8yOIlYDNI/AAAAAAAAABA/lSK22z1DAhk/s320/IMG_0347.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246467309313723602" /&gt;&lt;/a&gt;Some pedals didn't have screws on the bottom (or the screws weren't close enough to the edge). On my (&lt;a href="http://jstrassburg.blogspot.com/2006/01/pro-co-rat-distortion-pedal.html"&gt;modified&lt;/a&gt;) Pro Co Rat and my Big Muff I needed to drill some holes then use some random small sheet metal screws I had laying around to attach the links:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EroiUCXdGnw/SM8zBqkfj5I/AAAAAAAAABI/gD2T0MI5Tyk/s1600-h/IMG_0351.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_EroiUCXdGnw/SM8zBqkfj5I/AAAAAAAAABI/gD2T0MI5Tyk/s320/IMG_0351.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246468194610155410" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_EroiUCXdGnw/SM8zMaR46VI/AAAAAAAAABQ/VAKpbs4AXIE/s1600-h/IMG_0352.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_EroiUCXdGnw/SM8zMaR46VI/AAAAAAAAABQ/VAKpbs4AXIE/s320/IMG_0352.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246468379215718738" /&gt;&lt;/a&gt;Here is the mostly finished board:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_EroiUCXdGnw/SM8zacj6NkI/AAAAAAAAABY/8V_Sw_Leqxc/s1600-h/IMG_0353.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_EroiUCXdGnw/SM8zacj6NkI/AAAAAAAAABY/8V_Sw_Leqxc/s320/IMG_0353.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246468620346340930" /&gt;&lt;/a&gt;I use a homemade power supply to power all my pedals as it was much cheaper than the commercial alternatives, just as good and fun to build. To keep all the wiring neat I used some cat5 data cable staples (and one NM cable staple) after I had everything routed how I wanted it:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8z6WCpAKI/AAAAAAAAABg/jJivNxIdNRU/s1600-h/IMG_0354.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_EroiUCXdGnw/SM8z6WCpAKI/AAAAAAAAABg/jJivNxIdNRU/s320/IMG_0354.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5246469168352002210" /&gt;&lt;/a&gt;Rock on...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-523142651727209820?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/523142651727209820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=523142651727209820' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/523142651727209820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/523142651727209820'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2008/09/guitar-effects-pedal-board-ninja-style.html' title='Guitar Effects Pedal Board - Ninja Style'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_EroiUCXdGnw/SM8vYX7YQdI/AAAAAAAAAAQ/-rxDY5HIzcI/s72-c/IMG_0340.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20416786.post-2540445555194965600</id><published>2008-06-13T13:20:00.001-07:00</published><updated>2008-06-13T13:53:37.468-07:00</updated><title type='text'>Improved Administration of AzMan with DSACLS</title><content type='html'>I've recently been working with Microsoft Authorization Manager (AzMan) using ADAM for storage.  I became frustrated when I noticed that, for administration, AzMan only supports two roles: Administrators and Readers.  In our particular implementation, we have a development tier (for application development) a QA tier (for QA testing) and a production tier (for, wait for it, production applications).  The idea is that the applications can be defined on each tier and different folks can have access to various application features on the different tiers.  For example, developers would have access to all application functions when running in development mode but not when running in production mode.&lt;br /&gt;&lt;br /&gt;My desire was to set the development AzMan store so that the developers could create and configure their applications in development and then have their software released to various tiers.  Unfortunately, by making them administrators at the store level, they can delete any configured application and delete the store itself.  By making them readers they cannot create or configure new applications.  It seemed like it was all or nothing here.&lt;br /&gt;&lt;br /&gt;Fortunately, I figured out the permission scheme in the underlying ADAM directory service and was able to modify it exactly how I wanted through the use of the DSACLS.EXE program.&lt;br /&gt;&lt;br /&gt;The permission set I wanted for developers was read and write and create applications but not delete applications or the authorization store.  On our ADAM server, let's say there was an application partition called CN=AzManPartition that was to house our authorization store.  By using ADAM ADSI Edit you can see that there is a CN=Roles,CN=AzManPartition container defined where the Administrators and Readers groups are defined.  I created a new group here called CN=Developers that I was going to use to put the developers in.  If you haven't used ADAM ADSI Edit before it is done like this:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Right-click on CN=Roles,CN=AzManPartition and select New-&gt;Object&lt;br /&gt;Choose Group and click Next&lt;br /&gt;Enter the name (in this case Developers) for the cn attribute&lt;br /&gt;For the groupType enter -2147483646 (which denotes a user group)&lt;/blockquote&gt;&lt;br /&gt;To edit the membership of this group:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Right-click on CN=Developers,CN=Roles,CN=AzManPartition and select Properties&lt;br /&gt;Find the "member" property and click Edit&lt;br /&gt;Select "Add Windows Account" to add users or groups from Active Directory&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;One further thing, members of this Developers group will also need read access when we create the store so add the Developers group as a member of the Readers group:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Right-click on CN=Readers,CN=Roles,CN=AzManPartition and select Properties&lt;br /&gt;Find the "member" property and click Edit&lt;br /&gt;Select "Add ADAM Account"&lt;br /&gt;Enter CN=Developers,CN=Roles,CN=AzManPartition and click OK&lt;/blockquote&gt;&lt;br /&gt;Now we can create our AzMan store.  Run the AzMan snap-in and ensure you're in developer mode:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Right-click on "Authorization Manager" and click Options&lt;br /&gt;Select Developer mode and click OK.&lt;/blockquote&gt;&lt;br /&gt;To create the new store:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Right-click on "Authorization Manager" and click "New Authorization Store"&lt;br /&gt;Select "Active Directory"&lt;br /&gt;For the store name enter: msldap://servername:port/CN=AzMan,CN=AzManPartition&lt;/blockquote&gt;&lt;br /&gt;Finally, to grant the required rights to developers open the ADAM Tools Command Prompt.  I needed to grant Developers the generic read, generic write and create children permissions (not full control as making them administrators would have done).  I did this with DSACLS.EXE as follows:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;C:\WINDOWS\ADAM&gt;dsacls.exe \\servername:port\CN=AzMan,CN=AzManPartition /I:T /G CN=Developers,CN=Roles,CN=AzManPartition:GR&lt;br /&gt;C:\WINDOWS\ADAM&gt;dsacls.exe \\servername:port\CN=AzMan,CN=AzManPartition /I:T /G CN=Developers,CN=Roles,CN=AzManPartition:GW&lt;br /&gt;C:\WINDOWS\ADAM&gt;dsacls.exe \\servername:port\CN=AzMan,CN=AzManPartition /I:T /G CN=Developers,CN=Roles,CN=AzManPartition:CC&lt;/blockquote&gt;&lt;br /&gt;Now developers can create and configure applications in AzMan but if they try to delete anything (or modify permissions) they are denied access.&lt;br /&gt;&lt;br /&gt;More information on the different permission sets you can grant with DSACLS.EXE is available here: &lt;a href="http://support.microsoft.com/kb/281146"&gt;http://support.microsoft.com/kb/281146&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-2540445555194965600?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/2540445555194965600/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=2540445555194965600' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/2540445555194965600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/2540445555194965600'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2008/06/improved-administration-of-azman-with.html' title='Improved Administration of AzMan with DSACLS'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-8967484394803728538</id><published>2008-05-02T22:16:00.001-07:00</published><updated>2008-06-13T13:08:11.267-07:00</updated><title type='text'>Using AzMan with CSLA Business Objects</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Using AzMan to provide authorization to your CSLA business objects is a relatively easy task.  In the following examples I'm using AzMan through the Enterprise Library AzMan Authorization Provider.  If you're using the COM API directly you should be able to modify the AzManPrincipal class below to wrap that instead of the EL provider.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;First, I've created a class called AzManPrincipal which extends the Csla.Security.BusinessPrincipalBase class.  This is the class that is an IPrincipal and as such has the implementaion of IsInRole.  It is worth noting that my implementation below will authorize access on the "task" defined in AzMan.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family: courier new;"&gt;internal &lt;span style="color:blue;"&gt;sealed&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;AzManPrincipal&lt;/span&gt; : Csla.Security.&lt;span style="color: rgb(43, 145, 175);"&gt;BusinessPrincipalBase&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;IAuthorizationProvider&lt;/span&gt; _authProv = &lt;span style="color:blue;"&gt;null&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; AzManPrincipal(&lt;span style="color: rgb(43, 145, 175);"&gt;IIdentity&lt;/span&gt; identity)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;        &lt;/span&gt;: &lt;span style="color:blue;"&gt;base&lt;/span&gt;(identity)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; providerName = &lt;span style="color: rgb(43, 145, 175);"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color: rgb(163, 21, 21);"&gt;"AzMan Provider"&lt;/span&gt;];&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;        &lt;/span&gt;_authProv = &lt;span style="color: rgb(43, 145, 175);"&gt;AuthorizationFactory&lt;/span&gt;.GetAuthorizationProvider(providerName);&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; IsInRole(&lt;span style="color:blue;"&gt;string&lt;/span&gt; role)&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;        &lt;/span&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; (_authProv.Authorize(&lt;span style="color:blue;"&gt;this&lt;/span&gt;, role));&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Next, at the start of your application you will need to set your custom principal on the Csla.Application.User &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family: courier new;"&gt;Csla.&lt;span style="color: rgb(43, 145, 175);"&gt;ApplicationContext&lt;/span&gt;.User = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;AzManPrincipal&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;WindowsIdentity&lt;/span&gt;.GetCurrent());&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Finally, your classes may use the current application context to authorize any actions on the class (CRUD methods or read/write properties) as in the following example:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-family: courier new;"&gt;public &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; CanGetObject()&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;    return&lt;/span&gt; (Csla.&lt;span style="color: rgb(43, 145, 175);"&gt;ApplicationContext&lt;/span&gt;.User.IsInRole(&lt;span style="color: rgb(163, 21, 21);"&gt;"Read Customer Task"&lt;/span&gt;));&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;}&lt;/span&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-8967484394803728538?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/8967484394803728538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=8967484394803728538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/8967484394803728538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/8967484394803728538'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2008/05/using-azman-with-csla-business-objects.html' title='Using AzMan with CSLA Business Objects'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-4307090971098039477</id><published>2008-01-21T15:05:00.000-08:00</published><updated>2008-01-21T15:11:16.606-08:00</updated><title type='text'>Something Idiotic That Almost Everyone Does</title><content type='html'>I've recently noticed that a lot of people, when waiting for water from a faucet to become warm, will turn the water on so that when it is up to temperature it will be the temperature that they want.  When you do this, some of the water comes from the cold water line.  This water is completely wasted.  Also, since you're not pulling the maximum amount from the hot water line it is going to take longer to empty that line of room temperature water.&lt;br /&gt;&lt;br /&gt;I'm not much of an environmentalist so I'm the last person that would be telling people to conserve water.  I am, however, interested in making my life more efficient.  So, when you want warm water turn it fully to the hot side until it warms up then adjust it.  Water conservation is just a nice side-effect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-4307090971098039477?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/4307090971098039477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=4307090971098039477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/4307090971098039477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/4307090971098039477'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2008/01/something-idiotic-that-almost-everyone.html' title='Something Idiotic That Almost Everyone Does'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-7492038644219403468</id><published>2007-08-20T15:58:00.000-07:00</published><updated>2007-08-20T16:20:31.221-07:00</updated><title type='text'>DirecTV HD-DVR (HR-20 700) Pixelation and Audio Dropout Diagnosis</title><content type='html'>If you're noticing audio drops and pixelation when watching live or recorded HD programs on your HR-20 this is how to diagnose the problem.  I was having the problem on the MPEG-2 encoded HD channels (70-79) and it was annoyingly intermittent.  At best it would happen every half-hour or so and at worst it would happen every few seconds.&lt;br /&gt;&lt;br /&gt;The first thing to check is the signal strength (of course) but you have probably already done that.  That wasn't my problem but if you haven't verified that the signal is ok do this:&lt;br /&gt;&lt;br /&gt;Menu-&gt;Help &amp; Settings-&gt;Setup-&gt;Sat &amp; Ant-&gt;View Signal Strength-&gt;Signal Meters&lt;br /&gt;&lt;br /&gt;You're looking for green on both Tuners. 75 or better.  If you're not there then stop here.  You'll probably need to adjust your satellite.&lt;br /&gt;&lt;br /&gt;If your signal is ok, we'll next want to determine if the B-Band converters are causing the problem.  These are the small boxes inline with the coax coming in from the satellite.   Remove them and see if the problem goes away.  If it does, your B-Band converters are bad.  Call DirecTV and ask for new ones.  They are free.&lt;br /&gt;&lt;br /&gt;If removing the B-Band converters didn't solve the problem we need to determine if the problem is on one or both signal lines.  Every time you change the channel the HR-20 switches tuners (unless something is being recorded on one tuner).  Stop any recordings and turn to channel 75 (TNT-HD).  Note whether you see pixelation or not.  Press: channel up, channel up, and then dial in 75 again.  This should put you back on channel 75 but on the other tuner.  The first channel up puts us on 76 opposite tuner, the second channel up put us on 77 same tuner and the dial in of 75 puts on back on 75 with the opposite tuner.&lt;br /&gt;&lt;br /&gt;If you noticed the problem on on tuner but not the other then we have to determine if it is the coax or the tuner itself.  Disconnect tuner 2 on the back of the box.  Tune to 75 and note whether you see pixelation or not.  Disconnect the line into tuner 1 and put the line that was in tuner two into tuner 1.  Tune to 75 again and note whether you see the problem.  Repeat the process with tuner 2 trying each line in tuner 2.&lt;br /&gt;&lt;br /&gt;If the problem occurs with both lines on one tuner, but not the other, then your tuner is shot.  Hopefully your HR-20 is still under warranty.  If the problem occurs on both tuners with one coax line but not the other, then the wiring is bad.  Run a new cable.&lt;br /&gt;&lt;br /&gt;Hopefully this will save a few people an expensive service trip.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-7492038644219403468?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/7492038644219403468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=7492038644219403468' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/7492038644219403468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/7492038644219403468'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2007/08/directv-hd-dvr-hr-20-700-pixelation-and.html' title='DirecTV HD-DVR (HR-20 700) Pixelation and Audio Dropout Diagnosis'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-117039396080106777</id><published>2007-02-01T21:13:00.000-08:00</published><updated>2007-02-02T06:42:18.050-08:00</updated><title type='text'>10 Guidelines for Becoming a More Secure Coder</title><content type='html'>The number of software developers that know nothing about security is staggering.  In the coming years software security is going to become more and more important.  I wrote these guidelines as a starting point for any developer that wants to learn how to write secure code.  There are many types of software as there are many different programming languages.  I tried to keep these guidelines as technology and language agnostic as possible.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Use a Safe Language / Development Framework&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;By using a type-safe language (like Java or any of the .NET languages) you can avoid a number of the classic security bugs (most notably buffer overflows).  Non type-safe languages, like C and C++, allow the developer to decide how memory should be managed, accessed and interpreted.  This is a complex task and is quite error-prone.  If you insist on using a non type-safe language and want to do it securely, you will have a lot more research to do.  Additionally, make use of sandboxed environments whenever possible to make sure that a security bug doesn’t have full access to the system that it is running on.  For you .NET developers, this means not running with full-trust whenever possible.  More on type-safety: &lt;a href="http://en.wikipedia.org/wiki/Type_safety"&gt;http://en.wikipedia.org/wiki/Type_safety&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Trust Nothing and Make No Assumptions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Data should not be trusted if it comes from an untrusted source (like a user).  This goes for all input from web applications (all GET/POST parameters, HTTP headers, cookies, etc…), input from thick-clients, and files that get processed by your system (XML) to name a few sources.  This type of data must be normalized and sanitized before using it in your system.  Normalization (and we’re not talking about relational databases here) is the process of getting input into an expected form.  Many software systems allow different character sets (Unicode, ASCII, UTF-8, etc…) and different encodings (hex encoding, URL encoding, HTML encoding, etc…).  The data needs to be in normal form for the sanitation to be effective.  Sanitation means cleaning the data of any potential unsafe characters.  If you’re going to issue the data into an HTTP response stream you will need to HTML encode the data (Server.HtmlEncode in ASP, System.Web.HttpUtility.HtmlEncode in .NET) which will properly escape things like &lt; and &gt; with &amp;amp;lt; and &amp;amp;gt;&lt;br /&gt;&lt;br /&gt;Make no assumptions about how your software will be used as it is an attacker’s job to find these assumptions and exploit them.  Continuously ask yourself if you’ve made any assumptions about the code you’re writing.  Don’t assume that because you haven’t provided a link on your website to moneyTransfer.aspx that an attacker won’t request it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Embrace Least-Privilege&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The concept of least-privilege means that any accounts should have the least amount of access necessary for the software to properly function.  For example, if your software uses a database account to access data, that account should only have access to the data required by the application.  The database account should not have access to entire databases or servers and if it only needs to read data it should only be able to read the data.  This is important because if your software system does have a security vulnerability (perhaps one that allows access to data) you will have limited the surface area of any potential attack.  The best an attacker could do is access or tamper with the data of that application, not all of the data on the server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Don’t Store Passwords in a Recoverable Format&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Passwords for things like web applications should not be stored anywhere (including a database) in readable text.  There is no reason to store a readable password.  The password should be hashed and the hash should be stored.  A hash is a cryptographic function which is not reversible.  At login time you would simply apply the hash function to the entered password and compare it to the hash in the database.  If the password was correct the hashes should match.  Historically, hashes like MD5 and SHA-1 have been used for this purpose.  These hashes have been shown to have some security problems and while those problems don’t apply to this password hashing mechanism it is easier to use a newer, more-secure hashing algorithm than to explain to others why the vulnerabilities don’t apply.  Select something like SHA-256, SHA-384 or SHA-512.  More info on hash functions can be found here: &lt;a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function"&gt;http://en.wikipedia.org/wiki/Cryptographic_hash_function&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Create and Enforce a Password Policy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It doesn’t make much sense to build a secure application if it is going to have hundreds or thousands of users with a password of “password.”  Enforcing simple strength requirements on passwords can go a long way to protecting your application.  You will have to determine what level of strength your application's passwords require.  Some systems may only need to restrict dictionary words while other may wish to force users to select passwords with upper-case letters, lower-case letters, numbers and symbols.  Alternatives to implementing strength requirements on passwords include locking out accounts after a small number of consecutive failed login attempts and expiring passwords after a certain length of time (say, 180 days).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. Parameterize Your Data Access&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SQL injection plagues many different types of software.  With SQL injection an attacker provides input to your application that manipulates your intended SQL query.  When a SQL injection is present an attacker can usually get information on your database schema and retrieve or edit data in the database.  The easiest and most effective way to defend against SQL injection is to use a parameterized query (combined with stored procedures if they’re supported by your database engine).  Never build SQL statements by concatenating strings together with user input.  Check the documentation for the database access technology you’re using.  Here is a link for ASP.NET developers with some examples: &lt;a href="http://aspnet101.com/aspnet101/tutorials.aspx?id=1"&gt;http://aspnet101.com/aspnet101/tutorials.aspx?id=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7. Hide Your Errors&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Error messages will not be understood by the common user but to an attacker they are a goldmine.  Error messages can be used to gain information about the system and in some cases can be used to enumerate the contents of entire databases.  Never display error information to the user.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;8. Don’t Write Your Own Crypto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are plenty of good choices available for cryptography.  There is no need to spend time trying to write your own algorithm.  The accepted algorithms have been tested and analyzed for years and it is likely that the folks that invented and tested the algorithms are smarter than you.  Good choices include triple-DES or AES for symmetric encryption (with a password) and PGP or SSL/TLS for asymmetric encryption (public/private key).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;9. Have Someone Else Test Your Code as an Attacker&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Consider this: You have written some code and made it as secure as you know how to.  You cannot possibly test for the problems you didn’t foresee.  Having someone else do the security testing is much more beneficial than doing it yourself.  Also, the tester should be testing the software like an attacker might.  For example, they should try to access or tamper with data that they shouldn’t have access to.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;10. Get Secure Coding Training&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you’re serious about becoming a secure software developer consider getting some formal training.  The guidelines I’ve outlined here are a great starting point and by following them you will have an edge on most developers.  As you progress in your career and the systems that you work on increase in size and importance it will become necessary to relate your security decisions to the business.  More training can give you the details you need to effectively perform a business risk analysis and create an effective threat model.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Where to go for more information:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;OWASP - A ton of information for web developers: &lt;a href="http://www.owasp.org/"&gt;http://www.owasp.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Great books:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FWriting-Secure-Second-Michael-Howard%2Fdp%2F0735617228%2Fsr%3D8-1%2Fqid%3D1170393974%3Fie%3DUTF8%26s%3Dbooks&amp;tag=jamstrsblo-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325"&gt;Writing Secure Code, Second Edition&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jamstrsblo-20&amp;amp;l=ur2&amp;amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2FHacking-Code-ASP-NET-Application-Security%2Fdp%2F1932266658%2Fsr%3D1-1%2Fqid%3D1170394070%3Fie%3DUTF8%26s%3Dbooks&amp;tag=jamstrsblo-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=9325"&gt;Hacking the Code&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=jamstrsblo-20&amp;amp;l=ur2&amp;amp;o=1" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-117039396080106777?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/117039396080106777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=117039396080106777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/117039396080106777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/117039396080106777'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2007/02/10-guidelines-for-becoming-more-secure.html' title='10 Guidelines for Becoming a More Secure Coder'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-116942950732250943</id><published>2007-01-21T17:31:00.000-08:00</published><updated>2007-01-21T17:31:47.370-08:00</updated><title type='text'>Computers learn to parse natural human language</title><content type='html'>A company in Israel claims to have solved the problem of enabling computers to parse natural human language. Linguistic Agents says its "NanoSyntax" technology translates normative human language into a formal computer language, potentially improving search interfaces, application interfaces, text-message-based network APIs, and phone trees.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.linuxdevices.com/news/NS6184618910.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/tech_news/Computers_learn_to_parse_natural_human_language"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-116942950732250943?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/116942950732250943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=116942950732250943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/116942950732250943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/116942950732250943'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2007/01/computers-learn-to-parse-natural-human.html' title='Computers learn to parse natural human language'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-116594112245314697</id><published>2006-12-12T08:32:00.000-08:00</published><updated>2006-12-12T08:32:02.536-08:00</updated><title type='text'>Computers that digest the news to change trading</title><content type='html'>The information provider will make available today a tagged version of its news feed — which provides 8,000 news stories a day — to make them easier for computer-based trading systems to digest. It describes the effort as generating “machine-readable news”.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.timesonline.co.uk/article/0,,5-2497900,00.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/tech_news/Computers_that_digest_the_news_to_change_trading"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-116594112245314697?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/116594112245314697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=116594112245314697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/116594112245314697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/116594112245314697'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/12/computers-that-digest-news-to-change.html' title='Computers that digest the news to change trading'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-116137512728290585</id><published>2006-10-20T13:01:00.000-07:00</published><updated>2006-10-21T12:07:35.800-07:00</updated><title type='text'>I just got back from the OWASP AppSec conference in Seattle.</title><content type='html'>So I've spent the majority of this week in Seattle at the &lt;a href="http://www.owasp.org/"&gt;OWASP&lt;/a&gt; conference.   The conference was great.  Lots of great talks (the .NET stuff in particular) and lots of great discussion.  The best part of the whole thing was the big picture thinking and debating about a solution to the app sec problem.  The creation of tools that would prevent (or make it much more difficult) for developers to write security bugs is certainly an interesting idea; one that I think is feasible for a lot of technical type bugs.  For example, preventing SQL injection would be as simple as forcing developers to use a framework that only allowed database querying through parameterized queries.  Logic bugs, however, and user problems are a different story.  I think most of the work on this area will revolve around the software frameworks and operating systems limiting the amount of damage these other types of bugs can do.  I'm definitely joining OWASP...&lt;br /&gt;&lt;br /&gt;I didn't much care for Seattle though.  It was my first, and probably last, time there.  The weather sucked, lots of homeless people downtown, the bars closed early on weekdays and the weather really sucked.  Well, one day the weather was ok.  Anyhow, I did get to visit the original Pike's Place &lt;a href="http://finance.google.com/finance?q=SBUX"&gt;Starbucks&lt;/a&gt; which made my wife jealous (she manages an &lt;a href="http://finance.google.com/finance?q=SBUX"&gt;SBUX&lt;/a&gt; in Wisconsin).  I did bring her back some merch with the &lt;a href="http://images.google.com/images?q=original+starbucks+logo&amp;hl=en&amp;amp;btnG=Search+Images"&gt;original logo&lt;/a&gt; (the tit exposed logo).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-116137512728290585?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/116137512728290585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=116137512728290585' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/116137512728290585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/116137512728290585'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/10/i-just-got-back-from-owasp-appsec.html' title='I just got back from the OWASP AppSec conference in Seattle.'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-114481579243295355</id><published>2006-04-11T20:02:00.000-07:00</published><updated>2006-10-12T13:55:11.416-07:00</updated><title type='text'>An Advanced Guide to Avoiding Identity Theft</title><content type='html'>This is meant to be a more complete guide to avoiding identity theft than those that are currently available online.  I wanted to include some information that those who aren't clueless might find useful and to perhaps stimulate some interesting conversation.&lt;br /&gt;&lt;br /&gt;To begin I would like to distinguish between identity theft and transactional credit fraud.  Having your credit card or bank account number used to make a purchase is known as transactional credit fraud whereas using personal information (name, social security number, address, etc...) to establish new accounts in another's name is identity theft.  These are both commonly lumped together as identity theft but they are different.  The following information will help you defend against both.&lt;br /&gt;&lt;br /&gt;For the rest of this article I will use the term "attacker" to indicate the bad guy that is going to steal someone's identity or commit credit fraud and I will use the term "victim" to indicate, well, the victim.&lt;br /&gt;&lt;br /&gt;Both identity theft and transactional credit fraud originate when an attacker obtains sensitive information about a victim.  This information can include (but is certainly not limited to) name, address, family member's names, credit card numbers, bank name, bank account number, bank account routing number, mother's maiden name, social security number (social insurance number for you Canadians), driver's license number, your pet's names, etc...  You get the idea.  There are many different ways that this information can be obtained and minimizing the potential of these ways is the focus of the rest of this article.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;Online Activity:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;First and foremost, keep your operating system and software up to date.  Patch as soon as patches become available.  Update your antivirus daily (most can be set up to do this automatically).  Use a desktop firewall if you don't have a hardware firewall in place.  Keep spyware off your machine.  Failing to do any of this makes it easier for various types of scum-ware to make themselves at home on your machine and have free-reign on information you've stored there or process there.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.grisoft.com/"&gt;AVG - A free anti-virus&lt;/a&gt;&lt;br /&gt;&lt;a href="http://windowsupdate.microsoft.com/"&gt;Windows Update&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lavasoft.de/software/adaware/"&gt;Ad Aware SE Personal - A free spyware removal tool&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Online Accounts:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For those of us that have lots of online accounts, creating strong passwords that are different for every site is difficult but very important.  Your bank spent a lot of time and effort creating a hashed web application login to protect your account information, you shouldn't destroy their efforts by using the same password for every stupid web forum and website that requires a login (most of which didn't spend two seconds thinking about security).  There are tools available that allow you to store your passwords in a secure forum so you don't have to remember them all.  The one I use is &lt;a href="http://www.just1key.com/"&gt;Just1Key&lt;/a&gt;.  Information for all of my accounts is stored encrypted on their servers and I only have to remember one passphrase to access them all.  Since I only have to remember the one passphrase I can make it very long and secure and I can change it frequently.  Another product is &lt;a href="http://www.schneier.com/passsafe.html"&gt;Password Safe&lt;/a&gt; which was created by security expert Bruce Schneier.  Password Safe is free, Just1key is not but it lets me access all of my account information from any computer with an internet connection.  &lt;a href="http://www.winguides.com/security/password.php"&gt;Here&lt;/a&gt; is a website that will help you generate strong random passwords that you can use for all of your accounts once you're comfortable with a password management solution.&lt;br /&gt;&lt;br /&gt;A final thing to mention about securing online accounts is the use of secret questions.  The correct way for a web application to use a secret question is to use it as a trigger to initiate a password reset sequence.  It should not be accepted as an alternate to a password, it should only send an email to the user, at their registered email address, with information on how to reset their password.  The problem is that many secret questions have answers which are easily discovered.  Also, the keyspace for the questions is usually fairly small.  What is your mother's maiden name?  Think of the most common American surnames.  What is your pet's name?  Think of the most common pet names.  What city were you born in?  Think of the largest cities.  The secret question should only be used to prevent abuse of the password reset feature of a web application.  I routinely fill in garbage into these questions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Shopping Online:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Merchants who accept credit cards are in violation of the &lt;a href="https://sdp.mastercardintl.com/pdf/pcd_manual.pdf"&gt;payment card industry's (PCI) data security standard&lt;/a&gt; if they store credit card numbers in a readable form in their databases.  There is little doubt that a lot of merchants do store credit card numbers unencrypted (think of all the news stories where credit card numbers were stolen).  Because of this, do not use the "store my credit card number" feature of a web application if it is available.  Use single-use account numbers if your credit card supports it.  I can generate a single-use number that expires in two months and that has a spending limit just higher than my intended purchase.&lt;br /&gt;&lt;br /&gt;Whenever submitting personal information check your browser to see if the web traffic you're about to submit is encrypted.  While browser dependent you will usually see a lock icon somewhere near the bottom of the browser.  Additionally, the url will be prefixed with https (http over ssl).  Seeing these two things let you know that the web site traffic is encrypted with SSL (so the casual snoop or packet sniffing cannot view your personal information).  Beware, however, if these sites come with a certificate warning.  A certificate warning means that something is wrong with the certificate that web site is issuing.  This is a problem because it could indicate that someone is attempting to stage a man-in-the-middle attack.  If your web traffic is going through a hackers machine and he tricks you into accepting his certificate, then all the traffic will be encrypted with a certificate that the attacker has the private key for.  This would allow the attacker to decrypt any information encrypted with it.  This is what the certificate warning looks like in Internet Explorer:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3894/2045/1600/cert.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3894/2045/320/cert.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Shopping Offline:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A newer threat has surfaced whereby an attacker uses a cell phone with a camera to snap a photo of a credit card number when it is exposed.  Because of this, when using a credit card in a public place take care to cover the number as much as possible.  Cover the number with your finger when you take it out of your wallet or purse and hand it to the cashier.  Don't set it on the counter or wave it around.&lt;br /&gt;&lt;br /&gt;Don't sign the back of your credit card, instead write "SEE ID" on it.  When cashiers check the signature on the back of the card you will have to provide your ID to them.  In the event that your credit card is stolen or lost it will be more difficult for an attacker to use the card in a public setting (unless, of course, he also got your ID).  I do this on all of my credit cards and while cashiers only ask for my ID about 30% of the time I don't mind giving it to them.&lt;br /&gt;&lt;br /&gt;When using checks don't put your social security number or driver's license number on your checks.  There is no reason for them to be on there and the few merchants that want your driver's license number can write it on the check themselves.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Personal Information:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Be suspicious of anyone asking for personal information over the phone, through email, in person, or on a form.  This includes, your name (they're calling you, they should know that right), account numbers, routing numbers, PIN's, social security number, driver's license number, your birthday, your mother's maiden name or your dog's name.  By default, if you don't initiate the communication I would refuse to give any of this information unless they can prove to you they're who they say they are.  It would be a good idea to call the "organization" back if they say they need information.  Most scams of this type are very physiological in nature so it takes the proper mindset to get used to avoiding these types of situations.&lt;br /&gt;&lt;br /&gt;Get a decent paper shredder and shred anything with your name on it.  Dumpster divers can discover a wealth of information about most people just from their junk mail.  An attacker might learn enough to convince you they're who they say they are when they call asking for personal information.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Monitoring:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Obtain your credit report.  &lt;a href="http://www.whitehouse.gov/news/releases/2003/12/20031204-3.html"&gt;The Fair and Accurate Credit Transactions Act of 2003&lt;/a&gt; allows every American to obtain their credit report free once per year.  You can check the report for mistakes or for accounts that you didn't open.&lt;br /&gt;&lt;br /&gt;If you feel you have been a victim, close any accounts as soon as possible.  Report the fraud to the three major credit bureaus &lt;a href="http://www.equifax.com/"&gt;Equifax&lt;/a&gt;, &lt;a href="http://www.experian.com/"&gt;Experian&lt;/a&gt;, and &lt;a href="http://www.transunion.com/"&gt;TransUnion&lt;/a&gt;.  You can file a complaint with the FTC using their &lt;a href="https://rn.ftc.gov/pls/dod/widtpubl$.startup?Z_ORG_CODE=PU03"&gt;online form&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References / More Information:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.washingtonpost.com/wp-dyn/articles/A40992-2003Oct17.html"&gt;http://www.washingtonpost.com/wp-dyn/articles/A40992-2003Oct17.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.whitehouse.gov/news/releases/2003/12/20031204-3.html"&gt;http://www.whitehouse.gov/news/releases/2003/12/20031204-3.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.usdoj.gov/criminal/fraud/idtheft.html"&gt;http://www.usdoj.gov/criminal/fraud/idtheft.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.consumer.gov/idtheft/"&gt;http://www.consumer.gov/idtheft/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-114481579243295355?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/114481579243295355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=114481579243295355' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/114481579243295355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/114481579243295355'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/04/advanced-guide-to-avoiding-identity.html' title='An Advanced Guide to Avoiding Identity Theft'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-114018364955520825</id><published>2006-02-17T05:40:00.000-08:00</published><updated>2006-02-17T05:40:49.603-08:00</updated><title type='text'>Transform an Xbox into the ultimate media center (the complete guide)</title><content type='html'>This step-by-step guide (complete with pictures) that walks you through the steps how to easily soft-mod your Xbox. Don't throw away your old Xbox as it can still be converted into arguably the best media streamer on the market. Follow this guide to turn your virgin Xbox to a pimped out, play-anything-you-throw-at-it media monster.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.productwiki.com/microsoft_xbox/article/how_to_go_from_xbox_to_xbox_media_center_in_30_minutes.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/hardware/Transform_an_Xbox_into_the_ultimate_media_center_(the_complete_guide)"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-114018364955520825?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/114018364955520825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=114018364955520825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/114018364955520825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/114018364955520825'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/02/transform-xbox-into-ultimate-media.html' title='Transform an Xbox into the ultimate media center (the complete guide)'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113960260436483162</id><published>2006-02-10T12:13:00.000-08:00</published><updated>2006-02-10T12:16:44.376-08:00</updated><title type='text'>Home Media Center Dilemma</title><content type='html'>I previously posted about possibly using an XBox with XBox media center on it, or building a Linux box to use MythTV on.  Well, I decided that the primary feature that I want is the ability to record television.  AFAIK, this is not possible using XBMC so that option is out.  Also, the price of building a Linux box for MythTV will be far greater than if I were to just get a PVR from my television provider.  Not the nerdiest solution but maybe I can hack up the PVR...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113960260436483162?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113960260436483162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113960260436483162' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113960260436483162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113960260436483162'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/02/home-media-center-dilemma.html' title='Home Media Center Dilemma'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113960230618018982</id><published>2006-02-10T12:11:00.000-08:00</published><updated>2006-02-10T12:11:46.200-08:00</updated><title type='text'>21 times more likely to get spyware with IE!</title><content type='html'>'In May and October, Levy and colleague Steven Gribble sent their crawlers to 45,000 Web sites, cataloged the executable files found, and tested malicious sites' effectiveness by exposing unpatched versions of Internet Explorer and Firefox to drive-by downloads." Here are their results...&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.informationweek.com/windows/showArticle.jhtml?articleID=179102695"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/technology/21_times_more_likely_to_get_spyware_with_IE_"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113960230618018982?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113960230618018982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113960230618018982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113960230618018982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113960230618018982'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/02/21-times-more-likely-to-get-spyware.html' title='21 times more likely to get spyware with IE!'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113892092321940398</id><published>2006-02-02T14:55:00.000-08:00</published><updated>2006-02-02T14:55:23.296-08:00</updated><title type='text'>What to do when they ask for your Social Security Number..</title><content type='html'>Many people are concerned about the number of organizations asking for their Social Security Numbers. They worry about invasions of privacy and the oppressive feeling of being treated as just a number....&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.totse.com/en/politics/political_spew/ssnfaq.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/security/What_to_do_when_they_ask_for_your_Social_Security_Number.."&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113892092321940398?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113892092321940398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113892092321940398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113892092321940398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113892092321940398'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/02/what-to-do-when-they-ask-for-your.html' title='What to do when they ask for your Social Security Number..'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113881492092847345</id><published>2006-02-01T09:28:00.000-08:00</published><updated>2006-02-01T09:28:45.233-08:00</updated><title type='text'>NMAP 4.0 Released</title><content type='html'>Nmap has undergone many substantial changes since the last major release (3.50 in February 2004) and they recommend that all current users upgrade.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.insecure.org/stf/Nmap-4.00-Release.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/security/NMAP_4.0_Released"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113881492092847345?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113881492092847345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113881492092847345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113881492092847345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113881492092847345'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/02/nmap-40-released.html' title='NMAP 4.0 Released'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113874635570950847</id><published>2006-01-31T13:48:00.000-08:00</published><updated>2007-02-15T18:03:22.123-08:00</updated><title type='text'>HOWTO: Tunneling HTTP over SSH with DD-WRT, DynDNS and Putty</title><content type='html'>I thought I would write up a tutorial for tunneling HTTP over SSH as it is a great way to increase security and privacy of web surfing. I happen to work at a company that doesn't allow use of anonymous proxies (which is fine) but I don't necessarily want them viewing my web traffic either. Here is how I set up an HTTP tunnel to my home network from work.&lt;br /&gt;&lt;br /&gt;My home setup consists of a Linksys WRT-54GL wireless access point connected to a high-bandwidth internet connection. The Linksys WRT-54GL is version 4 of the WRT-54G. With version 5 of the WRT-54G Linksys changed the hardware and stopped using Linux internally. Because of these changes the device could no longer run third-party firmwares. The WRT-54GL is Linksys' response to hobbyists (hackers) who still want to tinker with other firmwares. For this tutorial you'll need a router capable of running the &lt;a href="http://wrt-wiki.bsr-clan.de/index.php?title=DD-WRT_Docu_%28EN%29"&gt;DD-WRT&lt;/a&gt; firmware. This excellent firmware has many great features including an SSH daemon which is a prerequisite for our tunneling. A list of supported devices can be found &lt;a href="http://wrt-wiki.bsr-clan.de/index.php?title=DD-WRT_Docu_%28EN%29#Supported_Devices"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Instructions for flashing the firmware can be found all over the Internet. I'll assume the reader can flash the router and get the DD-WRT firmware running (Administration-&gt;Firmware Upload). Some Linksys routers (including the WRT-54GL) have a 3MB limit to firmware size so if that is the case use the mini version of DD-WRT first, once that is running upload the version you want.&lt;br /&gt;&lt;br /&gt;I'm using &lt;a href="http://www.dyndns.com/"&gt;DynDNS &lt;/a&gt;to keep tabs on my dynamic Internet IP address. This free service allows you to keep your changing IP address up to date and matched to a hostname. DD-WRT has support for automatically keeping the address updated. Other services are supported too so you can choose your favorite. Once your dynamic DNS account is created you can enter the relevant information into the Setup-&gt;DDNS tab in DD-WRT.&lt;br /&gt;&lt;br /&gt;The next thing you will need to do is enable the SSH daemon. This can be done throughout the Administration-&gt;Services tab in DD-WRT. Under SSHD select enable. The login will be username:root password:[your router password]&lt;your&gt;.&lt;br /&gt;&lt;br /&gt;To connect to the SSH server and tunnel HTTP you will need the &lt;a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/"&gt;Putty SSH client&lt;/a&gt;. To connect to your router enter the hostname or IP address of your router on the Session tab:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3894/2045/1600/putty1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/3894/2045/320/putty1.jpg" border="0" /&gt;&lt;/a&gt;&lt;a href="http://photos1.blogger.com/blogger/3894/2045/1600/putty2.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3894/2045/1600/putty2.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next, to setup the tunnel click on Tunnels, enter 3000 (or whatever local port you'd like to use) for the source port, click Dynamic and click Add. This will create a SOCKS proxy on your local machine on port 3000 (or whatever port your chose) that you can use with your web browser.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3894/2045/1600/putty2.0.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/3894/2045/320/putty2.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now you can click Open to log into your router. The tunnel isn't created until you log in. Remember that your username is root and your password is your router password (you changed it right?).&lt;br /&gt;&lt;br /&gt;Now you're ready to connect your web browser. Using Firefox, you will have to configure a proxy server. Click Tools-&gt;Options. Then under General click Connection Settings. On this screen you can configure the SOCKS proxy that you've set up using Putty. Select Manual proxy configuration, enter localhost for the SOCKS host and 3000 for the port (or whatever you used). Click OK. You should now be tunneling through your home router over ssh.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3894/2045/1600/firefox%201.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/3894/2045/320/firefox%201.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can verify that the connections are being forwarded by looking at the Putty Event Log. You should see something similar to the following after loading &lt;a href="http://www.google.com"&gt;www.google.com&lt;/a&gt; in your web browser.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/3894/2045/1600/putty3.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/3894/2045/320/putty3.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113874635570950847?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113874635570950847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113874635570950847' title='57 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113874635570950847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113874635570950847'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/howto-tunneling-http-over-ssh-with-dd.html' title='HOWTO: Tunneling HTTP over SSH with DD-WRT, DynDNS and Putty'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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>57</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20416786.post-113839017402607030</id><published>2006-01-27T11:29:00.000-08:00</published><updated>2006-01-27T11:29:34.060-08:00</updated><title type='text'>Senators challenge Broadcast Flag!</title><content type='html'>This is excellent news...&lt;br /&gt;&lt;br /&gt;After getting iPods of their own, some senators are questioning the motives behind the Broadcast Flag.  Read on for the dettailed account...&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.eff.org/deeplinks/archives/004343.php"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/technology/Senators_challenge_Broadcast_Flag_"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113839017402607030?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113839017402607030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113839017402607030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113839017402607030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113839017402607030'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/senators-challenge-broadcast-flag.html' title='Senators challenge Broadcast Flag!'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113839010786625456</id><published>2006-01-27T11:28:00.000-08:00</published><updated>2006-05-22T13:20:55.790-07:00</updated><title type='text'>I want a DaVinci Cryptex</title><content type='html'>For all you DaVinci Code fans out there this is really awesome. This site builds Cryptex's to custom orders. Some of these look really awesome! Check out the gallery on the website.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.cryptex.org"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/links/Buy_DaVinci_s_Cryptex_--_These_things_look_amazing"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113839010786625456?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113839010786625456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113839010786625456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113839010786625456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113839010786625456'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/i-want-davinci-cryptex.html' title='I want a DaVinci Cryptex'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113838110097185680</id><published>2006-01-27T08:56:00.000-08:00</published><updated>2006-04-30T02:10:49.646-07:00</updated><title type='text'>Promoting your blog and generating traffic?</title><content type='html'>How the heck to people promote their blogs.  I'd like some tips in the comments please.  I'm going to add it to my email signature I think.  blah blah blah.  whatever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113838110097185680?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113838110097185680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113838110097185680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113838110097185680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113838110097185680'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/promoting-your-blog-and-generating.html' title='Promoting your blog and generating traffic?'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113831185927941094</id><published>2006-01-26T10:55:00.000-08:00</published><updated>2006-06-15T11:20:15.500-07:00</updated><title type='text'>XBox Media Center or MythTV HTPC???</title><content type='html'>So I've decided that I need a media center.  I don't know how much use I would get out of it but as an engineer I need to build one.  There are so many cool software packages to choose from (excluding Windows Media Center).  Currently I'm torn between using a modified &lt;a href="http://www.xbox-scene.com/"&gt;XBox&lt;/a&gt; to run &lt;a href="http://www.xboxmediacenter.com/"&gt;XBox Media Center&lt;/a&gt; and a self-built &lt;a href="http://www.linux.org/"&gt;Linux&lt;/a&gt; box running &lt;a href="http://www.mythtv.org/"&gt;MythTV&lt;/a&gt;.  For price reasons I will probably go with the XBox/XBox Media Center option.  Of course, I could always install &lt;a href="http://www.controlaltdeleted.com/xbox/xbox_tutorials/myth_tv_related_information/how_to_install_mythtv_on_your_xbox.html"&gt;MythTV on an XBox running Linux&lt;/a&gt;.  If anyone is actually reading this I would appreciate input.  over and out...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113831185927941094?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113831185927941094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113831185927941094' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113831185927941094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113831185927941094'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/xbox-media-center-or-mythtv-htpc.html' title='XBox Media Center or MythTV HTPC???'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20416786.post-113683229159845185</id><published>2006-01-09T10:31:00.000-08:00</published><updated>2006-01-09T10:44:51.606-08:00</updated><title type='text'>IFIHADAHIFI, 1.6.2006 at Cactus Club Milwaukee</title><content type='html'>Happy Monday everybody (anyone?).  I just wanted to drop a mention of a great band I saw (for the second time) last Friday at &lt;a href="http://www.cactusclubmilwaukee.com/"&gt;Cactus Club&lt;/a&gt;.  They're called &lt;a href="http://www.ifihadahifi.net/"&gt;IFIHADAHIFI &lt;/a&gt;and are a great noise rock band from the Milwaukee area (although originally from Green Bay I think).  I saw them back in ought-two opening for the &lt;a href="http://www.posterchildren.com/"&gt;Poster Children&lt;/a&gt; and they blew me away then.  They are a fantastic live show, very energetic.  Catch them if you can (the ladies might want to bring some earplugs).  The opening band &lt;a href="http://www.bangbangband.com/"&gt;Bang Bang&lt;/a&gt; (from Chicago) was also worth checking out.&lt;br /&gt;&lt;br /&gt;I'm also looking forward to the &lt;a href="http://www.thelifeandtimes.com/"&gt;Life &amp; Times&lt;/a&gt; show on Jan, 27.  &lt;a href="http://www.thelifeandtimes.com/"&gt;Life &amp;amp; Times&lt;/a&gt; is the current project of the former Shiner frontman Alan Epley.  Here is a &lt;a href="http://www.pitchforkmedia.com/record-reviews/l/life-and-times/suburban-hymns.shtml"&gt;Pitchfork review&lt;/a&gt; of their latest called Suburban Hymns which I (unfortunately) have yet to hear.  I guess I pick it up at the show.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113683229159845185?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113683229159845185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113683229159845185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113683229159845185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113683229159845185'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/ifihadahifi-162006-at-cactus-club.html' title='IFIHADAHIFI, 1.6.2006 at Cactus Club Milwaukee'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113632163384356800</id><published>2006-01-03T12:51:00.000-08:00</published><updated>2006-01-03T12:53:53.853-08:00</updated><title type='text'>Nintendo Weirdness</title><content type='html'>&lt;a href="http://www.qwantz.com/posterchild/"&gt;Make your own Question Boxes a la Super Mario Bros&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.retarddisco.com/video/tr_mike_tysons_punch_out.mov"&gt;Mike Tyson's Punch Out Song Video (warning: retarded)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113632163384356800?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113632163384356800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113632163384356800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113632163384356800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113632163384356800'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/nintendo-weirdness.html' title='Nintendo Weirdness'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113631390929801663</id><published>2006-01-03T10:43:00.000-08:00</published><updated>2006-01-03T10:45:09.296-08:00</updated><title type='text'>First Day Back</title><content type='html'>at work after the hollidays.  I need to get back on a work schedule as I've been staying up too late and sleeping in a lot.  I need some caffeine, good thing my wife is an assistant manager at Starbucks.  Back to work...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113631390929801663?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113631390929801663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113631390929801663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113631390929801663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113631390929801663'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/first-day-back.html' title='First Day Back'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113618196113234193</id><published>2006-01-01T21:53:00.000-08:00</published><updated>2006-12-14T21:54:02.853-08:00</updated><title type='text'>Pro-Co Rat Distortion Pedal Modification</title><content type='html'>As a guitarist and an engineer I've always been facinated with guitar effects pedals.  I've built my own and modified a bunch of them over the years.  This is a recent modification to a Pro-Co Rat distortion pedal that I was quite pleased with.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3894/2045/1600/DSCN1126.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://photos1.blogger.com/blogger/3894/2045/320/DSCN1126.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The Rat is a great distortion pedal but one of my annoyances with it is that it doesn't have an LED (like most other pedals) to let you know when it is on.  Yeah, if the distortion is turned up high you can tell but I often turned down the distortion and cranked the volume on this pedal to slam the input of my tube amp.  Anyhow, this modification fixed the no-LED problem and made the output much hotter at the same time.&lt;br /&gt;&lt;br /&gt;The Rat uses an operational amplifier (op-amp) in its distortion circuit.  Two diodes are used in the feedback loop in parallel (and in opposite directions) to clip the signal at about 0.7 volts.  LED's clip at a higher level (about 3.5 volts depending on type and color).  So by replacing these feedback diodes with LED's the pedals output is much hotter (great for driving that tube amp).  A side effect is that the LED's light up when the circuit is clipping.  The brightness of the LED's is porportional to the amount of clipping.  So when I did this I mounted the two feedback LED's on the case so I would know when the pedal is on (and have a cool light effect to boot).  Here is another picture:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3894/2045/1600/DSCN1130.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://photos1.blogger.com/blogger/3894/2045/320/DSCN1130.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113618196113234193?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113618196113234193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113618196113234193' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113618196113234193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113618196113234193'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/pro-co-rat-distortion-pedal.html' title='Pro-Co Rat Distortion Pedal Modification'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113617880883825851</id><published>2006-01-01T21:13:00.000-08:00</published><updated>2006-01-01T21:13:28.840-08:00</updated><title type='text'>How to Setup a Wi-Fi Hotspot</title><content type='html'>Creating a Wi-Fi Internet hotspot service from scratch can seem like a daunting task. I had many sleepless nights trying to get to grips with FreeRadius, DD-WRT, Chillispot etc. I hope that this How To helps you to avoid some of the problems I encountered along the way.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.howtoforge.com/wifi_hotspot_setup"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/linux_unix/How_to_Setup_a_Wi-Fi_Hotspot"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113617880883825851?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113617880883825851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113617880883825851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113617880883825851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113617880883825851'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/how-to-setup-wi-fi-hotspot.html' title='How to Setup a Wi-Fi Hotspot'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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-20416786.post-113617849836196608</id><published>2006-01-01T21:02:00.000-08:00</published><updated>2006-01-01T21:08:18.366-08:00</updated><title type='text'>Happy New Years</title><content type='html'>I didn't make a new-year's resolution to create a blog.  It just happened that way.  I drank way too much last night (how common is that) but had a good time with my wife Kari at our friend Chuck's (somewhat) new house.  I don't have any specific plans for this blog so it may get boring fast, or it may develop a theme as time goes on.  I may post about my wife, our pets, information security (I'm a software security guy), music, weirdness or whatever.&lt;br /&gt;&lt;br /&gt;It is sort of weird writing a first post knowing that most-likely no one will read it.  Bye no-one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20416786-113617849836196608?l=jstrassburg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jstrassburg.blogspot.com/feeds/113617849836196608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20416786&amp;postID=113617849836196608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113617849836196608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20416786/posts/default/113617849836196608'/><link rel='alternate' type='text/html' href='http://jstrassburg.blogspot.com/2006/01/happy-new-years.html' title='Happy New Years'/><author><name>JiM Strassburg</name><uri>http://www.blogger.com/profile/12306901443932124157</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>
