-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.html
439 lines (405 loc) · 19.4 KB
/
index.html
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
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
<!doctype html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>CCN4B.js - a Javascript framework for CCNx Protocol</title>
<meta name="description" content="">
<meta name="author" content="">
<!-- Mobile viewport optimized: j.mp/bplateviewport -->
<meta name="viewport" content="width=device-width,initial-scale=1">
<!-- CSS : implied media="all" -->
<!-- <link rel="stylesheet" href="css/style.css"> -->
<!-- <link rel="stylesheet" href="http://twitter.github.com/bootstrap/assetscss/bootstrap-1.0.0.min.css"> -->
<link rel="stylesheet" href="css/bootstrap-1.0.0.css">
<link rel="stylesheet" href="css/docs.css">
<script src="js/libs/modernizr-2.0.6.min.js"></script>
<link type="text/plain" rel="author" href="/humans.txt" />
</head>
<body onload="createTimeline()">
<div class="topbar">
<div class="container">
<h3><a href="#">CCN4B.js</a></h3>
<ul>
<li class="active"><a href="#masthead">Overview</a></li>
<li><a href="#about">About</a></li>
<li><a href="#usage">Usage</a></li>
<li><a href="#source">Source</a></li>
<li><a href="#api">API</a></li>
<li><a href="https://github.com/truedat101/ccn4bnode/tarball/master">Download</a></li>
<li><a href="#demo">Demo</a></li>
<li class="menu"><a href="#" class="menu">Slidedeck</a>
<ul class="menu-dropdown">
<li><a href="#about">What is CCN4B.js?</a></li>
<li><a href="#usecases">Motivation & Use Cases</a></li>
<li><a href="#collaborators">Collaborators</a></li>
<li><a href="#whyjs">Why Javascript?</a></li>
<li><a href="#implementation">Implementation</a></li>
<li><a href="#status">Status</a></li>
<li><a href="#roadmap">Roadmap</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div id="masthead">
<div class="inner">
<div class="container">
<h1>CCN4B.js</h1>
<p class="lead">
CCN4B.js - a Javascript framework for CCNx Protocol.<br />
The CCN4B.js project is an open source project which is a proof of concept. Short for Content Centric Networking for Browsers, CCN4B is a small CCNx client API written in Javascript (JS), that utilizes the evented model of JS development. APIs are written to be asynchronous. Web application developers can choose to deploy this API in the client side of the web application (in script tag), or on the server-side of the web application, as a module import for a Server-Side Javascript platform called Node.js.<br />
</p>
</div> <!-- /container -->
</div>
</div>
<div id="container">
<section id="about">
<div class="page-header">
<h1>About CCN4B.js <small>Brief history, browser support, and more</small></h1>
</div>
<h3>What is CCN4B.js</h3>
<p>The CCN4B.js project is a collection of Javascript libraries and services that support communication and development using the CCNx Protocol. It constitutes a mix of Client-Side Javascript Libraries and Server-Side Middleware. Javascript will be used directly to generate CCNx packets, and will attempt to take a minimalist approach in API surface. Initial investigation will look at whether the best approach is to wrap the native C library or to use pure JS to generate CCNx packets. Other work will include development of a CCN Admin Console to allow monitoring and management of a CCN router.</p>
<br/>
<p><img src="images/ccn4bjs-overview.png" />
<h3>Brief History</h3>
<p>This project was started in August of 2011 in response to an effort to help solve a problem with getting broadband and data services deployed in the developing world. CCNx offers an interesting set of attributes which may support various use cases for deployment in adverse conditions, such as intermittent power, poor quality of internet connectivity, lack of connectivity, and lack of general Internet infrastructure.</p>
<h3>Browser As the Platform</h3>
<p>Since 2007, with the advent of the iPhone/iPod Ecosystem, the importance of the Web Runtime has grown in leaps and bounds. With the rise and fall of proprietary development platforms, and with the continued issues with IPR around technologies like Android, the Web is the only platform that is future proof and cannot be erase, held under injunction, sued, or turned off.</p>
<h3>Low Cost/Embedded Devices to Bridge The Digital Diviide</h3>
<p>The BOM cost of a complete Wifi enabled device with a screen is on a downward curve, with power and capability increasing as cost declines over time. This is a challenge for profits of large semiconductor companies, but presents a great opportunity for underdeveloped countries to leap ahead in technology deployment and utilization. The Web is the lowest common denominator for app development and deployment on these low cost devices (after SMS).</p>
</section>
<section id="usage">
<div class="page-header">
<h1>Usage <small> - coding, APIs, samples, and deployment.</small></h1>
<h3>Quickstart Guide</h3>
<OL>
<li>Install node.js - (nodejs.org)</li>
<li>Install NPM (npmjs.org)
<li>run 'npm install ccn4bnode'. This will install ccnx-0.4.0</li>
<li>do a git clone of ccn4bnode 'git clone git@github.com:truedat101/ccn4bnode.git'</li>
<li>cd ccn4bnode/jumbosocket</li>
<li>run 'node ccn4bnode-server.js'</li>
<li>go to http://localhost:8080/ccn4bnode</li>
</div>
<div class="row">
<div class="span4 columns">
<h2>Coding</h2>
<p>Discuss the Javascript with code samples - TODO</p>
</div>
<div class="span4 columns">
<h2>Testing</h2>
<p>Discuss testing and verification of the code - TODO</p>
</div>
</div>
</section>
<section id="source">
<div class="page-header">
<h1>CCN4B.js <small>source code</small></h1>
</div>
<ul>
<li><a href="https://github.com/truedat101/ccn4b">CCN4B.js - umbrella project hosted on Github.com, under BSD license (currently a placeholder project on Github)</a></li>
<li><a href="https://github.com/truedat101/ccn4bname.js">CCN4BName.js - handles CCNx Naming and URI validation and encoding, hosted on Github, under BSD license</a></li>
<li><a href="https://github.com/truedat101/ccn4bnode">CCN4BNode - provides the middleware wrapper around native CCNx components, and the packaging for CCNx for easy distribution, on Github, under BSD license</a></li>
<li><a href="https://github.com/truedat101/jumbosocket">Jumbosocket - is a thin Node.js server providing HTTP/HTTPs services + a Web Socket oriented services backend.</a></li>
</ul>
</section>
<section id="api">
<div class="page-header">
<h1>API Documentation</h1>
<p>This is a big todo item. Currently exploring various JS documentation options</p>
</div>
</section>
<section id="download">
<div class="page-header">
<h1>Download</h1>
</div>
</section>
<section id="demo">
<div class="page-header">
<h1>CCN4B Demo - (Coming Soon)</h1>
</div>
<h2>A simple demonstration of CCNX4B.js</h2>
<br />
<div class="row">
<div class="span5 columns">
<h4>What is it?</h4>
<p>The CCN Admin demo shows simple management of a CCNx router..</p>
</div>
<div class="span5 columns">
<h4>Service management</h4>
<p>Just like you used to do with PHPMyAdmin, you can use this to manage your CCNx services (start/stop/restart) + configuration.</p>
</div>
<div class="span6 columns">
<h4>Content Snarfing</h4>
<p>Input any URL and pull in content. Get your local copy of the Internet</p>
</div>
<div class="span6 columns">
<h4>Content Sharding</h4>
<p>Content can be shared and split across many Micro-Cloud nodes.</p>
</div>
</div>
<div class="row">
<div class="span12 columns">
<ul class="pills">
<li class="active"><a href="#pill_services">Services</a></li>
<li><a href="#pill_content">Content</a></li>
<li><a href="#pill_status">Status</a></li>
<li><a href="#pill_configuration">Configuration</a></li>
<li><a href="#pill_logs">Logs</a></li>
<li><a href="#pill_analytics">Analytics</a></li>
</ul>
<div id="pill_content" style="display: none;">
<h4>CCNx Content Management</h4>
<h3>Content Sharing</h3>
<div class="well">
<div class="clearfix">
<label id="optionsRadio">List of Content</label>
<div class="input">
<ul class="inputs-list">
<li>
<label>
<input type="checkbox" name="optionsCheckboxes" value="option1" />
<span>9/11 Commemoration Video</span>
</label>
</li>
<li>
<label>
<input type="checkbox" name="optionsCheckboxes" value="option2" />
<span>My Copy of Wikipedia</span>
</label>
</li>
<li>
<label>
<input type="checkbox" name="optionsCheckboxes" value="option3" />
<span>Khan Academy Algebra 1 Video</span>
</label>
</li>
</ul>
</div>
</div> <!-- /clearfix -->
<button class="btn large primary" id="share_content">Share</button>
</div>
<h3>CCNx Names</h3>
<span id="dumpofnames"></span>
</div>
<div id="pill_configuration" style="display: none;">
<h4>CCN Node Configuration</h4>
<form action="" class="form-stacked">
<fieldset>
<div class="clearfix">
<label for="">CCND Logging Levels (Depricated)</label>
<div class="input">
<select>
<option>none</option>
<option>low</option>
<option>co</option>
<option>med</option>
<option>high</option>
</select>
</div>
</div> <!-- /clearfix -->
</fieldset>
<br/><br/><br/><br/><br/><br/><br/><br/>
</form>
</div>
<div id="pill_status" style="display: none;">
<!-- <span id="ccnd_status"></span> -->
<div class="row">
<div class="row show-grid">
<div class="span11 columns" id="rss"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-0"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-2"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-3"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-4"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-5"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-6"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-7"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-8"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-9"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-10"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-11"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-12"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-13"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-14"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-15"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-16"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-17"></div>
</div>
<div class="row show-grid">
<div class="span11 columns" id="status-18"></div>
</div>
</div>
</div>
<div id="pill_services">
<h4>CCNx Service Management</h4>
<h3>CCND Admin</h3>
<div class="well">
<button class="btn large primary" id="ccn_start">Start CCND</button>
<button class="btn large" id="ccn_stop" disabled>Stop CCND</button>
<button class="btn large" id="ccn_restart" disabled>Restart CCND</button>
</div>
<h3>CCNR Admin</h3>
<div class="well">
<button class="btn large primary" id="ccnr_start">Start CCNR</button>
<button class="btn large" id="ccnr_stop" disabled>Stop CCNR</button>
<button class="btn large" id="ccnr_restart" disabled>Restart CCNR</button>
</div>
</div>
<div id="pill_analytics" style="display: none;">
<h4>CCNx Node Analytics</h4>
<h3>Throughput</h3>
<canvas id="chart" width="400" height="100"></canvas>
</div>
<div id="pill_logs" style="display: none;">
<h4>CCND Logs</h4>
<p>Add realtime streaming logs - TODO</p>
</div>
</div> <!-- end div class="span12 columns"-->
</div> <!-- end div class=row -->
</section>
<section id="usecases">
<div class="page-header">
<h1>CCN4B Motivation & Usecases</h1>
<h3>Objective: Create a Clusters of Micro-Clouds: little nodes that can aggregate content between nodes and client devices for the developing world</h3>
<ul>
<li>Broadband may be widely unavailable</li>
<li>Mobile internet is not a universal right</li>
<li>WiFi is not always on</li>
<li>Cost of (mobile and fixed-lin) broadband services may rise, not fall, over time, if competition in a particular country decreases
<li>24/7 always-on power is a luxury</li>
<li>Traditional Consumers are an anomaly unique to developed countries</li>
<li>Governments may drive innovation more than capitalist market forces</li>
<li>Content and Apps must be free, as the traditional ways to monetize are not used outside of formal economies</li>
<li>Traditional Intellectual Property rights are hard to uphold or enforce</li>
</ul>
</div>
</section>
<section id="collaborators">
<div class="page-header">
<h1>Collaborators</h1>
<ul>
<li>Dr. Kim, CTO of Education, Stanford, ED of Seeds of Empowerment</li>
<li>Amadou Daffe, Co-founder, Coders4Africa</li>
<li>Marvell Semiconductor, PlugComputer.org (ARM-based embedded hardware)</li>
</ul>
</div>
</section>
<section id="whyjs">
<div class="page-header">
<h1>Why Javascript (JS)?</h1>
<ul>
<li>JS is one of the most commonly understood languages</li>
<li>JS is increasingly important as the glue between the major pieces of the web runtime: HTML5css3/DOM</li>
<li>JS is based on open standards, and tracks to an open specification in active development</li>
<li>JS-based VMs/runtimes have major financial support from Mozilla, Apple, and Google.</li>
<li>JS performance has increased dramatically with optimizations and improvements in VM technology</li>
<li>Front-end JS developers fetch a premium in the market</li>
<li>Server-Side development of JS as a web middleware is being rapidly adopted by developers formerly doing PHP, Java, or ruby</li>
</ul>
</div>
</section>
<section id="implementation">
<div class="page-header">
<h1>Implementation</h1>
<h3>Various Approaches</h3>
<ul>
<li>Browser Plugin to manage mapping of URLs to CCNx names, and services</li>
<li>Pure client-side library for creating CCNx packets and communicating with CCNx services</li>
<li>Web middleware proxy, developed as an Apache Mod or similar</li>
<li><strong>Node.js Middleware as a proxy to CCNx services, and a CCNx client API to communicate with CCNx services</strong></li>
</ul>
</div>
</section>
<section id="status">
<div class="page-header">
<h1>Status</h1>
<ul>
<li>late July 2011 - CCN4B.js paper accepted for CCNxCon 2011</li>
<li>late July 2011 - setup git repositories</li>
<li>early Aug 2011 - implement CCN4BName.js to handle client side parsing, validation, and encoding of CCNx naming/uri schemes</li>
<li>Mid Aug 2011 - implement a usable server middleware with Node.js + Socket.io (Jumbosocket)</li>
<li>Early Sept 2011 - implement first cut at CCNx integration on the server middleware with CCN4BNode project, performs a few basic commands as an admin console around CCND, get realtime status, and get name information out of repo.</li>
<li>Early Sept 2011 - Publish first CCNx package into NPM, called ccn4bnode</li>
<li>Early Setp 2011 - Present CCN4B.js at CCNxCon 2011 @ PARC</li>
</ul>
</div>
</section>
<section id="roadmap">
<div class="page-header">
<h1>Roadmap</h1>
<ul>
<li>Implement CCNB2JSON.js library to create a way to encode/decode CCNB binary objects for packet generation</li>
<li>Come up with a few recipes for creating and sending CCNx packets from the client side and from the server side</li>
<li>Implement simple demo web app - Content Snarf</li>
<li>Define implementation/topology for a CCNx node (fib, cs, pit)</li>
<li>Strategy for configuration management - Use Redis</li>
<li>Implement log rotation strategy</li>
<li>Refactor project structure to move ccn4bnode.html demo site out and rename, put into ccn4b.js project, and update project deps, as jumbosocket master master should be the base server middleware, and development of apps should go on outside</li>
<li>Implement Content Repo - Use MongoDB</li>
<li>Strategy for sync</li>
<li>Integration crypto library on client side</li>
<li>Review options for crypto library on server side - Need something we can optimize for ARM</li>
<li>Key Management Strategy</li>
<li>User Management Strategy</li>
</ul>
</div>
</section>
</div> <!--! end of #container -->
<div id="footer">
<div class="inner">
<div class="container">
<p class="right"><a href="#">Back to top</a></p>
<p>
David J. Kordsmeier<a href="http://twitter.com/dkords" target="_blank">@dkords</a> via <a href="http://www.razortooth.biz" target="_blank">Razortooth Communications, LLC</a>.<br />
Licensed under the <a href="http://www.opensource.org/licenses/BSD-3-Clause" target="_blank">New BSD License</a>.
</p>
</div>
</div>
</div>
<!-- <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script>
<script src="js/libs/smoothie.js"></script>
<script src="js/bs.js"></script>
<script src="jsjs-common.js"></script>
<script src="js/ccn4bnode-client.js"></script>
<!-- scripts concatenated and minified via ant build script-->
<script src="js/plugins.js"></script>
<script src="js/script.js"></script>
<!-- end scripts-->
</body>
</html>