2017年8月27日 星期日

Python 自動化測試

http://www.qa-knowhow.com/?p=1936

Selenium自動化測試技術文章彙整(140+篇!)


http://www.qa-knowhow.com/?p=2531

https://medium.com/@jemmy1234/%E5%88%A9%E7%94%A8-python-%E5%81%9A%E7%B6%B2%E9%A0%81%E8%87%AA%E5%8B%95%E5%8C%96%E6%B8%AC%E8%A9%A6-902d6361b4e3

http://icodding.blogspot.tw/2015/11/pythonselenium-web.html

2017年8月14日 星期一

NodeJS PM2 Note

https://github.com/Unitech/pm2

PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.

Starting an application in production mode is as easy as:

$ pm2 start app.js

2017年8月10日 星期四

Fwd: 让Nodejs来管理定时任务later



http://blog.fens.me/nodejs-cron-later/

将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!


CentOS7 # linux GUI2CLI and CLI2GUI mode switch command


##顯示目前系統預設運作層級
$sudo systemctl get-default
graphical.target

#切換運作層級至文字模式(runlevel 3)
 
$sudo systemctl isolate multi-user.target

#切換運作層級至 GUI 模式(runlevel 5)
$sudo systemctl isolate graphical.target

#設定開機啟動至文字模式(runlevel 3)
$sudo systemctl set-default multi-user.target

#設定開機啟動至 GUI 模式(runlevel 5)
$sudo systemctl set-default graphical.target



2017年8月7日 星期一

Redis資料結構簡介 :TRING(字串)、LIST(清單)、SET(集合)、HASH(散列)和ZSET(有序集合)

Redis資料結構簡介
Redis可以存儲鍵與5種不同資料結構類型之間的映射,這5種資料結構類型分別為
STRING(字串)、LIST(清單)、SET(集合)、HASH(散列)和ZSET(有序集合)


1. STRING(字串):
字串命令: 
命令        行為
GET  獲取存儲在給定鍵中的值
SET  設置存儲在給定鍵中的值
DEL  刪除存儲在給定鍵中的值(這個命令可以用於所有類型)
代碼清單1-1 SETGETDEL的使用示例

$ redis-cli                                 # 啟動redis-cli 用戶端
redis 127.0.0.1:6379> set hello world       # 將鍵 hello 的值設置為 world
OK                                          # SET 命令在執行成功時返回 OK Python 用戶端會將這個 OK 轉換成 True
redis 127.0.0.1:6379> get hello             # 獲取儲存在鍵 hello 中的值。
"world"                                     # 鍵的值仍然是 world ,跟我們剛才設置的一樣。
redis 127.0.0.1:6379> del hello             # 刪除這個鍵值對。
(integer) 1                                 # 在對值進行刪除的時候,DEL 命令將返回被成功刪除的值的數量。
redis 127.0.0.1:6379> get hello             # 因為鍵的值已經不存在,所以嘗試獲取鍵的值將得到一個 nil
(nil)                                       # Python 用戶端會將這個 nil 轉換成 None
redis 127.0.0.1:6379>

2. LIST(列表):
列表命令 
命令        行為
RPUSH     將給定值推入到列表的右端
LRANGE   獲取列表在給定範圍上的所有值
LINDEX    獲取清單在給定位置上的單個元素
LPOP        從列表的左端彈出一個值,並返回被彈出的值
代碼清單1-2 RPUSHLRANGELINDEXLPOP的使用示例

redis 127.0.0.1:6379> rpush list-key item   # 在向清單推入新元素之後,該命令會返回列表的當前長度。
(integer) 1                                 #
redis 127.0.0.1:6379> rpush list-key item2  #
(integer) 2                                 #
redis 127.0.0.1:6379> rpush list-key item   #
(integer) 3                                 #
redis 127.0.0.1:6379> lrange list-key 0 -1  # 使用0為範圍的起始索引,-1為範圍的結束索引,
1) "item"                                   # 可以取出清單包含的所有元素。
2) "item2"                                  #
3) "item"                                   #
redis 127.0.0.1:6379> lindex list-key 1     # 使用LINDEX可以從清單裡面取出單個元素。
"item2"                                     #
redis 127.0.0.1:6379> lpop list-key         # 從清單裡面彈出一個元素,被彈出的元素不再存在於清單。
"item"                                      #
redis 127.0.0.1:6379> lrange list-key 0 -1  #
1) "item2"                                  #
2) "item"                                   #
redis 127.0.0.1:6379>

3. SET(集合):
集合命令 
命令        行為
SADD       將給定元素添加到集合
SMEMBERS     返回集合包含的所有元素
SISMEMBER    檢查給定元素是否存在于集合中
SREM       如果給定的元素存在于集合中,那麼移除這個元素
代碼清單1-3 SADDSMEMBERSSISMEMBERSREM的使用示例

redis 127.0.0.1:6379> sadd set-key item     # 在嘗試將一個元素添加到集合的時候,
(integer) 1                                 # 命令返回1表示這個元素被成功地添加到了集合裡面,
redis 127.0.0.1:6379> sadd set-key item2    # 而返回0則表示這個元素已經存在于集合中。
(integer) 1                                 #
redis 127.0.0.1:6379> sadd set-key item3    #
(integer) 1                                 #
redis 127.0.0.1:6379> sadd set-key item     #
(integer) 0                                 #
redis 127.0.0.1:6379> smembers set-key      # 獲取集合包含的所有元素將得到一個由元素組成的序列,
1) "item"                                   # Python用戶端會將這個序列轉換成Python集合。
2) "item2"                                  #
3) "item3"                                  #
redis 127.0.0.1:6379> sismember set-key item4   # 檢查一個元素是否存在于集合中,
(integer) 0                                     # Python用戶端會返回一個布林值來表示檢查結果。
redis 127.0.0.1:6379> sismember set-key item    #
(integer) 1                                     #
redis 127.0.0.1:6379> srem set-key item2    # 在使用命令移除集合中的元素時,命令會返回被移除的元素數量。
(integer) 1                                 #
redis 127.0.0.1:6379> srem set-key item2    #
(integer) 0                                 #
redis 127.0.0.1:6379>  smembers set-key
1) "item"
2) "item3"
redis 127.0.0.1:6379>

4. HASH(散列):
散列命令 
命令        行為
HSET        在散列裡面關聯起給定的鍵值對
HGET       獲取指定散列鍵的值
HGETALL  獲取散列包含的所有鍵值對
HDEL       如果給定鍵存在於散列裡面,那麼移除這個鍵
代碼清單1-4 HSETHGETHGETALLHDEL的使用示例

redis 127.0.0.1:6379> hset hash-key sub-key1 value1 # 在嘗試添加鍵值對到散列的時候,
(integer) 1                                         # 命令會返回一個值來表示給定的鍵是否已經存在於散列裡面。
redis 127.0.0.1:6379> hset hash-key sub-key2 value2 #
(integer) 1                                         #
redis 127.0.0.1:6379> hset hash-key sub-key1 value1 #
(integer) 0                                         #
redis 127.0.0.1:6379> hgetall hash-key              # 獲取散列包含的所有鍵值對,
1) "sub-key1"                                       # Python用戶端會將這些鍵值對轉換為Python字典。
2) "value1"                                         #
3) "sub-key2"                                       #
4) "value2"                                         #
redis 127.0.0.1:6379> hdel hash-key sub-key2        # 在刪除鍵值對的時候,
(integer) 1                                         # 命令會返回一個值來表示給定的鍵在移除之前是否存在於散列裡面。
redis 127.0.0.1:6379> hdel hash-key sub-key2        #
(integer) 0                                         #
redis 127.0.0.1:6379> hget hash-key sub-key1        # 從散列裡面單獨取出一個域。
"value1"                                            #
redis 127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value1"

5. ZSET(有序集合):
有序集合命令 
命令        行為
ZADD       將一個帶有給定分值的成員添加到有序集合裡面
ZRANGE   根據分值的排序順序,獲取有序集合在給定位置範圍內的所有元素
ZRANGEBYSCORE   獲取有序集合在給定分值範圍內的所有元素
ZREM      如果給定成員存在于有序集合,那麼移除這個成員
代碼清單1-5 ZADDZRANGEZRANGEBYSCOREZREM的使用示例

redis 127.0.0.1:6379> zadd zset-key 728 member1     # 在嘗試向有序集合添加元素的時候,
(integer) 1                                         # 命令會返回新添加元素的數量。
redis 127.0.0.1:6379> zadd zset-key 982 member0     #
(integer) 1                                         #
redis 127.0.0.1:6379> zadd zset-key 982 member0     #
(integer) 0                                         #
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores   # 獲取有序集合包含的所有元素,
1) "member1"                                            # 這些元素會按照分值進行排序,
2) "728"                                                # Python用戶端會將這些分值轉換成浮點數。
3) "member0"                                            #
4) "982"                                                #
redis 127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores   # 也可以根據分值來獲取有序集合的其中一部分元素。
1) "member1"                                                    #
2) "728"                                                        #
redis 127.0.0.1:6379> zrem zset-key member1     # 在移除有序集合元素的時候,
(integer) 1                                     # 命令會返回被移除元素的數量。
redis 127.0.0.1:6379> zrem zset-key member1     #
(integer) 0                                     #
redis 127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"



link from => http://redisinaction.com/preview/chapter1.html

Linux 常用資料庫介紹

    1-1 一些資料庫和緩存伺服器的特性與功能
    名稱
    類型
    資料存儲選項
    查詢類型
    附加功能
    Redis
    使用記憶體存儲(in-memory 的非關聯式資料庫
    字串、清單、集合、散清單、有序集合
    每種資料類型都有自己的專屬命令, 另外還有批量操作(bulk operation)和不完全(partial)的事務支援
    發佈與訂閱, 主從複製(master/slave replication), 持久化, 腳本(存儲過程,stored procedure
    memcached
    使用記憶體存儲的鍵值緩存
    鍵值之間的映射
    創建命令、讀取命令、更新命令、刪除命令以及其他幾個命令
    為提升性能而設的多執行緒伺服器
    MySQL
    關聯式資料庫
    每個資料庫可以包含多個表, 每個表可以包含多個行; 可以處理多個表的視圖(view); 支援空間(spatial)和協力廠商擴展
    SELECT  INSERT  UPDATE  DELETE 、函數、存儲過程
    支援ACID性質(需要使用InnoDB), 主從複製和主主複製 master/master replication
    PostgreSQL
    關聯式資料庫
    每個資料庫可以包含多個表, 每個表可以包含多個行; 可以處理多個表的視圖; 支援空間和協力廠商擴展;支援可定制類型
    SELECT  INSERT  UPDATE  DELETE 、內置函數、自訂的存儲過程
    支援ACID性質,主從複製, 由協力廠商支援的多主複製 multi-master replication
    MongoDB
    使用硬碟存儲(on-disk)的非關係文檔存儲
    每個資料庫可以包含多個表, 每個表可以包含多個無schema schema-less)的BSON文檔
    創建命令、讀取命令、更新命令、刪除命令、條件查詢命令,等等
    支援map-reduce操作,主從複製,分片, 空間索引(spatial inde

2017年8月3日 星期四

ubuntu背景執行方法

Apache HADOOP 安裝多主機(cluster)模式在 CentOS Linux 7

HADOOP 安裝多主機(cluster)模式

http://blog.jangmt.com/2015/09/apache-hadoop-cluster-centos.html

Ubuntu Linux 架設 Hadoop 單節點測試主機教學 - G. T. Wang

https://blog.gtwang.org/linux/linux-hadoop-single-node-cluster-tutorial/


如何在 CentOS 7.1.1503 安裝 Hadoop 2.7.1 (Single-Node Cluster) - 傑士伯的IT學習之路

http://jasper-it.blogspot.tw/2015/08/hadoop-centos-711503-hadoop-271-single.html



redis tool

[redis tool]
https://github.com/Automattic/kue

Kue is a priority job queue backed by redis, built for node.js.

PROTIP This is the latest Kue documentation, make sure to also read the changelist.


Features

  • Delayed jobs
  • Distribution of parallel work load
  • Job event and progress pubsub
  • Job TTL
  • Optional retries with backoff
  • Graceful workers shutdown
  • Full-text search capabilities
  • RESTful JSON API
  • Rich integrated UI
  • Infinite scrolling
  • UI progress indication
  • Job specific logging
  • Powered by Redis

神經網路加速器大戰開打

http://www.eettaiwan.com/news/article/20170726NT01-neural-accelerator-battle-begins?utm_source=EETT%20Article%20Alert&utm_medium=Email&utm_campaign=2017-07-27

隨著許多嵌入式系開始變得「智慧」且「自主」,以人工智慧(AI)神經網路為導向的嵌入式系統市場即將起飛,神經網路加速器大戰一觸發…

嵌入式神經網路加速器市場持續升溫,從智慧音箱、無人機到智慧燈泡等越來越多的系統準備在本地執行神經網路,以取代傳送至雲端進行運算的途徑。

Movidius副總裁兼總經理Remi El-Ouazzane日前在接受《EE Times》訪問時,將這個成長中的趨勢定義為「讓事情變得更智慧與自主的一場競賽」。

20170726_Movidius_NT01P1Remi El-Ouzaane,Movidius副總裁兼總經理Remi El-Ouazzane

英特爾旗下子公司Movidius在上週推出了一款採用USB外形的獨立式人工智慧(AI)加速器。El-Ouazzane說,這款名為Movidius神經運算棒(Neural Compute Stick)的AI加速器設計,可輕鬆簡單地插入Raspberry Pi或X86 PC,讓大學研究人員、獨立軟體開發人員與程式增補人員易於為嵌入式系統進行編譯、調整以及加速深度學習應用。

Movidius在去年秋天被英特爾收購後,如今已成為英特爾新技術部門的一部份。Movidius之前曾經開發出業界首款視覺處理器——Myriad 2 VPU。如今,El-Ouazzane表示,推出這款運算棒的最終目標在於讓Movidius VPU成為可在邊緣執行神經網路的「參考架構」。

20170726_Movidius_NT01P2Movidius Myria 2 VPU方塊圖 (來源:Intel/Movidius)

儘管目標遠大,但業界分析師隨即指出,Movidius Myriad 2 VPU當然不是嵌入式系統中可在邊緣執行神經網路的唯一選擇。

催生新產品類別:神經加速器

Tirias Research首席分析師Jim McGregor表示:「從技術上來看,您可以使用任何具有處理元件的開發板,並用於執行一種模型。例如機器學習(Machine learning)/AI模型已經執行於各種廣泛的處理器和SoC了,特別是針對行動領域。」

高通(Qualcomm)以Snapdragon系列實現的影像辨識可說是最佳的例子。高通從Snapdragon 820開始採用自家開發的模型,McGregor說:「Snapdragon基本上就是推理引擎」。

具有平行處理元件(如GPU、DSP和FPGA)的處理解決方案非常適於作為推理引擎。McGregor解釋說,許多正在開發中的客製化晶片解決方案都採用可內建於SoC的DSP或FPGA。

Linley Gwennap首席分析師Linley Gwennap對此表示贊同。他在最近出刊的《微處理器報告》(Microprocessor Report)中寫道:高通、蘋果(Apple)和英特爾(Movidius)都在「打造一種新的產品類別:神經加速器。」

Gwennap解釋說,對於這些以客戶端為基礎的加速器需求來自於要求極低延遲的自動駕駛車。Gwennap在該報告的評論中指出,在本地進行處理的新技術將會開始「滲透至一些較低成本的應用」。他預測,「在消費裝置中,小型的神經加速器可能是SoC中的一個重要區塊,就像是繪圖核心或影像處理器一樣。幾家智慧財產權(IP)供應商開始提供這一類加速器,期望盡可能地降低額外的硬體成本。」

Gwennap在《EE Times》的訪談中指出,Movidius Neural Compute Stick對於開發人員幾乎沒有什麼不同。「對於開發人員來說,這並沒什麼不起。典型的PC就能產生至少100GFLOPS,特別是如果它還內建繪圖卡,直接在PC上進行開發會更好。對於需要較低功率處理器的嵌入式系統,高通Snapdragon 835提供超過250GOPS的效能,對於大多數的推理應用來說都夠了。」

20170726_Movidius_NT01P3(來源:Movidius)

不過,Movidius的El-Ouazzane並不贊同這樣的看法。

首先,Movidius Neural Compute Stick利用USB讓神經網路更易於存取,有利於製造商或程式增補人員用於開發深度神經網路原型或進行調整。

其次是電源效率的問題。El-Ouazzane指出,Movidius的解決方案可讓神經網路在邊緣運算時旳功耗小於2瓦(W)。

然後,還有成本的考量。El-Ouazzane說:「我認為這是一個殺手級因素。Movidius Neural Compute Stick要價79美元,可望讓神經網路的發展變得『超級普遍』。」

他預期開發人員能使用Movidius的神經運算平台(Neural Compute Platform)應用程式介面(API),「將經過訓練的Caffe、前饋卷積神經網路(CNN)輸入工具套件中,並進行配置,然後編譯成一種可用於嵌入式部署的調整版本。」

以AI為導向的嵌入式應用?

隨著許多嵌入式系開始變得「智慧」且「自主」,El-Ouazzane預計以AI為導向的嵌入式系統即將爆發。

但是,不久的將來即將出現什麼樣的AI裝置?

McGregor預測,「我認為在2025年以前,每個人所接觸的每一款新系統/平台都將具有某種程度的AI元素,它可能內建於裝置本身,或存在於網路、雲端,或是分散在其間。」

他補充說:「它可能就像是使用者介面或應用一樣簡單,或者是像虛擬助理或自主控制般複雜的某種裝。目前已經有許多應用已經導入了AI,包括虛擬助理、搜尋引擎、財務建模、與文章寫作.....等等。」

他說:「而在裝置上,AI將因各種不同的原因而持續成長,特別是資料的安全、即時互動/處理以及頻寬限制等。然而,在裝置上進行訓練才是真正的挑戰,最終可能需要新的處理模型。」

英特爾想掌握一切…

當然,Movidus現在是英特爾的子公司,但其目標並不僅限於有更多嵌入式系統在邊緣執行神經網路。El-Ouazzane將其產品發佈架構在英特爾端對端AI產品組合的更大脈絡之下。

他指出,英特爾擁有廣泛的AI產品組合,並為其提供一整套完整的開發工具和資源。

「無論是在英特爾Nervana雲端上訓練AI神經網路、最佳化新興的工作負載(如AI、、VR和AR),以及使用英特爾Xeon Scalable處理器實現自動駕駛,或是以Movidius視覺處理器技術將AI導入邊緣,」英特爾宣稱該公司已為下一代AI驅動的產品和服務提供了全面的AI產品組合、工具、訓練和部署選擇。

然而,Movidus是否真的能在即將變得無所不在的AI嵌入式系統中成為其關鍵參考架構,目前還不而知。

Tirias Research的McGregor儘管認同Neural Compute Stick是「一款可在新設計中快速評估AI模型訓練效能的有利工具,」但他仍指出,「設計人員仍然必須在最後的系統設計階段執行類測試,特別是如果他們並未使用Moviduis的晶片和/或Caffe架構。」

The Linley Group的Gwennap還認為,Movidius無法達到其目標——實現在邊緣運算神經網路的嵌入式系統設計。

區隔推理引擎與訓練

Gwennap指出,「值得注意的是,新的AI時代並不會有『參考架構』。諸如TensorFlow和Caffe等架構將會把軟體(神經網路)和硬體分開來。」他補充說:「映射到Myriad VPU的網路可以輕易地映射到Snapdragon或其他處理器上。因此,AI處理器將在性能和效率的基礎上進行競爭,而不是鎖定於指令集。」

同樣地,他也不認同「同樣的工具適用於訓練和推理」的論點。Gwennap說:「一旦網路開始接受訓練,就可以輕鬆地部署在支持主流架構的任何平台上。而且,主流的架構都是開放源碼,以避免單一家廠商鎖定。」。

El-Ouazzane看好AI處理器抽取底層硬體的能力,它讓設計者可將推論與練訓分離開來。但他重申先前的觀點,從長遠來看,能夠使用相同的工具進行神經網路的訓練和部署,才有助於系統設計人員。

他以Movidius的開發藍圖為例表示,未來三年,深度學習的效能預計將會增加50倍。「為了在不增加功耗的情況下實現這一目標,我們可以在訓練方面設計許多架構技巧。」El-Ouazzane補充說:「當你在斟酌這些技巧時,讓學習和推理方面置於同一平台是至關重要的。」

編譯:Susan Hong

(參考原文:Neural Accelerator Battle Begins,by Junko Yoshida)

dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹

 dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹 1. 基本概述 名稱: dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt 維護者: Dorowu 用途: 提供基於 Ub...