本文關鍵字:在資料庫中安裝程式。以資料庫直接為後端托管程式,文檔資料庫管理器直接為雲檔案存儲程式。無backend webapp,在web中開發webapp
大約在很久以前,我開始放棄追求統一化分布式應用程式和本地程式為同一個appstack的努力,這二者之間似乎天然存在鴻溝,像是應用的使用方式決定的,這種人為的界限并不是用來跨越的,拿web來說,它作為一種分布式架構和分布式appstack架構,不能做到像本地GUI程式或硬體加速程式一樣靈活,比如web強調将一切放在broswer端渲染導緻需要采用html5,webgl,js+css html這樣的東西來增強它,這樣它才能稍微像本地程式,一個例子就是用WEB實作的WEBGAME - 這種效率跟本地硬體加速實作下的game完全不是一種路子,WEBGAME的體驗跟傳統PC遊戲的體驗也相似并不相通,因為始終無法在遠端上實作硬體加速還能stream到本地。web在服務端采用http而不是原生tcpip,導緻需要websocket才能做到像主動推送這種原生TCPIP輕松辦到的事。當然還有很多不同。
這不是WEB的錯,WEB最初就是那樣被定義的:它本來就是一種進階的native tcpip程式構成的生态。它的界面是PAGEUI,而PAGEUI是一種應用層的渲染,在伺服器端,WEB程式大都由LAMP,LNMP這樣的東西作backend,這類程式本身,其實是普通的TCPIP程式,并不是某個WEBOS的基礎元件,就像原生程式之于傳統OS實作中的任務機制界面機制一樣,這也就是說,所有的WEBAPP都是有backend的,就是那個lamp中的amp等東西。它們用伺服器的方式組建了一個分布式appstack,定義了一種appmodel,是以曆史上,像WEBAPP+WEBOS這類東西并沒有純的,- WEBAPP是原生界面中采用有限技術打出來的一個點再在這個點建構出的一整個stack生态,是以,WEBOS也是OS上的進階OS而已 -- 本身并沒有WEBOS存在。
在《在tinycolinux上安裝chrome》上我們曾談到相似的概念:chromeos脫離不了它其實就是原生界面(X11,GDI)加一個浏覽器的技術本質,其實并不能與真正嚴肅的OS工程類比 。一個像群晖那樣的APP管理界面就能稱為webos。還有像owncloud,standstorm這種:sandstorm比oc多了xaas的部分。
web作為雲計算負責定義APPSTACK的成份意義比較大,雲計算下的程式無非就是WEB程式,是以雲這種東西,除了虛拟化那一層,在APP生态上,它其實依然沒有屬于自己的東西。依然是進階原生分布式程式的BS化。
那麼,這一切會不會有突破呢?有朝一天,WEB也有自己完全不依賴傳統BS架構的東西呢?變得像一種真正獨立的,由新的東西構成的應用生态呢?而cloudwall也許是另外一種“webapp”:cloudwall的确提出了很多新的耳目一新的東西,它雖然還是面向WEBAPP,不過它其中的一些部分可以作為與傳統WEB迥然不同的部分來産生新的審視,比如它的nobackend設計,它的宣傳語也一針見血:cloudwall,an Operating system for noBackend webapps.如它所言,它甚至提出了一種新的webapp和webappstack,webos雛形---改變了傳統webapp中的大部分。
cloudwall中的couchdb:the only backend as webos部分
首先,它使用了apache couchdb,這是一種直接與WEB接軌的文檔化資料庫,如果我們把我們接下來要談的APPSTACK稱為某WEBOS的appstack的話,那麼couchdb定義了這種appstack的唯一的backend部分,這免去了需要lnmp作backend的需要:這是它獨有的特點支撐了它與lnmp這些東西的某元件明顯存有不同的所在:這種DB是文檔型的,且它nobackend。
couchdb支援直接hosting app并運作,稱為couchdb-hosted webapp,它加一個類似資料庫管理器的東西天然就是一個類OC的雲存儲程式,支援各種cluchdb插件的開發,這就是webapp整個cloudwall就是這樣一個couchdb管理器。
CloudWall is a kind of offline-ready toy in-browser OS, for authoring, storing, and sharing docs and CouchDB-hosted webapps. CloudWall installs via replication and needs only CouchDB and modern HTML5-compliant browser to run. Also CloudWall can run on static hosting, as a set of files.
All CloudWall components run in a browser tab, no server or even internet connection required after system started. Any local DB can eventually sync with external CouchDB instances over http(s). One CouchDB can have several users connected, thus providing shared workspace, docs and applications set.
在我的《appstack series》《app series》系列文章中,我一直在尋求雲存儲程式的選型,我們換過mongdb,postgres,這種程式選型其實說大了就是WEBOS,我們在這些文章中都提出過這樣的企圖和設想。
來看一個這類OS的設計:是否一個app必備一個stack?将它的棧放大到受WEBOS直接支援,那麼這種雲程式背後的OS技術就會明朗化:
實際上,當考慮到一個app要配一個appstack東西的時候,它依賴原生程式appstack定義了自己新的appstack的局限就永遠都避免不了,因為這裡的mongdb,postgres永遠被當成了appstack的dbbackend部分,,,而webapp應該是沒有明顯無backend的:像nativeapp stack一樣,它們應該被內建在某一webos内部被提前解決掉。
而couchdb就是整個用資料庫管理系統來作OS直接管理和存儲WEBAPP的東西(當然它也能天然像其它文檔資料庫一樣直接管理靜态檔案作雲存儲),如果将couchdb像cloudwall一樣作為整個webos,那麼傳統的webapp開發就被定義在這個webos中,cloudwall的四個appstack元件,它們被內建在稱為cloudwall os的webos理念當中。
GDI:Renders HTML and receives user interactions
App runtime:Manages bindings between data and UI controls
CloudWall:Prepares, runs and closes apps, manages app switch
Storage:Stores apps and documents, optionally syncs with external CouchDB instances
而這種開發,已經使webapp開發變得像本地一樣了(無須處理appstack的部分隻須關注app内的事情),我們一直希望得到的效果:webapp像本地一樣以檔案存儲為後端符合像本地應用的習慣,這個目的也達到了。
cloudwall中的inapp editor:語言和開發部分
在《bcxszy series》在所有的努力中,我想得到這樣一種程式和開發方式:不改變原生程式與webapp的大面,使WEB程式變得像本地程式一樣簡單,這樣可以共用本地程式/webapp開發的概念,在模糊appstack方面,這就是cloudwall中的couchdb中談到的,已經被解決。這裡要談到的是與語言開發有關的部分:
可以說,在《bcxszy series》在所有的努力中,我還想促成這樣一種程式和開發方式:源碼即檔案,随處打包再走,直接per app an ide開發,這無論對實用和開發,程式設計自學都是極為便利的。
所幸WEBAPP src 文本化,支援輕量帶走inplace editor是所有WEB程式它的天然優勢,而且雖然一開始WEB程式與本地程式有很多不同,但像WEB标準化,HTML标準化,JS語言标準化這樣的東西,它們其實在走一種聯合化的努力方向,使WEB生态接近本地生态,比如,JS的努力方向也有一種是nativejs:reactos
其實couchdb與web結合緊的另一方面就是js,js是一種能夠真正帶來naitveapp與webapp合一的增強劑,這使得cloudwall支援極度便利化的inappeditor,這樣cloudwall支援下插件的開發就是cloudwall webos下的webapp開發了,它支援用couchdb直接存儲和儲存編輯app開發過程中的檔案。
這樣有了以上這二點,personalcloud應是web os的論據就充份了。在開發體驗上跟本地開發一樣,甚至更簡單。等cloudwall以上二大概念不再局限bs開發時,那麼它就可以是新一代的WEBOS。
這篇文章可以用來豐富《程式設計實踐選型》web的極大化未完的部分,整個文章的思路可以用來作為《bcxszy》part 2實踐部分。如果使用cloudwall的理念,以後《appstack》,《apps》可以整合為《apps》
關注我
(此處不設回複,掃碼到微信參與留言,或直接點選到原文)
