YodaOS: 一個屬于 Node.js 社區的操作系統

開發四年只會寫業務代碼,分布式高并發都不會還做程序員? >>>??hot3.png

大家好,很開心在這里宣布 YodaOS開源了。他將承載 Rokid 4年以來對于人工智能和語音交互領域的沉淀,并選擇 Node.js 作為操作系統的一等開發公民,全部開放給社區。

YodaOS(YODAOS)的架構跟 Android 類似,從下至上,由 Linux Kernel、系統服務和應用框架組成。不過 YodaOS 有以下不同:

  • 開發者可以直接使用 JavaScript / Node.js 來開發本地應用(技能);

  • 封裝了 AI 抽象層,可以通過 JavaScript 直接調用到諸如語音激活、語音識別、人臉識別等接口;

除了支持默認的 Node.js API 外,YodaOS?還提供:

  • 內置的語音激活和語音識別 API,真正做到了開箱即用(開發)的語音交互系統;

  • 對音量控制、電源管理、藍牙、多媒體播放、LED 燈效和 OTA 等都進行了接口封裝;

  • 對物聯網開發者來說,內置了標準化的 WebSocket、MQTT 等物聯網協議的客戶端實現;

YodaOS 也支持?npm 倉庫,開發者可以根據自己的需要在 OS 中運行所需的模塊,不過并不推薦使用一些實現起來很重的模塊,因為 YodaOS 需要支持中低端設備,所以有時候也需要考慮到性能方面的因素。

如果遇到一些 npm 倉庫確實實現很重,但又不得不用的時候,在 YodaOS 上,我們一般的做法是使用 N-API 橋接 C/C++ 模塊,然后保證 JavaScript API 與對應的 npm 包一致。

同時借助于 N-API,開發者可以將任何 Linux 的庫移植到 YodaOS上,并通過 N-API 以 JavaScript API?方式使用,可以這么理解,N-API 之于 YodaOS,就像 JNI 之于 Android。

為什么是 Node.js

前面提到了 YodaOS 選擇擁抱 Node.js和 Node.js 開發者,最大的一個原因就是在過去將近10年的時間,從最開始 Ryan Dahl?定義的,一個輕量級的 Web 服務器框架,到如今的 Express、Loopback、Koajs、Midway 和 Egg?Framework,在 Web 服務器框架領域已經漸漸成熟。

依托于 Node.js 提供的運行時,從 Grunt、Gulp?到現在的 Webpack和 Parcel,在構建工具領域,社區也不斷涌現出非常卓越的開源項目來。Node.js 正在發揮每位開發者的想象力,社區中幾乎有你需要的一切,甚至于在社區中,有一句流傳已久的名言:

any application that can be written in JavaScript,will eventually be written in JavaScript ??——?Atwood’s Law

意思就是說,只要能被 JavaScript 來編寫的程序,終將使用 JavaScript 實現。那為什么不用 JavaScript 來寫一個操作系統呢?

當然上面的只是一個有趣的引子,Rokid 真正想做的是讓 Node.js 開發者能夠以更低的門檻進入語音交互和嵌入式領域。

Node.js 與 ShadowNode

YodaOS 雖然跟 Android 的架構相似,不過解決的問題,及目標設備并不盡然相同,對于現在越來越便宜的手機,Android 開發者幾乎不用擔心系統性能的問題。然而對于像智能音響、IoT 終端以及其他嵌入式設備,通常硬件資源都是非常緊缺的,在這種情況下,OS 就要解決開發者“既要節省資源、又要便于開發”的問題。

于是針對中低端硬件產品(內存介于 128MB 到 256MB 之間),我們創造了 ShadowNode來解決這個問題,它是 Rokid 基于三星 IoT.js 二次開發的一款 Node.js 運行時,它具備更快的啟動速度和更低的資源占用,相比 IoT.js,它:

  • 提供了更好的錯誤棧信息和性能調試工具;

  • 支持了基于 N-API 的跨運行時模塊執行;

  • 針對特定芯片的性能優化,比如 AmLogic A113和 Kamino18;

借助于 N-API的 ABI 兼容特性,我們實現了 OS 上層框架和應用的運行時兼容性。比如開發者完全可以選擇在更高級的設備上運行 YodaOS,此時內存和 Flash 不再是瓶頸,開發者只需要更換系統中的 Node.js 運行時,即可獲得更快的執行速度,不需要修改一行上層代碼。

最后

我們希望借助 YodaOS,為 Node.js 社區補全終端開發這一版圖,讓我們用這門親切的語言,再次回到我們熟悉的“端”的開發。

如果想一起加入 YodaOS,可以在 GitHub 上關注我們,項目地址:https://github.com/yodaos-project/yodaos。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252447.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252447.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252447.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android頂部粘至視圖具體解釋

不知從某某時間開始,這樣的效果開始在UI設計中流行起來了。讓我們先來看看效果:大家在支付寶、美團等非常多App中都有使用。要實現這個效果,我們能夠來分析下思路:我們肯定要用2個一樣的布局來顯示我們的粘至布局。一個是正常的、…

在實際項目開發中keil的調試方法

轉載2015-06-14 20:23:04 一.在keilc的調試狀態下,如何觀察各個片內外設的運行狀態?如何修改它們的設置?? 在調試狀態下,點擊Peripherals菜單下的不同外設選項命令,就會顯示或隱藏對應外設的觀察窗口。 在程序運行時&…

slam 常用數據集的幀率

1. kitti數據集的幀率約約為10fps,圖像分辨率為1241x376 2. Euroc數據集的幀率約為20fps,圖像分辨率為752x480 3.TUM數據集的幀率約為30fps, 圖像分辨率為640x360 zed相機獲取的HD圖像的分辨率為1280x720p,獲取的VGA圖像分辨率為672x376,mynt相機獲取的VGA圖像的分辨率為640x…

小李飛刀:用python刷題ing....

叨逼叨 默認每天都要刷兩道題。今天目標已完成。 第一題 26. 刪除排序數組中的重復項難度:簡單類型:數組 給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。不要使用…

【Log4J】

學習mybatis中用到了Log4J 在此記錄下 引入 引入Maven配置 <!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></de…

VI-ORB環境配置

參考博客:https://blog.csdn.net/qq_38589460/article/details/82559816 https://blog.csdn.net/Robot_Starscream/article/details/90245456 本機安裝的是opencv3.0 在Examples/ROS/ORB-VIO以及/VI-ORB/src/LearnVIORB-RT下的CMakeLists.txt都要進行修改 將find_package(O…

.NET Core 3.0中的數據庫驅動框架System.Data

雖然沒有得到很多關注&#xff0c;但System.Data對于.NET中任何關系型數據庫的訪問都至關重要。因為其前身是ActiveX Data Objects&#xff0c;所以它也被稱為ADO.NET。System.Data提供了一個通用框架&#xff0c;是構建.NET數據庫驅動程序的基礎。該框架提供了數據庫驅動可以遵…

linux vg lv pv

pv由物理卷或者分區組成 pv可以組成一個或者多個vg vg可以分成多個lv 方便擴展 pvs vgs lvs 可以查看當前存在的pv vg lv 我的centos硬盤20g 使用了一段時間 加了100g 這時候 我們可以使用擴展來擴展我們的分區大小 查看自己擁有多少個硬盤 ls /dev/sd* | grep -v [0-9] …

mynt product model: D1000-IR-120標定相機和IMU外參

1. 首先是安裝相應的mynt SDK. http://www.myntai.com/mynteye/depth小覓官網,在sdk下拉菜單中點擊MYNT EYE Depth SDK,然后選擇Linux Installation安裝安裝步驟說明一步步的安裝,安裝sample后,測試一下安裝是否成功.我的電腦上安裝了ROS,所以可以點擊上面第一幅圖中的ROS Ins…

吉林省第二條國際鐵路聯運大通道“長琿歐”啟動測試

29日&#xff0c;吉林省第二條國際鐵路聯運大通道“長琿歐”在俄羅斯啟動測試。吉林省商務廳供圖 29日&#xff0c;吉林省第二條國際鐵路聯運大通道“長琿歐”在俄羅斯啟動測試。吉林省商務廳供圖 中新網長春1月29日電 (郭佳)記者29日從吉林省商務廳獲悉&#xff0c;該省第二條…

使用Ajax解析數據遇到的問題

數據格式 我最近在使用JQuery的$.ajax訪問后臺的時候&#xff0c;發現竟然無法解析返回的數據&#xff0c;具體的錯誤記不清了(以后在遇到問題先截個圖)&#xff0c;可以在瀏覽器的Console中看到一個錯誤&#xff0c;但是去看這條請求是有數據返回的&#xff0c;所以剛開始我一…

49、劍指offer--把字符串轉換成整數

題目描述將一個字符串轉換成一個整數&#xff0c;要求不能使用字符串轉換整數的庫函數。 數值為0或者字符串不是一個合法的數值則返回0 輸入描述:輸入一個字符串,包括數字字母符號,可以為空輸出描述:如果是合法的數值表達則返回該數字&#xff0c;否則返回0輸入例子:2147483647…

Git丟棄修改

Git是如何跟蹤修改的&#xff1f;我們之前修改文件后都用到了兩個命令git add <file>、git commit&#xff0c;其實在Git中&#xff0c;每次修改后&#xff0c;如果不add到暫存區&#xff0c;那就不會加入到commit。 查看一下文件內容&#xff1a; 在其中添加一行記錄…

隱藏界面沒有必要應用場景

轉載于:https://www.cnblogs.com/zengsf/p/8366572.html

mynt product model: D1000-IR-120標定相機和IMU外參之二

1. 在之一中使用kalibr標定mynt相機和內置imu的外參數,使用的是720p,30fps的雙目圖像和200hz的imu數據,標定結果誤差比較大,這一次我們改用480p,60hz的雙目圖像和200hz的imu數據進行標定,需要在mynt_sdk中的mynteye.launch中進行如下修改. 默認獲取圖像的2560x720,30fps&#…

AODp

一、AOP是OOP的延續&#xff0c;是&#xff08;Aspect Oriented Programming&#xff09;的縮寫&#xff0c;意思是面向切面編程。 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;作為面向對象編程的一種補充&#xff0c;廣泛應用于處理一些具有橫切性質的…

[洛谷P4174][NOI2006]最大獲利

題目大意&#xff1a;同Petya and Graph&#xff0c;數據范圍改成$n\leqslant5\times10^3,m\leqslant5\times10^4$ 題解&#xff1a;同上 卡點&#xff1a;無 C Code&#xff1a; #include <algorithm> #include <cstdio> #define maxn 5010 #define maxm 50010 co…

使用ros發布UVC相機和串口IMU數據

&#xff11;&#xff0e;目的&#xff1a;為了可以標定普通USB相機和固定在相機上的外置IMU的外參,我希望通過ROS獲取更高分辨率和更高頻率的圖像數據,并且可以將圖像和imu的topic發布出來,直接使用rosbag record錄制話題數據,寫入bag文件,這樣獲得的bag文件直接可以用于相機和…

API自動化測試利器——Postman

自從開始做API開發之后&#xff0c;我就在尋找合適的API測試工具。一開始不是很想用Chrome擴展&#xff0c;用的WizTools的工具&#xff0c;后來試過一次Postman之后就停不下來了&#xff0c;還買了付費的Jetpacks。推出Team Sync Beta之后我又把這個工具推廣給團隊&#xff0c…

gcc,cc,g++,CC的區別

***gcc是C編譯器&#xff1b; ***g是C編譯器&#xff1b; ***linux下cc一般是一個符號連接&#xff0c;指向gcc ***gcc說明 1.gcc編譯常用格式&#xff1a; gcc C源文件 -o 目標文件 或 gcc -o 目標文件 C源文件 或 gcc C源文件 最后一種情況產生的目標文件默認為a.out 2.gcc…