2019/12/20

Conversion between Julian and Gregorian Dates using AWK

以 AWK 轉換儒略日期與公曆日期


【前言】


▪本文介紹儒略日期(Julian Date)與公曆日期(Gregorian Date)的互相轉換。

▪什麼是儒略日期?此處先介紹一些專有名詞。
  • 儒略週期(Julian Period):公元前 4713 年開始,長達 7980 年的紀年法。例如公元 2019 年是儒略週期的 6732 年。
  • 儒略日(Julian Day):自儒略週期開始的日數。
  • 儒略日數(Julian Day Number, JDN):公元前 4713 年元旦午時(儒略週期開始,JDN=0)到某日午時的日數,以世界時(Universal Time, UT)為準。例如公元 2000 年元旦 12:00(UT) 的儒略日數是 2451545。
  • 儒略日期(Julian Date, JD):儒略日數加上時分秒換算為日之小數值,即 JDN+(小時數/24)。例如公元 2020 年元旦,台灣上午十時二十分三十秒的儒略日期是 2458849.597569(UT+8.00)。

本文更新於 WordPress:
Conversion between Julian and Gregorian Dates using AWK

2019/12/03

用 AWK 將 Markdown 轉為 HTML


【前言】


▪Wiki 說 Markdown 是一種輕量級標記式語言,但又似乎沒有中文翻譯,本文姑且將之譯為「輕標記」語言。

▪本文的輕標記與原型的有些不同而且較嚴格,譬如原本粗體字和斜體字都可以用 * 和 _,本文將之簡化,粗體字只能用 *,而斜體字只能用 _,而且只能用一對。再如無序清單,原本可以用 *、+、-,而本文只能用 +。諸如此類地,將一種標記專用於一類,不相混雜,故有不少改變。另外,本文增加了一些輕標記,例如具有捲軸的 <pre>、段落標記、黃底字等。使用前請詳閱語法。

▪本程式的輕標記支援簡單的表格,但不支援直接使用 html 程式碼。


本文更新於 WordPress:
Converting Markdown to HTML with AWK

awk/gawk 入門參考



前言


▪過去為了編輯倉頡碼,收集了網路上許多版本的資料。因各版本的排版不同,就用多個程式將所需資料抽取出來,awk 便是其中之一。但是當時只是以解決問題為主,並未了解 awk 的全部功能。近日特別騰出時間將 awk 手冊從頭看到尾,用中文記錄下來,便產生了本篇網誌。

▪awk 是原版的程式,gawk 是 GNU 擴充的版本,本文以 gawk 為主。

▪本文只是入門的介紹,並不完整,但大部分的內容都包括了。

▪本文故意將參考資料中特定的英文字詞改為大寫是為了區別非特定字詞。

▪本文是入門的介紹,所舉的例子並沒有很深奧。此外,「範例」都是能執行的,可以複製到終端機模擬器中執行看看。

▪例子若有輸出入,會用⬧標出範圍。通常只加在左邊,顯示開頭的位置;若有必要標出結束的地方,也會加在最右邊。

▪參考資料列舉項目時,大多依字母排列;本文為了將類似的項目放在一起,有所更動。

本文更新於 WordPress:
AWK/GAWK Getting Started Reference

2019/10/04

用 Bash 和 Zenity 指令更換 GTK3 佈景

【前言】


一、前一篇敘述了十六種 gtk3 的佈景,每次要更換還要自己改設定檔,頗為麻煩。因此特別用 bash 和 zenity 指令寫了一個很短的程式,以快速更換佈景,在此與大家分享。


二、這十六種佈景的 css 檔要先依前一篇所述的方法一一製作好(都只要改前面十九行即可),才能使用本程式。檔名以紅色為例,深淺分別是 red-dark.css 和 red-light.css。其餘顏色的英文是 orange、yellow、green、blue、indigo、purple、gray。


三、本文假設佈景目錄名是 Green,放在 $HOME/.themes/ 目錄中。Green 目錄裡是一 gtk-3.0 目錄,所有的 css 檔都放在這裡面。


四、完整的指令在【附錄】裡。本例將之存成 change-theme 檔,放在 $HOME/.local/bin/ 目錄中,且設為可執行檔。開啟虛擬終端機,輸入 change-theme 即可。當然 $PATH 需已包含此目錄。


本文更新於 WordPress:
Changing GTK 3 Themes with BASH and Zenity Commands

2019/09/29

GTK+3 Theme

【前言】


過去本網誌曾談到 gtk3 的設定,但都不完全。最近將 Adwaita 的設定 從頭到尾檢查一遍,去除不必要的,修改保留的,新增必要的,完成了深灰色的佈景。

完成後,除了 GTK3 Demo 和 GTK3 Widget Factory(註一)以外,又測試過二十餘個 gtk3 應用程式,大致都沒問題。(註一:這兩個程式來自 gtk-3-examples 程式包。)

以下範例是用 Synaptic 程式,而完整的設定內容在【附錄】裡。


本文更新於 WordPress:
GTK 3 Themes

2019/09/10

GTK+ 3 CSS Nodes

【前言】


設定 GTK+ 3 的樣式時,一定會用到 CSS nodes 和 style properties。但這些資料分散在各個 widget 的說明中,不利查詢。如果集中到一個檔案裡,會比較方便。本文敘述收集 nodes 的方法,另一篇敘述收集 style properties 的方法

來源資料是官網的 "GTK+ 3 Reference Manual",目前的版本是 3.24.11。

收集的方法是用常見的 bash 和 Linux 指令,作業系統是 Debian 10。

本文更新於 WordPress:
All GTK 3 CSS Nodes

GTK+ 3 Style Properties

【前言】


設定 GTK+ 3 的樣式時,一定會用到 CSS nodes 和 style properties。但這些資料分散在各個 widget 的說明中,不利查詢。如果集中到一個檔案裡,會比較方便。本文敘述收集 style properties 的方法,另一篇敘述收集 CSS nodes 的方法

來源資料是官網的 "GTK+ 3 Reference Manual",目前的版本是 3.24.11。

收集的方法是用常見的 bash 和 Linux 指令,作業系統是 Debian 10。

輸出的資料不含過時不用的 (deprecated) 項目。

本文更新於 WordPress:
All GTK 3 Style Properties

2019/08/24

編譯可以傳送加密串流到 Facebook 的 ffmpeg

【前言】


前面曾敘述過用 ffmpeg 在 Facebook 直播視訊的方法。雖然現在還可以傳送未加密的串流,但 2019/11/1 起只能傳送加密串流。目前 Linux 程式包安裝的 ffmpeg 並無法傳送加密串流。如果到時還不能支援,就必需自己下載 ffmpeg 程式碼來編譯才可以。

本例所編譯的 ffmpeg 以模仿官方版本為基礎,另外加上傳送加密串流的功能,所以可以取代官版。

本文更新於 WordPress:
Compiling FFmpeg to Send Encrypted Streams to Facebook

2019/08/12

在 Debian 10 安裝 VirtualBox 6

【前言】


虛擬機器是很好用的工具。當要試用不同的作業系統或應用程式時,先在虛擬機器中進行;等確定採用後,才安裝到主系統,這樣可以保持主系統的乾淨。

Debian 8 的程式庫還包含 VirtualBox (VB),可以直接安裝,而 Debian 9 已移到 backports 程式庫了。大概是因為要用到 non-free 的程式,Debian 10 連 backports 程式庫都沒有 VB 了。

雖然官網推薦使用 Virtual Machine Manager (virt-manager),但試用的心得是和 VB 差太多了,少了很多功能。所以只好自行安裝 VB。本文就介紹安裝方法。

本文更新於 WordPress:
Installing VirtualBox 6.1 on Debian GNU/Linux 10

FluxBox Debian 10 作業系統 - 中文簡易版

【前言】


前面介紹過安裝陽春 Debian 10 的過程,此篇則記錄了圖形界面與應用程式的安裝。
本例示範一個精簡型系統,界面為英文,但可以顯示和輸入中文。主要的系統工具和應用程式有:

圖形界面:Xorg
視窗管理:Fluxbox
檔案管理:Spacefm
磁碟管理:Gparted
套件管理:Synaptic
程式管理:Lxtask
虛擬終端機:Lilyterm
文書編輯:Geany
中文輸入:Ibus
中文字型:Arphic, Noto
檔案壓縮:Xarchiver
清除工具:Bleachbit
工具列:Fbpanel
剪貼簿:Diodon
截取螢幕:Scrot
網路瀏覽:Firefox
音訊工具:ALSA, PulseAudio
多媒體播放:VLC
pdf 閱讀:Evince

本文更新於 WordPress:
FluxBox Debian GNU/Linux 10 - Chinese Version

網路安裝中英文版 Debian 10 的步驟

【前言】


過去發文大都談 Ubuntu 系統。最近突然想到,Ubuntu 來自於 Debian,那為何不試試 Debian 呢?於是就產生了這幾篇的網誌。

、先去 Debian 網站下載網路安裝工具 mini.iso。


、再下載 non-free firmware - firmware.cpio.gz

Debian 官方準備的 firmware 只有 free 版,而每個人的電腦配備不盡相同,很有可能要用到 non-free 版。以本例所使用的筆電為例,若不加入 non-free firmware,就無法使用 Wifi,所以最好要有。


、將 non-free firmware 加入 initramfs 中。

所有的 firmware 最好在安裝陽春系統時就一併安裝,所以必需在安裝前就加入。Debian 官網僅略述其法,詳細方法在下一節。


、將安裝檔安裝到隨身碟(假設是 sdb)。

如果不用 non-free firmware,直接用下載的 mini.iso,可用的指令是:
sudo dd if=mini.iso of=/dev/sdb bs=1M status=progress

但若要用,因步驟較多,所以詳述於下。

註:很多人說此處 dd 要有 oflag=sync,但本人從來不用,所得到的隨身碟一樣可以拿來安裝系統,各位可以比較看看。


、為了方便截圖,本例是安裝在 VirtualBox 中。中文版、英文版各安裝了一次,將相關步驟的圖放在一起,以便對照。使用的作業系統是 Ubuntu 18.04。


本文更新於 WordPress:
Network Installation of Minimal Debian GNU/Linux 10

2019/07/15

用 Wine/PlayOnLinux 安裝 CBETA 閱經器 CBReader2X

前言
安裝
界面字型
悉曇字型及蘭札字型
界面設定
後語

【前言】


前面曾介紹過 2016 版的安裝法。因為很久沒去 CBETA 網站,不知道已經有 2018 版,所以一直沒有更新。本篇敘述 2018 版的安裝,作業系統是 Ubuntu 18.04。


【安裝】


1. 安裝 Wine 和 PlayOnLinux

sudo apt install playonlinux

2. 下載 CBReader 安裝檔


至 CBETA 下載安裝程式 cbreader2x_win_all_v042_20190415.exe。
這是 7Z 自動解壓縮檔,也就是綠色安裝。


3. 在 PlayOnLinux 中安裝 CBReader2X


a. 執行 PlayOnLinux。
安裝時,有包括其 .desktop 檔,所以在程式選單中應該有。

主視窗開啟後,稍微放大一些,不然有些內容可能會看不到。


b. 按上方工具列 [Install] 按鈕;第一次執行會下載最新程式清單。

(清單下載完不要去玩,先安裝好 CBReader 再說。)


c. 點選視窗左下方 [Install a non-listed program] 連結。


d. 會出現以下注意事項:
During a PlayOnLinux installation:

- Leave the default install directory unchanged;
Just make sure to install to the C: drive, which is the only one managed by PlayOnLinux. Check in the wiki how you can manage the host system disk space;

- If asked, don't let the installer launch the newly installed program for you at the end of the installation;

- If asked if you wish to reboot Windows immediately, you may answer Yes, but in no case should you reboot the host operating system by yourself.
第一條是要使用者不要變更預裝的目錄。
第二條是勿讓安裝程式在最後一步啟動剛安裝好的程式。
第三條是若有要求重啟系統,可以答 Yes,但使用者不要自己去重啟。

可勾選左下方 [Don't remind me anymore]。
按 [Next]。


e. 出現以下訊息:
PlayOnLinux is not related to WineHQ.

To ensure that the results will be comparable from one computer to another and to avoid regressions, we specify a working Wine version for each program. This Wine version will quickly become out to date, but we won't change the installer until new tests are made and it takes time.

For those reason, please do NOT send any bug report or ask any support on WineHQ forums if you are using PlayOnLinux.

If you want to help the project to make some tests in order to avoid using out of date Wine versions, do not hesitate to go on our website.

Thank you.
主要意思是:若有問題,不要去 Wine 網站詢問,因為與他們無關。

可勾選左下方 [Don't remind me anymore]。
按 [Next]。


f. 出現 [Manual installation] 訊息。
按 [Next]。


g. 接著是 [PlayOnLinux Wizard] 窗格。
根據上面注意事項第一條,選 [Install a program in a new virtual drive]。
按 [Next]。


h. 輸入虛擬硬碟名稱。
此處以 iDrive 為例。
按 [Next]。


i. 詢問安裝前要做什麼。
都不選,按 [Next]。


j. 詢問虛擬硬碟種類。
選 32 位元者,按 [Next]。

這會新增 $HOME/.PlayOnLinux/wineprefix/iDrive 目錄 。

(試過 64 位元者,無可安裝的瀏覽器。)


k. 詢問安裝程式。
按 [Browse] 選下載的 CBReader 安裝檔。
按 [Next]。


l. 解壓縮目錄請選 C:\Program Files (直接輸入會比較快)。


m. 建立捷徑。
CBReader.exe,按 [Next]。


n. 視個人喜好更改捷徑名稱。
本例不更改。
按 [Next]。


o. 其他捷徑,自己看著辦。
最後,選第一項 [I don't want to make another shortcut]。
按 [Next]。


至此,CBReader 大致安裝完畢,但還缺一些必需零件。


4. 安裝必需組件


a. 在 PlayOnLinux 主視窗選剛建立的 CBReader 捷徑。


b. 按上方的 [Configure] 按鈕。


c. 選 [Install components] 分頁。


d. 安裝 [Internet Explorer 6]。

(試過 IE8,無法安裝。)


e. 完成後,按右上角 X 關閉窗格。


安裝完成


5. 啟動 CBReader


在 PlayOnLinux 主視窗:

a. 雙擊 CBReader 捷徑,或
b. 點選後,按左上方 [Run] 按鈕,或
c. 點選後,按 [Enter]。

當然,用桌面捷徑會比較方便。

啟動 CBReader 後會發現右邊經文窗格可以正常顯示,但界面的中文字都是小方格。這大概是因為它使用了「新細明體」而 Linux 系統沒有此字體之故。

如果出現彈出窗格,那是詢問是否要更新。因為也是一大堆的小方格,所以先關掉。


註:因 IE6 是安裝在 PlayOnLinux 中,所以從 Wine 執行 cbreader.exe 會有問題。


【界面字型】


1. 關閉 CBReader 和 PlayOnLinux


2. 用文書程式開啟 $HOME/.PlayOnLinux/wineprefix/iDrive/user.reg


3. 取代 Windows 的中文字型


在 user.reg 檔末加入以下內容:

[Software\\Wine\\Fonts\\Replacements]
"MingLiU"="AR PL UMing TW"
"PMingLiU"="AR PL UMing TW"
"SimSun"="AR PL UMing CN"

也可以用 Noto CJK 字型,例如:

[Software\\Wine\\Fonts\\Replacements]
"MingLiU"="Noto Sans Mono CJK TC Regular"
"PMingLiU"="Noto Sans CJK TC Regular"
"SimSun"="Noto Sans CJK SC Regular"

可以把 Regular 換成 Bold,如果覺得不夠粗的話。

文鼎的“AR PL UMing”是 Linux 系統很常用的中文字型,有如 Windows 的新細明體。Google 的 Noto 字型則是 Ubuntu 在新增中文語系時附帶的。這兩種字型在大部分的 Linux 正體中文系統中都有。


4. 啟動 CBReader 看看是否有效


如果出現更新窗格,即可更新。若未出現,可按上方的「更新檢查」。


【悉曇字型及蘭札字型】


這兩個字型若直接用 CBETA 提供的,會有問題,所以必需修改成 Linux 可以用的。

1. 安裝 FontForge

sudo apt install fontforge
共 21 M。


2. 至 CBETA 下載悉曇字型及蘭札字型


必需用舊版的。在 2016/2018 光碟映像檔中有舊版的,另外在 2016 版的安裝程式中也有。但將 2018 版的安裝程式在 Linux/Wine 中解壓縮後,倒是沒看到字型檔。

最新針對 Windows 10 和 Mac 系統的字型檔有問題。用 fontforge 無法載入,而用 fontlint 檢查,則有 'name' table 中,Mac 和 Windows 的名稱不一致的警告訊息及以下錯誤訊息:
This font has an illegal format 4 subtable with too little space for all the segments.
This error is not recoverable.



3. 修改字型檔


a. 原檔保留,將字型檔複製到另一目錄;修改字型檔的權限,自己要能 Write;然後用 fontforge 開啟:

fontforge Siddam.ttf


b. 在 FontForge 選:

[Encoding] > [Reencode] > [ISO 10646-1 (Unicode, Full)]

[Element] > [Font Info] > [PS Names] > [Fontname] > 改成 Siddam > [OK]

[File] > [Generate Fonts] > 檔案類型選 TrueType > 檔名 Siddam.ttf > 可取消 [Validate Before Saving] > [Save] > [Replace]

若有任何錯誤或警告訊息,全部略過。


c. 如果想做 .otf 檔:

[Encoding] > [Reencode] > [ISO 10646-1 (Unicode, Full)]

[Element] > [Font Info] > [PS Names] > [Fontname] > 改成 Siddam
[Element] > [Font Info] > [General] > [Em Size] > 下拉選單中選 1000 > [OK]

[File] > [Generate Fonts] > 檔案類型選 OpenType (CFF) > 檔名 Siddam.otf > 可取消 [Validate Before Saving] > [Generate]


d. 關閉 FontForge 視窗,不需儲存。


e. 擺放字型檔的目錄:

如果只有 CBReader 會用到,放在:
$HOME/.PlayOnLinux/wineprefix/iDrive/drive_c/windows/Fonts/

如果自己其他場合會用到,放在:
$HOME/.fonts/

如果系統其他場合會用到,放在:
/usr/share/fonts/ (若有 truetype 或 opentype 目錄,可放其中)。

以上三處任一處皆可,但不要 .ttf 和 .otf 同時有。一方面,內容都是一樣的;另一方面,可能造成混淆。.otf 檔似乎是 .ttf 檔的 3~4 倍大。


f. 啟動 CBReader,找篇有悉曇字的來檢查,如 「事𢑥部類」 T2132 《悉曇字記》(T54, No. 2132)。


g. 蘭札字型檔 Ranjana.ttf 也需做同樣的修改。含蘭札字的經文:「密教部類」 X1079 《持誦準提真言法要》(X59, No. 1079)。


【界面設定】


1. 視窗標題列


CBReader 視窗最上方的標題列預設由 Linux 的視窗管理員控制。如果要由 Wine 控制,改變其顏色和字型,先關閉 CBReader,然後:

a. 在 PlayOnLinux 主視窗點選 CBReader 捷徑。

b. 按上方的 [Configure] 按鈕。

c. 選 [Wine] 分頁。

d. 按 [Configure Wine]。

e. 選 [Graphics] 分頁。

f. [Allow the window manager to decorate the windows] 取消勾選

g. 到 [Desktop Integration] 分頁。在 [Item] 下拉選單選要修改的項目。

使用中視窗標題列:
 左側漸層色是 [Active Title Bar]
 右側漸層色是 [Active Title Bar Gradient]
 文字是 [Active Title Text]
非使用中視窗標題列:
 左側漸層色是 [Inactive Title Bar]
 右側漸層色是 [Inactive Title Bar Gradient]
 文字是 [Inactive Title Text]

註:[Graphics] 分頁的 [Allow the window manager to control the windows] 不建議取消,不然切換視窗會有問題。


2. 其他組件/元件


2018 版的 CBReader 視窗中,大部分都無法由 CSS 或 Wine 改變。除了標題列,只有邊框和捲軸可以由 Wine 設定。這和上一小節一樣,在 [Item] 下拉選單中改變設定值。

下面兩圖是修改前後的比較。下圖特別用紅色標出可以改變的組件,不難看出能改變的部分很少。所以,乾脆除了標題列以外,都用原值就好了。


【後語】


1. 依 CBETA 說法,2018 版改用 HTML5 格式,至少要用 IE11 以上的瀏覽器,而 Linux/PlayOnLinux 只提供到 IE8,所以有許多功能都無法使用。譬如:「主功能區字體」的設定無效,「引用複製」等功能完全失蹤,無法顯示校註。


2. 大藏經某些罕用字會用到 Unicode 10 字型。有兩個地方可以下載含 Unicode 10 的花園明朝體:

第一個是 fonts.jp/hanazono,提供 .ttf 檔,最新版是 2017-09-04 版。
第二個是 github.com/cjkvi,提供 .otf 檔,最新版是 8.030 版。

但是安裝後,Linux 的文書編輯器(如:geany)、瀏覽器(如:firefox)皆可顯示罕用字,如:𮎃([舟*冗]),但 CBReader2X 則無法顯示。即使是用上述的取代法,也是一樣都是小方格。所測試的經文是 A091n1057_p0314a07。

這大概是因為使用 IE6 的關係。這個問題目前好像仍然無解。


3. CBETA 雖然很發心、很努力地想更新 CBReader,但受限於各種因素,仍無法同時滿足各平台的要求;顧得了 Windows 和 Mac,也顧不了 Linux 系統。不過,我們仍應該感謝 CBETA 的各位大德,不應一昧地指責 CBReader2X 的缺點。


4. 結論:還是建議 Linux 使用者先安裝 CBReader 2016 版

2019/02/10

用 Imagemagick 製作陰曆行事曆 (Calendar)

【前言】

本文敘述用 imagemagick 和 bash 指令製作陰曆行事曆的圖片,並將之固定在桌面上。

一般月曆的開頭都是陽曆 1 號,再附上對照的陰曆。本文用陰曆初一做開頭,以陽曆為對照。

除了 bash 以外,會用到的程式有 imagemagick、zenity、Linux 內建的 date。

所有的檔案要放在同一個目錄裡。



本文更新於 WordPress:
Create Calendar with ImageMagick