<?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>Paper Canopy &#187; Applications and programming</title>
	<atom:link href="http://papercanopy.com/category/applications-and-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://papercanopy.com</link>
	<description>Web development and WordPress</description>
	<lastBuildDate>Mon, 22 Nov 2010 15:59:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>How to build a widget</title>
		<link>http://papercanopy.com/2010/11/10/how-to-build-a-widget/</link>
		<comments>http://papercanopy.com/2010/11/10/how-to-build-a-widget/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 15:43:49 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>
		<category><![CDATA[General observations]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=171</guid>
		<description><![CDATA[Client begging for a widget? Have no idea what that even means or where to start? Not to worry, it's definitely a common problem but this post should get you on your way to planning a cool piece of the web people can put almost anywhere!]]></description>
			<content:encoded><![CDATA[<p>In MBA school you explore a lot of theory and eventually try to apply that to actual practice. But theory comes first in academia, so theorize we did. And when you have to zoom so far out to make such broad brush strokes you need a common business model or product. In our case it was the widget.<span id="more-171"></span></p>
<p>In school, widgets could represent anything. Tires, chairs, rubber duckies. And that&#8217;s not really fair to the real world with real product nuances. But the worst of it is, that that line of thinking somehow invaded the real world in the form of web widgets.</p>
<p>Web widgets, like in school, can be anything. And they are anything. For example you may be using a widget on your desktop to monitor the weather. Or maybe there&#8217;s a widget on your Google home page to display the latest news. Or even a widget that let&#8217;s you send a quick burst off to your Twitter followers. All widgets, all doing something completely different.</p>
<p>So the question is, how do you build something like that? Something that can be anything. When the client comes begging for a widget, what do you give them?</p>
<p>Well the first thing you have to decide is what will your widget do. This one&#8217;s a biggie, not just because your widget can actually do almost anything, but it&#8217;s the foundation of the production process. We can&#8217;t build something that can do &#8220;anything&#8221;.</p>
<p>Here are some questions to get you started:</p>
<ul>
<li>Does it pull or push data? In other words is this something that users will use to see what&#8217;s going on with your brand or company, or will it be something that users use to send data to you?</li>
<li>Where will it live? Is this a desktop widget, Windows or Mac? Google home page widget? NetVibes? Mobile? Something people put on their website like a badge? All are built differently, some using different programming languages.</li>
<li>What&#8217;s your delivery method? Are you emailing this, or posting it on your site? Does it need to live on a provider&#8217;s site like WordPress or Google? What are the restrictions for those hosts?</li>
<li>What&#8217;s the goal of the widget? To interact with your brand? To help users stay in the loop?</li>
<li>If the widget is to display information, where is that info coming from and who will manage it? Does this data already exist somewhere? If not will that portion need to be built as well? Will the client manage the information or will that be a service you provide? Did you include that in your estimate?</li>
</ul>
<p>Obviously those are all starting points. Maybe some you thought about but some you didn&#8217;t. Maybe those aren&#8217;t even questions you need to be asking with your widget. The end result though should be to narrow down how your widget can be moved from some broad <em>thing</em> to an actual usable piece of the web.</p>
<p>Then when you&#8217;re ready to hand it off to some <a href="http://papercanopy.com/portfolio">stellar web production company</a> the last step will be smooth and efficient!</p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2010/11/10/how-to-build-a-widget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tumblr a nice alternative</title>
		<link>http://papercanopy.com/2010/03/30/tumblr-a-nice-alternative/</link>
		<comments>http://papercanopy.com/2010/03/30/tumblr-a-nice-alternative/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 14:30:39 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=100</guid>
		<description><![CDATA[I’ve been a fan of Tumblr for a while. I’ve had my own tumblr account to mess around with, and it’s been a nice halfway point between twitter which keeps you under 140 characters and a full blog which lets you post tons and tons of content. But it turns out tumblr has a nice theming engine as well...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a fan of Tumblr for a while. I&#8217;ve had my own tumblr account to mess around with, and it&#8217;s been a nice halfway point between twitter which keeps you under 140 characters and a full blog which lets you post tons and tons of content. Just something great for shorter posts, pictures, quotes, etc.<span id="more-100"></span></p>
<p>I recently set up a custom theme on Tumblr, and love how far it&#8217;s come since I signed up for an account years ago. Domain mapping so you can use your own domain name, a juiced up interface for posts, easy and straightforward navigation, tie in to Twitter, Facebook, and Feedburner, and on and on!</p>
<p>It may be because there&#8217;s just less data and variables to deal with than a regular blog, but I was amazed by how simple and straightforward it was to set up a custom theme. All of the variables you need to set up your own custom HTML and CSS were there, free, right out of the box.</p>
<p>WordPress is still my CMS tool of choice, but there is absolutely no reason to rule out a free tumblr account if all you need is a simple, custom themed blog. And the best part is, it&#8217;s all free!</p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2010/03/30/tumblr-a-nice-alternative/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Announcing: PMProPlus!</title>
		<link>http://papercanopy.com/2010/03/25/announcing-pmproplus/</link>
		<comments>http://papercanopy.com/2010/03/25/announcing-pmproplus/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 14:56:29 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>
		<category><![CDATA[Project News]]></category>
		<category><![CDATA[Site and Company News]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=90</guid>
		<description><![CDATA[The day has finally arrived. We&#8217;re launching our own project. Without further ado let us proudly introduce PMProPlus, a project management and time tracking web application, straight from the Paper Canopy factory. We&#8217;ve been using PMProPlus around here to manage all of our time tracking and project management needs for the past  year now. The [...]]]></description>
			<content:encoded><![CDATA[<p>The day has finally arrived. We&#8217;re launching our own project.</p>
<p>Without further ado let us proudly introduce <a href="http://www.pmproplus.com" target="_blank">PMProPlus</a>, a project management and time tracking web application, straight from the Paper Canopy factory.<span id="more-90"></span></p>
<p>We&#8217;ve been using PMProPlus around here to manage all of our <a href="http://pmproplus.com/tour/time-tracking/" target="_blank">time tracking</a> and <a href="http://pmproplus.com/tour/management/" target="_blank">project management</a> needs for the past  year now. The time tracking has been our most used piece, but <a href="http://pmproplus.com/tour/extranet/" target="_blank">the extranet is a life-saver</a> when it comes to posting large files for the client, especially if there is more than one version floating around!</p>
<p>Take a look and let us know what you think. There&#8217;s a 30 day free trial, and enough tiers so that price shouldn&#8217;t be an option to give it a try! And definitely head back here to tell us about some of your favorite features and what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2010/03/25/announcing-pmproplus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stupid WordPress Tricks</title>
		<link>http://papercanopy.com/2009/12/15/stupid-wordpress-tricks/</link>
		<comments>http://papercanopy.com/2009/12/15/stupid-wordpress-tricks/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 16:21:36 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=63</guid>
		<description><![CDATA[To totally bang home my love for WordPress I wanted to share a nice page that breaks down a lot of useful expansions on the basic WP functionality: Stupid WordPress Tricks There&#8217;s a lot there, in fact there are 76 tricks to peruse. Most of it is somewhat technical as far as how to implement [...]]]></description>
			<content:encoded><![CDATA[<p>To totally bang home my love for WordPress I wanted to share a nice page that breaks down a lot of useful expansions on the basic WP functionality: <a href="http://perishablepress.com/press/2009/12/01/stupid-wordpress-tricks/">Stupid WordPress Tricks</a></p>
<p>There&#8217;s a lot there, in fact there are 76 tricks to peruse. Most of it is somewhat technical as far as how to implement it, but I wanted to share because sometimes examples of what you can do with a tool gives you that &#8220;Aha!&#8221; moment to really add on some cool stuff to your own projects.</p>
<p>So peruse that list. Find some cool stuff to do, and know it can be done so you can ask for it.</p>
<p>One thing I think I may do with that list is show examples of how to use that added functionality in your own project. First up <a href="http://perishablepress.com/press/2009/12/01/stupid-wordpress-tricks/#swt_22" target="_blank">Meta Descriptions without a plugin</a>. This is a pretty easy one, and you can see it in action on the <a href="http://www.legalout.com" target="_blank">LegalOut.com</a> site that I set up in WordPress. Outside of just the meta description we set up several custom fields to display different content on different pages.</p>
<p>I&#8217;m definitely looking forward to pulling a lot of added functionality ideas from this list.</p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2009/12/15/stupid-wordpress-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ordering lists, UI example</title>
		<link>http://papercanopy.com/2009/10/23/ordering-lists-ui-example/</link>
		<comments>http://papercanopy.com/2009/10/23/ordering-lists-ui-example/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 16:34:07 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>
		<category><![CDATA[Code Demo]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=51</guid>
		<description><![CDATA[jQuery is definitely my javascript library of choice. Easy to use and you can spit out awesome stuff pretty quickly and easily. My latest conquest is drag and drop ordering. Basically what I wanted to do was have two lists. Then you can drag options from one list to the other, and order items within [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jquery.com" target="_blank">jQuery </a>is definitely my javascript library of choice.</p>
<p>Easy to use and you can spit out awesome stuff pretty quickly and easily.</p>
<p>My latest conquest is drag and drop ordering. Basically what I wanted to do was have two lists. Then you can drag options from one list to the other, and order items within each list.</p>
<p><a href="http://papercanopy.com/projects/codesamples/order-lists.php" target="_blank">Here&#8217;s a demo of the drag and drop functionality in action</a></p>
<p>Originally I built this to use in a WordPress plugin I was writing. The point would be to give users some options and let them order the options they selected.</p>
<p>The nice part of this is what goes on behind the scenes. When a user moves an item around (either from one list to the other, or within the list itself to reorder things) the code fires off an ajax call and stores/updates the list in a database.</p>
<p>This is the pretty basic instance of this functionality though. The plugin comes with a lot of options that you can use to really customize the user experience.</p>
<p>Some other options you have is triggering an event (an alert, popup, changing colors on something, etc.) when a person selects an item, when they drop the item, when they put one item above or below another item (before or after they drop it there, warnings anyone?). It&#8217;s a nice way to give a lot of feedback to the user as they are interacting with the page and the lists.</p>
<p>And the effects don&#8217;t have to stop there. By re-ordering a list on one part of the page could effect layout or content or any other number of things on a page.</p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2009/10/23/ordering-lists-ui-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Constant Contact &#8220;Case Study&#8221;</title>
		<link>http://papercanopy.com/2009/10/21/a-constant-contact-case-study/</link>
		<comments>http://papercanopy.com/2009/10/21/a-constant-contact-case-study/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 19:34:43 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>
		<category><![CDATA[Project News]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=44</guid>
		<description><![CDATA[Yeah I put case study in quotes. Not sure if this really qualifies as an official case study, but definitely worth a post. Recently did a quick job with a client to update some of their mailing lists. In a nutshell they needed some custom data added for each contact. The data was created using [...]]]></description>
			<content:encoded><![CDATA[<p>Yeah I put case study in quotes. Not sure if this really qualifies as an official case study, but definitely worth a post.</p>
<p>Recently did a quick job with a client to update some of their mailing lists.</p>
<p>In a nutshell they needed some custom data added for each contact. The data was created using an algorithm provided by the client, but relied on some unique information from each subscriber.</p>
<p>So the process in pseudocode:</p>
<ol>
<li>Connect to Constant Contact&#8217;s API</li>
<li>Get all of the contacts in a specific list</li>
<li>For each contact get some of their information such as the user id, email address, etc.</li>
<li>Build a string  based on this data</li>
<li>Update the contact&#8217;s information in Constant contact with this new data</li>
</ol>
<p>Simple process, but a nice challenge.</p>
<p>Here are a few fun facts I learned:</p>
<ul>
<li><strong>Constant Contact returns its contact data in paged lists</strong>. So you can&#8217;t just ask for all of the contacts in a specific list and get one result set. You have to ask for each page. Yay recursive-ness.</li>
<li><strong>There are limits to how many characters you can put in a field</strong>. Since the url that got built didn&#8217;t really fit logically in any of the provided fields I decided to use the custom fields CC provides. Fun fact: you can only put 50 characters in each custom field.</li>
<li>From the sending side of things, Constant Contact only allows you to enter subscriber fields into an email if the email is XHTML. And you <strong>must</strong> have valid XHTML or no dice on even getting the email out of draft stage.</li>
</ul>
<p>All in all it was a bit frustrating, but successful. Which adds up to a fun programming day. And I got this nice little code sample I can post for you guys which includes a PHP class provided by Constant Contact, and my own custom code to use that class to do stuff to subscribers in a list.</p>
<p>If you&#8217;re interested in the code you can check it out here: <a title="Constant Contact php code" href="http://papercanopy.com/files/2009/10/cc_contacts.zip">download Constant Contact Class and case use files</a></p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2009/10/21/a-constant-contact-case-study/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Your system will fail</title>
		<link>http://papercanopy.com/2009/06/22/your-system-will-fail/</link>
		<comments>http://papercanopy.com/2009/06/22/your-system-will-fail/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 01:26:40 +0000</pubDate>
		<dc:creator>Jonathan</dc:creator>
				<category><![CDATA[Applications and programming]]></category>

		<guid isPermaLink="false">http://papercanopy.com/?p=28</guid>
		<description><![CDATA[Two jobs ago (a lifetime it seems!) I worked with this great programmer who came from a job with the military. The Air Force to be exact. His job was to maintain a system that managed inventory for parts for aircraft. Seems like a simple system, but when he got into the depth of the [...]]]></description>
			<content:encoded><![CDATA[<p>Two jobs ago (a lifetime it seems!) I worked with this great programmer who came from a job with the military. The Air Force to be exact. His job was to maintain a system that managed inventory for parts for aircraft. Seems like a simple system, but when he got into the depth of the inventory it blew my mind. They tracked everything down to each nut, each bolt, exactly where each part was on the aircraft, it was amazing the detail they had to keep track of.</p>
<p>The main reason for all this detail was the massive amount of redundancy in the construction. Basically if you&#8217;re flying into enemy territory and start taking fire you don&#8217;t want a bullet or shell to hit the wire that links the joystick to the wings. Or any wire for that matter (turns out they&#8217;re all pretty important) . So you put the wire in a place that has the lowest percentage of being hit.</p>
<p>But there&#8217;s still a chance (even small) it could get disabled. And when millions of dollars of aircraft and at least one human life are at stake, you want to get as close to 0% as possible. So you add in another wire that does the same job in a different place. Just in case.</p>
<p>But there&#8217;s still a chance right? So you add another wire in another spot.</p>
<p>The end of the story is, there are several redundant wires, nuts, bolts, hardware, software, everything. All in different spots. All to back up the other. All to make sure that if one fails the plane doesn&#8217;t fall out of the sky.</p>
<p>And why not? If one little wire is the difference between life and death, and there&#8217;s room and time and money to put it in, why not?</p>
<h2>Luckily Twitter does not work for the military</h2>
<p>A less dire example (and the point of this rant) is Twitter. For me the twitter service is sketchy at best. I set it up to get the tweets from the people I want to hear the most directly on my phone. The rest I monitor through the web or rss.</p>
<p>It rarely works 100%.</p>
<p>Case in point, this morning I got an email from twitter about a direct message from someone I follow. It was about some potential work. Even though I have my account set up to send his tweets to my phone I never got the message that way. I went to my feed online (and rss) but since it was a direct message I didn&#8217;t see the notification there. Luckily I&#8217;m a big fan of redundancy so I have direct messages sent to my email. Crisis averted. And luckily so because the work that came from it looks to be a good gig, and has tons of upside for a future working relationship.</p>
<p>The question is, does your web site or application have that redundancy? If someone is trying to contact you, do you have fail safes in case one way doesn&#8217;t work? Will it lose you money if it fails? Do you give your users the opportunity to be paranoid, sometimes justly?</p>
<p>If not, maybe now is a good time to check out your processes and add in that extra wire.</p>
]]></content:encoded>
			<wfw:commentRss>http://papercanopy.com/2009/06/22/your-system-will-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

