<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nate jones interactive</title>
	<atom:link href="http://pixelydo.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://pixelydo.com</link>
	<description>interactive design with a dash of social media expertise</description>
	<lastBuildDate>Tue, 10 Apr 2012 13:45:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Fixing position:fixed in pre-iOS5 + Android</title>
		<link>http://pixelydo.com/fixing-positionfixed-in-pre-ios5-android/</link>
		<comments>http://pixelydo.com/fixing-positionfixed-in-pre-ios5-android/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 04:16:53 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[front]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[iscroll]]></category>
		<category><![CDATA[position:fixed]]></category>
		<category><![CDATA[pre-ios5]]></category>
		<category><![CDATA[web app]]></category>

		<guid isPermaLink="false">http://pixelydo.com/?p=528</guid>
		<description><![CDATA[I just finished up a web app for Columbia College Chicago and, toward the end of development, was unfortunately reminded of pre-iOS 5&#8217;s inconsistent handling of <span class="plain">position:fixed</span>.]]></description>
			<content:encoded><![CDATA[<p>I just finished up a web app for Columbia College Chicago and, toward the end, was unfortunately reminded of pre-iOS 5&rsquo;s inconsistent handling of <span class="plain">position:fixed</span>.</p>
<p>I had a long list of elements within two divs&mdash;one of which was initially <span class="plain">display:none</span>&mdash;and was overlaid by a two-button dock at the bottom. A dock that needed to be <span class="plain">position:fixed</span>.</p>
<p>Basically this:</p>
<pre class="brush: xml; title: ; notranslate">  &lt;div id=&quot;container&quot;&gt;
    &lt;div id=&quot;main&quot; role=&quot;main&quot;&gt;
          &lt;ul class=&quot;lists&quot; id=&quot;presentations&quot;&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
               &lt;li&gt;Thing One&lt;/li&gt;
          &lt;/ul&gt; &lt;!--! end presentations --&gt;
          &lt;ul class=&quot;lists&quot; id=&quot;openvisits&quot; style=&quot;display:none;&quot;&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
               &lt;li&gt;Thing Two&lt;/li&gt;
          &lt;/ul&gt; &lt;!--! end openvisits --&gt;
          &lt;ul id=&quot;dock&quot;&gt;
               &lt;li&gt;&lt;a href=&quot;#&quot; id=&quot;prezis&quot;&gt;presentations&lt;/a&gt;&lt;/li&gt;
               &lt;li&gt;&lt;a href=&quot;#&quot; id=&quot;visits&quot;&gt;open visits&lt;/a&gt;&lt;/li&gt;
          &lt;/ul&gt;
     &lt;/div&gt; &lt;!--! end of #main --&gt;
  &lt;/div&gt; &lt;!--! end of #container --&gt; </pre>
<p>Add this before the closing <span class="plain">body</span> to make the show/hide work:</p>
<pre class="brush: xml; title: ; notranslate">&lt;script&gt;
// basic show and hide
 $(document).ready(function() {
    $('#prezis').click( function(event) {
                 event.preventDefault(); // kills the link from linking
    $('ul#presentations').show();
    $('ul#openvisits').hide();

   });
    $('#visits').click( function(e) {
                e.preventDefault(); // kills the link from linking
    $('ul#presentations').hide();
    $('ul#openvisits').show();
   });
 });
&lt;/script&gt;</pre>
<p>Give your lists some basic style:</p>
<pre class="brush: css; title: ; notranslate">ul.lists {
width:100%;
}
     ul.lists li {
     width:97%;
     padding:2% 1%;
     line-height:20px;
     margin:0;
     float:left;
     display:block;
     position:relative;
     }</pre>
<p>Don&rsquo;t leave out the dock:</p>
<pre class="brush: css; title: ; notranslate">ul#dock {
height:50px;
padding:0;
width:100%;
position:fixed;
left:0;
bottom:0;
display:block;
overflow:hidden;
}
     ul#dock li {
     border-right:solid 1px #444;
     text-align:center;
     width:49%;
     padding:0;
     margin:0;
     height:50px
     float:left;
     display:inline;
     position:relative;
     clear:none;
     background: transparent;
     }
          ul#dock li a {
          position:relative;
          display:block;
          float:left;
          width:49%;
          padding:14px 0 0 0;
          margin:0;
          height:50px;
          background: transparent;
          color:#444;
          font:normal 500 1em helvetica, arial, sans-serif;
          }</pre>
<p>The <a href="http://html5boilerplate.com/mobile">HTML5 Mobile Boilerplate</a> suggests we add this to the <span class="plain">head</span>:</p>
<pre class="brush: xml; title: ; notranslate">&lt;meta name=&quot;HandheldFriendly&quot; content=&quot;True&quot;&gt;
&lt;meta name=&quot;MobileOptimized&quot; content=&quot;320&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;</pre>
<h3>Test it on your iOS5 device and you&rsquo;re ready to roll. Oh yeah. Android. And pre-iOS5. Damn.</h3>
<p>Android is fixed by supplementing your <span class="plain">viewport</span> meta:</p>
<pre class="brush: xml; title: ; notranslate">&lt;meta name=&quot;viewport&quot; content=&quot;width=100%; initial-scale=1.0; maximum-scale=1; minimum-scale=1; user-scalable=no;&quot;&gt;</pre>
<p>For pre-iOS5, we have to turn to iScroll. Thanks to mobile tuts plus for the <a href="http://mobile.tutsplus.com/tutorials/mobile-web-apps/introduction-to-iscroll/" target="_blank">iScroll introduction</a>.</p>
<p><a href="http://cubiq.org/iscroll-4">Cubiq&rsquo;s iScroll</a> exists to allow interior elements to scroll in iOS. We&rsquo;ll have to make some changes to the CSS and HTML, as well as load iScroll.</p>
<p>Add <span class="plain">#wrapper</span> and <span class="plain">#scroll-content</span> inside of <span class="plain">#main</span>.</p>
<pre class="brush: xml; title: ; notranslate">
  &lt;div id=&quot;container&quot;&gt;
    &lt;div id=&quot;main&quot; role=&quot;main&quot;&gt;
	&lt;div id=&quot;wrapper&quot;&gt;
		&lt;div id=&quot;scroll-content&quot;&gt;
			&lt;ul class=&quot;lists&quot; id=&quot;presentations&quot;&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
			&lt;/ul&gt; &lt;!--! end presentations --&gt;
			&lt;ul class=&quot;lists&quot; id=&quot;openvisits&quot; style=&quot;display:none;&quot;&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
			&lt;/ul&gt; &lt;!--! end openvisits --&gt;
		&lt;/div&gt;&lt;!--! end of #scroll-content --&gt;
	&lt;/div&gt;&lt;!--! end of #wrapper --&gt;
				&lt;ul id=&quot;dock&quot;&gt;
					&lt;li&gt;&lt;a href=&quot;#&quot; id=&quot;prezis&quot;&gt;presentations&lt;/a&gt;&lt;/li&gt;
					&lt;li&gt;&lt;a href=&quot;#&quot; id=&quot;visits&quot;&gt;open visits&lt;/a&gt;&lt;/li&gt;
				&lt;/ul&gt;
	&lt;/div&gt; &lt;!--! end of #main --&gt;
  &lt;/div&gt; &lt;!--! end of #container --&gt;
</pre>
<p>Call iScroll, and make it work</p>
<pre class="brush: xml; title: ; notranslate">&lt;script type=&quot;text/javascript&quot; src=&quot;PATH/TO/YOUR/JS/FOLDER/iscroll-lite.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var theScroll;
function scroll() {
	theScroll = new iScroll('wrapper');
	}
	document.addEventListener('DOMContentLoaded', scroll, false);
&lt;/script&gt;
</pre>
<p>Unfortunately, the <span class="plain">#dock</span> needs to be absolutely positioned now, which completely mucks up Android and iOS5. So, we&rsquo;ll use PHP to work with User Agent strings to only give pre-iOS5 devices iScroll.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
//Detect special conditions devices
$iPod = stripos($_SERVER['HTTP_USER_AGENT'],&quot;iPod&quot;);
$iPhone = stripos($_SERVER['HTTP_USER_AGENT'],&quot;iPhone&quot;);
$iPad = stripos($_SERVER['HTTP_USER_AGENT'],&quot;iPad&quot;);
$Android= stripos($_SERVER['HTTP_USER_AGENT'],&quot;Android&quot;);
$webOS = stripos($_SERVER['HTTP_USER_AGENT'],&quot;webOS&quot;);
?&gt;
</pre>
<p>Now that we set the device variables, we can load iScroll &amp; its CSS for only pre-iOS5 devices</p>
<pre class="brush: php; title: ; notranslate">
if( $iPod || $iPhone || $iPad ){
	if(strpos($_SERVER['HTTP_USER_AGENT'], &quot;5_0&quot;) == false) {
		echo '&lt;style&gt;ul#dock { position:absolute!important; left:0; bottom:0; } #scroll-content { position:absolute; width:100%; padding:0; }&lt;/style&gt;';
		echo '&lt;script type=&quot;text/javascript&quot; src=&quot;js/iscroll-lite.js&quot;&gt;&lt;/script&gt;';
		echo '&lt;script type=&quot;text/javascript&quot;&gt;';
		echo 'var theScroll;';
		echo 'function scroll() {';
		echo &quot;theScroll = new iScroll('wrapper');&quot;;
		echo '}';
		echo &quot;document.addEventListener('DOMContentLoaded', scroll, false);&quot;;
		echo '&lt;/script&gt;';
  }
}else if($Android){
}else if($webOS){
}
?&gt;
</pre>
<p>Problem solved.</p>
<p>Here&rsquo;s everything at once:</p>
<pre class="brush: php; title: ; notranslate">
&lt;!doctype html&gt;
&lt;!-- Conditional comment for mobile ie7 http://blogs.msdn.com/b/iemobile/ --&gt;
&lt;!-- Appcache Facts http://appcachefacts.info/ --&gt;
&lt;!--[if IEMobile 7 ]&gt;    &lt;html class=&quot;no-js iem7&quot; manifest=&quot;default.appcache?v=1&quot;&gt; &lt;![endif]--&gt;
&lt;!--[if (gt IEMobile 7)|!(IEMobile)]&gt;&lt;!--&gt; &lt;html class=&quot;no-js&quot;&gt; &lt;!--&lt;![endif]--&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;title&gt;Title&lt;/title&gt;
  &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js&quot;&gt;&lt;/script&gt;
  &lt;!--! Promise me you'll use an external stylesheet when you do this for reals --&gt;
  &lt;style type=&quot;text/css&quot;&gt;
  /* get some reset action */
html, body, div, span, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, figcaption, figure,
footer, header, hgroup, menu, nav, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}
/* the lists */
ul.lists, ul.lists li, ul.lists li a {
z-index: 1;
}

ul.lists {
width:100%;
}
	ul.lists li {
	width:97%;
	padding:2% 1%;
	line-height:20px;
	margin:0;
	float:left;
	display:block;
	position:relative;
    font: normal 300 1em &quot;HelveticaNeue-Light&quot;, &quot;Helvetica Neue Light&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, sans-serif; /* Chris Coyier's brilliant Better Helvetica stack */
	}
		ul.lists li:nth-child(odd){
		background:#f4f4f4;
		}
		ul.lists li:last-child {
		padding-bottom:60px;
		}

/* pretty dock */
ul#dock {
height:50px;
padding:0;
width:100%;
position:fixed;
left:0;
bottom:0;
z-index: 11;
display:block;
overflow:hidden;
background-color: #444444;
background-image: -webkit-gradient(linear, left top, left bottom, from(#444444), to(#333333));
background-image: -webkit-linear-gradient(top, #444444, #333333);
background-image:    -moz-linear-gradient(top, #444444, #333333);
background-image:     -ms-linear-gradient(top, #444444, #333333);
background-image:      -o-linear-gradient(top, #444444, #333333);
background-image:         linear-gradient(top, #444444, #333333);
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#444444', EndColorStr='#333333');
}
	ul#dock li {
	border-right:solid 1px #444;
	text-align:center;
	width:49%;
	padding:0;
	margin:0;
	height:50px
	float:left;
	display:inline;
	position:relative;
	z-index: 12;
	clear:none;
	background: transparent;
	}
		ul#dock li:last-child, ul#dock li:last-child a {
		border:none;
		}
		ul#dock li a {
		font: normal 300 1em &quot;HelveticaNeue-Light&quot;, &quot;Helvetica Neue Light&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, sans-serif;
		color:#fff;
		text-shadow:1px 1px 0px #444;
		border-right:solid 1px #333;
		border-bottom:none;
		text-decoration:none;
		position:relative;
		z-index: 13;
		display:block;
		float:left;
		width:49%;
		padding:14px 0 0 0;
		margin:0;
		height:50px;
		background: transparent;
		}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
//Detect special conditions devices
$iPod = stripos($_SERVER['HTTP_USER_AGENT'],&quot;iPod&quot;);
$iPhone = stripos($_SERVER['HTTP_USER_AGENT'],&quot;iPhone&quot;);
$iPad = stripos($_SERVER['HTTP_USER_AGENT'],&quot;iPad&quot;);
$Android= stripos($_SERVER['HTTP_USER_AGENT'],&quot;Android&quot;);
$webOS = stripos($_SERVER['HTTP_USER_AGENT'],&quot;webOS&quot;);

if( $iPod || $iPhone || $iPad ){
	if(strpos($_SERVER['HTTP_USER_AGENT'], &quot;5_0&quot;) == false) {
		echo '&lt;style&gt;ul#dock { position:absolute!important; left:0; bottom:0; z-index: 11; } #scroll-content { position:absolute; z-index:1; width:100%; padding:0; } header { z-index:9; }&lt;/style&gt;';
		echo '&lt;script type=&quot;text/javascript&quot; src=&quot;js/iscroll-lite.js&quot;&gt;&lt;/script&gt;';
		echo '&lt;script type=&quot;text/javascript&quot;&gt;';
		echo 'var theScroll;';
		echo 'function scroll() {';
		echo &quot;theScroll = new iScroll('wrapper');&quot;;
		echo '}';
		echo &quot;document.addEventListener('DOMContentLoaded', scroll, false);&quot;;
		echo '&lt;/script&gt;';
  }
}else if($Android){
}else if($webOS){
}
?&gt;

  &lt;div id=&quot;container&quot;&gt;
    &lt;div id=&quot;main&quot; role=&quot;main&quot;&gt;
	&lt;div id=&quot;wrapper&quot;&gt;
		&lt;div id=&quot;scroll-content&quot;&gt;
			&lt;ul class=&quot;lists&quot; id=&quot;presentations&quot;&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
				&lt;li&gt;Thing One&lt;/li&gt;
			&lt;/ul&gt; &lt;!--! end presentations --&gt;
			&lt;ul class=&quot;lists&quot; id=&quot;openvisits&quot; style=&quot;display:none;&quot;&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
				&lt;li&gt;Thing Two&lt;/li&gt;
			&lt;/ul&gt; &lt;!--! end openvisits --&gt;
		&lt;/div&gt;&lt;!--! end of #scroll-content --&gt;
	&lt;/div&gt;&lt;!--! end of #wrapper --&gt;
				&lt;ul id=&quot;dock&quot;&gt;
					&lt;li&gt;&lt;a href=&quot;#&quot; id=&quot;prezis&quot;&gt;presentations&lt;/a&gt;&lt;/li&gt;
					&lt;li&gt;&lt;a href=&quot;#&quot; id=&quot;visits&quot;&gt;open visits&lt;/a&gt;&lt;/li&gt;
				&lt;/ul&gt;
	&lt;/div&gt; &lt;!--! end of #main --&gt;
  &lt;/div&gt; &lt;!--! end of #container --&gt;

&lt;script&gt;
// basic show and hide
 $(document).ready(function() {
    $('#prezis').click( function(event) {
  			event.preventDefault();
    $('ul#presentations').show();
    $('ul#openvisits').hide();

   });
    $('#visits').click( function(e) {
 			e.preventDefault();
    $('ul#presentations').hide();
    $('ul#openvisits').show();
   });
 });
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/fixing-positionfixed-in-pre-ios5-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Digital Signage with WordPress</title>
		<link>http://pixelydo.com/flatscreens/</link>
		<comments>http://pixelydo.com/flatscreens/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 15:16:26 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[front]]></category>
		<category><![CDATA[cheap digital signage]]></category>
		<category><![CDATA[digital sign]]></category>
		<category><![CDATA[digital signage]]></category>
		<category><![CDATA[DIY digital signage]]></category>
		<category><![CDATA[flatscreen]]></category>
		<category><![CDATA[free digital signage]]></category>
		<category><![CDATA[sign]]></category>
		<category><![CDATA[signage]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=395</guid>
		<description><![CDATA[When the president of the Chicago campus of The Chicago School of Professional Psychology asked for flatscreen televisions to be hung by each of the elevators and in gathering spaces, most people thought the difficult part would be getting a good price on the TVs.]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE:</strong>It&rsquo;s now on <a href="https://github.com/natejones/DigitalSignageWordpress">Github</a>.</p>
<p>When the president of the Chicago campus of The Chicago School of Professional Psychology asked for flatscreen televisions to be hung by each of the elevators and in gathering spaces, most people thought the difficult part would be getting a good price on the TVs.</p>
<p>
<blockquote>
<p>You won&#8217;t be able to afford digital signage technology.</p>
</blockquote>
<p>The school is also host to an international institute that focuses on marketing messages; specifically digital signage. They were thrilled that the school was going to jump onto the technology, but were stuck on the cost of existing platforms.</p>
<p>The real challenge was dropped on my plate at the end of a status meeting. I was pumped!</p>
<p>&ldquo;The flatscreens are happening. Can you design a layout? <em>And make it sustainable to manage?</em>&rdquo;</p>
<p><a class="fancy" href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens0.png"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens0-150x150.png" alt="" title="flatscreens0" width="150" height="150" class="alignnone size-thumbnail wp-image-422" /></a><a href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens1.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens1-150x150.png" alt="" title="flatscreens1" width="150" height="150" class="alignnone size-thumbnail wp-image-423" /></a><a class="fancy" href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens21.jpg"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens21-150x150.jpg" alt="" title="flatscreens2" width="150" height="150" class="alignnone size-thumbnail wp-image-424" /></a><a class="fancy" href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens31.jpg"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens31-150x150.jpg" alt="" title="flatscreens3" width="150" height="150" class="alignnone size-thumbnail wp-image-425" /></a></p>
<hr />
<h2>I turned to WordPress</h2>
<p>But I knew it needed a strict structure, people couldn&#8217;t be expected to adhere on their own.</p>
<p>The entire screen is filled with carousel that, using @malsup&#8217;s <a href="http://jquery.malsup.com/cycle/">jQuery Cycle Plugin</a>, displays a single post for 18 seconds at a time. There&rsquo;s also a dock at the bottom of the page with four dynamic sidebars that are driven by <a href="http://www.gmarwaha.com/jquery/jcarousellite/">jCarouselLite</a>.</p>
<ul>
<li>the <a href="http://wordpress.org/extend/plugins/more-fields/" target="_blank">More Fields plugin</a> allowed me to add the specific fields I would need:
<ul>
<li>background color</li>
<li>subhead</li>
<li>web address</li>
<li>image</li>
<li>image alignment</li>
<li><a href="http://nathangjones.com/wp-content/uploads/2011/03/post.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/post-150x150.png" alt="" title="post" width="150" height="150" class="alignnone size-thumbnail wp-image-426" /></a></li>
</ul>
</li>
<li>the <a href="http://wordpress.org/extend/plugins/cool-weather/" target="_blank">Weather plugin</a> could be customized for Chicago (<a href="#functions">more details on this later</a>)</li>
<li>the school uses Google calendars, so the <a href="http://wordpress.org/extend/plugins/wordpress-ics-importer/" target="_blank">ICS Calendar plugin</a> pulled in the ICS feed for a scrolling list of events</li>
<li>for a little local color, the <a href="http://wordpress.org/extend/plugins/kb-advanced-rss-widget/" target="_blank">KB Advanced RSS plugin</a> scrolled the great events listed on <a href="http://gapersblock.com/" target="_blank">GapersBlock</a></li>
<li>the <a href="http://wordpress.org/extend/plugins/qr-code-widget/" target="_blank">QR Code Tag plugin</a> automatically generates a QR code for a specified URL</li>
<li>because the design breaks on smaller screens, the <a href="http://wordpress.org/extend/plugins/wordpress-mobile-edition/" target="_blank">WordPress Mobile Edition plugin</a> allowed for mobile visitors to not feel left out</li>
<li>since none of the events are evergreen, the <a href="http://wordpress.org/extend/plugins/post-expirator/" target="_blank">Post Expirator plugin</a> does just what it says</li>
<li>I also built a simple current time plugin (<a href="#time">more on this later</a>)</li>
</ul>
<p><a name="functions"></a></p>
<h2>Let&#8217;s start with functions.php</h2>
<p>The first is fairly straightforward about setting up five sidebars. Yes, five. In order to get the time and weather to not remain the same from when the browser started in the morning, the <em>sidebar</em> sidebar doesn&#8217;t appear on the page directly, but appears in an iFramed house of mirrors.<sup><a href="#weather">1</a></sup></p>
<p>We&#8217;re just registering new sidebars, naming them, giving the title an H3 and a link.</p>
<pre class="brush: php; title: ; notranslate">if ( function_exists('register_sidebar') )
register_sidebar(array('name'=&gt;'sidebar',
          'before_widget' =&gt; '&lt;div&gt;',
          'after_widget' =&gt; '&lt;/div&gt;',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://www.weather.com/weather/today/Chicago+IL+USIL0225?lswe=Chicago,%20IL&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockLeft',
          'before_widget' =&gt; '&lt;div&gt;',
          'after_widget' =&gt; '&lt;/div&gt;',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://www.weather.com/weather/today/Chicago+IL+USIL0225?lswe=Chicago,%20IL&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockCenter',
          'before_widget' =&gt; '',
          'after_widget' =&gt; '',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://ego.thechicagoschool.edu&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockRight',
          'before_widget' =&gt; '',
          'after_widget' =&gt; '',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://gapersblock.com/&quot; target=&quot;_blank&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockFarRight',
          'before_widget' =&gt; '&lt;div&gt;',
          'after_widget' =&gt; '&lt;/div&gt;',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://www.thechicagoschool.edu/content.cfm/academic_calendar&quot; target=&quot;_blank&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));</pre>
<p>After the sidebars are registered, we want to get rid of WordPress&#8217; pesky automatic adding of paragraphs to widgets.</p>
<pre class="brush: xml; title: ; notranslate">remove_filter ('the_content', 'wpautop');</pre>
<p>Finally, we need to be able to get all of the data entered into those additional structured fields</p>
<pre class="brush: php; title: ; notranslate">function get_custom_field_value($szKey, $bPrint = false) {
     global $post;
     $szValue = get_post_meta($post-&gt;ID, $szKey, true);
     if ( $bPrint == false ) return $szValue; else echo $szValue;
}
</pre>
<p>We&#8217;re left with this as functions.php</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
if ( function_exists('register_sidebar') )
register_sidebar(array('name'=&gt;'sidebar',
          'before_widget' =&gt; '&lt;div&gt;',
          'after_widget' =&gt; '&lt;/div&gt;',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://www.weather.com/weather/today/Chicago+IL+USIL0225?lswe=Chicago,%20IL&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockLeft',
          'before_widget' =&gt; '&lt;div&gt;',
          'after_widget' =&gt; '&lt;/div&gt;',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://www.weather.com/weather/today/Chicago+IL+USIL0225?lswe=Chicago,%20IL&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockCenter',
          'before_widget' =&gt; '',
          'after_widget' =&gt; '',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://ego.thechicagoschool.edu&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockRight',
          'before_widget' =&gt; '',
          'after_widget' =&gt; '',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://gapersblock.com/&quot; target=&quot;_blank&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
register_sidebar(array('name' =&gt; 'DockFarRight',
          'before_widget' =&gt; '&lt;div&gt;',
          'after_widget' =&gt; '&lt;/div&gt;',
          'before_title' =&gt; '&lt;h3&gt;&lt;a href=&quot;http://www.thechicagoschool.edu/content.cfm/academic_calendar&quot; target=&quot;_blank&quot;&gt;',
          'after_title' =&gt; '&lt;/a&gt;&lt;/h3&gt;',
));
remove_filter ('the_content', 'wpautop');
function get_custom_field_value($szKey, $bPrint = false) {
     global $post;
     $szValue = get_post_meta($post-&gt;ID, $szKey, true);
     if ( $bPrint == false ) return $szValue; else echo $szValue;
}
?&gt;</pre>
<p><a name="header"></a></p>
<h2>Next, tackle header.php</h2>
<p>This content would be changing regularly and needed to appear fresh as close to immediately as possible, so I added a meta refresh on every hour. Also, a meta nocache.</p>
<pre class="brush: xml; title: ; notranslate"> &lt;meta http-equiv=&quot;refresh&quot; content=&quot;3600&quot;&gt;
     &lt;meta http-equiv=&quot;pragma&quot; content=&quot;nocache&quot;&gt;</pre>
<p>jQuery is called from Google, and <a href="http://jquery.malsup.com/cycle/">jQuery Cycle Plugin</a> and <a href="http://www.gmarwaha.com/jquery/jcarousellite/">jCarouselLite</a> are called immediately after.</p>
<pre class="brush: xml; title: ; notranslate">&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
     &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('stylesheet_directory'); ?&gt;/scripts/jquery.cycle.all.js&quot;&gt;&lt;/script&gt;
     &lt;script src=&quot;&lt;?php bloginfo('stylesheet_directory'); ?&gt;/scripts/jcarousellite_1.0.1c4.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Next, the settings for the main windown and the three scrolling sidebars on the dock are set.</p>
<pre class="brush: xml; title: ; notranslate">     &lt;script type=&quot;text/javascript&quot;&gt;
          $(document).ready(function(){
               $('#myslides').cycle({
                    fx: 'fade',
                    speed: 1000,
                    timeout: 18000
               });
               $(&quot;.scroll&quot;).jCarouselLite({
                    vertical: true,
                    hoverPause:false,
                    visible: 1,
                    auto:9000,
                    speed:500
               });
               $(&quot;.scroll2&quot;).jCarouselLite({
                    vertical: true,
                    hoverPause:false,
                    visible: 2,
                    auto:11000,
                    speed:500
               });
               $(&quot;.scroll3&quot;).jCarouselLite({
                    vertical: true,
                    hoverPause:false,
                    visible: 2,
                    auto:7000,
                    speed:500
               });
          });
     &lt;/script&gt;
</pre>
<p>That leaves us with this:</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
     &lt;meta charset=&quot;utf-8&quot; /&gt;
     &lt;meta http-equiv=&quot;refresh&quot; content=&quot;3600&quot;&gt;
     &lt;meta http-equiv=&quot;pragma&quot; content=&quot;nocache&quot;&gt;
     &lt;title&gt;&lt;?php bloginfo('name'); ?&gt;&lt;/title&gt;
     &lt;meta name=&quot;description&quot; content=&quot;&lt;?php bloginfo('description'); ?&gt;&quot; /&gt;
     &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;&lt;?php bloginfo('stylesheet_url'); ?&gt;&quot; /&gt;
     &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
     &lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('stylesheet_directory'); ?&gt;/scripts/jquery.cycle.all.js&quot;&gt;&lt;/script&gt;
     &lt;script src=&quot;&lt;?php bloginfo('stylesheet_directory'); ?&gt;/scripts/jcarousellite_1.0.1c4.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
     &lt;script type=&quot;text/javascript&quot;&gt;
          $(document).ready(function(){
               $('#myslides').cycle({
                    fx: 'fade',
                    speed: 1000,
                    timeout: 18000
               });
               $(&quot;.scroll&quot;).jCarouselLite({
                    vertical: true,
                    hoverPause:false,
                    visible: 1,
                    auto:9000,
                    speed:500
               });
               $(&quot;.scroll2&quot;).jCarouselLite({
                    vertical: true,
                    hoverPause:false,
                    visible: 2,
                    auto:11000,
                    speed:500
               });
               $(&quot;.scroll3&quot;).jCarouselLite({
                    vertical: true,
                    hoverPause:false,
                    visible: 2,
                    auto:7000,
                    speed:500
               });
          });
     &lt;/script&gt;
          &lt;?php wp_head() ?&gt;
&lt;/head&gt;
&lt;body&gt;</pre>
<p><a name="home"></a></p>
<h2>Home.php is next</h2>
<p>I was on a real <em>home.php</em> kick at the time, but there&#8217;s no reason why index.php wouldn&#8217;t work for this as well. It&#8217;s probably smarter that way anyway.</p>
<p>First things first; call header.php</p>
<pre class="brush: xml; title: ; notranslate">&lt;?php get_header() ?&gt;</pre>
<p>Next, the big part. We&#8217;ll build out the slideshow. Get the posts, order them randomly and call the <em>background color</em> field to set the class for the wrapper.</p>
<pre class="brush: xml; title: ; notranslate">&lt;div id=&quot;myslides&quot;&gt;
          &lt;?php query_posts(&quot;orderby=rand&quot;); $i = 1;  ?&gt;
          &lt;?php while (have_posts()) : the_post(); ?&gt;
               &lt;div class=&quot;&lt;?php $key=&quot;background&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&quot;&gt;
</pre>
<p>Next, call the <em>post title</em>, <em>subhead</em> field and <em>image</em> field. Call the <em>image alignment</em> field to set the class of the image. Finally, call the content of the post</p>
<pre class="brush: xml; title: ; notranslate">
&lt;h1&gt;&lt;?php the_title() ?&gt;&lt;/h1&gt;
&lt;h2&gt;&lt;?php $key=&quot;subhead&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;&lt;?php $key=&quot;image&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&quot; class=&quot;&lt;?php $key=&quot;imagealign&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&quot; /&gt;
&lt;?php the_content(); ?&gt;&lt;/p&gt;
</pre>
<p>Now, the fun part&mdash;create the QR code on the fly, by calling the <em>web address</em> field.</p>
<pre class="brush: xml; title: ; notranslate">&lt;p class=&quot;url&quot;&gt;
&lt;img src=&quot;&lt;?php $key=&quot;webaddress&quot;;
  global $qrcodetag;
  echo $qrcodetag-&gt;getQrCodeUrl(get_post_meta($post-&gt;ID, $key, true),248,'UTF-8','L',4,0);
?&gt;&quot; /&gt;
</pre>
<p>Tidy everything up.</p>
<pre class="brush: xml; title: ; notranslate">                    &lt;/div&gt;&lt;!--.container--&gt;
               &lt;/div&gt;&lt;!--color--&gt;
     &lt;?php endwhile; ?&gt;
     &lt;/div&gt;&lt;!--#myslides--&gt;
</pre>
<p>Now, on to the pseudo dock, where we have a little location message and call our sidebars.</p>
<pre class="brush: xml; title: ; notranslate">     &lt;div id=&quot;dock&quot;&gt;
     &lt;a href=&quot;http://ego.thechicagoschool.edu/&quot; class=&quot;youarehere&quot;&gt;The Chicago School, Chicago campus&lt;/a&gt;
          &lt;div class=&quot;dockleft&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockLeft)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockleft --&gt;
          &lt;div class=&quot;dockcenter&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockCenter)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockcenter --&gt;
          &lt;div class=&quot;dockright&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockRight)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockright --&gt;
          &lt;div class=&quot;dockfarright&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockFarRight)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockfarright --&gt;
     &lt;/div&gt; &lt;!-- #dock --&gt;
</pre>
<p>That leaves us with this for the home.php or index.php file</p>
<pre class="brush: xml; title: ; notranslate">&lt;?php get_header() ?&gt;

&lt;div id=&quot;myslides&quot;&gt;
          &lt;?php query_posts(&quot;orderby=rand&quot;); $i = 1;  ?&gt;
          &lt;?php while (have_posts()) : the_post(); ?&gt;
               &lt;div class=&quot;&lt;?php $key=&quot;background&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&quot;&gt;
                    &lt;div class=&quot;container&quot;&gt;
                         &lt;h1&gt;&lt;?php the_title() ?&gt;&lt;/h1&gt;
                         &lt;h2&gt;&lt;?php $key=&quot;subhead&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&lt;/h2&gt;
                         &lt;p&gt;&lt;img src=&quot;&lt;?php $key=&quot;image&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&quot; class=&quot;&lt;?php $key=&quot;imagealign&quot;; echo get_post_meta($post-&gt;ID, $key, true); ?&gt;&quot; /&gt;
                              &lt;?php the_content(); ?&gt;&lt;/p&gt;
&lt;p class=&quot;url&quot;&gt;
&lt;img src=&quot;&lt;?php $key=&quot;webaddress&quot;;
  global $qrcodetag;
  echo $qrcodetag-&gt;getQrCodeUrl(get_post_meta($post-&gt;ID, $key, true),248,'UTF-8','L',4,0);
?&gt;&quot; /&gt;
                    &lt;/div&gt;&lt;!--.container--&gt;
               &lt;/div&gt;&lt;!--color--&gt;
     &lt;?php endwhile; ?&gt;
     &lt;/div&gt;&lt;!--#myslides--&gt;
     &lt;div id=&quot;dock&quot;&gt;
     &lt;a href=&quot;http://ego.thechicagoschool.edu/&quot; class=&quot;youarehere&quot;&gt;&lt;img class=&quot;ted&quot; src=&quot;http://full/path/to/wp-content/uploads/Ted-Rubenstein1.jpg&quot; /&gt; Dr. Ted Rubenstein, 1964-2010&lt;/a&gt;
          &lt;div class=&quot;dockleft&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockLeft)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockleft --&gt;
          &lt;div class=&quot;dockcenter&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockCenter)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockcenter --&gt;
          &lt;div class=&quot;dockright&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockRight)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockright --&gt;
          &lt;div class=&quot;dockfarright&quot;&gt;
               &lt;?php if(function_exists('dynamic_sidebar') &amp;&amp; dynamic_sidebar(DockFarRight)) : ?&gt;
               &lt;?php endif; ?&gt;
          &lt;/div&gt; &lt;!-- .dockfarright --&gt;
     &lt;/div&gt; &lt;!-- #dock --&gt;
&lt;?php get_footer() ?&gt;</pre>
<p><a name="time"></a></p>
<h2>Current Time plugin</h2>
<p>After looking and looking for a current time plugin that displayed exactly how I needed, I gave up and decided to write my own simple plugin for it. Look up your <a href="http://php.net/manual/en/timezones.php">PHP timezone</a>, and you&#8217;ll be all set.</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
/*
Plugin Name: Current Time
Plugin URI: http://nathangjones.com/
Description: Current Time WordPress Plugin
Author: nate jones
Version: 1
Author URI: http://nathangjones.com/
*/

function currentTime()
{
     date_default_timezone_set('America/Chicago');
     $time = date(&quot;g:i a&quot;);
     $date = date(&quot;M j&quot;);
     echo '&lt;span class=&quot;time&quot;&gt;';
     echo $time;
     echo '&lt;/span&gt;';
     echo '&lt;br /&gt;';
     echo '&lt;span class=&quot;date&quot;&gt;';
     echo $date;
     echo '&lt;/span&gt;';
}

function widget_currentTime($args) {
  extract($args);
  echo $before_widget;
  echo $before_title;?&gt;&lt;?php echo $after_title;
  currentTime();
  echo $after_widget;
}

function currentTime_init()
{
  register_sidebar_widget(__('Current Time'), 'widget_currentTime');
}
add_action(&quot;plugins_loaded&quot;, &quot;currentTime_init&quot;);
?&gt;</pre>
<p><a name="weather"></a></p>
<h2>iFrame house of mirrors</h2>
<p>As I mentioned before, displaying weather and time wasn&#8217;t a big deal. The big deal was that they&#8217;d only be accurate for the first minute of the day. I&#8217;m sure there&#8217;s a more elegant way to conduct this business, I was just stumped and found this to work for me.</p>
<p><strong>Enter the house of mirrors</strong></p>
<p>We already created the sidebar, but it&#8217;s just not displayed on the screen. So we&#8217;ll create <em>weather.html</em> and iFrame in that sidebar. Then we&#8217;ll iframe weather.html in our dock, and set it to refresh every minute. Unnecessarily complicated, no? First, let&#8217;s call the stylesheet and jQuery</p>
<pre class="brush: xml; title: ; notranslate">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;full/path/to/style.css&quot; /&gt;
     &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Next, for a hint of simplicity, we&#8217;ll duplicate the same DIVs that appear in the WordPress site.</p>
<pre class="brush: xml; title: ; notranslate">&lt;dock id=&quot;dockleft&quot;&gt;
     &lt;div&gt;
          &lt;div class=&quot;textwidget&quot;&gt;
               &lt;iframe src=&quot;http://full/path/to/left-dock/&quot; scrolling=&quot;no&quot; height=&quot;100%&quot; widht=&quot;100%&quot; style=&quot;height:100%; width:100%; background:transparent; border:none;&quot;&gt;&lt;/iframe&gt;
          &lt;/div&gt;
     &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Finally, to make the incessant refreshing of content appear a little less obvious and more refined, let&#8217;s ease it in and out</p>
<pre class="brush: xml; title: ; notranslate">&lt;script&gt;
var refreshId = setInterval(function()
{
      $('#dockleft').fadeOut(&quot;fast&quot;).load('http://full/path/to/left-dock/').fadeIn(&quot;fast&quot;);
}, 15000);
&lt;/script&gt;</pre>
<p>That leaves us here for weather.html</p>
<pre class="brush: xml; title: ; notranslate">&lt;html&gt;
&lt;head&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://full/path/to/style.css&quot; /&gt;
     &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;

&lt;script&gt;
var refreshId = setInterval(function()
{
      $('#dockleft').fadeOut(&quot;fast&quot;).load('http://full/path/to/left-dock/').fadeIn(&quot;fast&quot;);
}, 15000);
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;dock id=&quot;dockleft&quot;&gt;
     &lt;div&gt;
          &lt;div class=&quot;textwidget&quot;&gt;
               &lt;iframe src=&quot;http://full/path/to/left-dock/&quot; scrolling=&quot;no&quot; height=&quot;100%&quot; widht=&quot;100%&quot; style=&quot;height:100%; width:100%; background:transparent; border:none;&quot;&gt;&lt;/iframe&gt;
          &lt;/div&gt;
     &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;</pre>
<p><a name="footer"></a></p>
<h2>Footer</h2>
<p>Nothing to see here. Just closing up the wrapper</p>
<pre class="brush: xml; title: ; notranslate">     &lt;div class=&quot;footer&quot;&gt;
          &lt;?php wp_footer() ?&gt;
     &lt;/div&gt;&lt;!-- footer --&gt;
     &lt;/div&gt;&lt;!-- wrapper --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p><a name="widgets"></a></p>
<h2>Placing the widgets into their respective sidebars</h2>
<p>Drag the <em>Weather</em> and <em>Current Time</em> widgets into the <em>sidebar</em> sidebar. Then a text widget into the <em>DockLeft</em> sidebar to iframe in <em>weather.html</em></p>
<pre class="brush: xml; title: ; notranslate">&lt;iframe src=&quot;http://full/path/to/weather.html&quot; scrolling=&quot;no&quot; height=&quot;100%&quot; widht=&quot;100%&quot; style=&quot;height:100%; width:100%; background:transparent;&quot;&gt;&lt;/iframe&gt;</pre>
<p><a href="http://nathangjones.com/wp-content/uploads/2011/03/widgets.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/widgets-150x150.png" alt="" title="widgets" width="150" height="150" class="alignnone size-thumbnail wp-image-427" /></a></p>
<p><a name="css"></a></p>
<h2>Finally, some style</h2>
<p>CSS is my favorite thing to do. It&#8217;s how I decompress and relax.</p>
<p>First the architecture, with one tiny trick. The TVs would be using Chrome to display the site in full-screen. The only problem was that they automatically put the cursor dead-center on the screen, which is a sure give away that it&#8217;s a website. So we replace the cursor with an image; a 98% transparent PNG. </p>
<pre class="brush: css; title: ; notranslate">
html{
height:100%;
margin:0;
padding:0;
width:100%;
background:transparent;
}
* {
margin:0;
padding:0;
}
a:link, a:visited, a:hover, a:active{
outline:none;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
}
body{
padding:0;
height:100%;
width:100%;
background:transparent;
text-align:left;
overflow:hidden;
cursor: url(images/blank.png), default;
}</pre>
<p>Next, the fonts and content.</p>
<pre class="brush: css; title: ; notranslate">@font-face {
     font-family: 'TradeGothicLTStdLight';
     src: url('fonts/TradeGothicLTStd-Light.eot');
     src: local('fonts/Trade Gothic LT Std'), local('fonts/TradeGothicLTStd-Light'), url('fonts/TradeGothicLTStd-Light.woff') format('woff'), url('fonts/TradeGothicLTStd-Light.ttf') format('truetype');
}

@font-face {
     font-family: 'TradeGothicLTStdRegular';
     src: url('fonts/TradeGothicLTStd.eot');
     src: local('fonts/Trade Gothic LT Std'), local('fonts/TradeGothicLTStd'), url('fonts/TradeGothicLTStd.woff') format('woff'), url('fonts/TradeGothicLTStd.ttf') format('truetype');
}

@font-face {
     font-family: 'TradeGothicLTStdBold';
     src: url('fonts/TradeGothicLTStd-Bold.eot');
     src: local('fonts/Trade Gothic LT Std'), local('fonts/TradeGothicLTStd-Bold'), url('fonts/TradeGothicLTStd-Bold.woff') format('woff'), url('fonts/TradeGothicLTStd-Bold.ttf') format('truetype');
}

#myslides h1{
font:normal 500 4.5em 'TradeGothicLTStdBold';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:2% 0 0 2%;
}
#myslides h2{
font:normal 500 3.5em 'TradeGothicLTStdRegular';
color:#d8d8d8;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:1% 2%;
clear:left;
}
#myslides p{
font:normal 500 2.5em 'TradeGothicLTStdRegular';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:1% 2%;
clear:left;
width:90%;
}
#myslides p.url{
font:normal 500 1.5em 'TradeGothicLTStdRegular';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
display:block;
position:absolute;
bottom:6%;
right:2%;
/*-- float:right;
margin:2% 2% 1% 2%;
clear:left; --*/
width:90%;
text-align:right;
}
#myslides p.url a, p.url a:visited{
font:normal 500 1em 'TradeGothicLTStdRegular';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
display:inline;
margin:1% 2%;
width:90%;
text-decoration:none;
}
#myslides p.url a:hover{
text-decoration:underline;
}
#myslides p.url img{
width:10%;
margin:0;
vertical-align: bottom;
}
img.Left, img.left{
box-shadow:0px 0px 12px rgba(0,0,0,.5);
-moz-box-shadow:0px 0px 12px rgba(0,0,0,.5);
-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.5);
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
float:left;
display:inline;
margin:1%;
text-decoration:none;
outline:none;
width:30%;
max-height: 50%;
}
img.Right, img.right{
box-shadow:0px 0px 12px rgba(0,0,0,.5);
-moz-box-shadow:0px 0px 12px rgba(0,0,0,.5);
-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.5);
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
float:right;
display:inline;
margin:1%;
text-decoration:none;
outline:none;
width:30%;
max-height:50%;
}</pre>
<p>Now, some styles that are specific to main post. Including the background color of the sllides.</p>
<pre class="brush: css; title: ; notranslate">div#myslides{
height:100%;
width:100%;
position:relative;
overflow:hidden;
clear:both;
}
div#myslides div{
height:100%;
width:100%;
float:left;
display:block;
clear:both;
position:relative;
}
div#myslides div.container{
max-height:85%;
width:100%;
position:absolute;
top:0;
left:0;
background:transparent;
}
div#myslides div.Brown{
background:url(background/brown.jpg) 0 0 repeat-x;
}
div#myslides div.Darkblue, div#myslides div.DarkBlue{
background:url(background/darkblue.jpg) 0 0 repeat-x;
}
div#myslides div.Green{
background:url(background/green.jpg) 0 0 repeat-x;
}
div#myslides div.Lightblue{
background:url(background/lightblue.jpg) 0 0 repeat-x;
}
div#myslides div.Orange{
background:url(background/orange.jpg) 0 0 repeat-x;
}
div#myslides div.Purple{
background:url(background/purple.jpg) 0 0 repeat-x;
}
div#myslides div.Red{
background:url(background/red.jpg) 0 0 repeat-x;
}</pre>
<p>Next up, the dock.</p>
<pre class="brush: css; title: ; notranslate">#dock{
position:absolute;
z-index:99;
bottom:0;
left:0;
height:20%;
width:100%;
background:-webkit-gradient(linear, left top, left bottom, from(rgba(137,137,137,0.8)), to(rgba(54,54,54,0.8)), color-stop(.3,#333333));
background: -moz-linear-gradient(bottom, rgba(137,137,137,0.8), rgba(54,54,54,0.8));
box-shadow:-2px 0px 12px rgba(0,0,0,.6);
-moz-box-shadow:-2px 0px 12px rgba(0,0,0,.6);
-webkit-box-shadow:-2px 0px 12px rgba(0,0,0,.6);
border-top-left-radius:18px;
-moz-border-radius-topleft:18px;
-webkit-border-top-left-radius:18px;
border-top-right-radius:18px;
-moz-border-radius-topright:18px;
-webkit-border-top-right-radius:18px;
}
#dock div{
float:left;
display:inline;
border-right:dotted .11em #fff;
height:95%;
margin:5px 1% 0 0;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
padding:0 1%;
overflow:hidden;
}
#dock div.dockleft{
padding-left:2%;
width:8%;
height:100%;
}
#dock div.dockcenter{
width:26%;
height:100%;
}
#dock div.dockright{
width:26%;
height:100%;
}
#dock div.dockfarright{
width:26%;
border-right:none;
height:100%;
}
#dock div div{
width:100%;
border:none;
height:100%;
margin:0;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
padding:0 1%;
}
#dock img{
padding:1%;
}
#dock h3, #pagesidebar h3{
font:normal 500 2.2em 'TradeGothicLTStdBold';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:0 0 5px 0;
line-height:1em;
}
#dock span.temp, #pagesidebar span.temp{
font:normal 500 200% 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:inline;
margin:1% 2%;
}
h3 span.addy{
clear:none;
font:normal 500 40% 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
display:inline;
float:right;
margin:1.3em 0 0 4em;
}
#dock ul, #pagesidebar ul{
list-style:none;
width:100%;
float:left;
display:block;
font:normal 500 1.6em 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
}
#dock ul li, #pagesidebar ul li{
margin:0 0 .1em 0;
padding-bottom:10px;
}
#dock a, #dock a:visited, #pagesidebar a, #pagesidebar a:visited{
text-decoration:none;
}
#dock a:hover, #pagesidebar a:hover{
text-decoration:underline;
}
#dock .youarehere, #dock a.youarehere:visited{
font:normal 500 1.7em 'TradeGothicLTStdLight';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
text-decoration:none;
display:inline;
position:absolute;
top:-33%;
left:2%;
background:transparent;
width:33%;
}
#dock a.youarehere:hover{
color:#1A1A1A;
text-shadow:0px 1px 1px #f4f4f4;
text-decoration:none;
background:#f4f4f4;
}
img.ted{
background:transparent;
text-decoration:none;
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
height:24%;
display:inline;
position:relative;
}
span.time, span.date{
font:normal 500 175% 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:inline;
margin:0;
clear:left;
}
span.time{
border-top:dotted 1px #fff;
}</pre>
<p>Some styles for the ICS Calendar widget.</p>
<pre class="brush: css; title: ; notranslate">.scroll ul, .scroll2 ul, .scroll3 ul, .scroll ul li, .scroll2 ul li{
height:100%;
}
.scroll3 ul li, .scroll2 ul li{
height:40%;
}
ul#ics-calendar-widget{
width:100%;
list-style:none;
}
ul#ics-calendar-widget li.item{
font-family:'TradeGothicLTStdRegular';
}
ul#ics-calendar-widget li.item a{
font-family:'TradeGothicLTStdBold';
}
div.scroll ul li:first-line{
font-family:'TradeGothicLTStdBold';
}
span.tiny{
font:oblique 500 12px arial;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
}
div.scroll3 ul li a, div.scroll2 ul li a, div.scroll ul li a{
font:500 1.2em 'TradeGothicLTStdBold';
}
#dock div.scroll3 ul li{
padding-bottom:5px;
}</pre>
<p>Finally, making the time &#038; weather look right.</p>
<pre class="brush: css; title: ; notranslate">#pagesidebar{
width:100%;
height:100%;
background:transparent;
display:block;
position:absolute;
top:0;
left:0;
border:none;
}
iframe{
background:transparent;
border:none;
}</pre>
<p>That leaves us here for the stylesheet.</p>
<pre class="brush: css; title: ; notranslate">
/*----------Architecture----------*/
html{
height:100%;
margin:0;
padding:0;
width:100%;
background:transparent;
}
* {
margin:0;
padding:0;
}
a:link, a:visited, a:hover, a:active{
outline:none;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
}
body{
padding:0;
height:100%;
width:100%;
background:transparent;
text-align:left;
overflow:hidden;
cursor: url(images/blank.png), default;
}

/*----------CONTENT----------*/
@font-face {
     font-family: 'TradeGothicLTStdLight';
     src: url('fonts/TradeGothicLTStd-Light.eot');
     src: local('fonts/Trade Gothic LT Std'), local('fonts/TradeGothicLTStd-Light'), url('fonts/TradeGothicLTStd-Light.woff') format('woff'), url('fonts/TradeGothicLTStd-Light.ttf') format('truetype');
}

@font-face {
     font-family: 'TradeGothicLTStdRegular';
     src: url('fonts/TradeGothicLTStd.eot');
     src: local('fonts/Trade Gothic LT Std'), local('fonts/TradeGothicLTStd'), url('fonts/TradeGothicLTStd.woff') format('woff'), url('fonts/TradeGothicLTStd.ttf') format('truetype');
}

@font-face {
     font-family: 'TradeGothicLTStdBold';
     src: url('fonts/TradeGothicLTStd-Bold.eot');
     src: local('fonts/Trade Gothic LT Std'), local('fonts/TradeGothicLTStd-Bold'), url('fonts/TradeGothicLTStd-Bold.woff') format('woff'), url('fonts/TradeGothicLTStd-Bold.ttf') format('truetype');
}

#myslides h1{
font:normal 500 4.5em 'TradeGothicLTStdBold';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:2% 0 0 2%;
}
#myslides h2{
font:normal 500 3.5em 'TradeGothicLTStdRegular';
color:#d8d8d8;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:1% 2%;
clear:left;
}
#myslides p{
font:normal 500 2.5em 'TradeGothicLTStdRegular';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:1% 2%;
clear:left;
width:90%;
}
#myslides p.url{
font:normal 500 1.5em 'TradeGothicLTStdRegular';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
display:block;
position:absolute;
bottom:6%;
right:2%;
/*-- float:right;
margin:2% 2% 1% 2%;
clear:left; --*/
width:90%;
text-align:right;
}
#myslides p.url a, p.url a:visited{
font:normal 500 1em 'TradeGothicLTStdRegular';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
display:inline;
margin:1% 2%;
width:90%;
text-decoration:none;
}
#myslides p.url a:hover{
text-decoration:underline;
}
#myslides p.url img{
width:10%;
margin:0;
vertical-align: bottom;
}
img.Left, img.left{
box-shadow:0px 0px 12px rgba(0,0,0,.5);
-moz-box-shadow:0px 0px 12px rgba(0,0,0,.5);
-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.5);
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
float:left;
display:inline;
margin:1%;
text-decoration:none;
outline:none;
width:30%;
max-height: 50%;
}
img.Right, img.right{
box-shadow:0px 0px 12px rgba(0,0,0,.5);
-moz-box-shadow:0px 0px 12px rgba(0,0,0,.5);
-webkit-box-shadow:0px 0px 12px rgba(0,0,0,.5);
border-radius:7px;
-moz-border-radius:7px;
-webkit-border-radius:7px;
float:right;
display:inline;
margin:1%;
text-decoration:none;
outline:none;
width:30%;
max-height:50%;
}

/*----------SLIDER----------*/
div#myslides{
height:100%;
width:100%;
position:relative;
overflow:hidden;
clear:both;
}
div#myslides div{
height:100%;
width:100%;
float:left;
display:block;
clear:both;
position:relative;
}
div#myslides div.container{
max-height:85%;
width:100%;
position:absolute;
top:0;
left:0;
background:transparent;
}
div#myslides div.Brown{
background:url(background/brown.jpg) 0 0 repeat-x;
}
div#myslides div.Darkblue, div#myslides div.DarkBlue{
background:url(background/darkblue.jpg) 0 0 repeat-x;
}
div#myslides div.Green{
background:url(background/green.jpg) 0 0 repeat-x;
}
div#myslides div.Lightblue{
background:url(background/lightblue.jpg) 0 0 repeat-x;
}
div#myslides div.Orange{
background:url(background/orange.jpg) 0 0 repeat-x;
}
div#myslides div.Purple{
background:url(background/purple.jpg) 0 0 repeat-x;
}
div#myslides div.Red{
background:url(background/red.jpg) 0 0 repeat-x;
}

/*----------DOCK----------*/
#dock{
position:absolute;
z-index:99;
bottom:0;
left:0;
height:20%;
width:100%;
background:-webkit-gradient(linear, left top, left bottom, from(rgba(137,137,137,0.8)), to(rgba(54,54,54,0.8)), color-stop(.3,#333333));
background: -moz-linear-gradient(bottom, rgba(137,137,137,0.8), rgba(54,54,54,0.8));
box-shadow:-2px 0px 12px rgba(0,0,0,.6);
-moz-box-shadow:-2px 0px 12px rgba(0,0,0,.6);
-webkit-box-shadow:-2px 0px 12px rgba(0,0,0,.6);
border-top-left-radius:18px;
-moz-border-radius-topleft:18px;
-webkit-border-top-left-radius:18px;
border-top-right-radius:18px;
-moz-border-radius-topright:18px;
-webkit-border-top-right-radius:18px;
}
#dock div{
float:left;
display:inline;
border-right:dotted .11em #fff;
height:95%;
margin:5px 1% 0 0;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
padding:0 1%;
overflow:hidden;
}
#dock div.dockleft{
padding-left:2%;
width:8%;
height:100%;
}
#dock div.dockcenter{
width:26%;
height:100%;
}
#dock div.dockright{
width:26%;
height:100%;
}
#dock div.dockfarright{
width:26%;
border-right:none;
height:100%;
}
#dock div div{
width:100%;
border:none;
height:100%;
margin:0;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
padding:0 1%;
}
#dock img{
padding:1%;
}
#dock h3, #pagesidebar h3{
font:normal 500 2.2em 'TradeGothicLTStdBold';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:block;
margin:0 0 5px 0;
line-height:1em;
}
#dock span.temp, #pagesidebar span.temp{
font:normal 500 200% 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:inline;
margin:1% 2%;
}
h3 span.addy{
clear:none;
font:normal 500 40% 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
display:inline;
float:right;
margin:1.3em 0 0 4em;
}
#dock ul, #pagesidebar ul{
list-style:none;
width:100%;
float:left;
display:block;
font:normal 500 1.6em 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
}
#dock ul li, #pagesidebar ul li{
margin:0 0 .1em 0;
padding-bottom:10px;
}
#dock a, #dock a:visited, #pagesidebar a, #pagesidebar a:visited{
text-decoration:none;
}
#dock a:hover, #pagesidebar a:hover{
text-decoration:underline;
}
#dock .youarehere, #dock a.youarehere:visited{
font:normal 500 1.7em 'TradeGothicLTStdLight';
color:#ccc;
text-shadow:0px 1px 1px #2b2b2b;
text-decoration:none;
display:inline;
position:absolute;
top:-33%;
left:2%;
background:transparent;
width:33%;
}
#dock a.youarehere:hover{
color:#1A1A1A;
text-shadow:0px 1px 1px #f4f4f4;
text-decoration:none;
background:#f4f4f4;
}
span.time, span.date{
font:normal 500 175% 'TradeGothicLTStdRegular';
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
float:left;
display:inline;
margin:0;
clear:left;
}
span.time{
border-top:dotted 1px #fff;
}
/*----------GCAL----------*/
.scroll ul, .scroll2 ul, .scroll3 ul, .scroll ul li, .scroll2 ul li{
height:100%;
}
.scroll3 ul li, .scroll2 ul li{
height:40%;
}
ul#ics-calendar-widget{
width:100%;
list-style:none;
}
ul#ics-calendar-widget li.item{
font-family:'TradeGothicLTStdRegular';
}
ul#ics-calendar-widget li.item a{
font-family:'TradeGothicLTStdBold';
}
div.scroll ul li:first-line{
font-family:'TradeGothicLTStdBold';
}
span.tiny{
font:oblique 500 12px arial;
color:#fff;
text-shadow:0px 1px 1px #2b2b2b;
}
div.scroll3 ul li a, div.scroll2 ul li a, div.scroll ul li a{
font:500 1.2em 'TradeGothicLTStdBold';
}
#dock div.scroll3 ul li{
padding-bottom:5px;
}

/*----------WEATHER/TIME----------*/
#pagesidebar{
width:100%;
height:100%;
background:transparent;
display:block;
position:absolute;
top:0;
left:0;
border:none;
}
iframe{
background:transparent;
border:none;
}</pre>
<h2>Security</h2>
<p>Also, because I&#8217;m paranoid, I installed these security plugins and have a 50-character password safely generated by <a href="http://agilewebsolutions.com/onepassword" target="_blank">1Password</a></p>
<ul>
<li>Audit Trail</li>
<li>Invisible Defender</li>
<li>Login LockDown</li>
<li>Secure WordPress</li>
<li>WP Security Scan</li>
<li>WordPress Database Backup</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/flatscreens/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>WordPress Digital Signage</title>
		<link>http://pixelydo.com/wordpress-digital-signage/</link>
		<comments>http://pixelydo.com/wordpress-digital-signage/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 19:35:28 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[portfolio]]></category>
		<category><![CDATA[cheap digital signage]]></category>
		<category><![CDATA[digital sign]]></category>
		<category><![CDATA[digital signage]]></category>
		<category><![CDATA[DIY digital signage]]></category>
		<category><![CDATA[flatscreen]]></category>
		<category><![CDATA[free digital signage]]></category>
		<category><![CDATA[sign]]></category>
		<category><![CDATA[signage]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=465</guid>
		<description><![CDATA[When the president of the Chicago campus of The Chicago School of Professional Psychology asked for flatscreen televisions to be hung by each of the elevators and in gathering spaces, most people thought the difficult part would be getting a good price on the TVs. You won&#8217;t be able to afford digital signage technology. The [...]]]></description>
			<content:encoded><![CDATA[<p>When the president of the Chicago campus of The Chicago School of Professional Psychology asked for flatscreen televisions to be hung by each of the elevators and in gathering spaces, most people thought the difficult part would be getting a good price on the TVs.</p>
<p>
<blockquote>
<p>You won&#8217;t be able to afford digital signage technology.</p>
</blockquote>
<p>The school is also host to an international institute that focuses on marketing messages; specifically digital signage. They were thrilled that the school was going to jump onto the technology, but were stuck on the cost of existing platforms.</p>
<p>The real challenge was dropped on my plate at the end of a status meeting.</p>
<p>&ldquo;The flatscreens are happening. Can you design a layout? <em>And make it sustainable to manage?</em>&rdquo;</p>
<p>The digital signs are displayed on at least 15 52&#8243; televisions in two buildings that run Chrome in full-screen. Each post is displayed for 18 seconds, and a dock at the bottom of the screen displays the time, weather, local events, academic events &amp; campus events.</p>
<p>I wrote an <a href="/flatscreens/">entirely too long blog post</a> that spells out each step and aspect of the entire operation.</p>
<p><a class="fancy" href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens0.png"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens0-150x150.png" alt="" title="flatscreens0" width="150" height="150" class="alignnone size-thumbnail wp-image-422" /></a><a href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens1.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens1-150x150.png" alt="" title="flatscreens1" width="150" height="150" class="alignnone size-thumbnail wp-image-423" /></a><a class="fancy" href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens21.jpg"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens21-150x150.jpg" alt="" title="flatscreens2" width="150" height="150" class="alignnone size-thumbnail wp-image-424" /></a><a class="fancy" href="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens31.jpg"><img src="http://nathangjones.com/wp-content/uploads/2011/03/flatscreens31-150x150.jpg" alt="" title="flatscreens3" width="150" height="150" class="alignnone size-thumbnail wp-image-425" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/wordpress-digital-signage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yammer</title>
		<link>http://pixelydo.com/yammer/</link>
		<comments>http://pixelydo.com/yammer/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 13:58:36 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[front]]></category>
		<category><![CDATA[community management]]></category>
		<category><![CDATA[community manager]]></category>
		<category><![CDATA[social media]]></category>
		<category><![CDATA[yammer]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=505</guid>
		<description><![CDATA[While the work-related posts were certainly incredibly useful and we all benefitted from the answers, the real value of Yammer came through when we first learned of the impending corporate reorganization.]]></description>
			<content:encoded><![CDATA[<p>It was about to become a very stressful time, but we didn&rsquo;t know that yet.</p>
<p><a href="http://nathangjones.com/wp-content/uploads/2011/03/yammer.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/yammer-150x150.png" alt="" title="yammer" width="150" height="150" class="alignright size-thumbnail wp-image-506" /></a>In the middle of an 18 month website redesign that spanned 14 sites, I read about <a href="http://yammer.com">Yammer</a> and realized that having an internal social network for the project would be incredibly useful to crowd source questions and reap the shared benefits of the answers. In addition to the new design and organization of the sites, we were taking on an entirely new web content management system&mdash;Seamless.</p>
<p>I created multiple networks to act as user groups for different software that is used by the institution, invited the appropriate users and started off with a few posts. Unsurprisingly, Yammer use took off within the marketing department&mdash;especially driven by interactive marketing.</p>
<p>Then we all received an email about a massive budget gap and the ensuing reorganization.</p>
<h2>A Common Focus</h2>
<p><em>Did you Yammer that yet?</em> became a common refrain as announcements about server downtime or planned site maintenance would need to be known by everyone. We all hunkered down and were able to streamline communication through a single tool. Unexpectedly, emails were reduced&mdash;replaced by mentioning others in posts and direct messages. The weekly departmental update email slowly became less than weekly, as everyone already knew what was going on.</p>
<h2>Distraction</h2>
<p><a href="http://catsthatlooklikeronswanson.tumblr.com/">Cats That Look Like Row Swanson</a>, <a href="http://www.themonkeysyouordered.com/">The Monkeys You Ordered</a>, new additions to a shared iTunes playlist; the distractions provided by our Yammer community helped to defuse the sometimes tense situation in the office. </p>
<h2>Comedy</h2>
<p>Much of this fell into the distraction category, but looking beyond the value of distraction, personalities emerged. People who were otherwise fairly self-contained shared rather funny tidbits or hysterical links. Clearly everyone is a bit different in a professional setting, but it was enlightening and comforting to see actual, likable people emerge from the strangers with whom I spend my days.</p>
<h2>A Safe Place</h2>
<p>While the work-related posts were certainly incredibly useful and we all benefitted from the answers, the real value of Yammer came through when we first learned of the impending reorganization. Having a safe place to figuratively circle the wagons, take care of each other and act as a community really helped to soften the sustained barrage of layoffs and firings that spanned a number of weeks.</p>
<h2>A Shared Experience</h2>
<p>Yammer gave everyone a chance to be in the loop. The network was embraced for posting everything from software workarounds, PDFs of the newest brochures, relevant articles and planned server down time, to funny tumblrs and the latest whereabouts of food trucks. If one of us received news, we all had the opportunity to know. We were all able to share in the experience and use the community as a ballast as we negotiated the shifting corporate landscape. Together.</p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/yammer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AT&amp;T U-verse Has Been Awful</title>
		<link>http://pixelydo.com/att-uverse-has-been-awful/</link>
		<comments>http://pixelydo.com/att-uverse-has-been-awful/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 20:23:01 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[front]]></category>
		<category><![CDATA[at&t]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[u-verse]]></category>
		<category><![CDATA[uverse]]></category>

		<guid isPermaLink="false">http://pixelydo.com/?p=512</guid>
		<description><![CDATA[On June 15, I ordered AT&#38;T U-verse internet for our new condo. It&#8217;s now the late afternoon of June 24. We still don&#8217;t have internet.]]></description>
			<content:encoded><![CDATA[<p><img src="http://pixelydo.com/wp-content/uploads/2011/06/grandpa-300x225.jpg" alt="Grandpa Simpson: Old Man Yells At Cloud" title="grandpa" width="300" height="225" class="alignright size-medium wp-image-513" />
<p>On June 15, I ordered AT&amp;T U-verse internet for our new condo. They quickly sent a confirmation message for my self-install kit, with an activation date of June 23. I was puzzled as to why flipping on a port in an office would take eight days, but whatever. The modem and router arrived from UPS on Monday, June 20. Perfect.</p>
<p>Les, an installation tech came out on June 23 to do something–perhaps make sure we were wired from the box to our unit–even though it&rsquo;s a self-install. He left me a voicemail as he was leaving because he said he wasn&rsquo;t sure which line was our line. He said he would have come in to see if the line was toning in our unit, but he didn&rsquo;t know which unit was our unit. Also said it would be a waste of his time to connect one, in case it was the wrong one.</p>
<p>There are only two units in our building.*</p>
<p>He said he didn&rsquo;t see our name on the buzzer. Yet, he saw a buzzer labeled with the not our last name, and a buzzer that was not labeled.* My wife stayed home the entire day just in case he would need to be let in. He never tried.</p>
<p>I immediately called tech support, and they rescheduled for another technician to come out the next day, between 9:00AM and 11:00AM. My wife was forced to spend a second day off, at home.</p>
<p><strong>No one came.</strong></p>
<p>I called tech support again. The agent on the phone said that he was seeing some strange notes on our account, and that a computer glitch had caused the appointment to not actually be scheduled. I&rsquo;m not sure if he thought he was speaking with his grandmother, but computers don&rsquo;t have glitches. People mess up. So he rescheduled for a technician to come out between 11:00AM and 1:00PM.</p>
<p><strong>No one came.</strong></p>
<p>As of 2:45, still no one had come. I called tech support again. This time I was told that the appointment was actually scheduled for between 1:00PM and 3:00PM.</p>
<p>I was advanced to tier two support for some unknown reason. After 12 minutes, that agent determined he should submit a ticket to the central office to turn on our port, and that no one would need to physically come to our condo.</p>
<p>He said that our service would be turned on within four to 12 hours. I&rsquo;m not holding my breath.</p>
<p><strong>It&rsquo;s now 3:30PM, and no one has come.</strong></p>
<p>We&rsquo;ve since gone over our iPhone data limit, and have had to pay for more data. I told the tech support agent that it&rsquo;s not just widly inconvenient, but that these AT&amp;T errors are now costing us money too. He said I would have to call back after my account was set up and ask for billing to see if they could issue a credit. <em>I&rsquo;m sorry, what?</em></p>
<p>I&rsquo;ve just started interacting with @ATTCustomerCare and @ATTJason, hopefully they can make it better.</p>
<p>&nbsp;</p>
<p><em>*I see a great opportunity to consult for AT&amp;T. They have a tremendous need for development of deductive reasoning skills.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/att-uverse-has-been-awful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eGo, an iModules Community</title>
		<link>http://pixelydo.com/ego-an-imodules-community/</link>
		<comments>http://pixelydo.com/ego-an-imodules-community/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 22:57:26 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[portfolio]]></category>
		<category><![CDATA[imodules]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=482</guid>
		<description><![CDATA[The Chicago School uses software created by iModules for its student and alumni online community. In addition to redesigning the site to coordinate with the school&#8217;s redesigned public-facing website, I am also the community manager. I manage permissions and conduct all of the training sessions, which are bolstered by a collection of brief task-based instructional [...]]]></description>
			<content:encoded><![CDATA[<p>The Chicago School uses software created by iModules for its student and alumni online community. In addition to  redesigning the site to coordinate with the school&#8217;s redesigned public-facing website, I am also the community manager. I manage permissions and conduct all of the training sessions, which are bolstered by a collection of brief task-based instructional screencasts that I created for the community.<br />
<a href="http://nathangjones.com/wp-content/uploads/2011/03/ego.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/ego-150x150.png" alt="" title="ego" width="150" height="150" class="alignnone size-thumbnail wp-image-483" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/ego-an-imodules-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AAM Hartford 2010</title>
		<link>http://pixelydo.com/aam-hartford-2010/</link>
		<comments>http://pixelydo.com/aam-hartford-2010/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 16:21:15 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[portfolio]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=132</guid>
		<description><![CDATA[The Association of Anglican Musicians was bringing their 2010 conference to Hartford, Connecticut. The conference committee wanted to step up and use the web for more than posting PDFs.]]></description>
			<content:encoded><![CDATA[<p>The Association of Anglican Musicians was bringing their 2010 conference to Hartford, Connecticut. The conference committee wanted to step up and use the web for more than posting PDFs. This site allows for online registration, superfast updates and it&#8217;s just plain prettier + cheekier. It&#8217;s also dovetailed with an active presence on Twitter and Facebook.</p>
<p><a href="http://nathangjones.com/wp-content/uploads/2009/07/aam.jpg" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2009/07/aam-150x150.jpg" alt="" title="aam" width="150" height="150" class="alignnone size-thumbnail wp-image-133" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/aam-hartford-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Latino Mental Health Providers Network</title>
		<link>http://pixelydo.com/latino-mental-health-providers-network/</link>
		<comments>http://pixelydo.com/latino-mental-health-providers-network/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 20:27:56 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[portfolio]]></category>
		<category><![CDATA[buddypress]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[member directory]]></category>
		<category><![CDATA[membership directory]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=459</guid>
		<description><![CDATA[The Latino Mental Health Providers Network at The Chicago School of Professional Psychology (LMHPN) had a lofty goal of unifying and creating a community of mental health practitioners who serve Latino/a populations in Chicago. Armed with a grant from The Chicago Community Trust, they planned various forms of outreach, including budgeting $130,000 for a website [...]]]></description>
			<content:encoded><![CDATA[<p>The Latino Mental Health Providers Network at The Chicago School of Professional Psychology (LMHPN) had a lofty goal of unifying and creating a community of mental health practitioners who serve Latino/a populations in Chicago.</p>
<p>Armed with a grant from The Chicago Community Trust, they planned various forms of outreach, including budgeting $130,000 for a website and online directory.</p>
<p>After having an initial interactive branding meeting with them, I asked for a few days to see what I could whip up.</p>
<p>Combining the open source WordPress with its outstanding BuddyPress plugin gave me much of the functionality that was needed. After a few tweaks to emphasize the member searching and downplay the blogging, I presented the concept to the LMHPN leadership, and they were thrilled.</p>
<p><a href="http://nathangjones.com/wp-content/uploads/2011/03/lmhpn.png" class="fancy"><img src="http://nathangjones.com/wp-content/uploads/2011/03/lmhpn-150x150.png" alt="" title="lmhpn" width="150" height="150" class="alignnone size-thumbnail wp-image-460" /></a></p>
<p>I put in some more time in customizing the theme and training content owners, and the site was ready to launch&mdash;ahead of schedule. Oh yeah, and for free.</p>
<p>They put that $130,000 into other means of community service &amp; outreach.</p>
<p>The site features statics content pages, an expanded registration page and a search that queries the members&#8217; specializations, locations, populations served &#038; interests.</p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/latino-mental-health-providers-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Random Keynote Presentation</title>
		<link>http://pixelydo.com/random-keynote-presentation/</link>
		<comments>http://pixelydo.com/random-keynote-presentation/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 21:41:50 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[front]]></category>
		<category><![CDATA[community management]]></category>
		<category><![CDATA[community manager]]></category>
		<category><![CDATA[imodules]]></category>
		<category><![CDATA[keynote]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=382</guid>
		<description><![CDATA[a random keynote presentation i made for @GradPsychology]]></description>
			<content:encoded><![CDATA[<p>a random keynote presentation i made for @GradPsychology</p>
<p><object width="649" height="414"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13768489&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=13768489&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="649" height="414"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/random-keynote-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>isla</title>
		<link>http://pixelydo.com/finally-here/</link>
		<comments>http://pixelydo.com/finally-here/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 21:00:14 +0000</pubDate>
		<dc:creator>@natejones</dc:creator>
				<category><![CDATA[front]]></category>

		<guid isPermaLink="false">http://nathangjones.com/?p=333</guid>
		<description><![CDATA[she's finally here. nothing is the same. nothing could be better.]]></description>
			<content:encoded><![CDATA[<p><object width="650" height="488"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fnatejones%2Fsets%2F72157623081898605%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fnatejones%2Fsets%2F72157623081898605%2F&#038;set_id=72157623081898605&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fnatejones%2Fsets%2F72157623081898605%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fnatejones%2Fsets%2F72157623081898605%2F&#038;set_id=72157623081898605&#038;jump_to=" width="650" height="488"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://pixelydo.com/finally-here/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

