跳過Java server在ARMv6不支援VM問題

2000px-hadoop_logo-svg

最近花了幾天將自己的三個電腦叢架上Hadoop(什麼是Hadoop) , 其中一個datanode是一代的raspberry pi

而在啟動start-dfs.sh時,遇到了

Server VM is only supported on ARMv7+ VFP

經過谷歌後,發現是因為java server版本上使用VM, 但不支援ARMv6 因此那晚只好早點睡覺。

隔天上課發現了一個繞道方式解決VM不支援的問題

在raspberry pi 上

pi@raspberry:~$  java -version

java version “1.8.0_111”
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) Client VM (build 25.111-b14, mixed mode)

ks@raspberry:~ $ java -server -version

Error occurred during initialization of VM
Server VM is only supported on ARMv7+ VFP

因此經過谷歌發現一個work around的方法。那就是先到$HADOOP_HOME/etc/hadoop 中更改

hadoop-env.sh (我的$HADOOP_HOME 為/opt/hadoop/hadoop/, 安裝hadoop的地址)

中更愛HADOOP_DATANODE_OPTS 在最後加上-client

 export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS -client"

這樣便可以避開使用java -server 的指令。

 

圖源:https://upload.wikimedia.org/wikipedia/commons/thumb/0/0e/Hadoop_logo.svg/2000px-Hadoop_logo.svg.png

Ansible Introduction

Recently I got my hands on a brand new orange pi. However, I found myself stuck in typing the same boring command across all sessions. Hence, I believe this serves as a good opportunity to anisible for better automation across all servers. 
Simple walkthrough the steps to install anisible in master server:
First add anisible repository: 
       sudo apt-add-repository ppa:ansible/ansible -y
Install anisible:
        sudo apt-get update && sudo apt-get install ansible -y
        ansible –version
 ansible-version
Create ssh key and copy it across all web-servers:
 [ Note: username must be same as login username and same across all nodes ]
      ssh-copy-id ks@[ first node local ip ]
      ssh-copy-id ks@[ second node local ip ]
  
Then you should be able to ssh into all servers using the master ssh public key
If all commands works out well, you can start editing /etc/ansible/hosts file and create your swarm name and local ip.
       sudo vim /etc/ansible/hosts
      [web-servers]
      192.168.0.102 [ first node local ip ]
      192.168.0.100 [ second node local ip ]
One of many possible command in ansible 
      anisible -m command -a ” your-unix-command” [your-serves-group-name] 
this command send the same command to all servers 
Some Command Example:
      ansible -m ping web-servers
      ansible -m command -a “uptime” web-servers
uptime
      ansible -m command -a “tmux new -s foo -d” web-servers
      anisible -m command -a “tmux ls” web-servers
tmux-ls
Here’s a great proper introduction to ansible by Jeff Geeriling

Orange Pi —> 490台幣的單板電腦

Orange Pi 板子正面構造(圖來自官網)

前幾天在刷露天網購時,看到了一個名叫orange pi 的四核arm A9 A7 1.2Ghz 、512 RAM (前後各256MB….) 的單板電腦。最重要的是,它的價格僅僅是紅莓派的4分之一!!!

於是就直接下單買了過來用用看。(490 元+60元運費 =550元就這樣飛走了…..)

官網問題與社群評價

使用了接近一星期以後,我個人對於這塊電腦的評價還不錯,但僅僅只是我從它作為一個工作站與小型伺服器的觀點出發來看而已。如果有意想要買這部機器來作為Linux 電腦入門,建議還是花點錢去購買支持社群比較大的紅莓派電腦比較恰當。最主要的原因在於orange pi本身在網路上依舊是一隻披著沈默羔羊的狼。幾乎沒什麼人發現有這塊板子的存在(有的話也是它比較昂貴的表哥orange pi pc) ,而公司網站也破綻一堆而官網上的OS看起來完全不靠譜。於是orange pi 就這樣未上岸就癱瘓在淺灘上了。

個人使用評價



對於一位從raspberry pi model B (沒錯是紅莓派的第一版)過來使用orange pi時,完全感受到了四核在ssh時的順暢感~Raspberry pi單核800MHz 與orange pi四核1.2GHz相比,堪稱是天與地的差異吧。

一點疏漏的是下訂單的時候,還沒查清楚究竟orange pi可以灌什麼Linux 版本,而有哪些版本屬於長期支持的。所幸有Armbian的非官方OS 可以使用,而第一次灌OS就成功了。遙想當年raspberry pi 那個SD 卡試了一版又一版折騰了一天才能跑到登入介面, orange pi 花了我一個吃早餐的時間就架好了(大概20分鐘吧,armbian是我預先下載好了)。

除了體型小、漏洞多、耗電高、社群小之外,其實orange pi只是一個小小的單板電腦。

Bonus:

在orange pi上用Python將四核全開測試:以下我寫了一個簡單的尋找質數程式。一開始使用單核運行,作為參照值。接著將四核全開,跑一樣的函式,並將花費時間印出。

program.png

程式一開始跑單核時的情況(htop對於數據更新有一點延遲)

singlecore.png

四核半開的情況,單核使用了15.7秒時間才從1到5000找遍全部質數,而四核僅需要1.6秒

multiproccessing.png

G o o g l e 10/4 Event 總結

Screen Shot 2016-10-05 at 1.36.06 AM.png
 整個發布會重點圍繞著谷歌助手,Google Assistant

 

下個年代將是AI 發展重點、廣泛的機器學習運用— 語音辨識到達93.6 %、 合成發音Wave net接近人類自然語音等級 、text-to-speech.png翻譯運用機器學習達到達4.263等級比分(人類中翻英是4.6)。

translation.png

谷歌Pixle 智能手機—

pixle.png

google assistant 無間縫嵌入。例如:能解讀屏幕的文字信息,直接單擊home即可以針對關鍵字做搜索。

相機達到89 DXO mark ( iPhone 7 86 )

作業系統自動下載

免費無限量無損雲端儲存照片

VR —Daydream

與Hulu、Netflix、HBO、紐約時報、Youtube合作,推出一系列 VR內容

Daydream VR Headset : 設計以布質感為主,內附一個無線遙控器。

google_hub2.png

Google WiFi  — 無線橋接器。無間縫切換熱點,通過控制暫停使用者網路(讓母親叫孩子來吃飯)。google_hub.png零售價:129元

Chromecast Ultra —將 Ethernet 建進HDMI中、支援4K 直播。零售價:69 元

chromecats.png

Google Home — 控制物聯網(Nest、samsung smart things、IFTT、philips) 、強大語音功能?、 完全語音控制Chromecast、能分辨背景音樂與語音指令( 能語音控制播放 last week tonight 脫口秀 ) 、語音翻譯、能同時鋪設多個Google Home ( 並且站點間會根據語音強度,決定那個站點接受雲音指令)。零售價:129元

google hub.png

最重要的是,Google Assistant SDK 將在明年推出,到時開發者將可在電腦上做各種神奇可怕的應用

Screen Shot 2016-10-05 at 1.39.30 AM.png

Request 400 while NGINX Server Block with Django

While I was working on a project requiring multiple website hosted in a same server, I encountered a random issues which happened when request 400 started to pop up in every server blocks I had setup earlier.

After checking all the server blocks incoming request. I discovered that the if I requested domain name started with http://www., the traffic will be routed to one of my server blocks with. Since I only allowed request from the server name to pass through, other domain trying to request the server block will result in a request 400 error.

Screen Shot 2016-09-25 at 12.56.18 PM.pngHence, a good way to counter this issues is to server name with both names( with www. and without www.) . Also remember to set the allowed_host in django settings file to both names .

second.png

Although I also found out that setting it to accept all incoming request would yield the same result. Since Nginx will only redirect traffic to their own local server, maybe it will be a better option to simply set it to wild .

django_setting.png

 

在COSCUP上聽到的各種物聯網

CAN_5105
《站在NAS中心呼喊物聯網》-Spark 的 Photon開發版拉低了物聯網的製作門檻(圖源:COSCUP 2016 官方提供)

最近物聯網熱潮席捲整個科技界,台灣當然也有一群主管每天看新聞當然也不能坐著不動。開源社群當然也要趁機來個iOT群英會。

以下大略列出COSCUP上我聽到 IOT 先關講座題目:

  1. 無人機空汙監控物聯網-整合MQTT於3G/GPRS網絡
  2. 物聯不滿足-自由管理物聯網裝置和溝通的freebird.js
  3. 站在NAS中心呼喊物聯網
  4. Sensor Web 開源真實世界環境,iOT 的Open Data平台

每個講座都暴露了物聯網一個核心問題那就統一性。物聯網之所以強大是因為大家都能相互溝通,自動化生活某些動作。假設某天晚上,如果家中的Nest 攝像機檢測到屋主回家了,而家中另一個智慧溫度計顯示溫度是33度,那麼這時智慧空調是不是應該自動開啟,而家中的Philips Hue是不是應該也要自動開燈呢?

xiaomi_iot.png
小米龐大生態鏈?(圖來自小米中國網站)

可惜那是理想的物聯網世界,而現實的世界卻是物聯網各自為政,不想使用競爭者的機制以免便宜了對方,更別說什麼開源自找麻煩的事了,這樣還能免被破解了還要花一堆力氣去寫補丁。看看市面上的安卓手機就是一個典型的廠商不負責任的後果,各類價值上萬台幣的手機出現了各種資安漏洞廠商都不會去補了,更何況是幾千台幣的物聯網裝置呢?這樣是否最終回變相成廠商會以資安問題,綁架使用者不斷升級裝置來解決問題呢?

另外工業上如果採用物聯網設置,日後擴充也需要找回同一廠家,變相的獨霸狀態。

另一方面,我認為在今日各種通訊機制發達的年代,建立物聯網不再困難。普通一個8歲小孩也能跟著網絡教學用輕易上手的開發版做個物聯網裝置出來。對一位主修先關領域的大學生而言,也可以輕易地寫出一套程式使用自己架設的API 服務。但是他們能否與其他非自制裝置溝通?殘酷的現實表明這是不能的。從零到有,這個過程不困難,困難在於如何統整大家變成說著同一種語言。

我個人覺得物聯網的通訊協定還沒提出一個最佳化(負載輕、能運用在各種頻道上、安全性高)的協定之前。各家還是會各自為陣,自己講著自己的語言,不斷推出各種裝置壯大自己的生態鏈建立自己的平台來吸引消費者。這次的COSCUP沒有出現一個完美的解決方案,只能抱著繼續等待的態度守望。若未來自幹一個物聯網裝置,說著自己的語言。

 

 

 

 

究竟LLVM關我什麼事啊?

先前對於編譯器毫無概念的我,第一場講座的主軸就是編譯器框架—LLVM。第一次接觸編譯器從大會上的講座理解來的,若有什麼錯誤請在文章下留言指正喔~

llvm-1
(截圖自講者簡報)

LLVM 是什麼呢?網絡上有人把它叫做編譯器,可是對我而言它更像是寫編譯器的框架。例如寫網站可能會用Django, Ruby on Rails, Node js, laravel.這些框架能快速的讓你開發網頁,但開發網頁也不一定要使用框架來寫。而LLVM能讓開發人員迅速的將某種語言最佳化,再將語言轉譯成能在目標CPU結構上跑的組合語言(例如ARM與x86都有各自的組合語言)最後再變成機器語言。

這個過程中,大略可以分為三個流程:

llvm-process
(截圖自講者簡報)

1)前端:前段的工作是在得到程式代码之后做掃描、parsing與建立parse-tree(AST)。

2)最佳化:往往程式在編譯過程中為了顧及閱讀性與擴充性,而顧及這兩個前題下寫出的結果對於電腦而言不會是最佳化的程式。這時變會在不改變程式功能的前提下在做刪減的動作。有趣的是 GCC編譯器便用了200多類的最佳化方式,確保程式能以最精簡的方式運行。

3)後端:到了最後的步驟便是將最佳化的程式轉成適合在各種CPU架構上的組合語言。這裡雖然使用LLVM框架可以省去很多步驟(處理變成DAG結構的程式),可是由於不同架構支援的運算能力不同(例如有些處理器不支持除法,所以要將除法變為一堆減法計算)所以需要人手進行一些更動。當然除了這個之外,還有處理不同架構scheduling方式不一樣所以需要做順序最佳化還有register分配最佳化…等問題。

以上介紹了LLVM並非框架的全部,當中還有許多細節與過程我選擇省略掉了。我覺得在這軟體工具繁榮的年代,許多人已經漸漸忘了一行編譯指令背後的血汗過程了。不僅僅需要面對難讀的語言(雖然講者不斷說“LLVM IR 很好讀…”)還要對於CPU架構瞭如指掌,能善用所有的功能確保結果是最適合在該框架上運作的組合語言。

希望各位在寫完程式後,在compile程式時,對於輸出結果能有不一樣的理解,而不再是程式經過一些魔術變成屏幕上能動的魔法。

 

講者浪打與Hydai的簡報網址:http://www.slideshare.net/zongfanyang

 

COSCUP 2016 | DAY 1 心得

 

How_to_be_a_full_stack_engineer
攝於:如何使用Raspberry PI 成為一位全端工程師演講場地 R0

 

一早從新竹出發到台北轉運站,整個人還沈醉在昨日的林李世紀之戰中,除了累還是累。所以在市政府的捷運站下來找個咖啡喝。沒想到順點的三重起司竟然比小七放了一日的三重起司還乾燥,彷彿和我的人生一樣。

滿足了軀體的咖啡因需求量後,便繼續前往中研院。抵達南港捷運站後,忽然發現事前竟然沒有查好巴士站的位置。好在剛好兩位路人,各自都背著背包,一位眼神中透露出一位科學家不妥協於失敗的精神,另一位年輕人則一看就是要去宅男聚會的樣子。於是當下決定跟著二位應該沒錯,哈哈哈哈?

跟著他們腳步,順利抵達車站,搭上不知道哪號公車,莫名其妙的跟著他們在中研新村下車,走著走著就到了中央研究院了繼續跟真的是到了年會會場的人社館!

ethernet_port
沒有人賣網路線嗎?

至於行程原來的規劃是這樣的:

LLVM 由淺入淺 -> 用Raspberry Pi成為全端大師 -> 去社群攤位與美女合照 ->Micro Http Server Implement in C  ->  再去社群攤位與美女合照  -> 逛社群攤位 -> DAY 1 END

original_plan

結果變成了…??

LLVM 由淺入淺 -> 用Raspberry Pi成為全端大師 -> 使用freebird.js 於iOT上-> 無人機空域監控物聯網 -> 國際貿易的自由/開源軟體策略 -> 在NAS中心呼叫物聯網 -> 如何提升程式效能 -> Lightning talk -> DAY 1 END

啊,說好的逛攤位和美女拍照呢?

第一天好不容易結束了,除了搜羅了一堆新名詞之外,對於之後幾篇評論素材也都想到方向了。

好累 à Day 1 END

end_of_the_day
題目叫《對望》好了

COSCUP 議程🔗:http://coscup.org/2016/schedules.html

 

COSCUP D1 | 四軸飛行器 x 環境監控

吃飽午餐以後,去了R1想要參與使用C 實踐Http Server 的講座,結果大家動作比我快一步,位子都沾滿了。不想站著45分鐘的情況下,只好到R0碰碰運氣,沒想到又是座位get,想說就隨便去聽聽好了。

兩位講者, Larry Stanley和Dalin Chang 來自ArkLab多旋翼工作坊的開發人員,開場幽默風趣的對白:“我們是搞機時認識的…(咦?)”。暫時讓我拋開了飯後想睡的雜念,做個好觀眾。

一般聽到大家研究都是專注在如何製作自動導航的相關領域,可是兩位講者從環境監測出發,將採取樣本的工作自動化,透過四軸飛行器採集大面積的樣本。為了達到樣本數據能及時回傳,Arklab團隊使用了GPRS 覆蓋廣闊的優勢並結合 MQTT 傳輸協定負載小的優點將數據傳給node js,透過圖表將數據視覺化。正如講者Larry所說“我要將數據視覺化弄得連我阿嬤也看的懂”

演講者做的是環境監測飛行器所以飛行器上也附加了空氣採集樣本的感測器,將無人機周圍的亂流空氣灌入一個空氣道,行成一個穩定氣流以取得較準確的空氣指標。另外,無人機除了採取空氣樣本以外,還有添加浮漂在螺旋翼上,讓四軸飛行器能穩定的停留在水面上,採集湖水/河水樣本再起飛。

最後講者帶過各種如何指定無人機出錯防護機制後便來到了精彩的demo時間。

由於小編座的位置偏後了,錄影效果不佳…. 這裡就省略了。Demo的內容也只是讓六軸飛行器稍微升空以後就結束整個演講了。

我個人的最大的收穫也莫過於對於遠程實時讀取數據的實作更加了解(GPRS+MQTT) 。至於說好的用C語言實作一個server呢,我想還是乖乖用我的python就好了。

Django 與 Rails 網頁開發框架區別

以下簡單分享我在過去幾個星期,跳脫熟悉的Django框架來學習Ruby on Rails (以下都簡稱 ror )框架的簡短心得。若有錯誤,歡迎請在地下留言更正我的錯誤。

wp-1469522750218.jpg

由於合作上的需要我開始接觸ror。 一直以來都是使用Django在網頁開發上,一路上接觸不少網頁開發工程師/新手網頁工程師都使用或學習ror作為網頁開發框架。對於ror 我的了解一直是:開發十分迅速、很多bug與它強大的社群資源。當然據說ruby語言也不好上手(跟Python比較的話就猶如中文文學史上的文言文—Ruby 與 白話文—Python 差不多吧 ?)。

框架差異

以上是我如何開始接觸ror與接觸前對於ror的看法。接著講講兩者框架的差異吧

動態網頁任務 ROR(MVC) Django(MTV)
資料庫互動存取 Models,  在對應的app models 上建立class物件 Models, 每個app中的models.py建立class 物件
網頁架構與模式 View, app的對應文件夾中存放html.erb 檔案 Template, 建立一個template 文件夾中統一存取
控制與整合 Controller, 每個app有自己的controller來決定操作模型、取出資料 View, 與ROR的controller相似,兩者都是定義一個函數的方式來回覆使用者的請求(request)

細節上兩者架構的差異可以參考:https://bernardopires.com/2014/03/rails-vs-django-an-in-depth-technical-comparison/

對於沒有接觸過網頁框架的人來說,看以上的表格可能會奇怪為什麼會有app呢?

其實兩個框架都能將一個專案的各種功能分裝成一個一個app(以facebook為例就是news feed的頁面是一個app、使用者與使用者之間聊天的頁面是另一個app )來工作。一來讓網頁在未來變得容易擴張同時任何一個功能出現錯誤並不會拖累整個網頁平台的運作。

回到表格上我們可以看出其實兩者的架構幾乎一樣啊。

那麼從運行效率上兩者誰比較優越呢?使用上我個人沒有留意到效能的差異,但以前讀過的一篇研究顯示Django略勝ror一點點,但兩者與其他框架排名都是歸類在較慢的等級。雖然排名較後但是根據我以往Django的觀察,靜態網頁的以現在的記憶體和雲服務提供的CPU依然是能輕易勝任。

開發過程上的差異

如果今天你是任何一個框架的開發者,想要轉換框架環境在開發步驟上需要注意什麼呢?

Django -> ROR:

一般上在django建議一個新的專案時,django不會幫你建立一個完整的MTV架構出來( 我使用的版本不會)。Template, Models都要從新自己寫。每添加一個新的app都需要自己手動更新settings中的apps清單。使用ROR建立一個新的project時,很多基本的內容都幫你安裝好,我在使用時連sass的preprocessor 功能都已經預設好了。而且controller、models中含有很多被註解掉的範例可以參考。

rails_precomment.png
不是人人都有超強的記憶,這些作為提醒的註解非常的貼心

我個人覺得學習上可以直接套用Django的觀念來學習整個ror框架的用法可以加快你學習的速度。因為兩者無論是進階模板使用( ror: yield, django : block/endblock ) 都十分相似。只要django有的功能在ror上一定不會少。

另外一個特點是ror 有強大的app涵蓋了各種前端框架(bootstrap、 skeleton…其他自己谷歌看看)與各種普遍使用的css  library(compass, bourbon…) 或是連fontawesome也能以app方式安裝使用。

ROR -> Django:

有鑑於我一開始先接觸了django才到ror,因此這部分我就稍微講解,無法詳細申論。

從我的觀察與個人經驗上看,從ror轉django需要做好一直寫一直為設置更新的動作。Django稍微比ror好的是當開發者在創立專案時,django 框架會有現成的後端dashboard, 使用superuser帳戶登入(當然需要自己創建一個)就能直接清楚簡易的的更改數據庫中有任何的資料

admin_page
預設的admin介面,提供開發者迅速的視覺化數據庫的內容(在上線前如果沒有使用記得一定要將它從urls.py移除掉或是更改urls的地址)

關於這個功能我相信ror應該有gem apps 可以做到相同的功能,但至少它不是預設的?

總結:

以上就是我碰了 ror 以後簡短的心得分享。如果你有什麼贊同或是想法歡迎在底下留言。