整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          JavaScript 也可以搞定嵌入式開發? - 硬創公開課

          賓介紹:鄭曄,Ruff CTO,Oracle Duke選擇獎獲獎作品Moco的作者,目前投身于 IoT 領域,致力于簡化 IoT 應用的開發方式。他多次在各種媒體上發表文章,在各種技術大會上做過演講,對敏捷軟件開發、軟件設計、領域特定語言等方面,有著深刻理解,愿意分享自己對于軟件開發的理解,也愿意吸收新的知識,更愿意與人暢聊軟硬件開發。

          【Ruff CTO 鄭曄】

          IoT(Internet of Things)是大家公認的未來。但讓人尷尬的是,這些代表未來的炫酷產品似乎只存在于業內人士的 PPT 中。真正走進普通人生活的,大多只是一些“帶有 Wi-Fi 的普通硬件”。和大多數生態普及過程中遇到的問題相同,IoT 缺少一個關鍵的系統——應用。應用缺失,自然難以營造用戶生態。然而這并不完全是開發者的責任,大多數情況下,開發者都處在臣妾做不到的狀態,因為涉及硬件的“嵌入式開發”需要非常多的底層硬件代碼基礎,這讓廣大的軟件程序猿望而卻步。

          “Ruff”的目標就是解決這個問題。簡而言之,Ruff 可以允許開發者用普及的 JavaScript 語言進行嵌入式開發,他們究竟是怎么做到的呢?且聽 Ruff CTO 鄭曄慢慢道來。

          何謂 Ruff?

          Ruff 是一個硬件應用開發平臺。簡言之,通過 Ruff,開發者可以使用 JavaScript 開發硬件應用。

          從行業發展趨勢可以看到,IoT(Internet of Things)是大家公認的未來。大家也知道,我國目前在生產制造的水準也是世界級的。但是,從趨勢到現實中,中間還欠缺了什么呢?我們看到的是:應用。

          我們都在說智能硬件。實際上,所謂智能硬件是一個“硬件應用”,是把硬件和應用場景結合起來。應用的成功本質上是個概率問題,我們之所以還沒有看到很多成功的硬件應用,主要是應用的總體數量太少。很多人都能看到這是一片藍海,但問題是,并不是每個人都有能力進入到這個領域,因為硬件應用的門檻太高了。

          這一點類似于 Nokia 手機的時代,很多人都想編寫手機應用,但只有很少量的程序員有能力編寫手機應用,我自己就曾經希望買 Nokia 手機來做開發,但最后放棄了,也是因為開發太麻煩。后來有了 iOS 和 Android,開發門檻一下子降了下來,大量的程序員涌了進來,才有了我們看到的移動互聯網的興起,也才有了微信、滴滴等爆款應用。

          所以 Ruff 就是要在硬件應用開發領域解決同樣的問題,降低硬件應用開發的門檻,讓更多有應用開發能力的人進入到這個領域里。

          有一個前端開發者,他拿到 Ruff,很快就寫了一個小應用:用打火機點亮網頁上的一盞燈。因為有了 Ruff,這個從來沒寫過硬件的開發者,就有機會開始編寫硬件應用了。這就是 Ruff 降低門檻起到的作用。總結起來,Ruff 就是要降低硬件應用開發門檻,讓開發者能夠創造出更多有創意的硬件應用。

          硬件應用開發的門檻有多高?

          從現狀來看,硬件和應用完全就是兩套詞匯表,比如,做硬件的人關心的是,GPIO、I2C、時序、驅動等,而做應用的人關心的是,需求、用戶體驗、高可用性、系統架構等。我問過應用開發者什么是 GPIO,他們的表情就像見了鬼一樣;我也曾讓硬件開發者講講什么是 SOLID 設計原則,很少有人能講清楚。

          這就是軟硬件之間的鴻溝,讓一個人同時具備硬件和應用兩套技能,這是很高的要求。其實,即便是只在硬件開發領域,除了應用以外,做系統的和做硬件的也是不同的話語體系,有人關注進程,有人關注晶振;有人關注嵌入式系統,有人關注 PCB。

          讓一個人掌握好所有的東西,難度系數會直線上升。即便有這樣的人,價格也會非常高,而且能找到的人數量也有限。另外,在硬件領域,重復造輪子的現象是很嚴重的。很多東西即便開發者再熟悉,到了一個新的環境可能就要重新做一遍,比如,常見的網絡協議要移植,常見的驅動要編寫。我的這些印象,全部來自一個有20年硬件開發經驗的老法師,他將其稱為血淚史。

          與應用的對接中,硬件開發的過程,基本上是一個瀑布式開發的過程,或者說一個自頂向下的過程,也就是說,把需求確定好了,然后,進入一個開發過程,這個過程往往會持續很長一段時間。從軟件工程的實踐來看,這是一種低效的做法,因為做產品,最重要的是快速反饋,一年前的市場需求和現在的市場需求是不同的。

          所以,在軟件領域有了敏捷、精益等方法論,改善這個過程,最重要的就是迭代的思想,不斷地對產品進行改進。目前市面上很多有想法的人來自互聯網領域,他們習慣了與軟件應用開發者協同工作,所以,他們也更習慣采用迭代的思想進行工作,但同樣的工作邏輯拿到硬件領域幾乎沒辦法行得通。

          舉個例子,

          產品經理希望迭代地看到產品進展,因為他的想法需要反復驗證,而硬件開發者希望確定好需求再來做開發,因為在他的邏輯里,硬件是一旦制成就很難改變了。

          造成這種現象更根本的原因是,是硬件制造商在編寫應用。而應用開發根本就不是硬件制造商擅長的。當我們可以把硬件和應用兩個概念分開之后,我們就會發現,同樣的硬件,在不同的場合下,可以有不同的應用。

          舉例來說,

          • 同樣的飲水機,如果你買了回家,它的應用是統計你家的飲水狀況,提醒你多喝水;

          • 如果把飲水機租回家,它會提醒你按時繳費,保證正常使用。

          硬件上是一樣的,但應用是不同的。解決這個問題最好的辦法就是分工,讓應用開發者只關注應用,硬件制造商只關注硬件。將二者聯系起來,這就是 Ruff 要做的事情。

          為什么是 JavaScript?

          對程序員來說,語言的選擇永遠是宗教戰爭。我們把 Ruff 定位成一個應用開發平臺,所以,選擇做技術選型的時候,盡可能考慮應用開發者熟悉的東西,所以 Ruff 選擇了 JavaScript。

          首先,我們排除了硬件開發者最熟悉的 C/C++,因為 C/C++在多數程序員眼里是系統語言,一旦使用 C/C++,程序員們就會回到系統開發的思路上。

          再次,我們排除的是目前最流行的語言 Java。從受眾的角度考慮,最該考慮的是 Java,這就是 Android 的做法,但在資源受限的硬件上,Java 太重了。

          JavaScript 是一個恰當的語言,原因如下:

          首先,它是一門真正的全平臺語言,可以運行在所有系統上,包括瀏覽器、手機、服務器、客戶端,都有。

          其次,隨著 Node.js 的流行,JavaScript 的社區越來越活躍,許多新想法都是在這個社區內涌現出來的。

          再次,JavaScript 有很多不錯的運行時實現,方便我們開展工作。套用軟件開發社區里的一個 說法:Atwood 定律,所有能用 JavaScript 寫的應用,最終都會用 JavaScript 寫就。

          然而,根因是受眾面,不需要從頭教育市場。所以,Ruff 選擇了 JavaScript。事實上,很多大廠也下水做這個領域,大部分人的選擇也是 JavaScript。

          JavaScript 比 C 語言更有優勢嗎?

          從個人的角度來說,我更愿意比較的是抽象層次,而非簡單的語法。從技術的發展趨勢,我們已經非常清楚地看到,應用開發的抽象層次是越來越高的。

          比如:最開始大家是用機器碼,因為記憶不方便有了匯編,又因為匯編對于不同機型差異太大,而產生了 C 這樣的程序設計語言,再往后,C++提供了面向對象程序設計,給程序組織提供了一種良好的方案。越高的抽象,意味著編寫同樣多的內容用的代碼越少。

          我曾經對比過一個大廠出的 C/C++的硬件應用開發框架,點亮一個板載燈,它寫了大約50行左右的代碼,用 Ruff,我寫了3行代碼,還有2行是框架代碼。

          $.ready(function {

          $('#led-r').turnOn;

          });

          通過這段代碼大家就可以感受到差異,真正的核心代碼只有1行,這就是抽象的價值。

          只使用 JavaScript 能做到怎樣的開發深度?

          JavaScript 語言社區已經提供了許多好的抽象,比如,基于事件的模型。

          Ruff 還建立了自己建立的抽象。比如劃分了驅動開發者和應用開發者,只有驅動開發者需要關心硬件細節,而應用開發者只要關注應用邏輯就好了。

          剛才給大家展示的這段代碼就是一段應用代碼,你根本看不到硬件參數這些東西,這就是分層架構的力量,抽象的力量。此外,Ruff 在設計之初,就考慮了應用測試的問題。用 Ruff 開發的代碼可以在開發機器上把邏輯測試好,再部署到具體硬件板子上。這樣可以防止因為一些低級錯誤,反復燒板子,造成時間上的浪費。

          Ruff 還配套了命令行工具,簡化應用開發和板卡部署,另外還有一個軟件倉庫,可以讓驅動開發者上傳自己的驅動,與社區分享。

          至于實現JavaScript的硬件編程,道理上很簡單:運行一個 JavaScript 引擎,在上面跑 Javascript 的程序。

          從具體的實現上來說,

          第一步:選擇了一個嵌入式 JavaScript 引擎;

          第二部,在一個操作系統上把它運行起來,在其基礎上構建 Ruff,這也是目前對外發行的版本。

          簡單來說,這是從打造最小可行產品(MVP)的思路來做的。Ruff 內部正在研發基于 MCU 的版本,也就是將 JavaScript 引擎直接跑在硬件上。這樣可以更好地解決功耗、實時性等問題。

          Ruff 的未來

          現在,開發者能看到一些開發板,例如:樹莓派、Ardunio 和 Intel Edison。而 Ruff 提供了一個開發框架。另外 Ruff 本身也提供了一套開發套件,這么做的原因是為了讓人盡快上手 Ruff。

          更關鍵的差異在于,這些開發板只能做小應用或是原型,當然,這也是 Ruff 開發套件的現狀。不同的是,我們做 Ruff 的目的不限于此,我們是希望將 Ruff 將來打通到生產環節中。也就是說,一個硬件應用在軟件代碼完全不用修改的情況下,把它用在更真實的設備上,比如 MCU 上。我們很清楚,Ruff 的終點不是開發板,這與其它的開發板目標是截然不同的。

          坦白來講,讓應用開發者意識到自己能夠編寫硬件應用會是比較困難的。很多軟件程序員思考問題的邊界就是硬件,根本不敢想這方面的問題。就像 Android 和 iOS 之前,應用開發者不會覺得自己能寫手機應用一樣。這里面是一個意識的鴻溝,大多數應用開發者并不覺得硬件開發和他們有什么關系。正因為他們覺得硬件應用開發太困難,才會退避三舍。

          對于 Ruff 而言,這是一個教育市場的過程。其實,硬件應用開發其實很簡單:控制你家的電視很簡單,點亮家里的燈也沒那么難。跨越了意識上的鴻溝,再來了解硬件,就不那么困難了。當我們的正式版發布之后,我們會在開發者社區方面投入大量的精力,讓開發者們意識到,他們能做的事情其實更多。

          于Ruff的最新動態

          在1月份,Ruff 推出了少量的公測版套件,定向地發給了一些有興趣的用戶,軟件 SDK 隨公測版發布。大致一個月左右會有一次新的發布。鄭曄表示,正式版在內部的備貨基本上已經完成,五一之后,就會正式開始銷售,更多的開發者就可以嘗試新的開發體驗了。

          Ruff 開發套件購買戳這

          官方網站:ruff.io

          慶假期很適合學習點新知識。前幾天有粉絲在后臺問我關于使用 js 開發后端服務的建議,我給推薦了這一個面向小白的走向全棧開發工程師的教程。

          關于這個全棧入門教程

          這是一個面向零基礎的基于 JavaScript 語言的全棧開發教程,教程基于目前流行的前后端分離開發模式,使用 Vue.js + Node.js 并且通過從實際需求的角度來完成基礎的業務代碼,沒有過多功能封裝,幾乎都是底層的代碼,通俗易懂,上手容易。

          教程截圖

          關于作者

          這套 JavaScript 全棧教程的作者是廖雪峰,是一位有著超過十年軟件開發經驗的大神,精通 Java / Python / Ruby / Visual Basic / Objective C 等,對開源框架有很深入的研究,著有《Spring 2.0核心技術與最佳實踐》一書,是很多后端開發工程師非常熟知的業內大神。

          教程目錄

          因為針對的是對 javascript 零基礎的小白用戶,因此這個教程有很大篇幅是 javascript 語言入門。

          • JavaScript簡介
          • 快速入門
          • 函數
          • 標準對象
          • 面向對象編程
          • 瀏覽器
          • jQuery
          • 錯誤處理
          • underscore
          • Node.js

          學習建議和感想

          這是我毫無后端開發經驗時學習后端開發的入門的教程,這套教程讓我學會了如何使用 javascript 來開發后端 api 接口。而且前面的基礎語法教程,也看得津津有味,復習了很多不會用、不常用但很巧妙的代碼實現。這是我推薦這個教程的最大原因。

          教程截圖

          這個教程除了適合零基礎的小白,我認為這更像一個寫給后端開發者的、從其他后端語言轉 javascript 的教程,如果像我之前學習的那樣沒有過后端開發經驗,就需要注意幾個問題:

          • 教程涉及的代碼最后自己敲出來實現一遍,看懂并不代表會寫
          • 后端開發設計的基礎知識很多,建議提前了解數據庫、服務器基本知識,學習起來會更順暢
          • 教程中很多關聯的代碼片段,拷貝出來配合流程圖來理解,會事半功倍

          入門靠老師,修行靠自己。總的來說,這只是一套非常基礎的入門教程,學完后能夠了解前端開發和后端開發,可以實現簡單的 demo,可以幫助我們學習 koa / egg.js 這類基于 Node.js 的后端開發框架,但后端開發需要學習的知識很多,數據庫設計、查詢優化、架構設計等等,成為一個合格的全棧工程師,路還有很遠。

          教程免費學習說明

          這是一個完全免費的 JavaScript 全棧入門教程,就算完全不懂 js 也能快速入門,在線免費學習。如果想學 js 語法,也可以看看之前推薦過的阮一峰寫的免費 javascript 系統學習入門教程。

          最后祝各位有所收獲,邁進全棧開發工程師行列。

          關注我,持續分享高質量的免費開源、免費商用的資源。

          ↓↓點擊查看本次分享的網址。

          JavaScript 全棧開發入門 - 由廖雪峰提供的面向小白的免費在線教程|那些免費的磚

          avascript 的很多擴展的特性是的它變得更加的犀利, 同時也給予程序員機會創建更漂亮并且更讓用戶喜歡的網站。

          盡管很多的開發人員都樂于頌揚 javascript,但是仍舊有人看到它的陰暗面。

          使用很多 javascript 代碼的 web 頁面會加載很慢,過多的使用 javascript 使得網頁丑陋和拖沓。很快如何有效地使用 javascript 成為一個非常火熱的話題。

          這里讓我們列出 10 個最佳 javascript 實踐,幫助你有效地使用 javascript。

          1、盡可能的保持代碼簡潔

          可能大家都聽到過了N遍這個代碼簡潔問題了。作為一個開發人員你可能在你的代碼開發過程中使用了很多次,但千萬不要在 js 開發中忘記這點。

          • 盡量在開發模式中添加注釋和空格,這樣保持代碼的可讀性
          • 在發布到產品環境前請將空格和注釋都刪除,并且盡量縮寫變量和方法名
          • 使用第三方工具幫助你實現壓縮 javascript。

          2、思考后再修改 prototypes

          添加新的屬性到對象 prototype 中是導致腳本出錯的常見原因。

          yourObject.prototype.anotherFunction = 'Hello';
          yourObject.prototype.anotherMethod = function(){...}
          

          在上面代碼中,所有的變量都會被影響,因為他們都繼承于 yourObject。這樣的使用會導致意想不到的行為。所以建議在使用完后刪除類似的修改。

          yourObject.prototype.anotherFunction = 'Hello'; 
          yourObject.prototype.anotherMethod = function () { … }; 
          test.anotherMethod();
          delete yourObject.prototype.anotherFunction = 'Hello';
          delete yourObject.prototype.anotherMethod = function () { … };
          

          3、Debug Javascript 代碼

          即使最好的開發人員都會犯錯。為了最大化的減少類似錯誤,請在你的 debugger 中運行你的代碼,確認你沒有遇到任何細微的錯誤。

          4、避免 Eval

          你的 JS 在沒有 eval 方法的時候也可以很好的工作。eval 允許訪問 javascript 編譯器。如果一個字符串作為參數傳遞到 eval,那么它的結果可以被執行。

          這會很大的降低代碼的性能。盡量避免在產品環境中使用 eval。

          5、 最小化 DOM 訪問

          DOM 是最復雜的 API,會使得代碼執行過程變慢。有時候 web 頁面可能沒有加載或者加載不完整。最好避免 DOM。

          6、在使用 javascript 類庫之前先學習 javascript

          互聯網充斥著很多的 javascript 類庫,很多程序員都往往使用 js 類庫而不理解負面影響。強烈建議你在使用第三方類庫之前學習基本的 JS 代碼,否則,你就準備著倒霉吧。

          7、不要用 “SetTimeOut” 和 “Setinterval” 方法來作為 “Eval” 的備選

          setTimeOut( "document.getID('value')", 3000);
          

          在以上代碼中 document.getID(‘value’) 在 setTimeOut 方法中被作為字符串來處理。 這類似于 eval 方法,在每個代碼執行中來執行一個字符串,因此會降低性能,因此,建議在這些方法中傳遞一個方法。

          setTimeOut(yourFunction, 3000);
          

          8、[] 比 new Array(); 更好

          一個常犯的錯誤在于使用當需要數組的時候使用一個對象或者該使用對象的時候使用一個數組。但是使用原則很簡單:

          “當屬性名稱是小的連續整數,你應該使用數組。否則,使用一個對象” – Douglas Crockford, JavaScript: Good Parts 的作者.

          建議:

          var a = ['1A','2B'];
          

          避免:

          var a = new Array();
          a[0] = "1A";
          a[1] = "2B";
          

          9、盡量不要多次使用 var

          在初始每一個變量的時候,程序員都習慣使用 var 關鍵字。相反,建議你使用逗號來避免多余的關鍵字,并且減少代碼體積。 如下:

          var variableOne = 'string 1',
           variableTwo = 'string 2',
           variableThree = 'string 3';
          

          10、不要忽略分號 “;”

          這往往是大家花費數個小時進行 debug 的原因之一。

          今天就到這里啦,喜歡編程的小伙伴可以關注我哦!有學習方面的問題可以私信回復:學習!


          主站蜘蛛池模板: 精品视频一区在线观看| 极品人妻少妇一区二区三区| 精品一区二区三区中文字幕| 无码一区二区三区AV免费| 手机看片一区二区| 国产精品美女一区二区| 国产在线乱子伦一区二区| 久久婷婷久久一区二区三区| 国产伦理一区二区三区| 国产精品亚洲一区二区在线观看| 丰满爆乳一区二区三区| 久久99久久无码毛片一区二区| 在线视频精品一区| 成人免费视频一区| 精品欧美一区二区在线观看| 亚洲国产系列一区二区三区| 在线视频一区二区| 一区高清大胆人体| 色狠狠一区二区三区香蕉| 一区二区三区在线|欧| 国产精品日本一区二区在线播放| 制服中文字幕一区二区 | 久久精品无码一区二区日韩AV| 日本免费电影一区| 精品一区二区三区影院在线午夜| 精品国产日韩亚洲一区91| 国产精品综合一区二区三区| 国产伦理一区二区三区| 无码人妻精品一区二区蜜桃AV| 色综合视频一区二区三区| 国产福利一区二区在线视频 | 黑人大战亚洲人精品一区| 日韩综合无码一区二区| 国产在线精品一区二区中文| 无码国产精品一区二区免费式芒果 | 国产亚洲福利精品一区| 精品性影院一区二区三区内射| 国产福利一区二区三区| 在线视频一区二区三区四区| 一区 二区 三区 中文字幕| 国偷自产Av一区二区三区吞精|