-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
356 lines (273 loc) · 20.7 KB
/
atom.xml
File metadata and controls
356 lines (273 loc) · 20.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><![CDATA[TruePattern]]></title>
<link href="http://truepattern.github.com/atom.xml" rel="self"/>
<link href="http://truepattern.github.com/"/>
<updated>2012-06-09T02:49:20-07:00</updated>
<id>http://truepattern.github.com/</id>
<author>
<name><![CDATA[aras]]></name>
</author>
<generator uri="http://octopress.org/">Octopress</generator>
<entry>
<title type="html"><![CDATA[node.js on heroku]]></title>
<link href="http://truepattern.github.com/blog/2012/06/09/node-dot-js-on-heroku/"/>
<updated>2012-06-09T02:04:00-07:00</updated>
<id>http://truepattern.github.com/blog/2012/06/09/node-dot-js-on-heroku</id>
<content type="html"><![CDATA[<p>In order to showcase node.js app to external world, the simplest way is to embrace heroku. Following are the simple steps to deploy our <a href="http://truepattern.com/blog/2012/06/05/todo-application">Todo App</a> done before.</p>
<h2>Deploy a node.js app to heroku</h2>
<p>Refer to the following links that I found very useful</p>
<ul>
<li><a href="https://devcenter.heroku.com/articles/nodejs">heroku cedar page</a></li>
<li><a href="http://blog.superpat.com/2011/11/15/running-your-own-node-js-version-on-heroku/">running own node.js version</a></li>
</ul>
<!-- more -->
<h3>Key generation</h3>
<p>First thing is to register with heroku and generate ssh keys for your e-mail id that you registered with heroku</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>ssh-keygen -t rsa -C "your-email-id-here"
</span><span class='line'>heroku keys:add</span></code></pre></td></tr></table></div></figure>
<h3>Create app on heroku</h3>
<p>Following steps would create the app on heroku and set the node.js to 0.6.x</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># create the app
</span><span class='line'>heroku create --stack cedar aonx-todo
</span><span class='line'>
</span><span class='line'># set node.js build to 0.6.x
</span><span class='line'>heroku config:add BUILDPACK_URL=http://github.com/liquid/heroku-buildpack-nodejs.git
</span><span class='line'># set to production
</span><span class='line'>heroku config:add NODE_ENV=production
</span><span class='line'># get a free mongodb addon
</span><span class='line'>heroku addons:add mongohq:free
</span><span class='line'>
</span><span class='line'># deploy to production
</span><span class='line'>git push heroku master
</span><span class='line'>
</span><span class='line'># important, dont forget this
</span><span class='line'>heroku ps:scale web=1
</span></code></pre></td></tr></table></div></figure>
<h3>run server</h3>
<p>Actually its already running, on any changes just do the following</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git push heroku master</span></code></pre></td></tr></table></div></figure>
<ul>
<li>You can <a href="http://aonx-todo.herokuapp.com">click here to see the todo app running</a></li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Todo Application]]></title>
<link href="http://truepattern.github.com/blog/2012/06/05/todo-application/"/>
<updated>2012-06-05T01:01:00-07:00</updated>
<id>http://truepattern.github.com/blog/2012/06/05/todo-application</id>
<content type="html"><![CDATA[<h2>Lets say Hello, World to Node.js with a Todo app</h2>
<h3>Goal</h3>
<ul>
<li>To run a Todo Application that can capture Todo’s from user and save it on server (persist)</li>
</ul>
<p>The application and requirements are well known, so no need to go over what todo is. If you need pointers, please refer to <a href="http://addyosmani.github.com/todomvc/">this page</a>.</p>
<h3>Deliverables</h3>
<ul>
<li>Todo Server running on Node.js, MongoDB exposing REST API</li>
<li>Todo MVC client on Backbone.js using REST to connect with server</li>
</ul>
<!-- more -->
<h2>Todo Server</h2>
<p>There are some cool frameworks for Node coming up every day and its a fast changing landscape. To keep things simple, we’ll base our technologies on a robust ground with proven technologies like ExpressJS and MongooseJS. I have written a wrapper over both of these proven technologies (common settings that would help you bootstrap your application quicker) in <a href="http://github.com/truepattern/aonx">aonx</a>.</p>
<h3>Directory structure</h3>
<p>I prefer a very modular approach, where all the models, controllers and views are self contained within a directory (similar to django) and that way it could be potentially reused elsewhere. So we’ll go with a structure</p>
<ul>
<li>apps – contains todo module</li>
<li>config – config for todo server</li>
<li>public – client side js, css, etc.,</li>
<li>test – mocha tests</li>
<li>server.js – main server js file</li>
</ul>
<h3>Todo App</h3>
<figure class='code'><figcaption><span>Todo model (todo_model.js)</span> <a href='http://truepattern.github.com/downloads/code/todo_model.js'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="kd">var</span> <span class="nx">Todo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Schema</span><span class="p">({</span>
</span><span class='line'> <span class="nx">content</span> <span class="o">:</span> <span class="p">{</span> <span class="nx">type</span><span class="o">:</span><span class="nb">String</span><span class="p">,</span> <span class="nx">required</span><span class="o">:</span><span class="kc">true</span><span class="p">,</span> <span class="nx">index</span><span class="o">:</span> <span class="kc">true</span> <span class="p">},</span>
</span><span class='line'> <span class="nx">done</span> <span class="o">:</span> <span class="p">{</span> <span class="nx">type</span><span class="o">:</span><span class="nb">Boolean</span><span class="p">,</span> <span class="k">default</span><span class="o">:</span> <span class="kc">false</span> <span class="p">},</span>
</span><span class='line'> <span class="nx">order</span> <span class="o">:</span> <span class="nb">Number</span>
</span><span class='line'> <span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>
<p>as you can see, the model part is trivial, similarly aonx provides crudHelpers for mongoose, which make the controller a straight forward express-resource hookup as given below</p>
<figure class='code'><figcaption><span>Todo controller (todo_controller.js)</span> <a href='http://truepattern.github.com/downloads/code/todo_controller.js'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="nx">exports</span><span class="p">.</span><span class="nx">index</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">){</span>
</span><span class='line'> <span class="nx">Todo</span><span class="p">.</span><span class="nx">index</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="nx">res</span><span class="p">);</span>
</span><span class='line'><span class="p">};</span>
</span><span class='line'>
</span><span class='line'><span class="nx">exports</span><span class="p">.</span><span class="k">new</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">){</span>
</span><span class='line'> <span class="nx">Todo</span><span class="p">.</span><span class="nx">createObject</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span>
</span><span class='line'><span class="p">};</span>
</span><span class='line'>
</span><span class='line'><span class="nx">exports</span><span class="p">.</span><span class="nx">create</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">){</span>
</span><span class='line'> <span class="nx">Todo</span><span class="p">.</span><span class="nx">createObject</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span>
</span><span class='line'><span class="p">};</span>
</span><span class='line'>
</span><span class='line'><span class="nx">exports</span><span class="p">.</span><span class="nx">show</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">){</span>
</span><span class='line'> <span class="nx">Todo</span><span class="p">.</span><span class="nx">showObject</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">todo</span><span class="p">,</span> <span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span>
</span><span class='line'><span class="p">};</span>
</span><span class='line'>
</span><span class='line'><span class="nx">exports</span><span class="p">.</span><span class="nx">update</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">){</span>
</span><span class='line'> <span class="nx">Todo</span><span class="p">.</span><span class="nx">updateObject</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">todo</span><span class="p">,</span> <span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span>
</span><span class='line'><span class="p">};</span>
</span><span class='line'>
</span><span class='line'><span class="nx">exports</span><span class="p">.</span><span class="nx">destroy</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">){</span>
</span><span class='line'> <span class="nx">Todo</span><span class="p">.</span><span class="nx">removeObject</span><span class="p">(</span><span class="nx">req</span><span class="p">.</span><span class="nx">todo</span><span class="p">,</span> <span class="nx">req</span><span class="p">,</span> <span class="nx">res</span><span class="p">);</span>
</span><span class='line'><span class="p">};</span>
</span></code></pre></td></tr></table></div></figure>
<p>please refer to express-resource module for the crud routing hookup. As a last step, we’ll bind the controllers to the url of our choice (todos/*)</p>
<figure class='code'><figcaption><span>REST url (todo_url.js)</span> <a href='http://truepattern.github.com/downloads/code/todo_url.js'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="c1">// hookup the controller exported methods to this resource</span>
</span><span class='line'><span class="nx">app</span><span class="p">.</span><span class="nx">resource</span><span class="p">(</span><span class="s1">'todos'</span><span class="p">,</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./controllers'</span><span class="p">));</span>
</span></code></pre></td></tr></table></div></figure>
<h3>Testing</h3>
<p>Now, the part where we want to make sure all the REST part is working fine. Similar to aonx, I have put together a mocha wrapper for crudTesting called <a href="http://github.com/truepattern/berry">berry</a>. Its like just give the url and a sample object, it would verify create, read, update and delete. The sample unit test code is as follows</p>
<figure class='code'><figcaption><span>Unit Test (todo_test.js)</span> <a href='http://truepattern.github.com/downloads/code/todo_test.js'>download</a></figcaption>
<div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'> <span class="kd">var</span> <span class="nx">url</span> <span class="o">=</span> <span class="nx">serverUrl</span> <span class="o">+</span> <span class="s1">'/v1/todos'</span><span class="p">;</span>
</span><span class='line'> <span class="kd">var</span> <span class="nx">todoObj</span> <span class="o">=</span> <span class="p">{</span><span class="nx">title</span><span class="o">:</span><span class="s1">'Hello Todo'</span><span class="p">};</span>
</span><span class='line'> <span class="kd">var</span> <span class="nx">todoObj1</span> <span class="o">=</span> <span class="p">{</span><span class="nx">title</span><span class="o">:</span><span class="s1">'Updated Hello Todo'</span><span class="p">};</span>
</span><span class='line'> <span class="kd">var</span> <span class="nx">crudfn</span> <span class="o">=</span> <span class="nx">berry</span><span class="p">.</span><span class="nx">crudTester</span><span class="p">(</span><span class="nx">url</span><span class="p">,</span> <span class="nx">todoObj</span><span class="p">,</span> <span class="nx">todoObj1</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>
<h3>Run the server</h3>
<p>Now that you have made it so far, following are the instructions to run the todo server</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class=''><span class='line'># make sure node, npm, mongodb are installed
</span><span class='line'>git clone https://github.com/truepattern/todo-server.git
</span><span class='line'>cd todo-server
</span><span class='line'>npm install -d
</span><span class='line'>
</span><span class='line'># lets run unit tests
</span><span class='line'>make
</span><span class='line'>
</span><span class='line'># run the server
</span><span class='line'>node server.js
</span><span class='line'>
</span><span class='line'># go to another terminal
</span><span class='line'>curl localhost:8080/api/v1/todos
</span><span class='line'>curl localhost:8080/api/v1/todos/new?content=hello
</span><span class='line'>curl localhost:8080/api/v1/todos
</span></code></pre></td></tr></table></div></figure>
<h2>Todo Client</h2>
<p>I have copied the todo mvc client (backbone.js based) from <a href="http://addyosmani.github.com/todomvc/">here</a>. Just one change, instead of localstorage, now the client points to the localhost server. You can see the client by going to browser localhost:8080/index.html</p>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[CSS references]]></title>
<link href="http://truepattern.github.com/blog/2012/04/22/css-references/"/>
<updated>2012-04-22T01:45:00-07:00</updated>
<id>http://truepattern.github.com/blog/2012/04/22/css-references</id>
<content type="html"><![CDATA[<p>Following is my shortlisted references to CSS layouts to use for new projects.</p>
<ul>
<li><a href="http://semantic.gs/">semantic.gs</a></li>
<li><a href="http://adapt.960.gs/">960.gs</a></li>
<li><a href="http://twitter.github.com/bootstrap/">bootstrap css from twitter</a></li>
</ul>
<p>A blog listing the top css layouts for responsive web:</p>
<ul>
<li><a href="http://idesignow.com/css/7-css-grid-layout-frameworks-for-responsive-web-design.html">7-css-grid-layout for responsive design</a></li>
</ul>
]]></content>
</entry>
<entry>
<title type="html"><![CDATA[Setting up this blog]]></title>
<link href="http://truepattern.github.com/blog/2012/04/21/setting-up-truepattern-dot-github-dot-com/"/>
<updated>2012-04-21T18:20:00-07:00</updated>
<id>http://truepattern.github.com/blog/2012/04/21/setting-up-truepattern-dot-github-dot-com</id>
<content type="html"><![CDATA[<h2>Install octopress</h2>
<ol>
<li>Please follow the instructions as documented <a href="http://octopress.org/docs/deploying/github">here</a>.</li>
<li>execute the following commands</li>
</ol>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>$ rake setup_github_pages
</span><span class='line'>Enter the read/write url for your repository: git@github.com:<your-id>/<git-path></span></code></pre></td></tr></table></div></figure>
<ul>
<li>Also you can find very good documentation <a href="http://code.dblock.org/octopress-setting-up-a-blog-and-contributing-to-an-existing-one">here</a></li>
</ul>
<h2>Adding new entry</h2>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>rake new_post["Post Title"]</span></code></pre></td></tr></table></div></figure>
<h2>Checkin the sources</h2>
<p>BTW, dont forget to add the sources to a separate branch ‘sources’</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>git add .
</span><span class='line'>git commit -m 'blog sources'
</span><span class='line'>git push origin source</span></code></pre></td></tr></table></div></figure>
<h2>Updating blog</h2>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>rake generate
</span><span class='line'>rake preview
</span><span class='line'>rake deploy</span></code></pre></td></tr></table></div></figure>
]]></content>
</entry>
</feed>