浏览代码

Add the code format

Phodal Huang 10 年之前
父节点
当前提交
9cd56eeade
共有 6 个文件被更改,包括 773 次插入701 次删除
  1. 40 30
      beageek/1.anywhere-html.md
  2. 185 151
      beageek/2.anywhere-javascript.md
  3. 0 0
      css/vendor.css
  4. 313 337
      index.html
  5. 231 183
      more/coap.md
  6. 4 0
      pre/2.intro.md

+ 40 - 30
beageek/1.anywhere-html.md

@@ -21,11 +21,12 @@ Hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 
 这才是最短的hello,world程序,其次呢?ruby中的会是这样子的
 
-<pre><code class="bash">2.0.0-p353 :001 > p "hello,world"
+``` bash
+2.0.0-p353 :001 > p "hello,world"
 "hello,world"
- => "hello,world"
+	=> "hello,world"
 2.0.0-p353 :002 >
-</code></pre>
+```
 
 等等,如果你了解过html的话,会觉得这一点都不符合语法规则,但是他工作了,没有什么比安装完Nginx后看到It works!更让人激动了。
 
@@ -34,11 +35,13 @@ Hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 ###调试hello,world###
 我们会发现我们的代码在浏览器中变成了下面的代码,如果你和我一样用的是chrome,那么你可以右键浏览器中的空白区域,点击审查元素,就会看到下面的代码。
 
-	<html>
-		<head></head>
-		<body>hello,world</body>
-	</html>
-	
+``` html
+<html>
+	<head></head>
+	<body>hello,world</body>
+</html>
+```
+
 这个才是真正能在大部分浏览器上工作的代码,所以复制它到编辑器里吧。
 
 ###说说hello,world##
@@ -86,13 +89,18 @@ Hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
     
 被chrome浏览器解析成什么样了?
 
-	<html><head></head><body><语言>
-    		<头><!--头-->
-    		<身体>你好,世界<!--身体-->
-    	<!--语言-->
-	</body></html>		
-	
-以\<!--开头,-->结尾的是注释,写给人看的代码,不是给机器看的,所以机器不会去理解这些代码。
+``` html
+<html><head></head><body><语言>
+		<头><!--头-->
+		<身体>你好,世界<!--身体-->
+	<!--语言-->
+</body></html>		
+```	
+
+以
+    <!--开头,-->
+
+结尾的是注释,写给人看的代码,不是给机器看的,所以机器不会去理解这些代码。
 
 但是当我们把代码改成
 
@@ -129,21 +137,23 @@ Hello,world是一个传统,所以在这里也遵循这个有趣的传统,我
 	
 我们便可以在浏览器的最上方看到“标题”二字,真实世界的淘宝网也包含了上面的东西,只是还包括了更多的东西,所以你也可以看懂那些我们可以看到的淘宝的标题。
 
-	<html>
-	<head>
-		<title>标题</title>
-	</head>
-	<body>
-	hello,world
-	<h1>大标题</h1>
-	<h2>次标题</h2>
-	<h3>...</h3>
-	<ul>
-		<li>列表1</li>
-		<li>列表2</li>
-	</ul>
-	</body>
-	</html>
+``` html
+<html>
+<head>
+	<title>标题</title>
+</head>
+<body>
+hello,world
+<h1>大标题</h1>
+<h2>次标题</h2>
+<h3>...</h3>
+<ul>
+	<li>列表1</li>
+	<li>列表2</li>
+</ul>
+</body>
+</html>
+```
 	
 更多的东西可以在一些书籍上看到,这边所要说的只是一次简单的语言入门,其他的东西都和这些类似。
 

+ 185 - 151
beageek/2.anywhere-javascript.md

@@ -5,94 +5,106 @@ Javascript现在已经无处不在了,也许你正打开的某个网站他可
 ##Javascript的Hello,world##
 这里我们还需要有一个helloworld.html,Javascript是专为网页交互而设计的脚本语言,所以我们一点点来开始这部分的旅途,先写一个符合标准的helloworld.html
 
-	<!DOCTYPE html>
-	<html>
-		<head></head>
-		<body></body>
-	</html>
-	
+``` html
+<!DOCTYPE html>
+<html>
+	<head></head>
+	<body></body>
+</html>
+```
+
 然后开始融入我们的javascript,向HTML中插入Javascript的方法,就需要用到html中的\<script>标签,我们先用页面嵌入的方法来写helloworld。
 
-	<!DOCTYPE html>
-	<html>
-		<head>
-			<script>
-				document.write('hello,world');
-			</script>
-		</head>
-		<body></body>
-	</html>
+``` html
+<!DOCTYPE html>
+<html>
+	<head>
+		<script>
+			document.write('hello,world');
+		</script>
+	</head>
+	<body></body>
+</html>
+```
 
 按照标准的写法,我们还需要声明这个脚本的类型
 
-	<!DOCTYPE html>
-	<html>
-		<head>
-			<script type="text/javascript">
-				document.write('hello,world');
-			</script>
-		</head>
-		<body></body>
-	</html>
-	
+``` html
+<!DOCTYPE html>
+<html>
+	<head>
+		<script type="text/javascript">
+			document.write('hello,world');
+		</script>
+	</head>
+	<body></body>
+</html>
+```
+
 没有显示hello,world?试试下面的代码
 
-	<!DOCTYPE html>
-	<html>
-		<head>
-			<script type="text/javascript">
-				document.write('hello,world');
-			</script>
-		</head>
-		<body>
-			<noscript>
-				disable Javascript
-			</noscript>
-		</body>
-	</html>
-	
+``` html
+<!DOCTYPE html>
+<html>
+	<head>
+		<script type="text/javascript">
+			document.write('hello,world');
+		</script>
+	</head>
+	<body>
+		<noscript>
+			disable Javascript
+		</noscript>
+	</body>
+</html>
+```
+
 ##更js一点###
 我们需要让我们的代码看上去更像是js,同时是以js结尾。C语言的源码但是以C结尾的,所以我们要让我们的代码看上去更正式一点。于是我们需要在helloworld.html的同文件夹下创建一个app.js,里面写着
 
-<pre><code class="javascript">document.write('hello,world');
-</code></pre>
+``` javascript
+document.write('hello,world');
+```
 
 同时我们的helloworld.html还需要告诉我们的浏览器js代码在哪里
 
-	<!DOCTYPE html>
-	<html>
-		<head>
-			<script type="text/javascript" src="app.js"></script>
-		</head>
-		<body>
-			<noscript>
-				disable Javascript
-			</noscript>
-		</body>
-	</html>
+``` html
+<!DOCTYPE html>
+<html>
+	<head>
+		<script type="text/javascript" src="app.js"></script>
+	</head>
+	<body>
+		<noscript>
+			disable Javascript
+		</noscript>
+	</body>
+</html>
+```
 	
 ###从数学出发###
 让我们回到第一章讲述的小明的问题,<strong>从实际问题下手编程,更容易学会编程</strong>。小学时代的数学题最喜欢这样子了——某商店里的糖一个5块钱,小明买了3个糖,小明一共花了多少钱的问题。在编程方面,也许我们还算是小学生。最直接的方法就是直接计算3x5=?
 
-<pre><code class="javascript">document.write(3*5);
-</code></pre>
+``` javascript
+document.write(3*5);
+```
 
 document.write实际也我们可以理解为输出,也就是往页面里写入3*5的结果,在有双引号的情况下会输出字符串。我们便会在浏览器上看到15,这便是一个好的开始,也是一个不好的开始。
 
 ##设计和编程###
 对于我们的实际问题如果总是止于所要的结果,很多年之后,我们成为了code monkey。对这个问题进行一次设计,所谓的设计有些时候会把简单的问题复杂化,有些时候会使以后的扩展更加简单。这一天因为这家商店的糖价格太高了,于是店长将价格降为了4块钱。
 
-<pre><code class="javascript">
+``` javascript
 document.write(3*4);
-</code></pre>
+```
 
 于是我们又得到了我们的结果,但是下次我们看到这些代码的时候没有分清楚哪个是糖的数量,哪个是价格,于是我们重新设计了程序
 
-<pre><code class="javascript">
+``` javascript
 tang=4;
 num=3;
 document.write(tang*num);
-</code></pre>
+```
 
 这才能叫得上是程序设计,或许你注意到了";"这个符号的存在,我想说的是这是另外一个标准,我们不得不去遵守,也不得不去fuck。
 
@@ -102,20 +114,23 @@ document.write(tang*num);
     sin 30=0.5
     
 而我们的函数也是类似于此,换句话说,因为很多搞计算机的先驱都学好了数学,都把数学世界的规律带到了计算机世界,所以我们的函数也是类似于此,让我们做一个简单的开始。
-<pre><code class="javascript">
+
+``` javascript
 function hello(){
 	return document.write("hello,world");
 }
 hello();
-</code></pre>
+```
+
 当我第一次看到函数的时候,有些小激动终于出现了。我们写了一个叫hello的函数,它返回了往页面中写入hello,world的方法,然后我们调用了hello这个函数,于是页面上有了hello,world。
 
-<pre><code class="javascript">
+``` javascript
 function sin(degree){
 	return document.write(Math.sin(degree));
 }
 sin(30);
-</code></pre>
+```
+
 在这里degree称之为变量,也就是可以改变的量。
 于是输出了-0.9880316240928602,而不是0.5,因为这里用的是弧度制,而不是角度制。
 
@@ -123,35 +138,37 @@ sin(30);
     
 的输出结果有点类似于sin 30。写括号的目的在于,括号是为了方便解析,这个在不同的语言中可能是不一样的,比如在ruby中我们可以直接用类似于数学中的表达:
 
-<pre><code class="ruby">
+``` ruby
 2.0.0-p353 :004 > Math.sin 30
 => -0.9880316240928618
 2.0.0-p353 :005 >
-</code></pre>
+```
 
 我们可以在函数中传入多个变量,于是我们再回到小明的问题,就会这样去写代码。
 
-<pre><code class="javascript">
+``` javascript
 function calc(tang,num){
 	result=tang*num;
 	document.write(result);
 }
 calc(3,4);
-</code></pre>
+```
 
 但是从某种程度上来说,我们的calc做了计算的事又做了输出的事,总的来说设计上有些不好。
 
 ###重新设计###
 我们将输出的工作移到函数的外面,
-<pre><code class="javascript">
+
+``` javascript
 function calc(tang,num){
 	return tang*num;
 }
 document.write(calc(3,4));
-</code></pre>
+```
 
 接着我们用一种更有意思的方法来写这个问题的解决方案
-<pre><code class="javascript">
+
+``` javascript
 function calc(tang,num){
 	return tang*num;
 }
@@ -159,7 +176,8 @@ function printResult(tang,num){
 	document.write(calc(tang,num));
 }
 printResult(3, 4)
-</code></pre>
+```
+
 看上去更专业了一点点,如果我们只需要计算的时候我们只需要调用calc,如果我们需要输出的时候我们就调用printResult的方法。
 
 ###object和函数###
@@ -178,37 +196,43 @@ typeof document会返回document的数据类型,就会发现输出的结果是
 
 创建一个object,然后观察这便是我们接下来要做的 
 
-	store={};
-	store.tang=4;
-	store.num=3;
-	document.write(store.tang*store.num);
-	
+``` javascript
+store={};
+store.tang=4;
+store.num=3;
+document.write(store.tang*store.num);
+```
+
 我们就有了和document.write一样的用法,这也是对象的美妙之处,只是这里的对象只是包含着基本值,因为
   
     typeof story.tang="number"
     
 一个包含对象的对象应该是这样子的。
 
-	store={};
-	store.tang=4;
-	store.num=3;
-	document.writeln(store.tang*store.num);
+``` javascript
+store={};
+store.tang=4;
+store.num=3;
+document.writeln(store.tang*store.num);
 
-	var wall=new Object();
-	wall.store=store;
-	document.write(typeof wall.store);
+var wall=new Object();
+wall.store=store;
+document.write(typeof wall.store);
+```
 	
 而我们用到的document.write和上面用到的document.writeln都是属于这个无序属性集合中的函数。
 
 下面代码说的就是这个无序属性集中中的函数。
 
-	var IO=new Object();
-	function print(result){
-		document.write(result);
-	};
-	IO.print=print;
-	IO.print("a obejct with function");
-	IO.print(typeof IO.print);
+``` javascript
+var IO=new Object();
+function print(result){
+	document.write(result);
+};
+IO.print=print;
+IO.print("a obejct with function");
+IO.print(typeof IO.print);
+```
 
 我们定义了一个叫IO的对象,声明对象可以用
 
@@ -222,13 +246,15 @@ typeof document会返回document的数据类型,就会发现输出的结果是
 
 复杂一点的对象应该是下面这样的一种情况。
 
-	var Person={name:"phodal",weight:50,height:166};
-	function dream(){
-		future;
-	};
-	Person.future=dream;
-	document.write(typeof Person);
-	document.write(Person.future);
+``` javascript
+var Person={name:"phodal",weight:50,height:166};
+function dream(){
+	future;
+};
+Person.future=dream;
+document.write(typeof Person);
+document.write(Person.future);
+```
 
 而这些会在我们未来的实际编编程中用得更多。
 
@@ -236,25 +262,29 @@ typeof document会返回document的数据类型,就会发现输出的结果是
 
 开始之前先我们简化上面的代码,
 
-	Person.future=function dream(){
-		future;
-	}
+``` javascript
+Person.future=function dream(){
+	future;
+}
+```
 
 看上去比上面的简单多了,不过我们还可以简化为下面的代码。。。
 
-	var Person=function(){
-		this.name="phodal";
-		this.weight=50;
-		this.height=166;
-		this.future=function dream(){
-			return "future";
-		};
+``` javascript
+var Person=function(){
+	this.name="phodal";
+	this.weight=50;
+	this.height=166;
+	this.future=function dream(){
+		return "future";
 	};
-	var person=new Person();
-	document.write(person.name+"<br>");
-	document.write(typeof person+"<br>");
-	document.write(typeof person.future+"<br>");
-	document.write(person.future()+"<br>");
+};
+var person=new Person();
+document.write(person.name+"<br>");
+document.write(typeof person+"<br>");
+document.write(typeof person.future+"<br>");
+document.write(person.future()+"<br>");
+```
 
 只是在这个时候Person是一个函数,但是我们声明的person却变成了一个对象<strong>一个Javascript函数也是一个对象,并且,所有的对象从技术上讲也只不过是函数。</strong>这里的+"<br>"是HTML中的元素,称之为DOM,在这里起的是换行的作用,我们会在稍后介绍它,这里我们先关心下this。this关键字表示函数的所有者或作用域,也就是这里的Person。
 
@@ -264,20 +294,22 @@ typeof document会返回document的数据类型,就会发现输出的结果是
     
 一样,不具有灵活性,因此在我们完成功能之后,我们需要对其进行优化,这就是程序设计的真谛——解决完实际问题后,我们需要开始真正的设计,而不是解决问题时的编程。
 
-	var Person=function(name,weight,height){
-		this.name=name;
-		this.weight=weight;
-		this.height=height;	
-		this.future=function(){
-			return "future";
-		};
+``` javascript
+var Person=function(name,weight,height){
+	this.name=name;
+	this.weight=weight;
+	this.height=height;	
+	this.future=function(){
+		return "future";
 	};
-	var phodal=new Person("phodal",50,166);
-	document.write(phodal.name+"<br>");
-	document.write(phodal.weight+"<br>");
-	document.write(phodal.height+"<br>");
-	document.write(phodal.future()+"<br>");
-	
+};
+var phodal=new Person("phodal",50,166);
+document.write(phodal.name+"<br>");
+document.write(phodal.weight+"<br>");
+document.write(phodal.height+"<br>");
+document.write(phodal.future()+"<br>");
+```
+
 于是,产生了这样一个可重用的Javascript对象,this关键字确立了属性的所有者。
 
 ##其他
@@ -286,24 +318,24 @@ Javascript还有一个很强大的特性,也就是原型继承,不过这里
 
 所谓的继承,
 
-	var Chinese=function(){
-		this.country="China";
-	}
+``` javascript
+var Chinese=function(){
+	this.country="China";
+}
 
-	var Person=function(name,weight,height){
-		this.name=name;
-		this.weight=weight;
-		this.height=height;	
-		this.futrue=function(){
-			return "future";
-		}
+var Person=function(name,weight,height){
+	this.name=name;
+	this.weight=weight;
+	this.height=height;	
+	this.futrue=function(){
+		return "future";
 	}
-	Chinese.prototype=new Person();
-
+}
+Chinese.prototype=new Person();
 
-	var phodal=new Chinese("phodal",50,166);
-	document.write(phodal.country);
-	
+var phodal=new Chinese("phodal",50,166);
+document.write(phodal.country);
+```	
 	
 完整的Javascript应该由下列三个部分组成:
 
@@ -315,18 +347,20 @@ Javascript还有一个很强大的特性,也就是原型继承,不过这里
 
 一个简单的DOM示例,
 
-	<!DOCTYPE html>
-	<html>
-	<head>
-	</head>
-	<body>
-		<noscript>
-			disable Javascript
-		</noscript>
-		<p id="para" style="color:red">Red</p>
-	</body>
-		<script type="text/javascript" src="app.js"></script>
-	</html>
+``` html
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+	<noscript>
+		disable Javascript
+	</noscript>
+	<p id="para" style="color:red">Red</p>
+</body>
+	<script type="text/javascript" src="app.js"></script>
+</html>
+```
 	
 我们需要修改一下helloworld.html添加	
 

文件差异内容过多而无法显示
+ 0 - 0
css/vendor.css


+ 313 - 337
index.html

@@ -50,6 +50,7 @@ code > span.er { color: #ff0000; font-weight: bold; }
 <li><a href="#介绍"><span class="toc-section-number">0.4</span> 介绍</a><ul>
 <li><a href="#为什么没有c"><span class="toc-section-number">0.4.1</span> 为什么没有C ?</a></li>
 <li><a href="#为什么不是java"><span class="toc-section-number">0.4.2</span> 为什么不是JAVA ?</a></li>
+<li><a href="#为什么没有android"><span class="toc-section-number">0.4.3</span> 为什么没有Android ?</a></li>
 </ul></li>
 <li><a href="#如何阅读"><span class="toc-section-number">0.5</span> 如何阅读</a></li>
 <li><a href="#无处不在的html"><span class="toc-section-number">1</span> 无处不在的HTML</a><ul>
@@ -237,6 +238,8 @@ code > span.er { color: #ff0000; font-weight: bold; }
 <li>JAVA学的人很多,然而不适合我们将主要精力集中于构建与学习,因为无关的代码太多了。</li>
 <li>当时以及现在,我还是不喜欢JAVA(ps:更喜欢脚本语言,可以在更少的时候做更多的事)。</li>
 </ul>
+<h3 id="为什么没有android"><span class="header-section-number">0.4.3</span> 为什么没有Android ?</h3>
+<p>在IOT的repo中: <a href="https://github.com/gmszone/iot">https://github.com/gmszone/iot</a> 是有Android的示例,然而这些理论不适合在这里讨论。</p>
 <h2 id="如何阅读"><span class="header-section-number">0.5</span> 如何阅读</h2>
 <p>这是一个简单的建议,仅针对于在选择阅读没有经验的读者。</p>
 <table>
@@ -277,20 +280,18 @@ code > span.er { color: #ff0000; font-weight: bold; }
 <li><p>然后双击打开这个文件。 正常情况下应该是刚好用你的默认浏览器打开。只要是一个现代的浏览器的话,应该可以看到上面显示的是“Hello,world”。</p></li>
 </ol>
 <p>这才是最短的hello,world程序,其次呢?ruby中的会是这样子的</p>
-<pre><code class="bash">2.0.0-p353 :001 > p "hello,world"
-"hello,world"
- => "hello,world"
-2.0.0-p353 :002 >
-</code></pre>
-
+<pre class="sourceCode bash"><code class="sourceCode bash"><span class="kw">2.0.0-p353</span> :001 <span class="kw">&gt;</span> p <span class="st">&quot;hello,world&quot;</span>
+<span class="st">&quot;hello,world&quot;</span>
+    =<span class="kw">&gt;</span> <span class="st">&quot;hello,world&quot;</span>
+<span class="kw">2.0.0-p353</span> :002 <span class="kw">&gt;</span></code></pre>
 <p>等等,如果你了解过html的话,会觉得这一点都不符合语法规则,但是他工作了,没有什么比安装完Nginx后看到It works!更让人激动了。</p>
 <p>遗憾的是,它可能无法在所有的浏览器上工作,所以我们需要去调试其中的bug。</p>
 <h3 id="调试helloworld"><span class="header-section-number">1.1.1</span> 调试hello,world</h3>
 <p>我们会发现我们的代码在浏览器中变成了下面的代码,如果你和我一样用的是chrome,那么你可以右键浏览器中的空白区域,点击审查元素,就会看到下面的代码。</p>
-<pre><code>&lt;html&gt;
-    &lt;head&gt;&lt;/head&gt;
-    &lt;body&gt;hello,world&lt;/body&gt;
-&lt;/html&gt;</code></pre>
+<pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;html&gt;</span>
+    <span class="kw">&lt;head&gt;&lt;/head&gt;</span>
+    <span class="kw">&lt;body&gt;</span>hello,world<span class="kw">&lt;/body&gt;</span>
+<span class="kw">&lt;/html&gt;</span></code></pre>
 <p>这个才是真正能在大部分浏览器上工作的代码,所以复制它到编辑器里吧。</p>
 <h3 id="说说helloworld"><span class="header-section-number">1.1.2</span> 说说hello,world</h3>
 我很不喜欢其中的&lt;*&gt;<!--*-->超文本标记语言
@@ -321,12 +322,13 @@ code > span.er { color: #ff0000; font-weight: bold; }
 <p>于是我们看到的结果便是</p>
 <pre><code>&lt;语言&gt; &lt;头&gt; &lt;身体&gt;你好,世界</code></pre>
 <p>被chrome浏览器解析成什么样了?</p>
-<pre><code>&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;语言&gt;
-        &lt;头&gt;&lt;!--头--&gt;
-        &lt;身体&gt;你好,世界&lt;!--身体--&gt;
-    &lt;!--语言--&gt;
-&lt;/body&gt;&lt;/html&gt;      </code></pre>
-<p>以&lt;!–开头,–&gt;结尾的是注释,写给人看的代码,不是给机器看的,所以机器不会去理解这些代码。</p>
+<pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;</span><span class="er">&lt;</span>语言&gt;
+        <span class="er">&lt;</span>头&gt;<span class="co">&lt;!--头--&gt;</span>
+        <span class="er">&lt;</span>身体&gt;你好,世界<span class="co">&lt;!--身体--&gt;</span>
+    <span class="co">&lt;!--语言--&gt;</span>
+<span class="kw">&lt;/body&gt;&lt;/html&gt;</span>      </code></pre>
+<p>以 <!--开头,--></p>
+<p>结尾的是注释,写给人看的代码,不是给机器看的,所以机器不会去理解这些代码。</p>
 <p>但是当我们把代码改成</p>
 <pre><code>&lt;whatwewanttosay&gt;你好世界&lt;/whatwewanttosay&gt;</code></pre>
 <p>浏览器上面显示的内容就变成了</p>
@@ -352,21 +354,21 @@ code > span.er { color: #ff0000; font-weight: bold; }
     &lt;body&gt;hello,world&lt;/body&gt;
 &lt;/html&gt;</code></pre>
 <p>我们便可以在浏览器的最上方看到“标题”二字,真实世界的淘宝网也包含了上面的东西,只是还包括了更多的东西,所以你也可以看懂那些我们可以看到的淘宝的标题。</p>
-<pre><code>&lt;html&gt;
-&lt;head&gt;
-    &lt;title&gt;标题&lt;/title&gt;
-&lt;/head&gt;
-&lt;body&gt;
+<pre class="sourceCode html"><code class="sourceCode html"><span class="kw">&lt;html&gt;</span>
+<span class="kw">&lt;head&gt;</span>
+    <span class="kw">&lt;title&gt;</span>标题<span class="kw">&lt;/title&gt;</span>
+<span class="kw">&lt;/head&gt;</span>
+<span class="kw">&lt;body&gt;</span>
 hello,world
-&lt;h1&gt;大标题&lt;/h1&gt;
-&lt;h2&gt;次标题&lt;/h2&gt;
-&lt;h3&gt;...&lt;/h3&gt;
-&lt;ul&gt;
-    &lt;li&gt;列表1&lt;/li&gt;
-    &lt;li&gt;列表2&lt;/li&gt;
-&lt;/ul&gt;
-&lt;/body&gt;
-&lt;/html&gt;</code></pre>
+<span class="kw">&lt;h1&gt;</span>大标题<span class="kw">&lt;/h1&gt;</span>
+<span class="kw">&lt;h2&gt;</span>次标题<span class="kw">&lt;/h2&gt;</span>
+<span class="kw">&lt;h3&gt;</span>...<span class="kw">&lt;/h3&gt;</span>
+<span class="kw">&lt;ul&gt;</span>
+    <span class="kw">&lt;li&gt;</span>列表1<span class="kw">&lt;/li&gt;</span>
+    <span class="kw">&lt;li&gt;</span>列表2<span class="kw">&lt;/li&gt;</span>
+<span class="kw">&lt;/ul&gt;</span>
+<span class="kw">&lt;/body&gt;</span>
+<span class="kw">&lt;/html&gt;</span></code></pre>
 <p>更多的东西可以在一些书籍上看到,这边所要说的只是一次简单的语言入门,其他的东西都和这些类似。</p>
 <h3 id="美妙之处"><span class="header-section-number">1.2.1</span> 美妙之处</h3>
 <p>我们简单地上手了一门不算是语言的语言,浏览器简化了这其中的大部分过程,虽然没有C和其他语言来得有专业感,但是我们试着去开始写代码了。我们可能在未来的某一篇中可能会看到类似的语言,诸如python,我们所要做的就是</p>
@@ -385,137 +387,112 @@ hello,world
 <p>Javascript现在已经无处不在了,也许你正打开的某个网站他可能是node.js+json+javascript+mustache.js完成的,虽然你还没理解上面那些是什么,也正是因为你不理解才需要去学习更多的东西。但是Javascript已经无处不在了,可能会在你手机上的某个app里,在你浏览的网页里,在你IDE中的某个进程中运行的。</p>
 <h2 id="javascript的helloworld"><span class="header-section-number">2.1</span> Javascript的Hello,world</h2>
 <p>这里我们还需要有一个helloworld.html,Javascript是专为网页交互而设计的脚本语言,所以我们一点点来开始这部分的旅途,先写一个符合标准的helloworld.html</p>
-<pre><code>&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;&lt;/head&gt;
-    &lt;body&gt;&lt;/body&gt;
-&lt;/html&gt;</code></pre>
+<pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html<span class="dt">&gt;</span>
+<span class="kw">&lt;html&gt;</span>
+    <span class="kw">&lt;head&gt;&lt;/head&gt;</span>
+    <span class="kw">&lt;body&gt;&lt;/body&gt;</span>
+<span class="kw">&lt;/html&gt;</span></code></pre>
 <p>然后开始融入我们的javascript,向HTML中插入Javascript的方法,就需要用到html中的&lt;script&gt;标签,我们先用页面嵌入的方法来写helloworld。</p>
-<pre><code>&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;script&gt;
-            document.write(&#39;hello,world&#39;);
-        &lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;&lt;/body&gt;
-&lt;/html&gt;</code></pre>
+<pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html<span class="dt">&gt;</span>
+<span class="kw">&lt;html&gt;</span>
+    <span class="kw">&lt;head&gt;</span>
+        <span class="kw">&lt;script&gt;</span>
+            <span class="ot">document</span>.<span class="fu">write</span>(<span class="st">&#39;hello,world&#39;</span>);
+        &lt;<span class="ot">/script&gt;</span>
+<span class="ot">    &lt;/head</span>&gt;
+    &lt;body&gt;&lt;<span class="ot">/body&gt;</span>
+<span class="ot">&lt;/html</span>&gt;</code></pre>
 <p>按照标准的写法,我们还需要声明这个脚本的类型</p>
-<pre><code>&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;script type=&quot;text/javascript&quot;&gt;
-            document.write(&#39;hello,world&#39;);
-        &lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;&lt;/body&gt;
-&lt;/html&gt;</code></pre>
+<pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html<span class="dt">&gt;</span>
+<span class="kw">&lt;html&gt;</span>
+    <span class="kw">&lt;head&gt;</span>
+        <span class="kw">&lt;script</span><span class="ot"> type=</span><span class="st">&quot;text/javascript&quot;</span><span class="kw">&gt;</span>
+            <span class="ot">document</span>.<span class="fu">write</span>(<span class="st">&#39;hello,world&#39;</span>);
+        &lt;<span class="ot">/script&gt;</span>
+<span class="ot">    &lt;/head</span>&gt;
+    &lt;body&gt;&lt;<span class="ot">/body&gt;</span>
+<span class="ot">&lt;/html</span>&gt;</code></pre>
 <p>没有显示hello,world?试试下面的代码</p>
-<pre><code>&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;script type=&quot;text/javascript&quot;&gt;
-            document.write(&#39;hello,world&#39;);
-        &lt;/script&gt;
-    &lt;/head&gt;
+<pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html<span class="dt">&gt;</span>
+<span class="kw">&lt;html&gt;</span>
+    <span class="kw">&lt;head&gt;</span>
+        <span class="kw">&lt;script</span><span class="ot"> type=</span><span class="st">&quot;text/javascript&quot;</span><span class="kw">&gt;</span>
+            <span class="ot">document</span>.<span class="fu">write</span>(<span class="st">&#39;hello,world&#39;</span>);
+        &lt;<span class="ot">/script&gt;</span>
+<span class="ot">    &lt;/head</span>&gt;
     &lt;body&gt;
         &lt;noscript&gt;
             disable Javascript
-        &lt;/noscript&gt;
-    &lt;/body&gt;
-&lt;/html&gt;</code></pre>
+        &lt;<span class="ot">/noscript&gt;</span>
+<span class="ot">    &lt;/body</span>&gt;
+&lt;<span class="ot">/html&gt;</span></code></pre>
 <h2 id="更js一点"><span class="header-section-number">2.2</span> 更js一点</h2>
 <p>我们需要让我们的代码看上去更像是js,同时是以js结尾。C语言的源码但是以C结尾的,所以我们要让我们的代码看上去更正式一点。于是我们需要在helloworld.html的同文件夹下创建一个app.js,里面写着</p>
-<pre><code class="javascript">document.write('hello,world');
-</code></pre>
-
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">document</span>.<span class="fu">write</span>(<span class="st">&#39;hello,world&#39;</span>);</code></pre>
 <p>同时我们的helloworld.html还需要告诉我们的浏览器js代码在哪里</p>
-<pre><code>&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-    &lt;head&gt;
-        &lt;script type=&quot;text/javascript&quot; src=&quot;app.js&quot;&gt;&lt;/script&gt;
-    &lt;/head&gt;
-    &lt;body&gt;
-        &lt;noscript&gt;
+<pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html<span class="dt">&gt;</span>
+<span class="kw">&lt;html&gt;</span>
+    <span class="kw">&lt;head&gt;</span>
+        <span class="kw">&lt;script</span><span class="ot"> type=</span><span class="st">&quot;text/javascript&quot;</span><span class="ot"> src=</span><span class="st">&quot;app.js&quot;</span><span class="kw">&gt;&lt;/script&gt;</span>
+    <span class="kw">&lt;/head&gt;</span>
+    <span class="kw">&lt;body&gt;</span>
+        <span class="kw">&lt;noscript&gt;</span>
             disable Javascript
-        &lt;/noscript&gt;
-    &lt;/body&gt;
-&lt;/html&gt;</code></pre>
+        <span class="kw">&lt;/noscript&gt;</span>
+    <span class="kw">&lt;/body&gt;</span>
+<span class="kw">&lt;/html&gt;</span></code></pre>
 <h3 id="从数学出发"><span class="header-section-number">2.2.1</span> 从数学出发</h3>
 <p>让我们回到第一章讲述的小明的问题,<strong>从实际问题下手编程,更容易学会编程</strong>。小学时代的数学题最喜欢这样子了——某商店里的糖一个5块钱,小明买了3个糖,小明一共花了多少钱的问题。在编程方面,也许我们还算是小学生。最直接的方法就是直接计算3x5=?</p>
-<pre><code class="javascript">document.write(3*5);
-</code></pre>
-
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">document</span>.<span class="fu">write</span>(<span class="dv">3</span>*<span class="dv">5</span>);</code></pre>
 <p>document.write实际也我们可以理解为输出,也就是往页面里写入3*5的结果,在有双引号的情况下会输出字符串。我们便会在浏览器上看到15,这便是一个好的开始,也是一个不好的开始。</p>
 <h2 id="设计和编程"><span class="header-section-number">2.3</span> 设计和编程</h2>
 <p>对于我们的实际问题如果总是止于所要的结果,很多年之后,我们成为了code monkey。对这个问题进行一次设计,所谓的设计有些时候会把简单的问题复杂化,有些时候会使以后的扩展更加简单。这一天因为这家商店的糖价格太高了,于是店长将价格降为了4块钱。</p>
-<pre><code class="javascript">
-document.write(3*4);
-</code></pre>
-
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">document</span>.<span class="fu">write</span>(<span class="dv">3</span>*<span class="dv">4</span>);</code></pre>
 <p>于是我们又得到了我们的结果,但是下次我们看到这些代码的时候没有分清楚哪个是糖的数量,哪个是价格,于是我们重新设计了程序</p>
-<pre><code class="javascript">
-tang=4;
-num=3;
-document.write(tang*num);
-</code></pre>
-
+<pre class="sourceCode javascript"><code class="sourceCode javascript">tang=<span class="dv">4</span>;
+num=<span class="dv">3</span>;
+<span class="ot">document</span>.<span class="fu">write</span>(tang*num);</code></pre>
 <p>这才能叫得上是程序设计,或许你注意到了“;”这个符号的存在,我想说的是这是另外一个标准,我们不得不去遵守,也不得不去fuck。</p>
 <h3 id="函数"><span class="header-section-number">2.3.1</span> 函数</h3>
 <p>记得刚开始学三角函数的时候,我们会写</p>
 <pre><code>sin 30=0.5</code></pre>
-而我们的函数也是类似于此,换句话说,因为很多搞计算机的先驱都学好了数学,都把数学世界的规律带到了计算机世界,所以我们的函数也是类似于此,让我们做一个简单的开始。
-<pre><code class="javascript">
-function hello(){
-    return document.write("hello,world");
+<p>而我们的函数也是类似于此,换句话说,因为很多搞计算机的先驱都学好了数学,都把数学世界的规律带到了计算机世界,所以我们的函数也是类似于此,让我们做一个简单的开始。</p>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">hello</span>(){
+    <span class="kw">return</span> <span class="ot">document</span>.<span class="fu">write</span>(<span class="st">&quot;hello,world&quot;</span>);
 }
-hello();
-</code></pre>
+<span class="fu">hello</span>();</code></pre>
 <p>当我第一次看到函数的时候,有些小激动终于出现了。我们写了一个叫hello的函数,它返回了往页面中写入hello,world的方法,然后我们调用了hello这个函数,于是页面上有了hello,world。</p>
-<pre><code class="javascript">
-function sin(degree){
-    return document.write(Math.sin(degree));
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">sin</span>(degree){
+    <span class="kw">return</span> <span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">Math</span>.<span class="fu">sin</span>(degree));
 }
-sin(30);
-</code></pre>
+<span class="fu">sin</span>(<span class="dv">30</span>);</code></pre>
 <p>在这里degree称之为变量,也就是可以改变的量。 于是输出了-0.9880316240928602,而不是0.5,因为这里用的是弧度制,而不是角度制。</p>
 <pre><code>sin(30)</code></pre>
 <p>的输出结果有点类似于sin 30。写括号的目的在于,括号是为了方便解析,这个在不同的语言中可能是不一样的,比如在ruby中我们可以直接用类似于数学中的表达:</p>
-<pre><code class="ruby">
-2.0.0-p353 :004 > Math.sin 30
-=> -0.9880316240928618
-2.0.0-p353 :005 >
-</code></pre>
-
+<pre class="sourceCode ruby"><code class="sourceCode ruby"><span class="fl">2.0</span>.<span class="dv">0</span>-p353 :<span class="dv">004</span> &gt; <span class="dt">Math</span>.sin <span class="dv">30</span>
+=&gt; -<span class="fl">0.9880316240928618</span>
+<span class="fl">2.0</span>.<span class="dv">0</span>-p353 :<span class="dv">005</span> &gt;</code></pre>
 <p>我们可以在函数中传入多个变量,于是我们再回到小明的问题,就会这样去写代码。</p>
-<pre><code class="javascript">
-function calc(tang,num){
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">calc</span>(tang,num){
     result=tang*num;
-    document.write(result);
+    <span class="ot">document</span>.<span class="fu">write</span>(result);
 }
-calc(3,4);
-</code></pre>
-
+<span class="fu">calc</span>(<span class="dv">3</span>,<span class="dv">4</span>);</code></pre>
 <p>但是从某种程度上来说,我们的calc做了计算的事又做了输出的事,总的来说设计上有些不好。</p>
 <h3 id="重新设计"><span class="header-section-number">2.3.2</span> 重新设计</h3>
-我们将输出的工作移到函数的外面,
-<pre><code class="javascript">
-function calc(tang,num){
-    return tang*num;
+<p>我们将输出的工作移到函数的外面,</p>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">calc</span>(tang,num){
+    <span class="kw">return</span> tang*num;
 }
-document.write(calc(3,4));
-</code></pre>
-
-接着我们用一种更有意思的方法来写这个问题的解决方案
-<pre><code class="javascript">
-function calc(tang,num){
-    return tang*num;
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="fu">calc</span>(<span class="dv">3</span>,<span class="dv">4</span>));</code></pre>
+<p>接着我们用一种更有意思的方法来写这个问题的解决方案</p>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">calc</span>(tang,num){
+    <span class="kw">return</span> tang*num;
 }
-function printResult(tang,num){
-    document.write(calc(tang,num));
+<span class="kw">function</span> <span class="fu">printResult</span>(tang,num){
+    <span class="ot">document</span>.<span class="fu">write</span>(<span class="fu">calc</span>(tang,num));
 }
-printResult(3, 4)
-</code></pre>
+<span class="fu">printResult</span>(<span class="dv">3</span>, <span class="dv">4</span>)</code></pre>
 <p>看上去更专业了一点点,如果我们只需要计算的时候我们只需要调用calc,如果我们需要输出的时候我们就调用printResult的方法。</p>
 <h3 id="object和函数"><span class="header-section-number">2.3.3</span> object和函数</h3>
 <p>我们还没有说清楚之前我们遇到过的document.write以及Math.sin的语法看上去很奇怪,所以让我们看看他们到底是什么,修改app.js为以及内容</p>
@@ -529,101 +506,100 @@ document.write(typeof Math);</code></pre>
 </blockquote>
 
 <p>创建一个object,然后观察这便是我们接下来要做的</p>
-<pre><code>store={};
-store.tang=4;
-store.num=3;
-document.write(store.tang*store.num);</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript">store={};
+<span class="ot">store</span>.<span class="fu">tang</span>=<span class="dv">4</span>;
+<span class="ot">store</span>.<span class="fu">num</span>=<span class="dv">3</span>;
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">store</span>.<span class="fu">tang</span>*<span class="ot">store</span>.<span class="fu">num</span>);</code></pre>
 <p>我们就有了和document.write一样的用法,这也是对象的美妙之处,只是这里的对象只是包含着基本值,因为</p>
 <pre><code>typeof story.tang=&quot;number&quot;</code></pre>
 <p>一个包含对象的对象应该是这样子的。</p>
-<pre><code>store={};
-store.tang=4;
-store.num=3;
-document.writeln(store.tang*store.num);
+<pre class="sourceCode javascript"><code class="sourceCode javascript">store={};
+<span class="ot">store</span>.<span class="fu">tang</span>=<span class="dv">4</span>;
+<span class="ot">store</span>.<span class="fu">num</span>=<span class="dv">3</span>;
+<span class="ot">document</span>.<span class="fu">writeln</span>(<span class="ot">store</span>.<span class="fu">tang</span>*<span class="ot">store</span>.<span class="fu">num</span>);
 
-var wall=new Object();
-wall.store=store;
-document.write(typeof wall.store);</code></pre>
+<span class="kw">var</span> wall=<span class="kw">new</span> <span class="fu">Object</span>();
+<span class="ot">wall</span>.<span class="fu">store</span>=store;
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="kw">typeof</span> <span class="ot">wall</span>.<span class="fu">store</span>);</code></pre>
 <p>而我们用到的document.write和上面用到的document.writeln都是属于这个无序属性集合中的函数。</p>
 <p>下面代码说的就是这个无序属性集中中的函数。</p>
-<pre><code>var IO=new Object();
-function print(result){
-    document.write(result);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> IO=<span class="kw">new</span> <span class="fu">Object</span>();
+<span class="kw">function</span> <span class="fu">print</span>(result){
+    <span class="ot">document</span>.<span class="fu">write</span>(result);
 };
-IO.print=print;
-IO.print(&quot;a obejct with function&quot;);
-IO.print(typeof IO.print);</code></pre>
+<span class="ot">IO</span>.<span class="fu">print</span>=print;
+<span class="ot">IO</span>.<span class="fu">print</span>(<span class="st">&quot;a obejct with function&quot;</span>);
+<span class="ot">IO</span>.<span class="fu">print</span>(<span class="kw">typeof</span> <span class="ot">IO</span>.<span class="fu">print</span>);</code></pre>
 <p>我们定义了一个叫IO的对象,声明对象可以用</p>
 <pre><code>var store={};</code></pre>
 <p>又或者是</p>
 <pre><code>var store=new Object{};</code></pre>
 <p>两者是等价的,但是用后者的可读性会更好一点,我们定义了一个叫print的函数,他的作用也就是document.write,IO中的print函数是等价于print()函数,这也就是对象和函数之间的一些区别,对象可以包含函数,对象是无序属性的集合,其属性可以包含基本值、对象或者函数。</p>
 <p>复杂一点的对象应该是下面这样的一种情况。</p>
-<pre><code>var Person={name:&quot;phodal&quot;,weight:50,height:166};
-function dream(){
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> Person={<span class="dt">name</span>:<span class="st">&quot;phodal&quot;</span>,<span class="dt">weight</span>:<span class="dv">50</span>,<span class="dt">height</span>:<span class="dv">166</span>};
+<span class="kw">function</span> <span class="fu">dream</span>(){
     future;
 };
-Person.future=dream;
-document.write(typeof Person);
-document.write(Person.future);</code></pre>
+<span class="ot">Person</span>.<span class="fu">future</span>=dream;
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="kw">typeof</span> Person);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">Person</span>.<span class="fu">future</span>);</code></pre>
 <p>而这些会在我们未来的实际编编程中用得更多。</p>
 <h3 id="面向对象"><span class="header-section-number">2.3.4</span> 面向对象</h3>
 <p>开始之前先我们简化上面的代码,</p>
-<pre><code>Person.future=function dream(){
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">Person</span>.<span class="fu">future</span>=<span class="kw">function</span> <span class="fu">dream</span>(){
     future;
 }</code></pre>
 <p>看上去比上面的简单多了,不过我们还可以简化为下面的代码。。。</p>
-<pre><code>var Person=function(){
-    this.name=&quot;phodal&quot;;
-    this.weight=50;
-    this.height=166;
-    this.future=function dream(){
-        return &quot;future&quot;;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> Person=<span class="kw">function</span>(){
+    <span class="kw">this</span>.<span class="fu">name</span>=<span class="st">&quot;phodal&quot;</span>;
+    <span class="kw">this</span>.<span class="fu">weight</span>=<span class="dv">50</span>;
+    <span class="kw">this</span>.<span class="fu">height</span>=<span class="dv">166</span>;
+    <span class="kw">this</span>.<span class="fu">future</span>=<span class="kw">function</span> <span class="fu">dream</span>(){
+        <span class="kw">return</span> <span class="st">&quot;future&quot;</span>;
     };
 };
-var person=new Person();
-document.write(person.name+&quot;&lt;br&gt;&quot;);
-document.write(typeof person+&quot;&lt;br&gt;&quot;);
-document.write(typeof person.future+&quot;&lt;br&gt;&quot;);
-document.write(person.future()+&quot;&lt;br&gt;&quot;);</code></pre>
+<span class="kw">var</span> person=<span class="kw">new</span> <span class="fu">Person</span>();
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">person</span>.<span class="fu">name</span>+<span class="st">&quot;&lt;br&gt;&quot;</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="kw">typeof</span> person+<span class="st">&quot;&lt;br&gt;&quot;</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="kw">typeof</span> <span class="ot">person</span>.<span class="fu">future</span>+<span class="st">&quot;&lt;br&gt;&quot;</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">person</span>.<span class="fu">future</span>()+<span class="st">&quot;&lt;br&gt;&quot;</span>);</code></pre>
 <p>只是在这个时候Person是一个函数,但是我们声明的person却变成了一个对象<strong>一个Javascript函数也是一个对象,并且,所有的对象从技术上讲也只不过是函数。</strong>这里的+“<br>”是HTML中的元素,称之为DOM,在这里起的是换行的作用,我们会在稍后介绍它,这里我们先关心下this。this关键字表示函数的所有者或作用域,也就是这里的Person。</p>
 <p>上面的方法显得有点不可取,换句话说和一开始的</p>
 <pre><code>document.write(3*4);</code></pre>
 <p>一样,不具有灵活性,因此在我们完成功能之后,我们需要对其进行优化,这就是程序设计的真谛——解决完实际问题后,我们需要开始真正的设计,而不是解决问题时的编程。</p>
-<pre><code>var Person=function(name,weight,height){
-    this.name=name;
-    this.weight=weight;
-    this.height=height; 
-    this.future=function(){
-        return &quot;future&quot;;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> Person=<span class="kw">function</span>(name,weight,height){
+    <span class="kw">this</span>.<span class="fu">name</span>=name;
+    <span class="kw">this</span>.<span class="fu">weight</span>=weight;
+    <span class="kw">this</span>.<span class="fu">height</span>=height; 
+    <span class="kw">this</span>.<span class="fu">future</span>=<span class="kw">function</span>(){
+        <span class="kw">return</span> <span class="st">&quot;future&quot;</span>;
     };
 };
-var phodal=new Person(&quot;phodal&quot;,50,166);
-document.write(phodal.name+&quot;&lt;br&gt;&quot;);
-document.write(phodal.weight+&quot;&lt;br&gt;&quot;);
-document.write(phodal.height+&quot;&lt;br&gt;&quot;);
-document.write(phodal.future()+&quot;&lt;br&gt;&quot;);</code></pre>
+<span class="kw">var</span> phodal=<span class="kw">new</span> <span class="fu">Person</span>(<span class="st">&quot;phodal&quot;</span>,<span class="dv">50</span>,<span class="dv">166</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">phodal</span>.<span class="fu">name</span>+<span class="st">&quot;&lt;br&gt;&quot;</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">phodal</span>.<span class="fu">weight</span>+<span class="st">&quot;&lt;br&gt;&quot;</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">phodal</span>.<span class="fu">height</span>+<span class="st">&quot;&lt;br&gt;&quot;</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">phodal</span>.<span class="fu">future</span>()+<span class="st">&quot;&lt;br&gt;&quot;</span>);</code></pre>
 <p>于是,产生了这样一个可重用的Javascript对象,this关键字确立了属性的所有者。</p>
 <h2 id="其他"><span class="header-section-number">2.4</span> 其他</h2>
 <p>Javascript还有一个很强大的特性,也就是原型继承,不过这里我们先不考虑这些部分,用尽量少的代码及关键字来实际我们所要表达的核心功能,这才是这里的核心,其他的东西我们可以从其他书本上学到。</p>
 <p>所谓的继承,</p>
-<pre><code>var Chinese=function(){
-    this.country=&quot;China&quot;;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> Chinese=<span class="kw">function</span>(){
+    <span class="kw">this</span>.<span class="fu">country</span>=<span class="st">&quot;China&quot;</span>;
 }
 
-var Person=function(name,weight,height){
-    this.name=name;
-    this.weight=weight;
-    this.height=height; 
-    this.futrue=function(){
-        return &quot;future&quot;;
+<span class="kw">var</span> Person=<span class="kw">function</span>(name,weight,height){
+    <span class="kw">this</span>.<span class="fu">name</span>=name;
+    <span class="kw">this</span>.<span class="fu">weight</span>=weight;
+    <span class="kw">this</span>.<span class="fu">height</span>=height; 
+    <span class="kw">this</span>.<span class="fu">futrue</span>=<span class="kw">function</span>(){
+        <span class="kw">return</span> <span class="st">&quot;future&quot;</span>;
     }
 }
-Chinese.prototype=new Person();
-
+<span class="ot">Chinese</span>.<span class="fu">prototype</span>=<span class="kw">new</span> <span class="fu">Person</span>();
 
-var phodal=new Chinese(&quot;phodal&quot;,50,166);
-document.write(phodal.country);</code></pre>
+<span class="kw">var</span> phodal=<span class="kw">new</span> <span class="fu">Chinese</span>(<span class="st">&quot;phodal&quot;</span>,<span class="dv">50</span>,<span class="dv">166</span>);
+<span class="ot">document</span>.<span class="fu">write</span>(<span class="ot">phodal</span>.<span class="fu">country</span>);</code></pre>
 <p>完整的Javascript应该由下列三个部分组成:</p>
 <ul>
 <li>核心(ECMAScript)——核心语言功能</li>
@@ -632,18 +608,18 @@ document.write(phodal.country);</code></pre>
 </ul>
 <p>我们在上面讲的都是ECMAScript,也就是语法相关的,但是JS真正强大的,或者说我们最需要的可能就是对DOM的操作,这也就是为什么jQuery等库可以流行的原因之一,而核心语言功能才是真正在哪里都适用的,至于BOM真正用到的机会很少,因为没有好的统一的标准。</p>
 <p>一个简单的DOM示例,</p>
-<pre><code>&lt;!DOCTYPE html&gt;
-&lt;html&gt;
-&lt;head&gt;
-&lt;/head&gt;
-&lt;body&gt;
-    &lt;noscript&gt;
+<pre class="sourceCode html"><code class="sourceCode html"><span class="dt">&lt;!DOCTYPE </span>html<span class="dt">&gt;</span>
+<span class="kw">&lt;html&gt;</span>
+<span class="kw">&lt;head&gt;</span>
+<span class="kw">&lt;/head&gt;</span>
+<span class="kw">&lt;body&gt;</span>
+    <span class="kw">&lt;noscript&gt;</span>
         disable Javascript
-    &lt;/noscript&gt;
-    &lt;p id=&quot;para&quot; style=&quot;color:red&quot;&gt;Red&lt;/p&gt;
-&lt;/body&gt;
-    &lt;script type=&quot;text/javascript&quot; src=&quot;app.js&quot;&gt;&lt;/script&gt;
-&lt;/html&gt;</code></pre>
+    <span class="kw">&lt;/noscript&gt;</span>
+    <span class="kw">&lt;p</span><span class="ot"> id=</span><span class="st">&quot;para&quot;</span><span class="ot"> style=</span><span class="st">&quot;color:red&quot;</span><span class="kw">&gt;</span>Red<span class="kw">&lt;/p&gt;</span>
+<span class="kw">&lt;/body&gt;</span>
+    <span class="kw">&lt;script</span><span class="ot"> type=</span><span class="st">&quot;text/javascript&quot;</span><span class="ot"> src=</span><span class="st">&quot;app.js&quot;</span><span class="kw">&gt;&lt;/script&gt;</span>
+<span class="kw">&lt;/html&gt;</span></code></pre>
 <p>我们需要修改一下helloworld.html添加</p>
 <pre><code>&lt;p id=&quot;para&quot; style=&quot;color:red&quot;&gt;Red&lt;/p&gt;</code></pre>
 <p>同时还需要将script标签移到body下面,如果没有意外的话我们会看到页面上用红色的字体显示Red,修改app.js。</p>
@@ -1227,9 +1203,9 @@ Copyright (C) 2010--2013 Olaf Bergmann &lt;bergmann@tzi.org&gt;</code></pre>
 <p>node-coap is a client and server library for CoAP modelled after the http module.</p>
 </blockquote>
 <p>Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建一个package.json文件,添加这个库</p>
-<pre><code>{
-    &quot;dependencies&quot;:{
-        &quot;coap&quot;: &quot;0.7.2&quot;
+<pre class="sourceCode javascript"><code class="sourceCode javascript">{
+    <span class="st">&quot;dependencies&quot;</span>:{
+        <span class="st">&quot;coap&quot;</span>: <span class="st">&quot;0.7.2&quot;</span>
     }
 }</code></pre>
 <p>接着执行</p>
@@ -1237,28 +1213,28 @@ Copyright (C) 2010--2013 Olaf Bergmann &lt;bergmann@tzi.org&gt;</code></pre>
 <p>就可以安装好这个库</p>
 <h3 id="node-coap示例"><span class="header-section-number">10.3.2</span> Node CoAP示例</h3>
 <p>接着,创建这样一个app.js</p>
-<pre><code>const coap        = require(&#39;coap&#39;)
-    , server  = coap.createServer()
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap        = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
+    , server  = <span class="ot">coap</span>.<span class="fu">createServer</span>()
 
-server.on(&#39;request&#39;, function(req, res) {
-  res.end(&#39;Hello &#39; + req.url.split(&#39;/&#39;)[1] + &#39;\n&#39;)
+<span class="ot">server</span>.<span class="fu">on</span>(<span class="st">&#39;request&#39;</span>, <span class="kw">function</span>(req, res) {
+  <span class="ot">res</span>.<span class="fu">end</span>(<span class="st">&#39;Hello &#39;</span> + <span class="ot">req</span>.<span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">1</span>] + <span class="st">&#39;</span><span class="ch">\n</span><span class="st">&#39;</span>)
 })
 
-server.listen(function() {
-  console.log(&#39;server started&#39;)
+<span class="ot">server</span>.<span class="fu">listen</span>(<span class="kw">function</span>() {
+  <span class="ot">console</span>.<span class="fu">log</span>(<span class="st">&#39;server started&#39;</span>)
 })  </code></pre>
 <p>执行</p>
 <pre><code>node app.js</code></pre>
 <p>便可以在浏览器上访问了,因为现在什么也没有,所以什么也不会返回。</p>
 <p>接着下来再创建一个client端的js,并运行之</p>
-<pre><code>const coap  = require(&#39;coap&#39;) 
-    , req   = coap.request(&#39;coap://localhost/World&#39;)
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap  = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>) 
+    , req   = <span class="ot">coap</span>.<span class="fu">request</span>(<span class="st">&#39;coap://localhost/World&#39;</span>)
 
-req.on(&#39;response&#39;, function(res) {
-  res.pipe(process.stdout)
+<span class="ot">req</span>.<span class="fu">on</span>(<span class="st">&#39;response&#39;</span>, <span class="kw">function</span>(res) {
+  <span class="ot">res</span>.<span class="fu">pipe</span>(<span class="ot">process</span>.<span class="fu">stdout</span>)
 })
 
-req.end()</code></pre>
+<span class="ot">req</span>.<span class="fu">end</span>()</code></pre>
 <p>就可以在console上输出</p>
 <pre><code>Hello World </code></pre>
 <p>也就达到了我们的目的,用CoAP协议创建一个服务,接着我们应该用它创建更多的东西,如产生JSON数据,以及RESTful。和HTTP版的最小物联网系统一样,CoAP版的最小物联网系统也是要返回JSON的。</p>
@@ -1266,46 +1242,46 @@ req.end()</code></pre>
 <h3 id="node-module"><span class="header-section-number">10.4.1</span> Node Module</h3>
 <p>这说里Module的意义是因为我们需要在别的地方引用到db_helper这个库,也就是下一小节要的讲的内容。</p>
 <p>这样我们就可以在server.js类似于这样去引用这个js库。</p>
-<pre><code>var DBHelper = require(&#39;./db_helper.js&#39;);
-DBHelper.initDB();</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> DBHelper = <span class="fu">require</span>(<span class="st">&#39;./db_helper.js&#39;</span>);
+<span class="ot">DBHelper</span>.<span class="fu">initDB</span>();</code></pre>
 <p>而这样调用的前提是我们需要去声明这样的module,为了方便地导出函数功能调用。</p>
-<pre><code>function DBHelper(){
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">DBHelper</span>(){
 }
-DBHelper.initDB = function(){};
-module.exports = DBHelper;</code></pre>
+<span class="ot">DBHelper</span>.<span class="fu">initDB</span> = <span class="kw">function</span>(){};
+<span class="ot">module</span>.<span class="fu">exports</span> = DBHelper;</code></pre>
 <p>虽然这里的功能很简单,简单也能做我们想做的事情。</p>
 <h3 id="node-sqlite3"><span class="header-section-number">10.4.2</span> Node-Sqlite3</h3>
 <p>还是继续用到了SQLite3,只是这里用到的只是基本的查询和创建。</p>
 <h4 id="一个简单的initdb函数"><span class="header-section-number">10.4.2.1</span> 一个简单的initDB函数</h4>
-<pre><code>var db = new sqlite3.Database(config[&quot;db_name&quot;]);
-var create_table = &#39;create table if not exists basic (&#39; + config[&quot;db_table&quot;] + &#39;);&#39;;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> db = <span class="kw">new</span> <span class="ot">sqlite3</span>.<span class="fu">Database</span>(config[<span class="st">&quot;db_name&quot;</span>]);
+<span class="kw">var</span> create_table = <span class="st">&#39;create table if not exists basic (&#39;</span> + config[<span class="st">&quot;db_table&quot;</span>] + <span class="st">&#39;);&#39;</span>;
 
-db.serialize(function() {
-    db.run(create_table);
-    _.each(config[&quot;init_table&quot;], function(insert_data) {
-        db.run(insert_data);
+<span class="ot">db</span>.<span class="fu">serialize</span>(<span class="kw">function</span>() {
+    <span class="ot">db</span>.<span class="fu">run</span>(create_table);
+    <span class="ot">_</span>.<span class="fu">each</span>(config[<span class="st">&quot;init_table&quot;</span>], <span class="kw">function</span>(insert_data) {
+        <span class="ot">db</span>.<span class="fu">run</span>(insert_data);
     });
 });
-db.close();</code></pre>
+<span class="ot">db</span>.<span class="fu">close</span>();</code></pre>
 <p>首先从配置中读取db_name,接着创建table,然后调用underscore的each方法,创建几个数据。配置如下所示</p>
-<pre><code>config = {
-    &quot;db_name&quot;: &quot;iot.db&quot;,
-    &quot;db_table&quot;: &quot;id integer primary key, value text, sensors1 float, sensors2 float&quot;,
-    &quot;init_table&quot;:[
-        &quot;insert or replace into basic (id,value,sensors1,sensors2) VALUES (1, &#39;is id 1&#39;, 19, 20);&quot;,
-        &quot;insert or replace into basic (id,value,sensors1,sensors2) VALUES (2, &#39;is id 2&#39;, 20, 21);&quot;
+<pre class="sourceCode javascript"><code class="sourceCode javascript">config = {
+    <span class="st">&quot;db_name&quot;</span>: <span class="st">&quot;iot.db&quot;</span>,
+    <span class="st">&quot;db_table&quot;</span>: <span class="st">&quot;id integer primary key, value text, sensors1 float, sensors2 float&quot;</span>,
+    <span class="st">&quot;init_table&quot;</span>:[
+        <span class="st">&quot;insert or replace into basic (id,value,sensors1,sensors2) VALUES (1, &#39;is id 1&#39;, 19, 20);&quot;</span>,
+        <span class="st">&quot;insert or replace into basic (id,value,sensors1,sensors2) VALUES (2, &#39;is id 2&#39;, 20, 21);&quot;</span>
     ],
-    &quot;query_table&quot;:&quot;select * from basic;&quot;
+    <span class="st">&quot;query_table&quot;</span>:<span class="st">&quot;select * from basic;&quot;</span>
 };</code></pre>
 <p>而之前所提到的url查询所做的事情便是</p>
-<pre><code>DBHelper.urlQueryData = function (url, callback) {
-    var db = new sqlite3.Database(&quot;iot.db&quot;);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">DBHelper</span>.<span class="fu">urlQueryData</span> = <span class="kw">function</span> (url, callback) {
+    <span class="kw">var</span> db = <span class="kw">new</span> <span class="ot">sqlite3</span>.<span class="fu">Database</span>(<span class="st">&quot;iot.db&quot;</span>);
 
-    var result = [];
-    console.log(&quot;SELECT * FROM basic where &quot; + url.split(&#39;/&#39;)[1] + &quot;=&quot; + url.split(&#39;/&#39;)[2]);
-    db.all(&quot;SELECT * FROM basic where &quot; + url.split(&#39;/&#39;)[1] + &quot;=&quot; + url.split(&#39;/&#39;)[2], function(err, rows) {
-        db.close();
-        callback(JSON.stringify(rows));
+    <span class="kw">var</span> result = [];
+    <span class="ot">console</span>.<span class="fu">log</span>(<span class="st">&quot;SELECT * FROM basic where &quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">1</span>] + <span class="st">&quot;=&quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">2</span>]);
+    <span class="ot">db</span>.<span class="fu">all</span>(<span class="st">&quot;SELECT * FROM basic where &quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">1</span>] + <span class="st">&quot;=&quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">2</span>], <span class="kw">function</span>(err, rows) {
+        <span class="ot">db</span>.<span class="fu">close</span>();
+        <span class="fu">callback</span>(<span class="ot">JSON</span>.<span class="fu">stringify</span>(rows));
     });
 };</code></pre>
 <p>将URL传进来,便解析这个参数,接着再放到数据库中查询,再回调回结果。这样我们就可以构成之前所说的查询功能,而我们所谓的post功能似乎也可以用同样的方法加进去。</p>
@@ -1313,21 +1289,21 @@ db.close();</code></pre>
 <p>简单地记录一下在IoT-CoAP中一次获取数据地过程。</p>
 <h3 id="get"><span class="header-section-number">10.4.4</span> GET</h3>
 <p>先看看在示例中的Get.js的代码,这关乎在后面server端的代码。</p>
-<pre><code>const coap       = require(&#39;coap&#39;)
-     ,requestURI = &#39;coap://localhost/&#39;
-     ,url        = require(&#39;url&#39;).parse(requestURI + &#39;id/1/&#39;)
-     ,req        = coap.request(url)
-     ,bl         = require(&#39;bl&#39;);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap       = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
+     ,requestURI = <span class="st">&#39;coap://localhost/&#39;</span>
+     ,url        = <span class="fu">require</span>(<span class="st">&#39;url&#39;</span>).<span class="fu">parse</span>(requestURI + <span class="st">&#39;id/1/&#39;</span>)
+     ,req        = <span class="ot">coap</span>.<span class="fu">request</span>(url)
+     ,bl         = <span class="fu">require</span>(<span class="st">&#39;bl&#39;</span>);
 
-req.setHeader(&quot;Accept&quot;, &quot;application/json&quot;);
-req.on(&#39;response&#39;, function(res) {
-    res.pipe(bl(function(err, data) {
-        var json = JSON.parse(data);
-        console.log(json);
+<span class="ot">req</span>.<span class="fu">setHeader</span>(<span class="st">&quot;Accept&quot;</span>, <span class="st">&quot;application/json&quot;</span>);
+<span class="ot">req</span>.<span class="fu">on</span>(<span class="st">&#39;response&#39;</span>, <span class="kw">function</span>(res) {
+    <span class="ot">res</span>.<span class="fu">pipe</span>(<span class="fu">bl</span>(<span class="kw">function</span>(err, data) {
+        <span class="kw">var</span> json = <span class="ot">JSON</span>.<span class="fu">parse</span>(data);
+        <span class="ot">console</span>.<span class="fu">log</span>(json);
     }));
 
 });
-req.end();</code></pre>
+<span class="ot">req</span>.<span class="fu">end</span>();</code></pre>
 <p>const定义数据的方法,和我们在其他语言中有点像。只是这的const主要是为了程序的健壮型,减少程序出错,当然这不是javascript的用法。</p>
 <p>我们构建了一个请求的URL</p>
 <pre><code> coap://localhost/id/1/</code></pre>
@@ -1335,59 +1311,59 @@ req.end();</code></pre>
 <h3 id="iot-coap"><span class="header-section-number">10.4.5</span> IoT CoAP</h3>
 <h3 id="判断请求的方法"><span class="header-section-number">10.4.6</span> 判断请求的方法</h3>
 <p>在这里先把一些无关的代码删除掉,并保证其能工作,so,下面就是简要的逻辑代码。</p>
-<pre><code>var coap            = require(&#39;coap&#39;);
-var server          = coap.createServer({});
-var request_handler = require(&#39;./request_handler.js&#39;);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> coap            = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>);
+<span class="kw">var</span> server          = <span class="ot">coap</span>.<span class="fu">createServer</span>({});
+<span class="kw">var</span> request_handler = <span class="fu">require</span>(<span class="st">&#39;./request_handler.js&#39;</span>);
 
-server.on(&#39;request&#39;, function(req, res) {
-    switch(req.method){
-        case &quot;GET&quot;: request_handler.getHandler(req, res);
-            break;
+<span class="ot">server</span>.<span class="fu">on</span>(<span class="st">&#39;request&#39;</span>, <span class="kw">function</span>(req, res) {
+    <span class="kw">switch</span>(<span class="ot">req</span>.<span class="fu">method</span>){
+        <span class="kw">case</span> <span class="st">&quot;GET&quot;</span>: <span class="ot">request_handler</span>.<span class="fu">getHandler</span>(req, res);
+            <span class="kw">break</span>;
     }
 });
 
-server.listen(function() {
-    console.log(&#39;server started&#39;);
+<span class="ot">server</span>.<span class="fu">listen</span>(<span class="kw">function</span>() {
+    <span class="ot">console</span>.<span class="fu">log</span>(<span class="st">&#39;server started&#39;</span>);
 });</code></pre>
 <p>创建一个CoAP服务,判断req.method,也就是请求的方法,如果是GET的话,就调用request_handler.getHandler(req, res)。而在getHandler里,判断了下请求的Accept</p>
-<pre><code>request_helper.getHandler = function(req, res) {
-    switch (req.headers[&#39;Accept&#39;]) {
-        case &quot;application/json&quot;:
-            qh.returnJSON(req, res);
-            break;
-        case &quot;application/xml&quot;:
-            qh.returnXML(req, res);
-            break;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">request_helper</span>.<span class="fu">getHandler</span> = <span class="kw">function</span>(req, res) {
+    <span class="kw">switch</span> (<span class="ot">req</span>.<span class="fu">headers</span>[<span class="st">&#39;Accept&#39;</span>]) {
+        <span class="kw">case</span> <span class="st">&quot;application/json&quot;</span>:
+            <span class="ot">qh</span>.<span class="fu">returnJSON</span>(req, res);
+            <span class="kw">break</span>;
+        <span class="kw">case</span> <span class="st">&quot;application/xml&quot;</span>:
+            <span class="ot">qh</span>.<span class="fu">returnXML</span>(req, res);
+            <span class="kw">break</span>;
     }
 };</code></pre>
 <p>如果是json刚调用returnJSON,</p>
 <h3 id="database与回调"><span class="header-section-number">10.4.7</span> Database与回调</h3>
 <p>而这里为了处理回调函数刚分为了两部分</p>
-<pre><code>query_helper.returnJSON = function(req, res) {
-    DBHelper.urlQueryData(req.url, function (result) {
-        QueryData.returnJSON(result, res);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">query_helper</span>.<span class="fu">returnJSON</span> = <span class="kw">function</span>(req, res) {
+    <span class="ot">DBHelper</span>.<span class="fu">urlQueryData</span>(<span class="ot">req</span>.<span class="fu">url</span>, <span class="kw">function</span> (result) {
+        <span class="ot">QueryData</span>.<span class="fu">returnJSON</span>(result, res);
     });
 };</code></pre>
 <p>而这里只是调用了</p>
-<pre><code>DBHelper.urlQueryData = function (url, callback) {
-    var db = new sqlite3.Database(config[&quot;db_name&quot;]);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">DBHelper</span>.<span class="fu">urlQueryData</span> = <span class="kw">function</span> (url, callback) {
+    <span class="kw">var</span> db = <span class="kw">new</span> <span class="ot">sqlite3</span>.<span class="fu">Database</span>(config[<span class="st">&quot;db_name&quot;</span>]);
 
-    console.log(&quot;SELECT * FROM basic where &quot; + url.split(&#39;/&#39;)[1] + &quot;=&quot; + url.split(&#39;/&#39;)[2]);
-    db.all(&quot;SELECT * FROM basic where &quot; + url.split(&#39;/&#39;)[1] + &quot;=&quot; + url.split(&#39;/&#39;)[2], function(err, rows) {
-        db.close();
-        callback(JSON.stringify(rows));
+    <span class="ot">console</span>.<span class="fu">log</span>(<span class="st">&quot;SELECT * FROM basic where &quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">1</span>] + <span class="st">&quot;=&quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">2</span>]);
+    <span class="ot">db</span>.<span class="fu">all</span>(<span class="st">&quot;SELECT * FROM basic where &quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">1</span>] + <span class="st">&quot;=&quot;</span> + <span class="ot">url</span>.<span class="fu">split</span>(<span class="st">&#39;/&#39;</span>)[<span class="dv">2</span>], <span class="kw">function</span>(err, rows) {
+        <span class="ot">db</span>.<span class="fu">close</span>();
+        <span class="fu">callback</span>(<span class="ot">JSON</span>.<span class="fu">stringify</span>(rows));
     });
 };</code></pre>
 <p>这里调用了node sqlite3去查询对应id的数据,用回调处理了数据无法到外部的问题,而上面的returnJSON则只是返回最后的结果,code以及其他的内容。</p>
-<pre><code>QueryData.returnJSON = function(result, res) {
-    if (result.length == 2) {
-        res.code = &#39;4.04&#39;;
-        res.end(JSON.stringify({
-            error: &quot;Not Found&quot;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">QueryData</span>.<span class="fu">returnJSON</span> = <span class="kw">function</span>(result, res) {
+    <span class="kw">if</span> (<span class="ot">result</span>.<span class="fu">length</span> == <span class="dv">2</span>) {
+        <span class="ot">res</span>.<span class="fu">code</span> = <span class="st">&#39;4.04&#39;</span>;
+        <span class="ot">res</span>.<span class="fu">end</span>(<span class="ot">JSON</span>.<span class="fu">stringify</span>({
+            <span class="dt">error</span>: <span class="st">&quot;Not Found&quot;</span>
         }));
-    } else {
-        res.code = &#39;2.05&#39;;
-        res.end(result);
+    } <span class="kw">else</span> {
+        <span class="ot">res</span>.<span class="fu">code</span> = <span class="st">&#39;2.05&#39;</span>;
+        <span class="ot">res</span>.<span class="fu">end</span>(result);
     }
 };</code></pre>
 <p>当resulst的结果为空时,返回一个404,因为没有数据。这样我们就构成了整个的链,再一步步返回结果。</p>
@@ -1405,36 +1381,36 @@ server.listen(function() {
 <p>综上所述,块(Block)选项提供了传送一个最小的在分块的方式更大的陈述。</p>
 <h3 id="coap-post"><span class="header-section-number">10.5.1</span> CoAP POST</h3>
 <p>看看在IoT CoAP中的post示例。</p>
-<pre><code>const coap     = require(&#39;coap&#39;)
-      ,request  = coap.request
-      ,bl       = require(&#39;bl&#39;)
-      ,req = request({hostname: &#39;localhost&#39;,port:5683,pathname: &#39;&#39;,method: &#39;POST&#39;});
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">const</span> coap     = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>)
+      ,request  = <span class="ot">coap</span>.<span class="fu">request</span>
+      ,bl       = <span class="fu">require</span>(<span class="st">&#39;bl&#39;</span>)
+      ,req = <span class="fu">request</span>({<span class="dt">hostname</span>: <span class="st">&#39;localhost&#39;</span>,<span class="dt">port</span>:<span class="dv">5683</span>,<span class="dt">pathname</span>: <span class="st">&#39;&#39;</span>,<span class="dt">method</span>: <span class="st">&#39;POST&#39;</span>});
 
-req.setOption(&#39;Block2&#39;,  [new Buffer(&#39;1&#39;),new Buffer(&quot;&#39;must&#39;&quot;), new Buffer(&#39;23&#39;), new Buffer(&#39;12&#39;)]);
-req.setHeader(&quot;Accept&quot;, &quot;application/json&quot;);
-req.on(&#39;response&#39;, function(res) {
-    res.pipe(bl(function(err, data) {
-        console.log(data);
-        process.exit(0);
+<span class="ot">req</span>.<span class="fu">setOption</span>(<span class="st">&#39;Block2&#39;</span>,  [<span class="kw">new</span> <span class="fu">Buffer</span>(<span class="st">&#39;1&#39;</span>),<span class="kw">new</span> <span class="fu">Buffer</span>(<span class="st">&quot;&#39;must&#39;&quot;</span>), <span class="kw">new</span> <span class="fu">Buffer</span>(<span class="st">&#39;23&#39;</span>), <span class="kw">new</span> <span class="fu">Buffer</span>(<span class="st">&#39;12&#39;</span>)]);
+<span class="ot">req</span>.<span class="fu">setHeader</span>(<span class="st">&quot;Accept&quot;</span>, <span class="st">&quot;application/json&quot;</span>);
+<span class="ot">req</span>.<span class="fu">on</span>(<span class="st">&#39;response&#39;</span>, <span class="kw">function</span>(res) {
+    <span class="ot">res</span>.<span class="fu">pipe</span>(<span class="fu">bl</span>(<span class="kw">function</span>(err, data) {
+        <span class="ot">console</span>.<span class="fu">log</span>(data);
+        <span class="ot">process</span>.<span class="fu">exit</span>(<span class="dv">0</span>);
     }));
 
 });
 
-req.end();</code></pre>
+<span class="ot">req</span>.<span class="fu">end</span>();</code></pre>
 <p>Block2中一共有四个数据,相应的数据结果应该是</p>
-<pre><code>{ name: &#39;Block2&#39;, value: &lt;Buffer 31&gt; }
-{ name: &#39;Block2&#39;, value: &lt;Buffer 27 6d 75 73 74 27&gt; }
-{ name: &#39;Block2&#39;, value: &lt;Buffer 32 33&gt; }
-{ name: &#39;Block2&#39;, value: &lt;Buffer 31 32&gt; }</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript">{ <span class="dt">name</span>: <span class="st">&#39;Block2&#39;</span>, <span class="dt">value</span>: &lt;Buffer <span class="dv">31</span>&gt; }
+{ <span class="dt">name</span>: <span class="st">&#39;Block2&#39;</span>, <span class="dt">value</span>: &lt;Buffer <span class="dv">27</span> 6d <span class="dv">75</span> <span class="dv">73</span> <span class="dv">74</span> <span class="dv">27</span>&gt; }
+{ <span class="dt">name</span>: <span class="st">&#39;Block2&#39;</span>, <span class="dt">value</span>: &lt;Buffer <span class="dv">32</span> <span class="dv">33</span>&gt; }
+{ <span class="dt">name</span>: <span class="st">&#39;Block2&#39;</span>, <span class="dt">value</span>: &lt;Buffer <span class="dv">31</span> <span class="dv">32</span>&gt; }</code></pre>
 <p>这是没有解析的Block2,简单地可以用</p>
-<pre><code> _.values(e).toString()</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">_</span>.<span class="fu">values</span>(e).<span class="fu">toString</span>()</code></pre>
 <p>将结果转换为</p>
 <pre><code>Block2,1
 Block2,&#39;must&#39;
 Block2,23
 Block2,12</code></pre>
 <p>接着按“,”分开,</p>
-<pre><code>_.values(e).toString().split(&#39;,&#39;)[1]</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">_</span>.<span class="fu">values</span>(e).<span class="fu">toString</span>().<span class="fu">split</span>(<span class="st">&#39;,&#39;</span>)[<span class="dv">1</span>]</code></pre>
 <p>就有</p>
 <pre><code>[ &#39;1&#39;, &#39;\&#39;must\&#39;&#39;, &#39;23&#39;, &#39;12&#39; ]</code></pre>
 <p>便可以很愉快地将其post到数据库中了,</p>
@@ -1616,72 +1592,72 @@ Block2,12</code></pre>
 <h2 id="coap-json"><span class="header-section-number">10.6</span> CoAP JSON</h2>
 <p>于是在一开始的时候首先支持的便是“application/json”这样的类型。</p>
 <p>首先判断请求的header</p>
-<pre><code>request_helper.getHandler = function(req, res) {
-    switch (req.headers[&#39;Accept&#39;]) {
-        case &quot;application/json&quot;:
-            qh.returnJSON(req, res);
-            break;
-        case &quot;application/xml&quot;:
-            qh.returnXML(req, res);
-            break;
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">request_helper</span>.<span class="fu">getHandler</span> = <span class="kw">function</span>(req, res) {
+    <span class="kw">switch</span> (<span class="ot">req</span>.<span class="fu">headers</span>[<span class="st">&#39;Accept&#39;</span>]) {
+        <span class="kw">case</span> <span class="st">&quot;application/json&quot;</span>:
+            <span class="ot">qh</span>.<span class="fu">returnJSON</span>(req, res);
+            <span class="kw">break</span>;
+        <span class="kw">case</span> <span class="st">&quot;application/xml&quot;</span>:
+            <span class="ot">qh</span>.<span class="fu">returnXML</span>(req, res);
+            <span class="kw">break</span>;
     }
 };</code></pre>
 <p>再转至相应的函数处理,而判断的依据则是Accept是不是“application/json”。</p>
-<pre><code>registerFormat(&#39;text/plain&#39;, 0)
-registerFormat(&#39;application/link-format&#39;, 40)
-registerFormat(&#39;application/xml&#39;, 41)
-registerFormat(&#39;application/octet-stream&#39;, 42)
-registerFormat(&#39;application/exi&#39;, 47)
-registerFormat(&#39;application/json&#39;, 50)</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="fu">registerFormat</span>(<span class="st">&#39;text/plain&#39;</span>, <span class="dv">0</span>)
+<span class="fu">registerFormat</span>(<span class="st">&#39;application/link-format&#39;</span>, <span class="dv">40</span>)
+<span class="fu">registerFormat</span>(<span class="st">&#39;application/xml&#39;</span>, <span class="dv">41</span>)
+<span class="fu">registerFormat</span>(<span class="st">&#39;application/octet-stream&#39;</span>, <span class="dv">42</span>)
+<span class="fu">registerFormat</span>(<span class="st">&#39;application/exi&#39;</span>, <span class="dv">47</span>)
+<span class="fu">registerFormat</span>(<span class="st">&#39;application/json&#39;</span>, <span class="dv">50</span>)</code></pre>
 <p>对应地我们需要在一发出请求的时候设置好Accept,要不就没有办法返回我们需要的结果。</p>
-<pre><code>req.setHeader(&quot;Accept&quot;, &quot;application/json&quot;);</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">req</span>.<span class="fu">setHeader</span>(<span class="st">&quot;Accept&quot;</span>, <span class="st">&quot;application/json&quot;</span>);</code></pre>
 <h3 id="返回json"><span class="header-section-number">10.6.1</span> 返回JSON</h3>
 <p>在给IoT CoAP添加了JSON支持之后,变得非常有意思,至少我们可以获得我们想要的结果。在上一篇中我们介绍了一些常用的工具——<a href="http://www.phodal.com/blog/coap-command-line-tools-set/">CoAP 命令行工具集</a>。</p>
 <h3 id="coap客户端代码"><span class="header-section-number">10.6.2</span> CoAP客户端代码</h3>
 <p>开始之前我们需要有一个客户端代码,以便我们的服务端可以返回正确的数据并解析</p>
-<pre><code>var coap = require(&#39;coap&#39;);
-var requestURI = &#39;coap://localhost/&#39;;
-var url = require(&#39;url&#39;).parse(requestURI + &#39;id/1/&#39;);
-console.log(&quot;Request URL: &quot; + url.href);
-var req = coap.request(url);
-var bl = require(&#39;bl&#39;);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">var</span> coap = <span class="fu">require</span>(<span class="st">&#39;coap&#39;</span>);
+<span class="kw">var</span> requestURI = <span class="st">&#39;coap://localhost/&#39;</span>;
+<span class="kw">var</span> url = <span class="fu">require</span>(<span class="st">&#39;url&#39;</span>).<span class="fu">parse</span>(requestURI + <span class="st">&#39;id/1/&#39;</span>);
+<span class="ot">console</span>.<span class="fu">log</span>(<span class="st">&quot;Request URL: &quot;</span> + <span class="ot">url</span>.<span class="fu">href</span>);
+<span class="kw">var</span> req = <span class="ot">coap</span>.<span class="fu">request</span>(url);
+<span class="kw">var</span> bl = <span class="fu">require</span>(<span class="st">&#39;bl&#39;</span>);
 
-req.setHeader(&quot;Accept&quot;, &quot;application/json&quot;);
-req.on(&#39;response&#39;, function(res) {
-    res.pipe(bl(function(err, data) {
-        var json = JSON.parse(data);
-        console.log(json);
+<span class="ot">req</span>.<span class="fu">setHeader</span>(<span class="st">&quot;Accept&quot;</span>, <span class="st">&quot;application/json&quot;</span>);
+<span class="ot">req</span>.<span class="fu">on</span>(<span class="st">&#39;response&#39;</span>, <span class="kw">function</span>(res) {
+    <span class="ot">res</span>.<span class="fu">pipe</span>(<span class="fu">bl</span>(<span class="kw">function</span>(err, data) {
+        <span class="kw">var</span> json = <span class="ot">JSON</span>.<span class="fu">parse</span>(data);
+        <span class="ot">console</span>.<span class="fu">log</span>(json);
     }));
 
 });
 
-req.end();</code></pre>
+<span class="ot">req</span>.<span class="fu">end</span>();</code></pre>
 <p>代码有点长内容也有点多,但是核心是这句话:</p>
-<pre><code> req.setHeader(&quot;Accept&quot;, &quot;application/json&quot;);</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="ot">req</span>.<span class="fu">setHeader</span>(<span class="st">&quot;Accept&quot;</span>, <span class="st">&quot;application/json&quot;</span>);</code></pre>
 <p>这样的话,我们只需要在我们的服务端一判断,</p>
-<pre><code>if(req.headers[&#39;Accept&#39;] == &#39;application/json&#39;) {
-     //do something
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">if</span>(<span class="ot">req</span>.<span class="fu">headers</span>[<span class="st">&#39;Accept&#39;</span>] == <span class="st">&#39;application/json&#39;</span>) {
+     <span class="co">//do something</span>
  };</code></pre>
 <p>这样就可以返回数据了</p>
 <h3 id="coap-server端代码"><span class="header-section-number">10.6.3</span> CoAP Server端代码</h3>
 <p>Server端的代码比较简单,判断一下</p>
-<pre><code>if (req.headers[&#39;Accept&#39;] == &#39;application/json&#39;) {
-        parse_url(req.url, function(result){
-            res.end(result);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">if</span> (<span class="ot">req</span>.<span class="fu">headers</span>[<span class="st">&#39;Accept&#39;</span>] == <span class="st">&#39;application/json&#39;</span>) {
+        <span class="fu">parse_url</span>(<span class="ot">req</span>.<span class="fu">url</span>, <span class="kw">function</span>(result){
+            <span class="ot">res</span>.<span class="fu">end</span>(result);
         });
-        res.code = &#39;2.05&#39;;
+        <span class="ot">res</span>.<span class="fu">code</span> = <span class="st">&#39;2.05&#39;</span>;
     }</code></pre>
 <p>请求的是否是JSON格式,再返回一个205,也就是Content,只是这时设计是请求一个URL返回对应的数据。如</p>
 <pre><code> coap://localhost/id/1/</code></pre>
 <p>这时应该请求的是ID为1的数据,即</p>
-<pre><code>[ { id: 1, value: &#39;is id 1&#39;, sensors1: 19, sensors2: 20 }]</code></pre>
+<pre class="sourceCode javascript"><code class="sourceCode javascript">[ { <span class="dt">id</span>: <span class="dv">1</span>, <span class="dt">value</span>: <span class="st">&#39;is id 1&#39;</span>, <span class="dt">sensors1</span>: <span class="dv">19</span>, <span class="dt">sensors2</span>: <span class="dv">20</span> }]</code></pre>
 <p>而parse_url只是从数据库从读取相应的数据。</p>
-<pre><code>function parse_url(url ,callback) {
-    var db = new sqlite3.Database(config[&quot;db_name&quot;]);
+<pre class="sourceCode javascript"><code class="sourceCode javascript"><span class="kw">function</span> <span class="fu">parse_url</span>(url ,callback) {
+    <span class="kw">var</span> db = <span class="kw">new</span> <span class="ot">sqlite3</span>.<span class="fu">Database</span>(config[<span class="st">&quot;db_name&quot;</span>]);
 
-    var result = [];
-    db.all(&quot;SELECT * FROM basic;&quot;, function(err, rows) {
-        callback(JSON.stringify(rows));
+    <span class="kw">var</span> result = [];
+    <span class="ot">db</span>.<span class="fu">all</span>(<span class="st">&quot;SELECT * FROM basic;&quot;</span>, <span class="kw">function</span>(err, rows) {
+        <span class="fu">callback</span>(<span class="ot">JSON</span>.<span class="fu">stringify</span>(rows));
     })
 }</code></pre>
 <p>并且全部都显示出来,设计得真是有点不行,不过现在已经差不多了。</p>

+ 231 - 183
more/coap.md

@@ -88,12 +88,13 @@ coap-cli 一共有四个方法
 
 Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建一个package.json文件,添加这个库
 
-	{
-		"dependencies":{
-			"coap": "0.7.2"
-		}
+``` javascript
+{
+	"dependencies":{
+		"coap": "0.7.2"
 	}
-	
+}
+```	
 	
 接着执行
 
@@ -105,17 +106,18 @@ Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建
 
 接着,创建这样一个app.js
 
-    const coap        = require('coap')
-        , server  = coap.createServer()
+``` javascript
+const coap        = require('coap')
+    , server  = coap.createServer()
 
-    server.on('request', function(req, res) {
-      res.end('Hello ' + req.url.split('/')[1] + '\n')
-    })
+server.on('request', function(req, res) {
+  res.end('Hello ' + req.url.split('/')[1] + '\n')
+})
 
-    server.listen(function() {
-      console.log('server started')
-    })	
-    
+server.listen(function() {
+  console.log('server started')
+})	
+```    
     
 执行
 
@@ -125,14 +127,16 @@ Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建
 
 接着下来再创建一个client端的js,并运行之
 
-	const coap  = require('coap') 
-	    , req   = coap.request('coap://localhost/World')
+``` javascript
+const coap  = require('coap') 
+    , req   = coap.request('coap://localhost/World')
 
-	req.on('response', function(res) {
-	  res.pipe(process.stdout)
-	})
+req.on('response', function(res) {
+  res.pipe(process.stdout)
+})
 
-	req.end()
+req.end()
+```
 
 就可以在console上输出
 
@@ -148,15 +152,19 @@ Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建
 
 这样我们就可以在server.js类似于这样去引用这个js库。
 
-    var DBHelper = require('./db_helper.js');
-    DBHelper.initDB();
+``` javascript
+var DBHelper = require('./db_helper.js');
+DBHelper.initDB();
+```
 
 而这样调用的前提是我们需要去声明这样的module,为了方便地导出函数功能调用。
 
-    function DBHelper(){
-    }
-    DBHelper.initDB = function(){};
-    module.exports = DBHelper;
+``` javascript
+function DBHelper(){
+}
+DBHelper.initDB = function(){};
+module.exports = DBHelper;
+```
 
 虽然这里的功能很简单,简单也能做我们想做的事情。
 
@@ -166,41 +174,47 @@ Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建
 
 ####一个简单的initDB函数
 
-    var db = new sqlite3.Database(config["db_name"]);
-    var create_table = 'create table if not exists basic (' + config["db_table"] + ');';
+``` javascript
+var db = new sqlite3.Database(config["db_name"]);
+var create_table = 'create table if not exists basic (' + config["db_table"] + ');';
 
-    db.serialize(function() {
-        db.run(create_table);
-        _.each(config["init_table"], function(insert_data) {
-            db.run(insert_data);
-        });
+db.serialize(function() {
+    db.run(create_table);
+    _.each(config["init_table"], function(insert_data) {
+        db.run(insert_data);
     });
-    db.close();
+});
+db.close();
+```
 
 首先从配置中读取db_name,接着创建table,然后调用underscore的each方法,创建几个数据。配置如下所示
 
-	config = {
-	    "db_name": "iot.db",
-	    "db_table": "id integer primary key, value text, sensors1 float, sensors2 float",
-	    "init_table":[
-	        "insert or replace into basic (id,value,sensors1,sensors2) VALUES (1, 'is id 1', 19, 20);",
-	        "insert or replace into basic (id,value,sensors1,sensors2) VALUES (2, 'is id 2', 20, 21);"
-	    ],
-	    "query_table":"select * from basic;"
-	};
+``` javascript
+config = {
+    "db_name": "iot.db",
+    "db_table": "id integer primary key, value text, sensors1 float, sensors2 float",
+    "init_table":[
+        "insert or replace into basic (id,value,sensors1,sensors2) VALUES (1, 'is id 1', 19, 20);",
+        "insert or replace into basic (id,value,sensors1,sensors2) VALUES (2, 'is id 2', 20, 21);"
+    ],
+    "query_table":"select * from basic;"
+};
+```
 
 而之前所提到的url查询所做的事情便是
 
-	DBHelper.urlQueryData = function (url, callback) {
-	    var db = new sqlite3.Database("iot.db");
+``` javascript
+DBHelper.urlQueryData = function (url, callback) {
+    var db = new sqlite3.Database("iot.db");
 
-	    var result = [];
-	    console.log("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2]);
-	    db.all("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2], function(err, rows) {
-	        db.close();
-	        callback(JSON.stringify(rows));
-	    });
-	};
+    var result = [];
+    console.log("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2]);
+    db.all("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2], function(err, rows) {
+        db.close();
+        callback(JSON.stringify(rows));
+    });
+};
+```
 
 将URL传进来,便解析这个参数,接着再放到数据库中查询,再回调回结果。这样我们就可以构成之前所说的查询功能,而我们所谓的post功能似乎也可以用同样的方法加进去。
 
@@ -212,21 +226,23 @@ Node-CoAP是一个客户端和服务端的库用于CoAP的模块建模。创建
 
 先看看在示例中的Get.js的代码,这关乎在后面server端的代码。
 
-	const coap       = require('coap')
-	     ,requestURI = 'coap://localhost/'
-	     ,url        = require('url').parse(requestURI + 'id/1/')
-	     ,req        = coap.request(url)
-	     ,bl         = require('bl');
+``` javascript
+const coap       = require('coap')
+     ,requestURI = 'coap://localhost/'
+     ,url        = require('url').parse(requestURI + 'id/1/')
+     ,req        = coap.request(url)
+     ,bl         = require('bl');
 
-	req.setHeader("Accept", "application/json");
-	req.on('response', function(res) {
-		res.pipe(bl(function(err, data) {
-			var json = JSON.parse(data);
-			console.log(json);
-		}));
+req.setHeader("Accept", "application/json");
+req.on('response', function(res) {
+	res.pipe(bl(function(err, data) {
+		var json = JSON.parse(data);
+		console.log(json);
+	}));
 
-	});
-	req.end();
+});
+req.end();
+```
 
 const定义数据的方法,和我们在其他语言中有点像。只是这的const主要是为了程序的健壮型,减少程序出错,当然这不是javascript的用法。
 
@@ -242,70 +258,80 @@ const定义数据的方法,和我们在其他语言中有点像。只是这的
 
 在这里先把一些无关的代码删除掉,并保证其能工作,so,下面就是简要的逻辑代码。
 
-    var coap            = require('coap');
-    var server          = coap.createServer({});
-    var request_handler = require('./request_handler.js');
+``` javascript
+var coap            = require('coap');
+var server          = coap.createServer({});
+var request_handler = require('./request_handler.js');
 
-    server.on('request', function(req, res) {
-        switch(req.method){
-            case "GET": request_handler.getHandler(req, res);
-                break;
-        }
-    });
+server.on('request', function(req, res) {
+    switch(req.method){
+        case "GET": request_handler.getHandler(req, res);
+            break;
+    }
+});
 
-    server.listen(function() {
-        console.log('server started');
-    });
+server.listen(function() {
+    console.log('server started');
+});
+```
 
 创建一个CoAP服务,判断req.method,也就是请求的方法,如果是GET的话,就调用request_handler.getHandler(req, res)。而在getHandler里,判断了下请求的Accept
 
-    request_helper.getHandler = function(req, res) {
-        switch (req.headers['Accept']) {
-            case "application/json":
-                qh.returnJSON(req, res);
-                break;
-            case "application/xml":
-                qh.returnXML(req, res);
-                break;
-        }
-    };
+``` javascript
+request_helper.getHandler = function(req, res) {
+    switch (req.headers['Accept']) {
+        case "application/json":
+            qh.returnJSON(req, res);
+            break;
+        case "application/xml":
+            qh.returnXML(req, res);
+            break;
+    }
+};
+```
 
 如果是json刚调用returnJSON,
 
 ###Database与回调
 而这里为了处理回调函数刚分为了两部分
 
-    query_helper.returnJSON = function(req, res) {
-        DBHelper.urlQueryData(req.url, function (result) {
-            QueryData.returnJSON(result, res);
-        });
-    };
+``` javascript
+query_helper.returnJSON = function(req, res) {
+    DBHelper.urlQueryData(req.url, function (result) {
+        QueryData.returnJSON(result, res);
+    });
+};
+```
 
 而这里只是调用了
 
-	DBHelper.urlQueryData = function (url, callback) {
-	    var db = new sqlite3.Database(config["db_name"]);
+``` javascript
+DBHelper.urlQueryData = function (url, callback) {
+    var db = new sqlite3.Database(config["db_name"]);
 
-	    console.log("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2]);
-	    db.all("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2], function(err, rows) {
-	        db.close();
-	        callback(JSON.stringify(rows));
-	    });
-	};
+    console.log("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2]);
+    db.all("SELECT * FROM basic where " + url.split('/')[1] + "=" + url.split('/')[2], function(err, rows) {
+        db.close();
+        callback(JSON.stringify(rows));
+    });
+};
+```
 
 这里调用了node sqlite3去查询对应id的数据,用回调处理了数据无法到外部的问题,而上面的returnJSON则只是返回最后的结果,code以及其他的内容。
 
-	QueryData.returnJSON = function(result, res) {
-	    if (result.length == 2) {
-	        res.code = '4.04';
-	        res.end(JSON.stringify({
-	            error: "Not Found"
-	        }));
-	    } else {
-	        res.code = '2.05';
-	        res.end(result);
-	    }
-	};
+``` javascript
+QueryData.returnJSON = function(result, res) {
+    if (result.length == 2) {
+        res.code = '4.04';
+        res.end(JSON.stringify({
+            error: "Not Found"
+        }));
+    } else {
+        res.code = '2.05';
+        res.end(result);
+    }
+};
+```
 
 当resulst的结果为空时,返回一个404,因为没有数据。这样我们就构成了整个的链,再一步步返回结果。
 
@@ -331,34 +357,39 @@ CoAP是同UDP与DLTS一样是基于数据报传输的,这限制了资源表示
 
 看看在IoT CoAP中的post示例。
 
-	const coap     = require('coap')
-	      ,request  = coap.request
-	      ,bl       = require('bl')
-	      ,req = request({hostname: 'localhost',port:5683,pathname: '',method: 'POST'});
+``` javascript
+const coap     = require('coap')
+      ,request  = coap.request
+      ,bl       = require('bl')
+      ,req = request({hostname: 'localhost',port:5683,pathname: '',method: 'POST'});
 
-	req.setOption('Block2',  [new Buffer('1'),new Buffer("'must'"), new Buffer('23'), new Buffer('12')]);
-	req.setHeader("Accept", "application/json");
-	req.on('response', function(res) {
-	    res.pipe(bl(function(err, data) {
-	        console.log(data);
-	        process.exit(0);
-	    }));
+req.setOption('Block2',  [new Buffer('1'),new Buffer("'must'"), new Buffer('23'), new Buffer('12')]);
+req.setHeader("Accept", "application/json");
+req.on('response', function(res) {
+    res.pipe(bl(function(err, data) {
+        console.log(data);
+        process.exit(0);
+    }));
 
-	});
+});
 
-	req.end();
+req.end();
+```
 
 Block2中一共有四个数据,相应的数据结果应该是
 
-	{ name: 'Block2', value: <Buffer 31> }
-	{ name: 'Block2', value: <Buffer 27 6d 75 73 74 27> }
-	{ name: 'Block2', value: <Buffer 32 33> }
-	{ name: 'Block2', value: <Buffer 31 32> }
+``` javascript
+{ name: 'Block2', value: <Buffer 31> }
+{ name: 'Block2', value: <Buffer 27 6d 75 73 74 27> }
+{ name: 'Block2', value: <Buffer 32 33> }
+{ name: 'Block2', value: <Buffer 31 32> }
+```
 
 这是没有解析的Block2,简单地可以用
 
-     _.values(e).toString()
-
+``` javascript
+_.values(e).toString()
+```
 将结果转换为
 
 	Block2,1
@@ -368,12 +399,12 @@ Block2中一共有四个数据,相应的数据结果应该是
 
 接着按","分开,
 
-    _.values(e).toString().split(',')[1]
+``` javascript
+_.values(e).toString().split(',')[1]
+```
 
 就有
 
-
-
     [ '1', '\'must\'', '23', '12' ]
 
 便可以很愉快地将其post到数据库中了,
@@ -442,30 +473,35 @@ Block2中一共有四个数据,相应的数据结果应该是
 
 首先判断请求的header
 
-	request_helper.getHandler = function(req, res) {
-	    switch (req.headers['Accept']) {
-	        case "application/json":
-	            qh.returnJSON(req, res);
-	            break;
-	        case "application/xml":
-	            qh.returnXML(req, res);
-	            break;
-	    }
-	};
+``` javascript
+request_helper.getHandler = function(req, res) {
+    switch (req.headers['Accept']) {
+        case "application/json":
+            qh.returnJSON(req, res);
+            break;
+        case "application/xml":
+            qh.returnXML(req, res);
+            break;
+    }
+};
+```
 
 再转至相应的函数处理,而判断的依据则是Accept是不是"application/json"。
 
-	registerFormat('text/plain', 0)
-	registerFormat('application/link-format', 40)
-	registerFormat('application/xml', 41)
-	registerFormat('application/octet-stream', 42)
-	registerFormat('application/exi', 47)
-	registerFormat('application/json', 50)
+``` javascript
+registerFormat('text/plain', 0)
+registerFormat('application/link-format', 40)
+registerFormat('application/xml', 41)
+registerFormat('application/octet-stream', 42)
+registerFormat('application/exi', 47)
+registerFormat('application/json', 50)
+```
 
 对应地我们需要在一发出请求的时候设置好Accept,要不就没有办法返回我们需要的结果。
 
-    req.setHeader("Accept", "application/json");
-
+``` javascript
+req.setHeader("Accept", "application/json");
+```
 
 ###返回JSON
 
@@ -475,33 +511,39 @@ Block2中一共有四个数据,相应的数据结果应该是
 
 开始之前我们需要有一个客户端代码,以便我们的服务端可以返回正确的数据并解析
 
-	var coap = require('coap');
-	var requestURI = 'coap://localhost/';
-	var url = require('url').parse(requestURI + 'id/1/');
-	console.log("Request URL: " + url.href);
-	var req = coap.request(url);
-	var bl = require('bl');
+``` javascript
+var coap = require('coap');
+var requestURI = 'coap://localhost/';
+var url = require('url').parse(requestURI + 'id/1/');
+console.log("Request URL: " + url.href);
+var req = coap.request(url);
+var bl = require('bl');
 
-	req.setHeader("Accept", "application/json");
-	req.on('response', function(res) {
-		res.pipe(bl(function(err, data) {
-			var json = JSON.parse(data);
-			console.log(json);
-		}));
+req.setHeader("Accept", "application/json");
+req.on('response', function(res) {
+	res.pipe(bl(function(err, data) {
+		var json = JSON.parse(data);
+		console.log(json);
+	}));
 
-	});
+});
 
-	req.end();
+req.end();
+```
 
 代码有点长内容也有点多,但是核心是这句话:
 
-     req.setHeader("Accept", "application/json");
+``` javascript
+req.setHeader("Accept", "application/json");
+```
 
 这样的话,我们只需要在我们的服务端一判断,
 
-    if(req.headers['Accept'] == 'application/json') {
-         //do something
-     };
+``` javascript
+if(req.headers['Accept'] == 'application/json') {
+     //do something
+ };
+```
 
 这样就可以返回数据了
 
@@ -509,12 +551,14 @@ Block2中一共有四个数据,相应的数据结果应该是
 
 Server端的代码比较简单,判断一下
 
-    if (req.headers['Accept'] == 'application/json') {
-            parse_url(req.url, function(result){
-                res.end(result);
-            });
-            res.code = '2.05';
-        }
+``` javascript
+if (req.headers['Accept'] == 'application/json') {
+        parse_url(req.url, function(result){
+            res.end(result);
+        });
+        res.code = '2.05';
+    }
+```
 
 请求的是否是JSON格式,再返回一个205,也就是Content,只是这时设计是请求一个URL返回对应的数据。如
 
@@ -522,17 +566,21 @@ Server端的代码比较简单,判断一下
 
 这时应该请求的是ID为1的数据,即
 
-    [ { id: 1, value: 'is id 1', sensors1: 19, sensors2: 20 }]
+``` javascript
+[ { id: 1, value: 'is id 1', sensors1: 19, sensors2: 20 }]
+```
 
 而parse_url只是从数据库从读取相应的数据。
 
-	function parse_url(url ,callback) {
-	    var db = new sqlite3.Database(config["db_name"]);
+``` javascript
+function parse_url(url ,callback) {
+    var db = new sqlite3.Database(config["db_name"]);
 
-	    var result = [];
-	    db.all("SELECT * FROM basic;", function(err, rows) {
-	        callback(JSON.stringify(rows));
-	    })
-	}
+    var result = [];
+    db.all("SELECT * FROM basic;", function(err, rows) {
+        callback(JSON.stringify(rows));
+    })
+}
+```
 
 并且全部都显示出来,设计得真是有点不行,不过现在已经差不多了。

+ 4 - 0
pre/2.intro.md

@@ -22,6 +22,10 @@
 - JAVA学的人很多,然而不适合我们将主要精力集中于构建与学习,因为无关的代码太多了。
 - 当时以及现在,我还是不喜欢JAVA(ps:更喜欢脚本语言,可以在更少的时候做更多的事)。
 
+###为什么没有Android ?
+
+在IOT的repo中: [https://github.com/gmszone/iot](https://github.com/gmszone/iot) 是有Android的示例,然而这些理论不适合在这里讨论。
+
 ##如何阅读
 
 这是一个简单的建议,仅针对于在选择阅读没有经验的读者。

部分文件因为文件数量过多而无法显示