㈠ 2019年十大最佳深度學習框架
作者 | Python語音識別
來源 | 濤哥聊Python
雖然我們大多數人都驚嘆為什麼DL這么好?在使用大量數據進行訓練時,它在准確性方面非常出色。近幾年隨著深度學習演算法的發展,出現了很多深度學習的框架,這些框架各有所長,各具特色。下面將為大家介紹2019年最受歡迎的十大深度學習框架。
TensorFlow谷歌的Tensorflow可以說是當今最受歡迎的深度學習框架。Gmail,Uber,Airbnb,Nvidia以及其他許多知名品牌都在使用。TF是目前深度學習的主流框架,Tensorflow主要特性:
TensorFlow支持python、JavaScript、C ++、Java和Go,C#和Julia等多種編程語言。 TF不僅擁有強大的計算集群,還可以在iOS和Android等移動平台上運行模型。 TF編程入門難度較大。初學者需要仔細考慮神經網路的架構,正確評估輸入和輸出數據的維度和數量。 TF使用靜態計算圖進行操作 。也就是說我們需要先定義圖形,然後運行計算,如果我們需要對架構進行更改,我們會重新訓練模型。選擇這樣的方法是為了提高效率,但是許多現代神經網路工具能夠在學習過程中考慮改進而不會顯著降低學習速度。在這方面,TensorFlow的主要競爭對手是PyTorch 。TensorFlow優點:
它非常適合創建和試驗深度學習架構,便於數據集成,如輸入圖形,SQL表和圖像。 它得到谷歌的支持,這就說明該模型短期內不會被拋棄,因此值得投入時間來學習它。 PyTorchTensorflow之後用於深度學習的主要框架是PyTorch。PyTorch框架是Facebook開發的,已被Twitter和Salesforce等公司使用。
PyTorch基本特性:
與TensorFlow不同,PyTorch庫使用動態更新的圖形進行操作 。這意味著它可以在流程中更改體系結構。 在PyTorch中,您可以使用標准調試器 ,例如pdb或PyCharm。PyTorch優點:
訓練神經網路的過程簡單明了。同時,PyTorch支持數據並行和分布式學習模型,並且還包含許多預先訓練的模型。 PyTorch更適合小型項目和原型設計。 SonnetSonnet深度學習框架是建立在TensorFlow的基礎之上。它是DeepMind用於創建具有復雜架構的神經網路。
Sonnet基本特性:
面向對象的庫,在開發神經網路(NN)或其他機器學習(ML)演算法時更加抽象。 Sonnet的想法是構造對應於神經網路的特定部分的主要Python對象。此外,這些對象獨立地連接到計算TensorFlow圖。分離創建對象並將其與圖形相關聯的過程簡化了高級體系結構的設計。Sonnet優點:
Sonnet的主要優點是可以使用它來重現DeepMind論文中展示的研究,比Keras更容易,因為DeepMind論文模型就是使用Sonnet搭建的。 KerasKeras是一個機器學習框架,如果您擁有大量數據和/或你想快速入門深度學習,那麼Keras將非常適合學習。Keras是TensorFlow高級集成APi,可以非常方便的和TensorFlow進行融合。這是我強烈推薦學習的一個庫。
Keras基本特性:
除了Tensorflow之外,Keras還是其他流行的庫(如Theano和CNTK)的高級API。 在Keras中更容易創建大規模的深度學習模型,但Keras框架環境配置比其他底層框架要復雜一些。Keras優點:
對於剛剛入門的人來說,Keras是最好的深度學習框架。它是學習和原型化簡單概念的理想選擇,可以理解各種模型和學習過程的本質。 Keras是一個簡潔的API。 可以快速幫助您創建應用程序。 Keras中代碼更加可讀和簡潔。 Keras模型序列化/反序列化API,回調和使用Python生成器的數據流非常成熟。順便說一下TensorFlow和Keras的對比:
PS:Tensorflow處於底層框架:這和MXNet,Theano和PyTorch等框架一樣。包括實現諸如廣義矩陣 - 矩陣乘法和諸如卷積運算的神經網路原語之類的數學運算。
Keras處於高度集成框架。雖然更容易創建模型,但是面對復雜的網路結構時可能不如TensorFlow。
MXNetMXNet是一種高度可擴展的深度學習工具,可用於各種設備。雖然與TensorFlow相比,它似乎沒有被廣泛使用,但MXNet的增長可能會因為成為一個Apache項目而得到提升。
MXNet基本特性:
該框架支持多種語言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多個GPU和許多機器上非常有效地並行計算。MXNet優點:
支持多個GPU(具有優化的計算和快速上下文切換) 清晰且易於維護的代碼(Python,R,Scala和其他API) 快速解決問題的能力(對於像我這樣的深度學習新手至關重要)雖然它不像TF那麼受歡迎,但MXNet具有詳細的文檔並且易於使用,能夠在命令式和符號式編程風格之間進行選擇,使其成為初學者和經驗豐富的工程師的理想選擇。
GLUONGluon是一個更好的深度學習框架,可以用來創建復雜的模型。GLUON基本特性:
Gluon的特殊性是具有一個靈活的界面,簡化了原型設計,構建和培訓深度學習模型,而不會犧牲學習速度。 Gluon基於MXNet,提供簡單的API,簡化深度學習模型的創建。 與PyTorch類似,Gluon框架支持使用動態圖表 ,將其與高性能MXNet相結合。從這個角度來看,Gluon看起來像是分布式計算的Keras非常有趣的替代品。GLUON優點:
在Gluon中,您可以使用簡單,清晰和簡潔的代碼定義神經網路。 它將訓練演算法和神經網路模型結合在一起,從而在不犧牲性能的情況下提供開發過程的靈活性。 Gluon可以定義動態的神經網路模型,這意味著它們可以動態構建,使用任何結構,並使用Python的任何本機控制流。 SWIFT當你聽到Swift時,您可能會考慮iOS或MacOS的應用程序開發。但是如果你正在學習深度學習,那麼你一定聽說過Swens for Tensorflow。通過直接與通用編程語言集成,Swift for TensorFlow可以以前所未有的方式表達更強大的演算法。SWIFT基本特性:
可以輕松獲得可微分的自定義數據結構。 下一代API 。通過實踐和研究獲得的新API更易於使用且更強大。 在TensorFlow的基礎上 ,Swift API為您提供對所有底層TensorFlow運算符的直接調用。 基於Jupyter、LLDB或者Swift in Colab的編程工具提高了您的工作效率。SWIFT優點:
如果動態語言不適合您的任務,那麼這將是一個很好的選擇。當你訓練運行了幾個小時,然後你的程序遇到類型錯誤,那麼使用Swift,一種靜態類型語言。您將看到代碼錯誤的地方。 Chainer直到CMU的DyNet和Facebook的PyTorch出現之前,Chainer是動態計算圖或網路的領先神經網路框架,它允許輸入數據長度不一致。chainer基本特性:
Chainer代碼是在Numpy和CuPy庫的基礎之上用純Python編寫的, Chainer是第一個使用動態架構模型的框架。Chainer優點:
通過自己的基準測試,Chainer明顯比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的測試組中最慢的。 比TensorFlow更好的GPU和GPU數據中心性能。最近Chainer成為GPU數據中心性能的全球冠軍。 DL4J那些使用Java或Scala的人應該注意DL4J(Deep Learning for Java的簡稱)。DL4J的基本特性:
DL4J中的神經網路訓練通過簇的迭代並行計算。 該過程由Hadoop和Spark架構支持。 使用Java允許您在Android設備的程序開發周期中使用。DL4J優點:
如果您正在尋找一個良好的Java深度學習框架,這會是一個非常好的平台。 ONNXONNX項目誕生於微軟和Facebook,旨在尋找深度學習模型呈現的開放格式。ONNX簡化了在人工智慧的不同工作方式之間傳遞模型的過程。因此ONNX具有各種深度學習框架的優點。
ONNX基本特性:
ONNX使模型能夠在一個框架中進行訓練並轉移到另一個框架中進行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,並且還有許多其他常見框架和庫的連接器。ONNX優點:
對於PyTorch開發人員來說,ONNX是一個好的選擇。但是對於那些喜歡TensorFlow的人來說,Keras等可能好一點。 總結那麼您應該使用哪種深度學習框架?下面是幾點建議:
如果你剛剛開始學習,那麼最好的選擇是Keras 。 出於研究目的,請選擇PyTorch 。 對於生產,您需要關注環境。因此對於Google Cloud,最好的選擇是TensorFlow ,適用於AWS - MXNet和Gluon 。 Android開發人員應該關注D4LJ ,對於iOS來說, Core ML會破壞類似的任務范圍。 最後, ONNX將幫助解決不同框架之間的交互問題。㈡ ncnn框架作者
倪hui。
在2017年,tengxun就開源了ncnn深度學習端側推理框架,該框架憑借良好的社區維護,在Github上是在所有的推理框架中star數目最多的。
ncnn是一個為手機端極致優化的高性能神經網路前向計算框架。ncnn從設計之初深刻考慮手機端的部屬和使用。無第三方依賴,跨平台,手機端cpu的速度快於目前所有已知的開源框架。
㈢ web前端主流框架有哪些
bootstrap框架,這個應該是所有前端開發都知道並用過的一個框架了,應為這個是目前最流行的框架,使用最廣,網上文檔資料模板最多最容易查找的了。它提供了很多流行的樣式簡潔的UI組件,柵格系統以及一些常用的JavaScript插件,簡潔、直觀、強悍,讓web開發更迅速、簡單。
Foundation 是一個易用、強大而且靈活的響應式前端框架,用於構建基於任何設備上的響應式網站、 Web應用和電子郵件。結構語義化、移動設備優先、完全可定製。
Semantic UI 經過多年的努力、致力於可以用更語義化的方式構建網站、原生語言規則讓代碼更易讀易懂。
Amaze UI | 中國首個開源 HTML5 跨屏前端框架。Amaze UI 以移動優先(Mobile first)為理念,組件豐富,模塊化;本地化支持,關注中文排版;輕量級,高性能。官網提供有豐富的模板下載。織夢系統wap手機模塊就是用的就是這個。
SUI 是一套基於bootstrap開發的前端組件庫,同時她也是一套設計規范。通過SUI,可以非常方便的設計和實現精美的頁面。
SUI Mobile 是一套基於Framework7開發的UI庫。它非常輕量、精美,只需要引入我們的CDN文件就可以使用,並且能兼容到 iOS 6.0+ 和 Android 4.0+,非常適合開發跨平台Web App。
㈣ Python 有哪些好的 Web 框架
1、Django
Python中最全能的Web開發框架,各種功能完備,可維護性和開發速度都一級棒,不少人反應Django框架慢,它主要慢在DjangoORM與資料庫的交互上,所以是否使用Django框架,需要取決於項目對資料庫交互的要求以及各種優化,而對於Django的同步特性導致吞吐量小的問題,可以通過Celery等解決,這並不是一個致命問題。
2、Tornado
非同步,性能強悍,然而它相比Django框架來說,相對原始,很多東西需要自己去處理,隨著項目的逐漸擴大,框架所能提供的功能也會越來越小,更多的東西需要團隊自己去實現,而大項目往往需要性能的保證,這時它就是最佳的選擇。
3、Flask
微框架,可以說是Python代碼寫得最好的項目之一,它的靈活性也是把雙刃劍,能使用好Flask框架,即可以做成Pinterest,用不好就是災難,它是一個微框架,但也可以做成規模化的Flask,加上它可以自由選擇自己的資料庫交互組件,而且加上celery+redis等非同步特性之後,Flask的性能相對Tornado也不相上下,也許Flask的靈活性可能是某些團隊更需要的。
4、Twisted
前面提到的3個Web框架都是圍繞應用層HTTP展開的,而Twisted則不同,它是一個用Python語言編寫的事件驅動的網路框架,對於追求伺服器性能的應用,它是個非常不錯的選擇。
它支持很多協議,包括傳輸層的UDP、TCP、TLS,以及應用層的HTTP、FTP等,對於這些協議,Twisted提供了客戶端和伺服器方面的開發工具。
它是一個高性能的編程框架,在不同的操作系統上,Twisted利用不同的底層技術實現了高性能通信,在開發方法上,Twisted引導程序員使用非同步編程模型,它提供了豐富的Defer、Threading等特性來支持非同步編程。
㈤ php有哪些框架
PHP的框架有很多,這里說一部分供大家參考:
國內框架:ThinkPHP, Canphp, KYPHP, InitPHP, SpeedPHP, CdvPHP,KPHP。
國外著名框架:Zend Framework,Codelgniter,CakePHP,Symfony,Yii,Seagull,Laravel。
小型框架:E,DuoLamPHP,Difeye,GalaxixPhp,PhpPeanuts,Rong Framework,Openbiz Framework。
㈥ PHP哪個框架最好
二話不說先來一個 Github 上 PHP 開源項目的排名 Search · stars:>0 · GitHub , 好有個概念.
大家的回答都比較老了, 現在是 2014 年 8 月下旬, PHP 最近這幾年還是發生了很多變化, 尤其是 Laravel 的出現, 讓很多已經開始放棄 PHP 的人又從新回到 PHP 的懷抱.
離開 PHP 是因為覺得社區就是一盤散沙, 大家各種為戰, 當我想學個框架, 來提高生產效率的時候, 上 Google 一搜, 出來的就是
50個你必須了解的 PHP 框架>
<10個最有名的 PHP 框架>....
真的很嚇人, 這么多的框架, 我無從入手.
最後我下定決心, 把每一個框架都學習一遍, 真正在學習的時候, 頭又大了, 每一個框架都有不同的代碼規范, 不同的架構, 不同 "功能一樣調用方式不一樣的函數方法" , 可以這么說
每一個框架都在發明屬於自己的語言
在學到第五個框架的時候, 我就決定放棄了, 因為, 我覺得, 我雖然年輕, 但是不至於時間如此廉價的浪費掉.
後來一直聽說 Ruby 社區有一個叫 Ruby on Rails 的 Web 框架, 是全世界最好的框架, 為了用上最好的框架我開始學習 Ruby 直到接觸 Rails, 還記得第一次用 Rails 寫 Demo App 的時候, 熱淚盈眶呀, 多麼好的設計, 並且最重要的, Rails 的社區是如此理智, 大家喊得口號是
Convention over configuration;
DRY - Don't Repeat You;
KISS - Keep it simple and stupid;
Don't reinventing the wheel;
Optimized for programmer happiness and sustainable proctivity
多麼智慧, 多麼聰明, 又是多麼簡單的一些想法, 我瘋狂的愛上了 Rails.
2012 年末, 無意間在 Tuts+ 網站上看到 Jeffrey Way 的一套 Laravel 3 Essentials ( 注意: Laravel 現在已經是 Laravel 4 了, 這套課程已經 out dated 了 ) 課程, 看完以後對 Laravel 印象深刻, 從那會就一直留意 Laravel 的發展.
2013 年 6 月份, Laravel 4 發布, 集成了 Composer, 框架的可擴展性極高, 還有 100% full testing coverage.
關於 Laravel 4 的好, 我在這個問題裡面已經講了 最好的 PHP 框架是什麼?為什麼? , 就不復制過來了.
Laravel China:
Laravel China is ready Laravel 中文文檔 , 歡迎發起 issue 提交紕漏 和建議 --> Laravel China · GitHub
㈦ android app開發中常用到哪些開源框架
在前面的課程中,隨著對Android體系的了解,已經可以進行正常的Android應用開發了。在Android開發中,同其他工程開發一樣,也經常使用一些提高效率的框架,本文我們做一個對比。這些框架,既包括:網路請求框架、也包括圖片載入庫框架、還包括資料庫操作等一些框架,總之,了解和熟悉這些框架,會對自己的開發效率有很大的提升和幫助。
網路請求框架
1、okHttp
在前文的學習中,我們已經了解過okHttp,是一個常用的網路載入庫。
2、Retrofit
介紹
Retrofit是一個很不錯的網路請求庫,該庫是square開源的另外一個庫,之前的okhttp也是該公司開源的。
Retrofit是基於OkHttp封裝的RESTful網路請求框架,使用註解的方式配置請求。優點是速度快,使用註解,callback函數返回結果自動包裝成Java對象。官方自己的介紹說:
A type-safe REST client for Android and Java
該網路框架在github上的地址如下:https://square.github.io/retrofit/
要求
Retrofit支持的http方式方式包括 GET/POST/PUT/DELETE/HEAD/PATCH,Retrofit要求Java的版本是1.8+,Android應用的API版本應該在21+。
依賴
使用Retrofit庫,和其他庫一樣,首先需要設置依賴,依然是在build.gradle文件中設置依賴:
//添加retrofit庫依賴
implementation 『com.squareup.retrofit2:retrofit:2.1.0』
//添加gson轉換器
implementation 『com.squareup.retrofit2:converter-gson:2.1.0』
使用
通過一個例子,我們可以來演示該框架的使用步驟:
1、定義請求介面,即程序中都需要什麼請求操作
public interface HttpServices {
/**
獲取頭條新聞
@param type 新聞類型
@param key apiKey
@return
*/
@GET(「toutiao/index」)
Call getNewsList(@Query(「type」) String type, @Query(「key」) String key);
}
2、實例化Retrofit對象,使用的Builder的模式創建,如下代碼所示:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_API)
.addConverterFactory(GsonConverterFactory.create())
.build();
注意,這里設置結構體轉換器,是可以直接把網路請求回來的數據轉換為Java結構體,這里設置的Gson解析器,因此要引入相應的轉換器支持庫。
3、得到介面對象,自己創建的全局的介面對象,並調用相應的介面,得到一個類似於請求Call對象。如下所示:
HttpServices httpServices = retrofit.create(HttpServices.class);
Call newsListCall = httpServices.getNewsList(「top」, Constants.API_KEY);
4、加入到請求隊列中,並設置回調方法:
newsListCall.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
//網路請求成功的回調方法
List list = Arrays.asList(response.body().result.data);
Log.i(「TAG」, 「請求成功:」 + String.valueOf(list.size()));
NewListAdapter adapter = new NewListAdapter(RetrofitActivity.this);
adapter.setmData(list);
mRecyclerView.setAdapter(adapter);
}
@Override
public void onFailure(Call call, Throwable throwable) {
//網路請求失敗的回調方法
Log.i(「TAG」, 「請求失敗:」 + throwable.getMessage());
}
});
其他界面操作和之前的Android中的內容一致。
3、RxJava
簡單來說,用來處理事件和非同步任務,在很多語言上都有實現,RxJava是Rx在Java上的實現。
原理
RxJava最基本的原理是基於觀察者模式來實現的。通過Obserable和Observer的機制,實現所謂響應式的編程體驗。
特點
RxJava在編程中的實現就是一種鏈式調用,做了哪些操作,誰在前誰在後非常直觀,邏輯清晰,代碼維護起來非常輕松。
RxJava也是一個在github上的庫,githubhttp://www.xingkongmj.com/news/id/62.html地址如下:https://github.com/ReactiveX/RxJava
基於此,還有一個RxAndroid,github地址如下:https://github.com/ReactiveX/RxAndroid
RxJava和RxAndroid的關系
RxAndroid是RxJava的一個針對Android平台的擴展,主要用於 Android 開發。
基本概念
RxJava 有四個基本概念:
Observable:可觀察者,即被觀察者Observer:觀察者subscribe:訂閱事件
這四個概念之間的邏輯關系是:Observable和Observer通過subscribe方法實現訂閱關系,從而Observable可以在需要的時候發出事件來通知Observer。
事件
RxJava 的事件回調方法主要包含以下幾個:
onNext:普通的事件onCompletedhttp://dachang.net/432717.html:事件隊列完結。RxJava 不僅把每個事件單獨處理,還會把它們看做一個隊列。RxJava 規定,當不會再有新的 onNext 發出時,需要觸發 onCompleted 方法作為標志。:事件隊列異常。在事件處理過程中出異常時, 會被觸發,同時隊列自動終止,不再允許再有事件發出。在一個正確運行的事件序列中, onCompleted和 有且只有一個,並且是事件序列中的最後一個。需要注意的是,onCompleted() 和 () 二者也是互斥的,即在隊列中調用了其中一個,就不應該再調用另一個。
資料庫操作框架
在開發時,本地資料庫可以起到緩存數據和存儲業務數據的作用,隨著技術的成熟,不斷推出了有很多關於資料庫的操作框架。比較常見的資料庫操作框架有諸如:GreenDao,OrmLite 和 ActiveAndroid,DBFlow等。
GreenDAO
GreenDAO是一個開源的 Android ORM(「對象/關系映射」),通過 ORM(稱為「對象/關系映射」),在我們資料庫開發過程中節省了開發時間!
GreenDao的官方文檔地址如下:http://www.xingkongmj.com/news/id/63.html
GreenDao的作用
通過 GreenDao,我們可以更快速的操作資料庫,我們可以使用簡單的面相對象的API來存儲,更新,刪除和查詢 Java 對象。這款資料庫操作框架的特點是:
高性能,在官方的統計數據中,GreenDao在GreenDao,OrmLite 和 ActiveAndroid三個框架中,讀、寫、更新操作效率均表現第一。易於使用的強大 API,涵蓋關系和連接。內存消耗較小。安全:greenDAO 支持 SQLCipherhttp://www.xingkongmj.com/news/id/64.html,以確保用戶的數據安全;
核心概念
GreenDao 的核心類有三個:分別是:
DaoMaster:保存資料庫對象(SQLiteDatabase)並管理特定模式的 DAO 類(而不是對象)。它有靜態方法來創建表或刪除它們。它的內部類 OpenHelper 和DevOpenHelper 是 SQLiteOpenHelper 實現,它們在 SQLite 資料庫中創建模式。DaoSession:管理特定模式的所有可用 DAO 對象,您可以使用其中一個getter方法獲取該對象。DaoSession 還提供了一些通用的持久性方法,如實體的插入,載入,更新,刷新和刪除。XXXDao:數據訪問對象(DAO)持久存在並查詢實體。對於每個實體,greenDAO 生成DAO。它具有比 DaoSession 更多的持久性方法。Entities:可持久化對象。通常, 實體對象代表一個資料庫行使用標准 Java 屬性(如一個POJO 或 JavaBean )。
使用
按照官方的文檔和github上的說明可以實現green的使用。
首先進行的是依賴,對於greenDao,有兩個地方需要設置,分別是項目根目錄中的 build.gradle,還有mole中的build.gradle。
classpath 『org.greenrobot:green-gradle-plugin:3.3.0』 // add plugin
在項目根目錄中的build.gradle目錄中寫這句話的意思是添加greenDao的插件。
在項目mole中的build.gradle中也需要進行配置,有兩個地方需要設置,如下圖所示:
apply plugin: 『org.greenrobot.greenhttp://www.xingkongmj.com/news/id/66.html』 //開頭加入該代碼
dependences{
implementation 『org.greenrobot:green:3.2.0』
}
然後就可以使用了。
bean實體
可以在項目中創建自己業務需要的實體類,並通過註解來設置是實體類,欄位約束等內容。然後點擊Android Studio中的Make mole,即可自動生成XXXDao代碼,以此來方便開發者的操作。生成的XXXDao類,不可修改和編輯,是自動生成的。
ORMLite
ORMLite框架是另外一款Android開發中可以使用的資料庫操作框架。該框架的文檔地址如下:https://ormlite.com/sqlite_java_android_orm.shtml
該框架的文檔准備的不是特別友好,此處不再贅述。
總結,所有的框架原理幾乎都相差不大,只是操作有所差異。
視圖注入框架
在Android項目開發過程中,有太多的頁面需要布局完成,同時在代碼中需要些大量的findviewbyid的操作,來實現控制項的解析。於是就有人想能否輕松一些,解放雙手節省時間,干一些其他有意義的事情,於是ButterKnife就來了。
ButterKnife是一個專注於Android系統的View注入框架,可以減少大量的findViewById以及setOnClickListener代碼,可視化一鍵生成。
該項目在github上的地址如下:http://www.xingkongmj.com/news/id/65.html
這個框架的優勢也非常明顯:
強大的View綁定和Click事件處理功能,簡化代碼,提升開發效率方便的處理Adapter里的ViewHolder綁定問題運行時不會影響APP效率,使用配置方便代碼清晰,可讀性強
使用
首先是設置依賴,在build.gradlehttp://dachang.net/432714.html中進行依賴設置:
implementation 『com.jakewharton:butterknife:10.2.1』
annotationProcessor 『com.jakewharton:butterknife-compiler:10.2.1』
需要注意,該框架要求Java環境1.8版本以上,SDK版本在26以上,因此在使用到的mole中的build.graldle文件中,還必須添加如下代碼配置:
apply plugin: 『com.jakewharton.butterknife』
android{
//…
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//…
}
另外,還必須在項目根目錄中的build.gradle文件中,添加該框架的插件,如下圖所示:
dependences{
classpath 『com.jakewharton:butterknife-gradle-plugin:10.2.1』
}
然後即可在代碼中進行使用了。
在使用該框架的頁面進行綁定諸如,如下所示代碼:
ButterKnife.bind( this) ;
主要的功能
@BindView():控制項id 註解,解放雙手,不用再每個控制項都寫一遍findviewById@BindViews():多個控制項id 的註解,括弧內使用花括弧包括多個id即可,中間用,分割開在Fragment中使用,綁定Fragment。@BindString():綁定字元串@BindArray:綁定數組@BindBitmap:綁定bitmap資源@OnClick、@OnLongClick:綁定點擊事件和長按事件…還有很多
插件安裝
如果是頁面很復雜,一個一個寫BindView也很費勁,在Android Studio中,可以安裝一個ButterKnife的插件,安裝該插件後,可以在Studio中直接將對應的布局中的所有控制項均給自動生成。
注意,在進行自動生成時,滑鼠要放在布局文件上。
注意事項
ButterKnife框架在使用時,要求的版本比較高,包括Java的版本也有限制。因此,如果計劃在項目中使用,要提前做好預備工作,以防止對已有項目和業務帶來不必要的麻煩,反而影響工作進度。
㈧ Python幾種主流框架比較
從GitHub中整理出的15個最受歡迎的Python開源框架。這些框架包括事件I/O,OLAP,Web開發,高性能網路通信,測試,爬蟲等。x0dx0ax0dx0aDjango: Python Web應用開發框架x0dx0a Django 應該是最出名的Python框架,GAE甚至Erlang都有框架受它影響。Django是走大而全的方向,它最出名的是其全自動化的管理後台:只需要使用起ORM,做簡單的對象定義,它就能自動生成資料庫結構、以及全功能的管理後台。x0dx0ax0dx0aDiesel:基於Greenlet的事件I/O框架x0dx0a Diesel提供一個整潔的API來編寫網路客戶端和伺服器。支持TCP和UDP。x0dx0ax0dx0aFlask:一個用Python編寫的輕量級Web應用框架x0dx0a Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2 x0dx0a模板引擎。Flask也被稱為「microframework」,因為它使用簡單的核心,用extension增加其他功能。Flask沒有默認使用的數x0dx0a據庫、窗體驗證工具。x0dx0ax0dx0aCubes:輕量級Python OLAP框架x0dx0a Cubes是一個輕量級Python框架,包含OLAP、多維數據分析和瀏覽聚合數據(aggregated data)等工具。x0dx0ax0dx0aKartograph.py:創造矢量地圖的輕量級Python框架x0dx0a Kartograph是一個Python庫,用來為ESRI生成SVG地圖。Kartograph.py目前仍處於beta階段,你可以在virtualenv環境下來測試。x0dx0ax0dx0aPulsar:Python的事件驅動並發框架x0dx0a Pulsar是一個事件驅動的並發框架,有了pulsar,你可以寫出在不同進程或線程中運行一個或多個活動的非同步伺服器。x0dx0ax0dx0aWeb2py:全棧式Web框架x0dx0a Web2py是一個為Python語言提供的全功能Web應用框架,旨在敏捷快速的開發Web應用,具有快速、安全以及可移植的資料庫驅動的應用,兼容Google App Engine。x0dx0ax0dx0aFalcon:構建雲API和網路應用後端的高性能Python框架x0dx0a Falcon是一個構建雲API的高性能Python框架,它鼓勵使用REST架構風格,盡可能以最少的力氣做最多的事情。x0dx0ax0dx0aDpark:Python版的Sparkx0dx0a DPark是Spark的Python克隆,是一個Python實現的分布式計算框架,可以非常方便地實現大規模數據處理和迭代計算。DPark由豆瓣實現,目前豆瓣內部的絕大多數數據分析都使用DPark完成,正日趨完善。x0dx0ax0dx0aBuildbot:基於Python的持續集成測試框架x0dx0a Buildbot是一個開源框架,可以自動化軟體構建、測試和發布等過程。每當代碼有改變,伺服器要求不同平台上的客戶端立即進行代碼構建和測試,收集並報告不同平台的構建和測試結果。x0dx0ax0dx0aZerorpc:基於ZeroMQ的高性能分布式RPC框架x0dx0a Zerorpc是一個基於ZeroMQ和MessagePack開發的遠程過程調用協議(RPC)實現。和 Zerorpc 一起使用的 Service API 被稱為 zeroservice。Zerorpc 可以通過編程或命令行方式調用。x0dx0ax0dx0aBottle: 微型Python Web框架x0dx0a Bottle是一個簡單高效的遵循WSGI的微型python Web框架。說微型,是因為它只有一個文件,除Python標准庫外,它不依賴於任何第三方模塊。x0dx0ax0dx0aTornado:非同步非阻塞IO的Python Web框架x0dx0a Tornado的全稱是Torado Web Server,從名字上看就可知道它可以用作Web伺服器,但同時它也是一個Python Web的開發框架。最初是在FriendFeed公司的網站上使用,FaceBook收購了之後便開源了出來。x0dx0ax0dx0awebpy: 輕量級的Python Web框架x0dx0a webpy的設計理念力求精簡(Keep it simple and powerful),源碼很簡短,只提供一個框架所必須的東西,不依賴大量的第三方模塊,它沒有URL路由、沒有模板也沒有資料庫的訪問。x0dx0ax0dx0aScrapy:Python的爬蟲框架x0dx0a Scrapy是一個使用Python編寫的,輕量級的,簡單輕巧,並且使用起來非常的方便。
㈨ 當前主流的RPC框架有哪些
我所在的項目組,服務端用的是Kubbo框架。(服務端和客戶端搭建不是很復雜,快捷,sogou測試實際經驗)Kubbo是一個分布式高性能rpc框架,支持非同步調用,底層基於kubernetes和netty。支持JAVA6及以上,建議使用JAVA8。kubbo屬於中間件層,關注的是開發效率,網路層透明抽象和服務治理是它的核心功能。
希望對你有所幫助~~
㈩ web前端常用的框架有哪些
現在比較常用的主流框架有Vue、React、Angular。
Angular
Angular原名angularJS誕生於2009年,之前我們都是用jquery開發,自從angular的出現讓我們有了新的選擇,它最大的特點是把後端的一些開發模式移植到前端來實現,如MVC、依賴注入等,創新式的雙向數據綁定不知簡化了我們多少代碼,讓我們為之瘋狂,特別是表單處理方面,從此名聲大噪。
好的框架一般會有兩個結果,一個繼續不斷更新迭代,避免被拍死在沙灘上,一個是被一些大公司收購煥發第二春,angular屬於後者被google所收購,且從2.0後改名angular並使用微軟的typescript作為開發語言,目前最新版本8.0,照說傍上google與微軟這兩條大船,前途應該不可限量才對,然而造化弄人,現在angular的市場份額已經被React這個後起之秀和Vue這顆新星遠遠地甩到腦後。
React
React,facebook出品,正式版推出是在2013年,比angular晚了4年,但得益於其創新式的VirtualDOM,性能上碾壓angularJS,一經推出,火的一塌糊塗。 特點很多,VirtualDOM、JSX、Diff演算法等,支持ES6語法,採用函數式編程,門檻稍高,但也更靈活,能讓開發具有更多可能性。
Vue
Vue作為最後推出的框架(2014年),借鑒了前輩angular和react的特點(如VirtualDOM、雙向數據綁定、diff演算法、響應式屬性、組件化開發等)並做了相關優化,使其使用起來更加方便,更容易上手,比較少適合初學者。網上有很多人說Vue不適合做大型項目,純屬扯淡,Vue在這方面已經優化得很好,當然,大量的響應式屬性(監聽屬性)也許會用一定的性能損耗,但在硬體、網路大力發展的今天,這些細微的性能差異幾乎感覺不到。