Posts

初次嘗試 Unity 的一些心得

最近透過友人介紹,認識了一位想要做遊戲的朋友 R, 由於 R 本身並沒有太多寫程式的經驗, 主要是想看看能否透過我的幫忙來實現他的一些想法

R 似乎想要做個滿足兒時回憶的 JRPG。 在和他了解過一些背景後,乖乖不得了! 他不只使用過 RPG Maker 試著實現過一些介面, 在 Google Drive 有著大量的美術資源, 居然連遊戲世界觀都有專門的 Fandom Wiki! (世界觀好像是他和一群朋友設計的)

既然對方都這樣阿莎力了,就算我沒有製作遊戲的經驗 總也要給出一點交待啊!

既然要做遊戲,肯定要用個業界普遍接受的開發工具! R 之所以放棄使用好上手的 RPG Maker 做遊戲, 是因為 RPG Maker 對於紙娃娃和地圖的互動, 以及 tile 的像素限制無法滿足他的要求。

由於我本身也沒有太多經驗,於是就把腦筋動到了 Unity 身上。 (畢竟很久之前因為公司要求,曾短時間接觸過一段時間)

Unity 這個遊戲開發工具名聲響亮, 最初雖然是針對 Mac OS 的開發平台, 但演進到現在, 整合服務 Unity Hub 知名到可以從 Linux 上的各種 Package Manager 安裝。 為了服務新手,平台本身也包含了大量的教學影片。 可以說是入門遊戲開發的首選。

作為完全沒做過遊戲的菜鳥, 我來講講這兩天走過線上教學課程的一些心得。

安裝 Unity Hub

Unity Hub 是 Unity 的桌面 APP。 我們用 Unity 開發的遊戲專案資料夾就是用它管理的。 使用時需要先申請 Unity ID。 Unity Hub 本身是一個大平台, 似乎能從平台上取得不少現成的模型或場景。

有了 Unity Hub 後,便能

免費方案下,使用製作遊戲並不成問題。 似乎是遊戲上架後若收益超過一定數額, 則需要支付平台相對應的費用, 不過這點對我這類只想試試看的開發者完全不是問題

教學資源

就和很多線上教學平台一樣, 剛接觸 Unity 時,最好直接從他們的教學影片開始看起。

資源位址是: https://learn.unity.com/tutorial/

我接下來提到的觀念,就是從課程第一章學來的。

Unity 的遊戲專案

Unity 專案定義了幾個名詞:

  1. Assets:
    遊戲開發時可使用的資源,包含遊戲物件(Game Object)、腳本(scripts)、場景(Scene)等。
  2. Script:
    Unity 使用 C# 作為程式語言。雖然我是第一次接觸,但作為前 Android 碼農,可以看出滿滿 JAVA 風格的物件導向結構。

Rofi 簡易入門

目前我使用的 Linux Distro 是基於 Arch 的 Archcraft, 它是個相當簡約的系統。 作者 aditya 並沒有為常用功能在裡面安裝太多的 GUI 軟體, 例如 APP Luancher, wifi 選單或是休眠/關機選單等。 取而代之的,是許多基於 Rofi 的簡短腳本。

既然我都用了這麼久的 Archcraft,自然也要了解一下這個重要的元件如何運作。 研究了一下才發現,這個元件真是不可多得的好工具啊!

Rofi 的作用

因為常見的 Package Manager 應該都有支援 Rofi 這個套件, 這邊就先略過安裝/編譯步驟不談。

官網上,Rofi 是如此定義自己的:

A window switcher, application launcher and dmenu replacement

Window Switcher

就是按下 Alt + Tab 會出現的那個東東! 在持續壓下 Alt 的情況下,連續按下 Tab 可以快速切換已開啟的應用程式。 這個特性在微軟的 Windows 和不少 Linux Distro 都有實作, 可算是個人電腦桌面環境中公認的超實用選項。

Application Luancher

這個功能則更容易理解!對於一般 Windows 使用者來講,就是「開始」選單嘛。 而在其它 Linux Distro 中,則會顯示 XDG (X桌面工作群組)中事先定義的應用程式。 使用者可以輸入關鍵字縮小搜索範圍,並用 tab 或其它按鍵選擇想要啟動的應用程式。 在我的桌面中,它是長這樣的:

dmenu

dmenu 可能就比較小眾了。 有接觸過輕量級 Linux 桌面環境的朋友可能會比較熟悉。 簡單來說,這個指令可以:

  1. 將標準輸入中每一行的內容當作可選選項,
  2. 在桌面環境顯示選單
  3. 使用者可以在輸入欄位鍵入關鍵字縮小搜索範圍,再用 Enter 選擇其中一個選項
  4. 最後選中的選項將作為 dmenu 的標準輸出

由文字理解可能不太容易,這邊就來示範一下

# 印出 1~100,共 100 行內容。經由 STDIN 交給 dmenu 處理
# dmenu 的輸出會被印在螢幕上
seq 100 | dmenu | xargs -i echo Entry {} is selected

在 shell 中執行以上指令,會馬上在螢幕頂端看到像這樣的選單:

最左邊是輸入欄位,往右以後就是可選的選項。 可以在上圖看到,一旦進行了輸入,右邊的選項馬上就會縮減匹配的 Entry。 在選擇了數字 3 按下 Enter 後,shell 馬上會印出 Entry 3 is selected

可以知道,dmenu 最大的作用就是方便使用者從一堆選項中快速取得目標, 再交由其它應用程式處理該選項。

接著說回 Rofi。我們可以用 -dmenu 這個參數來模擬 dmenu 的行為。 現在用上面的例子來啟動 Rofi:

seq 100 | rofi -dmenu | xargs -i echo Entry {} is selected

和之前一樣出現了選單,不過不再像 dmenu 是用單行列出所有選項。 而是視覺元素更加豐富的選單:

可以看到,Rofi 自稱是 dmenu replacement 也不是沒有道理的, 它將原本簡陋的介面大大強化。 另外,它也為不同使用情境提供更多自訂選項。 下面就來一一解說:

使用 Rofi

雖然將標準輸入作為選單乍一看好像是很樸素的功能, 但對於每天接觸 Command Line 的使用者來說, 能夠用如此直覺的方式來與選單互動,dmenu 和 Rofi 其實是相當強力的工具。

想像一下,你有許多已經寫好的腳本,但每次使用時總是在參數的輸入上花費大量時間, 這時這類選單軟體的優勢就出來了。

不過在談到自訂的腳本之前,可以看看 Rofi 預先提供的幾個實用模式(mode)。 Rofi 使用參數 -show 來指定要啟動的預設模式。

視窗切換

rofi -show window

window mode。使用以上的指令,即可呼叫出視窗選單。 使用者選擇要切換的視窗後,即可將桌面環境的焦點引導到選中的視窗。

啟動指令

rofi -show run

run mode。使用以上的指令,即可呼叫出指令選單。 和 shell 中一樣,選單中的指令是從環境變數 PATH 來的, 所以會有相當多的 Entry。

啟動應用程式

rofi -show drun

drun mode。這就是大家平常熟悉的 APP Launcher 啦!。 選單中的指令是從 XDG 來的。所以幾乎每一個都帶有專用圖標。

建立 SSH 連線

rofi -show ssh

是的!還可以在 Rofi 中選擇主機連線。 Rofi 會自動從 ~/.ssh/known_hosts~/.ssh/config裡讀取 SSH 的相關設定。 選擇主機後,即可自動開啟 Terminal Emulater 進行連線。

同時使用多個模式

rofi -show drun -modes window,drun,run,ssh

Rofi 可以同時啟動多種模式。 使用 -modes 可以指定這些模式,它們彼此間用逗號分隔。 其實在不指定 -modes 的情況下,Rofi 預設就會同時啟動以上四種模式。 (注意一下上面的幾個選單圖片,在最底下都有可切換的模式)

-show 參數指定啟動時要第一個使用的模式,這邊我們選擇可以啟動應用程式的 drun。 若要切換模式,使用 Ctrl + Tab 便可以依序切換。

其它預設模式

Rofi 還包含 filebrowser(檔案選擇器), keys(快捷鍵選單) 等其它模式, 詳情可以參考 man page

使用自訂的指令新增模式

當然除了標準輸入和以上的幾個預設 mode 之外, 也可以使用自訂的指令來創造選單,並設定選擇之後要執行的動作

rofi -show foo -modes foo:./bar

自訂的模式用參數 -modes 指定,名稱和指令以 : 分隔。 以上是利用名叫 bar 的指令為 Rofi 新增名為 foo 的 mode。 然後再用 -show 參數來指定這個新的 mode。

在撰寫指令時(也就是上方的 bar ),只需要掌握幾點:

  • 指令若不接受任何參數,其標準輸出就是最初的選單內容
  • 選中選項後,該選項會作為指令的參數,並再次執行指令
  • 若指令產生了任何標準輸出,則 Rofi 會再次將它們作為選單內容,供使用者選擇
  • 被選中選項又會作為指令的參數,重覆上面的步驟
  • 最後,若指令沒有任何標準輸出,則整個選單就算大功告成, Rofi 順利退出
sequenceDiagram autonumber Note left of bar: 不帶參數執行 bar ->>Rofi: 未加參數的標準輸出 Note right of Rofi: 使用者選擇 Entry Rofi->>bar: 將選中的 Entry 作為 bar 的參數 Note left of bar: 以被選中的參數執行 bar ->>Rofi: 新的標準輸出 Note over bar, Rofi: 重複2和3,直到標準輸出為空 Note right of Rofi: 結束執行,將最後選中的 Entry 作為標準輸出。

由以上的流程可以了解到,自訂的指令需要考慮有參數和無參數兩種情況。 若是你的使用情境僅僅是想讓使用者在選單選擇一次, 則在有參數時直接退出,不作任何標準輸出即可。

當然如同上面提到的多模式參數, 你也可以用多個指令讓 Rofi 同時執行多個模式:

rofi -show mode1 -modes mode1:./mode1.sh,mode2:./mode2.sh,mode3:./mode3.sh

上面使用 ./mode1.sh, ./mode2.sh, ./mode3.sh 3 個指令,分別新增 mode1, mode2, mode3 三個模式。並預設使用 mode1 的選單。 和上面介紹的一樣,使用者可以用 Ctrl + Tab 切換要套用的模式。

調整風格

若你是從主流的 Package Manager 安裝 Rofi 的話, 很可能會連帶把一些預設的風格檔案(以 .rasi 結尾)和相關的腳本一併安裝。 其中一個好用的腳本就是 rofi-theme-selector。 它精巧的地方在於,利用 Rofi 的特性為你羅列可用的風格檔, 在選擇後,馬上為你更改 Rofi 的介面風格, 直至你使用快捷鍵 Alt-A 確定更改風格。使用起來像這樣:

對了!影片中我在啟動 rofi-theme-selector 前的 APP Launcher 也是 Rofi。 只不過是套用的是不同的風格檔案。

風格檔案的撰寫格式這邊就略過不提了,有興趣的話可以參考 man page

另外若是你有稍為讀過這個腳本, 就會知道 Rofi 預設是使用 ~/.config/rofi/config.rasi 這個檔案作為預設風格。 除此之外,我們也可以用參數 -theme 直接為 Rofi 指定風格檔案:

rofi -theme /path/to/your/theme

結語

簡而言之,Rofi, dmenu 和其它類似的工具, 其目的就是讓常用 Command Line 的開發者有個利用 STDIN/STDOUT 迅速製作選單的途徑, 不用費神藉由 GTK/QT 等傳統手段製作 GUI 介面。 只要使用得當,在桌面環境下的工作效率真的會大大提高!

前一陣子我也把 Rofi 和常用的密碼管理工具 PasswordStore 相結合, 製作出了屬於自己的選單工具。 之後有時間也寫一篇文章來分享。

Rgb Terrain Tile

PMTiles 詳解

統計手機的簡訊資料

實聯制在4月27日走入歷史,與很多邊緣人一樣, 疫情期間,實聯制佔據了我手機中幾乎所有簡訊的份額。 不誇張地說,或許 1922 將會是我們此生中發過最多簡訊的號碼了!

在和它道別的同時,我也想知道疫情期間自己到底發送了多少簡訊? 那麼,是時候用 adb 這項工具來做點事了!

Android 的簡訊政策

Android 中,每個可見的功能都由特定的 APP 所提供。 在查詢 Android Developer 手冊後, 可以知道所有簡訊 APP 均實作名為 Telephony provider 的 Content Provider , 因此可在名稱為 com.android.providers.telephony 的 APP 中找到手機簡訊的資料。

首先是第一步,備份 com.android.providers.telephony 的所有資料:

adb backup -apk com.android.providers.telephony -f telephony.ab

還原簡訊資料

這個備份出來的 .ab (Android Backup) 檔案嘛,雖然說是 Android 的備份用檔案, 不過平常它需要搭配 adb restore 等指令以還原在 Android 系統上。 就我所知在任何官方文件上都沒有提到其它處理方法。 不過既然我們要讀取它的內容,當然要直接暴力解開啦!

好在根據一些論壇大神的指引,這邊我了解到:.ab 實際上是個用 zlib 作成的 tar 壓縮檔。 另外一個重點是: 該壓縮檔還在開頭加了 24 byte 的前綴,用以標示自己是 Android 的備份檔案。

有了以上的資訊事情就好辦了,這邊直接使用一些基本的指令就可以還原資料:

# 用 tail 印出 24 byte 以後的檔案內容
# 交由 pigz 解壓縮 和 tar 解開
tail -c +25 telephony.ab | pigz -d | tar -xf -

處理原始資料

取得 APP 的原始資料後,接著就簡單了! 目錄下所有結尾為 sms_backup 的檔案都是簡訊資料, 把它們解壓縮即可得到像這樣的 JSON 物件:

{
    "address": "0911510196",
    "body": "親愛的客戶您好:謝謝您使用郵政VISA金融卡於05/26 09:35 消費新臺幣290元,如有疑義,請撥打卡片背面客服電話.",
    "date": "1653528972961",
    "date_sent": "1653528971000",
    "status": "-1",
    "type": "1",
    "recipients": [ "0911510196" ],
    "read": "1"
}

可以見到,除了來源的電話號碼外,也有時間欄位。 有了這些資訊,就可以用 JSON 工具輕鬆處理資料啦! 這邊使用 jq 進行處理。

# 從所有名為 XXXsms_backup 的檔案中
# 取得收件者為 1922 的簡訊資料
# 每筆一行,存檔在 1922.sms
for sms in **/*sms_backup; do pigz -d <$sms; done | \
jq -c '.[]|select(.address=="1922")' >1922.sms
    
# Count how many SMS messages with address = 1922
wc -l 1922.sms

# Get the first and the last time of SMS messages
jq -r .date 1922.sms | sort | sed -n 's/...$//;1p;$p' | xargs -i date -d @{}

因為我上一支手機壞掉時沒有妥善轉移資料,所以最早有紀錄的簡訊是從去年開始。

從以上的指令可以知道:去年10月開始到昨天,4月27日,我總共發了1066則簡訊給 1922 !

使用 Google Photos 當作圖床

引子

撰寫部落格,沒有圖床怎麼行呢?

目前本站搭建在 Vultr 提供的 VPS 服務上。 基本方案下,這台主機有 25GB 的 SSD 可供使用。 雖然目前可用空間還有 14 GB , 但是時候先想好圖片的儲存方案了, 總不能一直把圖片往這部主機塞。

好在目前我的手機是 PIXEL 5, 享有無限量上傳的 Google Photos 服務。 所以只要能夠接受一點點壓縮圖片的代價, 無限空間的圖床理論上是沒問題。

動手開工

目前部落格的各個頁面是用 Hugo 搭建的。 在每則文章的 markdown 檔案中, 可以使用絕對路徑或相對路徑來指定圖片連結。例如:

![](https://topo.tw/photos/foo.jpg)
![](../../photos/foo.jpg)

但不管怎樣,都要讓 VPS 先有一個 /photos/ 的 path 來提供圖片。 因此,我們會需要有一個圖片的專屬目錄供 Nginx 使用。

要如何把 Google Photos API 轉換為可掛載到檔案系統的目錄呢? 嘿嘿,要把各種雲端儲存服務掛載到檔案系統, 早就有大名鼎鼎的 rclone 可供使用啦。

設定

網路上有關 rclone 的教學資源相當豐富, 官方也有提供 docker image,所以這邊我就不多作贅述了。 只把目前情境下需要的設定紀錄下來:

IMAGE=rclone/rclone:1.58.0

# 使用 docker 執行 rclone
# 進入 config 模式
docker run \
    --rm -it \
    --name rclone \
    --user `id -u`:`id -g` \
    --volume ~/.config/rclone:/config/rclone \
    --volume ~/rclone:/data \
    --network host \
    $IMAGE \
    config
    
# 依照提示,新增一個指向 Google Photos 的 Remote
# 大部分的設定使用預設選項即可
...
    
# 掛載相關的 Remote 到目錄 ~/data/photos/
# 為了不要在檔案權限上太花時間,這邊我們把 /etc/passwd 和 /etc/group 傳進去
# 讓 docker container 內的使用者和目前使用者一模一樣
mkdir -p ~/data/photos
docker run \
    --name rclone \
    --rm --detach \
    --user `id -u`:`id -g` \
    --volume ~/.config/rclone:/config/rclone \
    --volume ~/data:/data:shared \
    --volume /etc/passwd:/etc/passwd:ro --volume /etc/group:/etc/group:ro \
    --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined \
    $IMAGE \
    mount photos:media/by-day /data/photos --gphotos-read-size --allow-other

值得注意的是:預設情況下,掛載的目錄只可以顯示檔名而無法取得圖片內容

根據官方文件1,這是因為讀取圖片需要知道圖片的 size, 而用 Google Photos API 取得 size 需要額外的 transaction , 會大大拖慢同步的速度。

不過因為我們的目的就是要取得圖片內容,因此參數需要加上 gphotos-read-size。 執行指令後,我們就完成掛載啦。

Google Photos 類型的目錄下有不同的圖片分類方式: 例如 all/, by-year/, by-month/, by-day/等。

因為我們僅掛載 media/by-day,所以目錄結構會長這樣:

~/data/photos/2022
├── 2022-01-01
│   ├── PXL_20220101_055706343.jpg
│   ├── PXL_20220101_060221557.jpg
│   ├── PXL_20220101_060725049.jpg
│   ├── PXL_20220101_064911561.jpg
│   └── PXL_20220101_065919363.MP.jpg

接著,就只要把 Nginx 調整好就完成圖床服務啦!

SSH + tmux: 分享你的命令行操作

引子

前些日子裡正好有機會主持一些小課程, 主要是針對 docker 和 git 這些開發工具的一些介紹。 由於過程中會用到大量命令行, 在課後檢討時我總懷疑學員們會不會其實看不太清楚前排螢幕上的操作?

bad image

好吧...很顯然對後排來說字真的很小...

在每個人都有筆電的課堂上,最好的方式當然是讓他們用自己的螢幕來觀看整個操作過程。 現在這個時代, VNC 之類的螢幕共享工具應該已經相當成熟。 但是我除了沒有使用經驗以外, 要求每個學員都裝上同樣的軟體可能也不太現實。那麼問題來了:

有沒有什麼方法可以快速分享命令行操作呢?

既然要把目前使用者與 Shell 的互操作(Session) 分享出去, 第一個想到的工具當然是 tmux!

tmux 的唯讀模式

使用 tmux ,可以讓當前的使用者在不同的登入狀態下快速 attach 到同一個 session 。 不過這就帶來了一個問題: 既然我們只是要展示操作,當然不希望學員們能夠在 session 下進行任何操作!

所幸 tmux 在設計時早就考慮到了這一步,在 attach 時,使用參數 -r 可以讓使用者進入唯讀模式。 該模式下除了輸入 <prefix> + D 離開 tmux 之外無法進行任何操作:

# 以唯讀模式進入名為 "demo" 的 session
tmux attach -t demo -r

SSH 的登入設定

既然我們可以輕輕鬆鬆搞定唯讀模式,那麼就該處理使用者的問題了。 tmux 在預設狀態下1, session 是無法被不同的系統使用者共享的。 學員們首先需要登入我的使用者帳號,才可以用唯讀模式啟動 tmux 觀察我操作的 sesssion。

哇靠!登入我的使用者帳號!?這怎麼想都很不對勁啊。 為了透過 tmux 的唯讀模式把 session 分享出去,我們是不是又暴露了更嚴重的漏洞? 雖然我可以為了教學專門建立一些一次性的帳號,但預設情況下2,它們始終是可以執行 tmux 以外的指令的。 要是學員們不小心執行了一些預期外的操作,要收拾這個爛攤子就很麻煩了。

幸好,所謂的「登入」並不是一定要和當前使用者的 login shell 互動, 我們可以透過 SSH 連線直接執行指令,不需要在 login shell 下多打一次指令:

# 登入後,直接執行指令和其參數 'command arg1 arg2'
ssh <USER>:<HOST> command arg1 arg2

所以學員們可以直接執行以下指令,觀看我在遠端主機所分享的,名為 “demo” 的 tmux session:

# 登入後,直接執行 tmux 的唯讀模式
ssh <USER>:<HOST> tmux attach -t demo -r

不過,既然學員們可以用 SSH 執行指定的 command ,自然也可以帶起 login shell 或其它指令。 我們仍無法完全預防可能發生的誤操作!

好在為了這種情況, sshd 這套 SSH Server 早就有相應的設計了(其實我也是最近才知道), 遠端主機不只可以在 ~/.ssh/authorized_keys 文件中設定允許登入的金鑰, 還可以設定使用該金鑰登入時,使用者「唯一」能執行的指令。

有關這點,可以查閱手冊找到相關說明:

$ man sshd 8
...
Public keys consist of the following space-separated fields: options,
 keytype, base64-encoded key, comment
...
    command="command"
         Specifies that the command is executed whenever this key is used for authentication.  The command supplied by the user
         (if any) is ignored.  The command is run on a pty if the client requests a pty; otherwise it is run without a tty.  If
         an 8-bit clean channel is required, one must not request a pty or should specify no-pty.  A quote may be included in
         the command by quoting it with a backslash.

         This option might be useful to restrict certain public keys to perform just a specific operation.  An example might be
         a key that permits remote backups but nothing else.  Note that the client may specify TCP and/or X11 forwarding unless
         they are explicitly prohibited, e.g. using the restrict key option.
...

因此,用以下的型式撰寫金鑰紀錄,可以限制使用者登入時只能使用唯讀模式執行 tmux :

# For DEMO with tmux
command="tmux attach -t demo -r" ecdsa-sha2-...

All Together!

有了以上的思路,該做什麼就很清楚了:

  1. 在遠端主機上建立一個名為 “demo” 的 tmux session
  2. 在遠端主機上建立一對金鑰。撰寫金鑰紀錄時,只允許該金鑰的使用者用唯讀模式執行 tmux 來連接到 demo
  3. 把私鑰給學員,讓他們用該私鑰登入主機。如此即可自動進入 tmux ,觀察到我的命令行操作

步驟很簡單,實作也相當容易:

# 登入遠端主機,假設我們名叫 teacher ,主機位於 1.1.1.1
ssh [email protected]

# 在 tmux 中建立名為 "demo" 的 session
tmux new -s demo -d

# 在 ~/.ssh 中,建立基於橢圓曲線的公私鑰,取名叫 tmux-to-demo
ssh-keygen -t ecdsa -f ~/.ssh/tmux-to-demo

# 在 authorized_key 中,用剛剛產生的公鑰新增一筆紀錄
# 限制該金鑰的使用者登入時,僅能以唯讀模式執行 tmux
<<RECORD cat >>~/.ssh/authorized_keys
command="tmux attach -t demo -r" $(cat ~/.ssh/tmux-to-demo.pub) 
RECORD

# 寄信給學員,附上私鑰作為附件,並告知使用步驟
mutt [email protected] \
    -s 'Join our demo' \
    -a ~/.ssh/tmux-to-demo \
<<MAIL 
Please download the attachment, and apply the following command to visit our demo today:
ssh -i tmux-to-demo [email protected]
MAIL

至此,整個分享的步驟就完成了。

後話

當然,在與會者全是陌生人的場合,我們就無法像上面一樣一一寄信給他們了。 這時我們可以把私鑰和 SSH 指令包在一個腳本中, 讓大家在網路上取得腳本並在 shell 中執行。

腳本可以這樣撰寫:

# 取得私鑰的暫存路徑
IDENTITY_FILE=$(mktemp)

# 連線結束後,刪除私鑰
trap "rm $IDENTITY_FILE" EXIT

# 將私鑰寫入暫存路徑中
<<KEY cat >$IDENTITY_FILE  
-----BEGIN OPENSSH PRIVATE KEY-----
...
...
...
-----END OPENSSH PRIVATE KEY-----
KEY

# 用私鑰執行 SSH 連線,並把使用者目前 shell 所連接的 tty 作為標準輸入
</proc/$PPID/fd/0 ssh -i $IDENTITY_FILE \
  -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null \
  [email protected]

然後要求學員們執行以下指令,用 shell 執行該腳本即可:

curl https://host/path/to/your/script | sh

當然,以上步驟我是有實驗過的。 執行本站提供的腳本: http://demo.topo.tw 後,可以隨時登入我的 VPS ,進入 tmux 中名為 “demo” 的 session。 讀者可以實際用以下指令執行看看。當然,在唯讀模式下您是無法進行任何操作的:

# 我的 tmux 設定中, <prefix> 鍵被設定為 <C-G> (Ctrl + G)
# 因此,退出時請按 <C-G> 再按 D
curl demo.topo.tw | sh

  1. 實際上 tmux 可以指定 Socket file 並讓有讀取權限的使用者進入到相關聯的 session 。不過這個方法除了設定權限外,學員仍須登入遠端主機的其它使用者帳號。 ↩︎

  2. Restricted Shell (rsh) 可以限制使用者切換目錄和改變環境變數 PATH 。因此在 /etc/passwd 中將它設定為 login shell ,並把使用者的 PATH 變數設定改掉,該使用者能夠執行的指令將大大減少。 ↩︎

為 Mutt 加上側邊欄

去年因為某 YouTuber 的慫恿,我便開始學習在 VPS 上自架郵件伺服器,並用自己的域名來收信。 從以前就一直在用的 Gmail 信箱雖然沒有停用,不過目前我在網路上新註冊的服務都是使用[email protected]格式的信箱來收發信件。

身為 tig 的重度用戶,在終端中用鍵盤操作一行行 record 已經成為習慣了。當初就想:「不如收發信件也比照辦理吧!」。 透過 IMAP 協定,在 PC 上我通常使用 Mutt 這個 TUI 軟體來收發信件。 雖然整個流程建立好了,但 Mutt 的預設介面始終沒有像網頁版的 Gmail 一樣稱手。 導致收信時一直都覺很麻煩,連帶影響打開它收信的意願。

前幾天想想不能再這樣下去了,於是開始翻找手冊改進 muttrc 。 讀了一會後,才想到原來是少了側邊欄啊! 難怪在切換不同郵箱時都覺得非常不便利。


開始抄作業

使用 Arch Linux 預設的 pacman 安裝 Mutt 後,有關側邊欄的設定建議可以在
/usr/share/doc/mutt/samples/sample.muttrc-sidebar 中找到。 有了這份指引,要弄出一份堪用的設定就簡單多啦!

經過一番摸索,我的 muttrc 裡面,有關側邊欄的設定如下:

# 打開sidebar
set sidebar_visible = yes

# 選定要追蹤的郵箱,'+'號開頭的字串就被用作分隔線啦
mailboxes =INBOX =mbox "+---------- Watch ----------" =pay =osm =keep "+-------- Processed --------" =Sent =Trash =Drafts

# 讓Mutt取得未讀郵件和總郵件數量
set mail_check_stats

# 郵箱的顯示格式,直接照抄sample文件即可
set sidebar_format = '%B%?F? [%F]?%* %?N?%N/?%S'
set sidebar_short_path = yes

# 綁定快捷鍵,用來切換側邊欄顯示,並選擇郵箱
bind index,pager B sidebar-toggle-visible
bind index,pager \Cp sidebar-prev
bind index,pager \Cn sidebar-next
bind index,pager \Co sidebar-open
bind index,pager <F5> sidebar-prev-new
bind index,pager <F6> sidebar-next-new

# 其它顏色設定
color indicator cyan black
color sidebar_highlight white color8
color sidebar_divider color8 black
color sidebar_flagged red black
color sidebar_new green black

成果如下:

可以看到,若郵箱中含有 important 這類 flag 的郵件,在側邊欄中還會順道標示數量,實用度大增。

接下來嘛,就是養成在 Mutt 收發郵件的習慣。 一邊使用一邊讀手冊,慢慢把 muttrc 改進囉! 我的整份 muttrc 放在 Github , 其中還修改了不少預設的快捷鍵以配合我過去使用 Gmail 的習慣。

[翻譯] 如何瓦解俄軍的戰鬥力?

引子

本文作者 Kamil Galeev 是美國威爾遜研究中心的研究員, 目前為居住在華盛頓的獨立研究者及記者。

近期他在推特上常用長串來探討俄羅斯現況,並對每個長串進行編號, 本文是針對第29號長串的翻譯,並沒有經過任何修剪

下文是針對該推特長串的Google翻譯加上我自己的一些潤飾,文長注意


譯文

如何瓦解俄軍的戰鬥力?這邊有幾個可以入手的方向:人口、經濟和體制。

讓我們從人口統計學開始。俄羅斯雖然主動挑起了這場戰爭,但它其實缺乏可徵兵的年輕男性🧵

這是一個被嚴重低估的事實。

許多人認為,不斷增長的人口(例如非洲、中東)帶來的人口壓力增加了戰爭/革命的風險。 但俄羅斯沒有這種壓力。 將其人口金字塔與敘利亞進行比較:俄羅斯的人口正在迅速減少, 它正邁向高齡化國家。

事實上,俄烏戰爭可能是兩個「人口迅速減少的國家」之間的第一次重大戰爭。 出於這個原因,它不能直接與兩伊戰爭或其他相對較大但年輕的大國之間的常規戰爭相提並論。

俄羅斯、烏克蘭都老了。那裡的年輕人很少

俄羅斯在這場戰爭中的表現將會和以往不同。 是的,在二戰之前,俄羅斯一直在打真正的戰爭,但那時的俄羅斯還年輕。 它在1927 年的人口金字塔看起來更像敘利亞,而不是現代的俄羅斯。

今天俄羅斯的平均年齡為 40 歲。在以大家庭為主並且沒有計劃生育的1914年代則是16歲。 俄羅斯曾是一個年輕的國家,就像今天的黑非洲(撒哈拉以南非洲)一樣。 這種人口壓力可能解釋了 1917-1921 年的過度革命和內戰

在革命之前,節育措施幾乎不為人知,幾乎所有的俄羅斯人口都是農村人口,人人都是自給自足的農民,他們的家庭往往很大。 因此,俄羅斯的君主們可以利用大量的年輕人來實現他們的帝國夢。

二十世紀結束了這一點。大清洗和二戰造成的死亡人數是毀滅性的。 看看這張 1940 年代後期公共舞池的照片。 女孩們一起跳舞,因為男孩們已經死了。 1941 年代的高中生年齡層中,到戰爭結束時只有 3% 的男生還活著。

更重要的因素是工業化和城市化。 在1900 年代,大多數人是住在自己房子裡的自耕農。到了 1960 年代,大家則成為了住在城市小公寓裡的受薪階級。 一個家庭中雙親都必須工作,加上節育措施,生育率急劇下降。

那些「歌頌無敵的俄羅斯將永遠勝利」的信徒就是看漏了這一點。 當時的俄羅斯是一個有著敘利亞式人口金字塔的國家,並可以將足夠多的年輕男性犧牲在無休止的衝突中。

在那時,年輕人不是戰爭的瓶頸。 不過現在已經是了。

這多少解釋了為什麼普京以如此少的軍隊攻擊烏克蘭並且沒有立即開始動員- 從一開始就沒有那麼多男性可以動員。 與此同時,烏克蘭發布的被俘士兵影片將對普京的春季徵兵造成很大影響。

現在誰在普京的軍隊中戰鬥? 嗯,這很容易回答。 俄羅斯軍隊中的普通士兵不外乎就是志願役,或是以前有簽下去的退伍人士。 他們是來自小城鎮的年輕人,通常是弱勢群體。 更富有、更有特權的人會避開徵兵。

我曾在一所莫斯科不錯的學校中待過,幾乎每個人都在逃避兵役。 那些被入伍的人被認為很不走運或不那麼聰明。 (譯者註: 2021年為止,俄羅斯兵役制度為義務役,為時一年)

沒有人會尊重那些參軍的人。 徵兵是一場不幸,一個嚴重的意外,你應該盡力避免。

入伍的人通常來自貧困家庭或小村莊。因為更富有/更聰明/受過教育的人會逃避它。 然後這些不知道自己權利的入伍新兵將被說服、施壓或是被迫簽訂合同,成為контрактники (私人軍事公司)的職業軍人

所以在社會結構的層面,俄羅斯軍隊是由來自窮鄉僻壤的窮人組成的。 他們的招募是通過純粹的武力(призывники)或通過某種武力和說服力的結合(контрактники)進行的。 有時他們只是強迫剛入伍的菜鳥簽下去。

更有趣的事體現在種族層面上。 隨著俄羅斯族人口的迅速減少,少數族裔提供了不成比例的年輕男性。 而且我不是在談論卡德羅夫的部隊。

車臣是卡德羅夫的私人王國,它僅僅是與俄羅斯結盟。 它不是俄羅斯不可分割的一部分,它的部隊也同樣不是俄羅斯軍隊的一部分。

車臣的入伍士兵不會加入俄羅斯軍隊,他們去的是由卡德羅夫領導並僅效忠於他的「車臣軍團」。

再一次 - 我們可以為卡德羅夫的部隊套上任何狗屎混帳的官僚標籤 - 「軍隊」、「警察」、「FSB」等。 雖然它被歸類為俄羅斯常規軍力的一部分,但裡面的士兵只服從他們的軍閥。 我在以下的討論串中有更詳細的描述:
https://twitter.com/kamilkazani/status/1497612331953577991

我這邊說的是俄羅斯常規部隊。車臣的入伍新兵前往的是「駐紮在車臣的俄羅斯軍團」= 卡德羅夫的私人軍隊。 而達吉斯坦、印古什、卡巴爾達和其他少數族裔的加入的則是俄羅斯正規軍,以及其它各種延伸組織。

來看一下這份出自羅斯托夫州醫院(=在烏克蘭受傷)的俄羅斯傷兵的名單。 達吉斯坦人的名字約佔名單的一半。 俄羅斯軍隊正在迅速成為少數民族軍隊

此外,我現在收到很多來自中亞人的信息,當局試圖說服/強迫他們參軍。 這並不是出於意識形態。 在一個人口迅速減少的國家,為了繼續戰爭你別無選擇,俄羅斯只能選擇招募目前在國內的移民。

讓我們總結一下。 過去,俄羅斯發動了大規模的大陸戰爭,並不惜一切代價打贏。 在當時它付得起這些代價, 因為在一個擁有龐大農民人口和過剩的年輕人的國家,他們很容易為了帝國的宏偉藍圖而犧牲這些年輕人。

現在俄羅斯是一個低生育率的人口減少國家,而且還不小心引發了一場大戰。 它沒有妥善計劃一場戰爭,而是幻想一個美好而輕鬆的佔領行動。 俄羅斯在戰爭初期的大部分損失,都是因為部隊大意進入城市並立即被痛擊而來的。

與俄羅斯之前發動的任何重大戰爭不同,現在它將不得不面對年輕人短缺的問題。 年輕男性現在是一個主要的瓶頸。這就是為什麼俄羅斯正規軍會比 16 世紀以來的任何一個時代都缺少兵源。 這是一支由少數民族和貧困省份的窮人所組成的軍隊。

因此我在此建議。打開人道走廊。

許多俄羅斯士兵會積極尋找出路,但他們不會想進去烏克蘭監獄СИЗО - 如果他們就這樣投降,這種情況就會發生。 所以,我們可以提供一個通道,通往不那麼富裕但溫暖的鄰近國家。

土耳其、埃及等地的旅遊業正因俄羅斯遊客的缺乏而受苦。 因此:

  1. 租些便宜的旅舍或旅館,隨便什麼都好
  2. 把投降的士兵送到那邊直到戰爭結束。 給他們床+食物
  3. 照幾張相,在 Telegram 上散布

這將會對軍隊士氣產生非常大的影響,而很多人可能對此低估了。 人類在特定情境下會做出的行為往往比我們以為的更直觀。 俄羅斯士兵在博羅金諾戰役拋頭顱灑熱血,但他們在法國卻集體逃走。 僅僅是因為他們有了出路。

(譯者註: 博羅金諾之戰是拿破崙對俄戰爭中最大和最血腥的單日戰鬥,

我們非常高估了人類(和我們自己)的「完整性」和「一致性」。 事實上,我們的行為非常仰賴於自身所處的情況。 我們做我們喜歡(並且可以做)的事,然後編造理由聲稱這些行為為什麼是正確的,唯一的限制僅僅是我們的口頭表達能力。

請注意!我上面為俄軍士兵提供的出路當然不是什麼的最佳選擇。

這條出路並不需要明確到讓士兵們清楚地了解下一步該怎麼做以及其他不相關的狗屎爛蛋蠢事。這些士兵們面臨的情況正是如此。

雖然這條出路並不完美,但它必須被擺在那邊,並且士兵們應該都要知道有這個選項。

此外,除了提供床鋪和食物,還要給他們現金以銷毀軍事裝備並記錄下來。

例如:把錯誤的油加到卡車上讓引擊再也發不動? 獎賞他2千塊錢。 若有人真的這麼幹,只要2%的合作者就足以對俄軍的戰鬥力造成巨大傷害。

我們同時也低估了有多少社會機制僅僅因為相互信任才能起作用。 只是因為幾乎沒有人會為了自己的利益而試圖破壞他們。

2%的破壞者非常非常多,他們可以造成巨大的破壞。 設備被毀,信任也同時被毀掉。

當然你可以把錢投入到購買武器以摧毀俄羅斯軍隊。這樣當然可行。 但是付錢給俄羅斯士兵摧毀自己的軍隊更具成本效益。 他們知道該怎麼做,而且他們很窮,更看重金錢。 此外,他們中的許多人的很不願意配合軍隊。

額外的好處是:如果俄羅斯軍隊中開小差的情況增加,俄羅斯的指揮官將更不願意向烏克蘭派遣任何士氣低落(=幾乎所有)的部隊。 如果他們知道大量低素質的士兵有害於軍隊,他們就會更加努力地審查他們並減少招募的數量。

許多人妄想俄羅斯有一支自豪、士氣高昂和非常受人尊敬的軍隊。 這並不正確。 根本沒有人尊重俄羅斯軍隊。

看看這位電視主持人是如何對一位建議為「我們在烏克蘭的男孩」默哀一分鐘的老兵大喊大叫的。

在下面的推特討論串中,你可以更詳細地了解到的俄羅斯軍隊與黑手黨敲詐敘利亞退伍軍人與核彈基地的故事,入伍新兵者在這裡被迫從事同性戀賣淫:

https://twitter.com/kamilkazani/status/1502673952572854278

如果你為俄羅斯的降兵提供安置到其它國家的機會,給他們床鋪、食物,並為已證實的破壞活動買單,俄羅斯的戰鬥力將大大惡化。

我們需要盡快完成這些行動,這將對大大降低俄羅斯的戰鬥力,人力是他們的主要瓶頸。本串結束🧵

[翻譯] 俄國在烏克蘭的軍事傷亡與它的末路

引子

本文作者 Kamil Galeev 是美國威爾遜研究中心的研究員, 目前為居住在華盛頓的獨立研究者及記者。

近期他在推特上常用長串來探討俄羅斯現況,並對每個長串進行編號, 本文是針對第32號長串的翻譯,並沒有經過任何修剪

PTT版友dennis99與jimmy5680之前分享過不少Kmail的長串摘要,以下表列:

下文是針對該推特長串的Google翻譯加上我自己的一些潤飾,文長注意


譯文

TL;DR
俄羅斯在烏克蘭遭受了巨大的傷亡,不僅在軍隊中,而且在國家安全方面也是。它造成的大屠殺將終結我們所知道的俄羅斯。

讓我們看看目前被擊殺的俄羅斯將領名單:

  • 蘇霍維茨基少將
  • 格拉西莫夫少將
  • 科列斯尼科夫少將
  • 米佳耶夫少將
  • 莫爾維切夫中將
  • 圖沙耶夫少將(車臣)

若是不算車臣將軍圖沙耶夫(他是卡德羅夫私人軍隊的一名軍官),莫爾維切夫是迄今為止被擊殺的俄羅斯將領中,軍階最高的。 他是南部軍區(烏克蘭邊界附近)的第8近衛軍指揮官。

最近,俄羅斯軍事組織在社交媒體的貼文看起來像是一個永無止境的訃文。看看這份俄羅斯VDV空降師的陣亡清單:

一個上尉、一個中校、一個中尉、一個少將都陣亡了。 請注意,他們只列出軍官,而且僅僅是級別較高的。

讓我們看看這些貼文評論。一個空降團的副指揮官被打死。Z頭像的帳號評論道:

「我的天啊 😭😭 他們是不是要把我們半個師團都送進棺材裡?每天我們都會看到331團的壞消息。在此向他們家人和朋友表示慰問🙏。願他們被銘記並且榮耀長存。」

請看一下用Z作為頭像的帳號:它的作者完全支持Z行動。 然而,她對傷亡的規模感到震驚。

顯然,即使對於支援Z符號的民眾(Z-folk)來說,源源不斷來自烏克蘭的棺材看起來也著實令人沮喪。

這就是為什麼載有俄羅斯士兵屍體的卡車通常只在晚上出現的原因。

考慮到這一切都發生在一個人口迅速減少且日漸衰老的國家。俄羅斯很少有年輕人可以被送到烏克蘭作戰。

俄羅斯現在就是一個用養老金維生的國家,它的法西斯主義就是領養老金的人所支持的法西斯主義。

特別是頭巾(babushka)法西斯主義-因為在俄羅斯並沒有太多祖父輩的男性。(babushk是俄羅斯年邁女性所穿戴的頭巾)

他們正急切地試圖引誘任何人加入軍隊。這些是Avito上的列表。Avito 是一個分類廣告網站,有點像美國的Craigslist。

在那裡你可以找到工作、房地產、汽車以及任何產品、服務等。他們正在利用各種渠道來加快軍隊招募。

有些廣告根本是把人當白痴!一個招募站正在邀請民眾加入「後備單位」。 應徵者只有在軍隊動員時才能領到薪水:

軍官-最多3天10,000盧布,中士和士兵-最多5,000 盧布。

那些真的去應聘的白痴將被送往烏克蘭作戰。

在30天的動員中,他們向軍官提供30,000-75,000盧布。戰前是500-1000 美元。士官和士兵則是150-400美元。

「俄羅斯軍隊正在引誘身無分文的人加入軍隊,並支付可有可無的少量薪水。」

這很重要,該我們先記住這一點。

還有未經證實的消息稱,俄羅斯將從Юнармия - 也就是所謂的青年軍中,向烏克蘭派遣青少年。

那是一個愛國的準軍事組織。我無法確認這則消息的真偽,但隨著戰況的惡化,就算是非法手段,他們也可能會動員這些未成年者。

Z-war嚴重依賴少數族裔。這是可以理解的。

首先,沒有那麼多年輕的俄羅斯男性可以動員,因此俄羅斯需要從生育率較高的少數民族這邊下手。

其次,富人會逃避招募,所以相對上就只有窮人會加入軍隊。 在下方照片中,你可以看到在烏克蘭被擊斃的西伯利亞住民。

北高加索人的參與度甚至更高。達吉斯坦共和國的這家咖啡館免費為Z士兵的家庭提供食物。

據報導,達吉斯坦人口為29,868人的薩米爾克斯區派出500人前往烏克蘭作戰。 包含了士兵、警察、國民警衛隊等等。

這很諷刺。

俄羅斯民族主義在烏克蘭的擴張,嚴重依賴於(從俄羅斯的角度來看)那些不被平等視為人類的族裔。

他們被稱為хачи、чурки、обезьяны(猿),但他們為Z-war提供了大量兵源。

我們必須將車臣和高加索其他地區區分開來。

達吉斯坦共和國或印古什共和國和其他族裔一樣在俄羅斯軍隊服役。 在軍事方面,他們是常規的陣容。

但車臣是卡德羅夫的王國,車臣軍隊、警察、FSB 等都是他的私人軍隊。 看看這個影片,感受一下氣氛:

看看卡德羅夫在烏克蘭的部隊,你可以看到他們是多麼的乾淨,多麼的精力充沛(fresh),一點也不疲累。

他們背負著沉重的裝備。為什麼? 因為他們是試圖逃避戰鬥的恐怖分子和公關部隊。

他們是警察,只擅長折磨人民,控制群眾,而不是與常規部隊戰鬥。

將這些卡德羅夫的爪牙與第一次車臣戰爭的聖戰士們進行比較,你可以清楚地看到差別。

真正打仗的男人盡量著輕便服裝,減輕負擔和裝備。他們在戰鬥中也很髒,不像卡德羅夫用來炫耀的金光閃閃的部隊。

斯特列爾科夫(Strelkov,前任頓涅茨克人民共和國國防部長)也證實了這一點:

「在馬里烏波爾,車臣人沒有參加戰鬥。為什麼?」

  • 車臣人對我們的指揮官來說太嬌弱了
  • 總有人要為勝利照片擺Pose。 車臣人看起來精力充沛,陽剛,雄糾糾器昂昂,看起來非常上相。
  • 指揮官擔心卡德羅夫對車臣軍隊的傷亡感到憤怒

卡德羅夫的部隊不是為了戰鬥。 他們寧願不漟這趟混水。 他們來這裡是為了控制佔領區,做公關形象和折磨人民。

看看這段視頻,卡德羅夫的士兵如何讓被俘的烏克蘭人喊“Ахмат - сила”(艾哈邁德萬歲)。艾哈邁德 - 是卡德羅夫父親的名字

這些傷亡將如何影響俄羅斯社會?

好吧,俄羅斯法西斯主義是養老金、頭巾(年邁女性)法西斯主義。

媒體們正在哭訴制裁將如何傷害這些可憐的阿嬤,而忘記了他們正是普京的主要選民。 這個年齡層的群眾最熱情地支持Z符號。

看看這支支持Z-入侵行動的影片。 它由一個名為「普京的部隊」的組織 - отряды Путина 發布。

它讓您對普京的選民組成有一個很好的了解。 人們把俄羅斯想像成一頭「熊」,強硬、堅定、野獸般的力量。

實際上,俄羅斯就像是一個瘋狂的好戰阿嬤。

然而這導致了一個問題。首先,支持Z符號的大部分選民大部分由上述中瘋狂好戰的阿嬤組成。但上戰場和承受死亡風險的並不是他們。

相比之下,年輕人的熱情要低得多。將下面影片中,這種反戰並上街抗議的年齡層與「普京軍隊」的年齡層形成鮮明對比。

還有一個問題。 看看在弗拉迪米爾(弗拉迪米爾州首府)的這場葬禮。

他們正在為該區 SOBR 的整個領導層-四位中校-送葬。

SOBR是國民警衛隊中處理有組織犯罪的一個組織。 他們在烏克蘭被狠狠地痛宰。

這可能是這場戰爭的巨大副作用。烏克蘭戰爭可能會為Siloviki問題提供最終解決方案。

Siloviki是警察、國家安全組織、智庫和其他準軍事人員。 這群「新貴族」是普京權力的真正來源

問問我們自己,為什麼這些菁英們要服從普京? 為什麼在地的男爵們要服從朝廷?

好吧,因為如果他們不服從的話,普京就會「派遣一名醫生」。

在下圖中,莫斯科的siloviki正在逮捕哈巴羅夫斯克的州長 Furgal,因為他沒有幫助普京偽造有利的選舉結果。

俄羅斯是一個幅員遼闊且非常不平等的國家。不同地區的社經條件以及其他指標差異很大。

普京強制所有人服從,但用的是殘酷的暴力手段。

俄羅斯的siloviki就像他派遣至各個領地的男爵,用意是要讓全國服從克里姆林宮。

普京的恐怖統治很大程度上是出於客觀上的限制。

在這裡,您可以看到俄羅斯分為三個區域,紅色、藍色和白色,人口幾乎相等 - 4890 萬。

這意味著西伯利亞的主要經濟區離俄羅斯人口中心非常遙遠

這就是為什麼普京不得不如此依賴純粹的武力。

在像俄羅斯這樣的國家,朝廷不得不使用大量武力來控制貴族,沒有其他辦法。

這些siloviki就是克里姆林宮的主要工具:就像朝廷用來控制貴族的主要武器。

然後事實就很明顯了,再看看這場葬禮。

這不是俄羅斯士兵的葬禮,也不是 SOBR 領導層的葬禮。這是普京政權和我們所知的俄羅斯的葬禮。

很快,男爵們就沒有理由服從中央的恐怖統治。 菁英之間的權力平衡將被重新洗牌。

本串結束


PS
這則有關「普京軍隊」的影片沒有上傳。 所以我現在就放上來。 這條支持Z-入侵和普京的影片很好地呈現了普京的選民基礎。

俄羅斯的好戰份子不是年輕人的逞兇鬥狠,而是老年人的精神錯亂。

[我的工作環境] 重覆使用的個人設定

身為工程師,使用不同機器進行各項任務是再常見不過的事。
在 Unix 系統上,設定檔案或目錄通常會以.開頭,例如~/.config/, .config 在 Github 上經常可以見到名為 dotfiles 的 Repo ,指的就是這些設定檔。

[翻譯] 有關俄羅斯國內的現況

引子

本文作者 Kamil Galeev 是美國威爾遜研究中心的研究員, (威爾遜研究中心的維基) 目前為居住在華盛頓的獨立研究者及記者。

他在推特的一系列長文中, 很大程度上解釋了俄羅斯入侵烏克蘭的相關背景以及基層現況。

好讀版
https://threadreaderapp.com/thread/1500495309595725831.html

原推
https://twitter.com/kamilkazani/status/1500495309595725831

以下是Google翻譯加上我自己的一些潤飾,文長注意

  • PS
    作者本人的blog也有另一篇文章探討俄國領土為何這麼大,圖文並茂,有興趣的讀者可以一併參考看看:
    https://kamilkazani2.substack.com/p/how-did-russia-get-so-big

  • PS
    本文原發布於PTT軍武版,因軍武點不足被版主退回,故轉而發布到本站。 下方保留原軍武版的留言。 因為退文關係我無法轉發到八卦版,若讀者有空,請幫忙轉發到八卦版上,非常感謝!


譯文

讓我們討論一下俄羅斯正在發生的事情。簡而言之,它正在走向完全的法西斯主義。

當局發起了一場宣傳運動,為他們入侵烏克蘭贏得民眾支持,而且他們得到了不少響應。

你可以在照片中民眾的衣服上看到“Z”。這是什麼意思?

“Z”是俄羅斯軍方在前往烏克蘭的車輛上放置的字母。

有些人將“Z”解釋為“Za pobedy”(代表勝利)。或者作為“Zapad”(西方)。

不管怎樣,這個幾天前才剛發明的符號成為了俄羅斯新意識形態和民族認同的象徵

使用Z符號的支持者並不少。許多俄羅斯人在他們的汽車上加上Z字

這完全是自願的,據我所知,沒有人強迫他們

企業家們會用Z字表示他們對入侵的支持。在這裡,您甚至會看到靈車上漆有Z字

俄羅斯軍方也用被陣亡的烏克蘭士兵的遺物來排列成Z字

在這裡,您可以看到在臨終關懷機關中,身患絕症的孩子和他們的父母排成Z字。 是的,俄羅斯人正在強迫死於癌症的絕症兒童及其家人宣布支持俄羅斯入侵烏克蘭。

看到字母 Детский хоспис 了嗎? 那是兒童臨終關懷的意思

當然,這一切都是以俄羅斯東正教的名義進行的。

砲擊住宅區、地毯式轟炸、向烏克蘭城市發射彈道導彈等行為,都是以宗教之名

當然會有人爭辯說,俄羅斯人民不支持這次入侵,這都是普京的責任。

是的,普京做出了決定,即使是他的部長們也感到驚訝。

但入侵一旦開始,它就獲得了巨大的民眾支持。人們歡呼,自豪且熱情

支持入侵的俄羅斯媒體和社交媒體賬戶經常在他們的名字或標誌中加上 Z。下圖就是一個例子:

Telegram 中的這些Z頻道和Z機器人為俄羅斯情報部門做了很多工作。

例如下圖中,通過這個機器人"RSOTM_Z_BOT",可以向俄羅斯人報告烏克蘭軍隊的位置和行動。這就是俄羅斯人收集信息的方式

俄羅斯人通過 Telegram 收集有關烏克蘭軍隊、領土防禦部隊的信息。

一旦俄羅斯人接管他們的城鎮(下圖個人信息經模糊化處理),“people’s levy” (=親俄羅斯合作者)將使用它們來殺死烏克蘭愛國者及其家人。

俄羅斯情報渠道、團體、機器人組成了整個生態系統。一些收集有關烏克蘭軍隊運動的數據,另一些收集烏克蘭戰士的個人信息,以便稍後殺死他們。

我在這裡做了一個非常非常不完整的“Z清單”。實際上,還有更多是沒法掌握到的:

Pavel Durov @durov(Telegram的擁有者) 長期以來一直與俄羅斯國家安全部門合作。

在管理 VK(俄羅斯最大社群網站)時,他會提供反對 FSB 的個人信息。他現在可能正在幫助俄羅斯。

給他壓力。他現在是居住在杜拜的法國 + 聖基茨島和尼維斯公民

雖然是普京決定發動這場戰爭。但他得到了俄羅斯人民的廣泛支持。

沒有人強迫他們參加這些表示支持的節目,他們完全可以跳過它。但他們為此歡呼。

他們歡呼,是因為他們感覺良好,他們感到自豪。認為俄羅斯將再次偉大

俄羅斯社交媒體也在歡呼。在這裡你可以看到一段短影片:

烏克蘭城市被轟炸、烏克蘭人被俄羅斯砲彈炸死的錄音,混合教堂佈道時唱著詛咒的聲音。

俄羅斯正在發動新一輪的東正教十字軍以屠殺烏克蘭人

即使在不同的年齡層也充斥著相同的信息。俄羅斯小朋友唱著有關上帝如何支持俄羅斯清洗烏克蘭的歌詞

國外的俄羅斯族人也在歡呼。在這裡,哈薩克斯坦的俄羅斯人將Z字放在他們的汽車上,而俄羅斯的彈道導彈將烏克蘭的住宅區夷為平地。

當面對哈薩克人時,大家當然會有所謂的俄羅斯恐懼症

與此同時,俄羅斯人正在烏克蘭全面推行敘利亞模式的戰爭。

下面的影片就是烏克蘭城市切爾尼戈夫被俄羅斯轟炸機襲擊後的樣子。

住宅與所有住在那裡的人一起被燒毀。廢墟和屍體躺在曾經的城市街道上

這不足為奇。在這裡你可以看到一名俄羅斯少校,一名轟炸機飛行員,他的戰機被擊中並被烏克蘭軍方俘虜

在下方照片中,您可以看到他與普京和巴沙爾·阿薩德在敘利亞。

在敘利亞作戰的同一支俄羅斯軍隊現在在烏克蘭作戰,並使用相同的方法進行不分青紅皂白的地毯式轟炸。

阿勒頗發生的事情現在正在切爾尼戈夫發生

幸運的是,雖然敘利亞人面對俄羅斯戰機毫無還手之力,但烏克蘭人有一些防空系統。

在下面的影片中,你看到一架俄羅斯戰機被擊落,飛行員被迫彈射逃生

幸運的是,俄羅斯的戰爭計劃失敗了。

這是 2 月中旬的俄羅斯meme - 一張有關傘兵行程表:

  • 08:00 早餐
  • 09:00 入侵烏克蘭
  • 12:00 午餐
  • 13:00 攻占基輔
  • 18:00 音樂會

榮耀歸於普京

這當然是一個meme,但它反映了一個錯誤期待:「烏克蘭人不會挺身戰鬥」

這份錯誤期待原本得到了西方各地各種俄羅斯合作者的認同:

「烏克蘭是個假國家,是俄羅斯的一個省,當俄羅斯軍隊第一次進入他們的國家時,它的人民當然會直接跪下投降」

普京也有同樣的錯誤期待,這就是他派出傘兵的原因。

這些「傳奇」的 VDV Guy 不是士兵,他們是俄國的防暴警察。國家提倡和支持的惡霸。

這個組織的核心概念就是武裝自己,讓成員們看起來很恐怖和暴力,這樣人們就不會反抗了

令他們驚訝的是,烏克蘭人確實開火了。

這就是在基輔附近的霍斯托梅爾機場下機的俄羅斯空降人員的遺體。

他們的整個計劃是烏克蘭人要麼逃跑,要麼投降。但他們反擊了

在烏克蘭反擊之後,俄羅斯人不得不開始動員起來。

在下圖,您會看到一名烏克蘭士兵穿著一件從俄羅斯入侵者手中奪走的СОБР(SOBR)T 恤。

它經常被誤解為一些「精英特種兵」的襯衫。不過, СОБР 不是士兵,他們是警察

СОБР 是俄羅斯國民警衛隊的一部分,旨在打擊「有組織的犯罪」(並鎮壓抗議活動)。

他們是武裝警察,旨在與手無寸鐵或武裝不足且組織混亂的對手作戰。

他們不應該與正規軍進行真正的戰爭。

為什麼俄羅斯要派警察到烏克蘭?嗯,人不多了。

入侵的第一梯隊不知道他們要去哪裡以及為什麼。

許多人認為烏克蘭人只要投降,他們就會有一個愉快的國外假期。

他們想像的戰爭就像下圖這樣:

但是一旦他們意識到會有抵抗,戰爭看起來是下面影片這樣的,他們的士氣就開始下降。

這意味著要找到新的志願者去烏克蘭作戰將變得更加困難。但更多的兵源是必須的,所以怎麼辦呢?

好吧,俄羅斯的宣傳給出了答案。他們正在拍攝影片,並解釋說他們不會發動動員並強行徵兵。

他們給出了很多理由來說服大家為什麼不需要動員。這意味著 他 們 絕 對 他 媽 的 會 !。他們已經在準備了

這是莫斯科一位青少年職業學校校長收到的命令。

她需要收集所有男學生的信息,包括他們的家庭住址和他們註冊的軍需處(徵兵站)的名稱。

如果他們沒有註冊徵兵,則需要向當局解釋原因

俄羅斯準備大規模動員青少年將他們送往烏克蘭。

不過也有問題。首先,即使在和平時期,青少年也打算躲避徵召。

其次,俄羅斯沒有那麼多青少年。該國人口迅速減少,尤其是其俄羅斯民族中心地帶

那你要做什麼?一是動員中亞人。許多移民合法地或通過不正當的計劃獲得了俄羅斯公民身份。

現在當局試圖說服/迫使他們加入軍隊。他們不太了解俄羅斯法律,甚至可能不了解自己的權利

大多數中亞移民沒有俄羅斯公民身份,這造成了法律問題。

從技術上講,他們不允許在俄羅斯軍隊服役。

所以他們通過提供俄羅斯護照欺騙他們加入頓涅茨克和盧甘斯克人民共和國的軍隊

但俄羅斯不是有人口普查嗎?。考慮一下普京最近的一次演講:

「我是俄羅斯人,我家裡只有伊萬斯瑪麗亞。 但當我聽到這場戰爭的英雄事蹟時,我想說, 我是達吉斯坦人,我是車臣人,我是印古什人、韃靼人、猶太人, 摩爾多瓦人」

普京是突然轉性了嗎?

沒有。如果您查看俄羅斯的人口統計圖,那是完全有道理的。他告訴大家

  1. 我是達吉斯坦人 2) 我是車臣人 3) 我是印古什人。

看看他們在哪裡? 這些地區通通被包圍了。

這是一個自然生育率高的地區,因此有大量年輕男性可以參加戰爭

普京表現出真正的企業家思維和創業心態。

如果他能在高加索找到人口資源,他就會引誘、策劃、說服他們打他的戰爭,並會使用任何必要的宣傳手段。

即使這違背了他的真實信念——俄羅斯民族主義

車臣在普京的命令中佔有特殊的地位。這是一個擁有獨立軍隊的附庸國。

你看,卡德羅夫的部隊必須向卡德羅夫宣誓效忠。

在紙面上,他們可以被徵召入「俄羅斯軍隊」,「警察」等。

Bull shit!那是卡德羅夫的私人軍隊

當車臣在與俄羅斯的戰爭中敗勢明朗時,許多前叛軍轉向普京-包括卡德羅夫。

卡德羅夫迅速取得了事業成功,安撫了車臣民眾

並以任何必要的方式任普京予取予求

卡德羅夫和他的追隨者愛國者(左)發動了恐怖統治。

許多人因不服從而被殺。許多人被隨機殺害。

愛國者會來到一個村莊,隨機選擇一些人並將他們作為恐怖分子開槍。

只是為了表明他可以並因反恐戰爭而獲獎

然而,展示卡德羅夫權威的真正關鍵其實保特瓶。

他們抓獲了車臣反卡德羅夫電報頻道的作者,強迫他坐在保特瓶上,記錄下來並在社交媒體上分發。

這打破了宗教和傳統禁忌,一切都是為了展示卡德羅夫的力量

但這是一個不歸路。卡德羅夫在其他車臣人中樹敵太多。

他們的文化迫使他們進行報復。

即使是現在,卡德羅夫也採取了很多預防措施。

他擁有護城河和城牆的巨大宮殿像普京的一樣被守衛著,他從不在其它地方睡覺

這就解釋了普京和卡德羅夫之間的特殊關係。

想想他是如何與卡德羅夫和俄羅斯將軍-紹伊古等人交談的。

他並不完全信任他的將軍,因為他們仍有反抗的可能。

但是卡德羅夫不能。他被血仇所束縛。如果普京倒下,他自己也會慢慢死去

普京和卡德羅夫之間的深厚友誼已經使他們成為中國的英雄。

事實上,在這場戰爭中,中國的“輿論” (=國家宣傳)明確地站在了俄羅斯一邊。

西方現在面臨事實上的中俄同盟,這點借庸置疑)

中國警方已經在騷擾居住在中國的烏克蘭人

。中國不想要“降級”。它想要升級,並將烏克蘭視為敵對勢力,屬於對立陣營

這是完全可以理解的。中國現在正在發起大規模的好戰宣傳。

2021年,他們製作了有史以來最昂貴的中國電影「長津湖之戰」,講述朝鮮戰爭中對美國的戰鬥

如果你看最近的中國電影,比如戰狼,你會看到中國正在為與美國的戰爭準備輿論。

中國可能不會對美國這麼說,但他們絕對是在對他們的公民這麼說。你不能自欺欺人

並且當然地,俄羅斯將把其經濟重新定位到中國。

它將以傾銷價格向中國出售其自然資源,以高價購買中國技術。

由於中國是唯一同意與俄羅斯進行貿易的主要工業大國,中國將充分利用其影響力

這個聯盟不會使俄羅斯受益。但這將允許中國以傾銷價格購買俄羅斯資源。

它還將迫使俄羅斯人使用中國技術,並加入中國生態系統。

就像俄羅斯的主要銀行已經從 Visa 和 Mastercard 轉向銀聯卡一樣

因此,中國在國際中將越來越接近與美國的地位。前提是俄羅斯政權仍然存在。

「中俄聯盟」不是不可能,不過它需要時間

這個世界上有很多事情需要時間,無論你多麼迫切需要它們。

即使讓九個女人懷孕,一個月也不能生孩子。仍然需要9個月。中俄的經濟同盟也是同樣的道理

現在大部分俄羅斯工業使用西方機器、西方技術、西方IT產品。它與西方生態系統和生產鏈融為一體。

它可能會融入中文嗎?可能的。但這需要時間,很多時間。俄羅斯有嗎?

俄羅斯在這場戰爭中表現得並不好。

首先,它最初的戰爭計劃失敗了。發布令人印象深刻的俄羅斯進軍地圖,並聲稱俄羅斯終將獲勝的那些白痴

他們忘記了戰爭不是為了軍事目標而發動的。

它們是為了政治目標而推出的。普京的政治目標是什麼?

嗯,這很清楚。推翻現有的烏克蘭權力和政治接管。

俄羅斯入侵部隊包括大量“政治派”,他們必須掌權並成為新政府,為烏克蘭即將與祖國的吞併做準備

這些政客可能是俄羅斯人,也可能是亞努科維奇政府的官員

他們在 2014 年親俄總統被推翻後離開了烏克蘭。

其中一些來自親俄的頓巴斯政府。其他人 - 只是俄羅斯民族主義者。

讓我們考慮其中之一,迪米特里耶夫

迪米特里耶夫(Igor Dimitriev)來自烏克蘭敖德薩。

2014 年,俄羅斯民族主義者試圖對烏克蘭東部和南部的大部分地區發動政治接管。

在頓巴斯,他們成功了,因為俄羅斯的入侵。

在哈爾科夫、敖德薩等地,他們被屠殺或被迫離開。

季米特里耶夫就在那時離開了烏克克前往俄羅斯

在俄羅斯,他與情報和國家安全部門合作,據報導他在敘利亞和其他戰區工作。

但他準備凱旋而歸,報仇雪恨,掌權。他等了 8 年,在他的 Telegram 頻道中不斷寫下這些內容

2022年他終於等到機會了。他帶著勝利而來,因為他認為俄羅斯軍隊,並真誠地相信當地人會像解放者一樣迎接他們。

相反,烏克蘭人開火併拒絕與俄羅斯入侵者合作。他很震驚。其他政客也感到震驚

自俄羅斯入侵以來僅過去了兩個星期,所有這些政客都已經返回俄羅斯。

為什麼?因為計劃失敗了。沒有人會以解放者的名義迎接他們

沒有人聽他們的話,烏克蘭人認為他們是叛徒。這些親俄羅斯人的烏克蘭人都錯了

這傢伙(迪米特里耶夫)特別有趣

因為他重新命名了他的telegram頻道,現在正在努力清除任何有罪的內容。

這是可以理解的,他的處境特別糟糕,因為他是公眾人物。但所有這些合作者現在都感到震驚和難以置信

許多俄羅斯政府也感到震驚。

一周前還聲稱(在私下談話中)基輔將在一兩天內被佔領的官員,現在悄悄地尋找出路。

理解這一點非常重要。普京沒有出路,但中層官員可能有

他們如此迷失,不僅因為烏克蘭人向俄羅斯舉手投降的假設是錯誤的。

他們迷失了,因為他們沒有預料到如此強大的制裁制度,現在俄羅斯經濟正面臨迫在眉睫的崩潰

俄羅斯確實有工業生產。但它沒有獨立的技術鏈。

它們與西方市場緊密結合。工廠用西方技術在西方機器上工作,使用西方 IT 等等。你不能一夜之間切換到與中國緊密合作的模式

崩潰的跡象已經顯現。位於托利亞蒂的俄羅斯最大汽車廠 Avtovaz 因“缺少電子細節”而停產。

下卡姆斯克的一家石化廠正在引人注目,因為惡性通貨膨脹摧毀了工資。通貨膨漲只會上升

老實說,所有有點聰明的俄羅斯人都明白接下來會發生什麼。

這就是為什麼俄羅斯現在面臨著普京時代最大的人才流失。總的來說,誰能離開,誰就活了。

第比利斯、埃里溫、巴庫已經被俄羅斯難民淹沒,中亞也被淹沒

在社交媒體上,他們已經註意到了諷刺意味:

俄羅斯人現在正在谷歌上搜索哈薩克斯坦的移民法、吉爾吉斯斯坦的生活、如何搬遷到烏茲別克斯坦。

這聽起來像是一切都顛倒了。一個月前,中亞人想搬到俄羅斯,現在情況正好相反

克里姆林宮也知道這項消息。

這就是為什麼就在四天前,普京降低了IT產業的 稅收,想讓他們從制裁中解脫出來。

普京知道他們害怕什麼。但老實說,這不會有幫助。俄羅斯現在面臨人力資本和最好的工程師的巨大損失

我自己知道。我的很多社交圈朋友剛搬到烏茲別克斯坦。

為什麼去烏茲別克斯坦?因為那是唯一可以廉價飛行的目的地。

查看莫斯科-第比利斯的航班價格。超過 1000 美元,而通常它要花費 100 美元。

大出走時代開始了

我的下一個主題將是俄羅斯經濟,特別關注其技術依賴和有效的制裁政策。現在我想總結一下:

  • 俄羅斯正在走向納粹

  • 政權必須被打破。如果它不被打破,中國將得到它最好和最忠誠的盟友

  • 政權絕對可以被打破,精心設計的制裁將大大是有力推手。而且已經取得不少成效:工廠停止生產,工人因為通貨膨漲而離職。俄羅斯已經面臨失敗邊緣

  • 許多中層官員非常震驚,非常害怕,非常失望(他們期望速戰速決)並拼命尋找出路。這就是必須重點關注的地方,而不是普京的出路。他們中的許多人都在積極尋找合作的方式

  • 另一個重點應該放在遷移俄羅斯僑民,特別是一些遠離俄羅斯邊境且沒有潛在入侵危險的國家的合格僑民。工程師短缺已然可見,現在這個情勢下,人才流失將暴增

目前的政權已經越過了不歸路。回到現狀既不可能也不可取。事實上,降低戰事強度(De-escalation)將有可能導革命,是一種具有威脅性的東西。民眾的生存威脅確實會大大促進了制度的變革(這邊應該是指與中國的經濟同盟)

然而,無論是制度效率的提高還是與中國的經濟同盟,都只能是漸進的。這需要時間! 不給他們時間。通過制裁、人才流失和與中層官員談判來增加壓力,就可以迅速打破它們。 結束

--  
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.110.172 (臺灣)  
※ 文章網址: https://www.ptt.cc/bbs/Military/M.1646630645.A.2BD.html  
 推  seraph01      : https://reurl.cc/mGAE3V                            03/07 13:25  
謝謝!原來有thread reader這種推特工具,我把它放到文章開頭  
 推  WTF55665566   : 不意外 完全就是二戰納稅德國的翻版                  03/07 13:27  
 推  ARCHER2234    : 讓這些未經訓練的人參戰有毛線用...                  03/07 13:28  
 推  Howard61313   : 也很好奇烏克蘭俄語區的情況,戰前俄語區只會討厭澤   03/07 13:28  
 推  Howard61313   : 倫斯基搞迫害,但開戰後不一樣了,哈爾科夫等俄語區   03/07 13:28  
 推  lukehong      : 寶特瓶那個也太羞辱人……                           03/07 13:28  
 →  Howard61313   : 城市也被俄軍炸了                                   03/07 13:29  
 推  TonyDinozzo   : 推                                                 03/07 13:29  
 推  sppray        : 俄羅斯本來就沒救了                                 03/07 13:29  
 推  frozenmoon    : 這篇有比較多實際資訊,比那些來爭論價值觀的好多了   03/07 13:30  
 推  jhana         : https://www.youtube.com/watch?v=RCeIPkBdz7c        03/07 13:30  
 推  NewCop        : 跟東正教無關吧?至少普丁演講沒怎麼提到             03/07 13:31  
 推  ARCHER2234    : 對外不要牽扯到宗教,會引起反感,對內才要           03/07 13:32  
 推  WTF55665566   : 澤倫本來就俄國語區出來的 現在支持率肯定超過六成    03/07 13:32  
 推  ypc1994       : 烏克蘭反攻到邊界真的讓莫斯科人民嚇到了             03/07 13:32  
 推  wenjie0810    : 真好意思指責別人納粹                               03/07 13:33  
 推  jabari        : 所以說 俄羅斯平民一點都不值得同情啊 他們支持著     03/07 13:33  
 推  ARCHER2234    : 畢竟整個歐美都是基督教世界,難道上帝只保佑俄國XD   03/07 13:33  
 推  payneblue     : 跟納粹德國比 那軍隊質量也差太多了                  03/07 13:33  
 →  kterry01      : 吹哨者不就說了,俄語區的人現在也只想殺俄軍         03/07 13:34  
 推  Howard61313   : 支持開戰的平民不用同情,但不支持的平民呢?         03/07 13:34  
 →  JoeyChen      : 中國警方在騷擾住在中國的烏克蘭人 wow               03/07 13:34  
 推  Y1309         : 還憐憫什麼生命,侵略國的平民都不無辜,何況是賊軍   03/07 13:35  
 推  lovegensokyo  : 寶特瓶塞屁股那張金變態…..                         03/07 13:35  
 推  jyekid        : 不支持的平民沒有或無力阻止而被集體貼標籤也沒辦法   03/07 13:36  
 推  Howard61313   : 你是說反戰那一派的俄國平民也不無辜嗎?             03/07 13:36  
 推  Howard61313   : 回Y大                                              03/07 13:36  
 →  kterry01      : 他們真心以為烏克蘭人會喜迎他們自認的王師           03/07 13:37  
 推  jyekid        : 受到生命威脅的人類沒有餘裕去分辨是真/假反 無力反   03/07 13:37  
 推  jabari        : 那就請反戰 而不是漠視然後說跟我無關                03/07 13:37  
 →  sheo99        : 我只想說這些支持侵略者的趕快從軍到前線             03/07 13:38  
 推  Y1309         : 努力去推翻布丁就不無辜,過普通日子就是平凡邪惡     03/07 13:38  
 →  dos01         : 奇怪 這篇把俄換成中 烏換成台 完全沒有違和感        03/07 13:38  
 推  Howard61313   : 我說的其實就是反戰的                               03/07 13:38  
 推  Re12345       : 民主國家的少數派還可以無辜的說自己投不贏           03/07 13:39  
 →  yisky         : 看到在黑Telegram就知道在帶風向的文,所以這篇文     03/07 13:39  
 推  ARCHER2234    : 當然不無辜,誰叫你們縱容出布丁當獨裁者的           03/07 13:39  
※ 編輯: Typebrook (1.164.110.172 臺灣), 03/07/2022 13:54:37  
 推  lovegensokyo  : 專注國家很難簡單說無辜與否,畢竟被限制資訊來源     03/07 13:39  
 推  jyekid        : 那群人在普丁垮台後會推卸責任都是普政府的洗腦所致   03/07 13:39  
 推  payneblue     : https://i.imgur.com/YLtl59h.jpg                    03/07 13:39  
 推  lovebubao730  : 其實俄國人民也是有反戰的,reddit有人貼出俄羅斯警   03/07 13:39  
 推  jerrylin      : 中亞找來的那些人頂多給把槍負責維穩對付游擊隊       03/07 13:39  
 推  bced          : 感謝主動說明此文為「Google翻譯加個人潤飾」。       03/07 13:40  
 推  Howard61313   : 反戰的當然無辜,這就是結論                         03/07 13:40  
 →  yisky         : 到底要說什麼,俄羅斯人都是惡魔?                   03/07 13:41  
 推  pponywong     : 今天是俄羅斯的grand protest 聖彼得堡很多抗議的人   03/07 13:41  
 推  ARCHER2234    : 雪崩時 沒有一片雪花是無辜的                        03/07 13:41  
 →  dos01         : 但是到目前為止 俄反戰被抓的 加起來只有一萬人左右   03/07 13:41  
 推  Y1309         : 總力戰下,順民不也是侵略者的資源之一?             03/07 13:42  
 推  illegalmad    : 推 中俄就是當代法西斯 台灣不要掉以輕心             03/07 13:42  
 推  payneblue     : 戰爭一定會有支持跟反對的 不用糾結在這點上          03/07 13:43  
 →  lovebubao730  : 方在街頭盤查人民手機,也有逮捕示威民眾甚至毆打     03/07 13:43  
 →  dos01         : 如果俄一千萬 兩千萬人出來反戰 我不覺得還打得下去   03/07 13:43  
 推  sHakZit75     : 那些俄羅斯光頭黨不知道有沒有主動從軍參戰           03/07 13:43  
 推  downtoearth   : 對不信者談宗教沒意義 宗教是用來動員信徒的          03/07 13:45  
 推  jyekid        : 如果一兩百萬人出來塞滿城市 代表寡頭們喬好了        03/07 13:46  
 推  raymond501    : 因為還有食糧吧,等到快要餓死,才有可能串連推翻     03/07 13:46  
 →  Zeppelin      : 盲點是在俄羅斯反戰會受到懲罰但擁戰不會,這篇文章   03/07 13:46  
 →  djhaok        : 我以為telegram創辦人是討厭俄國政府的?             03/07 13:48  
 推  ARCHER2234    : 盲從的人民本來就很多,今天換成我們去征服菲律賓,   03/07 13:49  
 推  ARCHER2234    : 我想支持者也會不少XDD                              03/07 13:49  
 推  dennis99      : 推                                                 03/07 13:50  
 推  boringuy      : 大多人就算反戰也覺得事不關己不想出頭               03/07 13:50  
 →  otaku690      : Pavel Durov是反布丁人士吧 他創的VK被政府幹走耶     03/07 13:51  
 推  nashQ         : 推 越看越難過                                      03/07 13:51  
 →  Zeppelin      : 僅強調對觀察到的鷹派活動,導引性質真的蠻強的...    03/07 13:51  
 推  jabari        : 才1萬反戰也太古椎 ...                              03/07 13:52  
 推  Eugeneptt     : 推一下                                             03/07 13:52  
 推  berserkman    : 看到榮耀鮭魚普丁笑出來                             03/07 13:52  
 →  yisky         : 這篇就硬要黑俄羅斯人,T的創辦人明明是反普丁        03/07 13:53  
 推  LeftCorner    : 沒事征服菲律賓,最好有多少人會支持                 03/07 13:53  
 →  Zeppelin      : 1萬多人被抓代表示威者遠超過這數字吧                03/07 13:54  
 推  s8018572      : 這篇文的結論算是另類的中或最贏嗎==                 03/07 13:54  
 推  Howard61313   : 他講的不可能是沒事,好歹也是廣大興那種等級的事     03/07 13:54  
 推  lilliant      : 有在推特看到這篇,但懷疑這種激進派佔多少,是不是   03/07 13:54  
 推  d66312001     : 菲律賓又亂又窮征服菲律賓是要幹嘛?(我有偏見:     03/07 13:55  
 推  lovegensokyo  : 沒吧 軍艦護漁還ok,去砲轟馬尼拉我會覺得總統失智    03/07 13:55  
 →  Brusolo       : 跟小粉紅有超過87%像……                            03/07 13:56  
 推  LeftCorner    : 支持討回公道和征服菲律賓還是有很大的差距好嗎       03/07 13:56  
 推  yi33168       : 不能以偏概全,但挖得很深可以了解這個民族,讚!     03/07 13:56  
 推  DDG114514     : Z = 卍                                             03/07 13:56  
 推  mimimoumou    : 他的意思要等中俄同盟成型不是不可能,但要很長一     03/07 13:57  
 推  JoshBeckeet   : 我居然看完了,好文推                               03/07 13:57  
 →  d66312001     : )                                                 03/07 13:57  
 推  cangming      : t反政府跟政府拿t來做壞事是兩回事                   03/07 13:58  
 推  mimimoumou    : 段時間,但俄國現在經濟已經惡化到等不下去了         03/07 13:58  
 推  adwn          : 傘兵行程表的MEME有強烈即視感                       03/07 13:58  
 →  swoosh67      : 看來Z的意象就跟納粹圖案一樣 俄國邁向納粹化         03/07 13:59  
 推  ashrum        : 符號崇拜?                                         03/07 13:59  
 推  jabari        : 在歐洲久了 我真心覺得俄羅斯人 不需要人黑...        03/07 14:00  
 推  www115ui8     : 有當年納粹符號的感覺                               03/07 14:00  
 推  henry0131     : 對制裁的敘述聽起來像青少年離家 發現養不活自己      03/07 14:02  
 推  alwaystvxq    : 反戰的無辜,但其他盲從的是幫兇…                   03/07 14:02  
 推  alwaystvxq    : 希望制裁不要減輕力道,要讓俄羅斯付出代價           03/07 14:05  
 →  djhaok        : Pavel Durov長期以來一直與俄羅斯國家安全部門合作    03/07 14:06  
 →  skycat2216    : Pavel不是之前才為隱私政策槓上俄國國安局?          03/07 14:07  
 推  JingPingKing  : 完全玩Nazi,猶太換成Ukr而已                        03/07 14:07  
 推  AndyMAX       : 跟二戰德國日本一個樣                               03/07 14:07  
 →  djhaok        : 文章裡面是這樣說的,不只是說telegram被做壞事。     03/07 14:08  
 →  creative      : https://reurl.cc/6ExWvV  體操選手胸口貼Z字,挺俄    03/07 14:08  
 →  Zeppelin      : 講VK跟telegram的那段真的怪,俄限制FB才導致VK出世   03/07 14:09  

[老文] QGIS動手做-用套件Qgis2threejs畫3D地形圖

  • 花費時間 - 約20分鐘 (看下載速度)
  • 達成目標 - 繪製臺灣局部地區3D地形圖(以內政部釋出之20公尺網格為材料)

Mt.jade

前言

3D地形圖? 這種東西用Google Eearth(簡稱GE)看不就好了?

各位看官,事情的確如此。若只是要看大範圍的地形起伏,這的確是最方便的作法。只需要透過簡單的下載與安裝步驟,GE這套軟體馬上就能將3D地形圖快速呈現在您眼前。只不過,在這邊推薦用QGIS安裝套件Qgis2threejs是有理由的:

  1. GE的數值高程(DEM)資料來源有數種,美國地質勘探局(USGS)、使用太空梭雷達的SRTM、又或是美國國家海洋暨大氣總署(NOAA)的一公里網格,隨著時間推移,新的勘測方法(如光學雷達LiDAR)也不斷投入應用。
    不過,雖然部分地區能夠呈現高精度的高程資訊,但GE並非在全球每一處都能做到盡善盡美的3D展示。以台灣來說,要展示各大山脈的起伏相當足夠,但一旦拉近到1Km見方左右的範圍,擅長讀圖的朋友馬上就會發現到-哇!怎麼和常用的經建三等高線圖差這麼多啊!?

  2. 相對地,本次教學使用的圖資乃是內政部(簡稱MOI)去年開放的20公尺網格DTM,俗話說靠人不如靠己,要做台灣的3D地形呈現當然還是要靠自家的資料啊!
    更棒的是,一群有志的前輩們早就將這份釋出的圖資進行加值,應用於手機登山導航。而我們這次要利用的HGT檔格式,也是由其中一位前輩Rex所轉換的喔!

下面三張圖都標示同一區域(花蓮縣二子溪/初見溪匯流口),分別是經建三GE、以及本課會用到的MOI.hgt圖資。

可以發現到,GE的匯流口居然變成高聳的鞍部!而往西邊南二子山的方向也無法呈現等高線圖該有的尺度。比較一下GE和最下面的本課成果,有沒有動力想學了呀?

contrast

步驟一 下載圖資


下載Rex Tsai所轉換的各式圖資,本次教學使用HGT格式,所以請右鍵點選HGT這個資料夾,再點選下載

MOI圖資下載頁面(約46MB)

由於是Google Drive會打包成zip格式的壓縮檔,下載完成後請記得解壓縮,並放到自己記得的路徑中。

Rex Tsai Folder img


步驟二 將圖資加入QGIS

在QGIS中,是以Raster Layer的型式來加入剛剛下載的HGT檔喔! 有以下三種方法:

  • 按下Ctrl + Shift + R
  • 點選左方的方格圖示(Add Raster Layer) add_raster
  • 在上面選單中依次選擇Layer->Add Layer->Add Raster Layer...

另外,你是不是也注意到解壓縮後有很多副檔名為.hgt的檔案呢?難道我們要把這些全部一起丟進QGIS嗎? 別急! 注意到這些HGT檔的檔名了嗎? 因為單一圖檔太大,所以它們是用經緯度來分割的,每個檔案橫跨一個經度和緯度,檔名的數字則是圖片左下角的座標喔,所以會是下面這樣子的分布:

imgs_parts

所以,端看你想描繪哪個地區的3D地形,再把對應的檔案加入QGIS就好,不用全部一起來啦。


步驟三 調整座標系

選取右下角的EPSG:XXXX(OTF),跳出畫面後,接著在Filter內鍵入3857,選取下方出現的WGS 84 / Pseudo Mercator,接著點選套用確定即可。

mark EPSG choose 3857 其實也可以使用代碼3826的TWD97,一樣可以正確疊加圖層

上面的步驟是用來改變地圖介面的座標系的,為什麼要這樣做呢? 因為如果座標系使用預設的WGS84(代碼4326)。新加入的高程圖層將無法標示在正確的相對位置,用肉眼即可看到它和其它底圖有所偏差。這牽涉到WGS84(世界大地測量系統)本身定義以及Pseudo-Mercator(偽麥卡托投影)的設計。有興趣的朋友可以在下方參考資料中查看相關說明。


步驟四 下載套件

看過前面QGIS入門第三課-加入Google衛星影像的同學一定對新增套件不陌生! 在上方選單選擇Plugin->Manage and Install Plugin...,接著搜尋Qgis2threejs,再下載安裝即可。

install plugin


步驟五 使用Qgis2threejs

安裝完成後,應該會在工具列出現新的套件Icon供點選。或者也可以在上方選單Web->Qgis2threejs找到套件。請先將之前加入的HGT檔圖層取消勾選,使之不顯示在地圖上。因為我們產出的3D模型除了高程外,貼圖是使用目前地圖上所顯示的畫面喔! 所以端看你的3D模型想要呈現哪種底圖、航跡或其它哩哩扣扣,現在都把它們顯示在地圖上吧!

tab 1 進入Qgis2threejs的選單後,我們就先來作一些設定啦! 請先將選中左方列表的World,注意一下圖中1~5的項目。

  1. 產出的格式,使用預設的3DView(dat-gui).html即可。順便一提File Export.html可以將成果轉檔成各種類型,方便其它軟體進行呈現/修改(例如Win10內建的3D Builder)。

  2. 地圖範圍,也就是3D模型的邊界,使用目前地圖介面的呈現範圍。由於無法在這裡作出調整,所以請在打開Qgis2threejs之前先把尺度、位置在地圖介面調到你想要的範圍。

  3. 模型尺度/位移

    • Base size: 表示模型大小,由於精細度是由HGT高程檔和目前地圖介面的畫面所決定,選100就很足夠。
    • Vertical exaggeration: 將高程誇張化,常用於起伏不明顯的區域,若要呈現實際比例就選1即可。
    • Vertical shift: 調整高程,選0即可。
  4. 模型座標系,使用目前座標系或是標準的WGS84,產出的模型可以透過點選來顯示座標,所以這邊可以選擇Latitude and longitude (WGS84)

  5. 輸出檔案所在的路徑和檔名,由於輸出後不只一個檔案,所以建議多新增一個資料夾來容納。tab 2 再來是左方列表的DEM設定

  6. 選取數值高程(DEM)圖層,也就是我們剛剛加入的HGT檔的圖層啦,要注意的是,若圖層範圍不在目前的地圖畫面中,那產出的模型就只是一張平面圖而已喔。

  7. 調整DEM,滑桿可調整解析度,請自行試驗其中差異。而若勾Surroundings,就代表要延伸目前的地圖範圍。 Size有3、5、9可以選,也就是以目前地圖範圍為中心格子,再畫出9、25、81宮格的範圍啦! 既然描繪的範圍一下子大了這麼多倍,電腦也會花相應的時間來輸出喔!有沒有了解了呢?

    由於圖磚服務在越大尺度下解析度越高,所以建議在作圖時將地圖畫面放大至較小範圍,再配合較大Size值來調整至想輸出的範圍,這樣比較可以兼顧貼圖清晰和較大的模型。

    至於Roughening則是調整貼圖的網格大小,數字越大網格越大,同時也會比較失真,當然輸出也會比較快喔。 另外的Advanced選項可用於輸出複數解析度的3D模型(越接近中心解析度越高),有興趣就自己玩玩看吧。

  8. 貼圖來源,預設的Map canvas image就是現在的地圖畫面,當然也可以選擇Layer image來只加入特定圖層。至於Image file則可以加入圖片檔,不過因為座標不容易對齊所以還是算了吧…

  9. 模型邊界,不影響產出結果,Build sides可在模型四邊的面加入不透明的貼圖,Build frame則是把模型邊線描黑而已。

  10. 上面的步驟就是一些比較必要的設定了,完成之後按下Run,套件就會開始輸出成果。依據步驟7的設定有可能1、2秒就完成,也可能花費數分鐘,輸出檔案也從5MB到數百MB都有可能喔。

一旦輸出完成,系統就會自動打開瀏覽器檢視成果。轉動3D模型的操作只需要使用滑鼠左右鍵和滾輪滑動而已,不需要特別教學啦。只要以左鍵點選地圖的任一處,也馬上就能顯示該點座標!

至此就算大功告成囉,輸出的檔案是html+javascript型式,所以很重要的一點:

只要瀏覽器就能看!!

也就是說,產出的檔案還可以丟到其它人的電腦上給別人看喔,完全不需要使用QGIS來執行。 若能再搭配GPX檔的航跡圖層,能夠在簡報、行前審隊時更能讓人一目了然!

到此為止就下課解散囉! 另外若對Qgis2threejs這個套件有更多興趣,在下方的參考資料中可以找到官方說明文件。


參考資料

GE圖資來源說明

WGS84(世界大地測量系統)

Pseudo-Mercator

Qgis2threejs官方文件

[老文] QGIS入門第三課-加入Google衛星影像

  • 花費時間: 5分鐘
  • 達成目標: 將Google衛星空照圖加入圖層列表

前言

由於這一課要用的圖資並未以OGC方式發布(意思就是大公司比較大牌啦)
所以首先要安裝套件-Openlayer Plugin!


步驟

  1. 首先在上方選單選擇Plugin->Manage and Install Plugin... choose_plugin 由於要和提供套件的伺服器連線,所以會要等一下喔

  2. 進入到套件管理視窗了,在搜尋欄打入Openlayer, 下方列表應該就會跑出Openlayer Plugin這個套件! 點選右下方的Install plugin來安裝。 install_openlayer

  3. 安裝完套件後,就可以在選單中的Web找到Openlayer plugin這個選項了。 可以看到除了Google外,還有OSM、Bing(微軟),甚至連Apple圖資都有呢! use_plugin 這邊選擇Google Satellite(Google衛星影像)來加入圖層

  4. 噹噹! Google衛星影像成為我們地圖中的圖層之一囉 final_screen

[老文] QGIS入門第二課-總之先把它閹掉吧

  • 花費時間: 5分鐘
  • 達成目標: 將QGIS的介面進行簡化

備註: 雖然只用5分鐘,不過這恐怕是初學者最重要的一步了

前言

嗯? 你問標題是什麼意思? 閹掉當然就是字面上的意思啊!
對! 我們要來把QGIS的小雞雞切掉!

若你看到這裡還是一頭霧水的話,請把QGIS點開…

QGIS_Enter 載入各種元件需要一點時間…

QGIS_sample1

QGIS_sample2

滿滿當當的選項和按鈕…
看到這邊你作何感想? 換成我的話只會想關掉視窗而已…

punch_face


請你跟我這樣做

既然預設的介面這麼不User Friendly,那有沒有什麼方法解決呢?

有的! 而且非常簡單。

  1. 請到 這裡 下載QGIS的設定檔,儲存到你認得的資料夾。大小僅130KB,請放心下載。

  2. 打開QGIS,選擇清單中的Setting -> customizationcustom1

  3. 將視窗中的Enable customization勾選(會有叉叉在中間),再點選Load from file custom2

  4. 選取你剛剛下載的設定檔 - 簡化QGIS,再點選右下角的套用。

  5. 按下確定離開視窗,再把QGIS關掉重開。鏘鏘,簡潔的介面出來了! 是不是很順眼呢?

至此,閹割版的QGIS就完成了。工欲善其事,必先利其器。想要從頭開始學QGIS,最好先化繁為簡,這樣記憶各種功能時才不會頭昏眼花。 custom3


若有任何實作上的問題,可在下方留言,我會儘快回覆。

[老文] QGIS入門第一課-總之先把它裝起來吧

  • 花費時間: 20分鐘 (視網路速度、電腦效能而定)
  • 達成目標: 成功將QGIS安裝到您的機器內

前言

QGIS_Enter

網路上的QGIS資源不少,中研院自己就有一個相關的專題網站-QGIS及Open Geodata資源網,民間也有各種的教學課程,網路上英文資源更是多如繁星。

成山的資料雖然查閱方便,但太長的篇幅、專業的術語和英文資料,對於入門者來說要吸收還是有些吃力。許多人往往還沒開始學習就被嚇到了。

若你對地理資訊系統(GIS)一知半解,對QGIS能做什麼事也只有個模糊的概念,沒關係! 不管您是和我一樣的山友,或是工作需要,既然都點進來看了,可見應該是有點興趣的。

總之先裝起來再說!!

先求有再求好,QGIS沒有在您的電腦中一切都沒辦法開始。
它「能做到什麼樣的事」,以及地理資訊系統(GIS)的基本概念,您都可以透過最後面所列的網站連結查找,而我也會在之後的文章提到登山行程所需要的部分。

那麼,接下來的幾分鐘請跟我做!

下載QGIS

QGIS的官網頁面就只有英文,我曉得大家都是懶人啦XD
好不容易找到下載頁面,進去後還列出許多不同版本,看都看傻了。所以下面直接提供下載連結:

你們這些懶鬼想要的就是這個對吧?

QGIS - Windows 32位元下載 (約300MB) 若您不知道自己的電腦系統屬於哪種版本,點下去就對了。

QGIS - Windows 64位元下載 (約380MB) 若您知道自己的電腦系統屬於64位元版本,就下載這個吧,使用上面32位元的版本也是可以的。

QGIS Download 點開上面的連結後,就會跳出下載QGIS安裝檔的視窗,請選擇自己想要存放的資料夾。

下載中來閒聊

依照網速,要把安裝檔下載下來大約需要10~15分鐘,這邊先來回答一些可能被問到的問題。

為什麼只有放Windows的下載連結?

因為我假定在下載QGIS這關,會需要看這篇網誌的人,大概都是使用Windows的族群。

另外QGIS這個軟體本身受到OSGeo基金會支持,該基金會所開展的計畫OSGeo4W,則是將眾多開源(Open Source)的地理資訊軟體整理成Windows可執行的檔案,4W就是for Win32(Windows)的意思啦。

簡言之,在Windows環境下使用QGIS是有掛保證的,它有頻繁的版本更新和長期維護,完全不用擔心變成孤兒。

那Mac(OS X)呢? 我們果粉的權益呢?

蘋果在安裝中會需要注意安全性相關問題和Qt4(視窗相關)的設定,值得較大篇幅的解釋。只是我手邊沒有mac,也沒有時間做詳細教學,我很抱歉的說:用蘋果不是該死,是罪該萬死

若您還是想試試看,這邊是安裝檔下載連結(QGIS 2.18 for Mac),您可以依照這篇文章中的描述進行安裝。

我用的是Linux吔…

都用Linux了還用我來教安裝? 有空多去寫寫中文ArchWiki吧。

開始安裝

QGIS Setup1 QGIS Setup2 被問到這句時,選是就對了。放心! 我不會害你的(拍肩) QGIS Setup3 直接點選Next QGIS Setup4 閱讀使用者條款後按下I Agree,不過我懷疑真的有人細心看完嗎? QGIS Setup5 選擇QGIS要安裝到哪個資料夾,若沒有特別偏好直接按下Next就好,我是喜歡存到D槽啦… QGIS Setup6 安裝畫面,請作個操舒展筋骨再回來 QGIS Setup7 恭喜您! 完成安裝

還沒完呢

QGIS Folder 安裝完成後,應該會在桌面看到名為「QGIS 2.18」的資料夾,現在就把它點開吧! delete_else 在資料夾內應該會看到許多應用程式,為了日後教學方便,請像我一樣將「QGIS Desktop 2.18.4」以外的檔案刪除掉(或放到新創的資料夾內)。放心!它們都只是捷徑而已,我們並沒有真正砍掉任何檔案。 pin_to_start 我也強烈建議您,將QGIS釘選到開始畫面或工作列,這樣一來以後啟動會方便許多

至此,QGIS的安裝大工告成。將下來我們將踏入GIS(地理資訊系統)的世界。

相關連結

若您行有餘力,以下分享一些QGIS的學習資源。 對上述的教學有任何問題,也歡迎在下方留言回覆。

中研院-QGIS及Open Geodata資源網

http://gis.rchss.sinica.edu.tw/qgis/

中研院除了建置網路圖磚服務(WMTS)提供民眾使用之外,在GIS推廣上也不遺餘力。該站長期關注開源的GIS軟體和QGIS,定期發布相關訊息,是學習QGIS不可錯過的好站。不過站內許多連結都已失效,他們小編真的應該小鞭一下了。

GIS-TECH

http://gis-tech.blogspot.tw/

QGIS推廣和中文化的重要推手,不過網頁目前看來已經死掉了。 順帶一提,太陽花學運時的立院內部全景圖就是他們做的喔!

馬克褚工作室

http://www.markchoo.com.tw/

以GPS手持裝置為主的教學資源,自行車與登山愛好者不可錯過的網站。其實以性質來講,這邊和我想寫的領域是最相關的。


若有任何實作上的問題,可在下方留言,我會儘快回覆。
home | top | RSS