[好文] 20 種很棒的 Raspberry Pi 應用(附簡易中文翻譯)
原文連結: https://www.makeuseof.com/tag/different-uses-raspberry-pi/
Raspberry Pi 是一種價格低廉的「開發板」(根據配備與規格的不同,一片 NT$1000~NT$3000 左右)。它可以安裝 Linux,用來當成文書機。也可以用它暴露出來的「通用輸出入針腳(GPIO, General-Purpose Input/Output)」,寫程式來做各種自動控制專案。對於想入門「嵌入式程式設計」領域的朋友,是一個很好的起點。
國外網友整理了 20 種 Raspberry Pi 很棒的應用,如果您也不曉得 Raspberry Pi 可以拿來做什麼用,不妨來看看吧!
為了不太看英文的朋友,我特別簡單翻譯了一下。原文每項都有詳細的圖片或影片介紹,以及超連結教大家怎麼「做到」,很推薦大家去看看喔!
1. 作為「桌機」(Desktop PC)
裝了 Linux 後,便可以當成簡單的文書機。
2. 作為「無線列印伺服器」(Wireless Print Server)
對於某些沒有內建 Wi-Fi 的印表機,可以當這些老式印表機的無線網路接收器。
3. 作為「AirPrint 伺服器」
這是蘋果電腦所使用的「無線列表機連線協定」。如果您不想自己買一個,也可以嘗試自己做一個喔!
4. 作為「媒體播放器」(Media Center)
Raspberry Pi 安裝 Linux 後,就可以做為媒體串流伺服器,將您存在電腦上的影片,投射到家中具有 HDMI 接口的大電視上。可高達 1080p 高解析度喔!
5. 作為「遊戲模擬器」(Retro Gaming Machine)
可在 Raspberry Pi 上安裝各種遊戲模擬器(紅白機、PS...),並下載各種懷舊遊戲的 ROM 檔案,裝上手把,就可以回味您的青春了。
6. 作為「Minecraft 遊戲伺服器」(Minecraft Game Server)
「Minecraft」台灣暱稱為「麥塊」,是一款可以「挖寶、探險、建築」的遊戲。也有些專家很推薦讓小朋友玩,培養 3D 空間的感覺。我兒子也蠻愛玩的... XD 如果你不想花錢去加入官方的「麥塊伺服器」,不妨自己架設一個囉!
7. 機器人控制(Robot Control)
如果想做機器人,那 Raspberry Pi + 另一塊開發板「Arduino」,應該是你的首選。把 Raspberry Pi 當成「大腦」,執行智慧判斷。把 Arduino 當成「神經系統」,負責控制四肢。您的機器人就會活靈活現的了!
8. 製作「定格動畫」(Stop Motion Camera)
Raspberry Pi 也搭配一個小型的攝影機。如果您想製作「定格動畫」(移動一下拍一張,然後連續播放。如:粘土人動畫),這邊有寫好的程式碼,以及教你怎麼組裝喔!拼一拼就有一台「定格動畫專用攝影機」了!不必花大錢買!
9. 縮時攝影機(Time Lapse Camera)
雖然您的 iPhone 也能拍縮時攝影...但您要拍的縮時攝影若是在戶外,且時間長達好幾個月(如:觀察花卉開花過程),您會把 iPhone 丟在野外幾個月嗎?不會吧?這時便宜強大的 Raspberry Pi + 行動電源就可以派上用場了!有簡便程式碼,並且教你怎麼安裝喔!
10. FM 收音機(FM Radio Station)
Raspberry Pi 也能架設 FM 接收台喔!你可以把它當成一部收音機,接上喇叭,就是一台簡易的 FM 收音機了。
11. Web 伺服器
Raspberry Pi 也可以安裝 Web 伺服器,讓你在家裡就能架設網站,不必去跟外面買空間、繳月費。
12. Twitter 機器人
這邊指的是會自動轉推特定關鍵字的軟體。有些推特經營者,會習慣去搜索包含自家品牌相關的新聞,然後轉推到自己的帳號。有了 Twitter 機器人,這件事就可以請它代勞了!给他關鍵字,就可以幫你自動轉推,維護自家品牌的熱度喔!
13. 自製監視器(Motion Capture Security System)
由於 Raspberry Pi 有 USB 接口,安裝 Linux 後根本就是一台桌機,所以當然可以用 Web Cam 做出監視器,還能用手機連回來看看監視器看到什麼喔!
14. 數位相框(Digital Photo Frame)
Raspberry Pi 板子很小,安裝 Linux 後,再把它連上一個螢幕,就是一台「數位相框」了。想在自家客廳循環播放你的珍貴回憶嗎?試試看這個專案吧!
15. 星空攝影(Photograph the Night Sky)
天文愛好者可以利用 Raspberry Pi 可程式化、又能連接攝影機、外接螢幕的特色,製作夜空拍攝道具。這樣一來,就不用苦苦守候天文現象囉!
16. 網路流量監視器(Network Monitoring Tool)
Raspberry Pi 既然是一台 Linux 小電腦,當然可以安裝 Linux 相關的軟體,來監視特定網站的流量。對於那些想知道自家流量如何的人,非常方便!
17. 智慧型電視(Smart TV)
您家有 HDMI 的電視,但無法上網收看網路內容嗎?Raspberry Pi 自帶 HDMI 與 Wi-Fi,將它安裝成一台網路電視,再讓它把內容透過 HDMI 輸出到你家電視機,馬上把你家的電視機從「智障型」升級成「智慧型」電視!看 YouTube 什麼的,輕鬆自在喔!
18. 網路硬碟(NAS Box)
Raspberry Pi 安裝 Linux 與特定軟體,再於 USB 接口加掛一顆 4TB 的硬碟,馬上就能讓你出門也能存取家中的檔案。Raspberry Pi 相當省電,可以全天不關機。連上家中的 ADSL,就成了全天候的網路硬碟了!讓你從此嫌棄 Dropbox 不夠用!
19. 智慧型家庭中控器(Home Automation)
想在抵達家裡之前,就用手機打開冷暖氣機、按下煮飯的按鈕、或啟動咖啡壺嗎?早就有人幫你把程式碼寫好了喔!添購一些「網路受控」的電器開關,再讓它們與 Raspberry Pi 相連,你就可以用手機操控 Raspberry Pi,讓它幫你下指令,控制家中電器開關了喔!
20. 自製「AirPlay 接收器」
這是 Apple 的一種網路連線協定。支援 AirPlay 的設備,可以透過該協定,互相交換資料。如果你家中 Apple 設備眾多,又不想花錢買一台 AirPlay 接收器,可以想辦法自己做一個喔!
希望這樣的簡單翻譯,大家會喜歡!如果對「自動控制」有興趣的朋友,不妨去買一塊 Raspberry Pi 開發板,自己回來試試看這些專案喔!
祝福大家有個愉快的星期一!歡迎按讚、轉貼、留言討論!
linux make 安裝 在 Taipei Ethereum Meetup Facebook 的最佳貼文
By Frank Wang
[使用 go-ethereum 1.6 Clique PoA consensus 建立 Private chain (1)] -- by Frank Wang
Ethereum Proof of Authority
在 Ethereum 官方的共識機制是使用 PoW,Miner 必須靠使用算力去解決密碼學問題來取得寫帳(打包 Block)權。但 PoW 機制在私有鏈或聯盟鏈上並不是一個那麼有效率的共識機制,私有鏈的維運者必須花費多餘的算力來維持私有鏈的運作。
而 Proof of Authority 思維是直接指定哪些節點有寫帳權,其他節點透過演算法如果是被授權的節點打包 Block 則判定 Block 有效。
Ethereum Client 中有不同語言的實作,之前 Parity 版本的實作就有提供 PoA 的共識機制(介紹)。而在前段時間發佈的 geth 1.6 也支援了 PoA 的共識機制。不過 geth 的 PoA 使用方法跟機制和 Parity 的版本不同,geth 實作了 ethereum/EIPs#225 一個稱作 Clique 的共識機制。所以這篇主要筆記如何建立一個 geth Clique Private chain。
情境中會使用 4 個節點,分別代表兩個普通的節點發起交易,一個創世塊指定的授權節點,一個後期加入的授權節點來玩玩 Clique 。
安裝 geth
由於 go-ethereum 使用 golang 開發的,所有的程式都被編譯成單一的可執行檔了,執接下載下來就可以直接執行。
geth & tools 1.6 — https://ethereum.github.io/go-ethereum/downloads/
找到相對應 OS 後下載,記得下載 geth & tools 的版本,接下來會使用 geth 1.6 版本的一個創 Private chain 的工具 puppeth 來建立 Clique Private chain。
最後記得將這些執行檔加入 PATH 方便呼叫。
環境準備
待會要建置的環境將會使用 4 個 ethereum 節點,並且全部節點跑在同一台機器上,這樣比較省事。先創好 4 個資料夾,分別叫 node1 node2 signer1 signer2 ,node 是一般的 ethereum client,signer 在接下來的情境中當成打包 block 的角色。
-> % lsnode1 node2 signer1 signer2
建立 Ethereum 帳號
接著我們要替這四個角色各建立一個 Ethereum 帳號。
frank@frank-linux [10:51:22 AM] [~/src/eth-poa] -> % cd node1
frank@frank-linux [10:55:08 AM] [~/src/eth-poa/node1] -> % geth --datadir ./data account newWARN [04–18|10:55:30] No etherbase set and no accounts found as default Your new account is locked with a password. Please give a password. Do not forget this password.Passphrase: Repeat passphrase: Address: {c7873030c2532aafe540d9dfd02a08330ee06465}
在這步驟切換到每個目錄底下,指令 geth --datadir ./data account new 這段指令是指要使用當下目錄底下的 data 目錄當作 geth 存放資料的地方,並且創一個新的 Account。在剛剛建立的 node1, node2, signer1, signer2 都下相同指令創一個帳號。
一下是我創好的每個角色的 Account address:
node1: c7873030c2532aafe540d9dfd02a08330ee06465
node2: 6d650780d493056f679a30b2c65cfa5e07835ad6
signer1: 5cc640ae524f70c39081d65bc699b3b61a67bd3f
signer2: 0fe2d8747d24156b342c9fa5c5e7138cf4047a8d
創好帳號後就可以開始建立 Private chain 了
建立創世塊設定
由於 Clique 並不像 Parity 版本的 PoA 靠設定檔設定授權的節點。Clique 是將授權節點的相關資訊放在 Block Header 中,所以我們必須對創世塊做一些設定才可以讓授權機制生效。(但這並不意味著新增或刪除授權節點需要更換創世塊,晚點介紹怎麼新增授權節點)
Clique 是將授權的資訊放在 extraData 中,但資料結夠的格式並沒有那麼直覺,所以在此使用 geth 1.6 提供的建立 Private Chain 的工具 puppeth 來建立創世塊,puppeth 是各互動式的程式,直接啟動照著指示輸入相關資訊。
frank@frank-linux [11:19:16 AM] [~/src/eth-poa] -> % puppeth+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+| Welcome to puppeth, your Ethereum private network manager || || This tool lets you create a new Ethereum network down to || the genesis block, bootnodes, miners and ethstats servers || without the hassle that it would normally entail. || || Puppeth uses SSH to dial in to remote servers, and builds || its network components out of Docker containers using the || docker-compose toolset. |+ — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -+
Please specify a network name to administer (no spaces, please)> poa_for_fun
這裡會希望你給你的 Private chain 一個名字
Sweet, you can set this via — network=poa_for_fun next time!
INFO [04–18|11:19:21] Administering Ethereum network name=poa_for_funWARN [04–18|11:19:21] No previous configurations found path=/home/frank/.puppeth/poa_for_fun
What would you like to do? (default = stats) 1. Show network stats 2. Configure new genesis 3. Track new remote server 4. Deploy network components> 2
這裡選 2 ,要建立一個新的創世塊設定
Which consensus engine to use? (default = clique) 1. Ethash — proof-of-work 2. Clique — proof-of-authority> 2
共識機制,選 2,Clique PoA
How many seconds should blocks take? (default = 15)> 10
多少秒數會產出一個 Block,在這裡設 10 秒。當然你可以自己設定你想要的
Which accounts are allowed to seal? (mandatory at least one)> 0x5cc640ae524f70c39081d65bc699b3b61a67bd3f> 0x
指定一個 Account address 作為授權打包的角色。這裡使用上面產出的 Signer1 的 address。
Which accounts should be pre-funded? (advisable at least one)> 0xc7873030c2532aafe540d9dfd02a08330ee06465> 0x5cc640ae524f70c39081d65bc699b3b61a67bd3f> 0x
指定要不要事先給一些 ether。這裡選 node1 和 signer1 的 address,當然這隨你指定
Specify your chain/network ID if you want an explicit one (default = random)>
Network Id,直接用 random
Anything fun to embed into the genesis block? (max 32 bytes)>
沒什麼需要特別加入 genesis 的,留空
What would you like to do? (default = stats) 1. Show network stats 2. Save existing genesis 3. Track new remote server 4. Deploy network components> 2
選 2 存檔
Which file to save the genesis into? (default = poa_for_fun.json)> INFO [04–18|11:19:50] Exported existing genesis block
What would you like to do? (default = stats) 1. Show network stats 2. Save existing genesis 3. Track new remote server 4. Deploy network components> ^C
ctrl+c 離開,會在當下目錄看到一個 poa_for_fun.json 檔案。
替 4 個節點初始化 Private chain
使用 geth init 指令,分別替換 4 個 node 的 datadir
frank@frank-linux [11:38:07 AM] [~/src/eth-poa] -> % lsnode1 node2 poa_for_fun.json signer1 signer2frank@frank-linux [11:38:07 AM] [~/src/eth-poa] -> % geth --datadir node1/data init poa_for_fun.json INFO [04–18|11:39:10] Allocated cache and file handles database=/home/frank/src/eth-poa/node1/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:10] Writing custom genesis block INFO [04–18|11:39:10] Successfully wrote genesis state hash=5722d7…47e737frank@frank-linux [11:39:10 AM] [~/src/eth-poa] -> % geth --datadir node2/data init poa_for_fun.jsonINFO [04–18|11:39:14] Allocated cache and file handles database=/home/frank/src/eth-poa/node2/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:14] Writing custom genesis block INFO [04–18|11:39:14] Successfully wrote genesis state hash=5722d7…47e737frank@frank-linux [11:39:14 AM] [~/src/eth-poa] -> % geth --datadir signer1/data init poa_for_fun.jsonINFO [04–18|11:39:21] Allocated cache and file handles database=/home/frank/src/eth-poa/signer1/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:21] Writing custom genesis block INFO [04–18|11:39:21] Successfully wrote genesis state hash=5722d7…47e737frank@frank-linux [11:39:21 AM] [~/src/eth-poa] -> % geth --datadir signer2/data init poa_for_fun.jsonINFO [04–18|11:39:24] Allocated cache and file handles database=/home/frank/src/eth-poa/signer2/data/geth/chaindata cache=128 handles=1024INFO [04–18|11:39:24] Writing custom genesis block INFO [04–18|11:39:24] Successfully wrote genesis state hash=5722d7…47e737
到目前我們已經準備好讓節點可以啟動和互相連線了。
啟動 geth client 並設定 peers 間的連線
分別在 node1, node2 目錄使用指令啟動 geth
geth --datadir ./data --networkid 55661 --port 2000 console
這裡需要注意的是 datadir 參數沒問題,先前的步驟已經在每個節點各自的目錄都建立了 data 目錄。networkid 大家一定都要用同一個值才可以互相連線。port 用來讓 geth 跟其他 geth 連線所 listen 的一個 port,由於四個節點都在本機,所以這裡必須都指定不同的值。以下使用 node1 2000, node2 2001, signer1 2002, signer 2003 當範例。
如果節點是授權打包 block 的節點,那你啟動時要先 unlock 你的 account,這樣才可以進行交易的打包。多帶一個 unlock 參數,以及你要解鎖的 account address。啟動後會要求輸入當時創 account 時的 passphrase。所以在這裡啟動 signer1 和 signer2 時都要用 unlock 參數帶入他們各自的 address 解鎖。
geth --datadir ./data --networkid 55661 --port 2002 --unlock 5cc640ae524f70c39081d65bc699b3b61a67bd3f console
啟動後會看到這樣的結果,如果沒噴任何錯誤就是啟動成功了,同時會啟動一個 console 的互動介面,可以打像是 admin.nodeInfo 這類的指令來操作 geth。
在啟動訊息中有一段
INFO [04–18|12:01:31] RLPx listener up self=enode://87692411dd1af113ccc04d3f6d3d7d47366c81e595525c861c7a3c902ca0a86f46e8d7a837f431536822dbb012f68d942ed96910385805864e990efdf3839a1e@[::]:2000
由於目前是在 private chain 上,沒有設定啟動節點也沒設定 static node,各節點啟動後是沒辦法找到對方的。所以在此我們把 node2, singer1, signer2 都加入 node1 為自己的節點連上。geth 要連上對方的節點就必須好 enode://
在 node2, signer1, signer2 的 geth console 頁面分別打入指令
>admin.addPeer(“enode://87692411dd1af113ccc04d3f6d3d7d47366c81e595525c861c7a3c902ca0a86f46e8d7a837f431536822dbb012f68d942ed96910385805864e990efdf3839a1e@127.0.0.1:2000”)
完成後回到 node1 的 geth console 打入 admin.peers 應該要看到三個節點資訊。
到這步 geth 節點已經連上可以開始進行 PoA 挖礦和交易了。
啟動 Miner
到 signer1 的 console 打入 miner.start() 這時候如果你本機之前沒有啟動過 miner,geth 會先產生 DAG 等 DAG 產生完後就會開始挖礦了。
在 signer1 的 console 會出現正在 mining 的訊息。
其他節點則會收到 import block 的訊息。
Make a transaction
到這裡 Clique 的 Private chain 已經設定完成了,我們可以開始在這條鏈上做一些交易。接下來為了方便會使用 geth 的 console 來做 send ether 交易,如果你不習慣的話也可以使用 mist 這類的 UI 錢包來做。
node1 console
還記得在建立創世塊的時候有先給了 node1 和 signer1 的 address 一些 ether 吧?先用這令看看這些 ether 有沒有真的在鏈上。使用指令 ")" target="_blank">eth.getBalance("") 來查詢。
> eth.getBalance(“c7873030c2532aafe540d9dfd02a08330ee06465”)9.04625697166532776746648320380374280103671755200316906558262375061821325312e+74> eth.getBalance(“6d650780d493056f679a30b2c65cfa5e07835ad6”)0>
確定 node1 有 ether 但 node2 沒有,接著用 eth.sendTransaction 指令來把一些 ether 從 node1 轉到 node2 吧。
現在 node1 的 console 把自己的 Account unlock
> personal.unlockAccount("c7873030c2532aafe540d9dfd02a08330ee06465")
Unlock account c7873030c2532aafe540d9dfd02a08330ee06465Passphrase:true>
轉出 0.05 ether 到 6d650780d493056f679a30b2c65cfa5e07835ad6
>eth.sendTransaction({from:"c7873030c2532aafe540d9dfd02a08330ee06465", to:"6d650780d493056f679a30b2c65cfa5e07835ad6", value: web3.toWei(0.05, "ether")})INFO [04-18|12:39:53] Submitted transaction fullhash=0xa7a9da239b8f96b9f6fe4007ee88773915f034be2365b2dab234fd8c0545aa37 recipient=0xc7873030c2532aafe540d9dfd02a08330ee06465"0xa7a9da239b8f96b9f6fe4007ee88773915f034be2365b2dab234fd8c0545aa37">
如果你 singer1 的 miner 沒關掉的話,在幾秒後就會看到一個含有一筆交易的 block 產出
再來看看 node1 和 node2 的 ether
> " target="_blank">eth.getBalance("c7873030c2532aafe540d9dfd02a08330ee06465")9.04625697166532776746648320380374280103671755200316906558211535061821325312e+74> " target="_blank">eth.getBalance("6d650780d493056f679a30b2c65cfa5e07835ad6")50000000000000000>
交易完成!
加入一個新的信任節點
在 Clique 共識機制中是使用 Clique 提供的 API 來做節點管理,現在只 demo 加入節點進入信任名單。
signer2
signer2 是一開始沒設定在創世塊中信任列表的節點,如果這時候讓它啟動 miner 會怎麼樣呢?會噴一個未授權的錯誤
> miner.start()INFO [04-18|12:49:51] Starting mining operationnull> INFO [04-18|12:49:51] Commit new mining work number=46 txs=0 uncles=0 elapsed=284.189µsWARN [04-18|12:49:51] Block sealing failed err=unauthorized
必須回到已經在授權名單內的節點將新的節點加入。
signer1
回到 signer1 的 console 輸入加入的指令
> clique.propose("0x0fe2d8747d24156b342c9fa5c5e7138cf4047a8d", true)
singer2
接著回到 signer2 的 cosole
開始打包交易了
結語
由於 geth 1.6 才發佈不久,關於 Clique 的相關文章還蠻少的。提供如何使用 geth 1.6 建立一個 Clique private chain 的簡單教學,其實大部分都是我自己在建置時的筆記,內容省略了很多關於 Clique 的一些特性和原理,有興趣的建議直接看 ethereum/EIPs#225。希望這篇可以幫助到使用 geth 但又想用用 PoA 共識機制的同伴們XD
linux make 安裝 在 紀老師程式教學網 Facebook 的最讚貼文
想在 30 分鐘內學會 Git 嗎?看這裡就對了!
Git 是一種「原始碼版本控制」軟體,它可以儲存原始碼每個版本之間的差異,然後您可以要求「時光回溯」到任何指定的版本。這可以防止一天到晚改規格的客戶或老闆,在您辛苦更動原始碼後,來一句要命的:「還是之前的那一版比較好」。我個人認為,它是程式設計中,最重要的 7 大軟體之一(文字編輯器、編譯器、版本控制器、自動化建構系統、單元測試軟體、環境佈建系統、與除錯器)。
這類「版本控制軟體」,依照流行先後,著名的有 CVS、Subversion、與 Git。目前最流行的版本控制軟體是「Git」,流行原因多多少少是因為 Linux 核心(Linux Kernel)原始碼,就是用這套軟體保持各個版本差異的。不少公司也要求程式設計師寫好原始碼後,一律都得回存 Git 系統才算完工,不能只是存在私人的硬碟就了事。所以 Git 就變成業界必備的軟體之一。
補習班常常有同學問我,有沒有那種很簡單的 Git 說明書,不用講太深,但要在 30 ~ 60 分鐘內就掌握常用功能的教材?之前一直找不到,不過今天幫大家找到了!還有中文版喔!叫做「Git 簡明指南」。鏈結如下:
https://rogerdudler.github.io/git-guide/index.zh.html
其實它的原文名稱有點好玩:「Git - The Simple Guide, No Deep Shit!」。這類標題通常能騷動我個性中愛作怪的小惡魔,讓我會心一笑後點進去看看。看完後,果然「一點點深的便便」都沒有... XD 還有中文版(簡中)!心想這麼讚的東西不介紹怎麼行!就花時間寫了這一篇。
希望今天的分享對各位的日常工作有幫助!我也很鼓勵大家能找到適合自己的「七大系統」,把它弄熟。畢竟「工欲善其事,必先利其器」嘛!我個人習慣使用的七大系統,也列在底下讓大家參考:
1. 文字編輯器:vim。不好學,但游標移動速度與文字操控能力超快!
2. 編譯器:gcc。因為我寫 C 語言比較多,所以用 gcc。
3. 版本控制器:git。其實我之前是熟 subversion。不過 git 也很好用喔!
4. 自動化建構系統:make。可以把編譯、安裝...等囉哩八唆的指令濃縮成一個簡稱(如:build, install...等)。打完按下 enter 後就可以去泡咖啡了!還能偵測哪些原始碼已經編譯過,不需重新編譯已縮短作業時間。
5. 單元測試軟體:CUnit。嚴格來說,這算一套「函式庫」,可以針對你寫好的原始碼做測試。由於我寫 C 較多,所以用 CUnit。如果您寫的程式碼是 Java 或其它,可能得找相對應的測試軟體。
6. 環境佈建軟體:VirtualBox。用它的原因是 Win, Mac, Linux 全平台都支援。我會把程式設計環境灌好後的 VirtualBox 映像檔保存好,每次要乾淨環境就 new 一個新的虛擬機起來。最近迷上 Vagrant,想知道 Vagrant 是什麼的可以看這篇: http://goo.gl/29mBs9
7. 除錯器:gdb。雖然是文字介面,但連線到運算能力很差的開發板上想除錯,也只有 gdb 跑得動。用久了也習慣了。
其實最近還想加上第八項「(8) 軟體部署系統:Docker」,不過還在研究,也還沒熟悉。等熟悉了再跟大家報告。 :-)
如果覺得文章不錯,還煩請各位不吝按讚打賞或分享一下喔! m(^ ^)m
linux make 安裝 在 深入學習Make命令和Makefile(上) | Jason note 的推薦與評價
如果您在Linux下使用GNU Make的話,它會首先查找GNUmakefile,之後再搜索makefile和Makefile。按照慣例,許多Linux程序員使用Makefile,因為這樣能使Makefile出現在目錄中 ... ... <看更多>