產生針對 AR 優化的 USDZ 檔案

USDZ 可以想成 USD (Universal Scene Description) 的加強版,這是 Pixar 和 Apple 合作的新格式並針對 AR 優化,雖然是以 zip 封裝,但並沒有壓縮及加密,所以其他程式能直接調用。

目前沒有任何的 3D 繪圖軟體能原生支援此格式,也沒有插件可以使用,原因可能是因為要依附 Xcode 10 的 usdz_converter 工具來產生的關係,所以作業系統必須是 macOS 。

輸入來源可以是 obj 或 usda 格式,大部分的 3D 模型分享網站一定都會有提供 obj 的下載格式,可以從 SketchfabGoogle Poly 找免費的試試看。

 


xcrun usdz_converter cube.obj cube.usdz

使用此指令就能產生 usdz 格式了,但是 obj 使用後只有模型沒有材質!
usdz 採用的是 PBR (Physically based rendering) ,這方面我不懂就不多提了。

xcrun usdz_converter cube.obj cube.usdz \
-g cubeMesh \
-color_map cube_Albedo.png \
-metallic_map cube_Metallic.png \
-roughness_map cube_Roughness.png \
-normal_map .  cube_Normal.png \
-emissive_map  cube_Emissive.png \

反正就是依照圖檔名稱對應相對的指令即可。

 

xcrun usdz_converter -h

使用此指令能看到更詳細的說明

USAGE:
<inFilePath> <outFilePath> [options...]
	Options:
                -g groupName [groupNames ...]       Apply subsequent material properties to the named group(s).
                -m materialName [materialNames ...] Apply subsequent material properties to the named material(s).
                -h                                  Display help.
                -a                                  Generate a .usda intermediate file.  Default is .usdc.
                -l                                  Leave the intermediate .usd file in the source folder.
                -v                                  Verbose output.
                -f                    filePath      Read commands from a file.
                -texCoordSet          set           The name of the texturemap coordinate set to use if multiple exist (no quotes).
                -opacity              o             Floating point value 0.0 ... 1.0
                -color_map            filePath
                -normal_map           filePath
                -emissive_map         filePath
                -metallic_map         filePath
                -roughness_map        filePath
                -ao_map               filePath
                -color_default        r g b a        Floating point values 0.0 ... 1.0
                -normal_default       r g b a
                -emissive_default     r g b a
                -metallic_default     r g b a
                -roughness_default    r g b a
                -ao_default           r g b a

(*) Specify infield only with -v (Verbose) to display group information.
(*) '#' in the first character position of a line in a command file interprets the line as a comment.

 


查了一下能直接線上轉的網站只有 Vectary ,大概要等 Adobe 支援才會有更多人用吧。
有了 usdz 檔案就可以參考這篇文章在網站及 App 中顯示。

 


參考資料
https://developer.apple.com/arkit/
https://graphics.pixar.com/usd/docs/Usdz-File-Format-Specification.html

 

AR Quick Look 讓你在網站及 App 中展示 3D 模型及拍照

AR Quick Look 是 iOS 12 的新功能,可以在網站及 App 中展示 3D 模型,更可以在 AR 模式與之拍照。

以下分別是網站及 App 的程式碼,素材皆來自 AR Quick Look Gallery ,若想自行產生 usdz 格式的檔案請參考這篇文章

 


網站 (只有 iOS 12 Safari 實機才有效果)

&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;
        &lt;title&gt;AR Test&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;AR Quick Look in Websites&lt;/h1&gt;
        &lt;p&gt;這是從 https://developer.apple.com/arkit/gallery/ 下載的模型,僅供測試用。&lt;/p&gt;
        &lt;p&gt;需使用 iOS 12 的 Safari 觀看。&lt;/p&gt;
        &lt;a href="cupandsaucer.usdz" rel="ar"&gt;
            &lt;img src="cupandsaucer.jpg" width=200&gt;
        &lt;/a&gt;
    &lt;/body&gt;
&lt;/html&gt;

 


App (只有 iOS 12 實機才有效果)

import UIKit
import QuickLook

class ViewController: UIViewController, QLPreviewControllerDataSource, QLPreviewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        
        return 1
    }
    
    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        
        let url = Bundle.main.url(forResource: "cupandsaucer", withExtension: "usdz")!
        return url as QLPreviewItem
    }
    
    @IBAction func buttonPressed(_ sender: UIButton) {
        
        let previewController = QLPreviewController()
        previewController.dataSource = self
        previewController.delegate = self
        self.present(previewController, animated: true)
    }
}

 


參考資料
https://developer.apple.com/arkit/

實現 iOS App 與網站之間互通的 Universal Links

Universal Links 是網站與應用程式之間的橋樑,可以將使用者從網站導引至應用程式。比如說有個網址是 http://www.example.com/book/12345678 ,在 iOS 上用 Safari 瀏覽時剛好也有安裝 App 端,網頁最上方就會出現一個  "在「XXX」App 中打開" 的橫幅,點擊就會開啟 App 端進到指定的頁面。

你可能對於 URL Schemes 不陌生,以前要從網頁連到 App 需要判斷是否有安裝該 App,然後分別連到 App 下載頁面或是開啟 App 到某一頁。現在有了 Universal Links 確實方便許多,至少已安裝的部分系統已經幫你處理好了。

 

Apple Developer 設定

先去 iOS App IDs 確定該 ID 的 Associated Domains 為啟用狀態。

 

Xcode 專案設定

Target → Capabilities → 打開 Associated Domains → + → "applinks:example.com"

 

Web 設定

新增一個 apple-app-site-association 檔案(沒有副檔名),內容如下:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "D3KQX62K1A.com.example.DemoApp",
                "paths": [
                    "*"
                ]
            }
        ]
    }
}

若已有這個檔案,只要加入 applinks 這個層級並保持 JSON 結構即可。
D3KQX62K1A 為 Team ID ,可以從這裡找到。
com.example.DemoApp 為 Bundle Identifier 。
paths 裡寫 "*" 代表整個網站都會處理,初期為測試方便所以先全部接收,如果只想接收 /book 就寫 "/book"。另外除了 "*" 也能搭配使用 "?" 及 "NOT" 使用。

將此檔案放在網站的 .well-known 資料夾下,整個網址就像這樣 https://example.com/.well-known/apple-app-site-association ,需注意必須要 https:// 開頭,如果有子網域也要分別作設定。每當 App 安裝或是更新版本才會去抓 apple-app-site-association 。

 

程式碼設定

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        
    // 來源是網頁或網址
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
        let incomingURL = userActivity.webpageURL,
        let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
        let path = components.path {
            
        print("path = \(path)")
            
        // 如果之前有做 URL Schemes 處理,可以搭配使用
        /*  書籍資訊
            https://www.example.com/book/12345678
            com.example.DemoApp://book/12345678
         */
        if path.hasPrefix("/book/"), let bookID = path.components(separatedBy: "/").last, bookID.count >= 10 {
            // 跳轉到書籍詳細資訊
            return true
        }
        return false
    }
        
    return false
}

 


 在 iOS 使用 Safari 瀏覽此網址,可以看到上方的橫幅。若沒有看到可以捲動一下頁面,它有時會隱藏。接著把網址放到備忘錄並對他長按放開,會多出一個 "在「XXX」中打開" 的選項。

 Apple 也有提供工具來檢驗,如果出現 Error no apps with domain entitlements 也不用太糾結,可能是有此功能的新版本未正式上線的關係,只要確定網頁上方有出現橫幅就是成功了。

 


 
參考資料
https://developer.apple.com/ios/universal-links/
https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content
https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/enabling_universal_links
https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/handling_universal_links

在 iOS App 裡實現密碼自動填寫

想像一下這個使用情境,某個服務有 Web 也有 App,若使用者有用 Safari 登入並記住密碼,那麼在 App 裡點擊 Text Field 的鍵盤會提示是否要用已儲存的密碼,點擊後帳號密碼就會填入對應的 Text Field 中,使用者完全不用自行輸入非常方便。

若要實現這功能需要從 App 以及 Web 兩邊都做設定,且系統需求為 iOS 11 以上。

 

Apple Developer 設定

先去 iOS App IDs 確定該 ID 的 Associated Domains 為啟用狀態。

 

Xcode 專案設定

Target → Capabilities → 打開 Associated Domains → + → "webcredentials:example.com"

 

Web 設定

新增一個 apple-app-site-association 檔案(沒有副檔名),內容如下:

{
    "webcredentials": {
        "apps": [
            "D3KQX62K1A.com.example.DemoApp",
            "D3KQX62K1A.com.example.DemoAdminApp"
        ]
    }
}

若已有這個檔案,只要加入 webcredentials 這個層級並保持 JSON 結構即可。
D3KQX62K1A 為 Team ID ,可以從這裡找到。
com.example.DemoApp 為 Bundle Identifier 。

將此檔案放在網站的 .well-known 資料夾下,整個網址就像這樣 https://example.com/.well-known/apple-app-site-association ,需注意必須要 https:// 開頭,如果有子網域也要分別作設定。每當 App 安裝或是更新版本才會去抓 apple-app-site-association 。

 


現在你可以試試先在網站登入並儲存密碼,儲存的密碼可在 設定 → 帳號與密碼 → App 與網站密碼 裡找到。

然後回到 App 的登入畫面裡點擊 Text Field 應該就可使用儲存的帳號密碼了,雖然這只是單向的。

 


你可能會發現並非所有的 Text Field 都會出現,因為預設是以 secureTextEntry 這屬性來判斷是否為密碼,若沒指定則需要另外要用 textContentType 來指定:

userTextField.textContentType = .username
userTextField.keyboardType = .emailAddress
passwordTextField.textContentType = .password

newPasswordTextField.textContentType = .newPassword
confirmPasswordTextField.textContentType = .newPassword

singleFactorCodeTextField.textContentType = .oneTimeCode

 

參考資料
https://developer.apple.com/documentation/security/password_autofill/
https://developer.apple.com/documentation/security/password_autofill/setting_up_an_app_s_associated_domains
https://developer.apple.com/documentation/security/password_autofill/enabling_password_autofill_on_a_text_input_view

WordPress 關閉 wptexturize 功能避免符號被轉換

WordPress 會自動轉換一些符號,例如 "--" 會顯示成 "–" ,由於我會在部落格裡放 bash 語法,裡面一定會有 "--help" 這種字串,不解決會十分困擾。

查到的原因是 wptexturize 方法導致,雖然放在 pre, code, kbd, style, script, tt 標籤內的內容將會忽略而不會觸發 wptexturize 方法,但是這樣就會改變排版。

 

以下是變換前變換後的對照

"---"
"—"

" -- "
"—"

"--"
"–"

" - "
"–"

"..."
"…"

``

"hello
“hello

'hello
‘hello

''

world."
world.”

world.'
world.’

" (tm)"
" ™"

1234"
1234″

1234'
1234′

'99
’99

Webster's
Webster’s

1234x1234
1234×1234

 

將以下程式碼儲存成 disable-wptexturize.php 上傳放到 /wp-content/plugins 底下,再到後台安裝啟用這個外掛就能解決。

/*
Plugin Name: Remove the wptexturize filter
*/

add_filter( 'run_wptexturize', '__return_false' );

 

參考資料
https://codex.wordpress.org/Function_Reference/wptexturize
https://codex.wordpress.org/Plugin_API/Filter_Reference/run_wptexturize
https://geeksterminal.com/wordpress-double-dash-problem/1399/

海外遊戲進入中國市場的相關政策規範及如何克服涉入障礙 筆記

本文是 2018 台北遊戲開發者論壇 的其中一個主題演講筆記

海外遊戲進入中國市場的相關政策規範及如何克服涉入障礙
郭珈瑜 Abby (TapTap)

TapTap 是有媒體屬性與玩家有高互動性的第三方 Android 平台。

特色:
1. 推薦是根據遊戲本身是否好玩以及與該平台的玩家契合度
2. 未上市也可以用預約狀態來露出
3. 禁止刷榜或違規評論
4. 社區玩家的評論牆
5. 不需接 SDK
6. 下載方式有三種,從本平台或是 Google Play 、 App Store 上下載

建議從預約期間就建立遊戲頁面,並且使用論壇功能發布消息。發文內容可以從開發角度或是遊戲本身,像是開發日誌或是遊戲設定的分享,官方帳號會有藍色勾勾作為識別。

版號:遊戲在中國合法發布提供下載必須要有版號
1. 必須要有中國落地的發行商
2. TapTap 會免費協助版號申請
3. 遊戲需注意文字的內容及選題的規範

建議開發進度50~70%進行遊戲內容的評估,70%時進行軟體著作權的申請,100%申請版號。

利潤均不分成,商業模式為廣告系統。

「不只是美術而已」技術美術之路 筆記

本文是 2018 台北遊戲開發者論壇 的其中一個主題演講筆記

「不只是美術而已」技術美術之路
黃香菱 (曉數碼)

何謂技術美術
懂技術的美術人員、程式與美術的溝通橋樑
技術向TA:渲染、特效、優化等的工具製作
美術向TA:美術資深人員懂得與程式人員溝通,且對於新技術接受度高
廣義 TA:任何工作內容同時包括程式與美術的人員

技術美術的工作內容
工作核心:綜合的問題解決,沒有明確答案的問題

1. 建立美術的工作流程
2. 美術相關工具製作 (自動化)
3. 美術效果的研究 (特效、粒子等)
4. 效能優化
5. 大量的溝通

專案支援的三階段變化
1. 前期配合企劃、美術的需求去研究會用到的技術
2. 中期整理好美術流程、美術工具的開發
3. 後期優化效能及解決美術相關 Bug

美術轉職成TA
1. 有完整的參與美術製作流程的觀念
2. 學習遊戲引擎與shader引擎
3. 學習電腦圖學
4. 3D 繪圖
5. Google 力
6. 程式語言、英文能力

技術美術的特質
1. 具有美術基礎
2. 好奇心
3. 善於溝通
4. 耐心
5. 熱情

XMR-Stak 指令參數挖 XMR 簡易教學

XMR-Stak 是一個挖 Monero (XMR) 的軟體,只要是同屬 CryptoNight 的競爭幣都可以使用。此軟體最大的特色就是可以同時使用 CPU 與顯示卡挖同一個幣種,而且只需開一個程式就能辦到。

XMR-Stak 2.5.x 的新版本中,只能使用 2.5.x 以上的設定檔,請重新產生一份乾淨的設定檔,詳細可以參考這個影片。
因應硬分岔, currency 請選 monero 或是 cryptonight_v8 。

經過影片的步驟後會得到新增的檔案如下:
config.txt (通用設定)
cpu.txt (CPU設定)
amd.txt nvidia.txt (顯卡設定)
pools.txt (礦池設定)
我們會拿以上的設定檔串成 .bat 或 .sh 檔

 


這裡以 XMR 為例,基本上不同幣種都是共用前 3 個檔案,只有 pools.txt 必須個別設置。我將 pools.txt 名稱改為 pools-xmr.txt ,同一個幣種都共用此檔案,先把此檔案打開。

"pool_list" :
[
{"pool_address" : "xmr.omine.org:5000", "wallet_address" : "43yG8CDmWgSiyxX9rxH7tfAz4E4VbrvvFFGSAMmaAKm4UL7T3MuKA8C6QMGmcuBUQbGGsFDFcrB5SZ1puboMFETd2ecoxVK#pc1", "rig_id" : "", "pool_password" : "", "use_nicehash" : false, "use_tls" : false, "tls_fingerprint" : "", "pool_weight" : 10 },
{"pool_address" : "xmr-asia1.nanopool.org:14444", "wallet_address" : "43yG8CDmWgSiyxX9rxH7tfAz4E4VbrvvFFGSAMmaAKm4UL7T3MuKA8C6QMGmcuBUQbGGsFDFcrB5SZ1puboMFETd2ecoxVK.pc1/trleee@gmail.com", "rig_id" : "", "pool_password" : "", "use_nicehash" : false, "use_tls" : false, "tls_fingerprint" : "", "pool_weight" : 1 },
],

我設定兩個礦池,並且給予不同的優先權,這樣若是礦池連不上就會換另一個。注意 rig_id 這個參數需要伺服器支援才能用,絕大部分都是在錢包地址上面加工,例如 "." "#" "/" 等字元請參考礦池網站說明。

接下來就是要打指令參數了。

xmr-stak ^
--config config.txt ^
--cpu cpu.txt ^
--amd amd.txt ^
--poolconf pools-xmr.txt ^
--url xmr.omine.org:5000 ^
--user 43yG8CDmWgSiyxX9rxH7tfAz4E4VbrvvFFGSAMmaAKm4UL7T3MuKA8C6QMGmcuBUQbGGsFDFcrB5SZ1puboMFETd2ecoxVK#pc1

每行最後的 “ ^” 是為了斷行,這樣看得比較清楚。若是 Linux 及 Mac 的使用者請使用 ” \” 。

你可能會發現 --url 與 --user 分別對應 pools-xmr.txt 中的 pool_address 與 wallet_address ,為什麼這邊還要再寫一次?因為指令的優先權會大於 pools-xmr.txt 中的 pool_list 設定,假如你今天想挖第 2 個礦池,用指令覆蓋就好不須變動 pools-xmr.txt 檔案。

假設你想要暫時關閉顯示卡挖礦,則直接用指令 --noAMD 與 --noNVIDIA 禁用就好,也不須變動 amd.txt 和 nvidia.txt ,我分別對 GPU 啟用與禁用的兩種情況建立指令,依照心情隨時切換。

xmr-stak ^
--config config.txt ^
--cpu cpu.txt ^
--amd amd.txt ^
--poolconf pools-xmr.txt ^
--url xmr.omine.org:5000 ^
--user 43yG8CDmWgSiyxX9rxH7tfAz4E4VbrvvFFGSAMmaAKm4UL7T3MuKA8C6QMGmcuBUQbGGsFDFcrB5SZ1puboMFETd2ecoxVK#pc1 ^
--noAMD ^
--noNVIDIA

最後將指令存成 .bat (Windows) 與 .sh (Linux Mac) 再執行就可以開挖囉。

台灣最大 XMR 礦池
https://xmr.omine.org/

 


附上官方指令參數說明


Usage: xmr-stak [OPTION]...

  -h, --help                 show this help
  -v, --version              show version number
  -V, --version-long         show long version number
  -c, --config FILE          common miner configuration file
  -C, --poolconf FILE        pool configuration file
  --noUAC                    disable the UAC dialog
  --benchmark BLOCKVERSION   ONLY do a benchmark and exit
  --benchwait WAIT_SEC             ... benchmark wait time
  --benchwork WORK_SEC             ... benchmark work time
  --noCPU                    disable the CPU miner backend
  --cpu FILE                 CPU backend miner config file
  --noAMD                    disable the AMD miner backend
  --noAMDCache               disable the AMD(OpenCL) cache for precompiled binaries
  --openCLVendor VENDOR      use OpenCL driver of VENDOR and devices [AMD,NVIDIA]
                             default: AMD
  --amd FILE                 AMD backend miner config file
  --noNVIDIA                 disable the NVIDIA miner backend
  --nvidia FILE              NVIDIA backend miner config file
  -i --httpd HTTP_PORT       HTTP interface port

The following options can be used for automatic start without a guided config,
If config exists then this pool will be top priority.
  -o, --url URL              pool url and port, e.g. pool.usxmrpool.com:3333
  -O, --tls-url URL          TLS pool url and port, e.g. pool.usxmrpool.com:10443
  -u, --user USERNAME        pool user name or wallet address
  -r, --rigid RIGID          rig identifier for pool-side statistics (needs pool support)
  -p, --pass PASSWD          pool password, in the most cases x or empty ""
  --use-nicehash             the pool should run in nicehash mode
  --currency NAME            currency to mine

Environment variables:

  XMRSTAK_NOWAIT             disable the dialog `Press any key to exit.
                                    for non UAC execution

Supported coin options:
        - aeon7
        - bbscoin
        - bittube
        - cryptonight
        - cryptonight_bittube2
        - cryptonight_masari
        - cryptonight_haven
        - cryptonight_heavy
        - cryptonight_lite
        - cryptonight_lite_v7
        - cryptonight_lite_v7_xor
        - cryptonight_v7
        - cryptonight_v8
        - cryptonight_v7_stellite
        - graft
        - haven
        - intense
        - masari
        - monero
        - qrl
        - ryo
        - stellite
        - turtlecoin

Version: xmr-stak 2.5.1 4e72408ff
Brought to by fireice_uk and psychocrypt under GPLv3.
Press any key to exit.

ethminer 新版指令參數挖 ETH 簡易教學

ethminer 是一個挖 Ethereum (ETH) 的軟體,只要是同屬 Ethash 的競爭幣都可以使用。此軟體最大的特色是沒有開發者抽成,當然也不需要自己去編譯了。

ethminer 0.14.0 的新版本中,已準備棄用多個與礦池有關的參數,目前舊的參數還是可以使用但會顯示警告,並在未來的版本將會移除,以下的參數會被一行的 -P 所取代。

-F, --farm, -FF, -SF, -FS, --farm-failover, --stratum-failover, -S, --stratum, -O, --userpass, -SP, --stratum-protocol, --stratum-ssl, -FO, --failover-userpass, -u, --user, -p, --pass, -o, --port, -fu, --failover-user, -fp, --failover-pass, -fo, --failover-port

 


舊版
ethminer ^
-S eth.gpumine.org:3333 ^
-FS eth2.gpumine.org:4333 ^
-O 0xFdd43923340736FfBcB31C808aC644922c1dF05d.pc1 ^
-SP 1 ^
-RH ^
--farm-recheck 200 ^
-G

新版
ethminer ^
-P stratum1+tcp://0xFdd43923340736FfBcB31C808aC644922c1dF05d.pc1@eth.gpumine.org:3333 ^
-P stratum1+tcp://0xFdd43923340736FfBcB31C808aC644922c1dF05d.pc1@eth2.gpumine.org:4333 ^
-RH ^
--farm-recheck 200 ^
-G

每行最後的 " ^" 是為了斷行,這樣看得比較清楚。若是 Linux 及 Mac 的使用者請使用 " \" 。

其中要特別說明的是 stratum1+tcp:// ,如果是 getwork 就要填 http ,如果是 stratum 則可以填以下任一個
stratum+ssl
stratum+tcp
stratum+tls
stratum+tls12
stratum1+ssl
stratum1+tcp
stratum1+tls
stratum1+tls12
stratum2+ssl
stratum2+tcp
stratum2+tls
stratum2+tls12

你可以發現上面那一大坨有些只差在數字,前者對應 -SP --stratum-protocol ,後者則對應 --stratum-ssl ,不過最常用的還是 tcp 和 ssl 啦。

最後將指令存成 .bat (Windows) 與 .sh (Linux Mac) 再執行就可以開挖囉。

台灣兩大 ETH 礦池
https://eth-tw.gpumine.org/
https://www.tweth.tw/

 


附上官方指令參數說明


Usage ethminer [OPTIONS]
Options:

Work farming mode:
-F,--farm &lt;url&gt; (deprecated) Put into mining farm mode with the work server at URL (default: http://127.0.0.1:8545)
-FF,-FO, --farm-failover, --stratum-failover &lt;url&gt; (deprecated) Failover getwork/stratum URL (default: disabled)
--farm-retries &lt;n&gt; Number of retries until switch to failover (default: 3)
-S, --stratum &lt;host:port&gt; (deprecated) Put into stratum mode with the stratum server at host:port
-SF, --stratum-failover &lt;host:port&gt; (deprecated) Failover stratum server at host:port
-O, --userpass &lt;username.workername:password&gt; (deprecated) Stratum login credentials
-FO, --failover-userpass &lt;username.workername:password&gt; (deprecated) Failover stratum login credentials (optional, will use normal credentials when omitted)
--work-timeout &lt;n&gt; reconnect/failover after n seconds of working on the same (stratum) job. Defaults to 180. Don't set lower than max. avg. block time
--stratum-ssl [&lt;n&gt;] (deprecated) Use encryption to connect to stratum server.
0: Force TLS1.2 (default)
1: Allow any TLS version
2: Allow self-signed or invalid certs and any TLS version
-SP, --stratum-protocol &lt;n&gt; (deprecated) Choose which stratum protocol to use:
0: official stratum spec: ethpool, ethermine, coinotron, mph, nanopool (default)
1: eth-proxy compatible: dwarfpool, f2pool, nanopool (required for hashrate reporting to work with nanopool)
2: EthereumStratum/1.0.0: nicehash
-RH, --report-hashrate Report current hashrate to pool (please only enable on pools supporting this)
-HWMON [&lt;n&gt;], Displays gpu temp, fan percent and power usage. Note: In linux, the program uses sysfs, which may require running with root privileges.
0: Displays only temp and fan percent (default)
1: Also displays power usage
--exit Stops the miner whenever an error is encountered
-SE, --stratum-email &lt;s&gt; Email address used in eth-proxy (optional)
--farm-recheck &lt;n&gt; Leave n ms between checks for changed work (default: 500). When using stratum, use a high value (i.e. 2000) to get more stable hashrate output
-P URL Specify a pool URL. Can be used multiple times. The 1st for for the primary pool, and the 2nd for the failover pool.
URL takes the form: scheme://user[:password]@hostname:port[/emailaddress].
for getwork use one of the following schemes:
http
for stratum use one of the following schemes:
stratum+ssl stratum+tcp stratum+tls stratum+tls12 stratum1+ssl stratum1+tcp stratum1+tls stratum1+tls12 stratum2+ssl stratum2+tcp stratum2+tls stratum2+tls12
Example 1 : stratum+ssl://0x012345678901234567890234567890123.miner1@ethermine.org:5555
Example 2 : stratum1+tcp://0x012345678901234567890234567890123.miner1@nanopool.org:9999/john.doe@gmail.com
Example 3 : stratum1+tcp://0x012345678901234567890234567890123@nanopool.org:9999/miner1/john.doe@gmail.com

Benchmarking mode:
-M [&lt;n&gt;],--benchmark [&lt;n&gt;] Benchmark for mining and exit; Optionally specify block number to benchmark against specific DAG.
--benchmark-warmup &lt;seconds&gt; Set the duration of warmup for the benchmark tests (default: 3).
--benchmark-trial &lt;seconds&gt; Set the duration for each trial for the benchmark tests (default: 3).
--benchmark-trials &lt;n&gt; Set the number of benchmark trials to run (default: 5).
Simulation mode:
-Z [&lt;n&gt;],--simulation [&lt;n&gt;] Mining test mode. Used to validate kernel optimizations. Optionally specify block number.
Mining configuration:
-G,--opencl When mining use the GPU via OpenCL.
-U,--cuda When mining use the GPU via CUDA.
-X,--cuda-opencl Use OpenCL + CUDA in a system with mixed AMD/Nvidia cards. May require setting --opencl-platform 1 or 2. Use --list-devices option to check which platform is your AMD.
--opencl-platform &lt;n&gt; When mining using -G/--opencl use OpenCL platform n (default: 0).
--opencl-device &lt;n&gt; When mining using -G/--opencl use OpenCL device n (default: 0).
--opencl-devices &lt;0 1 ..n&gt; Select which OpenCL devices to mine on. Default is to use all
-t, --mining-threads &lt;n&gt; Limit number of CPU/GPU miners to n (default: use everything available on selected platform)
--list-devices List the detected OpenCL/CUDA devices and exit. Should be combined with -G, -U, or -X flag
--display-interval &lt;n&gt; Set mining stats display interval in seconds. (default: every 5 seconds)
-L, --dag-load-mode &lt;mode&gt; DAG generation mode.
parallel - load DAG on all GPUs at the same time (default)
sequential - load DAG on GPUs one after another. Use this when the miner crashes during DAG generation
single &lt;n&gt; - generate DAG on device n, then copy to other devices
OpenCL configuration:
--cl-kernel &lt;n&gt; Use a different OpenCL kernel (default: use stable kernel)
0: stable kernel
1: experimental kernel
--cl-local-work Set the OpenCL local work size. Default is 128
--cl-global-work Set the OpenCL global work size as a multiple of the local work size. Default is 8192 * 128
--cl-parallel-hash &lt;1 2 ..8&gt; Define how many threads to associate per hash. Default=8
CUDA configuration:
--cuda-block-size Set the CUDA block work size. Default is 128
--cuda-grid-size Set the CUDA grid size. Default is 8192
--cuda-streams Set the number of CUDA streams. Default is 2
--cuda-schedule &lt;mode&gt; Set the schedule mode for CUDA threads waiting for CUDA devices to finish work. Default is 'sync'. Possible values are:
auto - Uses a heuristic based on the number of active CUDA contexts in the process C and the number of logical processors in the system P. If C &gt; P, then yield else spin.
spin - Instruct CUDA to actively spin when waiting for results from the device.
yield - Instruct CUDA to yield its thread when waiting for results from the device.
sync - Instruct CUDA to block the CPU thread on a synchronization primitive when waiting for the results from the device.
--cuda-devices &lt;0 1 ..n&gt; Select which CUDA GPUs to mine on. Default is to use all
--cuda-parallel-hash &lt;1 2 ..8&gt; Define how many hashes to calculate in a kernel, can be scaled to achieve better performance. Default=4
--cuda-noeval bypass host software re-evaluation of GPU solutions.
This will trim some milliseconds off the time it takes to send a result to the pool.
Use at your own risk! If GPU generates errored results they WILL be forwarded to the pool
Not recommended at high overclock.
API core configuration:
--api-port Set the api port, the miner should listen to. Use 0 to disable. Default=0, use negative numbers to run in readonly mode. for example -3333.
General Options:
-v,--verbosity &lt;0 - 9&gt; Set the log verbosity from 0 to 9 (default: 5). Set to 9 for switch time logging.
-V,--version Show the version and exit.
-h,--help Show this help message and exit.
Environment variables:
NO_COLOR - set to any value to disable color output. Unset to re-enable color output.

使用 Let’s Encrypt 及 Certbot 在 Debian 上的 Nginx 啟用 HTTPS

本篇文章所搭配環境為 Debian 9 + Nginx 並使用架構在 Let’s Encrypt 上的 Certbot 來啟用 HTTPS 。

 

找出各網域所對應的根目錄

先去 /etc/nginx/sites-enabled/default 這個檔案記錄下各子網域所對應的根目錄
例如我的像是這樣
dreambreakerx.com /usr/share/nginx/www
api.dreambreakerx.com /usr/share/nginx/api
blog.dreambreakerx.com /usr/share/nginx/blog

 

安裝 Certbot

apt-get install python-certbot-nginx -t stretch-backports

如果無錯誤請直接跳到設定 Certbot 那個步驟,若是出現
E: The value 'stretch-backports' is invalid for APT::Default-Release as such a release is not available in the sources
請按照 https://backports.debian.org/Instructions/
編輯 /etc/apt/sources.list 這個檔案新增這行
deb http://ftp.debian.org/debian stretch-backports main

pico /etc/apt/sources.list
apt-get update
apt-get install python-certbot-nginx -t stretch-backports

 

設定 Certbot

certbot --authenticator webroot --installer nginx

各項設定請參考下面,需要注意的是我輸入一個空格字元選擇所有的網域,以及最後我設定強制使用 https

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): example@gmail.com

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: Y

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: dreambreakerx.com
2: api.dreambreakerx.com
3: blog.dreambreakerx.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

Input the webroot for dreambreakerx.com: (Enter 'c' to cancel): /usr/share/nginx/www

Select the webroot for api.dreambreakerx.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
2: /usr/share/nginx/www
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Input the webroot for api.dreambreakerx.com: (Enter 'c' to cancel): /usr/share/nginx/api

Select the webroot for blog.dreambreakerx.com:
-------------------------------------------------------------------------------
1: Enter a new webroot
2: /usr/share/nginx/api
3: /usr/share/nginx/www
-------------------------------------------------------------------------------
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1
Input the webroot for blog.dreambreakerx.com: (Enter 'c' to cancel): /usr/share/nginx/blog

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

接著可以試試新網址,也試試舊網址有沒有轉址到 https

 

自動更新證書

更新時使用這句

certbot renew --dry-run

也可以加入 Cron Job ,讓它每個星期一早上3點30分自動執行

crontab -e
30 3 * * 1 certbot renew --dry-run