<?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-6545287867125256063</id><updated>2011-11-27T18:56:25.874-06:00</updated><category term='pictures'/><category term='Indeterminate'/><category term='IT Project Failures'/><category term='grub'/><category term='SQL'/><category term='documentation'/><category term='0^0'/><category term='hwinfo'/><category term='books'/><category term='C'/><category term='separation of concerns'/><category term='Par 3'/><category term='Math'/><category term='Encryption'/><category term='TA'/><category term='Integration'/><category term='Undefined'/><category term='Fix'/><category term='jar'/><category term='Testing'/><category term='PwdHash'/><category term='Flash'/><category term='trains'/><category term='UDP'/><category term='personal renewal'/><category term='Networking'/><category term='SimpleDateFormat'/><category term='code'/><category term='Call to Arms'/><category term='timestamp'/><category term='TODO'/><category term='comments'/><category term='GOTO'/><category term='Boundary-value_analysis Testing_101'/><category term='Internet'/><category term='Proof'/><category term='personal'/><category term='logic'/><category term='attribute'/><category term='WWW'/><category term='MANIFEST'/><category term='security'/><category term='AML'/><category term='URL'/><category term='2010'/><category term='UML'/><category term='goals'/><category term='Primes'/><category term='communication'/><category term='Business Functionality'/><category term='Java'/><category term='zero'/><category term='databases'/><category term='Pattern'/><category term='C#'/><category term='RISC'/><category term='Google Analytics'/><category term='Upgrade'/><category term='Agile'/><category term='Linux'/><category term='history'/><category term='BPMN'/><category term='CMS'/><category term='marketing'/><category term='design'/><category term='Update'/><category term='Ubuntu'/><category term='ClearCase'/><category term='Ant'/><title type='text'>Philosophy of Programming</title><subtitle type='html'>On the Philosophy of Programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-8789509973881599976</id><published>2010-12-02T21:04:00.001-06:00</published><updated>2010-12-03T21:29:08.127-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hwinfo'/><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='Fix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>How I Fixed Ubuntu Boot Issue with Error Message, "Starting up... Undefined video mode 31f"</title><content type='html'>I ran some updates on Ubuntu 10.10 and found that when I booted up I got the message, "&lt;span class="Apple-style-span" style="color: #333333; font-family: Verdana, sans-serif; font-size: 13px; line-height: 19px;"&gt;Starting up... Undefined video mode 31f&lt;/span&gt;". &amp;nbsp;(Sorry I am not sure which update caused this.)&lt;br /&gt;&lt;br /&gt;I hit space and allowed it to continue. &amp;nbsp;I then watch &lt;a href="http://www.watchanimeon.com/bleach-episode-296/"&gt;Bleach 296&lt;/a&gt;,&amp;nbsp;did a few other things and called it a day. &amp;nbsp;The next day when I booted up, same issue (I was kind of hoping it was a non-issue issue, O-well).&lt;br /&gt;&lt;br /&gt;I googled the error message and found this &lt;a href="http://ubuntuforums.org/showthread.php?t=466181"&gt;post&lt;/a&gt;, which made perfect sense to me (I also found a lot of other posts that made no sense and gave no real fixes). &amp;nbsp;Following what was in post in the form, I did the following:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;apt-get install hwinfo&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;sudo hwinfo --framebuffer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Giving me:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;02: None 00.0: 11001 VESA Framebuffer &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;[Created at bios.464]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Unique ID: rdCR.zrHRJLheAS6&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Hardware Class: framebuffer&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Model: "NVIDIA G84 Board - p410h1b "&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Vendor: "NVIDIA Corporation"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Device: "G84 Board - p410h1b "&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;SubVendor: "NVIDIA"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;SubDevice:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Revision: "Chip Rev"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Memory Size: 14 MB&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Memory Range: 0xfb000000-0xfbdfffff (rw)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0300: 640x400 (+640), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0301: 640x480 (+640), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0303: 800x600 (+800), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0305: 1024x768 (+1024), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0307: 1280x1024 (+1280), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x030e: 320x200 (+640), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x030f: 320x200 (+1280), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0311: 640x480 (+1280), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0312: 640x480 (+2560), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0314: 800x600 (+1600), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0315: 800x600 (+3200), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0317: 1024x768 (+2048), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0318: 1024x768 (+4096), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x031a: 1280x1024 (+2560), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x031b: 1280x1024 (+5120), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0330: 320x200 (+320), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0331: 320x400 (+320), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0332: 320x400 (+640), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0333: 320x400 (+1280), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0334: 320x240 (+320), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0335: 320x240 (+640), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0336: 320x240 (+1280), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x033d: 640x400 (+1280), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x033e: 640x400 (+2560), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0345: 1600x1200 (+1600), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0346: 1600x1200 (+3200), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0347: 1400x1050 (+1400), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0348: 1400x1050 (+2800), 16 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0349: 1400x1050 (+5600), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x034a: 1600x1200 (+6400), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0352: 2048x1536 (+8192), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0360: 1280x800 (+1280), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0361: 1280x800 (+5120), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0362: 768x480 (+768), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0364: 1440x900 (+1440), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0365: 1440x900 (+5760), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0368: 1680x1050 (+1680), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x0369: 1680x1050 (+6720), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x037c: 1920x1200 (+1920), 8 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Mode 0x037d: 1920x1200 (+7680), 24 bits&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;Config Status: cfg=new, avail=yes, need=no, active=unknown&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;I figured I'd use 0x0369&lt;br /&gt;&lt;br /&gt;I then edited &lt;a href="http://www.gnu.org/software/grub/"&gt;grub&lt;/a&gt; using:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;sudo gedit&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; line-height: 19px;"&gt;/boot/grub/menu.lst&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I look for the "vga=" and change it to the mode value I wanted to use (0x0369)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;## ## End Default Options ##&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;title&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;Ubuntu 10.10, kernel 2.6.35-23-generic-pae&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;root&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;(hd0,6)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;kernel&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;/boot/vmlinuz-2.6.35-23-generic-pae root=UUID=3608162f-dcd7-4b92-b1d9-c2162c720162 ro quiet vga=&lt;b&gt;0x0369&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;initrd&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;/boot/initrd.img-2.6.35-23-generic-pae&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small; line-height: 19px;"&gt;quiet&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Restarted and now no more error message!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-8789509973881599976?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/8789509973881599976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=8789509973881599976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8789509973881599976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8789509973881599976'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/12/how-i-fixed-ubuntu-boot-issue-with.html' title='How I Fixed Ubuntu Boot Issue with Error Message, &quot;Starting up... Undefined video mode 31f&quot;'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-8077481101400317443</id><published>2010-10-30T15:10:00.000-05:00</published><updated>2010-10-30T15:10:27.036-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>On Communication</title><content type='html'>&lt;h2&gt;Spaceship Earth&lt;/h2&gt;This fall for my fifth wedding anniversary&amp;nbsp;to my lovely wife, we went to &lt;a href="http://disneyworld.disney.go.com/"&gt;Disney World&lt;/a&gt; and&amp;nbsp;&lt;a href="http://www.blogger.com/goog_589798391"&gt;Universal's&amp;nbsp;&lt;/a&gt; &lt;a href="http://www.universalorlando.com/Amusement_Parks/Islands_of_Adventure/islands_of_adventure.aspx"&gt;Islands of Adventure&lt;/a&gt; (to go to the &lt;a href="http://www.universalorlando.com/Home/harrypotter.aspx"&gt;Wizarding World of Harry Potter&lt;/a&gt;). &amp;nbsp;While at &lt;a href="http://disneyworld.disney.go.com/parks/epcot/"&gt;Epcot&lt;/a&gt; we went on &lt;a href="http://disneyworld.disney.go.com/parks/epcot/attractions/spaceship-earth/"&gt;Spaceship Earth&lt;/a&gt;, the newly redone ride in the big sphere. &amp;nbsp;The ride was very interesting as it tells the history of the mankind.&lt;br /&gt;&lt;br /&gt;The theme running through the ride (at least to me) was that of the evolution of communication.&lt;br /&gt;Spaceship Earth starts with the dawn of human kind, humans hunting by themselves, it then goes on to say the first breakthrough was people working together to hunt. &amp;nbsp;From groups hunting we have tribes, then towns, cities, and countries forming. &amp;nbsp;All-a-long this forming of larger groups of people we find people sharing information as key to progress. &amp;nbsp;This progress spans from: early cave drawings, to papias&amp;nbsp;writings, books,&amp;nbsp;universities, libraries, and finally computers with large databases and other means of storage. &amp;nbsp;A very interesting way of looking at the history of mankind.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Basic Patterns of Communication&lt;/h2&gt;Spaceship Earth got me thinking again about something I've been thinking about since my undergrad at &lt;a href="http://www.cs.niu.edu/"&gt;NIU&lt;/a&gt;, there are really only two forms of communications, information sharing and information downloading.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Information Sharing&lt;/h2&gt;Information sharing, to me, is anytime you have more than one entity sharing information. &amp;nbsp;Example of this are a conversation&amp;nbsp;among&amp;nbsp;two people. &amp;nbsp;A conversation is when all parties are speaking and thinking about what each other are saying and are forming a pool of shared meaning and knowledge, all parties gain knowledge and insight from this conversation and leave it with more knowledge than before it took place.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TMx4faa2iNI/AAAAAAAAAEM/aopPoEXi8rg/s1600/Conversation.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TMx4faa2iNI/AAAAAAAAAEM/aopPoEXi8rg/s1600/Conversation.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the picture above we have two people, Jim and Cindy (my parents) communicating back and forth with each other. &amp;nbsp;We could easily abstract this to two computer systems communicating as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_Z6hiCVh2OGY/TMx4mXdmQnI/AAAAAAAAAEQ/KtTRCAnVWOo/s1600/HTTP.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="40" src="http://2.bp.blogspot.com/_Z6hiCVh2OGY/TMx4mXdmQnI/AAAAAAAAAEQ/KtTRCAnVWOo/s320/HTTP.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There is no difference in the pattern between Jim and Cindy speaking and Chrome and Google communicating, they both share information back and forth and leave the conversation with more knowledge than when they entered it (true you could say that Chrome and Google do not gain anything, but they could if they wanted to and sometimes do, i.e. browser cookies and web server analytics).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Information Downloading&lt;/h2&gt;Information downloading, again to me, is anytime one entity is obtain&amp;nbsp;information&amp;nbsp;from an information storage. &amp;nbsp;This storage can take any form: a book, database, or even a teacher. &amp;nbsp;In this form of communication only one entity gains anything from the communication, the storage gains nothing. &amp;nbsp;An example of this would be a presentation, in the typical presentation the presenter gains no new knowledge on the presentation they are giving, but the&amp;nbsp;observers&amp;nbsp;of the presentation gain the knowledge being presented.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TMx37vWTSuI/AAAAAAAAAEE/kE49CBdVINQ/s1600/Presenter.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TMx37vWTSuI/AAAAAAAAAEE/kE49CBdVINQ/s1600/Presenter.jpeg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In this picture we have myself presenting a topic to an audience. &amp;nbsp;Since I am just presenting, I am not gaining any new knowledge on the topic while (I hope) the audience is gaining new knowledge about the topic being presented. &amp;nbsp;This can be abstracted to web service and a database as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TMx4Kq6h24I/AAAAAAAAAEI/_r7qSxbF0dA/s1600/Webservice.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="75" src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TMx4Kq6h24I/AAAAAAAAAEI/_r7qSxbF0dA/s320/Webservice.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There is no difference between Mike and the audience or GetParty web service and the Party Details database, both the audience and GetParty are downloading information from Mike and Party Details. &amp;nbsp;In both cases Mike and the Party Details database gain nothing from the exchange.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-8077481101400317443?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/8077481101400317443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=8077481101400317443' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8077481101400317443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8077481101400317443'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/10/on-communication.html' title='On Communication'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Z6hiCVh2OGY/TMx4faa2iNI/AAAAAAAAAEM/aopPoEXi8rg/s72-c/Conversation.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-1984574832779018619</id><published>2010-10-02T17:45:00.000-05:00</published><updated>2010-10-02T17:45:04.482-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='timestamp'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='jar'/><category scheme='http://www.blogger.com/atom/ns#' term='SimpleDateFormat'/><category scheme='http://www.blogger.com/atom/ns#' term='attribute'/><title type='text'>How to format the Date and Time in an Ant Script</title><content type='html'>&lt;h2&gt;Configuration Nightmare&lt;/h2&gt;On the current project I am working on, we have people in three different timezones working on the same code and&amp;nbsp;environments. &amp;nbsp;We have a &lt;a href="http://en.wikipedia.org/wiki/Software_testing#Testing_levels"&gt;fairly normal testing&amp;nbsp;environments&amp;nbsp;set up&lt;/a&gt; of: Unit, Integration, System, Acceptance, and Regression levels. &amp;nbsp;Our current deployment strategy&amp;nbsp;calls for each WebService to have everything it needs in one package, meaning that if WebService A and B both use the same Data Access jar, then both WebService packages will have their own versions of the jar. &amp;nbsp;As you may have guess this works fine for the most part if that Data Access jar is not changing, but if it does change then both WebServices will have to be redeployed if they both want to use any changes to the Data Access jar.&lt;br /&gt;&lt;br /&gt;This strategy can lead to the following issues (shown in this UML &lt;a href="http://www.agilemodeling.com/artifacts/deploymentDiagram.htm"&gt;Deployment Diagram&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TKeyYKP9y1I/AAAAAAAAAD4/BGsIeRG6cpo/s1600/Levels.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="269" src="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TKeyYKP9y1I/AAAAAAAAAD4/BGsIeRG6cpo/s320/Levels.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you look closely you will see that in GetAccount WebService in the Integration level we have version 1 of the DataAccess jar, if all our testing validates that this service works but we want the new functionality of version 2 of the DataAccess jar, we will have to retest with version 2 to validate that the new jar does not cause issues. &amp;nbsp;This issue is easy enough for the Environment&amp;nbsp;Manager, all they have to do is deploy the GetAccount WebService with version 2 of the DataAccess jar. &amp;nbsp;The&amp;nbsp;Environment&amp;nbsp;Manager will just have to go to the CMS and get version 2 of the jar, unfortantly the CMS is designed to be accessed by dates of atrifacts and has a totally different concept of versions. &amp;nbsp;To make matters worst the Environment Manager is in a different timezone than the developers and the CMS they use.&lt;br /&gt;&lt;br /&gt;This was the kind of&amp;nbsp;position&amp;nbsp;I found myself in&amp;nbsp;recently. &amp;nbsp;The MAINIFEST.MF in the jar was using a date and time format that was in the &lt;a href="http://www.europeword.com/blog/europe/european-date-format/"&gt;European style&lt;/a&gt; (day/month/year) with a time without a timezone. &amp;nbsp;The Ant script was creating a MAINIFEST.MF file with attributes for the data and time that confused everyone, so I went in and changed the script. &amp;nbsp;That is when I found out there was no single document that covered the Ant TStamp task in full. &amp;nbsp;I hope the rest of this blog will solve that issue.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Ant TStamp Task&lt;/h2&gt;&lt;a href="http://ant.apache.org/manual/Tasks/tstamp.html"&gt;TStamp Task&lt;/a&gt; has the following format:&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellpadding="2" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color: #cccccc; color: black;" valign="top"&gt;&lt;b&gt;Attribute&lt;/b&gt;&lt;/td&gt;&lt;td style="background-color: #cccccc; color: black;" valign="top"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/td&gt;&lt;td align="center" style="background-color: #cccccc; color: black;" valign="top"&gt;&lt;b&gt;Required&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;property&lt;/td&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;The property to receive the date/time string in the given pattern.&lt;/td&gt;&lt;td align="center" style="background-color: #eeeeee; color: black;" valign="top"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;pattern&lt;/td&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;The date/time pattern to be used. The values are as defined by the Java SimpleDateFormat class.&lt;/td&gt;&lt;td align="center" style="background-color: #eeeeee; color: black;" valign="top"&gt;Yes&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;timezone&lt;/td&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;The timezone to use for displaying time. The values are as defined by the Java&amp;nbsp;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/TimeZone.html"&gt;TimeZone&lt;/a&gt;&amp;nbsp;class.&lt;/td&gt;&lt;td align="center" style="background-color: #eeeeee; color: black;" valign="top"&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;offset&lt;/td&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;The numeric offset to the current time&lt;/td&gt;&lt;td align="center" style="background-color: #eeeeee; color: black;" valign="top"&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;unit&lt;/td&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;The unit of the offset to be applied to the current time. Valid Values are&lt;br /&gt;&lt;ul&gt;&lt;li&gt;millisecond&lt;/li&gt;&lt;li&gt;second&lt;/li&gt;&lt;li&gt;minute&lt;/li&gt;&lt;li&gt;hour&lt;/li&gt;&lt;li&gt;day&lt;/li&gt;&lt;li&gt;week&lt;/li&gt;&lt;li&gt;month&lt;/li&gt;&lt;li&gt;year&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;td align="center" style="background-color: #eeeeee; color: black;" valign="top"&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;locale&lt;/td&gt;&lt;td style="background-color: #eeeeee; color: black;" valign="top"&gt;The locale used to create date/time string. The general form is "language, country, variant" but either variant or variant and country may be omitted. For more information please refer to documentation for the&amp;nbsp;&lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/Locale.html"&gt;Locale&lt;/a&gt;&amp;nbsp;class.&lt;/td&gt;&lt;td align="center" style="background-color: #eeeeee; color: black;" valign="top"&gt;No&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;An example would be:&lt;br /&gt;&lt;pre&gt;&amp;lt;tstamp&amp;gt;&lt;br /&gt;  &amp;lt;format property="datetime" pattern="MM/dd/yyyy hh:mm"/&amp;gt;&lt;br /&gt;&amp;lt;/tstamp&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I find this pattern for the format of the date and time to be a bit&amp;nbsp;elitist. &amp;nbsp;Meaning people use to the&amp;nbsp;European style of dates might get confuse, plus there is no timezone on the time which could lead to even more confusion. &amp;nbsp;Instead I think that the month should be spelled out and the time should have a timezone. &amp;nbsp;We are lucky since the pattern that Ant's &lt;a href="http://ant.apache.org/manual/Tasks/tstamp.html"&gt;TStamp Task&lt;/a&gt; uses is the same pattern used for Java's &lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html"&gt;SimpleDateFormat&lt;/a&gt; class.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Java SimpleDateFormat Pattern&lt;/h2&gt;Java's &lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html"&gt;SimpleDateFormat&lt;/a&gt; uses the follow pattern:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="3" summary="Chart shows pattern letters, date/time component, presentation, and examples."&gt;&lt;tbody&gt;&lt;tr bgcolor="#ccccff"&gt;&lt;th align="left"&gt;Letter&lt;/th&gt;&lt;th align="left"&gt;Date or Time Component&lt;/th&gt;&lt;th align="left"&gt;Presentation&lt;/th&gt;&lt;th align="left"&gt;Examples&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;G&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Era designator&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#text"&gt;Text&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;AD&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;y&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Year&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#year"&gt;Year&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;1996&lt;/code&gt;;&amp;nbsp;&lt;code&gt;96&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;M&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Month in year&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#month"&gt;Month&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;July&lt;/code&gt;;&amp;nbsp;&lt;code&gt;Jul&lt;/code&gt;;&amp;nbsp;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;w&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Week in year&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;W&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Week in month&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;D&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Day in year&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;189&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;d&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Day in month&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;F&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Day of week in month&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;E&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Day in week&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#text"&gt;Text&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;Tuesday&lt;/code&gt;;&amp;nbsp;&lt;code&gt;Tue&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;a&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Am/pm marker&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#text"&gt;Text&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;PM&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;H&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Hour in day (0-23)&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;k&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Hour in day (1-24)&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;K&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Hour in am/pm (0-11)&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;h&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Hour in am/pm (1-12)&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;m&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Minute in hour&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Second in minute&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;55&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Millisecond&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#number"&gt;Number&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;978&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;z&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Time zone&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#timezone"&gt;General time zone&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;Pacific Standard Time&lt;/code&gt;;&amp;nbsp;&lt;code&gt;PST&lt;/code&gt;;&amp;nbsp;&lt;code&gt;GMT-08:00&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Z&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Time zone&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-create.g?blogID=6545287867125256063#rfc822timezone"&gt;RFC 822 time zone&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;-0800&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Look at the table above we see that &lt;b&gt;M&lt;/b&gt; can be used to show the month and &lt;b&gt;z&lt;/b&gt; can be used to show the timezone. &amp;nbsp;Looking at the examples given in the Java doc we see the following:&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="3" summary="Examples of date and time patterns interpreted in the U.S. locale"&gt;&lt;tbody&gt;&lt;tr bgcolor="#ccccff"&gt;&lt;th align="left"&gt;Date and Time Pattern&lt;/th&gt;&lt;th align="left"&gt;Result&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;"yyyy.MM.dd G 'at' HH:mm:ss z"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;2001.07.04 AD at 12:08:56 PDT&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;"EEE, MMM d, ''yy"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;Wed, Jul 4, '01&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;"h:mm a"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;12:08 PM&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;"hh 'o''clock' a, zzzz"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;12 o'clock PM, Pacific Daylight Time&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;"K:mm a, z"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;0:08 PM, PDT&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;"yyyyy.MMMMM.dd GGG hh:mm aaa"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;02001.July.04 AD 12:08 PM&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;"EEE, d MMM yyyy HH:mm:ss Z"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;Wed, 4 Jul 2001 12:08:56 -0700&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr bgcolor="#eeeeff"&gt;&lt;td&gt;&lt;code&gt;"yyMMddHHmmssZ"&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;010704120856-0700&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;When &lt;b&gt;M&lt;/b&gt; is used three or more times, we get a text representation of the month, which is what we want. &amp;nbsp;Further, with a &lt;b&gt;z&lt;/b&gt; we get the timezone and also with an &lt;b&gt;a&lt;/b&gt;&amp;nbsp;we get the AM/PM marker (which is good since we have options for 24 hour days starting with either 0 or 1, so we'll do the easy thing and use AM/PM).&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;TStamp Task Solution&lt;/h2&gt;I changed the date and time MANIFEST attribute to be:&lt;br /&gt;&lt;pre&gt;&amp;lt;tstamp&amp;gt;&lt;br /&gt;  &amp;lt;format property="datetime"&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;pattern="EEE, MMM dd, yyyy hh:mm:ss a z"/&amp;gt;&lt;br /&gt;&amp;lt;/tstamp&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;which gives the follow:&lt;br /&gt;&lt;br /&gt;Wed, Jul 04, 2001 12:08:56 PM PDT&lt;br /&gt;&lt;br /&gt;Which I find much more readable and understandable to people across the world.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;TStamp Task table came from:&amp;nbsp;&lt;a href="http://ant.apache.org/manual/Tasks/tstamp.html"&gt;http://ant.apache.org/manual/Tasks/tstamp.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SimpleDateFormat tables came from:&amp;nbsp;&lt;a href="http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html"&gt;http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I used &lt;a href="http://projects.gnome.org/dia/"&gt;Dia&lt;/a&gt; to create the &lt;a href="http://www.agilemodeling.com/artifacts/deploymentDiagram.htm"&gt;UML Deployment Diagram&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-1984574832779018619?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/1984574832779018619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=1984574832779018619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1984574832779018619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1984574832779018619'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/10/how-to-format-date-and-time-in-ant.html' title='How to format the Date and Time in an Ant Script'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Z6hiCVh2OGY/TKeyYKP9y1I/AAAAAAAAAD4/BGsIeRG6cpo/s72-c/Levels.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-4472322848434125713</id><published>2010-09-20T22:05:00.000-05:00</published><updated>2010-09-20T22:05:50.178-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MANIFEST'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='jar'/><title type='text'>How to view the MANIFEST.MF file of a jar</title><content type='html'>If you do not work with the command line with jars a lot it is easy to forget what the options are.  I was surprise to learn that if you do a search for "How to view the MANIFEST.MF file of a jar" you do not find anything that simply tells you how (or even how to in a round about way).  I hope this post will solve that.&lt;br /&gt;&lt;br /&gt;Say you have a jar file like http.jar from the &lt;a href="http://netbeans.org/kb/docs/websvc/flower-code-ws.html"&gt;NetBeans Flower Store example&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;View contents of jar&lt;/h3&gt;If you want to &lt;a href="http://download.oracle.com/javase/tutorial/deployment/jar/view.html"&gt;view the contents&lt;/a&gt; of the jar simply use &lt;b&gt;jar tf &amp;nbsp;&lt;/b&gt;&lt;i&gt;&lt;b&gt;jar&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;mike@mike-laptop:~$ &lt;b&gt;jar tf /home/mike/NetBeansProjects/FlowerRest/build/web/WEB-INF/lib/http.jar&lt;/b&gt;&lt;br /&gt;META-INF/&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #e06666;"&gt;META-INF/MANIFEST.MF&lt;/span&gt;&lt;br /&gt;com/&lt;br /&gt;com/sun/&lt;br /&gt;com/sun/net/&lt;br /&gt;com/sun/net/httpserver/&lt;br /&gt;com/sun/net/httpserver/spi/&lt;br /&gt;com/sun/net/httpserver/spi/HttpServerProvider$1.class&lt;br /&gt;com/sun/net/httpserver/spi/HttpServerProvider.class&lt;br /&gt;com/sun/net/httpserver/HttpServer.class&lt;br /&gt;com/sun/net/httpserver/HttpsServer.class&lt;br /&gt;com/sun/net/httpserver/HttpHandler.class&lt;br /&gt;com/sun/net/httpserver/HttpContext.class&lt;br /&gt;com/sun/net/httpserver/HttpsConfigurator.class&lt;br /&gt;com/sun/net/httpserver/HttpExchange.class&lt;br /&gt;com/sun/net/httpserver/Filter$Chain.class&lt;br /&gt;com/sun/net/httpserver/Filter.class&lt;br /&gt;com/sun/net/httpserver/Authenticator$Result.class&lt;br /&gt;com/sun/net/httpserver/Authenticator$Failure.class&lt;br /&gt;com/sun/net/httpserver/Authenticator$Success.class&lt;br /&gt;com/sun/net/httpserver/Authenticator$Retry.class&lt;br /&gt;com/sun/net/httpserver/Authenticator.class&lt;br /&gt;com/sun/net/httpserver/HttpsParameters.class&lt;br /&gt;com/sun/net/httpserver/Headers.class&lt;br /&gt;com/sun/net/httpserver/HttpPrincipal.class&lt;br /&gt;com/sun/net/httpserver/HttpsExchange.class&lt;br /&gt;com/sun/net/httpserver/BasicAuthenticator.class&lt;br /&gt;com/sun/net/httpserver/Base64.class&lt;br /&gt;sun/&lt;br /&gt;sun/net/&lt;br /&gt;sun/net/httpserver/&lt;br /&gt;sun/net/httpserver/ChunkedOutputStream.class&lt;br /&gt;sun/net/httpserver/ExchangeImpl.class&lt;br /&gt;sun/net/httpserver/Request$ReadStream.class&lt;br /&gt;sun/net/httpserver/Request$WriteStream.class&lt;br /&gt;sun/net/httpserver/Request.class&lt;br /&gt;sun/net/httpserver/HttpConnection.class&lt;br /&gt;sun/net/httpserver/LeftOverInputStream.class&lt;br /&gt;sun/net/httpserver/PlaceholderOutputStream.class&lt;br /&gt;sun/net/httpserver/ServerImpl$DefaultExecutor.class&lt;br /&gt;sun/net/httpserver/ServerImpl$Dispatcher.class&lt;br /&gt;sun/net/httpserver/ServerImpl$Exchange$LinkHandler.class&lt;br /&gt;sun/net/httpserver/ServerImpl$Exchange.class&lt;br /&gt;sun/net/httpserver/ServerImpl$ServerTimerTask.class&lt;br /&gt;sun/net/httpserver/ServerImpl$1.class&lt;br /&gt;sun/net/httpserver/ServerImpl.class&lt;br /&gt;sun/net/httpserver/TimeSource.class&lt;br /&gt;sun/net/httpserver/HttpContextImpl.class&lt;br /&gt;sun/net/httpserver/SSLStreams$Parameters.class&lt;br /&gt;sun/net/httpserver/SSLStreams$WrapperResult.class&lt;br /&gt;sun/net/httpserver/SSLStreams$BufType.class&lt;br /&gt;sun/net/httpserver/SSLStreams$EngineWrapper.class&lt;br /&gt;sun/net/httpserver/SSLStreams$InputStream.class&lt;br /&gt;sun/net/httpserver/SSLStreams$OutputStream.class&lt;br /&gt;sun/net/httpserver/SSLStreams$1.class&lt;br /&gt;sun/net/httpserver/SSLStreams.class&lt;br /&gt;sun/net/httpserver/ContextList.class&lt;br /&gt;sun/net/httpserver/Event.class&lt;br /&gt;sun/net/httpserver/AuthFilter.class&lt;br /&gt;sun/net/httpserver/SelectorCache$1.class&lt;br /&gt;sun/net/httpserver/SelectorCache$SelectorWrapper.class&lt;br /&gt;sun/net/httpserver/SelectorCache$CacheCleaner.class&lt;br /&gt;sun/net/httpserver/SelectorCache.class&lt;br /&gt;sun/net/httpserver/WriteFinishedEvent.class&lt;br /&gt;sun/net/httpserver/HttpError.class&lt;br /&gt;sun/net/httpserver/DefaultHttpServerProvider.class&lt;br /&gt;sun/net/httpserver/FixedLengthInputStream.class&lt;br /&gt;sun/net/httpserver/UndefLengthOutputStream.class&lt;br /&gt;sun/net/httpserver/Code.class&lt;br /&gt;sun/net/httpserver/ServerConfig.class&lt;br /&gt;sun/net/httpserver/StreamClosedException.class&lt;br /&gt;sun/net/httpserver/UnmodifiableHeaders.class&lt;br /&gt;sun/net/httpserver/HttpExchangeImpl.class&lt;br /&gt;sun/net/httpserver/HttpsExchangeImpl.class&lt;br /&gt;sun/net/httpserver/HttpServerImpl.class&lt;br /&gt;sun/net/httpserver/HttpsServerImpl.class&lt;br /&gt;sun/net/httpserver/ChunkedInputStream.class&lt;br /&gt;sun/net/httpserver/FixedLengthOutputStream.class&lt;br /&gt;&lt;br /&gt;There it is the MANIFEST.MF file, I've highlighted it in &lt;span class="Apple-style-span" style="background-color: #e06666;"&gt;red&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Get MANIFEST.MF from jar&lt;/h3&gt;To&amp;nbsp;&lt;a href="http://download.oracle.com/javase/tutorial/deployment/jar/unpack.html"&gt;extract&lt;/a&gt;&amp;nbsp;the MANIFEST.MF file simply use&amp;nbsp;&lt;b&gt;jar xf &amp;nbsp;&lt;/b&gt;&lt;i&gt;&lt;b&gt;jar &lt;span class="Apple-style-span" style="font-style: normal;"&gt;META-INF/MANIFEST.MF&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;mike@mike-laptop:~$ &lt;b&gt;jar xf /home/mike/NetBeansProjects/FlowerRest/build/web/WEB-INF/lib/http.jar META-INF/MANIFEST.MF&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;View MANIFEST.MF from jar&lt;/h3&gt;To view the file use &lt;b&gt;cat&amp;nbsp;META-INF/MANIFEST.MF&lt;/b&gt; or &lt;b&gt;edit&amp;nbsp;META-INF/MANIFEST.MF&lt;/b&gt; in Windows.&lt;br /&gt;mike@mike-laptop:~$ &lt;b&gt;cat META-INF/MANIFEST.MF&lt;/b&gt;&lt;br /&gt;Manifest-Version: 1.0&lt;br /&gt;Created-By: 1.5.0 (Sun Microsystems Inc.)&lt;br /&gt;&lt;br /&gt;Easy enough. &amp;nbsp;The xf option on the jar, extracts the file so you may want to delete the extracted META-INF/MANIFEST.MF afterwards.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-4472322848434125713?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/4472322848434125713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=4472322848434125713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4472322848434125713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4472322848434125713'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/09/how-to-view-manifestmf-file-of-jar.html' title='How to view the MANIFEST.MF file of a jar'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-6988522346731748616</id><published>2010-09-14T08:15:00.001-05:00</published><updated>2010-09-14T08:15:00.161-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='databases'/><category scheme='http://www.blogger.com/atom/ns#' term='Update'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Complex SQL Updates with the Case Statement</title><content type='html'>One of the most important rules-of-thumb for database performance and data quality is to do as much as you can in as few transactions as possible. &amp;nbsp;When making &lt;a href="http://www.w3schools.com/sql/sql_update.asp"&gt;Updates&lt;/a&gt; to data sometimes you need to do different things based on different conditions. &amp;nbsp;In order to make these &lt;a href="http://www.databasejournal.com/features/mssql/article.php/1460001/Complex-Updates-Using-the-Case-Statement.htm"&gt;complex Updates&lt;/a&gt; and to do them in as few transaction as possible, you'll need some way to make a decision. &amp;nbsp;One way to make a decision in SQL is by using the &lt;a href="http://stackoverflow.com/questions/4622/sql-case-statement-syntax"&gt;Case statement&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Given the following table:&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;country&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;state&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;zip&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;IL&lt;/td&gt;&lt;td&gt;60191&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;AA&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;CA&lt;/td&gt;&lt;td&gt;90210&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;99999&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Say the &lt;b&gt;state&lt;/b&gt;&amp;nbsp;and &lt;b&gt;zip&lt;/b&gt; columns are now made nullable so that&amp;nbsp;garbage&amp;nbsp;data will stop being put into it (e.g., UK having &lt;b&gt;state&lt;/b&gt; AA and ?, and &lt;b&gt;zip&lt;/b&gt;&amp;nbsp;of 0 and 99999). &amp;nbsp;You'll want to correct the data you have so that you no longer have garbage data in the table. &amp;nbsp;To do so what you'll want to do is null the &lt;b&gt;state&lt;/b&gt;&amp;nbsp;and &lt;b&gt;zip&lt;/b&gt;&amp;nbsp;when the &lt;b&gt;country&lt;/b&gt; is not USA.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;update location&lt;br /&gt;&amp;nbsp;&amp;nbsp;set&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;state = case&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country = 'USA' then state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country &amp;lt;&amp;gt; 'USA' then null&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;zip = case&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country = 'USA' then zip&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country &amp;lt;&amp;gt; 'USA' then null&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;or you can do&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt; update location&lt;br /&gt;&amp;nbsp;&amp;nbsp;set&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;state = case&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country = 'USA' then state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;else null&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;zip = case&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country = 'USA' then zip&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;else null&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;or you can replace null with ''.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;The table should look like this now:&lt;/div&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;country&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;state&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;zip&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;IL&lt;/td&gt;&lt;td&gt;60191&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;(null)&lt;/td&gt;&lt;td&gt;(null)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;CA&lt;/td&gt;&lt;td&gt;90210&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;(null)&lt;/td&gt;&lt;td&gt;(null)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;You can also used any other value you can obtain from the table in the &lt;a href="http://en.wikipedia.org/wiki/Update_(SQL)"&gt;Update statement&lt;/a&gt;, like this.&lt;br /&gt;&lt;br /&gt;Given the following table again:&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;country&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;state&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;zip&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;IL&lt;/td&gt;&lt;td&gt;60191&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;AA&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;CA&lt;/td&gt;&lt;td&gt;90210&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;td&gt;99999&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;We can do something like this (assuming that &lt;b&gt;state&lt;/b&gt; and &lt;b&gt;zip&lt;/b&gt; are Character data types).&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;update location&lt;br /&gt;&amp;nbsp;&amp;nbsp;set&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;state = case&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country = 'USA' then state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country &amp;lt;&amp;gt; 'USA' then country&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;zip = case&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country = 'USA' then zip&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;when country &amp;lt;&amp;gt; 'USA' then country&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The table should look like this now:&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;country&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;state&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;zip&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;IL&lt;/td&gt;&lt;td&gt;60191&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;USA&lt;/td&gt;&lt;td&gt;CA&lt;/td&gt;&lt;td&gt;90210&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;td&gt;UK&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Remember if you can picture what you want the data to look like then you can do it in SQL, it is a &lt;a href="http://en.wikipedia.org/wiki/Declarative_programming"&gt;declarative programming language&lt;/a&gt;&amp;nbsp;after all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-6988522346731748616?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/6988522346731748616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=6988522346731748616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6988522346731748616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6988522346731748616'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/09/complex-sql-updates-with-case-statement.html' title='Complex SQL Updates with the Case Statement'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-6660575496939537712</id><published>2010-09-11T18:39:00.000-05:00</published><updated>2010-09-11T18:39:55.746-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='marketing'/><title type='text'>Tracking New Referrals Traffic Through Google Analytics</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;If you read this blog on a regular basis (thank you) you might notice two tags at the bottom of the site. &amp;nbsp;These tags have placed this blog on two different blog referral sites. &amp;nbsp;Since I use &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; to monitor the site, I figured I'd set up &lt;a href="http://analytics.blogspot.com/search/label/Back%20to%20Basics%20Series"&gt;Segments&lt;/a&gt; to see if the blog referral sites are actually sending traffic to the site. &amp;nbsp;The goal is for these sites to send 100 new&amp;nbsp;visitors&amp;nbsp;in a month, if they do not then the tags will be removed.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;To set up a Segment in &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; you do the following.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;1) Click on "Advance Segments" under "My Customizations" on the left.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOa7s6sNI/AAAAAAAAADM/svM28VLEuMw/s1600/Step1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOa7s6sNI/AAAAAAAAADM/svM28VLEuMw/s320/Step1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;2) Click the "Create new custom segment" button&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_Z6hiCVh2OGY/TIwOekAyj1I/AAAAAAAAADU/DzZahFmjce8/s1600/Step2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Z6hiCVh2OGY/TIwOekAyj1I/AAAAAAAAADU/DzZahFmjce8/s320/Step2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;3) Drag the "Dimensions" and "Metrics" you want to use to create the Segment&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_Z6hiCVh2OGY/TIwOhYhHQDI/AAAAAAAAADc/LBtZENE3omM/s1600/Step3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Z6hiCVh2OGY/TIwOhYhHQDI/AAAAAAAAADc/LBtZENE3omM/s320/Step3.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;4) Add the Segments to the view by clicking on the "View" button on the top right&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOj5kCVyI/AAAAAAAAADk/hrDrXHkNxU4/s1600/Step4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOj5kCVyI/AAAAAAAAADk/hrDrXHkNxU4/s1600/Step4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOj5kCVyI/AAAAAAAAADk/hrDrXHkNxU4/s320/Step4.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;5) Now the Segments on show along with everything else on the dashboard.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOmEINzCI/AAAAAAAAADs/vntcu0GHEjI/s1600/Step5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOmEINzCI/AAAAAAAAADs/vntcu0GHEjI/s320/Step5.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;That is it. &amp;nbsp;Now I can easily see if these sites are sending any traffic my way. &amp;nbsp;Feel free to comment.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-6660575496939537712?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/6660575496939537712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=6660575496939537712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6660575496939537712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6660575496939537712'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/09/tracking-new-referrals-traffic-through.html' title='Tracking New Referrals Traffic Through Google Analytics'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Z6hiCVh2OGY/TIwOa7s6sNI/AAAAAAAAADM/svM28VLEuMw/s72-c/Step1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-4658423835078333093</id><published>2010-08-30T21:06:00.000-05:00</published><updated>2010-08-30T21:06:47.433-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TODO'/><title type='text'>TODO for September 2010</title><content type='html'>&lt;div&gt;I try to take personal development to heart and as such I'd like to start&amp;nbsp;writing&amp;nbsp;down my monthly goals in public, hence this post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far for the &lt;a href="http://comp-phil.blogspot.com/2010/01/todo-for-2010.html"&gt;TODO's for 2010&lt;/a&gt;, I've&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;ul&gt;&lt;li&gt;Pay off the small mortgage&lt;/li&gt;&lt;li&gt;Go on vacation to a place I've never been before (&lt;a href="http://www.springfield.il.us/"&gt;Springfield, IL&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Read,&amp;nbsp;&lt;a href="http://www.amazon.com/How-Win-Friends-Influence-People/dp/1439167346/ref=wl_it_dp_o?ie=UTF8&amp;amp;coliid=I2ZH6ZZOEQCOH7&amp;amp;colid=XAH8QB8X5EWO" style="color: #999999; text-decoration: none;"&gt;How To Win Friends And Influence People&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Read,&amp;nbsp;&lt;a href="http://www.amazon.com/Ten-Day-MBA-3rd-Step-Step/dp/0060799072/ref=wl_it_dp_o?ie=UTF8&amp;amp;coliid=I28CYX3B6C7Z1U&amp;amp;colid=XAH8QB8X5EWO" style="color: #999999; text-decoration: none;"&gt;Ten Day MBA&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Join the&amp;nbsp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;a href="http://www.acm.org/" style="color: #999999; text-decoration: none;"&gt;ACM&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;I got to say paying off the small mortgage felt great. &amp;nbsp;It must feel really freeing to pay of the whole house!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: Times, 'Times New Roman', serif;"&gt;I am on track to put 20% of my wife and I's income in our 401K and to put the maximum in our Roth IRA.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;The TODO I'd like to do from Tom Peters'&amp;nbsp;&lt;a href="http://comp-phil.blogspot.com/2010/08/hunting-for-big-r-personal-renewal.html"&gt;BIG R&lt;/a&gt;&amp;nbsp;is to take on a role in the future doing something I do not know much about. &amp;nbsp;Marketing is something I never really studied and never really thought about much until I read the&amp;nbsp;&lt;a href="http://www.amazon.com/Ten-Day-MBA-3rd-Step-Step/dp/0060799072"&gt;10 Day MBA&lt;/a&gt;&amp;nbsp;(which I picked up based on the recommendation of &lt;a href="http://chadfowler.com/"&gt;Chad Fowler&lt;/a&gt; in the&amp;nbsp;&lt;a href="http://www.amazon.com/Passionate-Programmer-Remarkable-Development-Pragmatic/dp/1934356344"&gt;Passionate&amp;nbsp;Programmer&lt;/a&gt;). &amp;nbsp;I did a search on&amp;nbsp;&lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;&amp;nbsp;for Marketing Research jobs and found about about the Marketing/Web Analytics role. &amp;nbsp;I think for me, this is the kind of thing Tom had in mind.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I noticed that almost all of the Web Analytics jobs on LinkedIn wanted people who knew: SQL, Excel, &lt;a href="http://www.sap.com/solutions/sapbusinessobjects/index.epx"&gt;Business Objects&lt;/a&gt;, and some type of Analytics tool like&amp;nbsp;&lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;. &amp;nbsp;Since Google Analytics is free and easy to get infromation on, I figured I'd learn more about it. &amp;nbsp;Thanks Google!&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Read and watch every thing on the &lt;a href="http://www.google.com/analytics/education.html"&gt;Google Analytics Education page&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Read &lt;a href="http://oreilly.com/catalog/9780596514969/"&gt;Google Analytics&lt;/a&gt; by Justin Cutroni&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&amp;nbsp;(on &lt;a href="http://my.safaribooksonline.com/"&gt;Safari&lt;/a&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium;"&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I'd also like to set up some goals for Blogging for next month.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;1 blog on Investing&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;1 blog on Philosophy&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 11px; font-weight: normal;"&gt;(kindof)&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;b&gt;3 blogs on Programming with at least 1 that has code&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;That is it for the month. &amp;nbsp;Keep me honest and feel free to post your own TODOs in the comments.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-4658423835078333093?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/4658423835078333093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=4658423835078333093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4658423835078333093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4658423835078333093'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/08/todo-for-september-2010.html' title='TODO for September 2010'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-7472926427777122408</id><published>2010-08-26T20:10:00.005-05:00</published><updated>2010-08-26T21:51:13.928-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal renewal'/><title type='text'>Hunting for the BIG R (personal renewal)</title><content type='html'>On a whim I recently read &lt;a href="http://www.amazon.com/Tom-Peters/e/B000AQ8PUG"&gt;Tom Peters&lt;/a&gt;' book &lt;a href="http://www.amazon.com/Pursuit-Every-Persons-Guide-Topsy-Turvy/dp/0679755551"&gt;The Pursuit of WOW!&lt;/a&gt;.  I say a whim because this book has been sitting on my bookshelf for a very long time (around 5 years).  My wife was given this when she start at Allstate around 7 years ago (which predates the bookshelf).  I found Tom Peters name while search for other things on Amazon and I thought, I'll read the book of his on my bookshelf once I finish my current book (at the time it was &lt;a href="http://www.amazon.com/Slack-Getting-Burnout-Busywork-Efficiency/dp/0767907698"&gt;Slack&lt;/a&gt;, which is also good).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I found the writing style of the &lt;a href="http://www.amazon.com/Pursuit-Every-Persons-Guide-Topsy-Turvy/dp/0679755551"&gt;The Pursuit of WOW!&lt;/a&gt; very interesting.  It was bit like Goethe's &lt;a href="http://www.amazon.com/Maxims-Reflections-Penguin-Classics-Wolfgang/dp/0140447202"&gt;Maxims and Reflection&lt;/a&gt; or like Nietzsche's &lt;a href="http://www.amazon.com/Beyond-Good-Evil-Prelude-Philosophy/dp/0679724656"&gt;Beyond Good and Evil&lt;/a&gt;'s Epigrams and Interludes (both of which are really good and should be read by everyone).  The books main focus (at least to me) was to allow those people who work face to face with customers to have more power to wow people.  The book covers more topics, but I think that was the main point.  I found the writing to be unique and interesting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One thing that really hit home with me was this list.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The BIG R for Personal renewal&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Take a 6 month sabbatical, learning something completely new&lt;/li&gt;&lt;li&gt;Spend a year working in the inner city or the Third World&lt;/li&gt;&lt;li&gt;Sign up for 2 years in the &lt;a href="http://www.peacecorps.gov/"&gt;Peace Corps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Take a 3 year lateral assignment/demotion to a geographical or vocational area totally foreign to you&lt;/li&gt;&lt;li&gt;Spend more time on a major hobby that is nothing like your profession&lt;/li&gt;&lt;li&gt;Get a degree in a new area&lt;/li&gt;&lt;li&gt;Make a major commitment to hand work or outdoor labor (assuming that is not what you normally do)&lt;/li&gt;&lt;li&gt;Take off 2 hours in the middle of the day, at least 3 days a week to do something unlike your normal profession&lt;/li&gt;&lt;li&gt;Seek friends that have interests antithetical to yours&lt;/li&gt;&lt;li&gt;Quit your job with nothing in mind for the next step&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;To me this list looks very scary.  Hell, Tom writes next to it, "You probably can't afford to do the more drastic things on the list ... but can you afford not to?"  Very true, but I think I will take up the challenge of one of these items (most likely not one of the more drastic ones).&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-7472926427777122408?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/7472926427777122408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=7472926427777122408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7472926427777122408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7472926427777122408'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/08/hunting-for-big-r-personal-renewal.html' title='Hunting for the BIG R (personal renewal)'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-7870205729757270463</id><published>2010-08-22T16:29:00.008-05:00</published><updated>2010-08-22T17:43:49.579-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ClearCase'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>Subtractive Merge</title><content type='html'>Programming is a fun thing, sometimes the best thing you can do is to remove or undo what you have done.  There are many reason for this, some of which could be:&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;You were trying out something and it did not work as planed.&lt;/li&gt;&lt;li&gt;You were using a new version of a library and it has bugs in it.&lt;/li&gt;&lt;li&gt;You made changes that were not needed and what to just go back to an old version.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;In the end, the result is the same, you have changes that you made and now you want to get rid of them.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z6hiCVh2OGY/THGnmj7tRNI/AAAAAAAAAC0/LcUUlXqvd4M/s1600/change.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_Z6hiCVh2OGY/THGnmj7tRNI/AAAAAAAAAC0/LcUUlXqvd4M/s320/change.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5508368100173366482" style="cursor: pointer; width: 320px; height: 126px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are using a &lt;a href="http://en.wikipedia.org/wiki/Revision_control"&gt;Code Management System&lt;/a&gt;, what you'll need to is a subtractive merge.  A subtractive merge is a way to remove or undo changes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Say you have the following Ruby code&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Version 1:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# Hello World program in Ruby&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;puts "Hello World"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Version 2:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# Hello World program in Ruby&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;puts "Good Bye World"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Version 3:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# Hello World program in Ruby&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;puts "Good Bye World"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;puts "Hello world again"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/THGnu3rGS0I/AAAAAAAAAC8/psAQQDDuVPs/s1600/code_stream.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/THGnu3rGS0I/AAAAAAAAAC8/psAQQDDuVPs/s320/code_stream.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5508368242911365954" style="cursor: pointer; width: 135px; height: 320px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Say you are currently at the third version of code ("Hello world again") and you want to go back to the first version of the code ("Hello World"), what you'll need to do is subtractive merge back to the first version of the code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The way to think of a subtractive merge is that you are removing changes that were done.  In the case of doing a subtractive merge back to version 1, creating a new version 4 of the code we will have the following for version 4 of our code:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Version 4:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# Hello World program in Ruby&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;puts "Hello World"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Example in ClearCase:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;To do this in &lt;a href="http://www-01.ibm.com/support/docview.wss?rs=0&amp;amp;uid=swg21123001"&gt;ClearCase from the command line&lt;/a&gt; you would do the following:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cleartool merge -to &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;filename&lt;/span&gt;&lt;/i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; -delete -ver &lt;/span&gt;&lt;i&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;\main\branch\versionNumber \main\branch\versionNumber&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Example with file &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;hello.rb&lt;/span&gt; in the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;\main\dev&lt;/span&gt; stream:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cleartool merge -to hello.rb -delete -ver \main\dev\2 \main\dev\3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next time you find yourself wanting to rollback or undo changes, try a subtractive merge.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-7870205729757270463?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/7870205729757270463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=7870205729757270463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7870205729757270463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7870205729757270463'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/08/subtractive-merge.html' title='Subtractive Merge'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Z6hiCVh2OGY/THGnmj7tRNI/AAAAAAAAAC0/LcUUlXqvd4M/s72-c/change.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-3238107753080490145</id><published>2010-08-04T20:40:00.005-05:00</published><updated>2010-08-04T21:17:02.880-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trains'/><category scheme='http://www.blogger.com/atom/ns#' term='logic'/><title type='text'>What Side of the Tracks Should I Be On?</title><content type='html'>Whenever I can, I try to take a train to the &lt;a href="http://maps.google.com/maps?q=&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Chicago,+IL&amp;amp;gl=us&amp;amp;ei=kh1aTK3_NJronQfui-yrCQ&amp;amp;ved=0CC4Q8gEwAA&amp;amp;hl=en&amp;amp;geocode=FbGUfgId_JDG-g&amp;amp;split=0"&gt;city&lt;/a&gt;.  Trains are great: no traffic jams, no trouble finding a parking spot, and no taking the wrong exit off the highway.  Plus they are green (for the most part).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One thing I noticed is that most of the time the train station gives no indicator as to which side of the tracks to be on.  In the morning when there are lots of people going to work, this is not an issue.  Just go to where the people are. However, this does not work at odd times when you might be the only person at the station.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When at a station by one's self I find the general rules to help tell which side of the tracks to be on.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Most people wait for the train in the morning on their way to work in the city, when they get off the train on their way home they do not wait around they just leave; therefore the benches and covered waiting areas are on the side of the tracks going to the city.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7PABpWI/AAAAAAAAACc/o0TSPkpLoG0/s1600/one_side_track.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7PABpWI/AAAAAAAAACc/o0TSPkpLoG0/s320/one_side_track.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5501741698750981474" style="cursor: pointer; width: 292px; height: 320px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;If benches and covered waiting areas are on both sides of the tracks, the side with more benches and larger covered waiting areas is the side going to the city (the reason is volume).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7cvQ4VI/AAAAAAAAACk/fsNmSX1zWzM/s1600/two_side_track.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7cvQ4VI/AAAAAAAAACk/fsNmSX1zWzM/s320/two_side_track.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5501741702438773074" style="cursor: pointer; width: 320px; height: 299px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;If there are three or more tracks with a fence splitting the tracks, the slide of the fence with more tracks is the side going to the city (again the reason is volume, but this time in the number of trains).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7hdaieI/AAAAAAAAACs/1hISk77YLLo/s1600/three_side_track.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7hdaieI/AAAAAAAAACs/1hISk77YLLo/s320/three_side_track.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5501741703706085858" style="cursor: pointer; width: 320px; height: 296px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Following these simple rules should help get you on the right side of the tracks, if they do not work please let me and others know by commenting.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-3238107753080490145?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/3238107753080490145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=3238107753080490145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/3238107753080490145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/3238107753080490145'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/08/what-side-of-tracks-should-i-be-on.html' title='What Side of the Tracks Should I Be On?'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Z6hiCVh2OGY/TFoc7PABpWI/AAAAAAAAACc/o0TSPkpLoG0/s72-c/one_side_track.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-148947661571291099</id><published>2010-07-05T16:26:00.009-05:00</published><updated>2010-07-05T17:30:55.028-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AML'/><category scheme='http://www.blogger.com/atom/ns#' term='pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='communication'/><title type='text'>Use Pictures to Communicate Not Words</title><content type='html'>As I move up the ranks at work I find myself asked more to share my ideas; as I get to present my ideas I noticed that the more casual (i.e. drawing on a white board) I present my ideas the better they "go-over" and get remembered by others.&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TDJO_YSqLnI/AAAAAAAAABo/SqUJGS32Q2A/s1600/present.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_Z6hiCVh2OGY/TDJO_YSqLnI/AAAAAAAAABo/SqUJGS32Q2A/s320/present.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5490537746477493874" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Not only do my ideas "go-over" better with others, they also are more memorable to people.  The order seems to go, from worst to best, verbal/Word without images, check list, Power Point/Word with text and pictures, and best of all, white board.  I believe this happens for a few reason, but I the number one reason is words can have different means to different people.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Think about it, how often do two different people get the same mean from reading the same thing?  Not often.  If we did then we would not have introductions to books and teachers would not do anything but read to their classes.  No, it seems that just words are bad at communicating ideas to people.  Pictures are much better at communicating ideas and staying with us after the presentation.  In fact most of our brain (75% according to &lt;a href="http://www.amazon.com/Unfolding-Napkin-Hands-Problems-Pictures/dp/1591843197/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1278366453&amp;amp;sr=8-3"&gt;Unfolding the Napkin&lt;/a&gt;) is used for processing what we see.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Which do you find communicates how a &lt;a href="http://www.ibm.com/developerworks/data/library/techarticle/dm-0712bommireddipalli/"&gt;Data WebService&lt;/a&gt; works better?&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TDJZBPsgjqI/AAAAAAAAABw/dESqL1k88Ug/s1600/presenting.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/TDJZBPsgjqI/AAAAAAAAABw/dESqL1k88Ug/s320/presenting.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5490548773646012066" style="cursor: pointer; width: 320px; height: 240px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Next time you need to communicate something to someone, try using a picture or two.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-148947661571291099?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/148947661571291099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=148947661571291099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/148947661571291099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/148947661571291099'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/07/use-pictures-to-communicate-not-words.html' title='Use Pictures to Communicate Not Words'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Z6hiCVh2OGY/TDJO_YSqLnI/AAAAAAAAABo/SqUJGS32Q2A/s72-c/present.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-7187651967695342414</id><published>2010-05-19T20:23:00.009-05:00</published><updated>2010-05-19T21:41:10.047-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Boundary-value_analysis Testing_101'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><title type='text'>Software Testing 101: Boundary-value analysis</title><content type='html'>Welcome to Software Testing 101, a guild to assist in the testing of software.  Today's topic, &lt;a href="http://www.aptest.com/glossary.html#bvatesting"&gt;boundary-value analysis&lt;/a&gt; also known as &lt;a href="http://en.wikipedia.org/wiki/Boundary_testing"&gt;boundary testing&lt;/a&gt;.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.softwaretestinghelp.com/what-is-boundary-value-analysis-and-equivalence-partitioning/"&gt;Boundary-value analysis&lt;/a&gt; is used to test the boundary of a process.  For instance, say we have a process which can take inputs between 1 and 100.  How can we test the process with the minimal amount of test cases (in most work environments it is hard enough to get enough time to test the cases needed).&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z6hiCVh2OGY/S_ScJIA8vXI/AAAAAAAAABg/FSUtb1B6Q7M/s1600/Integer_taker.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_Z6hiCVh2OGY/S_ScJIA8vXI/AAAAAAAAABg/FSUtb1B6Q7M/s320/Integer_taker.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5473171127746215282" style="cursor: pointer; width: 320px; height: 124px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;What we want to do, to test this process, is to test the boundary or edge condition.  The boundaries of this process are 1 and 100, therefore if we test integers around 1 and 100, we would be testing the boundary.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to test any boundary, fully, you would need three test cases: &lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Out side the boundary&lt;/li&gt;&lt;li&gt;Exactly on the boundary&lt;/li&gt;&lt;li&gt;In side the boundary&lt;/li&gt;&lt;/ul&gt;In this case for the lower bound of 1, we should test 0 (one out side of the boundary), 1 (exactly on the boundary), and 2 (one in side the boundary).  Likewise for the upper bound of 100, we should test 99 (one in side the boundary), 100 (exactly on the boundary), and 101 (one out side of the boundary).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By using boundary-value analysis we are able to limit the number of test cases and fully test the boundary of a process.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-7187651967695342414?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/7187651967695342414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=7187651967695342414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7187651967695342414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7187651967695342414'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/05/software-testing-101-boundary-value.html' title='Software Testing 101: Boundary-value analysis'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Z6hiCVh2OGY/S_ScJIA8vXI/AAAAAAAAABg/FSUtb1B6Q7M/s72-c/Integer_taker.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-8330777237907686125</id><published>2010-05-11T20:00:00.004-05:00</published><updated>2010-05-11T20:20:17.072-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Upgrade'/><title type='text'>Upgrading to Ubuntu 10.04 LTS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/S-n-RAFxUKI/AAAAAAAAABQ/vOvKneqdfjI/s1600/Screenshot.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/S-n-RAFxUKI/AAAAAAAAABQ/vOvKneqdfjI/s320/Screenshot.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5470182790453612706" /&gt;&lt;/a&gt;&lt;br /&gt;Just upgraded my &lt;a href="http://www.pcmag.com/article2/0,2817,2218214,00.asp"&gt;Dell Vostro 1500&lt;/a&gt; to &lt;a href="http://www.ubuntu.com/products/whatisubuntu/1004features"&gt;Ubuntu 10.04 LTS&lt;/a&gt; on Saturday (May 8, 2010) and so far I love it!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I made the upgrade because it is a LTS (long term support) release, but the main reason was, I was having issue with my wireless connecting to &lt;a href="http://www.att.com/u-verse/"&gt;U-verse&lt;/a&gt;.  I am happy to say, the upgrade has seem to resolve my wireless connectivity issues.  I can go back to watching &lt;a href="http://en.wikipedia.org/wiki/List_of_Bleach_episodes"&gt;Bleach&lt;/a&gt; in my bedroom if my wife wants to watch something in the living room (I am on episode 263, &lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; border-collapse: collapse; line-height: 19px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "&gt;幽閉？！千本桜＆蛇尾丸&lt;span class="Apple-style-span" style="border-collapse: separate; font-family: Georgia, serif; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: 16px; "&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Other benefits of the upgrade include:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Faster boot time (it seems to be faster to me)&lt;/div&gt;&lt;div&gt;Better looking default desktop and style&lt;/div&gt;&lt;div&gt;Sound working out of the box (even Flash sound in Chrome)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Over all I am loving the upgrade.  Nice work Ubuntu team!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-8330777237907686125?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/8330777237907686125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=8330777237907686125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8330777237907686125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8330777237907686125'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/05/upgrading-to-ubuntu-1004-lts.html' title='Upgrading to Ubuntu 10.04 LTS'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Z6hiCVh2OGY/S-n-RAFxUKI/AAAAAAAAABQ/vOvKneqdfjI/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-1069924926444612518</id><published>2010-02-15T21:33:00.007-06:00</published><updated>2010-02-16T20:59:52.104-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fix'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>How I Fixed Flash's Sound In Chrome</title><content type='html'>I recently &lt;a href="http://comp-phil.blogspot.com/2010/02/upgrade-to-ubuntu-910.html"&gt;upgraded to Ubuntu 9.10&lt;/a&gt; (which is really fast, very nice looking, and all around great).  Everything worked great out of the box for the most part.  A few issues with the Wireless (it was picking an unsecured network instead of mine).  One big problem, my sound in Flash did not work, which means I could not watch Bleach on YouTube!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It took a bit, I installed many different version of flash, moved files around, but atleast it did not work.  Then I came across this &lt;a href="http://ubuntuforums.org/showthread.php?t=1306234"&gt;thread&lt;/a&gt;, entry number 7.  I brought up alsamixer (just type alsamixer in your terminal).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Arrowed over to Speaker (just use the right arrow key on your keyboard):&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z6hiCVh2OGY/S3oVIEiGySI/AAAAAAAAABA/dstTcYwe9Ic/s1600-h/SpeakerBefore.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Z6hiCVh2OGY/S3oVIEiGySI/AAAAAAAAABA/dstTcYwe9Ic/s320/SpeakerBefore.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5438682728403224866" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 247px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Do you see the MM, right above 64&lt;&gt;64 on the far right?  Well, that is what is stopping your sound.  That's right the speakers are muted!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hit m (just type the letter m on your keyboard) to unmute:&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z6hiCVh2OGY/S3oWH4yisPI/AAAAAAAAABI/Ztol0ybQdqg/s1600-h/SpeakerAfter.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Z6hiCVh2OGY/S3oWH4yisPI/AAAAAAAAABI/Ztol0ybQdqg/s320/SpeakerAfter.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5438683824762564850" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 244px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;See the OO, that means that you are no longer muted.  Hit Esc to exit and return to the terminal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did this all while running Bleach in Chrome on YouTube and what happen?!?  I heard sound; lovely sound!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All is well with my computer now (sad, but true).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-1069924926444612518?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/1069924926444612518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=1069924926444612518' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1069924926444612518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1069924926444612518'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/02/how-i-fixed-flashed-sound-in-chrome.html' title='How I Fixed Flash&apos;s Sound In Chrome'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Z6hiCVh2OGY/S3oVIEiGySI/AAAAAAAAABA/dstTcYwe9Ic/s72-c/SpeakerBefore.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-4519586741769326336</id><published>2010-02-06T13:23:00.003-06:00</published><updated>2010-02-06T13:54:24.452-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='Upgrade'/><title type='text'>Upgrade to Ubuntu 9.10</title><content type='html'>For few years now, I've been running &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; on my &lt;a href="http://www.notebookreview.com/price/product.asp?productFamilyID=1043&amp;amp;productID="&gt;Dell Vostro 1500&lt;/a&gt;.  For about a year I've been using &lt;a href="http://releases.ubuntu.com/hardy/"&gt;Ubuntu 8.04 LTS (&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;&lt;a href="http://releases.ubuntu.com/hardy/"&gt;Hardy Heron)&lt;/a&gt;.  I have never really had any issues but I would like to run a much newer version of &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;.  You see I am running Eclipse 3.2 and I would like to &lt;a href="https://help.ubuntu.com/community/EclipseIDE"&gt;run Eclipse 3.5&lt;/a&gt; so I can use newer plugins like the &lt;a href="http://orc.csres.utexas.edu/download.shtml#eclipse"&gt;Orc plugin&lt;/a&gt;.  To be able to run Eclipse 3.5, I will need to &lt;a href="http://www.ubuntu.com/getubuntu/upgrading"&gt;upgrade to Ubuntu 9.10&lt;/a&gt; (Karmic Koala).&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;Upgrading to &lt;a href="https://help.ubuntu.com/community/UpgradeNotes"&gt;Karmic Koala from Hardy Heron&lt;/a&gt;, will require an upgrade from 8.04 to 8.10, then from 8.10 to 9.04, and finally from 9.04 to 9.10.  I believe this will take about 3 1/2 hours.  I am thinking that since I am running on a Vostro 1500 on the upgrade from 8.10 to 9.04 (Intrepid Ibex to Jaunty Jackalope) I will most likely either have to enable my Wireless again through &lt;a href="https://help.ubuntu.com/community/UbuntuBackports"&gt;Backports&lt;/a&gt; or just use a cable.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;Why would my Wireless stop working?  Well you see the drivers I need to run my Wireless are not Open Source and as such I will need to use Non-Open Source; Backport; drivers to be able to use it.  If you have only used Windows or OS X this most likely sounds odd, but what it comes down to is Copy Rights.  Ubuntu does not install Backports, you have to enable them by saying that you will agree to their Copy Rights and then they will be downloaded and installed.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', 'Lucida Grande', Helvetica, Arial, Verdana, sans-serif; font-size: 14px; "&gt;I did a quick Google search to make sure that I will not have an issues with Karmic Koala on my Vostro and what I found sounds like I will not have any.  In fact it sounds like the Koala runs a lot &lt;a href="http://rootaid.com/2009/10/29/ubuntu-9-10-karmic-koala-has-arrived/"&gt;better&lt;/a&gt; than Hardy.  Even more import and the reason for the whole upgrade Eclipse 3.5 is in &lt;a href="https://help.ubuntu.com/community/SynapticHowto"&gt;Synaptic&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-4519586741769326336?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/4519586741769326336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=4519586741769326336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4519586741769326336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4519586741769326336'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/02/upgrade-to-ubuntu-910.html' title='Upgrade to Ubuntu 9.10'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-1422796021828352413</id><published>2010-01-26T21:51:00.002-06:00</published><updated>2010-01-26T21:52:49.560-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>FizzBang - C#</title><content type='html'>&lt;div&gt;// Main.cs created with MonoDevelop&lt;/div&gt;&lt;div&gt;// User: mike at 8:09 PM 1/26/2010&lt;/div&gt;&lt;div&gt;//&lt;/div&gt;&lt;div&gt;using System;&lt;/div&gt;&lt;div&gt;using System.Text;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;namespace FizzBang_css&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;class MainClass&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;public static void Main(string[] args)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;for(int i = 1; i &lt;&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;StringBuilder sb = new StringBuilder();&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if (i % 3 == 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;sb.Append("Fizz");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if (i % 5 == 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;sb.Append("Bang");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if (i % 3 != 0 &amp;amp;&amp;amp; i % 5 != 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;sb.Append(i);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;if (i % 10 == 0) {&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;     &lt;/span&gt;sb.Append("\n");&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;string s = String.Format("{0, 10}", sb.ToString());&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;Console.Write(s);&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-1422796021828352413?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/1422796021828352413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=1422796021828352413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1422796021828352413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1422796021828352413'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/01/fizzbang-c.html' title='FizzBang - C#'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-4987078132407401852</id><published>2010-01-26T20:04:00.003-06:00</published><updated>2010-01-26T21:42:57.799-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Par 3'/><title type='text'>FizzBang</title><content type='html'>If you look at any programmer's resume you are bound to find a lot of programming languages listed.  Most programmers will have something like C, C++, C#, Java, Python, Ruby, Forth, Orc, .... If you notice the last few languages are rare.  In fact most people who list them on their resume are hoping the person reading it will think, "Wow, they know Orc, I just have to hire them"!  They are also hoping that the person interviewing them will not know anything about Orc or Forth so they will not ask them about them.  Unless the &lt;a href="http://steve-yegge.blogspot.com/2007/09/ten-tips-for-slightly-less-awful-resume.html"&gt;interviewers is a passionate closet Forth user&lt;/a&gt;&lt;span class="Apple-style-span"   style="font-size:100%;color:#333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 20px;"&gt;!&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="font-size:100%;color:#333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This &lt;/span&gt;&lt;a href="http://comp-phil.blogspot.com/search/label/Par%203"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Par 3&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;, will be &lt;/span&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;FizzBang&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;.  &lt;span class="Apple-style-span" style="font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;FizzBang&lt;/a&gt; is a simple test to see that someone knows a programming language.  All one needs to do to complete &lt;span class="Apple-style-span" style="font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;FizzBang&lt;/a&gt; is:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Print the numbers 1 to 100, except for any number that is &lt;/span&gt;&lt;a href="http://mathworld.wolfram.com/Divisible.html"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;divisible&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; by 3 or 5.  &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;If a number is &lt;/span&gt;&lt;a href="http://mathworld.wolfram.com/Divisible.html"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;divisible&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; by 3, print Fizz (i.e. instead of printing 9, print Fizz).  &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;If a number is &lt;/span&gt;&lt;a href="http://mathworld.wolfram.com/Divisible.html"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;divisible&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; by 5, print Bang (i.e. instead of printing 10, print Bang).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="color: rgb(51, 51, 51); line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;If a number is &lt;/span&gt;&lt;a href="http://mathworld.wolfram.com/Divisible.html"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;divisible&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt; by both 3 and 5, print FizzBang (i.e. instead of print 15, print FizzBang).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This is the kind of program that any good programmer should be able to do for every programming language listed on their resume.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;As always, feel free to link to your own &lt;span class="Apple-style-span" style="font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="font-size: medium; "&gt;&lt;a href="http://www.codinghorror.com/blog/archives/000781.html"&gt;FizzBang&lt;/a&gt;s in the comments.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-4987078132407401852?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/4987078132407401852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=4987078132407401852' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4987078132407401852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4987078132407401852'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/01/fizzbang.html' title='FizzBang'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-944151866175151391</id><published>2010-01-26T19:42:00.006-06:00</published><updated>2010-01-26T20:03:56.431-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Par 3'/><title type='text'>Par 3</title><content type='html'>My title at work is Application Developer, but for the most part of 2.5 to 3 years the only code that I have written has been for POCs and frameworks.  Even this kind of code I do not do that much.  Why?  My job has changed, I now spend most of my time designing, modeling, architecting, gathering requirements, etc.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This change is fine by me, I love learning new things.  But, I do miss coding a bit.  I do not miss tight (or impossible) deadlines and ever changing requirements and designs that seem to go with coding.  I do miss the joy of compiling my code and seeing how many unit test cases pass.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my free time I try to code for fun and to create tools I can use.  I try to learn at least one new programming language per year.  I follow along with the books and do the examples and problems they give, but I do not get a lot of time to use what I've already learned.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To assist myself and others like me I came up with an idea.  This idea is based on &lt;a href="http://codegolf.com/"&gt;Code Golf&lt;/a&gt;, but unlike &lt;a href="http://codegolf.com/"&gt;Code Golf&lt;/a&gt; the object will not be to use the least amount of lines of code nor will it be to use the most amount of lines of code.  Simply the object of my idea; &lt;a href="http://comp-phil.blogspot.com/search/label/Par%203"&gt;Par 3&lt;/a&gt;, will be to &lt;a href="http://www.codinghorror.com/blog/archives/001236.html"&gt;keep my code saw sharp&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As always I invite overs to post links to their solutions to &lt;a href="http://comp-phil.blogspot.com/search/label/Par%203"&gt;Par 3&lt;/a&gt;s.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-944151866175151391?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/944151866175151391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=944151866175151391' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/944151866175151391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/944151866175151391'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/01/par-3.html' title='Par 3'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-2912105671442327772</id><published>2010-01-03T13:39:00.005-06:00</published><updated>2010-01-03T14:14:56.622-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='goals'/><category scheme='http://www.blogger.com/atom/ns#' term='TODO'/><category scheme='http://www.blogger.com/atom/ns#' term='2010'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>TODO for 2010</title><content type='html'>Every year people like to give themselves a to-do list (or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;TODO&lt;/span&gt; if you are a .Net Programmer).  This year for the first time ever, I am going to list my &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;TODO&lt;/span&gt; in a public blog, thus I will need to do them or expect to here about it from my readers (which may or may not really exist).  Here is my list for 2010.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Put 20% of income in 401K plan (yes, sadly that is still below the &lt;a href="http://www.money-zine.com/Financial-Planning/Retirement/401k-Contribution-and-Catch-up-Limits/"&gt;limit&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Put maximum in Roth IRA&lt;/li&gt;&lt;li&gt;Pay off the small mortgage&lt;/li&gt;&lt;li&gt;Install the programmable thermostat&lt;/li&gt;&lt;li&gt;Go on vacation to a place I've never been before&lt;/li&gt;&lt;li&gt;Read, &lt;a href="http://www.amazon.com/How-Win-Friends-Influence-People/dp/1439167346/ref=wl_it_dp_o?ie=UTF8&amp;amp;coliid=I2ZH6ZZOEQCOH7&amp;amp;colid=XAH8QB8X5EWO"&gt;How To Win Friends And Influence People&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Read, &lt;a href="http://www.amazon.com/Ten-Day-MBA-3rd-Step-Step/dp/0060799072/ref=wl_it_dp_o?ie=UTF8&amp;amp;coliid=I28CYX3B6C7Z1U&amp;amp;colid=XAH8QB8X5EWO"&gt;Ten Day MBA&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Read and work through, &lt;a href="http://www.amazon.com/Introductory-Statistics-R-Computing/dp/0387790535/ref=wl_it_dp_o?ie=UTF8&amp;amp;coliid=I2FKFBEPMV8LA&amp;amp;colid=XAH8QB8X5EWO"&gt;Introductory to Statics with R&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Read, &lt;a href="http://www.amazon.com/Making-Things-Happen-Mastering-Management/dp/0596517718/ref=wl_it_dp_o?ie=UTF8&amp;amp;coliid=I2BR37URNJ1TZN&amp;amp;colid=XAH8QB8X5EWO"&gt;Making Things Happen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Join the &lt;a href="http://www.acm.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ACM&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Do something special for my wife's 30&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;th&lt;/span&gt; Birthday, which is also her Golden Birthday&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The first two goals should not really be too hard.  Paying off the small mortgage (it is the mortgage we took out so we would not have to pay &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;PMI&lt;/span&gt;) should also be very doable.  It is almost paid off now and if we continue at the current rate of payment, it will be paid off at the end of the summer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I've had a programmable thermostat for about as long as I had my home, this year I will install it!!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The vacation is a goal I've had every year since college, which I have done every year since college.  To me nothing is more important than seeing and doing as much as I can.  As Mark Twain &lt;a href="http://www.twainquotes.com/Travel.html"&gt;said&lt;/a&gt;, "Travel is fatal to prejudice, bigotry, and narrow-mindedness."&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Every year I think of a few books I'd like to read.  I normally do not plan out on a lot of books since normally the more books I read the more books I find that I would like to read.  This year I would like to work on leadership and business skills and learn how to use &lt;a href="http://www.r-project.org/"&gt;R&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have an over-all goal of becoming a College Professor, so I'd like to work on that goal this year by joining the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ACM&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last, I'd like to do something special for my wife's Birthday.  Since her Birthday is on December 30&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;th&lt;/span&gt;, I feel that it gets over shadowed by Christmas and New Years, so this year I will work on planning something special.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That is it.  Feel free to leave comments and your own goals for 2010.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-2912105671442327772?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/2912105671442327772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=2912105671442327772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/2912105671442327772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/2912105671442327772'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2010/01/todo-for-2010.html' title='TODO for 2010'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-3559997249070401624</id><published>2009-08-15T17:30:00.004-05:00</published><updated>2009-08-15T17:46:17.467-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comments'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><category scheme='http://www.blogger.com/atom/ns#' term='TA'/><title type='text'>Trust the Code Not the Comment</title><content type='html'>One of the first things I learned while being a TA is that when code is not working do not read the comments, read the code.  Why is this?  The comments lie, more often than not when something is not working the comments will not say the same thing as the code.  Why is this?  Well the person with the issue in the code does not fully know how to get the code to work and thus will not document the non-working code correctly.  If they did know how to get the code to work right they would not need to see a TA.&lt;br /&gt;&lt;br /&gt;I find reading the code not the comments to continue to be true in the corporate world.  More often then not the comments in the code do not tell the full story of what the code does or the comments are out of date or the comments are just flat out a lie.  It is normally, best to just use the code as your guide to what the software is doing (or not doing).  This is even true in OSS Projects.  These projects are not written by software Gods and more often than not the person doing the documentation is not the same person that wrote the code. &lt;br /&gt;&lt;br /&gt;When in doubt (and even when not in doubt) have the code be your guide and pay no attention to the comments.  Now this is not to say do not write comments.  I myself write comments all the time in my code (even for software that I write for myself).  I normally trust my own comments and find them to be helpful for to speak on the reasons I write one line of code over another, but I write my comments in such away as to still let the code speak for it self.  After all if the code cannot be read, then it should be rewritten in a readable way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-3559997249070401624?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/3559997249070401624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=3559997249070401624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/3559997249070401624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/3559997249070401624'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/08/trust-code-not-comment.html' title='Trust the Code Not the Comment'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-4727287113183525197</id><published>2009-08-13T19:57:00.005-05:00</published><updated>2009-08-13T20:39:45.884-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='TA'/><title type='text'>TAs and Samples of the Class</title><content type='html'>I got through Grad school at &lt;a href="http://www.cs.niu.edu/"&gt;NIU&lt;/a&gt; by being a TA (and a GTA one semester).  One thing I quickly learned was that the students that TAs see are by far not the cream-of-the-crop.  If you think about it this would have to be true, if the student knew what they were doing they would not need to see the TA (unless they are smart and need some type of feedback about how smart they are).  Now do no miss understand me, I not saying that see a TA makes you an idiot, but people that see TAs tend to be those that are having a hard time with the class.&lt;br /&gt;&lt;br /&gt;One thing that most people that need to see TAs have in common is that they do not know how to figure out were their mistakes are.  If these people could figure out where their mistake were they would stand a good chance of being able to find some help outside of asking a TA (e.g. Google).  (This kind of thing contiues into the work place, with less apt people bugging compentent people for assistance.)&lt;br /&gt;&lt;br /&gt;Every now-and-then, it does happen that a student will come in and say I am having such-and-such problem and I am very sure that the error is here.  Most of the time these students are right, the TA can quickly assist them and explain to them what they do wrong and how to fix it.  Normally this will be the last time that the TA has this student come in for office hours.  More often than not a TA will see the same students coming in time-and-time-again saying that their program is not working and they have no clue why.  The TA will have to read through all of the source code (or run it and see what is happening) to find what "looks" wrong.  The TA will then either fix the issue for them and/or try to teach the student the solution to the problem.  I normally did the later, I'd rather teach a person to fish than fish for the person.&lt;br /&gt;&lt;br /&gt;Given that the students that see the TA are normally not the cream-of-the-crop, TAs tend to acquire the point-of-view that most of the students are idiots.  The problem with this point-of-view is that it is very selective, the sampling is not repersentive of the whole.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-4727287113183525197?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/4727287113183525197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=4727287113183525197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4727287113183525197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4727287113183525197'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/08/tas-and-samples-of-class.html' title='TAs and Samples of the Class'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-1236102822603738196</id><published>2009-07-16T19:54:00.004-05:00</published><updated>2009-07-16T20:24:12.581-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Functionality'/><category scheme='http://www.blogger.com/atom/ns#' term='IT Project Failures'/><title type='text'>4 out of 10</title><content type='html'>According to the Standish Group's just-released report, &lt;a href="http://www.standishgroup.com/newsroom/chaos_2009.php"&gt;CHAOS Summary 2009&lt;/a&gt;; 32% of IT projects are on time, on budget, with the required business functions; 44% of IT projects are either late, over budget, and/or missing required business functions; the remaining IT projects (24%) are cancelled.  This means in general a new IT has about a 4 in 10 shot of being a successful business project, which means that the odds are that it will most likely fail in some way.  In fact out of 100 IT projects about 25 of them will be cut!&lt;br /&gt;&lt;br /&gt;In fact it is even worst than it seems, these numbers are worst than last year's.  Believe it or not, these are the lowest number in the last five years!&lt;br /&gt;&lt;br /&gt;So what does this mean to you (assuming someone is reading this and that they work in IT)?  Well, it means that most of the projects that you have work on in the resent pass have failed in some way.  It also means that IT as a whole needs to improve their delivery of projects.&lt;br /&gt;&lt;br /&gt;So what can IT do?  We can try harder at understanding our business clients.  The other day I saw a &lt;a href="http://nick.typepad.com/blog/2009/06/if-you-want-to-write-useful-software-you-have-to-do-tech-support.html"&gt;blog&lt;/a&gt; that got me thinking about how if you really want to understand your business clients you will have to become one, you will have to "&lt;a href="http://en.wikipedia.org/wiki/Eating_one%27s_own_dog_food"&gt;Eat Your Own Dog Food&lt;/a&gt;".  I read some where, that Amazon developers have to sometime every couple of years shadowing their business clients.  I think this is a great idea, if you see how your business client really uses your software you will be better able to understand there needs and their pain points.&lt;br /&gt;&lt;br /&gt;Now I do not think that sitting with your business clients every couple of years will allow IT projects to become more successful, but I think it would help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-1236102822603738196?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/1236102822603738196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=1236102822603738196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1236102822603738196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/1236102822603738196'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/4-out-of-10.html' title='4 out of 10'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-2561217123664794656</id><published>2009-07-14T20:12:00.005-05:00</published><updated>2009-07-14T20:43:41.292-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Functionality'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Use Real Business Function to Measure Progress</title><content type='html'>Today during lunch I attended the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ThoughtWorks&lt;/span&gt;' &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Webinar&lt;/span&gt; "&lt;a href="http://connect.thoughtworks.com/g/?JN6KX7T0BI=clicksrc:twweb"&gt;The Agile &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;PMO&lt;/span&gt;&lt;/a&gt;".  Not being a PM or anything like that I cannot comment on the content other than to say that I learned a lot about what &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;PMOs&lt;/span&gt; do.  But, that is not the point of this post.&lt;br /&gt;&lt;br /&gt;At the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Webinar&lt;/span&gt; Ross &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Pettit&lt;/span&gt; was talking about when a PM reports status to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;PMO&lt;/span&gt; they should &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;measure&lt;/span&gt; that status in terms of Business functions.  To me this made so much since, I cannot believe I never thought of it before.  I believe on most of my projects, many aspects of the project are 90% done for more than 90% of the project (this goes double for all the projects that fail or are late).&lt;br /&gt;&lt;br /&gt;This 90% done for 90% of the time is not really &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;any one's&lt;/span&gt; fault.  You see most people in IT are optimistic (or they are very jaded and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;pessimistic&lt;/span&gt;).  This&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;/span&gt; leads people to believe that things will get done quicker than they normally do.  That is why I think it is a great idea to report things in terms of how much Business &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;functionality&lt;/span&gt; is done.  If you report the status in terms of Business &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;functionality&lt;/span&gt;, then all parties involved would be able to understand the status.  This would help in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;avoiding&lt;/span&gt; the 90% done for 90% of the time, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;because&lt;/span&gt; either the Business &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;functionality&lt;/span&gt; is available or it is not.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-2561217123664794656?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/2561217123664794656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=2561217123664794656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/2561217123664794656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/2561217123664794656'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/use-real-business-function-to-measure.html' title='Use Real Business Function to Measure Progress'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-4091495008659302643</id><published>2009-07-11T12:26:00.007-05:00</published><updated>2009-07-11T13:43:56.862-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='history'/><category scheme='http://www.blogger.com/atom/ns#' term='zero'/><title type='text'>Is 0 positive, negative, or neither?</title><content type='html'>&lt;a href="http://mathworld.wolfram.com/Zero.html"&gt;Zero&lt;/a&gt; as an idea that has a history of not being well liked (e.g. How can nothing be something?).  You see people throughout history dislike the idea of nothing.  Nothing is a scary and uncomprehensive idea for humans.&lt;br /&gt;&lt;br /&gt;Despite all this, zero is said to be neither positive nor negative, instead it is neither (none of the above).  Why is this?  You see the idea of zero is that zero is a position on the number line.  If you extended the number line out from negative infinite to positive infinite, zero would be in the exact middle.  The best way to think of &lt;a href="http://www-gap.dcs.st-and.ac.uk/%7Ehistory/HistTopics/Zero.html"&gt;zero is as a place holder&lt;/a&gt; (in fact this is believe to be how zero got it start) between positive and negative numbers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Z6hiCVh2OGY/SljY5YV9u9I/AAAAAAAAAA4/OPAU7evhgYg/s1600-h/number_line.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 46px;" src="http://1.bp.blogspot.com/_Z6hiCVh2OGY/SljY5YV9u9I/AAAAAAAAAA4/OPAU7evhgYg/s320/number_line.jpg" alt="" id="BLOGGER_PHOTO_ID_5357270237055925202" 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/6545287867125256063-4091495008659302643?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/4091495008659302643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=4091495008659302643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4091495008659302643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/4091495008659302643'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/is-0-positive-negative-or-neither.html' title='Is 0 positive, negative, or neither?'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Z6hiCVh2OGY/SljY5YV9u9I/AAAAAAAAAA4/OPAU7evhgYg/s72-c/number_line.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-7850514018077638993</id><published>2009-07-07T20:17:00.013-05:00</published><updated>2009-07-07T22:05:46.815-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='GOTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Call to Arms'/><title type='text'>GOTO Hell</title><content type='html'>It seems that people have forgotten what Dijkstra &lt;a href="http://bioinfo.uib.es/%7Ejoemiro/teach/material/escritura/gotoharmfulCol.pdf"&gt;said&lt;/a&gt; about GOTO.  You see GOTO is actually being added to languages that did not offer it before (&lt;a href="http://php.net/manual/en/control-structures.goto.php"&gt;PHP5&lt;/a&gt;).  Have we not learned that GOTO is too easy to abuse?&lt;br /&gt;&lt;br /&gt;The argument against GOTO (as given by Dijkstra) is simple, when you use GOTOs you cannot tell without a great deal of work what a program executing has done.  Example if you use the following:&lt;br /&gt;&lt;br /&gt;n = 783&lt;br /&gt;:start&lt;br /&gt;i = 2&lt;br /&gt;&lt;br /&gt;:loop&lt;br /&gt;if n%i == 0&lt;br /&gt;goto done&lt;br /&gt;end&lt;br /&gt;i = i + 2&lt;br /&gt;if i &gt; n&lt;br /&gt;n = n + 2&lt;br /&gt;goto start&lt;br /&gt;end&lt;br /&gt;goto loop&lt;br /&gt;&lt;br /&gt;:done&lt;br /&gt;print n&lt;br /&gt;n = n + 2&lt;br /&gt;if n &lt; 100000&lt;br /&gt;  goto start&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;This program would not be very hard for most people to figure out what is going on, but what if somewhere deep in the source code called start or done--or even worst loop.  What would happen if you call loop or done much latter in the code?  Are you sure you know what the values of i and n would be?  I agree GOTO does have it uses, I mean sometimes it can save you a lot of code (see the C code for &lt;a href="http://www.koders.com/c/fid5323BD5A5C27DBA053F42826EEA5EE8617B34335.aspx?s=goto#L1923"&gt;ls&lt;/a&gt;).  GOTO is at its best when it gets you out of a deep if/for/if/case/... structure, but you could always use private methods in order to get yourself out of those cases without a GOTO.  You see there is no real reason to use a GOTO and as such I believe if the greater good it is best to leave it out of languages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-7850514018077638993?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/7850514018077638993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=7850514018077638993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7850514018077638993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7850514018077638993'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/goto-hell.html' title='GOTO Hell'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-919624544893077901</id><published>2009-07-06T18:58:00.006-05:00</published><updated>2009-07-06T19:24:25.163-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PwdHash'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>The Problem with Too Many Sites and Only One Password</title><content type='html'>If you are like most people then you have one password and log-in for all of your web accounts.  This is a really big problem, since now your security on-line depends on every site you have an account on.  Now if one of those site gets hacked, bam; the thief is off to every bank website there is.  With more and more people on-line and people having accounts at more and more sites, this is becoming a real issue!&lt;br /&gt;&lt;br /&gt;One way to protect yourself is to have a system.  You could do something as simple as add a pre and postfix to your password for each site (a different one for each site).  Most people are not very likely to play around with that kind of thing on different websites so you are somewhat more protected.&lt;br /&gt;&lt;br /&gt;One way that I just saw on &lt;a href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt; today is to use &lt;a href="https://www.pwdhash.com/"&gt;Stanford PwdHash&lt;/a&gt;.  PwdHash is the program I was going to write for myself to protect my passwords but never really got around to it.  PwdHash is a JavaScript and browser extension tool which generates a hash key based on the password and domain enter into it.  For example, for the site www.example.com and the password of password (a very bad password) PwdHash will generate the value of 4QAIn8SvaW, a very good password.  In fact &lt;a href="http://www.microsoft.com/protect/yourself/password/checker.mspx"&gt;Microsoft's password checker&lt;/a&gt; gives it a strong (password gets a weak).  If you paste the password in twice on Microsoft's password checker it will become a best (add a ! to make it even better).&lt;br /&gt;&lt;br /&gt;PwdHash seems safe, since you are not storing anything on a remote machine.  I am going to try it out some more before I give it my really important accounts, but I think it will be great for social networking site (which may not have the best security).  Give it a try, it has to be better than using your dog's name and zip code for every website.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-919624544893077901?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/919624544893077901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=919624544893077901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/919624544893077901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/919624544893077901'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/problem-with-too-many-sites-and-only.html' title='The Problem with Too Many Sites and Only One Password'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-5187833957210347268</id><published>2009-07-02T16:48:00.009-05:00</published><updated>2009-07-05T14:43:43.305-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='BPMN'/><title type='text'>Focus</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Christopher_Alexander"&gt;Christopher Alexander&lt;/a&gt; noticed that in Mexico building such as &lt;a href="http://es.wikipedia.org/wiki/Casa_de_los_Azulejos"&gt;La Casa de los Azulejos in Mexico City&lt;/a&gt; attention is not paid to the laying of a single title.  In fact most of the titles are not even straight.  You see the craftsmen in Mexico pay attention to the over all picture, the relationship of one title to another.  The collection of all the titles is what people notice, not the straightness of a single tile.  The big picture is what matters, not one small detail.&lt;br /&gt;&lt;br /&gt;In software, most of the time we fall into this trap (I know I have fallen into this trap more than a few times).  We worry about the spacing in the source code, the placement of comments, the use of an &lt;a href="http://www.agilemodeling.com/artifacts/activityDiagram.htm"&gt;UML Activity diagram&lt;/a&gt; over a &lt;a href="http://www.bpmn.org/"&gt;BPMN diagram&lt;/a&gt;, etc.  Most of the time the big overall picture is not looked at.&lt;br /&gt;&lt;br /&gt;We should take a advise from the Mexican craftsman and focus on what matters.  Does this code meet the requirements of the clients?  Will this code fit into the overall enterprise?  ...&lt;br /&gt;&lt;br /&gt;-----------------------------------&lt;br /&gt;Idea based on this 37signals post:&lt;br /&gt;&lt;a href="http://www.37signals.com/svn/posts/1778-christopher-alexander-on-the-perfection-of-imperfection"&gt;http://www.37signals.com/svn/posts/1778-christopher-alexander-on-the-perfection-of-imperfection&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-5187833957210347268?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/5187833957210347268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=5187833957210347268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/5187833957210347268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/5187833957210347268'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/focus.html' title='Focus'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-6658392802341914116</id><published>2009-07-01T20:32:00.004-05:00</published><updated>2009-07-01T21:21:19.378-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AML'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Better than UML, the Next Big Thing, AML (Arbitrary Markup Language)</title><content type='html'>I got to say when I first saw Neal Ford's blog on &lt;a href="http://memeagora.blogspot.com/2009/06/aml-arbitrary-markup-language.html"&gt;AML (Arbitrary Markup Language)&lt;/a&gt; on &lt;a href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt; I knew I had to read it.  AML is about the only design layout and style I've seen in the real world.  When I see &lt;a href="http://www.uml.org/"&gt;UML&lt;/a&gt; in the real world, most of the time is it not UML which follows the &lt;a href="http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML"&gt;OMG standards&lt;/a&gt;.  Instead the UML I see in the real world are diagrams which use the UML symbols in &lt;a href="http://office.microsoft.com/en-us/visio/default.aspx"&gt;Visio&lt;/a&gt;, but I do not think the Three Amigos would call it UML.  You see most people do not really understand UML and even if they do, they do not understand UML 2.0.  Most people do not know about most of the symbols and diagrams that are part of UML 2.0.  Most of the time in the real world you will get a Use Case Diagram, Class Diagram, a Sequence Diagram, and sometimes a Activity and Deployment Diagram.  On these diagrams the symbols are close to being right, but they are not the official UML 2.0 symbols (most of the time they are the first options in for a symbol in Visio).  To confuse things even more, most of the time if you have more than one person doing designs you can tell during a review that multiple people did the over all design.&lt;br /&gt;&lt;br /&gt;Truth be told there is nothing wrong with this.  The reason that you communicate is to pass on understanding and ideas from one person to another.  So if the diagrams are not a 100% correct OMG official UML 2.0 diagrams, that is OK in my book.  If the diagram can communicate what you want to say, then it is good.&lt;br /&gt;&lt;br /&gt;What really stood out in Neal's blog on AML was when he said, " I'm a fan of AML, because it cuts down on &lt;a href="http://memeagora.blogspot.com/2008/12/irrational-artifact-attachment.html"&gt;irrational artifact attachment&lt;/a&gt;: you have nothing except the last 5 minutes invested in the diagram, making it as transient as possible".  I never really thought about it, but the amount of time I spend on a design document is inversely related to my willingness to make major changes to it or throw it away.  I find that this seems to be true with most other IT people too (I'd assume it is true for all fields).  This attachment is completely irrational, it does not really matter how much time was spent on something, if it does not meet your client's needs (be it the business, another area, customers, etc.), then it should be changed to meet those needs.&lt;br /&gt;&lt;br /&gt;That is the nice thing about AML, it is quick, direct, and to the point (said in my best Use Car Sales Man voice).  You see AML is just boxes, circulars, arrows, lines, and whatever else is need to communicate your design and ideas in as clear and concise as possible.  If you have spent any time in IT, you have by now seen a few different takes on AML and that is the whole point.  If you can understand what the other person is drawing and trying to convey then the diagram is good.&lt;br /&gt;&lt;br /&gt;Ever since cameras have been a common feature on most cell phones, I have been finding that most meetings in which a design in AML is drawn on the white board someone will take a few pictures of it and send it out in the meeting notes.  If the design is really good, someone will draw it up in Visio really quick.  To me this is the best way to design.  Remember only you can fight irrational artifact attachment.&lt;br /&gt;&lt;br /&gt;Now do not get me wrong, I am not saying that you should not think about your designs.  If anything, I think that as much time as possible should be spent on designs (they are the cheapest thing to change and fix).  What I am saying is that you should spend time figuring out what needs to take place and how to do it.  You should spend as little time as possible on the symbols and layout of the design and as much time as possible thinking about all of the different things that you have to worry about in any design.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-6658392802341914116?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/6658392802341914116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=6658392802341914116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6658392802341914116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6658392802341914116'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/07/better-than-uml-next-big-thing-aml.html' title='Better than UML, the Next Big Thing, AML (Arbitrary Markup Language)'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-6677440658180037857</id><published>2009-06-29T20:02:00.005-05:00</published><updated>2009-06-29T21:55:18.337-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='Primes'/><category scheme='http://www.blogger.com/atom/ns#' term='Proof'/><title type='text'>How Many Prime Numbers are There?</title><content type='html'>&lt;a href="http://mathworld.wolfram.com/PrimeNumber.html"&gt;Prime numbers&lt;/a&gt;, most of us have heard of them.  Primes are those special numbers which are only &lt;a href="http://mathworld.wolfram.com/Divisible.html"&gt;divisible&lt;/a&gt; by its self and 1 (i.e. 2 is only divisible by 2, 7 is only divisible by 7, 179424673 is only divisible by &lt;a href="http://www.sagenb.org/home/pub/226/"&gt;179424673&lt;/a&gt;, and so on).  It is believed that the &lt;a href="http://www.gap-system.org/%7Ehistory/HistTopics/Prime_numbers.html"&gt;Ancient Greeks were the first to study them&lt;/a&gt; and we today continue to use them for encryption and other important things to modern day life.&lt;br /&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://planetmath.org/encyclopedia/HistoryOfPrimeNumbers.html"&gt;The Egyptians maybe able to lay claim to have discover prime numbers&lt;/a&gt;, but it is with the ancient Greeks that we get a lot of what we are thought in school about primes.  &lt;a href="http://en.wikipedia.org/wiki/Pythagoras"&gt;Pythagoras&lt;/a&gt;' school study primes for their beauty and mystical and numerological properties.  &lt;a href="http://en.wikipedia.org/wiki/Euclid"&gt;Euclid&lt;/a&gt; showed in his 9 book of &lt;a href="http://en.wikipedia.org/wiki/Euclid%27s_Elements"&gt;Elements&lt;/a&gt; that there are infinitely many primes.&lt;br /&gt;&lt;br /&gt;Simple proof of the infinite number of primes:&lt;br /&gt;&lt;br /&gt;Assume there are only a finite number of primes, such that p1, p2, p3, ..., pn are all the prime numbers that exist.  Given p1 * p2 * p3 * ... * pn + 1 = P, we know that P must be larger than any of the finite number of primes, therefore P must be divisible by one of our finite number of primes.  Here lays the problem, if P is divide by any of the finite number of primes then there must be a remainder of 1 (i.e. 2 * 3 * 5 * 7 + 1 divided by either 2, 3, 5, or 7 would have to leave a remainder of 1 (go head try it on a calculator), the plus 1 is the issue).  This is a contradiction, therefore there must not be a finite number of primes and thus we have an infinite number of primes.&lt;br /&gt;&lt;br /&gt;This simple proof is &lt;a href="http://aleph0.clarku.edu/%7Edjoyce/java/elements/bookIX/propIX20.html"&gt;similar&lt;/a&gt; to what Euclid gave in his 9th book of Elements.  It is based on the fact that numbers keep on going and that giving a list of numbers we can create new numbers that are not on that list.  So the argument is that given a list of prime numbers we can find a prime number that is not on the list by simply taking the prime numbers on the list multiplying them and adding 1 to the total (note, this does not mean that the multiple of a number of different prime numbers plus 1 is prime, just that is a good way of finding another prime number).&lt;br /&gt;&lt;br /&gt;For example take 2, 3, and 5.  (2 * 3) + 1 = 7, which is prime.  (2 * 3 * 5) + 1 = 31, which is also prime.  (3 * 5) + 1 = 16, which is not prime.  (If you think that all you need is 2 and another prime, then try (2 * 7) + 1 = 15, which is not prime.)&lt;br /&gt;&lt;br /&gt;I hope I have shown you that there are an  infinite number of prime numbers.  Now go out there and find them you could &lt;a href="http://www.eff.org/awards/coop"&gt;win money&lt;/a&gt; if you find a really large one!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-6677440658180037857?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/6677440658180037857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=6677440658180037857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6677440658180037857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/6677440658180037857'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/how-many-prime-numbers-are-there.html' title='How Many Prime Numbers are There?'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-8255777796030728539</id><published>2009-06-28T13:31:00.010-05:00</published><updated>2009-07-08T20:51:22.133-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='0^0'/><category scheme='http://www.blogger.com/atom/ns#' term='Undefined'/><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='Indeterminate'/><title type='text'>0^0 = 1, 0, undefined?</title><content type='html'>We all have been told that x^0 (x to the 0th power) equals 1, but few have looked at why this is true.  What does it really mean when we say, take 5 to the 0th power?  What does 0 to a power mean--or more to the point, what does 0^0 mean?&lt;br /&gt;&lt;br /&gt;If I type x^0 in &lt;a href="http://www.wolframalpha.com/"&gt;Wolfram|Alpha&lt;/a&gt;, the simple output is 1 (there are some series and integral representations of the answer too, but I have never really cared for that kind of thing (too messy)).  But what are we really doing?  A &lt;a href="http://mathworld.wolfram.com/Power.html"&gt;power function&lt;/a&gt; is short hand for saying take this number and multiply it by itself this many times (i.e. 3^3 = 3 * 3 * 3 = 27).  So, when we say 3 to the 1st power, we are simply saying 3 in an abstract way.  If you think about multiplication as a series of steps to get to an amount, this makes sense (i.e. 3 * 4 * 5 = 12 * 5 = 60).  The easy way to think about powers is as a function.  The first input to the function is the number you want to multiply by itself and the second input is the number of times you want to multiply the number by itself: hence 2^4 could be thought of as power(2, 4) = 2 * 2 * 2 * 2 = 16.  Therefore, 3^1 is power(3, 1) = 3 not multiplied by anything else, so the value is simply the same as the first input into the function.  This is easy enough (I know this is not true for negative powers).&lt;br /&gt;&lt;br /&gt;So what does it mean to take something to the 0th power?  The simple power function given above breaks down at this point (i.e. power(3, 0) = 3 * ? or something like that).  So what does 3^0 equal?  We have been told in school that x^0 equals 1, so 3^0 = 1.  But why?   One way to think about it is that 3^3 = 3 * 3 * 3 = 27, 3^2 = 3 * 3 = 9, and 3^1 = 3.  Do you notice a pattern?  When we are moving down the power chain, we are simply taking the previous answer and dividing it by the number, hence 3^2 = (3^3)/3.  Therefore, we can say:&lt;br /&gt;&lt;br /&gt;x^b = (x^a)/x, when a = b + 1 and where x is any number (&lt;a href="http://mathworld.wolfram.com/RealNumber.html"&gt;Real&lt;/a&gt; or &lt;a href="http://mathworld.wolfram.com/ComplexNumber.html"&gt;Complex&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;This looks really complex, but it is not.  What we are saying is that x to any power is equal to the value of x to a power one above the current one divided by x (i.e. 2^4 = (2^5)/2 or 2 * 2 * 2 * 2 = (2 * 2 * 2 * 2 * 2)/2 (cross off one of the 2s on the right side and you get 2 * 2 * 2 * 2 = 2 * 2 * 2 * 2, which we know is true)).  Using this form, 3^0 = (3^1)/3, which is the same as saying 3^0 = 3/3 = 1.  Thus, we state in general that:&lt;br /&gt;&lt;br /&gt;x^0 = x/x = 1, where x is any number (&lt;a href="http://mathworld.wolfram.com/RealNumber.html"&gt;Real&lt;/a&gt; or &lt;a href="http://mathworld.wolfram.com/ComplexNumber.html"&gt;Complex&lt;/a&gt;) other than 0.&lt;br /&gt;&lt;br /&gt;Why can we not say that 0^0 = 1?  It would make our lives a lot easier.   Well, we have also been told that 0 times any number is 0.   As such, we can say 0^3 = 0 * 0 * 0 = 0, 0^2 = 0 * 0 = 0, and 0^1 = 0.   Following this pattern, we get 0^0 = 0.&lt;br /&gt;&lt;br /&gt;So does 0^0 = 0 or 1?   Well we have another problem (D'oh).  You cannot &lt;a href="http://en.wikipedia.org/wiki/Division_by_zero"&gt;divide by 0&lt;/a&gt; (I was told in my &lt;a href="http://www.math.niu.edu/courses/#400"&gt;Number Theory class (MATH 480)&lt;/a&gt; that St. Peter keeps track off the number of times you divide by 0.  If the number is too high you cannot get into heaven).  Why can you not divide by o?  We do not know what it means to take a number of things and place them in equal amount of sets that contain 0 of the thing (i.e. if Pirates are splitting up gold, and there is no gold to be split, how much gold does each Pirate get (I assume the answer is that the captain will get split in two)).  Since we cannot split a number of things into equal sets containing 0 of the things, then 0^0 = 0/0, which I guess is undefined?!?&lt;br /&gt;&lt;br /&gt;The problem is that 0^0 is an &lt;a href="http://mathworld.wolfram.com/Indeterminate.html"&gt;Indeterminate&lt;/a&gt;, which in the world of Mathematics is marked on the map with the words, "&lt;a href="http://en.wikipedia.org/wiki/Here_be_dragons"&gt;Here be dragons&lt;/a&gt;".   You can argue that 0^0 = 1, since x/x = 1.  You could also argue that 0^0 = 0, since x * 0 = 0.   Or you can play it safe and say 0^0 = undefined.   I like the third definition because I work in IT and it is safer to catch an error than to just assume an answer.   At any rate, I hope you have a better understanding on how the power function works and on what x^0 means.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-8255777796030728539?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/8255777796030728539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=8255777796030728539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8255777796030728539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/8255777796030728539'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/00-1-0-undefined.html' title='0^0 = 1, 0, undefined?'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-5050578885813149371</id><published>2009-06-27T12:42:00.012-05:00</published><updated>2010-09-09T21:56:33.620-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WWW'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='URL'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>How URLs Work</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Uniform_Resource_Locator"&gt;Uniform Resource Locators (URL)&lt;/a&gt;, you know: www.google.com, www.amazon.com, etc.  Believe it or not these strings of text hold a lot of information about the structure and design of the site you are connection to.  URL are really paths which go down the file structure (like /home/mike/&lt;br /&gt;or c:\windows\, more on this latter) to the resource (file in most cases) that you are remotely accessing. When you type www.twitter.com in your browser you are tell the site, the path of the resource you want to access.&lt;br /&gt;&lt;br /&gt;The format of URLs are a bit odd (according to Wikipedia the creator of URLs, &lt;a href="http://en.wikipedia.org/wiki/Tim_Berners-Lee"&gt;Tim Berners-Lee&lt;/a&gt;, regrets the format) .  You see, it follows a reverse order before the first /. Lets break down an URL to illustrate how an URL works.  Take this URL for an example:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://comp-phil.blogspot.com/2009/06/using-just-addition-and-negation-to.html"&gt;http://comp-phil.blogspot.com/2009/06/using-just-addition-and-negation-to.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first part http:// says which Internet protocol you are using to access the site (other popular examples are ftp:// and https://).  Every browser I have ever used assumes if you just type www.vanguard.com that want to use &lt;a href="http://en.wikipedia.org/wiki/HTTP"&gt;HTTP&lt;/a&gt; so it will prefix http:// to your URL.&lt;br /&gt;&lt;br /&gt;The next part, comp-phil.blogspot.com, is a bit odd.  You see it is backwards, the way it is parsed is from the last . (dot) to first . (dot).,  comp-phil.blogspot.com, looks like this /com/blogspot/comp-phil to the web server you are connecting to.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_Z6hiCVh2OGY/SkZjORn8sII/AAAAAAAAAAw/OiGaaEWDStY/s1600-h/Internet_Org.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5352074304076689538" src="http://2.bp.blogspot.com/_Z6hiCVh2OGY/SkZjORn8sII/AAAAAAAAAAw/OiGaaEWDStY/s320/Internet_Org.jpg" style="cursor: pointer; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 267px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The image above shows how (on a very small scale) the Internet is organized.  The com tells the &lt;a href="http://en.wikipedia.org/wiki/Domain_Name_System"&gt;DNS server&lt;/a&gt; which branch of the Internet the site is on (org, gov, net, uk, etc.).  The next part, blogspot, tells you which domain branch the site is on.  In this example the comp-phil says which sub-domain the site is on.  Last, the www says (basicly) that the sub-domain is www (World Wide Web).  So, the example can be thought of as /com/blogspot/comp-phil/www/.  There is an implied .:80 at the end of this section, so this section of the URL really looks like www.comp-phil.blogspot.com.:80, if you do not believe me try www.google.com.:80 in your browser, I'll wait.  Welcome back, the . (dot) after the com, says that it is the &lt;a href="http://en.wikipedia.org/wiki/Root_directory"&gt;root directory&lt;/a&gt; (think UNIX directory structure), the :80 at the end says that the server is listening to&lt;a href="http://www.iana.org/assignments/port-numbers"&gt; port 80&lt;/a&gt;.  Port 80 is the IANA assigned port number for the World Wide Web HTTP (web sites).&lt;br /&gt;&lt;br /&gt;The last section of the example, /2009/06/using-just-addition-and-negation-to.html, is just the directory structure from the server's sub-domain to the resource you are requesting.  If you look on the server you would see that in the /2009/06/ directory of the sub-domain a HTML file called using-just-addition-and-negation-to.html.&lt;br /&gt;&lt;br /&gt;That's it, not very comlicated at all (well the www.comp-phil.blogspot.com part is complex, but understandable).  Next time you type in &lt;a href="http://www.twitter.com/MikeMKH"&gt;www.twitter.com/MikeMKH&lt;/a&gt; in your browser you will understand what you really doing (and while you are there follow me and say hi).&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-5050578885813149371?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/5050578885813149371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=5050578885813149371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/5050578885813149371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/5050578885813149371'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/how-urls-work.html' title='How URLs Work'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SkZjORn8sII/AAAAAAAAAAw/OiGaaEWDStY/s72-c/Internet_Org.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-7611755573333446740</id><published>2009-06-24T20:07:00.007-05:00</published><updated>2009-06-25T21:04:55.590-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UDP'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><title type='text'>UDP is Important</title><content type='html'>&lt;a href="ftp://ftp.isi.edu/in-notes/rfc768.txt"&gt;UDP&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol"&gt;User Datagram Protocol&lt;/a&gt;) is a protocol which allows systems to send information.  UDP is the quick and dirty way to transfer information, it does not use hand shakes (like &lt;a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol"&gt;TCP&lt;/a&gt;), it simply fires-and-forgets.  Messages send by UDP are said to be transaction oriented, meaning that delivery and duplication protection are not guaranteed.  This means that by using UDP to send a message anywhere from 0 to infinite amount of the same message maybe received by the receiver.&lt;br /&gt;&lt;br /&gt;Often it is taught in school to think of UDP as junk mail, a junk mailer normally does not care if a piece of junk mail arrives at a home, instead the junk mailer cares about getting out a lot of mail at low costs.  I prefer to think of UDP as an elderly man that does not have a good memory, often times this man will tell stories not knowing that they he has already told this story to the listener.  The old man wants to convey some type of message (we hope), and to do this he tells a story. A young man listens to the story and normally will be polite (we hope) and allow the old man to tell the story even if he has already heard it.  The old man could be thought of as UDP and the story as the packet being delivered.  In this example the stories can be told to the young man 0 to infinite amount of times (we hope not infinite).&lt;br /&gt;&lt;br /&gt;So, what good is UDP and why is it important?  Well sometimes in order to save bandwidth and time a system will opt to use UDP over other protocols (like TCP) in order to transfer information.  This is often used in application where a lot of data is being sent but if packets are lost or duplicated it is no big deal.  Streaming media is an example of an application that would use UDP, most user are willing to accept a few blups in their &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;oi=video_result&amp;amp;ct=res&amp;amp;cd=2&amp;amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DTTisy5gmP7I&amp;amp;ei=oyxESpmhB4GCNNHl3I8I&amp;amp;usg=AFQjCNG1c48POeKIJpsZEwXatah_DlWoDA&amp;amp;sig2=vlTfr-FVVEdV5Pq46gNCbQ"&gt;Dramatic Chipmunk&lt;/a&gt; streaming video or their streaming &lt;a href="http://listen.grooveshark.com/#/song/Beat_It/1159381"&gt;"Beat It" by Michael Jackson on Grooveshark&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So why is UDP important?  Well UDP is the protocol used by &lt;a href="http://en.wikipedia.org/wiki/Domain_Name_System"&gt;DNS&lt;/a&gt; (Domain Name System).  So why is DNS important, well DNS is what allows you to use the internet.  DNS translate the URL &lt;a href="http://comp-phil.blogspot.com/"&gt;http://comp-phil.blogspot.com/&lt;/a&gt; into &lt;a href="http://comp-phil.blogspot.com/"&gt;74.125.95.191&lt;/a&gt; which is the IP address of &lt;a href="http://comp-phil.blogspot.com/"&gt;comp-phil.blogspot.com&lt;/a&gt;.  If it wasn't for DNS you would have to type in &lt;a href="http://www.amazon.com/"&gt;72.21.210.250&lt;/a&gt; every time you wanted to buy a book from &lt;a href="http://www.amazon.com/"&gt;Amazon&lt;/a&gt;.  So you can say that UDP is important because DNS is import and DNS uses UDP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-7611755573333446740?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/7611755573333446740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=7611755573333446740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7611755573333446740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/7611755573333446740'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/udp-is-important.html' title='UDP is Important'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-2896143804912490562</id><published>2009-06-23T20:40:00.003-05:00</published><updated>2009-06-23T21:06:58.093-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='separation of concerns'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Separation Of Concerns Can Have an Effect on Your Company</title><content type='html'>In software engineering &lt;a href="http://c2.com/cgi/wiki?SeparationOfConcerns"&gt;separation of concerns&lt;/a&gt; is a &lt;a href="http://scitec.uwichill.edu.bb/cmp/online/cs22l/design_-_concepts_and_principles.htm"&gt;design principle&lt;/a&gt; which breaks down the characteristic of different elements in a design in such-a-way as to hide the design decision from other elements.  Through the use of separation of concerns, a system can be broken down and layered into different spheres of concerns.  This break down allows for more maintainable, flexible and, modifiable systems.  In general it is a best practice to follow the separation of concerns design principle.&lt;br /&gt;&lt;br /&gt;The separation of concerns also has another effect, but this effect goes beyond the system.  The separation of concerns effects the way a system is built.  The way that most systems are built, teams of people are broken down along the lines of which different elements in the system they are building.  These elements are created when the separation of concerns design principle is followed and different spheres of concerns are created.&lt;br /&gt;&lt;br /&gt;Like-wise, on a larger scale, whole companies can be broken down using the separation of concerns design principle.  Think about it, most companies have different departments doing their accounting, legal issues, IT, etc.  This brake down of a company along different departments follows the separation of concerns design principle.&lt;br /&gt;&lt;br /&gt;As you can see the separation of concerns design principle effects more than just the design of a system.  Separation of concerns, can, does, and will effect the organization of your team, area, department, and even the company as a whole.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-2896143804912490562?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/2896143804912490562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=2896143804912490562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/2896143804912490562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/2896143804912490562'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/separation-of-concerns-can-have-effect.html' title='Separation Of Concerns Can Have an Effect on Your Company'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-3426048444800481074</id><published>2009-06-18T20:25:00.003-05:00</published><updated>2009-06-23T21:08:10.828-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='Encryption'/><category scheme='http://www.blogger.com/atom/ns#' term='Primes'/><title type='text'>How (Most) Computer Security Really Works</title><content type='html'>&lt;a href="http://mathworld.wolfram.com/PrimeNumber.html"&gt;Prime numbers&lt;/a&gt;, you know those number the Greeks called &lt;a href="http://www.mlahanas.de/Greeks/Primes.htm"&gt;πρώτοι αριθμοί&lt;/a&gt;.&lt;b&gt;&lt;i&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;  &lt;/span&gt;&lt;/i&gt;&lt;/b&gt;Well they are important, in fact very important to the modern world.  In fact the protection of all of the world's important data rest on their backs.&lt;br /&gt;&lt;br /&gt;First lets review what a prime number is, simply put a prime number is any number which cannot be divided by any number evenly except for its self and 1.  Stated more formally, x is prime if and only if its x/y is not&lt;a href="http://mathworld.wolfram.com/Integer.html"&gt; integer&lt;/a&gt; except for when y = 1 or y = x.  This means that 2, 3, 5, 7, 11, 13, 17, 23, ... are prime number while 4, 6, 8, 10, 12, 14, 16, ... are not (4/2 = 2, 6/2 = 3, ...).&lt;br /&gt;&lt;br /&gt;So what does this really mean.  Well there is a theory, a theory which states that any positive integer greater than 1 can be represented by the product of at least one prime number.  This means that every integer greater than 1 is made up of prime numbers.&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;2 = 2&lt;br /&gt;3 = 3&lt;br /&gt;4 = 2 * 2&lt;br /&gt;5 = 5&lt;br /&gt;6 = 2 * 3&lt;br /&gt;...&lt;br /&gt;195 = 3 * 5 * 13&lt;br /&gt;...&lt;br /&gt;8961 = 3 * 29 * 103&lt;br /&gt;...&lt;br /&gt;121980 = 2 * 2 * 5 * 7 * 11 * 787&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;This theory is called the &lt;a href="http://mathworld.wolfram.com/FundamentalTheoremofArithmetic.html"&gt;Fundamental Theorem of Arithmetic&lt;/a&gt;.  This theorem is more than just fundamental to arithmetic, this theorem is fundamental to computer security.&lt;br /&gt;&lt;br /&gt;You see computer security is based on &lt;a href="http://en.wikipedia.org/wiki/Encryption"&gt;encryption&lt;/a&gt;.  Encryption is used to transform information into an unreadable form.  Encryption is undone by decryption, which is used to transform the unreadable encrypted information back into the original form of the information.&lt;br /&gt;&lt;br /&gt;Now is when prime numbers and the fundamental theory of arithmetic come into play, you see most &lt;a href="http://www.cpaadvisor.us/sub/8_encryption.htm"&gt;encryption methods use the product of two prime numbers&lt;/a&gt;.  As the fundamental theory of arithmetic shows us, the product of two prime numbers can only be dividable by those two prime numbers and 1.  This product of two prime numbers is used in different algorithms in order to generate encrypted text.&lt;br /&gt;&lt;br /&gt;Now you know the world of computer security's deep dark secret, most of computer security is based on the fact that it is hard to do &lt;a href="http://www.mathsisfun.com/numbers/prime-factorization-tool.html"&gt;prime factorization&lt;/a&gt; on very large numbers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-3426048444800481074?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/3426048444800481074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=3426048444800481074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/3426048444800481074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/3426048444800481074'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/how-most-computer-security-really-works.html' title='How (Most) Computer Security Really Works'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6545287867125256063.post-370145482020425065</id><published>2009-06-17T20:08:00.005-05:00</published><updated>2009-06-19T18:03:08.704-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Math'/><category scheme='http://www.blogger.com/atom/ns#' term='RISC'/><title type='text'>Using Just Addition and Negation to Create All Mathematical Operations</title><content type='html'>&lt;a href="http://mathworld.wolfram.com/Addition.html"&gt;Addition&lt;/a&gt;, &lt;a href="http://mathworld.wolfram.com/Subtraction.html"&gt;Subtraction&lt;/a&gt;, &lt;a href="http://mathworld.wolfram.com/Division.html"&gt;Division&lt;/a&gt;, &lt;a href="http://mathworld.wolfram.com/Multiplication.html"&gt;Multiplication&lt;/a&gt;, and Negation (&lt;a href="http://mathworld.wolfram.com/Negative.html"&gt;Negative&lt;/a&gt; numbers); these are the basic operations we all learned in grade school.  Truth be told you do not really need them.  No, your grade school teacher did not lie to you or teach you something pointless (at least in this case).  These operations make great short hand, but are not really needed.&lt;br /&gt;&lt;br /&gt;You can create all of the operations you know from grade school to college level (including PhD level) with just simply using Addition and Negation.  Given a set of numbers (&lt;a href="http://mathworld.wolfram.com/RealNumber.html"&gt;Real&lt;/a&gt; or &lt;a href="http://mathworld.wolfram.com/ComplexNumber.html"&gt;Complex&lt;/a&gt;), you can create out of the simple operation of Addition (+) and Negation (-x, where x is a number) any other operation you can thing of.  For example, say you have set of 5 things and lose 2 of them, to find out how many of the set you still have you take 5 and Subtract 2 of them to get 3; but you could have taken 5 and Added the Negative value of 2 to them to get 3.  You can think of Subtraction as simply the Addition of a Negative amount of something.&lt;br /&gt;&lt;br /&gt;In more symbolic form:&lt;br /&gt;x - y = x + -y&lt;br /&gt;where x and y are members of a set of numbers&lt;br /&gt;&lt;br /&gt;The same is true for Multiplication.  Given 5 sets of 3 things, you have a total of 15 things (5 * 3 = 15).  You could also say that given 5 sets of 3 things, you Add 5 to 5, 3 Times giving you 15 (5 + 5 + 5 = 15).&lt;br /&gt;&lt;br /&gt;Again in more symbolic form:&lt;br /&gt;x * y = x + ... + x&lt;br /&gt;where ... represent y number of + x (I know the symbolic x + ... + x does not really look good for 0 or 1, but I do not want to introduce a function)&lt;br /&gt;&lt;br /&gt;You may be thinking what about Negative numbers in Multiplication, well Negative numbers are not really any thing special.  Say you owe 5 people 3 bucks and have no money, you have Negative 15 dollars (5 * -3 = -5 + -5 + -5 = -15).  In the symbolic above either x or y can be Negative numbers.&lt;br /&gt;&lt;br /&gt;Likewise, Division can be thought of as Multiple Subtraction, which is really just Multiple Addition of Negative numbers (as shown above).  An example maybe needed, say you have 15 of something and need to give an equal number of the thing to 3 people (think of Pirates splitting up gold).  Well, you need to give 1 of the thing to each person a number of times until you run out of them, meaning at the end you have give 5 of the thing to each of the 3 people (15 = 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 3 + 3 + 3 + 3 + 3).  In another way, you have 15 of something and Subtract 3 from the 15 until you have 0 left (15 - 3 - 3 - 3 - 3 - 3 = 0, or 3 + 3 + 3 + 3 + 3 = 15).  Or you have 15 of something and Add Negative 3 to the 15 until you have 0 left (15 + -3 + -3 + -3 + -3 + -3 = 0).  All of these ways of thinking give the same result, 5 sets of 3.  That is what Division really is, finding how many equal sets (if you are working with &lt;a href="http://mathworld.wolfram.com/WholeNumber.html"&gt;whole numbers&lt;/a&gt;) can be made out of a number.&lt;br /&gt;&lt;br /&gt;In more symbolic form:&lt;br /&gt;x / y = z + ... + z&lt;br /&gt;where z is a number from the same set as x and y and ... represent y number of + z (again I know the symbolic z + ... + z does not really look good for 0 or 1, but I am trying to not introduce any new functions)&lt;br /&gt;&lt;br /&gt;So what about &lt;a href="http://mathworld.wolfram.com/DivisionbyZero.html"&gt;Dividing by 0&lt;/a&gt;?  Well as we know Dividing by 0 is undefined and here is why.  Say you have 15 of something and need to split it equal among 0 groups what are you really doing?  You are saying that you can take 0 groups of something and Add them up to be 15 of something.  This is impossible since 0 + 0 = 0 and likewise 0 + ... + 0 = 0, where ... can be any number of + 0.  Also, we all know that x * 0 = 0, since 0 Added to 0 an x number of times would still be 0 (as shown above).&lt;br /&gt;&lt;br /&gt;What does any of this have to do with Programming?  Well there are &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CPUs&lt;/span&gt; called &lt;a href="http://en.wikipedia.org/wiki/RISC"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RISC&lt;/span&gt;&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CPUs&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;RISC&lt;/span&gt; stands for Reduced Instruction Set Computer.  The goal of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;RISC&lt;/span&gt; to have as few instruction as possible.  On the computation side I would argue that all you need is Addition and Negation.  My argument would be based on this post, as I have shown all of the mathematical operations we know can be express with just Addition and Negation operations.  Thus, for computations &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;RISC&lt;/span&gt; would only need the ability to Add and Negate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6545287867125256063-370145482020425065?l=comp-phil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://comp-phil.blogspot.com/feeds/370145482020425065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6545287867125256063&amp;postID=370145482020425065' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/370145482020425065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6545287867125256063/posts/default/370145482020425065'/><link rel='alternate' type='text/html' href='http://comp-phil.blogspot.com/2009/06/using-just-addition-and-negation-to.html' title='Using Just Addition and Negation to Create All Mathematical Operations'/><author><name>Mike</name><uri>http://www.blogger.com/profile/14085354666808996894</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='29' src='http://2.bp.blogspot.com/_Z6hiCVh2OGY/SjmlPnR8YCI/AAAAAAAAAAM/ySXlMa-eM40/s1600-R/n1360224294_1418389_8086921.jpg'/></author><thr:total>2</thr:total></entry></feed>
