<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7333770831047956364</id><updated>2024-10-04T22:09:05.486-04:00</updated><category term="chrome os"/><category term="JavaScript"/><category term="cloud"/><category term="coding"/><category term="IDE"/><category term="cr-48"/><category term="dev tools"/><category term="html5"/><category term="3G"/><category term="Book"/><category term="React"/><category term="ReactJS"/><category term="aviary"/><category term="css"/><category term="google"/><category term="ios"/><category term="jquery mobile"/><category term="phonegap"/><category term="verizon"/><category term="wi-fi"/><title type='text'>Go Cloud Go</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7685254138122770276</id><published>2015-11-16T14:14:00.000-05:00</published><updated>2016-08-11T14:14:27.835-04:00</updated><title type='text'>Eleven Fifty Academy</title><content type='html'>&lt;div style=&quot;background-color: white; border: 0px; color: #555555; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Last week I was fortunate enough to join with the two Daves from&amp;nbsp;&lt;a href=&quot;http://www.getfretless.com/&quot; rel=&quot;external&quot; style=&quot;border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;getfretless&lt;/a&gt;&amp;nbsp;and help them to teach a group of developers the core concepts of&amp;nbsp;&lt;a href=&quot;https://angularjs.org/&quot; rel=&quot;external&quot; style=&quot;border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;angular.js&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;https://nodejs.org/&quot; rel=&quot;external&quot; style=&quot;border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;node.js&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #555555; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
This was a full five-day course where most students stayed and learned for more than 8 hours per day at the campus of the&amp;nbsp;&lt;a href=&quot;http://elevenfiftyacademy.org/&quot; rel=&quot;external&quot; style=&quot;border: 0px; color: #258fb8; font-family: inherit; font-style: inherit; font-weight: inherit; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;Eleven Fifty Academy&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #555555; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
I had a wonderful time helping students create a real application with a Node.js REST API, and well constructed angular front-end. I will be continuing to teach courses like this in the future at Eleven Fifty and hope to have many more classes that were as receptive and eager to learn JavaScript as this one. Thanks to the class for a great week.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7685254138122770276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2015/11/eleven-fifty-academy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7685254138122770276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7685254138122770276'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2015/11/eleven-fifty-academy.html' title='Eleven Fifty Academy'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-764439373947333026</id><published>2015-09-16T09:02:00.002-04:00</published><updated>2015-09-16T09:02:55.222-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Book"/><category scheme="http://www.blogger.com/atom/ns#" term="React"/><category scheme="http://www.blogger.com/atom/ns#" term="ReactJS"/><title type='text'>Introduction To React - Officially Published!</title><content type='html'>It has been a while since I posted that I was writing a second book, &lt;i&gt;&lt;a href=&quot;http://www.amazon.com/Introduction-React-Cory-Gackenheimer/dp/1484212460/ref=sr_1_1?ie=UTF8&amp;amp;qid=1442342177&amp;amp;sr=8-1&quot; target=&quot;_blank&quot;&gt;Introduction to React&lt;/a&gt;. &lt;/i&gt;Today it is officially available in both ebook and paperback formats. I hope you enjoy reading the book and the introduction to React as much as I enjoyed writing it.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.amazon.com/Introduction-React-Cory-Gackenheimer-ebook/dp/B00ZHM53D0/ref=mt_kindle?_encoding=UTF8&amp;amp;me=&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjqzdtGrZNuWYm5biAFz06aBctzUPB2akg-IcJ07Qupszt6tBjHY6B48fgtCdLqaHF1VaMrgjmeg1Jt8cHtprm0steFem7jPEyBe-mMFI8VJaUCkwdGuhTD5ZwVVceWItL5ug866VUmKp4/s320/9781484212462.tif&quot; title=&quot;&quot; width=&quot;210&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;a href=&quot;http://www.amazon.com/Introduction-React-Cory-Gackenheimer-ebook/dp/B00ZHM53D0/ref=mt_kindle?_encoding=UTF8&amp;amp;me=&quot; target=&quot;_blank&quot;&gt;Introduction to React&lt;/a&gt;&lt;/i&gt; teaches you React, the JavaScript framework created by developers at Facebook, to solve the problem of building complex user interfaces in a consistent and maintainable way. React.js shrugs away common front-end conventions in an effort to make things more efficient – use Introduction to React to learn about this framework and more today.&lt;br /&gt;&lt;br /&gt;You will learn what React is, and why it was created to solve the problems it does. You will get to know the React API, and be introduced to React’s specific JavaScript extension, JSX, which makes authoring React components easier and maintainable. You will also learn how you can test your React applications and the tools you can use while building. Once you understand these core concepts, you can build applications with React. This will help you cement the ideas and fundamentals of React and prepare you to utilize React in your own use case.&lt;br /&gt;&lt;h3&gt;
What you’ll learn&lt;/h3&gt;
How to use React to maintain complex user interfaces in an efficient way&lt;br /&gt;How to integrate existing user interfaces and move forward with React&lt;br /&gt;How to manage application architecture using Flux&lt;br /&gt;How to easily utilize JSX, React’s JavaScript extension&lt;br /&gt;&lt;h3&gt;
Who this book is for&lt;/h3&gt;
&lt;br /&gt;Introduction to React is for a web developer who is comfortable writing JavaScript and CSS. You will apply JavaScript to build web pages that utilize the paradigm shifting React framework. Introduction to React will provide you with the tools to create maintainable complex user interfaces.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/764439373947333026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2015/09/introduction-to-react-officially.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/764439373947333026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/764439373947333026'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2015/09/introduction-to-react-officially.html' title='Introduction To React - Officially Published!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjqzdtGrZNuWYm5biAFz06aBctzUPB2akg-IcJ07Qupszt6tBjHY6B48fgtCdLqaHF1VaMrgjmeg1Jt8cHtprm0steFem7jPEyBe-mMFI8VJaUCkwdGuhTD5ZwVVceWItL5ug866VUmKp4/s72-c/9781484212462.tif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-5855135545264441174</id><published>2015-09-15T14:20:00.000-04:00</published><updated>2015-09-15T14:24:25.593-04:00</updated><title type='text'>Trying to Run React Native Android on Windows</title><content type='html'>React Native for Android was released yesterday. As soon as I spotted the release I wanted to give it a whirl on my work PC. I did the npm install and got started right away, only to find that the init command was failing. I expected this because officially React Native isn&#39;t supported on windows but there is this master tracking issue for this in Github =&amp;gt; &amp;nbsp;https://github.com/facebook/react-native/issues/2693 ... anyway.. so I got an error:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;events.js:141
      throw er; // Unhandled &#39;error&#39; event
      ^

Error: spawn npm ENOENT
    at exports._errnoException (util.js:837:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
    at onErrorNT (internal/child_process.js:344:16)
    at doNTCallback2 (node.js:429:9)
    at process._tickCallback (node.js:343:17)
    at Function.Module.runMain (module.js:477:11)
    at startup (node.js:117:18)
    at node.js:951:3&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Not being one to give up right away I wanted to fix it. I noticed from the error message that the spawn of npm using (&#39;child_process&#39;).spawn was causing the error. Luckily, npm contains several modules that can be a drop-in replacement for this and I just grabbed the module &lt;a href=&quot;https://www.npmjs.com/package/cross-spawn&quot; target=&quot;_blank&quot;&gt;cross-spawn&lt;/a&gt;. I needed to fix this inside the react-native-cli/index.js file.&lt;br /&gt;
&lt;br /&gt;
This fixed this first error. Next, I encountered an error where the script could not find my Android SDK. This is pretty much expected because on my machine I&#39;m running Android Studio so it is the only place that knows about the SDK. &amp;nbsp;The quick fix here is to find the path to the Android SDK and add that to a new environment variable ANDROID_HOME. &amp;nbsp;I also needed to make sure that my JAVA_HOME environment variable was correct so that the build process would be able to find it.&lt;br /&gt;
&lt;br /&gt;
Awesome, now I&#39;m nearly there. I started my JS Server to watch for changes, I&#39;m using Console 2 and Git Bash here&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;$ react-native start&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
Then in another console tab I run:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background: transparent; border-radius: 3px; border: 0px; box-sizing: border-box; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;$ react-native run-android&lt;/code&gt;&lt;/pre&gt;
Result:&lt;br /&gt;
It works, but not really.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfY3ShWIH5nA3kMxsLnnRZTbbbZ9hQe3EnaiPNyZ1geBO2EFomHJj8NBCCHKqB-hQItlfNXiOeDXlzsmcfw1TuEnKP6FVREdkX7wfUWcdrk0evLJasIlmKSpqqu0aL_lHRZz7rjowPXMr/s1600/Screenshot_20150915-140937.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfY3ShWIH5nA3kMxsLnnRZTbbbZ9hQe3EnaiPNyZ1geBO2EFomHJj8NBCCHKqB-hQItlfNXiOeDXlzsmcfw1TuEnKP6FVREdkX7wfUWcdrk0evLJasIlmKSpqqu0aL_lHRZz7rjowPXMr/s320/Screenshot_20150915-140937.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
First it seems to think that I&#39;m not running my JS server, but then it kicks in to fetch the file changes.&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZd0KV65ecKK9f9k_fLCkSCDcrIHRUe4kF3JNTi-1APzfD6oecSBhwb903wwN106lTy2jcsJQeVrYLLnRjHHiO2cbleIc915Cqe9dTEMzTFgeixjDTF2-skwH4PfWlInuS9yY7gqsy5Uwl/s1600/Screenshot_20150915-140945.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZd0KV65ecKK9f9k_fLCkSCDcrIHRUe4kF3JNTi-1APzfD6oecSBhwb903wwN106lTy2jcsJQeVrYLLnRjHHiO2cbleIc915Cqe9dTEMzTFgeixjDTF2-skwH4PfWlInuS9yY7gqsy5Uwl/s320/Screenshot_20150915-140945.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This gets my hopes up. but then goes back to the red screen of fail. &amp;nbsp;Why did it do this?!!? &amp;nbsp;Well it seems that there may be an underlying issue with the way that the packager works on Windows based on the error that the packager spits out. I&#39;m guessing that there is a simple thing to get this to work, but for now I&#39;m moving back to OSX to do React Native.&lt;br /&gt;
&lt;pre style=&quot;border-radius: 3px; box-sizing: border-box; font-stretch: normal; overflow: auto; padding: 16px; word-wrap: normal;&quot;&gt;&lt;code style=&quot;background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border-radius: 3px; border: 0px; box-sizing: border-box; color: #333333; display: inline; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit; margin: 0px; max-width: initial; overflow: initial; padding: 0px; word-break: normal; word-wrap: normal;&quot;&gt;    &lt;/code&gt;&lt;span style=&quot;background-color: transparent; color: #333333; font-family: Consolas, &#39;Liberation Mono&#39;, Menlo, Courier, monospace; font-size: 11.9px; line-height: inherit;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: #333333; font-family: Consolas, Liberation Mono, Menlo, Courier, monospace; font-size: 11.9px; line-height: 17.255px;&quot;&gt;React packager ready.

[1:39:35 PM] &amp;lt;START&amp;gt; Building Dependency Graph
[1:39:35 PM] &amp;lt;START&amp;gt; Crawling File System
[1:39:52 PM] &amp;lt;END&amp;gt;   Crawling File System (17082ms)
[1:39:52 PM] &amp;lt;START&amp;gt; Building in-memory fs for JavaScript
[1:39:54 PM] &amp;lt;END&amp;gt;   Building in-memory fs for JavaScript (1498ms)
[1:39:54 PM] &amp;lt;START&amp;gt; Building in-memory fs for Assets
[1:39:55 PM] &amp;lt;END&amp;gt;   Building in-memory fs for Assets (1421ms)
[1:39:55 PM] &amp;lt;START&amp;gt; Building Haste Map
[1:39:56 PM] &amp;lt;START&amp;gt; Building (deprecated) Asset Map
[1:39:56 PM] &amp;lt;END&amp;gt;   Building (deprecated) Asset Map (326ms)
[1:39:56 PM] &amp;lt;END&amp;gt;   Building Haste Map (905ms)
[1:39:56 PM] &amp;lt;END&amp;gt;   Building Dependency Graph (20907ms)

&amp;lt;--- Last few GCs ---&amp;gt;

  157866 ms: Scavenge 1402.8 (1455.6) -&amp;gt; 1402.8 (1455.6) MB, 12.3 / 0 ms (+ 3.0
ms in 1 steps since last GC) [allocation failure] [incremental marking delaying
mark-sweep].
  159306 ms: Mark-sweep 1402.8 (1455.6) -&amp;gt; 1402.7 (1454.6) MB, 1440.1 / 0 ms (+
4.0 ms in 2 steps since start of marking, biggest step 3.0 ms) [last resort gc].
  160988 ms: Mark-sweep 1402.7 (1454.6) -&amp;gt; 1402.7 (1455.6) MB, 1681.5 / 0 ms [last resort gc].


&amp;lt;--- JS stacktrace ---&amp;gt;

==== JS stack trace =========================================

Security context: 0000034B02A37349 &amp;lt;JS Object&amp;gt;
    1: join [path.js:~217] [pc=000002DAEE697E24] (this=0000026D39474171 &amp;lt;an Object with map 0000031DF7E23E19&amp;gt;)
    2: arguments adaptor frame: 3-&amp;gt;0
    3: /* anonymous */(aka /* anonymous */) [c:\GitHub\AwesomeProject\node_modules\react-native\packager\react-packager\src\DependencyResolver\DependencyGraph\ResolutionRequest.js:~226] [pc=000002DAEEEC76DA] (this=0000034B02A04131 &amp;lt;undefined&amp;gt;,real...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory

&lt;/span&gt;I&#39;m going to be tracking this all down and hopefully then pushing this work back to the react-native repo as a pull request.&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/5855135545264441174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2015/09/trying-to-run-react-native-android-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5855135545264441174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5855135545264441174'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2015/09/trying-to-run-react-native-android-on.html' title='Trying to Run React Native Android on Windows'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisfY3ShWIH5nA3kMxsLnnRZTbbbZ9hQe3EnaiPNyZ1geBO2EFomHJj8NBCCHKqB-hQItlfNXiOeDXlzsmcfw1TuEnKP6FVREdkX7wfUWcdrk0evLJasIlmKSpqqu0aL_lHRZz7rjowPXMr/s72-c/Screenshot_20150915-140937.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-3027842238765506769</id><published>2015-07-09T14:48:00.000-04:00</published><updated>2015-08-10T14:49:03.647-04:00</updated><title type='text'>Introduction to React</title><content type='html'>A few months ago I was approached by my editor from &lt;a href=&quot;http://www.amazon.com/Node-js-Recipes-Problem-Solution-Approach-Development/dp/1430260580/ref=la_B00J3AF2VA_1_1?s=books&amp;amp;ie=UTF8&amp;amp;qid=1436188426&amp;amp;sr=1-1&quot;&gt;Node.js Recipes&lt;/a&gt; to discuss the possiblity of writing another book. This coincided with a time where I had been spending time working with React for side projects, and it just so happened that the title which I would be writing is &lt;a href=&quot;http://www.apress.com/9781484212462&quot;&gt;Introduction To React&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://cgack.files.wordpress.com/2015/07/intro_to_react.jpg&quot;&gt;&lt;img alt=&quot;intro_to_react&quot; class=&quot;size-full wp-image&quot; src=&quot;http://cgack.files.wordpress.com/2015/07/intro_to_react.jpg?w=776&quot; id=&quot;i-115&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;So I decided to write the book and spent the next 11 weeks writing it. I am currently finishing up the edits and the book is due to be published in September. I&#39;ll be sure to update as the publication date approaches.</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/3027842238765506769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2015/07/introduction-to-react.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/3027842238765506769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/3027842238765506769'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2015/07/introduction-to-react.html' title='Introduction to React'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-5629149004729198049</id><published>2015-02-25T10:42:00.003-05:00</published><updated>2015-03-05T15:19:11.961-05:00</updated><title type='text'>dev.Objective()</title><content type='html'>Every time I attend a conference or get bogged down following all the new tools and frameworks that are coming out in the front-end development world (which seems to happen daily) - I decide that I want to write a talk about how we as developers can optimize our front-ends without rewriting everything from scratch. &amp;nbsp;I finally was able to get an abstract for a talk that will address such things written a month or so ago. I then decided to submit this talk to DevObjective, a conference happening in Minnesota in May. I feel that this talk might hit well with the audience as one of the things that stood out for me from the conference site was the following sentence:&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;span style=&quot;background-color: white; color: #77746e; font-family: myriad-pro, sans-serif; font-size: 14px; line-height: 18px;&quot;&gt;Cutting edge stuff is awesome, but most people are more concerned about getting their jobs done now&lt;/span&gt;&lt;/blockquote&gt;
I feel that this hits home with me, as I love to just be able to get my job done now. &amp;nbsp;I&#39;m not saying that we can&#39;t enjoy the advances made by new and modern frameworks, even if we are working on a years/or decades old project, but we can make smart choices to modernize our applications. Luckily my talk was accepted and I&#39;ll be speaking about &quot;Front-end Modernization for Mortals&quot; in May &amp;nbsp;at Dev Objective.&lt;br /&gt;
&lt;br /&gt;
I&#39;m excited to be joining a &lt;a href=&quot;http://www.devobjective.com/speakers/&quot;&gt;group of speakers&lt;/a&gt;&amp;nbsp;who will be discussing a &lt;a href=&quot;http://www.devobjective.com/sessions/&quot;&gt;wide variety of topics&lt;/a&gt; from which any developer should be able to gain some valuable knowledge for their daily jobs. If these sound like something you would be interested in, you should join me at the conference in May!&lt;br /&gt;
&lt;br /&gt;
At the time of this writing, there is still time for the early bird pricing if you click the banner below:&lt;br /&gt;
&lt;br /&gt;
&lt;a alt=&quot;dev objective banner&quot; href=&quot;http://devobjective.com/&quot;&gt;
&lt;img src=&quot;http://devobjective.com/2015/assets/Image/badges/devobjective-468x62.png&quot; /&gt;
&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/5629149004729198049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2015/02/dev-objective.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5629149004729198049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5629149004729198049'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2015/02/dev-objective.html' title='dev.Objective()'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-4133188557931111783</id><published>2014-11-04T16:24:00.003-05:00</published><updated>2014-11-05T09:07:24.963-05:00</updated><title type='text'>Firefox Developer Edition</title><content type='html'>&lt;span style=&quot;font-family: inherit;&quot;&gt;In my most recent talk at jQuery Chicago, I spoke about the promising future of debugging that involved the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Tools/Firefox_Tools_Adapter&quot;&gt;Firefox Tools Adapter&lt;/a&gt;&amp;nbsp;which is a brilliant step forward in the world of remote debugging.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: separate; border-spacing: 0px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 22px;&quot;&gt;&lt;div style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin-bottom: 15px; margin-top: 15px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;browser a=&quot;&quot;&gt;&lt;browser b=&quot;&quot;&gt;&lt;br /&gt;&lt;/browser&gt;&lt;/browser&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; margin-bottom: 15px; margin-top: 15px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;This was under the radar until the day before my talk when it was &lt;a href=&quot;https://hacks.mozilla.org/2014/09/firefox-tools-adapter/&quot;&gt;announced&lt;/a&gt; on the Mozilla Hacks blog. So it suddenly became a bit more mainstream.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Yesterday Mozilla has &lt;a href=&quot;https://blog.mozilla.org/blog/2014/11/03/the-first-browser-dedicated-to-developers-is-coming-2/&quot;&gt;teased&lt;/a&gt; a developer focused version of Firefox they have codenamed #fx10 in a theatrical-like trailer. I for one am excited to see what sort of product arrives with this new browser.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/Ehv5u-5rE8c?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
So it turns out that this&lt;a href=&quot;https://developer.mozilla.org/en-US/Firefox/Developer_Edition&quot;&gt; Firefox Developer Edition&lt;/a&gt; will be a replacement for the current Aurora Channel. What it will bring is a separate profile so it can run alongside the stable version of Firefox without having to mess with custom profiles. It will have easy access to developer tools, and looks as though the Firefox Tools Adapter will be built in to the product directly. This is a great advancement for those looking to use the cutting edge developer tools from Firefox on the web&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/4133188557931111783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2014/11/fx10-and-developer-centric-browser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4133188557931111783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4133188557931111783'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2014/11/fx10-and-developer-centric-browser.html' title='Firefox Developer Edition'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7113238786757702496</id><published>2014-10-07T15:42:00.000-04:00</published><updated>2014-11-03T15:42:22.296-05:00</updated><title type='text'>jQuery Mobile</title><content type='html'>&lt;div style=&quot;background-color: white; border: 0px; color: #555555; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
I have been fortunate enough to have the opportunity to speak at several jQuery Conferences in the past two years.&amp;nbsp;The focus of most of my talks, and most of my day-to-day work actually, is based around building mobile web applications&amp;nbsp;with jQuery Mobile and Cordova, two wonderful open source projects. During these conferences I was able to meet&amp;nbsp;and get to know many new friends and fellow developers, including many of the folks on the jQuery team. Eventually,&amp;nbsp;while in Vienna at jQuery Europe I was talking with Alex, the lead of jQuery Mobile and he suggested that I start&amp;nbsp;contributing to the project.&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #555555; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
I have been fortunate enough to have an employer who is generous enough to allow my some time to donate to the project&amp;nbsp;and I have been contributing through bug-triage, pull requests, and generally just trying not to get in the way since&amp;nbsp;March of this year. I have already learned a ton and am always encouraged by the support of the jQuery team and the&amp;nbsp;advice they give.&lt;/div&gt;
&lt;div style=&quot;background-color: white; border: 0px; color: #555555; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Yesterday - 6 October 2014 - I was officially made a member of the jQuery Team. I am honored to have this opportunityand am excited to join the team of people whom I have come to know over the past two years. I am also pretty excited about the opportunity to continue to do what I have been doing all this year, just now I have access to the GitHub repositories.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7113238786757702496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2014/10/jquery-mobile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7113238786757702496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7113238786757702496'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2014/10/jquery-mobile.html' title='jQuery Mobile'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7399320481413043347</id><published>2014-07-09T15:37:00.000-04:00</published><updated>2014-11-03T15:40:46.855-05:00</updated><title type='text'>Node.js Recipes Screencast Edition</title><content type='html'>&lt;header class=&quot;article-header&quot; style=&quot;font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; padding: 20px 20px 0px;&quot;&gt;&lt;h1 class=&quot;article-title&quot; itemprop=&quot;name&quot; style=&quot;-webkit-transition: color 0.2s; border: 0px; color: #555555; font-family: inherit; font-style: inherit; line-height: 1.1em; margin: 0px; outline: 0px; padding: 0px; transition: color 0.2s; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: inherit; font-size: 14px; font-style: inherit; line-height: 1.6em;&quot;&gt;Last year, I wrote&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.amazon.com/Node-js-Recipes-Problem-Solution-Approach-Development/dp/1430260580&quot; rel=&quot;external&quot; style=&quot;border: 0px; color: #258fb8; font-family: inherit; font-size: 14px; font-style: inherit; line-height: 1.6em; margin: 0px; outline: 0px; padding: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;Node.js Recipes&lt;/a&gt;&lt;span style=&quot;font-family: inherit; font-size: 14px; font-style: inherit; line-height: 1.6em;&quot;&gt;&amp;nbsp;in a relatively short time span. It was accomplished in something like 120 days, or about 10 days per chapter. This was exhausting and I vowed to my wife that I would not write another book at that pace again.&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/header&gt;&lt;div class=&quot;article-entry&quot; itemprop=&quot;articleBody&quot; style=&quot;border: 0px; color: #555555; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 14px; margin: 0px; outline: 0px; padding: 0px 20px; vertical-align: baseline;&quot;&gt;
&lt;div style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Then I was tempted. My publisher asked me if I had interest in several titles, and man did I, but after a couple days of deliberating over each one - I could not commit to the time frame.&lt;/div&gt;
&lt;div style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
Then came an introduction from someone within the publisher’s organization that proposed I create a screencast series based upon the book which I had already written. This was something I could get on board with because the material was already written (right?).&lt;/div&gt;
&lt;div style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
So I created a sample video for evaluation and we decided to move forward with another aggressive schedule to record ~6 hours of screencast based upon material in my book.&lt;/div&gt;
&lt;div style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
It turns out this was a pretty agressive and time consuming undertaking as well. Sure the material was already written, but it needed to be reworked into a standard Powerpoint format and of course I would need to be coding most of the stuff I’d already written again. All of this (with the exception of creating some of the powerpoints) was a great time and I enjoyed being able to revisit my book from an angle of a user or reader, rather than an author.&lt;/div&gt;
&lt;div style=&quot;border: 0px; font-family: inherit; font-style: inherit; font-weight: inherit; line-height: 1.6em; margin-bottom: 1.6em; margin-top: 1.6em; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;
In the end I recorded nearly 12 hours of raw footage for the video which is being post-processed currently and should see release in the near future (no official date that I know of yet - stay tuned for that). The team at Apress has done a fantastic job with the final editing and composition, from what I have seen and I look forward to everyone getting the opportunity to check out the finished product when it is available.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7399320481413043347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2014/07/nodejs-recipes-screencast-edition.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7399320481413043347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7399320481413043347'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2014/07/nodejs-recipes-screencast-edition.html' title='Node.js Recipes Screencast Edition'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-1183591630983163393</id><published>2014-04-08T11:37:00.001-04:00</published><updated>2014-04-08T11:37:27.029-04:00</updated><title type='text'>The Winter of jQuery</title><content type='html'>This winter I was fortunate enough to be able to speak at two jQuery events - First in jQuery Conference in San Diego, then in Vienna for jQuery Europe. &amp;nbsp;The traveling is always great, and these events were top notch as far as organization, content, and attendees.&lt;br /&gt;
&lt;br /&gt;
While I always enjoy attending conferences, these two seemed to be extra engaging in that the attendees I talked with all brought a great deal of encouragement and excitement to continue to share what they know and learn.&lt;br /&gt;
&lt;br /&gt;
I was also able to spend more time with a few of the folks I have met from the jQuery team and really see the vision of where some of the projects are headed. From this, I have even started to spend some time trying to triage and/or fix issues on the jQuery Mobile project.&lt;br /&gt;
&lt;br /&gt;
In any case, here are the &lt;a href=&quot;http://presentboldly.com/cgack/unified-widget-theory-jquery-europe&quot;&gt;slides&lt;/a&gt; and video for my presentations about building $.Widgets for both UI and Mobile.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/C_fX0XfDAls&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;div class=&quot;blazon-iframe-wrapper&quot; style=&quot;padding-bottom: 58.59375%; padding-top: 40px; position: relative;&quot;&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; src=&quot;http://presentboldly.com/cgack/unified-widget-theory-jquery-europe/embed&quot; style=&quot;bottom: 0; height: 100%; left: 0; position: absolute; right: 0; top: 0; width: 100%;&quot;&gt;&lt;a href=&quot;http://presentboldly.com/cgack/unified-widget-theory-jquery-europe&quot;&gt;View this presentation on Blazon&lt;/a&gt;&lt;/iframe&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/1183591630983163393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2014/04/the-winter-of-jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1183591630983163393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1183591630983163393'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2014/04/the-winter-of-jquery.html' title='The Winter of jQuery'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-4647553393518165834</id><published>2014-02-24T18:09:00.000-05:00</published><updated>2014-04-06T18:09:18.620-04:00</updated><title type='text'>Book Review: Principles of Object-Oriented JavaScript</title><content type='html'>&lt;h1 class=&quot;post-title&quot;&gt;
&lt;br /&gt;&lt;/h1&gt;
&lt;section class=&quot;post-content&quot;&gt;I just finished reading another fantastic resource for JavaScript developers &lt;a href=&quot;http://www.nostarch.com/oojs&quot;&gt;&quot;Principles of Object-Oriented JavaScript&quot;&lt;/a&gt; written by Nicholas C. Zakas.&amp;nbsp;&lt;/section&gt;&lt;section class=&quot;post-content&quot;&gt;&lt;br /&gt;
Nicholas C. Zakas is an excellent Front-End developer, and what I 
have always enjoyed about his work, is his ability to clearly articulate
 his knowledge to developers of all skill levels. Because of this I had 
high expectations for reading this book. I&#39;m happy to say that this book
 did not disappoint.&lt;br /&gt;
&lt;br /&gt;


The book, to me, is an reference I will keep with me throughout my 
JavaScript career, and I&#39;ll recommend it to any developer interested in 
JavaScript. Targeted toward JavaScript beginners, this book highlights 
areas that many who are new to JavaScript will likely have to learn the 
hard way, or discover after they have reached a level of frustration 
that makes them decide to hate JavaScript forever.&lt;br /&gt;
&lt;br /&gt;


Now, this does not mean that this book contains some secret recipe to
 JavaScript Zen, but it does provide all the necessary tools for the 
reader (Seasoned JavaScripter or one who is new JS) to understand how to
 build great applications with JavaScript. The topics - functions, 
objects, prototypes, inheritance - are all covered thoroughly through 
well though out examples which are not too complex for even a new 
developer to follow. These examples and explanations are accompanied 
with wonderful notes and snippets that signal the voice of the seasoned 
JavaScript professional that Nicholas C. Zakas is. As I wrote above, I 
definitely recommend this book.&lt;br /&gt;

            &lt;/section&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/4647553393518165834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2014/02/book-review-principles-of-object.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4647553393518165834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4647553393518165834'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2014/02/book-review-principles-of-object.html' title='Book Review: Principles of Object-Oriented JavaScript'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-3287741006325193661</id><published>2013-10-24T18:08:00.000-04:00</published><updated>2014-04-06T18:08:20.699-04:00</updated><title type='text'>Node.js Recipes</title><content type='html'>&lt;section class=&quot;post-content&quot;&gt;
                It started when I favorited a &lt;a href=&quot;https://twitter.com/LouiseEditor/status/303800949057675265&quot;&gt;tweet&lt;/a&gt;
 in February in which a request was being made for some help updating a 
JavaScript book. I had recently spent some time contributing to a jQuery
 Mobile book and wanted to continue writing. Shortly after I contacted 
Louise (my editor) and it turns out that they had already found someone 
to update the book.....&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;


It turns out that Louise had some plans for a Node.js Recipes book, 
which I thought would be spectacular so I set to work writing an outline
 and proposal for the book.&lt;br /&gt;
&lt;br /&gt;


After a few weeks I had the proposal in hand, sent it to the 
publisher and it was approved. This is where things get crazy, because I
 now had to write the twelve chapters I&#39;d outlined and I had less than 
two weeks to write each one if I was to make my deadline.&lt;br /&gt;
&lt;br /&gt;


This crazy schedule, while good at keeping me on task, was not great 
at keeping me rested and stress free. There were many late nights and 
long weekends where I was not able to spend quality time with my family 
or friends. I am grateful that they allowed me time to research and 
write, because I was able to create a book which I feel will be a useful
 tool for any developer who wants to learn more about Node.js. It will 
give readers a glimpse of what goes on in Node.js not only in the Core, 
but also in the third-party modules that have helped to create the 
robust Node.js ecosystem.&lt;br /&gt;
&lt;br /&gt;


If you are interested in getting to know Node.js better, or if you 
would just like to buy an amazing book for your coffee table or library,
 please buy the book.&lt;br /&gt;


&lt;a href=&quot;http://www.amazon.com/Node-js-Recipes-A-Problem-Solution-Approach/dp/1430260580/&quot;&gt;http://www.amazon.com/Node-js-Recipes-A-Problem-Solution-Approach/dp/1430260580/&lt;/a&gt;&lt;br /&gt;


&lt;a href=&quot;http://www.apress.com/9781430260585&quot;&gt;http://www.apress.com/9781430260585&lt;/a&gt;&lt;br /&gt;


&lt;img alt=&quot;Node.js Recipes&quot; height=&quot;400&quot; src=&quot;http://ecx.images-amazon.com/images/I/81ohl3uB31L._SL1500_.jpg&quot; width=&quot;322&quot; /&gt;&lt;br /&gt;

            &lt;/section&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/3287741006325193661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2013/10/nodejs-recipes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/3287741006325193661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/3287741006325193661'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2013/10/nodejs-recipes.html' title='Node.js Recipes'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-4574652659636477476</id><published>2013-09-23T18:05:00.000-04:00</published><updated>2014-04-06T18:06:31.246-04:00</updated><title type='text'>FirefoxOS Apps</title><content type='html'>&lt;h1 class=&quot;post-title&quot;&gt;
&lt;br /&gt;&lt;/h1&gt;
&lt;section class=&quot;post-content&quot;&gt;
                A few weeks ago Mozilla &lt;a href=&quot;https://hacks.mozilla.org/2013/09/calling-all-app-ports/&quot;&gt;announced&lt;/a&gt; another initiative to get some more applications into the FirefoxOS Marketplace.&lt;br /&gt;


I had submitted a simple compass application early on in the 
Marketplace&#39;s life, but thought that this opportunity would be perfect 
to get an PhoneGap wrapped HTML application that I created for Android 
onto the marketplace, so I applied for a phone for app port deal. Within
 a couple days I recieved confirmation that I would be getting a 
developer preview phone from Mozilla, in exchange for my app port.&lt;br /&gt;


Now, I could have waited around until I received the phone to get 
started working, but with the FirefoxOS simulator available as a Firefox
 Add-On I set to work right away. I had previously submitted an 
application so I knew the general Firefox manifest format which is 
probably helpful. Once I had a Firefox app manifest being served (with 
the proper MIME type) from AppEngine I was ready to submit. I did 
however wait until I had a physical device to test and ensure it 
appeared and functioned as I expected. &lt;br /&gt;

            &lt;/section&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/4574652659636477476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2013/09/firefoxos-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4574652659636477476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4574652659636477476'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2013/09/firefoxos-apps.html' title='FirefoxOS Apps'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7176901356543281371</id><published>2013-09-01T21:10:00.001-04:00</published><updated>2013-09-01T21:22:53.176-04:00</updated><title type='text'>Busyness</title><content type='html'>I have had a busy time over that last few months. Firstly, I have been engaged in a very ambitious and exciting project for my day job.

Aside from this keeping me busy, I also had a talk accepted for the jQuery Conference in Portland in June. Conferences like the jQuery Conference are always welcoming to new speakers and the community as a whole is open to everyone&#39;s input. Experiencing a conference such as this is always a thrill. This was my first talk at a big conference but I think it went well and I hope to do it again.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/u4whslyzUEw?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
If you listened to at least the beginning of that talk, you may have heard me mention that I’ve been writing a book. &lt;a href=&quot;http://www.apress.com/9781430260585&quot;&gt;This book&lt;/a&gt; has been a great deal of fun, but has also been challenging. Between research, writing code, writing text, editing, and following up with the technical reviewer it has kept me busy. It should be published this fall so stay tuned…
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7176901356543281371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2013/09/busyness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7176901356543281371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7176901356543281371'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2013/09/busyness.html' title='Busyness'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-1044716659466075034</id><published>2013-03-16T21:04:00.000-04:00</published><updated>2013-09-01T21:05:48.526-04:00</updated><title type='text'>Remote Debugging Revisited</title><content type='html'>A little less than a year ago, I &lt;a href=&quot;http://cgack.com/blog/2012/05/remote-debugging-tools/&quot;&gt;wrote a post&lt;/a&gt; about remote debugging tools. Since that time the landscape has changed, so this post will try update where we are in the world of remote debugging. (Note: by ‘we’, I mean me, and by ‘world’ I really mean, what I’ve used since last year)
First, lets review where we were a year ago. Chrome for Android was brand new, and had remote debugging support baked in. Opera Dragonfly had great remote debugging support. Adobe Shadow (now Edge Inspect) was new, and WEINRE was still a .jar.
Fast forward to now. Chrome for Android still has great remote debugging support, when connected you can see all your inspectable tabs from your remote device, and debug away. In Opera land, things have shifted a bit. Since they have started their switch to Webkit, who knows where their remote debugger will be in another year. Adobe Edge Inspect is a very popular debugging toolset for iOS and Android. Weinre is now (debatably) more accessible as a Node.js server, making it super easy to install and run a local/or remote hosted server. Weinre powers the &lt;a href=&quot;http://debug.phonegap.com/&quot;&gt;phonegap debug service&lt;/a&gt; . It is also the service behind the experimental mobile debugging option at &lt;a href=&quot;http://jsfiddle.net/&quot;&gt;jsfiddle.net&lt;/a&gt;.&lt;br /&gt;
The newest version of jsbin.com has a pretty incredible remote rendering capability, but you can see for yourself on youtube: &lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/nXeGK1i-YgQ?list=PLXmT1r4krsTooRDWOrIu23P3SEZ3luIUq&quot; width=&quot;560&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
Over the course of the last year, Firefox has built a homegrown set of Developer tools, so developers need not rely soley on Firebug on Firefox. These tools have been built with remote debugging as a high priority - with the proliferation of Firefox on Android, and the fancy new Firefox OS - remote debugging is important. Remote debugging for Firefox has been around for a few versions, but I really like to live on the nightly branch (currently 22.0a1), so thats what you’ll see here. Its quite simple to enable on your computer: just swing over to ‘about:config’ and toggle ‘devtools.debugger.remote-enabled’ to ‘true’ restart, and you are set.
\&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe4Wk3gLnmU_gFtWUE-w9fo6hRRRaSQZIMVD7ASaGkfavllvNRwjMomiOSkgb74hf8Ge5lDyIwC-uiz2lMO7KDFcby3RXOatreYF8Rg5bWstUd64CC0ZtpzTq8W7ToGY8IHUe5vBNmxqCl/s1600/about_config_remote.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;121&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe4Wk3gLnmU_gFtWUE-w9fo6hRRRaSQZIMVD7ASaGkfavllvNRwjMomiOSkgb74hf8Ge5lDyIwC-uiz2lMO7KDFcby3RXOatreYF8Rg5bWstUd64CC0ZtpzTq8W7ToGY8IHUe5vBNmxqCl/s320/about_config_remote.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Next (assuming you’ve got your android platform-tools installed) you simply connect your device to your computer and&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;adb forward tcp:6000 tcp:6000
&lt;/code&gt;&lt;/pre&gt;
Then, assuming you have enabled remote debugging on your Android device, you again go to ‘about:config’ and toggle the ‘devtools.debugger.force-local’ to ‘false’ and ‘devtools.debugger.remote-enabled’ to ‘true’.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbjuR8OupAx_lz0GLZiL1nOvjBipUHHMMoc965MO6tTNFiniNEKUSkPZ7oKa0rSNc52u_YytroIqU1-bnBrfYJOLhDm0cg_spRteIGpzd5ssbn_TppQMiEq0ObyCLSfv9Dmibk3FtdvK0C/s1600/about_config_android.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbjuR8OupAx_lz0GLZiL1nOvjBipUHHMMoc965MO6tTNFiniNEKUSkPZ7oKa0rSNc52u_YytroIqU1-bnBrfYJOLhDm0cg_spRteIGpzd5ssbn_TppQMiEq0ObyCLSfv9Dmibk3FtdvK0C/s320/about_config_android.png&quot; width=&quot;180&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Restart. Debug. To Debug you open the remote console by selecting ‘Connect…’ from the Tools &amp;gt; Web Developer menu. Thats it.
Remote debugging is important. And as the web development industry moves more toward mobile, these tools need to and will get better and more accessible for everyone. I expect I’ll be revisiting this topic again soon as tools improve or emerge.
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/1044716659466075034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2013/03/remote-debugging-revisited.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1044716659466075034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1044716659466075034'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2013/03/remote-debugging-revisited.html' title='Remote Debugging Revisited'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/nXeGK1i-YgQ/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-1060774881997707093</id><published>2013-01-14T10:00:00.001-05:00</published><updated>2014-04-07T18:20:01.237-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ios"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="phonegap"/><title type='text'>Whitelisting URLs in PhoneGap</title><content type='html'>I&#39;ve built a couple of HTML5 (jQuery Mobile) applications that have also targeted native app stores using PhoneGap. When building these applications, it becomes clear that to get desired navigation in iOS, one must carefully consider the PhoneGap settings for url handling &quot;OpenAllWhitelistURLsInWebView&quot; and &quot;ExternalHosts&quot;.  In many configurations this results in setting the &quot;OpenAllWhitelistURLsInWebView&quot; to &quot;YES&quot; and Subsequently setting a single &quot;ExternalHost&quot; as &quot;*&quot; in order to keep your application functioning within the WebView exclusively. This is great for everything except where you wish to open an external link that would break your HTML5 applications navigation (due to a lack of back button). What follows are a few tricks I have picked up to help with whitelisting.

In many cases you know when you&#39;re building your application where you&#39;d like to have the external links open, in which case you can set these external links within your Objective-C source code letting the applicaiton know which links to open.  This would look something like the following Gist (which looks to the prefix of the URL in order to open a link outside of the WebView):

&lt;script src=&quot;https://gist.github.com/cgack/4530044.js&quot;&gt;&lt;/script&gt;

In other cases, your application may allow for some dynamic client created content to come from the server. This can mean either a maintenance nightmare for setting up this prefixed whitelist, where you get to update the whitelist and resubmit the app to Apple everytime the list changes (icky).... Or we can come up with a solution that works better.

One way in which this can be accomplished is by looking to the suffix of the URL to find a querystring parameter that would indicate that we need to open external.

&lt;script src=&quot;https://gist.github.com/cgack/4530483.js&quot;&gt;&lt;/script&gt;

A perhaps more robust solution, allow for the conversion of any link with target=&quot;_blank&quot; to open in Safari. This solution is inspired by &lt;a href=&quot;http://www.rigelgroupllc.com/blog/2012/05/22/opening-links-in-phonegap-apps-in-mobile-safari/&quot;&gt;this&lt;/a&gt; where you tell your iOS app to find a specified document fragment, and also tell your web application to ensure that target=&quot;_blank&quot; links always have such a fragment.

The Obj-C code looks like this:

&lt;script src=&quot;https://gist.github.com/cgack/4530512.js&quot;&gt;&lt;/script&gt;

and telling the webapp to set this fragment (using jQuery) looks as follows:

&lt;script src=&quot;https://gist.github.com/cgack/4530524.js&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/1060774881997707093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2013/01/whitelisting-urls-in-phonegap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1060774881997707093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1060774881997707093'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2013/01/whitelisting-urls-in-phonegap.html' title='Whitelisting URLs in PhoneGap'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-9036476572854981923</id><published>2012-12-28T09:11:00.001-05:00</published><updated>2012-12-28T09:11:26.064-05:00</updated><title type='text'>I read a book: JavaScript Enlightenment</title><content type='html'>I dunno if this is a full fledged review or not, but I recently picked up and read the new book &lt;a href=&quot;http://shop.oreilly.com/product/0636920027713.do&quot;&gt;JavaScript Enlightenment&lt;/a&gt;&amp;nbsp;by Cody Lindley, and I found it ranks in my list of JavaScript books I would direct others to read in their quest to JavaScript wizardry. Lindley states he writes his book first and foremost for himself, as a personal reference, which I find handy because that is exactly how I like to read JavaScript books. His approach to teaching the language might strike some as contrary to what is found in the wild - he spends plenty of time not using object literals when creating objects in order to hammer home the underlying principles of JavaScript objects - but he does also hammer home that using literal notation is preferred for its terseness and readability.&lt;br /&gt;
&lt;br /&gt;
What else did I like about this book? Well I enjoyed the use of code examples, as its always good to see JavaScript in action. He also makes many great succinct notes that help make good distinctions such as &quot;Remember: object instances created from constructor functions are just plain old objects&quot;. Another concept that those in search of JavaScript enlightenment should find well laid out in &quot;JavaScript Enlightenment&quot; is how the prototype chain is traversed whilst accessing a property on an object. Along with traversing the chain, Lindley describes through an example of what not to do, how prototypes can be altered even on the Object.prototype, promptly reminding the reader that this is a &quot;forbidden&quot; example. Since the prototype is key in JS, the book dedicates a considerable portion to describing and outlining how it all works.&lt;br /&gt;
&lt;br /&gt;
The book describes in great detail and examples many concepts that any front-end engineer should be familiar with. Things such as the Function objects instance properties and methods - you know: arguments, constructor, length, apply(), call(), toString() - including going into specific examples on how to use arguments.callee when calling a function recursively. The discussion of JavaScript scope and closures is straightforward and to the point without&amp;nbsp;over complicating&amp;nbsp;concepts that are sometimes hard for some developers to grasp.&lt;br /&gt;
&lt;br /&gt;
Other parts of this book I would describe as desk reference material. These are items that are common and I think are generally understood by many, but in the case someone runs into a gotcha during development, they may find it useful to hit the chapters on the various objects: Array(), String(), Number(), Boolean(), as well as then utilizing String, Number, and Boolean primitives. Other desk references: Math(), null, and undefined.&lt;br /&gt;&lt;br /&gt;I&#39;d totally recommend this book on the same JavaScript binge handed to new developers when the get underway (things like &lt;a href=&quot;http://shop.oreilly.com/product/9780596517748.do&quot;&gt;The Good Parts&lt;/a&gt;, &lt;a href=&quot;http://eloquentjavascript.net/&quot;&gt;Eloquent JavaScript&lt;/a&gt;, &lt;a href=&quot;http://shop.oreilly.com/product/0636920018421.do&quot;&gt;JavaScript Web Applications&lt;/a&gt;, or any of the many many useful links to the plethora of great resources available to the modern developer). I guess this did turn into a full fledged review.</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/9036476572854981923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/12/i-read-book-javascript-enlightenment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/9036476572854981923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/9036476572854981923'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/12/i-read-book-javascript-enlightenment.html' title='I read a book: JavaScript Enlightenment'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-6126916483893158216</id><published>2012-11-19T15:04:00.002-05:00</published><updated>2012-11-19T15:04:40.442-05:00</updated><title type='text'>Openness</title><content type='html'>On 11 November 2012, my first &lt;a href=&quot;https://github.com/jquery/jquery-ui/commit/8e1ceba717b85e42a13cc1660e7c8e9e9c26c384&quot;&gt;patch&lt;/a&gt; to jQuery-UI landed in the project. It was not the world&#39;s greatest pull request, nor was it the best code ever written (by a long shot). &amp;nbsp;But it was important. Not because I get my name on a change log somewhere, or that I will now conquer to world with my open source prowess. Its important because it is another tiny step in the massive open source snowball that wins. It wins big. The open web as we know it has spiraled out of openness and open source projects. The &lt;a href=&quot;https://developer.mozilla.org/&quot;&gt;documentation&lt;/a&gt;&amp;nbsp;that I turn to regularly&amp;nbsp;and have contributed to is open and invites new contributors each day. There are countless open initiatives in the world these days - and by no means are these all software related - these encourage the scientist in us all to submit pull requests, change direction and assert for the greater good. If you have a passion, pursue it. That is all.</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/6126916483893158216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/11/openness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/6126916483893158216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/6126916483893158216'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/11/openness.html' title='Openness'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7099401326267150829</id><published>2012-11-07T14:05:00.000-05:00</published><updated>2012-11-19T15:04:49.718-05:00</updated><title type='text'>Homework</title><content type='html'>Recently I was tasked by my son&#39;s pre-k teacher to present a paragraph that describes my occupation... in a way that 4 year olds will understand. This really put things into perspective for me, more than I thought it would. At first I think of what I might describe to my parents: &quot;Software Engineer: I write code for web applications and databases&quot;... No. So what is it that I do?&lt;br /&gt;
&lt;br /&gt;
I was then reminded of an interview question I once had where I was asked: &quot;How would you describe a database to your grandmother?&quot; &amp;nbsp;These sorts of questions may seem silly to some developers, but I find them to be a great exercise. These questions help us to target and focus on what it is we really do, and how our end users or clients might&amp;nbsp;perceive&amp;nbsp;what someone in the software profession might be thinking. So I thought of the answer provided in that interview where I made the analogy of a jewelry box that helps to organize and sort jewelry for efficient placement and retrieval.&lt;br /&gt;
&lt;br /&gt;
How does a jewelry box translate to pre kindergarten children? Well I tried to avoid an abstract analogy and simplified it by stating that I teach computers to do neat things and give us information when we ask them for it by typing or clicking the mouse.... Our children don&#39;t care about CSS, HTML5, JavaScript, objective-C, C++, Java, Ruby, Python, C#, or if we built our app for Android, iOS, Windows Phone 8 or whatever,&lt;br /&gt;
&lt;i&gt;they care if they can learn from and enjoy whatever it is we built&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
So a fresh perspective of &quot;how can this actually benefit someone&quot; has been bouncing in my head lately. I&#39;m not saying one shouldn&#39;t try new cool tech... Still create experiments and things that push development forward, but perhaps a deeper look at what is truly needed should be a priority.</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7099401326267150829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/11/homework.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7099401326267150829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7099401326267150829'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/11/homework.html' title='Homework'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-9058858081526915819</id><published>2012-10-03T16:15:00.001-04:00</published><updated>2014-04-07T18:25:21.081-04:00</updated><title type='text'>TypeScript</title><content type='html'>This week Microsoft released its shiny new JavaScript pre-processor - &lt;a href=&quot;http://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;. It represents a superset of JavaScript that is designed for large-scale application development. It utilizes concepts that most developers are comfortable with in their non JavaScript languages. Things like Classes, Modules, and Type checking.&lt;br /&gt;
&lt;br /&gt;
These are all things that many people complain that JavaScript does not have built in.&amp;nbsp; With TypeScript, JavaScript does not magically gain these things. TypeScript makes these things accessible to a developer through its pre processing. Developers and JavaScript do not need TypeScript, and it is not a requirement to build large scale applications. It won&#39;t magically make crappy programming better, but it may help catch a gotcha for someone every now and again, just as &lt;a href=&quot;http://www.jshint.com/&quot;&gt;JSHint&lt;/a&gt; would. I for one think that it will take off rather well, especially in the ASP.Net community. I also will probably try it out in a project or two or three. I like that it looks and feels like JavaScript, which is a syntax that I am comfortable with.&amp;nbsp; That is one reason why I have not adopted &lt;a href=&quot;http://coffeescript.org/&quot;&gt;CoffeeScript&lt;/a&gt;, it just looks so foreign to me. I suppose if I were a full time Ruby on Rails developer, CoffeeScript would feel right, but I&#39;m not, so it doesn&#39;t.&lt;br /&gt;
&lt;br /&gt;
I&#39;m going to end this by just showing the difference between TypeScript and JavaScript. It is subtle and that is appealing to me. See the comparisons below:&lt;br /&gt;

&lt;script src=&quot;https://gist.github.com/cgack/3829412.js&quot;&gt;&lt;/script&gt;

typescript
 

&lt;script src=&quot;https://gist.github.com/cgack/3829439.js&quot;&gt;&lt;/script&gt;

javascript

 </content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/9058858081526915819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/10/typescript.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/9058858081526915819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/9058858081526915819'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/10/typescript.html' title='TypeScript'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-4357527880441881594</id><published>2012-08-01T12:02:00.000-04:00</published><updated>2012-09-30T12:10:16.691-04:00</updated><title type='text'>Liberated Pixel Cup</title><content type='html'>July marked the beginning of the coding portion of the &lt;a href=&quot;http://lpc.opengameart.org/&quot;&gt;Liberated Pixel Cup&lt;/a&gt; which is an amazing two-part competition that involves amazing artists creating open game assets during part one (June) which developers then take to create a game based on those assets (July). I first heard about the Liberated Pixel Cup a few weeks into the second part of the competition. After a day or two of contemplating if I could get a game off the ground in time, decided to make an HTML5 game. Other than my orientation demo &lt;a href=&quot;http://cgack.com/catch&quot;&gt;Catch&lt;/a&gt; and the node.js interpretation of the card game &lt;a href=&quot;http://wiz.jit.su/&quot;&gt;Wizard&lt;/a&gt;, I had not made (or at least published) what I would consider a graphics based, animated, HTML5 game.  I decided to take this opportunity to dive in head first.&lt;br /&gt;
Over the last few years, I have seen quite a few HTML5 game engines come around and have taken note of many, experimented with some. The big name in the HTML5 engine space right now seems to be &lt;a href=&quot;http://impactjs.com/&quot;&gt;ImpactJS&lt;/a&gt; which I have yet to use, but of the ones with which I have experimented,&lt;a href=&quot;http://cocos2d-x.org/&quot;&gt;cocos2dx-html&lt;/a&gt; and &lt;a href=&quot;http://melonjs.org/&quot;&gt;melonJS&lt;/a&gt;, I chose melonJS. I decided that to get an RPG style game with the assests provided in the competition playable in the limited development time that I had, melonJS fit that need perfectly. So now I can kill two birds with one stone, get an HTML5 game built and get more familiar with one of the HTML5 engines I have been eyeing for some time.&lt;br /&gt;
So I spent my evenings and weekends for the last couple weeks doing quite a bit of hacking. First I had to familiarize myself with making some tilemaps for the different world areas within the game that I wanted to create, figure out how that tied in with the melonJS framework that I was trying to learn, and create a simple story in the game which could be completed before interest is lost. Creating the tilemaps was easy, and the way in which melonJS incorporates them into the game is slick and effective. A couple things which weren’t clear from the melonJS documentation were 1) dynamically adding projectiles or arbitrary objects (such as the magic in my game) to the screen, and 2) how to get the level transitions to behave how I wanted.  The first was pretty simple in the end, all I needed to do was check if my player had the magic, check direction, create &amp;amp; align, add it and make sure it displays on the scene:&lt;br /&gt;
&lt;div class=&quot;gistLoad&quot; data-id=&quot;3807243&quot; id=&quot;gist-3807243&quot;&gt;
Loading ....&lt;/div&gt;
The other major hurdle I faced was the scenes when jumping from one map to another would sometimes immediately jump to a completely different map. This seemed like a bug and was so inconsistent I nearly scrapped the whole project, but as it turns out, a few of my enemies were walking their boundaries to the point where the level transitions began, triggering a random map change as if it were the main player. So that was a quick fix (once I figured it out). I do hope to add some more fun to it as time goes on, and welcome any contributors to expanding it to whatever it becomes. So go ahead and &lt;a href=&quot;https://github.com/cgack/libpx&quot;&gt;Fork it&lt;/a&gt;.&lt;br /&gt;
I cannot thank the other contributors to the competition enough, they are a cheery bunch on IRC who have donated time and talent to a really cool open game competition.&lt;br /&gt;
So now you know a bit of the backstory that led up to &lt;a href=&quot;http://cgack.com/libpx&quot;&gt;Pixel Quest&lt;/a&gt;, my HTML5 entry in the 2012 Liberated Pixel Cup.&lt;br /&gt;
&lt;script src=&quot;https://raw.github.com/moski/gist-Blogger/master/public/gistLoader.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/4357527880441881594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/08/liberated-pixel-cup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4357527880441881594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/4357527880441881594'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/08/liberated-pixel-cup.html' title='Liberated Pixel Cup'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-1567295790759098695</id><published>2012-07-11T19:47:00.000-04:00</published><updated>2012-07-11T19:47:00.530-04:00</updated><title type='text'>Wizard</title><content type='html'>Months ago I set out to create a nodejs based app for one of our office favorite games - Wizard (the ultimate game of trump). I started the project by myself, but after I got it to the point where I thought it could really become something I enlisted the help of a friend to help contribute to really speed up the development. Things went well and we reached the point&amp;nbsp; somewhere around SXSW 2012 where it became playable and testable, though admittedly it is still in a fairly unstable state. We had privately hosted it on Bitbucket and collaborated through there, but I decided today that we are going to unleash it as a &lt;a href=&quot;https://github.com/cgack/wizard&quot;&gt;public repo on Github&lt;/a&gt;.&amp;nbsp; So there it is. You can create your own instance of it and test and contribute (pull requests, issues, etc) as much as you like.&amp;nbsp; If you just want to see it in action, you can view the latest stable build that I have hosted with nodejitsu currently at http://wiz.jit.su.</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/1567295790759098695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/07/wizard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1567295790759098695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/1567295790759098695'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/07/wizard.html' title='Wizard'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7616640446654217996</id><published>2012-05-06T18:53:00.000-04:00</published><updated>2012-07-03T18:54:01.614-04:00</updated><title type='text'>Remote Debugging Tools</title><content type='html'>&lt;p&gt;Recently I have been working on some mobile content for a couple of my personal projects. And since working on the front-end of these projects involves spending some quality time with developer tools, I have also been spending some quality time utilizing a few different remote debugging tools. In the last few years the remote debugging tool category of software has grown rapidly which makes deciding on the best tool, somewhat similar to finding your favorite dev tools setup in your browser of choice. Just as some folks prefer debugging their front-end with Firebug, Opera Dragonfly, or Chrome Developer Tools (WebKit Inspector), there is now a similarly robust selection for remote debugging for mobile devices.&lt;/p&gt;

&lt;p&gt;Built by Remy Sharp, &lt;a href=&quot;http://jsconsole.com/&quot;&gt;JsConsole.com&lt;/a&gt; is perhaps the simplest and most accessible tool for remote debugging. Simply include the remote.js file in your html,&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;http://jsconsole.com/remote.js?IDENTIFIER&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt; navigate to jsconsole.com, &amp;#8220;:listen&amp;#8221;, and you now have access to your remote device.  Works splendedly, but doesn&amp;#8217;t have all the bells and wistles that come along with the advancing browser dev tools. I use this tool a ton for remote debugging work, especially since it works across browsers on my mobile device. Another tool that I have utilized and is quite popular due to its association with PhoneGap, is &lt;a href=&quot;http://people.apache.org/~pmuellr/weinre/docs/latest/&quot;&gt;Weinre&lt;/a&gt; or WebKit Inspector Remote. With this you simply run a server locally that will allow you to debug remotely utilizing a set of the WebKit Inspector toolset (Google Chrome, Safari) - provided you supply a target.js script in your source. Again this is not a full set of the tools which are normally available to a Chrome Dev Tools, Firebug, Dragonfly user, but is quite adequate and useful on multiple target browsers. I rarely utilize Weinre, but many developers find it a critical part of their workflow.&lt;/p&gt;

&lt;p&gt;Opera Dragonfly has a great remote debugging experience baked into their tools. One simply tells Opera Desktop to initiate a remote listening session, then Opera Mobile &amp;#8220;opera:debug&amp;#8221;, and you can inspect your remote page in Dragonfly. Honestly, I have limited experience here, because I rarely utilize Dragonfly, even though the tools are quite robust.&lt;/p&gt;

&lt;p&gt;So what is my go to remote debugging tool today? Chrome. I am most comfortable with the Chrome Dev Tools in all my other debugging for a number of reasons including the continuous insertion of handy new features. So once I upgraded my phone to Android 4 (Ice Cream Sandwich) - which is required to utilize Chrome For Android - I have been happily utilizing the full suite of Developer Tools in Chrome to inspect my mobile app on my Android device. Again, the best solution for me because I can utilize the same toolset for desktop or mobile debugging.  Its pretty simple to setup, just get your Android device set up for usb debugging in both the Android settings and Chrome settings, then (via the Android SDK) setup a debug bridge that will forward your console to a port of your choosing allowing you to open localhost:9222 which shows all your tabs open on your phone, ready for inspection. Start listening on that port using a script like this in your terminal:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;adb forward tcp:9222 localabstract:chrome_devtools_remote
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Rather than go through my terminal command history to find the command and possibly change the port, I aliased the command in my .bashrc file so anytime I hook up my phone I can type &lt;code&gt;cremote 9222&lt;/code&gt; in the terminal and inspect away&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;function cremote() {
    adb forward tcp:$@ localabstract:chrome_devtools_remote
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;From there its on to your browser to find and inspect away to your hearts content. This remote debugging space is growing quickly, the upcoming version of many toolset have this capability built in directly, things like jsBin (v3), jsfiddle, Firefox dev tools, Adobe Shadow, Trigger.io&amp;#8217;s remote inspector, and many others I&amp;#8217;m sure are all available, or will be available to utilize as a remote debugger. So the developer wins in the end with a host of choices to choose from so they can find that which fits their needs and workflow.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7616640446654217996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/05/remote-debugging-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7616640446654217996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7616640446654217996'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/05/remote-debugging-tools.html' title='Remote Debugging Tools'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-5204807285607412595</id><published>2012-01-27T18:52:00.000-05:00</published><updated>2012-07-03T18:54:01.590-04:00</updated><title type='text'>DeviceOrientation Events</title><content type='html'>&lt;p&gt;The Mozilla Dev Derby is a pretty cool thing.  Developers from around the world can openly add any demo to the site, and if their demo lines up with the prescribed derby for the month, they are automatically entered to win a prize (t-shirt, cool bag, android device).  I decided I would enter again for the January 2012 derby based on Orientation.  I made two demos.&lt;/p&gt;

&lt;h3&gt;catch&lt;/h3&gt;

&lt;p&gt;The first one called &amp;#8220;Catch&amp;#8221; which you are attempting to catch a randomly generated ball in the shortest amount of time possible. I have personally found it incredibly addicting to get the perfect game, or at least my best attempt at it and I even wrote the source code.  What I learned in developing this app was a couple of things.  One, there isn&amp;#8217;t a ton of documentation on the web about the DeviceOrientationEvent.  Two, its pretty straightforward to detect the orientation and utilize it to move an object.  Here is the basic of my app:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; /*orientation stuffs*/
var initOrientation = function() {
    var count = 0, gam = 0, bet = 0;
    if (window.DeviceOrientationEvent) {
        window.addEventListener(&quot;deviceorientation&quot;, function(e) {
            //gamma = left to right
            //beta = front back
            //alpha = compass dir
            count = count + 1;
            gam += e.gamma;
            bet += e.beta;

            if (count === 0 || count % 10 === 0) {
                orientationYo(gam, bet);
                gam = 0;
                bet = 0;
            }
        }, false);
    }
};

//handle orientation
var orientationYo = function(ltr, ftb) {
    coor.x = coor.x + ltr;
    coor.y = coor.y + ftb;
    if (!gameState.victory &amp;amp;&amp;amp; gameState.playing) {
        tgt.move(coor);   
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;so that handles the detection of the orientation event, next I simply added the move call to my target (tgt) which looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var tgt = {
    isDrawing: false,
    collided: false,
    start: function(coordinates) {
        this.drawIt(coordinates);
        this.isDrawing = true;
    },
    drawIt: function (coordinates) {
        ctx.clearRect(0, 0, canvasWidth, canvasHeight);
        ctx.fillStyle = b2_color;
        ctx.beginPath();
        ctx.arc(coordinates.x, coordinates.y, 25, 0, Math.PI * 2, true);
        ctx.fill();
    },
    move: function(coordinates) {
        if (this.isDrawing) {
          this.checkBounds(coordinates);
          this.drawIt(coordinates);
        }
    },
    finish: function(coordinates) {
        this.isDrawing = false;
        ctx.lineTo(coordinates.x, coordinates.y);
        ctx.stroke();
        ctx.closePath();                
    },
    checkBounds: function(coordinates) {
         if (coordinates.y &amp;gt; bound.y2) {
            coordinates.y = bound.y2;
          } else if (coordinates.y &amp;lt; bound.y1) {
            coordinates.y = bound.y1;
          } else if (coordinates.x &amp;gt; bound.x2) {
            coordinates.x = bound.x2;
          } else if (coordinates.x &amp;lt; bound.x1) {
            coordinates.x = bound.x1;
          }
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;collision detection is handled by my randomly placed bouncing ball, which detects when the target ball moves into its path:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;checkObjectCollisions: function() {
    var imgData = ctx.getImageData(this.position.x + this.velocity.x1, this.position.y + this.velocity.x2, r, r),
        pix = imgData.data;
    for (i = 0, n = pix.length; i &amp;lt; n; i += 4) {
        if (pix[i] !== 0) {
            this.collided = true;
            if (Math.abs(this.velocity.x1) &amp;gt; Math.abs(this.velocity.x2)){
                this.velocity.x1 = -this.velocity.x1 * drag;
            } else {
                this.velocity.x2 = -this.velocity.x2 * drag;
            }
            break;
        } else {
            this.collided = false;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I am pretty happy with the game, its clean and works nicely.  You can check it out &lt;a href=&quot;https://developer.mozilla.org/en-US/demos/detail/catch&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;compass&lt;/h3&gt;

&lt;p&gt;The other is a simple web compass where I utilize the DeviceOrientationEvent to get the &lt;a href=&quot;https://developer.mozilla.org/en-US/demos/detail/simple-compass&quot;&gt;cardinal direction your phone or device is facing&lt;/a&gt;.  There are two cool (in my opinion) things that happened here.  One is that to me it seems the device orientation event as defined states that the DeviceOrientationEvent.alpha ranges from 0 to 360 which to me is a 361 degree circle.  The second is that I was able to utilize the offline caching capabilities of the modern web to make the compass available to a device event when not connected to the internet.  This is done in minimal lines of code.  The HTML and JavaScript are as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!-- This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at http://mozilla.org/MPL/2.0/.  --&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html manifest=&quot;compass.appcache&quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=utf-8 /&amp;gt;
&amp;lt;title&amp;gt;Cardinal Direction Compass&amp;lt;/title&amp;gt;
&amp;lt;style&amp;gt;
  .pointer {
    height: 0;
    width: 0;
    border-left: 3em solid transparent;
    border-right: 3em solid transparent;
    border-bottom: 12em solid black;
    margin: -10px 0 0 -40px;
    top: 40%;
    left: 50%;
    position: absolute;
  }
  .n {
    top: 20%;
    left:50%;
    position:absolute;
    font:8em Helvetica;
    margin: 0 0 0 -40px;
  }
  &amp;lt;/style&amp;gt;
  &amp;lt;script src=&quot;js/jquery.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
  &amp;lt;div class=&quot;n&quot;&amp;gt;N&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;S&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;pointer&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;script&amp;gt;
        $(document).ready(function() {

          var rotate = function (deg) {  
              $(&quot;.n&quot;).css({ &quot;-moz-transform&quot;: &quot;rotate(0deg)&quot;});
              $(&quot;.n&quot;).css({ &quot;-moz-transform&quot;: &quot;rotate(&quot; + deg + &quot;deg)&quot;});

              $(&quot;.n&quot;).css({ &quot;-o-transform&quot;: &quot;rotate(0deg)&quot;});
              $(&quot;.n&quot;).css({ &quot;-o-transform&quot;: &quot;rotate(&quot; + deg + &quot;deg)&quot;});

              $(&quot;.n&quot;).css({ &quot;-ms-transform&quot;: &quot;rotate(0deg)&quot;});
              $(&quot;.n&quot;).css({ &quot;-ms-transform&quot;: &quot;rotate(&quot; + deg + &quot;deg)&quot;});

              $(&quot;.n&quot;).css({ &quot;-webkit-transform&quot;: &quot;rotate(0deg)&quot;});
              $(&quot;.n&quot;).css({ &quot;-webkit-transform&quot;: &quot;rotate(&quot; + deg + &quot;deg)&quot;});

              $(&quot;.n&quot;).css({ &quot;transform&quot;: &quot;rotate(0deg)&quot;});
              $(&quot;.n&quot;).css({ &quot;transform&quot;: &quot;rotate(&quot; + deg + &quot;deg)&quot;});
          };
          if (window.DeviceOrientationEvent) {
            window.addEventListener(&quot;deviceorientation&quot;, function (e) {
              rotate(360 - e.alpha);
            }, false);
          }

        });
        &amp;lt;/script&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The final point I&amp;#8217;d like to make is that due to what I thought was minimal documentation, I participated in a Mozilla Doc Sprint last weekend to update the Documentation surrounding the DeviceOrientationEvent. Doing my part in the web development community was both rewarding and a learning experience. I encourage anyone to try it out as well.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/5204807285607412595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/01/deviceorientation-events.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5204807285607412595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5204807285607412595'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/01/deviceorientation-events.html' title='DeviceOrientation Events'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-5466963682682472355</id><published>2012-01-07T18:50:00.000-05:00</published><updated>2012-07-03T18:54:01.595-04:00</updated><title type='text'>$.widget</title><content type='html'>&lt;p&gt;I have lately been looking to become more involed with open source projects and for starters I have been looking at jQuery UI and jQuery Mobile.  Both are amazing projects and share many of the same characteristics in their code.  This is because in both cases, the majority of the functionality is inherited from the jQuery UI widget factory.  If I&amp;#8217;m going to become involved in this project
I should understand how this works, so the following is my breakdown of the code as I understand it.&lt;/p&gt;

&lt;p&gt;The widget factory looks like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.widget = function( name, base, prototype ) {
    var namespace = name.split( &quot;.&quot; )[ 0 ],
        fullName;
    name = name.split( &quot;.&quot; )[ 1 ];
    fullName = namespace + &quot;-&quot; + name;

    if ( !prototype ) {
        prototype = base;
        base = $.Widget;
    }

    // create selector for plugin
    $.expr[ &quot;:&quot; ][ fullName ] = function( elem ) {
        return !!$.data( elem, name );
    };

    /* OTHER STUFF */
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&amp;#8217;ll get to the stuff in a second, but lets see what we&amp;#8217;ve already learned here. First I see that widget can take up to three arguments (name, base, prototype), and example might be something like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.widget(&quot;cg.awesomewidget, &quot;ui.button&quot;, { /*...*/})
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;here name or &amp;#8220;cg.awesomewidget&amp;#8221; becomes the namespace and fullname so in my example I have namespaced it to &amp;#8220;cg&amp;#8221; with a fullname of &amp;#8220;cg-awesomewidget&amp;#8221;. I also see that we check if prototype is provided, if it is not we assume that we are not inheriting from a named widget, set the base parameter to prototype and set the base to the main $.Widget base object. Okay that sounds more messy than it is. Lets try to rephrase.  The base is an optional parameter telling the widget factory we want to inherit from a known widget.  In my example above its &amp;#8220;ui.button&amp;#8221;.  If that parameter is not provided it simply pulls from the base $.Widget. So we know that &lt;strong&gt;any&lt;/strong&gt; widget will carry the prototype base of
$.Widget for starters. Now, what about this prototype?  This is the base object literal
that the widget makes its prototype.  Sweet right?  The next fun fact is that our widget gets its
very own shiny new custom selector $(&amp;#8220;:cg-awesomewidget&amp;#8221;).&lt;/p&gt;

&lt;p&gt;Next the object is constructed via the jQuery.extend() method as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$[ namespace ] = $[ namespace ] || {};
// create the constructor using $.extend() so we can carry over any
// static properties stored on the existing constructor (if there is one)
$[ namespace ][ name ] = $.extend( function( options, element ) {
    // allow instantiation without &quot;new&quot; keyword
    if ( !this._createWidget ) {
        return new $[ namespace ][ name ]( options, element );
    }

    // allow instantiation without initializing for simple inheritance
    // must use &quot;new&quot; keyword (the code above always passes args)
    if ( arguments.length ) {
        this._createWidget( options, element );
    }
}, $[ namespace ][ name ], { version: prototype.version } );
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;here the $[ namespace ][ name ] object is merged together with the prototype.version into the
existing constructor as described in the comments.  Then the options are passed along to the
base.  Again this is done via jQuery extend.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var basePrototype = new base();
// we need to make the options hash a property directly on the new instance
// otherwise we&#39;ll modify the options hash on the prototype that we&#39;re
// inheriting from
basePrototype.options = $.widget.extend( {}, basePrototype.options );
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is followed up with a call to $.each() that checks all the functions of the base and applies
those to our new widget.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.each( prototype, function( prop, value ) {
    if ( $.isFunction( value ) ) {
        prototype[ prop ] = (function() {
            var _super = function() {
                return base.prototype[ prop ].apply( this, arguments );
            };
            var _superApply = function( args ) {
                return base.prototype[ prop ].apply( this, args );
            };
            return function() {
                var __super = this._super,
                    __superApply = this._superApply,
                    returnValue;

                this._super = _super;
                this._superApply = _superApply;

                returnValue = value.apply( this, arguments );

                this._super = __super;
                this._superApply = __superApply;

                return returnValue;
            };
        }());
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After all of this its time to put it all together.  The widget prototype is now set via extend where
we extend our basePrototype (widget) merging in the new widget and prototype. The last thing needed is a call to $.widget.bridge() which creates an instance of the object.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$[ namespace ][ name ].prototype = $.widget.extend( basePrototype, {
    namespace: namespace,
    widgetName: name,
    widgetEventPrefix: name,
    widgetBaseClass: fullName
}, prototype );

$.widget.bridge( name, $[ namespace ][ name ] );
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That concludes our walkthrough of the jQuery UI widget factory.  Fairly amazing when you look at how simple it is to create a widget based on this.  A simple example is a look at jquery.ui.tooltip.js&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/5466963682682472355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2012/01/widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5466963682682472355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/5466963682682472355'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2012/01/widget.html' title='$.widget'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7333770831047956364.post-7381243288667907641</id><published>2011-12-28T18:48:00.000-05:00</published><updated>2012-07-03T18:54:01.602-04:00</updated><title type='text'>Collision Detection on Canvas</title><content type='html'>&lt;p&gt;I was toying around with a bouncing ball on an HTML canvas the other day when I wanted to find an easy way to detect collisions. One thing that is easy is validating against the bounds of the canvas. This is done with a simple check on the bounds of the canvas as follows:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;//this is a Ball object
if (this.position.y &amp;gt; bound.y2) {
    this.velocity.x2 = -this.velocity.x2 * drag;
    this.position.y = bound.y2;
} else if (this.position.y &amp;lt; bound.y1) {
    this.velocity.x2 = -this.velocity.x2 * drag;
    this.position.y = bound.y1;
}
if (this.position.x &amp;lt; bound.x1) {
    this.velocity.x1 = -this.velocity.x1 * drag;
    this.position.x = bound.x1;
} else {
    if (this.position.x &amp;gt; bound.x2) {
        this.velocity.x1 = -this.velocity.x1 * drag;
        this.position.x = bound.x2;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You&amp;#8217;ll see that if we get the Ball beyond the bounds of either axis we reverse the velocity vector (and for my example) I augment that vector with some drag.  Then I start the Ball off (headed the other direction now) from the start of the boundary.  This is straight forward and not too difficult to come up with.  The same can be done for other shapes on the canvas which we do not wish for the ball to pass through.  These again can be simple if we know the layout and the position of the target walls (think floating boxes).  Where this gets to a point where the shapes are not at right angles or the boundaries have become more arbitrary, I no longer want to calculate each possible collision point.  I also do not wish to wrap the object into a larger boundary box to utilize for detection.  So a more elegant solution can be found.  If we, just before moving the ball, simulate the move and have another means for detection we can then change the trajectory of the object and send it sailing away.  Here&amp;#8217;s what we need.  we need a ball sized snapshot of the canvas where we plan to put the ball on the next move.  We then iterate through those pixels on the image and find ones that arent the color of our background (in my case non-white).  To do this without also seeing the ball as a collided upon object, I&amp;#8217;ll clear the canvas of the ball first.  Here is the code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;//clear canvas, add shape
context.clearRect(0, 0, canvasWidth, canvasHeight);

context.fillStyle = &quot;rgb(150,150,150)&quot;; //not white
context.beginPath();
context.moveTo(200, 100);
context.lineTo(300, 125);
context.lineTo(250, 175);
context.lineTo(200, 200);
context.lineTo(200, 100);
context.fill();
context.closePath();

//now we check our next move for collision
var imgData = context.getImageData(this.position.x + this.velocity.x1, this.position.y + this.velocity.x2, r, r);
var pix = imgData.data;
for (var i = 0; n = pix.length, i &amp;lt; n; i += 4) {
    //check if we&#39;re not on a white pixel
    if (pix[i] != 0) { 
        this.collided = true; 
        //bounce away
        if (Math.abs(this.velocity.x1) &amp;gt; Math.abs(this.velocity.x2)){
            this.velocity.x1 = -this.velocity.x1 * drag;
        } else {
            this.velocity.x2 = -this.velocity.x2 * drag;
        }
        break;
    } else {
        this.collided = false;
    }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Thats it!  Now we can throw our ball at a target.  The demo I have is located at &lt;a href=&quot;http://jsfiddle.net/cgack/mwsBY/&quot;&gt;this jsFiddle&lt;/a&gt;.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://go-cloud-go.blogspot.com/feeds/7381243288667907641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://go-cloud-go.blogspot.com/2011/12/collision-detection-on-canvas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7381243288667907641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7333770831047956364/posts/default/7381243288667907641'/><link rel='alternate' type='text/html' href='http://go-cloud-go.blogspot.com/2011/12/collision-detection-on-canvas.html' title='Collision Detection on Canvas'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>