<?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>8byte8</title>
	<atom:link href="http://8byte8.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://8byte8.com/blog</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Fri, 10 May 2013 20:04:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Use JavaScript and UIWebView to make your own APIs</title>
		<link>http://8byte8.com/blog/2013/05/roll-your-own-apis/</link>
		<comments>http://8byte8.com/blog/2013/05/roll-your-own-apis/#comments</comments>
		<pubDate>Fri, 10 May 2013 05:27:47 +0000</pubDate>
		<dc:creator>Jason Hurt</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=268</guid>
		<description><![CDATA[Often times in web applications you interact with web services to add interesting functionality to your apps. Most times you use your server to interact with a web service and pass the results onto the client. JSONP or similar techniques &#8230; <a href="http://8byte8.com/blog/2013/05/roll-your-own-apis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Often times in web applications you interact with web services to add interesting functionality to your apps. Most times you use your server to interact with a web service and pass the results onto the client. JSONP or similar techniques can be used to call those services from the client and bypass your server. Using UIWebView in iOS allows us to inject JavaScript into rendered pages and interact with them. This allows us to roll our own API&#8217;s and not have to do any server side logic. </p>
<p>A good example of this is using Google Translate to translate strings between natural languages. You could sign up for the service and call it from your server. The pricing for this interaction is listed <a href="https://developers.google.com/translate/v2/pricing" target="_blank">here.</a> However, if you browse to <a href="http://translate.google.com" target="_blank">Google Translate</a> you can see that if you type something into the input box on the left, the web page will autodetect the source language and display the results in the box on the right. </p>
<p>So, we can create a UIWebView in an iOS app and inject JS into this page and return the results back to the app.</p>
<p>First, we create a UIWebView and load the Google translate url into the webview. After the page loads, we inject JS to listen for changes on the box on the right:</p>
<p><pre><code>
&nbsp;&nbsp;&nbsp;&nbsp;//listen for the onchange for the result box
&nbsp;&nbsp;&nbsp;&nbsp;NSString *js = @&quot;var resultBox = document.getElementById(&#039;result_box&#039;); &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;var resultChecks = 0;&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;var checkForResult = function() { &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;resultChecks += 1;&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;if(resultChecks &gt; 100) {&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp; window.location = &#039;lu://error/1&#039;;&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;}&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;else if(resultBox.childNodes.length &lt; 1) { &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp; setTimeout(checkForResult, 50); &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;}&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;else {&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;var translation = &#039;&#039;; &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;for(var i = 0; i &lt; resultBox.childNodes.length; i++) { &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var text = resultBox.childNodes[i].innerText;&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(text) { &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(i &gt; 0) { translation += &#039; &#039;; } &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; translation += text; &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;}&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;window.location = &#039;lu://translated/&#039;+translation; &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;}&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;};&quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&quot;setTimeout(checkForResult, 50);&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;[_webView stringByEvaluatingJavaScriptFromString:js];
</code></pre></p>
<p>Notice this line in the JS: <code>window.location = lu://translated/&#039;+translation</code><br />
This allows us to listen for url changes in the web view and then respond to them in Objective C code. Here we execute a callback whenever a string is translated:</p>
<p><pre><code>
&nbsp;&nbsp;&nbsp;&nbsp;if([scheme isEqualToString:@&quot;lu&quot;]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *host = request.URL.host;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if([host isEqualToString:@&quot;translated&quot;]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSString *translationText = [request.URL.pathComponents objectAtIndex:1];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSDictionary *sourceAndCallback = [_sourcesAndCallbacks objectAtIndex:0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[_sourcesAndCallbacks removeObjectAtIndex:0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void (^success)(NSString*) = [sourceAndCallback objectForKey:@&quot;success&quot;];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success(translationText);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//NSLog(@&quot;translation: %@&quot;, translationText);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NSURL *googleTranslateUrl = [NSURL URLWithString:[NSString stringWithFormat:@&quot;http://%@&quot;, GOOGLE_TRANSLATE_HOST]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[_webView loadRequest:[NSMutableURLRequest requestWithURL:googleTranslateUrl]];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
</code></pre></p>
<p>To translate a string, we inject the source string into the box on the left:</p>
<p><pre><code>
&nbsp;&nbsp;&nbsp;&nbsp;//inject the text to be translated into the source textarea
&nbsp;&nbsp;&nbsp;&nbsp;NSString *js = [NSString stringWithFormat:@&quot;var source = document.getElementById(&#039;source&#039;); &quot; \
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;source.value = &#039;%@&#039;;&quot;, source];
&nbsp;&nbsp;&nbsp;&nbsp;[_webView stringByEvaluatingJavaScriptFromString:js];
</code></pre></p>
<p>There is a full example and source available at: <a href="https://github.com/jhurt/GoogleTranslateiOS" target="_blank">https://github.com/jhurt/GoogleTranslateiOS</a></p>
<p><a href="http://8byte8.com/blog/wp-content/uploads/2013/05/GoogleTranslateiOS.png"><img src="http://8byte8.com/blog/wp-content/uploads/2013/05/GoogleTranslateiOS-200x300.png" alt="GoogleTranslateiOS" width="200" height="300" class="alignnone size-medium wp-image-277" /></a></p>
<p>Also please note that this code is for demonstration purposes only. It can obviously break when translate.google.com changes so use with caution. </p>
<p>I hope this example showed you how to roll your own API&#8217;s in iOS using JavaScript injection. Enjoy buddies!</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2013/05/roll-your-own-apis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2013 AT&amp;T Developer Summit Hack-a-Thon</title>
		<link>http://8byte8.com/blog/2013/01/2013-att-developer-summit-hack-a-thon/</link>
		<comments>http://8byte8.com/blog/2013/01/2013-att-developer-summit-hack-a-thon/#comments</comments>
		<pubDate>Mon, 07 Jan 2013 21:05:11 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[Hack-a-Thons]]></category>
		<category><![CDATA[at&t]]></category>
		<category><![CDATA[hackathon]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=258</guid>
		<description><![CDATA[Last weekend, Jason and I participated in the AT&#38;T Developer Summit Hack-a-Thon. It was held at The Palms Resort &#38; Casino, and it was our second year participating in it. Unlike last year, where you had to use a specific &#8230; <a href="http://8byte8.com/blog/2013/01/2013-att-developer-summit-hack-a-thon/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Last weekend, Jason and I participated in the <a title="AT&amp;T Developer Summit Hack-a-Thon" href="https://www.2013devsummit.com/Registration/Hackathon.aspx" target="_blank">AT&amp;T Developer Summit Hack-a-Thon</a>. It was held at The Palms Resort &amp; Casino, and it was our second year participating in it. Unlike last year, where you had to use a specific AT&amp;T API in order to be eligible for the grand prizes, this year we could use any AT&amp;T API we wanted. This really helped when it came time to brainstorm project ideas, as we weren&#8217;t limited.</p>
<p><a href="http://8byte8.com/blog/wp-content/uploads/2013/01/atthack-sign.png"><img title="atthack-sign" src="http://8byte8.com/blog/wp-content/uploads/2013/01/atthack-sign.png" alt="" width="640" height="480" /></a></p>
<p>On Saturday we arrived early to register and grab breakfast before diving headfirst into development. We spent the majority of the day and evening getting the prototype finished so that Sunday could be spent bug fixing and preparing our presentation. However, due to the sheer number of groups this year (75 groups total presented!) our initial 3-minute presentation time was cut in half, so we only had time for a quick demo.</p>
<p><a href="http://8byte8.com/blog/wp-content/uploads/2013/01/atthack-developers.png"><img class="aligncenter size-full wp-image-259" title="atthack-developers" src="http://8byte8.com/blog/wp-content/uploads/2013/01/atthack-developers.png" alt="" width="640" height="480" /></a></p>
<p>While we didn&#8217;t place in the top 5, we were happy to win one of the &#8220;Best Windows 8 Phone Apps&#8221; prizes &#8211; a Microsoft Surface Tablet, a Nokia Lumia 920, Nokia Purity headphones, and some developer tokens. Yay!</p>
<p>Overall, another fun and successful hack-a-thon. Now, time to go catch up on some sleep.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2013/01/2013-att-developer-summit-hack-a-thon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Pomeranian Pennies</title>
		<link>http://8byte8.com/blog/2012/11/introducing-pomeranian-pennies/</link>
		<comments>http://8byte8.com/blog/2012/11/introducing-pomeranian-pennies/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 21:51:04 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[Pomeranian Pennies]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[pomeranian pennies]]></category>
		<category><![CDATA[slot game]]></category>
		<category><![CDATA[slot machine]]></category>
		<category><![CDATA[tablet game]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=251</guid>
		<description><![CDATA[Happy Tuesday, everyone! Today Jason and I are happy to announce the release of our newest app (and first game), Pomeranian Pennies, into the Apple App Store and Google Play. Playing penny slots has never been so cute! Try your luck with our &#8230; <a href="http://8byte8.com/blog/2012/11/introducing-pomeranian-pennies/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Happy Tuesday, everyone! Today Jason and I are happy to announce the release of our newest app (and first game), Pomeranian Pennies, into the <a title="Pomeranian Pennies - Apple App Store" href="https://itunes.apple.com/us/app/pomeranian-pennies/id563975043?mt=8" target="_blank">Apple App Store</a> and <a title="Pomeranian Pennies - Google Play" href="https://play.google.com/store/apps/details?id=com.ebytee.pp&amp;feature=nav_result#?t=W251bGwsMSwxLDMsImNvbS5lYnl0ZWUucHAiXQ" target="_blank">Google Play</a>.</p>
<p>Playing penny slots has never been so cute! Try your luck with our multi-line, multi-reel slot machine with a fun bonus game.</p>
<p>Pomeranian Pennies is free to download and is available on Android Tablets and iPad. We’d love to hear any feedback you have, whether it be a comment, suggestion, or bug fix. We hope you enjoy playing!</p>
<p><a href="http://8byte8.com/blog/wp-content/uploads/2012/11/pompennies.jpg"><img class="aligncenter size-full wp-image-252" title="Pomeranian Pennies" src="http://8byte8.com/blog/wp-content/uploads/2012/11/pompennies.jpg" alt="Pomeranian Pennies" width="480" height="360" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/11/introducing-pomeranian-pennies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Winnow Lite Now in the App Store</title>
		<link>http://8byte8.com/blog/2012/08/winnow-lite-now-in-the-app-store/</link>
		<comments>http://8byte8.com/blog/2012/08/winnow-lite-now-in-the-app-store/#comments</comments>
		<pubDate>Thu, 02 Aug 2012 19:44:32 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[Winnow]]></category>
		<category><![CDATA[winnow]]></category>
		<category><![CDATA[winnow lite]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=239</guid>
		<description><![CDATA[Happy Thursday, everyone! Today Jason and I are happy to announce the release of  Winnow Lite, into the Apple App Store. Winnow Lite is a Twitter client for iOS that helps users manage the noise in your tweet stream and has &#8230; <a href="http://8byte8.com/blog/2012/08/winnow-lite-now-in-the-app-store/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" src="http://www.winnowapp.com/images/logo_yellow.png" alt="" width="100" />Happy Thursday, everyone! Today Jason and I are happy to announce the release of  <a title="Winnow, a Twitter client for iPhone" href="http://www.winnowapp.com/" target="_blank">Winnow Lite</a>, into the <a title="Winnow, now available in the App Store!" href="http://itunes.apple.com/us/app/winnow-lite/id547108886?mt=8" target="_blank">Apple App Store</a>.</p>
<p>Winnow Lite is a Twitter client for iOS that helps users manage the noise in your tweet stream and has many of the great features of Winnow, such as muting users, seeing images directly in your stream, and Congratulators.</p>
<p><a title="Winnow, now available in the App Store!" href="http://itunes.apple.com/us/app/winnow/id508875346?mt=8" target="_blank"><img class="alignright" src="http://www.winnowapp.com/images/app_store_big.png" alt="" width="150" /></a></p>
<p>As always, we love feedback, whether it be a comment, suggestion, or bugfix. Enjoy, buddies!</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/08/winnow-lite-now-in-the-app-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building Your Confidence As A Developer</title>
		<link>http://8byte8.com/blog/2012/08/building-your-confidence-as-a-developer/</link>
		<comments>http://8byte8.com/blog/2012/08/building-your-confidence-as-a-developer/#comments</comments>
		<pubDate>Wed, 01 Aug 2012 11:30:36 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=227</guid>
		<description><![CDATA[Having confidence in myself as a developer is something I didn&#8217;t have until recently, and while there&#8217;s still so much to learn in this ever-changing field, I feel like I&#8217;ve finally reached a point where I can develop (and design) &#8230; <a href="http://8byte8.com/blog/2012/08/building-your-confidence-as-a-developer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Having confidence in myself as a developer is something I didn&#8217;t have until recently, and while there&#8217;s still so much to learn in this ever-changing field, I feel like I&#8217;ve finally reached a point where I can develop (and design) with confidence.</p>
<p>You don&#8217;t become a confident developer overnight, or even by reading a few books. You do so by getting out there and working your ass off. While no path is the same, I think that everyone can benefit from and boost their confidence by doing a few simple things. This is by no-means an exhaustive list or even guaranteed to work for you &#8211; these are just things that I found have helped me in my own career.</p>
<p><strong>Start early.</strong><br />
You&#8217;re never too young or inexperienced to get a job <em>somewhere </em>doing web development. Many companies are in desperate need of help, so as long as you have a very basic understanding of HTML &amp; CSS, you can find work. It may be an unpaid internship or only part-time work, but the experience (and contacts) you&#8217;ll make at each job are invaluable.</p>
<p><strong>Work for free, or for very cheap.</strong><br />
Much of my experience came from internships (paid or non-paid) and for doing free websites for friends &amp; family. Not only did I continue to learn things, but I improved my process and became faster and more efficient each time. Even better &#8211; I had lots of sites to add to my portfolio.</p>
<p>When I began charging for my work, I charged less than industry standard because I still wasn&#8217;t confident that I was giving the client the best they could get. But once my confidence went up, so did my rate.</p>
<p><strong>Not enough experience? Apply anyway.</strong><br />
During my freshman year at university I realized I needed a job and found one for a campus web developer. The job description said they wanted 4 years of experience, but I had absolutely none. I applied anyway, hoping they would like my portfolio enough to at least grant me an interview. To my surprise, they did, and I was eventually offered the job. When I later asked about the 4-years of experience, my boss said that they had liked my personality enough that they decided they&#8217;d rather have me around for 4 years instead of having to hire a new developer each year when graduation rolled around.</p>
<p>Receiving a job you didn&#8217;t think you could get is an amazing confidence booster, and even if you don&#8217;t receive the job, you&#8217;ve just improved your interviewing experience.</p>
<p><strong>Challenge yourself.</strong><br />
While I loved every job I&#8217;ve ever had, I almost always reached a point where I wasn&#8217;t receiving projects that challenged me. In college I realized that updating links, copy, and images was boring, so I found another job. Once I had mastered cutting PSD templates into HTML &amp; CSS and could create HTML emails at the drop of a hat, I found a job that expanded my JavaScript skills. You see where this is going, right?</p>
<p><strong>Work with people smarter than yourself.<br />
</strong>This is probably the most important piece of advice I can offer. While working with people smarter than yourself can actually hinder your confidence, it is <strong>so</strong> worth it. I cannot begin to say how much I&#8217;ve learned from those more intelligent than myself, and being around these people every day motivated me even more to keep improving my skills. This leads me to&#8230;</p>
<p><strong>Always improve.<br />
</strong>Read books, go to conferences, and try new technologies. Just because your company doesn&#8217;t use <a title="SASS, Syntactically Awesome Stylesheets" href="http://sass-lang.com/" target="_blank">SASS</a> or <a title="LessCSS, Dynamic Stylesheets" href="http://lesscss.org/" target="_blank">LessCSS</a> doesn&#8217;t mean you can&#8217;t play with them at home. And maybe, just maybe, you can convince your boss<span style="color: #000000;"><strong> </strong>to use it on the next project because you&#8217;ll have the confidence and knowledge to support your argument.</span></p>
<p><strong>Work at a &#8220;known&#8221; company.</strong><br />
I&#8217;m hesitant to give this piece of advice because it&#8217;s not a must-have for building your confidence, but realizing I was good enough to get an interview at Zappos definitely helped. Not only that, but it opened so many other doors &#8211; I had never been headhunted by recruiters until I was able to list <a title="Online shoe/clothing retailer and awesome place to work" href="http://www.zappos.com" target="_blank">Zappos</a> on my resume, and the contacts I made through the company have proven to be invaluable now that I&#8217;m working for myself.</p>
<p>Lastly, while having confidence is great, it&#8217;s important to realize you&#8217;ll always have more to learn, which leaves me to my last piece of advice:</p>
<p><strong>Be humble.</strong><br />
If there&#8217;s one thing I learned from working at <a title="Zappos, online shoe/clothing retailer and awesome place to work" href="http://www.zappos.com" target="_blank">Zappos</a>, it&#8217;s that people don&#8217;t like cocky developers. I don&#8217;t care if you&#8217;re the smartest person on earth &#8211; if you&#8217;re an asshole, I don&#8217;t want to work with you. It&#8217;s great if you&#8217;ve reached a place in your career where you&#8217;re confident, but instead of letting the whole world know how smart you are, how about paying it forward by helping some struggling developers or writing some tutorials? And always remember:</p>
<p>&#8220;The expert in anything was once a beginner.&#8221; -President Rutherford B. Hayes</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/08/building-your-confidence-as-a-developer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>libFLAC for iOS</title>
		<link>http://8byte8.com/blog/2012/07/libflac-for-ios/</link>
		<comments>http://8byte8.com/blog/2012/07/libflac-for-ios/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 19:15:51 +0000</pubDate>
		<dc:creator>Jason Hurt</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=228</guid>
		<description><![CDATA[In a previous post we talked about using Google&#8217;s Voice Recognition web service for voice recognition in iOS apps. Part of the process involved compiling libFLAC for iOS. This includes building a 386 binary for the simulator and an arm7 &#8230; <a href="http://8byte8.com/blog/2012/07/libflac-for-ios/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>In a <a href="http://8byte8.com/blog/2012/07/voice-recognition-ios/" target="_blank">previous post</a> we talked about using Google&#8217;s Voice Recognition web service for voice recognition in iOS apps. Part of the process involved compiling libFLAC for iOS. This includes building a 386 binary for the simulator and an arm7 binary for the device. This is a pain point if you are new to C or if the thought of cross-compilation gives you the heebee-geebees.</p>
<p>I came across a great <a href="https://github.com/jverkoey/iOS-Framework" target="_blank">tutorial on github</a> for creating Frameworks for use in other iOS apps. We followed this tutorial and created a <a href="https://github.com/jhurt/FLACiOS" target="_blank">github project for building libFLAC as an iOS framework</a>. You can clone the repository and start using libFLAC in your own iOS applications. Don&#8217;t forget to checkout our open-sourced project <a href="https://github.com/jhurt/wav_to_flac" target="_blank">wav_to_flac</a> for converting WAVE-encoded files generated by Apple into FLAC-encoded files using libFLAC.</p>
<p>Enjoy Buddies!</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/07/libflac-for-ios/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Co-working: Co+Hoots</title>
		<link>http://8byte8.com/blog/2012/07/co-working-cohoots/</link>
		<comments>http://8byte8.com/blog/2012/07/co-working-cohoots/#comments</comments>
		<pubDate>Mon, 30 Jul 2012 11:30:08 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[8byte8]]></category>
		<category><![CDATA[Co-working]]></category>
		<category><![CDATA[co+hoots]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[phoenix]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=225</guid>
		<description><![CDATA[Before heading home to Las Vegas, Jason and I wanted to check out another co-working space in Phoenix that we&#8217;d heard about, called Co+Hoots. Co+Hoots is located in downtown Phoenix, and as soon as we walked in we were greeted &#8230; <a href="http://8byte8.com/blog/2012/07/co-working-cohoots/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Before heading home to Las Vegas, Jason and I wanted to check out another co-working space in Phoenix that we&#8217;d heard about, called <a title="Co+Hoots co-working space in Phoenix" href="http://www.cohoots.com/" target="_blank">Co+Hoots</a>. Co+Hoots is located in downtown Phoenix, and as soon as we walked in we were greeted by the friendly community directory, Kelsey. She gave us a tour of the building, introduced us to the other companies who work out of Co+Hoots full-time, and told us a little about the company.</p>
<p>Being first-time visitors, she waived the daily drop-in fee which was incredibly nice of her (it&#8217;s normally $15/person for a day). After the tour Jason and I got to work, but took a small time-out for the Coffee+Coffee event, where Co+Hoots brings in delicious iced coffee for everyone and like-minded developers can get together and code.</p>
<p><img class="aligncenter" title="Co+Hoots" src="http://farm9.staticflickr.com/8017/7657594586_fab1d611f3_z.jpg" alt="" width="480" height="640" /></p>
<p>The space was big and bright, with the full-time companies circling the room and the open tables in the center. Can you spot Jason in the photo above?</p>
<p><img class="aligncenter" title="Co+Hoots" src="http://farm9.staticflickr.com/8162/7657593404_0113093ec0_z.jpg" alt="" width="480" height="640" /></p>
<p>There were two meeting rooms in the back available for use, equipped with everything you need to hold a meeting.</p>
<p><img class="aligncenter" title="Co+Hoots" src="http://farm8.staticflickr.com/7250/7657592338_76e59bd3c4_z.jpg" alt="" width="640" height="480" /></p>
<p>There was also a break room in the back available to all its members.</p>
<p><img class="aligncenter" title="Co+Hoots" src="http://farm8.staticflickr.com/7135/7657595186_5b9298c96a_z.jpg" alt="" width="480" height="640" /></p>
<p>We even got a bit of free schwag &#8211; yay! I really liked the &#8220;Startup Book Club&#8221; bookmark, filled with a new recommended reading each month. Perhaps something cool to start down at <a title="/usr/lib Technology Library in downtown Las Vegas" href="http://usrlib.org/" target="_blank">/usr/lib</a>?</p>
<p>We both really liked working from Co+Hoots and really appreciate all the friendliness that Kelsey and everyone else showed us &#8211; we definitely recommend checking them out if you&#8217;re ever in Phoenix and need a place to work!</p>
<p>View more photos from Co+Hoots <a title="Photos of Co+Hoots in Phoenix, AZ" href="http://www.flickr.com/photos/83227150@N07/sets/72157630778097198/" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/07/co-working-cohoots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Co-working: Gangplank</title>
		<link>http://8byte8.com/blog/2012/07/co-working-gangplank/</link>
		<comments>http://8byte8.com/blog/2012/07/co-working-gangplank/#comments</comments>
		<pubDate>Fri, 27 Jul 2012 18:09:42 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[8byte8]]></category>
		<category><![CDATA[Co-working]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[gangplank]]></category>
		<category><![CDATA[phoenix]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=219</guid>
		<description><![CDATA[Last week Jason and I decided to spend some time hacking and working down in Phoenix, which is only a 5-hour drive from Las Vegas. We&#8217;ve been wanting to check out Gangplank, a co-working space located in a suburb of Phoenix &#8230; <a href="http://8byte8.com/blog/2012/07/co-working-gangplank/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Last week Jason and I decided to spend some time hacking and working down in Phoenix, which is only a 5-hour drive from Las Vegas. We&#8217;ve been wanting to check out <a title="Gangplank, a co-working space in Phoenix, AZ" href="http://gangplankhq.com/" target="_blank">Gangplank</a>, a co-working space located in a suburb of Phoenix called Chandler.</p>
<p>We found an empty table and set up shop, and after awhile we asked one of the members if we could have a tour. Luckily a friendly woman named <a title="Carrie Hall, Athlinks.com" href="http://athlinks.com/racer/85647017" target="_blank">Carrie</a> (from a company named Athlinks who works full-time at Gangplank) offered to give us one.</p>
<p><img class="aligncenter" title="Gangplank" src="http://farm9.staticflickr.com/8142/7624583340_dd55befedd_z.jpg" alt="" width="640" height="480" /></p>
<p>Gangplank is a non-profit co-working space, which means it&#8217;s 100% free to the community. Carrie explained that their business model is a pay-it-forward model, where everyone helps out in some way, whether it be taking out the garbage, cleaning the bathrooms, giving a Brown Bag presentation, or donating your time and skills to someone who may benefit from them.</p>
<p><img class="aligncenter" title="Gangplank" src="http://farm9.staticflickr.com/8281/7624612618_ced409eb1f_z.jpg" alt="" width="480" height="640" /></p>
<p>Gangplank has several conference rooms available to people who need to hold a meeting, get a little privacy, or read books from their library. Gangplank also has an entire room dedicated to video and podcast recording &#8211; all free to use after taking a 1-hour class on handling the equipment.</p>
<p><img class="aligncenter" title="Gangplank" src="http://farm9.staticflickr.com/8154/7624607378_55c859a1c1_z.jpg" alt="" width="480" height="640" /></p>
<p>Near the back of the building was a classroom full of iMacs. Carrie said that anyone who wants to teach a class can use the room and that it&#8217;s frequently used by people who want to practice giving speeches.</p>
<p><img class="aligncenter" title="Gangplank" src="http://farm9.staticflickr.com/8427/7624579142_1904af46cb_z.jpg" alt="" width="480" height="640" /></p>
<p>In the center of the main room is a small community area where people can hang out, see a Brown Bag presentation, hold small meetings, or be social. While Jason and I were there, we got to see a Brown Bag presentation via Skype by another co-working space in Oklahoma (called The Div) who had been inspired to start their own co-working space after visiting Gangplank a few years back.</p>
<p>Carrie also mentioned that there were a few companies and startups who worked out of Gangplank full-time, free of charge, and that every few months everyone rearranged their desks so that these companies got the opportunity to interact and get to know the other companies better.</p>
<p>Jason and I really enjoyed our experience at Gangplank and we can&#8217;t wait to visit again! Definitely check it out if you&#8217;re ever in the Phoenix area.</p>
<p>View more photos from Gangplank <a title="Gangplank Flickr set" href="http://www.flickr.com/photos/83227150@N07/sets/72157630700789966/with/7624566990/" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/07/co-working-gangplank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.ready() vs .load() in jQuery</title>
		<link>http://8byte8.com/blog/2012/07/ready-vs-load-in-jquery/</link>
		<comments>http://8byte8.com/blog/2012/07/ready-vs-load-in-jquery/#comments</comments>
		<pubDate>Fri, 13 Jul 2012 11:00:09 +0000</pubDate>
		<dc:creator>Jen</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=210</guid>
		<description><![CDATA[Following Jason&#8217;s post about page.init, today I wanted to talk about the .load() function in jQuery. I recently wrote my own image carousel for the homepages of Winnow and Lucidity to showcase screenshots of the apps. While writing it, I &#8230; <a href="http://8byte8.com/blog/2012/07/ready-vs-load-in-jquery/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Following <a title="Don’t Let page.init Slow You Down" href="http://8byte8.com/blog/2012/07/dont-let-page-init-slow-you-down/">Jason&#8217;s post about page.init</a>, today I wanted to talk about the <a title="jquery .load() event" href="http://api.jquery.com/load-event/" target="_blank">.load() function</a> in jQuery.</p>
<p>I recently wrote my own image carousel for the homepages of <a title="Winnow, a Twitter client for iOS" href="http://www.winnowapp.com" target="_blank">Winnow</a> and <a title="Lucidity - Record and track your dreams" href="http://www.lucidity.io" target="_blank">Lucidity</a> to showcase screenshots of the apps. While writing it, I ran into some weird behavior when trying to get the image widths via jQuery&#8217;s .width() function &#8211; the widths were coming back 0px every time I refreshed the page.</p>
<p>It turns out that jQuery&#8217;s <a title="jQuery's .ready() event" href="http://api.jquery.com/ready/" target="_blank">.ready() function</a> is fired when all HTML elements on the page are executed, even if images haven&#8217;t fully loaded. The .load() function, on the other hand, doesn&#8217;t fire until everything on the page has loaded, including images.</p>
<p><pre><code>
// Use this if your code does not depend on images
$(document).ready(function(e) {
...
}

// Use this if your code does depend on images
$(window).load(function(e) {
...
}
</code></pre></p>
<p>So, lesson learned: if you&#8217;re writing any code that is dependent on images, be sure to use the .load() function instead of .ready()!</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/07/ready-vs-load-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Let page.init Slow You Down</title>
		<link>http://8byte8.com/blog/2012/07/dont-let-page-init-slow-you-down/</link>
		<comments>http://8byte8.com/blog/2012/07/dont-let-page-init-slow-you-down/#comments</comments>
		<pubDate>Thu, 12 Jul 2012 21:30:55 +0000</pubDate>
		<dc:creator>Jason Hurt</dc:creator>
				<category><![CDATA[jQuery Mobile]]></category>
		<category><![CDATA[PhoneGap]]></category>

		<guid isPermaLink="false">http://8byte8.com/blog/?p=196</guid>
		<description><![CDATA[Inspired by Alex Sexton&#8217;s Don&#8217;t Let Document Ready Slow You Down, we have begun using a similar technique in a new mobile web application we are working on. We are using jQuery Mobile and PhoneGap to develop a mobile web &#8230; <a href="http://8byte8.com/blog/2012/07/dont-let-page-init-slow-you-down/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Inspired by Alex Sexton&#8217;s <a href="Don't Let Document Ready Slow You Down." target="_blank">Don&#8217;t Let Document Ready Slow You Down</a>, we have begun using a similar technique in a new mobile web application we are working on. We are using <a href="http://jquerymobile.com/" target="_blank">jQuery Mobile</a> and <a href="http://phonegap.com/" target="_blank">PhoneGap</a> to develop a mobile web client. In jQuery Mobile, best practices recommend to use the pageinit event instead of document.ready in order to initialize the JavaScript on your pages. We can achieve a better user experience by loading any data needed for generating content as early as possible in the application lifecycle. Just as suggested by Alex Sexton, instead of wrapping any ajax calls in a pageinit event handler, we instead wrap the ajax success callbacks in pageinit event handlers.</p>
<p>As an example, in our application there is a categories view whose categories are loaded via an ajax call. We make this call in response to the pageinit event. Note that the ajax call happens in the AwardController.getCategories function:<br />
<pre><code>
var showCategories = function (categories) {
var uiBlockClasses = [&#039;ui-block-a&#039;, &#039;ui-block-b&#039;];
var uiBarClasses = [&#039;ui-bar-e&#039;, &#039;ui-bar-b&#039;, &#039;ui-bar-b&#039;, &#039;ui-bar-e&#039;];
var categoryGrid = $(&#039;#categoryGrid&#039;);
var template = $(&#039;#categorySelectTemplate&#039;).html();
for (var i = 0; i &amp;lt; categories.length; i++) {
var uiBlockClassIndex = i % 2;
var uiBarClassIndex = i % 4;
var category = categories[i];
var html = Mustache.to_html(template, {&#039;ui_block_class&#039;:uiBlockClasses[uiBlockClassIndex], &#039;ui_bar_class&#039;:uiBarClasses[uiBarClassIndex], &#039;category&#039;:category});
categoryGrid.append(html);
}
};</code></pre></p>
<p>$(&#8216;#categoriesPage&#8217;).live(&#8216;pageinit&#8217;, function () {<br />
AwardController.getCategories(showCategories);<br />
});</p>
<p>&nbsp;</p>
<p>To load this data earlier in the application lifecycle we can do the following instead:<br />
<pre><code>
var showCategories = function (categories) {
$(&#039;#categoriesPage&#039;).live(&#039;pageinit&#039;, function () {
var uiBlockClasses = [&#039;ui-block-a&#039;, &#039;ui-block-b&#039;];
var uiBarClasses = [&#039;ui-bar-e&#039;, &#039;ui-bar-b&#039;, &#039;ui-bar-b&#039;, &#039;ui-bar-e&#039;];
var categoryGrid = $(&#039;#categoryGrid&#039;);
var template = $(&#039;#categorySelectTemplate&#039;).html();
for (var i = 0; i &amp;lt; categories.length; i++) {
var uiBlockClassIndex = i % 2;
var uiBarClassIndex = i % 4;
var category = categories[i];
var html = Mustache.to_html(template, {&#039;ui_block_class&#039;:uiBlockClasses[uiBlockClassIndex], &#039;ui_bar_class&#039;:uiBarClasses[uiBarClassIndex], &#039;category&#039;:category});
categoryGrid.append(html);
}
});
};</code></pre></p>
<p>AwardController.getCategories(showCategories);</p>
<p>Here we are still generating the content after the page initializes, but we have requested the data at the time the javascript executes, which for us is when the application&#8217;s home page loaded. This means it is available before the categories pages loads, so the user has less time to wait in order to see the content. Be careful to not go overboard with this technique, especially if you have a lot of generated content in your application. You don&#8217;t want to make a ton of ajax requests on the home page.</p>
]]></content:encoded>
			<wfw:commentRss>http://8byte8.com/blog/2012/07/dont-let-page-init-slow-you-down/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
