丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網賬號安全和更好的產品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預覽,將在時失效
政企安全 正文
發(fā)私信給史中
發(fā)送

2

JavaScript 也可以搞定嵌入式開發(fā)? | 雷鋒網公開課

本文作者: 史中 2016-04-25 17:30 專題:雷峰網公開課
導語:Ruff 可以允許開發(fā)者用普及的 JavaScript 語言進行嵌入式開發(fā),他們究竟是怎么做到的呢?


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

JavaScript 也可以搞定嵌入式開發(fā)? | 雷鋒網公開課

【Ruff CTO 鄭曄】

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

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

何謂 Ruff?

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

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

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

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

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

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

硬件應用開發(fā)的門檻有多高?

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

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

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

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

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

舉個例子,

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

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

舉例來說,

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

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

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

為什么是 JavaScript?

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

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

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

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

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

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

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

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

JavaScript 比 C 語言更有優(yōu)勢嗎?

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

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

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

$.ready(function() {

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

});

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

只使用 JavaScript 能做到怎樣的開發(fā)深度?

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

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

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

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

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

從具體的實現上來說,

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

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

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

Ruff 的未來

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

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

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

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


于Ruff的最新動態(tài)

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

Ruff 開發(fā)套件購買戳這

官方網站:ruff.io

雷峰網原創(chuàng)文章,未經授權禁止轉載。詳情見轉載須知

分享:
相關文章

編輯

雷鋒網編輯,關注科技人文,安全、黑客及芯片。
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經綁定,現在您可以設置密碼以方便用郵箱登錄
立即設置 以后再說