<?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-8097161623390486264</id><updated>2012-01-17T20:32:30.094-06:00</updated><category term='Shorpy'/><category term='DIY'/><category term='Files'/><category term='Apple'/><category term='Development environments'/><category term='Mobile Phones'/><category term='Tonal Language'/><category term='Curmudgeon'/><category term='ASP.NET'/><category term='Code'/><category term='Good Enough Software'/><category term='Source Code Control'/><category term='Lack of Priorities'/><category term='Languages'/><category term='WTF'/><category term='Computer Revolution'/><category term='Laptop'/><category term='Keyboards'/><category term='Proprietary'/><category term='wget'/><category term='Automation'/><category term='.NET 3.5'/><category term='Larry Test'/><category term='Programming Libraries'/><category term='XSL'/><category term='CSS'/><category term='Screen Design'/><category term='Window Managers'/><category term='Online Suicide'/><category term='GetListCollection'/><category term='Child Sites'/><category term='KPI'/><category term='Lone Wolf'/><category term='F#'/><category term='Word'/><category term='APIs'/><category term='Competition'/><category term='Windows Phone 7'/><category term='Firefox'/><category term='Behavior Driven Development'/><category term='Internet Explorer'/><category term='Methodology'/><category term='Venture Capital'/><category term='Origins'/><category term='.NET'/><category term='Sorting'/><category term='Paradigms'/><category term='Microsoft'/><category term='Mocking'/><category term='Email'/><category term='Cache'/><category term='Exchange'/><category term='Error Codes'/><category term='Wallpaper'/><category term='Because We&apos;ve Always Done It That Way'/><category term='Two Mints In One'/><category term='Programming Laws'/><category term='Ribbon'/><category term='Audio'/><category term='Chrome'/><category term='Language'/><category term='Awards'/><category term='Browser Wars'/><category term='Interviews'/><category term='User Input'/><category term='Risk'/><category term='Inefficiency'/><category term='35mm Slides'/><category term='Social Networking'/><category term='HttpWebRequest'/><category term='Scalability'/><category term='Cellular'/><category term='Blogging Editors'/><category term='Markup Languages'/><category term='Cache Manifest'/><category term='SharePoint'/><category term='Jobs'/><category term='Shortcuts'/><category term='YANGNI'/><category term='Open Source'/><category term='Shipping'/><category term='Computers'/><category term='Children'/><category term='Assignment'/><category term='Click'/><category term='Linq'/><category term='Compiler Oddities'/><category term='Tools'/><category term='Getting Real'/><category term='Business Process Improvement'/><category term='Hiring'/><category term='Pragmatism'/><category term='Mergers'/><category term='Experts'/><category term='Software Engineering'/><category term='Standards'/><category term='API Design'/><category term='C'/><category term='Amazon'/><category term='Scott McCloud'/><category term='Carrier Pigeon'/><category term='HTTP'/><category term='Open'/><category term='Quality'/><category term='Touch Screens'/><category term='stdin'/><category term='LinkedIn'/><category term='Safari'/><category term='Windows 2008 R2'/><category term='Communication'/><category term='Introductions'/><category term='Ethics'/><category term='Manifest'/><category term='Negotiating'/><category term='Manual Computing'/><category term='jQuery'/><category term='CRM'/><category term='Predictive Text'/><category term='Offline HTML'/><category term='URL'/><category term='XML'/><category term='Learning Curve'/><category term='Crashes'/><category term='Kerberos'/><category term='LDAP'/><category term='Meetings'/><category term='OpenID'/><category term='Lack of Planning'/><category term='New Technology'/><category term='Learning'/><category term='Programming Languages'/><category term='COBOL'/><category term='Bugs'/><category term='User Experience'/><category term='Support Debt'/><category term='stdout'/><category term='Lost Effort'/><category term='Bad Habits'/><category term='Cookies'/><category term='Bandwidth'/><category term='ScribeFire'/><category term='Mailto URL'/><category term='LiveLink'/><category term='ping.fm'/><category term='Group Dynamics'/><category term='Standardization'/><category term='Twitter'/><category term='Backups'/><category term='Phenom II'/><category term='YAGNI'/><category term='Powershell'/><category term='Intellectual Property'/><category term='AJAX'/><category term='Swag'/><category term='Checksum'/><category term='Jungle Disk'/><category term='Progress'/><category term='Tags'/><category term='HTML 5'/><category term='Just Plain Silly'/><category term='Flexibility'/><category term='Virtual machines'/><category term='Feature Creep'/><category term='Conference'/><category term='Mac Humor'/><category term='Useless'/><category term='404'/><category term='Yahoo'/><category term='Outsourcing'/><category term='Typing'/><category term='Menu'/><category term='Normalization'/><category term='Oblique Strategies'/><category term='Internet'/><category term='Deadlines'/><category term='It Should Not Be This Hard'/><category term='Workflow'/><category term='Java'/><category term='Sequence Points'/><category term='C#'/><category term='Registration'/><category term='Browser'/><category term='Missouri'/><category term='Send and Archive'/><category term='Side Effects'/><category term='WCF'/><category term='Properties'/><category term='Google Calendar'/><category term='Multiple Monitors'/><category term='iPad'/><category term='Stupidity'/><category term='Books'/><category term='Complexity'/><category term='Slides'/><category term='Performance'/><category term='Light Box'/><category term='Outlook'/><category term='Christian Buzzword Bingo'/><category term='Math'/><category term='Change'/><category term='Windows'/><category term='Classifieds'/><category term='Opinions'/><category term='Customers'/><category term='Domain Names'/><category term='Testing'/><category term='Ridiculous Code'/><category term='De Facto Standards'/><category term='Visual Studio 2008'/><category term='xkcd'/><category term='Web Part'/><category term='UNIX File Systems'/><category term='Kits'/><category term='De Jure Standards'/><category term='Property Lists'/><category term='Humor'/><category term='Verbs'/><category term='iOS'/><category term='Documentation'/><category term='Inefficient'/><category term='Forms'/><category term='Video'/><category term='Executives'/><category term='EC2'/><category term='Resource Meter'/><category term='Systemantics'/><category term='Quiz'/><category term='IBM'/><category term='USB Key'/><category term='Generators'/><category term='Quotes'/><category term='Feature'/><category term='Organizing'/><category term='Test Driven Development'/><category term='UX'/><category term='Opera'/><category term='Phases of Life'/><category term='No Code Is Good Code'/><category term='Whitespace'/><category term='USB'/><category term='Nouns'/><category term='iPhone'/><category term='Agile'/><category term='Convenience'/><category term='Outlook 2007'/><category term='Lectionary'/><category term='Portrait'/><category term='Polishing a Turd'/><category term='Frustration'/><category term='English'/><category term='Language Design'/><category term='Alan Kay'/><category term='Consulting'/><category term='Logic'/><category term='Longevity'/><category term='Signing In'/><category term='GUI'/><category term='Configuration'/><category term='Punctuation'/><category term='What Did You Not Program Today?'/><category term='Imperative Programming'/><category term='Wikipedia'/><category term='Parable'/><category term='CocoaTouch'/><category term='Hard Drive'/><category term='Text Editors'/><category term='Links'/><category term='AMD'/><category term='Programming Design'/><category term='Tablets'/><category term='Efficiency'/><category term='JSON'/><category term='Spam'/><category term='Power Management'/><category term='Synctoy'/><category term='Facebook'/><category term='Preferences'/><category term='Entrepreneurs'/><category term='Cloud Computing'/><category term='Change for Change&apos;s Sake'/><category term='Parent Sites'/><category term='Troubleshooting'/><category term='Localization'/><category term='U-IDIOT'/><category term='S3'/><category term='Algorithms'/><category term='Google'/><category term='Sanitizing'/><category term='It Should Be This Easy'/><category term='Powershell Sucks'/><category term='Reflection'/><category term='Presence Detection'/><category term='Database'/><category term='Linux'/><category term='Spoonerism'/><category term='Authentication'/><category term='Opportunity Cost'/><category term='Overclocking'/><category term='Ubuntu'/><category term='User&apos;s Group'/><category term='Cool Gadgets'/><category term='Portability'/><category term='IIS Handler'/><category term='Offline'/><category term='Journalism'/><category term='Lazy Coders'/><category term='SQL'/><category term='Data Entry'/><category term='Feeds'/><category term='Installers'/><category term='Priorities'/><category term='Tcl'/><category term='CPU Fans'/><category term='Vulnerabilities'/><category term='Clicking'/><category term='Web'/><category term='DOM'/><category term='RSS'/><category term='Robocopy'/><category term='Organization'/><category term='Mac'/><category term='Heatsinks'/><category term='Computer History'/><category term='Blogs'/><category term='LED'/><category term='Hash Algorithms'/><category term='XSLT'/><category term='Word Clouds'/><category term='QA'/><category term='Web Services'/><category term='Gmail'/><category term='.NET Framework'/><category term='Blogger'/><category term='Refactoring'/><category term='Requirements'/><category term='Stupid HTML Tricks'/><category term='SATA'/><category term='Bill Gates'/><category term='HTML'/><category term='Delegation'/><category term='Future Creep'/><category term='Developmentor'/><category term='Object Oriented Programming'/><category term='JavaScript'/><category term='Scope Creep'/><category term='Despair'/><category term='Jungledisk'/><category term='WYSIWYG'/><category term='Formatting'/><category term='Bookmarklets'/><category term='Management'/><category term='Peers'/><category term='Security'/><category term='Remote Desktop'/><category term='3G'/><category term='Visual Studio 2010'/><category term='Programming'/><category term='ENES'/><category term='Windows 98'/><category term='SMTP'/><category term='Grand Unified Tag Theory'/><category term='Objective-C'/><category term='Jott'/><category term='AHCI'/><category term='Belt Buckles'/><category term='Web Apps'/><category term='stderr'/><category term='HTML5'/><category term='Parental Controls'/><category term='Attention'/><category term='Windows 7'/><category term='Meaning'/><category term='South Africa'/><category term='Broadband'/><category term='Wasting Time'/><category term='REST'/><category term='OScript'/><category term='Aptitude'/><category term='Taskbar'/><category term='Caching'/><category term='Purpose'/><category term='Web Hosting'/><category term='Lack of Complexity'/><category term='Data Access'/><category term='Syntax'/><category term='Myths'/><category term='Thinking Outside the Box'/><category term='Functional Programming'/><category term='Security Through Obscurity'/><category term='Operating Systems'/><category term='SSD'/><category term='IE'/><category term='Patterns'/><category term='Speed'/><category term='Mentoring'/><category term='Training'/><category term='No-Shows'/><category term='UCC'/><title type='text'>Ed Norton Engineering Society</title><subtitle type='html'>Various essays and rants on computer programming and technology in general, plus a perspective on why many technologists become Luddites as they age.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default?start-index=101&amp;max-results=100'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>234</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-3568707316026150401</id><published>2011-12-16T11:21:00.001-06:00</published><updated>2011-12-16T11:21:27.264-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Phases of Life'/><title type='text'>I'll see you tomorrow</title><content type='html'>One of the things that's really common as creative fodder is to make lists of types of people. Matt Groening used "The &lt;i&gt;x&lt;/i&gt; types of &lt;i&gt;y&lt;/i&gt;" as a staple in his &lt;i&gt;Life in Hell&lt;/i&gt; cartoons. And recently I saw a post by "The Cranky Product Manager" about &lt;a href="http://crankypm.com/2008/08/the-6-types-of-software-engineers-identification-care-and-feeding/"&gt;the six types of software engineer&lt;/a&gt;. Making such lists are fun to write and fun to read. We laugh with the recognition of truth - stereotypes exist because they &lt;i&gt;&lt;b&gt;do&lt;/b&gt;&lt;/i&gt; model &lt;i&gt;&lt;b&gt;some&lt;/b&gt;&lt;/i&gt; aspect of reality, fairly or unfairly. But these types of posts only measure one axis, and that is how a given person is &lt;i&gt;&lt;b&gt;now&lt;/b&gt;&lt;/i&gt;. They ignore the dimension of time, and the fact that most of us change over the years.&lt;br /&gt;&lt;br /&gt;I got to thinking about the phases in the life of a software engineer and came up with the following list. Yes, there are personality types in engineering, so this would have to be overlaid with something like the "six types" to come up with more of a grid...or a cube, or a hypercube, because humans can't be collapsed down to just a few measures. But this gives yet another way to understand programmers, but understanding &lt;i&gt;&lt;b&gt;when&lt;/b&gt;&lt;/i&gt; they are as well as &lt;i&gt;&lt;b&gt;who&lt;/b&gt;&lt;/i&gt; they are.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;You can do that?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The neophyte. The newbie. All shiny eyed and interested in &lt;i&gt;&lt;b&gt;everything&lt;/b&gt;&lt;/i&gt;. Each "discovery" is met with genuine excitement. Their first use of &lt;a href="http://catb.org/~esr/jargon/html/R/recursion.html"&gt;recursion&lt;/a&gt; in a real-world program is equivalent to their first love, and they must share their joyous feelings about it with &lt;i&gt;&lt;b&gt;everyone&lt;/b&gt;&lt;/i&gt; around them. Enthusiastic to the point of&amp;nbsp;obnoxiousness.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - Fun to watch...for a short period of time. Reminds us of our youth. Then reminds us our youth is gone.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - "You expect me to use him on &lt;i&gt;&lt;b&gt;my&lt;/b&gt;&lt;/i&gt; project? We have &lt;i&gt;&lt;b&gt;real&lt;/b&gt;&lt;/i&gt; work to do!"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Hey, y'all, watch this!&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Flirting with the Dark Side. If it can be done in a convoluted, cool way, that is the way to do it. Good naming, comments and documentation are for wimps - actually, they're for people who really &lt;i&gt;&lt;b&gt;understand&lt;/b&gt;&lt;/i&gt; how their code works, and this phase is dangerous since much of the time what is being invoked is still pure &lt;a href="http://catb.org/~esr/jargon/html/F/FM.html"&gt;magic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - I'll think of some...eventually.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - "You're not going to let her touch &lt;i&gt;&lt;b&gt;production&lt;/b&gt;&lt;/i&gt;, are you?"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Get 'er done&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Has internalized "Shipping is a feature." Wants to get stuff done as quickly and expediently as possible because the backlog never ends, but checking an item off the list simulates progress. A love of the "elegant" has given way to an adulterous and tawdry relationship with the expedient. Racks up technical debt like a new college grad racks up credit card bills. Doesn't care because doesn't plan on being around when that debt comes due.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - Makes management and sales happy.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - Makes management and sales happy.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;I say! You're doing it all wrong, boy!&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Thinks ten or more years of experience equals wisdom. Has seen enough mistakes (of others, not their own, since they never make any) to have strong opinions on how things "should" be done. Their first job as a tech lead, architect or similar will be a disaster. If they're smart, they'll learn from it. If not, they'll just move on to somewhere else and do it again. And again.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - Wants to take on responsibility, make decisions and create stuff.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - Will ride rough shod over anyone who doesn't agree...which will be pretty much everyone by the end of the project.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;There is no spoon&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Has comes to the realization that not only do they &lt;i&gt;&lt;b&gt;not &lt;/b&gt;&lt;/i&gt;know everything, but they never will. Also recognizes that sometimes a new system is &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; the answer - automating a bad process is still bad. If their personality is right, he is finally ready to truly lead others. Knows how to ask the tough questions that need answers before progress can be made.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - Has a firm grasp of reality.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - Isn't the one to look for in terms of exciting advances. May think the right answer is "No."&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Use the Force, Luke&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Realizes the most challenging and rewarding programming is of other people. Likes to mentor and is good at it when the appropriate disciple shows up. Can help anyone in any of the prior phases advance to the next level. Understands the systems to such a depth that she can still pull off some amazing stuff when required, out of the blue and apparently without effort. This is how the next disciple is found - when he asks, "How did you &lt;i&gt;&lt;b&gt;do&lt;/b&gt;&lt;/i&gt; that?"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - Can save the entire known universe if needed, but may use up all their life force doing so.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - Refuses to get excited about the latest directive, deadline, delay or discipline.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;You can do that?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;So disconnected from the "Gee, whiz" onward march of technology that it has all become magic again, but this time doesn't care. Showing them the latest telepathic user interface on an iRobot running iOS 14 will lead to reminiscing about once having had to make do programming with only 16 cores and 64 gigs of memory. Likely to use a computer at home strictly for online bill payments and to see pics of grandkids on Facebook. Has figured out life is not technology and vice versa. Doesn't consider themselves a "techie" any more.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pros&lt;/b&gt; - &lt;i&gt;&lt;b&gt;Somebody&lt;/b&gt;&lt;/i&gt; has to do the maintenance programming, and he will do it without complaining.&lt;br /&gt;&lt;b&gt;Cons&lt;/b&gt; - Sees every day as the same - just one day closer to retirement.&lt;br /&gt;&lt;br /&gt;So, did I miss any phases? Where are you at?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-3568707316026150401?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/3568707316026150401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=3568707316026150401&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3568707316026150401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3568707316026150401'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/12/ill-see-you-tomorrow.html' title='I&apos;ll see you tomorrow'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-7827011624548157282</id><published>2011-11-29T08:21:00.001-06:00</published><updated>2011-11-29T08:34:47.875-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hiring'/><category scheme='http://www.blogger.com/atom/ns#' term='Negotiating'/><title type='text'>Hiring is dating</title><content type='html'>&lt;span style="font-family: inherit;"&gt;I came across &lt;a href="http://www.reddit.com/r/TwoXChromosomes/comments/hvv2m/i_work_for_a_large_multinational_tech_company_i/"&gt;this post&lt;/a&gt;, which is recommended reading for anyone who wants to understand the wage gap (between the sexes).&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit;"&gt;Basically, it comes down to different approaches to negotiating during the hiring process (and whether someone negotiates at all). Now, granted, in today's economic environment your answer to a job offer may be "I'll take it!" before they've even finished speaking, but in general it's wise to think things over and &lt;/span&gt;&lt;i style="font-family: inherit;"&gt;&lt;b&gt;negotiate&lt;/b&gt;&lt;/i&gt;&lt;span style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;One thing I'll add to the mix - a former boss once told me that during negotiations for a new job you should always, &lt;i&gt;&lt;u&gt;&lt;b&gt;ALWAYS&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; ask for something different - a change in the offer. It doesn't have to be more money - it can be more time off, for example. Or an office instead of a cube. A parking space with your name on it. A tweak to your title ("'Software Architect' is too generic - how about 'Software Guru?'"). Whatever. In some sense it doesn't matter. His point was simple - hiring is as close to dating as you're going to get with the new company. If they don't treat you right when you're &lt;i style="font-weight: bold;"&gt;dating &lt;/i&gt;(negotiating), what makes you think they're going to be any better once you're &lt;i&gt;&lt;b&gt;married&lt;/b&gt;&lt;/i&gt; (hired)? By asking for a change and seeing how they handle it, it displays a lot about the internal workings and "personality" of the company.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;I would add that I think it can be more interesting to ask for something &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; directly related to money, such as more time off. For one, it shows you're not "only in it for the money." But the real point is their hiring process is probably wired for easily dealing with salary negotiations but less so for things like changes in "standard" employee benefits.&amp;nbsp;&lt;/span&gt;If they respond with a haughty "Take it or leave it" answer and you have other options,&amp;nbsp;&lt;i&gt;&lt;b&gt;run&lt;/b&gt;&lt;/i&gt;.&amp;nbsp;&lt;span style="font-family: inherit;"&gt;If it's, "I'm sorry, but vacations are part of company policy and we can't change that," that says something. It may not be something &lt;/span&gt;&lt;i style="font-family: inherit;"&gt;&lt;b&gt;bad&lt;/b&gt;&lt;/i&gt;&lt;span style="font-family: inherit;"&gt;, per se, but it does show that they're going to treat policy as sacrosanct, which implies a one-size-fits-all approach to human resources and personnel management. &lt;a href="https://www.youtube.com/watch?v=NCfVFxRsKQc"&gt;Welcome to the machine&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;That sort of response is to be expected from a large company, but if you get it from a small start-up company, well - think twice. Because that means there is a rigidity there that is going to come up again (and again). It is a good metric to see how management deals with thinking "outside the box" about events that don't fit within their pre-determined model. The good news is when you find a company that responds positively to such requests, that gives you a better reason to enthusiastically say "Yes."&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: inherit;"&gt;Oh, and get it in writing, too. :)&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/8097161623390486264-7827011624548157282?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/7827011624548157282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=7827011624548157282&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/7827011624548157282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/7827011624548157282'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/11/hiring-is-dating.html' title='Hiring is dating'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-452542606853909987</id><published>2011-11-26T12:15:00.001-06:00</published><updated>2011-11-26T12:17:31.041-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online Suicide'/><title type='text'>It must be an introvert techie thing</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I just found out, while polishing an HTML5 presentation I gave earlier this year that I am going to present to a college class this week, that the original&amp;nbsp;&lt;i&gt;&lt;a href="http://diveintohtml5.org/"&gt;Dive Into HTML5&lt;/a&gt;&lt;/i&gt;&amp;nbsp;site is gone. In addition, it turns out &lt;a href="http://en.wikipedia.org/wiki/Mark_Pilgrim_(software_developer)"&gt;Mark Pilgrim&lt;/a&gt;, who I admire for all that he has done,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff"&gt;pulled a _why&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://meyerweb.com/eric/thoughts/2011/10/04/searching-for-mark-pilgrim/"&gt;deleted all of his online presence&lt;/a&gt;&amp;nbsp;(with a 410 -&amp;nbsp;&lt;a href="http://ednortonengineeringsociety.blogspot.com/search?q=410"&gt;at least that was right&lt;/a&gt;). Like _why's work, Mark's various online sites are back up via mirrors, such as&amp;nbsp;&lt;a href="http://diveintohtml5.info/"&gt;this one for&amp;nbsp;&lt;i&gt;Dive Into HTML5&lt;/i&gt;&lt;/a&gt;, so the resources are not lost, just "curated."&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I understand the desire to just "Bah, humbug!" the Internet and pull the plug on my online presence. I struggle with the idea myself from time to time. But I am still sad to see Mark go dark. I benefited from his work, and like _why I hope that someday he will return. In the mean time, I wish them both well. Thanks for the bits!&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/8097161623390486264-452542606853909987?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/452542606853909987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=452542606853909987&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/452542606853909987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/452542606853909987'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/11/it-must-be-introvert-techie-thing.html' title='It must be an introvert techie thing'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-6497790460617593655</id><published>2011-11-21T18:37:00.001-06:00</published><updated>2011-11-21T18:42:20.685-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Better living through user stylesheets II</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 1.6em; margin-bottom: 0.75em; text-align: left;"&gt;[I posted a version of this a year ago. I've updated it for both Wiki's latest annoying campaign and to add Facebook's "stream" to the list. If you get real serious about this kind of thing, it is probably better to install some sort of ad blocker. But then you have to trust the people who make the ad blocker.]&lt;/div&gt;&lt;div style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 1.6em; margin-bottom: 0.75em; text-align: left;"&gt;Most modern browsers support user stylesheets, i.e., stylesheets that are written by the user, deployed in the browser and treated as the last part of the style "cascade." User stylesheets allow for overriding individual web sites' styles at the local level for such things as&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Accessibility" style="color: #5588aa; text-decoration: none;"&gt;accessibility&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;They also allow us to quite quickly get rid of annoying things from web sites we visit all the time, without having to install a browser extension (how do you&amp;nbsp;&lt;i&gt;&lt;b&gt;&lt;u&gt;know&lt;/u&gt;&lt;/b&gt;&lt;/i&gt;&amp;nbsp;who wrote your ad blocking extension and what they're doing with the browser access you've granted their app?) In my case, the annoying things I wanted rid of were the sad puppy-dog-eyes faces at the top of&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Main_Page" style="color: #5588aa; text-decoration: none;"&gt;Wikipedia&lt;/a&gt;&amp;nbsp;pleading for more money. That campaign's been going on forever now, it seems - even public radio and TV get the point and only shake us down twice a year for a week at a time.&amp;nbsp;And this time I also wanted to get rid of Facebook's "ticker," especially since they're going to start&amp;nbsp;&lt;a href="http://www.cnn.com/2011/11/21/tech/social-media/facebook-ads-ticker/index.html?hpt=hp_t2" style="color: #5588aa; text-decoration: none;"&gt;embedding ads in it&lt;/a&gt;.&lt;/div&gt;&lt;div style="background-color: white; color: #333333; margin-bottom: 0.75em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;With a bit of sleuthing I determined what tags were holding the problematic content and quickly came up with some CSS to hide it. Dropping that CSS into the user stylesheet in the right magic location&amp;nbsp;&lt;/span&gt;&lt;i style="line-height: 1.6em;"&gt;&lt;b&gt;immediately&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;&amp;nbsp;rid all the pages of the ad and Wiki and Facebook were back to looking like their old selves again.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;If you have even a slightly technical bent, you can benefit from this, too. The following instructions presume Chrome as the browser, but&amp;nbsp;&lt;/span&gt;&lt;a href="http://webdesign.about.com/od/userstylesheets/a/aa010906.htm" style="color: #5588aa; line-height: 1.6em; text-decoration: none;"&gt;this article&lt;/a&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;&amp;nbsp;tells you the locations and CSS files to use if you are using other browsers - the stylesheet file content should remain the same.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;For Chrome, you need to find the&amp;nbsp;&lt;/span&gt;&lt;i style="line-height: 1.6em;"&gt;Custom.css&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;&amp;nbsp;file. On Windows Vista/7/2008, it is located at the following (replace&amp;nbsp;&lt;i&gt;your-user-id&lt;/i&gt;&lt;/span&gt;&lt;i style="line-height: 1.6em;"&gt;&lt;your-userid&gt;&lt;/your-userid&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;&amp;nbsp;with, ahem, your user id):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i style="line-height: 1.6em;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;i&gt;C:\Users\your-user-id\AppData\Local\Google\Chrome\User Data\Default\User StyleSheets&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;[Presumably on Windows XP it will be under&amp;nbsp;&lt;/span&gt;&lt;i style="line-height: 1.6em;"&gt;C:\Documents and Settings\&lt;your-userid&gt;&amp;nbsp;&lt;/your-userid&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;in a similar location.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;For Mac OS X, it is at:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i style="font-family: Georgia, serif; font-size: 13px; line-height: 1.6em;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;~/Library/Application Support/Google/Chrome/Default/User StyleSheets/&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;On Ubuntu Linux it is found here:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;i style="font-family: Georgia, serif; font-size: 13px; line-height: 1.6em;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;~/.config/google-chrome/Default/User StyleSheets&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;In all three locations you should find a file called&amp;nbsp;&lt;/span&gt;&lt;i style="line-height: 1.6em;"&gt;Custom.css&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 1.6em;"&gt;. Open this file for editing (Notepad is handy on Windows, otherwise use the editor of your choice). It will probably be empty. Inside the file, place the following line (letter case is important!):&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote style="background-color: white; color: #333333; margin-bottom: 1em; margin-left: 20px; margin-right: 20px; margin-top: 1em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="margin-bottom: 1em; margin-left: 20px; margin-right: 20px; margin-top: 1em;"&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#siteNotice { display: none; }&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;blockquote style="margin-bottom: 1em; margin-left: 20px; margin-right: 20px; margin-top: 1em;"&gt;.ego_section { display: none; }&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;.ticker_stream { display: none; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;The first line is for Wiki, the second two for Facebook (yes, they really call the ticker the "ego section" - insulted yet?)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Save the file. Navigate Chrome to Wikipedia and you should no longer see the&amp;nbsp;&lt;/span&gt;&lt;strike style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;shakedown&lt;/strike&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;&amp;nbsp;pleading banner! Nor should you see the stream in Facebook. If you want to revert, simply delete both lines from the file and save the file again (don't delete the file - it probably wouldn't hurt anything, but...)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;Caveats:&lt;/b&gt;&lt;br /&gt;&lt;ol style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;&lt;li&gt;You will never see any other site announcements from Wiki, either, as long as they continue to use the&amp;nbsp;&lt;i&gt;siteNotice&lt;/i&gt;&amp;nbsp;tag id for the&lt;i&gt;div&lt;/i&gt;&amp;nbsp;they wrap site announcements in. Nor will you see anything Facebook decides to display in the "ego section."&lt;/li&gt;&lt;li&gt;If any other site you visit happens to use an&amp;nbsp;&lt;i&gt;id&lt;/i&gt;&amp;nbsp;attribute on an element and call it "siteNotice" or a class attribute and call it "ego_section," you won't see that content either.&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;I consider both of the above a small price to pay to not have to look at&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Jimmy_Wales" style="background-color: white; color: #5588aa; font-family: Georgia, serif; font-size: 13px; text-align: left; text-decoration: none;"&gt;Jimmy Wales&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;&amp;nbsp;again when all I'm interested in is the&amp;nbsp;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Tirane" style="background-color: white; color: #5588aa; font-family: Georgia, serif; font-size: 13px; text-align: left; text-decoration: none;"&gt;capital of Albania&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; text-align: left;"&gt;Enjoy!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-6497790460617593655?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/6497790460617593655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=6497790460617593655&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6497790460617593655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6497790460617593655'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/11/better-living-through-user-stylesheets.html' title='Better living through user stylesheets II'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-7203627349461887916</id><published>2011-10-28T21:46:00.000-05:00</published><updated>2011-10-28T21:55:54.447-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Text Editors'/><category scheme='http://www.blogger.com/atom/ns#' term='Markup Languages'/><category scheme='http://www.blogger.com/atom/ns#' term='WYSIWYG'/><title type='text'>Don't be such a lightweight</title><content type='html'>I like the &lt;b&gt;&lt;i&gt;concept&lt;/i&gt;&lt;/b&gt; of &lt;a href="http://en.wikipedia.org/wiki/Lightweight_markup_language"&gt;lightweight markup languages&lt;/a&gt;. All of them tend to have the same goals:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ability to edit with any text editor&lt;/li&gt;&lt;li&gt;Human-readable without a special program&lt;/li&gt;&lt;li&gt;Easily convertible to other formats (HTML, etc.)&lt;/li&gt;&lt;/ul&gt;These are theoretically laudable targets to aim for in&amp;nbsp;terms of maximum interoperability and ease of creation.&lt;br /&gt;&lt;br /&gt;But...&lt;br /&gt;&lt;br /&gt;I just can't find one I &lt;b&gt;&lt;i&gt;like&lt;/i&gt;&lt;/b&gt;. Each has something that bugs me, but in general all of them fall down in the following ways:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;No support for underlines&lt;/b&gt; - they all support &lt;i&gt;emphasis&lt;/i&gt; and &lt;b&gt;strong emphasis&lt;/b&gt; (or &lt;i&gt;italics&lt;/i&gt; and &lt;b&gt;bold&lt;/b&gt;, as most humans think of it), but few seem to support underlining. It is not like _underlining_ could not be represented in plain text.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Weak support for hyperlinks&lt;/b&gt; - or more accurately, all of them require special syntax to associate a URL with a block of text to be used as the description of the link. I could go into why I could call their bluff on this point alone, but will leave that for another post.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/Lightweight_markup_language#List_of_lightweight_markup_languages"&gt;There sure are a lot of them&lt;/a&gt;&lt;/b&gt; - and all of them have different syntax, although a few of them are a bit alike...as long as all you want is a couple of levels of headers, simple lists and no hyperlinks or anything else.&lt;/li&gt;&lt;li&gt;&lt;b&gt;"Simple" syntax only goes so far&lt;/b&gt; - even the simplest of lightweight markup languages end up having quite a bit of syntax. A &lt;a href="http://daringfireball.net/projects/markdown/syntax"&gt;lot&lt;/a&gt; of &lt;a href="http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html"&gt;syntax&lt;/a&gt;, actually, if you are a non-technical person.&lt;/li&gt;&lt;/ul&gt;But that last point's a red herring because let's face it - a non-technical person is going to use Microsoft Word and be done with it. Arguments about "open source," "text editors," "maximum interoperability" and the like are not going to make any sense to them. If they want something to be bold they simply hit &lt;i&gt;Ctrl-B&lt;/i&gt; and it's &lt;b&gt;bold&lt;/b&gt;. How simple is that?&lt;br /&gt;&lt;br /&gt;In the end while I like the &lt;b&gt;&lt;i&gt;idea&lt;/i&gt;&lt;/b&gt; of lightweight markup languages, if I am going to have to learn yet another markup language then I am at least going to learn one that is directly usable by most WYSIWYG editors. And if I am in a WYSIWYG editor, since I am not so much a purist about open source as much as I am something like widespread interoperability I am probably not even going to expend that much effort. Instead, I will choose something like RTF, which has plenty of open source implementations even if the &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DD422B8D-FF06-4207-B476-6B5396A18A2B&amp;amp;displaylang=en"&gt;spec itself is proprietary&lt;/a&gt;, and be done with it.&lt;br /&gt;&lt;br /&gt;In fact, the more I think about it, the more I think most lightweight markup languages are simply an affectation by coders who live all day in emacs or vi and seem to think that since they program in that environment they should do all writing there, too.&amp;nbsp;Because they're too proud to&amp;nbsp;&lt;i&gt;Alt-Tab&lt;/i&gt;&amp;nbsp;or&amp;nbsp;&lt;i&gt;⌘-Tab&amp;nbsp;&lt;/i&gt;into a real word processor, I guess.&amp;nbsp;If this were still the era of punched cards they'd be arguing we should be writing our letters to Grandma with &lt;a href="http://en.wikipedia.org/wiki/Hollerith_code"&gt;Hollerith codes&lt;/a&gt; as well.&lt;br /&gt;&lt;br /&gt;Me? I think I'll stick with &lt;i&gt;Ctrl-B&lt;/i&gt;, &lt;i&gt;Ctrl-I&lt;/i&gt;, &lt;i&gt;Ctrl-U&lt;/i&gt; and the likes and be a mere mortal because I like to see the text formatted the way I want it to look &lt;i&gt;&lt;b&gt;now&lt;/b&gt;&lt;/i&gt;, and not in some intermediary form that then has to be run through yet another program to be made presentable. That smacks of &lt;a href="http://en.wikipedia.org/wiki/SCRIPT/VS"&gt;SCRIPT/VS&lt;/a&gt;, the first markup language I learned in 1983 or so. But I'm lazy, I know. If you're happy creating tables using | and + and - in vi, go for it. The world has room for both of us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-7203627349461887916?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/7203627349461887916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=7203627349461887916&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/7203627349461887916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/7203627349461887916'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/dont-be-such-lightweight.html' title='Don&apos;t be such a lightweight'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-1899463249989903026</id><published>2011-10-23T12:24:00.001-05:00</published><updated>2011-10-23T12:25:14.954-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Origins'/><category scheme='http://www.blogger.com/atom/ns#' term='Word'/><title type='text'>Some things never change</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Eleven years ago, in a flash of inspiration and disgust, I hammered out a series of essays that ended up becoming the Ed Norton Engineering Society (ENES), a mailing list among friends at first (still going strong), and then four years ago morphing into this blog. The&amp;nbsp;&lt;a href="http://ednortonengineeringsociety.blogspot.com/2007/11/origins.html"&gt;very first "essay" was actually an email rant&lt;/a&gt;, written in a rage over losing an hour's worth of work in Word (probably Word 2000 - there have been&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Microsoft_Word#Versions"&gt;four versions since then&lt;/a&gt;, I am currently using Word 2010). Here is the opening paragraph of that diatribe:&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote class="webkit-indent-blockquote" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; margin-bottom: 0px; margin-left: 40px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;After just spending an hour typing up a work document and then losing it because Word went into a loop and never came back and I ended up having to kill it, I figured out how computers increase productivity. If I had been allowed to finish the document (and in fact, the ironic thing was I really was almost finished with the SOB), what would have happened? I would have emailed it to my team, they (at least some of them) would have been motivated to read it and respond, I would have had to read their responses and reply, all of which would have resulted in the adoption of my proposal in the end, anyway, since no one else knows about private enterprise numbers, OIDs, and their organization within directories, and no one else will probably ever look at my code. Through the wisdom of Microsoft's patented Unnecessary Industriousness Detection and Instant Obliteration Technology (U-IDIOT(tm)), my co-workers and I were spared that extra work. I can now see how computers do, indeed, increase productivity.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;This morning, while working on a paper &lt;a href="http://missourischoolofreligion.org/"&gt;for school&lt;/a&gt;, about an hour in I couldn't save it any more. Any attempt at saving would bring up the &lt;i&gt;Save As&lt;/i&gt; dialog, but no matter what I named the document, no matter where I tried to save it, it wouldn't save. So I opened a new doc in Word, copied and pasted my work over and...it wouldn't save there, either! I ended up having to save it in Wordpad as an RTF file (so I wouldn't lose &lt;i&gt;&lt;b&gt;all&lt;/b&gt;&lt;/i&gt; my formatting) and then kill Word (which still wouldn't save either document) and then re-open the Word document, which was missing about 20 minutes of work, and copy and paste back from the Wordpad and then clean things up. And now it saves just fine again. &lt;i&gt;&lt;b&gt;WTF?&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Doing some research I hit a post on the Microsoft site pointing to a KnowledgeBase article telling me to delete a key in the registry. Are you freaking kidding me? This is your answer? This is the answer you'd give my mother?&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;One of the premises of ENES is that all software is crap, &lt;a href="http://en.wikipedia.org/wiki/Turtles_all_the_way_down"&gt;all the way down&lt;/a&gt;, that it can never become not crap, and that we shouldn't expect it to. And &lt;i&gt;&lt;b&gt;eleven years and four versions of Word later&lt;/b&gt;&lt;/i&gt;, I see that indeed, Word continues to be crappy, in the same "Here, let me eat all that work and lose it for you" way. Unbelievable. And shame on me for continuing to use it. But then, any alternative wouldn't be any better ("Better the devil you know," etc.)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Grrr...&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/8097161623390486264-1899463249989903026?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/1899463249989903026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=1899463249989903026&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1899463249989903026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1899463249989903026'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/some-things-never-change.html' title='Some things never change'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-1852376732683338750</id><published>2011-10-21T18:52:00.005-05:00</published><updated>2011-10-21T18:56:26.813-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Organization'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Code Control'/><category scheme='http://www.blogger.com/atom/ns#' term='Documentation'/><title type='text'>Prepping the place for a new roomie</title><content type='html'>Another programmer will be starting where I work, which will double the dev staff. In preparation I decided it was time to go through a few things and get them a bit cleaned up. Source code control. The dev area on the intranet. I've tried to be professional even while working by myself for almost seven years, yet there are still times where things get a little lax, a victim of "I'll come back and clean that up later."&lt;br /&gt;&lt;blockquote&gt;"Oh, man - why do I still have &lt;i&gt;&lt;b&gt;that&lt;/b&gt;&lt;/i&gt; repository in the main production tree? We haven't used that code since 2006!"&lt;/blockquote&gt;I'm trying to get all the code organized and documented (with at least a "read me" in every project saying what it is - even a sentence is better than nothing, right?), weeding out obsolete docs and updating others. It's all actually not in that bad of shape - I do these things every few years even if just for myself (the last time was when I transferred all my code to Mercurial from Subversion). Often it's a good exercise during the year-end holidays, since that tends to be a down time in many places anyway. But it was still time to do it again, and this is good motivation.&lt;br /&gt;&lt;br /&gt;But the thing that got me thinking was in the past I've often done this during my final two weeks at a job. I am actually rather proud of always making sure things were left clean, organized and documented, even if the former employer then just let it decay...I've gotten emails and calls &lt;i&gt;&lt;b&gt;years&lt;/b&gt;&lt;/i&gt; later - "Um, I know you don't owe us anything, but could you tell me where the &lt;i&gt;xyz&lt;/i&gt; source code was when you left? We seem to have lost it." And I've always been helpful when that has happened. You can turn over everything except a deep-seated understanding of why it matters. That just has to be learned by hard experience, and I try to be nice when someone is going through that.&lt;br /&gt;&lt;br /&gt;The exercise is somewhat like painting and deep cleaning a house right before you sell it, which I've done twice now. When you're finished, you look around and wonder, "Why the hell didn't I do this earlier? Woulda made living here more pleasant!" You're proud of the effort and the results, and it does help sell the place - but it still would have been better to do it for yourself, really.&lt;br /&gt;&lt;br /&gt;Instead of moving (on), though, this time it's in prep for a teammate. One of the ways I can put my best foot forward, as well as &lt;i&gt;&lt;b&gt;set some expectations&lt;/b&gt;&lt;/i&gt; up front, is by having everything tidy when he arrives. It won't be perfect. There's lots of things that are going to take explaining. "Well, you see...it seemed like a good idea at the time because..." However, it's still a good exercise, and I am glad I am doing it.&lt;br /&gt;&lt;br /&gt;Perhaps you should take some time soon and "get the house ready for sale" in terms of your source code, docs and environment. When was the last time you did that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-1852376732683338750?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/1852376732683338750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=1852376732683338750&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1852376732683338750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1852376732683338750'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/prepping-place-for-new-roomie.html' title='Prepping the place for a new roomie'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-6715862916191156899</id><published>2011-10-12T16:05:00.000-05:00</published><updated>2011-10-12T16:05:41.866-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Window Managers'/><category scheme='http://www.blogger.com/atom/ns#' term='Multiple Monitors'/><category scheme='http://www.blogger.com/atom/ns#' term='Portrait'/><title type='text'>Do you see what I see?</title><content type='html'>I've &lt;a href="http://ednortonengineeringsociety.blogspot.com/2008/07/multifaceted.html"&gt;written before about multiple-monitor setups&lt;/a&gt;. They're nothing new for programmers now days. However, I finally have a setup where having two monitors in &lt;i&gt;&lt;b&gt;portrait mode&lt;/b&gt;&lt;/i&gt; seems handier than the usual landscape mode. Before going into why, first, some specs:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Old setup mentioned in prior post&lt;/b&gt; - three monitors @ 1280x1024 = 3,932,160 pixels.&lt;/li&gt;&lt;li&gt;&lt;b&gt;New setup&lt;/b&gt; - two monitors @ 1920x1080 (actually 1080x1920, to be pedantic) = 4,915,200 pixels.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So, the first gain is 125% more pixels while taking up less physical desk space thanks to the monitor stand. Here is a pic:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-XFt9flxzyQg/TpX7hEz5vqI/AAAAAAAAQUE/5hN382848WE/s1600/IMAG0003.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-XFt9flxzyQg/TpX7hEz5vqI/AAAAAAAAQUE/5hN382848WE/s640/IMAG0003.jpg" width="382" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In clockwise order we see the two monitors displaying Windows Explorer, Outlook (the archive folder - I'm an Inbox Zero guy! :), Chrome, and Microsoft CRM. As you can see, all four windows are quite usable in size and the amount of content displayed (especially since I love small font sizes). As a test, I opened Notepad++ full screen in one monitor and using Consolas 8pt font was able to see &lt;i&gt;&lt;b&gt;138 lines&lt;/b&gt;&lt;/i&gt; in the edit window, plus the menu, title and status bars. I think if I can't keep most of my methods to "&lt;a href="http://docs.python.org/faq/design.html"&gt;one screen in length&lt;/a&gt;" now, I'm in the wrong business.&lt;br /&gt;&lt;br /&gt;But the other reason I really like this setup is with the resolution I have now and the monitors in portrait orientation, setting up multiple remote desktop sessions such that they can all be seen at once at a usable resolution (say, 1024x768 each) is completely a possibility. As proof, here are four sessions into four different servers:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-lz7hf0S9sqo/TpX9RSXdbhI/AAAAAAAAQUM/YAiZ8IMHT8M/s1600/IMAG0006.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-lz7hf0S9sqo/TpX9RSXdbhI/AAAAAAAAQUM/YAiZ8IMHT8M/s640/IMAG0006.jpg" width="382" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;[Yes, I color-code my desktops to more easily tell the difference between production and our various labs, which are all VM&amp;nbsp;&lt;i&gt;&lt;b&gt;clones&lt;/b&gt;&lt;/i&gt;&amp;nbsp;of production - trust me, there is some painful history behind that statement.]&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Now I can have four usable landscape windows open into servers and see them all at once. So I can easily compare between production and the labs. Or have all the related servers for a given app open at once during maintenance. Very, very cool.&lt;br /&gt;&lt;br /&gt;But none of this would be as usable if I didn't also have some good window management software, especially since Windows, like most OSes, is prejudiced toward landscape orientation. For example, the Windows key plus the left and right arrow keys auto-size an app to the left or right half of the screen, but the Windows key plus the up and down arrows maximizes and minimizes the app instead of sending it to the top or bottom halves of the screen.&lt;br /&gt;&lt;br /&gt;After trying &lt;a href="https://developer.berlios.de/projects/bugn/"&gt;bug.n&lt;/a&gt; and &lt;a href="http://windawesome.codeplex.com/"&gt;Windawesome&lt;/a&gt;, I landed on &lt;a href="http://www.winsplit-revolution.com/"&gt;WinSplit Revolution&lt;/a&gt;. I like it because &lt;a href="http://www.winsplit-revolution.com/help"&gt;the keystrokes for sizing apps&lt;/a&gt; is very intuitive (to me), you can have apps memorize their position and size for when they are started again, and you can customize it but the defaults seem sane, so it is usable out of the box with no configuration. All good.&lt;br /&gt;&lt;br /&gt;I have periodically tried out portrait mode on monitors, but the combination of lower resolutions and lack of good software support has kept me from adopting it. But now I think the time is right. If you have the capability, I'd say give it a try. Even if you tried it in the past, try it again now. You may be pleasantly surprised.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-6715862916191156899?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/6715862916191156899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=6715862916191156899&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6715862916191156899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6715862916191156899'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/do-you-see-what-i-see.html' title='Do you see what I see?'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-XFt9flxzyQg/TpX7hEz5vqI/AAAAAAAAQUE/5hN382848WE/s72-c/IMAG0003.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-3303602522240019987</id><published>2011-10-11T09:00:00.002-05:00</published><updated>2011-10-11T09:00:49.953-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Error Codes'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Lazy Coders'/><title type='text'>Gone, Daddy, gone</title><content type='html'>While perusing the &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"&gt;section of the HTTP 1.1 RFC dealing with status code definitions&lt;/a&gt;, I was struck by the following:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;&lt;a href="http://draft.blogger.com/blogger.g?blogID=8097161623390486264" id="sec10.4.11"&gt;10.4.11&lt;/a&gt;&amp;nbsp;410 Gone&lt;/b&gt;&lt;i&gt;The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise.&amp;nbsp;&lt;/i&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;i&gt;The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;I've read it before, of course, but for some reason today it leaped out at me, because I don't think I've ever seen a 410. And I should have. We all should have. Because there are lots and lots of "404s" being served where the site &lt;i&gt;&lt;b&gt;knows&lt;/b&gt;&lt;/i&gt;, or should know, that the requested resource used to be there and was deleted. Instead of &lt;a href="http://www.philokalia.org/"&gt;cute little 404 pages&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;†&lt;/span&gt;, there should be some "&lt;a href="http://www.aoltv.com/2008/04/15/star-trek-a-compilation-of-hes-dead-jim-s-video/"&gt;He's dead, Jim&lt;/a&gt;" 410 pages, too.&lt;br /&gt;&lt;br /&gt;But note the wishy-washy language in both paragraphs. Basically, they're giving all HTTP implementations an "out" to just use 404s if it is "too hard" to figure out whether something used to be there and isn't now, or is only &lt;a href="http://www.youtube.com/watch?v=xbE8E1ez97M"&gt;mostly dead instead of all dead&lt;/a&gt;. Which is BS, in my opinion (BSIMO). I am not a big fan of protocols that allow "Use this. Or that instead. Whatever." in terms of requests or responses. If 410s are "the right answer" for something that is permanently gone, then make it &lt;a href="http://www.ietf.org/rfc/rfc2119.txt"&gt;MUST&lt;/a&gt;. If that is too hard to implement and everyone's going to use 404s instead anyway, then delete the damned thing from the spec, because then semantically there probably isn't any real difference between a 404 and a 410, anyway. Unused components of a spec are noise, which is anathema, since specifications are meant to clarify and limit noise, by definition.&lt;br /&gt;&lt;br /&gt;&amp;lt;/screed&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;† W&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;hich, in this example, while being a cute 404 page, is actually returned in response to a "403 Forbidden" status - interesting. And wrong.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-3303602522240019987?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/3303602522240019987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=3303602522240019987&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3303602522240019987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3303602522240019987'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/gone-daddy-gone.html' title='Gone, Daddy, gone'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-715574646687904395</id><published>2011-10-09T18:24:00.000-05:00</published><updated>2011-10-09T18:24:05.079-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Awards'/><category scheme='http://www.blogger.com/atom/ns#' term='Systemantics'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><title type='text'>It's a major award! part 2</title><content type='html'>Recently I've been&amp;nbsp;&lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/10/your-daily-dose-of-systemantics.html"&gt;writing&lt;/a&gt; about &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Systemantics"&gt;Systemantics&lt;/a&gt; &lt;/i&gt;and what an impact it's had on my thinking and my career. I just received the 3rd edition, now called &lt;i&gt;&lt;a href="http://www.amazon.com/Systems-Bible-Beginners-Guide-Large/dp/0961825170/ref=sr_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1318201882&amp;amp;sr=1-1"&gt;The Systems Bible&lt;/a&gt;&lt;/i&gt;. Since I am slowly working toward cleaning out my bookshelves as part of &lt;i&gt;&lt;a href="http://www.amazon.com/Throw-Out-Fifty-Things-Clutter/dp/B004Y6MV76/ref=sr_1_1?ie=UTF8&amp;amp;qid=1318201849&amp;amp;sr=8-1"&gt;Throw Out Fifty Things&lt;/a&gt;&lt;/i&gt;, I've decided I don't need two copies.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, as an experiment in social networking, I am giving away my older copy of &lt;i&gt;Systemantics&lt;/i&gt;. Don't worry, it is still full of "chewy goodness," even if there is now a third edition.&amp;nbsp;The book is in good shape, other than having my last name on the cover and sides (a practice I used to commonly perform in order to "amputate a book's legs" and keep them from walking away from my desk at work). To be eligible, you must:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Read my blog in order to have seen this post (intuitively self-obvious).&lt;/li&gt;&lt;li&gt;Be a book &lt;i&gt;&lt;b&gt;reader&lt;/b&gt;&lt;/i&gt; and not just a hoarder.&lt;/li&gt;&lt;li&gt;Have not already read it (honor system here).&lt;/li&gt;&lt;li&gt;Commit to reading it (again, honor system).&lt;/li&gt;&lt;li&gt;Be a resident of the United States (because I'm cheap and won't pay for shipping anywhere else).&lt;/li&gt;&lt;li&gt;Tell me why you want it via a comment here, email, or direct message on &lt;a href="http://www.linkedin.com/in/dullroar"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://twitter.com/#!/dullroar"&gt;Twitter&lt;/a&gt; or &lt;a href="https://www.facebook.com/dullroar"&gt;Facebook&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;A bonus will be if you follow up with a blog post or email and let me know what you thought.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will pick a winner based totally on how much you convince me you want to read it and give it a good home.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;No guarantees of objectivity or randomness express or implied. Void where prohibited. Three strikes and you're out. Don't bet on a dead horse.&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/8097161623390486264-715574646687904395?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/715574646687904395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=715574646687904395&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/715574646687904395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/715574646687904395'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/its-major-award-part-2.html' title='It&apos;s a major award! part 2'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-3056937302334939459</id><published>2011-10-05T09:53:00.000-05:00</published><updated>2011-10-05T09:53:20.259-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENES'/><category scheme='http://www.blogger.com/atom/ns#' term='Lone Wolf'/><category scheme='http://www.blogger.com/atom/ns#' term='What Did You Not Program Today?'/><title type='text'>My time is your time</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: white; color: #333333; line-height: 1.6em; margin-bottom: 0.75em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;[Another post&amp;nbsp;&lt;a href="http://ednortonengineeringsociety.blogspot.com/search/label/Lone%20Wolf" style="background-color: white; color: #5588aa; text-decoration: none;"&gt;in the ongoing series&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&amp;nbsp;on being the sole developer in a "normal" (that is, non-software) business.]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;Perhaps one of the most unexpected aspects of going to work as a lone programmer somewhere, the thing I didn't see coming and should have, is how you become&amp;nbsp;&lt;i&gt;&lt;b&gt;the&lt;/b&gt;&lt;/i&gt;&amp;nbsp;tech resource for everything and everyone:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="background-color: white; color: #333333; text-align: left;"&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Helping the IT staff troubleshoot issues.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Helping the help desk troubleshoot users (because it's too much trouble to shoot users).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 20px;"&gt;Giving answers on the feasibility on every possible project (there is at least one VP who starts&amp;nbsp;&lt;/span&gt;&lt;i style="background-color: white; line-height: 20px;"&gt;&lt;b&gt;every single conversation&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 20px;"&gt;&amp;nbsp;with me with, "Would it be possible..." - I've started smiling and saying "No" before he even opens his mouth).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Listening to pitches from vendors who have corralled your boss's ear.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="background-color: white; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Writing requirements for statements of work so you have a chance to farm out some of the work load to those vendors.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;Reviewing the resulting statements of work so you can complain about how much consultants charge now days, and how much time they expect to take on a project you&amp;nbsp;&lt;/span&gt;&lt;i style="line-height: 20px;"&gt;&lt;b&gt;know&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&amp;nbsp;is only a two or three day effort.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Coordinating, training, monitoring, hand-holding, testing and correcting those consultants.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;Being invited to&amp;nbsp;&lt;/span&gt;&lt;i style="line-height: 20px;"&gt;&lt;b&gt;every meeting&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&amp;nbsp;that touches technology in any tangential way.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;All of that is in addition to "your real job." Can you say "rampant context switching?"&lt;/span&gt;&lt;/span&gt;&lt;blockquote style="background-color: white; color: #333333; margin-bottom: 1em; margin-left: 20px; margin-right: 20px; margin-top: 1em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;"&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Hyperfocus" style="color: #5588aa; line-height: 20px; text-decoration: none;"&gt;Flow mode&lt;/a&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;? What's that?"&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;In some sense I imagine it is similar to being general counsel at a company large enough to afford one, but only large enough to afford&amp;nbsp;&lt;/span&gt;&lt;i style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&lt;b&gt;one&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;. Since everything has a legal aspect to it, they are probably dragged into&lt;/span&gt;&lt;span style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;everything&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;. And since&amp;nbsp;&lt;i&gt;&lt;b&gt;everything&lt;/b&gt;&lt;/i&gt;&amp;nbsp;seems to have a technical aspect to it, I am dragged into&amp;nbsp;&lt;/span&gt;&lt;i style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&lt;b&gt;everything&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;. There is seemingly no limit to the number of people who can request, demand or interrupt my time. Or actually, there&amp;nbsp;&lt;/span&gt;&lt;i style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&lt;b&gt;is&lt;/b&gt;&lt;/i&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&amp;nbsp;a limit:&lt;/span&gt;&lt;/span&gt;&lt;blockquote style="background-color: white; color: #333333; margin-bottom: 1em; margin-left: 20px; margin-right: 20px; margin-top: 1em; text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;i = e + v - 1&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;...where&amp;nbsp;&lt;i&gt;i&lt;/i&gt;&amp;nbsp;is the total number of potential&amp;nbsp;interrupters,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;e&lt;/i&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&amp;nbsp;is the total full-time employee count,&amp;nbsp;&lt;i&gt;v&lt;/i&gt;&amp;nbsp;is the number of vendors being used or considered for use by the company within the next five years, and the "1" is me.&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; text-align: left;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;There&amp;nbsp;&lt;i&gt;&lt;b&gt;are&lt;/b&gt;&lt;/i&gt;&amp;nbsp;a few self-defense mechanisms I've picked up:&lt;/span&gt;&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;/span&gt;&lt;ul style="background-color: white; color: #333333; text-align: left;"&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;Sometimes, you just have to be a jerk&lt;/b&gt;&amp;nbsp;- Since non-dev companies don't understand the impact of interruptions on productivity nor what a closed door means, sometimes the only recourse is to be a dick. See my automatic "No" response, above (you thought I was joking). Past coworkers will remember the hard time I would give tech support staff if I didn't feel they had done enough research first ("You didn't do the dance.") It doesn't help, it doesn't stop the interruptions, but it does take out some of my aggression. Man, do I feel dirty.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;JIT knowledge and action&lt;/b&gt;&amp;nbsp;- Given the fact I have no control over my day, priorities, interruptions and escalations, often even when I&amp;nbsp;&lt;i&gt;&lt;b&gt;am&lt;/b&gt;&lt;/i&gt;&amp;nbsp;given advanced notice or information, I simply file it away or ask for it again when it applies. It's not that I'm forgetful, it's more to keep any semblance of forward motion (and&amp;nbsp;&lt;a href="http://www.43folders.com/izero" style="color: #5588aa; text-decoration: none;"&gt;inbox zero&lt;/a&gt;) on my current work it is easier to request information again when it becomes required, rather than trying to remember it over the days, weeks and months between when it is given and when it is actually useful.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;Make 'em ask for it twice&lt;/b&gt;&amp;nbsp;- I've used this as a "manage your manager" technique for years, because most CTOs and CIOs are excellent idea generators, and don't know when to stop. They spew possible projects out at a rate that would keep a large offshore development staff happy for a decade. And 90+% of them will never see the light of day,&amp;nbsp;&lt;i style="font-weight: bold;"&gt;nor do they expect them to&lt;/i&gt;&amp;nbsp;(that realization actually came as a shock when I first figured it out).&amp;nbsp;I used to jump at every random suggestion, question and research idea that came from my bosses. Now, especially if I can tell it's a "blue sky" type of suggestion, I just sit on it. If they come back months later (it's always months later) and ask, "Where are you at on that Flux Capacitor Inventory Module?," I then say, "I should have that done by next week." Which satisfies them and I then know it's a real project and pound it out.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;I'm not proud of any of the above. I don't think they're the "right" way to be doing things. But they do help me keep my sanity. Because otherwise I would literally work myself to death trying to keep up with everything.&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;Now, some may think all of this is a complaint. It's not, really. There are many parts of my job I like. I am lucky to have it. However, it&amp;nbsp;&lt;i&gt;&lt;b&gt;is&lt;/b&gt;&lt;/i&gt;&amp;nbsp;a reality check, both for me and for others. For me, it is a reminder that the good parts of being a "lone wolf" programmer come with a cost. For others, it is simply notice that if you are thinking of hiring on to be the only developer somewhere, you should know, up front, that the&amp;nbsp;&lt;i&gt;&lt;b&gt;vast majority&lt;/b&gt;&lt;/i&gt;&amp;nbsp;of your time will not be spent in active development, especially after you've been there a year or longer.&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;Actually, this should be no surprise to anyone who has been a programmer for more than a few years. Over my entire career, across multiple large and small companies, &amp;nbsp;many of which were software vendors and hence in the business of turning programs into products, I'd say my overall "load average" of time spent&amp;nbsp;&lt;i&gt;&lt;b&gt;actively developing&lt;/b&gt;&lt;/i&gt;&amp;nbsp;is somewhere between 30-40%. It certainly isn't more than 50%, and often it's been more like 25%. And at my current job I'd say it's more like 10-20%.&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br style="background-color: white; color: #333333; text-align: left;" /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;Ultimately, my point is that any shop that is big enough to hire one programmer, but only one programmer, is going to spend most of that programmer's time on non-programming work (cf. "&lt;/span&gt;&lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/09/support-debt.html" style="background-color: white; color: #5588aa; line-height: 20px; text-align: left; text-decoration: none;"&gt;support debt&lt;/a&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; line-height: 20px; text-align: left;"&gt;"), because there simply isn't the infrastructure, discipline or organizational understanding to do otherwise, and because the skills that make a good programmer are also skills that come in useful for a variety of other purposes. So now you're warned. If I had known all this when I was offered my current position I probably still would have taken it, but I think my expectations would have been different.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-3056937302334939459?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/3056937302334939459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=3056937302334939459&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3056937302334939459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3056937302334939459'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/my-time-is-your-time.html' title='My time is your time'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-1519353672612838042</id><published>2011-10-04T14:52:00.000-05:00</published><updated>2011-10-04T14:52:08.913-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Systemantics'/><category scheme='http://www.blogger.com/atom/ns#' term='Oblique Strategies'/><title type='text'>Your daily dose of Systemantics</title><content type='html'>Periodically I mention &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Systemantics"&gt;Systemantics&lt;/a&gt;, &lt;/i&gt;by John Gall. Lately, I've been mentioning it a lot more. It comes and goes in my consciousness, like most things that are seminal to how you think about life. I highly recommend you read it, if you haven't already.&lt;br /&gt;&lt;br /&gt;I was originally introduced to the book by one of &lt;a href="http://www.linkedin.com/pub/jerry-wood/9/1b4/b14"&gt;my first managers&lt;/a&gt; after I became a programmer (and an excellent mentor Jerry was, too - I learned a &lt;i&gt;&lt;b&gt;lot&lt;/b&gt;&lt;/i&gt; from him, especially about how to think like a professional, and by that I don't just mean professional programmer). &lt;i&gt;Systemantics&lt;/i&gt; changed how I approach a lot of things in life, and why, even as a technologist, I am hesitant to declare that the first answer to anything is a new system.&lt;br /&gt;&lt;br /&gt;The other day I was thinking about the various axioms, postulates, corollaries and aphorisms in the book and decided that they could be used similarly to &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Oblique_Strategies"&gt;Oblique Strategies&lt;/a&gt;&lt;/i&gt; -&amp;nbsp;something to get you thinking for the day, something to apply to the current blockage at work, an intellectual slap to the side of the head. A bit of transcribing and JavaScript later, and now &lt;i&gt;&lt;b&gt;you&lt;/b&gt;&lt;/i&gt; have can have your daily dose of &lt;i&gt;Systemantics&lt;/i&gt;, too, either in the sidebar to the right (if you are reading this blog directly), or by &lt;a href="http://dullroar.com/Systemantics/"&gt;going to my web site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Go ahead and try it out! Think of something you are working on and feel stuck about, and then see if the quote applies. Refresh the page to "pull another card":&lt;br /&gt;&lt;blockquote&gt;"&lt;a href="http://www.youtube.com/watch?v=-h0WW6bwrZg"&gt;You can buffer your last thought or think about something new.&lt;/a&gt;"&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-1519353672612838042?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/1519353672612838042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=1519353672612838042&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1519353672612838042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1519353672612838042'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/your-daily-dose-of-systemantics.html' title='Your daily dose of Systemantics'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-521216475399741377</id><published>2011-10-03T10:30:00.001-05:00</published><updated>2011-10-03T10:35:50.983-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Normalization'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Entry'/><category scheme='http://www.blogger.com/atom/ns#' term='UX'/><title type='text'>Stop hating your users</title><content type='html'>Something's been bothering me for a while now, and after yet another data entry form that brought it to my attention, it is time to &lt;strike&gt;rant about it&lt;/strike&gt; get it off my chest.&lt;br /&gt;&lt;br /&gt;Nothing shows you don't value your users or online customers more than wasting their time. And one of the biggest things that wastes time is requiring them to type in something to your app that they don't need to.&lt;br /&gt;&lt;br /&gt;All programmers are taught (or hopefully are taught) as part of &lt;a href="http://en.wikipedia.org/wiki/Third_normal_form"&gt;database normalization techniques&lt;/a&gt; that you should never store something that can be computed from another piece of data. The canonical example is not to store a person's age when you also store their birth date. There are &lt;a href="http://en.wikipedia.org/wiki/Database_normalization#Objectives_of_normalization"&gt;lots of reasons to normalize data&lt;/a&gt; in a database (and &lt;a href="http://en.wikipedia.org/wiki/Database_normalization#Denormalization"&gt;a few reasons to unnormalize it&lt;/a&gt;, as well). One of the primary purposes of normalization is&amp;nbsp;to eliminate data redundancy.&lt;br /&gt;&lt;br /&gt;What I am proposing is that there should be a theory of &lt;i&gt;&lt;b&gt;data entry normalization&lt;/b&gt;&lt;/i&gt;, aimed at eliminating data redundancy during its input. Because humans are slow. They are error prone. And most importantly, they have better things to do besides filling out fields on your web site when you could do it for them.&lt;br /&gt;&lt;br /&gt;Here are some examples of what I am talking about:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;u&gt;&lt;i&gt;USE INTELLIGENT, DYNAMIC DEFAULTS!&lt;/i&gt;&lt;/u&gt;&lt;/b&gt;&amp;nbsp;Yes, technically it is "fair" and culturally unbiased to list all countries in a drop-down alphabetically. It is also &lt;i&gt;&lt;b&gt;exceedingly stupid&lt;/b&gt;&lt;/i&gt; and shows how little you value your user's time.&amp;nbsp;Afghanistan and Andorra may come before the United States in the dictionary, but that's no reason they should automatically be first in a drop down (unless your app is aimed primarily at Afghans or Andorrans).&amp;nbsp;Use some IP geolocation service to intelligently predict the country to show on top (while this can be notoriously wrong based on various issues, it is probably correct at the country level). Or else use the data from your user base, expected or actual, to move the most popular country first. I'm not even trying to be Western-centric here - &lt;a href="http://www.internetworldstats.com/top20.htm"&gt;almost a quarter of all Internet users are Chinese&lt;/a&gt;, so if you expect equal market penetration there as elsewhere, put China first for all I care. Just try and be somewhat more intelligent about it than a completely alphabetized list.&lt;/li&gt;&lt;li&gt;And while we're on the subject of location, if they must enter shipping or billing address information on your site, then ask your users for their postal code &lt;i&gt;&lt;b&gt;first&lt;/b&gt;&lt;/i&gt;. Don't place it last on the address form simply because that's where it lives on a snail mail envelope (how quaint).&amp;nbsp;From that postal code you can figure out state or province at a minimum, and depending on the postal code's accuracy, the county or district, city and possibly even street as well.&lt;/li&gt;&lt;li&gt;If the page is asking for credit card information, it should &lt;i&gt;&lt;b&gt;never&lt;/b&gt;&lt;/i&gt; ask for the credit card type, since that can be &lt;a href="http://en.wikipedia.org/wiki/Credit_card_number#Issuer_Identification_Number_.28IIN.29"&gt;calculated from the credit card number&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;If you ask them to fill in a title (Mr. Mrs., Ms., Dr., etc.), they do, and the title is gender-specific, then don't ask for their gender, too.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Because I am not so naive as to think that every system doesn't need human overrides, I am &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; saying you shouldn't display the fields you can pre-calculate based on the above, but simply that you pre-populate them once you have enough information to do so, so that 99.999999% of the time the user only has to glance at it for accuracy before hitting submit. This also implies that certain fields (such as postal code) should come earlier than they typically do on the data entry form.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can say you treat your customers with respect, or you can show them. Showing them is better. And more importantly, it makes the data entry process more efficient, saving them time and frustration, and increasing the likelihood of them completing the registration, transaction or whatever (how many times have you stopped in the middle of a complicated registration because it just got too frustrating, asked too much information, or simply took too long?)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Data entry normalization - I think its time has come. Perhaps we can even start talking about what the "normal forms" for it should be.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;What other examples can you think of? What's your favorite pet peeve when filling out a web form?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-521216475399741377?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/521216475399741377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=521216475399741377&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/521216475399741377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/521216475399741377'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/stop-hating-your-users.html' title='Stop hating your users'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-4446820961399950588</id><published>2011-10-02T11:15:00.001-05:00</published><updated>2011-10-02T11:15:59.199-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENES'/><category scheme='http://www.blogger.com/atom/ns#' term='Lone Wolf'/><category scheme='http://www.blogger.com/atom/ns#' term='Mentoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Peers'/><title type='text'>A lone wolf is a lonely wolf</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;[This is the third post&amp;nbsp;&lt;a href="http://ednortonengineeringsociety.blogspot.com/search/label/Lone%20Wolf" style="color: #5588aa; text-decoration: none;"&gt;in a series&lt;/a&gt;&amp;nbsp;on being the sole developer in a "normal" (that is, non-software) business.]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;An aspect that is often overlooked (it was by me) when considering taking a job in a shop as the sole programmer is that, by definition, you will have no peers. "Cool!," you think. "Now &lt;i&gt;&lt;b&gt;I&lt;/b&gt;&lt;/i&gt; can make all the decisions! If there is some new framework that seems promising, &lt;i&gt;&lt;b&gt;I&lt;/b&gt;&lt;/i&gt; can just decide to use it. If there's a new language I want to learn, no problem. If there is a different technological direction I want to go, I don't need to stop and have endless meetings trying to achieve consensus."&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;"&lt;a href="http://www.youtube.com/watch?v=KuMQjKiaDTg&amp;amp;feature=related"&gt;It's &lt;i&gt;&lt;b&gt;good&lt;/b&gt;&lt;/i&gt; to be the king!&lt;/a&gt;"&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;This will be especially enticing if you are coming out of either a large software dev shop where every change must be argued to death through layers of team leads, architects and their functionaries, or (shudder) Marketing. Or if you're leaving the world of consulting, where in many gigs all the technological decisions are made for you and your job is to simply implement. The new opportunity will seem like &lt;b&gt;&lt;i&gt;finally&lt;/i&gt;&lt;/b&gt; getting that opportunity to put your stamp on everything and make it &lt;i&gt;&lt;b&gt;yours&lt;/b&gt;&lt;/i&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;And it is.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;We may come back to why that can be good &lt;i&gt;&lt;b&gt;and&lt;/b&gt;&lt;/i&gt; bad in another post. But today, the real issue I want to discuss is this: You know all those other programmers you left behind? They served another function other than popping into your office to break your &lt;a href="http://en.wikipedia.org/wiki/Flow_(psychology)"&gt;flow&lt;/a&gt; so they can rattle on pointlessly about the latest episode of &lt;i&gt;Dr. Who &lt;/i&gt;or &lt;i&gt;Mythbusters&lt;/i&gt;. And that purpose, believe it or not, is simply being a &lt;b&gt;&lt;i&gt;peer&lt;/i&gt;&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;When you are by yourself as a programmer, you have no "tails to chase." And no, I don't mean &lt;a href="http://www.youtube.com/watch?v=QzIN3EgBIHg"&gt;that kind of tail&lt;/a&gt;,&amp;nbsp;get your mind out of the gutter! You shouldn't shit where you eat anyway. What I mean is that there's no alpha dog to follow. There's no one to look up to, who makes you want to grow professionally, who challenges you to think outside the problem and the current system. Conversely, there's no one to mentor, either. And there's simply no one&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&amp;nbsp;to bounce ideas off of. No one to give you a sanity check. To smack you upside the head and tell you that idea is stupid. Or to get enthusiastic with you about it.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;You. Are. All. Alone.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;You may &lt;i&gt;&lt;b&gt;think&lt;/b&gt;&lt;/i&gt; others on the IT staff can substitute, but they can't. Sure, they're nice people, and you can share some discussions with them about cool new tech stuff. But IT folks, in general, have a &lt;i&gt;&lt;b&gt;very&lt;/b&gt;&lt;/i&gt; different mindset than programmers. In fact, most of them eschew programming in any form, like scripting, even when it can help them. [&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;At the risk of starting a controversy, I've said for a while now that the reason there is a dearth of scripting experience in IT shops is because scripting &lt;i&gt;&lt;b&gt;is&lt;/b&gt;&lt;/i&gt; programming, and if IT guys wanted to program, they'd &lt;i&gt;&lt;b&gt;be&lt;/b&gt;&lt;/i&gt; programmers already.] An IT expert can be your savior at 3:00 in the morning. They can be a great resource for sounding out whether an idea can work in a given environment. But they are &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; programmers, and they don't think like programmers.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;So being the only developer in a non-dev shop can be &lt;i&gt;&lt;b&gt;lonely&lt;/b&gt;&lt;/i&gt; in a professional sense. Very lonely. And programmers, for all that the public may think we're misanthropic loners, actually aren't. We're very social people. We like to get together and discuss stuff. We're passionate about programming and related tech, and like to be around others who are fervent about it, too.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;I've ended up using various avenues to try and substitute that loss of daily "tech talk." I started a &lt;a href="http://groups.google.com/group/midmonug?hl=en"&gt;.NET user's group here in mid-Missouri&lt;/a&gt;, which is now in its fourth year and has over 100 members (which, given the location, is astounding). I've met a &lt;i&gt;&lt;b&gt;lot&lt;/b&gt;&lt;/i&gt; of great people that way and have enjoyed all our interactions. And of course there's online social networking. This blog (coming on five years in this format, but as a private mailing list it is well over a decade old now). &lt;a href="http://www.linkedin.com/in/dullroar"&gt;LinkedIn&lt;/a&gt; (slowly approaching 500). &lt;a href="https://twitter.com/#!/dullroar"&gt;Twitter&lt;/a&gt;. &lt;a href="https://plus.google.com/110044788128045559454/posts"&gt;Google+&lt;/a&gt;. And all of that is great. Truly.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;But none of it substitutes for the immediacy of being able to walk down the hall and break your friend's flow mode so that you can argue again over the &lt;a href="http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS"&gt;1TBS&lt;/a&gt; yet again. Or talk about the latest dev direction (distraction) from Microsoft. Or see if he agrees Java is going down the shitter and Oracle is the one holding down the handle to make sure it flushes all the way. Or how in &lt;i&gt;&lt;b&gt;hell&lt;/b&gt;&lt;/i&gt; are we going to satisfy that latest request and not break the rest of the system?&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: Georgia, serif; font-size: 13px; line-height: 20px;"&gt;So in the end, being a single developer can have many rewards, but it comes at a price. If you are ever offered such a position, consider these posts before just saying, "Hell, yeah!" You won't be able to say you weren't warned.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-4446820961399950588?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/4446820961399950588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=4446820961399950588&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4446820961399950588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4446820961399950588'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/10/lone-wolf-is-lonely-wolf.html' title='A lone wolf is a lonely wolf'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-8723661062917705060</id><published>2011-09-30T10:00:00.001-05:00</published><updated>2011-09-30T10:00:59.597-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Priorities'/><category scheme='http://www.blogger.com/atom/ns#' term='ENES'/><category scheme='http://www.blogger.com/atom/ns#' term='Lack of Priorities'/><category scheme='http://www.blogger.com/atom/ns#' term='Lone Wolf'/><category scheme='http://www.blogger.com/atom/ns#' term='Lack of Complexity'/><category scheme='http://www.blogger.com/atom/ns#' term='Complexity'/><title type='text'>I can get to that for you in the fall of 2015 - does that work for you?</title><content type='html'>[This is the second post &lt;a href="http://ednortonengineeringsociety.blogspot.com/search/label/Lone%20Wolf"&gt;in a series&lt;/a&gt; on being the sole developer in a "normal" (that is, non-software) business.]&lt;br /&gt;&lt;br /&gt;The most obvious issue about being the only programmer in a shop is that it inherently limits the size and complexity of projects that can be accomplished. No matter if you're &lt;a href="http://en.wikipedia.org/wiki/Linus_Torvalds"&gt;Linus Torvalds&lt;/a&gt;, at the end of the day you are still only a single coder (and in my case&amp;nbsp;business analyst,&amp;nbsp;designer, tester and documenter, too). Many potential projects can be recognized as exceeding my limits immediately. Those are the easy ones. Anything that would take longer than a few weeks of effort is basically out of the picture, because my time is scheduled doing so many other things, mostly&amp;nbsp;&lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/09/support-debt.html"&gt;supporting what already is in production&lt;/a&gt;. So to those requests the answer is, "Hire a consulting firm." Which can effectively kill the idea, because that added expense isn't in the budget.&lt;br /&gt;&lt;br /&gt;The harder ones are the ones that come in that &lt;i&gt;&lt;b&gt;technically&lt;/b&gt;&lt;/i&gt; are reasonably doable by a single person. If it looks to be a few hours to a day's worth of effort, I may just try to knock it out and get it done (especially if the request is reasonable, the business value is obvious, and the requester isn't a bozo). But I have been burned by the apparent ease of a request many times.&lt;br /&gt;&lt;br /&gt;If it is a few days to a few weeks, then it goes on "the list." For quite a while I resisted keeping "the list" up to date, because I knew what the result would be to look at it all and I get depressed easily enough as is without help. But recently my boss pushed me to bring it up to date. The result? Forty five projects, ranging from a day up to some weeks or a month in length. The worst part? Twelve of those projects are "high priority." And since I've updated "the list" a few more projects have started sniffing around my doorstep, howling to be let in.&lt;br /&gt;&lt;br /&gt;I've been told that I can bring in consultants to "help" on a block of them but frankly, because of their (small) size, by the time I documented them out enough to be able to hand them off, I could just do the damned things myself. Which is the paralyzing part. On the one hand, I get push back from management on letting consultants come in to do "fact finding/discovery," because that sounds like a blank check. And on the other hand, anything beyond just thrusting a list of request titles (which is often all I get to start - "We need a system to track whatsits...talk to Fred Blatz for details") at a contractor would require about the same level of effort as just doing the whole thing in the first place.&lt;br /&gt;&lt;br /&gt;Because, in general, our needs are simple. It isn't that any of these projects are hard. They're not. Once the requirements are understood, most are quite easy. It is &lt;i&gt;&lt;b&gt;understanding &lt;/b&gt;&lt;/i&gt;the requirements and &lt;i&gt;&lt;b&gt;capturing&lt;/b&gt;&lt;/i&gt; them that's the hard part.&lt;br /&gt;&lt;br /&gt;So I end up thrashing around, a lot. Because I find it hard to prioritize across twelve "high priority" projects.&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;"You keep using that word. I do not think it means what you think it means."&lt;/i&gt;&lt;br /&gt;- &lt;a href="http://en.wikipedia.org/wiki/Inigo_Montoya"&gt;Inigo Montoya&lt;/a&gt;&lt;/blockquote&gt;At an earlier point in my career I was quite disdainful of project managers. I couldn't quite see what value they added to an organization.&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;"What is it you'd say you &lt;u&gt;&lt;b&gt;do&lt;/b&gt;&lt;/u&gt; here?"&lt;/i&gt;&lt;br /&gt;- &lt;a href="http://www.imdb.com/character/ch0001872/"&gt;Bob Slydell&lt;/a&gt;&lt;/blockquote&gt;I no longer ask that question. Now I know. A project manager, a &lt;i&gt;&lt;b&gt;real&lt;/b&gt;&lt;/i&gt; project manager - someone who could sift and sort and &lt;i&gt;&lt;b&gt;force the business to prioritize&lt;/b&gt;&lt;/i&gt;, would be like working with Santa Claus. Willy Wonka. There'd be sunshine, unicorns, rainbows and candy every day. Or at least decisions, direction and discipline.&lt;br /&gt;&lt;br /&gt;My ultimate worry is that at the end of the day my employer will figure out that a lot of what they have as projects aren't really worth automating. If they did an analysis of what it actually costs both up front and in the long term to automate some of what they want, they'd figure out there is no business value, no ROI. That list of 45 would shrivel to five. Maybe. And then? What would they need me for? Oh, I think I'd still have a job - it'd just be keeping the wheels on production day to day. But there wouldn't be much in the way of creating new things, which, let's face it, is the fun part of programming.&lt;br /&gt;&lt;br /&gt;Ah, well - I really should go and figure out how I am going to "prioritize across the board" on those twelve "high priority" items before they become thirteen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-8723661062917705060?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/8723661062917705060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=8723661062917705060&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/8723661062917705060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/8723661062917705060'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/09/i-can-get-to-that-for-you-in-fall-of.html' title='I can get to that for you in the fall of 2015 - does that work for you?'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-1351338007694151577</id><published>2011-09-29T15:28:00.000-05:00</published><updated>2011-09-29T15:28:17.334-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENES'/><category scheme='http://www.blogger.com/atom/ns#' term='Lone Wolf'/><category scheme='http://www.blogger.com/atom/ns#' term='Support Debt'/><title type='text'>Support debt</title><content type='html'>[I have the idea of writing some posts on being the sole developer in a "normal" (that is, non-software) business. This is the first in the proposed series.]&lt;br /&gt;&lt;br /&gt;There is a lot being written about "&lt;a href="http://en.wikipedia.org/wiki/Technical_debt"&gt;technical debt&lt;/a&gt;" and its siblings - design debt, code debt, etc. But one type of technical debt I see very little written about is "support debt." So I will give a few observations to illustrate:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;support debt&lt;/b&gt;, &lt;i&gt;n&lt;/i&gt;. - the extra work created for the developer(s) once software is released into the wild, in terms of providing ongoing support while the software is in production. Such support may include any or all of: end-user/first-level support, second-level support, training, configuration changes, enhancement requests, maintenance, meetings,&amp;nbsp;monitoring,&amp;nbsp;and migration.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Postulate #1&lt;/b&gt; - There is &lt;i&gt;&lt;u&gt;&lt;b&gt;ALWAYS&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; support debt. Even "no warranties express or implied" BSD-licensed open-source software incurs support debt. (Just setting up the email filters to delete all requests for help for such software is a form of support debt.)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Corollary #1&lt;/b&gt; - The larger the software system released ("large" measured on any axis you wish - LoC, function points, user stories, whatever), the larger the support debt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Corollary #2&lt;/b&gt; - The larger the user base, the larger the support debt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Corollary #3&lt;/b&gt; - The larger the number of software systems supported, the larger the support debt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Corollary #4&lt;/b&gt;&amp;nbsp;- Support debt may be delegated, but rarely can it be completely escaped. Even leaving the institution for which a system was originally written may not free the author of all support debt. Death seems the only way out.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Theorem #1&lt;/b&gt; - Support debt created by releasing a second, unrelated system is multiplicative, not additive (think "loss of productivity/flow mode," "opportunity cost," etc.)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Theorem #2&lt;/b&gt;&amp;nbsp;- Support debt created by releasing a second, related system is exponential, not multiplicative (think "law of unintended consequences").&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Theorem #3&lt;/b&gt;&amp;nbsp;- Retiring the system will not retire its support debt (think "auditors," "litigation" and "historical reporting").&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lehmer's First Law of Support Debt&lt;/b&gt; - The growth of support debt over time will smother any lone developer's capabilities to keep up, bringing all chance for further productivity by that developer to a halt.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lehmer's Observation on the First Law&lt;/b&gt; - Therefore, support debt should not be multiplied unnecessarily. Or, as&amp;nbsp;&lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Systemantics"&gt;Systemantics&lt;/a&gt;&amp;nbsp;&lt;/i&gt;says, &lt;i&gt;"Systems should not be multiplied unnecessarily."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; All of the above will seem intuitively self-obvious and redundant to anyone who has read &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Systemantics"&gt;Systemantics&lt;/a&gt;&lt;/i&gt;. And anyone who hasn't read &lt;i&gt;Systemantics&lt;/i&gt; or &lt;i&gt;&lt;a href="http://www.amazon.com/Systems-Bible-Beginners-Guide-Large/dp/0961825170/ref=sr_1_1?ie=UTF8&amp;amp;qid=1317327094&amp;amp;sr=8-1"&gt;The System Bible&lt;/a&gt;&lt;/i&gt; shouldn't be in software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-1351338007694151577?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/1351338007694151577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=1351338007694151577&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1351338007694151577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1351338007694151577'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/09/support-debt.html' title='Support debt'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-4603101982394816777</id><published>2011-09-21T07:53:00.002-05:00</published><updated>2011-09-21T07:53:37.995-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Change'/><title type='text'>Laughing</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Just had our 30-something head of IT complaining about the rush to mobile/tablet devices and how hard they all are to manage, update and secure from an IT perspective. The gist of his argument was that "these consumer devices have no place in the enterprise!" I told him he sounds just like his counterparts from 1988&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;(all probably retired by now)&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;complaining about all these new-fangled PCs and how they weren't secure, backed up and centrally managed like the mainframe was.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 18px;"&gt;Things never change. Except for change.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-4603101982394816777?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/4603101982394816777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=4603101982394816777&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4603101982394816777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4603101982394816777'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/09/laughing.html' title='Laughing'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-681843100084833131</id><published>2011-09-13T08:45:00.000-05:00</published><updated>2011-09-13T08:45:41.061-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile Phones'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>Are we there yet?</title><content type='html'>&lt;a href="http://mobilehtml5.org/"&gt;Here is an interesting table&lt;/a&gt; of the current state of affairs in terms of HTML5 feature implementations on various mobile platforms. Obviously this will continue to change over time, but I thought it would be interesting to do a couple of charts based on the data to capture where we're at &lt;i&gt;&lt;b&gt;right now&lt;/b&gt;&lt;/i&gt;. Note that the following &lt;i&gt;&lt;b&gt;does not&lt;/b&gt;&lt;/i&gt; account for all the nuances in terms of versions, etc., shown in the table. It is meant to be a painting in broad strokes.&lt;br /&gt;&lt;br /&gt;First, here is a list of the features showing the number of mobile browsers that implement them:&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin-left: 4.65pt; width: 379px;"&gt; &lt;tbody&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Feature&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Implementations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;%&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Canvas API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;100%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;CSS 3 Basic&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;100%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;CSS 3 Transforms 2D&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;11&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;100%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Viewport definition&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;91%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;CSS 3 Transitions&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;82%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Geolocation&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;82%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Multimedia&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;82%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;SVG&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;82%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Web storage&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;82%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Application Cache&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;73%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;CSS 3 Animations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;73%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Web SQL storage&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;73%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;HTML5 Form Virtual Keyboards&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;64%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Remote Debugger&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;64%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Touch Events&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;7&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;64%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Web Sockets&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;5&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;45%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;HTML5 Form New Input&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;36%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Position: fixed support&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;36%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Web Workers&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;36%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Motion Sensors&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;27%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Server-Sent Events&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;27%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;CORS&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;18%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;CSS 3 Transforms 3D&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;18%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Network Information API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;18%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;File API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;HTML Media Capture&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;IndexedDB&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Navigation Timing API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Notifications API&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 150.0pt;" valign="bottom" width="200"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;XMLHttpRequest 2.0&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;9%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;Here is a chart:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jYvTqFfn2EU/Tm9a4l7mwDI/AAAAAAAAQIc/IY3H0Zgig8Q/s1600/HTML5Features.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-jYvTqFfn2EU/Tm9a4l7mwDI/AAAAAAAAQIc/IY3H0Zgig8Q/s1600/HTML5Features.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&gt;So, the lesson is if you want to target something that hits 100% of the mobile browsers, you had better stop at CSS 3 2D transformations, and if you want to hit 80% you can do everything up through Web storage. It's also fairly evident at this time which proposals to stay away from.&lt;br /&gt;&lt;br /&gt;Now the same data sliced by browser:&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin-left: -0.75pt; width: 341px;"&gt; &lt;tbody&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Browser&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Implementations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: center;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;%&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Android Tablets (3.0+)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;23&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;77%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Firefox (Android 6)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;20&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;67%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;iOS2 (3.2)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;20&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;67%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;BlackBerry Phones (5.0)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;60%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;BlackBerry Tablet (1.0)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;60%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Opera Mobile (11)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;18&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;60%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Android Phones (1.0-2.3)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;16&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;53%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;webOS (1.4)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;12&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;40%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Internet Explorer (9)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;33%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Symbian (3)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;27%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr style="height: 15.0pt;"&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 122.0pt;" valign="bottom" width="163"&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;&lt;b&gt;&lt;span style="color: black;"&gt;Opera Mini (5)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 86.0pt;" valign="bottom" width="115"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;td nowrap="" style="height: 15.0pt; padding: 0in 5.4pt 0in 5.4pt; width: 48.0pt;" valign="bottom" width="64"&gt;&lt;div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; text-align: right;"&gt;&lt;span style="color: black;"&gt;13%&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;And another chart:&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/-EqoZxG0pjVg/Tm9dABn_zSI/AAAAAAAAQIg/6sP5-p6Ia-Y/s1600/HTML5Browsers.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-EqoZxG0pjVg/Tm9dABn_zSI/AAAAAAAAQIg/6sP5-p6Ia-Y/s1600/HTML5Browsers.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here it gets a bit trickier. If you were going to try and target a browser that implemented even 80% of the HTML5 features, you couldn't (although the latest Android Webkit browser is close).&lt;br /&gt;&lt;br /&gt;The moral of all this is that while it is still a mess out there in terms of HTML5 support, you can begin to work on some of the most common features with confidence. And of course the playing field is going to continue to change and feature adoption &lt;i&gt;&lt;b&gt;will &lt;/b&gt;&lt;/i&gt;get better. So don't be afraid to use HTML5 features, just be aware of your target audience (and as always, be aware that IE sucks...but you knew that).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-681843100084833131?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/681843100084833131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=681843100084833131&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/681843100084833131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/681843100084833131'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/09/are-we-there-yet.html' title='Are we there yet?'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-jYvTqFfn2EU/Tm9a4l7mwDI/AAAAAAAAQIc/IY3H0Zgig8Q/s72-c/HTML5Features.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-7198654300047630051</id><published>2011-09-07T14:15:00.000-05:00</published><updated>2011-09-07T15:53:12.961-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Slides'/><category scheme='http://www.blogger.com/atom/ns#' term='35mm Slides'/><category scheme='http://www.blogger.com/atom/ns#' term='Light Box'/><category scheme='http://www.blogger.com/atom/ns#' term='Stupid HTML Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML 5'/><title type='text'>The stupidest HTML 5 page ever? Yes, it is!</title><content type='html'>[&lt;b&gt;Note:&lt;/b&gt; Since I've had two friends, both "techies," point out since the original post went out that this all could be accomplished simply by bookmarking &lt;i&gt;about:blank&lt;/i&gt;, let me just say, yes, I know - that's not the point. Go re-read the title before sending me a "helpful suggestion" about that. It's a &lt;i&gt;&lt;b&gt;joke&lt;/b&gt;&lt;/i&gt;, folks!&amp;nbsp;☺]&lt;br /&gt;&lt;br /&gt;I am getting ready to embark on a project of scanning a bunch of slides my dad took during the 1970s and 1980s. Mom took a first pass at digitizing them a few years back, but I want to convert more. Unfortunately, they sold their slide sorter years ago. I've been looking at replacements, but &lt;a href="http://www.amazon.com/Logan-Electric-Slide-Sorter-Lightbox/dp/B00009V39N/ref=sr_1_1?ie=UTF8&amp;amp;qid=1315422625&amp;amp;sr=8-1"&gt;the special-purpose ones&lt;/a&gt; are flimsily made and &lt;a href="http://www.amazon.com/Gagne-Porta-Trace-Light-5000K/dp/B0002GRL9U/ref=pd_cp_p_4"&gt;the more general-purpose "light boxes"&lt;/a&gt; are expensive, especially for a once-in-a-lifetime project.&lt;br /&gt;&lt;br /&gt;Then over the weekend it hit me - I could use my iPad as a light box! It wouldn't hold as many slides as a "real" one, but it would work good enough for what I wanted it for. All I needed was a way to make the whole screen white, and preferably without requiring being online. And that's when I thought of it - a blank "offline" HTML 5 Web page&amp;nbsp;would do the trick! Five minutes later I had all requisite parts written and &lt;a href="http://dullroar.com/LightBox/"&gt;on my main Web site&lt;/a&gt;. And for your "viewing pleasure," (or should that be "sorting pleasure?"&amp;nbsp;☺), here is everything you'll need to replicate it (or you can just use the link to my site):&lt;br /&gt;&lt;br /&gt;&lt;b&gt;index.html&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;lt;html manifest="cache.manifest"&amp;gt;&amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;cache.manifest&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;CACHE MANIFEST&lt;br /&gt;&amp;nbsp;&amp;nbsp;CACHE:&lt;br /&gt;&amp;nbsp;&amp;nbsp;index.html&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;.htaccess&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;AddType text/cache-manifest .manifest&lt;/code&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Browse once to the page and then it can be accessed while offline on&amp;nbsp;your iPad or Android tablet (or presumably your laptop, if you can fold the screen down flat...yes with my Dell Inspiron, no with my Macbook). Simply bookmark it to your "padtop" (what &lt;i&gt;&lt;b&gt;is&lt;/b&gt;&lt;/i&gt; the "desktop" called on a tablet, anyway?) and now you've turned your $500 tablet into a $50 light box!&lt;br /&gt;&lt;br /&gt;Note that with slides that have a lot of white or light backgrounds you &lt;i&gt;&lt;b&gt;will &lt;/b&gt;&lt;/i&gt;notice the pixelation of the tablet screen, especially if looking at the slides with a magnifying glass. Not having such artifacts is the benefit of a real slide sorter or light box. But if you don't want to spend $30-$60, then you'll have to put up with the pixels.&lt;br /&gt;&lt;br /&gt;I &lt;i&gt;&lt;b&gt;told&lt;/b&gt;&lt;/i&gt; you it was the stupidest HTML 5 page ever! ☺&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-7198654300047630051?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/7198654300047630051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=7198654300047630051&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/7198654300047630051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/7198654300047630051'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/09/stupidest-html-5-page-ever-yes-it-is.html' title='The stupidest HTML 5 page ever? Yes, it is!'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-6031235332975119121</id><published>2011-08-15T13:16:00.003-05:00</published><updated>2011-08-15T14:36:56.598-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Meaning'/><category scheme='http://www.blogger.com/atom/ns#' term='Language'/><title type='text'>Death by analogy</title><content type='html'>&lt;br /&gt;&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.831136581953615" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;[Cross-posted to my &lt;a href="http://lordibelievehelpmyunbelief.blogspot.com/"&gt;personal blog&lt;/a&gt;.]&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.831136581953615" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.831136581953615" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;One of my favorite jokes is an oldie that goes something like this:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A man is determined to find the meaning of life, and goes on a quest to find someone who can teach it to him. After traveling far and wide, he is told there is a guru on top of a high, remote mountain who can tell him. The man spends two weeks getting to the mountain and climbing it, narrowly escaping death many times along the way. Finally, he reaches the top, and the guru is meditating there. The man asks, “Wise teacher, what is the meaning of life?” The guru thinks for a minute and then answers "The meaning of life is &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;x&lt;/i&gt;"&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; [where &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;x&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; can be “chocolate,” “potatoes,” “bowl of cherries,” “all is one,” etc.] The man is outraged. Shouting, he exclaims, “You mean I have spent all this time and effort, traveled all this way, and almost been killed for you to tell me the meaning of life is &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;x&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;?!??!?” To which the guru replies, “You mean it isn’t?”&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I like this joke for a lot of reasons, but one of them is that it is &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;hard&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; to convey meaning, and one of the most common tools we use, analogy, doesn’t necessarily make it any easier. My analogies may not work for you. In fact, they may actively get in the way of your understanding, working at odds of the very purpose of analogy in the first place. We pick analogies without much thought in the midst of a conversation, and then we’re burdened with that analogy, whether it was ultimately the right one or not.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Here is a common scenario I see all the time in my job as a programmer. There will be a meeting or a conference call and at some point it devolves on to some poor technologist to try and explain why a given user/customer request is difficult or impossible, too expensive, not right for the problem at hand or whatever. If the underlying reason is something technical then both sides of the conversation are doomed from the start. An engineer who is tone-deaf to non-technical people will usually go off on a tangent in very technical terms, ignoring the glazed eyes of her audience and confirming everyone's stereotypes of nerds. A more seasoned engineer will know that doesn’t work, so instead will try to “put it in words the users can understand,” i.e., use an analogy.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This seems like a good idea, doesn’t it? I mean, if you can’t get something across to someone, the first thing we all turn to are analogies (stories, parables, etc.) This is not unique to technical people - we all use analogies all the time.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;And I’ve come to the conclusion that they harm us more often than not.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The reason is simple - people end up mistaking the analogy &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;for the thing being analogized&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. And the longer it goes on, the more the analogy takes a life of its own, the more people start talking in terms of the analogy, manipulating the analogy on its own, adding to it, making it into this large, abstract system. Except the problem is the analogy, by definition, is &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; the thing. And the longer the discussion goes on using the analogy, the farther it gets from the thing being described. But the audience &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;thinks&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; they’re talking about reality. They’ve been given the analogy so that they can understand, and thinking they understand they then begin fiddling with it.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;This is where the problems lie.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;It doesn’t matter if we’re talking programmers speaking to non-technical users, or pastors giving a sermon on Sunday. To use an analogy, analogies are quicksand. They’re tar pits. They’re where a conversation goes, gets stuck, and can’t rescue itself, sinking further and further into analogy until any semblance to reality is covered over, drowned and lost forever.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I see it happen all the time. I do it. My colleagues do it.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;And who can blame the listeners? They’ve been told "&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;x&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; is like &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;y&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;" by someone knowledgeable, so then as they start to discuss &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;x&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;, they think they’re still discussing &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;y&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;User 1:&lt;/b&gt; What’s wrong with my idea?&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Programmer: &lt;/b&gt;We won’t be able to implement that and satisfy our users. It’ll be too slow. It’s like a horse-drawn carriage. What we’re proposing instead is a race car. I can’t really explain the technical details to you, but it’ll be as fast as a race car compared to the original idea.&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;User 2:&lt;/b&gt; So we should be able to make it go even faster if we give it a bigger engine, right? I mean, if we put it in “The Cloud” it should be like upping the octane in its fuel formula.&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Programmer: &lt;/b&gt;Well no, not exactly. You see...&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;User 1: &lt;/b&gt;And if we put knobby tires on it, then it should be able to do Baja racing as well as Indy racing, right? So it should also work on mobile devices, so we can go out in the field with it.&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Programmer: &lt;/b&gt;Actually, that won’t work because...&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;User 2: &lt;/b&gt;Which then means it should also be capable of cross-country road races, so the system will be able to work even if the user is offline and using it while flying across the country!&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;Programmer: &lt;/b&gt;Stop! Stop! &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;&lt;u&gt;STOP!&lt;/u&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; That’s not what I meant!&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;[blank stares]&lt;/span&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt;User 1:&lt;/b&gt; Well, what &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;did&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; you mean then? &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;You're&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; the one who said it would be like a race car!&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Analogies seem most prone to abuse in abstract, esoteric or technical realms. Computers. Theology. Places where it is hard for professionals to describe what they’re really thinking to “users” or “lay people.” The choices are either to use technical language that goes over their heads, or dumb it so far down that the conversation is worthless, or to try and analogize in an attempt to communicate &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;something&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. But I often wonder if it is really worth it?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Of course, we &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;i&gt;&lt;b&gt;must&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; use analogies. It would be almost impossible to communicate without them. So in the end, I think the real point of this diatribe is that we should be careful which ones we pick. In programming, correctly and accurately naming things is important - perhaps the most important task there is. I would suggest that choosing analogies is just as important. Because only other programmers are ever going to see the names (variables, functions) inside a program, but business sponsors, analysts and end users are going to be dealing with the analogies used for a long time, and will impact how they think about the system. Similarly with theology (which I could argue is the same as programming, but won’t :).&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;So be careful out there. The analogies you choose may come home to roost like the salmon returning to their spawning grounds. Or something. :)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;What are your thoughts?&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/8097161623390486264-6031235332975119121?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/6031235332975119121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=6031235332975119121&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6031235332975119121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6031235332975119121'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/08/death-by-analogy.html' title='Death by analogy'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-8427061237936427423</id><published>2011-08-13T10:04:00.001-05:00</published><updated>2011-08-13T10:04:33.429-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Installers'/><category scheme='http://www.blogger.com/atom/ns#' term='Files'/><title type='text'>What's wrong with this picture?</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NK3LSD52X0E/TkaP2nX2zUI/AAAAAAAAQHs/rwFUuSirlg4/s1600/Lightswitch.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-NK3LSD52X0E/TkaP2nX2zUI/AAAAAAAAQHs/rwFUuSirlg4/s1600/Lightswitch.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Note two things - first the folder location chosen, and second, the disk space requirements for both the C: and E: drives. &lt;b&gt;&lt;i&gt;WTF?&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This has driven me crazy for &lt;i&gt;&lt;b&gt;YEARS&lt;/b&gt;&lt;/i&gt;, especially with Microsoft software. Especially now, when my C: drive is a (relatively) small and &lt;i&gt;&lt;b&gt;&lt;u&gt;expensive&lt;/u&gt;&lt;/b&gt;&lt;/i&gt; SSD, so I want to direct as many non-essential bits as possible to the much larger and &lt;i&gt;&lt;b&gt;&lt;u&gt;cheaper&lt;/u&gt;&lt;/b&gt;&lt;/i&gt; brown-round-and-spinning E: drive (actually drives, because E: is two large drives in a RAID 0 configuration). And yet Microsoft just blatantly ignores my wishes and acts like it owns the C: drive and knows what's best for me, in this case putting &lt;i&gt;&lt;b&gt;three quarters&lt;/b&gt;&lt;/i&gt; of the software somewhere other than where I specified! Grrr...&lt;br /&gt;&lt;br /&gt;It's 2011, Microsoft - get your install act together!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-8427061237936427423?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/8427061237936427423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=8427061237936427423&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/8427061237936427423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/8427061237936427423'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/08/whats-wrong-with-this-picture.html' title='What&apos;s wrong with this picture?'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-NK3LSD52X0E/TkaP2nX2zUI/AAAAAAAAQHs/rwFUuSirlg4/s72-c/Lightswitch.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-4635884313097022731</id><published>2011-07-19T15:25:00.001-05:00</published><updated>2011-07-19T15:25:26.774-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inefficiency'/><category scheme='http://www.blogger.com/atom/ns#' term='Efficiency'/><category scheme='http://www.blogger.com/atom/ns#' term='Communication'/><category scheme='http://www.blogger.com/atom/ns#' term='Bad Habits'/><title type='text'>My personal peeves about business (mis)communications</title><content type='html'>The following are all annoying in the extreme, but worse, they are all &lt;i&gt;&lt;b&gt;inefficient&lt;/b&gt;&lt;/i&gt;. They should be banned from all companies because they waste time, which is money.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Sending an email to an entire department when there are really only one or two people who can or will handle it&lt;/b&gt;&lt;/i&gt; - my personal (un)favorite is people who send an email to the entire IS department that is really a help desk request. I have an email filter set up to capture any mails addressed to our entire department that were sent from outside the department, and all of those go into a "special" folder that only gets read rarely (and usually only gets the subject lines scanned before deleting them all). I can presume the person sending it hasn't a clue because they can't differentiate who is responsible for what they are requesting, especially since there is a help desk to start with and 99.999999999% of the time they are simply trying to circumvent or escalate past that.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Calling and leaving no message&lt;/b&gt;&lt;/i&gt; - while the miracle of caller id means my friends can call and don't have to leave a message because they'll know I know they called, in business if you call and don't leave a message I presume "It must not have been that important" and will &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; call you back. Ever. Well,&amp;nbsp;unless the caller is the CEO or someone between the CEO and me on the org chart.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Calling and leaving a message saying "Call me"&lt;/b&gt;&lt;/i&gt; - if there is a bigger time-waster in business, I don't know what it is.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Emailing to say "Call me"&lt;/b&gt;&lt;/i&gt; - wait, I stand corrected.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Treating every issue as if they are all of equal priority&lt;/b&gt;&lt;/i&gt; - this seems really prevalent among help desk people, since their entire job is answering phone calls and emails dealing with the problems. But not all problems warrant interrupting someone else. Write up a simple email describing the issue and I will get to it by the end of the day. I promise.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Using IM when an email would do&lt;/b&gt;&lt;/i&gt; - I loathe instant messaging, especially in business settings. And it's not because I'm a fogey - it's because IMs, like phone calls, are "synchronous communications." Which means that if I am going to deal with it, I have to drop what I am doing and respond. An instant message is just as annoying as if you popped in my office door with something trivial. Worse, instant message "chats" can go on-and-on, interrupting you over and over again. I dread the day we stand up Lync at work.&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Sending an email asking when I am open for a meeting when you can tell that from my calendar on Exchange&lt;/b&gt;&lt;/i&gt; - and you can't claim ignorance, because you're asking so you can then send me a meeting invite, which shows you know how to do that in Outlook, and by inviting me Outlook is going to show you the times I have blocked out already.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Sorry, just had to rant about these somewhere. So, what business miscommunications bug you the most?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-4635884313097022731?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/4635884313097022731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=4635884313097022731&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4635884313097022731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4635884313097022731'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/07/my-personal-peeves-about-business.html' title='My personal peeves about business (mis)communications'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-1188816463050347220</id><published>2011-06-22T09:23:00.000-05:00</published><updated>2011-06-22T09:23:09.437-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Laptop'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Computing'/><title type='text'>A missing niche</title><content type='html'>I've noticed an interesting trend, and I think it leaves an opening for a laptop vendor to fill. Currently there seems to be roughly three classes of laptops:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Netbooks and the new "cloud" devices (e.g., Chromebook, tablets)&lt;/li&gt;&lt;li&gt;Middle-of-the-road laptops for road warriors, students, etc.&lt;/li&gt;&lt;li&gt;High-end laptops for gamers, developers and people with ego issues&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Two things happen as you go "up" that range from level #1 to #3:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Hardware capacity" goes up in terms of CPU speed and number of cores, memory and hard disk size&lt;/li&gt;&lt;li&gt;Display size increases (this could be seen as a special case of capacity, i.e., "pixel capacity")&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;However, for a growing class of users such as myself, I don't think those two bullet points should be tied together. &lt;a href="http://ednortonengineeringsociety.blogspot.com/2009/11/put-away-childish-things.html"&gt;I have written before&lt;/a&gt; that to me, my laptop is basically a brick - a device I use to remote desktop into other "machines" (VM images) to do my real work, i.e., programming, system administration and the like. Those remote systems are where the &lt;i&gt;&lt;b&gt;real&lt;/b&gt;&lt;/i&gt; power in terms of CPU, memory and storage are concentrated, and I can get the IT side of the house to increase capacity in any of those areas quickly and on demand (in fact, my current main dev image is configured to automatically increase capacity on demand - I love VMs). In addition, they are backed up as part of our shop's VM backup strategies so I don't have to worry about that. And I also don't have to re-install a bunch of apps locally every time I get a new laptop. All good.&lt;br /&gt;&lt;br /&gt;So, in terms of "capacity" I really don't need much for my laptop - just enough CPU, memory and disk space to run a browser and a good RDP client (like &lt;a href="http://www.visionapp.com/"&gt;visionApp&lt;/a&gt; - completely worth the money). But, like any developer, I want &lt;i&gt;&lt;u&gt;&lt;b&gt;lots&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; of display space. I can handle that at work by having an external monitor (or &lt;a href="http://ednortonengineeringsociety.blogspot.com/2008/07/multifaceted.html"&gt;monitors&lt;/a&gt;) as well as the laptop's display. But when I am using the laptop as the mobile device it was built to be, I really want it to have a good, hi-res display so that I can see as much code as possible. My Dell's 1440x900 resolution barely cuts it, my Macbook Pro's 1680x1050 is better, and my friend's Dell's 1900x1200 is awesome (for now :).&lt;br /&gt;&lt;br /&gt;But here's the deal - the only way I can get those hi-resolution displays (high pixel capacities) on a laptop is to go with a high-end machine that has hardware capacity (CPU, memory, storage) I &lt;i&gt;&lt;b&gt;don't need&lt;/b&gt;&lt;/i&gt;. And that's where I think there's a missing niche market. As "the cloud" gets more prevalent, more people will start working there. And for many, all the processing is going to be on the remote side, by definition. So what they will really want isn't local hardware capacity, but they &lt;i&gt;&lt;b&gt;will&lt;/b&gt;&lt;/i&gt; want pixel capacity. Why pay for a CPU, memory and hard disk storage I don't need when all I really want is a honking big screen?&lt;br /&gt;&lt;br /&gt;Has anyone found a laptop vendor or vendors that offer large displays with minimal other specs? If so, leave a link in the comments.&lt;br /&gt;&lt;br /&gt;[And if any hardware vendors happen to stumble on this, I volunteer myself to help you beta any laptop you would care to bring to market in this space. :) ]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-1188816463050347220?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/1188816463050347220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=1188816463050347220&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1188816463050347220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1188816463050347220'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/06/missing-niche.html' title='A missing niche'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-3261951316961203249</id><published>2011-06-15T21:01:00.011-05:00</published><updated>2011-06-15T21:04:45.808-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sorting'/><category scheme='http://www.blogger.com/atom/ns#' term='Thinking Outside the Box'/><category scheme='http://www.blogger.com/atom/ns#' term='Algorithms'/><title type='text'>Out of sorts</title><content type='html'>A friend pointed me to &lt;a href="http://dis.4chan.org/read/prog/1295544154"&gt;this rather brilliant (if completely impractical) sort routine&lt;/a&gt; today. It uses the OS's "sleep" function to do the sorting - as one commenter pointed out, letting the kernel do your sorting for you.&lt;br /&gt;&lt;br /&gt;Then I got to thinking about letting your file system do the sorting for you. Here's what I came up with (in bash). It works. :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;while read line&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;do&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;&amp;nbsp; touch $line&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;done&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;span style="font-family: 'courier new', monospace;"&gt;ls -1 # That's a "one" not an "el"&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/8097161623390486264-3261951316961203249?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/3261951316961203249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=3261951316961203249&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3261951316961203249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3261951316961203249'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/06/out-of-sorts.html' title='Out of sorts'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-6846520466630430676</id><published>2011-06-02T11:32:00.000-05:00</published><updated>2011-06-02T11:32:37.807-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Wallpaper'/><category scheme='http://www.blogger.com/atom/ns#' term='Curmudgeon'/><title type='text'>I KNOW I don't understand</title><content type='html'>A friend recently pointed with some excitement to all these "cool" &lt;a href="http://vs2010wallpapers.com/"&gt;wallpapers for Visual Studio 2010&lt;/a&gt;. I thought to myself, "Really? REALLY? Do programmers &lt;i&gt;&lt;b&gt;really&lt;/b&gt;&lt;/i&gt; care about the &lt;i&gt;&lt;b&gt;wallpaper&lt;/b&gt;&lt;/i&gt; for their IDE? Don't they have better things to do with their time? If they're working on code shouldn't their entire workspace be covered with various editing windows, toolbars and property panes, so &lt;b&gt;&lt;i&gt;what does it matter&lt;/i&gt;&lt;/b&gt; what the hell is on their wallpaper?"&lt;br /&gt;&lt;br /&gt;Of course, this comes from someone who never (ever) puts anything on my desktop, either (and &lt;a href="http://www.codinghorror.com/blog/2007/10/your-desktop-is-not-a-destination.html"&gt;Coding Horror sums up why quite nicely&lt;/a&gt;). I do pin things to the task bar if I find myself launching them more than once, but other than that, no. Why should I customize something I will never see, except briefly, before I get to doing real work?&lt;br /&gt;&lt;br /&gt;I'll tell you what I'd like to see out of VS2010 instead of the ability to make purdy wallpapers for it - how 'bout a startup time of less than half a minute when running on a decently powered dev image? Granted, it's faster than that on a box with a SSD, but if you tell me I need a SSD to run my IDE efficiently, then there's another problem afoot.&lt;br /&gt;&lt;br /&gt;Anyway, I know I am old and don't get "these kids now days," but I have to admit I prioritize the ability to put a wallpaper on my IDE pretty much as close to the bottom of the stack as it can get.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-6846520466630430676?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/6846520466630430676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=6846520466630430676&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6846520466630430676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/6846520466630430676'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/06/i-know-i-dont-understand.html' title='I KNOW I don&apos;t understand'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-3567300669430850908</id><published>2011-05-22T06:32:00.075-05:00</published><updated>2011-05-22T06:53:10.379-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Inefficient'/><title type='text'>Video training is O(n)</title><content type='html'>&lt;br /&gt;I have a request for all friends and colleagues - &lt;i&gt;&lt;u&gt;&lt;b&gt;please&lt;/b&gt;&lt;/u&gt;&lt;/i&gt; don't send me links to video (or audio) any more, no matter how good they are.&lt;br /&gt;&lt;br /&gt;I tend to save all video and other "linear" media until I have a block of down time, and sometimes that takes a week or two, if it ever happens. In fact, I am starting to just immediately delete or archive recommendations with no intention of ever getting back to them at all. I resist linear media more and more because I resent the time it takes. I can skim and jump around text (and do "finds" or searches for interesting parts as well). I can also cut and paste and comment on its parts much easier than I can with "At 5:13, when he says blah blah blah." Or with a live course I can ask questions, thereby changing the line of instruction and tuning it to my interests. But in video we are just going to march through the topic in a straight sequence, with any attempts to "move around" in the subject matter outside of the pre-defined sequence being awkward at best.&lt;br /&gt;&lt;br /&gt;Meanwhile, "the kids these days" seem to think video is the only way to go. I recently received a stack of one-month-free membership cards from a high-end video training site for the Microsoft stack to give away over the next year at the .NET user's group I run. The people who receive them &lt;i&gt;&lt;b&gt;&lt;u&gt;love&lt;/u&gt;&lt;/b&gt;&lt;/i&gt; them. Meanwhile, I, as the group's leader, have a free one-year pass to the same site. I've sat through a few of their videos, and they're well done, if that's what you like.&lt;br /&gt;&lt;br /&gt;But seriously - to take a course with seven segments, I'd have to donate up to seven &lt;b&gt;&lt;u&gt;&lt;i&gt;HOURS&lt;/i&gt;&lt;/u&gt;&lt;/b&gt;. I think not. Especially since the videos (a) run at a fairly slow pace as the instructor demos, so students can keep up if they're typing along at home, and (b) there's no chance to ask questions. So I can't even remember when I logged into it last, and I am sure the year's going to go by and I will have taken advantage of less than 5% of the site's offerings. And the level of access I have usually costs $29/mo or $299/year, and I am sure, from the reaction of other (younger) people who have gotten the one-month cards that there are lots of people out there paying that and thinking it's a good value.&lt;br /&gt;&lt;br /&gt;So, we all learn differently and I am sure video serves a large and growing niche. But for me, dinosaur that I am, it's &lt;i&gt;&lt;b&gt;inefficient&lt;/b&gt;&lt;/i&gt;, which considering it's for technology is ironic at best. I am going to resist the trend for linear media in education and training until books (and e-books) have gone the way of the pterodactyl.&lt;br /&gt;&lt;br /&gt;Sorry, I just had to get that off my chest.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-3567300669430850908?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/3567300669430850908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=3567300669430850908&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3567300669430850908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3567300669430850908'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/05/video-training-is-on.html' title='Video training is O(n)'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-349340201943717395</id><published>2011-05-13T20:21:00.029-05:00</published><updated>2011-05-13T20:35:11.593-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile Phones'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7'/><title type='text'>Why I think Windows Phone 7 is in trouble</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;I've noticed something that I don't think bodes well for Microsoft garnering developers for their new phone OS. They keep pushing developing for it with contests. It may be selective memory, but I don't remember Apple or Google having to do that in the early days to get people to build for&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;i&gt;&lt;b&gt;their&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;phones.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;"PLEASE build apps for our phone! &lt;i&gt;&lt;b&gt;PLEEEEEASE&lt;/b&gt;&lt;/i&gt;. We'll pay you!"&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;It has to be strange for Microsoft, because they've never (realistically) had to entice programmers to build for Windows (or even the &lt;a href="http://en.wikipedia.org/wiki/Console_wars#Worldwide_sales_figures_5"&gt;Xbox&lt;/a&gt;). &lt;a href="http://en.wikipedia.org/wiki/Willie_Sutton"&gt;Willie Sutton&lt;/a&gt; would understand why developers program for Windows. He wouldn't understand why they do it for WP7 (and everyone keeps using "WP7," including some Microsoft folks, and that just reminds me of&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;a href="http://en.wikipedia.org/wiki/WordPerfect" style="color: #3333cc;" target="_blank"&gt;this&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;).&lt;/span&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;As I've said for a while now, Google doesn't "get" social and MS doesn't "get" mobile.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Don't get me wrong - Microsoft will have a presence in the mobile phone market if just because they're Microsoft and they can continue to make sure their phone integrates best with Exchange, which means they can make a convincing case to take over from Blackberry for the business market. But that's not where the "sex" is in phones, and it is certainly not the early-adopter/enthusiast/&lt;wbr&gt;&lt;/wbr&gt;fanboy niches, either. And &lt;i&gt;&lt;b&gt;those&lt;/b&gt;&lt;/i&gt;&amp;nbsp;customers are who drives innovation in phones. I've seen some enthusiasm from a certain class of technical folks around WP7, but it tends to be from people whose entire livelihood is based on the Redmond ecosystem. And that isn't the audience that's going to push it into mainstream America.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Maybe if Steve Ballmer started wearing &lt;a href="http://www.google.com/search?q=steve+jobs+black+turtleneck&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;tbm=isch&amp;amp;source=og&amp;amp;sa=N&amp;amp;hl=en&amp;amp;tab=wi&amp;amp;biw=1378&amp;amp;bih=815"&gt;black turtlenecks&lt;/a&gt;, it'd help. :)&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;It'll be interesting to watch play out, but I bet a lot of the dev that happens for WP7 will basically be &lt;strike&gt;collateral damage&lt;/strike&gt; bonus from people using&amp;nbsp;&lt;a href="http://jquerymobile.com/" style="color: #3333cc;" target="_blank"&gt;jQuery Mobile&lt;/a&gt;&amp;nbsp;to build cross-platform apps for all the modern phone browsers. It won't be because it's targeted on purpose - "Oh, yeah, I almost forgot - if you care our app also runs on Windows Phone 7."&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Anyway, that's how I see it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-349340201943717395?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/349340201943717395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=349340201943717395&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/349340201943717395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/349340201943717395'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/05/why-i-think-windows-phone-7-is-in.html' title='Why I think Windows Phone 7 is in trouble'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-9094954861636760950</id><published>2011-04-03T09:53:00.001-05:00</published><updated>2011-04-03T09:54:06.922-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Synctoy'/><category scheme='http://www.blogger.com/atom/ns#' term='Jungledisk'/><category scheme='http://www.blogger.com/atom/ns#' term='Robocopy'/><category scheme='http://www.blogger.com/atom/ns#' term='wget'/><category scheme='http://www.blogger.com/atom/ns#' term='Backups'/><title type='text'>Just backup a minute there, pal</title><content type='html'>Apparently, March 31 was "&lt;a href="http://worldbackupday.net/"&gt;World Backup Day&lt;/a&gt;." I like their tag line:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Don't be an April fool.&lt;br /&gt;Backup your data.&lt;br /&gt;Check your restores.&lt;/i&gt;&lt;/blockquote&gt;I found out about it from &lt;a href="https://twitter.com/#!/JohnMacIntyre"&gt;@JohnMacIntyre&lt;/a&gt;, who I then bored with three emails on how I backup my personal data. Then I thought those three emails would make a great blog post so I could bore you with it, too!&lt;br /&gt;&lt;br /&gt;My personal backup strategy is threefold:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Daily download of personal web sites I care about so I have them locally in case something happens.&lt;/li&gt;&lt;li&gt;Daily backup of data (including the above web sites) to a USB drive that gets periodically cycled offsite.&lt;/li&gt;&lt;li&gt;Daily backup of data (including web sites) to the cloud.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Let's see how each of these is accomplished.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Backup Web Sites&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First, I backup all the web sites I care about. These include my personal blogs, my wife and daughter's blogs, the blogs of a couple of (non-technical) friends, and the church web site I maintain. I use &lt;a href="http://www.gnu.org/software/wget/"&gt;GNU's &lt;i&gt;wget&lt;/i&gt;&lt;/a&gt;&lt;i&gt; &lt;/i&gt;for this part. Here is a simplified version of the &lt;i&gt;.cmd&lt;/i&gt; file I invoke daily via a scheduled task, showing only my two blogs:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@ECHO OFF&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;E:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;CD \Docs\Blogs&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM Using short parms because the GNU long parm names don't seem to work on some parms.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -N - turn on timestamping&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -r - recursive&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -k - convert links&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -nv - Turn off verbose logging&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -o - output log&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -i - input file of sites to crawl&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -m - mirror&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -w1 - wait 1 second between requests&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM --random-wait - use random wait times between requests&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -np - no parent, never ascend to parent directory&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -p - download all page prerequisites&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -X - directories to exclude&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -R - file names to reject&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -H - span hosts (limited by -D)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;@REM -D - domains to crawl (limited to these domains)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;"C:\Program Files (x86)\GnuWin32\bin\wget.exe" -N -r -k -nv -o"E:\Docs\Blogs\wget.log" -i"E:\Docs\Blogs\Backup List.txt" -m -w1 --random-wait -np -p -X"feeds,%22*" -X"*encodeURI*" -R"*.html@showComment*,vsItemDisplay*,*encodeURI*" -H -D"ednortonengineeringsociety.blogspot.com,lordibelievehelpmyunbelief.blogspot.com,1.bp.blogspot.com,2.bp.blogspot.com,3.bp.blogspot.com,4.bp.blogspot.com,0.bp.blogspot.com"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Everything that starts with &lt;i&gt;"C:\Program Files"&lt;/i&gt; through the end of the script is one long line. The input file specified in the&lt;i&gt; -i&lt;/i&gt; parameter is simply a&lt;i&gt; CRLF&lt;/i&gt;-delimited set of URLs (complete with &lt;i&gt;http:// &lt;/i&gt;at the front), e.g., my tech blog:&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;http://ednortonengineeringsociety.blogspot.com&lt;/span&gt;&lt;/blockquote&gt;The same list is in the &lt;i&gt;-D&lt;/i&gt; parm at the end, coupled with some content distribution domains that store images for the various Blogger sites.&amp;nbsp;The &lt;i&gt;-X&lt;/i&gt; and &lt;i&gt;-R&lt;/i&gt; parms specify a series of directories and files I've found it's better to exclude when downloading from Blogger sites. This&amp;nbsp;&lt;i&gt;wget&lt;/i&gt; script works great, although the timestamping feature doesn't behave quite like I'd like, especially with Blogger blogs. But I believe that's an issue with how Blogger is responding to &lt;i&gt;wget&lt;/i&gt;'s HTTP requests and not an issue with &lt;i&gt;wget&lt;/i&gt; itself.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Backup to USB Drive&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Second, for local backups to external storage I started using &lt;a href="http://technet.microsoft.com/en-us/library/cc733145(WS.10).aspx"&gt;Robocopy&lt;/a&gt; when I figured out that my&amp;nbsp;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=c26efa36-98e0-4ee9-a7c5-98d0592d8c52"&gt;Synctoy&lt;/a&gt;&amp;nbsp;scheduled task wasn't actually syncing the way I thought it was. Given that Robocopy is now built into Windows, it's even better. I run the following in a &lt;i&gt;.cmd &lt;/i&gt;file on my personal file server every night at 3:00am:&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', Courier, monospace; font-size: xx-small;"&gt;robocopy E:\Docs &amp;nbsp; &amp;nbsp; G:\Docs &amp;nbsp; &amp;nbsp; /BYTES /COPYALL /DCOPY:T /DST /MIR /NP /R:0 /TEE /TS /LOG:BackupEtoG.log&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;robocopy E:\Music &amp;nbsp; &amp;nbsp;G:\Music &amp;nbsp; &amp;nbsp;/BYTES /COPYALL /DCOPY:T /DST /MIR /NP /R:0 /TEE /TS /LOG+:BackupEtoG.log&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;robocopy E:\Podcasts G:\Podcasts /BYTES /COPYALL /DCOPY:T /DST /MIR /NP /R:0 /TEE /TS /LOG+:BackupEtoG.log&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;robocopy E:\Sources &amp;nbsp;G:\Sources &amp;nbsp;/BYTES /COPYALL /DCOPY:T /DST /MIR /NP /R:0 /TEE /TS /LOG+:BackupEtoG.log&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;robocopy E:\Videos &amp;nbsp; G:\Videos &amp;nbsp; /BYTES /COPYALL /DCOPY:T /DST /MIR /NP /R:0 /TEE /TS /LOG+:BackupEtoG.log&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[Each line starting with "&lt;i&gt;robocopy&lt;/i&gt;" is a single command line, in case it wraps while you are viewing it.]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;G:&lt;/i&gt; is a USB drive I then swap out with an identical one at my parents' house (where there is a similar script running on their computer) on a semi-regular basis, giving both households personal offsite backups. Since the drive being backed up serves as a file share for both my wife and me, all our data gets backed up at once.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can check out the Robocopy docs &lt;a href="http://technet.microsoft.com/en-us/library/cc733145(WS.10).aspx"&gt;at Technet&lt;/a&gt; to see what I'm doing here. I am also using a similar Robocopy script at work to back up my &lt;a href="http://mercurial.selenic.com/"&gt;hg repositories&lt;/a&gt; to a file server there.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Backup to "the Cloud"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;I use &lt;a href="https://www.jungledisk.com/"&gt;Jungledisk&lt;/a&gt;&amp;nbsp;&lt;a href="https://www.jungledisk.com/personal/desktop/features/"&gt;Desktop Edition&lt;/a&gt; for my "cloud" backups. They're owned by &lt;a href="http://rackspace.com/"&gt;Rackspace&lt;/a&gt; but you can use either Rackspace or &lt;a href="http://aws.amazon.com/s3/"&gt;Amazon S3&lt;/a&gt; for storage. I started on S3 but moved to the (slightly cheaper) Rackspace storage, even though my monthly bill still comes from Amazon. Jungledisk has a lot of nice features, including block-level differential backups to minimize data transfer and the ability to &lt;a href="http://help.jungledisk.com/Jungle%20Disk%20Knowledgebase/default.aspx?pageid=understanding_buckets"&gt;encrypt file and directory names&lt;/a&gt; as well as file contents, so you don't have to worry about a bored Rackspace employees riffling through your files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The service is pretty reasonable - I am paying a bit over $7/month right now for 30+GB of data. I could get cheaper rates elsewhere, but I like Jungledisk's features and their cross-platform implementations. They support Windows, Mac and Linux plus a USB "thumb drive" version as well as an open source implementation (so, if you were using S3, say, and Rackspace and Jungledisk went away, you could still get to your data).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, I also have cloud storage space on &lt;a href="http://docs.google.com/"&gt;Google Docs&lt;/a&gt;, &lt;a href="https://picasaweb.google.com/"&gt;PicasaWeb&lt;/a&gt;, &lt;a href="http://www.dropbox.com/"&gt;Dropbox&lt;/a&gt;, &lt;a href="http://explore.live.com/windows-live-skydrive"&gt;SkyDrive&lt;/a&gt; (or whatever the hell Microsoft is calling it this month) and now &lt;a href="https://www.amazon.com/clouddrive/learnmore/"&gt;Amazon's Cloud Drive&lt;/a&gt;.&amp;nbsp;However, those tend to be for file sharing, temporary transfers between devices and other special purposes more than strictly backups.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Testing and Restores&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course, your backup strategy is only as good as your last restore. Since my approach is at the file level and doesn't use any special backup file formats, I have been able to easily check and open and restore various files from my backup locations. I log everything I backup, and I check those logs and randomly check files periodically. I also have Jungledisk notify me daily via email with the number of files and amount of data it has backed up, so I can be sure things are running successfully there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I figure if my three-way backup strategy completely fails then "Western Civilization as we know it" has probably collapsed and things like backups won't be much of an issue any more.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope this has been helpful.&amp;nbsp;What do you use for backups? Do you use multiple approaches? Do you test? Are you happy with it?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-9094954861636760950?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/9094954861636760950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=9094954861636760950&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/9094954861636760950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/9094954861636760950'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/04/apparently-march-31-was-world-backup.html' title='Just backup a minute there, pal'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-3173123574834068910</id><published>2011-03-24T14:01:00.000-05:00</published><updated>2011-03-24T14:01:57.663-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Powershell Sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='It Should Be This Easy'/><category scheme='http://www.blogger.com/atom/ns#' term='Powershell'/><title type='text'>Sometimes it pays to go old school</title><content type='html'>Yesterday I posted about &lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/03/powershell-problem.html"&gt;my most recent travails with Powershell&lt;/a&gt;. Last night, while I was at home licking my wounds, and as an exercise to prove it shouldn't be that hard, I came up with a solution to what I was trying to do using nothing but the command prompt (i.e., &lt;i&gt;cmd.exe&lt;/i&gt;, &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; &lt;i&gt;powershell.exe&lt;/i&gt;) &lt;i&gt;&lt;b&gt;&lt;u&gt;in less than ten minutes&lt;/u&gt;&lt;/b&gt;&lt;/i&gt;, and that was with having to google to help me remember the nuances of the old (as in "as old as DOS") &lt;i&gt;FOR&lt;/i&gt; and &lt;i&gt;IF&lt;/i&gt; statements. Here it is in all its glory - it will wrap in this post but is all on one line at the command shell prompt:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;for /r %i in (*.xml) do find "Entity.xsn" "%~fi" &amp;amp;&amp;amp; if errorlevel 0 "F:\Program Files (x86)\Microsoft Office 2003 Developer Resources\Microsoft Office InfoPath 2003 SDK\Tools\pifix.exe" /URL&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;http://m&lt;span class="Apple-style-span" style="border-collapse: collapse; color: #333333; line-height: 20px;"&gt;ysharepoint/SomeSite/SomeFormsLib/MyInfoPathForm.xsn&lt;/span&gt;&amp;nbsp;"%~fi"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Works great!&amp;nbsp;Now, I am not saying it's pretty, but it was quick to write and test (even with the googling to remind myself of some things), and more importantly it&amp;nbsp;worked as expected. That's certainly more than I could say for Powershell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-3173123574834068910?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/3173123574834068910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=3173123574834068910&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3173123574834068910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/3173123574834068910'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/03/sometimes-it-pays-to-go-old-school.html' title='Sometimes it pays to go old school'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-2608547165924653088</id><published>2011-03-23T18:47:00.001-05:00</published><updated>2011-03-24T14:05:58.896-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Powershell Sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='Powershell'/><category scheme='http://www.blogger.com/atom/ns#' term='It Should Not Be This Hard'/><title type='text'>Powershell problem</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;[See my follow up post &lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/03/sometimes-it-pays-to-go-old-school.html"&gt;here&lt;/a&gt;.]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;I got close, &lt;i&gt;&lt;b&gt;real&lt;/b&gt;&lt;/i&gt; close, to solving this. But I could never get past the last part, and after watching too many hours of my life tick by, I've put it aside.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Consider the following problem:&lt;/span&gt;&lt;br /&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;1) I have a program at&amp;nbsp;&lt;i&gt;F:\Program Files (x86)\Microsoft Office 2003 Developer Resources\Microsoft Office InfoPath 2003 SDK\Tools\pifix.exe&lt;/i&gt; that I want to run. Before we go any further, note spaces in path (not a problem, well-documented) and also the "(x86)". That ended up causing issues with at least one approach.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;2) I want to recurse through a directory tree, searching all &lt;i&gt;*.xml &lt;/i&gt;files for a specific string (in this case an XML processing instruction that points to a specific InfoPath form's published location). I have this working.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;b&gt;Note:&lt;/b&gt;&amp;nbsp;the XML files may have special characters in the paths and file names, including spaces, parentheses and ampersands. I do not control the naming of the files, so I must be able to handle all valid file names.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;3) For each file in which the string I am looking for is found, I want to invoke &lt;i&gt;pifix&lt;/i&gt;, passing it the following parameters:&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/URL&amp;nbsp;http://mysharepoint/SomeSite/SomeFormsLib/MyInfoPathForm.xsn&amp;nbsp;$_&lt;/span&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;...where "$_" contains the full path to the XML file found in step #2 (all of this is in a pipeline, obviously).&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;For step #3 I have tried &lt;i&gt;&amp;amp;&lt;/i&gt;, &lt;i&gt;Invoke-Expression&lt;/i&gt;, &lt;i&gt;Invoke-Command&lt;/i&gt; and &lt;i&gt;Start-Process. &lt;/i&gt;For the &lt;i&gt;Invoke-* &lt;/i&gt;commands I tried both calling&lt;i&gt; pifix&lt;/i&gt; via its full path directly and also that path prefixed with "cmd /c /s", with everything else on the command line being quoted correctly for that type of invocation.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;If I wanted to just dump all the generated command lines I want to invoke to a file and run that as a &lt;i&gt;.bat/.cmd&lt;/i&gt; file, I could - I have that working. I could even write it all out to that batch file and then invoke it from the Powershell script. But I want to invoke each one instead from within the pipeline, because why make this a two-step process?&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Each approach fails in its own way. No matter how I quote it (double or single) and no matter how many ` delimiters I surround all the special characters with, the invocations fail. The&lt;i&gt; Invoke-* &lt;/i&gt;versions mostly complaining about the "(x86)" in the program path. No matter how that is quoted\delimited, Powershell seems to be trying to interpret it as a sub-command. In addition, no matter how quoted/escaped, the ampersands in the target XML file names are also causing issues.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;I am probably closest by using the&lt;i&gt; Start-Process&lt;/i&gt; approach, except then I was struggling with getting the parameter array to be recognized correctly by &lt;i&gt;pifix.exe&lt;/i&gt; (the program is getting called, but acting like it isn't receiving the parms from the &lt;i&gt;-ArgumentList&lt;/i&gt; array). At about this point, eight hours in, I declared "F--- it."&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;I started this yesterday as yet another Powershell learning exercise, even though as you can now see, it really &lt;i&gt;&lt;b&gt;could&lt;/b&gt;&lt;/i&gt;&amp;nbsp;have been written in C# in about 20 minutes. I was willing to invest an hour or two ramping up on various things Powershell-y just as an investment. I spent three hours on it yesterday and gave up in frustration. Then this morning I thought, "I am &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; going to let this lick me - I am going to figure it out and then blog about it." But no, five hours later, it licked me all right. Especially since I was on the company clock (this &lt;i&gt;&lt;b&gt;is&lt;/b&gt;&lt;/i&gt; for work), but we're probably not going to end up needing the script anyway, as things have turned out. So instead I get to blog about failing, and being frustrated by PS yet again.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;This has pretty much soured me on ever trying Powershell again, other than when I am absolutely &lt;i&gt;&lt;b&gt;forced &lt;/b&gt;&lt;/i&gt;to (SharePoint 2010 admin, etc.) and then it will be the minimum I have to use it, after exhausting all other possibilities f&lt;span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;irst&amp;nbsp;&lt;/span&gt;(&lt;i&gt;.bat/.cmd,&amp;nbsp;&lt;/i&gt;managed code, etc.) It just seems to me like PS was written to jump out and yell, "Gotcha!" at every turn. It does &lt;i&gt;&lt;b&gt;not&lt;/b&gt;&lt;/i&gt; make my job easier.&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;At his request I have sent the above details to my Twitter friend and SharePoint guru Raymond Mitchell (&lt;a href="https://twitter.com/#!/iwkid"&gt;@iwkid&lt;/a&gt;). I will be interested to see his approach, and will follow up with a link to it here if he succeeds (I suspect he will).&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;"&gt;Comments appreciated...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-2608547165924653088?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/2608547165924653088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=2608547165924653088&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/2608547165924653088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/2608547165924653088'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/03/powershell-problem.html' title='Powershell problem'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-68214368657252786</id><published>2011-02-23T15:01:00.000-06:00</published><updated>2011-02-23T15:01:31.489-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='User Experience'/><category scheme='http://www.blogger.com/atom/ns#' term='Ribbon'/><category scheme='http://www.blogger.com/atom/ns#' term='UX'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu'/><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><title type='text'>Your UX sux</title><content type='html'>In a recent class the instructor asked, "Who likes the [Office] ribbon?" And then she asked, "Who doesn't like the ribbon?" After I and a handful of others raised our hands for the latter, the response was, "You'd better get used to it!" Well, duh. I have been eating that particular brand of dog food since Office 2007 was in beta, and I grimly have &lt;a href="http://www.ubit.ch/software/ubitmenu-languages/"&gt;avoided any add-ons&lt;/a&gt; that would allow me to continue to soak in the comfort of the old familiar menus. I know the ribbon is here to stay, and its use is growing, with it now in SharePoint 2010 and coming in Dynamics CRM 2011 (thank you, Visual Studio, for remaining ribbon unencumbered). My response about not liking the ribbon is not some reactionary Luddite response of "Change is bad!" Instead, it is taken from years of experience using the ribbon, and yet continuing to bump up against its main failing as a user interface...And that is:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;&lt;b&gt;Icons and text on the ribbon change position, size and even visibility based on the size of the application window.&lt;/b&gt;&lt;/i&gt;&lt;/blockquote&gt;Now, at first glance that seems reasonable, even logical. I can just hear the designers talking it over in their Redmond redoubt: "Well, &lt;b&gt;&lt;i&gt;of course &lt;/i&gt;&lt;/b&gt;as the windows gets smaller we need to change the layout to continue to expose as many controls to the user as possible." &amp;nbsp;But that leads to the following phenomenon - tell me if this has happened to you. You resize a ribboned app, and then the next time you need to use something off the ribbon you end up frantically searching for it, vainly trying to find it because it's moved and changed size, or possibly even &lt;i&gt;&lt;b&gt;disappeared&lt;/b&gt;&lt;/i&gt;. It becomes "hunt and click" instead of "hunt and peck."&lt;br /&gt;&lt;br /&gt;I put it to you that most of us rely heavily on sense memory when working with the applications we use daily. For some of us that sense memory is keyboard shortcuts (but they've taken quite a few of those away with the ribbon now, too). For others, it is visual memory - a reflexive understanding that "the option I want is approximately this far from the left and this far from the top." Menus actually worked pretty good for that, because after a while your&amp;nbsp;subconscious&amp;nbsp;grew to "know" where the option you were looking for was just in terms of general location - "Third menu from the left, fourth line down."&lt;br /&gt;&lt;br /&gt;After all, it's a &lt;i&gt;&lt;b&gt;graphical&lt;/b&gt;&lt;/i&gt; user interface, and the whole point of the graphics is to make it&lt;i&gt;&lt;b&gt; visually&lt;/b&gt;&lt;/i&gt; easier to &lt;i&gt;&lt;b&gt;comprehend and navigate&lt;/b&gt;&lt;/i&gt;. But that only works if the scenery doesn't keep shifting, so that we can do that navigation subconsciously while concentrating on the larger task at hand, as opposed to having to stop in the middle of our flow and wonder, "Now where the &lt;i&gt;&lt;b&gt;heck&lt;/b&gt;&lt;/i&gt; did that option go to? It was right &lt;i&gt;&lt;b&gt;here&lt;/b&gt;&lt;/i&gt; a moment ago!" But, of course, a moment ago you &lt;a href="http://windows.microsoft.com/en-US/windows7/Keyboard-shortcuts"&gt;Windows-key+arrow'ed&lt;/a&gt; the app to one side of the screen so you could see something else while you work on your ultra-wide HD monitor, instead of taking it all up with a single, full-screened app, which would be stupid given all that extra screen real estate, right? Right?&lt;br /&gt;&lt;br /&gt;The ribbon's constant fluidity throws any repeatability right out the window. If you resize apps while you work, or if you work on multiple machines with different monitor sizes, or if you remote into servers or VMs with the viewport in different resolutions, you are going to end up hunting and clicking all the time on any ribbon-based app. It is &lt;i&gt;&lt;b&gt;inevitable&lt;/b&gt;&lt;/i&gt;. It will&amp;nbsp;&lt;i&gt;&lt;b&gt;never&lt;/b&gt;&lt;/i&gt; become intuitive reflex. For example, here is an example from Word. First, part of the &lt;i&gt;Page Layout&lt;/i&gt; tab on the ribbon when Word is full-screened:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UbXXOXrQh1I/TWVqCIRYQNI/AAAAAAAAIVg/LH36_qW7yiM/s1600/WordFullPage.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-UbXXOXrQh1I/TWVqCIRYQNI/AAAAAAAAIVg/LH36_qW7yiM/s1600/WordFullPage.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And then the same tab with the window resized:&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/--lTPi1RB8TQ/TWVqET-mJaI/AAAAAAAAIVk/pdVYCUPbbXI/s1600/WordPartialPage.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--lTPi1RB8TQ/TWVqET-mJaI/AAAAAAAAIVk/pdVYCUPbbXI/s1600/WordPartialPage.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Not only did many of the icons change size and location, but some of the descriptive text &lt;i&gt;&lt;b&gt;completely disappeared&lt;/b&gt;&lt;/i&gt; (and I don't know about you, but that icon for "Effects" doesn't scream out "effects" to me in such a way that I'll ever remember it without the word "Effects" next to it).&lt;br /&gt;&lt;br /&gt;A similar phenomenon has happened to Control Panel, where they've even taken away the old Detail view from Windows 7 and Windows 2008R2 so now all you get are&amp;nbsp;large or small&amp;nbsp;icons in a left-to-right order, and they also flow based on window size:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-t9vxDaO2IQE/TWVuJQTHppI/AAAAAAAAIVo/BzVoN43QsBU/s1600/ControlPanelSkinny.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/-t9vxDaO2IQE/TWVuJQTHppI/AAAAAAAAIVo/BzVoN43QsBU/s640/ControlPanelSkinny.JPG" width="448" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3wIxe81uSEc/TWVuKjkuQLI/AAAAAAAAIVs/w9yNcJuV39w/s1600/ControlPanelWide.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="378" src="http://2.bp.blogspot.com/-3wIxe81uSEc/TWVuKjkuQLI/AAAAAAAAIVs/w9yNcJuV39w/s640/ControlPanelWide.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Every time I go to Control Panel I have to re-find &lt;i&gt;Programs and Features&lt;/i&gt;. Whereas with the old detailed view it was always the &lt;i&gt;x-&lt;/i&gt;th row down from the top, period.&lt;br /&gt;&lt;br /&gt;And just to show I am not just bashing on Microsoft, here is the trivial example using Google Chrome's new application home page. If you use Chrome on multiple machines, unless you are &lt;i&gt;&lt;b&gt;very careful&lt;/b&gt;&lt;/i&gt;&amp;nbsp;about installing all the same apps in the same order, your app home page has the icons laid out differently on each machine you use, with no way to alter the layout or sync between machines:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-uE3vcohUiB4/TWVvAyLIbXI/AAAAAAAAIV8/j2Js1ozZ62g/s1600/GoogleChromeAppsHomePage.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://3.bp.blogspot.com/-uE3vcohUiB4/TWVvAyLIbXI/AAAAAAAAIV8/j2Js1ozZ62g/s640/GoogleChromeAppsHomePage.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;But back to the ribbon. I've heard it said that Microsoft spent a lot of time and money studying the user experience (UX) of Office and came up with the ribbon. But I have to believe that while they may have studied the old menu system in depth and noted its weaknesses, they &lt;i&gt;&lt;b&gt;could not&lt;/b&gt;&lt;/i&gt; have as extensively tested the new ribbon, because it would have quickly become apparent that with its ever-shifting presentation of options it is just as slow, or slower, to find functionality. Especially for power users. Especially after also limiting the keyboard shortcuts (since many of the old &lt;i&gt;Alt-&amp;lt;menu&amp;gt; &lt;/i&gt;shortcuts no longer work). And just to keep this rant short, I won't even get into how it keeps switching tabs on you when you are in the middle of trying to do repetitive work (like inserting a series of pictures), nor how much valuable vertical screen real estate the ribbon takes. We'll leave those for another time.&lt;br /&gt;&lt;br /&gt;So yes, I use the ribbon. And yes, I know it's here to stay. And yes, I &lt;i&gt;&lt;b&gt;am&lt;/b&gt;&lt;/i&gt; "used to it." But that haughty answer doesn't mean the ribbon is better - in fact, I believe it is far, far worse. Not from an aesthetics sense - from a strict &lt;i&gt;&lt;b&gt;usability&lt;/b&gt;&lt;/i&gt; sense, which was supposedly the excuse for going to the ribbon in the first place.&lt;br /&gt;&lt;br /&gt;Here's to hoping I live long enough to see something, anything, replace it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-68214368657252786?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/68214368657252786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=68214368657252786&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/68214368657252786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/68214368657252786'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/02/your-ux-sux.html' title='Your UX sux'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-UbXXOXrQh1I/TWVqCIRYQNI/AAAAAAAAIVg/LH36_qW7yiM/s72-c/WordFullPage.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-786398038525908446</id><published>2011-02-17T20:16:00.000-06:00</published><updated>2011-02-17T20:16:37.359-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Taskbar'/><category scheme='http://www.blogger.com/atom/ns#' term='Resource Meter'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><title type='text'>Using Windows 7 taskbar's icon progress bar as resource meter</title><content type='html'>This past Tuesday I attended a one-day &lt;a href="http://windowsdevbootcamp.com/"&gt;Windows 7 developer "boot camp"&lt;/a&gt; put on by Microsoft in St. Louis. It was taught by &lt;a href="http://twitter.com/#!/jennifermarsman"&gt;Jennifer Marsman&lt;/a&gt;, who I'd seen present last year at the &lt;a href="http://www.stlouisdayofdotnet.com/"&gt;St. Louis Day of .NET&lt;/a&gt;. She's excellent, and "runs at a very high clock rate," as I like to say.&lt;br /&gt;&lt;br /&gt;Anyway, while learning about all the chewy goodness of the Win7 taskbar (pinning, context-sensitive menus, etc.) one of the things we got to play with was the ability to show a "progress bar" on a program's taskbar icon. The idea is that you can start something like a download, say, and then switch focus to another app and work while still watching the progress of the download as the icon's background changes color from left to right until it's reached 100%, and then you know your download's done (you can also make the icon blink&amp;nbsp;programmatically&amp;nbsp;to boot - &lt;i&gt;&lt;b&gt;almost&lt;/b&gt;&lt;/i&gt; as annoying as the jumping icons on the OS X dock...but I digress).&lt;br /&gt;&lt;br /&gt;Anyway, it hit me while looking at the API that there's no reason the "progress" has to be 0-100%, continuously moving from left-to-right. You can call the method that sets it with numbers that bounce around within a given range and it will adjust back and forth accordingly. Which sounds like a good idea for an unobtrusive resource meter. Even better, there are three colors available - green (for "normal" progress), yellow (which is supposed to mean "paused") and red ("error"). Those three colors can be re-purposed for resource utilization being within three different ranges - low, medium and high. I then wrote a program in class that demonstrated just that and had it working fairly quickly. I have now cleaned it up and present it here for your viewing pleasure.&lt;br /&gt;&lt;br /&gt;The following is a &lt;i&gt;&lt;b&gt;simple&lt;/b&gt;&lt;/i&gt; WPF app - so simple that the only window has nothing in it and runs minimized (because all we're really interested in is the taskbar icon changing state anyway). It runs for a hardcoded amount of time and then exits. While it is running it periodically takes an average of CPU utilization and displays it as the icon's progress bar. In addition, it changes color - green means overall CPU utilization is below 50%, yellow means it's between 50%-75%, and red means it's above 75%.&lt;br /&gt;&lt;br /&gt;As a server guy I make no claims to having mad WPF skillz, but I think as a sample it serves the purpose with little extraneous code to get in the way. The source code follows, and then at the end is a short video showing it in action.&lt;br /&gt;&lt;br /&gt;Here is the &lt;i&gt;App.xaml&lt;/i&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 8pt;"&gt;Application&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;x&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;:&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 8pt;"&gt;Class&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;="W7TaskbarCPUMonitor.App"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: red;"&gt;&amp;nbsp;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: red;"&gt;&amp;nbsp;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: red;"&gt;&amp;nbsp;StartupUri&lt;/span&gt;&lt;span style="color: blue;"&gt;="MainWindow.xaml"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 8pt;"&gt;Application&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here is the &lt;i&gt;App.xaml.cs&lt;/i&gt; code behind:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;System.Windows;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;namespace&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;W7TaskbarCPUMonitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;partial&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;App&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Application&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;App() { }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Application_Startup(&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StartupEventArgs&lt;/span&gt;&amp;nbsp;e)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: green;"&gt;// Start the main window.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MainWindow.Show();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There is pretty much nothing of interest in either of them, just a bare bones wiring up of a WPF application. Then there is the&lt;i&gt; MainWindow.xaml&lt;/i&gt;:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 8pt;"&gt;Window&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;x&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;:&lt;/span&gt;&lt;span style="color: red; font-family: Consolas; font-size: 8pt;"&gt;Class&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;="W7TaskbarCPUMonitor.MainWindow"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;Title&lt;/span&gt;&lt;span style="color: blue;"&gt;="MainWindow"&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Height&lt;/span&gt;&lt;span style="color: blue;"&gt;="350"&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="525"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 8pt;"&gt;Window&lt;/span&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Again, nothing special - in fact, nothing at all. Finally there is &lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;, which does the "heavy lifting":&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;System;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;System.Management;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;System.Threading;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;System.Windows;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;using&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;Microsoft.WindowsAPICodePack.Taskbar;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 8pt;"&gt;namespace&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;W7TaskbarCPUMonitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;partial&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;MainWindow&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Window&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;MainWindow()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Loaded +=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RoutedEventHandler&lt;/span&gt;(MainWindow_Loaded);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: green;"&gt;// We're here to see the taskbar icon, not the window.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WindowState = System.Windows.&lt;span style="color: #2b91af;"&gt;WindowState&lt;/span&gt;.Minimized;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: #2b91af;"&gt;TaskbarManager&lt;/span&gt;.Instance.ApplicationId =&amp;nbsp;&lt;span style="color: #a31515;"&gt;"W7TaskbarCPUMonitor"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// Show CPU load as taskbar icon "progress" bar.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;MainWindow_Loaded(&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt;&amp;nbsp;e)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;ShowInTaskbar =&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Title =&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TaskbarManager&lt;/span&gt;.Instance.ApplicationId;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;cpuLoad = 0;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: green;"&gt;// Adjust upper limit of loop to control time the app runs.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;i = 0; i &amp;lt; 10; i++)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;cpuLoad = GetCPULoadPctAvg();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: #2b91af;"&gt;TaskbarManager&lt;/span&gt;.Instance.SetProgressValue(cpuLoad, 100);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(cpuLoad &amp;lt;= 50)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: green;"&gt;// "Normal" progress bar state is green.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: #2b91af;"&gt;TaskbarManager&lt;/span&gt;.Instance.SetProgressState(&lt;span style="color: #2b91af;"&gt;TaskbarProgressBarState&lt;/span&gt;.Normal);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: blue;"&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(cpuLoad &amp;gt; 50 &amp;amp;&amp;amp; cpuLoad &amp;lt;= 75)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: green;"&gt;// "Paused" progress bar state is yellow.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: #2b91af;"&gt;TaskbarManager&lt;/span&gt;.Instance.SetProgressState(&lt;span style="color: #2b91af;"&gt;TaskbarProgressBarState&lt;/span&gt;.Paused);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: blue;"&gt;else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: green;"&gt;// "Error" progress bar state is red.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: #2b91af;"&gt;TaskbarManager&lt;/span&gt;.Instance.SetProgressState(&lt;span style="color: #2b91af;"&gt;TaskbarProgressBarState&lt;/span&gt;.Error);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: green;"&gt;// Wait a bit before collecting CPU load again.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 style="color: #2b91af;"&gt;Thread&lt;/span&gt;.Sleep(250);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: green;"&gt;// Goodbye.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: #2b91af;"&gt;App&lt;/span&gt;.Current.Shutdown();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;// Cheap and only marginally accurate way of getting combined CPU load.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;GetCPULoadPctAvg()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;cpuCount = 0;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;totalLoadPercentages = 0;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;mc =&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ManagementClass&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Win32_Processor"&lt;/span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;var&lt;/span&gt;&amp;nbsp;mObjects = mc.GetInstances();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;ManagementObject&lt;/span&gt;&amp;nbsp;mo&amp;nbsp;&lt;span style="color: blue;"&gt;in&lt;/span&gt;&amp;nbsp;mObjects)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cpuCount++;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; totalLoadPercentages += (&lt;span style="color: #2b91af;"&gt;UInt16&lt;/span&gt;)mo.Properties[&lt;span style="color: #a31515;"&gt;"LoadPercentage"&lt;/span&gt;].Value;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&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 style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;totalLoadPercentages / cpuCount;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="font-family: Calibri, sans-serif; font-size: 11pt; line-height: normal; margin-bottom: 0.0001pt; margin-left: 0in; margin-right: 0in; margin-top: 0in;"&gt;&lt;span style="font-family: Consolas; font-size: 8pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The above code requires the &lt;a href="http://archive.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack for .NET&lt;/a&gt;&amp;nbsp;to access the taskbar functionality. Other than that it is using pretty straightforward .NET APIs to get the CPU load in a loop, sleeping between each measurement. The comments in the code above should be self-explanatory. It's about as simple an example of measuring something "real world" and using the icon's progress meter that I could come up with.&lt;br /&gt;&lt;br /&gt;Finally, here is a video of it at work. Watch the newly-launched icon on the taskbar (on the right) change color and its graph move as I launch other programs to put a load on the CPU (you may want to watch it in full screen mode). I also ran Task Manager at the same time so that you can compare the two.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-99a67cc0f8a7eaeb" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v17.nonxt7.googlevideo.com/videoplayback?id%3D99a67cc0f8a7eaeb%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329854572%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1A2E7810942B152A00FA2EB05B9BF1A04D26FE38.694D0B0F3D490EF6A30CC74C79CA834DCA0878AC%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D99a67cc0f8a7eaeb%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dom2kPtWYD_VtE4QBpZL9fEblxSQ&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v17.nonxt7.googlevideo.com/videoplayback?id%3D99a67cc0f8a7eaeb%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1329854572%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1A2E7810942B152A00FA2EB05B9BF1A04D26FE38.694D0B0F3D490EF6A30CC74C79CA834DCA0878AC%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D99a67cc0f8a7eaeb%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dom2kPtWYD_VtE4QBpZL9fEblxSQ&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;I hope you found this interesting and helpful. If so, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-786398038525908446?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/786398038525908446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=786398038525908446&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/786398038525908446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/786398038525908446'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/02/using-windows-7-taskbars-icon-progress.html' title='Using Windows 7 taskbar&apos;s icon progress bar as resource meter'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-4757998578660976518</id><published>2011-02-07T05:00:00.011-06:00</published><updated>2011-02-07T05:00:16.769-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Overclocking'/><category scheme='http://www.blogger.com/atom/ns#' term='DIY'/><category scheme='http://www.blogger.com/atom/ns#' term='UCC'/><category scheme='http://www.blogger.com/atom/ns#' term='SSD'/><category scheme='http://www.blogger.com/atom/ns#' term='AMD'/><category scheme='http://www.blogger.com/atom/ns#' term='Phenom II'/><title type='text'>It's alive!</title><content type='html'>Well, I built my new machine (&lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/02/dreams-of-new-machine.html"&gt;specs here&lt;/a&gt;) over the weekend, and I have to say I am pretty happy with it. You can look at a slideshow of it below. The thing that really lived up to my expectations was&amp;nbsp;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227593"&gt;the SSD&lt;/a&gt;. I first installed Ubuntu on it and it showed the SSD getting very close to its rated 285MBs read speeds (it's also rated 275MBs for writes!) Then I put on Windows 7 Ultimate 64-bit (less than 10 minutes to install, including two reboots) and the Windows Experience Index showed a 7.8 out of 7.9 for the drive (7.5 for memory and 7.2 for CPU - also very decent). It boots Windows to the login prompt in about 15 seconds after it gets done with the POST processing.&lt;br /&gt;&lt;br /&gt;Since bringing it up I have added two 200GB 7200RPM drives from my old machine which have all my data on them. I am in the process of double and triple-checking my backups for those drives, and then I may configure them into a RAID 0 setup to increase I/O speed to the mechanical drives. Still won't be up to the same speed as the main drive, but it should help.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813157192"&gt;The motherboard&lt;/a&gt; is set up for hard core overclocking. After having to clear the CMOS four times to get it to boot after various O/C tweakings I've decided &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819103824"&gt;2.8GHz on four cores&lt;/a&gt; is good enough for me! Especially since the one thing I was able to successfully do with the board is unlock the L3 cache and take it from 4MB to 6MB with a single setting thanks to the &lt;a href="http://www.asrock.com/feature/ucc/index.asp?cat=Introduction"&gt;UCC (unlock CPU core)&lt;/a&gt; technology in the BIOS. At least one friend has pointed out that alone may end up doing more good than any amount of overclocking. Beats me why AMD ships chips with L3 locked down if the motherboards can just turn around and unlock it.&lt;br /&gt;&lt;br /&gt;Here are some pics:&lt;br /&gt;&lt;br /&gt;&lt;embed flashvars="host=picasaweb.google.com&amp;amp;captions=1&amp;amp;hl=en_US&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjim.lehmer%2Falbumid%2F5570730788650260961%3Falt%3Drss%26kind%3Dphoto%26authkey%3DGv1sRgCIWY-dvZ4t6PpwE%26hl%3Den_US" height="533" pluginspage="http://www.macromedia.com/go/getflashplayer" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" type="application/x-shockwave-flash" width="800"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-4757998578660976518?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/4757998578660976518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=4757998578660976518&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4757998578660976518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/4757998578660976518'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/02/its-alive.html' title='It&apos;s alive!'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-8725324502202732784</id><published>2011-02-06T07:17:00.000-06:00</published><updated>2011-02-06T07:17:35.781-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Click'/><category scheme='http://www.blogger.com/atom/ns#' term='Hard Drive'/><category scheme='http://www.blogger.com/atom/ns#' term='Clicking'/><category scheme='http://www.blogger.com/atom/ns#' term='AHCI'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Power Management'/><category scheme='http://www.blogger.com/atom/ns#' term='SATA'/><title type='text'>A click, er, quick post about hard drives and Windows 7 power settings</title><content type='html'>I recently built a &lt;a href="http://ednortonengineeringsociety.blogspot.com/2011/02/dreams-of-new-machine.html"&gt;new computer&lt;/a&gt; for myself (more on that coming in a bit). The C: drive is a &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227593"&gt;blazingly fast SSD&lt;/a&gt;. I got the machine assembled and after playing a bit with Ubuntu on it ended up installing Windows 7 Ultimate 64-bit (I already have a decent Ubuntu box). Then I moved two data drives from my old Windows 7 machine over to the new one. They are identical Western Digital Caviar SE WD2000 (200GB) drives. Not big by today's 2TB drive standards, but for now they will be enough (by definition, since they hold all the data I have right now).&lt;br /&gt;&lt;br /&gt;When I rebooted the machine I noticed that the two mechanical hard drives I migrated over kept making clicking noises - a lot of them. Now, we all know that clicking noises from hard drives are &lt;i&gt;&lt;b&gt;bad&lt;/b&gt;&lt;/i&gt;, and usually denote the impending doom of drive failure. But the drives seemed to be working fine, if a bit slow. I wondered if it was because of some incompatibility from them coming from a machine with &lt;a href="http://en.wikipedia.org/wiki/Serial_ATA#SATA_Revision_1.0_.28SATA_1.5_Gbit.2Fs.29"&gt;SATA 1.0&lt;/a&gt; in IDE emulation mode and now being connected to a &lt;a href="http://en.wikipedia.org/wiki/Serial_ATA#SATA_Revision_3.0_.28SATA_6_Gbit.2Fs.29"&gt;SATA 3.0&lt;/a&gt; &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813157192"&gt;motherboard&lt;/a&gt; configured for &lt;a href="http://en.wikipedia.org/wiki/Serial_ATA#Advanced_Host_Controller_Interface"&gt;AHCI&lt;/a&gt;, but that didn't seem to be it. I also researched jumper settings for the drives to no avail.&lt;br /&gt;&lt;br /&gt;Then I opened the case and listened closely while the drives were busy copying files to a backup device. And what I heard was for each file it sounded like the drive would spin up, copy the file, then spin down and &lt;i&gt;&lt;b&gt;&amp;lt;click&amp;gt;&lt;/b&gt;&lt;/i&gt;. Over and over. Spin up, work a second, spin down, click. And that got me thinking about power management.&lt;br /&gt;&lt;br /&gt;I went and checked Power Options in Control Panel and it was set for "Balanced" mode. I changed it to "High performance" (which was the same setting as my original Windows 7 box) and the &lt;i&gt;&lt;b&gt;second&lt;/b&gt;&lt;/i&gt; I saved changes the clicking noise stopped (I know, because it was still in the middle of copying files).&lt;br /&gt;&lt;br /&gt;Now, the weird thing is that both the balanced and high performance modes have "Hard disk|Turn off hard disk after|Setting:" configured for 20 minutes. So it can't be that. But there must be something else (I couldn't discover what) in selecting for high performance that keeps the drive from constantly spinning down. I thought I would blog about it just in case others have the same issue and stumble across this post while googling, it will give them something to try before they despair about their hard disk failing. If it helps you, let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-8725324502202732784?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/8725324502202732784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=8725324502202732784&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/8725324502202732784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/8725324502202732784'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/02/click-er-quick-post-about-hard-drives.html' title='A click, er, quick post about hard drives and Windows 7 power settings'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-2795811522850613024</id><published>2011-02-01T09:00:00.000-06:00</published><updated>2011-02-01T09:00:36.489-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Kits'/><title type='text'>Dreams of the new machine</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I decided a week or so ago it was time to upgrade my home machine. It has been acting up for a while now, and besides, it's a bit "dated" in terms of specs and can barely limp along under Windows 7. How dated? How 'bout a single core AMD processor and 1GB of RAM?&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;What got me thinking was this (now unavailable) &lt;a href="http://www.tigerdirect.com/applications/SearchTools/item-details.asp?EdpNo=7200558"&gt;"bare bones" kit from TigerDirect&lt;/a&gt;. A (slow) quad core processor, 2GB of RAM and everything else needed to build a "decent" box for $199 was an eye opener. So then I started seriously shopping, obsessively comparing prices of various components between TigerDirect and &lt;a href="http://www.newegg.com/"&gt;NewEgg&lt;/a&gt;. Somewhere in there I decided this time I wasn't going to settle but instead would build a box that should satisfy me for a while and also be somewhat "future-proof" (an oxymoron in computers). Because we're not rich, and because I'm not an unmarried gamer still living in my parents' basement, I set an upward limit of $600 on my budget. That doesn't sound like much at a time when you can pay &lt;a href="http://www.newegg.com/Store/SubCategory.aspx?SubCategory=48&amp;amp;name=Desktop-Graphics-Video-Cards"&gt;almost $1,000 for a "desktop" video adapter&lt;/a&gt; alone and &lt;a href="http://www.newegg.com/Store/SubCategory.aspx?SubCategory=449&amp;amp;name=Workstation-Graphics-Video-Cards&amp;amp;Order=PRICED"&gt;$3,800 for a "workstation" adapter&lt;/a&gt;. But it was going to have to work for me.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Here is what I ended up ordering from NewEgg:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="border-collapse: collapse;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;table border="2px" cellspacing="2px" rules="all" style="padding: 2px; vertical-align: top;"&gt;&lt;thead&gt;&lt;tr&gt; &lt;th&gt;Component&lt;/th&gt; &lt;th&gt;Price&lt;/th&gt; &lt;th&gt;Notes&lt;/th&gt; &lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16819103824"&gt;AMD Phenom II 2.8GHz 4-core CPU +&amp;nbsp;fan/heat sink&lt;/a&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: right;"&gt;$100&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;I am hoping I can O/C this to at least 3GHz.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16813157192"&gt;AM3 motherboard with SATA 6Gb/s, USB 3.0, 10/100/1000, over-clocking support&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;$95&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;The SATA 6Gbs and USB 3 plus the nice O/C support are what pushed me to this board.&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820231424"&gt;8GB DDR3 1333MHz memory&lt;/a&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: right;"&gt;$65&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;My friend Tom has 24Gb, but for a personal machine I think 8Gb will be fine for my needs. :)&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16820227593"&gt;120GB SATA II SSD&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;$205&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;With a $20 rebate - and 285Mbs-read/275Mbs-write specs!&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16814187119"&gt;GeForce 8400 GS 1Gb 64-bit DDR3 PCI Express 2.0 video card&lt;/a&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: right;"&gt;$45&lt;/div&gt;&lt;/td&gt; &lt;td&gt;Like I said, I'm not a gamer!&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16827118039"&gt;DVD R/W drive&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;$17&lt;/div&gt;&lt;/td&gt; &lt;td&gt;And yes, I didn't get Blu-Ray, so don't even ask! :)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811147082"&gt;Case and power supply&lt;/a&gt;&lt;/span&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: right;"&gt;$55&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;The one place I didn't get&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;&lt;a href="http://www.tigerdirect.com/applications/SearchTools/item-details.asp?EdpNo=7171640&amp;amp;CatId=32"&gt;precisely what I wanted&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;"&gt;, because I was trying to limit it to one supplier, and the other case and PS would have pushed me over $600&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;div style="text-align: right;"&gt;$584&lt;/div&gt;&lt;/td&gt;&lt;td&gt;$597 + $7 S&amp;amp;H = $604 - $20 rebate = $584&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I don't think I did too bad. :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Now I am just impatiently waiting for everything to arrive. The case has made it here but everything else is still in transit, and we're at the start of a "historic" snow storm so I doubt it's all going to get here until later in the week. Ah, well. I'll have something to do (and blog about) this weekend.&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/8097161623390486264-2795811522850613024?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/2795811522850613024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=2795811522850613024&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/2795811522850613024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/2795811522850613024'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2011/02/dreams-of-new-machine.html' title='Dreams of the new machine'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-660211388030099485</id><published>2010-12-17T06:56:00.000-06:00</published><updated>2010-12-17T06:56:14.752-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Consulting'/><title type='text'>Scenes from my past lives, part one</title><content type='html'>Some scenes from my past life as a software consultant. While they did not all happen in one place, and while some of it is a LITTLE exaggerated, I swear most of it is true! Or true enough. :)&lt;br /&gt;&lt;br /&gt;&lt;object height="390" width="480"&gt;&lt;param name="movie" value="http://www.xtranormal.com/site_media/players/jwplayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;param name="flashvars"value="height=390&amp;width=480&amp;file=http://newvideos.xtranormal.com/web_final_lo/ff2b818c-0986-11e0-8549-003048d69c21_4.mp4&amp;image=http://newvideos.xtranormal.com/web_final_lo/ff2b818c-0986-11e0-8549-003048d69c21_4.jpg&amp;link=http://www.xtranormal.com/watch/8112979&amp;searchbar=false&amp;autostart=false"/&gt;&lt;embed src="http://www.xtranormal.com/site_media/players/jwplayer.swf" width="480" height="390" allowscriptaccess="always" allowfullscreen="true" flashvars="height=390&amp;width=480&amp;file=http://newvideos.xtranormal.com/web_final_lo/ff2b818c-0986-11e0-8549-003048d69c21_4.mp4&amp;image=http://newvideos.xtranormal.com/web_final_lo/ff2b818c-0986-11e0-8549-003048d69c21_4.jpg&amp;link=http://www.xtranormal.com/watch/8112979&amp;searchbar=false&amp;autostart=false"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;object height="390" width="480"&gt;&lt;param name="movie" value="http://www.xtranormal.com/site_media/players/embedded-xnl-stats.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.xtranormal.com/site_media/players/embedded-xnl-stats.swf" width="1" height="1" allowscriptaccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-660211388030099485?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/660211388030099485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=660211388030099485&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/660211388030099485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/660211388030099485'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2010/12/scenes-from-my-past-lives-part-one.html' title='Scenes from my past lives, part one'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-1928267410975885630</id><published>2010-12-11T16:16:00.000-06:00</published><updated>2010-12-11T16:16:55.034-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>Better living through user stylesheets</title><content type='html'>Most modern browsers support user stylesheets, i.e., stylesheets that are written by the user, deployed in the browser and treated as the last part of the style "cascade." User stylesheets allow for overriding individual web sites' styles at the local level for such things as &lt;a href="http://en.wikipedia.org/wiki/Accessibility"&gt;accessibility&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;They also allow us to quite quickly get rid of annoying things from web sites we visit all the time, without having to install a browser extension (how do you &lt;i&gt;&lt;b&gt;&lt;u&gt;know&lt;/u&gt;&lt;/b&gt;&lt;/i&gt; who wrote your ad blocking extension and what they're doing with the browser access you've granted their app?) In my case, the annoying things I wanted rid of were the sad puppy-dog-eyes faces at the top of &lt;a href="http://en.wikipedia.org/wiki/Main_Page"&gt;Wikipedia&lt;/a&gt; pleading for more money. That campaign's been going on forever now, it seems - even public radio and TV get the point and only shake us down twice a year for a week at a time.&lt;br /&gt;&lt;br /&gt;Anyway, I wanted rid of that annoyance, so with a bit of sleuthing I determined what tags were holding the problematic content and quickly came up with some CSS to hide it. Dropping that CSS into the user stylesheet in the right magic location immediately rid the all pages of the ad and Wiki was back to looking like its old self again.&lt;br /&gt;&lt;br /&gt;If you have even a slightly technical bent, you can benefit from this, too. The following instructions presume Chrome as the browser, but &lt;a href="http://webdesign.about.com/od/userstylesheets/a/aa010906.htm"&gt;this article&lt;/a&gt; tells you the locations and CSS files to use if you are using other browsers - the stylesheet file content should remain the same.&lt;br /&gt;&lt;br /&gt;For Chrome, you need to find the &lt;i&gt;Custom.css&lt;/i&gt; file. On Windows Vista/7/2008, it is located at the following (replace &lt;i&gt;&amp;lt;your-userid&amp;gt;&lt;/i&gt; with, ahem, your user id):&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;C:\Users\&amp;lt;your-userid&amp;gt;\AppData\Local\Google\Chrome\User Data\Default\User StyleSheets\&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;[Presumably on Windows XP it will be under &lt;i&gt;C:\Documents and Settings\&amp;lt;your-userid&amp;gt; &lt;/i&gt;in a similar location.]&lt;br /&gt;&lt;br /&gt;For Mac OS X, it is at:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;~/Library/Application Support/Google/Chrome/Default/User StyleSheets/&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;On Ubuntu Linux it is found here:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;~/.config/google-chrome/Default/User StyleSheets&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In all three locations you should find a file called &lt;i&gt;Custom.css&lt;/i&gt;. Open this file for editing (Notepad is handy on Windows, otherwise use the editor of your choice). It will probably be empty. Inside the file, place the following line (letter case is important!):&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#siteNotice { display: none; }&lt;/span&gt;&lt;/blockquote&gt;Save the file. Navigate Chrome to Wikipedia and you should no longer see the &lt;strike&gt;shakedown&lt;/strike&gt; pleading banner!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Caveats:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You will never see any other site announcements from Wiki, either, as long as they continue to use the &lt;i&gt;siteNotice&lt;/i&gt; tag id for the &lt;i&gt;div&lt;/i&gt; they wrap site announcements in.&lt;/li&gt;&lt;li&gt;If any other site you visit happens to use an &lt;i&gt;id&lt;/i&gt; attribute on an element and call it "siteNotice," you won't see that content either.&lt;/li&gt;&lt;/ol&gt;I consider both of the above a small price to pay to not have to look at &lt;a href="http://en.wikipedia.org/wiki/Jimmy_Wales"&gt;Jimmy Wales&lt;/a&gt; again when all I'm interested in is the &lt;a href="http://en.wikipedia.org/wiki/Tirane"&gt;capital of Albania&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-1928267410975885630?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/1928267410975885630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=1928267410975885630&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1928267410975885630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/1928267410975885630'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2010/12/better-living-through-user-stylesheets.html' title='Better living through user stylesheets'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-9220888250939758722</id><published>2010-11-04T13:06:00.000-05:00</published><updated>2010-11-04T13:06:01.971-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Generators'/><title type='text'>Static web generators - you're soaking in it</title><content type='html'>[This post is going to seem like a "Well, duh!" realization to most, I'm sure (and if you've read my blog long enough, you'll know it's full of those), but for me it was a bit of an epiphany - that by slightly changing my idea of what I wanted to do I realized I already had it all in place. Maybe it will help someone else think outside the box a bit, too.]&lt;br /&gt;&lt;br /&gt;Recently, for reasons of my own, I went through a search for a static web generator tool. There are certainly &lt;a href="http://www.google.com/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=static+web+generators"&gt;plenty&lt;/a&gt; &lt;a href="http://stackoverflow.com/questions/186290/best-static-website-generator"&gt;out there&lt;/a&gt;. But none of them really satisfied me. So I started thinking about why that was and came up with two related reasons:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Almost all of them are written in a "server-side" language such as PHP, Python, Ruby, etc., so if you want to extend the generator framework or do scripting during generation, you use that language to do it.&lt;/li&gt;&lt;li&gt;All of them use some form of "alternative markup language(s)" to generate HTML (or XML, or CSS, or whatever), such as &lt;a href="http://haml-lang.com/"&gt;Haml&lt;/a&gt;, &lt;a href="http://daringfireball.net/projects/markdown/"&gt;Markdown&lt;/a&gt;, &lt;a href="http://www.wikicreole.org/wiki/Home"&gt;wikitext&lt;/a&gt;,&amp;nbsp;&lt;a href="http://sass-lang.com/"&gt;SCSS/SASS&lt;/a&gt; or whatever.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;And that's all fine and dandy - if you want to spend the time learning two or three new languages and committing all your Web source code into those alternative syntaxes. For one of those cool kids already swimming daily in a &lt;a href="http://www.rubyonrails.org/"&gt;RoR&lt;/a&gt; environment and using Ruby and Haml as part of their job, groovy - they can pick a tool that uses those languages and rock on unimpeded. But for someone coming from another environment, that means taking the time to stop from the task at hand (generating a static web site), figuring out which framework will work best for them and their environment and then learning all the supporting infrastructure and languages just to get the job done. In my case, for the small personal project I wanted to do, that was non-optimal.&lt;br /&gt;&lt;br /&gt;I started thinking about what I &lt;i&gt;&lt;b&gt;really&lt;/b&gt;&lt;/i&gt; wanted from a static web generator tool and I hit on a couple of items right away:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It should allow me to use the languages I already know and love/loathe for Web development, specifically HTML, JavaScript and CSS (and XML, and JSON, etc.)&lt;/li&gt;&lt;li&gt;It should support &lt;a href="http://en.wikipedia.org/wiki/Server_Side_Includes"&gt;server-side includes&lt;/a&gt; (SSIs) and pull those into the pages as it generates the static version (a majority of what a lot of the generator frameworks seem to do in terms of text replacement, "macros" and the like can be handled by SSIs, IMHO).&lt;/li&gt;&lt;li&gt;It should support scripting of the Web pages and other files but should not require learning new languages to do so.&lt;/li&gt;&lt;li&gt;It should be able to pull in referenced resources from other locations (&lt;a href="http://en.wikipedia.org/wiki/Content_delivery_network"&gt;CDNs&lt;/a&gt;, etc.) to allow the generated site to be viewable&amp;nbsp;completely&amp;nbsp;offline.&lt;/li&gt;&lt;li&gt;It should require no (&lt;i&gt;&lt;b&gt;zero&lt;/b&gt;&lt;/i&gt;) changing of the source code, if it is from an existing site.&lt;/li&gt;&lt;li&gt;It should be cross-platform and technology agnostic, if possible. &amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Ultimately, this can all be added up to, "It should be able to take an arbitrarily complex set of inputs, including a dynamic site, and generate it as a static site." The reasons for doing so can include offline viewing, scalability, archiving/mirroring or whatever. But in the end, it should allow all of that and do so while being as unobtrusive as possible. A pretty big order, it seemed.&lt;br /&gt;&lt;br /&gt;While discussing this with a friend over a period of days, talking about what I'd like to see and how I'd approach writing it to "scratch my own itch" (which would also distract from the task at hand), I kept thinking that such a tool &lt;i&gt;&lt;b&gt;had &lt;/b&gt;&lt;/i&gt;to already exist. And then it hit me - it &lt;i&gt;&lt;b&gt;does &lt;/b&gt;&lt;/i&gt;exist. As a combination of two tools, actually, which, when used together, give me everything I need to generate static web pages using a rich set of features and a minimum learning curve:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A web server - pick one, any one will do, as long as you're familiar with it and it satisfies your needs.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.gnu.org/software/wget/"&gt;&lt;i&gt;wget&lt;/i&gt;&lt;/a&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Ah, &lt;i&gt;wget&lt;/i&gt;. I use it for backing up my web site and blogs, but I always seem to forget my old friend when thinking about how to approach something in a new! and improved! way. This "little" tool does one thing and does it very, very well, and that is scraping web (and FTP) sites and optionally post-processing the results so that they can be used in a standalone manner. Perfect! It works on Linux and &lt;a href="http://www.mactricksandtips.com/2008/07/installing-wget-on-your-mac-for-terminal.html"&gt;the Mac&lt;/a&gt;, and there's even &lt;a href="http://gnuwin32.sourceforge.net/packages/wget.htm"&gt;a version for Windows&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The beauty of &lt;i&gt;wget &lt;/i&gt;is it solves all the other points I was looking for, too. Because all of those other requirements will simply be performed by a local web server (anyone who is looking at static web generator tools is likely running a local web server for development and testing anyway). And it can be &lt;i&gt;&lt;b&gt;any&lt;/b&gt;&lt;/i&gt; web server and &lt;i&gt;&lt;b&gt;any&lt;/b&gt;&lt;/i&gt; sort of server-side code or framework. I don't have to change - I can use what I'm already used to and then simply scrape the responses with &lt;i&gt;wget&lt;/i&gt; and spit them out as static files. Cool.&lt;br /&gt;&lt;br /&gt;I don't pretend to be an expert on &lt;i&gt;wget&lt;/i&gt;, but I have used it for a variety of purposes over the years. To someone just starting out it may seem a bit daunting with &lt;a href="http://www.gnu.org/software/wget/manual/wget.html"&gt;all of its options&lt;/a&gt; (but no more so than learning the ins and outs of a static web generator!). I won't detail all the options here, but for further reading I would recommend you start with the following list, which seems to be the most useful for our purposes:&lt;br /&gt;&lt;br /&gt;&lt;dt&gt;&lt;ul&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-i&amp;nbsp;&lt;/span&gt;&lt;var&gt;file&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--input-file=&lt;/span&gt;&lt;var&gt;file&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-F&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--force-html&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-B&amp;nbsp;&lt;/span&gt;&lt;var&gt;URL&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--base=&lt;/span&gt;&lt;var&gt;URL&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-x&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--force-directories&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-nH&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--no-host-directories&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;--protocol-directories&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;--cut-dirs=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;number&lt;/var&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-P&amp;nbsp;&lt;/span&gt;&lt;var&gt;prefix&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--directory-prefix=&lt;/span&gt;&lt;var&gt;prefix&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;--default-page=&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;name&lt;/var&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-E&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--adjust-extension&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;--ignore-length&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-r&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--recursive&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-l&amp;nbsp;&lt;/span&gt;&lt;var&gt;depth&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--level=&lt;/span&gt;&lt;var&gt;depth&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-k&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--convert-links&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-p&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--page-requisites&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;-A&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;acclist,&lt;/var&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;&amp;nbsp;--accept&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;acclist&lt;/var&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;-R&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;rejlist,&lt;/var&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;&amp;nbsp;--reject&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;rejlist&lt;/var&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-D&amp;nbsp;&lt;/span&gt;&lt;var&gt;domain-list&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--domains=&lt;/span&gt;&lt;var&gt;domain-list&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;span class="samp"&gt;--exclude-domains&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace;"&gt;&lt;var&gt;domain-list&lt;/var&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-H&lt;/span&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--span-hosts&lt;/span&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-I&amp;nbsp;&lt;/span&gt;&lt;var&gt;list&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--include-directories=&lt;/span&gt;&lt;var&gt;list&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;li&gt;&lt;samp&gt;&lt;span class="samp"&gt;-X&amp;nbsp;&lt;/span&gt;&lt;var&gt;list&lt;/var&gt;&lt;/samp&gt;,&amp;nbsp;&lt;samp&gt;&lt;span class="samp"&gt;--exclude-directories=&lt;/span&gt;&lt;var&gt;list&lt;/var&gt;&lt;/samp&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/dt&gt;&lt;br /&gt;This list is &lt;i&gt;&lt;b&gt;not &lt;/b&gt;&lt;/i&gt;exhaustive and your needs may require more (or less) of the functionality in &lt;i&gt;wget&lt;/i&gt;, so make sure to &lt;a href="http://www.gnu.org/software/wget/manual/wget.html"&gt;read the documentation&lt;/a&gt;. But in the end you will find it pretty simple to set up and get going and then, &lt;i&gt;voila&lt;/i&gt;!, you have your own "static web generator," custom built just for you and your needs. Plus it allows you to impress friends, coworkers and fair members of the opposite sex once again with your mad command line skills. What could be better?&lt;br /&gt;&lt;br /&gt;Anyway, that wraps up my "obvious to everyone else except me" lesson on the "ultimate" static web generator. As always, feel free to leave a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8097161623390486264-9220888250939758722?l=ednortonengineeringsociety.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ednortonengineeringsociety.blogspot.com/feeds/9220888250939758722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8097161623390486264&amp;postID=9220888250939758722&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/9220888250939758722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8097161623390486264/posts/default/9220888250939758722'/><link rel='alternate' type='text/html' href='http://ednortonengineeringsociety.blogspot.com/2010/11/static-web-generators-youre-soaking-in.html' title='Static web generators - you&apos;re soaking in it'/><author><name>Jim</name><uri>http://www.blogger.com/profile/02634460171128306060</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_gucDuYdVcjo/SnI2zlaR6-I/AAAAAAAAE-M/udUl6RhFyLk/S220/img151.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8097161623390486264.post-5317190672693899706</id><published>2010-10-10T19:05:00.001-05:00</published><updated>2010-10-10T19:05:44.868-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Passing a JSON array to a WCF service</title><content type='html'>&lt;p&gt;While the following information is available on the Internet, I had to piece it together from various sources, so for my own documentation and hopefully to help someone else, here is a simple (I hope) example of passing a JSON array to a WCF service, all in one place. It can be easily generalized to passing any JSON-serialized object to WCF, but that is better documented than arrays.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This sample uses &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; and Douglas Crockford’s &lt;a href="http://www.json.org/json2.js"&gt;JSON2&lt;/a&gt;. It also uses some features of HTML 5, including &lt;a href="http://diveintohtml5.org/forms.html#placeholder"&gt;placeholder text&lt;/a&gt;, &lt;a href="http://diveintohtml5.org/forms.html#autofocus"&gt;autofocus fields&lt;/a&gt; and &lt;a href="http://diveintohtml5.org/offline.html"&gt;offline storage&lt;/a&gt;, but these aren’t essential for the solution.&lt;/p&gt;  &lt;p&gt;First, let’s look at the HTML, because it’s probably the simplest part of the solution:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;index.html&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;DOCTYPE&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; &lt;span style="color: red"&gt;html&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;html&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;head&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;meta&lt;/span&gt; &lt;span style="color: red"&gt;http-equiv&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Content-Type&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;content&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/html; charset=utf-8&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;link&lt;/span&gt; &lt;span style="color: red"&gt;rel&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;stylesheet&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;styles/branding.css&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Send Array to WCF Service&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;head&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;body&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;div&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;content&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;h3&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;User&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;h3&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;form&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;demographics_form&amp;quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Last Name: &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;input&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;last_name&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;last_name&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;placeholder&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Last name&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;autofocus&lt;/span&gt; &lt;span style="color: red"&gt;required&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;First Name: &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;input&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;first_name&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;first_name&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;placeholder&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;First name&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Email: &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;input&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;email_address&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;email_address&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;email&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;placeholder&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;someone@somewhere.com&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;br&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;input&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;save_button&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Save&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;form&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;div&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;p&lt;/span&gt; &lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;app_status&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;scripts/json2.js&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/ecmascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;scripts/jquery-1.4.2.min.js&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/ecmascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt; &lt;span style="color: red"&gt;src&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;scripts/main.js&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;text/ecmascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon"&gt;script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;body&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: maroon; font-size: 8pt"&gt;html&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Pretty much a simple form with three fields and a button. Pay attention to the &lt;em&gt;input&lt;/em&gt; elements &lt;em&gt;name &lt;/em&gt;attributes – we will be using those in various places. Note that the form doesn’t have &lt;em&gt;action &lt;/em&gt;or &lt;em&gt;method&lt;/em&gt; attributes. We will assign an event handler to the button in a bit. There is also a &lt;em&gt;p&lt;/em&gt; element with an id of &lt;em&gt;app_status &lt;/em&gt;which will be used to display status messages.&lt;/p&gt;  &lt;p&gt;With that out of the way, let’s look at the JavaScript:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;main.js&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;var&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; UserApp = {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; docReady: &lt;span style="color: blue"&gt;function&lt;/span&gt; () {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; UserApp.loadForm();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&amp;quot;#save_button&amp;quot;).bind(&amp;quot;click&amp;quot;, UserApp.sendFormData);     &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; },&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: darkgreen"&gt;// Load form from saved data. Presumes that each input element's id is the same as its name.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; loadForm: &lt;span style="color: blue"&gt;function&lt;/span&gt; () {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; formDataString = localStorage.getItem(&lt;span style="color: maroon"&gt;&amp;quot;user_data&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (formDataString) {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; formData = JSON.parse(formDataString);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; i &lt;span style="color: blue"&gt;in&lt;/span&gt; formData) {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; fieldId = &lt;span style="color: maroon"&gt;&amp;quot;#&amp;quot;&lt;/span&gt; + formData[i].name;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(fieldId).val(formData[i].value);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; },&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: darkgreen"&gt;// Save data from a form. Presumes there is only one form element on a page.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; saveFormData: &lt;span style="color: blue"&gt;function&lt;/span&gt; () {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; formData = $(&lt;span style="color: maroon"&gt;&amp;quot;form&amp;quot;&lt;/span&gt;).serializeArray();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; localStorage.setItem(&lt;span style="color: maroon"&gt;&amp;quot;user_data&amp;quot;&lt;/span&gt;, JSON.stringify(formData));&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; { nvps: formData };&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; },&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; sendFormData: &lt;span style="color: blue"&gt;function&lt;/span&gt; () {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; formData = UserApp.saveFormData();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $.ajax({&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; type: &lt;span style="color: maroon"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; url: &lt;span style="color: maroon"&gt;&amp;quot;MyProject/UserSvc.svc/SaveUserData&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; data: JSON.stringify(formData),&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; contentType: &lt;span style="color: maroon"&gt;&amp;quot;application/json; charset=utf-8&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dataType: &lt;span style="color: maroon"&gt;&amp;quot;json&amp;quot;&lt;/span&gt;,&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; success: &lt;span style="color: blue"&gt;function&lt;/span&gt; (data) { &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (data &amp;amp;&amp;amp; data.d &amp;amp;&amp;amp; data.d.Message) {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: maroon"&gt;&amp;quot;#app_status&amp;quot;&lt;/span&gt;).html(data.d.Message);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; },&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; error: &lt;span style="color: blue"&gt;function&lt;/span&gt; (req, status, error) {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (req &amp;amp;&amp;amp; req.responseText) {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; ex = JSON.parse(req.responseText);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (ex &amp;amp;&amp;amp; ex.Message) {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: maroon"&gt;&amp;quot;#app_status&amp;quot;&lt;/span&gt;).html(ex.Message);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;else&lt;/span&gt; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; $(&lt;span style="color: maroon"&gt;&amp;quot;#app_status&amp;quot;&lt;/span&gt;).html(&lt;span style="color: maroon"&gt;&amp;quot;An error occurred saving the loan application data.&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;};&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;$(document).ready(UserApp.docReady);&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;On the document becoming ready we execute the &lt;em&gt;docReady &lt;/em&gt;function. It calls the &lt;em&gt;loadForm&lt;/em&gt; function which loads the form values from local storage (if they exist), and also attaches the &lt;em&gt;sendFormData &lt;/em&gt;function as the event handler for the “Save” button. We are storing the data in local storage using “user_data” as a key and a JSON-serialized array for the form elements (we will see how we create that array in the &lt;em&gt;SaveFormData&lt;/em&gt; function). After parsing the JSON array we iterate over it to fill in the form input fields.&lt;/p&gt;  &lt;p&gt;The &lt;em&gt;saveFormData&lt;/em&gt; function is the opposite of the &lt;em&gt;loadForm &lt;/em&gt;function in that it serializes the form’s input values using jQuery’s &lt;em&gt;&lt;a href="http://api.jquery.com/serializeArray/"&gt;serializeArray&lt;/a&gt;&lt;/em&gt; function, which is one of the reasons I chose this approach. It does one other thing, which is to wrap the (unserialized) array in an object with a single member, &lt;em&gt;nvps&lt;/em&gt; (which stands for “name-value pairs”), that holds the array, and returns this object. Again, we’ll see why later. To be clear, we are changing the bare array, which WCF will not accept as a method parameter:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;[ { name: “last_name”, value: “Smith”}, {name: “first_name”, value: “John”}, {name: “email_address”, value: &lt;/font&gt;&lt;a href="mailto:&amp;ldquo;john.smith@xyz.com"&gt;&lt;font size="1" face="Courier New"&gt;“john.smith@xyz.com&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Courier New"&gt;”} ]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;…to a wrapped object, which WCF will take:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;{ nvps:&amp;#160; [ { name: “last_name”, value: “Smith”}, {name: “first_name”, value: “John”}, {name: “email_address”, value: &lt;/font&gt;&lt;a href="mailto:&amp;ldquo;john.smith@xyz.com"&gt;&lt;font size="1" face="Courier New"&gt;“john.smith@xyz.com&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Courier New"&gt;”} ] }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Finally there is the &lt;em&gt;sendFormData&lt;/em&gt; function, the event handler for the “Save” button. It consists of a single AJAX call to the WCF service, sending up the JSON-serialized wrapped object as the sole parameter for the &lt;em&gt;SaveUserData&lt;/em&gt; method, and setting the status on the HTML page based on the success or failure of that call. Two things to note about that. First, on success the data coming down (a simple object with a single public property in it called &lt;em&gt;Message&lt;/em&gt;) will be wrapped within a JavaScript object called &lt;em&gt;data&lt;/em&gt; in a member called &lt;em&gt;d&lt;/em&gt;. So any access to data returned on success is via &lt;em&gt;data.d.xyz&lt;/em&gt;, in our case &lt;em&gt;data.d.Message&lt;/em&gt;. This use of &lt;em&gt;data.d &lt;/em&gt;as a (successful) response wrapper appears to be hold for &lt;em&gt;&lt;strong&gt;all&lt;/strong&gt;&lt;/em&gt; JSON-enabled WCF services.&lt;/p&gt;  &lt;p&gt;Second, if there was a server-side exception it will come down to the error callback as the JSON-serialized &lt;em&gt;responseText&lt;/em&gt; member of the (&lt;em&gt;XMLHttpRequest&lt;/em&gt;) &lt;em&gt;request &lt;/em&gt;parameter. After parsing the JSON you can get to various exception members, although in our case we are just interested in the exception’s &lt;em&gt;Message &lt;/em&gt;member. When debugging both success and failures it is &lt;em&gt;&lt;strong&gt;very helpful &lt;/strong&gt;&lt;/em&gt;to use &lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt; or similar tools to see what is getting passed back and forth with each HTTP request and response.&lt;/p&gt;  &lt;p&gt;Now it’s time to see the server-side implementation. Let’s look at the WCF interface definition first:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;IUserSvc.cs&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Collections.Generic;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Linq;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Runtime.Serialization;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.ServiceModel;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.ServiceModel.Web;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Text;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;namespace&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; MyProject&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;{&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;ServiceContract&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;interface&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;IUserSvc&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;OperationContract&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;WebInvoke&lt;/span&gt;(Method = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;, BodyStyle = &lt;span style="color: rgb(43,145,175)"&gt;WebMessageBodyStyle&lt;/span&gt;.WrappedRequest, ResponseFormat = &lt;span style="color: rgb(43,145,175)"&gt;WebMessageFormat&lt;/span&gt;.Json)]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: rgb(43,145,175)"&gt;ResultMessage&lt;/span&gt; SaveUserData(&lt;span style="color: rgb(43,145,175)"&gt;NameValuePairs&lt;/span&gt; nvps);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;DataContract&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;NameValuePair&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;DataMember&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; name { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;DataMember&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; value { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;DataContract&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ResultMessage&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;DataMember&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt; Message { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;CollectionDataContract&lt;/span&gt;(Namespace = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;NameValuePairs&lt;/span&gt; : &lt;span style="color: rgb(43,145,175)"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;NameValuePair&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;The interface is pretty simple. There is a single &lt;em&gt;SaveUserData &lt;/em&gt;method which takes in a collection of name-value pairs and returns a simple object that holds a result message. There are three things to notice here, and all are important. The first are the declarative attributes decorating the method. The following is where the real wiring for receiving and responding in JSON happens:&lt;/p&gt;  &lt;p&gt;&lt;font size="1" face="Courier New"&gt;[&lt;span style="color: rgb(43,145,175)"&gt;WebInvoke&lt;/span&gt;(Method = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;, BodyStyle = &lt;span style="color: rgb(43,145,175)"&gt;WebMessageBodyStyle&lt;/span&gt;.WrappedRequest, ResponseFormat = &lt;span style="color: rgb(43,145,175)"&gt;WebMessageFormat&lt;/span&gt;.Json)]&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The &lt;em&gt;Method&lt;/em&gt; can be either &lt;em&gt;POST&lt;/em&gt; or &lt;em&gt;GET&lt;/em&gt; (as long as your JavaScript code sends the request in the appropriate format). The &lt;em&gt;BodyStyle&lt;/em&gt; and &lt;em&gt;ResponseFormat&lt;/em&gt; parameters are &lt;em&gt;&lt;strong&gt;required&lt;/strong&gt;&lt;/em&gt; to get JSON in and out of the method. Any attempt to use a different &lt;em&gt;BodyStyle&lt;/em&gt; (such as &lt;em&gt;WebMessageBodyStyle.Bare&lt;/em&gt;) will result in a run-time exception because of settings in the &lt;em&gt;web.config &lt;/em&gt;file, which we’ll see later.&lt;/p&gt;  &lt;p&gt;Second, the parameter name to the method is &lt;em&gt;nvps&lt;/em&gt;. Note this is the same name as the single member returned in the wrapper object on the array of form input field values in the JavaScript &lt;em&gt;saveFormData&lt;/em&gt; function. This is some of the “magic” you just have to trust, but as far as I can tell, the parameter name to the WCF method &lt;em&gt;&lt;strong&gt;must&lt;/strong&gt;&lt;/em&gt; match the member name in the JavaScript wrapper object. In other words, it appears that when dealing with JSON, WCF is using name-matching between the JSON-serialized names and names in the managed code, probably via reflection.&lt;/p&gt;  &lt;p&gt;Finally, while you don’t see it explicitly in the JavaScript code above, the jQuery &lt;em&gt;&lt;a href="http://api.jquery.com/serializeArray/"&gt;serializeArray&lt;/a&gt;&lt;/em&gt; function returns an array of objects, one object for each &lt;em&gt;input&lt;/em&gt; element in the form. Each object in the array contains two members - &lt;em&gt;name&lt;/em&gt;, whose value matches the &lt;em&gt;name&lt;/em&gt; attribute on the &lt;em&gt;input&lt;/em&gt; element, and &lt;em&gt;value&lt;/em&gt;, which contains the actual field’s value. Note that the &lt;em&gt;NameValuePair&lt;/em&gt; class in the interface also uses &lt;em&gt;name&lt;/em&gt; and &lt;em&gt;value&lt;/em&gt; as member names. Again, these &lt;em&gt;&lt;strong&gt;must&lt;/strong&gt;&lt;/em&gt; match (as far as I can tell) the JavaScript member names to make all this work.&lt;/p&gt;  &lt;p&gt;Here is the WCF implementation:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;UserSvc.svc.cs&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Collections.Generic;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Data;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Data.SqlClient;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Linq;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Runtime.Serialization;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.ServiceModel;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.ServiceModel.Activation;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.ServiceModel.Web;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; System.Text;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;namespace&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt; MyProject&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;{&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: rgb(43,145,175)"&gt;AspNetCompatibilityRequirements&lt;/span&gt; (RequirementsMode = &lt;span style="color: rgb(43,145,175)"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;UserSvc&lt;/span&gt; : &lt;span style="color: rgb(43,145,175)"&gt;IUserSvc&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ResultMessage&lt;/span&gt; SaveUserData(&lt;span style="color: rgb(43,145,175)"&gt;NameValuePairs&lt;/span&gt; nvps)&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; columns = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; parameters = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;StringBuilder&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; rm = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ResultMessage&lt;/span&gt;() { Message = &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;User saved successfully.&amp;quot;&lt;/span&gt; };&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; conn = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SqlConnection&lt;/span&gt;(Properties.&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default.AppDb))&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;using&lt;/span&gt; (&lt;span style="color: blue"&gt;var&lt;/span&gt; cmd = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SqlCommand&lt;/span&gt;() { CommandType = &lt;span style="color: rgb(43,145,175)"&gt;CommandType&lt;/span&gt;.Text, Connection = conn })&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; paramCollection = cmd.Parameters;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;var&lt;/span&gt; rows = 0;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (nvps == &lt;span style="color: blue"&gt;null&lt;/span&gt; || nvps.Count == 0)&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;throw&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;nvps&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;foreach&lt;/span&gt; (&lt;span style="color: rgb(43,145,175)"&gt;NameValuePair&lt;/span&gt; nvp &lt;span style="color: blue"&gt;in&lt;/span&gt; nvps)&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; columns.Append(nvp.name).Append(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parameters.Append(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;@&amp;quot;&lt;/span&gt;).Append(nvp.name).Append(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; paramCollection.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43,145,175)"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;@&amp;quot;&lt;/span&gt; + nvp.name, nvp.value));&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// KLUDGE: Remove trailing commas.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; columns.Remove(columns.Length - 1, 1);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parameters.Remove(parameters.Length - 1, 1);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cmd.CommandText = &lt;span style="color: rgb(43,145,175)"&gt;String&lt;/span&gt;.Format(Properties.&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default.InsertSql, columns.ToString(), parameters.ToString());&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; conn.Open();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rows = cmd.ExecuteNonQuery();&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rm.Message = &lt;span style="color: rgb(43,145,175)"&gt;String&lt;/span&gt;.Format(Properties.&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default.SuccessMessage, rows, cmd.CommandText);&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(43,145,175)"&gt;Exception&lt;/span&gt; ex)&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; rm.Message = ex.Message;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; rm;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;There isn’t really much going on here. As noted, the method parameter &lt;em&gt;nvps&lt;/em&gt; must match the member within the JSON-serialized wrapper object around the array being sent to the method. As the code iterates through the array (collection), note also the use of &lt;em&gt;name&lt;/em&gt; and &lt;em&gt;value&lt;/em&gt;, again, matching the object member namess that are within the array. The code basically builds a dynamic, parameterized SQL &lt;em&gt;INSERT&lt;/em&gt; statement (see the &lt;em&gt;web.config&lt;/em&gt;) that assumes the underlying table column names are the same as the &lt;em&gt;input &lt;/em&gt;elements &lt;em&gt;name &lt;/em&gt;attributes. Cheesy, I know, but it shows we’re actually “doing something” on the server. I don’t claim this to be production-quality! The interesting thing about the code as written, however, is that by simply changing the form to add more &lt;em&gt;input&lt;/em&gt; elements and altering the table to add more columns, additional data could be accommodated with &lt;em&gt;&lt;strong&gt;no&lt;/strong&gt;&lt;/em&gt; change in the JavaScript or managed code, which gives a bit of flexibility that I like.&lt;/p&gt;  &lt;p&gt;Finally, we have the &lt;em&gt;web.config &lt;/em&gt;file:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;web.config&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;xml&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;version&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;1.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="WordSection1"&gt;   &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;configuration&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;configSections&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;sectionGroup&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;applicationSettings&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;section&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;LoanAppDataRouter.Properties.Settings&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;requirePermission&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;false&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;sectionGroup&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;configSections&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;system.web&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;compilation&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;debug&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;targetFramework&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;4.0&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;system.web&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;system.serviceModel&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;bindings&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;webHttpBinding&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;binding&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;MyBinding&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;security&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;mode&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;TransportCredentialOnly&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;transport&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;clientCredentialType&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;Windows&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;security&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;binding&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;webHttpBinding&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;bindings&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;services&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;service&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;MyProject.UserSvc&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;JsonBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;endpoint&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;address&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;binding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;webHttpBinding&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;bindingConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyBinding&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;JsonBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;contract&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyProject.IUserSvc&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;identity&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;dns&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;value&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;mywebserver&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;identity&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;endpoint&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;service&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;services&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;behaviors&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;behavior&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;JsonBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;enableWebScript&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;behavior&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;behavior&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;JsonBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;serviceMetadata&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;serviceDebug&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;httpHelpPageEnabled&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;behavior&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;behaviors&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;system.serviceModel&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;system.webServer&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;modules&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;runAllManagedModulesForAllRequests&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;system.webServer&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;applicationSettings&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;MyProject.Properties.Settings&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;setting&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;InsertSql&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;serializeAs&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;value&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;INSERT INTO Users ({0}) VALUES({1})&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;setting&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;setting&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;AppDb&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;serializeAs&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;value&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;server=.;initial catalog=ApplicationDB;integrated security=sspi;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;setting&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;setting&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: red; font-size: 8pt"&gt;name&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;=&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;&amp;quot;&lt;span style="color: blue"&gt;SuccessMessage&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;serializeAs&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;String&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;value&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 8pt"&gt;Inserted {0} rows using the following statement: {1}&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;setting&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;MyProject.Properties.Settings&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt; &amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;applicationSettings&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: rgb(163,21,21); font-size: 8pt"&gt;configuration&lt;/span&gt;&lt;span style="font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; color: blue; font-size: 8pt"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="line-height: normal; margin-bottom: 0pt" class
