Arch Linux 安裝練習筆記 2022

前情提要

Linux 有許多的發行版(distros),
而目前我所使用的發行版是 Debian Linux bookworm/sid,
儘管已經是非常新的版本,但還是免不了 Debian 的老毛病——套件老舊;
加之我準備在家裡架一台 server(不論是遠端主機或 NAS 都需要一台 server),需要更穩定而先進的作業系統,
經過考慮與比較(以及煩高秋)後決定改用目前使用者社群最大的 Arch Linux。

不過 Arch 一向被認為安裝很困難,
連 Arch Linux 台灣社群都明言安裝是最大的難關,甚至許多老手都常在裝機時遇上麻煩,
所以出現不少安裝指引的文章;
這次的文章一方面是提供安裝的一些提醒,一方面也是幫自己留下筆記,
那就讓我們來看看到底要如何安裝吧!

Arch 的特點

Arch 有四大特點:

  • 輕量
  • 簡潔
  • 社群活躍
  • 漸進式升級

輕量

與其他發行板相比,Arch 並不預裝任何套件,這使得系統可以非常精簡(包含安裝映像都是),所以需要什麼都是由使用者自行決定。

簡潔

所有的函式庫、執行檔、文件、設定檔都有嚴格的路徑規範與系統管理,比較不會發生找不到設定檔的「迷路」狀況。

Read More

Neovim 設定 - 外觀篇

前情提要

斷更快一週我很抱歉(

上次我們利用外掛設定了基本的 LSP 跟自動完成功能,
不過用著用著就想好像少了些什麼?

然後高秋看到就吐嘈我說:你為什麼直接用終端機界面,不設定個主題?
還有你不覺得有個狀態列的提示你工作會比較方便嗎?
我才恍然大悟,原來這種終端機界面的純文字編輯器還有這麼多有趣的外掛!

於是這兩天在一邊作業翻車的情況下,我又開始了設定(ㄊㄧㄠˊ ㄐㄧㄠˋ)之旅,
花了一整天終於搞定以下的「玩具」(?

以下就是一些簡單的紀錄。

背景主題

我選用了 Nightfox 這個外掛,有很多主題選項,這邊我採用是淺色底的 Dayfox。
Dayfox
(Source: GitHub README)

狀態欄

我用了 lualine,然後改了一些顯示的設定讓他比較乾淨一點

Read More

良好的 Coding style

前情提要

上一篇聊到同學們 code 的排版造成我很嚴重的視力及心理傷害(無誤),
這篇正好來聊聊一個好的 coding style 是什麼吧!

注意:本篇所有論點皆屬個人見解,若不認同請保持理性討論。

什麼是 coding style?

Coding style 指的是「程式碼的『寫作』風格」,
如同一般的文章風格一樣,程式碼的寫作風格也會因人而異,
小至空格的使用、大括號 {} 的位置,大至函式的宣告、語法的選擇都會有不同的個人風格。

那為什麼要強調「好的」coding style?

如果初學程式設計的人,可能會在教材上看到大部分高階程式語言有個特性——「可讀性」,
也就是容易閱讀、容易理解,這也造就了現代的開發協作環境。
但我個人認為這樣的特性需要配合良好的撰寫習慣才能發揮到最大,
特別是在幫別人 debug 的時候,如果你看到一個雜亂無章、文字過度集中的程式碼,
真的會跟我一樣眼睛很痛(o

以下是我覺得很重要的幾個各語言都通用的 coding style:

空格與段落

首先給各位看個範例:

Read More

資料結構 - 二元搜尋

前情提要

這星期資結終於上機了,上週直接爽放一天假期ww
不過這周一上課就是混沌地獄,一堆人直接忘記 C 怎麼寫……(助教:完蛋了之後更難我豈不是忙死)
有人直接問怎麼輸入資料……連 scanf() 都忘記了嗎(尖叫
至於 VLA(int array[n])跟 code 不排版就算了吧(點菸

慣例的廢話就到這邊,接著來聊聊這周的題目——二元搜尋法吧。

基本知識

一般我們在一串資料中要搜尋特定的一筆資料,直覺的方式就是從頭開始一筆筆比對,也就是所謂的線性搜尋,
但這樣需要花費的可能時間會非常的長,如果目標在最後一筆就會找非常久;
二元搜尋法則是利用「中間值」的概念,在一串已經排序過的資料中,每次都比對一定範圍的「中間」索引,
若不是目標資料的話則以中間值與其中一端為範圍,即縮小一半的搜尋區間,
然後不斷循環這樣的搜尋方式,直到找到目標。
這個方法相較於線性搜尋的好處是,搜尋的可能時間最壞會指數減少,
以演算法要求的時間複雜度而言,這是一個較好的解決方案。

題目

  • 輸入:輸入一個陣列長度,並依序輸入整數陣列資料,最後輸入一個搜尋目標。
  • 輸出:每一輪搜尋都輸出兩行,第一行為左右邊界及中間值的索引值,第二行為對應的資料;若最後有找到目標資料,輸出其索引值。
  • 注意:只能使用 C 或 C++,並請使用「遞迴」方式搜尋;另外本次的測資都是「可以找到目標」,不需要考慮找不到的情形。

實作

這邊就用我們的老朋友 C 來實作(C++?對不起我們不熟)。

注意 VLA

Read More

Neovim 設定

前情提要

上一篇文章的最後我提到學任何語言首先要先調教好編輯器,
這是源自於我那天還沒開始寫任何 code,就先花了半天的時間在處理 Neovim 的設定,特別是 LSP 的設定真的差點搞死我……
乾脆寫一篇來紀錄跟分享這個過程。
我是不是要感謝我的笨拙跟容易翻車讓我常常有題材可以寫文章

為什麼是純文字編輯器

或許有人會問:「現在新式的 IDE 像是 VS Code 界面漂亮而且使用方便,為什麼還要用純文字編輯器?」
這有很多可以說的面向,而且每個人的理由也不盡相同,
我自己的話是想要挑戰看看純文字編輯器的功能是不是真的不如 IDE、以及單純覺得好玩(o
當然專案開發我自己還是以 IDE 為主,因為視覺化的看專案檔真的比較輕鬆一點。
(BTW,雖然我前天 Java 是用 Neovim 寫的,
但強者我朋友 a.k.a. 清大怪物高秋表示「Java『專案』」是他數一數二推薦用 IDE 進行開發的語言,
因為純用 command line 會很煩躁)

為什麼是 Neovim

純文字編輯器主流分成兩大系譜:emacs 跟 vi,那為什麼我選擇了 vi 這支而不是 emacs 系?
因為 emacs 東西太多了,多到我會尖叫 too much 那種多(關於這個我不打算寫,我會逼高秋寫),
vi 系的好處,或者說優勢是在 terminal 上比較便利,emacs 只有 GUI 版比較好用,
如果想嘗試終端機界面 coding,用 vi 系的體驗會比較好;
至於選擇 Neovim 是因為 plug-in 的生態比較活躍,
並且自行撰寫 plug-in 也比較容易,這是個 plug-in 的新時代

Neovim 設定調教

好我花太多篇幅寫為什麼了,趕快進入正題(((

先把 Neovim 安裝好(怎麼安裝?去搜尋!),接著要來改一下設定檔囉~

init.vim

Read More

Java 實作 Stack - 使用陣列

前情提要

先吐嘈老師根本喪心病狂w

昨天物件導向正式上課跟上機(雖然我都上自己的機),
一開始老師簡單介紹了 Java 基本操作,畢竟這年頭 Java 不是必修課(?);
然後就出了三個作業:(萬年不變的)Hello world、運算子運用,
最後一個就是今天的主角:實作 Stack

如果說有學過 Java 可能會知道,java.util 有個 package 叫 Stack 就是用來實作 stack 的,
但老師笑容可掬的說:「請用 array 實作喔。
差點在教室尖叫。

基本知識

Stack / 堆疊,顧名思義就是把資料「堆」上去的結構,所以有以下特性:

  1. 先進後出 / 後進先出(LIFO, Last In First Out
  2. 除了頭尾外的每個節點都有「前綴」與「後繼」

對於 stack 的操作通常有以下兩種方法:

  • push:將資料存入 stack 頂端
  • pop:將 stack 頂端資料移除,頂端移到下一筆資料

題目

Read More

網站基礎架構

第一篇正式文章,來談談這個網站是怎麼產生的吧!

網域

網域一開始是想用 Freenom 的免費網域,但他們不給新註冊了QQ,
後來想既然我是台灣人,就用 .tw 的網域好了,然後就去跟 HiNet 買了(800 元好貴)。
後面 DNS 之類的就丟給 Cloudflare 託管了,還順便弄了自己的 mail address(真香)。

架站工具選擇

你說 WordPress?
CMS 是很方便啦但還要多設定 WordPress 需要的 domain 設定之類的,
嫌麻煩就決定用一般常用的 SSG。

至於 SSG 的選擇,
最一開始想選擇 Hugo,但部署我覺得很麻煩就放棄了;
後來又改成 Django,再來又轉成 Vite + Vue3,但這兩個都是 App 式,檔案跟網站架構我有點無法理解,也就相繼放棄掉。
最後是看很多人推薦選擇了 Hexo,用下去驚為天人(?)

主題

就預設的 landscape 啊,還是大家有推薦的主題可以讓我參考www

部署

最方便的選擇就是 GitHub Pages 囉XD,雖然我也有 Netlify 之類的就是了
而且大部分的 SSG 官方文件其實都有提供 GitHub Pages 的部屬流程,算是蠻友善的w

Read More