## Tuesday, January 26, 2016

### SQL to de-dupe overlapping ranges of dates

I came across a situation today where I was given a set of date ranges (begin date to end date) and needed to de-duplicate the ranges so any overlapping dates are "collapsed" so the final result would only contain the distinct range(s) of dates. There are probably a number of solutions to this problem, but I rather liked what I came up with so I decided to post it here for posterity. Code first, explanation after:

```-- Declare a table variable for test data DECLARE @Data TABLE ( BeginDate DATETIME, EndDate DATETIME ); -- Fill the test data INSERT INTO @Data SELECT '2016-01-01', '2016-01-05' UNION ALL SELECT '2016-01-03', '2016-01-10' UNION ALL SELECT '2016-01-12', '2016-01-15' UNION ALL SELECT '2016-01-14', '2016-01-18' UNION ALL SELECT '2016-01-16', '2016-01-25' UNION ALL SELECT '2016-01-16', '2016-01-20' UNION ALL SELECT '2016-01-16', '2016-01-20' UNION ALL SELECT '2016-02-01', '2016-03-13' UNION ALL SELECT '2016-05-01', '2016-05-30' UNION ALL SELECT '2016-05-28', '2016-06-10'; WITH S AS ( SELECT BeginDate, MAX(EndDate) AS EndDate -- Select the starting ranges FROM @Data D WHERE NOT EXISTS(SELECT * FROM @Data WHERE BeginDate < D.BeginDate AND EndDate >= D.BeginDate) GROUP BY BeginDate UNION ALL SELECT S.BeginDate, D.EndDate -- recursively expand the ranges FROM S INNER JOIN @Data D ON D.BeginDate BETWEEN S.BeginDate AND S.EndDate AND D.EndDate > S.EndDate ) SELECT BeginDate, MAX(EndDate) FROM S GROUP BY BeginDate; ```

In this example, I used a common table expression (CTE) for my test data. The work is done by the "S" CTE. It starts by selecting any date range that doesn't have another date range that overlaps its begin date, grouping by that begin date, to select the max end date (to eliminate any ranges that start on the same day). It then recursively joins back to the original data, bringing in any date range that overlaps and has an end date further out. In the final output, you select the BeginDate and MAX(EndDate) to get your distinct list of date ranges.

If you have additional columns you need to group by, you'll need to add them in. For example:

```-- Declare a table variable for test data DECLARE @Data TABLE ( ID INT, BeginDate DATETIME, EndDate DATETIME ); -- Fill the test data INSERT INTO @Data SELECT 1, '2016-01-01', '2016-01-05' UNION ALL SELECT 1, '2016-01-03', '2016-01-10' UNION ALL SELECT 1, '2016-01-12', '2016-01-15' UNION ALL SELECT 1, '2016-01-14', '2016-01-18' UNION ALL SELECT 1, '2016-01-16', '2016-01-25' UNION ALL SELECT 2, '2016-01-16', '2016-01-20' UNION ALL SELECT 2, '2016-01-16', '2016-01-20' UNION ALL SELECT 2, '2016-02-01', '2016-03-13' UNION ALL SELECT 2, '2016-05-01', '2016-05-30' UNION ALL SELECT 2, '2016-05-28', '2016-06-10'; WITH S AS ( SELECT ID, BeginDate, MAX(EndDate) AS EndDate -- Select the starting ranges FROM @Data D WHERE NOT EXISTS(SELECT * FROM @Data WHERE ID = D.ID AND BeginDate < D.BeginDate AND EndDate >= D.BeginDate) GROUP BY ID, BeginDate UNION ALL SELECT S.ID, S.BeginDate, D.EndDate -- recursively expand the ranges FROM S INNER JOIN @Data D ON S.ID = D.ID AND D.BeginDate BETWEEN S.BeginDate AND S.EndDate AND D.EndDate > S.EndDate ) SELECT ID, BeginDate, MAX(EndDate) FROM S GROUP BY ID, BeginDate; ```

## Thursday, December 3, 2015

### Starting a numbered list at a different number in Gmail or other web email client

I recently was sending a colleague a series of questions across multiple emails and I wanted to continue numbering the list where the previous email left off. The rich text editor used by Gmail doesn't have this built-in (not that I can find at least), but I figured out a way using my trusty browser tools.

I'm a web developer so using the browser tools is perfectly normal for me on an average day, but although this might be unfamiliar, it's fairly easy to accomplish.

1. If you haven't done so already, open your formatting tools by clicking the A button in the toolbar, then insert the ordered list by clicking the "1 2 3" icon.
2. Right-click your list and choose "Inspect element". If your browser doesn't have "Inspect element" or another "Inspect" option, you can press F12 to open the browser tools then click the button in the top left - this lets you then click the list to select it.
3. You'll see the HTML of the current page. The <ol> tag is what you're looking for. Your tools might have auto-selected an <li> instead, in which case you'd look for the parent.
4. Right-click the <ol> tag and choose "Add Attribute".
5. Type "start=N" (no quotes) where N is the number you want to start with

Your browser should update immediately and you'll see the new number as your starting point.

## Monday, August 10, 2015

### David Hasselhoff Screensaver

It's good sense to lock your computer when you're away. My co-workers have a habit of punishing those who don't by changing their desktop background to a picture of David Hasselhoff (usually the one where he's naked holding a puppy), a practice known as "Hoffing". I decided to go one further and create a screensaver that displays mister Hasselhoff in all his glory.

This is the result. Extract the file on your victim's computer, right-click the .scr file and choose "Install". And here is the source code in case you're worried about malicious code (or just want to see how it works). I leaned heavily on the code from Frank McCown at http://www.harding.edu/fmccown/screensaver/screensaver.html.

Update 2015-09-17 - I found that the previous version was crashing when trying to move the image. I've uploaded new versions of the .scr and source code (same links) to resolve the issue.

## Sunday, September 14, 2014

### Star Wars: Commander

I've Meanwhile, the non-optional PvP element is basically just stealing the hard-earned resources of other players. he real goal of these games though is to get you to buy whatever points they're selling in order to speed things up. This goal results in gameplay that just isn't fun.

Don't get me wrong, they're totally addicting. That's the whole point. Each stage opens up a new thing that makes you a little bit more powerful so you keep thinking "now I can do This", but each stage of the game takes longer and longer and ultimately, nothing really changes. You're still do the same thing over and over again. It's addicting, but I get no joy in the experience. It's just hard to stop.

Meanwhile, the non-optional PvP element is basically just stealing the hard-earned resources of other players. You log into the game to find another player has stolen resources it took you hours or even days to gather. Sure, you can attack them back, but them you lose the temporary protection obtained by having your base destroyed. And what's the point? Now they've lost time and resources.

This experience could be totally turned around by adding some additional strategy or RTS elements. As is, your attack units are completely mindless. After dropping them on the battlefield, you have no control over their behavior. They'll attack random (and strategically worthless) walls while being fired upon (and destroyed) by enemy units. Your defenses seem woefully underpowered (at least that's my experience) at repelling invading players. A single enemy unit was capable of taking down both shield generators and three turrets before being reinforced by the rest of the army for wiping out the rest of the base.

OK, rant over. And so is my time with this game.

## Monday, September 8, 2014

### Dynamically Changing the Color of SVG Using an ASP.NET HttpHandler

I have an SVG file that I'm using as the background image of elements on the page (using sprites). I wanted to dynamically update the color of the shapes and paths when theming the application, but I could not find a way to do this using CSS when the SVG is loaded as a background image (I have heard that inline <svg> elements will inherit style rules).

The way I solved the issue was to use a custom HttpHandler in my ASP.NET application that allows me to replace parts of the SVG with other content. Here's the code I used:

```using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Web; namespace MyNamespace { public class DynamicSVGHandler : IHttpHandler { public bool IsReusable { get { return true; } } public void ProcessRequest( HttpContext context ) { var request = context.Request; var response = context.Response; var file = context.Server.MapPath( Path.ChangeExtension( request.Url.LocalPath, ".svg" ) ); if( File.Exists( file ) ) { var lastWrite = File.GetLastWriteTimeUtc( file ); response.Clear(); response.ContentType = "image/svg+xml"; response.Cache.SetExpires( DateTime.Now.AddMinutes( 5d ) ); response.Cache.SetCacheability( HttpCacheability.Public ); List<KeyValuePair<string, string>> replacements = new List<KeyValuePair<string, string>>(); string value; foreach( string key in request.QueryString ) { if( key.Length > 3 && !string.IsNullOrEmpty( value = request.QueryString[key] ) && value.Length > 3 )//Implement any custom validation here. replacements.Add( new List<KeyValuePair<string, string>>( key, value ) ); } if( replacements.Count > 0 ) { string line; using( StreamReader reader = new StreamReader( File.OpenRead( file ) ) ) { while( (line = reader.ReadLine()) != null ) { foreach( var replacement in replacements ) line = line.Replace( replacement.Key, replacement.Value ); response.Output.WriteLine( line ); } } } else response.WriteFile( file ); } else { response.Clear(); response.StatusCode = 404; response.End(); } } } }```

Make sure to register your handler in your web.config (This example is for IIS 7+, integrated mode and I used the extension .dsvg):

```<configuration> <system.webServer> <handlers> <add name="*.dsvg" path="*.dsvg" preCondition="integratedMode" verb="*" type="MyNamespace.DynamicSVGHandler, MyAssembly"/> </handlers> </system.webServer> </configuration>```

You can now reference any svg file in your application with the extension .dsvg instead of .svg and specify replacements in the URL (e.g. mysvg.dsvg?white=red to change "white" to "red").

In my SVG, I found it easiest to define the color using a style section rather than setting the fill of each shape, then add the class="svg-shape" to all the shapes.

``` .svg-shape { fill:#fff; fill:\$color\$; } ```
``` Posted by Alan Waiss at 2:07 PM Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest ```
``` ```
``` ```
``` Thursday, March 13, 2014 Changing the Color of Table and Column Names in SQL Server Management Studio 2012 If you've upgraded to SQL Server 2012 and used the new Management Studio, you've probably noticed that your table and column names are now a teal color that looks exactly like the color of your comments. Previous versions of Management Studio would use the color specified for "Plain Text", but the new version uses a new setting. To change the color, open the Tools menu and choose Options.... In the Environment settings click Fonts and Colors. Locate and click "Identifier" in the Display Items list box then change the Item foreground to something other than Default. That should do the trick. Posted by Alan Waiss at 11:27 AM Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Labels: Development, SQL Monday, February 24, 2014 How to Restore Files from a Restore Point In my last post, I mentioned how I had used Windows System Restore, only to find out that JavaScript (*.js) files are considered to be "system files" and are restored back to the state they existed when the restore point was created. I tried restoring back to the previous state, but no-go. System Restore failed with every other restore point. I thought all was lost, until I found this article by the How-to Geek that has a batch file letting you mount the latest VSS (Volume Shadow Copy) volume and view the files contained there-in (when you create a Restore Point, Windows creates a VSS volume containing your files at that point in time). I didn't want the most recent volume, but I looked at the batch file and figured out how to list the available volumes and mount the one I wanted. I figured I'd document the steps in case this helps anyone else. First off, you need to open a command prompt as an administrator (Right-click the "Command Prompt" and choose "Run as Administrator"). At the prompt, type VSSAdmin List Shadows This will list the available VSS volumes on your system. This can be confusing, but each one displays a creation time. What you're looking for is the the "Shadow Copy Volume" (e.g. \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1). Once you find out the name of the shadow copy volumne, you can mount the volume using MKLINK just as you would any other folder (if you haven't used MKLINK, I'd recommend you check it out - it's a pretty useful tool). For example: MKLINK /D C:\ShadowBackup \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1 In this example, you'll see a new folder named ShadowBackup on your C: drive, containing the contents of the VSS volume. Now you can view the contents of the VSS volume and view/copy any of the files within. This can also be useful if you accidentally delete a file or want to see what changes you've made. To "unmount" the volume, you can simply delete the folder in Windows Explorer. This won't delete the volume, just the link to view the files. Posted by Alan Waiss at 3:50 PM Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest Labels: Administration, Windows, Windows 8 ```
``` Older Posts Home Subscribe to: Posts (Atom) window.___gcfg = {'lang': 'en'}; ```
``` ```
``` ```
``` Looking for Something Specific? Loading... #uds-searchControl .gs-result .gs-title, #uds-searchControl .gs-result .gs-title *, #uds-searchControl .gsc-results .gsc-trailing-more-results, #uds-searchControl .gsc-results .gsc-trailing-more-results * { color:#f54e36; } #uds-searchControl .gs-result .gs-title a:visited, #uds-searchControl .gs-result .gs-title a:visited * { color:#c44c53; } #uds-searchControl .gs-relativePublishedDate, #uds-searchControl .gs-publishedDate { color: #ffffff; } #uds-searchControl .gs-result a.gs-visibleUrl, #uds-searchControl .gs-result .gs-visibleUrl { color: #f54e36; } #uds-searchControl .gsc-results { border-color: #f0b914; background-color: #ffffff; } #uds-searchControl .gsc-tabhActive { border-color: #f0b914; border-top-color: #f0b914; background-color: #ffffff; color: #000000; } #uds-searchControl .gsc-tabhInactive { border-color: #f0b914; background-color: transparent; color: #f54e36; } #uds-searchClearResults { border-color: #f0b914; } #uds-searchClearResults:hover { border-color: #f0b914; } #uds-searchControl .gsc-cursor-page { color: #f54e36; } #uds-searchControl .gsc-cursor-current-page { color: #000000; } <!-- google_ad_client = "ca-pub-4873002326919516"; google_ad_host = "ca-host-pub-1556223355139109"; google_ad_host_channel = "L0001"; /* plausiblenonsense_sidebar-right-1_AdSense1_200x200_as */ google_ad_slot = "6538499386"; google_ad_width = 200; google_ad_height = 200; //--> Twitter Tweets by @AlanWaiss !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); Blog Archive ▼  2016 (1) ▼  January (1) SQL to de-dupe overlapping ranges of dates ►  2015 (2) ►  December (1) ►  August (1) ►  2014 (9) ►  September (2) ►  March (1) ►  February (2) ►  January (4) ►  2012 (5) ►  September (1) ►  August (1) ►  March (1) ►  February (2) ►  2011 (4) ►  October (2) ►  September (1) ►  July (1) ►  2010 (4) ►  September (1) ►  August (2) ►  March (1) ►  2009 (8) ►  November (1) ►  July (1) ►  June (1) ►  May (1) ►  April (1) ►  March (2) ►  February (1) ►  2008 (11) ►  October (7) ►  September (1) ►  July (1) ►  June (2) About Me Alan Waiss View my complete profile Followers window.followersIframe = null; function followersIframeOpen(url) { gapi.load("gapi.iframes", function() { if (gapi.iframes && gapi.iframes.getContext) { window.followersIframe = gapi.iframes.getContext().openChild({ url: url, where: document.getElementById("followers-iframe-container"), messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER, messageHandlers: { '_ready': function(obj) { window.followersIframe.getIframeEl().height = obj.height; }, 'reset': function() { window.followersIframe.close(); followersIframeOpen("https://www.blogger.com/followers.g?blogID\x3d6643998577592914846\x26colors\x3dCgt0cmFuc3BhcmVudBILdHJhbnNwYXJlbnQaBjAwMDAwMCIGZjU0ZTM2KgZmNzUxNTEyBjAwMDAwMDoGMDAwMDAwQgZmNTRlMzZKBjdiN2I3YlIGZjU0ZTM2Wgt0cmFuc3BhcmVudA%3D%3D\x26pageSize\x3d20\x26origin\x3dhttp://www.plausiblenonsense.com/"); }, 'open': function(url) { window.followersIframe.close(); followersIframeOpen(url); }, 'blogger-ping': function() { } } }); } }); } followersIframeOpen("https://www.blogger.com/followers.g?blogID\x3d6643998577592914846\x26colors\x3dCgt0cmFuc3BhcmVudBILdHJhbnNwYXJlbnQaBjAwMDAwMCIGZjU0ZTM2KgZmNzUxNTEyBjAwMDAwMDoGMDAwMDAwQgZmNTRlMzZKBjdiN2I3YlIGZjU0ZTM2Wgt0cmFuc3BhcmVudA%3D%3D\x26pageSize\x3d20\x26origin\x3dhttp://www.plausiblenonsense.com/"); Disclaimer This site is where a few of the electrical signals in my brain get transmitted into words that I share with the world. I make no guarantees about the content I publish. While I try to only convey reliable information, I don't always check my facts and most of what I publish is my opinion. I encourage you to develop your own opinion - think for yourself, don't let someone else do it for you. ```
``` ```
``` ```
``` ```
``` ```
``` Awesome Inc. template. Template images by dfli. Powered by Blogger. ```
``` ```
``` ```
``` ```
``` window.setTimeout(function() { document.body.className = document.body.className.replace('loading', ''); }, 10); if (window.jstiming) window.jstiming.load.tick('widgetJsBefore'); if (typeof(BLOG_attachCsiOnload) != 'undefined' && BLOG_attachCsiOnload != null) { window['blogger_templates_experiment_id'] = "templatesV2";window['blogger_blog_id'] = '6643998577592914846';BLOG_attachCsiOnload(''); }_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d6643998577592914846','//www.plausiblenonsense.com/','6643998577592914846'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '6643998577592914846', 'bloggerUrl': 'https://www.blogger.com', 'title': 'Plausible Nonsense', 'pageType': 'index', 'url': 'http://www.plausiblenonsense.com/', 'canonicalUrl': 'http://www.plausiblenonsense.com/', 'homepageUrl': 'http://www.plausiblenonsense.com/', 'searchUrl': 'http://www.plausiblenonsense.com/search', 'canonicalHomepageUrl': 'http://www.plausiblenonsense.com/', 'blogspotFaviconUrl': 'http://www.plausiblenonsense.com/favicon.ico', 'enabledCommentProfileImages': true, 'adultContent': false, 'analyticsAccountNumber': '', 'useUniversalAnalytics': false, 'pageName': '', 'pageTitle': 'Plausible Nonsense', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'languageDirection': 'ltr', 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Plausible Nonsense - Atom\x22 href\x3d\x22http://www.plausiblenonsense.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Plausible Nonsense - RSS\x22 href\x3d\x22http://www.plausiblenonsense.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Plausible Nonsense - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/6643998577592914846/posts/default\x22 /\x3e\n', 'meTag': '\x3clink rel\x3d\x22me\x22 href\x3d\x22https://plus.google.com/116695542032852943926\x22 /\x3e\n', 'openIdOpTag': '\x3clink rel\x3d\x22openid.server\x22 href\x3d\x22https://www.blogger.com/openid-server.g\x22 /\x3e\n\x3clink rel\x3d\x22openid.delegate\x22 href\x3d\x22http://www.plausiblenonsense.com/\x22 /\x3e\n', 'googleProfileUrl': 'https://plus.google.com/116695542032852943926', 'latencyHeadScript': '\x3cscript type\x3d\x22text/javascript\x22\x3e(function() { (function(){function c(a){this.t\x3d{};this.tick\x3dfunction(a,c,b){var d\x3dvoid 0!\x3db?b:(new Date).getTime();this.t[a]\x3d[d,c];if(void 0\x3d\x3db)try{window.console.timeStamp(\x22CSI/\x22+a)}catch(e){}};this.tick(\x22start\x22,null,a)}var a,e;window.performance\x26\x26(e\x3d(a\x3dwindow.performance.timing)\x26\x26a.responseStart);var h\x3d0\x3ce?new c(e):new c;window.jstiming\x3d{Timer:c,load:h};if(a){var b\x3da.navigationStart;0\x3cb\x26\x26e\x3e\x3db\x26\x26(window.jstiming.srt\x3de-b)}if(a){var d\x3dwindow.jstiming.load;0\x3cb\x26\x26e\x3e\x3db\x26\x26(d.tick(\x22_wtsrt\x22,void 0,b),d.tick(\x22wtsrt_\x22,\x22_wtsrt\x22,\ne),d.tick(\x22tbsd_\x22,\x22wtsrt_\x22))}try{a\x3dnull,window.chrome\x26\x26window.chrome.csi\x26\x26(a\x3dMath.floor(window.chrome.csi().pageT),d\x26\x260\x3cb\x26\x26(d.tick(\x22_tbnd\x22,void 0,window.chrome.csi().startE),d.tick(\x22tbnd_\x22,\x22_tbnd\x22,b))),null\x3d\x3da\x26\x26window.gtbExternal\x26\x26(a\x3dwindow.gtbExternal.pageT()),null\x3d\x3da\x26\x26window.external\x26\x26(a\x3dwindow.external.pageT,d\x26\x260\x3cb\x26\x26(d.tick(\x22_tbnd\x22,void 0,window.external.startE),d.tick(\x22tbnd_\x22,\x22_tbnd\x22,b))),a\x26\x26(window.jstiming.pt\x3da)}catch(k){}})();window.tickAboveFold\x3dfunction(c){var a\x3d0;if(c.offsetParent){do a+\x3dc.offsetTop;while(c\x3dc.offsetParent)}c\x3da;750\x3e\x3dc\x26\x26window.jstiming.load.tick(\x22aft\x22)};var f\x3d!1;function g(){f||(f\x3d!0,window.jstiming.load.tick(\x22firstScrollTime\x22))}window.addEventListener?window.addEventListener(\x22scroll\x22,g,!1):window.attachEvent(\x22onscroll\x22,g);\n })();\x3c/script\x3e', 'mobileHeadScript': '', 'adsenseClientId': 'ca-pub-4873002326919516', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'ieCssRetrofitLinks': '\x3c!--[if IE]\x3e\x3cscript type\x3d\x22text/javascript\x22 src\x3d\x22https://www.blogger.com/static/v1/jsbin/2193475453-ieretrofit.js\x22\x3e\x3c/script\x3e\n\x3c![endif]--\x3e', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/979ef125fe92c579', 'plusOneApiSrc': 'https://apis.google.com/js/plusone.js', 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'Twitter', 'key': 'twitter', 'shareMessage': 'Share to Twitter', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Google+', 'key': 'googlePlus', 'shareMessage': 'Share to Google+', 'target': 'googleplus'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'googlePlusShareButtonWidth': 300, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}}}, {'name': 'features', 'data': {'CsiBlogspot': true, 'templateBrowserTheme': true, 'widgetVisibility': true}}, {'name': 'messages', 'data': {'adsGoHere': 'Ads go here', 'archive': 'Archive', 'authorSaid': '%1 said...', 'authorSaidWithLink': '\x3ca href\x3d\x22%2\x22 rel\x3d\x22nofollow\x22\x3e%1\x3c/a\x3e said...', 'blogArchive': 'Blog Archive', 'by': 'By', 'byAuthor': 'By %1', 'byAuthorLink': 'By \x3ca href\x3d\x22%2\x22\x3e%1\x3c/a\x3e', 'comments': 'Comments', 'configurationRequired': 'Configuration required', 'deleteBacklink': 'Delete Backlink', 'deleteComment': 'Delete Comment', 'edit': 'Edit', 'euCookieNotice': 'This site uses cookies from Google to deliver its services, to personalize ads and to analyze traffic. Information about your use of this site is shared with Google. By using this site, you agree to its use of cookies.', 'euCookieResponsibility': 'It is your responsibility to notify your visitors about cookies used on your blog. See http://www.blogger.com/go/cookiechoices for more details.', 'emailAddress': 'Email Address', 'getEmailNotifications': 'Get email notifications', 'gotIt': 'Got it', 'hidden': 'Hidden', 'home': 'Home', 'joinTheConversation': 'Join the conversation', 'keepReading': 'Keep reading', 'labels': 'Labels', 'latestPosts': 'Latest Posts', 'learnMore': 'Learn More', 'loadMorePosts': 'Load more posts', 'loading': 'Loading...', 'myBlogList': 'My Blog List', 'myFavoriteSites': 'My favorite sites', 'myPhoto': 'My photo', 'newer': 'Newer', 'newerPosts': 'Newer Posts', 'newest': 'Newest', 'noResultsFound': 'No results found', 'noTitle': 'No title', 'numberOfComments': '{numComments, plural, \x3d0 {No comments} \x3d1 {1 comment} other {# comments}}', 'older': 'Older', 'olderPosts': 'Older Posts', 'oldest': 'Oldest', 'onlyTeamMembersCanComment': 'Note: Only a member of this blog may post a comment.', 'popularPosts': 'Popular Posts', 'popularPostsFromThisBlog': 'Popular posts from this blog', 'postAComment': 'Post a Comment', 'postedBy': 'Posted by', 'postedByAuthor': 'Posted by %1', 'postedByAuthorLink': 'Posted by \x3ca href\x3d\x22%2\x22\x3e%1\x3c/a\x3e', 'readMore': 'Read more', 'recentPosts': 'Recent posts', 'reportAbuse': 'Report Abuse', 'search': 'Search', 'searchBlog': 'Search blog', 'share': 'Share', 'showAll': 'Show all', 'showLess': 'Show less', 'showMore': 'Show more', 'someOfMyFavoriteSites': 'Some of my favorite sites', 'subscribe': 'Subscribe', 'subscribeTo': 'Subscribe to:', 'subscribeToThisBlog': 'Subscribe to this blog', 'theresNothingHere': 'There\x27s nothing here!', 'viewAll': 'View all', 'visible': 'Visible', 'visitProfile': 'Visit profile', 'widgetNotAvailableInPreview': 'This content is not available in blog preview.', 'widgetNotAvailableOnHttps': 'This content is not yet available over encrypted connections.'}}, {'name': 'skin', 'data': {'vars': {'description_font': 'normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'tabs_text_color': '#f54e36', 'widget_link_visited_color': '#c44c53', 'image_shadow_spread': '0', 'body_background': '#ffffff url(http://themes.googleusercontent.com/image?id\x3d0BwVBOzw_-hbMOTQ0MmZlNGItZWJhMy00ZWEwLTkxYTktMmVjMjgxNzBkODhi) no-repeat scroll top center /* Credit: dfli (http://www.istockphoto.com/googleimages.php?id\x3d8555134\x26platform\x3dblogger) */', 'mobile_background_size': '100% auto', 'date_background': 'transparent url(http://www.blogblog.com/1kt/awesomeinc/date_background_groovy.png) repeat-x scroll bottom center', 'image_border_color': 'transparent', 'tabs_border_color': '#f0b914', 'widget_title_font': 'normal bold 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'body_background_size': '100% auto', 'header_padding_top': '22px', 'description_text_color': '#000000', 'outer_shadow_spread': '0', 'post_title_font': 'normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'body_text_color': '#000000', 'widget_text_color': '#000000', 'header_background_gradient': 'none', 'date_position': 'absolute', 'image_border_radius': '0', 'tabs_background_color': 'transparent', 'date_header_border_radius_top': '0', 'body_background_gradient_cap': 'none', 'widget_outer_margin_top': '0', 'widget_alternate_text_color': '#7b7b7b', 'link_visited_color': '#c44c53', 'header_margin_top': '0', 'shadow_spread': '0', 'widget_border_bevel_color': 'transparent', 'mobile_button_color': '#c01600', 'tabs_selected_text_color': '#c01600', 'date_text_color': '#ffffff', 'post_background_color': '#ffffff', 'header_margin_bottom': '0', 'widget_padding_side': '15px', 'date_header_position': '15px', 'link_color': '#f54e36', 'title_shadow_spread': '-1px', 'date_last_space_bottom': '20px', 'widget_border_radius': '0', 'date_space': '65px', 'widget_border_color': '#e0603b', 'tabs_background_gradient': 'url(http://www.blogblog.com/1kt/awesomeinc/tabs_gradient_groovy.png)', 'header_font': 'normal normal 40px Fontdiner Swanky', 'widget_padding_top': '0', 'separator_outdent': '0', 'startSide': 'left', 'post_border_bevel_color': '#e0603b', 'feed_link_visited_color': '#ffffff', 'tabs_font': 'normal bold 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'date_padding_bottom': '10px', 'date_border_color': '#000000', 'widget_title_text_color': '#000000', 'feed_link_hover_color': '#ffffff', 'widget_link_hover_color': '#f54e36', 'footer_text_color': '#000000', 'tabs_selected_background_color': '#ffe9e6', 'feed_text_color': '#000000', 'date_last_border_radius_bottom': '0', 'post_title_text_color': '#38761d', 'date_first_border_radius_top': '0', 'endSide': 'right', 'date_side': 'right', 'mobile_background_overlay': 'transparent none repeat scroll top left', 'image_background_color': 'transparent', 'post_first_padding_top': '15px', 'list_separator_border_size': '0', 'body_background_color': '#f75151', 'header_text_color': '#000000', 'pager_border_radius_top': '0', 'post_border_color': '#38761d', 'widget_link_color': '#f54e36', 'widget_background_color': '#ffffff', 'date_border_size': '1px', 'body_font': 'normal normal 13px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'footer_background_gradient': 'none', 'link_hover_color': '#f54e36', 'header_background_color': 'transparent', 'keycolor': '#ffffff', 'widget_outer_background_gradient': 'none', 'pager_space_top': '1em', 'footer_background_color': '#ffffff', 'feed_link_color': '#ffffff', 'widget_font': 'normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif', 'pager_background_color': '#ffffff', 'title_separator_border_size': '0', 'date_font': 'normal normal 14px Cherry Cream Soda', 'widget_outer_background_color': 'transparent'}, 'override': '.date-outer, .main-inner .widget\n{\n -webkit-box-shadow: 0px 5px 8px rgba(0, 0, 0, .4);\n -moz-box-shadow: 0px 5px 8px rgba(0, 0, 0, .4);\n -ms-box-shadow: 0px 5px 8px rgba(0, 0, 0, .4);\n box-shadow: 0px 5px 8px rgba(0, 0, 0, .4);\n}'}}, {'name': 'template', 'data': {'name': 'Awesome Inc.', 'localizedName': 'Awesome Inc.', 'variant': 'groovy', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': false}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'title': 'Plausible Nonsense', 'description': 'Nonsensical musings and technical mumbo-jumbo with a few good ideas thrown in.'}}]); _WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', null, document.getElementById('Navbar1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', null, document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_PageListView', new _WidgetInfo('PageList1', 'crosscol', null, document.getElementById('PageList1'), {'title': 'Pages', 'links': [{'href': 'http://www.plausiblenonsense.com/', 'title': 'Home', 'isCurrentPage': true}, {'href': 'http://www.plausiblenonsense.com/p/about.html', 'title': 'About', 'isCurrentPage': false, 'id': '1412330447839962995'}, {'href': 'http://www.plausiblenonsense.com/p/big-thoughts.html', 'title': 'Big Thoughts', 'isCurrentPage': false, 'id': '4732485251648279439'}, {'href': 'http://www.plausiblenonsense.com/p/photoshop.html', 'title': 'Photoshop', 'isCurrentPage': false, 'id': '2705496079998424413'}], 'mobile': false}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', null, document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'viewType': 'FILTERED_POSTMOD', 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/1537631824-lbx.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/368954415-lightbox_bundle.css'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_CustomSearchView', new _WidgetInfo('CustomSearch1', 'sidebar-right-1', null, document.getElementById('CustomSearch1'), {'title': 'Looking for Something Specific?', 'includeBlog': true, 'includePostLinks': true, 'includeWeb': true, 'linkLists': [], 'blogUrl': 'http://www.plausiblenonsense.com/', 'loadingMsg': 'Loading...', 'thisBlogMsg': 'This Blog', 'linkedFromHereMsg': 'Linked From Here', 'theWebMsg': 'The Web', 'backgroundColor': '#ffffff', 'textColor': '#000000', 'dateColor': '#ffffff', 'linkColor': '#f54e36', 'urlColor': '#f54e36', 'visitedLinkColor': '#c44c53', 'borderColor': '#f0b914', 'activeBorderColor': '#f0b914', 'cse_ua': true}, 'displayModeFull')); _WidgetManager._RegisterWidget('_AdSenseView', new _WidgetInfo('AdSense1', 'sidebar-right-1', null, document.getElementById('AdSense1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-right-1', null, document.getElementById('HTML1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-1', null, document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading...'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_ProfileView', new _WidgetInfo('Profile1', 'sidebar-right-1', null, document.getElementById('Profile1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_FollowersView', new _WidgetInfo('Followers1', 'sidebar-right-1', null, document.getElementById('Followers1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_TextView', new _WidgetInfo('Text1', 'sidebar-right-1', null, document.getElementById('Text1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', null, document.getElementById('Attribution1'), {'attribution': 'Awesome Inc. template. Template images by \x3ca href\x3d\x27http://www.istockphoto.com/googleimages.php?id\x3d8555134\x26platform\x3dblogger\x26langregion\x3den\x27 target\x3d\x27_blank\x27\x3edfli\x3c/a\x3e. Powered by \x3ca href\x3d\x27https://www.blogger.com\x27 target\x3d\x27_blank\x27\x3eBlogger\x3c/a\x3e.'}, 'displayModeFull')); ```