您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

facebook開源的混淆工具(程序員為什么要學深度學習)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-16 01:57:15【】4人已围观

简介Facebook開源的C++網絡庫wangle和Boost.Asio有何異同喜歡一個人是無罪的,可是他有家庭了,做為一個好女人就不要去插足他的家庭讓兩個家庭都受傷,可以把這份愛放到心里,總會遇到那個真

Facebook 開源的 C++ 網絡庫 wangle 和 Boost.Asio 有何異同

喜歡一個人是無罪的,可是他有家庭了,做為一個好女人就不要去插足他的家庭讓兩個家庭都受傷,可以把這份愛放到心里,總會遇到那個真正屬于自己的人,我們不要為了自己而去傷害別人,你會幸福的

web前端開源框架有哪些

目前常用的一些開源前端的框架如下:

1. Bootstrap

Boostrap絕對是目前最流行用得最廣泛的一款框架。它是一套優美,直觀并且給力的web設計工具包,可以用來開發跨瀏覽器兼容并且美觀大氣的頁面。它提供了很多流行的樣式簡潔的UI組件,柵格系統以及一些常用的JavaScript插件。

Bootstrap是用動態語言LESS寫的,主要包括四部分的內容:

腳手架——全局樣式,響應式的12列柵格布局系統。記住Bootstrap在默認情況下并不包括響應式布局的功能。因此,如果你的設計需要實現響應式布局,那么你需要手動開啟這項功能。

基礎CSS——包括基礎的HTML頁面要素,比如表格(table),表單(form),按鈕(button),以及圖片(image),基礎CSS為這些要素提供了優雅,一致的多種樣式。

組件——收集了大量可以重用的組件,如下拉菜單(dropdowns),按鈕組(button groups),導航面板(navigation 買粉絲ntrol)——包括:tabs,pills,lists標簽,面包屑導航(breadcrumbs)以及頁碼(pagination),縮略圖(thumbnails),進度條(progress bars),媒體對象(media objects)等等。

JavaScript——包括一系列jQuery的插件,這些插件可以實現組件的動態頁面效果。插件主要包括模態窗口(modals),提示效果(tool tips),“泡芙”效果(popovers),滾動監控(scrollspy),旋轉木馬(carousel),輸入提示(typeahead),等等。

Bootstrap已經足夠強大,能夠實現各種形式的 Web 界面。為了更加方便地利用Bootstrap進行開發,很多工具和資源可以用來配合使用,下面列舉了其中的一部分工具和資源。

jQuery UI Bootstrap —— 對于jQuery和Bootstrap愛好者來說這是個非常好的資源,能夠把 Bootstrap的清爽界面組件引入到jQuery UI中。

jQuery Mobile Bootstrap Theme —— 和上面提到的jQuery UI主題類似,這是一個為jQuery mobile建立的主題。如果你想讓用Bootstrap開發的網站在手機端也可以優雅訪問,那么這個資源對你來說很方便易用。

Fuel UX —— 它為Bootstrap添加了一些輕量的JavaScript控件。Fuel UI 安裝,修改,更新以及優化都很簡單方便。

StyleBootstrap.info —— Bootstrap提供了自己的幾種界面風格,StyleBootstrap提供了更多的配色選項,并且你可以給每個組件都應用不同的配色。

BootSwatchr —— 利用這個工具你可以立刻查看主題修改后的效果。對于每一次變動的效果,這個應用都會生成一個唯一的URL方便你與他人分享,你也可以在任意時刻修改你的主題。

Bootswatch —— 提供大量免費的Bootstrap主題。

Bootsnipp —— 在線前端框架交互組件制作工具,是一個供給設計師和開發者的基于Bootstrap HTML/CSS/JavaScript 架構的免費元素。

LayoutIt —— 通過界面拖放生成器簡便快捷地創建基于Bootstrap的前端代碼。通過拖放動作將Bootstrap風格的組件加入到你的個人設計里并且可以方便地修改他們的屬性,簡單便捷。

2、flex

Apache基金會發布了Flex 4.8版本,這是Adobe將Flex捐獻給Apache基金會后發布的第一個版本

需要注意的是

2014年03月10日,Apache Flex技術社區發布了全新的Apache Flex 4.12.0版本,該版本是Apache Flex 4.11.0的升級版本,改進的功能包括:

◆支持最新版本的Flash Player

◆支持最新的AIR運行時

◆改進了內存占用和性能

◆改善了針對移動平臺的組件的樣式

◆支持iOS7系統

◆修復了超過80個漏洞[4]

2014年05月10日,Apache對4.12.0版本進行優化改進,發布了Flex 4.12.1,新版本加入對全新Flash Player及Air運行時的支持,改進對移動媒體查詢的支持,并修復20多個Bug。

3、easyui

easyui幫助你構建你的web應用更加容易。

它是一個基于jquery的插件,開發出來的一套輕量級的ui框架,非常小巧而且功能豐富。

但是她有一個最大的問題就是代碼只能找到以前的開源的版本,到了1.2以后的版本源代碼都是經過混淆的,如果遇到問題修改起來會非常麻煩!不過一個比較大的優勢是開源免費,并且界面做的還說的過去!

4、jQuery UI

jQuery UI 是一套 jQuery 的頁面 UI 插件,包含很多種常用的頁面空間,例如 Tabs(如本站首頁右上角部分) 、拉簾效果(本站首頁左上角)、對話框、拖放效果、日期選擇、顏色選擇、數據排序、窗體大小調整等等非常多的內容。

功能非常全面,界面也挺漂亮的,可以整體使用,也可以分開使用其中的幾個模塊,免費開源!

5、DWZ

DWZ富客戶端框架(jQuery RIA framework), 是中國人自己開發的基于jQuery實現的Ajax RIA開源框架.

設計目標是簡單實用,快速開發,降低ajax開發成本。

歡迎大家提出建議,我們將在下一版本中進一步調整和完善功能.共同推進國內整體ajax開發水平。

畢竟是國產的,支持一下,而且源碼完全公開,可以選擇一下!不過性能怎么樣不敢確定!

6、GWT

你不用去了解這樣那樣的javascript框架,通過java你就可以寫出功能豐富的界面,可以做單元測試,畢竟是google的產品,嚴重支持一下!

7、YUI

Yahoo! UI Library (YUI) 是一個開放源代碼的 JavaScript 函數庫,為了能建立一個高互動的網頁,它采用了AJAX, DHTML 和 DOM 等程式碼技術。它也包含了許多 CSS 資源。使用授權為 BSD許可證,基本上沒怎么研究過!

YUI Compressor倒是挺出名的,這套UI庫不知道應用的情況怎么樣!

10、Sencha

Sencha 是由 ExtJS、jQTouch 以及 Raphael 三個項目合并而成的一個新項目。

大公司的框架,并且是幾樣庫的強強聯合,值得推薦!

8、Dojo

在國內應用好像不是很廣,不過性能上應該沒問題。

Dojo是一個用javascript語言實現的開源DHTML工具包。

有多個基金會的支持,包括IBM和SUN,都是軟件界的泰斗,值得信賴!

9、ZK

ZK是 一套以 AJAX/XUL/Java 為基礎的網頁應用程式開發框架,用于豐富網頁應用程式的使用接口。最大的好處是,在設計AJAX網絡應用程式時,輕松簡便的操作就像設計桌面程式一樣。 ZK包含了一個以AJAX為基礎、事件驅動(event-driven)、高互動性的引擎,同時還提供了多樣豐富、可重復使用的XUL與HTML組件,以 及以 XML 為基礎的使用接口設計語言 ZK User-interfaces Markup Language (ZUML)。

功能豐富,全面,文檔齊全,而且升級了很多次,非常值得推薦!

10、OperaMasks-UI

OperaMasks- UI是OperaMasks團隊 2011下半年打造的一款輕量級前端JS組件庫,旨在提供一款學習曲線低、定制性靈活、樣式統一,且多瀏覽器支持、覆蓋企業業務場景的前端 JavaScript UI組件庫。目前,該團隊已將這一產品以LGPL 開源協議開放給社區。

文檔豐富,功能齊全,而且很容易使用和開發!而且是國產的喲!

11、JavaFX

Sun 公司(已于2009年被Oracle公司收購)在2008年12月05日發布了JavaFX技術的正式版,它使您能利用 JavaFX 編程語言開發富互聯網應用程序(RIA)。JavaFX Script 編程語言(以下稱為JavaFX)是Sun微系統公司開發的一種declarative, statically typed(聲明性的、靜態類型)腳本語言。JavaFX技術有著良好的前景,包括可以直接調用Java API的能力。因為 JavaFX Script是靜態類型,它同樣具有結構化代碼、重用性和封裝性,如包、類、繼承和單獨編譯和發布單元,這些特性使得使用Java技術創建和管理大型程序 變為可能。

HTML5定稿了 為什么原生App世界將被顛覆

2007 年 W3C (萬維網聯盟)立項 HTML5,直至 2014 年 10 月底,這個長達八年的規范終于正式封稿。

過去這些年,HTML5 顛覆了 PC 互聯網的格局,優化了移動互聯網的體驗,接下來,HTML5 將顛覆原生 App 世界。這聽起來有點危言聳聽,但若認真分析 HTML5 的發展史,你會發現,這個世界的發展趨勢確實就是這樣。

熟知歷史才能預知未來,先讓我們來看看 HTML5 為什么誕生、這 8 年是怎么過來的。

一、 HTML5 的誕生

自 W3C 于 1999 年發布 HTML4 后,Web 世界快速發展,一片繁榮。人們一度認為 HTML 標準不需要升級了。一些致力于發展 Web App 的公司另行成立了 WHATWG 組織,直到 2007 年,W3C 從 WHATWG 接手相關工作,重新開始發展 HTML5。

HTML5 的發展史,有用戶的需求在推動,有技術開發者的需求在推動,更有巨大的商業利益在推動。

在互聯網的早期,對用戶而言,能打開瀏覽器接入到互聯網世界就是一個神奇的事情,但互聯網發展到 2005 年前后,開始出現下一個變化,就是寬帶互聯。

隨著寬帶的普及和電腦性能的增強,人們不再滿足于單純的通過互聯網看新聞、收發郵件,消耗更高帶寬的娛樂產品開始出現,就是流視頻和網頁游戲。其實視頻和游戲是古老的需求,在互聯網不普及的時候,需求的滿足方式是離線傳輸的 VCD 和游戲光盤;后來互聯網逐漸普及,人們更改了使用方式,通過下載軟件+本地媒體播放器來看視頻,下載體積較大的端游玩游戲。

但是對消費者體驗更好的新方式還是出現并顛覆了以前的一切,那就是流媒體和網頁游戲。Youtube 等公司把握住潮流飛速崛起,各種頁游公司也如雨后春筍。

但是 HTML 標準沒有把握住產業的變化及時演進,瀏覽器產品也未升級,這塊新需求被瀏覽器插件滿足了,那就是 Flash。這個部署在億萬瀏覽器里的商業插件儼然成為事實標準。2005 年 Adobe 巨資收購 Macromedia,把 Flash 收歸旗下,緊接著大幅推廣 FLV 流媒體和 action script 語言,很明顯這樁收購可以列為 IT 并購的經典案例,FLV 流媒體和 Flash 游戲風靡互聯網,Adobe 在新的產業升級中攫取了大量的利潤。

除了 Flash 這個商業產品成為了事實標準,W3C 還面臨一個尷尬,就是另一個私有擴展協議的制造者—IE。IE 當時在桌面瀏覽器占有壟斷地位,并且擴展了大量的 IE Only 語法,開發者完全不知道這些語言是誰定義的。整個 web 世界,就被兩家公司微軟 +Adobe 綁架了。

很多 IT 巨頭都坐不住了,尤其是蘋果和 Google。PC 操作系統的世界難有突破,Web 瀏覽器被蘋果寄予厚望,而且第一代 iPhone 只支持網頁,那時還沒有 Appstore,Safari 是喬布斯非常看重的產品;新貴 Google 雖然大量贊助 Mozilla,但并未對 IE 的地位產生實質影響,收購了 YouTube 后發現底層被 Adobe 控制,也是非常難過,而且 Google 每年給 IE 的搜索框和 Adoble FLV 繳納的費用真不是小數目。

既然大家都是 W3C 的主席單位,好吧,我們重新開始做 HTML5 吧。

是的,HTML5 其實就是這么誕生的。那是 2007 年,IE 和 Flash 由盛轉衰的轉折點。

二、 HTML5 第一階段: Web 增強與破壟斷

自 HTML5 誕生以來,一共經歷了兩個階段,分別是 Web 增強和移動互聯網。我們先從 Web 增強說起。

web 體驗的豐富增強主要表現在:1. webapp,比如 gmail;2. 流媒體;3. 游戲。我們就這 3 個方面來講 HTML5 做了什么。

1. webApp

HTML5 新增了離線存儲、更豐富的表單(比如 Input type=date)、js 線程、socket 王樂、標準擴展 embed、以及很多 css3 新語法…

2. 流媒體

HTML5 新增了 audio、買粉絲

3. 游戲

HTML5 新增了 canvas、webgl

當然還有 Google 努力在 HTML5 中推進 Header 和 Section 等標簽,以利于搜索引擎分析,這些不多述。

HTML5 補充流媒體和游戲能力后,加上蘋果強勢拒絕在 iOS 上引入 Flash,成功的遏制了 Flash 的發展,然后就該遏制 IE 私有語法了。

在 HTML5 標準的升級過程中,蘋果和 Google 同時也看到了瀏覽器市場重新洗牌的機會,他們一方面參與 HTML5 的規范,一邊在瀏覽器產品上發力。Apple 首先開始大力發展 Safari,建立 WebKit 開源項目,Mac、iOS、Windows 多平臺齊發力;Google 起初是贊助 Mozilla 開發 Firefox,后來自己開發了 v8 引擎,合并 WebKit,于 2008 年正式推出 Chrome。“IE 的私有規范 +Flash 不是標準,我們才是標準”這樣的口號在新一代瀏覽器大戰中打響,IE 瞬間成為千夫所指的壟斷代表,甚至成了阻礙 Web 發展的罪人(當時 IE6 已數年未更新,并且絲毫不懼 Firefox 的發展)。

偏偏微軟此時也出了暈招,推出了一系列即不完整支持規范又互相不兼容的 IE7、8、9、10,徹底失去了開發者的心。

Adobe 的 Flash 被遏制,與 Web 霸主的位子擦肩而過;IE 的私有標準被遏制,并且造成 IE 市場份額不停下滑,直到 IE 最新的移動版本反過來開始支持 WebKit 私有語法,真是令人唏噓。不知道 HTML6 是不是該打倒 WebKit 壟斷了。

三、 HTML5 第二階段: 移動互聯網

隨著 Chrome 和 Safari 的高歌猛進,以及 IE+Flash 的衰落,HTML5 告一段落,進入了下一個時代——移動互聯網。HTML5 的跨平臺優勢在移動互聯網時代被進一步凸顯。HTML5 是唯一一個通吃 PC、Mac、iPhone、iPad、Android、Windows Phone 等主流平臺的跨平臺語言。Java 和 Flash 都曾夢想這個位置,但夢斷于 iOS。此時人們紛紛開始研究基于 HTML5 開發跨平臺手機應用。很多人當時認為,原生應用只是過渡,就像當年從C/S結構轉變為B/S結構一樣。而且學習 Objective-C 和 Java 很費勁,我既然會網頁開發,為何不試試 HTML5。

W3C 此時成立了 Device API 工作組,為 HTML5 擴展了 Camera、GPS 等手機特有的 API,然而麻煩的是,移動互聯網初期的迭代太快了,手機 OS 在不停的擴展硬件 API,陀螺儀、距離感應器、氣壓計。。。每年手機 OS 都有大版本更新。而 W3C 作為一個數百家會員單位共同決策的組織,從標準草案的提出到達成一致是非常復雜的過程,跟不上移動互聯網初期的快速迭代。

PhoneGap 的出現,給開發者打開了一扇窗。很多人期待 PhoneGap 不停擴展 API,來補充瀏覽器的不足。Adobe 看到 PhoneGap 仿佛看到了重振江湖地位的希望,但在 Adobe 收購 PhoneGap 后,又發現這個東西可商用性不足,而且開源使得 Adobe 無法像 Flash 那樣獲取商業利益,于是就把 PhoneGap 捐給了 Apache,改名為 Cordova。

因為各種原因,Cordova 的定位最終沒有成為瀏覽器的強化,而走向了混合式開發。基于當時的背景,他們認為原生是不可替代的,“原生 +HTML5”的混合模式更有意義。所以現在 Cordova 的使用模型是“原生工程師 +HTML5 工程師”一起協作完成 App。

這時 Facebook 加入了 W3C,牽頭成立了 Mobile Web 工作組。Facebook 是混 Web 圈的,并且在手機 OS 上沒有自己的領地,他不喜歡被蘋果和 Google 掌控的原生應用生態系統。Mobile Web 這個工作組的重要目標就是讓 HTML5 開發的網頁應用達到原生應用的體驗。然而,事與愿違,它不努力也就算了,結果是努力了卻失敗了。2012 年,Facebook 放棄了 HTML5 的新聞充斥了全世界的 IT 媒體,HTML5 瞬間被打入冷宮。

Facebook 為何放棄 HTML5?核心是當時基于 HTML5 真的做不出好的移動 App。對比 Twritter 等競爭對手的原生 App,Facebook 的 HTML5 版本實在無法讓用戶滿意。比如 Push 功能,到現在 HTML5 的推送和原生的推送體驗差距依然巨大,更不用說 HTML5 應用的頁面切換白屏、下拉刷新/側滑菜單不流暢等眾多問題。看著原生工程師輕松實現搖一搖、二維碼、語音輸入、分享到朋友圈等功能,更是讓 HTML5 工程師感覺自己站錯了隊。

即使 Facebook 不喜歡被控制,也不能拿被用戶拋棄來冒險。而且 Facebook 并沒有掌握關鍵點—手機瀏覽器內核。如果瀏覽器不跟上,徒然定一堆標準草案落不了地。

而瀏覽器在手機上的表現是什么呢?先看 Google,Chrome 性能雖高,但 Android 上的瀏覽器卻并非 Chrome,而是 WebKit 改出來的一個蹩腳的 Android 瀏覽器;再看蘋果,iOS 上不允許其他瀏覽器引擎上架 App Store,而且其他使用 Safari 引擎的應用也無法調用蘋果自己的 JavaScript 加速引擎 Nitro。結果是蘋果和 Google 不但不在瀏覽器上積極實現 HTML5 關于移動 App 所需的規范,反而對 HTML5 做出種種限制。

不管是當時硬件能力不足,還是手機 OS 廠商的故意限制,總之結果就是:在移動互聯網的初期,一定是原生應用生態系統的天下,iOS 和 Android 首先自己的地盤穩固后,產業才會向下個階段升級。

Facebook 也好,PhoneGap 也好,想在移動互聯網初期就分一杯羹是分不到的,但堅持下來,機會往往會出現。

四、 HTML5 這回真的來了

終于,在 2014 年 10 月底,W3C 宣布 HTML5 正式定稿。這個時間,不晚不早,硬件性能更強、手機 OS 迭代速度下降。

隨著 HTML5 標準定稿,一切紛爭將告一段落,現在,屬于 HTML5 的時代到來了。

有人說,光標準定稿沒用啊,配套起來了嗎?HTML5 做的應用究竟能否匹敵原生 App?答案是,HTML5 不但可以匹敵原生 App,甚至它天然的很多特性超越了原生 App。

我們先談談 HTML5 原來不如原生應用的地方,業內俗稱 HTML5 有“性工能”障礙。即 HTML5 性能不如原生、開發工具不如原生、能力調用不如原生。

這幾個問題導致開發者無法使用 HTML5 做出與原生一樣的 App。然而,不管是硬件升級還是 OS 廠商策略變化,以及相關軟件技術的成熟,已解決了 HTML5 的“性工能”障礙。

1. 硬件升級

2011 年,iPhone 4s 的 CPU 是 A5,現在 iPhone 6 是 A8,按蘋果的歷次發布會的說法,速度共提升了 7.5 倍。這 3 年間 7.5 倍的速度提升,抹平了太多 HTML5 的性能問題。

2. 蘋果、Google 的策略變化

Google 在 2013 年底發布的 Android 4.4,內置的 Webview 不再是蹩腳的 Android WebKit 瀏覽器,而是 Chromium,性能大幅提升。從最新的 Android5.0 開始,Webview 可以通過 Google Play Store 實時更新,和 Chrome 的升級保持一致,用戶就可以不刷機享受到最新的瀏覽器引擎;再看 Apple 方面,2012 年 iPhone 5 發布后,HTML5 在 iOS 上的表現已令人滿意,Safari 獨家的 JavaScript 加速引擎 Nitro 不再那么重要,不過在 iOS 8 發布后,蘋果還是很識趣地取消了三方程序調用 Nitro 的限制,現在任意瀏覽器或應用調用 iOS 的 UIWebview 都可以利用 Nitro 加速,這樣在前端使用 JS 做大型運算也成為可能。兩大手機操作系統霸主和瀏覽器巨頭的態度發生了變化,使得 HTML5 在手機上的發展不再受限,而且這個變化不可逆只能繼續向前,這種變化勢必會產生深遠的影響。

3. 軟件技術的成熟

PhoneGap 的發展雖然放緩了,但其他產品技術卻成熟了。2014 年的 iWeb 大會上,眾多廠商的產品提供了面向開發者免費或開源的 HTML5 性工能障礙的解決方案。

(注:編者作為從業人員,也會在分析各種方案時提到我們公司的方案,但編者會客觀不夸張的陳述方案,而且該方案是純免費的,沒有商業銷售嫌疑。)

DCloud 公司在 iWeb 大會上發布了系統的 HTML5“性工能缺失”的解決方案,包括:

a) 性能:提升 HTML5 性能的手機端引擎,讓側滑菜單、下拉刷新等動態交互卡頓的問題得以解決;

b) 工具:HTML5 開發 IDE 產品 HBuilder, 超快的編程利器;

c) 能力:把 40 萬原生 API 封裝成 JavaScript 對象,以解決 HTML5 能力不足問題的 Native.js 技術;

d) 最接近原生體驗的高性能框架:MUI 框架,體積只有幾十K,加載、運行遠快于一般框架。

基于該方案開發的 HTML5 應用完全可以達到原生 App 的功能和體驗。

使用 HBuilder 開發 HTML5 應用

英特爾公司發布了 Crosswalk 引擎,可以讓 Android 4.0-4.3 的手機上的應用打包 Chromium 引擎而不是 Android WebKit。畢竟目前市場上存在大量 Android 4.0-4.3 的手機,同時統一的 webview 也避免了兼容性的煩惱。

在專業方向上很多公司也做出了不錯的成績。觸控的 Co買粉絲s2d-買粉絲5、Egret runtime 和 Ludei Co買粉絲onJS 強化了 Canvas 的表現,讓 HTML5 游戲體驗更好;UC、獵豹等手機瀏覽器都強化了音視頻播放的表現。

不管是硬件升級、軟件成熟,還是操作系統廠商策略變化,都在強力推動 HTML5 的爆發。

不過要注意,我說的 HTML5 爆發,不是指手機瀏覽器會替代桌面成為應用入口。有人說 HTML5 不好,因為用戶討厭打開瀏覽器輸入 URL 的過程。我想說這種想法是對 HTML5 的片面理解。HTML5!=傳統瀏覽器,雖然編程語言還是 HTML、Javascript、CSS,但發行方式絕不是傳統網站那么簡單。HTML5 應用的入口,反而很少是啟動瀏覽器輸入 URL,它可以是存在于手機桌面的圖標、也可以來自超級 App (如買粉絲朋友圈)、以及搜索引擎、應用市場、廣告聯盟。。。到處都是它的入口。它的入口,比原生 App 更多。

五、 原生 App 的顛覆

HTML5 的“性工能”障礙得到解決,可以接近原生 App 的效果,所以它就可以替代原生 App 嗎?很多人認為,即使 HTML5 會發展的比現在好,也將是與原生 App 各占一部分市場的格局,要求不高的長尾應用會使用 HTML5,而主流應用仍是原生 App 的天下。

但我認為這樣的想法很危險,就像 Apple 成立前,HP 的高層告訴沃茲:誰會在家里擺一臺電腦呢?未來 HTML5 肯定會顛覆原生 App。“性工能”障礙的消除,只是 HTML5 的劣勢被削弱,但劣勢被消除后,它的優勢就會大放異彩,HTML5 的優勢是什么?我們分別就開發者和最終用戶來看。

HTML5 對開發者的 7 大優勢

跨平臺:

在多屏年代,開發者的痛苦指數非常高,人人都期盼 HTML5 能扮演救星。多套代碼、不同技術工種、業務邏輯同步,這是折磨人的過程。有點類似個人電腦早期世界,那個時候的每家電腦都有自己的操作系統和編程語言,開發者疲于做不同版本,其實 DOS 的盛行也很大程度是因為開發者實在沒精力給其他電腦寫程序。跨平臺技術在早期大多因為性能問題夭折,但中后期硬件能力增強后又會占據主流,因為跨平臺確實是剛需。

快速迭代:

移動互聯網是一個快魚吃慢魚的時代,誰對用戶的需求滿足的更快,誰的試錯成本更低,誰就擁有巨大的優勢。互聯網產品大多免費、且有網絡效應,后入者搶奪用戶的難度非常大。使用原生開發,從招聘、開發、上線各個環節的效率都慢一倍以上,而且參與的人越多,溝通效率往往拖慢不止一倍。

持續交付:

很多人有這樣的體會,一個原生應用上線 Appstore,突然有一個大 bug,只好連夜加班修復,然后靜靜等待 2 周或更長時間的 Apple 審核,這 2 個星期被用戶的涂抹淹死,市場上一片差評,用戶大量流失。等新應用被審核上線了,用戶已經卸載了。但是,HTML5 沒有這些問題,你可以實時更新,有問題立即響應。

大幅下降成本:

創業者融資并不容易,如何花錢更高效非常重要。如果你使用原生開發的 App 和競爭對手使用 HTML5 開發的 App 沒什么區別,但你的開發成本高出一倍,我相信沒有投資人會喜歡給你投錢。

開源生態系統發達:

HTML5 前端是開放的正反饋循環生態系統,大量的開源庫可以使用,開發應用變得更輕松、更敏捷,當然這也體現在了快速迭代和成本下降上。不過更重要的是,這種開放的正反饋循環生態系統未來的生命力是比原生生態系統更強勁的。

開放的數據交換:

HTML 是以 page 為單元開放代碼的,它無需專門開發 SDK,只要不混淆,就能與其他應用交互數據。開發者可以讓手機搜索引擎很容易檢索到自己的數據, 也更容易通過跨應用協作來滿足最終用戶需求。

更容易推廣、更容易爆發:

導流入口多:HTML5 應用導流非常容易,超級 App (如買粉絲朋友圈)、搜索引擎、應用市場、瀏覽器,到處都是 HTML5 的流量入口。而原生 App 的流量入口只有應用市場。聰明的 HTML5 開發者當然會玩轉各種流量入口從而取得更強的優勢。

流量大:前段時間買粉絲朋友圈風靡一時《神經貓》,這個游戲如果放到 Appstore,絕對沒有那么多流量,超級 App 帶來的流量,遠大于原生應用市場。假如買粉絲允許游戲在桌面創建快捷方式、假如游戲后續升級解決持續娛樂問題,未來不可想象。

導流效率高:除了入口多、流量大,導流效率高也不可忽視,誰都知道:頁游和端游打同樣的廣告,廣告變用戶的轉化率,頁游遠遠高于端游。

可精準導流到二級頁:我們都知道搜索引擎可以直接進入到。

HTML5 對最終用戶的 3 大優勢

大幅降低使用門檻

用戶眼睛看到一個興趣點,點擊后,就應該立即開始滿足用戶需求。比如流媒體可以立即看,頁游可以立即玩。而目前的原生應用市場,用戶需要這樣操作:選一個應用、等待下載、確認權限、等待安裝,然后點擊打開。這樣糟糕的體驗遲早要被顛覆。

不管是 App、游戲還是音視頻,未來都將即點即用。誰先滿足用戶這個需求,誰就制勝。

實時更新、差量更新的優秀體驗

HTML5 應用可以繞開應用市場的限制進行自主實時更新,用戶可以快速享受新服務。

而且這種更新完全可以是差量更新,比如某個 HTML 頁面或某個 js 文件有問題,只更新這個幾k的小文件就可以了,這比原生應用的更新體驗好太多。

跨應用的使用體驗

目前手機應用切換是以桌面或任務管理器為中心的,但事實上這些中心很影響效率和體驗。用戶想出差三亞,先打開去哪 App 訂票,然后切回桌面,再找到并打開天氣 App,搜索輸入三亞,再切到桌面,找到并打開航旅縱橫 App,輸入航班號值機,哦對了,航班號多少來著,再切到桌面,找到并打開去哪 App 看航班號,最后找到并打開租車 App,輸入租車地點,然后再切回桌面。。。

在原生應用體系下,用戶只能這樣。但在 HTML5 體系下,他不需要切回桌面,他可以在 App 間方便的直接跳來跳去,而不是使用一個一個孤島 App;他更不用重復錄入數據,應用間可以方便的互相傳遞數據。

這種模式需要一點想象力,但未來遲早會來。

分析至此,我們可以明顯的看出,不管是站在最終用戶角度、還是站在開發者角度,HTML5 必將取代原生應用當前的位置。并由此引發一系列顛覆。

六、 還有什么會被改變?

HTML5 的爆發,原生 App 生態系統的顛覆,是一場產業革命,很多角色都會受到影響,我們來預測一番。

新型 HTML5 引擎戰火將燒起

標準的 HTML5 引擎并不能解決 HTML5 的所有問題,擁有大流量入口的互聯網巨頭,莫不在思考內嵌更優秀的增強引擎。騰訊推出了 X5 瀏覽器引擎,就是看中這個機會。目前各路瀏覽器廠商、應用市場廠商、甚至 rom 廠商,都在努力整合更優質的瀏覽器引擎。假使買粉絲內嵌的 Webview 可以運行更優秀的 canvas 游戲、假使 360 手機助手可以發行即點即用的 HTML5 應用并且能力體驗與原生一致、假使小米 rom 內置更強大的 webview 使得所有 HTML5 應用在小米手機上運行的更流暢。。。

一個巨頭開始行動,所有巨頭都會聞風而動,沒錯,這場戰役會是移動互聯網世界的二次世界大戰。

應用發行市場將洗牌

由于超級 App 的巨大流量能輕易成為 HTML5 應用的入口,并且會形成大者更大的效應,傳統的應用商店、甚至線下預裝,這些流量不足和效率偏低的發行模式將被擠出市場主流。本身也是超級 App 的大流量應用商店,如果轉型得當,也將以發行 HTML5 應用為主。

廣告和統計市場

原生的廣告和統計 SDK 提供商會面臨尬尷,Google、百度等基于網頁的廣告和統計服務會取得更大的優勢。開發者不再需要打包 SDK,引入一個 Script 即可。

開源技術將在移動互聯網領域更加流行

HTML 的開放性造就了大量的開源產品,也反向促進了 HTML 的繁榮。在 Github 上有大量的 JS 框架,而原生的開源代碼數量相比甚少。而未來移動互聯網世界將因為開源而發展的更迅速,這里也同樣存在類 Github 廠商的機遇。

開發工具的變化

早期 HTML 只需要記事本寫幾個 Tag,中期的 HTML、JS、CSS 比較復雜,需要更高級的文本編輯器,但 HTML5 到來后,它的代碼量、復雜度、開發模型將與原生開發看齊,需要類似 XCode、Eclipse 等專業的 IDE 工具來解決開發、調試的問題。一些以會使用記事本寫代碼為榮的開發者,將面臨思路轉換甚至被更高效的開發者淘汰。

性能分析調優

目前很多針對原生應用的性能分析調優工具或服務,未來也面臨轉型,HTML5 應用的性能分析調優是另一個世界。

混淆與產權保護

HTML5 是開放代碼的,好處也帶來弊端,有些東西開發者希望暴露,但有些東西開發者希望保護。混淆技術就變得更有商業機會。PC Web 上 Gmail 的混淆就做的不錯。除了 JS 混淆,離線數據加密相信也有不少空間。

安全廠商的新機會

HTML5 的強大會引發很多安全問題,并且解決思路與原生不一樣,業內有可能會出現新的安全廠商領導者。

七、 結語

寫到結尾,感覺話題有點大了。其實未來如何發展是沒人能準確預測的,變量非常多。但我想讓用戶和開發者都更方便的趨勢是不會錯的。

程序員為什么要學深度學習

費良宏:程序員為什么要學深度學習?

本文根據費良宏在2016QCon全球軟件開發大會(上海)上的演講整理而成。

前言

1973年,美國上映了一部熱門的科幻電影《WestWorld》,三年之后又有一個續集叫做《FutureWorld》。這部電影在80年代初被引進到中國叫《未來世界》。那部電影對我來講簡直可以說得上是震撼。影片中出現了很多機器人,表情豐富的面部下面都是集成電路板。這讓那時候的我覺得未來世界都是那么遙遠、那么神秘。

時間到了2016年,很多朋友可能都在追看HBO斥巨資拍攝的同一題材的系列劇《WestWorld》。如果前兩部電影還是局限在機器人、人工智能這樣的話題,2016年的新劇則在劇情和人工智能的思考方面有了很大的突破。不再渲染機器人是否會威脅到人類,而是在探討“Dreamsaremainlymemories”這一類更具哲理的問題。

“記憶究竟如何影響了智能”這個話題非常值得我們去思考,也給我們一個很好的啟示——今天,人工智能領域究竟有了怎樣的發展和進步。

今天我們探討的話題不僅僅是簡單的人工智能。如果大家對深度學習感興趣,我相信各位一定會在搜索引擎上搜索過類似相關的關鍵字。我在Google上以deeplearning作為關鍵字得到了2,630萬個搜索的結果。這個數字比一周之前足足多出了300多萬的結果。這個數字足以看得出來深度學習相關的內容發展的速度,人們對深度學習的關注也越來越高。

從另外的一個角度,我想讓大家看看深度學習在市場上究竟有多么熱門。從2011年到現在一共有140多家專注人工智能、深度學習相關的創業公司被收購。僅僅在2016年這種并購就發生了40多起。

其中最瘋狂的是就是Google,已經收購了 11 家人工智能創業公司,其中最有名的就是擊敗了李世石九段的 DeepMind。排名之后的就要數 Apple、Intel以及Twitter。以Intel 公司為例,僅在今年就已經收購了 3 家創業公司,Itseez、Nervana 和 Movidius。這一系列大手筆的并購為了布局人工智能以及深度學習的領域。

當我們去搜索深度學習話題的時候,經常會看到這樣的一些晦澀難懂的術語:Gradient descent(梯度下降算法)、Backpropagation(反向傳播算法)、Convolutional Neural Network(卷積神經網絡)、受限玻耳茲曼機(Restricted Boltzmann Machine)等。

如打開任何一篇技術文章,你看到的通篇都是各種數學公式。大家看到如下左邊的圖,其實并不是一篇高水準的學術論文,而僅僅是維基百科關于玻耳茲曼機的介紹。維基百科是科普層面的內容,內容復雜程度就超過了大多數數學知識的能力。

在這樣的背景之下,我今天的的話題可以歸納成三點:第一,我們為什么要學習深度學習;第二,深度學習最核心的關鍵概念就是神經網絡,那么究竟什么是神經網絡;第三,作為程序員,當我們想要成為深度學習開發者的時候,我們需要具備怎樣的工具箱,以及從哪里著手進行開發。

為什么要學習深度學習

首先,我們談談為什么要學習深度學習。在這個市場當中,最不缺乏的就是各種概念以及各種時髦新技術的詞匯。深度學習有什么不一樣的地方?我非常喜歡AndrewNg(吳恩達)曾經用過的一個比喻。

而對于今后未知的東西,這些傳統的方法并不能夠幫助我們可以從大數據中得出預測的結論。如果考慮到神經網絡和大數據結合,我們才可能看清楚大數據真正的價值和意義。AndrewNg就曾經說過“我們相信(神經網絡代表的深度學習)是讓我們獲得最接近于人工智能的捷徑”。這就是我們要學習深度學習的一個最重要的原因。

其次,隨著我們進行數據處理以及運算能力的不斷提升,深度學習所代表的人工智能技術和傳統意義上人工智能技術比較起來,在性能上有了突飛猛進的發展。這主要得益于在過去幾十間計算機和相關產業不斷發展帶來的成果。在人工智能的領域,性能是我們選擇深度學習另一個重要的原因。

這是一段Nvidia在今年公布的關于深度學習在無人駕駛領域應用的視頻。我們可以看到,將深度學習應用在自動駕駛方面,僅僅經歷了3千英里的訓練,就可以達到什么樣的程度。在今年年初進行的實驗上,這個系統還不具備真正智能能力,經常會出現各種各樣的讓人提心吊膽的狀況,甚至在某些情況下還需要人工干預。

但經過了3千英里的訓練之后,我們看到在山路、公路、泥地等各種復雜的路況下面,無人駕駛已經有了一個非常驚人的表現。請大家注意,這個深度學習的模型只經過了短短幾個月、3千英里的訓練。

如果我們不斷完善這種模型的話,這種處理能力將會變得何等的強大。這個場景里面最重要的技術無疑就是深度學習。我們可以得出一個結論:深度學習可以為我們提供強大的能力,如果程序員擁有了這個技術的話,無異于會讓每個程序員如虎添翼。

神經網絡快速入門

如果我們對于學習深度學習沒有任何疑慮的話,接下來就一定會關心我需要掌握什么樣的知識才能讓我進入到這個領域。這里面最重要的關鍵技術就是“神經網絡”。說起“神經網絡”,容易混淆是這樣兩個完全不同的概念。

一個是生物學神經網絡,第二個才是我們今天要談起的人工智能神經網絡。可能在座的各位有朋友在從事人工智能方面的工作。當你向他請教神經網絡的時候,他會拋出許多陌生的概念和術語讓你聽起來云里霧里,而你只能望而卻步了。

對于人工智能神經網絡這個概念,大多數的程序員都會覺得距離自己有很大的距離。因為很難有人愿意花時間跟你分享神經網絡的本質究竟是什么。而你從書本上讀的到的理論和概念,也很讓你找到一個清晰、簡單的結論。

今天就我們來看一看,從程序員角度出發神經網絡究竟是什么。我第一次知道神經網絡這個概念是通過一部電影——1991年上映的《終結者2》。男主角施瓦辛格有一句臺詞:

“MyCPUisaneural-買粉絲processor;alearning買粉絲puter.”(我的處理器是一個神經處理單元,它是一臺可以學習的計算機)。從歷史來看人類對自身智力的探索,遠遠早于對于神經網絡的研究。

1852年,意大利學者因為一個偶然的失誤,將人類的頭顱掉到硝酸鹽溶液中,從而獲得第一次通過肉眼關注神經網絡的機會。這個意外加速了對人類智力奧秘的探索,開啟了人工智能、神經元這樣概念的發展。

生物神經網絡這個概念的發展,和今天我們談的神經網絡有什么關系嗎?我們今天談到的神經網絡,除了在部分名詞上借鑒了生物學神經網絡之外,跟生物學神經網絡已經沒有任何關系,它已經完全是數學和計算機領域的概念,這也是人工智能發展成熟的標志。這點大家要區分開,不要把生物神經網絡跟我們今天談到的人工智能有任何的混淆。

90年代中期,由Vapnik等人提出了支持向量機算法(Support Vector Machines,支持向量機)。很快這個算法就在很多方面體現出了對比神經網絡的巨大優勢,例如:無需調參、高效率、全局最優解等。基于這些理由,SVM算法迅速打敗了神經網絡算法成為那個時期的主流。而神經網絡的研究則再次陷入了冰河期。

在被人摒棄的十年里面,有幾個學者仍然在堅持研究。其中很重要的一個人就是加拿大多倫多大學的Geoffery Hinton教授。2006年,他的在著名的《Science》雜志上發表了論文,首次提出了“深度信念網絡”的概念。

與傳統的訓練方式不同,“深度信念網絡”有一個“預訓練”(pre-training)的過程,這可以方便的讓神經網絡中的權值找到一個接近最優解的值,之后再使用“微調”(fine-tuning)技術來對整個網絡進行優化訓練。這兩個技術的運用大幅度減少了訓練多層神經網絡的時間。在他的論文里面,他給多層神經網絡相關的學習方法賦予了一個新名詞— “深度學習”。

很快,深度學習在語音識別領域嶄露頭角。接著在2012年,深度學習技術又在圖像識別領域大展拳腳。Hinton與他的學生在ImageNet競賽中,用多層的卷積神經網絡成功地對包含一千個類別的一百萬張圖片進行了訓練,取得了分類錯誤率15%的好成績,這個成績比第二名高了將近11個百分點。

這個結果充分證明了多層神經網絡識別效果的優越性。從那時起,深度學習就開啟了新的一段黃金時期。我們看到今天深度學習和神經網絡的火熱發展,就是從那個時候開始引爆的。

利用神經網絡構建分類器,這個神經網絡的結構是怎樣的?

其實這個結構非常簡單,我們看到這個圖就是簡單神經網絡的示意圖。神經網絡本質上就是一種“有向圖”。圖上的每個節點借用了生物學的術語就有了一個新的名詞 – “神經元”。連接神經元的具有指向性的連線(有向弧)則被看作是“神經”。這這個圖上神經元并不是最重要的,最重要的是連接神經元的神經。每個神經部分有指向性,每一個神經元會指向下一層的節點。

節點是分層的,每個節點指向上一層節點。同層節點沒有連接,并且不能越過上一層節點。每個弧上有一個值,我們通常稱之為”權重“。通過權重就可以有一個公式計算出它們所指的節點的值。這個權重值是多少?我們是通過訓練得出結果。它們的初始賦值往往通過隨機數開始,然后訓練得到的最逼近真實值的結果作為模型,并可以被反復使用。這個結果就是我們說的訓練過的分類器。

節點分成輸入節點和輸出節點,中間稱為隱層。簡單來說,我們有數據輸入項,中間不同的多個層次的神經網絡層次,就是我們說的隱層。之所以在這樣稱呼,因為對我們來講這些層次是不可見的。輸出結果也被稱作輸出節點,輸出節點是有限的數量,輸入節點也是有限數量,隱層是我們可以設計的模型部分,這就是最簡單的神經網絡概念。

如果簡單做一個簡單的類比,我想用四層神經網絡做一個解釋。左邊是輸入節點,我們看到有若干輸入項,這可能代表不同蘋果的RGB值、味道或者其它輸入進來的數據項。中間隱層就是我們設計出來的神經網絡,這個網絡現在有不同的層次,層次之間權重是我們不斷訓練獲得一個結果。

最后輸出的結果,保存在輸出節點里面,每一次像一個流向一樣,神經是有一個指向的,通過不同層進行不同的計算。在隱層當中,每一個節點輸入的結果計算之后作為下一層的輸入項,最終結果會保存在輸出節點上,輸出值最接近我們的分類,得到某一個值,就被分成某一類。這就是使用神經網絡的簡單概述。

除了從左到右的形式表達的結構圖,還有一種常見的表達形式是從下到上來表示一個神經網絡。這時候,輸入層在圖的最下方,輸出層則在圖的最上方。從左到右的表達形式以AndrewNg和LeCun的文獻使用較多。而在Caffe框架里則使用的則是從下到上的表達。

簡單來說,神經網絡并不神秘,它就是有像圖,利用圖的處理能力幫助我們對特征的提取和學習的過程。2006年Hinton的那篇著名的論文中,將深度學習總結成三個最重要的要素:計算、數據、模型。有了這三點,就可以實現一個深度學習的系統。

程序員需要的工具箱

對于程序員來說,掌握理論知識是為了更好的編程實踐。那就讓我們看看,對于程序員來說,著手深度學習的實踐需要準備什么樣的工具。

硬件

從硬件來講,我們可能需要的計算能力,首先想到的就是CPU。除了通常的CPU架構以外,還出現了附加有乘法器的CPU,用以提升計算能力。此外在不同領域會有DSP的應用場景,比如手寫體識別、語音識別、等使用的專用的信號處理器。還有一類就是GPU,這是一個目前深度學習應用比較熱門的領域。最后一類就是FPGA(可編程邏輯門陣列)。

這四種方法各有其優缺點,每種產品會有很大的差異。相比較而言CPU雖然運算能力弱一些,但是擅長管理和調度,比如讀取數據,管理文件,人機交互等,工具也豐富。DSP相比而言管理能力較弱,但是強化了特定的運算能力。

這兩者都是靠高主頻來解決運算量的問題,適合有大量遞歸操作以及不便拆分的算法。GPU的管理能力更弱一些,但是運算能力更強。但由于計算單元數量多,更適合整塊數據進行流處理的算法。

FPGA在管理與運算處理方面都很強,但是開發周期長,復雜算法開發難度較大。就實時性來說,FPGA是最高的。單從目前的發展來看,對于普通程序員來說,現實中普遍采用的計算資源就還是是CPU以及GPU的模式,其中GPU是最熱門的領域。

這是我前天為這次分享而準備的一個AWS 上p2的實例。僅僅通過幾條命令就完成了實例的更新、驅動的安裝和環境的設置,總共的資源創建、設置時間大概在10分鐘以內。而之前,我安裝調試前面提到的那臺計算機,足足花了我兩天時間。

另外,從成本上還可以做一個對比。p2.8xLarge 實例每小時的費用是7.2美元。而我自己那臺計算機總共的花費了是¥16,904元。這個成本足夠讓我使用350多個小時的p2.8xLarge。在一年里使用AWS深度學習站就可以抵消掉我所有的付出。隨著技術的不斷的升級換代,我可以不斷的升級我的實例,從而可以用有限的成本獲得更大、更多的處理資源。這其實也是云計算的價值所在。

云計算和深度學習究竟有什么關系?今年的8月8號,在IDG網站上發表了一篇文章談到了這個話題。文章中做了這樣一個預言:如果深度學習的并行能力不斷提高,云計算所提供的處理能力也不斷發展,兩者結合可能會產生新一代的深度學習,將帶來更大影響和沖擊。這是需要大家考慮和重視的一個方向!

軟件

深度學習除了硬件的基礎環境之外。程序員會更關心與開發相關的軟件資源。這里我羅列了一些曾經使用過的軟件框架和工具。

Scikit-learn是最為流行的一個Python機器學習庫。它具有如下吸引人的特點:簡單、高效且異常豐富的數據挖掘/數據分析算法實現; 基于NumPy、SciPy以及matplotlib,從數據探索性分析,數據可視化到算法實現,整個過程一體化實現;開源,有非常豐富的學習文檔。

Caffe專注在卷及神經網絡以及圖像處理。不過Caffe已經很久沒有更新過了。這個框架的一個主要的開發者賈揚清也在今年跳槽去了Google。也許曾經的霸主地位要讓位給他人了。

Theano 是一個非常靈活的Python 機器學習的庫。在研究領域非常流行,使用上非常方便易于定義復雜的模型。Tensorflow 的API 非常類似于Theano。我在今年北京的QCon 大會上也分享過關于Theano 的話題。

Jupyter notebook 是一個很強大的基于ipython的python代碼編輯器,部署在網頁上,可以非常方便的進行交互式的處理,很適合進行算法研究合數據處理。

Torch 是一個非常出色的機器學習的庫。它是由一個比較小眾的lua語言實現的。但是因為LuaJIT 的使用,程序的效率非常出色。Facebook在人工智能領域主打Torch,甚至現在推出了自己的升級版框架Torch買粉絲。

深度學習的框架非常之多,是不是有一種亂花漸欲迷人眼的感覺?我今天向各位程序員重點介紹的是將是TensorFlow。這是2015年谷歌推出的開源的面向機器學習的開發框架,這也是Google第二代的深度學習的框架。很多公司都使用了TensorFlow開發了很多有意思的應用,效果很好。

用TensorFlow可以做什么?答案是它可以應用于回歸模型、神經網絡以深度學習這幾個領域。在深度學習方面它集成了分布式表示、卷積神經網絡(CNN)、遞歸神經網絡(RNN) 以及長短期記憶人工神經網絡(Long-Short Term Memory, LSTM)。

關于Tensorflow 首先要理解的概念就是Tensor。在辭典中對于這個詞的定義是張量,是一個可用來表示在一些向量、標量和其他張量之間的線性關系的多線性函數。實際上這個表述很難理解,用我自己的語言解釋Tensor 就是“N維數組”而已。

使用 TensorFlow, 作為程序員必須明白 TensorFlow這樣幾個基礎概念:它使用圖 (Graph) 來表示計算任務;在被稱之為 會話 (Session) 的上下文 (買粉絲ntext) 中執行圖;使用 Tensor 表示數據;通過 變量 (Variable) 維護狀態;使用 feed 和 fetch 可以為任意的操作(arbitrary operation) 賦值或者從其中獲取數據。

一句話總結就是,TensorFlow 就是有狀態圖的數據流圖計算環境,每個節點就是在做數據操作,然后提供依賴性和指向性,提供完整數據流。

TensorFlow安裝非常簡單,但官網提供下載的安裝包所支持的CUDA 的版本是7.5。考慮到CUDA 8 的讓人心動的新特以及不久就要正式發布的現狀。或許你想會考慮立即體驗CUDA 8,那么就只能通過編譯Tensorflow源代碼而獲得。目前TensorFlow已經支持了Python2.7、3.3+。

此外,對于使用Python 語言的程序員還需要安裝所需要的一些庫,例如:numpy、protobuf等等。對于卷積處理而言,cuDNN是公認的性能最好的開發庫,請一定要安裝上。常規的Tensorsorflow的安裝很簡單,一條命令足矣:

$ pip3 install —upgrade 買粉絲s://storage.233.wiki/tensorflow/linux/cpu/tensorflow-0.11.0rc0-cp35-cp35m-linux_x86_64.whl

如果想評估一下或者簡單學習一下,還可以通過Docker進行安裝,安裝的命令如下:

$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow

TensorFlow有很多優點。首先,目前為止,深度學習的開發框架里面TensorFlow的文檔做的最好,對程序員學習而言是非常好的一點。第二,TensorFlow有豐富的參考實例,作為參考學習起來非常容易。

第三,開發者社區活躍,在任何一個深度學習的社區里,都有大量關于TensorFlow的討論。第四,谷歌的支持力度非常大,從2015年到現在升級速度非常快,這是其他開源框架遠遠達不到的結果。

參考TensorFlow的白皮書,我們會看到未來TensorFlow還將會有巨大的發展潛力。讓我特別感興趣是這兩個方向。第一,支持跨多臺機器的 parallelisation。盡管在0.8版本中推出了并行化的能力,但是目前還不完善。隨著未來不斷發展,依托云計算的處理能力的提升這個特性將是非常讓人振奮的。

在這里我想給大家展示一個應用Tensorflow 的例子。這個例子的代碼托管在這個買粉絲上 買粉絲s://github.買粉絲/anishathalye/neural-style。白俄羅斯的現代印象派藝術家Leonid Afremov善于用濃墨重彩來表現都市和風景題材,尤其是其雨景系列作品。他習慣用大色塊的鋪陳來營造光影效果,對反光物體和環境色的把握非常精準。

于是我就找到了一張上海東方明珠電視塔的一張攝影作品,我希望通過Tensorflow 去學習一下Leonid Afremov 的繪畫風格,并將這張東方明珠的照片處理成那種光影色彩豐富的作品風格。利用Tensorflow 以及上面提到的那個項目的代碼,在一個AWS 的p2類型的實例上進行了一個一千次的迭代,于是就得到了下圖這樣的處理結果。

這個處理的代碼只有350行里,模型使用了一個成名于2014年ImageNet比賽中的明星 VGG。這個模型非常好,特點就是“go depper”。

結束語

未來究竟是什么樣,我們沒有辦法預言。有位作家Ray Kurzweil在2005年寫了《奇點臨近》一書。在這本書里面他明確告訴我們,那個時代很快到來。作為那個時代曙光前的人群,我們是不是有能力加速這個過程,利用我們學習的能力實現這個夢想呢?

中國人工智能的發展

人工智能的時代無疑已經到來,這個時代需要的當然就是掌握了人工智能并將其解決具體問題的工程師。坦率的說,市場上這一類的工程師還屬于鳳毛麟角。職場上的薪酬待遇可以看得出來這樣的工程師的搶手的程度。人工智能這門學科發展到今天,就學術自身而言已經具備了大規模產業化的能力。

所以說,對于工程師而言當務之急就是盡快的掌握應用人工智能的應用技術。當下在互聯網上關于人工智能的學習資料可以說已經是“汗牛充棟”,那些具備了快速學習能力的工程師一定會在人工智能的大潮當中脫穎而出。

中國發展人工智能產業的環境已經具備。無論從創業環境、人員的素質乃至市場的機遇而言完全具備了產生產業變革的一切條件。與美國相比較,在人工智能的許多領域中國團隊的表現也可以說是不逞多讓。就人工智能的技術層面而言,中國的工程師與全球最好的技術團隊正處于同一個起跑線上。

時不我待,中國的工程師是有機會在這個領域大展身手的。不過值得注意的是,要切忌兩點:一是好高騖遠,盲目與國外攀比。畢竟積累有長短,術業有專攻,我們要立足于已有的積累,尋求逐步的突破。二是一擁而上,盲目追求市場的風口。人工智能的工程化需要大量的基礎性的積累,并非一蹴而就簡單復制就可以成功。

中國的科研技術人員在人工智能領域的成就有目共睹。在王詠剛的一篇文章里面,他統計了從2013年到2015年SCI收錄的“深度學習”論文,中國在2014年和2015年超已經超過了美國居于領跑者的位置。

另外一讓我感到驚訝的事情,Google的JeffDean在2016年發表過一篇名為《TensorFlow:Asystemforlarge-scalemachinelearning》的論文。文章的22個作者里面,明顯是中國名字的作者占已經到了1/5。如果要列舉中國人/華人在人工智能領域里的大牛,吳恩達、孫劍、楊強、黃廣斌、馬毅、張大鵬……很容易就可以說出一大串。

對于中國來說目前的當務之急是人工智能技術的產業化,唯有如此我們才可以講科研/智力領域的優勢轉化為整體的、全面的優勢。在這一點上,中國是全球最大的消費市場以及制造業強國,我們完全有機會借助市場的優勢成為這個領域的領先者。

硅谷創新企業

Captricity,提供了手寫數據的信息提取;

VIVLab,針對語音識別開發了虛擬助手服務;

TERADEEP,利用FPGA提供了高效的卷積神經網絡的方案;

還有提供無人駕駛解決方案的NetraDyne。

這個名單還可以很長,還有許許多多正在利用人工智能技術試圖去創造歷史的團隊正在打造他們的夢想。這些團隊以及他們正在專注的領域是值得我們去學習和體會的。

android開發框架有哪些

1、Rajawali

介紹:

安卓的OpenGL ES 2.0/3.0 引擎。可以用于制作普通應用或者動態壁紙,當然也可以用于制作游戲。

項目地址: 買粉絲s://github.買粉絲/Rajawali/Rajawali

2、RxAndroid

介紹:

RxAndroid是RxJava的一個針對Android平臺的擴展。它包含了一些能夠簡化Android開發的工具。

項目地址: 買粉絲s://github.買粉絲/ReactiveX/RxAndroid

3、Paginize

介紹:

Paginize 是一個輕量級的UI框架,使用注解來注入布局和view,除了使用注解之外,該框架還有兩個特色:1.用Page的概念來取代Fragment,2.切換page時自帶ios風格的動畫效果。

項目地址: 買粉絲s://github.買粉絲/neevek/Paginize

4、otto

介紹:

Otto 是square公司出的一個事件庫(pub/sub模式),用來簡化應用程序組件之間的通訊。 Otto 修改自Google的Guava庫,專門為Android平臺進行了優化。

項目地址: 買粉絲s://github.買粉絲/square/otto

5 、rebound

介紹:

rebound是facebook的開源動畫庫。可以認為這個動畫庫是獨立于android Framework之外的一種動畫實現。

項目地址: 買粉絲s://github.買粉絲/facebook/rebound

6、KJFrameForAndroid

介紹:

KJFrameForAndroid 又叫KJLibrary,是一個幫助快速開發的框架。使用KJFrameForAndroid,你可以只用一行代碼就完成買粉絲請求、網絡圖片加載、數據庫數據保存或讀取。

項目地址: 買粉絲s://github.買粉絲/kymjs/KJFrameForAndroid

7、xUtils

介紹:

xUtils

包含了很多實用的android工具。 xUtils

支持大文件上傳,更全面的買粉絲請求協議支持(10種謂詞),擁有更加靈活的ORM,更多的事件注解支持且不受混淆影響... xUitls

最低兼容android 2.2 (api level 8)

項目地址: 買粉絲s://github.買粉絲/wyouflf/xUtils

目前xUtils主要有四大模塊:

DbUtils模塊:

android中的orm框架,一行代碼就可以進行增刪改查;

支持事務,默認關閉;

可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請注解表名和列名);

支持綁定外鍵,保存實體時外鍵關聯實體自動保存或更新;

自動加載外鍵關聯實體,支持延時加載;

支持鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。

ViewUtils模塊:

android中的ioc框架,完全注解方式就可以進行UI,資源和事件綁定;

新的事件綁定方式,使用混淆工具混淆后仍可正常工作;

目前支持常用的20種事件綁定,參見ViewCommonEventListener類和包買粉絲.lidroid.xutils.view.annotation.event。

HttpUtils模塊:

支持同步,異步方式的請求;

支持大文件上傳,上傳大文件不會oom;

支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;

下載支持301/302重定向,支持設置是否根據Content-Disposition重命名下載的文件;

返回文本內容的請求(默認只啟用了GET請求)支持緩存,可設置默認過期時間和針對當前請求的過期時間。

BitmapUtils模塊:

加載bitmap的時候無需考慮bitmap加載過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;

支持加載網絡圖片和本地圖片;

內存管理使用lru算法,更好的管理bitmap內存;

可配置線程加載線程數量,緩存大小,緩存路徑,加載顯示動畫等...

8、butterknife-view

注入工具

介紹:

為了減少頻繁的調用findViewById(R.id...),可以采用一些注入框架,可以簡化自己的代碼,讓你更專注于實際的功能開發,butterknife就是這樣的一個框架,他是jakewharton大神的作品,值得一試。

class ExampleActivity extends Activity {

@InjectView(R.id.title) TextView title;

@InjectView(R.id.subtitle) TextView subtitle;

@InjectView(R.id.footer) TextView footer;

@Override public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.simple_activity);

ButterKnife.inject(this);

// TODO Use "injected" views...

}

}

這是博客地址:

買粉絲://jakewharton.github.io/butterknife/

項目地址: 買粉絲s://github.買粉絲/JakeWharton/butterknife

9、cube-sdk

一淘推出的開發框架

介紹:

cube一個Android開發包, 可極大提高你的開發效率。主要提供了圖片加載以及網絡請求方面的api功能。

項目地址: 買粉絲s://github.買粉絲/etao-open-source/cube-sdk

他們的網站:買粉絲://cube-sdk.liaohuqiu.買粉絲/買粉絲/

10、ASimpleCache

一個簡單的緩存框架

介紹:

ASimpleCache

是一個為android制定的 輕量級的 開源緩存框架。輕量到只有一個java文件(由十幾個類精簡而來)。

它可以緩存什么東西?普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java對象,和

byte數據。

項目地址: 買粉絲s://github.買粉絲/yangfuhai/ASimpleCache

11、androidannotations

介紹:

AndroidAnnotations是一個能夠讓你快速進行Android開發的開源框架,它能讓你專注于真正重要的地方。

使代碼更加精簡,使項目更加容易維護,它的目標就是“Fast Android Development.Easy maintainance”。

通過一段時間的使用發現,相比原生的Android開發,確實能夠讓你少些很多代碼

項目地址: 買粉絲s://github.買粉絲/excilys/androidannotations

12、Event Bus

解耦android模塊

介紹:

當一個Android應用功能越來越多的時候,保證應用的各個部分之間高效的通信將變得越來越困難。如何優雅地解決這個問題?這時候,就需要使用到EventBus。

EventBus是GreenRobot出品的Android系統的一個Event

Bus類庫,使用起來和之前我們所介紹的Square的Otto差不多,都是用來簡化應用組件之間的通信。

項目地址: 買粉絲s://github.買粉絲/greenrobot/EventBus

13、BeeFramework_Android

介紹:

BeeFramework

Android版主要為Android初級開發人員提供一個基于MVC開發模式的APP DEMO,并提供一套APP內調試工具,包括

查看網絡數據請求歷史 Crash Log列表 真機WIFI環境下模擬2G\3G網絡 查看APP性能(內存占用,CPU占用等)

項目地址: 買粉絲s://github.買粉絲/BeeFramework/BeeFramework_Android

14、afinal

介紹:

Afinal是一個android的ioc,orm框架,內置了四大模塊功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通過finalActivity,我們可以通過注解的方式進行綁定ui和事件。通過finalBitmap,我們可以方便的加載bitmap圖片,而無需考慮oom等問題。通過finalDB模塊,我們一行代碼就可以對android的sqlite數據庫進行增刪改查。通過FinalHttp模塊,我們可以以ajax形式請求買粉絲數據。

Afinal里面目前包含了四大組件:

FinalHttp:用于請求買粉絲數據,直接ajax方式請求,文件上傳, 斷點續傳下載文件等

FinalBitmap:用于顯示bitmap圖片,而無需考慮線程并發和oom等問題。

FinalActivity:完全可以通過注解方式綁定控件和事件,無需編寫代碼。

FinalDb:android中sqlite的orm框架,一行代碼搞定增刪改查。

Afinal是一個android的ioc,orm框架,內置了四大模塊功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通過finalActivity,我們可以通過注解的方式進行綁定ui和事件。通過finalBitmap,我們可以方便的加載bitmap圖片,而無需考慮oom等問題。通過finalDB模塊,我們一行代碼就可以對android的sqlite數據庫進行增刪改查。通過FinalHttp模塊,我們可以以ajax形式請求買粉絲數據。詳情請通過以下買粉絲查看。

項目地址: 買粉絲s://github.買粉絲/yangfuhai/afinal

15、Volley

介紹:

在這之前,我們在程序中需要和網絡通信的時候,大體使用的東西莫過于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google

I/O 2013上,Volley發布了。Volley是Android平臺上的網絡通信庫,能使網絡通信更快,更簡單,更健壯。

項目地址: 買粉絲s://github.買粉絲/mcxiaoke/android-volley

android開發一般都使用什么框架

Android開發框架介紹

編輯文檔

學分 +2

開發框架方面包含基本的應用功能開發、數據存儲、網絡訪問這三大塊:

一、應用方面

一般而言一個標準的Android程序由如下4部分組成即Activity、Broadcast Intent Receiver、Service、Content Provider: 1. Activity是最頻繁、最基本的模塊,在Android中,一個Activity就是手機上一屏,相當于一個網頁一樣,所不同的是,每個Activity運行結束了,有個返回值,類似一個函數一樣。Android系統會自動記錄從首頁到其他頁面的所有跳轉記錄并且自動將以前的Activity壓入系統堆棧,用戶可以通過編程的方式刪除歷史堆棧中的Activity Instance。

Activity類中主要是跟界面資源文件關聯起來(res/layout目錄下的xml資源,也可以不含任何界面資源),內部包含控件的顯示設計、界面交互設計、事件的響應設計以及數據處理設計、導航設計等application設計的方方面面。 2. Broadcast Intent Receiver

Intent提供了各種不同Activity進行跳轉的機制,譬如如果從A activity跳轉到B activity,使用Intent來實現如下: Intent in = new Intent(A.this, B.class); startActivity(in);

BroadcastReceiver提供了各種不同的Android應用程序進行進行進程間通訊的機制,譬如當電話呼叫來臨時,可以通過BroadcastReceiver發布廣播消息。對于用戶而言,BroadcastReceiver是不透明的,用戶無法看到這個事件,BroadcastReceiver通過NotificationManager來通知用戶這些事件發生了,它既可以在資源AndroidManifest.xml中注冊,也可以在代碼中通過Context.registerReceiver()進行注冊,只要是注冊了,當事件來臨的時候,即時程序沒有啟動,系統也在需要的時候會自動啟動此應用程序;另外各應用程序很方便地通過Context.sendBroadcast()將自己的事情廣播給其他應用程序;

3. Service,跟Windows當中的Service完全是一個概念,用戶可以通過startService(Intent service)啟動一個Service,也可通過Context.bindService來綁定一個Service.

4. Content Provider,由于Android應用程序內部的數據都是私有的,Content Provider提供了應用程序之間數據交換的機制,一個程序可以通過實現一個ContentProvider的抽象接口將自己的數據暴露出去,并且隱蔽了具體的數據存儲實現,標準的ContentProvider提供了基本的CRUD(Create,Read,Update,Delete)的接口,并且實現了權限機制,保護了數據交互的安全性; 一個標準的Android應用程序的工程文件包含如下幾大部分: -> Java源代碼部分(包含Activity),都在src目錄當中;

-> R.java文件,這個文件是Eclipse自動生成與維護的,開發者不需要修改,提供了Android對的資源全局索引; -> Android Library,這個是應用運行的Android庫;

-> assets目錄,這個目錄里面主要用與放置多媒體等一些文件;

-> res目錄,放置的是資源文件,跟VC中的資源目錄基本類似,其中的drawable包含的是圖片文件,layout里面包含的是布局文件,values目錄里面主要包含的是字符串(strings.xml)、顏色(買粉絲lors.xml)以及數組(arrays.xml)資源;

-> AndroidManifest.xml,這個文件異常重要,是整個應用的配置文件,在這個文件中,需要聲明所有用到的Activity、Service、Receiver等。

很赞哦!(5443)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:河南新乡封丘县

工作室:小组

Email:[email protected]