dockerfile/examples/omnivore/api/readabilityjs/test/test-pages/bookofhook.blogspot.com/source.html

4762 lines
331 KiB
HTML
Raw Permalink Normal View History

2024-03-15 14:52:38 +08:00
<html class="v2" dir="ltr" lang="en"><script type="module" src="chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/hook.js"></script><head>
<link href="https://www.blogger.com/static/v1/widgets/1529571102-css_bundle_v2.css" rel="stylesheet" type="text/css">
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<meta content="blogger" name="generator">
<link href="http://bookofhook.blogspot.com/favicon.ico" rel="icon" type="image/x-icon">
<link href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" rel="canonical">
<link rel="alternate" type="application/atom+xml" title="Book Of Hook - Atom" href="http://bookofhook.blogspot.com/feeds/posts/default">
<link rel="alternate" type="application/rss+xml" title="Book Of Hook - RSS" href="http://bookofhook.blogspot.com/feeds/posts/default?alt=rss">
<link rel="service.post" type="application/atom+xml" title="Book Of Hook - Atom" href="https://www.blogger.com/feeds/7943444959024231990/posts/default">
<link rel="alternate" type="application/atom+xml" title="Book Of Hook - Atom" href="http://bookofhook.blogspot.com/feeds/3209638659688275137/comments/default">
<!--[if IE]><script type="text/javascript" src="https://www.blogger.com/static/v1/jsbin/2287435483-ieretrofit.js"></script>
<![endif]-->
<link href="http://upload.wikimedia.org/wikipedia/en/9/93/Netscape_Navigator.png" rel="image_src">
<meta content="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" property="og:url">
<meta content="Smart Guy Productivity Pitfalls" property="og:title">
<meta content="Productivity is one of my pet topics, because it's always dogged me a bit, especially early in my career. &nbsp;I'd pull long days and nights and..." property="og:description">
<meta content="https://lh3.googleusercontent.com/blogger_img_proxy/ABLy4EzWkihPRCY9pIfp0Kyte3jlABLfSMcK5dlFeOQ7OGHfoy_CEMNzvNgmyBoyd1ahGWWJ0UXGSSvUXxouVeOK5l9Fxqlpe5YQQfgFg7-ikDZ0EaToXHZFrA_EmV8V5tKR4bd1HProtJ8=w1200-h630-p-k-no-nu" property="og:image">
<!--[if IE]> <script> (function() { var html5 = ("abbr,article,aside,audio,canvas,datalist,details," + "figure,footer,header,hgroup,mark,menu,meter,nav,output," + "progress,section,time,video").split(','); for (var i = 0; i < html5.length; i++) { document.createElement(html5[i]); } try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {} })(); </script> <![endif]-->
<title>Smart Guy Productivity Pitfalls | Book Of Hook</title>
<meta content="!" name="fragment">
<meta content="dynamic" name="blogger-template">
<meta content="IE=9,chrome=1" http-equiv="X-UA-Compatible">
<meta content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, width=device-width" name="viewport">
<script src="//www.blogblog.com/dynamicviews/ed182bfb7b5c6466/js/thirdparty/jquery.js" type="text/javascript"></script>
<script src="//www.blogblog.com/dynamicviews/ed182bfb7b5c6466/js/thirdparty/jquery-mousewheel.js" type="text/javascript"></script>
<script src="//www.blogblog.com/dynamicviews/ed182bfb7b5c6466/js/common.js" type="text/javascript"></script>
<script src="//www.blogblog.com/dynamicviews/ed182bfb7b5c6466/js/classic.js" type="text/javascript"></script>
<script src="//www.blogblog.com/dynamicviews/ed182bfb7b5c6466/js/gadgets.js" type="text/javascript"></script>
<script src="//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js"></script>
<link href="https://www.blogger.com/dyn-css/authorization.css?targetBlogID=7943444959024231990&amp;zx=fef03f57-1300-4305-a63b-21849c543c4d" media="all" onload="if(media!='all')media='all'" rel="stylesheet"><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=7943444959024231990&amp;zx=fef03f57-1300-4305-a63b-21849c543c4d' rel='stylesheet'/></noscript>
<meta name="google-adsense-platform-account" content="ca-host-pub-1556223355139109">
<meta name="google-adsense-platform-domain" content="blogspot.com">
<style id="subscribecss" class="singleton-element">#subscribe {
text-align: left;
margin: 10px;
vertical-align: middle;
white-space: nowrap;
}
.subscribe-by-email,
.subscribe-rss-feed {
min-width: 250px;
padding: 4px 16px 16px 16px;
}
.subscribe-by-email {
border-bottom: 1px solid #ddd;
}
.subscribe-by-email-title,
.subscribe-rss-feed-title {
font-size: 16px;
margin: 8px 0;
}
.subscribe-by-email-address {
border: 1px solid #ddd;
-moz-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
-ms-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
-o-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);
box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.3);;
font-size: 12px;
height: 27px;
line-height: 27px;
min-width: 192px;
padding: 0 0 0 6px;
}
.subscribe-by-email-submit {
display: inline-block;
min-width: 54px;
border: 1px solid #dcdcdc;
text-align: center;
color: #444;
font-size: 11px;
font-weight: bold;
height: 27px;
padding: 0 8px;
line-height: 27px;
-moz-border-radius: 2px;
-ms-border-radius: 2px;
-o-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-transition: right 0.218s;
-ms-transition: right 0.218s;
-o-transition: right 0.218s;
-webkit-transition: right 0.218s;
transition: right 0.218s;;
background-color: #f5f5f5;
background-image: -webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));
background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: linear-gradient(top,#f5f5f5,#f1f1f1);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f5f5f5',EndColorStr='#f1f1f1');
-moz-box-sizing: content-box;
-ms-box-sizing: content-box;
-o-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;;
}
.subscribe-by-email-submit:hover {
border: 1px solid #c6c6c6;
color: #222;
-webkit-transition: all 0.0s;
-moz-transition: all 0.0s;
-o-transition: all 0.0s;
transition: all 0.0s;
background-color: #f8f8f8;
background-image: -webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));
background-image: -webkit-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: -moz-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: -ms-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: -o-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: linear-gradient(top,#f8f8f8,#f1f1f1);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f8f8f8',EndColorStr='#f1f1f1');
-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-ms-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-o-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
box-shadow: 0px 1px 1px rgba(0,0,0,0.1);;
}
.subscribe-by-email-submit:active {
background-color: #f6f6f6;
background-image: -webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#f1f1f1));
background-image: -webkit-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: -moz-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: -ms-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: -o-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: linear-gradient(top,#f6f6f6,#f1f1f1);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#f6f6f6',EndColorStr='#f1f1f1');
-moz-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-ms-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-o-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);;
}
.subscribe-by-email-submit:visited {
color: #666;
}
.subscribe-rss-feed-view-rss {
display: inline-block;
height: 24px;
line-height: 24px;
padding-left: 28px;
}
.subscribe-rss-feed-add-to {
/* http://www.google.com/images/icons/product/reader-16.png */
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACfElEQVQ4T22TXUhTYRjH/0dn6pZNkkZa2rKrRMgshO4q6KbooqCbbrwqQhMsEPqAvsuK6KYuoroRQigogkxErMhMIqxZGNTWtjbSmcO5zfOx856vznlOmx3Zc3He8/7f5/k9H7wvh2XG3+gwLIml0tCEHJ3K8wvgY3MFz4aHj+FuauYsgT55ywcL3lp4MokCxAKwVBZsMQeFFyGlJbTFZ4sDKk7ehKowYrKJUagvn0CMW7AlgCIxtIamiwNcXVcoWNNUaLoKXeAhPLgLefw9VSAm01BlDb43g/BvauUcLaRudRu5PYcKLa30b4RugVQV2etXwY+8hpU9JyioHx82k+j2DMqvKTS4vOnZP47RtrgT6D9YAv54B5RIDKqqLwHKezUDhl402JBFGIwHFBmt610Y8A0hfOkO+RYqsLILPTKiKRVvf+noHdUQn5fJ6X+Atf99rgrRtt10VvduCKqmgbMAme5Fx+DufdRwZlCyIf8qsP5jZz1Ith+BFIw6AcN7g/BVV6ChpsqevDm4L/FFHHikIZMVCu0F/M+hTwQgfpgkgCQzu4JU1wIFBqILaFxTiapKF03+WSCNY09lsxXBdPRgZLKLYDWXL2Dd1ibMzCZsQLIzSVmpzKTdTq23jNZ99zP4FM7AUCTM3t4CZvrV+nyQcyLCP7+Dc50IGq/aFXJurqukNZKUsKGmzKyCYeAbw9G+adKVvl0QxSzc7lW0D4WmwJV2fjbmzleTMDUjYfNaO/NYMI0djW66LPWnY6R9PbWaVsbshNu27+QIMNXjJYE3Xx9XWgJPxQqM/cigzV9OesvFCK1G/37HzbU0+0EcfuG4ieS9zIoFWy5/AXxpdXGYm4ahAAAAAElFTkSuQmCC);
background-repeat: no-repeat;
background-position: 4px center;
padding-left: 25px;
}
a.feed-reader-link {
margin: .5em 0;
}
.subscribe-netvibes,
.subscribe-myyahoo {
background-repeat: no-repeat;
height: 17px;
width: 91px;
}
.subscribe-netvibes {
/* http://img1.blogblog.com/img/widgets/subscribe-netvibes.png */
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAARCAMAAACFKyChAAAC7lBMVEX////////o8f9fti79/v/y9/+It/55rv5Fbrj8/f76+/33+v/z+P/q8//l7/+Cs/5rpv5dnf76/P9VmP74+vyUvv6Gtv56r/41oTVLcrqqqqr2+Pvv9f/h7f/e6//Y4fDL4P/R2+3F3P/C2v/N2OyqzP+2xuSix/5Ysy/5+//MzMxxqf5qpf6EntBno/5Zm/5fti9eti41ojQ1oTSSvf4+aLYsWa4iUqv5/P/4+fz0+f/29/v09vrx9Pro8v/r7/jm8P/g7P/j6fXa6f/e5fLU5f/T5P/a4vHV3u/J3//E2//L1uu+1/+51f+uzv+9y+atzv+6yeWoy/6myf+fxf6wweGcw/6awf6Nuv6gtNuJuP6EtP6CtP6As/6SqtV3rf51q/5tp/5mov5jof5env5bnP5ctS5ctC9btC9TsDBOrjFhg8NIqzI+pjM9pjM+pTM5pDRRdr1Mc7tIb7lBarcvkRg9Z7UrixgriRgqiRglghkxXbEifxkifRkgeRqQvP4ddhuuv+AyoDX+/v/2+f/2+Pzy9vvy9frt9P/w8/rs8//s7/fq7vfo7fbi7v/i7f/n7Pbg7f/k7Pnn6/bh7P/f7P/d6v/h6PTh5/Tf5vPY5//W5v/d5PLR5P/a4fHO4v/X4PDH3f/D2//C2v7C2f7M1+zM1+u/2P671/+61f+31P630/7Cz+ix0P+/zeawz/60xOOyw+KywuGawv6Zwv6rvd+YwP6XwP6Svv+httuLuf+Luf6Kuf6LuP6KuP6es9qbsdl+sv58r/6PptOFp9+JotKGoNCDndB9ms5enf50kspRlv5dtC5ctC5XszBYsi9TsTBTsC9oiMVPrjFPrjBjhcRJrDFJqzJFqjJFqTJCqTJDqDI/pzNApjNYfMA8pTQ7pDM5pDNWer84pDQ5ozQ5ozM4ozU3ozQ0ojU0oTRKcbpJcLpIcLkvkRcvjxgtjhgtjBg8ZbI6ZbQohhgohRk0YLIifxoifRooVq4aTKg1STZjAAAAAXRSTlMAQObYZgAAAmVJREFUeF611EOMbE0ch+H+tc2xbdu2bdv2XNu2bdu2bdv8uLsnmaRzchaTWUw/VUn9a/Puqmg2KkOj2UBFbHSINkYpDXr7I0NJC/3xVU6pbkhziB9A+11FZcW39vavVyuvvEc/TlgoR7oB9IstB9B+bmVl9R34QRwvQBIZpbsw0R+A7rYt3kBUx+lZM4OnM6fNFdP1WYAkRWAUCgIz3EgIQGi0KIhFbT+t7uruBjo7u24+Acnd3mdcj1pvGH9u+dQchkueP89wyiTWJ8uPpDlmABocjt3FQ0KI8m01i8NB1yzUVGygth/W/O67/VXzACQL3GvDdv4dotZqz+PbN6tN5R4fJ7YzRZKtng97OHCsPEZvaak52DnW2ChlbXJgebHXUNv36nr6bj1190Hi9yUZxu6zzTzOFxTY/78WLSOBTHWc2gq4EW3JPgApuQElB5LMzRVxYmlRhomA2r7z6J+hQ4AhQ/99fBsk41t3wMx9SqxHdnq6RXKgrzbRnmcbJxURbTcgLxOApSSoJDVm1cpoOs8gIbcsntq+0VjfOAwY1tBQXw2SGdy9PLMOw7Hcc8C6C/663Gw+mDmO+wF5VpbcS0NmIlgu2w6Nw3LQd09azfYZfZRNbV9787JpBOHt66brIHnl2Rsb+V/bZGPtNu1fZ/nMW54HgfWKCMBS4Ziw53I+p1SmLgA9T8pxUB+zWVZUaBdNbVd9cHUhlpaWi2sVSJYYrvBTW2bIx8TEXfMBBFqEAHIxDxAFz9ETGQgnmCxmArCOMNUHWAGhpnRQ23BmMJwYTs7EHtw3r9q/SlWINk1HZf4AwCDWutwHXcUAAAAASUVORK5CYII=);
}
.subscribe-myyahoo {
/* http://img1.blogblog.com/img/widgets/subscribe-yahoo.png */
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAARCAMAAACFKyChAAAAe1BMVEX////8GSH///9UVFT+xcj/8PH8KzL+jZH/5eb9SlH/Zmb+19j+sbP8dnv9bnOjz//8PEP+n6KZmZn09PT9f4P9WmDU1NRmZmYNJppeXl7f398pXOZ0dHR+fn7q6ur/9vbMzMwPQtuJiYm0tLQAAJmpqakYMqUAM8xKc+0wAtJHAAAAAXRSTlMAQObYZgAAAXdJREFUeF6108eu2zAYhFHPsDd1ubfbkrz/E4bShQ3aSRYBrE+ACGhx8IMiV91irVYdF6rbZPvnY58vtX/lDofD29z2xfY07jY3rf+yvfcpGcWHLorFF2WtJS0Qn23Whf0hjuRanNZi1/MqvkhZAU6x9aMbJUkb8mM0BjJIaUnlkNOKgC3seWrW+XWzv4T44FGc2Imu3x05FQBJpdGkNgQaIJESVA1yLedxrYaFK/bkkEXOlfauE9nuN+Jd7DnXAjbCUAEjmdAa4xyhSUa4iSYtDNKTXdes67qw34Xoss1rXvkdBwCSDFqnya5G3zgJyRya73FHSB0L++1ve7I+bfrJ5lH0vDXT1KOHooYlBxggStngEoFUaUQalnb5L+/2+crZPgne0yBVg0hU0ulByqGKtnKjc4EMlfeDZQv/h517sMlne9CAdu1glATSpTiJ5dFUVSDu9o9t2WyfJ5rrM8n9/mbI7/7r7nw+9NJ7uUyzvVTZXm0W6zcSt0JtZ/HJvQAAAABJRU5ErkJggg==);
}</style><style id="blogarchivecss" class="singleton-element">.blogarchive-tree {
padding: 12px;
-moz-transition: width 0.15s, height 0.15s;
-ms-transition: width 0.15s, height 0.15s;
-o-transition: width 0.15s, height 0.15s;
-webkit-transition: width 0.15s, height 0.15s;
transition: width 0.15s, height 0.15s;
}
.blogarchive-title {
padding: 8px;
vertical-align: middle;
line-height: 14px;
white-space: nowrap;
cursor: pointer;
}
.blogarchive-title:after {
content: "";
display: inline-block;
border-width: 5px;
border-color: transparent transparent transparent #666;
border-style: solid;
width: 0;
height: 0;
position: relative;
left: 4px;
visibility: hidden;
}
.blogarchive-title:hover:after {
border-color: transparent transparent transparent #ccc;
}
.blogarchive-expanded > .blogarchive-title:after {
border-color: transparent transparent transparent #666;
}
.blogarchive-title:hover:after,
.blogarchive-expanded > .blogarchive-title:after {
visibility: visible;
}
.blogarchive-expanded > .blogarchive-title a {
color: #666;
font-weight: bold;
}
.blogarchive-flat .blogarchive-title:after {
display: none;
}
.blogarchive-loading {
background-image: url(data:image/gif;base64,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);
background-repeat: no-repeat;
background-position: left center;
height: 28px;
}
.blogarchive-loading:after {
content: "loading";
color: #666;
display: inline-block;
line-height: 28px;
margin-left: 28px;
min-width: 192px;
}
.blogarchive-dates {
min-width: 128px;
}
.blogarchive-tree > .blogarchive-dates {
position: relative;
}
.blogarchive-date > .blogarchive-dates {
display: none;
position: absolute;
top: 0;
left: 90%;
-moz-transition: left 0.15s ease-out;
-ms-transition: left 0.15s ease-out;
-o-transition: left 0.15s ease-out;
-webkit-transition: left 0.15s ease-out;
transition: left 0.15s ease-out;
}
.blogarchive-date.blogarchive-expanded > .blogarchive-dates {
display: block;
left: 100%;
}
.blogarchive-expanded > .blogarchive-dates {
display: inline-block;
}
.blogarchive-post-count {
color: #666;
font-size: 12px;
}
.blogarchive-post-count:before {
content: " (";
}
.blogarchive-post-count:after {
content: ")";
}
.blogarchive-post {
padding: 8px 0 0 16px;
text-indent: -8px;
min-width: 200px;
}
@media only screen and (max-width : 546px) {
.blogarchive-tree {
height: auto !important;
width: auto !important;
}
.blogarchive-date > .blogarchive-dates {
position: static;
margin-left: 12px;
}
.blogarchive-post {
padding: 4px 0 4px 16px;
}
}</style><style id="attributioncss" class="singleton-element">.attribution {
background-color: #f5f5f5;
background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: linear-gradient(top,#f5f5f5,#f1f1f1);
bottom: 0;
color: #444;
font-size: 11px;
padding: 5px;
position: fixed;
text-align: center;
width: 100%;
z-index: 998;
}</style><style id="css">/* Begin: reset styles */
body,div,ul,ol,li,input,textarea,p,abbr {
margin:0;
outline: none;
padding:0;
}
ol,ul {
list-style:none;
}
h1,h2,h3,h4,h5,h6 {
font-size: 100%;
font-weight: normal;
margin: 0;
padding: 0;
}
img {
border: none;
}
/* End: reset */
#chromefix {
-webkit-transform: perspective(1); /* Chrome 12/13/14 flicker fix. */
}
body {
background-color: rgba(238, 238, 238, 1);
background-image: url(#EEEEEE none repeat scroll top left);
background-position: left top;
background-repeat: no-repeat;
}
body, input, textarea {
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 14px;
}
a,
a:focus {
color: rgba(0, 158, 184, 1);
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
outline: none;
text-decoration: none;
-moz-transition: color .3s;
-ms-transition: color .3s;
-o-transition: color .3s;
-webkit-transition: color .3s;
transition: color .3s;
}
a:visited {
color: rgba(0, 158, 184, 1);
}
a:hover {
color: rgba(0, 158, 184, 1);
text-decoration: underline;
}
abbr.published {
outline: none;
text-decoration: none;
border: none;
}
.title {
color: rgba(51, 51, 51, 1);
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 14px;
}
.title a {
color: rgba(51, 51, 51, 1);
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
/* Way to prevent any css animations during dom manip. */
.instant, .instant * {
-moz-transition: none !important;
-ms-transition: none !important;
-o-transition: none !important;
-webkit-transition: none !important;
transition: none !important;
-moz-animation-iteration-count: 0 !important;
-ms-animation-iteration-count: 0 !important;
-o-animation-iteration-count: 0 !important;
-webkit-animation-iteration-count: 0 !important;
animation-iteration-count: 0 !important;
}
.adsense {
margin: 0 auto;
text-align: center;
}
/* Admin restricted links - obviously verified on server, but for easy templates. */
.blog-admin,
.item-control {
display: none;
}
@media only screen and (min-width: 768px) and (max-width: 1024px) {
.blog-admin,
.item-control {
margin-left: 14px;
}
}
#injected-iframe {
z-index: 9999 !important;
}
.kd-button {
background-color: #f5f5f5;
background-image: -webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#f1f1f1));
background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: linear-gradient(top,#f5f5f5,#f1f1f1);
border: 1px solid #DCDCDC;
border: 1px solid rgba(0,0,0,0.1);
-moz-border-radius: 2px;
-ms-border-radius: 2px;
-o-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: content-box;
-ms-box-sizing: content-box;
-o-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
color: #222;
cursor:default;
display: inline-block;
font-size: 11px;
font-weight: bold;
height: 27px;
line-height: 27px;
min-width: 54px;
padding: 0 8px;
text-align: center;
-moz-transition: all 0.218s;
-ms-transition: all 0.218s;
-o-transition: all 0.218s;
-webkit-transition: all 0.218s;
transition: all 0.218s;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
-webkit-user-select: none;
user-select: none;
}
.kd-button:hover {
background-color: #f8f8f8;
background-image: -webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));
background-image: -webkit-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: -moz-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: -ms-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: -o-linear-gradient(top,#f8f8f8,#f1f1f1);
background-image: linear-gradient(top,#f8f8f8,#f1f1f1);
border: 1px solid #C6C6C6;
-moz-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-ms-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-o-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
box-shadow: 0px 1px 1px rgba(0,0,0,0.1);
color: #222;
-moz-transition: all 0.0s;
-ms-transition: all 0.0s;
-o-transition: all 0.0s;
-webkit-transition: all 0.0s;
transition: all 0.0s;
}
.kd-button:active {
background-color: #f6f6f6;
background-image: -webkit-gradient(linear,left top,left bottom,from(#f6f6f6),to(#f1f1f1));
background-image: -webkit-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: -moz-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: -ms-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: -o-linear-gradient(top,#f6f6f6,#f1f1f1);
background-image: linear-gradient(top,#f6f6f6,#f1f1f1);
border: 1px solid #C6C6C6;
-moz-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-ms-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-o-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
color: #333;
}
.kd-button:focus, .kd-button.right:focus, .kd-button.left:focus{
border: 1px solid #4d90fe;
outline: none;
z-index: 4 !important;
}
.kd-button.left {
-moz-border-radius: 2px 0 0 2px;
-ms-border-radius: 2px 0 0 2px;
-o-border-radius: 2px 0 0 2px;
-webkit-border-radius: 2px 0 0 2px;
border-radius: 2px 0 0 2px;
border-right-color: transparent;
margin-right: 0;
}
.kd-button.left:hover {
border-right: 1px solid #c6c6c6;
}
.kd-button.right {
-moz-border-radius: 0 2px 2px 0;
-ms-border-radius: 0 2px 2px 0;
-o-border-radius: 0 2px 2px 0;
-webkit-border-radius: 0 2px 2px 0;
border-radius: 0 2px 2px 0;
margin-left:-5px;
}
.kd-button.right:hover {
border-left: 1px solid #c6c6c6;
}
.kd-button img {
display: inline-block;
margin: -3px 0 0;
*margin:4px 0 0; /*IE7*/
opacity: 0.55;
vertical-align: middle;
}
.kd-button.selected img {
opacity: 0.9;
}
.kd-button:hover img {
opacity: 0.72;
}
.kd-button:active img {
opacity: 1.0;
}
/*disabled buttons*/
.kd-button.disabled,
.kd-button.disabled:hover,
.kd-button.disabled:active {
background: #FFF;
border: 1px solid #f3f3f3;
border: 1px solid rgba(0,0,0,0.05);
color: #b8b8b8;
cursor: default;
pointer-events: none;
}
.kd-button.disabled:active{
-moz-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-ms-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-o-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
-webkit-box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
box-shadow: inset 0px 1px 2px rgba(0,0,0,0.1);
}
.kd-button.disabled img {
opacity: 0.5;
}
.kd-button.small {
min-width: 36px;
padding: 0;
width: 36px;
}
.ribbon {
color: #eee;
cursor: default;
display: inline-block;
text-align: center;
width: 35px;
}
a.ribbon {
color: #eee;
cursor: pointer;
text-decoration: none;
}
.ribbon .ribbon-piece {
background-color: rgba(102, 102, 102, 1);
-moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
-ms-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
-o-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
-moz-transition: background-color 0.5s ease-in;
-ms-transition: background-color 0.5s ease-in;
-o-transition: background-color 0.5s ease-in;
-webkit-transition: background-color 0.5s ease-in;
transition: background-color 0.5s ease-in;
}
/* On hover color change. */
a.ribbon:hover .ribbon-piece {
background-color: rgba(173, 58, 43, 1);
color: #eee;
}
.ribbon .top {
border-bottom: solid 1px rgba(255, 255, 255, 0.6);
-moz-border-radius: 1px 1px 0px 0px;
-ms-border-radius: 1px 1px 0px 0px;
-o-border-radius: 1px 1px 0px 0px;
-webkit-border-radius: 1px 1px 0px 0px;
border-radius: 1px 1px 0px 0px;
font-size: 11px;
padding: 4px 0;
position: relative;
text-transform: uppercase;
}
.ribbon .bottom {
font-size: 17px;
padding: 5px 0;
}
.ribbon .tail {
height: 10px;
overflow: hidden;
position: relative;
}
.ribbon .tail .left,
.ribbon .tail .right {
height: 10px;
position: absolute;
top: -10px;
width: 50px;
}
.ribbon .tail .left{
left: -9px;
-moz-transform: rotate(-25deg);
-ms-transform: rotate(-25deg);
-o-transform: rotate(-25deg);
-webkit-transform: rotate(-25deg);
transform: rotate(-25deg);
}
.ribbon .tail .right{
right: -9px;
-moz-transform: rotate(25deg);
-ms-transform: rotate(25deg);
-o-transform: rotate(25deg);
-webkit-transform: rotate(25deg);
transform: rotate(25deg);
}
/* Do this with a transform? */
.ribbon.small {
width: 25px;
}
.ribbon.small .top {
font-size: 9px;
padding: 2px 0;
}
.ribbon.small .bottom {
font-size: 12px;
padding: 3px 0;
}
.ribbon.small .tail {
height: 6px;
}
.ribbon.small .tail .left,
.ribbon.small .tail .right {
height: 6px;
top: -7px;
width: 40px;
}
.ribbon.small .tail .left {
left: -6px;
}
.ribbon.small .tail .right {
right: -6px;
}
.bubble {
background-color: rgba(102, 102, 102, 1);
background-position: center center;
border-radius: 3px;
border: solid 1px rgba(102, 102, 102, 1);
color: white;
cursor: default;
display: inline-block;
font-size: 12px;
padding: 2px 0;
position: relative;
text-align: center;
-moz-transition-property: background-color, border-color;
-ms-transition-property: background-color, border-color;
-o-transition-property: background-color, border-color;
-webkit-transition-property: background-color, border-color;
transition-property: background-color, border-color;
-moz-transition-duration: 0.5s;
-ms-transition-duration: 0.5s;
-o-transition-duration: 0.5s;
-webkit-transition-duration: 0.5s;
transition-duration: 0.5s;
-moz-transition-timing-function: ease-in;
-ms-transition-timing-function: ease-in;
-o-transition-timing-function: ease-in;
-webkit-transition-timing-function: ease-in;
transition-timing-function: ease-in;
width: 26px;
}
.bubble.light {
background-color: rgba(217, 217, 217, 1);
border-color: rgba(217, 217, 217, 1);
}
.bubble.empty {
color: rgba(102, 102, 102, 1);
border: solid 1px rgba(153, 153, 153, 1);
-moz-box-shadow: none;
-ms-box-shadow: none;
-o-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
background-color: white;
}
.bubble .bubble-tail,
.bubble.empty .bubble-tail:after {
border-color: rgba(102, 102, 102, 1) transparent transparent transparent;
border-style:solid;
border-width: 5px;
bottom: -10px;
content: '';
height: 0;
left: 50%;
margin-left: -5px;
position: absolute;
-moz-transition: border-color 0.5s ease-in;
-ms-transition: border-color 0.5s ease-in;
-o-transition: border-color 0.5s ease-in;
-webkit-transition: border-color 0.5s ease-in;
transition: border-color 0.5s ease-in;
width: 0;
}
.bubble.light .bubble-tail {
border-color: rgba(217, 217, 217, 1) transparent transparent transparent;
}
.bubble.empty .bubble-tail {
border-color: rgba(153, 153, 153, 1) transparent transparent transparent;
}
.bubble.empty .bubble-tail:after {
left: 0;
top: -6px;
border-color: white transparent transparent transparent;
}
/* On hover color change.
.bubble:hover {
background-color: #d14836;
border-color: #d14836;
}
.bubble.empty:hover {
/*background-color: white;
border-color: #d14836;
color: #d14836;
}
.bubble:hover .bubble-tail {
border-color: #d14836 transparent transparent transparent !important;
}
*/
body.loading #loading {
opacity: 0.75;
margin-bottom: 0;
}
#loading {
background-color: #000;
border-radius: 6px 6px 0px 0px;
border: solid 1px #666;
border-bottom: none;
bottom: 0;
box-shadow: 0 0 4px #333;
color: white;
font-size: 18px;
left: 50%;
margin-bottom: -50px;
margin-left: -60px;
opacity: 0;
padding: 5px 0px;
position: fixed;
text-align: center;
-moz-transition: opacity 0.5s, margin-bottom 0.5s;
-ms-transition: opacity 0.5s, margin-bottom 0.5s;
-o-transition: opacity 0.5s, margin-bottom 0.5s;
-webkit-transition: opacity 0.5s, margin-bottom 0.5s;
transition: opacity 0.5s, margin-bottom 0.5s;
-moz-transition-delay: 279ms;
-ms-transition-delay: 279ms;
-o-transition-delay: 279ms;
-webkit-transition-delay: 279ms;
transition-delay: 279ms;
width: 120px;
z-index: 999;
}
#loading span {
background-repeat: no-repeat;
background-position: right center;
background-image: url(data:image/gif;base64,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);
display: inline-block;
height: 30px;
line-height: 30px;
padding-right: 30px;
}
#loading span:after {
content: '...';
}
.blogger-gear {
background-repeat: no-repeat;
background-position: center center;
background-image: url(data:image/gif;base64,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
display: inline-block;
height: 95px;
width: 95px;
}
#message {
position: fixed;
text-align: center;
top: 40%;
width: 100%;
}
#message span {
background-color: white;
border-radius: 6px;
color: #333;
box-shadow: 0 0 4px #666;
display: inline-block;
font-family: arial;
font-size: 16px;
padding: 15px;
white-space: no-wrap;
}
.quick-search {
background-color: white;
border: 1px solid rgba(0, 0, 0, 0.2);
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
-moz-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
-ms-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
-o-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
padding: 5px;
width: 450px;
z-index: 10001;
}
.quick-search li {
cursor: pointer;
}
.quick-search .result {
border: solid 1px transparent;
clear: both;
font-size: 13px;
height: 48px;
margin: -1px;
overflow: hidden;
padding: 7px;
position: relative;
}
.quick-search .title {
display: inline-block;
font-size: 15px;
left: 60px;
overflow: hidden;
position: absolute;
right: 130px;
text-overflow: ellipsis;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
top: 5px;
white-space: nowrap;
}
.quick-search .date {
color: #dd4b39;
font-size: 15px;
margin-left: 5px;
position: absolute;
right: 5px;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
top: 5px;
}
.quick-search .snippet {
color: #888;
left: 60px;
line-height: 1.25;
max-height: 35px;
overflow: hidden;
position: absolute;
right: 5px;
text-align: justify;
top: 24px;
}
.quick-search .thumbnail {
-moz-border-radius: 5px;
-ms-border-radius: 5px;
-o-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
left: 5px;
margin-right: 7px;
position: absolute;
top: 5px;
}
.quick-search .result:hover,
.quick-search .result.active {
background-color: #f9edbe;
border: solid 1px #f0c36d;
-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-ms-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-o-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.quick-search .result:hover .snippet,
.quick-search .result.active .snippet {
color: #333;
}
.quick-search .result .term {
background-color: #f9edbe;
color: black;
}
.quick-search .result:hover .term,
.quick-search .result:active .term {
background-color: transparent;
}
.quick-search .server {
border: solid 1px transparent;
margin: -1px;
padding: 10px;
text-align: center;
}
.quick-search li + .server {
border-top: solid 1px #ddd;
}
.quick-search .server:hover,
.quick-search .server.active {
background-color: #eaeaea;
border: solid 1px #ccc;
-moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-ms-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-o-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.quick-search .message {
color: #4d90fe;
display: block;
font-size: 16px;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
}
.quick-search .search_query {
color: black;
}
.quick-search .count {
color: #222;
display: block;
font-size: 14px;
}
#search.searching {
background-image: url(data:image/gif;base64,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);
background-position: center right;
background-repeat: no-repeat;
-moz-transition: none;
-ms-transition: none;
-o-transition: none;
-webkit-transition: none;
transition: none;
}
@media print {
/* Printing on white is cleaner. */
.article {
background-color: white !important;
margin: 0 !important;
}
.article img {
border: none !important;
box-shadow: none !important;
}
.ribbon.date .ribbon-piece {
display: none;
}
.ribbon.date {
display: inline-block;
height: 100%;
margin: 0 !important;
padding: 0;
position: static !important;
top: 0;
white-space: nowrap;
width: auto;
}
.ribbon.date:after{
content: attr(title);
color: rgba(51, 51, 51, 1);
font-size: 20px;
}
/* Include the links to all anchors */
.article-content a:after {
content: " [" attr(href) "] ";
font-size: 90%;
}
/* Fix printing for the viewitem --------------------------------- */
/* Hide lots of things. */
.overview-open > *,
.overview-backdrop,
.overview-header,
.share-controls,
.adsense-aside,
.adsense-aside {
display: none !important;
}
/* Show the main content. */
.overview-open > #overview {
display: block !important;
}
/* Reset colors, padding, and positions. */
body.overview-open,
.overview-panel,
.overview-wrap,
.overview-inner,
.overview-content {
background-color: white !important;
border: none !important;
box-shadow: none !important;
margin: 0 !important;
overflow: visible !important;
padding: 0 !important;
position: static !important;
}
/* Ensure content positioned - but keep padding. */
.overview-panel .overview-content {
position: static !important;
}
/* Fix printing for the viewitem --------------------------------- */
/* Hide lots of things. */
.viewitem-open > *,
.viewitem-background,
.viewitem-header,
.share-controls {
display: none !important;
}
/* Show the main content. */
.viewitem-open > .viewitem-panel {
display: block !important;
}
/* Reset colors, padding, and positions. */
body.viewitem-open,
.viewitem-panel,
.viewitem-wrap,
.viewitem-inner,
.viewitem-content {
background-color: white !important;
border: none !important;
box-shadow: none !important;
margin: 0 !important;
overflow: visible !important;
padding: 0 !important;
position: static !important;
}
/* Ensure content positioned - but keep padding. */
.viewitem-panel .viewitem-content {
position: static !important;
}
/* View specific (eg Sidebar and Mosaic) fixes should go elsewhere */
}
#attribution-container {
padding: 8px;
}
#header-container {
height: 105px;
}
#header {
left: 0;
position: fixed;
top: 0;
width: 100%;
z-index: 1000;
}
#header .header-bar {
/* No custom image, put slight gradient. */
background-image: -moz-linear-gradient(
center top,
rgba(255, 255, 255, 0.1),
rgba(100, 100, 100, 0.05)
);
background-image: -webkit-gradient(
linear,
left top,
left bottom,
from(rgba(255, 255, 255, 0.3)),
to(rgba(255, 255, 255, 0.05))
);
background-attachment: scroll; /* Chrome, really? */
background-color: rgba(243, 243, 243, 1);
-moz-box-shadow: 0 0 5px 0px rgba(0, 0, 0, 0.3);
-ms-box-shadow: 0 0 5px 0px rgba(0, 0, 0, 0.3);
-o-box-shadow: 0 0 5px 0px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 0 5px 0px rgba(0, 0, 0, 0.3);
box-shadow: 0 0 5px 0px rgba(0, 0, 0, 0.3);
height: 65px;
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: 1001;
}
#header .header-bar .title {
display: block;
height: 65px;
line-height: 65px;
margin-left: 20px;
margin-right: 235px;
overflow: hidden;
text-decoration: none;
text-overflow: ellipsis;
white-space: nowrap;
}
#header .header-bar .title h1,
#header .header-bar .title h3 {
display: inline;
height: 65px;
text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.3);
white-space: nowrap;
}
#header .header-bar .title h1 {
color: rgba(85, 85, 85, 1);
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 28px;
}
#header .header-bar .title h3 {
color: rgba(85, 85, 85, 1);
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 20px;
margin-left: 5px;
}
#header input#search {
background-color: #fafafa;
-moz-border-radius: 3px;
-ms-border-radius: 3px;
-o-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
border: none;
-moz-box-shadow: inset 1px 1px 2px #bbb;
-ms-box-shadow: inset 1px 1px 2px #bbb;
-o-box-shadow: inset 1px 1px 2px #bbb;
-webkit-box-shadow: inset 1px 1px 2px #bbb;
box-shadow: inset 1px 1px 2px #bbb;
font-size: 15px;
height: 30px;
margin: 0;
padding: 0px 7px;
right: 10px;
text-align: left;
text-transform: lowercase;
top: 18px;
-moz-transition: background-color 0.3s ease-in-out;
-ms-transition: background-color 0.3s ease-in-out;
-o-transition: background-color 0.3s ease-in-out;
-webkit-transition: background-color 0.3s ease-in-out;
transition: background-color 0.3s ease-in-out;;
width: 200px;
position: absolute;
}
#header input#search:focus {
background-color: white;
}
#header .header-drawer {
/* the drawer scrolls with the page initially, then gets fixed (.sticky) */
background-color: rgba(51, 51, 51, 1);
-moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);
-ms-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);
-o-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);
box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);;
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
height: 35px;
margin-top: 31px; /* use margin to match back to un-scrolled */
position: absolute;
top: 34px; /* top here must match top when sticky */
width: 100%;
z-index: 1000;
}
#header .header-drawer.sticky {
margin-top: 0px;
top: 34px; /* now stuck, just peeking out from the top */
-moz-transition: top 0.2s linear;
-ms-transition: top 0.2s linear;
-o-transition: top 0.2s linear;
-webkit-transition: top 0.2s linear;
transition: top 0.2s linear;
-moz-transition-delay: 0.3s;
-ms-transition-delay: 0.3s;
-o-transition-delay: 0.3s;
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s; /* don't surprise on quick hover */
}
#header:hover .header-drawer,
#header .header-drawer.open {
margin-top: 0px;
top: 65px; /* animate back down to full unscrolled height */
}
/* Views and Pages */
#header #views {
float: left;
position: relative;
z-index: 999;
}
#header .menu .menu-item,
#header .menu .menu-heading {
border-radius: 4px;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: rgba(255, 255, 255, 1);
cursor: pointer;
display: inline-block;
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 15px;
font-weight: 100;
line-height: 30px;
height: 30px;
padding-left: 15px;
padding-right: 15px;
text-shadow: -1px -1px rgba(0, 0, 0, 0.1); /* subtle inset */
-moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
-ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
-o-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
-webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
-webkit-user-select: none;
user-select: none;;
width: 100%;
}
#header a.menu-item {
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
#views .menu-item {
text-transform: capitalize;
}
#header .menu .menu-heading {
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 35px;
line-height: 35px;
margin-right: 15px;
position: relative;
width: auto;
}
#header .indicator {
/* instead of using a .heading::after actually put this in as elements
which will allow us to animate it rotating! */
border-color: rgba(255, 255, 255, 1) transparent transparent transparent;
border-style: solid;
border-width: 5px;
height: 0px;
margin: 0;
margin-top: -1px;
overflow: visible;
padding: 0;
position: absolute;
right: 0;
top: 50%;
-moz-transition: all .3s linear;
-ms-transition: all .3s linear;
-o-transition: all .3s linear;
-webkit-transition: all .3s linear;
transition: all .3s linear;
-moz-transform-origin: center 2px;
-ms-transform-origin: center 2px;
-o-transform-origin: center 2px;
-webkit-transform-origin: center 2px;
transform-origin: center 2px;
}
#header .menu:hover .indicator {
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
#header .menu ul {
-moz-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
-ms-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
-o-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
max-height: 0px;
overflow: hidden;
padding: 0;
-moz-transition: all 0.3s linear;
-ms-transition: all 0.3s linear;
-o-transition: all 0.3s linear;
-webkit-transition: all 0.3s linear;
transition: all 0.3s linear;
visibility: hidden;
width: 100%;
}
#header .menu:hover ul {
max-height: 500px;
opacity: 1;
-moz-transition: all 0.6s linear;
-ms-transition: all 0.6s linear;
-o-transition: all 0.6s linear;
-webkit-transition: all 0.6s linear;
transition: all 0.6s linear; /* show slower than hide */
visibility: visible;
}
#header .menu li {
display: list-item;
margin: 0;
overflow: hidden;
padding: 0;
position: relative;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
}
#header .menu li a {
opacity: 0.99; /* Chrome12+ has different subpixel anti-aliasing rules, this looks worse, but prevents flicker. */
}
#header .menu .menu-background {
background-color: rgba(51, 51, 51, 1);
height: 100%;
left: 0;
opacity: 0.75;
position: absolute;
top: 0;
-moz-transition: opacity 0.3s ease-in;
-ms-transition: opacity 0.3s ease-in;
-o-transition: opacity 0.3s ease-in;
-webkit-transition: opacity 0.3s ease-in;
transition: opacity 0.3s ease-in;
width: 100%;
z-index: -1; /* Negative isn't great... but otherwise the a needs to be positioned. */
}
#header .menu li:hover .menu-background {
opacity: 0.95;
}
#header .menu li {
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
#header .tabs li {
display: inline;
height: 35px;
line-height: 35px;
margin-left: 10px;
}
#header .tags li .menu-background {
display: none;
}
#header .tabs li .menu-item {
color: rgba(255, 255, 255, 0.6);
-moz-transition: color 286ms ease-in;
-ms-transition: color 286ms ease-in;
-o-transition: color 286ms ease-in;
-webkit-transition: color 286ms ease-in;
transition: color 286ms ease-in;
}
#header .tabs li .menu-item:hover,
#header .menu li .menu-item:hover,
#header .tabs li .menu-item.current {
color: rgba(255, 255, 255, 1) !important;
}
#header .tabs .menu-heading {
display: none;
}
#header #pages {
float: left;
margin-left: 0px;
position: relative;
}
#header #pages:before {
border-left: solid 1px rgba(255, 255, 255, 1);
content: '';
height: 20px;
left: 0px;
opacity: 0.5;
position: absolute;
top: 8px;
z-index: 1000;
}
#header #pages.tabs ul {
margin-left: 0px;
overflow: hidden;
white-space: nowrap;
}
#header .admin-controls {
height: 35px;
position: absolute;
right: 10px;
top: 0px;
}
#header .admin-controls .dashboard {
background-repeat: no-repeat;
background-position: center center;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAANCAYAAAB2HjRBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAVdEVYdENyZWF0aW9uIFRpbWUAMTEvNy8xMZe/cygAAADVSURBVCiRpZG9agJBFEbPxB/E1mCTV4iFldW+hZWIRdqAr2EtIX2a9Ja24jPoE1gKWqmIyUnhqqvuqpDTzB34Dtz5BjJQG+pMbak1deeeroqaKUbqNA7P1b66vSurzUQwjaP8dCG2gW+gkPUcYHcYjrL6BnwBxRsiwCuQP0gFtXdjzTQGahX1Q/1RNw+KK/VXHQY1ApZABHzeWRngHRgBlXwIYRyvX0l2ByyADZADnuMTYApMzgoDyol5DXRCCC9AHZin5c6+KkHg1Hopvl+RJT/Ev+Q/DML6Kx8BC7sAAAAASUVORK5CYII=);
/*background-size: 18px 18px;*/
display: block;
height: 35px;
opacity: 0.8;
position: absolute;
right: 0px;
top: 0;
width: 18px;
}
#header .admin-controls .new-post {
background-repeat: no-repeat;
background-position: center center;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAAVdEVYdENyZWF0aW9uIFRpbWUAMTEvNy8xMZe/cygAAADaSURBVCiRhdIxS0JRGMbx/z1a0KdwcyxttcXRLxBIEFgOfp0W5yAn56DNxUm3oiXItUmEgmwo/Dd4g+7p3HzW8/w45305sCNqW31QB2pQd4K6euc2C7WjVv8Dh+rcYl7Us0oJaAA3QDM6CsBTCjTVR/9mqXbV/RgclYA39TTvFMBxvqU4a/X8V68w9HMCfKiX0WtA3VOv8tImAheJmUGtqSO1pQ5z8K72SjZLAE6AT2ANtIAV0FevUwggU2fAAXALLIGJeh9CSP4XlSowBqbAAnjNsuyr7IaffAOehB+C7e2WDgAAAABJRU5ErkJggg==);
/*background-size: 18px 18px;*/
display: block;
height: 35px;
opacity: 0.8;
position: absolute;
right: 24px;
top: 0;
width: 18px;
}
#header .admin-controls .dashboard:hover,
#header .admin-controls .new-post:hover {
opacity: 1;
}
#header #follow-author {
height: 65px;
right: 0px;
overflow: hidden;
position: absolute;
top: 0;
width: 300px;
}
body.overview-open,
body.lightbox-open {
overflow: hidden;
}
/* overview background. */
#overview .overview-backdrop,
#lightbox .lightbox-backdrop {
background-color: black;
bottom: 0;
left: 0;
opacity: 0;
pointer-events: none;
position: fixed;
right: 0;
top: 0;
-moz-transition: all 1004ms ease-in;
-ms-transition: all 1004ms ease-in;
-o-transition: all 1004ms ease-in;
-webkit-transition: all 1004ms ease-in;
transition: all 1004ms ease-in;
z-index: 3000;
}
#overview.open .overview-backdrop,
#lightbox.open .lightbox-backdrop {
opacity: 0.7;
}
#overview.closing .overview-backdrop,
#lightbox.closing .lightbox-backdrop {
opacity: 0;
-moz-transition: opacity 0.5s;
-ms-transition: opacity 0.5s;
-o-transition: opacity 0.5s;
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
}
.overview-panel,
.lightbox-panel {
bottom: 0;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
left: 20px;
pointer-events: none;
position: fixed;
right: 20px;
top: 50px;
-moz-transition: all 1009ms ease-in-out;
-ms-transition: all 1009ms ease-in-out;
-o-transition: all 1009ms ease-in-out;
-webkit-transition: all 1009ms ease-in-out;
transition: all 1009ms ease-in-out;
z-index: 3001; /* Way up in the air. */
}
.lightbox-title {
bottom: 0;
display: table-cell;
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
font-size: 20px;
height: 100%;
left: 60px;
line-height: 50px;
overflow: hidden;
position: absolute;
right: 60px;
text-align: center;
text-overflow: ellipsis;
top: 0;
white-space: nowrap;
}
.lightbox-contentwrap {
font-size: 14px;
margin: 0 auto;
max-width: 750px;
}
#overview.closing .overview-panel,
#lightbox.closing .lightbox-panel {
opacity: 0;
-moz-transition: opacity 0.5s;
-ms-transition: opacity 0.5s;
-o-transition: opacity 0.5s;
-webkit-transition: opacity 0.5s;
transition: opacity 0.5s;
}
/* Bounding box of our overview item. */
.overview-panel .overview-wrap,
.lightbox-panel .lightbox-wrap {
background-color: transparent;
-moz-border-radius: 6px 6px 0px 0px;
-ms-border-radius: 6px 6px 0px 0px;
-o-border-radius: 6px 6px 0px 0px;
-webkit-border-radius: 6px 6px 0px 0px;
border-radius: 6px 6px 0px 0px;
-moz-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABTUlEQVRIx+2W3WrDMAyF47hJWzrY+z/mYKNtnNhLxlE5PZNhN3NuahB24qDP+nMUOn8EmW1dVony7UJ7NorMvxTXQKa87/42Mh3CBasFJhEQftdVTq17JhlgfvdkUQBkgx2wLhX3eoOtCQDOgGaDsrIeoIFcGARYHPdmiWGh9baXAM4GNDFYJKW9424PWBxQR2416BNwBJBdG5xYDgJMTuyKuHL7ZjIgxy2SmIs1iUYBTk6SzPRs8hNPBg4OLALQk7VnAV7JkowDLA40MXCgzIxk8QAZqS4vAvyiupugOFGGLpSxKZBydekBIAMfsX4T4CeU3Qk0CdAsntXCSO5l4DafVnmvxPBjlRuBbE4CTIHqji01i44AnRC7c6Xor5Ab5C4WPy6AF/BfgM2TZteyaFL4u1xtTS/v5r+n5j/g5i3GLk1U8zZxl0a4Sav/DRDkGFoKi/1vAAAAAElFTkSuQmCC) 12 / 12px repeat;
-ms-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABTUlEQVRIx+2W3WrDMAyF47hJWzrY+z/mYKNtnNhLxlE5PZNhN3NuahB24qDP+nMUOn8EmW1dVony7UJ7NorMvxTXQKa87/42Mh3CBasFJhEQftdVTq17JhlgfvdkUQBkgx2wLhX3eoOtCQDOgGaDsrIeoIFcGARYHPdmiWGh9baXAM4GNDFYJKW9424PWBxQR2416BNwBJBdG5xYDgJMTuyKuHL7ZjIgxy2SmIs1iUYBTk6SzPRs8hNPBg4OLALQk7VnAV7JkowDLA40MXCgzIxk8QAZqS4vAvyiupugOFGGLpSxKZBydekBIAMfsX4T4CeU3Qk0CdAsntXCSO5l4DafVnmvxPBjlRuBbE4CTIHqji01i44AnRC7c6Xor5Ab5C4WPy6AF/BfgM2TZteyaFL4u1xtTS/v5r+n5j/g5i3GLk1U8zZxl0a4Sav/DRDkGFoKi/1vAAAAAElFTkSuQmCC) 12 / 12px repeat;
-o-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABTUlEQVRIx+2W3WrDMAyF47hJWzrY+z/mYKNtnNhLxlE5PZNhN3NuahB24qDP+nMUOn8EmW1dVony7UJ7NorMvxTXQKa87/42Mh3CBasFJhEQftdVTq17JhlgfvdkUQBkgx2wLhX3eoOtCQDOgGaDsrIeoIFcGARYHPdmiWGh9baXAM4GNDFYJKW9424PWBxQR2416BNwBJBdG5xYDgJMTuyKuHL7ZjIgxy2SmIs1iUYBTk6SzPRs8hNPBg4OLALQk7VnAV7JkowDLA40MXCgzIxk8QAZqS4vAvyiupugOFGGLpSxKZBydekBIAMfsX4T4CeU3Qk0CdAsntXCSO5l4DafVnmvxPBjlRuBbE4CTIHqji01i44AnRC7c6Xor5Ab5C4WPy6AF/BfgM2TZteyaFL4u1xtTS/v5r+n5j/g5i3GLk1U8zZxl0a4Sav/DRDkGFoKi/1vAAAAAElFTkSuQmCC) 12 / 12px repeat;
/* If border-image is declared below -webkit-border-image */
/* Webkit doesn't render correctly. */
border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABTUlEQVRIx+2W3WrDMAyF47hJWzrY+z/mYKNtnNhLxlE5PZNhN3NuahB24qDP+nMUOn8EmW1dVony7UJ7NorMvxTXQKa87/42Mh3CBasFJhEQftdVTq17JhlgfvdkUQBkgx2wLhX3eoOtCQDOgGaDsrIeoIFcGARYHPdmiWGh9baXAM4GNDFYJKW9424PWBxQR2416BNwBJBdG5xYDgJMTuyKuHL7ZjIgxy2SmIs1iUYBTk6SzPRs8hNPBg4OLALQk7VnAV7JkowDLA40MXCgzIxk8QAZqS4vAvyiupugOFGGLpSxKZBydekBIAMfsX4T4CeU3Qk0CdAsntXCSO5l4DafVnmvxPBjlRuBbE4CTIHqji01i44AnRC7c6Xor5Ab5C4WPy6AF/BfgM2TZteyaFL4u1xtTS/v5r+n5j/g5i3GLk1U8zZxl0a4Sav/DRDkGFoKi/1vAAAAAElFTkSuQmCC) 12 / 12px repeat;
-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAABTUlEQVRIx+2W3WrDMAyF47hJWzrY+z/mYKNtnNhLxlE5PZNhN3NuahB24qDP+nMUOn8EmW1dVony7UJ7NorMvxTXQKa87/42Mh3CBasFJhEQftdVTq17JhlgfvdkUQBkgx2wLhX3eoOtCQDOgGaDsrIeoIFcGARYHPdmiWGh9baXAM4GNDFYJKW9424PWBxQR2416BNwBJBdG5xYDgJMTuyKuHL7ZjIgxy2SmIs1iUYBTk6SzPRs8hNPBg4OLALQk7VnAV7JkowDLA40MXCgzIxk8QAZqS4vAvyiupugOFGGLpSxKZBydekBIAMfsX4T4CeU3Qk0CdAsntXCSO5l4DafVnmvxPBjlRuBbE4CTIHqji01i44AnRC7c6Xor5Ab5C4WPy6AF/BfgM2TZteyaFL4u1xtTS/v5r+n5j/g5i3GLk1U8zZxl0a4Sav/DRDkGFoKi/1vAAAAAElFTkSuQmCC) 12 / 12px repeat;
-moz-box-sizing: content-box;
-ms-box-sizing: content-box;
-o-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
background-clip: padding-box;
top: -12px;
height: 100%;
left: 0;
margin: 0 auto;
max-width: 1000px;
overflow: hidden;
padding: 0px 1px; /* The controls the inset of the overview-inner. */
pointer-events: auto;
position: relative;
-moz-transition: left 0.5s linear;
-ms-transition: left 0.5s linear;
-o-transition: left 0.5s linear;
-webkit-transition: left 0.5s linear;
transition: left 0.5s linear;
z-index: 3002;
}
.overview-panel.left .overview-wrap {
left: -110%;
}
.overview-panel.right .overview-wrap {
left: 110%;
}
/* This is the box that things can be draw in. */
.overview-panel .overview-inner,
.lightbox-panel .lightbox-inner {
background-color: #fafafa;
-moz-border-radius: 6px 6px 0px 0px;
-ms-border-radius: 6px 6px 0px 0px;
-o-border-radius: 6px 6px 0px 0px;
-webkit-border-radius: 6px 6px 0px 0px;
border-radius: 6px 6px 0px 0px;
bottom: 0px;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 100%;
position: relative;
width: 100%;
}
.overview-panel .article {
/* Defend against Chrome 12+ antialiasing bug. */
background-color: #fafafa;
}
/* Header section for the overview-inner. */
.overview-panel .overview-header,
.lightbox-panel .lightbox-header {
-moz-border-radius: 6px 6px 0px 0px;
-ms-border-radius: 6px 6px 0px 0px;
-o-border-radius: 6px 6px 0px 0px;
-webkit-border-radius: 6px 6px 0px 0px;
border-radius: 6px 6px 0px 0px;
-moz-box-shadow: 0px 3px 3px rgba(200, 200, 200, .4);
-ms-box-shadow: 0px 3px 3px rgba(200, 200, 200, .4);
-o-box-shadow: 0px 3px 3px rgba(200, 200, 200, .4);
-webkit-box-shadow: 0px 3px 3px rgba(200, 200, 200, .4);
box-shadow: 0px 3px 3px rgba(200, 200, 200, .4);
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 50px;
padding: 10px;
position: absolute;
top: 0px;
-moz-transition: box-shadow 0.2s linear;
-ms-transition: box-shadow 0.2s linear;
-o-transition: box-shadow 0.2s linear;
-webkit-transition: box-shadow 0.2s linear;
transition: box-shadow 0.2s linear;
z-index: 5;
width: 100%;
}
.overview-header .share-controls {
float: left;
margin-left: 10px;
margin-top: 4px;
}
.overview-header .overview-controls-left {
float: left;
}
.overview-header .overview-controls-right,
.lightbox-header .lightbox-controls-right {
float: right;
}
/* overview container where we put the real stuff. */
.overview-panel .overview-content,
.lightbox-panel .lightbox-content {
bottom: 0px;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow-y: scroll; /* Always show: comments may cause it to bounce. */
padding: 10px;
position: absolute;
top: 50px;
-moz-transition: all 1s linear;
-ms-transition: all 1s linear;
-o-transition: all 1s linear;
-webkit-transition: all 1s linear;
transition: all 1s linear;
width: 100%;
z-index: 1;
}
.overview-panel.start .overview-header,
.lightbox-panel.start .lightbox-header {
-moz-box-shadow: none;
-ms-box-shadow: none;
-o-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
min-width: 200px; /* Stop any buttons wrapping. */
}
/* Custom webkit scrollbars */
.overview-panel .overview-content::-webkit-scrollbar,
.lightbox-panel .lightbox-content::-webkit-scrollbar {
background: transparent;
height: 10px;
width: 10px;
}
/* the start/end of bar */
.overview-panel .overview-content::-webkit-scrollbar-button:start:decrement,
.overview-panel .overview-content::-webkit-scrollbar-button:end:increment,
.lightbox-panel .lightbox-content::-webkit-scrollbar-button:start:decrement,
.lightbox-panel .lightbox-content::-webkit-scrollbar-button:end:increment {
display: block;
height: 10px;
width: 10px;
}
/* the track background */
.overview-panel.overview-content::-webkit-scrollbar-track-piece,
.lightbox-panel.lightbox-content::-webkit-scrollbar-track-piece {
background-color: #eee;
}
/* the scrollbar itself */
.overview-panel .overview-content::-webkit-scrollbar-thumb,
.lightbox-panel .lightbox-content::-webkit-scrollbar-thumb {
background-color: #666;
height: 50px;
width: 50px;
}
.overview-panel.start .overview-content:not(:hover)::-webkit-scrollbar-thumb,
.lightbox-panel.start .lightbox-content:not(:hover)::-webkit-scrollbar-thumb {
background-color: #eee;
}
.overview-panel .overview-content::-webkit-scrollbar-thumb:hover,
.lightbox-panel .lightbox-content::-webkit-scrollbar-thumb:hover {
background-color: #333;
height: 50px;
width: 50px;
}
body.viewitem-open {
overflow: hidden;
}
/* Ensure header drawer is visible. */
body.viewitem-open #header .header-drawer {
margin-top: 0px;
position: fixed;
top: 65px; /* animate back down to full unscrolled height */
}
/* While open, don't highlight the view menu. */
body.viewitem-open #header #views .menu-heading {
color: rgba(255, 255, 255, 0.6) !important;
}
body.viewitem-open #header #views .menu-heading .indicator {
border-color: rgba(255, 255, 255, 0.6) transparent transparent transparent !important;
}
body.viewitem-open .blogger-clickTrap.singleton-element {
display: none;
}
.viewitem-panel {
bottom: 0;
border-top: solid 1px rgba(51, 51, 51, 1);
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
left: 0;
margin-top: 0;
position: fixed;
right: 0;
top: 100px;
-moz-transition: margin-top 1s ease-in-out, bottom 1s ease-in-out;
-ms-transition: margin-top 1s ease-in-out, bottom 1s ease-in-out;
-o-transition: margin-top 1s ease-in-out, bottom 1s ease-in-out;
-webkit-transition: margin-top 1s ease-in-out, bottom 1s ease-in-out;
transition: margin-top 1s ease-in-out, bottom 1s ease-in-out;
z-index: 999; /* Way up in the air. */
}
.viewitem-panel.new,
.viewitem-panel.closing {
margin-top: -100%;
bottom: 100%;
}
/* Bounding box of our overview item. */
.viewitem-panel .viewitem-wrap {
background-color: white;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 100%;
left: 0;
margin: 0;
overflow: hidden;
position: relative;
z-index: 9999;
}
/* Header section for the overview-inner. */
.viewitem-panel .viewitem-header {
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 50px;
padding: 10px;
position: absolute;
top: 0px;
z-index: 5;
width: 100%;
}
/* This is the box that things can be draw in. */
.viewitem-panel .viewitem-inner {
bottom: 0px;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
height: 100%;
overflow-y: scroll;
padding: 30px 0px;
position: absolute;
top: 0;
width: 100%;
}
/* This allows us to be cute with continuous backgrounds */
.viewitem-panel .viewitem-background {
background-color: rgba(238, 238, 238, 1);
background-image: url(#EEEEEE none repeat scroll top left);
background-position: left top;
background-repeat: no-repeat;
background-attachment: scroll; /* Chrome, really? */
bottom: 0;
left: 0;
position: absolute;
top: -100px; /* This should be the height of the header. */
width: 100%;
}
/* overview container where we put the real stuff. */
.viewitem-panel .viewitem-content {
background-color: white;
background-clip: padding-box;
/* TODO(kiyono): re-enable box-shadow when the performance of box-shadow */
/* gets better. */
-moz-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
-ms-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
-o-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
/* If border-image is declared below -webkit-border-image */
/* Webkit doesn't render correctly. */
border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
border-width: 2px;
padding: 20px 70px;
left: 8px; /* Align it with classic in center - why is ther an offset? */
max-width: 750px;
margin: 0px auto;
position: relative;
}
.viewitem-panel .article {
background-color: white; /* Chrome12+ anti-aliasing bug. */
}
.viewitem-panel button.close {
margin-right: 10px;
}
.viewitem-panel .blogger-gear {
position: absolute;
left: 50%;
margin-left: -47px;
margin-top: -47px;
top: 50%;
}
/* Styles here should be minimized to limit amount of explicit casing. */
.article {
font-size: 14px;
margin: 0 auto;
max-width: 750px;
position: relative;
word-wrap: break-word;
}
/* Post Header */
.article .article-header {
display: table;
text-align: center;
width: 100%;
}
.article .article-header .title {
font-size: 20px;
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
width: 100%;
display: table-cell;
vertical-align: middle;
text-align: center;
padding-right: 40px; /* Compensate for ribbon, to stay centered. */
}
.article .title .edit {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAA+UlEQVR42s3U2QmDQBAG4JRgKZbio4qieIAniniiYgkpwRIsISVYQkqwhMlMiHkIhITNhGRgYNeHz/1xncPhn0pV1dkwjNW2bYkNRAzCMIQ4jj+HdzBJEmiaBtq2hSzLxOFHcBgGGMcRuq4Tg5+Be9/gmQ2kxmdrnucSG9j3/TxNEy/IGvl3oKIokqZpC+sJdV1fHceBNE2vl5oDlC3LInBjAakw9tF13TPeNRljbwh8BlKZpnnGAXGkdRRFclEUd1gIpOj0cQijPa6VIAhOdV2LgXt03/cBoy8Ib57n0QvWsixz4XFG0XEuQlVVC8a23/6HX6A80DfrAlIMSJorw8fYAAAAAElFTkSuQmCC);
background-repeat: no-repeat;
background-position: center center;
cursor: pointer;
display: inline-block;
height: 21px;
opacity: 0.8;
position: relative;
top: 3px;
width: 21px;
}
.article .title .edit:hover {
opacity: 1;
}
.article .article-header .date {
float: left;
left: 0px;
margin: 0px 5px 5px 0px;
position: relative;
top: 5px;
}
/* Post Content */
.article .article-content {
clear: both;
color: rgba(51, 51, 51, 1);
line-height: 1.4;
margin-top: 10px;
margin: 10px auto 5px auto;
text-align: justify;
}
/* This shouldn't really be added at all... it is from feeds. */
.article .article-content .blogger-post-footer {
display: none;
}
/* Restore a lot of the styles we reset globally. */
.article-content ol {
list-style-type: decimal;
margin: 0.5em 0;
padding-left: 2em;
}
.article-content ul {
list-style-type: disc;
margin: 0.5em 0;
padding-left: 2em;
}
.article-content p {
margin: 1em 0;
}
/* Defaults from: http://www.w3.org/TR/CSS2/sample.html */
.article-content h1,
.article-content h2,
.article-content h3,
.article-content h4,
.article-content h5,
.article-content h6 {
font-weight: bolder;
}
.article-content h1 {
font-size: 2em;
margin: .67em 0;
}
.article-content h2 {
font-size: 1.5em;
margin: .75em 0;
}
.article-content h3 {
font-size: 1.17em;
margin: .83em 0;
}
.article-content h4 {
margin: 1.12em 0;
}
.article-content h5 {
font-size: .83em;
margin: 1.5em 0;
}
.article-content h6 {
font-size: .75em;
margin: 1.67em 0;
}
.article .article-content a {
display: inline;
}
.article .article-content img {
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
-o-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display: inline-block;
height: auto;
margin: 10px auto; /* Attempt to horizontally center. */
/* For Sally-Anne. Keep images to the width of the post. */
/* It's needed to avoid IE because of b/5420328 */
max-width: 100%;
}
.article .article-content img:not(.deferred) {
padding: 8px;
/* TODO(kiyono): re-enable box-shadow when the performance of box-shadow */
/* gets better. */
-moz-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAOVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+8yHYvAAAAEnRSTlMAAgEDBAUJBwYzCw0UChARDghnBteEAAAAhElEQVR4XnWRSxJDIQgEEx1Axd/L/Q8bKCuuyOzsohHxdZLS25LSOV2ULQdflgEiIDu9KqiIFILXXpeEx2ChXwdnKNxUGxc4dZbNfXjPufkp5H0Nwtymq/dltUIweNy9qmXt08EgydDZ6+dT+9Qh9AeGenhROFI0fPjMaCHx6uIlh9/xBSJuB3l0A/6JAAAAAElFTkSuQmCC) 9 / 9px stretch;
-ms-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAOVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+8yHYvAAAAEnRSTlMAAgEDBAUJBwYzCw0UChARDghnBteEAAAAhElEQVR4XnWRSxJDIQgEEx1Axd/L/Q8bKCuuyOzsohHxdZLS25LSOV2ULQdflgEiIDu9KqiIFILXXpeEx2ChXwdnKNxUGxc4dZbNfXjPufkp5H0Nwtymq/dltUIweNy9qmXt08EgydDZ6+dT+9Qh9AeGenhROFI0fPjMaCHx6uIlh9/xBSJuB3l0A/6JAAAAAElFTkSuQmCC) 9 / 9px stretch;
-o-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAOVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+8yHYvAAAAEnRSTlMAAgEDBAUJBwYzCw0UChARDghnBteEAAAAhElEQVR4XnWRSxJDIQgEEx1Axd/L/Q8bKCuuyOzsohHxdZLS25LSOV2ULQdflgEiIDu9KqiIFILXXpeEx2ChXwdnKNxUGxc4dZbNfXjPufkp5H0Nwtymq/dltUIweNy9qmXt08EgydDZ6+dT+9Qh9AeGenhROFI0fPjMaCHx6uIlh9/xBSJuB3l0A/6JAAAAAElFTkSuQmCC) 9 / 9px stretch;
/* If border-image is declared below -webkit-border-image */
/* Webkit doesn't render correctly. */
border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAOVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+8yHYvAAAAEnRSTlMAAgEDBAUJBwYzCw0UChARDghnBteEAAAAhElEQVR4XnWRSxJDIQgEEx1Axd/L/Q8bKCuuyOzsohHxdZLS25LSOV2ULQdflgEiIDu9KqiIFILXXpeEx2ChXwdnKNxUGxc4dZbNfXjPufkp5H0Nwtymq/dltUIweNy9qmXt08EgydDZ6+dT+9Qh9AeGenhROFI0fPjMaCHx6uIlh9/xBSJuB3l0A/6JAAAAAElFTkSuQmCC) 9 / 9px stretch;
-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAAAOVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+8yHYvAAAAEnRSTlMAAgEDBAUJBwYzCw0UChARDghnBteEAAAAhElEQVR4XnWRSxJDIQgEEx1Axd/L/Q8bKCuuyOzsohHxdZLS25LSOV2ULQdflgEiIDu9KqiIFILXXpeEx2ChXwdnKNxUGxc4dZbNfXjPufkp5H0Nwtymq/dltUIweNy9qmXt08EgydDZ6+dT+9Qh9AeGenhROFI0fPjMaCHx6uIlh9/xBSJuB3l0A/6JAAAAAElFTkSuQmCC) 9 / 9px stretch;
border-width: 9px;
}
/* Resize all images/videos in posts. */
.article .article-content iframe,
.article .article-content embed {
display: inline-block;
/* It's needed to avoid IE because of b/5420328 */
max-width: 100%;
}
/* Post Footer */
.article .article-footer {
clear: both;
text-align: center;
}
.article .article-footer .publish-info,
.article .article-footer .geolocation-info,
.article .article-footer .labels {
color: rgba(128, 128, 128, 1);
font-family: 'Helvetica Neue Light', HelveticaNeue-Light, 'Helvetica Neue', Helvetica, Arial, sans-serif;
padding: 5px 0;
}
.article .article-footer .publish-info .author a,
.article .article-footer .publish-info .time {
color: rgba(51, 51, 51, 1);
}
.article .article-footer .label:not(:last-child):after {
content: ',';
}
.article .article-footer .share-controls {
display: inline-block;
margin: 10px 5px;
text-align: center;
}
/* AdSense */
.article.has-ads {
padding-right: 220px;
min-height: 650px; /* To accomodate skyscraper */
}
.article .adsense-aside {
padding: 15px 5px 0 5px;
position: absolute;
right: 5px;
text-align: center;
top: 5px;
width: 200px;
}
.article .adsense-footer .adsense {
margin-top: 10px;
padding: 10px 0;
}
.comments {
clear: both;
margin-top: 10px;
}
.comments .comments-header,
.comments .comments-footer {
text-align: center;
}
.comments .comments-header {
margin-bottom: 10px;
}
.comments .comments-header .comments-count {
top: -2px;
}
.comments .comments-header h3 {
display: inline-block;
padding: 5px;
}
@media only screen and (max-device-width: 1024px) {
.comments .comments-header h3 {
color: #222;
font-family: arial,sans-serif;
text-decoration: underline;
}
}
.comments .toggle-switch:hover h3 {
cursor: pointer;
text-decoration: underline;
}
/* Added by blogger for ghosted/removed comments .*/
.comments .deleted-comment {
font-style: italic;
opacity: 0.5;
}
/* While loading, hide the comment count, and then show an indicator. */
.comments.loading .comments-header .comments-count .bubble-content {
visibility: hidden;
}
.comments.loading .comments-header .comments-count {
background-image: url(data:image/gif;base64,R0lGODlhEAAQAPQAAGZmZv///2lpadzc3K+vr/r6+ufn5319fZmZmfDw8Le3t8DAwHV1daOjo4eHh9LS0srKygAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAFUCAgjmRpnqUwFGwhKoRgqq2YFMaRGjWA8AbZiIBbjQQ8AmmFUJEQhQGJhaKOrCksgEla+KIkYvC6SJKQOISoNSYdeIk1ayA8ExTyeR3F749CACH5BAAKAAEALAAAAAAQABAAAAVoICCKR9KMaCoaxeCoqEAkRX3AwMHWxQIIjJSAZWgUEgzBwCBAEQpMwIDwY1FHgwJCtOW2UDWYIDyqNVVkUbYr6CK+o2eUMKgWrqKhj0FrEM8jQQALPFA3MAc8CQSAMA5ZBjgqDQmHIyEAIfkEAAoAAgAsAAAAABAAEAAABWAgII4j85Ao2hRIKgrEUBQJLaSHMe8zgQo6Q8sxS7RIhILhBkgumCTZsXkACBC+0cwF2GoLLoFXREDcDlkAojBICRaFLDCOQtQKjmsQSubtDFU/NXcDBHwkaw1cKQ8MiyEAIfkEAAoAAwAsAAAAABAAEAAABVIgII5kaZ6AIJQCMRTFQKiDQx4GrBfGa4uCnAEhQuRgPwCBtwK+kCNFgjh6QlFYgGO7baJ2CxIioSDpwqNggWCGDVVGphly3BkOpXDrKfNm/4AhACH5BAAKAAQALAAAAAAQABAAAAVgICCOZGmeqEAMRTEQwskYbV0Yx7kYSIzQhtgoBxCKBDQCIOcoLBimRiFhSABYU5gIgW01pLUBYkRItAYAqrlhYiwKjiWAcDMWY8QjsCf4DewiBzQ2N1AmKlgvgCiMjSQhACH5BAAKAAUALAAAAAAQABAAAAVfICCOZGmeqEgUxUAIpkA0AMKyxkEiSZEIsJqhYAg+boUFSTAkiBiNHks3sg1ILAfBiS10gyqCg0UaFBCkwy3RYKiIYMAC+RAxiQgYsJdAjw5DN2gILzEEZgVcKYuMJiEAOwAAAAAAAAAAAA==);
background-position: center center;
background-repeat: no-repeat;
-moz-transition: none;
-ms-transition: none;
-o-transition: none;
-webkit-transition: none;
transition: none;
}
.blogger-comments .comments-content {
background-color: whitesmoke;
font-size: 13px;
margin-bottom: 16px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
-o-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
-moz-transition: all 0.5s ease-in;
-ms-transition: all 0.5s ease-in;
-o-transition: all 0.5s ease-in;
-webkit-transition: all 0.5s ease-in;
transition: all 0.5s ease-in;
}
@media only screen and (max-device-width: 1024px) {
.blogger-comments .comments-content {
background-color: #f1f1f1;
border: 1px solid #bbb;
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
}
.blogger-comments .comments-content .comment-actions {
color: #999;
}
.comments .comment .comment-actions a {
padding-top: 5px;
padding-right: 5px;
}
.comments .comment .comment-actions a:hover {
text-decoration: underline;
}
.blogger-comments .comments-content .secondary-link {
color: #69c;
}
.blogger-comments .comments-content .comment-thread {
list-style-type: none;
padding: 0;
text-align: left;
}
.blogger-comments .comments-content .inline-thread {
padding: 0.5em;
}
.blogger-comments .comments-content .comment-thread {
margin: 8px;
}
.blogger-comments .comments-content .comment-thread:empty {
display: none;
}
.blogger-comments .comments-content .comment-replies {
background-color: #ebebeb;
margin-top: 1em;
margin-left: 36px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
-o-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
.blogger-comments .comments-content .comment {
border-bottom: 1px solid #e3e3e3;
margin-bottom: 16px;
padding-bottom: 8px;
}
.blogger-comments .comments-content .comment:first-child {
padding-top: 16px;
}
.blogger-comments .comments-content .comment:last-child {
border-bottom: 0;
padding-bottom: 0;
}
.blogger-comments .comments-content .comment-body {
position: relative;
}
.blogger-comments .comments-content .user {
font-style: normal;
font-weight: bold;
}
.blogger-comments .comments-content .datetime {
margin-left: 6px;
}
.blogger-comments .comments-content .comment-header,
.blogger-comments .comments-content .comment-content {
margin: 0 0 8px;
}
.blogger-comments .comments-content .comment-content {
text-align: justify;
}
.blogger-comments .comments-content .owner-actions {
position: absolute;
right: 0;
top: 0;
}
.blogger-comments .comments-replybox {
border: none;
height: 250px;
width: 100%;
}
.blogger-comments .comment-replybox-single {
margin-top: 5px;
margin-left: 48px;
}
.blogger-comments .comment-replybox-thread {
margin-top: 5px;
}
.blogger-comments .comments-content .user,
.blogger-comments .comments-content .user a {
color: rgba(51, 51, 51, 1);
}
.blogger-comments .icon.blog-author {
width: 18px;
height: 18px;
display: inline-block;
background-repeat: no-repeat;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
margin: 0 0 -4px 6px;
}
.blogger-comments .comments-content .loadmore a {
background: #fafafa;
border-top: 1px solid #e3e3e3;
display: block;
padding: 10px 16px;
text-align: center;
}
.blogger-comments .thread-toggle {
cursor: pointer;
display: inline-block;
color: rgba(0, 158, 184, 1);
}
.blogger-comments .continue {
cursor: pointer;
}
.blogger-comments .continue a {
color: #888;
display: block;
padding: 0.5em;
background: white;
border: 1px solid #CCC;
-moz-box-shadow: inset 1px 1px 3px #888;
-ms-box-shadow: inset 1px 1px 3px #888;
-o-box-shadow: inset 1px 1px 3px #888;
-webkit-box-shadow: inset 1px 1px 3px #888;
box-shadow: inset 1px 1px 3px #888;
}
.blogger-comments .comments-content .loadmore:hover a {
background: #f1f1f1;
border-top: 1px solid #fff;
}
.blogger-comments .comments-content .loadmore {
cursor: pointer;
max-height: 3em;
}
.blogger-comments .comments-content .loadmore.loaded {
max-height: 0px;
opacity: 0;
overflow: hidden;
-moz-transition: all 0.5s ease-in;
-ms-transition: all 0.5s ease-in;
-o-transition: all 0.5s ease-in;
-webkit-transition: all 0.5s ease-in;
transition: all 0.5s ease-in;
}
@media only screen and (max-device-width: 1024px) {
.blogger-comments .comments-content .loadmore a,
.blogger-comments .comments-content .loadmore:focus a {
background: none;
border-top: 1px solid #ccc;
}
}
.blogger-comments .thread-chrome.thread-collapsed {
display: none;
}
.blogger-comments .thread-toggle {
display: inline-block;
}
.blogger-comments .thread-toggle .thread-arrow {
display: inline-block;
height: 6px;
width: 7px;
overflow: visible;
margin: 0.3em;
padding-right: 4px;
}
.blogger-comments .thread-expanded .thread-arrow {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAG0lEQVR42mNgwAfKy8v/48I4FeA0AacVDFQBAP9wJkE/KhUMAAAAAElFTkSuQmCC") no-repeat scroll 0 0 transparent;
}
.blogger-comments .thread-collapsed .thread-arrow {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAJUlEQVR42mNgAILy8vL/DLgASBKnApgkVgXIkhgKiNKJ005s4gDLbCZBiSxfygAAAABJRU5ErkJggg==") no-repeat scroll 0 0 transparent;
}
.blogger-comments .avatar-image-container {
float: left;
width: 36px;
max-height: 36px;
overflow: hidden;
}
.blogger-comments .avatar-image-container img {
width: 36px;
}
.blogger-comments .comment-block {
margin-left: 48px;
position: relative;
}
/* Responsive styles. */
@media screen and (max-device-width: 480px) {
.blogger-comments .comments-content .comment-replies {
margin-left: 0;
}
}
.share-controls {
overflow: hidden;
text-align: center;
white-space: nowrap;
}
.share-controls span,
.share-controls iframe {
height: 20px !important;
}
.share-controls .share-plusone,
.share-controls .share-twitter,
.share-controls .share-facebook {
/* PlusOne tries to reset a lot of settings, don't let it. */
background-repeat: no-repeat !important;
background-position: left center !important;
display: inline-block;
margin: 0;
}
.share-controls .share-plusone {
height: 20px;
/* Don't touch anything other than min-width, causes havoc with +1 */
min-width: 90px;
-moz-transition: min-width 0.3s;
-ms-transition: min-width 0.3s;
-o-transition: min-width 0.3s;
-webkit-transition: min-width 0.3s;
transition: min-width 0.3s;
}
.share-controls .share-plusone.defer {
min-width: 34px;
}
.share-controls .share-plusone.delay {
min-width: 90px;
}
.share-controls .share-twitter {
height: 20px;
width: 110px;
-moz-transition: width 0.3s;
-ms-transition: width 0.3s;
-o-transition: width 0.3s;
-webkit-transition: width 0.3s;
transition: width 0.3s;
}
.share-controls .share-twitter.defer {
width: 57px;
}
.share-controls .share-twitter.delay {
width: 110px;
}
.share-controls .share-facebook {
height: 20px;
width: 90px;
-moz-transition: width 0.3s;
-ms-transition: width 0.3s;
-o-transition: width 0.3s;
-webkit-transition: width 0.3s;
transition: width 0.3s;
}
.share-controls .share-facebook.defer {
width: 51px;
}
.share-controls .share-facebook.delay {
width: 90px;
}
#gadget-dock {
background-color: #333;
width: 50px;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);;
-moz-border-radius: 2px 0 0 2px;
-ms-border-radius: 2px 0 0 2px;
-o-border-radius: 2px 0 0 2px;
-webkit-border-radius: 2px 0 0 2px;
border-radius: 2px 0 0 2px;;
-moz-transition: right 0.15s ease-in-out;
-ms-transition: right 0.15s ease-in-out;
-o-transition: right 0.15s ease-in-out;
-webkit-transition: right 0.15s ease-in-out;
transition: right 0.15s ease-in-out;;
position: fixed;
right: -40px;
top: 124px;
z-index: 3000;
}
#gadget-dock:hover,
#gadget-dock.gadget-notifying,
#gadget-dock.gadget-opening {
right: 0;
}
/* expand the hover area */
#gadget-dock:after {
content: '';
display: block;
width: 90px;
height: 110%;
position: absolute;
top: -5%;
left: -40px;
z-index: -100;
}
#gadget-dock.gadget-opening:after {
display: none;
}
.gadget-item {
position: relative;
z-index: 1;
}
.gadget-selected {
z-index: 0;
}
.gadget-item:empty {
display: none;
}
.gadget-menu {
cursor: pointer;
background-color: #333;
border-top: 1px solid #585858;
text-align: center;
z-index: 0;
}
.gadget-icons {
width: 50px;
height: 50px;
line-height: 50px;
}
.gadget-menu .gadget-title {
display: none;
}
.gadget-selected .gadget-menu {
background-color: white;
border-color: #ccc;
}
.gadget-item:first-child .gadget-menu {
border-top: 1px solid transparent;
-moz-border-radius: 2px 0 0 0;
-ms-border-radius: 2px 0 0 0;
-o-border-radius: 2px 0 0 0;
-webkit-border-radius: 2px 0 0 0;
border-radius: 2px 0 0 0;
}
.gadget-selected.gadget-item:first-child .gadget-menu {
border-color: #ccc;
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.gadget-item:last-child .gadget-menu {
-moz-border-radius: 0 0 0 2px;
-ms-border-radius: 0 0 0 2px;
-o-border-radius: 0 0 0 2px;
-webkit-border-radius: 0 0 0 2px;
border-radius: 0 0 0 2px;
}
.gadget-selected.gadget-item:last-child .gadget-menu {
-moz-border-radius: 0;
-ms-border-radius: 0;
-o-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
}
.gadget-icon, .gadget-icon-selected {
display: inline-block;
max-width: 30px;
max-height: 30px;
vertical-align: middle;
}
.gadget-icon-selected {
display: none;
}
.gadget-selected .gadget-icon {
display: none;
}
.gadget-selected .gadget-icon-selected {
display: inline-block;
}
.gadget-container {
background-color: white;
-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-ms-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3);;
line-height: 1.4em;
text-align: left;
visibility: hidden;
z-index: -1;
margin-left: 100%;
word-wrap: break-word;
max-width: 700px;
}
.gadget-container {
-moz-transition: right 0.15s ease-in-out, opacity 0.15s ease-in-out;
-ms-transition: right 0.15s ease-in-out, opacity 0.15s ease-in-out;
-o-transition: right 0.15s ease-in-out, opacity 0.15s ease-in-out;
-webkit-transition: right 0.15s ease-in-out, opacity 0.15s ease-in-out;
transition: right 0.15s ease-in-out, opacity 0.15s ease-in-out;;
opacity: 0;
position: absolute;
top: 0;
right: -100px;
}
.gadget-container:hover,
.gadget-item:hover .gadget-container,
.gadget-selected .gadget-container {
visibility: visible;
right: 49px;
opacity: 1;
}
.gadget-selected .gadget-container {
border: 1px solid #ccc;
-moz-border-radius: 2px 0 0 2px;
-ms-border-radius: 2px 0 0 2px;
-o-border-radius: 2px 0 0 2px;
-webkit-border-radius: 2px 0 0 2px;
border-radius: 2px 0 0 2px;;
cursor: auto;
z-index: -100;
}
.gadget-selected.gadget-dock-overflow-bottom .gadget-container {
position: fixed;
bottom: 27px;
top: auto;
}
.gadget-selected.gadget-dock-overflow-client-area .gadget-container {
position: fixed;
top: 0;
bottom: 24px;
}
/* HACK: Because IE8 ignores max-width when "overflow-y: scroll" is set */
/* the scroll-bar is shown by the child element of .gadget-container. */
.gadget {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
/* IE scroll-bar */
scrollbar-arrow-color: white;
scrollbar-track-color: white;
scrollbar-face-color: #999;
scrollbar-highlight-color: #999;
scrollbar-shadow-color: #999;
scrollbar-3dlight-color: white;
scrollbar-darkshadow-color: white;
}
.gadget-selected.gadget-dock-overflow-client-area .gadget {
overflow-y: scroll;
}
.gadget::-webkit-scrollbar {
width: 14px;
}
.gadget::-webkit-scrollbar:hover {
background-color: #f3f3f3;
}
.gadget::-webkit-scrollbar-thumb {
border-width: 0 0 0 4px;
border-color: #999;
border-style: solid;
}
.gadget::-webkit-scrollbar-thumb:hover {
border-width: 0 0 0 12px;
}
.gadget::-webkit-scrollbar-button {
width: 14px;
height: 16px;
}
.gadget::-webkit-scrollbar-corner {
background-color: transparent;
}
.gadget-content {
display: block;
height: 0;
overflow: hidden;
position: relative;
}
.gadget-selected .gadget-content {
height: auto;
}
.gadget-container .gadget-title {
background-color: #333;
color: white;
display: block;
font-size: 14px;
padding: 1px 16px 0 16px;
height: 50px;
line-height: 50px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
position: relative;
}
.gadget-container .gadget-title:hover {
text-decoration: underline;
}
.gadget-selected .gadget-container .gadget-title {
background-color: transparent;
color: black;
font-size: 16px;
height: 40px;
}
.gadget-selected .gadget-container .gadget-title:hover {
text-decoration: none;
}
.gadget-content {
background-color: white;
}
.gadget-resize-detector {
background-color: transparent;
border-style: none;
margin: 0;
padding: 0;
outline: 0;
width: 0;
height: 100%;
position: absolute;
right: 0;
top: 0;
z-index: -1;
}
/* Center align posts. Border between them. */
ol.items {
text-align: center;
padding: 18px 10px 20px 10px;
}
li.item {
background-color: white;
background-clip: padding-box;
/* TODO(kiyono): re-enable box-shadow when the performance of box-shadow */
/* gets better. */
-moz-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
-ms-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
-o-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
/* If border-image is declared below -webkit-border-image */
/* Webkit doesn't render correctly. */
border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAANUlEQVQIW2NkYGBgQ8JAJsMvEGYEEjxQzA0SBYKvQPwFJCEExIJAfBcqoQyk3+OVwGkUVssBP4wMT0ZBZV0AAAAASUVORK5CYII=) 2 / 2px repeat;
border-width: 2px;
padding: 20px 70px;
max-width: 826px;
margin: 0px auto;
position: relative;
}
li.item + li.item {
margin-top: 30px;
}
li.ad {
padding: 0 0 20px 0;
position: relative;
}
li.item + li.ad {
padding-top: 20px;
}
li.ad ins.adsbygoogle {
margin: 0px auto;
}
.article {
position: static;
}
/* Ribbon to hang off the left. */
.article .article-header .date.ribbon {
position: absolute;
left: 20px;
top: 20px;
}
/* Unloaded images to have loading indicator. */
img.deferred {
background-repeat: no-repeat;
background-position: center center;
background-image: url(data:image/gif;base64,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);
border: solid 1px #ccc;
}
@media only screen and (max-width : 600px) {
#header-container {
height: 81px;
}
#header .header-bar,
#header .header-bar .title h1,
#header .header-bar .title h3 {
height: 48px;
}
#header .header-bar .title {
height: 48px;
line-height: 48px;
margin-right: 50px;
}
#header .header-bar .title h1 {
font-size: 20px;
}
#header .header-bar .title h3 {
font-size: 16px;
}
/* Show magnifier icon instead of showing placeholder. */
#header input#search {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAuElEQVQ4y72UQQ2GMAyFJwEJk1AJSEBCJUwCTiaB086/BCQgAQlQki55aSD/mhEO77Dt7UvXtQ2llPCWwlewKBpF1AO7Lv9EB2gXsRdGevECbKJFtAI0eWA1omz2GYCxBRYhojtz/hcdLkY1Lw/mSc/nFhipeX0wJw8sQPLtzw1wRq0wTHTWpyXzw646S6bGDgDVNLCnA6JCZ1V9GtYc9/Ymm2i5t9EtkHqnBkP+hjdGECHo03nm1gl0/D1dbs3/WAAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: center center;
color: transparent;
top: 9px;
-moz-transition: width 0.17s ease-in-out;
-ms-transition: width 0.17s ease-in-out;
-o-transition: width 0.17s ease-in-out;
-webkit-transition: width 0.17s ease-in-out;
transition: width 0.17s ease-in-out;;
width: 22px;
}
#header input#search:focus {
background-image: none;
color: black;
width: 200px;
}
#header input#search::-webkit-input-placeholder {
color: transparent;
}
#header input#search:focus::-webkit-input-placeholder {
color: #b5b5b5;
}
#header .header-drawer,
#header .menu .menu-heading,
#header .tabs li,
#header .admin-controls,
#header .admin-controls .dashboard,
#header .admin-controls .new-post {
height: 28px;
line-height: 28px;
}
#header .header-drawer,
#header .header-drawer.sticky {
top: 17px;
}
#header:hover .header-drawer,
#header .header-drawer.open {
top: 48px;
}
#header .menu .menu-heading {
height: 28px;
line-height: 28px;
}
#header #pages::before {
height: 14px;
}
}
@media only screen and (max-width : 600px) {
#gadget-dock {
width: 40px;
right: 0;
top: 100px;
}
#gadget-dock:after {
display: none;
}
.gadget-icons {
width: 40px;
height: 40px;
line-height: 40px;
}
.gadget-container {
max-width: 280px;
}
.gadget-container:hover,
.gadget-item:hover .gadget-container,
.gadget-selected .gadget-container {
right: 39px;
}
.gadget-title {
height: 40px;
line-height: 40px;
}
.gadget-selected .gadget-title {
line-height: 50px;
}
}
@media only screen and (max-width : 600px) {
li.item {
padding: 20px 10px 20px 10px;
}
li.ad {
padding: 0 0 20px 0;
}
.article .article-header {
height: 64px;
}
.article .article-header .title {
padding-right: 0px;
padding-left: 50px;
}
}
.article-content iframe {
max-width: 100%;
}
.article-content a[imageanchor] {
margin: 0 !important;
}</style><!-- Yo Dawg... --><meta name="meta" content="meta"></head>
<body class="variant-classic classic notouch viewitem-open"><div class="viewitem-panel">
<div class="viewitem-wrap">
<div class="viewitem-background"></div>
<div class="viewitem-header"></div>
<div class="viewitem-inner">
<div class="viewitem-content" tabindex="0">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="3209638659688275137">
<div class="article-header">
<a class="ribbon date " title="12th March 2013" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" itemprop="url">
<div class="top ribbon-piece">Mar</div>
<div class="bottom ribbon-piece">12</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="3209638659688275137">
Smart Guy Productivity Pitfalls</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=3209638659688275137&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">Productivity is one of my pet topics, because it's always dogged me a bit, especially early in my career. &nbsp;I'd pull long days and nights and then realize I only actually worked (as in, typing in code, debugging stuff, and thinking about problems and their solutions) maybe 20% of the time. &nbsp;Upon talking to coworkers, this seemed to be <i>normal, </i>a part of the&nbsp;expected friction costs incurred working in an office environment. &nbsp;Meetings, shooting the shit with coworkers, lunch, email, and, er, <i>stuff</i>.<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/en/9/93/Netscape_Navigator.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" src="http://upload.wikimedia.org/wikipedia/en/9/93/Netscape_Navigator.png" width="320"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This is what I mean by 'stuff' in 1996</td></tr>
</tbody></table>
<br>
<div>
<div>
Eventually working around high-productivity&nbsp;professionals like John Carmack made me realize that if you want to excel, then you have to work hard and focus the whole time.</div>
<div>
<br></div>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/c48b1ced.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="207" src="http://img2u.info/ckgni/i/c48b1ced.jpg" width="320"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">John Carmack Productivity Measurement Tool ca. 1998</td></tr>
</tbody></table>
I remember Carmack talking about productivity measurement. &nbsp;While working he would play a CD, and if he was not being productive, he'd pause the CD player. &nbsp;This meant any time someone came into his office to ask him a question or he checked email he'd pause the CD player. &nbsp;He'd then measure his output for the day by how many times he played the CD (or something like that -- maybe it was how far he got down into his CD stack). &nbsp;I distinctly remember him saying "So if I get up to go to the bathroom, I pause the player". <br>
<br>
You know what's pretty hardcore? &nbsp;Thinking that &nbsp;<i>going to the bathroom</i>&nbsp;is essentially the same as fucking off.</div>
<div>
<br></div>
<div>
(Sidenote: my memory is hazy on this since it was long ago -- CD PLAYERS yo).<br>
<br></div>
<div>
That level of work ethic and focus is rare, particularly with my generation of programmers who were raised with the vile "work smart, not hard" mantra, coupled with the sense that we were somehow significantly brighter than most of our peers. &nbsp;Combine those two notions and add the <a href="http://www.urbandictionary.com/define.php?term=Scotty%20Principle">Scotty Principle</a> and you get....me.</div>
<div>
<br></div>
<div>
<a href="http://cdn.memegenerator.net/instances/400x/36064437.jpg" imageanchor="1" style="clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://cdn.memegenerator.net/instances/400x/36064437.jpg"></a>If my coworkers were grinding through stuff that took them 20 hours, I'd be all "I work <i>smart</i>, not <i>hard</i>" with accompanying snarky eye roll, and I'd assume I could bust through an equivalent work load in four hours and still look like a goddamn superhero.</div>
<div>
<br></div>
<div>
And sometimes I could, so, hey, validation! &nbsp;</div>
<div>
<br></div>
<div>
And you can skate by like this (God knows I did) for a long time before a couple things eventually rear their heads and bite you in your entitled face.</div>
<div>
<h4>
Productivity Deficit: Your Attitude Writing Checks Your Work Ethic Can't Cash</h4>
</div>
<div>
An overinflated sense of your own abilities creates a constant state of production deficit, because you assume that you can make it up with a burst of brilliance and/or crunch. &nbsp;</div>
<div>
<br></div>
<div>
But there is no countering surplus to offset the deficit. &nbsp;The only way surpluses show up is when you finish a (presumably) hard task much faster than you anticipated. &nbsp;But instead of banking the surplus (i.e. moving on immediately to your next task), you spend it relaxing and screwing off because, whew, you just earned a small vacation by busting shit out in an hour that you thought would take all day. &nbsp;Hey, what's on Facebook and Twitter right now? &nbsp;Do I have any new mail? &nbsp;No? &nbsp;I wonder if anyone has tweeted something recently since the last time I checked...what about Reddit? &nbsp;Oh, an inspirational/funny/cool YouTube video, it's only eight minutes long, let me watch it now! &nbsp;(Eight minutes later) Sweet...what's up Twitter? &nbsp;Oh man, I have to make a snarky response, but first I have to Google for that XKCD comic that totally makes my point for me...</div>
<div>
<br></div>
<div>
And before you know it, the day is done, and you're still feeling good because you finished in one hour what should have taken all day, so all good, right?<br>
<h4>
Trap of the Easy Task</h4>
</div>
<div>
And yeah, it's often all good, but when operating at a slight deficit things can go pear shaped quickly when you accidentally spring the trap of the easy task. &nbsp;Tasks so trivial that they barely register as work. &nbsp;Update an SDK? &nbsp;Hour, tops. &nbsp;Implement this feature that I've already done on every other platform? &nbsp;Hour, tops. &nbsp;This is all mindless grunt work that anyone could do, it's just clicking through dialog boxes, maybe changing a few lines of source, rebuilding, whatever.</div>
<div>
<br></div>
<div>
In other words, an easy task like this is <i>so</i>&nbsp;easy that it's a constant time cost for everyone irrespective of ability, so there's no opportunity nor need for crazy overestimation since&nbsp;<i>what could possibly go wrong?</i></div>
<div>
<i><br></i></div>
<div>
Well, as with so many things, it's the unexpected things that screw you the hardest. &nbsp;The things that <i>should</i>&nbsp;be trivial end up taking days because, shit, that SDK install required a new compiler install, and the new compiler install failed and I can't uninstall it, and now I have to fucking WIPE MY WHOLE GODDAMN HARD DRIVE TO RECOVER. &nbsp;Or you need to implement something that was trivial on nine other platforms, and it should be 30 minutes on platform number ten, except it lacks a base feature that is present on everything else, the compiler is dying with an "Internal compiler failure 2033", the API call you need to use hangs the dev console immediately and, oh, the dev support site you use to get release notes is totally down for the&nbsp;foreseeable&nbsp;future.</div>
<div>
<br></div>
<div>
So what should have taken less than an hour took a week.</div>
<div>
<br></div>
<div>
It's like having a perfect monetary budget that assumes no crazy "one time" only bills, except life is full of crazy one time only bills and the only way you can keep those under control is by giving yourself a budgetary capacitor to dampen the fluctuations.</div>
<div>
<br></div>
<div>
And now you're defensive about losing a week to something stupid because you budgeted an hour for it and waited until the last second to do it and now the schedule has gone to hell, but it's not <i>your</i>&nbsp;fault, because it could have happened to anyone! &nbsp;But&nbsp;if you had banked your surplus hours before and/or worked at closer to your theoretical peak effectiveness then this type of thing would get absorbed in the wash.</div>
<div>
<br></div>
<div>
And now you live in a state of mild panic because you're way smarter than all this but you're never actually getting things done on time.</div>
<div>
<h4>
Identity Recalibration Crisis</h4>
</div>
<div>
Which leads to a potential identity recalibration crisis upon landing at a company with high performers that work hard <i>and</i>&nbsp;smart. &nbsp;And that will happen if you're good. &nbsp;Now you're no longer at the top of the curve. &nbsp;In fact, shit, you're in the middle or <i>bottom</i>&nbsp;of the curve, a situation your brain probably never considered as an option.<br>
<br>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/539249a2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="241" src="http://img2u.info/ckgni/i/539249a2.jpg" width="320"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This dude was my wake up call with respect to my<br>
over inflated sense of skill</td></tr>
</tbody></table>
I went through this when I went to id software. &nbsp;I had rationalized that John Carmack's success was just a factor of timing and luck since, hell, he was my age, and I was pretty smart, so what else could it be? &nbsp;Upon my arrival I had a crash course in humility, because he was <i>way</i>&nbsp;smarter than me and <i>way</i>&nbsp;more productive as well.<br>
<br>
This took a while to sink in, because until then I was used to believing I was one of the better programmers at a company. &nbsp;And then working with Carmack I realized he was not just a little better, he was <i>orders of magnitude </i>better. &nbsp;And I couldn't dismiss it with a "But I write a lot of code" hand wave, because he also wrote like 80% of the Quake code base.<br>
<br></div>
<div>
Sometimes it takes a while for this to sink in. &nbsp;Sometimes it doesn't sink in at all, and you're let go because you're not very productive compared to your new team of high performers. &nbsp;Sometimes it sinks in, and you panic and get depressed because your self-image has always been that of being the strongest swimmer in the school, and right now you're just trying not to drown, much less keep up with everyone else.</div>
<div>
<br></div>
<div>
But ideally you shrug off the old counter productive mentality and habits and emerge as another one of the high functioning team members, but that can take a lot of work, particularly if you have to get over years of giving it twenty percent.<br>
<h4>
Killing the Underachiever</h4>
If my pithy advice were little more than "Be more like John Carmack" then I can imagine a lot of readers throwing up their hands and saying "Well, fuck it, I'm a lost cause, because that's not going to happen." &nbsp;But what I can do is relate some of the things that helped me kill off some of my underachieving habits. &nbsp;The point isn't to become a superstar, it's to become better, since that's always the first step.<br>
<br>
I don't believe in mechanical solutions ("Turn off the internet", "Listen to music", and stuff like that) because I don't think they address the core issues, which are psychological. &nbsp;Instead I found that I had to do the following.<br>
<br>
<ol>
<li><b>Develop self-awareness</b>. &nbsp;It took working with John Carmack and other high productivity programmers and <i>admitting that they were way more productive than me</i>&nbsp;before I really understood how much more productive I could be. &nbsp;In other words, if you don't admit it's something worth improving, then obviously you're not going to search for a solution, and if that's the case, you should go <a href="http://www.reddit.com/">here </a>or <a href="https://www.facebook.com/">here</a>.</li>
<li><b>Give a shit</b>. &nbsp;Originally I called this "develop a sense of urgency", but really it's just about caring about getting your work done. &nbsp;It doesn't even matter what you specifically care about! &nbsp;It can be your professional image, your product, your team, your customers, whatever. &nbsp;You just have to care about something that will drive you to getting things done, because if you don't, apathy will occupy that void.</li>
<li><b>Minimize uncertainty</b>. &nbsp;In another blog article, <a href="http://bookofhook.blogspot.com/2012/09/productivity-vs-uncertainty-apathy.html">Productivity vs. Uncertainty and Apathy</a>, I talk about how poorly defined goals can lead to poor productivity. &nbsp;If it's unclear what you need to get done <i>today</i>, then there's a reasonable chance you won't actually <i>do </i>anything today.</li>
<li><b>Commit to getting something done every day.</b> &nbsp;When you show up in the morning have a well defined set of things to finish that day. &nbsp;Stay as late as you have to in order to finish. &nbsp;By committing to finishing that task other distractions will naturally fall by the wayside. &nbsp;For example, I have jiu-jitsu training at 7pm. &nbsp;If I screw off too much during the day, I don't get to train. &nbsp;Also, by committing to a task, you avoid "being busy" instead of "getting work done",&nbsp;<a href="http://bookofhook.blogspot.com/2013/01/being-busy-isnt-same-as-getting-work.html">they're not the same thing</a>. &nbsp;</li>
<li><b>Never say "I'll finish it up tomorrow" or "I'll make up for it by coming in early/staying late/working the weekend". </b>&nbsp;This is an easy trap to get into, where you keep incurring time debt until at some point you realize you're now three weeks behind on a task that should have taken two days. &nbsp;This is like racking up credit card bills assuming you can pay them off later. &nbsp;Which is fine, until "later" arrives and you've only accumulated more debt.</li>
<li><b>Do not overpromise to make up for poor productivity</b>. &nbsp;There's a tendency when we're falling behind to try to overcompensate with future promises. &nbsp;"When I'm done, it'll be AWESOME" or "I know I'm late, but I'm positive I'll be done by Monday". &nbsp;By doing those things we just build more debt we can't pay off, and that will eventually lead to a catastrophic melt down when the super final absolutely last deadline date shows up. &nbsp;Just get shit done, don't talk about how you're going to get shit done.</li>
<li><b>Have an objective productivity metric.</b> &nbsp;This is a mechanical thing, but it acts as a reasonable backstop. &nbsp;If you have changelogs you can reference, then it's easy to sit down on Friday and ask yourself "What have I done this week?" &nbsp;And if you know that it's possible for others to check on you, then it makes you take each day a lot more seriously. &nbsp;If you judge your value solely on output, not subjective things like "being smart", you will be more productive.</li>
<li><b>Accept that "the grind" is part of the job</b>. &nbsp;A friend of mine's father has a great quote:&nbsp;"Son, i don't wake up every day and go to a place called fun. I wake up and go to a place called <i>work</i>" &nbsp;You can't get irate or frustrated that the bulk of the day is typing in boring code and dealing with bugs and other people. &nbsp;</li>
</ol>
<div>
I still screw off during the day. &nbsp;I am not a code grinding automaton. &nbsp;I read Facebook, chat with others, Tweet, shop on Amazon, get coffee, read forums, write blog posts like this one<i>&nbsp;</i>and I'm <i>totally fine with that</i>. &nbsp;</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://cdn.memegenerator.net/instances/400x/36175351.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://cdn.memegenerator.net/instances/400x/36175351.jpg" width="255"></a></div>
<div>
<a href="http://www.blogger.com/"></a><span id="goog_263076810"></span><span id="goog_263076811"></span><br></div>
<div>
Because I know I'm committed to getting things done as well. &nbsp;So even though I'm writing &nbsp;this right now at 3pm, if I have to work until 8pm to get my shit done and checked in, I'll do that, so that tomorrow is a fresh start, not a day of "Oh goddamit, let's try <i>again</i>&nbsp;to finish that task I started a week ago."</div>
<div>
<br></div>
</div>
</div>
<div>
Once I developed that sense of daily urgency my productivity went up considerably. &nbsp;And if I'm really productive in the morning and afternoon and feel like I can go home at 4pm with a clean conscience, I do that too, so I don't burn out. &nbsp;</div>
<div>
<br></div>
<div>
It's a push/pull between banking surplus and generating a deficit, just make sure you don't do just one or the other.</div>
</div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2013-03-12T23:10:00.003Z" itemprop="datePublished">12th March 2013</abbr> by Unknown
</div>
<div class="share-controls delay" data-defer="" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button delay" data-url="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" data-count="" data-size="" data-text="Smart Guy Productivity Pitfalls"><iframe allowtransparency="true" frameborder="0" scrolling="no" src="//platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fbookofhook.blogspot.com%2F2013%2F03%2Fsmart-guy-productivity-pitfalls.html&amp;count=horizontal&amp;text=Smart%20Guy%20Productivity%20Pitfalls&amp;size=medium"></iframe></span>
<span class="share-facebook delay" data-url="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" data-count="" data-layout="" data-text="Smart Guy Productivity Pitfalls"><iframe allowtransparency="true" frameborder="0" scrolling="no" src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbookofhook.blogspot.com%2F2013%2F03%2Fsmart-guy-productivity-pitfalls.html&amp;send=false&amp;layout=button_count&amp;action=like&amp;show_faces=false&amp;colorscheme=light"></iframe></span>
</div>
</div>
<div class="comments" data-defer="">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="34 comments">
<span class="bubble-content">34</span>
<span class="bubble-tail"></span>
</span>
<h3>
View comments
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container" data-itemid="3209638659688275137" style="display: block;">
<div class="comments-content"><div id="bc_0_1C" kind="c"><div id="bc_0_1CT"><div id="bc_0_0T" class="comment-thread" kind="r" t="0" u="0"><ol id="bc_0_0TB"><li id="bc_0_2B" class="comment" kind="b"><div class="avatar-image-container"><img src="//2.bp.blogspot.com/-pJTyK3UJNC8/VLIHvIkZVEI/AAAAAAAAFx4/wdqXiwMjkbQ/s150/*"></div><div id="c178051977786741457" class="comment-block"><div id="bc_0_2M" class="comment-header" kind="m"><cite class="user"><a rel="nofollow" href="https://www.blogger.com/profile/11097726494898087412">Roy</a></cite><span class="icon user"></span><span class="datetime secondary-text"><a rel="nofollow" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html?showComment=1363392617022#c178051977786741457">March 15, 2013 at 5:10 PM</a></span></div><p id="bc_0_2MC" class="comment-content">Good post!<br><br>I'm dealing with this recently. Working with a bunch of really smart people is pretty awesome though.</p><span id="bc_0_2MN" class="comment-actions secondary-text" kind="m"><a kind="i" href="javascript:;" target="_self" o="r">Reply</a><span class="item-control blog-admin pid-1712461486"><a o="d" target="_self" href="https://www.blogger.com/delete-comment.g?blogID=7943444959024231990&amp;postID=178051977786741457">Delete</a></span></span></div><div id="bc_0_2BR" class="comment-replies"></div><div id="bc_0_2B_box" class="comment-replybox-single"></div></li><li id="bc_0_3B" class="comment" kind="b"><div class="avatar-image-container"><img src="https://img1.blogblog.com/img/b36-rounded.png"></div><div id="c6842726585397303062" class="comment-block"><div id="bc_0_3M" class="comment-header" kind="m"><cite class="user"><a rel="nofollow" href="https://www.blogger.com/profile/15283392831954712873">Aaron Leiby</a></cite><span class="icon user"></span><span class="datetime secondary-text"><a rel="nofollow" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html?showComment=1363393541274#c6842726585397303062">March 15, 2013 at 5:25 PM</a></span></div><p id="bc_0_3MC" class="comment-content">Lol.. love that last image.<br><br>I find having a totem to help focus (e.g. Carmack's CD player) works well for me. I got a 90 minute sand timer a while back that I can physically reach for and flip over when I feel the urge to check facebook, then promise not to check until it's out. I usually look up and find it's been empty for a while because I was too focused on work to have noticed.</p><span id="bc_0_3MN" class="comment-actions secondary-text" kind="m"><a kind="i" href="javascript:;" target="_self" o="r">Reply</a><span class="item-control blog-admin pid-284223169"><a o="d" target="_self" href="https://www.blogger.com/delete-comment.g?blogID=7943444959024231990&amp;postID=6842726585397303062">Delete</a></span></span></div><div id="bc_0_3BR" class="comment-replies"></div><div id="bc_0_3B_box" class="comment-replybox-single"></div></li><li id="bc_0_4B" class="comment" kind="b"><div class="avatar-image-container"><img src="//3.bp.blogspot.com/-rg-md3P7OhA/XWr_nm74JxI/AAAAAAAABrQ/BLilW6POw6oJGjG-3rjf2JD5foCBKzllQCK4BGAYYCw/s113/PicsMeVectorized.png"></div><div id="c2565414697594446308" class="comment-block"><div id="bc_0_4M" class="comment-header" kind="m"><cite class="user"><a rel="nofollow" href="https://www.blogger.com/profile/01836061012769080712">namar0x0309</a></cite><span class="icon user"></span><span class="datetime secondary-text"><a rel="nofollow" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html?showComment=1363394288263#c2565414697594446308">March 15, 2013 at 5:38 PM</a></span></div><p id="bc_0_4MC" class="comment-content">Great article! Good you recognized JC's self-discipline which may sound simple but that doesn't necessarily make it easy. I've written a post about building that discipline and having fun at the same time, it's at http://www.blog.namar0x0309.com/2013/02/the-gamification-of-time/.<br><br>Thanks!</p><span id="bc_0_4MN" class="comment-actions secondary-text" kind="m"><a kind="i" href="javascript:;" target="_se
<div class="comments-footer">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="header-container">
<div id="header" class="header">
<div class="header-bar">
<span class="title" onclick="$('html,body').stop().animate({'scrollTop': 0})">
<a href="/" target="_self"><h1 title="Book Of Hook">Book Of Hook</h1></a>
</span>
<input type="text" id="search" autocomplete="off" placeholder="Search">
</div>
<div class="header-drawer sticky open">
<div id="views" class="tabs">
<span class="menu-heading">Classic<span class="indicator"></span></span>
<ul>
<li class="Classic"><span class="menu-background"></span><a class="menu-item current" href="?view=classic" target="_self" data-view-name="classic">Classic</a></li>
<li class="Flipcard"><span class="menu-background"></span><a class="menu-item" href="?view=flipcard" target="_self" data-view-name="flipcard">Flipcard</a></li>
<li class="Magazine"><span class="menu-background"></span><a class="menu-item" href="?view=magazine" target="_self" data-view-name="magazine">Magazine</a></li>
<li class="Mosaic"><span class="menu-background"></span><a class="menu-item" href="?view=mosaic" target="_self" data-view-name="mosaic">Mosaic</a></li>
<li class="Sidebar"><span class="menu-background"></span><a class="menu-item" href="?view=sidebar" target="_self" data-view-name="sidebar">Sidebar</a></li>
<li class="Snapshot"><span class="menu-background"></span><a class="menu-item" href="?view=snapshot" target="_self" data-view-name="snapshot">Snapshot</a></li>
<li class="Timeslide"><span class="menu-background"></span><a class="menu-item" href="?view=timeslide" target="_self" data-view-name="timeslide">Timeslide</a></li>
</ul>
</div>
<div class="blog-admin admin-controls">
<a class="new-post" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;from=pencil" target="_self" title="New post"></a>
<a class="dashboard" href="https://www.blogger.com/home" target="_self" title="Dashboard"></a>
</div>
</div>
</div>
</div>
<script>
(function($) {
// Make the pages switch between tabs and menu as needed
var pages = $('#pages');
var tabs = pages.length ? pages : $('#views'); // If no pages, views will be tabs, same resizing applies.
if (tabs.length) {
function onResize(e) {
tabs.removeClass('menu').addClass('tabs');
var taken = 0;
tabs.parent().children().each(function() {
taken += this.offsetWidth;
});
var overflowing = tabs.parent().width() < (taken + 50); // Add a buffer for safety.
overflowing ? tabs.removeClass('tabs').addClass('menu') : tabs.addClass('tabs');
}
window.addEventListener('resize', onResize);
onResize(); // Resize immediately.
// Mark a page as selected when it is open.
var rePage = new RegExp('.*/p(/[^/]+.html$)');
$(blogger.ui()).bind('select clearselection', function(e, item) {
pages.find('.menu-item').each(function(){
var current = false;
if (item) {
var us = rePage.exec($(this).attr('href'));
var them = rePage.exec(item.url);
current = !!(us && them && (us[1] == them[1]));
}
$(this).toggleClass('current', current);
});
});
}
})(jQuery);
</script>
<div id="main" class="hfeed " tabindex="0">
<ol id="items" class="items"><li class="item" data-id="4238793060601038388">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="4238793060601038388">
<div class="article-header">
<a class="ribbon date " title="25th April 2014" href="http://bookofhook.blogspot.com/2014/04/this-advice-is-worthless.html" itemprop="url">
<div class="top ribbon-piece">Apr</div>
<div class="bottom ribbon-piece">25</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2014/04/this-advice-is-worthless.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="4238793060601038388">
This Advice Is Worthless</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=4238793060601038388&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">I was originally going to write this blog about a different topic, one of the endless online discussions about "How to get better at this thing you suck at". &nbsp;Then I realized it was pointless.<br>
<br>
Many "How to make your life/code/job/hobby better" blogs are very well written, insightful, and even inspirational. &nbsp;They provide awareness into our failings and weaknesses and hint at ways in which we can improve. &nbsp;They give us strategies and high level conceptual ideas on how to approach problems.<br>
<br>
The issue is that it's all mostly pointless. &nbsp;Finding the best plan doesn't mean we'll execute it, because very often the problem is that we suck at execution. The very things we're trying to fix are often the very things that prevent us from fixing them.<br>
<br>
Or, put another way, it's a rare situation where someone doesn't know what to do, is told what to do, then goes off and just does it.<br>
<br>
Have a nice day.<br>
<br></div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2014-04-25T15:39:00.005Z" itemprop="datePublished">25th April 2014</abbr> by Unknown
</div>
<div class="share-controls delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button" data-url="http://bookofhook.blogspot.com/2014/04/this-advice-is-worthless.html" data-count="" data-size="" data-text="This Advice Is Worthless"><iframe allowtransparency="true" frameborder="0" scrolling="no" src="//platform.twitter.com/widgets/tweet_button.html?url=http%3A%2F%2Fbookofhook.blogspot.com%2F2014%2F04%2Fthis-advice-is-worthless.html&amp;count=horizontal&amp;text=This%20Advice%20Is%20Worthless&amp;size=medium"></iframe></span>
<span class="share-facebook" data-url="http://bookofhook.blogspot.com/2014/04/this-advice-is-worthless.html" data-count="" data-layout="" data-text="This Advice Is Worthless"><iframe allowtransparency="true" frameborder="0" scrolling="no" src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbookofhook.blogspot.com%2F2014%2F04%2Fthis-advice-is-worthless.html&amp;send=false&amp;layout=button_count&amp;action=like&amp;show_faces=false&amp;colorscheme=light"></iframe></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="4 comments">
<span class="bubble-content">4</span>
<span class="bubble-tail"></span>
</span>
<h3>
View comments
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container toggle-active" data-itemid="4238793060601038388" style="display: none;">
<div class="comments-content"></div>
<div class="comments-footer">
<iframe frameborder="0" class="comments-replybox" data-src="https://www.blogger.com/comment-iframe.g?blogID=7943444959024231990&amp;postID=4238793060601038388"></iframe>
</div>
</div>
</div>
</div>
</li><li class="item" data-id="3209638659688275137">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="3209638659688275137">
<div class="article-header">
<a class="ribbon date " title="12th March 2013" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" itemprop="url">
<div class="top ribbon-piece">Mar</div>
<div class="bottom ribbon-piece">12</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="3209638659688275137">
Smart Guy Productivity Pitfalls</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=3209638659688275137&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">Productivity is one of my pet topics, because it's always dogged me a bit, especially early in my career. &nbsp;I'd pull long days and nights and then realize I only actually worked (as in, typing in code, debugging stuff, and thinking about problems and their solutions) maybe 20% of the time. &nbsp;Upon talking to coworkers, this seemed to be <i>normal, </i>a part of the&nbsp;expected friction costs incurred working in an office environment. &nbsp;Meetings, shooting the shit with coworkers, lunch, email, and, er, <i>stuff</i>.<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/en/9/93/Netscape_Navigator.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="298" width="320" src="http://upload.wikimedia.org/wikipedia/en/9/93/Netscape_Navigator.png"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This is what I mean by 'stuff' in 1996</td></tr>
</tbody></table>
<br>
<div>
<div>
Eventually working around high-productivity&nbsp;professionals like John Carmack made me realize that if you want to excel, then you have to work hard and focus the whole time.</div>
<div>
<br></div>
<div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/c48b1ced.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="207" width="320" data-src="http://img2u.info/ckgni/i/c48b1ced.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">John Carmack Productivity Measurement Tool ca. 1998</td></tr>
</tbody></table>
I remember Carmack talking about productivity measurement. &nbsp;While working he would play a CD, and if he was not being productive, he'd pause the CD player. &nbsp;This meant any time someone came into his office to ask him a question or he checked email he'd pause the CD player. &nbsp;He'd then measure his output for the day by how many times he played the CD (or something like that -- maybe it was how far he got down into his CD stack). &nbsp;I distinctly remember him saying "So if I get up to go to the bathroom, I pause the player". <br>
<br>
You know what's pretty hardcore? &nbsp;Thinking that &nbsp;<i>going to the bathroom</i>&nbsp;is essentially the same as fucking off.</div>
<div>
<br></div>
<div>
(Sidenote: my memory is hazy on this since it was long ago -- CD PLAYERS yo).<br>
<br></div>
<div>
That level of work ethic and focus is rare, particularly with my generation of programmers who were raised with the vile "work smart, not hard" mantra, coupled with the sense that we were somehow significantly brighter than most of our peers. &nbsp;Combine those two notions and add the <a href="http://www.urbandictionary.com/define.php?term=Scotty%20Principle">Scotty Principle</a> and you get....me.</div>
<div>
<br></div>
<div>
<a href="http://cdn.memegenerator.net/instances/400x/36064437.jpg" imageanchor="1" style="clear: right; display: inline !important; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-src="http://cdn.memegenerator.net/instances/400x/36064437.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a>If my coworkers were grinding through stuff that took them 20 hours, I'd be all "I work <i>smart</i>, not <i>hard</i>" with accompanying snarky eye roll, and I'd assume I could bust through an equivalent work load in four hours and still look like a goddamn superhero.</div>
<div>
<br></div>
<div>
And sometimes I could, so, hey, validation! &nbsp;</div>
<div>
<br></div>
<div>
And you can skate by like this (God knows I did) for a long time before a couple things eventually rear their heads and bite you in your entitled face.</div>
<div>
<h4>
Productivity Deficit: Your Attitude Writing Checks Your Work Ethic Can't Cash</h4>
</div>
<div>
An overinflated sense of your own abilities creates a constant state of production deficit, because you assume that you can make it up with a burst of brilliance and/or crunch. &nbsp;</div>
<div>
<br></div>
<div>
But there is no countering surplus to offset the deficit. &nbsp;The only way surpluses show up is when you finish a (presumably) hard task much faster than you anticipated. &nbsp;But instead of banking the surplus (i.e. moving on immediately to your next task), you spend it relaxing and screwing off because, whew, you just earned a small vacation by busting shit out in an hour that you thought would take all day. &nbsp;Hey, what's on Facebook and Twitter right now? &nbsp;Do I have any new mail? &nbsp;No? &nbsp;I wonder if anyone has tweeted something recently since the last time I checked...what about Reddit? &nbsp;Oh, an inspirational/funny/cool YouTube video, it's only eight minutes long, let me watch it now! &nbsp;(Eight minutes later) Sweet...what's up Twitter? &nbsp;Oh man, I have to make a snarky response, but first I have to Google for that XKCD comic that totally makes my point for me...</div>
<div>
<br></div>
<div>
And before you know it, the day is done, and you're still feeling good because you finished in one hour what should have taken all day, so all good, right?<br>
<h4>
Trap of the Easy Task</h4>
</div>
<div>
And yeah, it's often all good, but when operating at a slight deficit things can go pear shaped quickly when you accidentally spring the trap of the easy task. &nbsp;Tasks so trivial that they barely register as work. &nbsp;Update an SDK? &nbsp;Hour, tops. &nbsp;Implement this feature that I've already done on every other platform? &nbsp;Hour, tops. &nbsp;This is all mindless grunt work that anyone could do, it's just clicking through dialog boxes, maybe changing a few lines of source, rebuilding, whatever.</div>
<div>
<br></div>
<div>
In other words, an easy task like this is <i>so</i>&nbsp;easy that it's a constant time cost for everyone irrespective of ability, so there's no opportunity nor need for crazy overestimation since&nbsp;<i>what could possibly go wrong?</i></div>
<div>
<i><br></i></div>
<div>
Well, as with so many things, it's the unexpected things that screw you the hardest. &nbsp;The things that <i>should</i>&nbsp;be trivial end up taking days because, shit, that SDK install required a new compiler install, and the new compiler install failed and I can't uninstall it, and now I have to fucking WIPE MY WHOLE GODDAMN HARD DRIVE TO RECOVER. &nbsp;Or you need to implement something that was trivial on nine other platforms, and it should be 30 minutes on platform number ten, except it lacks a base feature that is present on everything else, the compiler is dying with an "Internal compiler failure 2033", the API call you need to use hangs the dev console immediately and, oh, the dev support site you use to get release notes is totally down for the&nbsp;foreseeable&nbsp;future.</div>
<div>
<br></div>
<div>
So what should have taken less than an hour took a week.</div>
<div>
<br></div>
<div>
It's like having a perfect monetary budget that assumes no crazy "one time" only bills, except life is full of crazy one time only bills and the only way you can keep those under control is by giving yourself a budgetary capacitor to dampen the fluctuations.</div>
<div>
<br></div>
<div>
And now you're defensive about losing a week to something stupid because you budgeted an hour for it and waited until the last second to do it and now the schedule has gone to hell, but it's not <i>your</i>&nbsp;fault, because it could have happened to anyone! &nbsp;But&nbsp;if you had banked your surplus hours before and/or worked at closer to your theoretical peak effectiveness then this type of thing would get absorbed in the wash.</div>
<div>
<br></div>
<div>
And now you live in a state of mild panic because you're way smarter than all this but you're never actually getting things done on time.</div>
<div>
<h4>
Identity Recalibration Crisis</h4>
</div>
<div>
Which leads to a potential identity recalibration crisis upon landing at a company with high performers that work hard <i>and</i>&nbsp;smart. &nbsp;And that will happen if you're good. &nbsp;Now you're no longer at the top of the curve. &nbsp;In fact, shit, you're in the middle or <i>bottom</i>&nbsp;of the curve, a situation your brain probably never considered as an option.<br>
<br>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/539249a2.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="241" width="320" data-src="http://img2u.info/ckgni/i/539249a2.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">This dude was my wake up call with respect to my<br>
over inflated sense of skill</td></tr>
</tbody></table>
I went through this when I went to id software. &nbsp;I had rationalized that John Carmack's success was just a factor of timing and luck since, hell, he was my age, and I was pretty smart, so what else could it be? &nbsp;Upon my arrival I had a crash course in humility, because he was <i>way</i>&nbsp;smarter than me and <i>way</i>&nbsp;more productive as well.<br>
<br>
This took a while to sink in, because until then I was used to believing I was one of the better programmers at a company. &nbsp;And then working with Carmack I realized he was not just a little better, he was <i>orders of magnitude </i>better. &nbsp;And I couldn't dismiss it with a "But I write a lot of code" hand wave, because he also wrote like 80% of the Quake code base.<br>
<br></div>
<div>
Sometimes it takes a while for this to sink in. &nbsp;Sometimes it doesn't sink in at all, and you're let go because you're not very productive compared to your new team of high performers. &nbsp;Sometimes it sinks in, and you panic and get depressed because your self-image has always been that of being the strongest swimmer in the school, and right now you're just trying not to drown, much less keep up with everyone else.</div>
<div>
<br></div>
<div>
But ideally you shrug off the old counter productive mentality and habits and emerge as another one of the high functioning team members, but that can take a lot of work, particularly if you have to get over years of giving it twenty percent.<br>
<h4>
Killing the Underachiever</h4>
If my pithy advice were little more than "Be more like John Carmack" then I can imagine a lot of readers throwing up their hands and saying "Well, fuck it, I'm a lost cause, because that's not going to happen." &nbsp;But what I can do is relate some of the things that helped me kill off some of my underachieving habits. &nbsp;The point isn't to become a superstar, it's to become better, since that's always the first step.<br>
<br>
I don't believe in mechanical solutions ("Turn off the internet", "Listen to music", and stuff like that) because I don't think they address the core issues, which are psychological. &nbsp;Instead I found that I had to do the following.<br>
<br>
<ol>
<li><b>Develop self-awareness</b>. &nbsp;It took working with John Carmack and other high productivity programmers and <i>admitting that they were way more productive than me</i>&nbsp;before I really understood how much more productive I could be. &nbsp;In other words, if you don't admit it's something worth improving, then obviously you're not going to search for a solution, and if that's the case, you should go <a href="http://www.reddit.com/">here </a>or <a href="https://www.facebook.com/">here</a>.</li>
<li><b>Give a shit</b>. &nbsp;Originally I called this "develop a sense of urgency", but really it's just about caring about getting your work done. &nbsp;It doesn't even matter what you specifically care about! &nbsp;It can be your professional image, your product, your team, your customers, whatever. &nbsp;You just have to care about something that will drive you to getting things done, because if you don't, apathy will occupy that void.</li>
<li><b>Minimize uncertainty</b>. &nbsp;In another blog article, <a href="http://bookofhook.blogspot.com/2012/09/productivity-vs-uncertainty-apathy.html">Productivity vs. Uncertainty and Apathy</a>, I talk about how poorly defined goals can lead to poor productivity. &nbsp;If it's unclear what you need to get done <i>today</i>, then there's a reasonable chance you won't actually <i>do </i>anything today.</li>
<li><b>Commit to getting something done every day.</b> &nbsp;When you show up in the morning have a well defined set of things to finish that day. &nbsp;Stay as late as you have to in order to finish. &nbsp;By committing to finishing that task other distractions will naturally fall by the wayside. &nbsp;For example, I have jiu-jitsu training at 7pm. &nbsp;If I screw off too much during the day, I don't get to train. &nbsp;Also, by committing to a task, you avoid "being busy" instead of "getting work done",&nbsp;<a href="http://bookofhook.blogspot.com/2013/01/being-busy-isnt-same-as-getting-work.html">they're not the same thing</a>. &nbsp;</li>
<li><b>Never say "I'll finish it up tomorrow" or "I'll make up for it by coming in early/staying late/working the weekend". </b>&nbsp;This is an easy trap to get into, where you keep incurring time debt until at some point you realize you're now three weeks behind on a task that should have taken two days. &nbsp;This is like racking up credit card bills assuming you can pay them off later. &nbsp;Which is fine, until "later" arrives and you've only accumulated more debt.</li>
<li><b>Do not overpromise to make up for poor productivity</b>. &nbsp;There's a tendency when we're falling behind to try to overcompensate with future promises. &nbsp;"When I'm done, it'll be AWESOME" or "I know I'm late, but I'm positive I'll be done by Monday". &nbsp;By doing those things we just build more debt we can't pay off, and that will eventually lead to a catastrophic melt down when the super final absolutely last deadline date shows up. &nbsp;Just get shit done, don't talk about how you're going to get shit done.</li>
<li><b>Have an objective productivity metric.</b> &nbsp;This is a mechanical thing, but it acts as a reasonable backstop. &nbsp;If you have changelogs you can reference, then it's easy to sit down on Friday and ask yourself "What have I done this week?" &nbsp;And if you know that it's possible for others to check on you, then it makes you take each day a lot more seriously. &nbsp;If you judge your value solely on output, not subjective things like "being smart", you will be more productive.</li>
<li><b>Accept that "the grind" is part of the job</b>. &nbsp;A friend of mine's father has a great quote:&nbsp;"Son, i don't wake up every day and go to a place called fun. I wake up and go to a place called <i>work</i>" &nbsp;You can't get irate or frustrated that the bulk of the day is typing in boring code and dealing with bugs and other people. &nbsp;</li>
</ol>
<div>
I still screw off during the day. &nbsp;I am not a code grinding automaton. &nbsp;I read Facebook, chat with others, Tweet, shop on Amazon, get coffee, read forums, write blog posts like this one<i>&nbsp;</i>and I'm <i>totally fine with that</i>. &nbsp;</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://cdn.memegenerator.net/instances/400x/36175351.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" width="255" data-src="http://cdn.memegenerator.net/instances/400x/36175351.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></div>
<div>
<a href="http://www.blogger.com/"></a><span id="goog_263076810"></span><span id="goog_263076811"></span><br></div>
<div>
Because I know I'm committed to getting things done as well. &nbsp;So even though I'm writing &nbsp;this right now at 3pm, if I have to work until 8pm to get my shit done and checked in, I'll do that, so that tomorrow is a fresh start, not a day of "Oh goddamit, let's try <i>again</i>&nbsp;to finish that task I started a week ago."</div>
<div>
<br></div>
</div>
</div>
<div>
Once I developed that sense of daily urgency my productivity went up considerably. &nbsp;And if I'm really productive in the morning and afternoon and feel like I can go home at 4pm with a clean conscience, I do that too, so I don't burn out. &nbsp;</div>
<div>
<br></div>
<div>
It's a push/pull between banking surplus and generating a deficit, just make sure you don't do just one or the other.</div>
</div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2013-03-12T23:10:00.003Z" itemprop="datePublished">12th March 2013</abbr> by Unknown
</div>
<div class="share-controls defer delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button defer" data-url="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" data-count="" data-size="" data-text="Smart Guy Productivity Pitfalls"></span>
<span class="share-facebook defer" data-url="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html" data-count="" data-layout="" data-text="Smart Guy Productivity Pitfalls"></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="34 comments">
<span class="bubble-content">34</span>
<span class="bubble-tail"></span>
</span>
<h3>
View comments
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container" data-itemid="3209638659688275137" style="display: block;">
<div class="comments-content"><div id="bc_0_1C" kind="c"><div id="bc_0_1CT"><div id="bc_0_0T" class="comment-thread" kind="r" t="0" u="0"><ol id="bc_0_0TB"><li id="bc_0_2B" class="comment" kind="b"><div class="avatar-image-container"><img src="//2.bp.blogspot.com/-pJTyK3UJNC8/VLIHvIkZVEI/AAAAAAAAFx4/wdqXiwMjkbQ/s150/*"></div><div id="c178051977786741457" class="comment-block"><div id="bc_0_2M" class="comment-header" kind="m"><cite class="user"><a rel="nofollow" href="https://www.blogger.com/profile/11097726494898087412">Roy</a></cite><span class="icon user"></span><span class="datetime secondary-text"><a rel="nofollow" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html?showComment=1363392617022#c178051977786741457">March 15, 2013 at 5:10 PM</a></span></div><p id="bc_0_2MC" class="comment-content">Good post!<br><br>I'm dealing with this recently. Working with a bunch of really smart people is pretty awesome though.</p><span id="bc_0_2MN" class="comment-actions secondary-text" kind="m"><a kind="i" href="javascript:;" target="_self" o="r">Reply</a><span class="item-control blog-admin pid-1712461486"><a o="d" target="_self" href="https://www.blogger.com/delete-comment.g?blogID=7943444959024231990&amp;postID=178051977786741457">Delete</a></span></span></div><div id="bc_0_2BR" class="comment-replies"></div><div id="bc_0_2B_box" class="comment-replybox-single"></div></li><li id="bc_0_3B" class="comment" kind="b"><div class="avatar-image-container"><img src="https://img1.blogblog.com/img/b36-rounded.png"></div><div id="c6842726585397303062" class="comment-block"><div id="bc_0_3M" class="comment-header" kind="m"><cite class="user"><a rel="nofollow" href="https://www.blogger.com/profile/15283392831954712873">Aaron Leiby</a></cite><span class="icon user"></span><span class="datetime secondary-text"><a rel="nofollow" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html?showComment=1363393541274#c6842726585397303062">March 15, 2013 at 5:25 PM</a></span></div><p id="bc_0_3MC" class="comment-content">Lol.. love that last image.<br><br>I find having a totem to help focus (e.g. Carmack's CD player) works well for me. I got a 90 minute sand timer a while back that I can physically reach for and flip over when I feel the urge to check facebook, then promise not to check until it's out. I usually look up and find it's been empty for a while because I was too focused on work to have noticed.</p><span id="bc_0_3MN" class="comment-actions secondary-text" kind="m"><a kind="i" href="javascript:;" target="_self" o="r">Reply</a><span class="item-control blog-admin pid-284223169"><a o="d" target="_self" href="https://www.blogger.com/delete-comment.g?blogID=7943444959024231990&amp;postID=6842726585397303062">Delete</a></span></span></div><div id="bc_0_3BR" class="comment-replies"></div><div id="bc_0_3B_box" class="comment-replybox-single"></div></li><li id="bc_0_4B" class="comment" kind="b"><div class="avatar-image-container"><img src="//3.bp.blogspot.com/-rg-md3P7OhA/XWr_nm74JxI/AAAAAAAABrQ/BLilW6POw6oJGjG-3rjf2JD5foCBKzllQCK4BGAYYCw/s113/PicsMeVectorized.png"></div><div id="c2565414697594446308" class="comment-block"><div id="bc_0_4M" class="comment-header" kind="m"><cite class="user"><a rel="nofollow" href="https://www.blogger.com/profile/01836061012769080712">namar0x0309</a></cite><span class="icon user"></span><span class="datetime secondary-text"><a rel="nofollow" href="http://bookofhook.blogspot.com/2013/03/smart-guy-productivity-pitfalls.html?showComment=1363394288263#c2565414697594446308">March 15, 2013 at 5:38 PM</a></span></div><p id="bc_0_4MC" class="comment-content">Great article! Good you recognized JC's self-discipline which may sound simple but that doesn't necessarily make it easy. I've written a post about building that discipline and having fun at the same time, it's at http://www.blog.namar0x0309.com/2013/02/the-gamification-of-time/.<br><br>Thanks!</p><span id="bc_0_4MN" class="comment-actions secondary-text" kind="m"><a kind="i" href="javascript:;" target="_se
<div class="comments-footer">
</div>
</div>
</div>
</div>
</li><li class="item" data-id="9204845415983267467">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="9204845415983267467">
<div class="article-header">
<a class="ribbon date " title="20th February 2013" href="http://bookofhook.blogspot.com/2013/02/missing-features-are-better-than.html" itemprop="url">
<div class="top ribbon-piece">Feb</div>
<div class="bottom ribbon-piece">20</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2013/02/missing-features-are-better-than.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="9204845415983267467">
Missing Features Are Better Than Partial Features</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=9204845415983267467&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">Telemetry was the first product I worked on where I interacted directly with customers. &nbsp;This interaction creates an interesting real time tension between working on big features with long development periods versus working on smaller features that can immediately benefit a small number of customers.<br>
<div>
<br></div>
<div>
Typically it starts with a reasonable request -- let's call it Feature X -- so we don't want to just say 'no'. &nbsp;But of course, we have to deal with bug reports, customer support, sales assistance, new platforms and previously promised or planned features, and all within the constraint of monthly releases. &nbsp;</div>
<div>
<br></div>
<div>
As a result the choice boils down to "Do you want some of Feature X now, or all of Feature X much later?" &nbsp;In a perfect world we just do Feature X right and everyone wins, but in the real world of constrained bandwidth we have to be deliberate about scheduling work.</div>
<div>
<br></div>
<div>
Very often Feature X can&nbsp;be implemented in a limited form and the customer is happy because, hey, what wasn't possible is now possible. &nbsp;And if we focus on just that customer's response then&nbsp;this is a net win, because that partial implementation may have taken only an hour whereas a proper, fully fleshed out implementation might have taken several days due to cascading side effects.</div>
<div>
<br></div>
<div>
The problem arises when you look at this new feature in context of other customers. &nbsp;Now they see "Whoa, Feature X, cool!" or maybe just "Huh, didn't know about Feature X, I'll give it a try". &nbsp;The former camp has learned to work around the absence of Feature X, the latter camp didn't even know it existed and didn't care, but now that they're aware of it they want to use it.</div>
<div>
<br></div>
<div>
And this is when the partial implementation absolutely turns out to be the wrong call. &nbsp;Because for that one customer who thinks "Those guys are awesome, they were super responsive to a feature request!" you now have multiple (potential) customers thinking "This feature is janky, what the hell?"</div>
<div>
<br></div>
<div>
And they don't care about the reasons for it. &nbsp;They don't care that it wasn't even going to get implemented until a customer requested it, or the reasons that a full implementation isn't practical or maybe even possible, they're just kind of annoyed that Feature X is incomplete and/or buggy.</div>
<div>
<br></div>
<div>
The lesson is this: if you're not going to do it right, then you have to really think hard about whether it's worth doing. &nbsp;Saying no to one customer is a lot better than explaining to all the others why Feature X isn't as good as they expect. And it's a tough thing to say, because it's easy to rationalize that a limited Feature X is better than no Feature X, but in my experience this is almost never the case.</div>
<div>
<br></div>
</div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2013-02-20T19:44:00.004Z" itemprop="datePublished">20th February 2013</abbr> by Unknown
</div>
<div class="share-controls defer delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button defer" data-url="http://bookofhook.blogspot.com/2013/02/missing-features-are-better-than.html" data-count="" data-size="" data-text="Missing Features Are Better Than Partial Features"></span>
<span class="share-facebook defer" data-url="http://bookofhook.blogspot.com/2013/02/missing-features-are-better-than.html" data-count="" data-layout="" data-text="Missing Features Are Better Than Partial Features"></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="0 comments">
<span class="bubble-content">0</span>
<span class="bubble-tail"></span>
</span>
<h3>
Add a comment
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container toggle-active" data-itemid="9204845415983267467" style="display: none;">
<div class="comments-content"></div>
<div class="comments-footer">
<iframe frameborder="0" class="comments-replybox" data-src="https://www.blogger.com/comment-iframe.g?blogID=7943444959024231990&amp;postID=9204845415983267467"></iframe>
</div>
</div>
</div>
</div>
</li><li class="item" data-id="6832134415933214483">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="6832134415933214483">
<div class="article-header">
<a class="ribbon date " title="8th January 2013" href="http://bookofhook.blogspot.com/2013/01/being-busy-isnt-same-as-getting-work.html" itemprop="url">
<div class="top ribbon-piece">Jan</div>
<div class="bottom ribbon-piece">8</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2013/01/being-busy-isnt-same-as-getting-work.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="6832134415933214483">
Being Busy Isn't the Same As Getting Shit Done</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=6832134415933214483&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">In software development it's easy to lose sight of the fact that we're supposed to be shipping software. &nbsp;We can show up to work, be legitimately busy for eight or nine hours, go home, and then realize that we didn't get any closer to shipping. <br>
<br>
<div>
Many people are fine with this -- "Well, I 'did stuff',&nbsp;so hey, all good, right?" -- despite not getting any closer to shipping. &nbsp;Their day was consumed with necessary-but-not-shipping tasks. &nbsp;Things like installing software, replacing a hard drive, helping a coworker, setting up a dev kit, or debugging a feature you thought you were done with a year ago. &nbsp;This hidden but large frictional load can easily consume so much of our time that over a given period of time, <i>we never actually get closer to ship</i>. <br>
<br>
This is particularly true with mature products, where you now spend a lot of time on non-development tasks &nbsp;like support, sales, meetings, and training, and the 'being busy' part can become so dominant that you never get around to shipping a new version. &nbsp;This overhead is rarely factored into any schedule since coders are notoriously shitty at accounting for non-coding things. &nbsp;We think in best case terms like "That should take like a day" with the assumption "day" means "calendar day" but we never get a calendar day to do stuff, so "day" means "eight hours" which takes a week to get done.<br>
<br>
Assuming that crunching non-stop is off the table as an option, I've found that the biggest productivity boost I've had comes from asking myself "What do I need to get done today?" instead of "What will I work on today?". &nbsp;By creating a sense of urgency to finish a well defined task I now have to be cognizant of all the little interruptions that interfere with that goal through the day.<br>
<br>
So get shit done and stop just being busy. &nbsp;Or to quote David Wong (or Jesus, take your pick), <i>a tree is judged by its fruit</i>.<br>
<br>
<br></div>
</div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2013-01-08T17:31:00.001Z" itemprop="datePublished">8th January 2013</abbr> by Unknown
</div>
<div class="share-controls defer delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button defer" data-url="http://bookofhook.blogspot.com/2013/01/being-busy-isnt-same-as-getting-work.html" data-count="" data-size="" data-text="Being Busy Isn't the Same As Getting Shit Done"></span>
<span class="share-facebook defer" data-url="http://bookofhook.blogspot.com/2013/01/being-busy-isnt-same-as-getting-work.html" data-count="" data-layout="" data-text="Being Busy Isn't the Same As Getting Shit Done"></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="0 comments">
<span class="bubble-content">0</span>
<span class="bubble-tail"></span>
</span>
<h3>
Add a comment
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container toggle-active" data-itemid="6832134415933214483" style="display: none;">
<div class="comments-content"></div>
<div class="comments-footer">
<iframe frameborder="0" class="comments-replybox" data-src="https://www.blogger.com/comment-iframe.g?blogID=7943444959024231990&amp;postID=6832134415933214483"></iframe>
</div>
</div>
</div>
</div>
</li><li class="item" data-id="3253011449648443903">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="3253011449648443903">
<div class="article-header">
<a class="ribbon date " title="11th September 2012" href="http://bookofhook.blogspot.com/2012/09/productivity-vs-uncertainty-apathy.html" itemprop="url">
<div class="top ribbon-piece">Sep</div>
<div class="bottom ribbon-piece">11</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2012/09/productivity-vs-uncertainty-apathy.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="3253011449648443903">
Productivity vs. Uncertainty &amp; Apathy</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=3253011449648443903&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">If you're not getting shit done, it may not be because you suck. &nbsp;Traditionally unproductive workers get nailed with labels like <i>undisciplined, lack of focus</i>, or <i>poor work ethic</i>,&nbsp;but in my experience these are not nearly as influential as I'd thought.<br>
<br>
Over the past two decades of coding, including stints in management/as a lead/and being self-directed with no immediate manager, I've come to the conclusion that the main issues that impact productivity are <i>uncertainty</i>&nbsp;and <i>apathy</i>.<br>
<br>
When uncertainty kicks me in the nuts, it's usually in one of several flavors: <b>high-level uncertainty</b>, <b>strategic uncertainty</b>, and <b>low-level uncertainty</b>.<br>
<br>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/94fb1e59.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="400" width="266" data-src="http://img2u.info/ckgni/i/94fb1e59.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">"I feel like I should be doing something, but I have no idea where the fuck I am"</td></tr>
</tbody></table>
<b>High-level uncertainty, </b>aka "Where am I and what an I trying to do?",<b>&nbsp;</b>is when you have a general goal that comes with a set of implicit assumptions. &nbsp;Those assumptions are a minefield you have to traverse as you try to get to your finished product. &nbsp;You end up paralyzed because you're not sure which direction is safe, especially since none of the mines are marked. &nbsp;For example, you might have the task of "In the next month improve our network performance by 50%". &nbsp;It seems like a concrete goal, but there are still a ton of hidden assumptions in there.<br>
<br>
<br>
Solution: Constrain your problem so that what was once vague is now extremely well specified. &nbsp;Constraints tend to dictate solutions. &nbsp;Okay, I have to improve network performance by fifty percent. &nbsp;Can I use more memory to do this? &nbsp;Can I use more CPU? &nbsp;How much more CPU? &nbsp;Can I use a third party library? &nbsp;Is our performance poor sending or receiving or both? &nbsp;Under what conditions? <br>
<br>
Or, using our lost in the woods analog, <i>get a goddamn map.</i><br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-qOus7B8IArI/UYQI-9JFKRI/AAAAAAAAAOc/me2fCf_E8mc/s1600/Greyhawk_1600x1024.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="255" width="400" data-src="http://2.bp.blogspot.com/-qOus7B8IArI/UYQI-9JFKRI/AAAAAAAAAOc/me2fCf_E8mc/s400/Greyhawk_1600x1024.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">"So we have a lot of bugs, and apparently orcs and dragons"</td></tr>
</tbody></table>
Once questions like those are answered the scope of the problem and available solutions becomes a lot clearer, and we can move on to tackling the next problem.<br>
<br>
<b>Strategic uncertainty</b>&nbsp;occurs when you have a well defined goal but you're unsure how to go about it. &nbsp;Using our previous example you've determined that the problem is total network bandwidth, on both sides, and that you can sacrifice a lot of CPU to do it. &nbsp;It seems to happen all the time under all conditions, and unfortunately most of the data going across the network comes from a bunch of different systems so you can't just pare down the data at one location.<br>
<br>
Now you have to come up with a technical solution. &nbsp;You know you need to compress and decompress the data, but how? &nbsp;Maybe you have no experience with compression algorithms, so now you're kind of stuck. &nbsp;Do you just use zlib? &nbsp;Or miniz? &nbsp;Or do you license something? &nbsp;Is there a hardware solution? &nbsp;If there's no clear solution at hand ("drop in zlib") then even very good programmers will spin their wheels, unsure of how to tackle it. &nbsp;They just hope for a brilliant insight.<br>
<br>
Solution: Grind it out by talking to someone. &nbsp;Having an office mate helps tremendously so you can just say "I have to do this thing, I'm not even sure how to tackle it". &nbsp;People like to sound smart and give their opinions, so give someone else the opportunity to solve your problem for you!<br>
<br>
In this case the simplest solution is to use a package like zlib to compress and decompress your data. &nbsp;Strategy defined!<br>
<br>
This leaves the day to day tasks of getting it done, and here's where <b>low-level uncertainty</b>&nbsp;can creep in. &nbsp;Now you know what you're supposed to do at a fairly specific level ("Implement zlib in our codebase so that the network layer is much faster") but at any given moment you're just staring at your editor, unsure what to do next. <br>
<br>
Solution: Make a list. &nbsp;It's that simple. &nbsp;Instead of writing code, start by getting yourself organized and enumerate all your fine grained tasks, no matter how small. &nbsp;"Find compression and decompression entry points". &nbsp;"Get compression code into build system". &nbsp;"Implement dummy implementation to verify integration works." "Write a test harness". &nbsp;etc. &nbsp;Once you have a list, sort in terms of priority. &nbsp;And if you have any tasks that would take longer than a day, go ahead and break them out into smaller tasks.<br>
<br>
You now have a clear road map from A to B, broken down into actionable items at a very fine grained level. &nbsp;There's no more uncertainty.&nbsp;&nbsp;If you're driving, this is the part where your GPS has figured out how to get you from &nbsp;your current location to the nearest Five Guys without having to ask for directions or pull over.<br>
<br>
So what do you do if you're <i>still</i>&nbsp;not getting shit done?! &nbsp;The glib answer is something along the lines of...<br>
<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/35cd00e6.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="163" width="320" data-src="http://img2u.info/ckgni/i/35cd00e6.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">...but this doesn't really help, now does it?</td></tr>
</tbody></table>
It's likely that you're just not interested in the work. &nbsp;If you're passionate and interested in something, then the work is fun and interesting and you want to do it. &nbsp;Unfortunately a lot of the work we do in software -- in fact, the <i>bulk</i>&nbsp;of work in software development -- is excruciatingly dull. &nbsp;Finding obscure bugs. &nbsp;Dealing with build system issues. &nbsp;Hunting down compiler switches. &nbsp;Typing in the same code we've typed in hundreds of times before. &nbsp;Dealing with poor or missing API documentation.<br>
<br>
For this stuff, you just have to grind. &nbsp;This is where work ethic and discipline can come into play, but I prefer to cheat and just try to stick to things I find interesting. &nbsp;Unfortunately the amount of interesting things to work on in a typical software project is dwarfed by the sheer amount of bullshit tasks.<br>
<br>
<br></div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2012-09-12T02:26:00.001Z" itemprop="datePublished">11th September 2012</abbr> by Unknown
</div>
<div class="share-controls defer delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button defer" data-url="http://bookofhook.blogspot.com/2012/09/productivity-vs-uncertainty-apathy.html" data-count="" data-size="" data-text="Productivity vs. Uncertainty &amp; Apathy"></span>
<span class="share-facebook defer" data-url="http://bookofhook.blogspot.com/2012/09/productivity-vs-uncertainty-apathy.html" data-count="" data-layout="" data-text="Productivity vs. Uncertainty &amp; Apathy"></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="0 comments">
<span class="bubble-content">0</span>
<span class="bubble-tail"></span>
</span>
<h3>
Add a comment
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container toggle-active" data-itemid="3253011449648443903" style="display: none;">
<div class="comments-content"></div>
<div class="comments-footer">
<iframe frameborder="0" class="comments-replybox" data-src="https://www.blogger.com/comment-iframe.g?blogID=7943444959024231990&amp;postID=3253011449648443903"></iframe>
</div>
</div>
</div>
</div>
</li><li class="item" data-id="8182700156808699921">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="8182700156808699921">
<div class="article-header">
<a class="ribbon date " title="8th August 2012" href="http://bookofhook.blogspot.com/2012/08/bug-classification.html" itemprop="url">
<div class="top ribbon-piece">Aug</div>
<div class="bottom ribbon-piece">8</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2012/08/bug-classification.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="8182700156808699921">
Jankiness and the Taxonomy of Bugs</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=8182700156808699921&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">Related to my principle of "suffer no jankiness", I've realized that almost all bugs can be distilled into three main categories: <b>I Have No Idea What I'm Doing</b>; <b>Oops</b>; and <b>Oh Fuck You</b>.<br>
<br>
<b>I Have No Idea What's Going On</b>&nbsp;bugs are the worst, because they're due to a lack of comprehension of what's supposed to be occurring in the software (i.e. <a href="http://bookofhook.blogspot.com/2012/08/suffer-no-jankiness.html">jankiness</a>). &nbsp;We attempt to "fix" these bugs by near random transformations until things "work", but of course it's just masked, at best, until it crops up somewhere else.<br>
<br>
Examples of this include:<br>
<br>
<span style="font-family: Courier New, Courier, monospace;">v.z = -v.z; // WTF? &nbsp;No idea why this works.</span><br>
<br>
And:<br>
<br>
<span style="font-family: Courier New, Courier, monospace;">char buffer[ sizeof( Foo ) + 128 ]; // Add extra just in case...</span><br>
<br>
"In case" of what?<br>
<br>
<span style="font-family: Courier New, Courier, monospace;">LaunchThreads();</span><br>
<span style="font-family: Courier New, Courier, monospace;">Sleep(1000); // give it some time to startup</span><br>
<br>
"Some time"? &nbsp;Where did the magical 1000ms value come from?<br>
<br>
And:<br>
<br>
<span style="font-family: Courier New, Courier, monospace;">if ( !system.Initialized() )</span><br>
<span style="font-family: Courier New, Courier, monospace;">&nbsp; &nbsp;system.Initialize(); // Just in case it wasn't initialized already</span><br>
<br>
Any time you see "just in case" in a comment, that's bad.<br>
<br>
<b>I Have No Idea What's Going On</b>&nbsp;bugs are a symptom of flailing about trying to make something work that would probably work if you just took a step back and started over from first principles. &nbsp;But you're in a hurry, you're bored, you're frustrated, and you hope that one more transposition or sign flip will suddenly make everything right.<br>
<br>
These bugs are also really, really bad because <i>they breed</i>. &nbsp;They create more bugs like themselves&nbsp;<i>and&nbsp;</i>they also create a ton of <b>Oh&nbsp;Fuck You</b>&nbsp;bugs for other programmers who have to figure out why the hell you decided that you needed to reset the graphics hardware state every time your function is called "just in case" it wasn't in a known good state.<br>
<br>
<b>Oops</b>&nbsp;bugs are the forgivable ones. &nbsp;They don't show a lack of comprehension of the software, they were just dumb oversights, typos, copy and paste bugs, off-by-1, etc. &nbsp;These are also generally the easiest bugs to hunt down because you're starting with a concrete mental model of how things are supposed to work, and then figuring out why it's not.<br>
<br>
<span style="font-family: Courier New, Courier, monospace;">double l = sqrt( v.x*v.x + v.x*v.x + v.x*vx );</span><br>
<br>
Those happen to everyone. &nbsp;Yeah, you can avoid them with better testing and what have you, but by and large they're not symptoms of incomprehension. &nbsp;In my experience each programmer has a fixed rate at which they create these bugs, which is a reflection of their habits.<br>
<br>
<b>Oh Fuck You</b> bugs are the ones where, once you realize what's happened, you say "Oh, <i>fuck you [entity name here]</i>" because someone else has inadvertently sent you on an hours or days long bug hunt that is not of your doing. <br>
<br>
Compilers generate incorrect code, tools corrupt data, SDKs are incorrectly documented, third party libraries do the wrong thing, drivers are broken, someone overclocked their CPU which led to weird memory errors, etc. &nbsp;These bugs tend to occur at a fixed rate irrespective of the individual programmer since they're out of control of the individual programmer.<br>
<br>
In a perfect world you only ever encounter <b>Oh Fuck You</b>&nbsp;bugs, but if you can keep the frequency of <b>Oh Fuck You</b>&nbsp;and <b>Oops</b>&nbsp;bugs higher than those of <b>I Have No Idea What's Going On</b>&nbsp;then you're probably doing pretty well.<br>
<br></div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2012-08-08T16:30:00.001Z" itemprop="datePublished">8th August 2012</abbr> by Unknown
</div>
<div class="share-controls defer delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button defer" data-url="http://bookofhook.blogspot.com/2012/08/bug-classification.html" data-count="" data-size="" data-text="Jankiness and the Taxonomy of Bugs"></span>
<span class="share-facebook defer" data-url="http://bookofhook.blogspot.com/2012/08/bug-classification.html" data-count="" data-layout="" data-text="Jankiness and the Taxonomy of Bugs"></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="3 comments">
<span class="bubble-content">3</span>
<span class="bubble-tail"></span>
</span>
<h3>
View comments
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container toggle-active" data-itemid="8182700156808699921" style="display: none;">
<div class="comments-content"></div>
<div class="comments-footer">
<iframe frameborder="0" class="comments-replybox" data-src="https://www.blogger.com/comment-iframe.g?blogID=7943444959024231990&amp;postID=8182700156808699921"></iframe>
</div>
</div>
</div>
</div>
</li><li class="item" data-id="6691159110788362334">
<div class="article hentry " itemscope="" itemtype="http://schema.org/BlogPosting">
<meta itemprop="blogId" content="7943444959024231990">
<meta itemprop="postId" content="6691159110788362334">
<div class="article-header">
<a class="ribbon date " title="8th August 2012" href="http://bookofhook.blogspot.com/2012/08/suffer-no-jankiness.html" itemprop="url">
<div class="top ribbon-piece">Aug</div>
<div class="bottom ribbon-piece">8</div>
<div class="tail">
<div class="left ribbon-piece"></div>
<div class="right ribbon-piece"></div>
</div>
</a>
<h1 class="title entry-title" itemprop="name">
<a href="http://bookofhook.blogspot.com/2012/08/suffer-no-jankiness.html" rel="bookmark" itemprop="url" data-item-type="post" data-id="6691159110788362334">
Suffer No Jankiness</a>
<span class="blog-admin"><a class="edit" href="https://www.blogger.com/post-edit.g?blogID=7943444959024231990&amp;postID=6691159110788362334&amp;from=pencil" target="_self" title="Edit"></a></span>
</h1>
</div>
<div class="article-content entry-content" itemprop="articleBody">I'm fairly old (40+) for a programmer, and you'd think most skill jumps would have occurred by now, and I think that in terms of raw ability that's true. Most people learn and apply everything in their first 10 years or whatever of doing things -- their experience will broaden as they get older, which provides a larger set of experiences to pattern match against, but by and large I think their basic 'programming smarts' is set at that point. <br>
<br>
BUT, philosophical outlooks and habits can still grow, and these can materialize as skill jumps. Lately I've been trying to be more intolerant of perceived jankiness in my code.<br>
<br>
A quick definition: code jankiness occurs when the mental model of your software is no longer accurate or complete. &nbsp;Hacks are not janky, for example, as long as you know how and why they work. &nbsp;This, on the other hand, is classic jankiness:<br>
<br>
<span style="font-family: Courier New, Courier, monospace;">char buffer[ sizeof( foo ) + 128 ]; // a little extra, just in case...</span><br>
<br>
Every time you see "This should never happen, but just in case", that's janky. &nbsp;In fact, any time you see "Just in case" in a comment -- probably janky. &nbsp;Defensive coding? &nbsp;Total jankiness. &nbsp;Checking against NULL even when there is no reason why that pointer should ever be NULL? &nbsp;Janky.<br>
<br>
"Creeping jankiness" are all the little things that make you go "Huh, that's weird" but you ignore them because, hey, it didn't crash and nothing obviously wrong occurred. The absolute best programmers I've ever known, without exception, are radically intolerant of their software acting in any way that does not match their mental models. If something happens -- no matter how small -- that they do not understand, they stop and go "What just happened?" <br>
<br>
Even if it takes them all day and even if it means that they fall behind in other areas. &nbsp;It seems like a net productivity loss, but it's actually a net productivity win in the long term because you maintain a rock solid understanding of how your software works.<br>
<br>
I can think of at least three great examples of this. &nbsp;The first was when I was at 3Dfx and the Voodoo chip was being developed. &nbsp;Gary Tarolli, 3Dfx's CTO and the principal architect of Voodoo (then known as SST-1), was running some simulations that took a long time (a single frame of rendering would take well over a minute). &nbsp;We'd generate the frames (sometimes over night), then play them back as a movie for demos or whatever.<br>
<br>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/a9c5c157.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="145" width="320" data-src="http://img2u.info/ckgni/i/a9c5c157.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Obligatory reminder of that horrible 3Dfx logo</td></tr>
</tbody></table>
We did this with one of the demos, and during rendering there was a pixel that flickered for exactly one frame. &nbsp;That was it. &nbsp;Hardly noticeable, but there it was. &nbsp;As a software guy I remember kinda shrugging and thinking "Screw it, it looks right most of the time and it didn't crash, SHIP IT!" &nbsp;But Tarolli would not have any of that.<br>
<br>
After spending what seemed like a huge amount of time (I want to say it was at least a day), he found the bug and discovered that it wasn't a bug, but an unintended side effect of a feature that was totally legitimate.<br>
<br>
The second example was when I was at id software. &nbsp;John Carmack was absolutely intolerant of rendering errors -- especially cracks, slivers and T-junctions in his BSP renderer. &nbsp;He was devoutly religious about it, and this is one of the reasons that the Quake games had such an immensely heavy, solid feel to them. <br>
<br>
So of course one day we're testing things, and we see the occasional flash of a crack or a sliver. &nbsp;This was pretty much an all-stop situation for him. &nbsp;He spent a long time (I want to say at least a day -- and one Carmack Day is like Five Regular Dude Days) and finally narrowed it down to an issue specific to an ATI driver or card. &nbsp;Now, most of us would be content to be all "Whew, not my problem, let's move on!" but of course Carmack had to know <i>how</i>&nbsp;the ATI driver was broken.<br>
<br>
It turned out to be their guard band clipper. &nbsp;<a href="http://fgiesen.wordpress.com/2011/07/05/a-trip-through-the-graphics-pipeline-2011-part-5/">Guard band clipping</a>&nbsp;is a graphics driver optimization, but it can introduce cracks when done wrong. &nbsp;If you're going to use guard band clipping, you <i>have</i>&nbsp;to clip against the guard band planes all the time. &nbsp;You can't clip against them for some triangles then clip against the viewport for others -- that can introduce slivers between triangle edges.<br>
<br>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="http://img2u.info/ckgni/i/12fdeffa.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="240" width="320" data-src="http://img2u.info/ckgni/i/12fdeffa.jpg" src="data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="deferred"></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I just needed a Quake 2 screenshot for symmetry...and to remember how goddamn dark that game was</td></tr>
</tbody></table>
I don't remember if that was a hardware bug or just a driver bug, but the point is that Carmack <i>knew</i>&nbsp;he didn't have those types of rendering errors, and when confronted with them he had to track down what was causing them.<br>
<br>
A more recent example of suffering no jankiness is Casey Muratori's <a href="http://the-witness.net/news/2012/12/finding-and-fixing-a-five-second-stall/comment-page-1/">dissection of a five second Windows stall</a>. &nbsp;It's obvious that once the problem was fixed he could have moved on, but he was compelled to figure out what the hell was going on under the hood so he could have a better understanding of the software's interactions.<br>
<br>
That diligence reaps huge benefits, because very often these small problems are the first cracks in the codebase. By chasing after these now you stop larger problems from erupting later. In addition, by ensuring that only the things that you expect to happen actually happen, you're forced to keep a mental model of exactly what you think is happening in your head. If you become flippant about jankiness it's easy to eject global understanding ("This is how the program works") to focus on localized concerns ("Why is this function crashing?"). Once that mental model of your software is corrupt or vague, you're in major trouble because you no longer know what to expect, and it becomes extremely hard to even detect non-crash bugs because you can't tell the difference between a bug and expected behaviour any more!<br>
<br>
I used to blow off this attitude as overengineering or intellectual wanking -- if it worked, that's what mattered, and I can be getting in a new feature while you're sitting there obsessing over code that works (for the most part...) -- but since then I've decided I've been doing it all wrong, and I need to have a solid understanding of all the code I write, if for no other reason than it makes things easier on me in the long run.<br>
<br></div>
<div class="article-footer">
<div class="publish-info">
Posted <abbr class="time published" title="2012-08-08T15:49:00.000Z" itemprop="datePublished">8th August 2012</abbr> by Unknown
</div>
<div class="share-controls defer delay" data-defer="true" data-delay="1000">
<span data-href="http://twitter.com/share" class="share-twitter twitter-share-button defer" data-url="http://bookofhook.blogspot.com/2012/08/suffer-no-jankiness.html" data-count="" data-size="" data-text="Suffer No Jankiness"></span>
<span class="share-facebook defer" data-url="http://bookofhook.blogspot.com/2012/08/suffer-no-jankiness.html" data-count="" data-layout="" data-text="Suffer No Jankiness"></span>
</div>
</div>
<div class="comments" data-defer="view">
<div class="comments-header toggle-switch">
<span class="bubble comments-count " title="0 comments">
<span class="bubble-content">0</span>
<span class="bubble-tail"></span>
</span>
<h3>
Add a comment
</h3>
</div>
<div class="comments-wrapper blogger-comments toggle-container toggle-active" data-itemid="6691159110788362334" style="display: none;">
<div class="comments-content"></div>
<div class="comments-footer">
<iframe frameborder="0" class="comments-replybox" data-src="https://www.blogger.com/comment-iframe.g?blogID=7943444959024231990&amp;postID=6691159110788362334"></iframe>
</div>
</div>
</div>
</div>
</li></ol>
</div>
<div id="gadget-dock" class=""><div class="gadget-item" data-gadget-id="0">
<div class="gadget-menu">
<div class="gadget-icons">
<img class="gadget-icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEX///8AAAD///9+749PAAAAAnRSTlMAAHaTzTgAAAAwSURBVHherYyxCQAwCAR/yhTZy8ZeC6c0BETU1msOjucBeyBF54s1FHEs5fZYWb12TL8307RAxVQAAAAASUVORK5CYII=">
<img class="gadget-icon-selected" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYAgMAAACdGdVrAAAACVBMVEX///8AAAAzMzMTx/ayAAAAAnRSTlMAAHaTzTgAAAAwSURBVHherYyxCQAwCAR/yhTZy8ZeC6c0BFS09pqD43nAHijR+WINZZxLuTN2Vq8dTL8301DjA9oAAAAASUVORK5CYII=">
</div>
<span class="gadget-title">Blog Archive</span>
</div>
<div class="gadget-container">
<div class="gadget">
<span class="gadget-title">Blog Archive</span>
<div class="gadget-content"><div class="blogarchive-tree blogarchive-expanded">
<ul class="blogarchive-dates">
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2014/">2014</a><span class="blogarchive-post-count">1</span>
</div>
<ul class="blogarchive-dates">
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2014/04/">April</a><span class="blogarchive-post-count">1</span>
</div>
<ul class="blogarchive-dates">
<li class="blogarchive-post">
<a href="http://bookofhook.blogspot.com/2014/04/this-advice-is-worthless.html">This Advice Is Worthless</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2013/">2013</a><span class="blogarchive-post-count">3</span>
</div>
<ul class="blogarchive-dates">
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2013/03/">March</a><span class="blogarchive-post-count">1</span>
</div>
<ul class="blogarchive-dates">
</ul>
</li>
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2013/02/">February</a><span class="blogarchive-post-count">1</span>
</div>
<ul class="blogarchive-dates">
</ul>
</li>
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2013/01/">January</a><span class="blogarchive-post-count">1</span>
</div>
<ul class="blogarchive-dates">
</ul>
</li>
</ul>
</li>
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2012/">2012</a><span class="blogarchive-post-count">3</span>
</div>
<ul class="blogarchive-dates">
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2012/09/">September</a><span class="blogarchive-post-count">1</span>
</div>
<ul class="blogarchive-dates">
</ul>
</li>
<li class="blogarchive-date blogarchive-collapsed">
<div class="blogarchive-title">
<a href="http://bookofhook.blogspot.com/2012/08/">August</a><span class="blogarchive-post-count">2</span>
</div>
<ul class="blogarchive-dates">
</ul>
</li>
</ul>
</li>
</ul>
</div></div>
</div>
</div></div></div>
<div id="loading">
<span>Loading</span>
</div>
<div id="chromefix">
<!-- Fix Chrome 12+ bug with GPU accelerated composition causing
flickering/performance issues. Note: put this last, else text glitches. -->
</div>
<div id="attribution-container"><div class="attribution">Dynamic Views theme. Powered by <a href="https://www.blogger.com" target="_blank">Blogger</a>.</div></div></body></html>