<?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>Barnabas Kendall</title>
	<atom:link href="http://bkendall.biz/feed/" rel="self" type="application/rss+xml" />
	<link>http://bkendall.biz</link>
	<description>Technology Consultant</description>
	<lastBuildDate>Fri, 15 Jul 2011 14:56:14 +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>CodeIgniter Starter project</title>
		<link>http://bkendall.biz/2011/07/codeigniter-starter-project/</link>
		<comments>http://bkendall.biz/2011/07/codeigniter-starter-project/#comments</comments>
		<pubDate>Thu, 14 Jul 2011 19:44:33 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=312</guid>
		<description><![CDATA[Update: As requested, here&#8217;s a demo site. In preparation for a new CodeIgniter project starting very soon, I prepared a new project template. While CI gives you a great library and framework, out of the &#8220;box&#8221; it is missing a few &#8230;<p class="read-more"><a href="http://bkendall.biz/2011/07/codeigniter-starter-project/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><strong>Update: </strong><a title="CI-Starter demo" href="http://ci-starter.bkendall.biz/" target="_blank">As requested, here&#8217;s a demo site.</a></p>
<p>In preparation for a new <a href="http://codeigniter.com/">CodeIgniter</a> project starting very soon, I prepared a new <a title="CI Starter project on GitHub" href="https://github.com/Barnabas/CI-Starter" target="_blank">project template</a>. While CI gives you a great library and framework, out of the &#8220;box&#8221; it is missing a few things that are necessary for 90% of web applications. Specifically, user registration and authentication, menus, templates, a CSS base, etc. Other frameworks, such as Yii or Django, address this with generators. I think there is some value in creating one&#8217;s own. A fine alternative would be to go with another CI-based project framework, especially <a href="http://www.getfuelcms.com/" target="_blank">FUEL CMS</a>, or perhaps <a href="http://www.pyrocms.com/" target="_blank">PyroCMS</a>.</p>
<p>I am very intrigued by the <a href="http://getsparks.org" target="_blank">Sparks</a> initiative also; I think it&#8217;s a great idea and a good way to let developers like me pick and choose open libraries, as well as give back. So my first shot at this involves setting up Sparks, integrating a few useful ones, and making a basic site with templates, navigation, registration and login. Everything else will be project-specific, I imagine.</p>
<p>In any event, here&#8217;s what I included in my first version:</p>
<ul>
<li><a href="http://downloads.codeigniter.com/reactor/CodeIgniter_2.0.2.zip">CodeIgniter 2.0.2</a></li>
<li>Phil Sturgeon&#8217;s Asset library</li>
<li>David McReynolds&#8217; <a href="http://www.getfuelcms.com/user_guide/libraries/menu">Menu library from Fuel CMS</a> (update: <a href="http://getsparks.org/packages/menu/versions/HEAD/show" target="_blank">I converted this to a spark too</a>)</li>
<li><a href="http://getsparks.org/">Sparks</a>, with the following sparks installed:
<ul>
<li>ion_auth 1.4.0</li>
<li>formbuilder 1.3.0</li>
<li>template 1.8.0</li>
</ul>
</li>
<li>Login controller to run ion_auth, using formbuilder</li>
<li>Basic CSS and layout files based on HTML5 template</li>
<li>Static page controller with nice 404 handling</li>
<li>Dropdown menu 0.7.2 CSS from <a href="http://lwis.net/free-css-drop-down-menu/">Live Web Institute</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2011/07/codeigniter-starter-project/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PyroCMS Modules</title>
		<link>http://bkendall.biz/2011/06/pyrocms-modules/</link>
		<comments>http://bkendall.biz/2011/06/pyrocms-modules/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 04:48:29 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=304</guid>
		<description><![CDATA[At White Lion, we had use of an in-house framework built on Kohana that made starting a new site very easy. Since I&#8217;m back on my own I can&#8217;t use their framework for my own projects but I see the &#8230;<p class="read-more"><a href="http://bkendall.biz/2011/06/pyrocms-modules/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pyrocms.com/"><img class="alignright size-full wp-image-307" title="pyrocms-logo" src="http://bkendall.biz/wp-content/uploads/2011/06/pyrocms-logo-127x150.png" alt="" width="127" height="150" /></a>At White Lion, we had use of an in-house framework built on Kohana that made starting a new site very easy. Since I&#8217;m back on my own I can&#8217;t use their framework for my own projects but I see the value of using a full-blown CMS system as a starter, not just a framework. There are a few CodeIgniter-based CMS projects with some traction, but <a href="http://www.pyrocms.com">PyroCMS</a> and <a href="http://www.getfuelcms.com/">Fuel CMS</a> both grabbed my attention. PyroCMS won out because it&#8217;s reached 1.2 and module development is very simple, and I&#8217;m a fan of <a href="http://philsturgeon.co.uk/">Phil Sturgeon</a>.</p>
<p>I have so far tried my hand at developing two modules for PyroCMS: one is a sitemap module which outputs both a human readable and search engine friendly XML sitemap of all pages and blog posts, and the second is a blog importer, mainly for moving my content on this blog from WordPress to PyroCMS. I dutifully submitted both to the add-on store, <del>but both haven&#8217;t been accepted after a week or so of sitting around &#8220;waiting for approval&#8221;. So, temporarily, I will offer both downloads here as a trial</del>: (these are now live on the add-on section, links have been updated)</p>
<ul>
<li><a href="http://www.pyrocms.com/store/details/importer">Importer Module</a></li>
<li><a href="http://www.pyrocms.com/store/details/sitemap">Sitemap Module</a></li>
</ul>
<p>If you&#8217;re a PyroCMS user or developer, please check them out and let me know what you think <a href="http://www.pyrocms.com/forums/view/7">on the forum</a>. As for future plugins, I&#8217;m thinking of doing a Lucerne search plugin, or a simple Google Checkout/Cart module, or maybe a call-me widget based on Twilio&#8217;s API.</p>
<p>I am a freelance web developer, and if you want to hire me to build something for your website, please get in touch.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2011/06/pyrocms-modules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>White Lion Home Page</title>
		<link>http://bkendall.biz/2011/06/white-lion-home-page/</link>
		<comments>http://bkendall.biz/2011/06/white-lion-home-page/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 21:12:53 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=298</guid>
		<description><![CDATA[For two months this spring I had an awesome time working at White Lion in Austin, Texas. Steve Kahle has a fine group of people working for him over there, and there were many interesting projects to complete. I certainly &#8230;<p class="read-more"><a href="http://bkendall.biz/2011/06/white-lion-home-page/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://wlion.com" alt="White Lion Internet Agency"><img src="http://bkendall.biz/wp-content/uploads/2011/06/wlion.gif" alt="" title="wlion" width="257" height="129" class="alignright size-full wp-image-300" /></a>For two months this spring I had an awesome time working at <a href="http://wlion.com">White Lion</a> in Austin, Texas. Steve Kahle has a fine group of people working for him over there, and there were many interesting projects to complete. I certainly hope I&#8217;ll be able to work with them again. Sadly, we couldn&#8217;t stay in Austin due to health issues and so we&#8217;re back in Wisconsin right now.</p>
<p>One interesting project I spent a few hours on was to see if there was anything to do about the White Lion home page. It is currently an eye-catching Flash image of thumbnails of different clients and case studies. When you hover over one, the thumbnail image moves about while the others fade out. It seemed to me there was nothing about it that specifically required Flash other than the monochrome effect, and even that&#8217;s technically possible without Flash. I set about trying to implement the same effect with JavaScript, HTML, and CSS. <a href="http://bkendall.biz/files/wlion_home2.html">Here is a static version of my effort.</a></p>
<p>While it looks and behaves similarly to the current home page, the difference is apparent on every page load after the first, especially if you use the back button. My version is nearly instant while the Flash version always does some reloading. Why? In the current site, the Flash element does not contain any images. Instead, when loaded it always makes another network call to http://wlion.com/home/portfolios, which returns some XML that is then parsed to build the image grid. While this means White Lion can change the home page portfolio listing easily, it also slows down the whole page. The Flash element will not start loading images until after it has itself finished loading, and has retrieved and parsed the protfolio XML.</p>
<p>In my version, the images are just normal IMG tags. If you turn off JavaScript, it still looks and functions similarly, except there&#8217;s no movement and the mouse over is a little strange. The advantage is that the images start loading right after the HTML is parsed. On a normal connection, this alone shaves two seconds off the overall load. I believe it would be possible to keep the current design but get the initial page load down to less than 1 second with a few more tricks, such as image spriting and using a CDN host for static assets, or even just using <a href="http://www.cloudflare.com/">CloudFlare</a> as a reverse proxy. While White Lion decided to keep the Flash element in place for now, certain .htaccess changes also sped things up too, like using GZip and enabling expiration.</p>
<p>The takeaway is that there may be ways to shave precious seconds from your home page load without altering the design. <a href="http://searchengineland.com/google-now-counts-site-speed-as-ranking-factor-39708">Building a snappy first page is a good investment.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2011/06/white-lion-home-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-Commerce CRM</title>
		<link>http://bkendall.biz/2010/10/ecommerce-crm/</link>
		<comments>http://bkendall.biz/2010/10/ecommerce-crm/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 19:29:06 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=270</guid>
		<description><![CDATA[I am researching doing a CRM-related mashup with one or more hosted e-commerce platforms. I have been doing some work with a BigCommerce store lately, and except for the fact that their API is read-only (big frustration there) it is a &#8230;<p class="read-more"><a href="http://bkendall.biz/2010/10/ecommerce-crm/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bkendall.biz/wp-content/uploads/2010/10/flaming_shopify.png"><img class="alignright size-full wp-image-271" title="Flaming Shopify" src="http://bkendall.biz/wp-content/uploads/2010/10/flaming_shopify.png" alt="Shopify logo in flames" width="125" height="125" /></a>I am researching doing a CRM-related mashup with one or more hosted e-commerce platforms. I have been doing some work with a <a href="http://www.bigcommerce.com/1173-0-1-23.html">BigCommerce</a> store lately, and except for the fact that their API is read-only (<a href="http://community.bigcommerce.com/bigcommerce/topics/more_useful_api_features">big frustration there</a>) it is a very nice system both on the front-end and the back office. I was also interested in developing for <a href="http://api.shopify.com/">Shopify&#8217;s API</a> because unlike BC, they have a two-way API and <a href="http://apps.shopify.com/">a third-party app store</a> which makes it very easy to plug in and get paid seamlessly.</p>
<p>However, there is a glaring difference between BigCommerce and Shopify which doesn&#8217;t leap out in the comparisons that I&#8217;ve seen elsewhere, and that is this: <em><a href="http://support.myshopify.com/discussions/questions/3515-are-there-no-customer-accounts-in-shopify-they-have-to-enter-there-purchasing-info-each-time">Shopify has no CRM</a></em>. For customers, there is no concept of &#8220;Log In&#8221; to a Shopify store, no &#8220;see my previous orders&#8221; or &#8220;update my address book&#8221;, nothing. Every time you order from a Shopify hosted store, you will enter  your information all over again. If you are <a href="http://store.foofighters.com/">a band which sells only five things</a> or <a href="http://www.dodocase.com/">a company which makes and sells only one product</a>, that is probably OK. For <a href="http://www.smallbusinessnewz.com/topnews/2009/09/01/gaining-repeat-customers">repeat customers</a> and developers like me who want to do something useful with customer data, it&#8217;s a disaster.</p>
<p>If I were starting a store, I would require a platform with a two-way API with basic CRM. Besides my current favorite BigCommerce, I&#8217;ve  identified <a href="http://businesscatalyst.com/">Business Catalyst</a> (formerly GoodBarry), <a href="http://www.volusion.com/">Volusion</a>, and <a href="http://www.3dcart.com/new_xml-api.html">3dCart</a> as potential integration targets because they have a SOAP or REST API and CRM data that I can access through the API. Any other suggestions are welcome, and I&#8217;ll update here. While a Shopify-style app store would be nice to build for, it&#8217;s not a deal breaker to move ahead with my project.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2010/10/ecommerce-crm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BigCommerce and LoganCreekSoap.com</title>
		<link>http://bkendall.biz/2010/09/bigcommerce/</link>
		<comments>http://bkendall.biz/2010/09/bigcommerce/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 18:35:53 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bigcommerce]]></category>
		<category><![CDATA[shopify]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=264</guid>
		<description><![CDATA[I recently set up and relaunched LoganCreekSoap.com using the BigCommerce store hosting platform. I have to say: e-commerce (and web applications in general) has come a long way in the last decade. The previous platform and setup that they were using before &#8230;<p class="read-more"><a href="http://bkendall.biz/2010/09/bigcommerce/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-266" title="bigcommerce-logo" src="http://bkendall.biz/wp-content/uploads/2010/09/bigcommerce-logo.png" alt="" width="291" height="65" />I recently <a title="Logan Creek Soap" href="http://www.LoganCreekSoap.com">set up and relaunched LoganCreekSoap.com</a> using the <a href="http://www.bigcommerce.com/1173-0-1-23.html">BigCommerce store hosting platform</a>. I have to say: e-commerce (and web applications in general) has come a long way in the last decade. The previous platform and setup that they were using before was simply awful for both usability and aesthetically. It really was a shame because they make beautiful handcrafted soap and their store simply didn&#8217;t reflect their high quality product.</p>
<p>BigCommerce offered many features that were especially convenient for them to manage as store owners, such as a nice back-end management interface, lots of reports, plug-ins to several third-party systems (like Google Base and Facebook) and a great order fulfillment process flow. As a developer, I was fascinated by the API and started working on a little project to make buying postage a little easier (using <a href="http://www.stamps.com/pdk/">Stamps.com&#8217;s API</a>), but I was highly disappointed that the BigCommerce API is presently read-only. This is a tiny downside in the vast upside that is BigCommerce. Customers will get many shopping features that they frankly expect, such as seeing order status and history, wish lists, instant shipping and tax estimates, and coupons.</p>
<p>The serious competitor to BigCommerce is <a href="http://www.shopify.com">Shopify</a> right now. Shopify&#8217;s API is better and their app store is highly enticing to me as a developer (nothing like that currently exists for BigCommerce sadly). I couldn&#8217;t recommend Shopify for Logan Creek Soap, however, mainly because Shopify takes a percentage of each sale in addition to their monthly fee, while BigCommerce does not. Personally, I intend to find some more local merchants and see if they&#8217;d like to let me help them upgrade their stores to BigCommerce. If you&#8217;d like my help or advice in setting up your store, <a href="http://bkendall.biz/">please contact me</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2010/09/bigcommerce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenVBX Launched</title>
		<link>http://bkendall.biz/2010/06/openvbx-launched/</link>
		<comments>http://bkendall.biz/2010/06/openvbx-launched/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 19:04:01 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[openvbx]]></category>
		<category><![CDATA[twilio]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=254</guid>
		<description><![CDATA[I am very pleased that Twilio&#8217;s OpenVBX launched today. This is a project that I had the great pleasure of working on last year for several months with the fine folks at Twilio. When I last touched it, I thought &#8230;<p class="read-more"><a href="http://bkendall.biz/2010/06/openvbx-launched/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bkendall.biz/wp-content/uploads/2010/06/openvbx-web-logo.png"><img class="alignleft size-full wp-image-255" title="OpenVBX Logo" src="http://bkendall.biz/wp-content/uploads/2010/06/openvbx-web-logo.png" alt="" width="209" height="54" /></a>I am very pleased that Twilio&#8217;s <a href="http://openvbx.org">OpenVBX</a> launched today. This is a project that I had the great pleasure of working on last year for several months with the fine folks at <a href="http://www.twilio.com">Twilio</a>. When I last touched it, I thought it was 99% ready to go and felt a little frustrated that it wasn&#8217;t launched sooner.</p>
<p>Now that I see what they&#8217;ve been working on in the meantime I understand. A great deal of refinement and documentation has made this product so much better than what it was. They even made <a href="http://www.youtube.com/watch?v=cBDqyvJzRYA">a very Apple-esque intro video</a> to describe what it is and why it is a win for businesses. I am installing it now on my server and will update with my impressions soon.</p>
<p>While not yet advertised anywhere, OpenVBX is based on <a href="http://www.codeigniter.com/">CodeIgniter</a>, a very popular PHP framework. Even if you are more familiar with other frameworks like CakePHP, Kohana, Silverlight, etc., you should find the code easy to understand.</p>
<p>Commenters on this news at <a href="http://news.ycombinator.com/item?id=1432937">HN</a> have been oddly upset over Twilio&#8217;s reasonable per-minute charge, which is not new. &#8220;Why pay 3¢ a minute when you can roll your own PBX with Asterisk and pay 0.0000000000000001¢ per minute with some VOIP provider?&#8221; they ask. Fair enough. But when you go eat a burger for lunch today, ask yourself why you didn&#8217;t raise and slaughter your own beef, grind the meat, and fry your own patties? Why pay a farmer, butcher, grocer, and restauranteur to do what you could have done yourself?</p>
<p>By the way, when it the last time someone has successfully used the word &#8220;restauranteur&#8221; in a sentence?</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2010/06/openvbx-launched/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning About HR</title>
		<link>http://bkendall.biz/2009/10/learning-about-hr/</link>
		<comments>http://bkendall.biz/2009/10/learning-about-hr/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 05:50:16 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=243</guid>
		<description><![CDATA[Related to my last post about setting up an automated phone screening application, I thought I&#8217;d ask HR professionals on LinkedIn what they thought about they idea. As of now, here are some sample replies: &#8220;The hiring process is already &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/10/learning-about-hr/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bkendall.biz/2009/10/phone-screen-twilio/">Related to my last post about setting up an automated phone screening application</a>, I thought I&#8217;d <a href="http://www.linkedin.com/answers/hiring-human-resources/staffing-recruiting/HRH_SFF/572889-2236419">ask HR professionals on LinkedIn what they thought about they idea</a>. As of now, here are some sample replies:</p>
<ul>
<li>&#8220;The hiring process is already de-humanized why add more humiliation/ tortire [sic] to it&#8221;</li>
<li>&#8220;I can’t imagine interviewing my candidates via an automated voice system. It’s far too impersonal and I think many of them would find it insulting.&#8221;</li>
<li>&#8220;Quite frankly, if I were to encounter an automated pre-screening system like this, I would hit the off button before the first question is finished.&#8221;</li>
<li>&#8220;I wouldn&#8217;t feel comfortable in using a system such as you suggest. [...] A voice automated system might put off too many candidates to make it worth the investment to get to the qualified candidate a little quicker.&#8221;</li>
<li>&#8220;What kind of a person who is interested in <strong><span style="text-decoration: underline;">Human</span></strong> Resources would use a machine to perform this work. This type of machine is ideal for checking on your packages and airline arrival time. People are not packages or planes.&#8221;</li>
<li>&#8220;Why on earth would you want to dehumanize an already stressed out sector of the population?! As an employer, I would never insult my potential employees by using a system as such.&#8221;</li>
<li>&#8220;As a recruiter I really strongly dislike this idea. I would never use it. And I think it adds another layer of torture for both candidates and recruiters.&#8221;</li>
</ul>
<p>There are clearly some really strong feelings of revulsion about this idea. I especially enjoy comments that allude to yet another layer of torture, which seems to acknowledge that recruiting is already torturous. Also I think there&#8217;s a lot of speculation on how much people would hate it. I would like to find some job seekers who have been out of work for a while and ask them: &#8220;would you avoid working for a company that put all applicants though an automated phone screening process?&#8221; I think that if anything, an applicant will commit to 20-30 minutes of recording answers only for a job they really want, as opposed to the minimal investment in blitzing out your digital resume to 300 openings a day.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/10/learning-about-hr/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A Free Phone Screen/Interview App With Twilio</title>
		<link>http://bkendall.biz/2009/10/phone-screen-twilio/</link>
		<comments>http://bkendall.biz/2009/10/phone-screen-twilio/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 21:42:26 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[How To]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[twilio]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=241</guid>
		<description><![CDATA[I have thoroughly enjoyed working with Twilio for the last 6 months or so on an open-source project that will soon be released (can&#8217;t wait!). Now that my part in that project has wrapped up, I&#8217;ve got some extra time &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/10/phone-screen-twilio/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I have thoroughly enjoyed working with Twilio for the last 6 months or so on an open-source project that will soon be released (can&#8217;t wait!). Now that my part in that project has wrapped up, I&#8217;ve got some extra time to play around with my own projects and look for my next job. Over on the Twilio support forums, <a href="http://getsatisfaction.com/twilio/topics/using_twilio_to_automate_phone_interviews_please_help">someone recently requested help</a>, and it caught my eye:</p>
<blockquote><p>I have to conduct a lot of phone interviews every year for my company with fairly standard questions. Would there be a way to use Twilio to manage this in an automated fashion? I don&#8217;t want to spend the time actually conducting the interviews but would rather listen to them when I have a chance. [...]<br />
During the call, I would like to have the user enter the # sign or something when they have finished answering the question, to prompt the next question. This way, I could have my 10 standard questions recorded in Mp3, and then have the whole process managed through Twilio ideally where i enter the interviewee&#8217;s phone number and a time for the call ideally.</p></blockquote>
<p>Someone posted a link there that lead me to this service: <a href="http://www.voicescreener.com/">VoiceScreener</a> which starts at $169/month. Yikes! Twilio, on the other hand, is 3¢/minute and $5/month/phone number. I got to thinking: this is incredibly easy to set up with Twilio&#8217;s API; why not just whip it up? So I did.</p>
<p><a href="http://interview.bkendall.biz/">Here&#8217;s a demo</a> where you can try a sample phone interview and <a href="http://interview.bkendall.biz/PhoneInterview.zip">here&#8217;s where you can download the code</a>. To install and customize it, just follow these directions:</p>
<ol>
<li>Unzip the file to a directory on a web server that runs PHP 5</li>
<li>Edit the file inc/config.php with your own Twilio authentication credentials and the email address that will receive reports.</li>
<li>I have included my sample MP3 files in the files directory, but you should replace them with your own. The file names should be self explanatory: <a href="http://interview.bkendall.biz/files/intro.mp3">intro.mp3</a>, <a href="http://interview.bkendall.biz/files/thanks.mp3">thanks.mp3</a>, <a href="http://interview.bkendall.biz/files/conclusion.mp3">conclusion.mp3</a>, and question_XX.mp3, where XX is a two-digit number.</li>
</ol>
<p>As it is written now, this works without any database at all because we can use Twilio&#8217;s REST API to query the call details and list of associated recordings. This project is more of a starter and proof of concept, although for simple interview scenarios it would work just fine. Other possible upgrades (some requiring a database) could be:</p>
<ul>
<li>Account for unanswered questions in the report</li>
<li>Allow interviewers to hang up in the middle of the interview and call back later to pick up where they left off</li>
<li>Allow the interviewer to review their answer and re-record</li>
<li>Allow for question branching, where the user enters a touch-tone response for yes/no on some answers and is asked only relevant questions from then on</li>
<li>Set up multiple types of interviews</li>
<li>Show the text of the question in the interviewer&#8217;s web browser  while they are listening to it on the phone using AJAX</li>
<li>Make the interview conclusion a menu, as in: &#8220;To hear more about the company, press 1. To hear more about this position, press 2&#8230;&#8221;</li>
</ul>
<p>If you are interested in having me work on this for you, please <a href="mailto:barnabas@bkendall.biz">contact me</a> and I&#8217;d be happy to help you out. If you have any suggestions or improvements, please send them my way too.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/10/phone-screen-twilio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://interview.bkendall.biz/files/intro.mp3" length="763609" type="audio/mpeg" />
<enclosure url="http://interview.bkendall.biz/files/thanks.mp3" length="67529" type="audio/mpeg" />
<enclosure url="http://interview.bkendall.biz/files/conclusion.mp3" length="495613" type="audio/mpeg" />
		</item>
		<item>
		<title>Trying out Typekit</title>
		<link>http://bkendall.biz/2009/08/trying-out-typekit/</link>
		<comments>http://bkendall.biz/2009/08/trying-out-typekit/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 05:12:37 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=236</guid>
		<description><![CDATA[I got an invite code to Typekit today and I am trying out two fonts on this site. They are currently Share Regular (headings) and Droid Serif (paragraphs and lists). Interesting concept, this iTunes for fonts. I hope it takes &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/08/trying-out-typekit/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bkendall.biz/wp-content/uploads/2009/08/typekit-logo.png"><img class="alignright size-full wp-image-237" title="typekit-logo" src="http://bkendall.biz/wp-content/uploads/2009/08/typekit-logo.png" alt="typekit-logo" width="158" height="41" /></a>I got an invite code to <a href="http://typekit.com">Typekit</a> today and I am trying out two fonts on this site. They are currently Share Regular (headings) and Droid Serif (paragraphs and lists). Interesting concept, this iTunes for fonts. I hope it takes off and there is robust competition. Until then, there are workarounds like <a href="http://cufon.shoqolate.com/generate/">Cufón</a> and <a href="http://wiki.novemberborn.net/sifr3/">sIFR</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/08/trying-out-typekit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding keyboard shortcuts with jQuery</title>
		<link>http://bkendall.biz/2009/07/jquery-shortcuts/</link>
		<comments>http://bkendall.biz/2009/07/jquery-shortcuts/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 19:38:58 +0000</pubDate>
		<dc:creator>Barnabas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bkendall.biz/?p=233</guid>
		<description><![CDATA[I was privileged to spend a yesterday at OSCON with everyone at Twilio, and I managed to catch a few talks. I heard Sigurd Magnusson (of Silverstripe fame) give the talk &#8220;10 Usability Epiphanies for your Open-Source Web App&#8221; which &#8230;<p class="read-more"><a href="http://bkendall.biz/2009/07/jquery-shortcuts/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I was privileged to spend a yesterday at <a href="http://en.oreilly.com/oscon2009">OSCON</a> with everyone at <a href="http://www.twilio.com/">Twilio</a>, and I managed to catch a few talks. I heard <a title="@sigurdmagnusson on Twitter" href="http://twitter.com/sigurdmagnusson">Sigurd Magnusson</a> (of Silverstripe fame) give the talk &#8220;10 Usability Epiphanies for your Open-Source Web App&#8221; which focused on how to improve usability. Point 10 was &#8220;Keyboard&#8221;, and one suggestion was to allow enter and escape to proceed and cancel just like native dialog boxes. It just so happens that the web app I&#8217;m working on uses a non-native confirm dialog box with &#8220;yes&#8221; and &#8220;no&#8221; buttons, so on the plane home I changed the behavior to implement this small but crucial usability enhancement. You know, I like it. Small details like this will really improve the overall experience, and I thought I&#8217;d share the essentials of my now-enhanced jQuery dialog function here.</p>
<p><span id="more-233"></span></p>
<p>Here&#8217;s how it works. The script first adds some temporary HTML to the page to build the dialog box but hides it until it&#8217;s all set up. Next, we temporarily bind to the window&#8217;s keydown event (which is needed to capture escape and enter) and fire the associated button click event for key presses that we care about, including the &#8220;y&#8221; and &#8220;n&#8221;. For the button click events, we unbind the keydown event, destroy the dialog, and run the yes or no functions if they exist. As for the structure of the HTML and the CSS, I&#8217;ve only provided a bare minimum here to make it work, but the idea is that the div with the &#8220;modal&#8221; class fills the whole screen and prevents clicks and actions. In our app it has a semi-transparent PNG to grey out the rest of the screen. The Y and N of the yes and no buttons are also underlined to give the clue that they are keyboard shortcuts. I&#8217;m not sure how to hint that &#8220;enter&#8221; and &#8220;esc&#8221; also work, but I think in this case these behaviors are like good special effects in movies: they are best when they are so natural that they are unnoticed. A good enhancement would be to allow an arbitrary number of buttons besides &#8220;yes&#8221; and &#8220;no&#8221;, such as &#8220;Save&#8221; and &#8220;Cancel&#8221; and bind to the first unique character there. Also the best functions are jQuery plugins not in the global namespace, but this has been <a href="http://abeautifulsite.net/notebook/87">debated elsewhere for similar plugins</a>.</p>
<h2>JavaScript</h2>
<pre>function jConfirm(message, yesFn, noFn)
{
	var confHtml = '&lt;div class="modal"&gt;&lt;div class="confirm"&gt;&lt;div class="message"&gt;(message here)&lt;/div&gt;' +
	'&lt;button class="yes_btn"&gt;&lt;u&gt;Y&lt;/u&gt;es&lt;/button&gt;&lt;button class="no_btn"&gt;&lt;u&gt;N&lt;/u&gt;o&lt;/button&gt;&lt;/div&gt;&lt;/div&gt;';
	var dialog = $(confHtml).appendTo('body').hide();

	// keyboard shortcuts
	$(document).bind('keydown', function(evt) {
		switch(evt.which) {
			case 27:	// escape
			case 78:	// letter 'n'
				$('div.confirm button.no_btn').click();
				break;
			case 13:	// enter
			case 89:	// letter 'y'
				$('div.confirm button.yes_btn').click();
				break;
		}
	});

	$('div.message', dialog).html(message);
	$('button', dialog).click(function(event){
		$(document).unbind('keydown');
		dialog.fadeOut(function() { dialog.remove(); });

		if($(this).hasClass('yes_btn')) {
			if(typeof yesFn == 'function') return yesFn(event);
		} else {
			if(typeof noFn == 'function') return noFn(event);
		}
	});
	dialog.fadeIn();
}</pre>
<h2>CSS</h2>
<pre>div.modal {
	position:absolute;
	left:0;
	top:0;
	width:100%;
	height:100%;
	z-index:100;
}

div.confirm {
	background-color:#fff;
	border: 2px solid #666;
	margin:auto;
	padding: 10px;
	position:relative;
	top: 200px;
	width: 300px;
}

div.message {
	color: #000;
	padding:10px 0px;
	text-align:left;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://bkendall.biz/2009/07/jquery-shortcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

