JavaScript物聯網:架構與數據處理 ( 簡體 字) |
作者:李知周 著 | 類別:1. -> 程式設計 -> 網路編程 -> Javascript 2. -> 程式設計 -> 物聯網 |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 49000 詢問書籍請說出此書號!【有庫存】 NT售價: 445 元 |
出版日:5/1/2018 |
頁數:365 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111598138 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:為什么要寫這本書
Atwood定律:任何能夠用JavaScript實現的應用系統,最終都必將用JavaScript實現。
——Jeff Atwood
探索與開拓知識的新疆域是我一直以來秉持的生活與學習理念,而撰寫這本書正是這樣的理念的一次實踐。我一直深信著Atwood定律并身體力行貫徹實踐。JavaScript是一門古老的語言,它誕生于互聯網的第一入口瀏覽器之上,幾乎伴隨著整個互聯網的發展,見證了互聯網的崛起過程。在這個物聯網的新時代,這門互聯網時代的語言卻老樹開新花,在新時代發揮新的活力。正是秉持著這樣的信念,我希望為JavaScript的新征程貢獻自己的一份微薄力量,這也是我撰寫本書的第一動力。
作為互聯網技術的進化,物聯網開發技術體系并非孤立的技術棧,而是向上承接了互聯網技術、大數據技術乃至人工智能技術,向下統領了嵌入式硬件開發,是承上啟下的全棧開發技術。作為正在快速進化中的新互聯網技術,我們并不能預測物聯網技術棧最終的樣子:統一的開發語言是JavaScript還是Python,抑或其他編程語言;HTTP、WebSocket、MQTT、CoAP等協議誰會是最后的贏家。隨著物聯網的不斷進化,我們甚至可能無法預測其最終形態,也許物聯網根本就沒有一個最終的形態。但是,我們仍然可以看清物聯網發展的軌跡與必然趨勢,那就是:開發技術棧必然向全棧化方向發展,數據流動必然向無邊界化方向發展。互聯網的核心是數據的流動,數據的流動為我們帶來了難以想象的價值,而物聯網又將這一核心推到了更高的高度,打破了互聯網原有的邊界,讓千千萬萬節點設備中的數據流動了起來。
全棧化的開發正是順應了這種趨勢,打破了在開發層面中那些阻礙數據流動的技術壁壘,將芯片、嵌入式、網絡、大數據、人工智能、信息安全等諸多領域納入物聯網的全棧開發中,實現端到端的完整解決方案,真正實現數據的流動并讓數據為人類服務,讓我們以更高效、更智慧的方式來發掘數據的價值,實現數據的價值。“未來已來,只是尚未流行”,凱文·凱利在《必然》中如是說。技術發展的必然不是說我們重復多少次,最終都會發展出同樣的結果,而是科技在本質上的一種偏好,這種偏好使得它有朝某種特定方向發展的趨勢,這種技術向某一個方向發展的趨勢是一個必然。對于物聯網來說,最終使用哪種編程語言或者哪種協議不是必然,而真正的必然是物聯網開發的全棧化以及數據流動的無邊界化。而本書目的之一就是讓讀者,也包括筆者自己在物聯網進化的潮流中遨游,學習技術并洞察一二趨勢,在它們還未流行前占得先機。在物聯網進化的洪流中,為其發展貢獻自己的一份力量,不至于惶恐。
選擇JavaScript作為物聯網系統的開發語言也是一種減法策略,力求釋放少的潛能,取得多的成就。對于物聯網節點來說,開發不僅有性能的限制,也有成本的限制。由于性能的限制,大家無法將體驗做得和iPhone一樣好;因成本的限制,我們總是希望以最少的開發成本及最簡單的系統設計完成盡可能多的任務。這導致在設計過程中需不斷做減法:通過使用手機進行控制,免去了輸入/輸出設備;通過使用基于JavaScript的HTML5,免去了開發與安裝手機App;通過使用Node.js作為Web服務器,免去了兼容性問題。這樣可以專注于節點的控制、圖形化與用戶體驗等,因此使用JavaScript做全棧開發,無論在開發成本還是在性能上都是目前最優的物聯網解決方案。而利用NPM等大量現有開源JavaScript資源,可以非常容易而快速地搭建起一整套物聯網系統。本書另一個目的是希望使用JavaScript來降低讀者學習物聯網開發的難度,讀者無須掌握多種不同的開發語言,就能夠利用JavaScript快速開發出完整的物聯網應用,實現從0到1、從理論到實踐的跨越。
本書特色
正如Linus的名言:“Talk is cheep.Show me the code.”一樣,本書最重要的,也是首要的一個特點就是注重實踐,特別是代碼實踐。
從實踐層面上講,筆者不僅在前面的理論章節中給出了大量使用JavaScript進行物聯網開發與系統設計實踐的例子,而且在實戰篇中以真實項目的完整設計作為內容的主體,將項目的重要細節呈現,以饗讀者。筆者力求最大化地使用JavaScript,在書中一切適合使用JavaScript來進行分析與描述的部分,一律使用JavaScript來實現。
從技術層面上講,本書首次介紹了許多仍然處于實驗階段的新技術,其中包括基于Node.js
的一些大數據處理技術(如Skale),以及基于JavaScript的深度學習技術(如Keras.js)。
在寫作本書時,筆者對國內外使用JavaScript開發的現狀做了充分的調研,力求讓讀者以一個最前沿的視角來學習JavaScript物聯網開發,與此同時介紹了許多在Node.js中已經非常成熟的設計技術,包括像微服務這種已經融入當前JavaScript主流設計中的關鍵技術。筆者所介紹的這些技術也許有一天會落伍或者被淘汰甚至被拋棄,但是通過介紹這些技術能夠讓讀者在技術層面上開闊眼界或博采眾長,以不變應萬變應對物聯網這個仍然方興未艾、飛速發展的科學技術。 從適合讀者閱讀和掌握知識的結構安排上講,本書分為基礎篇、數據篇和實戰篇。在基礎篇,我們會對物聯網進行基礎性介紹,并補充Node.js的基礎知識。數據篇會詳細解析物聯網在不同層次的設計與數據相關的處理。而在實戰篇中,我們會結合前面所學的知識從物聯網實際需求出發,動手設計我們自己的物聯網系統,從而做到理論聯系實際,通過實踐加強理論理解。
讀者對象
物聯網嵌入式軟件工程師
物聯網全棧軟件工程師
物聯網大數據工程師
物聯網數據分析科學家
物聯網安全工程師
物聯網運維工程師
物聯網系統架構師
其他對物聯網技術感興趣的人員
如何閱讀本書
本書分為3篇,共11章。
第一篇(第1章和第2章)是基礎篇,主要講解JavaScript物聯網設計最基礎的內容,包括以下內容。
第1章:討論了物聯網進化的方向及物聯網的核心數據的流動,順應這一必然趨勢,物聯網必須要采用端到端的解決方案,而JavaScript是實現這一方案的很好選擇。
第2章:詳細介紹了Node.js基礎及其中的一些關鍵技術,包括V8引擎、非阻塞式I/O、事件循環及包管理,同時介紹了目前流行的Node.js微服務架構設計。
第二篇是數據篇(第3∼7章),主要講解使用JavaScript完成圍繞著物聯網的數據收集、存儲、處理、分析、展示交互與安全在內的與物聯網數據相關的方方面面,包括以下內容。
第3章:詳細介紹了如何使用Node.js來完成嵌入式系統的設計,如何使用JavaScript完成實時物聯網數據收集,以及如何使用物聯網協議實現與互聯網的互連互通。
第4章:詳細介紹了如何使用JavaScript結合大數據技術來實現對呈指數增長的物聯網數據進行存儲與處理,并為物聯網實時數據處理構建了基于Lambda與Kappa的大數據處理架構。
第5章:詳細介紹了如何使用JavaScript來構建基于人工智能與機器學習的物聯網數據分析平臺,其中著重介紹了目前比較熱門的深度學習算法。
第6章:詳細介紹了如何使用JavaScript來構物聯網人機交互界面。其中將重點放在了基于HTML5的Hybrid App框架上,實現了一次開發、部署不同設備的功能。
第7章:詳細介紹了物聯網的安全問題、挑戰與解決思路,以及在使用JavaScript過程中如何加強安全。
第三篇是實戰篇(第8∼11章),以筆者真實的物聯網項目為核心,抽絲剝繭為讀者講述如何在實際的項目應用JavaScript實現物聯網的開發,包括以下內容。
第8章:以筆者的開源物聯網硬件OpenFPGAduino為中心,詳細介紹了使用JavaScript進行物聯網網關節點設計的細節,特別是如何使用Node.js完成物聯網的開發。
第9章:主要介紹了如何在物聯網開發中使用云服務。其中以云軟件開發環境及云開發編譯部署環境為例,為讀者展示了如何利用云技術來提高物聯網開發效率、降低開發難度。
第10章:以物聯網生物芯片實驗測試系統為實例,介紹了在完整的項目中如何根據需求設計物聯網的每一個子系統,并將這些子系統組合成一個完整的物聯網項目。
第11章:以物聯網大數據系統的設計為中心,重點介紹了如何構建物聯網數據的匯總與分析系統,包括構建基于物聯網日志的異常檢測及網絡安全防護系統。
為方便讀者閱讀理解本書,這里繪制了本書的各篇章的技術關系與結構,本書的結構就像一張神經網絡,每一篇分別代表不同的神經網絡層,每一章代表一個神經元,每一個神經元之間的箭頭代表了技術的層次關系。
通過閱讀本書,讀者不僅能從零基礎開始學習物聯網相關知識與技術,而且可以通過實例學習掌握如何搭建和開發完整的物聯網系統;本書使用JavaScript作為統一的編程語言,降低了讀者在學習物聯網過程中的難度,避免了不斷學習各種編程語言而無法集中精力探索物聯網本質的困擾,也為未來實際應用與開發提供參考。
讀者可以依照章節順序閱讀所有章節,也可以根據結構關系圖選擇閱讀連接數量最多的重點章節。比如,第1章與第11章這樣貫穿全書的章節,以及第2、3、6章這樣被很多章節用到的技術,之后閱讀剩余的章節。
讀者也可以首先閱讀基礎篇的所有章節,然后直接閱讀實戰篇,以對物聯網的開發有一個具體形象的認識;再回過頭來閱讀數據篇的理論部分以加強對知識的理解。
如果你是一名初學者而且沒有任何JavaScript經驗,請在閱讀本書之前,先學習一些JavaScript基礎理論與知識,《JavaScript權威指南》會是一個不錯的選擇。 致謝
感謝上海浦北信息科技有限公司,作為公司的創始人之一,本書中的很多實踐內容都來自于公司草創之初的探索與嘗試。感謝我的共同創始人李旭為開源物聯網平臺OpenFPGAduino的硬件設計與研發做出的貢獻,以及朱壯暉為硬件生產所做出的努力。感謝大家一起完成了物聯網生物芯片實驗測試系統項目。
感謝中國科學院微系統與信息技術研究所對大學生創業的支持,并提供了生物芯片實驗測試系統項目。感謝微小衛星工程中心的朱振才導師與張銳導師在我博士學習期間提供的寬松的科研學習環境,使我能夠在專心于統計機器學習研究的同時還能有時間關注物聯網
研究。
感謝曹友盛博士、丁俊勇、劉鋒、李俊周、顏苑等多位老領導、學界大師、業界領袖的關懷與指導。感謝ITPUB、CSDN、開源中國與GitHub社區的各位技術專家們的博客文章以及開源項目,每次閱讀必有所獲,本書也多處引用了這些博客開源項目中的觀點、思想與
方法。
特別致謝
最后,我要特別感謝我的太太慧慧和女兒婷婷,我為寫作這本書,犧牲了很多陪伴她們的時間,但也正因為有了她們的付出與支持,我才能堅持寫下去。
同時,感謝我的父母及岳父、岳母,特別是我的岳母,不遺余力地幫助我們照顧女兒,有了你們的幫助和支持,我才有時間和精力去完成寫作工作。
謹以此書獻給我最親愛的家人,以及眾多熱愛物聯網技術的朋友們,愿我們大家的努力能使婷婷這樣的下一代擁有一個精彩紛呈的物聯網世界!
李知周 |
內容簡介:資深大數據科學家、物聯網專家撰寫,兼具深度與廣度,并融入微服務、容器、DevOps等主流編程思想。本書以JavaScript全棧物聯網構建、數據面分析為主線,以實操推進,涵蓋必要基礎知識、架構、數據收集到展示、接入層開發、生物芯片、安全等核心技術,共三篇,11章內容。
第一篇是基礎篇(第1∼2章),主要講解:? 物聯網進化的方向、以數據為核心的本質;? JavaScript作為端到端物聯網解決方案的可行性;? Node.js基礎以及關鍵技術,包括V8引擎、非阻塞I/O、事件循環與包管理,以及Node.js微服務構架設計。
第二篇是數據篇(第3∼7章),主要講解使用JavaScript完成物聯網實時數據收集、存儲、處理、分析、展示交互與安全的數據面技術與實踐,穿插各種實用平臺/框架的構建或者利用,逐步帶領讀者打造實時的物聯網數據流收集與處理平臺,并講解如何利用深度學習算法等熱點技術,同時涵蓋物聯網協議與互聯網協議的互聯互通。
第三篇是實戰篇(第8∼11章),以筆者開源的OpenFPGAduino為核心展開基于JavaScript的物聯網開發,涵蓋:? 網關節點設計與云服務利用;? 以物聯網生物芯片實驗測試系統為例,介紹子系統設計與整合;? 物聯網大數據系統設計,重點介紹數據的匯總與分析系統,以及基于日志的異常檢測與網絡安全防護系統。 |
目錄:本書贊譽 序一 序二 前言 第一篇 基礎篇 第1章 物聯網系統基礎 2 1.1 萬物互聯與互聯網進化論 3 1.2 物聯網的核心數據的流動 4 1.2.1 現代物聯網的對稱性 4 1.2.2 現代物聯網的IP化 4 1.3 端到端物聯網解決方案 5 1.3.1 JavaScript老樹新花 5 1.3.2 物聯網節點JavaScript開發 6 1.3.3 物聯網客戶端JavaScript開發 7 1.4 物聯網大數據的必然趨勢 9 1.5 物聯網機器學習的必然趨勢 11 1.6 本章小結 12 第2章 Node.js基礎 14 2.1 標準庫 14 2.1.1 簡單模塊定義和使用 15 2.1.2 標準庫API編程 16 2.1.3 標準庫console模塊 18 2.2 V8引擎 22 2.2.1 編譯執行 23 2.2.2 垃圾回收 24 2.3 非阻塞式I/O 25 2.4 事件循環 27 2.5 包管理器NPM 30 2.5.1 包結構 31 2.5.2 包管理 33 2.6 Node.js開發環境 34 2.7 微服務架構 35 2.8 本章小結 37 第二篇 數據篇 第3章 基于JavaScript物聯網數據收集 40 3.1 嵌入式系統特點 40 3.1.1 高集成度 40 3.1.2 資源受限 41 3.1.3 長壽命 42 3.1.4 環境苛刻 42 3.2 實時數據收集 43 3.2.1 強實時任務 44 3.2.2 準實時任務 44 3.2.3 弱實時任務與最終實時任務 45 3.2.4 時延、抖動與吞吐量 46 3.3 Node.js物聯網節點開發 49 3.3.1 內存分配與優化 50 3.3.2 延時測量與性能優化 58 3.3.3 Node.js 跨語言調用 60 3.3.4 Node.js 物聯網通信協議開發 61 3.3.5 Node.js代碼遠程部署與更新 65 3.3.6 Node.js 服務發現 70 3.4 IoT.js物聯網節點開發 73 3.5 Espruino的物聯網節點開發 75 3.6 本章小結 76 第4章 基于JavaScript數據存儲與處理 77 4.1 大數據基礎 77 4.1.1 指數增長 77 4.1.2 水平擴展 79 4.1.3 MapReduce 80 4.1.4 高可用性 82 4.1.5 模式可復制 83 4.2 大數據實時處理 84 4.2.1 時間序列 84 4.2.2 Lambda架構 85 4.2.3 JavaScript物聯網實時數據處理 88 4.3 Kafka大數據消息總線 89 4.3.1 消息總線 90 4.3.2 Kafka集群 91 4.3.3 數據存儲 95 4.3.4 高可用性 98 4.3.5 連接器 98 4.3.6 JavaScript Kafka 數據收發 100 4.3.7 Kafka即服務 101 4.4 Spark大數據處理平臺 104 4.4.1 HDFS 105 4.4.2 RDD 107 4.4.3 變換與動作 108 4.4.4 DAG調度器 110 4.4.5 數據幀 111 4.4.6 流處理 113 4.4.7 EclairJS JavaScript大數據處理 113 4.5 ElasticSearch大數據索引平臺 116 4.5.1 JSON文檔 117 4.5.2 模板與映射 118 4.5.3 確切值與全文文本 120 4.5.4 Lucene引擎與倒排索引 121 4.5.5 分片與副本 122 4.5.6 RESTful接口的JavaScript編程 122 4.6 本章小結 125 第5章 基于JavaScript物聯網數據分析 126 5.1 人工智能與機器學習 126 5.1.1 監督學習 128 5.1.2 強化學習 134 5.2 深度學習 138 5.2.1 多層感知器網絡 139 5.2.2 卷積神經網絡 145 5.2.3 遞歸神經網絡 149 5.2.4 大規模深度學習 152 5.3 深度學習物聯網數據分析 155 5.3.1 基于卷積神經網絡的物聯網視頻監控物體識別 155 5.3.2 基于Q深度學習的物聯網掃地機器人 156 5.4 本章小結 158 第6章 基于JavaScript物聯網數據展示與交互 159 6.1 物聯網網頁應用開發 159 6.1.1 HTML 160 6.1.2 CSS 165 6.1.3 本地數據存儲 170 6.1.4 AJAX 171 6.1.5 WebSocket 174 6.1.6 多媒體 176 6.1.7 數據可視化 179 6.2 Angular.js網頁應用開發 186 6.2.1 單頁應用 187 6.2.2 MVC設計模式 189 6.2.3 雙向綁定 191 6.2.4 依賴注入 192 6.2.5 URL路由 193 6.3 Ionic移動應用開發 195 6.3.1 Cordova 196 6.3.2 UI組件 197 6.3.3 Ionic集成開發環境 199 6.3.4 物聯網單頁應用程序 201 6.4 本章小結 205 第7章 基于JavaScript物聯網數據安全 206 7.1 物聯網的安全挑戰 206 7.1.1 未來已經來臨 206 7.1.2 早期物聯網安全 207 7.1.3 現代物聯網安全 208 7.2 攻擊表面與安全防護 209 7.2.1 設備安全 210 7.2.2 網絡安全 211 7.2.3 數據安全 213 7.3 安全獵手與擊殺鏈 215 7.3.1 基于大數據的物聯網安全監控系統設計 216 7.3.2 物聯網安全監控系統擊殺實戰 219 7.4 JavaScript物聯網數據安全 221 7.4.1 JavaScript程序漏洞掃描 221 7.4.2 JavaScript網絡傳輸加密 222 7.4.3 JavaScript實現訪問控制 225 7.5 本章小結 227 第三篇 實戰篇 第8章 物聯網智能網關系統開發 230 8.1 物聯網智能網關 230 8.2 開源硬件OpenFPGAduino 231 8.2.1 開源硬件簡介 232 8.2.2 OpenFPGAduino硬件設計 234 8.2.3 OpenFPGAduino軟件設計 235 8.3 Node.js物聯網系統開發 236 8.3.1 Arduino.js網絡系統 237 8.3.2 Express HTTP服務 237 8.3.3 微服務架構 238 8.3.4 數據庫微服務 242 8.3.5 服務發現 244 8.3.6 物聯網協議轉換 246 8.3.7 硬件訪問 248 8.3.8 硬件仿真 252 8.3.9 Mocha集成測試 254 8.4 FPGA實時性系統開發 256 8.4.1 FPGA簡介 256 8.4.2 Qsys總線 257 8.4.3 內核空間驅動 259 8.4.4 用戶空間驅動 260 8.4.5 FPGA在線應用配置 261 8.5 本章小結 262 第9章 物聯網云管理與開發環境 264 9.1 云計算與云服務 264 9.1.1 虛擬化 265 9.1.2 容器化 266 9.2 物聯網云服務 272 9.3 基于HTML的嵌入式軟件開發環境 274 9.4 基于Blockly的云軟件開發環境 275 9.5 基于Docker與云存儲的云開發編譯部署環境 280 9.6 基于Yeelink云的物聯網遠程管理與控制 285 9.7 基于Plot.ly數據可視化云服務 288 9.8 基于聽云物聯網運維服務 289 9.9 本章小結 291 第10章 物聯網生物芯片實驗測試系統 292 10.1 生物芯片測試平臺 292 10.2 生物芯片測試平臺總體設計 294 10.3 平臺電源與機箱系統設計 296 10.4 控溫控濕度平臺系統設計 298 10.5 實驗試劑注射進樣系統設計 302 10.6 高精度三軸移動定位系統設計 304 10.7 顯微鏡圖像監控系統設計 309 10.8 物聯網實驗自動化控制系統設計 309 10.9 本章小結 312 第11章 物聯網大數據分析系統 313 11.1 物聯網大數據平臺 313 11.1.1 物聯網絡三層架構 315 11.1.2 物聯網大數據信息處理平臺設計 316 11.2 物聯網數據匯聚 319 11.2.1 物聯網MQTT Kafka網橋 319 11.2.2 物聯網數據平面Kafka聚合網關管理 322 11.2.3 物聯網控制平面ZooKeeper節點管理 323 11.3 物聯網數據清洗 324 11.3.1 抽取變換加載 325 11.3.2 一致性檢查 326 11.3.3 重復數據去除 327 11.4 物聯網數據統計分析與機器學習 334 11.4.1 統計分析與機器學習 335 11.4.2 基于Spark批處理統計分析 335 11.4.3 基于Kappa架構實時統計分析 336 11.4.4 在線機器學習 338 11.4.5 基于RLS的異常檢測 339 11.5 物聯網日志異常檢測與監控系統設計 341 11.5.1 物聯網日志分析 341 11.5.2 LogStash日志收集與解析 342 11.5.3 ElasticSearch日志存儲與索引 344 11.5.4 Kibana日志可視化 344 11.5.5 日志異常檢測與告警 346 11.6 物聯網數據安全日志機器學習系統設計 350 11.6.1 攻擊指紋DGA 351 11.6.2 DGA應用實例DNS隧道 353 11.6.3 自然語言處理 355 11.6.4 深度學習識別DGA 358 11.7 本章小結 364 |
序: |