ヾ(•ω•)o 歡迎你來到 JN ㄉ部落格 ヽ(*≧ω≦)ノ

如果你初來乍到不曉得該從哪裡開始看的話,可以先從這幾個地方開始:

關於我 | 最近在幹嘛 | 為什麼寫部落格 | JN 來幫你!

如果不想要錯過這邊的訊息的話,可以 訂閱 這個部落格!
也歡迎來 誰來我家 留個足跡~~

Banner 不知道要放什麼,先放個我最愛的男性角色好了 :3

回顧一年的七個問題 - 2024

|
|

這是 2025 年底的 JN 在寫 讓自己的 2025 年變長一點的方法 的時候發現自己曾經在象象上 po 過 這樣的東西,所以把它搬過來自己的部落格,方便之後回顧或引用。


回顧一年的七個問題,靈感來自 Wiwi

這幾個問題則是來自於 Mel Robbins,她說她做這件事已經超過 20 年了,對她的人生很有幫助。而我覺得看起來似乎蠻有趣的,所以我也來回答看看這些問題好了。

這七個問題分別是:

  1. 過去一年的亮點(Describe the highlights from the past year.)
  2. 這一年中最困難的部分(What were some of the hardest parts this year?)
  3. 這一年來對自己的新認識(What did you learn about yourself this year?)
  4. 明年要停止做的事情(What are you going to stop doing in the next year?)
  5. 明年要開始做的事情(What are you going to start doing?)
  6. 明年要繼續做的事情(What are you going to continue doing next year?)
  7. 今天要採取的第一步(What can you do to today to take that first step now that you have a set of directions?)

對我來說 2024 是過得非常快的一年,也許是因為在生活型態上幾乎沒有改變,回憶起來幾乎都是單獨的節點,中間的空白似乎非常非常大片。

過去一年的亮點

  1. 九月的時候第一次到海外旅行(出差不算),是和閃光一起去東京。我也自己去了日本的音樂祭,聽到了很多自己喜歡的樂團,算是達成了一個夢想吧。
  2. 安安 Q 的部落格 在年初開張,而且也參加了不少線下活動,認識了一些朋友,也算是開了一個不同的生活圈。
  3. 在今年,我開始在大部分的時候都穿著女裝出門。或者應該說,我大部分的時候不太在意衣服有沒有性別,我就是穿我喜歡穿的衣服。
  4. 在八月的時候,以公司的身份去了 ITHome 主辦的 Cloud Summit 講了一個議程,或許這會是我這輩子的唯一一次機會。
  5. 下半年的時候和閃光的朋友(他是財經記者)還有幾個人開了一個投資讀書會,也在這個時候真正開始投資。

這一年中最困難的部分

我覺得是在和自己獨處的時間真正放鬆。平日下班之後的時間和精力所剩無幾,假日也蠻常有不同的活動,導致我的時間常常被切得比較碎,很少有那種可以隨心所欲做我自己想做的事情而不必擔心時間不夠用的感覺。另外,我也因此很久沒有回台中老家了,這件事情讓我感到有點愧疚。

這一年來對自己的新認識

也許是了解到獨處的時間對我自己的調節有多重要。過去我認為我是喜歡社交的人(但不一定擅長),或至少社交這件事情是會讓我感到興奮的,就認為獨處的我是感到孤單的。而隨著獨處的時間被上班、休息、聚會等等事情壓縮,我才慢慢感受到保留一些獨處的時間對我來說也是一件不能忽視的事情。

明年要停止做的事情

我得少花一些時間在從各種演算法推薦獲得資訊,無論是社群媒體還是各式各樣的平台。因為演算法如果是平台所擁有的,那它終究是為了平台而服務,而演算法可以影響一個人的所見所聞的程度可以非常大。所以,我想比起無腦的接受演算法把各種低品質的東西塞進我的腦袋之前,我應該更主動的去找那些我真正感興趣也享受的內容來攝取。

明年要開始做的事情

  1. 在行事曆上把該空下來的時間都挖出來
  2. 花更多心思經營安安 Q 的部落格以及社群媒體
  3. block 掉更多由演算法推薦內容的網頁、平台
  4. 去把留了兩年半的頭髮稍微整理一下

明年要繼續做的事情

  1. 安排一週左右的旅遊,無論是國內或海外都好
  2. 繼續以安安 Q 的身份在相關聚會或是線上活動
  3. 用 RSS 來管理我的資訊攝取來源,無論是部落格、Podcast、或是 YouTube 頻道(希望未來能把社群媒體帳號也加入)
  4. 持續把自己的內容分享到 Mastodon 或 Misskey 這樣的開放平台,讓所有想獲取我的資訊的人不必被封閉的爛平台或 App 綁架

今天要採取的第一步

除了回答完這幾個問題,我想先去想想有哪些題目是安安 Q 的部落格的了。

Featured image of post 使用 Mastodon(& Liker.social)近一年的心得

使用 Mastodon(& Liker.social)近一年的心得

讓我想起以前 Discuz! 遍地開花的景象

|
|

終於

先恭喜我自己,加入 Matters 和 Liker.social 將近十個月,終於存滿 5000 LIKE,獲得讚賞公民的資格!

但說實話,LIKE 幣其實對我來說沒什麼具體的意義,5000 LIKE 也就大概 200 台幣吧,最大的功能大概就是可以讓自己繼續被綁在以 LIKE 為核心的生態系。但也無所謂,這不對我產生任何的威脅。

我眼裡的 Liker.social

我覺得 Liker.social 是很奇妙的地方,甚至很難定位它的使用者是怎麼樣的一群人。以我自己來說,我是透過 Matters 才知道 Liker.social 的,所以我預期的是上面的人大部分都在 Matters 上或其他地方有創作,但事情似乎沒有那麼簡單。

以社群網站來說,這個群體其實非常非常小,活躍的使用者頂多就幾百來人的規模吧。大概花個 5~10 分鐘就能看完站上一整天所有使用者的嘟文,也因此很容易和陌生人互動,畢竟常看到的永遠就都是那幾個人 XD,這邊似乎也相對封閉,除了比較常看到的 g0v.social 和一些大大架的私人站點,似乎沒有看到有和其他什麼站點互動。(雖然也有可能是目前繁體中文的 Mastodon 站點不多就是了)

聯邦 is good

我還蠻認同 Mastodon(或者應該說 ActivityPub)這種聯邦式的設計,開源、開放、去中心化這些我就不說了。我覺得它結合了早期的論壇和近期流行的社群媒體,有點像是把 Facebook 的社團這個功能放大到網站的層級(這也是我認為現在 Facebook 的最大的價值),不同的主題就集中到不同的站點上討論。在此同時,也可以直接跨站點直接分享嘟文,保留嘟文的來源,而不是用傳統複製貼上的轉貼的方式。

我覺得,這才是過濾和整理資訊比較好的方法,而不是像 Facebook 一樣全部攪在一起之後再想辦法用演算法去排序。就算需要,也早就有 RSS 這種可以收攏更多訊息來源的工具,也可以自由整理、排序所有訊息的順序。

人生沒有在全拿的

這種聯邦式的設計對使用者來說也造成難以避免的麻煩。

首先,使用者會需要在不同的站點跳轉。這在電腦上的瀏覽器沒什麼問題,只需要開一個新的分頁就解決,但在手機上就完全不是這一回事。手機上的瀏覽器使用體驗還是有點糟糕,跟 App 的差距還不小(但就技術上是能做到的),甚至有時候需要在 App 和瀏覽器之間跳來跳去,難受。也許統一收攏到 RSS Reader,當作是唯一入口,再用瀏覽器去打開連結,可能會是一個折衷的方案。

第二是如果要最大化觸及率的話,可能會需要在不同的站點上都註冊帳號,並且在上面 po 一樣的文章,這就讓跨站連通嘟文這個功能有點雞肋。雖然可以透過跨站轉嘟來某程度解決這個問題,但還是免不了需要到各個站上操作,這可能是 ActivityPub 目前的設計缺陷,這可能就要透過外部的第三方服務來管理了。

所以,我可能會考慮擴充之前我開發的 Liker.social 同步到 Instagram 的系統,變成是一個集中的發文管理平台,這樣我就可以在一個地方統一管理所有站點的文(可能包含以後的 Threads),就不用再手動一個站一個站發文或是轉嘟了。

Featured image of post 一些我對 Threads 的淺見

一些我對 Threads 的淺見

在 Threads 還沒支援 ActivityPub 以前,我對這個 “App” 沒什麼興趣

|
|

2023/07/06,Meta 的新平台 Threads 上線,我想你應該早就知道這件事情。我自己在幾個月前就聽說這個消息,並且持續在關注,因為消息指出這個代號為「Project 92」的新平台將會支援 ActivityPub,意即將會與 Mastodon 等社群平台相容。

Post on mastodon

首發當天我就下載並註冊帳號了,不意外地是讓我很失望。但 7/6 這天僅僅是 Threads 的公開測試,還不是正式發布,不能期望它已經是個成熟的平台,但還是請容許我用比較嚴苛的角度去審視,就當成是我對 Threads 正式發布時的期許。


尚不支援 ActivityPub

這應該是我最在意的事情。我對這個平台最大的期許就是能和 Mastodon 相容,讓我能夠使用在其他站點上的帳號就能與 Threads 上的內容互動,而不是被受限必須使用 Threads 的帳號和 App。

Meta 推出 Threads 當天發布的文章,主題是介紹 Threads 這個平台。內容不斷強調 Threads 的一個重要目標正是支援開放的協定 ActivityPub。

但是,目前 Threads 只能用官方的 App 存取(以及可以使用網頁做簡單的讀取),還沒開放 API。所以,在 Threads 接上 ActivityPub 的網路以前,它無疑是被關在 App 的一座孤島,所有和外界的溝通只能透過 App 這種猶如空投的方式進行。

為打倒對手而生的產物

Threads 推出的的時機也是奇妙,剛好是 Twitter 發布「每日免費用戶只能瀏覽 1000 推文」的數日後,再加上兩個平台的介面及使用方式極其相似,Threads 在這個時間點推出很難說不是早就預謀針對 Twitter。

但是,Threads 真的有充裕的時間開發,準備好了才被推出嗎?就我一個非專業程式開發人員的觀察,我想答案是否定的,我看到的是滿滿因為時程緊迫下的妥協。

不只是前面提到尚未支援 ActivityPub 以及沒有網頁介面。而我的猜想是:整個 Threads 的系統可以說是 Instagram 的一個文字版外掛。為什麼我這麼說呢?

除了從 Instagram 和 Threads 的帳號 ID 會同步、刪除帳號時會同時刪除兩個 App 上的帳號,可以推測出其實是共用一個帳號系統以外,根據 逆向工程得出的 API,Threads 背後的 API 其實也是打到 Instagram。所以可以說背後其實是同一個系統,只是以不同 App 來存取做出品牌上的區隔。

但講個題外話,即便是共用同一個帳號系統,要讓用戶能夠取消註冊其中一個平台,在技術上是完全可行的事情,Meta 也承諾未來將會做出這個修改,整個專案趕鴨子上架的情況可見一斑。

糟糕的演算法

我能明白整個平台還在公開測試階段,演算法還處在非常簡陋的階段,還有很大的調整空間。但根據我短暫的使用經驗,Threads 的首頁會出現不少自己沒有追蹤的帳號,有些是朋友的朋友,有些是 KOL。

我很明確知道這不是我想要的,我需要的就是「按照發布時間,顯示我有追蹤的帳號的 po 文」。這麼簡單的演算法,Meta 不可能沒有能力實現,我翻遍了所有設定也沒有選項可以調整首頁的排序模式,表示 Threads 有可能在未來也延續這個政策,利用演算法來推送他們希望推送給用戶的內容。

這其實也就點出 ActivityPub 的重要性,如果 Threads 支援的話,我就可以在別的站台追蹤我想追蹤的人們,在別的站台做排序,我就可以選擇不要被迫吞下 Threads 的糟糕演算法。

我不信任 Meta

想想 Instagram 當初剛被 Facebook 收購的時候也還是個小清新,後來漸漸地首頁才不按照時間排序、開始加入廣告跟陌生人的貼文,最後還硬推 Reels。原本不錯的使用體驗一直被 Meta 破壞,但身為使用者因為必須到 Instagram 才能看到自己想看的東西,所以都必須乖乖地吞下去。

Instagram 之所以會有這樣的變化追根究底還是因為商業利益考量,類似的事情也很可能在 Threads 再發生一次,但假設 Threads 真的支援 ActivityPub,使用者就有官方站台以外的選擇,並且還是可以看到想看的東西。現在 Meta 講得很好聽,想加入這個自由的去中心化網路,但商業模式是什麼?這不是在拿石頭砸自己的腳嗎?所以我認為,就算 Threads 在未來支援 ActivityPub 了,Meta 還是能想出新的方法把用戶不得不選擇官方 App,以維持他們以廣告為主的商業模式。


做個總結,支援 ActivityPub 前的 Threads 其實就是另外一個 Twitter 而已。如果支援了,那將會有一段天下太平的日子,Threads 和其他所有支援 ActivityPub 的平台的使用者都可以直接互動,不必到對方的站台註冊帳號。但隨著 Meta 需要在這個項目轉虧為盈,可能就有新的方法把還留在 Threads 上的使用者當韭菜割。

所以,Threads 這個平台我自己雖然已經註冊了帳號,但我不會想住在上面。假設支援 ActivityPub 了之後,那就更沒有理由住在上面,因為我可以直接從別的站台追蹤還留在那上面的朋友。只怕的是在未來 Meta 出了什麼噁心的招數,不只把 Threads 的使用者當韭菜割,還可能逼在其他站台的使用者不得不加入 Threads,那就很糟糕了。

Featured image of post 我的聲音旅程 || 構成自己的 42 張專輯

我的聲音旅程 || 構成自己的 42 張專輯

或者應該說,是聲音旅程的封面

|
|

看見夥伴分享了影響自己最深的 42 張專輯,正好才剛寫完 如何提升自己的音樂品味?,我也搭上這個順風車來分享一下~

首先,身為一個在 mp3 時代長大的台灣人,把整張專輯一聽再聽的經驗還是比較少的。所以,我決定以專輯內的單曲或樂團為單位來選擇。

說實話,42 張還是頗尷尬的數字,既不能只挑出那些在自己聲音之旅中的重要節點,也不能任性地把所有值得不斷循環的作品都列入這張圖中。最後,終究還是必須忍痛捨棄掉一些自己真的很喜歡的作品;也當然,有很多漏網之魚是沒有被列入的。

我的音樂品味深受日本影響。自己珍藏的曲庫中,有很大一部分是從日本的演出資訊中挖出來的。如果喜歡日本音樂,卻還沒深入這片叢林的話,我相信你一定能從這份清單獲得一些寶藏。

為了使結果更多元,每個樂團我只挑選出一張專輯為代表。同時,一張專輯代表了一個樂團,也可能代表了其中的一首單曲。

構成我的 42 張專輯

排列也是有邏輯的:最上面 10 張專輯代表了我從有意識聽音樂以來,這個歷程中的重要節點;中間 12 張則是最有代表性的樂團;最後 20 張則是剩下之中最喜歡的作品。

先聚焦在代表我的聲音旅程的前 10 張,每一張都是前一張的延伸或繼承,而且有各階段的指標意義:

  1. CNBLUE - RE:BLUE > K-Pop 流行樂團
  2. Ikimono-Gakari - 桜咲く街物語 > J-Pop
  3. Scandal - HELLO WORLD > 日本流行樂團
  4. 都市零件派對 - 大城•小事 > 台灣樂團
  5. JOKER - 奔跑 > 日系、結構精緻的編曲
  6. 茄子蛋 - 卡通人物 > 詼諧、頗具個性的吉他
  7. Rick Rack - 今を生きぬく乙女たち > 類 Funk 吉他 + Disco 鼓節奏
  8. Lucky Tapes - CIGARETTE & ALCOHOL > 性感的 Bass
  9. Vantage - J-Funk City : Vantage’s Edits Collection > Future Funk、EDM
  10. POP ART TOWN - SWEET! SWEET? SWEET! > 綜合前三張的特點

聽到 Rick Rack - 今を生きぬく乙女たち 的時刻是一個比較大的轉捩點。在那之後,我的音樂品味不再是到處摸索的階段,而是幾乎專注於特定的幾種曲風,也就是後面的那四張。

後面的 32 張,則大部分出自於那個轉捩點之後,也就是說,這 32 張幾乎都能對應到這四張的其中一張。基本上,我也是以那幾張的風格在分類我的曲庫。在此附上完整的清單:

  • CNBLUE - RE:BLUE
  • Ikimono-Gakari - 桜咲く街物語
  • Scandal - HELLO WORLD
  • 都市零件派對 - 大城•小事
  • JOKER - 奔跑
  • 茄子蛋 - 卡通人物
  • Rick Rack - 今を生きぬく乙女たち
  • Lucky Tapes - CIGARETTE & ALCOHOL
  • Vantage - J-Funk City : Vantage’s Edits Collection
  • POP ART TOWN - SWEET! SWEET? SWEET!

  • Polkadot Stingray - Honenuki E.P.
  • Wienners - BURST POP ISLAND
  • GOHOBI - CAN’T GIVE YOU UP
  • ラパンテット - 小籠包
  • Andend boom - JUMP
  • Anoatari - Anoatari (~2018)
  • SHE IS SUMMER - WATER
  • Dareharu - Karma
  • 渣泥 - 半心
  • cinnamons - summertime
  • Oresama - CONTINEW WORLD (DISC1)
  • Necry Talkie - One!

  • Hump Back - 夜になったら
  • Yorushika - 夏草が邪魔をする
  • Friends - Petit Town
  • ZUTOMAYO - 潜潜話
  • House Rulez - Mojito
  • O.O.O - GARDEN
  • Anna - I’m not alone hitori no sekai
  • 川嶋志乃舞 - ファンタスティック七変化
  • ANARCHY STONE - KNOCK OUT!!!
  • 問題總部 - Lost
  • Jack Thammarat - Still On The Way
  • 倒抽一口氣 - 倒抽一口氣
  • プルモライト - リインカーネイション
  • Luck Life - Tadashii Boku No Tsukurikata
  • Tomo Fujita - Put On Your Funk Face
  • Blu-Swing - BLU-SWING 10th ANNIVERSARY BEST
  • MY FIRST STORY - ANTITHESE
  • JABBERLOOP - CHECK THIS OUT!!
  • 放客兄弟 - 放客兄弟
  • 體熊專科 - Topic 2: 關係 Relationship

這次整理 42 張專輯的過程還是比較倉促、不嚴謹的,而且,這充其量只能說是我的品味養成脈絡的目錄而已。只用前 10 張專輯還是不能清楚地解釋為什麼今天我的品味是這個樣子,這整個過程是什麼?每一張專輯彼此的關係又是什麼?

如果能夠把專輯排列,並且用線將他們連結,完成一個樹狀脈絡圖,感覺是一件很有趣的事情!

最後附上用來製作這張圖的網頁: https://www.neverendingchartrendering.org/

Featured image of post 如何提升自己的音樂品味?

如何提升自己的音樂品味?

大家都說多聽、多聽、多聽,我聽了好幾年就沒什麼長進

|
|

前陣子收到一些回饋,多是來自不曾學習過樂器的小夥伴,都在回饋中提到自己不懂樂理或不知道音樂怎麼分類之類的。其實我認為每個人都能以自己的見解養成自己的音樂品味,非得要遵照大家公認的那一套。一個原因是我自己的樂理程度不高;另一個原因是我認為音樂是很直觀的「感受」,而樂理只是從音高的組成的角度提供每個人對這些感受同樣的命名,使得這些感受能夠被重現和傳授。不過既然有小夥伴覺得自己有點迷茫,我就來獻個醜,分享一下我自己的音樂品味是怎麼養成的,以及我認為可以用什麼方法提升自己的音樂品味。

免責聲明

老實說我其實不太能確定,我自己在這幾年音樂品味的變化是變好還是變差?在成為一個編曲結構宅的同時,我也失去了欣賞很多其他音樂的能力。歌曲本身也是一種複合式的藝術,故事、意境、情緒、其他元素,都能是歌曲除了音樂外的一大重點。以下僅僅是來自一個理工腦的意見,僅供參考。

聆聽設備

首先是聆聽的設備,我認為這是能從音樂中獲得多少資訊的先決條件。一個好的聆聽設備可以保留更多的「細節」,例如樂器的配置、混音的巧思,這些細節有時候是跟關鍵的。農村武裝青年的主唱也說過「用手機喇叭在聴音樂是在浪費音樂人的心血」這種話,畢竟如果連聽都沒有辦法聽得清楚,還談何品味?

我認為一個合格的聆聽設備至少要能夠把幾個比較大的聲部分離開來,也就是它們不應該全部都混在一起。如果你去注意各個樂器的位置的話,一個簡化的版本也許會類似這張圖:

Sound Stage

更好的設備越有機會把每個聲部分離的越清晰,或是上下左右前後的寬度會寬,也就是所謂的音場大小。至於該多分離、音場該多大就是個人的喜好,但絕對不會是像大創的 $39 耳機一樣,像一鍋粥全部糊在一起,這就是一分貨一分錢。

我認為大部分大品牌的最入門型號的耳道式耳機都能勉強符合以上的標準,常見的 Airpods 或是 Earpods 也是算是不差的耳機。如果預算很有限的話我會推薦對岸品牌 KZ 的 ZSN(非 Pro),大約 $600 NTD 能入手了;耳罩式喇叭可能就需要準備 $2000 ~ 3000 以上;至於喇叭我就完全不是我熟悉的領域了。

舊歌新聽

現代音樂的混音幾乎都使用電腦完成,不存在硬體混音器的音軌數的限制,40、50 軌幾乎就是家常便飯,除了同樣的聲部可能疊了很多層來加強厚度以外,在大聲部的縫隙之間存在很多很不起眼、平常不會注意到,但其實默默貢獻了很多的樂器。我覺得嘗試去做逆向工程,找到那些音樂製作時的小巧思是很有趣的事情,也是我用來更深入欣賞一首歌曲的方式。

分析

另一個很有效的方法,就是問自己「為什麼喜歡一首歌?」、「為什麼不喜歡某種特定類型的音樂?」、「這首歌跟那首歌哪裡不一樣?」。也許你能夠明確地知道答案,但大多數的時候是模糊的,甚至是一點頭緒都沒有。我覺得「明明喜歡卻不知道為什麼」對我來說是一件很矛盾的事情,也許我沒辦法馬上找到答案,但每次解開疑惑的過程,都是我主動地在嘗試拓展我的品味的時候。

至於要從哪些維度去分析因人而異,沒有標準的方式,結構、配器、和聲、節奏、混音、詞曲咬合,還有很多其他很多很多能切入的角度,甚至每個人也會有自己獨特的角度。而從那一大堆維度挑出了哪一些出來重點發展,就是形成品味很關鍵的一件事情。

製作

我認為要快速提升品味的方式還是去了解如何製作,甚至是自己嘗試。無論是學樂器、作曲、編曲、混音都好,都一定需要學習那個領域的工具,例如:樂理之於樂器、濾波器之於混音。多學習了一個工具就是多了一個分析的角度,意味著存在再拓展品味的可能。 一個具體的例子就是 Wiwi 分析自己的作品 。如果不是曾經參與音樂製作的人,應該都能從這支影片得到不少新知識。

耐心

音樂品味的養成不是一朝一夕的事情。以我自己為例,我在擁有人生第一支像樣的耳機和接觸非主流音樂後的幾乎三年後,才開始找到自己真正喜歡聽的音樂類型。雖然早就接觸吉他好幾年,但在那之前的我就是字面上的「都聽」,覺得什麼好像都不錯,但又說不太出來自己為什麼喜歡的那種。至於這中間的過程發生了什麼事情,就在之後再和大家分享啦~

Featured image of post 如何在 Visual Studio Code 建置 Spring Boot 的開發環境

如何在 Visual Studio Code 建置 Spring Boot 的開發環境

用熟悉的 VSCode 來寫 Code 就是舒服

|
|

今天要教大家用安裝 Extension 的方式,用最熟悉的 VSCode 舒服地開發 Spring Boot 的專案~

事先準備

可以在 Terminal 打 java -version 確認自己有沒有安裝 JDK,像我這邊就是安裝了 OpenJDK 19.0.1

1
2
3
4
 ❯ java -version
 openjdk version "19.0.1" 2022-10-18
 OpenJDK Runtime Environment (build 19.0.1+10)
 OpenJDK 64-Bit Server VM (build 19.0.1+10, mixed mode)

安裝 Extension

首先我們打開 VSCode,這次我們總共要安裝兩個 Extensions ,準確來說應該是兩個套裝:

方法一:透過 MarketPlace 安裝

你可以從左邊這裡進到 MarketPlace,然後搜尋 Extension 的名稱,接著按 Install。 image.png

方法二:複製指令

或是你可以從上面的連結,複製這一段安裝的指令 image.png

然後在到 VSCode 裡面按下 CtrlP,在跳出來的小視窗貼上指令之後就會開始安裝囉! image.png

安裝好之後就可以來準備建立專案,記得兩個 Extensions 都要裝哦!

建立 Spring Boot 專案

在 VSCode 按下 CtrlShiftP 會跳出一個執行指令的小視窗,在這裡我們輸入搜尋找到 Spring Initializr: Create a Maven Project... 之後按 Enter。 image.png

接著是選擇 Spring Boot 的版本,我這裡選擇 2.7.7image.png

語言這邊選 Javaimage.png

Group Id 這邊我就先用預設的 com.exampleimage.png

Artifact 這邊我輸入 testimage.png

Packaging type 這邊我選 Jarimage.png

Java 版本我選 11image.png

Dependencies 這邊要選擇三個:Spring Boot DevToolsLombokSpring Webimage.png

接著就是選擇要專案建立的地點,這邊 VSCode 會幫你建立一個名字是上面輸入的 Artifact Id 的資料夾,然後把建立好的專案放在裡面。按右下的 Generate Into this folder 開始建立了。 image.png

噹啷!這個時候一個新的 Spring Boot 專案就被建立好了,按右下角的這個 Open 就可以打開剛剛的專案囉~(然後舊的視窗就可以關掉了) image.png

如果你不幸錯過了這個 Open,你也可以從上面的 File > Open Folder 選到剛剛的資料夾開啟他。 image.png

Hello World

建立好專案,我們就來寫個最簡單、只會回傳 Hellooo 的 API 吧~ 首先先打開 src > main > java > com example > test > TestApplication.javaimage.png

然後按下 Ctrl Shift P,選擇 Java: New Java Classimage.png

然後輸入 controller.TestControllerEnterimage.png

這麼做的話 Class 的檔案和資料夾就會被建立好。 image.png

接著我們在 TestController.java 內建立一支 API:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package com.example.test.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

  @GetMapping("/hello")
  public String Hello() {
    return "Hellooo";
  }
}

點一下左邊的 Spring Boot Dashboard,然後在點一下 Apps 這邊的開始,這個 Spring Boot 的專案就會跑起來了。 image.png

下面的 Terminal 也顯示 Server 在 port 8080 啟動了。 image.png

接著我們打開瀏覽器到 http://localhost:8080/hello,就可以看到 API 的回應! image.png

如果要結束執行的話,回到 VSCode 然後按這個停止按鈕就可以啦~ image.png

總結

今天我們在 VSCode 裡面用安裝 Extension 的方式來建置了 Spring Boot 的開發環境,並且用它往完成了一個簡單的 Hello World,我自己覺得用起來很舒服,甚至不亞於 Eclipse 等 IDE。如果也覺得不錯的話,記得在 VSCode 親自安裝試試看唷!

Featured image of post 網路世界的群雄割據:馬斯克對 Twitter 做的事情背後的意義

網路世界的群雄割據:馬斯克對 Twitter 做的事情背後的意義

原本我還天真地期待 Twitter 可能會成為一片淨土

|
|

Twitter 幾乎變成 Elon Musk 的私人財產

image.png

今年上半年還天真地想說 Twitter 被 Elon Musk 收購之後會不會是新的一塊淨土,但後來收購合約談不攏之後我就沒繼續關注這件事情。結果接近年底的時候 Elon Musk 的態度又大轉變。不過看來,Twitter 只不過是變成了下一個 Facebook 而已,甚至更糟糕。

如果今天信用卡不能用了

這種各大公司各自築起高牆把自己的領地圍起來,對我來說是很詭異的事情。拿大家比較熟悉也比較有痛點的事情來比喻好了:如果你住在臺灣,並且常使用電子支付的話,你會發現現在櫃台擺的 QR Code 越來越多了。但你有沒有想過,不管你拿的是哪家銀行的信用卡、不管是 Visa、MasterCard、JCB,你能在世界上的幾乎每一台刷卡機刷卡。為什麼信用卡不會有這種問題?這就是共同標準以及通訊協定偉大的地方。

在社群媒體的世界,RSS 就好比是信用卡系統,古老且泛用,不論是新聞網站、部落格、BBS 等等,也許各個網站平台不盡相同,但大家都是透過一樣說好的方式在互相傳遞訊息。但從 Facebook、Twitter、Instagram 這些新興且功能強大的社群平台開始茁壯之後,他們就紛紛砍掉對 RSS 的支援。這就像是 Line Pay 今天跟你說:「我們不再支援以信用卡作為您的支付方式,請儲值後再進行消費」。這完全不合理阿!也許信用卡和 RSS 跟不上時代,但各大公司該做的是制訂新的標準,這樣大家就不必去搞那些重複的建設,使用者也能享受單純、方便的優良使用體驗。

小蝦米對抗大鯨魚

其實,行動支付 QR Code 的整合確實有廠商正在推動。在社群平台,這件事情是由 Mastodon 發布的 ActivityPub 來實現。ActivityPub 做到的事情簡單說就是:你在 Facebook、他在 Twitter、我在 Mastodon,但我們彼此都能互相追蹤、按讚、留言。聽起來超級美好,但無奈是目前各個社群媒體的龍頭,出於自身利益的考量,不僅沒有加入 ActivityPub 的行列,甚至把 RSS 的支援也砍了,但大部分的使用者還是死守在那些平台上面。

好消息是,Tumblr 在上個月加入 ActivityPub,算是第一個加入這個行列的主流平台。而如大家所見,各大社群平台無一例外都正在殞落,如果那些平台不考慮做出什麼改變的話,各自一一關閉服務就是指日可待的事情了,想想當年的無名小站還有奇摩知識+。

所以還是老話一句啦,趕快去追蹤在 g0v.social 上的我,如果你是原本是在 mastodon.social 註冊帳號的話也可以直接追蹤我,這就是 ActivityPub 強大的地方。

Featured image of post 不喜歡社群媒體而離開超過一年的我,又決定要回來繼續使用了

不喜歡社群媒體而離開超過一年的我,又決定要回來繼續使用了

結果社群媒體還是讓我很失望

|
|

在前一陣子,我決定嘗試重新回到社群上看看,今天我就是要來談談這件事情。在這篇文章內,我會提到當初我為什麼決定離開社群媒體、是哪些原因讓我越不喜歡社群媒體、又有哪些原因讓我考慮再回到社群媒體、我如何重回社群媒體、以及回到社群媒體一段時間之後的感受。

而在開始我想先定義一下:由於我只和我的朋友在這兩個平台有連結,這篇提到的「社群媒體」聚焦在 Meta 的社群媒體平臺,也就是 FacebookInstagram;其他如 Twitter、Mastodon、PTT 等,並非以自己交友圈為主要互動對象的社群平台,不在這篇文章的討論範圍。

沒有社群媒體的一年

大約一年前,我決定擺脫社群媒體的束縛,我把 Facebook 和 Instagram 都登出,僅僅是因為幾篇已經脫離社群媒體的人分享的文章。那幾篇文章說著社群媒體多糟糕,脫離社群的他們感到多麼美好。確實,離開社群媒體這件事對我的感受是正面的,我奪回了很多時間可以去完成我想完成的事情,與此同時,也許因為我我並沒有非常依賴社群媒體,我並沒有出現明顯的戒斷症狀。

就這麼過了一年,這個是個好決定嗎?

這段期間我養成了閱讀和寫作的習慣,也完成了不少目標,不過這些都只是表面上的結果。我認為離開社群媒體對我造成最大的改變是思緒不再被「想把手機拿起來滑兩下」這個行為打斷。又或者說,在腦袋放鬆的時候,也許是在走路、或是在等車,「想滑動態」的這個想法不會跳出來佔據我的思維,也可以說是心無「雜念」。因此,我花更多的時間在思考、觀察、或是專注在自己的目標上。

我不喜歡社群媒體的原因

這一年來,我都是對社群媒體反感的,因為使用社群媒體對我造成的負面影響之大,是完全無法忽略的。這部分大概可以分成三個面向來討論:

社群媒體佔據了我

如同我在上面提到的,隨時都想滑兩下動態的這個行為佔據了我很大一部分的思緒。不僅如此,社群媒體還佔據了我非常多的時間,一天花在社群媒體上超過兩個小時都算是正常的事情,一個月累積下來就是 60 個小時左右。60 個小時可以完成多少事情?作為參考,朝九晚六一個禮拜的工作時數也就 40 個小時而已。 更糟糕的是,在社群媒體上能接收到的資訊,其中真正有用的少之又少,大部分都與自己無關,不然就是廣告;更別說那些腥羶色的的品質內容、不實訊息了。

社群媒體上存在很多「塑膠連結」

在 Facebook 上百甚至上千的臉友、或是 Instagram 上難以見底的限時動態,確實,我和那些人是有一定程度的連結,甚至偶爾有機會互相留言、回限時動態。這時,我給自己的問題是:「然後呢?」我必須承認有少數例外,但大部分的情況是還真的沒什麼然後。這些人數量龐大,但都是只見過一兩次的的人,不然就是只是在社群媒體上有共同朋友這種薄弱的關係。 我不想騙自己了,我沒興趣去經營那種這輩子之後的時間可能只會互相留言一兩次的關係。事實上,說搞不好根本就想不起來那些人是誰、我和那些人是怎麼認識的,講難聽一點,那些人和陌生人幾乎相差無幾

社群媒體在綁架我,以及我周遭的人

Meta 平台是極為封閉的平台,我幾乎無法用官方的網站或是 App 以外的方式取得平台上的資訊,我被迫要忍受一堆廣告以及糟糕的使用體驗,就算那些資訊來自我最親的親人也一樣。我猜你可能會想問:不然呢?

不是的,網路不是這樣運作的,大部分的網站、部落格、甚至是 Twitter,我都能夠用 RSS 或寫程式去取得那些平台上資訊,我可以很輕易的獲取我需要的訊息,而不必打開特定的網站或 App。

這是一個惡性循環,因為資訊只能從他們的平台看到 → 大家必須使用他們的平台 → 為了讓大家看到,所以必須他們的平台上發佈資訊 → 資訊只能從他們的平台看到。雪球越滾越大,最後實際造成的結果就是:大家都很不滿意 Instagram 出現很多不認識的人的貼文、以及很多短影片,但只有極少數的人能夠離開 Instagram。

社群媒體無法被取代的地方

說是這麽説,我還是決定要繼續使用社群媒體,因爲社群媒體還是有他的必要性,我在沒有使用社群媒體的一年也確實遇到不少麻煩。這次,我決定來榨乾社群媒體的價值,畢竟在前一陣子找租屋處的時候,還是很不爭氣地下載了 Facebook 來用。

被關在平台裡的資訊

如果你 10 到 15 年前就開始用網路的話,那你應該會對 Discuz! 和知識+ 有點印象,利用搜尋引擎找到的資料很多都來自這兩個來源。不過,自從 Facebook 推出社團功能之後,很大一部分的討論就被社團吸收,而 Discuz! 和知識+ 也在幾年內迅速凋零,甚至臺灣地區的知識+ 在 2021 年中就停止服務了,那上面有多少知識結晶欸!在那之後,搜尋引擎就已經很難找到那些有用的資訊,只能從社團裡面找到(而且 Facebook 的搜尋還很難用)。

弱連結

雖然我說社群媒體上面有很多塑膠連結,不過我還是必須承認,有些很久沒有聯絡的朋友在某些時機還是能幫上很大的忙。就拿我前陣子找租屋處的事情來說好了,當我在 Facebook 和 Instagram 上說我需要找房子的時候,就有兩三位朋友剛好正在找室友、或是幫我注意到來自他們朋友的空屋消息。如果不是我在這些平台上和他們還有連結的話,我也沒有機會得到那些資訊。

規則

說是要回歸,但也不是把 App 載下來登入之後就開始用這麼簡單。為了盡量避免社群媒體的缺點,我給我自己訂下了這些規則:

限制使用時間

我用保持專注的 App 來限制 Facebook、Instagram 兩個 App 的使用時間,每滿 5 分鐘就要間隔 6 個小時才能再使用,這樣就能確保我不會在社群媒體上花太多時間。

盡量使用其他媒介和朋友聯繫

為了不要把自己和朋友被綁在社群平台上,如果有值得討論的主題,我應該透過其他通訊軟體來交流,如果是比較深入而且沒有急迫性的話題,用 email 也可能是不錯的選擇。

事實上,過去好幾個月,我每週都會寄一封 email 和朋友更新近況,我也收到不少 email 甚至是紙本的回信,我覺得這種深度的連結是在社群媒體上完全體驗不到的。

不在社群媒體上發布「獨家」內容

如果只把我自己的資訊發布在封閉的社群平台上,代表其他人也一定要透過平台官方提供的管道才能取得。我認為這在道德上是站不住腳的,我沒有理由、也不想任何人因為我而一定要使用某個商業公司提供的服務

另外,還有一個問題會產生:只用社群平台在紀錄自己的生活的話,代表那些平台掌握了這好幾年來的數位紀錄,要回顧的時候,就只能再回去這些平台上。並且,如果這些平台沒有提供一個妥善的匯出功能的話,在這些平台最後關閉的時候,這幾年的紀錄也會跟著平台一起消失

回歸社群媒體的感受

於是我在 Facebook 和 Instagram 發了一篇文,和大家說明一下我要回到社群媒體了,不過後來發現事實上是根本沒有多少人會在意。而再過了三個禮拜,我能來談談我的感受了。

老實說,社群媒體比我預想的還要無聊很多。我給自己的規則是每 5 分鐘要間隔 30 分鐘,但在大部分的情況下,我根本用不滿這五分鐘,幾乎看不到使用時間到了的提醒。Facebook 是一如往常地在推一些無關緊要的貼文;Instagram 上的大家相比一年前貼文量變少很多,至於那長長一排的現實動態,我有興趣點開的則沒有幾個。

重新開始接收社群媒體上的資訊以後,確實是得知了一些之前不知道的朋友現況或是活動資訊,不過,也就僅此而已,知道那些資訊並沒有使我做出不一樣的行動。另一方面,額外得知某些朋友之間的連結,總在提醒自己似乎不在這個朋友圈內;看著別人光鮮亮麗的生活表象,也不禁覺得自己是不是過得有點糟糕。這樣一來一往,我並沒有因為接收到額外的資訊而滿足,反而因為這些資訊讓自己累積負能量。

幾個禮拜後的結果是:我越來越沒有動力去打開這些 App,裡面沒有什麼吸引我的東西,甚至有可能會因為裡面的資訊而讓我產生負面情緒。我不知道有沒有機會從社群媒體上得到我想要的東西,但我很確定,我不需要社群媒體也可以過得很好,也許在這之後,社群媒體就只會是我拿來殺時間的工具而已。

羅技 G300s 滑鼠滾輪維修教學

詳細記錄羅技 G300s 滑鼠滾輪故障的維修過程,包含拆解、清潔與更換零件,讓您的滑鼠重獲新生。

|
|

用了五年的羅技 G300s 一直是我的愛用鼠,總共六個可自訂鍵讓我愛不釋手。不過前陣子都直接用筆電的觸控版,比較少用滑鼠,最近再回來用這顆滑鼠的時候就發現…滾輪超級遲鈍,滾了好幾下才畫面動了一兩格。這顆滑鼠也停產了,沒辦法,只好死馬當活馬醫,先拆了再說。

把滑鼠背面的黑色墊片用美工刀撕下來之後,就可以看到螺絲。

2022-10-28-00-56-00.jpeg

原本以爲是編碼器壞掉了,結果拆開之後發現是滑鼠滾輪的橡膠出油,把側邊的溝槽都填滿了,變得很光滑,這樣編碼器當然偵測不到啊!

2022-10-28-00-56-18.jpeg

這個溝槽很窄,還有點深,不太能用衛生紙直接擦乾淨。因爲不太清楚怎麽把滾輪拆下來,我只能用美工刀一格一格把油挖出來。組裝回去接上電腦之後,就能正常使用了!

2022-10-28-00-58-25.jpeg

其實滾輪的橡膠部分已經有點爛爛的了,今天這樣子也沒有辦法清得很乾淨,也不曉得還會不會再次出油,只能用這種方法儘量延長他的壽命了。

Featured image of post 爲什麼這家店在 Google Maps 上收到這麼多負評?

爲什麼這家店在 Google Maps 上收到這麼多負評?

這是我在 Google Maps 找吃的東西的時候,看到其中一間胖老爹的評價區...

|
|

這是我在 Google Maps 找吃的東西的時候,看到其中一間胖老爹的評價區:(連結)

image.png

我稍微算了一下大概有 117 個 1星評價,佔全部 499 評價中的 23 %,大多是抱怨態度差、等餐流程不滿意、東西不好吃,其中不乏人身攻擊、情緒性的謾罵。做爲參考,附近的 牛肉湯 是 12 / 125 = 10%,還有平均 3.6 星的 悟饕池上飯包 是 13 / 92 = 14% (四捨五入)。這兩間店的負評也大多就事論事,很少像這間胖老爹一樣受到這麼多謾罵。

我是第二次到這間胖老爹外帶了,兩次的消費體驗都不差,店員都有簡單介紹一下和主動提供單子給我畫,買全家桶的那次還問我要用桶子裝還是用紙袋裝,在我猶豫不決的時候還跟我稍微比較兩種容器的優缺點。整體來說,也許口氣會讓一些人覺得沒那麼客氣,但我主觀的感受覺得不覺得應該收到這麼多負評。餐點的部分就是就是胖老爹的平均水準,好吃沒話說。

當然,不管是親自的消費體驗或是做爲參考的週邊店家,樣本數都非常的小,只是我運氣好都沒有遇到問題也是有可能的。(事實上,我還刻意避開 5 星評價異常多的店家)

其實我已經不是第一次遇到類似的事情了,有一些我常吃的店也遇到一樣的情況。「既然可以買 5 星評價就可以買 1 星評價」、「也許就是附近的店家的惡性競爭手段」過去的我就是這麼覺得的。終於在這天我好奇到蝦皮上找找有沒有相關的服務,結果是:我找不到任何出售刷 1 星評論的服務,找不到任何有關惡意負評的相關討論。

我仔細想想才發現:如果我今天是 1 星評論的供應商,我沒有必要、也應該避免人身攻擊、謾罵、或任何可能對我帶來麻煩的言論。負評的說服力也比好評高很多,簡簡單單的一句「肉很柴不好吃」可能需要五則圖文並茂的好評才能互相抵消。再說,我可能也沒有那麼多創意想到那麼多罵人的話:)

如果不是惡性競爭,那可能是什麼?我很不想抵抗這個事實,但也想不到其他的可能,就是真的有這麼多 EQ 差又口不擇言這樣水準低落的人,就算是 PTT 八卦板底下的鄉民在噓人也不常罵得這麼難聽。也許就是在他們被主管罵了一整天,想要稍微放縱一下卻遇到了一點鳥事,就只好把情緒都發泄在這裡。

我還是對這個世界有一點小小的期待的,我不能接受這個世界有這麼多素質這麼差的人。


更新:後來有網友補充外送界普遍有刷負評的文化,這有可能就是外送員的評論。

Featured image of post 如何用 ASCII 來拍英文報告

如何用 ASCII 來拍英文報告

其實工具都有現成的,根本就是 0 難度

|
|

如果你沒有看過類似的東西的話,你可以先看看這個影片…

source: 羅中圻 - https://www.youtube.com/watch?v=7VFTcmGRM-k

怎麽做到的?

我必須先承認這不是我寫的,是用一個叫做 video-to-ascii 的酷東西產生的 XD

看起來蠻酷炫的,而且使用起來也很簡單~

傳送門在此:https://github.com/joelibaceta/video-to-ascii

事前準備

如果你也想要在你的電腦上跑這套工具的話,你必須要先滿足以下幾個條件:

  1. Linux 或 macOS 作業系統(如果你還在用 Windows 的話可以嘗試虛擬機或是安裝 WSL)
  2. Python3 和 Pip3(如果有 Python3 通常就會有 Pip了)

如果你想要同時能夠播放聲音的話則還需要 PortAudio 和 FFmpeg,不過我就算都安裝了也沒有成功播放聲音,可能 PortAudio 需要適當的設定才行><

安裝

如果上面的條件有滿足的話,就可以來安裝 video-to-ascii 了。

打開你的終端機(Terminal),然後用 Pip3 來安裝:

1
pip3 install video-to-ascii

要安裝含聲音的版本則是:

1
pip3 install video-to-ascii --install-option="--with-audio"

是的,這樣就安裝好了!

使用方法

使用方法也是非常簡單,只需要輸入:

1
video-to-ascii -f myvideo.mp4

myvideo.mp4 指的是你要播放的影片。

你應該能夠在終端機裡看到畫面了,但有可能覺得頓頓的。這是因爲這套工具其實並沒有對多核心優化,當要運算的解析度太高的時候就會有點 lag。

至於解決的方法有幾個:

  1. 用好一點的 CPU 來跑
  2. 把終端機的視窗縮小
  3. 把終端機的字體放大(試試 <Ctrl +>),等效需要渲染的解析度就變小了
  4. 先渲染好再播放(下面會提到)
  5. 直接修改程式碼,讓他能夠支援多核心或是利用顯卡加速

我的 CPU 是 i5-4590,在上面的那個影片的解析度(每行的字數)大概就是它的極限了。如果你的 CPU 單核心的性能夠好的話,也有可能順到不行,不過我猜大部分的筆電使用者得到的結果應該是不會比我好到哪裡去 XD

選項

video-to-ascii 也有提供幾個選項,比較值得提的有這幾個:

模式

這裡的模式是指可以選擇用不同的字來組成畫面,有 filled-asciiascii-colorjust-ascii 三種可以選擇,使用的方法則是:

1
video-to-ascii -f myvideo.mp4 --strategy <模式>

這邊也附上一張官方的圖片提供參考

modes

預先渲染

假如你的電腦真的無法負荷如此的運算量的話,你也可以試試先渲染好再播放,使用的方法是:

1
video-to-ascii -f myvideo.mp4 -o <檔名>.sh

執行之後會開始慢慢跑,結束的時候會生出一個腳本檔,你可以直接執行它來播放或是傳給朋友看:

1
sh <檔名>.sh

參考資料

  1. https://github.com/joelibaceta/video-to-ascii
Featured image of post 如何在 Hugo / Wowchemy 文章底下插入 LikeCoin Button

如何在 Hugo / Wowchemy 文章底下插入 LikeCoin Button

讓讀者幫你免費抖內

|
|

前置作業

  1. 註冊 Liker ID
  2. 一個 Hugo 網站

覆蓋主題預設頁面

由於 Hugo 支援以覆蓋的方式客製化主題,所以不必去直接去修改 theme/ 裡的檔案,而是複製一份出來,然後把預設值覆蓋過去。

Hugo

一般來說,Hugo 的文章 Template 是 [根目錄]/theme/<主題名稱>/layouts/_default/single.html,你可以直接將它複製出來到 [根目錄]/layouts/_default/single.html

1
2
mkdir -p layouts/_default/
cp theme/<theme_name>/layouts/_default/single.html layouts/_default/single.html

Wowchemy

而我使用的主題是 Wowchemy,以下也會使用這個主題來示範。這個主題是透過 Go module 來載入,Repository 內沒有 theme/ 這個資料夾,所以必須要到源頭去找並且自己建立檔案。

找到 Wowchemy 的 single.html 發現他們把文章底下的有的沒的東西,像是標籤、分享按鈕、作者,之類的東西都包在 page_footer.html 裡面了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{{- define "main" -}}

<article class="article">

  {{ partial "page_header" . }}

  <div class="article-container">

    <div class="article-style">
      {{ .Content }}
    </div>

    {{ partial "page_footer" . }}

  </div>
</article>

{{- end -}}

所以再找到 wowchemy/layouts/partials/page_footer.html,就能看到文末的區塊確實都是被包在這個檔案裡面。所以建立 [根目錄]/layouts/partials/page_footer.html,然後把 Wowchemy 的內容複製進去。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{{ partial "page_edit" . }}
{{ partial "tags" . }}
{{ partial "components/page_sharer" . }}
{{ partial "page_author" . }}
{{ partial "comments" . }}

{{ if .Params.pager }}
<div class="article-widget">
  {{ partial "components/pager" . }}
</div>
{{ end }}

<!-- {{ partial "page_related" . }} -->

這時候使用 hugo serve 來預覽網站應該不會有任何的變化和報錯,你可以在其中插入一些文字看看是否真的有效果。

插入 LikeCoin Button

在剛剛建立的檔案 [根目錄]/layouts/partials/page_footer.html 中插入一行 {{ partial "likecoin" . }},位置可以隨意調整,像我就調整成這樣:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{{ partial "page_edit" . }}
<!-- {{ partial "page_related" . }} -->
{{ partial "likecoin" . }}     				<!-- 插入這行 -->
{{ partial "components/page_sharer" . }}
{{ partial "tags" . }}
{{ partial "page_author" . }}
{{ partial "comments" . }}

{{ if .Params.pager }}
<div class="article-widget">
  {{ partial "components/pager" . }}
</div>
{{ end }}

然後再建立一個檔案 [根目錄]/layouts/partials/likecoin.html,在裡面填入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{{ if site.Params.features.comment.likecoin_button }}
  {{ $config := site.Params.features.likecoin_button }}
<iframe 
  class="LikeCoin" 
  height="200"
  src="https://button.like.co/in/embed/{{$config.likerID}}/button?referrer={{ .Permalink }}" 
  width="100%"
  frameborder=0>
</iframe>
{{ end }}

接著再到 [根目錄]/config/_defualt/params.yaml,在 features: 的最後加上 Liker ID,像是這樣:

1
2
3
4
5
6
7
...
  map:
    provider: ''
    api_key: ''
    zoom: 15
  likecoin_button:
    likerID: '<你的 Liker ID>'    # 改成你的 Liker ID

這個時候 LikeCoin Button 應該就會正確插入到網站裡面。

參考來源

https://docs.like.co/v/zh/user-guide/creator/self-host/hugo

https://wancat.cc/post/hugo-install-likecoin/

https://github.com/wowchemy/wowchemy-hugo-themes/pull/2830/files

Featured image of post 記一次安全帽被偷的經驗

記一次安全帽被偷的經驗

偷安全帽死全家

|
|

9/20 星期二晚上,我和 Ivy 吃飽飯完想說找個地方散步消化一下,我們就把車停在西華南街的停車格上,跑去臺南醫院對面的 Focus 和新光三越逛逛。

image.png

回來牽車的時候,車上多了一張收費單,但我的後座少了一頂安全帽。我的安全帽是買車送的白色 3/4,很普通的那種。附近也有不少人把安全帽直接放在車上,但不管我怎麼找就是找不到我的——我的安全帽被偷了。

image.png

距離宿舍門禁只剩下不到一個小時的時間,在對面的安全帽店早就已經關了。我沒有安全帽意味著我沒辦法透過機車移動,不管是自己騎車或是被載都一樣。沒辦法透過機車移動帶來的問題有兩個:我必須想辦法趕回宿舍、明天之後我要怎麽去上班。在內心的天使與惡魔對抗許久之後,我決定不加入這個「愛心帽」的循環,打算先去附近的北門派出所一趟。

其實我也不太確定到了派出所我能得到怎麽樣的協助,也許警員可以幫我叫車送我回宿舍;也許我會看到我被偷的安全帽(想太美);也許有失物招領逾期的安全帽可以借我頂一下,無論如何,我還是抱著試著碰碰運氣的心態去派出所一趟。在路上,Ivy 也一直在思考到底怎麼辦,這時他的聰明才智就派上用場,他想到我想不到的解決方案:去附近的 24H 小北百貨買一頂。得到這個想法後,由於時間緊迫,我提議分頭進行——我去派出所尋求幫助,Ivy 先往回走。

到了派出所,描述我的狀況之後,員警問我是不是要借安全帽以及要不要追究責任,他非常熱心,回答也乾脆利落,聽起來借帽子是他們很習慣處理的事情了。我問那個地方是不是他們的轄區,他的回覆是否定的,他也提醒我,我有六個月的時間可以選擇要不要調監視器報案,但當然是要到該轄區的派出所。沒過多久,他就從後面拿出一頂帽子給我,看起來是淘汰的警用安全帽,上面的貼紙的確是讓人不會想要拿來一直戴=..= 借這頂帽子我沒有簽任何一次的名,他也告訴我可以還到任何一個派出所,但還是儘量還到原本的地方。因爲我還趕時間,還來不及考慮報案的事情,一陣道謝之後就趕快去騎車回宿舍了。

2022-09-23-09-51-17.jpeg

2022-09-23-09-51-27.jpeg

回宿舍之後,Ivy 說他有多的一頂安全帽可以給我(而且還很可愛),我覺得我非常的幸運。同時,我也在思考要不要報案的問題,結果因爲那個路段天色暗且應該沒有監視器,加上我的安全帽折舊之後應該也沒剩多少價值,還要跑一趟平常不會經過的分局不太划算,而且沒安全帽的事情基本上已經解決,就不打算去報案了。

隔天 Ivy 下班後專程拿安全帽來給我(謝謝 Ivy),再隔天我就拿者平安帽去其他分局還。意外的是,那邊的員警很委婉地跟我說沒辦法這樣還,結果我跑了另外一間派出所才成功歸還。

Featured image of post 我對學弟比了中指

我對學弟比了中指

爲什麼學弟就挨了中指伺候?

|
|

事發經過

前幾天有剛下單位的學弟,我在和他交接訂便當的事情的時候,我問他有沒有什麼想到要訂哪一家,他給我的回答是八方雲集,我回了他一個大大的中指。

如果我今天是那個學弟,我的反應有可能是下面這幾個選項:

  1. 跟學長 Argue,我覺得八方雲集很不錯啊,八方雲集到底怎麽了?
  2. 認知到自己的想法有點瑕疵。八方雲集也許不是個好提議。
  3. 因爲自己的提議被拒絕而受挫,但誰叫自己要提出一個這麼蠢的提議。
  4. 更有可能是以上皆是。
  5. 不存在「學長對我比中指有點過分」這種想法。

結果是:我們稍微來回討論,但我非常堅持我的意見,且他在這個辦公室訂餐的經驗遠少於我,八方雲集這個提議被否決。而我也提供他非常多的選項,這件事情就這樣結束。

其實我並不是那麼鄙視八方雲集,真的不知道吃什麼的時候,八方雲集也不會是個非常差的選擇。我當然也知道是我自己對水餃的標準太過嚴苛,八方雲集對大部分人來說一點都不糟糕,甚至有可能是不錯的一餐。但那不是重點,我想說的是:學弟只是說出他認真考慮過後的想法,爲什麼就挨了中指伺候?

覆盤

首先,八方雲集完全不會是我訂餐會考慮的選項,在確定有其他不錯的選項的時候我完全不會想要吃,我也不能接受我幫同仁訂的餐是連我自己都不想吃的東西。

既然我不能接受我和同仁的午餐是八方雲集,我就必須阻止這件事情發生。我有權力也有能力做到這件事情,而最快也最有效的方法就是:提出反對意見。

當這個矛盾出現的時候,我的非理性腦運作得非常快。應該只需要不到半秒的時間,我的非理性腦就意識到這個矛盾的存在,並且認爲這是一件荒謬的事情。而這個時候我就做出了我的回應:送了學弟一根中指。

爲什麼會做出這樣的回應?我必須說,我一點都沒有瞧不起學弟的意思,相反地,我認爲他是可以和我輕鬆溝通的人。也許你會覺得我明明對他這個人沒有什麼意見,爲什麼要這麼刻薄?要回答這個問題,我要先解釋一下那根中指的含義。如果要用言語解釋的話,那大概是:「別鬧了,你的提議有夠智障,我 100% 反對」。這麼一解釋我才發現:原來我的非理性腦覺得他在跟我開玩笑,即便我的理性腦知道這不是一個有問題的提議,但我的非理性腦需要試圖解決我腦中的矛盾,這樣一個荒謬的提議我沒有辦法接受。於是我用中指回應,因爲我覺得我們足夠友好,我覺得他能接受我覺得他在開玩笑,並且,我覺得對他比中指這件事情也不會造成麻煩的後果。

結語

這一整件事情也許可以窺探男性相處模式的冰山一腳,包括:比中指、非理性腦解決矛盾、被非常積極地反對之後的想法。我覺得,男性模式不是單純「直來直往、沒有心機、不重視對方感受」這樣的隻言片語就能夠描述的。

Featured image of post 拒絕演算法洗腦!RSS 讓你奪回閱讀的「自主權」

拒絕演算法洗腦!RSS 讓你奪回閱讀的「自主權」

受夠 Facebook、Instagram、YouTube、Twitter 只會推給你廣告、短影片、或是一些不相干的資訊了嗎?

|
|

受夠 Facebook、Instagram、YouTube、Twitter 只會推給你廣告、短影片、或是一些不相干的資訊了嗎?今天我要告訴你什麼是 RSS、爲什麼要用 RSS、以及如何使用 RSS,讓我即便將近一年不使用社群媒體,我依然不會錯過重要的資訊!

RSS 是什麼

你的專屬情報蒐集小精靈

你可以把 RSS 想象成一個你的專屬情報蒐集小精靈,你只要跟他說:「沒事就去看看社區公佈欄有沒有什麼新的消息,再順便幫我去看看超市有沒有什麼東西在特價,經過車站的時候如果車子誤點了也順便告訴我。對了,每一次發票開獎的時候也記得要跟我說哦!」,之後你只要坐著翹腳坐在沙發上,等著聽工讀生蒐集到的資訊就好了。

RSS 就是這麼神奇工具!不管是新聞、部落格、PTT 的新文章、Youtube 的新影片、podcast 的新一集,你都可以透過 RSS 把它們彙整到同一個地方一次看完。而且使用 RSS,沒有不透明的演算法,沒有不相干的資訊,只有你想看的內容,你可以自己決定你想看到甚麼樣的內容!

先進的古老技術

其實 RSS 早在 20 多年前就出現了,曾經是很多人的閱讀方式,一直到社群媒體的崛起才開始沒落。Google 也曾經提供名爲「Google Reader」的 RSS 閱讀器,一直到 2013 年才宣佈結束營運,宣告 RSS 時代的結束,成爲非主流的資訊獲得方式。直到近年,大衆對社群媒體不滿的氣氛正在醞釀,以及臺灣收聽 Podcast 的人數大幅上升,才有比較多關於 RSS 的討論。至於 Google 關閉 Google Reader 的原因衆說紛紜,但與以廣告及用戶個資爲中心的商業模式脫不了關係。

也許你已經在使用 RSS了,但你不知道

你有注意到 Google Podcast 有一個「透過 RSS 動態消息新增」的功能嗎?

image.png

Podcast 近 20 多年來的運作的模式正是建立在 RSS 上的,與 Spotify 或是 YouTube 這種創作者上傳作品到平臺的伺服器,觀衆再到平臺的伺服器收看的模式不同,創作者必須自己架設伺服器,或是委託服務商代管,然後再把收聽連結 (也就是 RSS 連結) 提交到各大平臺上 (例如 Apple Podcast),觀衆則直接從內容的源頭收聽。這麼做的好處是:平臺無法完全掌控創作者的內容,即使作品被所有的平臺下架,觀衆依然可以從源頭找到被下架的作品。

你該使用 RSS 的理由

不會錯過重要的內容,也不會看到與你無關的

Facebook 和 Instagram 典型的內容排列方式是:在廣告以及與你無關的內容裡面插入重要的內容,而當你爲了看到那些你想看的,你就不得不浪費時間在那些你沒興趣的內容。RSS 沒有那些近 10 年才有的那麼多詭異的新花樣,演算法就是「把你訂閱的內容,按照資料夾和時間排序」這麼簡單而已,你訂閱了哪些內容,你就只會看到哪些,而且不會有漏網之魚。你的時間和注意力是寶貴的(不然廣告就不會那麼值錢)你沒有理由把時間拿去花在你沒興趣的東西上,你能決定你要看到哪些內容,沒有人能逼你看你不想看的。

一樣是打發時間,你可以看更優質的內容

也許今天你就是在等車的 3 分鐘覺得無聊,你不在乎你怎麽度過這 3 分鐘,你只希望這 3 分鐘趕快結束就好,所以你打開社群媒體開始滑。運氣好你看到你想看的東西;運氣不好你看到騙點閱的新聞、低能的短影片、無聊的廣告、引戰的偏激言論。

Garbage in, garbage out.

你應該能同意社群媒體上充斥著很多品質拙劣的內容,長期暴露在這種低品質內容是有害的,那會拉低思考的水準。你不必隨時都捧着書或者是論文在看,但如果你能避免攝取品質過低的內容,思考以及輸出的品質就會相應的提高。

使用 RSS 並不意味要一定要與社群媒體斷捨離

還是那句老話,「小孩子才做選擇」,擁抱 RSS 的同時當然也可以一邊繼續使用社群媒體,一邊用 RSS 獲得重要的資訊,一邊用社群媒體探索。這麼一來,就不用在演算法裡面慢慢撈出自己想要看的東西。

事實上,2015 年以前你是可以直接用 RSS 訂閱 Facebook 上的,是 Facebook 有意關掉 RSS 的功能,爲的是把你綁在他們的 App 裡面,這是爲什麼我決定不再使用 Facebook 的決定性因素。你不必像我這麼偏激和極端,但你可以做的是跨出第一步,看看外面的世界長什麼樣子。其實,也有像是 Mastodon 的優秀的社群媒體,不只沒有不透明的演算法,也對 RSS 有完整的支援。

大科技公司的腐敗

建立在廣告的盈利模式越來越不可靠了

Google 在 2013 年關閉 Google Reader、Facebook 關閉 RSS 的服務、YouTube 推出會員和 donate 功能、Instagram 的廣告和短影片越來越多,其實這幾件事情背後都指到同一件事——以廣告盈利的商業模式快撐不下去了。因爲使用 Google Reader 就不必到原網站看廣告,所以就不讓大家使用 Google Reader;因爲有 RSS 的服務大家不必打開 Facebook 的 App,所以關閉 RSS;因爲 5 秒的廣告帶來的盈利不夠,所以從會員抽成,甚至插入更多的廣告;因爲用戶花在 Instagram 的 App 的時間不夠長,所以推更多短影片試圖留下更多的使用者,好讓 Instagram 推更多廣告。

大公司的壟斷

Facebook 在 10 年前還有提供 RSS 的服務,現在只留下使用門檻不低的 graph API (另一種資訊的交換方式);Google 也在 2013 關閉 Google Reader,他們都在儘量不讓你知道 RSS 的存在。諷刺的是,Facebook 支援使用 RSS 來匯入內容並且自動發佈,這種拿別人好處自己卻不願貢獻是自私的商業壟斷行爲。Instagram 也是類似的情況,Meta 併購 Instagram 是明智的商業決策,許多年輕使用者當初想逃離 Facebook,以爲找到新天地,沒想到還是逃不過 Meta 的魔掌。

正是如此,Meta 才握有這麼大的權力可以影響你的閱讀體驗以及生活,不管是演算法、廣告、短影片政策,你爲了得到 Meta 的平臺上才有的資訊,你就只能吞下去

隔壁棚的 Twitter 則是在近兩次美國總統大選期間,爆出不少「名爲打擊假消息,實爲控制輿論」的風波。Elon Musk 的併購案也在最後踩剎車,原本的一絲曙光也化爲泡影。

簡單好用、功能強大的 RSS 閱讀器——Feedly

你在網路上用「RSS」、「Feed」、「Reader」之類的關鍵字可以找到很多的 RSS 閱讀器。我今天要介紹的是跨平臺的雲端 RSS 閱讀器 Feedly。Feedly 的免費方案有三個資料夾的上限以及微量的贊助商廣告,如果你介意的話也可以考慮付費使用或是使用其他的閱讀器啦~

(如果對雲端服務還是有疑慮的話,也可以考慮使用單機的 RSS 閱讀器,或者是考慮自己架 Fresh RSS)

image.png

註冊

先到 feedly.com 點首頁的 「GET START FOR FREE」就可以註冊免費帳號,既然我們是要逃離演算法那我們當然是選擇直接使用 Email 來註冊!

image.png

訂閱你喜歡的網站

我這邊以 Feedly 示範,如果你使用的是其他的閱讀器也可以用類似的方式訂閱!

首先我們到想要訂閱的網站,然後在網站裡找到 RSS 的圖案或連結
在此附上 這邊的 RSS 連結

點進去之後你的眼睛就會很花,但你只要確認開頭有標出他是 RSS 就可以了,沒問題的話就把網址複製起來。

RSS example

然後我們回到 Feedly,點左邊的「加入」,輸入剛剛複製到的網址按 Enter,然後點 「FOLLOW」,再決定要放到哪個資料夾裡面就完成訂閱!

image.png

你也可以透過 Feedly 內建強大的搜尋引擎找到你要的 RSS 來源。

image.png

小撇步

  1. 有時候網站的 RSS 不會放在很明顯的位置,你可能要花點力氣才能找到。例如 報導者 的 RSS 就藏在網頁最底下的一個不起眼的小角落。

報導者 RSS 位置

  1. 你可以在一個網站的網址後面加上 rssfeedindex.xml 來猜到一個網站 RSS 來源,例如我的部落格就是 https://blog.giveanornot.com/zh-hant/index.xml

  2. 你可以用 https://www.youtube.com/feeds/videos.xml?channel_id=<頻道 ID> 來透過 RSS 訂閱 YouTube 頻道。

總結

以上就是爲什麼要使用 RSS 以及 RSS 的簡單使用方法啦,在這裡我也列出我的 RSS Feed:

參考來源

Featured image of post 免費去中心化同步備份神器 Syncthing | 如何跨平臺同步 Logseq

免費去中心化同步備份神器 Syncthing | 如何跨平臺同步 Logseq

有了這個就不需要 Google Drive 了啊

|
|

Syncthing 是去中心化的同步軟體,也就是說,它的運作方式不像是 Google Drive 這種雲端硬碟,需要一個伺服器才能運作。相反地,它的運作方式是讓需要同步的設備直接連線,所以就不像 Google Drive 一樣會有空間不足的問題嘍~

安裝

Linux

使用 paru 從 AUR 安裝

1
paru -S sycnthing

使用 systemctl 來啓動服務

1
2
sudo systemctl enable syncthing@$USER.service
sudo systemctl start syncthing@$USER.service

接著就可以到 http://localhost:8384/ 的 Web GUI。

image.png

Android App

F-Droid 上直接下載安裝即可。

使用方式

新增同步資料夾

點一下添加資料夾。

image.png

接著取個名字,設定一下要同步的資料夾。我這邊是打算拿來同步 LogSeq 的檔案。

image.png

在檔案版本管理這邊我選擇「變動式檔案版本控制」,以防自己手殘改錯或是刪錯東西。

image.png

Syncthing 也可以設定要忽略的檔案,我這邊就暫時先不設定。

image.png

新增同步裝置

點右下角的這串代碼可以查看自己完整的識別碼還有 QR Code。

image.png

image.png

接著在 Android App 裡面點右上角的「+」。

2022-09-06-16-36-30.jpeg

然後點右邊的掃描 QR Code,之後點電腦上的 QR Code,識別碼就會自動被輸入,然後就可以點右上角的確定。

2022-09-06-16-38-38.jpeg

回到電腦上的 Web GUI,會發現有一個新的連線請求,確認沒有問題之後就可以新增。

image.png

我這邊把需要同步的「LogSeq」打勾,其他的我就先不設定。

image.png

回到 Android App,點資料夾這邊右上角的「+」。

2022-09-06-16-40-23.jpeg

對應電腦上的資料輸入,然後點右上角的確認。

image.png

2022-09-06-16-41-13.jpeg

這時候就會自動同步了。

image.png

打開 LogSeq 的 Android App,也可以看到資料確實有被同步過來

2022-08-31-15-40-17.jpeg

Reference

https://wiki.archlinux.org/title/syncthing#Autostarting_Syncthing

Featured image of post 把資料存在 Google 雲端很可靠?大錯特錯!

把資料存在 Google 雲端很可靠?大錯特錯!

Google 就是拿你的資料在綁架你啊

|
|

他所有的資料都拿不回來了,只因爲遠端看診拍的照片

2021 年二月,Mark 發現兒子的生殖器官發炎腫脹。那時正是 Covid-19 大流行的時候,所以他的妻子用他的 Android 手機對著他的兒子的鼠蹊部拍了幾張近距離、高解析度的照片,並且傳送到她的 iPhone,爲的是隔天的線上看診。如此一來,醫生就能夠在看診前事先收到這些照片。隔天,醫生根據這些照片開了抗生素做爲處方,沒過多久他兒子就痊癒了。

Mark 的噩夢才剛開始,他的 Google 帳號遭到停權,這十幾年累積的通訊錄、Email、行事曆、雲端硬碟、備份、照片,全部都無法存取,甚至所有他在其他平臺用 Gmail 註冊的帳號也因爲沒有辦法接收驗證碼而無法使用。之所以會這樣,是因爲 Google 根據他手機內的幾張照片判定他涉及兒童性剝削,並且已經通報給美國警方。Mark 也在這個時候就向 Google 提出申訴,但都沒有得到有效的回覆。

美國警方便開啓調查,毫無疑慮,警方認爲沒有足夠跡象表明 Mark 涉及犯罪。在 Mark 的清白被證明之後,他詢問警方是否可以也把這個結果通知 Google,協助他拿回這個帳號。 警方的回應是:「你要自己去跟 Google 講,我什麼都幫不了你」。Mark 再次向 Google 提出申訴,並且附上警方的調查報告。即便他附上了警方的調查結果報告,但 Google 還是始終維持他們原本的決定。

其實,在他兩個月收到 Google 的通知的時候,他的帳號就已經被永久刪除了。

woman in black long sleeve shirt covering her face with her hands

這不是個案,但 Google 一點也不在乎

Google 在 2021 年判定了超過 60 萬起兒童性剝削案件,並且停權了超過 27 萬個帳號。我們不知道 Google 的準確率有多高,但如果我們假設準確率有 99% 好了,那 2021 就有 270,000 * 0.01 = 2700 個帳號被誤判,這 2700 個帳號的所有資料就這樣莫名其妙的不見了欸!

站在 Google 的角度,他們在全球有幾十億個帳號,就算他們損失的這幾千個用戶使用的都是付費帳號,對他們的影響還是微不足道。更別說,究竟有多少人是付費使用 Google 的服務的。對他們來說,他們這麼大的公司無法承受任何被捲入有關兒童性剝削或其他違法事件的風險。再者,僱用人類好好地處理這些爭議案件,所花費的成本遠高於這麼做帶來的效益。Google 根本就管不到那幾萬幾千個小蝦米用戶的權益。

white printing paper with numbers

你完全有可能遇到類似的狀況

Google 能停權帳號的理由不是只有性剝削,其他像是版權侵犯、散佈假消息都有可能讓你的帳號被停權。你可能會覺得你不會去做那些事情,但你能保證你在 Google Drive 上的每一個檔案、Gmail 裡面的每一封信、Google Map 上的每一則留言都不會被 Google 的 AI 判定是違反使用條款的內容嗎?或甚至,如果今天 Google 無緣無故就把你的帳號刪除了,你也只能任他們宰割,一點反抗的力氣都沒有。

你可以說我的說法是陰謀論,但未雨綢繆只會有好處沒有壞處。而且,我認爲 Google 非常高的機率在一、二十年內隕落,你終究有一天要離開 Google 的。 提早做好準備,未來的某一天你會感謝你自己。

black laptop computer

你可以怎麽自保

  1. 現在就到 Google Takeout 把你的所有資料一次拿回家。
    • 如果你真的不幸 Google 帳號掛掉了,至少你還可以撈出一些東西。
  2. 使用其他的雲端服務。
    • 請謹記:其他的公司也有可能面臨像 Google 一樣的情況,而且這邊還沒談到隱私的問題。
  3. 把資料自己同步備份到好幾個地方。
    • 在你意外需要這些資料的時候,你有機會拿到稍微新一點點的版本。
    • 同步到好幾個地方的原因是:避免其中一個備份打不開之類的風險(例如硬碟壞掉)。
    • 同步工具推薦:Syncthing
  4. 用自己的 NAS 或租雲端主機架一個自己的雲端服務。

Reference

Featured image of post 如何設定反向代理?在同一台主機同時跑好幾個服務(Nginx Proxy Manager / Reverse Proxy)

如何設定反向代理?在同一台主機同時跑好幾個服務(Nginx Proxy Manager / Reverse Proxy)

不必面對又臭又長的 Nginx Config

|
|

今天我要教你如何使用 docker & docker-compose 來設定好一個 reverse proxy server,而且還有一個漂漂亮亮的 GUI!

Proxy Manager Screenshot

安裝

安裝 docker & docker-compose

我這邊 server 的 OS 是 Ubuntu 20.04,所以用 apt 來安裝。

1
2
3
sudo apt update
sudo apt install docker.io
sudo apt install docker-compose

把目前的 user 加到 docker user group 中(這樣才不用一直用 sudo 來下 docker 的指令)。

1
2
3
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker 

來跑個 Hello World 來確認一下,如果像下面畫面這樣的話就代表 docker 已經成功安裝。

1
docker run hello-world

docker-hello-world-screenshot

安裝 Nginx Proxy Manager

建立一個資料夾並在底下建立 docker-compose.yml

1
2
3
mkdir docker/nginx-proxy-manager -p
cd docker/nginx-proxy-manager
vim docker-compose.yml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
## docker-compose.yml
version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

接著就可以用 docker-compose 啓動並讓他在背景執行。

1
docker-compose up -d

初始設定

打開放火牆

如果你是租雲端主機,記得去把 port 8081443 都打開!(我這邊使用的是 Oracle Cloud)

80443 是 HTTP 和 HTTPS;81 則是用來進入 Web GUI。

Ingress rules settings

設定 Nginx Proxy Manager

確定防火牆沒問題的話就可以直接從瀏覽器到 <你的 ip>:81,進入 Nginx Proxy Manager 的管理頁面。

Nginx Proxy Manager Login Page Screenshot

預設的帳號密碼是:

  • Email: admin@example.com
  • Password: changeme

第一次登入就會要求你修改帳號密碼。

Edit user screenshot Change password screenshot

點進 Hosts -> Proxy Hosts 就能看到目前的 Proxy 狀況,這邊還沒設定當然是什麼都沒有。

Proxy Hosts screenshot

設定 DNS

這邊我們把 domain 和所有 subdomain 指到主機上。我的 domain 是在 NameCheap 買的,請到你購買 domain 的地方設定。

DNS setting screenshot

這時候我們就能透過 domain 訪問主機,而不是輸入 IP。接著再以剛剛改好的帳號密碼登入。

Successfully visit host with domain screenshot

第一個 Proxy Host

接著我們來設定第一個 proxy 指向 Nginx Proxy Manager,也把 SSL 還有憑證處理好,這樣才能確保連線是 HTTPS 的。

成功登入了之後進到 Host -> Proxy Host,點 Add Proxy Host。

我這邊把 proxy.giveanornot.com 代理到 localhost:81(也就是現在的這個 proxy manager)。

Add new host screenshot Add new host - SSL tab

在這邊選 Request a new SSL Certificate 的話,Nginx Proxy Manager 就會根據我們設定的 Domain 自動幫我們申請、更新憑證。怎麼樣,超方便的吧!

完成之後點 Save。如果設定都正確的話,直接到 proxy.<你的 domain>,就會看到 proxy manager 的登入畫面。這時候網址列有顯示鎖頭,代表說現在的連線是有經過 HTTPS 加密的。

SSL enabled screenshot

初始設定到這邊完成,我們就可以開始使用了!

外部連結

接著我們來設定外部連結的 proxy,我以我自己在 Netlify 上的部落格爲例。

Add proxy to my blog screenshot

這邊記得要順便更新 blog 的預設網址,以及 Netlify 的 custom domain。

Git diff screenshot Netlify custom domain setting screenshot

設定完成後我們就也可以透過 proxy 瀏覽部落格了。

Visiting blog with new domain

首頁、重新導向

但是,在這個時候如果到 giveanornot.com,你會發現首頁還沒有被設定好。

我這邊想要把 bio.giveanornot.com 指到我放在 GitHub Pages 的 Link In Bio,並且把首頁 giveanornot.com 自動導向 bio.giveanornot.com

  graph LR
U(User)--->|Request| A
A[giveanornot.com] --->|Redirect| B[bio.giveanornot.com]
B --->|Proxy| C[GitHub Pages]

一樣我們新增一個 Proxy Host 並且取得憑證。

New host screenshot

然後到 Hosts -> Redirect Hosts 新增,把 giveanornot.com 導到 bio.giveanornot.com

Create redirect host screenshot

也要記得在 GitHub Pages 這邊新增 custom domain。

GitHub Pages custom domain setting screenshot

此時到 giveanornot.com 的時候就會被自動導向 bio.giveanornot.com

Visiting homepage

代理到主機上的其他 docker container

接這我們來設定 server 上其他服務的 proxy,我這邊以一個 httpd 來示範,你可以把 httpd 換成是你其他任何的 container。

把 httpd 加到 Nginx Proxy Manager 的網路裡面(我這邊用的是 portainer)。

Joining httpd into Nginx Proxy Manager network

然後新增一個 Proxy Host,這邊的 hostname 就輸入 container name(docker ps 可以查詢)。

Add proxy to httpd

這樣就可以透過代理存取 server 上的其他服務了!

Accessing httpd screenshot

至於非容器化的服務嘛……目前沒有找到好的解決方法:(

References

https://nginxproxymanager.com/guide/#quick-setup

Featured image of post 從 100 天挑戰到失敗:原因、成效、價值

從 100 天挑戰到失敗:原因、成效、價值

這可能是我人生遇到最大的挫折

|
|

100 Days Of Code Challenge

這一篇文章 裡面有提到,我在 2021 的 11/08 開始一個爲期 100 天的挑戰。這個挑戰的目標是連續寫 100 天的 code,並且在這期間內成功找到一份滿意的工作。

結果是,這個挑戰只持續到 Day 48。

舊的部落格截圖

失敗的原因不僅僅是入伍時間一延再延打亂原本的計劃而已;更多的是我在遭遇變故後,心理一直處在一個不健康的狀態,而我沒有能力發現並有效的處理。在意識到自己失敗後,糟糕的心理狀態,加上當時其他的壓力來源,我無法有效的去面對、檢視、檢討這個挑戰。於是,逃避成了我當時的唯一選擇。不回頭看這個挑戰、不碰任何跟 coding 相關的東西、不去想求職和自我成長的事情——這些是我在那個狀態下,非常消極,但也有效能夠讓我過得比較舒服的方法。

沒有把大目標拆成具體的小目標也是失敗的原因之一。我能很明顯地感覺到:在 Day 27 取得 freeCodeCamp 的 backend certification 後,我失去了一大部分的動力。更準確地說,是少了完成證書裡每一個項目之後,所獲得的那種回饋感。而少了題目的指引,對於接下來要寫什麼也是越來越迷茫。在這種不知道寫什麼 & 回饋感驟降的狀態,挑戰會失敗似乎也是一件合情合理的事情。

失敗了,但獲得的不只是失敗

失敗不代表這次的挑戰一點價值都沒有。事實上,「失敗」只是用來描述沒有達成原本目標的的負面詞彙。也就是說:就算是只差 1% 就成功,只要沒有達到 100% ,都算是失敗。既然如此,我是不是可以反過來說:1% 的失敗,是 99% 的「成功」。

回頭看看我這 48 天做到的事情,最大的項目莫過於取得 freeCodeCamp 的 backend certification。如果我當初把目標設定在取得這個證書,那我這次的挑戰是一次大成功誒!而且,在取得證書的過程、以及拿到證書以後的到 day 48 的這段期間,我還解決了很多以前不曾解決過的問題。

當然我不是想要用把目標拉得很低這種方式來騙自己很成功。只不過,我不想因爲失敗掩埋了那些成果。畢竟,爲了得到那些我也是整整花了 48 天。因此,在這段期間所獲得的任何小結果,無論是失敗的或是成功的,我都應該把它們好好的整理、保存。因爲,那些是我接下來想做任何東西的重要參考資料來源。

freeCodeCamp 證書

花了 48 天換到的

48 天換取一個失敗的結果絕對不是浪費時間。如果把我用到、學到的技術和工具全部列出來,其實還是有點壯觀的。

完成的項目

失敗的項目

  • Cocktail
  • Hublemon

學會使用的 Library

  • Express.js
  • Vue.js
  • Chart.js
  • Passport.js
  • socket.io
  • axios
  • Bootstrap
  • Sequelize
  • Mongoosee
  • vue-masonry-css

學會使用的軟體、技術

  • Git
  • PostgreSQL
  • MongoDB
  • NGINX
  • Redis
  • Docker
  • SSH Reverse Tunnel

學會使用的服務

  • GitHub
  • Heroku
  • AWS EC2
  • Yelp API
  • Youtube API
  • OAuth(GitHub, Google, Facebook)

整理、放下、解脫

從 Day 49 到現在的每一天,我一直都活在沒有完成挑戰的罪惡感中,因爲我不想承認我的失敗。只有當我下定決心,決定好好地回顧一下到底發生了什麼事情的時候,那膨脹已久的恐懼泡沫才會消除。在我能夠好好面對之後,才能把那些我需要的撿回來、好好地裝箱,我也才能安心地讓這件事情徹底地離開我的思緒。也因爲如此,我才能再開始開始下一個挑戰,不再原地踏步。

Featured image of post 臺科大學長告訴你:四技推甄面試完全攻略

臺科大學長告訴你:四技推甄面試完全攻略

如果我當年也知道這些就不會那麼緊張了...

|
|

今天我要跟你分享我 2017 年(民 106)在臺科大資工系的推甄面試,並且成功順利錄取的經驗。

這篇會以我自身的經驗出發,和大家分享這次面試經驗的流程、自己的經驗、以及如果可以回到那個時候,我會希望我當時能知道的事情。

臺科大資工系的面試有什麼流程和項目?

我們先來看看臺科大資工系的官網怎麽說:

臺科大網站面試說明

其中有三個重點:

  1. 面試地點在資工系辦進行(但其實是系辦旁的會議室)
  2. 面試共有兩站,各五分鐘
  3. 不能使用電腦以及投影機

而整體流程則是:

  • 系辦簽名報到
  • 等待 20 分鐘
  • 面試第一站
  • 等待 5 到 10 分鐘
  • 面試第二站
  • 面試結束

有大致的概念之後,接下來再來詳細看看各個階段,以及分別要注意什麼吧~

六個階段的注意事項

當天報到之前

當天早上的準備工作也是非常重要!好好的規劃的話可以降低突發狀況的機率,也就比較不會緊張啦。我這邊分成 食、衣、行、帶,四個項目:

當天按照平常的飲食習慣就可以了,如果平常沒有習慣吃早餐的話不必特別吃,但就建議帶一點高熱量的小零食在身上以防萬一;如果你被安排在下午的話,午餐可以稍微不要吃那麼飽。不過,飲料和水分就適量少攝取一點,避免緊張一直想跑廁所,但如果天氣很熱的話也要小心不要中暑啦 ><

當天的服裝我會建議以 半正式、整潔、樸素即可,我當時有看到一些同學穿正裝打領帶,我覺得是沒有必要甚至有點突兀的。其實資工系並沒有非常在意面試者的服裝,只要不要讓人感覺到太隨便或是太奇怪就可以了。

如果你不清楚所謂的半正式是什麼的話,我會建議以休閒襯衫、素色褲子爲主。鞋子不是很重要,皮鞋、運動鞋、帆布鞋其實都可以,只要不要太高調就好。

另外,頭髮會亂的,鬍渣之類的要記得整理,表示你對面試的重視,也是基本的禮貌。

如果你像我一樣不住在臺北或對臺北不熟悉的話,一定要事先規劃好當天如何前往資工系系辦!

我會建議坐臺鐵或是高鐵,因爲下車之後往月臺 高鐵 9 車、臺鐵 11 車的方向,有可以直達捷運的出口。 客運轉運站離捷運站有點距離也容易迷路,除非有自信可以找到路否則不建議!

出了臺鐵、高鐵 B3 出口之後對面就是捷運入口,直接逼悠遊卡或一卡通就可以進站,這時候錢不夠的同學請往左手邊去售票機儲值。

進站之後坐紅線(淡水信義線)往象山方向 => 中正紀念堂轉車 => 直接到走到對面等車 => 綠線(松山新店線)往新店方向 => 公館站下車 => 出 2 號出口。

臺北捷運-臺北車站至公館指引

上電扶梯出站後可以逼卡租 YouBike(要事先註冊綁卡,或者到櫃員機),然後騎進臺大在鹿明堂右轉;或是直走羅斯福路過圓環後左轉到臺科大門口還車(記得再逼卡)。如果不幸沒有車或是下大雨的話也可以走路,大約走 10 分鐘就到了~

公館步行至臺科大路徑

進校門後經過圖書館就可以左轉進 T4 大樓一樓穿堂,烏龜池對面就是電梯,上 5 樓就到資工系辦嘍!

臺科大地圖

我建議可以比規定的 20 分鐘前再提早 10~30 分鐘去報到,多的時間可以休息一下熟悉環境、逛一下校園、或是看一下小抄,讓自己不會那麼緊張 ><

要帶的東西其實不多:

  • 身份證件(報到用)
  • 悠遊卡(坐車、YouBike)
  • 小抄、考古題(在等的時候可以看)

就這樣!其他就是你平常出門會帶什麼就帶什麼就好了。

另外要提醒的是,除非你有非常特別的理由,不然不需要另外再帶資料給教授看。一來是教授其實面試你沒有什麼時間可以看,二來是發資料的過程也會消耗你不少寶貴的時間。

等待第一站的 20 分鐘

報到完之後,除非你剛好就是各個時段的前幾個,不然一定能遇到面試完出來的人——巴上去問他們問題。裡面有多少教授、誰是白臉誰是黑臉、教授都問了什麼問題……什麼都好。雖然不一定每個人都願意回答你,但儘可能地蒐集到更多資訊對你肯定是有利的。其餘時間可以看看自己帶的資料,在腦袋整理一下等等要說的東西,然後等待你的名字被叫到。

第一站

第一站在大會議室進行,主要是讓教授跟你聊聊天看看你這個人的 學經歷、基本能力、應答能力 ,具體的內容包括:

  • 自我介紹
  • 英文口試
  • 數學口試
  • 專題、經歷
  • 提問

會議室的樣子是四張長桌圍起來,你坐一張,其他大約 68 位教授坐另外三張,整體大約是下面這張圖的 23 倍大。

會議室示意圖

自我介紹

這個階段要做的是用一到一分半左右的時間讓教授認識你,而重點只有一個:請只說和資工系有關的事情;家庭背景、成長經驗、你的其他興趣什麼的教授一點都不想知道。你該說的是:

  • 你的經歷中有什麼和資工有關聯的地方
  • 你的高中專題做了什麼,過程又是如何,有沒有遇到什麼困難?
  • 你有過什麼其他和資工相關的活動
  • 爲什麼選擇資工系(如果你不是資訊科畢業的話)

我來舉個例子:

各位教授好,我是 OOO,畢業於 OO 學校電子科。我在高中的時候最喜歡的科目是微處理機和單晶片實習,在單晶片實習的課程裡我學會了如何使用 C 語言去控制 8051,也是在這個時候我發現比起硬體、電路,我更喜歡電腦和寫程式,這也是我選擇資工系的原因。

我的專題也和 8051 和 C 語言相關,是用 8951 和兩個 8x8 LED 矩陣做的遊戲機,其中讓我花最多時間的是理解和學習如何使用計時器中斷。

最近在嘗試的事情是想要透過 Wi-Fi 和 ESP8266 控制房間的電燈。目前遇到的難題是:網路上的範例有提到 HTTP Server,但還不清楚那是什麼東西,目前還在慢慢的研究。

以上是我的自我介紹,謝謝各位教授。

當然你的經歷可能沒有這麼精彩,你可以在專題的部分用非常多的篇幅,大約控制在 200 字左右即可。這裡我想特別提醒大家:不用害怕自己做的成果很失敗就不敢說。事實上,不過你有多厲害多屌,在教授的眼中都是小兒科,教授想看到的是:

你遇到困難的時候,你是怎麽試圖解決問題、怎麽尋找有用的資訊,而你在這個過程又有什麼收穫。這是資工系非常需要的一種能力——自學。

英文口試

英文也是資工系重要的能力之一,幾乎所有的說明文件都是用英文寫的。

我當年面試的時候,桌上擺著一張紙,上面有一句英文,口試的內容就是把那句話翻譯成中文。我不太記得那句英文是什麼了,但我記得是有包含 database system 的一句被動句。其實不難,只要你能好好地用通順的中文說出這句話的意思就可以了。

萬一你真的遇到不認識的單字,請大方地說你不太確定某個字的意思,然後把剩下的部分翻譯完畢就好了。

數學口試

在這個階段,教授會問你一個數學問題,通常是排列組合或是機率的問題。因爲你手上不會有紙筆,所以不會是太複雜的問題,主要是想知道你的數學觀念對不對。我當時被問的問題是:

丟兩個骰子,同樣點數的機率是多少

這裡的評分不是只有答對或答錯兩種,和上面一樣,教授想知道你的策略是什麼。這時候你能做的最壞的表現是直接說你不會,或是沉默不語,然後說了一個錯誤的答案。

你不需要一聽到題目就知道如何解題,你需要做的是:你正在想什麼,就同時也說出來。 即便你一開始的策略錯了也沒關係,你可以說你覺得你的想法錯了,然後再開始一個新的策略。通常來說,如果教授聽到你的思路,而你卻一直卡關的話,教授通常都會好心推你一把的。

專題、經歷

到了這個階段,其實這裡就是讓教授和你聊聊天,讓教授有更充足的資訊能夠給你打一個分數。教授通常會針對你的專題還有經歷提問,而你就也按照實際的情況回答就好了,切忌說謊。你可以在自我介紹的時候埋一些短時間說不清楚的事情(線頭),吸引教授的好奇心。而這個階段也是最難準備,最能夠看出你的專題有沒有認真做、你到底有沒有料的階段。

提問

最後教授還可能會問一個問題:

你有什麼想問的問題嗎?

這時候其實就是教授沒梗了,但還是要禮貌地完成面試,如果前面聊得很多的話教授可能不會問這個問題,時間到了面試結束。

這個問題的答案就是:任何你想問的都可以問。當然我的意思不是說可以去問教授有幾個小孩、名下有幾棟房子;但只要任何和資工、學校、今天的面試沾的上一點點邊的都可以問。當然儘量避免網路上很簡單就能找到答案的問題,而這個問題通常也不太會大幅度影響你的分數(除非你很沒禮貌)。我這邊列幾個可以問的問題:

  • 請問大一的課會有早八嗎?
  • 請問剛剛那題數學的正確解答是什麼?
  • 請問我在暑假這段期間可以先自己學什麼東西嗎?
  • 請問大一的計算機程式設計具體課程內容是什麼
  • 我對人工智慧很有興趣,請問教授可以給我一些指引或是建議嗎?
  • 我在專題遇到的問題,請問教授有什麼比較好的解決方案嗎?

如果你想不太到問題的話,可以到 臺科大資工系課程地圖 看一下,你一定可以從這裡面找到你還不懂的東西。

如果沒有意外的話,在你回答出:「沒有問題了,謝謝教授」的時候,第一站在這裡就會結束了。結束的時候請記得禮貌和教授問候,如果有移動到會議室的物品的話也請記得歸位,然後就可以先到外面稍作休息。

第二站前的 5 到 10 分鐘

剛從大會議室走出來,你的心臟肯定還跳得很快。不管你剛剛的表現如何,那都已經是確定的事情,不是你能改變的。 如果讓剛剛的表現影響到你接下來的狀況的話就不好了。你要做的事情是:把自己的注意力放在準備第二站。

你可以看看自己帶的考古題,或是問問從第二站出來的同學他們被考了什麼問題。事實上,第二站能考的問題不多,有非常大的機率你會被問到一模一樣的問題。如果你多問一些同學的話,很有可能就被你問到要拿來考你的那個問題了。所以,儘量在這段短短時間獲得更多資訊,不僅可以提高你對問題的把握度,還能讓你把注意力從剛剛的表現轉移到接下來的第二站。

面試第二站

第二站的主軸是技術面試,也就是考你的專業知識如何。這邊分成兩個階段:自我介紹、白板題。

自我介紹

這邊的自我介紹目的是讓教授瞭解你的背景如何,這樣教授才能挑選適合你的題目。這邊教授不會和你聊你的專題如何,所以篇幅不必太長,只要簡短地敘述自己的背景、專長、經驗,大約在 30 秒到 1 分鐘即可,才不會白白浪費後面的答題時間。

白板題

這裡才是第二站的重頭戲! 這邊教授可能會根據你的長項給你一個題目,請你在白板上作答。

既然是資工系,這邊的題目就是寫程式,通常不會太複雜,只是測驗你有沒有基礎的程式設計能力而已,所以也不會限定你要用什麼語言、什麼方式。我這邊舉幾個題目的例子:

  • 請在白板寫出一段輸出九九乘法表的程式。
  • 請在白板寫出一段輸入爲 N ,輸出費氏數列前 N 項的程式。
  • 請在白板寫出一段輸入爲 N ,輸出 N 的所有因數。
  • 請在白板寫出一段輸入一個矩陣 M,輸出 M 的轉置矩陣的程式。

聽到問題之後,你對地方有一些地方可能還不太清楚,請教授解釋你不清楚的地方是完全沒問題的。請一定要在確認對題目沒有任何問題了,再開始著手解決問題。

與第一站一樣,你有可能需要時間思考,請你邊思考邊把你的想法說出來。 就算你最後無法寫出正確答案,你也還能讓教授知道你還是有程式設計的能力,只是卡在某個關卡而已。

寫完答案的時候,記得順著自己的程式檢查一下,也順便看看有沒有什麼沒加分號、括號的小問題,確定沒有問題之後就可以完成作答。如果有問題的話教授可能會在這個時候告訴你,請你修正你的答案。

這邊提供幾個可以找到題目練習的地方:

如果作答完還有時間的話,教授可能會考你第二題。我當年就被考了一個「請在白板上畫出除五的同步計數器」,可能因爲我是電子科吧……所以如果你不是資訊科的話,還是建議複習一下數位邏輯會比較好。

面試結束

恭喜你撐過了這次的面試!這時候就可以放鬆了。如果你有其他學校要面試的話,就請儘量提早到下一個面試地點;如果沒有的話就可以留在學校休息一下,認識一下其他來面試的同學,他們很有機會會是你之後的同學。也可以到校園裡面走走,看一下教室長什麼樣子、吃看看學餐如何也是不錯的選擇!


重點整理

最後這邊再幫大家統整和補充一下幾個重點:

事先準備

規劃當天的行程、交通方式、衣服怎麽穿;準備好當天要帶的東西;瞭解一下學校或系上的課程和規定,這些都是絕對可以事先就確定並且準備好的。如果因爲這些事情沒做好的話一定會大大影響當天的狀態。

把握必拿的分數

自我介紹、專題探討都是一定會遇到的環節,如果沒有把握好這個部分的話就太可惜了。請一定要事先寫好稿、多順過幾次,也要想想教授可能會問的問題,被問到了要怎麼回答。說話的時候的速度如何、重點該擺在哪裡,這些也一定要事先想好和練習。

提高自己的勝率

資工系能考的題目雖然變化很多,但其實能考的概念不多,只要多做題目就能夠抓到其中的套路。當你把所有類型的題目都做過一次之後,你就會發現那些題目都有類似、可以參考的概念。隨著做過的題目越來越多,就能夠有越多的概念可以參考,解新的題目也就會越來越輕鬆。所以,請多做考古題、多做一些題目讓自己能夠有更高的機率可以會回答出正解。

台風

好的台風能讓教授能整個對談的過程更舒服,教授也能更專注在你說的事情上,也或多或少提高教授對你的認同度。如果你的經歷做得不錯,卻因爲沒辦法好好表達,而被另一個經歷普通但是能和教授侃侃而談的同學比下去,那不是非常的不甘心嗎?所以,不必對教授非常的畢恭畢敬也不要太吊兒郎當。自然、有自信、肯定、沒有冗言贅字,這樣的語氣無論是誰,都會覺得跟你對談是一件舒服的事情。

練習

“Repetition is the mother of skill” - Tony Robbins

如果你怕你表現得不好,那就多做幾次,直到你能夠輕鬆應付爲止;如果一道題你解不出來,那就多做幾道類似的題目,直到你能成功解答。你可以對著自己錄影,看看從別人的視角你的表現如何;也可以找幾個同學互相面試,看看彼此有什麼地方需要改進的。總之,重複和練習,這是兩件絕對不會背叛你的事情。

總結

以上是從一個資工系學生的角度,想要給大家的一些建議,也是我希望我當年就能知道的事情。

祝大家都能順利推甄上想要的學校和科系!

已經寫了 104 篇文章, 總共 16.1 萬字
使用 Hugo 建立
主題 StackJimmy 設計