<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0EDSXs7cSp7ImA9WhBbF08.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298</id><updated>2013-05-16T13:34:38.509-04:00</updated><category term="Hockey" /><category term="Random Updates" /><category term="Wireless" /><category term="30 Days Of Arduino" /><category term="Usability" /><category term="Kindle" /><category term="Trash" /><category term="Candy Land Simulator" /><category term="Technology" /><category term="Chef" /><category term="Family" /><category term="DevOps" /><category term="Parenting" /><category term="Real Estate" /><category term="Math" /><category term="Windows" /><category term="Apple" /><category term="Easter Eggs" /><category term="Healthcare" /><category term="MongoDB" /><category term="Poker" /><category term="SignalR" /><category term="Code" /><category term="SAP" /><category term="PowerShell" /><category term="Arduino" /><category term="Baby" /><category term="NaBloPoMo 2011" /><category term="Travel" /><category term="Food" /><category term="In the News" /><category term="Marketing" /><category term="Work" /><category term="Money" /><category term="Project Noodle" /><category term="iOS" /><category term="Ideas" /><category term="Android" /><category term="Networks" /><category term="School" /><category term="Reviews" /><category term="Sarah" /><category term="Experiments" /><category term="Letters" /><category term="Science" /><category term="NaBloPoMo 2012" /><category term="Ruminations" /><category term="Relaxing" /><category term="Household" /><category term="iPhone" /><category term="Database" /><category term="Around Town" /><category term="Hardware" /><category term="coffee" /><category term="Movies" /><category term="Television" /><category term="Books" /><title>Bloggity Blog Blog Blog</title><subtitle type="html">Occasional thoughts on technology, money, life and babies by Michael Haren</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.wassupy.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.wassupy.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>427</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/wassupy-wp" /><feedburner:info uri="wassupy-wp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkQCQX8zfip7ImA9WhBQEE4.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-4646818104914722847</id><published>2013-03-11T17:46:00.000-04:00</published><updated>2013-03-11T17:46:00.186-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-11T17:46:00.186-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Science" /><title>My Top 9 Favorite Podcasts (Updated March 2013)</title><content type="html">&lt;p&gt;Although I sample a ridiculously large number of podcasts, these are the select few that I subscribe to and listen to regularly. I’ve presented them in order of “fewest unplayed episodes remaining” (which suggests how much I like each one). Again, simply being on this list means I’m a regular listener—don’t avoid the ones at the bottom—they are excellent.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.freakonomics.com/tag/freakonomics-podcast/"&gt;Freakonomics Radio&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.npr.org/templates/story/story.php?storyId=127413729"&gt;NPR: Planet Money Podcast&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.thisamericanlife.org/"&gt;This American Life&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.radiolab.org/series/podcasts/"&gt;WNYC’s Radiolab&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://omegataupodcast.net/"&gt;Omega Tau&lt;/a&gt; (available in English and German)&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.stuffyoushouldknow.com/podcasts/"&gt;Stuff You Should Know&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://themoth.org/radio"&gt;The Moth Podcast&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.hanselminutes.com/"&gt;Hanselminutes&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.theskepticsguide.org/"&gt;The Skeptics Guide to the Universe&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I was going to write a lengthy description/review for each but, let’s be honest, you weren’t going to read it. Just go listen to some of these!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/q9hvRSoUiZ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/4646818104914722847/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=4646818104914722847" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4646818104914722847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4646818104914722847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/q9hvRSoUiZ0/my-top-9-favorite-podcasts-updated.html" title="My Top 9 Favorite Podcasts (Updated March 2013)" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/03/my-top-9-favorite-podcasts-updated.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08CQXYzeCp7ImA9WhBSFEQ.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-1949506601839861854</id><published>2013-02-21T19:11:00.000-05:00</published><updated>2013-02-21T19:11:00.880-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-21T19:11:00.880-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MongoDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Work" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><title>How do I add a MongoDB replicaset/node with auth/credentials to MMS monitor on 10gen?</title><content type="html">&lt;p&gt;Want to get in on that sweet, sweet &lt;a href="http://www.10gen.com/products/mongodb-monitoring-service"&gt;MMS&lt;/a&gt; MongoDB monitoring action? &lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 3px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image[20]" border="0" alt="image[20]" src="http://lh4.ggpht.com/-CvPPkM1wb4I/USaNtNMpbkI/AAAAAAAAFkE/vjFbfFMOyoo/image%25255B20%25255D%25255B3%25255D.png?imgmax=800" width="403" height="269"&gt;&lt;/p&gt; &lt;p&gt;Of course you do! But are your mongo instances setup to require authentication? Bummer—the instructions won’t work for you out of the box. Here’s what you’re missing. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Go ahead and setup the agent as instructed&lt;/li&gt; &lt;li&gt;Go into the MMS management site&lt;/li&gt; &lt;li&gt;Add your host manually&lt;br&gt;&lt;br&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb[8]" border="0" alt="image_thumb[8]" src="http://lh3.ggpht.com/-U2VyjXaH18Y/USaNuSoLmKI/AAAAAAAAFkI/nY4lsG9_Rc0/image_thumb%25255B8%25255D%25255B3%25255D.png?imgmax=800" width="672" height="105"&gt;&lt;br&gt;&lt;/li&gt; &lt;li&gt;Enter the hostname, db username, and db password. I suggest creating a new user for this (it must be a user on the admin database!)&lt;br&gt;&lt;br&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image_thumb[9]" border="0" alt="image_thumb[9]" src="http://lh4.ggpht.com/-kK_tSRiweBc/USaNu7_65tI/AAAAAAAAFkM/9HgqLFoPOt8/image_thumb%25255B9%25255D%25255B3%25255D.png?imgmax=800" width="509" height="402"&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Now frantically check the hosts, agents, and pings tabs for updates. It might take a few minutes. Check the Agent Log tab for errors :).&lt;/p&gt; &lt;p&gt;Once you get the one host working, it will add the other hosts in the replicaset, too. You can then install the agent on those machines and add a password with the pencil icon to each new row directly.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/wZmNsG6jnOE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/1949506601839861854/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=1949506601839861854" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1949506601839861854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1949506601839861854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/wZmNsG6jnOE/how-do-i-add-mongodb-replicasetnode.html" title="How do I add a MongoDB replicaset/node with auth/credentials to MMS monitor on 10gen?" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-CvPPkM1wb4I/USaNtNMpbkI/AAAAAAAAFkE/vjFbfFMOyoo/s72-c/image%25255B20%25255D%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/02/how-do-i-add-mongodb-replicasetnode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAMQXk-cCp7ImA9WhBSFEU.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-5823728395920220623</id><published>2013-02-21T18:03:00.000-05:00</published><updated>2013-02-21T18:03:00.758-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-21T18:03:00.758-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="MongoDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Work" /><title>How do I add another group to my MongoDB MMS monitor on 10gen?</title><content type="html">&lt;p&gt;10gen has some seriously awesome (free) monitoring software: &lt;a href="http://www.10gen.com/products/mongodb-monitoring-service"&gt;MMS&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 3px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-UqP3dnfcr2Y/USaLnot120I/AAAAAAAAFjM/syPkCCKfaV4/image%25255B16%25255D.png?imgmax=800" width="802" height="536"&gt;&lt;/p&gt; &lt;p&gt;You’re supposed to add your machines to a group, and use a different group for each logical grouping of machines. For instance, one group for one production cluster and another group for a different cluster. &lt;strong&gt;But how do you add a new group!?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I admit the obvious answer eluded me. You do it from the Admins page. Once there you’ll see a little “Add New Group” link:&lt;/p&gt; &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 3px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-yoGU3DqvtYg/USaLosVn4EI/AAAAAAAAFjQ/bXiFJCfW5QU/image%25255B17%25255D.png?imgmax=800" width="592" height="175"&gt;&lt;/p&gt; &lt;p&gt;Once you do that you can switch among your groups with the select list in the upper-left corner. &lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/lnVzLFU4V9I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/5823728395920220623/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=5823728395920220623" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5823728395920220623?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5823728395920220623?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/lnVzLFU4V9I/how-do-i-add-another-group-to-my.html" title="How do I add another group to my MongoDB MMS monitor on 10gen?" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-UqP3dnfcr2Y/USaLnot120I/AAAAAAAAFjM/syPkCCKfaV4/s72-c/image%25255B16%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/02/how-do-i-add-another-group-to-my.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQFSX87cCp7ImA9WhBSE0U.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-5448844558765047363</id><published>2013-02-19T21:59:00.002-05:00</published><updated>2013-02-20T12:11:58.108-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-20T12:11:58.108-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell" /><title>Building Dual-Screen Wallpapers for Windows 7 with PowerShell</title><content type="html">If you have two monitors you have probably noticed that you can’t easily put a different wallpaper on each screen in Windows 7 (this works out of the box in Windows 8). This is annoying. Sure you can fix this with third party tools, but I want to go a different route.&lt;br&gt;&lt;br&gt;The key to getting this to work is to recognize that if you choose a background image that is exactly the same size of your combined monitor real estate, it will automatically be stretched between the two screens. For instance, I have two screens, each running at 1280x1024. If I pick a wallpaper that is twice that width, 2560x1024, Windows will do what I want.&lt;br&gt;&lt;br&gt;Of course the problem then is finding wallpapers that fit that size. Google can help with discovering sites that tailor specifically to this problem.&lt;br&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;strong&gt;But what if you already have single-monitor wallpapers that you want to use? All you really need to do is combine them into a single image.&lt;/strong&gt;&lt;br&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;a style="text-align: center; margin-left: 1em; margin-right: 1em; -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); -webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875)" href="https://lh4.googleusercontent.com/-E4DLYNaeKYM/USQ7jt6lxJI/AAAAAAAAFic/jJHoq0iowss/s640/blogger-image--1475083773.jpg" imageanchor="1"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-E4DLYNaeKYM/USQ7jt6lxJI/AAAAAAAAFic/jJHoq0iowss/s640/blogger-image--1475083773.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;I did this recently to an &lt;a href="http://www.reddit.com/r/pics/comments/qiir8/45_calvin_hobbes_wallpapers_optimized_for/"&gt;entire collection&lt;/a&gt; of Calvin and Hobbes wallpapers. I wanted to show a different comic on each screen, but not always the same two at a time—I wanted to mimic the Windows 8 strategy of seemingly random wallpapers on random screens. &lt;br&gt;&lt;br&gt;I combined two images manually, side by side at 2560x1024 once to confirm it would work, and then wrote a few lines of PowerShell to generate every possible combination with the help of the amazing &lt;a href="http://www.imagemagick.org/"&gt;ImageMagick&lt;/a&gt; library (specifically the &lt;a href="http://www.imagemagick.org/script/montage.php"&gt;montage&lt;/a&gt; command). The idea being that if I just pre-generate all the options, they will appear to be randomly assembled as they cycle through.&lt;br&gt;&lt;br&gt;Run this script in the dirctory containing all your single wallpapers and it will combine them into the dual-screen variety.&lt;br&gt;&lt;br&gt;Obviously this is crude--add your own flow control, resume support for large batches, etc....&lt;br&gt;&lt;br&gt;&lt;pre class="csharpcode"&gt;$imgs = Get-ChildItem * -include *.jpg,*.png -exclude dual*

&lt;span class="kwrd"&gt;for&lt;/span&gt; ($i=0; $i -lt $imgs.Length; $i++){ 
    &lt;span class="kwrd"&gt;for&lt;/span&gt; ($j=0; $j -lt $imgs.Length; $j++){ 
        &lt;span class="kwrd"&gt;if&lt;/span&gt;($i -eq $j){ &lt;span class="kwrd"&gt;continue&lt;/span&gt;; }
        $left = $imgs[$i].Name
        $right = $imgs[$j].Name
        $extension = &lt;span class="str"&gt;"jpg"&lt;/span&gt;

        $destination = [&lt;span class="kwrd"&gt;string&lt;/span&gt;]::Format(&lt;span class="str"&gt;"dual/dual-{0}-{1}.{2}"&lt;/span&gt;, $i, $j, $extension)

        &lt;span class="kwrd"&gt;if&lt;/span&gt;(Test-Path $destination){
            echo &lt;span class="str"&gt;"Skipping $destination"&lt;/span&gt;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;{
            echo &lt;span class="str"&gt;"Running: montage -geometry 1280x1024 $left $right $destination"&lt;/span&gt;
            montage -geometry 1280x1024 $left $right $destination
        }
    }
}&lt;/pre&gt;
&lt;p&gt;Change that &lt;code&gt;-geometry&lt;/code&gt; part to fit your system, obviously, and yeah... just loop over everything :). &lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/JLpYpIgqeg0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/5448844558765047363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=5448844558765047363" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5448844558765047363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5448844558765047363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/JLpYpIgqeg0/building-dual-screen-wallpapers-for.html" title="Building Dual-Screen Wallpapers for Windows 7 with PowerShell" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-E4DLYNaeKYM/USQ7jt6lxJI/AAAAAAAAFic/jJHoq0iowss/s72-c/blogger-image--1475083773.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/02/building-dual-screen-wallpapers-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUARn44fyp7ImA9WhBSE08.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-6589303459205822265</id><published>2013-02-19T21:20:00.001-05:00</published><updated>2013-02-19T21:27:27.037-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-19T21:27:27.037-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><title>Setting up a Samsung Wireless Laser Printer with a Phone or Tablet
(i.e. Without a Computer)</title><content type="html">We have finally ditched our money pit inkjet printer in favor of a slightly more economical laser printer. We opted for a very cheap, but capable Samsung ML-2165W. It's monochrome, fast, and supports wireless connectivity. &lt;br /&gt;
&lt;br /&gt;
If you want builtin duplex or color be prepared to drop some extra coin.&lt;br /&gt;
&lt;br /&gt;
Our goal was cheap, fast printing and laser printers seem to do the trick there with a much lower $/page cost than inkjet.&lt;br /&gt;
&lt;br /&gt;
But enough about that. How do you get the damn thing setup? The instructions tell you to pop the CD into your computer and go to town. What if you don't have a CD-ROM drive? Or a computer? Luckily you can do it with just a web browser, though it's admittedly not the simplest process. Here's how I did it with my iPhone/iPad:&lt;br /&gt;
&lt;br /&gt;
First, setup the printer and turn it on. Don't hook up the USB cable to anything.&lt;br /&gt;
&lt;br /&gt;
Next, go get the Samsung print app for your phone or tablet. Do this before the next step because you need to be online to do it.&lt;br /&gt;
&lt;br /&gt;
The printer will broadcast a WiFi network for ad-hoc printing. Connect to that with your phone or tablet--it'll be something like "PortThru". Just look for an open network with a good signal that looks like it was named by a corporation.&lt;br /&gt;
&lt;br /&gt;
Once you're connected to the printer open the print app. We don't actually want to print anything yet (though you could!). Go through the motions like you &lt;em&gt;are&lt;/em&gt; going to print something though, because we want to know the printer's IP address. This will show up when you go to select the printer.&lt;br /&gt;
&lt;br /&gt;
Note the IP address and head over to your web browser. Enter the IP address in the address bar to get to the printer's management console.&lt;br /&gt;
&lt;br /&gt;
Login with user "admin", password "sec00000". If that doesn't work, do a Google search for "default password &amp;lt;your printer model&amp;gt;" and try that.&lt;br /&gt;
&lt;br /&gt;
Once you're logged in, go to the settings page and do the wireless setup. This will let you choose your WiFi network from a list. When complete, your printer (or at least its network) will reboot. Give it a minute.&lt;br /&gt;
&lt;br /&gt;
Your phone or tablet will probably automatically reconnect to your usual WiFi network.&lt;br /&gt;
&lt;br /&gt;
Launch that printer app again and go to print something else. This should allow you to choose your printer again, but this time with a normal network address (10.0.*.*, 192.168.*.*, etc.). This means that the printer is now on the network and available to everyone. Good job!&lt;br /&gt;
&lt;br /&gt;
Now go kill some trees! &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-zhKBuMUGGrk/USQy0wjnCUI/AAAAAAAAFiE/gQCkcyhTjjk/s640/blogger-image-855070614.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh3.googleusercontent.com/-zhKBuMUGGrk/USQy0wjnCUI/AAAAAAAAFiE/gQCkcyhTjjk/s640/blogger-image-855070614.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-SgC8NNFR37M/USQy2F7rA4I/AAAAAAAAFiM/KNZs8Z1CLPE/s640/blogger-image-519166345.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-SgC8NNFR37M/USQy2F7rA4I/AAAAAAAAFiM/KNZs8Z1CLPE/s640/blogger-image-519166345.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/tMhbAOkYO64" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/6589303459205822265/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=6589303459205822265" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/6589303459205822265?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/6589303459205822265?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/tMhbAOkYO64/setting-up-samsung-wireless-laser.html" title="Setting up a Samsung Wireless Laser Printer with a Phone or Tablet&#xA;(i.e. Without a Computer)" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-zhKBuMUGGrk/USQy0wjnCUI/AAAAAAAAFiE/gQCkcyhTjjk/s72-c/blogger-image-855070614.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/02/setting-up-samsung-wireless-laser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4CQXw9eCp7ImA9WhBSE0w.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-1001734001870731048</id><published>2013-02-19T18:36:00.000-05:00</published><updated>2013-02-19T18:36:00.260-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-19T18:36:00.260-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MongoDB" /><category scheme="http://www.blogger.com/atom/ns#" term="Work" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Automatically Connect to the Replica Set Primary with Mongo Shell</title><content type="html">&lt;p&gt;So you got your fancy MongoDB Replica Set running, did you, Mr. Fancypants? Before too long you might run into an issue: &lt;strong&gt;how do you connect to the primary node when the primary can change? &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Luckily our applications don’t have this problem because their drivers are smart and automatically connect to the primary. The Mongo shell doesn’t do that, though.&lt;/p&gt; &lt;p&gt;Here’s a library to help with that. Throw this into a file called replicaSetConnector.js:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; ReplicaSetConnector = (&lt;span class="kwrd"&gt;function&lt;/span&gt;() { 
    &lt;span class="kwrd"&gt;var&lt;/span&gt; RSC = &lt;span class="kwrd"&gt;function&lt;/span&gt;(options) {
    
        &lt;span class="rem"&gt;// private method for handling the dirty work of connecting &lt;/span&gt;
        &lt;span class="rem"&gt;// and authenticating to mongo&lt;/span&gt;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; connectAndAuth = &lt;span class="kwrd"&gt;function&lt;/span&gt;(host) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(options.debug){
                print(&lt;span class="str"&gt;"Connecting to "&lt;/span&gt; 
                    + host + &lt;span class="str"&gt;"/"&lt;/span&gt; + options.database 
                    + &lt;span class="str"&gt;" as "&lt;/span&gt; + options.username + &lt;span class="str"&gt;":"&lt;/span&gt; + options.password);
            }
            
            &lt;span class="kwrd"&gt;var&lt;/span&gt; connection = &lt;span class="kwrd"&gt;new&lt;/span&gt; Mongo(host);
            &lt;span class="kwrd"&gt;var&lt;/span&gt; database = connection.getDB(options.database);
            database.auth(options.username, options.password);    
            
            &lt;span class="kwrd"&gt;return&lt;/span&gt; database;    
        };
        
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.connect = &lt;span class="kwrd"&gt;function&lt;/span&gt;() {
            &lt;span class="rem"&gt;// db needs to be a global variable for subsequent shell commands to work :)&lt;/span&gt;
            &lt;span class="rem"&gt;// connect to the given host, which could be any node of the replica set&lt;/span&gt;
            db = connectAndAuth(options.initialHost);
            
            &lt;span class="rem"&gt;// load some basic replica set information, which will tell us &lt;/span&gt;
            &lt;span class="rem"&gt;// if we're on the primary, and if not where it is&lt;/span&gt;
            &lt;span class="kwrd"&gt;var&lt;/span&gt; rsInfo = db.isMaster();

            &lt;span class="rem"&gt;// if we're already on the primary, we're done. Otherwise, change our&lt;/span&gt;
            &lt;span class="rem"&gt;// connection to the primary&lt;/span&gt;
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(!rsInfo.ismaster){
                &lt;span class="kwrd"&gt;if&lt;/span&gt;(options.debug) print(&lt;span class="str"&gt;"You're not on master..."&lt;/span&gt;);
                db = connectAndAuth(rsInfo.primary);
                &lt;span class="kwrd"&gt;if&lt;/span&gt;(options.debug) print(&lt;span class="str"&gt;"...or are you ;)"&lt;/span&gt;);
            }
        };
    };
        
    &lt;span class="kwrd"&gt;return&lt;/span&gt; RSC;
})();&lt;/pre&gt;
&lt;p&gt;That’s a library we’ll reuse bunches of times. Now make another file for your environment, e.g. prod.js with this in it:&lt;/p&gt;&lt;pre class="csharpcode"&gt;(&lt;span class="kwrd"&gt;new&lt;/span&gt; ReplicaSetConnector({ 
    initialHost: &lt;span class="str"&gt;'one-of-your-replica-set-nodes:27017'&lt;/span&gt;, 
    database: &lt;span class="str"&gt;"database-name"&lt;/span&gt;, 
    username: &lt;span class="str"&gt;"user"&lt;/span&gt;, 
    password: &lt;span class="str"&gt;"secret..."&lt;/span&gt;,
    debug: &lt;span class="kwrd"&gt;true&lt;/span&gt;})).connect();&lt;/pre&gt;
&lt;p&gt;And we’re finally read to connect with a mongo shell like so:&lt;/p&gt;&lt;pre class="csharpcode"&gt;%&amp;gt; mongo --shell --nodb replicaSetConnector.js prod.js
MongoDB shell version: 2.2.2
type "help" for help
loading file: replicaSetConnector.js
loading file: prod.js
Connecting to one-of-your-replica-set-nodes:27017/database-name as user:secret...
&lt;strong&gt;You're not on master...
&lt;/strong&gt;Connecting to another-one-of-your-replica-set-nodes:27017/database-name as user:secret
&lt;strong&gt;...or are you ;)&lt;/strong&gt;
&amp;gt;&lt;/pre&gt;
&lt;p&gt;Yes, now you are on master and the &lt;code&gt;db&lt;/code&gt; object is set for you to begin executing commands. If you want to be extra terse on the command line, you can &lt;a href="http://tldp.org/LDP/abs/html/aliases.html"&gt;alias&lt;/a&gt; that command to something shorter, add the library to your &lt;a href="http://docs.mongodb.org/manual/reference/mongo/#mongo-mongorc-file"&gt;mongorc&lt;/a&gt; file, or make Windows shortcut.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/tOexHyz6OpA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/1001734001870731048/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=1001734001870731048" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1001734001870731048?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1001734001870731048?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/tOexHyz6OpA/automatically-connect-to-replica-set.html" title="Automatically Connect to the Replica Set Primary with Mongo Shell" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/02/automatically-connect-to-replica-set.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QDQHczfip7ImA9WhBTEU0.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-7556333024529997834</id><published>2013-02-05T16:56:00.001-05:00</published><updated>2013-02-05T16:56:11.986-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-02-05T16:56:11.986-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="DevOps" /><category scheme="http://www.blogger.com/atom/ns#" term="Work" /><category scheme="http://www.blogger.com/atom/ns#" term="Chef" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Chef on Windows Error: tar: Cannot fork: Function not implemented (Solved)</title><content type="html">&lt;p&gt;I’m &lt;a href="http://wiki.opscode.com/display/chef/Workstation+Setup+for+Windows"&gt;diving into&lt;/a&gt; the fun world of &lt;a href="http://www.opscode.com/chef/"&gt;Chef&lt;/a&gt;. But I’m doing it on Windows, which has been…not smooth. Here’s my latest error:&lt;/p&gt;&lt;pre style="padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px"&gt;C:\Users\mharen\Code\chef-repo&amp;gt;&lt;strong&gt;knife cookbook site install getting-started&lt;/strong&gt;
Installing getting-started to C:/Users/mharen/Code/chef-repo/cookbooks
Checking out the master branch.
Pristine copy branch (chef-vendor-getting-started) exists, switching to it.
Downloading getting-started from the cookbooks site at version 0.4.0 to C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz
Cookbook saved: C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz
Removing pre-existing version.
Uncompressing getting-started version 0.4.0.
ERROR: Mixlib::ShellOut::ShellCommandFailed: &lt;strong&gt;Expected process to exit with [0], but received '2'&lt;/strong&gt;
---- Begin output of tar zxvf C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz ----
STDOUT:
STDERR: &lt;strong&gt;tar: Cannot fork: Function not implemented
&lt;/strong&gt;tar: Error is not recoverable: exiting now
---- End output of tar zxvf C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz ----
Ran tar zxvf C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz returned 2
&lt;/pre&gt;
&lt;p&gt;Lame. After wasting an embarrassingly large amount of time on this issue, I figured it out: I had multiple installs of the `tar` command:&lt;/p&gt;&lt;pre style="padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px"&gt;C:\Users\mharen\Code\chef-repo&amp;gt;&lt;strong&gt;which -a tar&lt;/strong&gt;
C:\Program Files (x86)\Gow\bin\tar.EXE
C:\chef\bin\tar.EXE
c:\Git\bin\tar.EXE
&lt;/pre&gt;
&lt;p&gt;And apparently some of them &lt;a href="http://sourceforge.net/p/gnuwin32/discussion/74807/thread/c73aced2/"&gt;suck&lt;/a&gt;. Hard. Since I’m playing with Chef, let’s just use that one—it probably works. This was as easy as updating my PATH variable to place `c:\chef\bin` at the beginning instead of the end (really just before the others found by `which`):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-pIdgx2uFfbs/URF_9Qst5HI/AAAAAAAAFhc/PTas7UUcsJI/s1600-h/image%25255B3%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 3px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-i9H00Ah5ug0/URF_-tUDmPI/AAAAAAAAFhk/WaeAgTe7M7s/image_thumb%25255B1%25255D.png?imgmax=800" width="628" height="648"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you fix the path, close and reopen your cmd window and try the command again:&lt;/p&gt;&lt;pre style="padding-bottom: 10px; padding-left: 10px; padding-right: 10px; padding-top: 10px"&gt;C:\Users\mharen\Code\chef-repo&amp;gt;&lt;strong&gt;which -a tar
C:\chef\bin\tar.EXE
&lt;/strong&gt;c:\Git\bin\tar.EXE
C:\Program Files (x86)\Gow\bin\tar.EXE

C:\Users\mharen\Code\chef-repo&amp;gt;&lt;strong&gt;knife cookbook site install getting-started
&lt;/strong&gt;Installing getting-started to C:/Users/mharen/Code/chef-repo/cookbooks
Checking out the master branch.
Pristine copy branch (chef-vendor-getting-started) exists, switching to it.
Downloading getting-started from the cookbooks site at version 0.4.0 to C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz
Cookbook saved: C:/Users/mharen/Code/chef-repo/cookbooks/getting-started.tar.gz
Removing pre-existing version.
Uncompressing getting-started version 0.4.0.
removing downloaded tarball
1 files updated, committing changes
Creating tag cookbook-site-imported-getting-started-0.4.0
Checking out the master branch.
Updating b5a1d0d..42a8168
Fast-forward
 cookbooks/getting-started/README.rdoc              |  4 +++
 cookbooks/getting-started/attributes/default.rb    |  1 +
 cookbooks/getting-started/metadata.json            | 29 ++++++++++++++++++++++
 cookbooks/getting-started/metadata.rb              |  6 +++++
 cookbooks/getting-started/recipes/default.rb       | 23 +++++++++++++++++
 .../templates/default/chef-getting-started.txt.erb |  5 ++++
 6 files changed, 68 insertions(+)
 create mode 100644 cookbooks/getting-started/README.rdoc
 create mode 100644 cookbooks/getting-started/attributes/default.rb
 create mode 100644 cookbooks/getting-started/metadata.json
 create mode 100644 cookbooks/getting-started/metadata.rb
 create mode 100644 cookbooks/getting-started/recipes/default.rb
 create mode 100644 cookbooks/getting-started/templates/default/chef-getting-started.txt.erb
Cookbook getting-started version 0.4.0 successfully installed

C:\Users\mharen\Code\chef-repo&amp;gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;All fixed :)&lt;/strong&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/Zu09FcjuLDI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/7556333024529997834/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=7556333024529997834" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/7556333024529997834?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/7556333024529997834?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/Zu09FcjuLDI/chef-on-windows-error-tar-cannot-fork.html" title="Chef on Windows Error: tar: Cannot fork: Function not implemented (Solved)" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-i9H00Ah5ug0/URF_-tUDmPI/AAAAAAAAFhk/WaeAgTe7M7s/s72-c/image_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2013/02/chef-on-windows-error-tar-cannot-fork.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQNRXc5fCp7ImA9WhNWGE0.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-8902135801974411039</id><published>2012-12-17T23:01:00.001-05:00</published><updated>2012-12-17T23:19:54.924-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-17T23:19:54.924-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Random Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="Work" /><title>Goodbye, Hello</title><content type="html">&lt;p&gt;I'm happy to share that I've begun an entirely new volume in my career. Today is my first day at OverDrive, Inc.&lt;/p&gt;&lt;h3&gt;The New&lt;/h3&gt;&lt;p&gt;&lt;a href="http://overdrive.com/"&gt;OverDrive&lt;/a&gt;&amp;nbsp;does management and distribution of digital media like audio books and ebooks. If you've ever borrowed an ebook from your library, the chances are very good you've touched their technology.&lt;/p&gt;&lt;p&gt;They're headquartered in an amazing new office in Garfield Heights, Ohio, where I'll be working as a developer.&lt;/p&gt;&lt;h3&gt;The Old&lt;/h3&gt;&lt;p&gt;I am leaving behind an incredible team at RoviSys. I worked there for nearly eight years and had the pleasure of building some great software and great relationships.&lt;/p&gt;&lt;p&gt;If you're looking for a fun, dynamic environment with some clever, passionate people give them a &lt;a href="http://www.rovisys.com/Careers/Careers.aspx"&gt;shout&lt;/a&gt;. If you like variety in your work or love to travel why are you still here? Go call them (they're hiring all the time)!&lt;/p&gt;&lt;h3&gt;What?! Why?&lt;/h3&gt;&lt;p&gt;I had a pretty sweet setup at RoviSys, it's true. So why would I step out into the unknown like this? It really boiled down to the differences between consulting work and product work.&lt;/p&gt;&lt;p&gt;For me, consulting meant that I got to work on a variety of different things. The projects were numerous. That's good.&lt;/p&gt;&lt;p&gt;Product work is different. Pretty much all your effort goes to support the products of your company. Of course products are complex things with lots of moving parts, but it's a far cry from the diversity you see in consulting.&lt;/p&gt;&lt;p&gt;I appreciate the variety of the consulting world but I &lt;i&gt;crave &lt;/i&gt;the razor focus of the products world. I want to polish the application until it shines.&lt;b&gt; I want the user experience to be so smooth that I'm not tortured watching a new user stumble through it.&lt;/b&gt; Consulting doesn't work that way because it's rarely needed there. &lt;/p&gt;&lt;p&gt;In the consulting world things usually just need to be &lt;i&gt;good enough&lt;/i&gt;. That's not a bad thing; the goals are just different. If a customer wants to manage some data with a mobile app, they're satisfied when they can do that. They typically are not willing to pay more to make sure it has a nice icon, comprehensive support documentation, clean URLs, good performance, etc.&lt;/p&gt;&lt;h3&gt;Why &lt;i&gt;Now&lt;/i&gt;?&lt;/h3&gt;&lt;p&gt;I don't like to coast through things and I didn't like where inertia was taking me. To continue growing as an engineer I felt that I needed to travel a different path. So that's what I'm doing. I won't be using radically different tools or tackling alien problems, but I'll be building things that help millions of people. And these things I help to build will be really, really shiny.&lt;/p&gt;&lt;p&gt;Thank you to everyone who helped me work through this difficult decision!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/ceR9-5tTQoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/8902135801974411039/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=8902135801974411039" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/8902135801974411039?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/8902135801974411039?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/ceR9-5tTQoQ/goodbye-hello.html" title="Goodbye, Hello" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/12/goodbye-hello.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIDQH0_eSp7ImA9WhNWE0s.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-4281913182471843242</id><published>2012-12-12T20:33:00.001-05:00</published><updated>2012-12-12T20:36:11.341-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-12T20:36:11.341-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Wireless" /><title>The Real Reason They’re Taking Away Your Unlimited Data</title><content type="html">&lt;p&gt;When the wireless companies started cutting back on their unlimited data offerings last year, I was a little confused. AT&amp;amp;T went first, then Verizon. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Don’t worry&lt;/em&gt;, they said—&lt;em&gt;hardly anyone goes over these new limits&lt;/em&gt;. It seemed strange to me that they’d go out of their way to upset so many just to catch a few heavy users. &lt;/p&gt;  &lt;p&gt;But they did and here’s why: 4g. And the future.&lt;/p&gt;  &lt;p&gt;Sure it’s hard to use much data with a 3g device &lt;em&gt;now&lt;/em&gt;. Some day you’ll pick up a fancy new 4g phone or tablet. And the data will be a flowing. Once it’s easy and practical to stream Netflix on our phones, we will. And the phone carriers seem to have had the unusual foresight to position themselves accordingly.&lt;/p&gt;  &lt;p&gt;They’re getting us to abandon our unlimited plans when it’s painless, and then a year or two from now it’ll be &lt;em&gt;our fault&lt;/em&gt; when we start hitting our data caps and upgrading our plans accordingly.&lt;/p&gt;  &lt;p&gt;And that sucks.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/MdTnAsqkh0c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/4281913182471843242/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=4281913182471843242" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4281913182471843242?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4281913182471843242?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/MdTnAsqkh0c/the-real-reason-theyre-taking-away-your.html" title="The Real Reason They’re Taking Away Your Unlimited Data" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/12/the-real-reason-theyre-taking-away-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIER34_eCp7ImA9WhNWE0g.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-8748237096337010282</id><published>2012-12-12T18:55:00.001-05:00</published><updated>2012-12-12T18:55:06.040-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-12T18:55:06.040-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><title>Google Analytics: Fun with Advanced Segments</title><content type="html">&lt;p&gt;I was curious about how my blog’s visitor’s tech has changed over the years. Perhaps Google Analytics can help?&lt;/p&gt;  &lt;p&gt;The normal stats you get for your users are pretty nice:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh3.ggpht.com/-oIW6hLiORSo/UMkZBMjJXpI/AAAAAAAAFdo/GDU2PLMd5SE/image%25255B2%25255D.png?imgmax=800" width="700" height="362" /&gt;&lt;/p&gt;  &lt;p&gt;But this doesn’t show us how they’ve changed &lt;em&gt;over time&lt;/em&gt;. For instance, how has Internet Explorer fared over the last two years? You can do this with &lt;a href="https://support.google.com/analytics/bin/answer.py?hl=en-GB&amp;amp;answer=1033017&amp;amp;topic=1032940&amp;amp;rd=1"&gt;advanced segments&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Click the advanced segments button and add a few custom segments for the metric you’re interested in. In my case, I added one for browsers that look like IE, and browsers that don’t:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh4.ggpht.com/-CvYEwOK46kU/UMkZBo4oW3I/AAAAAAAAFdw/gkIwUFKdhDA/image%25255B20%25255D.png?imgmax=800" width="588" height="40" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh4.ggpht.com/-U1WZNr1QdOs/UMkZQGpCQTI/AAAAAAAAFd4/aJujJUPxLDU/image%25255B28%25255D.png?imgmax=800" width="587" height="35" /&gt;&lt;/p&gt;  &lt;p&gt;Then add those to your report:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh5.ggpht.com/-64qKSrCUrMQ/UMkZQrjNFpI/AAAAAAAAFeA/D_T5p_pb_3M/image%25255B31%25255D.png?imgmax=800" width="387" height="105" /&gt;&lt;/p&gt;  &lt;p&gt;And you get something like this:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh6.ggpht.com/-kzDdOt_puos/UMkZRm1uyPI/AAAAAAAAFeI/_nIpdAjotA4/image%25255B11%25255D.png?imgmax=800" width="700" height="157" /&gt;&lt;/p&gt;  &lt;p&gt;It looks like my IE traffic has always been less than other browsers, and it’s also grown at a much slower rate leading to the huge disparity I see today.&lt;/p&gt;  &lt;p&gt;This shows the visitor count for each month, so this shows raw growth, too. I’d prefer to look at this in percentage terms but I couldn’t figure that out. Dumping these data into a spreadsheet lets me view things the way I wanted initially:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh4.ggpht.com/-afdWpcrDyMA/UMkZR8RXqKI/AAAAAAAAFeQ/DN8tRlNbhm4/image%25255B14%25255D.png?imgmax=800" width="556" height="245" /&gt;&lt;/p&gt;  &lt;p&gt;After a little pivot table action and a chart, I have what I want:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh6.ggpht.com/-6eN67ACfiEQ/UMkZTayDicI/AAAAAAAAFeY/Ar7aTrmQ1Ug/image%25255B17%25255D.png?imgmax=800" width="508" height="430" /&gt;&lt;/p&gt;  &lt;p&gt;We can see that IE popularity is dropping slowly…much more slowly than I expected. Let’s see if we can abuse visualizations a little to make this look more dramatic. Here’s the “trend” view:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh5.ggpht.com/-Wp-I_ywGq6w/UMkZUWq6AaI/AAAAAAAAFeg/MluJvWoxI9k/image%25255B34%25255D.png?imgmax=800" width="700" height="456" /&gt;&lt;/p&gt;  &lt;p&gt;I used independent scales. It’s super effective.&lt;/p&gt;  &lt;p&gt;Google Analytics is a fun thing to turn on when a project starts and then forget about for a while. Some day later, you can come back and lose two hours exploring the trove of data you’ve collected.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Here’s some more stat candy if that’s what you’re in to. Watch out, BlackBerry users, you’re as popular as PS3 (#LOLWUT):&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh4.ggpht.com/-Z0ZtiXqvuT4/UMkZVHxGO4I/AAAAAAAAFeo/rZaq4MR1pZU/image%25255B5%25255D.png?imgmax=800" width="700" height="330" /&gt;&lt;/p&gt;  &lt;p&gt;I’m pleasantly surprised to see that 1280px+-wide monitors make up more than 80% of my traffic. I’m sad for all those poor souls using the BS “HD” resolution of 1366x768, though. &lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh3.ggpht.com/-BqtbuFFln-M/UMkZWBTtDuI/AAAAAAAAFew/c2hGi3wpfIE/image%25255B8%25255D.png?imgmax=800" width="700" height="357" /&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/OCVOJika0LY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/8748237096337010282/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=8748237096337010282" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/8748237096337010282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/8748237096337010282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/OCVOJika0LY/google-analytics-fun-with-advanced.html" title="Google Analytics: Fun with Advanced Segments" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-oIW6hLiORSo/UMkZBMjJXpI/AAAAAAAAFdo/GDU2PLMd5SE/s72-c/image%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/12/google-analytics-fun-with-advanced.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UHR3g6eCp7ImA9WhNWEk4.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-1159861307074099660</id><published>2012-12-11T10:18:00.001-05:00</published><updated>2012-12-11T10:20:36.610-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-11T10:20:36.610-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Work" /><category scheme="http://www.blogger.com/atom/ns#" term="SAP" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>SAP Connector: “ERROR service '?' unknown” (SOLVED)</title><content type="html">&lt;p&gt;So you’ve been using the SAP .NET Connector 3.0 for a while and it’s working great to connect your .NET application to SAP when suddenly you start getting this error:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;ERROR service '?' unknown&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;You probably have some code like this (or you’re just trying to &lt;a href="http://www.sapgeek.net/2010/02/sapgui-error-errorservice-unknown/"&gt;login&lt;/a&gt; or get your app to run):&lt;/p&gt;  &lt;pre class="csharpcode"&gt;Server = RfcServerManager.GetServer(serverName, rfcHandlers);

&lt;span class="rem"&gt;// other init...&lt;/span&gt;

Server.Start();&lt;/pre&gt;

&lt;p&gt;So what happened? I’m guessing you have a new machine or recently removed some SAP-related software. I’m also guessing that if you install the SAP Logon pad, this issue will go away. But you don’t have to go to all that trouble! In my experience, all you need to do is add some configuration to the system services file. Here’s how:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Open Notepad as an administrator &lt;/li&gt;

  &lt;li&gt;Open this file: &lt;code&gt;&lt;strong&gt;%windir%\system32\drivers\etc\services&lt;/strong&gt;&lt;/code&gt; &lt;/li&gt;

  &lt;li&gt;Look around for services starting with &amp;quot;sap&amp;quot; &lt;/li&gt;

  &lt;li&gt;Assuming you don't find much, add these lines to the end: 
    &lt;br /&gt;

    &lt;pre&gt;sapdp00  3200/tcp
sapdp01  3201/tcp
sapdp02  3202/tcp
sapdp03  3203/tcp
sapdp04  3204/tcp
sapdp05  3205/tcp
sapdp06  3206/tcp
sapdp07  3207/tcp
sapdp08  3208/tcp
sapdp09  3209/tcp
sapdp10  3210/tcp
sapdp11  3211/tcp
sapdp12  3212/tcp
sapdp13  3213/tcp
sapdp14  3214/tcp
sapdp15  3215/tcp
sapdp16  3216/tcp
sapdp17  3217/tcp
sapdp18  3218/tcp
sapdp19  3219/tcp
sapdp20  3220/tcp
sapdp21  3221/tcp
sapdp22  3222/tcp
sapdp23  3223/tcp
sapdp24  3224/tcp
sapdp25  3225/tcp
sapdp26  3226/tcp
sapdp27  3227/tcp
sapdp28  3228/tcp
sapdp29  3229/tcp
sapdp30  3230/tcp
sapdp31  3231/tcp
sapdp32  3232/tcp
sapdp33  3233/tcp
sapdp34  3234/tcp
sapdp35  3235/tcp
sapdp36  3236/tcp
sapdp37  3237/tcp
sapdp38  3238/tcp
sapdp39  3239/tcp
sapdp40  3240/tcp
sapdp41  3241/tcp
sapdp42  3242/tcp
sapdp43  3243/tcp
sapdp44  3244/tcp
sapdp45  3245/tcp
sapdp46  3246/tcp
sapdp47  3247/tcp
sapdp48  3248/tcp
sapdp49  3249/tcp
sapdp50  3250/tcp
sapdp51  3251/tcp
sapdp52  3252/tcp
sapdp53  3253/tcp
sapdp54  3254/tcp
sapdp55  3255/tcp
sapdp56  3256/tcp
sapdp57  3257/tcp
sapdp58  3258/tcp
sapdp59  3259/tcp
sapdp60  3260/tcp
sapdp61  3261/tcp
sapdp62  3262/tcp
sapdp63  3263/tcp
sapdp64  3264/tcp
sapdp65  3265/tcp
sapdp66  3266/tcp
sapdp67  3267/tcp
sapdp68  3268/tcp
sapdp69  3269/tcp
sapdp70  3270/tcp
sapdp71  3271/tcp
sapdp72  3272/tcp
sapdp73  3273/tcp
sapdp74  3274/tcp
sapdp75  3275/tcp
sapdp76  3276/tcp
sapdp77  3277/tcp
sapdp78  3278/tcp
sapdp79  3279/tcp
sapdp80  3280/tcp
sapdp81  3281/tcp
sapdp82  3282/tcp
sapdp83  3283/tcp
sapdp84  3284/tcp
sapdp85  3285/tcp
sapdp86  3286/tcp
sapdp87  3287/tcp
sapdp88  3288/tcp
sapdp89  3289/tcp
sapdp90  3290/tcp
sapdp91  3291/tcp
sapdp92  3292/tcp
sapdp93  3293/tcp
sapdp94  3294/tcp
sapdp95  3295/tcp
sapdp96  3296/tcp
sapdp97  3297/tcp
sapdp98  3298/tcp
sapdp99  3299/tcp
sapgw00  3300/tcp
sapgw01  3301/tcp
sapgw02  3302/tcp
sapgw03  3303/tcp
sapgw04  3304/tcp
sapgw05  3305/tcp
sapgw06  3306/tcp
sapgw07  3307/tcp
sapgw08  3308/tcp
sapgw09  3309/tcp
sapgw10  3310/tcp
sapgw11  3311/tcp
sapgw12  3312/tcp
sapgw13  3313/tcp
sapgw14  3314/tcp
sapgw15  3315/tcp
sapgw16  3316/tcp
sapgw17  3317/tcp
sapgw18  3318/tcp
sapgw19  3319/tcp
sapgw20  3320/tcp
sapgw21  3321/tcp
sapgw22  3322/tcp
sapgw23  3323/tcp
sapgw24  3324/tcp
sapgw25  3325/tcp
sapgw26  3326/tcp
sapgw27  3327/tcp
sapgw28  3328/tcp
sapgw29  3329/tcp
sapgw30  3330/tcp
sapgw31  3331/tcp
sapgw32  3332/tcp
sapgw33  3333/tcp
sapgw34  3334/tcp
sapgw35  3335/tcp
sapgw36  3336/tcp
sapgw37  3337/tcp
sapgw38  3338/tcp
sapgw39  3339/tcp
sapgw40  3340/tcp
sapgw41  3341/tcp
sapgw42  3342/tcp
sapgw43  3343/tcp
sapgw44  3344/tcp
sapgw45  3345/tcp
sapgw46  3346/tcp
sapgw47  3347/tcp
sapgw48  3348/tcp
sapgw49  3349/tcp
sapgw50  3350/tcp
sapgw51  3351/tcp
sapgw52  3352/tcp
sapgw53  3353/tcp
sapgw54  3354/tcp
sapgw55  3355/tcp
sapgw56  3356/tcp
sapgw57  3357/tcp
sapgw58  3358/tcp
sapgw59  3359/tcp
sapgw60  3360/tcp
sapgw61  3361/tcp
sapgw62  3362/tcp
sapgw63  3363/tcp
sapgw64  3364/tcp
sapgw65  3365/tcp
sapgw66  3366/tcp
sapgw67  3367/tcp
sapgw68  3368/tcp
sapgw69  3369/tcp
sapgw70  3370/tcp
sapgw71  3371/tcp
sapgw72  3372/tcp
sapgw73  3373/tcp
sapgw74  3374/tcp
sapgw75  3375/tcp
sapgw76  3376/tcp
sapgw77  3377/tcp
sapgw78  3378/tcp
sapgw79  3379/tcp
sapgw80  3380/tcp
sapgw81  3381/tcp
sapgw82  3382/tcp
sapgw83  3383/tcp
sapgw84  3384/tcp
sapgw85  3385/tcp
sapgw86  3386/tcp
sapgw87  3387/tcp
sapgw88  3388/tcp
sapgw89  3389/tcp
sapgw90  3390/tcp
sapgw91  3391/tcp
sapgw92  3392/tcp
sapgw93  3393/tcp
sapgw94  3394/tcp
sapgw95  3395/tcp
sapgw96  3396/tcp
sapgw97  3397/tcp
sapgw98  3398/tcp
sapgw99  3399/tcp&lt;/pre&gt;
  &lt;/li&gt;

  &lt;li&gt;Save the file and restart your application (rebooting the machine shouldn't be required) &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Strictly speaking, you should only really one or two of these—the one that corresponds to your SAP system—but I don’t think it hurts anything to have them all in there.&lt;/p&gt;

&lt;h3&gt;Other Things To Try&lt;/h3&gt;

&lt;p&gt;If that doesn’t fix it, you might also make sure you’re &lt;a href="http://scn.sap.com/message/7362628"&gt;using a hostname&lt;/a&gt; (not an IP address) and that you are using the &lt;a href="http://scn.sap.com/message/10615183#10615183"&gt;right connection&lt;/a&gt; for your situation (ashost/application server host vs. message server host else there is).&lt;/p&gt;

&lt;p&gt;I also stumbled across a user &lt;a href="http://social.technet.microsoft.com/Forums/en-US/identitylifecyclemanager/thread/6b0c21e2-3f10-47df-be92-f9b682805dd9/"&gt;reporting an issue with tabs vs. spaces&lt;/a&gt;. I’ve not had any trouble with spaces but your mileage may vary.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/2qTkWbc2hmk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/1159861307074099660/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=1159861307074099660" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1159861307074099660?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1159861307074099660?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/2qTkWbc2hmk/sap-connector-error-service-unknown.html" title="SAP Connector: “ERROR service &amp;#39;?&amp;#39; unknown” (SOLVED)" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/12/sap-connector-error-service-unknown.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEMSH04fip7ImA9WhNXFUQ.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-6491905509397321457</id><published>2012-12-03T22:41:00.001-05:00</published><updated>2012-12-03T22:44:49.336-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-03T22:44:49.336-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><title>How Much Of that Sweet, Sweet Data Does Pandora Use on Your Phone?</title><content type="html">&lt;p&gt;&lt;strong&gt;Answer: about 30 MiB/hour.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I’ve been looking to upgrade to one of those shiny 4g phones. In doing so I’ll lose my unlimited data plan. Is that a problem? Maybe.&lt;/p&gt;  &lt;p&gt;Verizon has a &lt;a href="http://www.verizonwireless.com/b2c/splash/datacalculatorPopup.jsp"&gt;pretty neat calculator&lt;/a&gt; (I was surprised!) that gives you a rough idea of how much data you might you. The gist is that anything other than video/audio requires very little data:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh4.ggpht.com/-6D6PaOdjwpA/UL1w2GOyS2I/AAAAAAAAFcU/lsrlwWaoabY/image2.png?imgmax=800" width="700" height="530" /&gt;&lt;/p&gt;  &lt;p&gt;That is: lots of email, browsing, and navigation requires well under a gigabyte a month. They helpfully indicate what numbers they’re using for these figures:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;table cellspacing="0" cellpadding="2" border="0"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign="top"&gt;Email (text only)&lt;/td&gt;            &lt;td valign="top"&gt;10 KB&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;Web Access (internet and Intranet)&lt;/td&gt;            &lt;td valign="top"&gt;400 KB&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;Audio Streaming&lt;/td&gt;            &lt;td valign="top"&gt;60 MB/hr&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;Audio Track Download (3 1/2 min at 192 kbps &lt;/td&gt;            &lt;td valign="top"&gt;7 MB&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;3G Video Streaming &lt;/td&gt;            &lt;td valign="top"&gt;250 MB/hr&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;3G Verizon Video &amp;amp; NFL Mobile Streaming &lt;/td&gt;            &lt;td valign="top"&gt;125 MB/hr&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;4G Video Streaming&lt;/td&gt;            &lt;td valign="top"&gt;350 MB/hr&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;Digital Photo download/upload (Hi-Res)&lt;/td&gt;            &lt;td valign="top"&gt;3 MB&lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td valign="top"&gt;Navigation Turn by Turn Directions&lt;/td&gt;            &lt;td valign="top"&gt;5 MB/hr&lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So adding 2 hours of streaming a day blows up the data big time:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh6.ggpht.com/-THsAMY3jVU8/UL1w3QBjT9I/AAAAAAAAFcc/x8YH8LHfjM0/image5.png?imgmax=800" width="521" height="63" /&gt;&lt;/p&gt;  &lt;p&gt;Ouch. Let’s hope you don’t want to watch a 30 minute video every day…&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh3.ggpht.com/-zYONYwjBdsE/UL1w3txbjtI/AAAAAAAAFck/13UxuhaRbzE/image8.png?imgmax=800" width="521" height="52" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;But are these numbers accurate?&lt;/strong&gt; They are estimates, certainly, so I can only compare against my usage, which isn’t really fair, but it’s all I have.&lt;/p&gt;  &lt;p&gt;I watch Hulu and listen to Pandora over the cellular network so let’s check those. I’m using my phone’s metering to record this. Here’s Pandora at t = { 5m, 10m, 11m }. (Of course letting this run for an hour would be better.). I didn’t use the phone for anything else during this test.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="20" style="margin: 3px 0px; display: inline" alt="20" src="http://lh4.ggpht.com/-lTHuO4Cos3Q/UL1w4UPBj5I/AAAAAAAAFcs/FHI2tYRU9_U/2011.png?imgmax=800" width="300" height="450" /&gt;&lt;img title="25" style="margin: 3px 0px; display: inline" alt="25" src="http://lh3.ggpht.com/-g4ynY9bcX3M/UL1w5MNJRTI/AAAAAAAAFc0/FVrhPhPkM8k/258.png?imgmax=800" width="177" height="450" /&gt;&lt;img title="31" style="margin: 3px 0px; display: inline" alt="31" src="http://lh4.ggpht.com/-xkD8ZO-lroM/UL1w546zbwI/AAAAAAAAFc8/TqD5Gl13VWM/319.png?imgmax=800" width="178" height="450" /&gt;&lt;/p&gt;  &lt;p&gt;That is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;+3.5 MB after 5 minutes &lt;/li&gt;    &lt;li&gt;+2.5 MB after 5 more minutes &lt;/li&gt;    &lt;li&gt;+3.1 MB after 6 more minutes &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Or, an average of 0.57 MB per minute. That’s about 34 MB per hour—just over half of what the Verizon calculator suggests. That’s good news! If this number is remotely correct, streaming Pandora for two hours a day will actually consume about 2 GB per month, not 3.5+ GB. &lt;/p&gt;  &lt;p&gt;(Note: the Verizon site uses normal &lt;a href="http://en.wikipedia.org/wiki/Mebibyte"&gt;mebibytes&lt;/a&gt; but &lt;a href="http://blog.wassupy.com/2012/12/does-ios-report-usage-in-mebibytes-or.html"&gt;iOS doesn’t&lt;/a&gt;. The effect of this difference is not insignificant here.)&lt;/p&gt;  &lt;p&gt;How does this align with what Pandora’s &lt;a href="http://help.pandora.com/customer/portal/articles/90985-audio-quality"&gt;documentation&lt;/a&gt; claims?&lt;/p&gt;  &lt;p&gt;&lt;img title="" style="float: none; margin: 3px auto; display: block" alt="Pandora on the Web plays 64k AAC+ for free listeners and 192k for Pandora One subscribers. All in-home devices play 128k audio, and mobile devices receive a variety of different rates depending on the capability of the device and the network they are on, but never more than 64k AAC+. " src="http://lh3.ggpht.com/-8ztoFipgEsA/UL1w6WDIGlI/AAAAAAAAFdE/rEKArNsE4dA/image3.png?imgmax=800" width="700" height="431" /&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Pandora on the Web plays 64k AAC+ for free listeners and 192k for Pandora One subscribers. All in-home devices play 128k audio, and &lt;strong&gt;mobile devices receive a variety of different rates depending on the capability of the device and the network they are on, &lt;font style="background-color: #ffff00"&gt;but never more than 64k AAC+&lt;/font&gt;&lt;/strong&gt;. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;OK, so let’s get that 64k stream into the units we like: MB/minute. (I’m assuming that “64k” means 64 kilobits per minute.):&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh5.ggpht.com/-zjQLWSabPVU/UL1w7mkNK1I/AAAAAAAAFdM/bIO-1zVQWIo/image%25255B3%25255D.png?imgmax=800" width="584" height="215" /&gt;&lt;/p&gt;  &lt;p&gt;So 0.47 MiB/minute. Nice. If I convert my above figures into MiB from MB, I get 0.54 MiB/minute. That’s still more than Pandora claims, but we’re in the ballpark so I’ll take their word for it&lt;sup&gt;1&lt;/sup&gt; (maybe I got some emails in the background during those 15 minutes…).&lt;/p&gt;  &lt;p&gt;So, Pandora mobile uses just under half a megabyte per minute, or ~28 MiB per hour. &lt;strong&gt;The Verizon data estimator over estimates Pandora usage by over 100%&lt;/strong&gt;. To their credit, they indicated what figures they used, and certainly other sites or services may stream music at a higher bitrate. But if you just use Pandora, this is good news.&lt;/p&gt;  &lt;p&gt;&lt;sup&gt;1&lt;/sup&gt;Huh. Now that I’ve simply confirmed Pandora’s claimed usage this whole experiement seems a bit ridiculous…&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/jON_30nKrDA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/6491905509397321457/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=6491905509397321457" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/6491905509397321457?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/6491905509397321457?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/jON_30nKrDA/how-much-of-that-sweet-sweet-data-does.html" title="How Much Of that Sweet, Sweet Data Does Pandora Use on Your Phone?" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-6D6PaOdjwpA/UL1w2GOyS2I/AAAAAAAAFcU/lsrlwWaoabY/s72-c/image2.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/12/how-much-of-that-sweet-sweet-data-does.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YBRHozeip7ImA9WhNXFUU.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-5271617009562226767</id><published>2012-12-03T21:45:00.001-05:00</published><updated>2012-12-03T21:45:55.482-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-03T21:45:55.482-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Television" /><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="iOS" /><category scheme="http://www.blogger.com/atom/ns#" term="Apple" /><title>Does iOS Report Usage in Mebibytes or Megabytes?</title><content type="html">&lt;p&gt;&lt;strong&gt;Quick answer: megabytes (1 × 10&lt;sup&gt;6&lt;/sup&gt; bytes).&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With data caps being all the rage these days you might be wondering how you can check your data usage in iOS. It’s simple. Go to Settings &amp;gt; General &amp;gt; Usage &amp;gt; Cellular Usage:&lt;/p&gt;  &lt;p&gt;&lt;img title="13" style="float: none; margin: 3px auto; display: block" alt="13" src="http://lh5.ggpht.com/-5GARYzc8OxA/UL1j1KVH4xI/AAAAAAAAFbQ/WYiYbd3TL8Y/13%25255B7%25255D.png?imgmax=800" width="356" height="450" /&gt;&lt;/p&gt;  &lt;p&gt;But since I’m a computer guy, I want to know: is this measured in base-2 bytes (e.g. &lt;a href="http://en.wikipedia.org/wiki/Mebibyte"&gt;mebibytes&lt;/a&gt;) or base-10 bytes (&lt;a href="http://en.wikipedia.org/wiki/Megabyte"&gt;megabytes&lt;/a&gt;)? &lt;/p&gt;  &lt;p&gt;I couldn’t tell and the docs weren’t clear so I tested it. First I needed a test file. I took a video file and used 7zip to build a file that’s exactly 10 MB in size:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh5.ggpht.com/-r5ZyASm9coc/UL1j1hhtUhI/AAAAAAAAFbY/IFfXDnOBp2Y/image2.png?imgmax=800" width="371" height="261" /&gt;&lt;/p&gt;  &lt;p&gt;I chose a video file to make sure compression on the network or in the app I use to test this wouldn’t affect my results (video is already compressed so it won’t benefit from additional compression). I zipped it because that’s an easy way to slice off 10 MB of it (and it also further insures that the result is &lt;em&gt;not&lt;/em&gt; compressible).&lt;/p&gt;  &lt;p&gt;And that blob of 10,485,760 bytes is truly 10 mebibytes (10 &lt;b&gt;×&lt;/b&gt; 2&lt;sup&gt;20&lt;/sup&gt;):&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh6.ggpht.com/-MpriLgyVKYg/UL1j2jlGqwI/AAAAAAAAFbg/i2utSa2WlD4/image5.png?imgmax=800" width="522" height="319" /&gt;&lt;/p&gt;  &lt;p&gt;To see what affect this has, I downloaded the file to my phone with Dropbox and checked the affect on my usage. If iOS uses the binary-based definition of a megabyte (2&lt;sup&gt;20&lt;/sup&gt;), it should show “10.0 MB”. If it uses that other definition of a megabyte (10&lt;sup&gt;6&lt;/sup&gt;), it should show “10.4 MB” (or “10.5 MB” if there’s any rounding). Let’s see:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="2012-11-30 15.02.20" style="margin: 3px 0px; display: inline" alt="2012-11-30 15.02.20" src="http://lh6.ggpht.com/-nRQ3aYOhPGQ/UL1j3Pz4Y8I/AAAAAAAAFbo/J09FaPDdbwo/2012-11-30-15.02.203.png?imgmax=800" width="200" height="300" /&gt;&lt;img title="2012-11-30 15.04.05" style="margin: 3px 0px; display: inline" alt="2012-11-30 15.04.05" src="http://lh5.ggpht.com/-WXhC_vhT0IY/UL1j3wY8B3I/AAAAAAAAFbw/Ast7t1nILWQ/2012-11-30%25252015.04.05%25255B3%25255D.png?imgmax=800" width="200" height="300" /&gt;&lt;/p&gt;  &lt;p&gt;This took a few minutes. And the result:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="2012-11-30 15.04.43" style="margin: 3px 0px; display: inline" alt="2012-11-30 15.04.43" src="http://lh3.ggpht.com/-UxohuoqoDAg/UL1j4tTn9uI/AAAAAAAAFb4/G9tPeTZ9d50/2012-11-30-15.04.43%25255B1%25255D.png?imgmax=800" width="300" height="450" /&gt;&lt;/p&gt;          &lt;p&gt;10.4 MB. Well there you have it: &lt;strong&gt;it uses the base-10 definition.&lt;/strong&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/fN9swydDRPU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/5271617009562226767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=5271617009562226767" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5271617009562226767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5271617009562226767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/fN9swydDRPU/does-ios-report-usage-in-mebibytes-or.html" title="Does iOS Report Usage in Mebibytes or Megabytes?" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-5GARYzc8OxA/UL1j1KVH4xI/AAAAAAAAFbQ/WYiYbd3TL8Y/s72-c/13%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/12/does-ios-report-usage-in-mebibytes-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEASHozfip7ImA9WhNQFkQ.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-6873646041319174492</id><published>2012-11-23T13:49:00.001-05:00</published><updated>2012-11-23T13:50:49.486-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-23T13:50:49.486-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Random Updates" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><title>How I Discovered Amazon’s Impressive Gift Wrap Service Via a Generous Friend</title><content type="html">&lt;p&gt;I received an unexpected package today from Amazon. Hmmm…&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.12.53" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.12.53" src="http://lh6.ggpht.com/-8Y5_LeUA4aA/UK_E72rz2iI/AAAAAAAAFZk/EL5JCVUprBo/2012-11-23%25252011.12.53%25255B7%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;I opened it and started to get excited. It wasn’t what I usually get from Amazon (batteries, pink toys, etc.).&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.12.59" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.12.59" src="http://lh6.ggpht.com/-plQ2QEPImBQ/UK_E9odQanI/AAAAAAAAFZs/cYLhrijTR_w/2012-11-23%25252011.12.59%25255B7%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;It turns out that my friend Mark sent me a birthday present! Woot! I was very impressed by the presentation. Each item had a fancy wrapping, a fancy ribbon, and a fancy card.&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.13.03" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.13.03" src="http://lh3.ggpht.com/-xnWvgc0wOLo/UK_E_uDd8YI/AAAAAAAAFZ0/w7HU26Mw6Dk/2012-11-23%25252011.13.03%25255B7%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.13.37" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.13.37" src="http://lh5.ggpht.com/-WsZ-TNRJpPg/UK_FAsob7tI/AAAAAAAAFZ8/0eRHxvtJjQ8/2012-11-23%25252011.13.37%25255B7%25255D.jpg?imgmax=800" width="525" height="700" /&gt;&lt;/p&gt;  &lt;p&gt;I guess I’m known for my fruity shirts. &lt;/p&gt;  &lt;p&gt;The gifts are perfect, and they arrived like a sir.&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.15.41" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.15.41" src="http://lh5.ggpht.com/-cdrfnIo-8Ac/UK_FB1l2F3I/AAAAAAAAFaE/hR1_LOtYkAg/2012-11-23%25252011.15.41%25255B11%25255D.jpg?imgmax=800" width="525" height="700" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 12.02.03" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 12.02.03" src="http://lh3.ggpht.com/-fiqLAi5biRc/UK_FDj61bSI/AAAAAAAAFaM/i7gmSF-69Dk/2012-11-23%25252012.02.03%25255B7%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 12.02.08" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 12.02.08" src="http://lh4.ggpht.com/-aB8UJB9KTHc/UK_FElhCjaI/AAAAAAAAFaU/E4bsDu0eMuM/2012-11-23%25252012.02.08%25255B7%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;I’m actually shocked the kids adapted so quickly to it all. Thing 1, and Uncle Chris:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 12.29.55" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 12.29.55" src="http://lh5.ggpht.com/-QTTaSGsr0b0/UK_FFnVXpHI/AAAAAAAAFac/5uaIEKE1ZQA/2012-11-23%25252012.29.55%25255B11%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.16.14" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.16.14" src="http://lh5.ggpht.com/-0JWmyHeO67I/UK_FIZEwkvI/AAAAAAAAFak/nahtd5hc10U/2012-11-23%25252011.16.14%25255B7%25255D.jpg?imgmax=800" width="700" height="688" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 11.16.24" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 11.16.24" src="http://lh6.ggpht.com/-eSdl9VyVauA/UK_FLDrmoyI/AAAAAAAAFas/cp6ZffXhMNk/2012-11-23%25252011.16.24%25255B7%25255D.jpg?imgmax=800" width="693" height="700" /&gt;&lt;/p&gt;  &lt;p&gt;Thanks, Mark! I’ve got some learnin’ to do.&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-23 13.40.35" style="float: none; margin: 3px auto; display: block" alt="2012-11-23 13.40.35" src="http://lh6.ggpht.com/-Yjd2aBtOxb0/UK_FMxDf9OI/AAAAAAAAFa0/cCKVXk_xRrM/2012-11-23%25252013.40.35%25255B3%25255D.jpg?imgmax=800" width="588" height="700" /&gt;&lt;/p&gt;    &lt;p&gt;Some day I’ll remember to give you your Christmas present from last year.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/CDaRXG6brkg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/6873646041319174492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=6873646041319174492" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/6873646041319174492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/6873646041319174492?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/CDaRXG6brkg/amazons-impressive-gift-wrap-service.html" title="How I Discovered Amazon’s Impressive Gift Wrap Service Via a Generous Friend" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-8Y5_LeUA4aA/UK_E72rz2iI/AAAAAAAAFZk/EL5JCVUprBo/s72-c/2012-11-23%25252011.12.53%25255B7%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/amazons-impressive-gift-wrap-service.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEINQ3s_cCp7ImA9WhNQFkQ.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-3826978871083891002</id><published>2012-11-23T08:31:00.001-05:00</published><updated>2012-11-23T13:49:52.548-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-23T13:49:52.548-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Family" /><title>Thing1's Fun Run</title><content type="html">Wife and I ran the Kent Turkey Trot again this year. She placed in the top 10 for women and I finished without dying so overall we beat our goals. &lt;br /&gt;
&lt;br /&gt;
More exciting than mere survival, though was Thing1's race. She did a ~0.25 mile fun run. She was ridiculously photogenic on the way out but was moving so fast it was hard to capture her on film.&lt;br /&gt;
&lt;br /&gt;
Congrats, Peanut! &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-ivZz8eZhYg0/UK96quU_RKI/AAAAAAAAFYs/SgOGA0tf31c/s640/blogger-image--1925738137.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-ivZz8eZhYg0/UK96quU_RKI/AAAAAAAAFYs/SgOGA0tf31c/s640/blogger-image--1925738137.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-HDsV5rQ-nRU/UK96rvqPg1I/AAAAAAAAFY0/E-fXmAA-nBw/s640/blogger-image--60449605.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-HDsV5rQ-nRU/UK96rvqPg1I/AAAAAAAAFY0/E-fXmAA-nBw/s640/blogger-image--60449605.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-1ZV3L6cmYx8/UK96td0BZDI/AAAAAAAAFY8/k2T0sx1pXyo/s640/blogger-image-1600825756.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh6.googleusercontent.com/-1ZV3L6cmYx8/UK96td0BZDI/AAAAAAAAFY8/k2T0sx1pXyo/s640/blogger-image-1600825756.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-Go7u9TGwq5I/UK96uqMVd9I/AAAAAAAAFZE/oqWg1mFFhKw/s640/blogger-image-180581137.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh3.googleusercontent.com/-Go7u9TGwq5I/UK96uqMVd9I/AAAAAAAAFZE/oqWg1mFFhKw/s640/blogger-image-180581137.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-I6WbxRxmCoI/UK96wPtl2XI/AAAAAAAAFZM/O5wf5WThNgw/s640/blogger-image-307022469.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-I6WbxRxmCoI/UK96wPtl2XI/AAAAAAAAFZM/O5wf5WThNgw/s640/blogger-image-307022469.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;br/&gt;&lt;br/&gt;&lt;div class="separator"style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-yds5fYGICNI/UK96xQuw_0I/AAAAAAAAFZU/jKSi2-nVPlU/s640/blogger-image-1004847562.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-yds5fYGICNI/UK96xQuw_0I/AAAAAAAAFZU/jKSi2-nVPlU/s640/blogger-image-1004847562.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/8Qp4AQHBoBg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/3826978871083891002/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=3826978871083891002" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/3826978871083891002?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/3826978871083891002?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/8Qp4AQHBoBg/thing1-fun-run.html" title="Thing1&amp;#39;s Fun Run" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-ivZz8eZhYg0/UK96quU_RKI/AAAAAAAAFYs/SgOGA0tf31c/s72-c/blogger-image--1925738137.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/thing1-fun-run.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEINQ3s-fSp7ImA9WhNQFkQ.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-5222308957668112794</id><published>2012-11-22T09:00:00.000-05:00</published><updated>2012-11-23T13:49:52.555-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-23T13:49:52.555-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Parenting" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Family" /><category scheme="http://www.blogger.com/atom/ns#" term="Baby" /><title>Dear Children: You Are Awesome</title><content type="html">&lt;p&gt;If you know me, you know that I can’t stop yammering about my kids. I won’t apologize for it: they’re great.&lt;/p&gt;  &lt;p&gt;This occurs to me regularly. For instance, on Saturday I had the intimidating task of entertaining the kids by myself for the evening (Wife was busy). We had a great time. We didn’t do anything fancy—just wandered around the toys and Christmas decorations at Target and Lowes—but everyone was laughing and smiling and having fun.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="08-2012-11-17 19.12.24" style="margin: 3px 0px; display: inline" alt="08-2012-11-17 19.12.24" src="http://lh5.ggpht.com/-Vw56Vd6sN7g/UKrtcwLj_eI/AAAAAAAAFUY/dPGYKje3fNw/08-2012-11-17%25252019.12.24%25255B5%25255D.jpg?imgmax=800" width="257" height="300" /&gt;&lt;img title="09-2012-11-17 19.12.14" style="margin: 3px 0px; display: inline" alt="09-2012-11-17 19.12.14" src="http://lh4.ggpht.com/-MstVcAc2uB0/UKrtdRO4IyI/AAAAAAAAFUg/txH2LZkjAEQ/09-2012-11-17%25252019.12.14%25255B6%25255D.jpg?imgmax=800" width="210" height="300" /&gt;&lt;img title="10-2012-11-17 19.12.06" style="margin: 3px 0px; display: inline" alt="10-2012-11-17 19.12.06" src="http://lh5.ggpht.com/-jcpHsAsn2zU/UKrtd9pLPRI/AAAAAAAAFUo/_xuYB6GwsFU/10-2012-11-17%25252019.12.06%25255B5%25255D.jpg?imgmax=800" width="231" height="300" /&gt;&lt;/p&gt;  &lt;p&gt;It helped that I remembered to feed them.&lt;/p&gt;  &lt;p&gt;&lt;img title="06-2012-11-16 18.35.58" style="float: none; margin: 3px auto; display: block" alt="06-2012-11-16 18.35.58" src="http://lh4.ggpht.com/-zQKfAn5Ee6k/UKrteo2rXeI/AAAAAAAAFUw/NwDwXIdx9ps/06-2012-11-16%25252018.35.58%25255B5%25255D.jpg?imgmax=800" width="338" height="450" /&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;em&gt;“Look Daddy! A Christmas chicken!”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;It’s not always so easy (we’re all cranky once in a while) but we’re having more and more good days as they get older and more independent. &lt;strong&gt;This is my message to new parents: it’s rough early on. But it gets better, easier, and so much more fun! Hang in there!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;They start creating fun for themselves.&lt;/p&gt;  &lt;p&gt;&lt;img title="04-2012-11-15 07.41.33" style="float: none; margin: 3px auto; display: block" alt="04-2012-11-15 07.41.33" src="http://lh6.ggpht.com/-a0WCDVh5EdY/UKrtfdCyYZI/AAAAAAAAFU4/192wiEOxztM/04-2012-11-15%25252007.41.33%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;And doing their own things.&lt;/p&gt;  &lt;p&gt;&lt;img title="05-2012-11-15 19.22.10" style="float: none; margin: 3px auto; display: block" alt="05-2012-11-15 19.22.10" src="http://lh3.ggpht.com/-iQq5G2KM86Q/UKrthoIeEFI/AAAAAAAAFVA/Sd7hUxLF0xY/05-2012-11-15%25252019.22.10%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;And sometimes they even like each other. Especially when they’re cold.&lt;/p&gt;  &lt;p&gt;&lt;img title="03-2012-11-09 21.18.39" style="float: none; margin: 3px auto; display: block" alt="03-2012-11-09 21.18.39" src="http://lh6.ggpht.com/-x-AGHLnRMcQ/UKrtknWBgtI/AAAAAAAAFVI/YHJbeHDcAFA/03-2012-11-09%25252021.18.39%25255B3%25255D.jpg?imgmax=800" width="700" height="391" /&gt;&lt;/p&gt;  &lt;p&gt;And when we’re really, really lucky they wake up so happy that you can’t help but wake up happy, too.&lt;/p&gt;  &lt;p&gt;&lt;img title="01-2012-11-06 09.35.43" style="float: none; margin: 3px auto; display: block" alt="01-2012-11-06 09.35.43" src="http://lh6.ggpht.com/-Og_5KlZHVcA/UKrtmG6vENI/AAAAAAAAFVQ/ztmtBE7QwE8/01-2012-11-06%25252009.35.43%25255B3%25255D.jpg?imgmax=800" width="525" height="700" /&gt;&lt;/p&gt;  &lt;p&gt;Happy Thanksgiving from the Harens!&lt;/p&gt;  &lt;p&gt;&lt;img title="02-2012-11-07 22.23.00" style="float: none; margin: 3px auto; display: block" alt="02-2012-11-07 22.23.00" src="http://lh3.ggpht.com/-fhn_eYXAkAU/UKrtoMRI_3I/AAAAAAAAFVY/ahvhVdWdiug/02-2012-11-07%25252022.23.00%25255B3%25255D.jpg?imgmax=800" width="640" height="480" /&gt;&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/unPyzqoCKAg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/5222308957668112794/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=5222308957668112794" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5222308957668112794?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/5222308957668112794?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/unPyzqoCKAg/dear-children-you-are-awesome.html" title="Dear Children: You Are Awesome" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-Vw56Vd6sN7g/UKrtcwLj_eI/AAAAAAAAFUY/dPGYKje3fNw/s72-c/08-2012-11-17%25252019.12.24%25255B5%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/dear-children-you-are-awesome.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ADQX8yeSp7ImA9WhNQE0U.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-4456105961939325394</id><published>2012-11-19T23:28:00.001-05:00</published><updated>2012-11-19T23:29:30.191-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-19T23:29:30.191-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="Usability" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><title>Usability Testing is Easy. And Cheap. And Painful (But Essential!)</title><content type="html">&lt;p&gt;Are you pretty sure your app is awesome and great and super wonderful? Here’s a fun exercise: find someone who’s never used it before and see how that someone uses it. But don’t speak. Let that someone drive.&lt;/p&gt;  &lt;p&gt;If you haven’t done this usability test before, it’s painful to watch. You will see users stumble around what you thought was an intuitive process. You will witness rough edges being discovered for the first time—rough edges that you forgot about months ago.&lt;/p&gt;  &lt;p&gt;There’ll be minor things that are glaring but easy to fix, like this non-question: &lt;/p&gt;  &lt;p&gt;&lt;img title="4-2012-10-23 09.51.56" style="float: none; margin: 3px auto; display: block" alt="4-2012-10-23 09.51.56" src="http://lh6.ggpht.com/-cZ6O4OHfFqM/UKsG297bm2I/AAAAAAAAFXo/dqiQwTBU9gI/4-2012-10-23%25252009.51.56%25255B3%25255D.jpg?imgmax=800" width="700" height="467" /&gt;&lt;/p&gt;  &lt;p&gt;But there could be fundamental issues with how the app works vs. how users try to use the app:&lt;/p&gt;  &lt;p&gt;&lt;img title="3-2012-09-20 22.38.11" style="float: none; margin: 3px auto; display: block" alt="3-2012-09-20 22.38.11" src="http://lh5.ggpht.com/-RgRPqS5FV6U/UKsG6caw0VI/AAAAAAAAFXw/SVZmTOSWZ3A/3-2012-09-20%25252022.38.11%25255B3%25255D.jpg?imgmax=800" width="536" height="700" /&gt;&lt;/p&gt;    &lt;p&gt;(I can see Siri getting some people in trouble here…“WHO IS SHE!?”)&lt;/p&gt;  &lt;p&gt;Sometimes though, there’s little you can do to catch certain issues. For instance, what is happening in this picture!?&lt;/p&gt;  &lt;p&gt;&lt;img title="1-2012-10-10 23.22.37" style="float: none; margin: 3px auto; display: block" alt="1-2012-10-10 23.22.37" src="http://lh5.ggpht.com/-3jQr2lM5SeY/UKsG7eQEvjI/AAAAAAAAFX4/1RaEFIVY8Lg/1-2012-10-10%25252023.22.37%25255B7%25255D.jpg?imgmax=800" width="467" height="566" /&gt;&lt;/p&gt;  &lt;p&gt;Ohhhh…&lt;/p&gt;  &lt;p&gt;&lt;img title="2-2012-10-10 23.22.44" style="float: none; margin: 3px auto; display: block" alt="2-2012-10-10 23.22.44" src="http://lh3.ggpht.com/-Js86gy1AY4s/UKsG8lftIRI/AAAAAAAAFYA/znrx06g89_s/2-2012-10-10%25252023.22.44%25255B7%25255D.jpg?imgmax=800" width="467" height="500" /&gt;&lt;/p&gt;    &lt;p&gt;Those are fairly minor. There can be big, huge issues, too, though. For instance, when I tried to sign up for Angie’s List, I opted to sign up with my Google account:&lt;/p&gt;  &lt;p&gt;&lt;img title="join" style="float: none; margin: 3px auto; display: block" alt="join" src="http://lh5.ggpht.com/-XuOTLcl-mzQ/UKsG9zVSHOI/AAAAAAAAFYI/l5Xdg7p4jqY/join%25255B2%25255D.png?imgmax=800" width="417" height="85" /&gt;&lt;/p&gt;  &lt;p&gt;Guess how that experience went :/. I have never had so much trouble giving someone my money. (To their credit, this appears to be fixed now.)&lt;/p&gt;  &lt;p&gt;With a highly fragmented set of clients, third party credentials, and so many paths to conversions, it’s a tough problem that’s not getting any easier to solve. Sorry, there’s no way around it: you’ve got to test, test, and test some more.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/O-iHE8eo2v4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/4456105961939325394/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=4456105961939325394" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4456105961939325394?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4456105961939325394?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/O-iHE8eo2v4/usability-testing-is-easy-and-cheap-and.html" title="Usability Testing is Easy. And Cheap. And Painful (But Essential!)" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-cZ6O4OHfFqM/UKsG297bm2I/AAAAAAAAFXo/dqiQwTBU9gI/s72-c/4-2012-10-23%25252009.51.56%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/usability-testing-is-easy-and-cheap-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYCQX8yfip7ImA9WhNQE0U.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-3345988429185680573</id><published>2012-11-19T22:31:00.001-05:00</published><updated>2012-11-19T22:46:00.196-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-19T22:46:00.196-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Family" /><category scheme="http://www.blogger.com/atom/ns#" term="Travel" /><title>Fun Times at Niagara Falls With the Kiddos</title><content type="html">&lt;p&gt;Wife and I first visited Niagara falls as something of a last little vacation before Thing1 was born. We’d never been and were curious what all the fuss was about. It gave us a fun story actually…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The car broke down on the way out. We were determined, though. We were towed to a shop where we left it to be fixed and took a rental to the rest of the way. We had a great overnight trip, saw the falls, laughed, etc., and then returned to God-forsaken Youngstown to pick up the car.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Good times. Anyway, we happened to find ourselves in Canada again last month. I had an appointment at the border crossing at Niagara Falls to interview for my Nexus trusted traveler card so we had a perfect opportunity to visit again.&lt;/p&gt;  &lt;p&gt;But now we have a gaggle of children…so it’s even better :)&lt;/p&gt;  &lt;p&gt;&lt;img title="05-2012-10-26 15.37.28" style="float: none; margin: 3px auto; display: block" alt="05-2012-10-26 15.37.28" src="http://lh6.ggpht.com/-ACZNCLJmA9s/UKr5PEkTjOI/AAAAAAAAFVw/Ti5pCKc7aq8/05-2012-10-26%25252015.37.28%25255B3%25255D.jpg?imgmax=800" width="700" height="392" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="06-2012-10-26 15.37.43" style="float: none; margin: 3px auto; display: block" alt="06-2012-10-26 15.37.43" src="http://lh5.ggpht.com/-QPl3QK0-wiA/UKr5QmkgOoI/AAAAAAAAFV4/i9hRUSUYwV0/06-2012-10-26%25252015.37.43%25255B3%25255D.jpg?imgmax=800" width="700" height="407" /&gt;&lt;/p&gt;  &lt;p&gt;They loved it! &lt;/p&gt; &lt;img title="07-2012-10-26 15.55.37" style="float: none; margin: 3px auto; display: block" alt="07-2012-10-26 15.55.37" src="http://lh6.ggpht.com/-d72UnZ9pHBo/UKr5R5BA-bI/AAAAAAAAFWA/dL60dWpxSx8/07-2012-10-26%25252015.55.37%25255B2%25255D.jpg?imgmax=800" width="700" height="188" /&gt;   &lt;p&gt;That’s the iPhone’s native panorama. Here’s the same shot with the 360 app:&lt;/p&gt;  &lt;div style="text-align: center"&gt;&lt;script src="http://occipital.com/360/embed.js?pano=JjF3SM&amp;amp;width=700&amp;amp;height=525"&gt;&lt;/script&gt;&lt;/div&gt;  &lt;p&gt;&lt;img title="08-2012-10-26 15.57.16" style="float: none; margin: 3px auto; display: block" alt="08-2012-10-26 15.57.16" src="http://lh4.ggpht.com/-33XyJDloysg/UKr5TFRpVMI/AAAAAAAAFWI/i-7x4qmV6Uc/08-2012-10-26%25252015.57.16%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;It’s fun reliving these experiences with them.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Except for the driving, they’re fun travel companions, too.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="03-2012-10-24 19.18.16" style="margin: 3px 0px; display: inline" alt="03-2012-10-24 19.18.16" src="http://lh6.ggpht.com/--yiT8u7FyW0/UKr5UcBy31I/AAAAAAAAFWQ/3eEKWahCafs/03-2012-10-24%25252019.18.16%25255B5%25255D.jpg?imgmax=800" width="215" height="190" /&gt;&lt;img title="01-2012-10-24 19.17.59" style="margin: 3px 0px; display: inline" alt="01-2012-10-24 19.17.59" src="http://lh4.ggpht.com/-e6MQAPesNfE/UKr5VcF0MtI/AAAAAAAAFWU/io-IcZCux_I/01-2012-10-24%25252019.17.59%25255B5%25255D.jpg?imgmax=800" width="253" height="190" /&gt;&lt;img title="02-2012-10-24 19.18.09" style="margin: 3px 0px; display: inline" alt="02-2012-10-24 19.18.09" src="http://lh4.ggpht.com/-ikzLd-yoiZU/UKr5WsM3kYI/AAAAAAAAFWg/MBq2-Q4wDLk/02-2012-10-24%25252019.18.09%25255B5%25255D.jpg?imgmax=800" width="216" height="190" /&gt;&lt;/p&gt;  &lt;p&gt;Thank God for this woman. Whenever you see my kids behaving or being cute, it’s because of her.&lt;/p&gt;  &lt;p&gt;&lt;img title="14-2012-10-27 08.27.27" style="float: none; margin: 3px auto; display: block" alt="14-2012-10-27 08.27.27" src="http://lh3.ggpht.com/-dgrRTYb1p4Q/UKr5ZEFAIBI/AAAAAAAAFWo/iBBRnXf3UxQ/14-2012-10-27%25252008.27.27%25255B3%25255D.jpg?imgmax=800" width="700" height="627" /&gt;&lt;/p&gt;  &lt;p&gt;I don’t remember what exactly was going on here…but they’re all in one place so I probably thought that was significant enough to document it with a photo.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="09-2012-10-26 16.16.11" style="float: none; margin: 3px auto; display: block" alt="09-2012-10-26 16.16.11" src="http://lh5.ggpht.com/-utfBuoBUvEI/UKr5a-dX9qI/AAAAAAAAFWw/xGg4An_bf6Y/09-2012-10-26%25252016.16.11%25255B6%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p align="left"&gt;“Princess Water”: take 1 cup water. Add a dash of cranberry juice. I hope this trick works for a while longer.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="10-2012-10-27 08.07.13" style="margin: 3px 0px; display: inline" alt="10-2012-10-27 08.07.13" src="http://lh5.ggpht.com/-RTBjWxzQP1c/UKr5cCs-n7I/AAAAAAAAFW4/Kn7NEzfdSDM/10-2012-10-27%25252008.07.13%25255B5%25255D.jpg?imgmax=800" width="300" height="400" /&gt;&lt;img title="12-2012-10-27 08.26.21" style="margin: 3px 0px; display: inline" alt="12-2012-10-27 08.26.21" src="http://lh3.ggpht.com/-OBKTvnCkUZg/UKr5ds6yZbI/AAAAAAAAFXA/4kgevsT6dac/12-2012-10-27%25252008.26.21%25255B5%25255D.jpg?imgmax=800" width="350" height="400" /&gt;&lt;/p&gt;  &lt;p align="left"&gt;We do more than eat, honest! It’s just that they’re not usually in range of the camera unless I distract them with food.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="11-2012-10-27 08.26.15" style="margin: 3px 0px; display: inline" alt="11-2012-10-27 08.26.15" src="http://lh4.ggpht.com/-by15N3QvHJM/UKr5eTngvFI/AAAAAAAAFXI/g8JyaQH8YDo/11-2012-10-27%25252008.26.15%25255B8%25255D.jpg?imgmax=800" width="325" height="320" /&gt;&lt;img title="13-2012-10-27 08.26.26" style="margin: 3px 0px; display: inline" alt="13-2012-10-27 08.26.26" src="http://lh4.ggpht.com/-4volgPp8ngM/UKr5fbbYcOI/AAAAAAAAFXQ/8bcbmjyKHjY/13-2012-10-27%25252008.26.26%25255B6%25255D.jpg?imgmax=800" width="340" height="320" /&gt;&lt;/p&gt;  &lt;p&gt;Happy Thanksgiving!&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/7OhXVL7lgMg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/3345988429185680573/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=3345988429185680573" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/3345988429185680573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/3345988429185680573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/7OhXVL7lgMg/fun-times-at-niagara-falls.html" title="Fun Times at Niagara Falls With the Kiddos" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-ACZNCLJmA9s/UKr5PEkTjOI/AAAAAAAAFVw/Ti5pCKc7aq8/s72-c/05-2012-10-26%25252015.37.28%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/fun-times-at-niagara-falls.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcERH49fCp7ImA9WhNQEUU.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-4057156348736831509</id><published>2012-11-16T23:59:00.001-05:00</published><updated>2012-11-17T16:00:05.064-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-17T16:00:05.064-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><title>How to Convert Battery-Powered LED Christmas Lights to USB</title><content type="html">&lt;p&gt;I wanted to spruce up my laptop for the season. I couldn’t find any reasonably priced USB-powered lights, but I did stumble upon some spiffy battery powered LED Christmas lights for $3 at Walmart. They included a 3-AA battery pack which means they use about 4.5v. USB is about 5v so that’s probably close enough for a direct substitute.&lt;/p&gt;  &lt;p&gt;Here’s how I did it. Before ripping things apart, I jumped my USB-powered breadboard into the unit to make sure it’d work. &lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 21.50.00" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 21.50.00" src="http://lh3.ggpht.com/-PUWtZ_G9k2s/UKcZdlq9eOI/AAAAAAAAFR4/iex8hO0-pRw/2012-11-16%25252021.50.00%25255B4%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;It does. Alright, let’s pop this thing open:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 21.52.28" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 21.52.28" src="http://lh4.ggpht.com/-lY1VKrjoDFE/UKcZfD-UCnI/AAAAAAAAFSA/CE12iTT8lQ4/2012-11-16%25252021.52.28%25255B10%25255D.jpg?imgmax=800" width="700" height="485" /&gt;&lt;/p&gt;  &lt;p&gt;It looks like the battery compartment takes up almost all the space. That’s good for us. The switch supports blinking and fading so I’m going to keep it. I also checked it’s output voltage and discovered that it’s stepped down to about 3v:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 21.58.29" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 21.58.29" src="http://lh3.ggpht.com/-HCddfoQ_4s0/UKcZf4cwGYI/AAAAAAAAFSI/BF2VNlNVIj0/2012-11-16%25252021.58.29%25255B7%25255D.jpg?imgmax=800" width="700" height="698" /&gt;&lt;/p&gt;  &lt;p&gt;So instead of doing any circuit work, I’ll just keep the circuit it came with. Now I just need to tie it into the USB port. I hacked up an old USB cable:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 22.03.57" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 22.03.57" src="http://lh6.ggpht.com/-eP0xO8Oa11k/UKcZhZVRqvI/AAAAAAAAFSQ/KMLFA9g_lVY/2012-11-16%25252022.03.57%25255B7%25255D.jpg?imgmax=800" width="495" height="700" /&gt;&lt;/p&gt;  &lt;p&gt;This would be a good time to look up common color codes or whatever to identify the power lines. Nah, let’s just guess. Red and black? Matches my multi-tester…&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 22.05.41" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 22.05.41" src="http://lh5.ggpht.com/-pIZde1i3Hbk/UKcZirSH2eI/AAAAAAAAFSY/EhhBNH92Lkc/2012-11-16%25252022.05.41%25255B7%25255D.jpg?imgmax=800" width="486" height="700" /&gt;&lt;/p&gt;  &lt;p&gt;Yup. 5 volts. OK, let’s unsolder the the battery pack leads from the board:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 22.11.11" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 22.11.11" src="http://lh6.ggpht.com/-F8v5VDu2eUI/UKcZjQe5tYI/AAAAAAAAFSg/6RUV739smCQ/2012-11-16%25252022.11.11%25255B7%25255D.jpg?imgmax=800" width="700" height="409" /&gt;&lt;/p&gt;  &lt;p&gt;They’re labeled B- and B+. Handy.&lt;/p&gt;  &lt;p&gt;It turns out I lopped the USB cable too short so I added some jumper wires between the plug and the board (don’t judge my ugly soldering…):&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 22.15.59" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 22.15.59" src="http://lh6.ggpht.com/-DwVBhE3mGkQ/UKcZkfI9rzI/AAAAAAAAFSo/6SMVo0J20xA/2012-11-16%25252022.15.59%25255B12%25255D.jpg?imgmax=800" width="700" height="353" /&gt;&lt;/p&gt;  &lt;p&gt;Don’t forget to add the shrink tubing before this next part. (Not pictured: I wrapped both wires in a larger tube, all the way up to the stress relief nub on the plug, too.)&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 22.26.58" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 22.26.58" src="http://lh3.ggpht.com/-dD_e0pSvXH0/UKcZlA0XAYI/AAAAAAAAFSw/6OsGuZSkqhU/2012-11-16%25252022.26.58%25255B19%25255D.jpg?imgmax=800" width="700" height="483" /&gt;&lt;/p&gt;  &lt;p&gt;Solder the leads to the board and trim:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="2012-11-16 22.19.56" style="margin: 3px 0px; display: inline" alt="2012-11-16 22.19.56" src="http://lh5.ggpht.com/-PtcjMO516lA/UKcZmMH9CGI/AAAAAAAAFS4/SkP1aJ-Cmv4/2012-11-16%25252022.19.56%25255B10%25255D.jpg?imgmax=800" width="300" height="300" /&gt;&lt;img title="2012-11-16 22.20.13" style="margin: 3px 0px; display: inline" alt="2012-11-16 22.20.13" src="http://lh6.ggpht.com/-cbvy2n6aeqo/UKcZnphgeNI/AAAAAAAAFTA/53h2uHHJSPc/2012-11-16%25252022.20.13%25255B12%25255D.jpg?imgmax=800" width="300" height="300" /&gt;&lt;/p&gt;  &lt;p&gt;Test them out and then figure out some way to attach them to your laptop:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 23.21.06" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 23.21.06" src="http://lh6.ggpht.com/-sxZpdQ5zuXI/UKcZpWa9FfI/AAAAAAAAFTI/Rd8N8ptSqrk/2012-11-16%25252023.21.06%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 23.21.27" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 23.21.27" src="http://lh3.ggpht.com/-DPNqQ0uSYtA/UKcZrTfCSSI/AAAAAAAAFTQ/FHKxLIxDR4s/2012-11-16%25252023.21.27%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;I used some removable sticky-tack for the board (sorry for the poor photo), and tape everywhere else:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-16 23.21.14" style="float: none; margin: 3px auto; display: block" alt="2012-11-16 23.21.14" src="http://lh4.ggpht.com/-fru5yWd6m2E/UKcZtS_DJeI/AAAAAAAAFTY/gMjPQmaU28U/2012-11-16%25252023.21.14%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;I recommend something other than tape. It looks awful.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE (17-Nov-12)!&lt;/strong&gt; I couldn’t stand how terrible the tape looked so I tried something a little different today:&lt;/p&gt;  &lt;p&gt;&lt;img title="2012-11-17 11.43.15" style="float: none; margin: 3px auto; display: block" alt="2012-11-17 11.43.15" src="http://lh5.ggpht.com/-LEKrGnSxpbM/UKf6xjE7THI/AAAAAAAAFTw/OeN3wEmStQA/2012-11-17%25252011.43.15%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;img title="2012-11-17 11.42.43" style="float: none; margin: 3px auto; display: block" alt="2012-11-17 11.42.43" src="http://lh5.ggpht.com/-EmqKq3LRdQY/UKf6y0_WcJI/AAAAAAAAFT4/vrM5pN1w3nI/2012-11-17%25252011.42.43%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;img title="2012-11-17 11.42.26" style="float: none; margin: 3px auto; display: block" alt="2012-11-17 11.42.26" src="http://lh4.ggpht.com/-oOAMIDnHWO0/UKf60V77QuI/AAAAAAAAFUA/031veDFcObQ/2012-11-17%25252011.42.26%25255B3%25255D.jpg?imgmax=800" width="700" height="525" /&gt;&lt;/p&gt;  &lt;p&gt;That’s just a bunch of Duplo blocks with the lights wound around their nubs. I dabbed a little super glue on the end wraps to help hold the wires on. The entire block is held on with that blue sticky tack mounting putty. Time will tell if it will stay in place…&lt;/p&gt;  &lt;p&gt;Merry Christmas :)&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/UBAtDhMwn8M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/4057156348736831509/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=4057156348736831509" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4057156348736831509?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4057156348736831509?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/UBAtDhMwn8M/how-to-convert-battery-powered-led.html" title="How to Convert Battery-Powered LED Christmas Lights to USB" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-PUWtZ_G9k2s/UKcZdlq9eOI/AAAAAAAAFR4/iex8hO0-pRw/s72-c/2012-11-16%25252021.50.00%25255B4%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/how-to-convert-battery-powered-led.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ACQHg-fSp7ImA9WhNRGUg.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-4776103511950883823</id><published>2012-11-14T22:56:00.001-05:00</published><updated>2012-11-14T22:56:01.655-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-14T22:56:01.655-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Building a Digital Clock without Flash or Images</title><content type="html">&lt;p&gt;As a continuation of yesterday’s post wherein I built an &lt;a href="http://blog.wassupy.com/2012/11/building-analog-clock-without-flash-or.html"&gt;analog clock without flash or images&lt;/a&gt;, I am going to do something &lt;em&gt;much easier&lt;/em&gt; today: build a digital clock. This will be another component to the game I’m building for Thing1.&lt;/p&gt;  &lt;p&gt;Again, here’s where we’re headed:&lt;/p&gt;  &lt;p&gt;&lt;img title="goal" style="float: none; margin: 3px auto; display: block" alt="goal" src="http://lh4.ggpht.com/-qi_PaSUetaw/UKRn0Nu3ZxI/AAAAAAAAFRk/7CeHcMhdFOU/goal%25255B2%25255D.png?imgmax=800" width="647" height="446" /&gt;&lt;/p&gt;  &lt;p&gt;Let’s start with the basic layout again—just a section with an HTML5 &amp;lt;time&amp;gt; element within it:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/rxghU/1/embedded/result,html,css" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Next let’s make it a little bigger, and blocky:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/rxghU/2/embedded/result,html,css" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;And add some background gradient for extra, unnecessary internet points:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/rxghU/3/embedded/result,html,css" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;That’s pretty much it. But, that was too easy. Let’s maybe change the text color of the minutes to match the analog clock (bluish). That will require a little JS to break up the tag’s contents:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/rxghU/4/embedded/result,js,html,css" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Let’s not worry about it being totally hideous right now, emkay?&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/4f8Q5x1NCdA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/4776103511950883823/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=4776103511950883823" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4776103511950883823?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4776103511950883823?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/4f8Q5x1NCdA/building-digital-clock-without-flash-or.html" title="Building a Digital Clock without Flash or Images" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-qi_PaSUetaw/UKRn0Nu3ZxI/AAAAAAAAFRk/7CeHcMhdFOU/s72-c/goal%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/building-digital-clock-without-flash-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEBSHw6fSp7ImA9WhNRGU8.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-7316891203581064102</id><published>2012-11-14T16:30:00.001-05:00</published><updated>2012-11-14T16:30:59.215-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-14T16:30:59.215-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>SQL Server 2012: “Saving changes is not permitted…”</title><content type="html">&lt;p&gt;Are you riding the new SQL Server 2012 HAWTNESS? Good for you. Did you try to make a table change in Management Studio that requires a table rebuild? Ouch. So you’ve seen this, then:&lt;/p&gt;  &lt;p&gt;&lt;img title="alter" style="float: none; margin: 3px auto; display: block" alt="alter" src="http://lh4.ggpht.com/-PArYbehygE4/UKQNjGirySI/AAAAAAAAFRA/8mmbdNV9q2Q/alter%25255B2%25255D.png?imgmax=800" width="625" height="531" /&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;“Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created &lt;strong&gt;or enabled the option Prevent saving changes that require the table to be re-created.&lt;/strong&gt;”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So the answer’s right there, but it’s at the end of a really long blob of text so you are forgiven if you missed it. Before you close your table change designer (and lose those precious table changes), just go uncheck that box in the options:&lt;/p&gt;  &lt;p&gt;&lt;img title="change options" style="float: none; margin: 3px auto; display: block" alt="change options" src="http://lh6.ggpht.com/-HB2NTCb5hZ8/UKQNjglbhkI/AAAAAAAAFRI/bD31lhvZ0tM/change%252520options%25255B2%25255D.png?imgmax=800" width="753" height="437" /&gt;&lt;/p&gt;  &lt;p&gt;Now try saving again. Good to go? Cool.&lt;/p&gt;  &lt;p&gt;Now it will revert to the behavior it used in SSMS 2008 where it will still warn you if it thinks scary things might happen:&lt;/p&gt;  &lt;p&gt;&lt;img title="warning" style="float: none; margin: 3px auto; display: block" alt="warning" src="http://lh6.ggpht.com/-e9yJ1iHnJ1c/UKQNkcvABnI/AAAAAAAAFRQ/_vfEwhMe_-E/warning%25255B2%25255D.png?imgmax=800" width="536" height="430" /&gt;&lt;/p&gt;  &lt;p&gt;But it’ll let you continue.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/gNLDJISIrkE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/7316891203581064102/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=7316891203581064102" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/7316891203581064102?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/7316891203581064102?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/gNLDJISIrkE/sql-server-2012-saving-changes-is-not.html" title="SQL Server 2012: “Saving changes is not permitted…”" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-PArYbehygE4/UKQNjGirySI/AAAAAAAAFRA/8mmbdNV9q2Q/s72-c/alter%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/sql-server-2012-saving-changes-is-not.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4NRH05cSp7ImA9WhNRGEs.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-4670128575880470302</id><published>2012-11-13T23:31:00.001-05:00</published><updated>2012-11-13T23:39:55.329-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-13T23:39:55.329-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Building an Analog Clock without Flash or Images</title><content type="html">&lt;p&gt;Thing1 is learning to tell time on analog and digital clocks. Her uncle was kind enough to send over a link to an &lt;a href="http://www.oswego.org/ocsd-web/games/StopTheClock/sthec1.html"&gt;online game&lt;/a&gt; that helps reinforce what she’s learning. &lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh3.ggpht.com/-3Tx_2Z1E09A/UKMelgA1dTI/AAAAAAAAFQo/fYLY4MaepEY/image2.png?imgmax=800" width="647" height="446" /&gt;&lt;/p&gt;  &lt;p&gt;It is pretty neat! Unfortunately, though, it’s implemented in Flash so we can’t use it on our iOS devices. Let’s fix that by turning it into a regular web page. We might end up using some of the fancier HTML/CSS/JS things as we go.&lt;/p&gt;  &lt;p&gt;The first thing we’ll need is an analog clock so we’ll build that today. I’m going to do it the hard way by insisting that no images be used. Just for fun.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;(Note: very little of this is likely to work in anything except Chrome. Sorry.)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Let’s start by defining where the clocks should go with some very basic layout:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/1/embedded/result,html,css/" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Now we need some elements to hold the times. Let’s use that fancy new &amp;lt;time&amp;gt; tag:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/2/embedded/result,html,css/" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Now let’s restyle them into clock faces by making some circles and hiding the text:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/3/embedded/result,html,css/" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;How about some tick marks? We’ll use a little Javascript to help us add the 60 ticks, but we’ll style them with CSS:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/4/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;And some numerals:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/5/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Next, let's add the hour and minute hands:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/6/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Looking good. Now let's cap those off with a pin in the middle:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/7/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;It's nice, but a little flat. Let's use some spiffy gradients to the face and pin:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/8/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;How about some box-shadow on the hands for more depth?&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/9/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Err. Ew. That doesn't work because the effect is applied before the rotation. That leads to each shadow going in a different direction...not very natural. Luckily, someone &lt;a href="http://stackoverflow.com/a/8833172/29"&gt;figured out&lt;/a&gt; a better way by factoring in the rotation angle. Much better:&lt;/p&gt;  &lt;p&gt;&lt;iframe style="height: 300px; width: 100%" src="http://jsfiddle.net/Q3hjZ/10/embedded/result,html,css,js" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;Next time I’ll build a digital clock widget…but don’t get your hopes up—it will be simpler.&lt;/p&gt;  &lt;p&gt;NB: I &lt;a href="https://twitter.com/mharen/status/268426088076697600"&gt;tweeted&lt;/a&gt; a version of this clock before writing the post and my pal &lt;a href="http://xdumaine.com/"&gt;Xander&lt;/a&gt; wired up the clock’s state to a view model with &lt;a href="http://knockoutjs.com/"&gt;Knockout&lt;/a&gt; and animated it. &lt;a href="http://jsfiddle.net/frCyn/4/"&gt;Spiffy&lt;/a&gt;.&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/2szxmvyO_rI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/4670128575880470302/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=4670128575880470302" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4670128575880470302?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/4670128575880470302?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/2szxmvyO_rI/building-analog-clock-without-flash-or.html" title="Building an Analog Clock without Flash or Images" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-3Tx_2Z1E09A/UKMelgA1dTI/AAAAAAAAFQo/fYLY4MaepEY/s72-c/image2.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/building-analog-clock-without-flash-or.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMHQHo7cSp7ImA9WhNRF0U.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-171781319968341377</id><published>2012-11-12T23:52:00.001-05:00</published><updated>2012-11-12T23:53:51.409-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-12T23:53:51.409-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Household" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><title>Christmas Lights 2012: “Let’s Make Them Nice This Time”</title><content type="html">&lt;p&gt;It’s another year and I’m still a huge fan of the LED Christmas lights I first tried &lt;a href="http://blog.wassupy.com/2011/11/leds-are-awesome.html"&gt;last season&lt;/a&gt;. It’s hard to argue with the insane energy savings. Assuming my calculations from last year are correct, they cost under a penny to run each day, which is roughly 90-95% less than conventional bulbs.&lt;/p&gt;  &lt;p&gt;Wife and I took advantage of the nice weekend weather to put them up (it’s a little early… &lt;a href="http://footedjammies.blogspot.com/2012/11/we-are-best-neighbors.html"&gt;I know&lt;/a&gt;). We did it a little differently this year, though: we used clips on every single bulb. Every. Single. Bulb. EVERY. SINGLE. BULB.&lt;/p&gt;  &lt;p&gt;The issue we had last year was that the wind would knock the lights all over the place, even into the gutters. Also, since the LED bulbs are more directional than traditional bulbs, it’s very noticeable when things aren’t aligned neatly in a row. So we resolved to fix that.&lt;/p&gt;  &lt;p&gt;Of course I&amp;#160; used clips last year, too, but only directly on the wires and spaced them pretty far apart (every six feet or so). This year we used the clips we bought on clearance late last December (foresight FTW) and used over 200 of them. They work essentially like this (not our actual lights or clips—this is just an example):&lt;/p&gt;  &lt;p&gt;&lt;img style="float: none; margin: 3px auto; display: block" alt="all-in-one-christmas-light-clips-IMG_8583.jpg (309×310)" src="http://www.christmaslightsetc.com/images/productdetail/all-in-one-christmas-light-clips-IMG_8583.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;They’re easy, but it takes a lot longer. Wife and I are very, very pleased with the results so far. &lt;/p&gt;  &lt;p&gt;&lt;img title="DSC_0029" style="float: none; margin: 3px auto; display: block" alt="DSC_0029" src="http://lh6.ggpht.com/-PEARIljM1S0/UKHRYWEH6UI/AAAAAAAAFQI/KTTtK7QmaEQ/DSC_0029%25255B3%25255D.jpg?imgmax=800" width="700" height="469" /&gt;&lt;img title="DSC_0027" style="float: none; margin: 3px auto; display: block" alt="DSC_0027" src="http://lh6.ggpht.com/-8LNV2D0RNpg/UKHRlTZLGwI/AAAAAAAAFQM/nFRJJL0Iv10/DSC_0027%25255B3%25255D.jpg?imgmax=800" width="700" height="469" /&gt;&lt;img title="DSC_0048" style="float: none; margin: 3px auto; display: block" alt="DSC_0048" src="http://lh6.ggpht.com/-MnNFFeFPsh8/UKHRwtauGPI/AAAAAAAAFQQ/LeS7EpDMYIM/DSC_0048%25255B3%25255D.jpg?imgmax=800" width="700" height="469" /&gt;&lt;img title="She waits. She watches. BOO" style="float: none; margin: 3px auto; display: block" alt="" src="http://lh3.ggpht.com/-t8HnlIAp5-o/UKHR1IbdYDI/AAAAAAAAFQU/weeUITKbwfU/DSC_0047%25255B3%25255D.jpg?imgmax=800" width="700" height="469" /&gt;&lt;img title="DSC_0039" style="float: none; margin: 3px auto; display: block" alt="DSC_0039" src="http://lh4.ggpht.com/-Bj_LCrLZLvg/UKHR_29vh5I/AAAAAAAAFQY/czISG7uFCzk/DSC_0039%25255B3%25255D.jpg?imgmax=800" width="700" height="469" /&gt;&lt;/p&gt;  &lt;p&gt;I should probably get a tripod and a remote, but considering that these were taken in near-total darkness we’re lucky we can see anything at all.&lt;/p&gt;  &lt;p&gt;And yes, those are pumpkins on the porch. We won’t be lighting these regularly until after Thanksgiving.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Credits:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.christmaslightsetc.com/pages/Hanging-Christmas-Lights.htm"&gt;Clip photo&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/Q4Mz9uh6_n8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/171781319968341377/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=171781319968341377" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/171781319968341377?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/171781319968341377?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/Q4Mz9uh6_n8/christmas-lights-2012-lets-make-them.html" title="Christmas Lights 2012: “Let’s Make Them Nice This Time”" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-PEARIljM1S0/UKHRYWEH6UI/AAAAAAAAFQI/KTTtK7QmaEQ/s72-c/DSC_0029%25255B3%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/christmas-lights-2012-lets-make-them.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFQnY-fSp7ImA9WhNRFkQ.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-8220362980463829240</id><published>2012-11-11T23:59:00.000-05:00</published><updated>2012-11-12T00:05:13.855-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-12T00:05:13.855-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>Snippet: Eating The Backspace Key on Data Entry Screens (Or, How I Became A Secret Hero)</title><content type="html">&lt;p&gt;Have you ever been filling out a form on the web and accidentally navigated away from the form…and lost your work? Ouch. There’re few things as frustrating as &lt;em&gt;retyping &lt;/em&gt;something into a computer.&lt;/p&gt;  &lt;p&gt;In addition to the typical things that a good web programmer does to help prevent data loss (e.g. use simple forms, prompt before leaving a dirty form, don’t break the forward/back buttons, background-save frequent drafts, etc.), here’s a technique I’ve used in a few projects that has silently saved people from some suffering: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Disable the keyboard shortcut for the back button via the backspace key&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In case you didn’t know, the backspace key is typically mapped to the back button. Now imagine you’re updating a large text area with all kinds of thought provoking wisdom. Then you tab away from the text area or click off of it for some reason. Some time later you might hit the backspace key to delete the last letter you typed. Unfortunately, since your focus isn’t in a text area or input, you are navigated away from the page, losing your masterpiece.&lt;/p&gt;  &lt;p&gt;It’s simple to eat that keyboard shortcut in Javascript. Here’s a snippet that uses jQuery since jQuery’s pretty much everywhere:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    $(document).keydown(&lt;span class="kwrd"&gt;function&lt;/span&gt; (e) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.which == 8 &lt;span class="rem"&gt;/* backspace */&lt;/span&gt;
            &amp;amp;&amp;amp; !$(e.target).&lt;span class="kwrd"&gt;is&lt;/span&gt;(&lt;span class="str"&gt;'input,textarea'&lt;/span&gt;)) 
        { 
            e.preventDefault(); 
        }
    });&lt;/pre&gt;

&lt;p&gt;That is, if the keydown event fires and it’s backspace key and we’re not in an input or textarea, stop the keydown event. We can liven this up a little by interrupting the event if it’s readonly or disabled. &lt;a href="http://stackoverflow.com/a/2768256/29"&gt;This answer&lt;/a&gt; on Stackoverflow by &lt;a href="http://stackoverflow.com/users/47161/erikkallen"&gt;erikkallen&lt;/a&gt; covers that case, too:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    $(document).unbind(&lt;span class="str"&gt;'keydown'&lt;/span&gt;).bind(&lt;span class="str"&gt;'keydown'&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; (&lt;span class="kwrd"&gt;event&lt;/span&gt;) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; doPrevent = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;event&lt;/span&gt;.keyCode === 8) {
            &lt;span class="kwrd"&gt;var&lt;/span&gt; d = &lt;span class="kwrd"&gt;event&lt;/span&gt;.srcElement || &lt;span class="kwrd"&gt;event&lt;/span&gt;.target;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ((d.tagName.toUpperCase()===&lt;span class="str"&gt;'INPUT' &amp;amp;&amp;amp; &lt;/span&gt;
                    (d.type.toUpperCase()===&lt;span class="str"&gt;'TEXT' &lt;/span&gt;|| d.type.toUpperCase()===&lt;span class="str"&gt;'PASSWORD'&lt;/span&gt;)) 
                || d.tagName.toUpperCase() === &lt;span class="str"&gt;'TEXTAREA'&lt;/span&gt;) {

                doPrevent = d.readOnly || d.disabled;
            }
            &lt;span class="kwrd"&gt;else&lt;/span&gt; {
                doPrevent = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            }
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (doPrevent) {
            &lt;span class="kwrd"&gt;event&lt;/span&gt;.preventDefault();
        }
    });&lt;/pre&gt;

&lt;p&gt;And if you don’t want to use any jQuery, &lt;a href="http://jsfiddle.net/JEKXH/3/"&gt;here’s&lt;/a&gt; the pure JS version (with &lt;a href="http://stackoverflow.com/a/1629949/29"&gt;more&lt;/a&gt; &lt;a href="http://stackoverflow.com/a/10182352/29"&gt;thanks&lt;/a&gt; &lt;a href="http://stackoverflow.com/q/1411545/29"&gt;to&lt;/a&gt; Stackoverflow):&lt;/p&gt;

&lt;pre class="csharpcode"&gt;    document.onkeydown = &lt;span class="kwrd"&gt;function&lt;/span&gt; (&lt;span class="kwrd"&gt;event&lt;/span&gt;) {
        &lt;span class="kwrd"&gt;var&lt;/span&gt; doPrevent = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
        &lt;span class="kwrd"&gt;var&lt;/span&gt; keyCode = &lt;span class="kwrd"&gt;event&lt;/span&gt;.charCode ? &lt;span class="kwrd"&gt;event&lt;/span&gt;.charCode : &lt;span class="kwrd"&gt;event&lt;/span&gt;.keyCode;

        &lt;span class="kwrd"&gt;if&lt;/span&gt;(keyCode !== 8 &lt;span class="rem"&gt;/* backspace */&lt;/span&gt;){
            &lt;span class="kwrd"&gt;return&lt;/span&gt;;
        }
        
        &lt;span class="kwrd"&gt;var&lt;/span&gt; d = &lt;span class="kwrd"&gt;event&lt;/span&gt;.srcElement || &lt;span class="kwrd"&gt;event&lt;/span&gt;.target;
        &lt;span class="kwrd"&gt;if&lt;/span&gt; ((d.tagName.toUpperCase()===&lt;span class="str"&gt;'INPUT'&lt;/span&gt; &amp;amp;&amp;amp; 
                (d.type.toUpperCase()===&lt;span class="str"&gt;'TEXT'&lt;/span&gt; || d.type.toUpperCase()===&lt;span class="str"&gt;'PASSWORD'&lt;/span&gt;)) 
            || d.tagName.toUpperCase() === &lt;span class="str"&gt;'TEXTAREA'&lt;/span&gt;) {

            doPrevent = d.readOnly || d.disabled;
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt; {
            doPrevent = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (doPrevent) {
            &lt;span class="kwrd"&gt;event&lt;/span&gt;.preventDefault();
        }
    };​&lt;/pre&gt;

&lt;p&gt;It’s the little things…&lt;/p&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/uRQ4P3TolyI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/8220362980463829240/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=8220362980463829240" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/8220362980463829240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/8220362980463829240?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/uRQ4P3TolyI/snippet-eating-backspace-key-on-data.html" title="Snippet: Eating The Backspace Key on Data Entry Screens (Or, How I Became A Secret Hero)" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/snippet-eating-backspace-key-on-data.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MESHo4eCp7ImA9WhNRFUs.&quot;"><id>tag:blogger.com,1999:blog-7767624464875146298.post-1189629546548191235</id><published>2012-11-10T12:43:00.001-05:00</published><updated>2012-11-10T12:43:29.430-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-10T12:43:29.430-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Technology" /><category scheme="http://www.blogger.com/atom/ns#" term="NaBloPoMo 2012" /><category scheme="http://www.blogger.com/atom/ns#" term="Code" /><title>What is going on with my iOS clipboard in Safari?!</title><content type="html">&lt;p&gt;I &lt;a href="https://twitter.com/mharen/status/267293420354154496"&gt;made a joke&lt;/a&gt; earlier that was based on a Taylor Swift lyric (don’t judge me) so I found myself on one of those awful song lyrics sites so I could copy the line I wanted. I highlighted the line I wanted and hit copy:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="2012-11-10 11.21.45" style="margin: 3px 0px; display: inline" alt="2012-11-10 11.21.45" src="http://lh4.ggpht.com/-yCqHojYZGyY/UJ6SGyeqhnI/AAAAAAAAFOY/XYC1kdImceM/2012-11-10%25252011.21.45%25255B3%25255D.png?imgmax=800" width="300" height="450" /&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;But then something weird happened when I pasted the lyric into my Twitter client:&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="2012-11-10 11.31.23" style="margin: 3px 0px; display: inline" alt="2012-11-10 11.31.23" src="http://lh4.ggpht.com/-1TgXiaKlcEA/UJ6SHqpfamI/AAAAAAAAFOg/-hwERUr8m7c/2012-11-10%25252011.31.23%25255B3%25255D.png?imgmax=800" width="300" height="450" /&gt;&amp;#160;&lt;img title="2012-11-10 11.31.27" style="margin: 3px 0px; display: inline" alt="2012-11-10 11.31.27" src="http://lh6.ggpht.com/-EynGPmfNr5Y/UJ6SIoTFNgI/AAAAAAAAFOo/DcYfclgHQI0/2012-11-10%25252011.31.27%25255B3%25255D.png?imgmax=800" width="300" height="450" /&gt;&lt;/p&gt;  &lt;p&gt;Errr…what? I went back and tried copying again. Same thing. Weird.&lt;/p&gt;  &lt;p&gt;So I loaded the same site on my desktop and immediately noticed strange behavior around text selection:&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-58OKSGyaWnQ/UJ6SK9Lr62I/AAAAAAAAFOw/G5w3XFzdDAg/s1600-h/selection%25255B3%25255D.gif"&gt;&lt;img title="selection" style="margin: 3px; display: inline" alt="selection" src="http://lh5.ggpht.com/-KyhCIg_QCVs/UJ6SNyFb5BI/AAAAAAAAFO4/uizdOGeO10s/selection_thumb%25255B1%25255D.gif?imgmax=800" width="450" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The title in line one works fine, but the lyrics themselves won’t hold a selection. What’s doing that? Let’s take a peek at the page’s source. The first thing I noticed was an unusually large amount of HTML entities:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh6.ggpht.com/-uoAQ8lOPpLE/UJ6SPHBnJiI/AAAAAAAAFPA/QXRQKsgP8mQ/image%25255B11%25255D.png?imgmax=800" width="673" height="237" /&gt;&lt;/p&gt;  &lt;p&gt;You normally use those codes to represent special characters. This site, however, is using them to obscuring the lyrics. (It’s hard to imagine that this is all that effective in protecting the content.) That’s not what I’m irritated by, though, so let’s keep looking. &lt;/p&gt;  &lt;p&gt;I’m assuming the weird selection behavior is triggered by a script so let’s just look for those by searching for “.js”:&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="float: none; margin: 3px auto; display: block" alt="image" src="http://lh4.ggpht.com/-jYfwVJa4Z_8/UJ6SP5F-0zI/AAAAAAAAFPI/9LkT5eLTOlo/image%25255B14%25255D.png?imgmax=800" width="758" height="207" /&gt;&lt;/p&gt;  &lt;p&gt;(I find it amusing that the site attributes the lyrics to Sony but still puts in all this effort to “protecting” them…)&lt;/p&gt;  &lt;p&gt;Bingo. &lt;/p&gt;  &lt;p&gt;That “protected-1.2.js” file looks like what we’re after. After it’s loaded, a bunch of mouse/selection/copy related events are bound to the various parts of the page. Let’s open that up to see if that’s where the site is messing with my clipboard:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    &lt;span class="rem"&gt;//limit text&lt;/span&gt;
    &lt;span class="kwrd"&gt;function&lt;/span&gt; manageText(str){
        &lt;span class="kwrd"&gt;if&lt;/span&gt;(!allow(str)){
            &lt;span class="kwrd"&gt;return&lt;/span&gt; str;
        }&lt;span class="kwrd"&gt;else&lt;/span&gt;{
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;&lt;strong&gt;Complete lyrics: &lt;/strong&gt;&amp;quot;&lt;/span&gt;+ document.location.href;
        }
    }

    copyEl.innerHTML = manageText(c.toString());

    document.body.insertBefore(copyEl, document.body.firstChild);
    a.selectAllChildren(copyEl);&lt;/pre&gt;

&lt;p&gt;There’s a lot more to it, but those are the key pieces that manipulated my clipboard. It’s actually pretty simple: this is all within the “noCopy” routine that’s bound to the “copy” event. When the browser tries to copy anything, it just throws some text into an element and selects &lt;em&gt;that&lt;/em&gt; with &lt;a href="https://developer.mozilla.org/en-US/docs/DOM/Selection/selectAllChildren"&gt;selectAllChildren&lt;/a&gt; instead of whatever was highlighted.&lt;/p&gt;

&lt;p&gt;Mean. Let’s fix it with the developer tools (control-shift-I or F12):&lt;/p&gt;

&lt;p align="center"&gt;&lt;iframe height="360" src="http://www.youtube.com/embed/NWyAoB78v48?rel=0" frameborder="0" width="480" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Obviously I didn’t actually go to all this trouble to copy that one line. I was just curious how things were working under the covers :).&lt;/p&gt;

&lt;hr /&gt;Credits/thanks: 

&lt;ul&gt;
  &lt;li&gt;Screencast recording via &lt;a href="http://www.screenr.com/"&gt;Screenr&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Mp4 to Gif converter via &lt;a href="http://www.online-convert.com/"&gt;Online-Convert&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;Animated gif compression via &lt;a href="http://www.gifreducer.com"&gt;GifReducer&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;  &lt;img src="http://feeds.feedburner.com/~r/wassupy-wp/~4/ObdXK1h7S8w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.wassupy.com/feeds/1189629546548191235/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=7767624464875146298&amp;postID=1189629546548191235" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1189629546548191235?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7767624464875146298/posts/default/1189629546548191235?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/wassupy-wp/~3/ObdXK1h7S8w/what-is-going-on-with-my-ios-clipboard.html" title="What is going on with my iOS clipboard in Safari?!" /><author><name>Michael Haren</name><uri>https://plus.google.com/103506291560311820711</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-L-Fs-GNh-gs/AAAAAAAAAAI/AAAAAAAAFhQ/_y0cIAS7-3M/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-yCqHojYZGyY/UJ6SGyeqhnI/AAAAAAAAFOY/XYC1kdImceM/s72-c/2012-11-10%25252011.21.45%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.wassupy.com/2012/11/what-is-going-on-with-my-ios-clipboard.html</feedburner:origLink></entry></feed>
