安裝 Ubuntu 22.04 後,按照 Jekyll on Ubuntu 的說明,安裝 Jekyll 所需套件與環境。
sudo apt-get install ruby-full build-essential zlib1g-dev
echo 'export GEM_HOME="$HOME/gems"' >> ~/.bashrc
echo 'export PATH="$HOME/gems/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
gem install jekyll bundler
安裝完成後,先建立一個測試 Jekyll 用的目錄。例如 jekyll-test 。
mkdir jekyll-test
cd jekyll-test
jekyll new --skip-bundle
這會建立一個全新網站的 Jekyll 專案目錄,但還要修改它的 Gemfile ,改用 github-pages 套件管理內容。
NetworkManager 是目前各種 Linux 散佈套件最常用的網路連線管理工具。預設配置就會安裝這套工具。它提供了多種 GUI 管理工具,一套命令列工具,也允許使用組態檔設定。本文說明如何以命令列工具或組態檔做基本的網路連線設定工作。
- GUI 工具: 有很多種。但通常 GNOME 的 nm-applet (套件名 network-manager-gnome) 就足夠了。它在 KDE 或 LXDE/LXQt 桌面環境也能用。
- 命令列工具: nm-cli。
- 組態檔: nm-settings-keyfile。
因為 Twitter (改名 X) 撤除了活動 Timeline 功能,故本部落將首頁側欄內容改成 Profile Timeline 。
We retired the Likes, Collections, and Moments timelines on January 13, 2023.
You can learn more about this change in our announcement
其實資本論根本沒寫完w
我記得熊彼得吐槽馬克思出版資本論第一卷後,讀了邊際理論,然後資本論剩下的內容就寫不下去了。
ps.馬克思學的是李嘉圖的古典理論
No.29651168
這我倒是第一次聽說,所以馬列信徒的聖經根本是個沒寫完的破書嗎www
「關於我寫到一半寫不下去的理論半成品被野心革命家當作革命聖經放送這件事」
本文內容以 .NET 6 或更新版本為目標平台。我不用 .NET Framework ,不保證適用。
在 .NET 平台上,有兩種主要的計時器類別(Timer),分別是:
在一些 .NET Framework 文件中,還會提到其他種類的計時器類別,例如 System.Windows.Forms.Timer 。但看名字就知道,那些計時器類別綁定在 UI 庫或 Windows 系統上。而本文提到的這兩種計時器則具有普遍性,不會妨礙 .NET 程式的跨平台運行能力。
本文內容以 .NET 6 或更新版本為目標平台。我不用 .NET Framework ,不保證適用。
我們有很多種方法可以結束一個執行中的程式。例如一個在指令列執行的程式,可以按下 Ctrl + C 打斷它。又或者是「工作管理員」這類的工具,也會提供「結束工作」按鈕讓使用者終止指定的程式。 Linux 用戶熟悉的 kill 指令也是一個用外部工具終止程式的方法。
在 Unix/Linux/BSD/macOS 系統,上述操作都統一在 signal 訊號機制。例如 Ctrl + C 實際上觸發 SIGINT 訊號; kill 默認發出 SIGTERM 訊號;強制終止程式觸發 SIGKILL 訊號。具體列表請見 GNU libc manual - Termination Signals。在 Windows 系統上其實也有類似的方法,不過本文重點是 .NET 平台。
本文內容以 .NET 6 或更新版本為目標平台。我不用 .NET Framework ,不保證適用。
Named pipe (具名管道) 在 .NET 上不是新玩意,早在 .NET Framework 3.5 時就已提供 NamedPipeServerStream / NamedPipeClientStream。
但是自 .NET 6 起,它的底層實作技術改變了。
如果你想讓其他程式語言開發的程式 (非 .NET 平台) 和 NamedPipeServerStream / NamedPipeClientStream 程式溝通,必須知道這件事。
我有一個用 .NET Core 3 寫的具名管道服務程式,前陣子想用 .NET 6 發佈到 Linux 跑。結果原先用 FIFO 寫的客戶端程式接不上。一番研究後,才知道 .NET 6 改了具名管道的底層實作技術。
在 Linux 桌面環境,想要開機後自動啟動某程式,簡易作法就是在 autostart 設定中加入要啟動的程式。
但這個作法用在 VirtualBox 的虛擬機上,就不太靈光。
偶爾可以啟動,但有時會跳出 vboxdrv 尚未載入的錯誤狀況。
然而手動啟動虛擬機總是正常的。
因為現代的 Linux 散佈版本於啟動桌面環境時,會將進入桌面和載入驅動程式 (包含 vboxdrv) 等多個工作,交給 systemd 平行處理 (systemd 約 2013 年之後普及)。
既然是平行處理,那麼進入桌面和載入 vboxdrv 這兩件工作,誰先誰後就不是固定順序的了。
所以想透過桌面環境的 autostart 自動啟動虛擬機的話,有時就會碰到先進入桌面但 vboxdrv 還沒載入的情形。
然後就跳出上述的錯誤了。
為什麼現在 Linux 的網路介面名稱不是 eth0 ? 這說來話長,我先長話短說。
若要用 eth0 ,編輯 /etc/default/grub ,GRUB_CMDLINE_LINUX 這行改成:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
然後執行下列指令更新 grub 設定:
$ sudo update-grub
或者
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
想要了解來龍去脈,請接著看。
標題說的業務用磁碟是指多顆具有相同分割區配置,安裝 Linux 作業系統和客戶業務軟體,用在大量裝機場合的磁碟。
此外,本文情境還將面臨分批採購、後續替換等狀況,故使用的磁碟會是不同型號、不同品牌、甚至標示容量也不相同。
CloneZilla 的磁碟對拷功能雖然可以直接複製分割區配置,但一般情形僅限兩顆磁碟實際容量一致或目的磁碟容量較大的情形。
為了能複製到不同容量的磁碟,本文情境的分割區配置並不會用滿整顆磁碟的容量。
實務上可能只配置 30GB 左右,以便複製到 32GB 或更大容量的磁碟。
這種分割區配置方式適合使用於 eMMC, CF卡, USB隨身碟, SSD 這一類的儲存媒體。
這種做法,我以前也用在 Raspberry Pi 上。可以參考我這篇 產生指定容量的 Raspberry Pi SD 卡磁碟映像。
2022-10-05: 大幅改寫,改以磁碟為複製單位,而不是分割區。
大英國協王國女王伊莉莎白二世於 2022 年 9 月 8 日逝世。 The Queen is dead, Long live the King. 接著以伊莉莎白二世為元首的加拿大就有人提議廢除君主立憲制,但直接被總理拒絕。拒絕重啟憲政辯論 加拿大總理:不討論君主制問題。他說「在一個世界上最好、最穩定的體系中做出如此深刻的改變,對我來說,現在,這不是一個好主意」。 我也覺得在權力制衡運作良好的國家提議廢除君主立憲是居心叵測。我想到去年在 K 島上,我也聊過君主立憲制。
近兩三年來,日本動畫、漫畫、輕小說流行異世界或轉生題材,其中不乏轉生為歷史人物者。而去年(2021),有兩套幾乎同期刊載的轉生歷史人物漫畫,一套主角轉生為法國瑪麗皇后,另一套主角轉生為法國國王路易十六。喔,提醒一點,瑪麗皇后就是路易十六的妻子。我當時就覺得這兩個作者怎麼不摻在一起畫算了(大笑)。順便看看 PTT 鄉民的推文:轉生成路易十六,全力阻止革命讓瑪麗幸福。
我有個用 .NET Core 開發的案子,需要透過 MQTT 取得設備狀態後顯示在螢幕上。
最近在新增可用設備後,遭客戶回報主程式顯示設備未回應,但指定設備實際上還在運作的狀況。
我仔細分析了程式工作期間的 log 內容,發現是主程式訂閱的訊息中途失聯了。
主程式剛開始都有收到設備發佈的狀態,一段時間後就收不到了。而執行緒仍然活著好好的,顯然不是程式錯誤。
在解決過程中,我才發現被 System.Net.Mqtt 套件坑了。
它有一個不知該說是臭蟲、或是陷阱的特性。
若沒有正確設置 MqttConfiguration 的 MaximumQualityOfService 屬性,則訂閱者收到 20 次訂閱訊息後,就不再通知訂閱者新的訊息。
本文內容以 .NET Core 3 / .NET 5 或更新版本為目標平台。我不用 .NET Framework ,不保證適用。
設計程式時,對於具有常數性質的內容,我們通常允許從外部檔案載入其值。
而使用者也可以藉由編輯外部檔案,在不修改程式碼的情況下改變程式工作方式。
這種外部檔案,我們通常稱為「設定檔」、「組態檔」、「ini 檔」或「config 檔」。
組態檔最普遍且傳統的內容格式是用純文字檔。在 Linux 系統中,可以在 /etc 目錄下找到一大堆這種組態檔。
而 Windows 系統中,也可以搜尋副檔名 .ini 或 .cfg 找到它們的踨跡。
本文示範用 C# 的反射機制,實作這種組態檔的載入工作。
本文內容以 .NET Core 3 / .NET 5 或更新版本為目標平台。我不用 .NET Framework ,不保證適用。
現代程式語言很強調 callback 能力, JavaScript 是其中代表。
雖然 callback 本質上是把函數當一個參數傳遞給另一個函數,連 C 語言都能做這事。
但有些程式語言並不把函數與變數視為同等地位,因此不能直接把函數當參數傳遞,而需要特定的語法支持。
C# 就是這類程式語言。
對於 callback 能力,C# 基本上提供了兩種語法支持。
其一是委派(delegate),其二是事件(event)。事件也可說是較複雜的委派。
本文示範如何為自己的類別添加自行定義的事件。
標準的 SQL UPDATE 敘述只回傳受到影響的資料筆數。
如果更新敘述是 UPDATE table SET n = n + 1
這種更新動作,你得要再下一個 SELECT 敘述撈出新的資料結果。
但是各家資料庫系統通常有自已獨特的擴充語法,可讓 UPDATE 敘述直接回傳更新後的資料結果。
本文只說明 PostgreSQL 和 MS SQL Server 兩家的更新欄位並回傳資料結果的擴充語法。
《戰國權兵衛》是日本漫畫家宮下英樹創作的日本歷史系列漫畫第四部,已於2022年2月完結。
戰國權兵衛在後期花了不少章節描寫 豊臣秀次謀反事件。因為在近代史料中,基本認定這是豊臣家在關原之戰失敗的遠因,是豊臣家走向衰敗的關鍵點。
《戰國權兵衛》是日本漫畫家宮下英樹創作的日本歷史系列漫畫第四部,已於2022年2月完結。
本文內容是在沒有本能寺之變的前提下,和島民進行假設性討論留下的紀錄。
起因是明智光秀轉封到石見、出雲的政治經濟因素,最後止於銀幣通貨歷史。
那這樣說起來光秀最後的還有打完毛利後的預訂轉封點是在哪裡?
光秀佔有畿內。那經濟文化圈內的繁華度,可不是啥銀礦可以比的。文化可不是砸錢就有。
織田信長在擴張勢力時,習慣將攻下的領地封給負責攻略的大將。
例如明智光秀最後的領地「丹波」,就是他負責攻略的。
故有一說就是織田信長預訂將明智光秀轉封到他負責打下的毛利領地。主要是「出雲」、「石見」。
在日本戰國初期,出雲的鐵礦、石見的銀礦,是大內和尼子爭奪「中国地方」(指日本山陽山陰地區)的資源本錢。
大內及其後的毛利,靠著對中國大陸貿易,大量輸入文物,文化繁華程度不比京都差。
當時的「大內文化」在大內義興和大內義隆父子時達到高峰。
在這部漫畫中的描寫中,豐臣秀吉的許多政策皆延續自織田信長。
按秀吉的政策推斷,如果沒有本能寺之變,信長必然走向海外擴張,以及改革貨幣政策。
那麼掌握銀、鐵,又靠西邊海域的出雲、石見,會比明智光秀原本在內陸的丹波重要吧。
露營地點:福壽山農場露營區。
露營日期:民國111年 (2022年) 2 月 11 日至 2 月 13 日。兩晚。
第三次來福壽山農場露營。
原本計畫在武陵農場露營,但整個2月份的營位都滿了。所以訂了福壽山農場的營位。
這兩個農場棧板營位的差別在福壽山農場的棧板附近沒有電源插座。
以自行開車計算距離的話,兩個農場相距約一小時車程。
我第一天先去武陵農場賞櫻,下午到福壽山農場露營區紮營,住兩晚。
第二天是福壽山農場千櫻園賞櫻期間的開放首日,到千櫻園賞櫻。
在 Linux 用戶圈中, CloneZilla 和 GParted (GNOME Partition Editor) 可說是系統備份轉移與磁區管理的兩大神器。就算是 Windows 系統的管理者,也應該準備好這兩個工具的開機用 USB 碟 (Live USB),以備不時之需。
只是現在的 USB 隨身碟容量普遍超過 8 GB 。而 CloneZilla 或 GParted 的 Live USB 的容量要求不會超過 500 MB 。為此各自使用一隻 USB 碟很浪費。所以時不時有人想用多重開機管理工具把這些工具放在同一隻 USB 碟。
我個人試過一些多重開機 USB 碟的管理工具,例如 MultiBootCD 。但都有各自的缺點。不是很久未曾維護,就是和 UEFI 不相容。最後我找到了 Ventoy 。Ventoy 自介是「新一代多系统启动U盘解决方案」。操作簡單,而且支援的規格也很新。