比人工智能更可怕的代碼
每家初創企業都在談論如何改變世界
但其中大部分根本不會討論世界本身或者說存在于其中的物理事物
很多企業只是單純打算交換數據庫中的數據包與位置——雖然這一切也很重要
但字節本身并沒有意義
畢竟這個世界是由原子組成
字節與原子之間的障礙正在逐漸消失,歸功于物聯網的迅猛發展,如今程序員已經不再被局限于虛擬世界當中。如今,我們能夠超越向磁盤寫入1與0的傳統作法:我們可以切實通過編寫代碼告訴設備如何掠奪、剪切、扭曲或者變更原子形態。現在,我們的軟件能夠開啟燈光、變更室內外觀、駕駛汽車以及移動墻壁等等。
Basic
作為經典編程語言之一,Basic以部分簡單硬件控制器為基礎直接推動了早期微型計算機革命。那些制作出ESP8266控制器主板的技術人員使用的正是Basic語言,因為正如他們所言,這是“一款簡單但卻非常強大的語言,允許大家在無需計算機科學學位的前提下實現令人驚嘆的成果。”
其中包含所有經典結構,包括一些古董級成果:goto。不過其中也包含一部分用于提取網絡頁面或者發送電子郵件的新命令。但必須承認,在使用Basic時我們的大部分時間都將被用于調整接口以收集需要被發送至互聯網的數據。
要獲取更多相關信息,大家可以參閱ESP8266社區或者該語言的專門網站。
X10
X10是首款允許程序員擺脫虛擬世界并觸及真實世界的工具。X10從來不是一種復雜或者難于理解的協議,這可能是因為其誕生時間為1975年——比沃茲尼亞茨與喬布斯推出Apple I還早一年。盡管已經相當老邁,但X10仍然具備極高人氣,因為目前還有著大量低成本設備對其提供支持。
該協議只提供一部分主要消息收發功能。大家可以向開關發送幾個字節,并借此實現開關開、閉以及亮度調節。就這么多。除此之外,大家可以利用其它一些選項輪詢遠程開關并嵌入更多數據,但其大部分功能似乎仍是打開與關閉之類的簡單操作。這些數據包可上行至家庭環境下的120伏供電線路,且必須通過由X10制造的FireCracker等獨立設備來生成。
包括Flipit與Bottle Rocket在內的多種軟件項目致力于簡化與FireCracker的協作流程。當然,大家也可以直接選擇最為原始的解決方案——X10,該公司自1978年就一直在推出家庭功能控件。
Zigbee、Z-Wave以及更多
X10與Insteon所觸及的還僅僅是表面。另有多種解決方案能夠將信號發送至設備——一部分通過供電線路,也有一部分以無線形式傳輸。Zigbee與Z-Wave都屬于設備間的低功耗無線通信標準,尤其適用于需要在企業或者家庭環境中相互通信的低功耗嵌入式傳感器及處理器。
舉例來說,Zigbee最近剛剛發布公告,宣稱開始在超市中實驗溫度傳感器以實現農產品監測,從而確保部分水果與蔬菜處于最佳保存環境。Z-Wave則在其官方網站中介紹了一款能夠通過無線按鈕幫助年老或者體弱用戶遭遇困境時進行呼救的“家庭尊嚴”設備。目前這類應用方案已有數百種,其每次執行只需發送數比特數據即可完成任務。
Zigbee與Z-Wave并非惟一的執行標準。這份日漸龐大的名單中還包括Panstamp、AMX、KNX、Lutron以及更多。其中一部分屬于利基型方案:以AMX為例,其專注于音響設備以強化會議室效果。Panstamp則面向遍布于世界每個角落的小型無線控制器。它們都擁有自己的格式,但卻可以通過編程方式實現交互。標準間的競爭可能令程序員們感到困惑,不過這畢竟要比不存在標準好得多。
XBMC、Freebox以及更多
如果說有人能夠坐在沙發上邊看著白癡電視節目邊改變世界確實有些夸張,但可以肯定的是,數字化圖像、視頻以及音頻確實打破了傳統娛樂方式的束縛。以XBMC、Freebox以及VLC為代表的各類協議與框架原本被設計將填鴨式視頻提供給躲在沙發中的無聊人士,但其如今也能夠為整棟房屋乃至建筑物做出貢獻。
這些視聽設備從表面上看似乎與改變世界沒有任何關系,因為它們在很大程度上只是在處理數字化內容文件——不過必須強調的是,隨著平板顯示器的普及程度越來越高,它們的作用也在逐步凸顯。舉例來說,時代廣場周邊的建筑物就能夠根據屏幕上的顯示內容不斷變更外觀。更多屏幕意味著數字化內容絕僅僅是大家手機上的顯示素材,這同時也是一種轉變建筑物或者室內效果的有效途徑。
PostScript
很多人并不理解在PDF文件內存儲數據或者將文本頁面內容發送至打印機時所使用的數據結構的復雜性水平。事實上,PostScript文件中的數據并非簡單的數字排列,而是一整套由字母、線條、數字以及圖形構建而成的頁面勾勒體系。該語言能夠沿直線或者貝塞爾曲線移動筆劃,而后對生成的圖形進行填充。各種字體也不單純屬于位圖,而是復雜曲線的集合,從而輕松以亞像素精度進行縮放或者位移。
該語言本身屬于上世紀七十年代的神器,其基于堆棧的語法能夠顯著降低括號的使用頻率。任何曾經使用過惠普計算器的朋友都會在PostScript中找到熟悉的感覺。該語言由圖靈設計完成,而人們則通過編寫PostScript代碼進行復雜的分形計算及其它古怪的任務——哦,當然還有開發病毒。
時至今日,該語言的人氣往往略遜于SVG,這是因為此種XML變體能夠在Web之上得到廣泛支持。不過二者的底層結構非常相似,而且代碼轉換也非常簡單。這兩款語言都能夠通過PSToEdit等多種軟件包被轉換為其它代碼格式,從而驅動激光切割機以及銑床設備。
OBD-II
多年以來,汽車只不過是由油箱、活塞、齒輪組外加后輪曲軸共同構成的簡單機械。然而如今的汽車已經成為大量計算機制構建而成的復雜網絡,只不過恰好還是配備四條輪胎。ODB-II標準是人類與汽車進行互動,并借此了解當前車輛運轉狀況的重要接口。
大部分游走于計算機與汽車之間的代碼都屬于純粹的信息。舉例來說,我們可以向傳動輪端口發送部分字節,從而由其返回當前時速信息。類似的代碼還可以實現RPM、引擎效率乃至數十種其它指標的查詢。像Torque這樣的多數基礎應用都需要通過OBD-II端口對車輛進行追蹤。
這類應用在業余賽車手以及汽車愛好者群體中極具人氣,但它們也完全能夠服務于普通民眾。ArduinoOBD庫就是一種很好的選項,可以幫助大家將自己的計算機與車輛相對接。
G
計算機數字控制,簡稱CNC,最初于上世紀五十年代出現在銑機設備之上,而工程師們隨后很快開發出G語言——專門用于操控切割工具的移動方式。整個流程在初次接觸時可能有點反直覺的意味,因為從代碼控制角度出發,其實現的是從當前材料上切掉某些部分而非添加某些部分。不過一旦我們習慣了立足于最終結果逆向審視設計思路,大家就可以想象出如何移動切割刀并去除不需要的部分。
大部分編碼工作涉及選定坐標系,同時安排切割刀移動到特定位置。這些設備往往能夠“插補”并計算直線或者圓的中位點,從而簡化簡單形狀的創建方式。不過對于復雜的形狀,我們仍然需要采取一些特定規劃。
隨著多年以來各家制造商向其中添加強化元素,G語言的性質也出現了顯著變化。很多目前被廣泛使用的現代化宏以及面向對象層都會經過編譯為原始G代碼并發送至設備當中。
目前,G語言的一類變體將用于驅動多種3D打印機。雖然變體與本體所使用的具體代碼有所區別,但其核心語言卻從未發生改變。
STL
這種用于描述3D對象的標準格式已經成為3D打印領域的通用語言。在線商店通過交付STL文件出售虛擬對象,大家可以對其進行編輯或者直接發送至3D打印機。
這種語言本身可以說相當基礎。文件的大部分內容為用于覆蓋物體表面的刻面三角形角部三維坐標。雖然該格式似乎能夠支持更為復雜的多邊形,但文件本身傾向于使用傳統三角形。另外,盡管與構建3D對象的基本要求有所沖突,但這種文件格式本身并不強制要求三角形完全覆蓋對象或者定義所述表面的每個部分。
STL文件能夠容納點或者二進制版本的ASCII表達內容,不過大多數文件都選擇使用二進制版本——因為其更為緊湊。
Python
Python語言在生物實驗室、社交科學中始終牢牢占據人氣榜首,甚至在Raspberry Pi社區中被稱為“官方語言”。后面這種說法有點夸張,因為Raspberry Pi單片機通常直接引導Linux,而大多數Linux代碼庫也都能夠運行在該單片之上,不過需要直接面向ARM(v6或者7)架構進行編譯。
不過,Python仍然擁有諸多既有優勢。它作為一種高級語言擁有簡潔的語法與相當寬松的數據傳遞規則。程序員們并不需要深陷抽象的泥潭,例如面對復雜的指針規則。相反,他們只需要編寫一套指令集以處理數字,并利用這些值以指示Raspberry Pi進行哪些操作。
Raspberry Pi社區提供豐富的說明文檔以幫助大家從零開始學習Python。
Processing
機器人與真實世界當中充滿了使用Arduino語言——屬于C與C++子集——的單片機。不過很多程序員希望事件能夠更為簡單,這也是該語言Processing這一名稱的由來。這是一套經過簡化的Java子集,保留了相當一部分較為粗放的類細節規則,同時添加了部分標準方法以幫助獲取結果及切換開關。Java程序員們可能會對Processing在陳舊AWT Applet以及Frame上的表現非常滿意,不過大多數人只是單純希望編寫幾個循環并變更代碼。
Processing代碼通常運行在主機計算機之上,并由其向Arduino發送指令——Arduino則運行Firmata等本地解釋器。開發工作立足于主機設備,不過具體任務則在Arduino之上完成。
Processing亦在移動應用開發場景中發揮著巨大作用,并憑借著利用JavaScript編寫而成的Processing衍生版本而在Web應用開發領域站穩了腳跟。卡恩學院目前正使用其進行計算機編程授課。