跳至主要内容

60% 鍵盤主力一段時間後的小小心得

· 閱讀時間約 1 分鐘

60% 鍵盤用了一陣子,整體來說還是不比 75% 來得有效率,不過讓我終於嘗試替換掉 Caps Lock 以後得到了一個不錯的心得,把 Caps Lock 換成 Fn 再搭配周圍的按鍵設成第二組方向鍵跟六塊肌,還沒用到成為肌肉記憶,不過可以讓我不必把手移開,挺不賴,再花點時間適應。

keyboard fn2 layout

極力反推 <Shipgo17 世購國際> 集運服務

· 閱讀時間約 3 分鐘

前言

從一路發逃難出來前用了好長一段時間,而且算得上頻繁吧,也是逃得很晚了。

後來隨便找了 Shipgo17,起初只覺得怎麼網頁那麼垃圾,委託收貨要填那麼多有的沒的完全不知道意義在哪裡,申請寄回也難用到爆炸,費用上沒有比較便宜,速度又慢。

唯一好處大概就是客服態度還算可以吧,但是回覆速度也很慢。

光上述部份就已經夠糟的,更扯的是後來有遇到幾個實在是極為要不得的狀況。

日本站 - 包裏遺漏運回

首先是包裏漏寄回,因為這種服務用很習慣了,頻率高加上一次運回的量也不少,後來基於信任就沒有特別清點,當然這也說明我自己買了啥都沒放心上… 夠蠢的。

後來有一次又運回了一大包,有覺得怪怪的並沒有多想,過了大概一個月,才接到客服通知說整理倉庫發現有東西當初沒打包到寄回來給我,當初整併沒包到所以也沒算到錢。

我當然是要寄回,其實感覺非常差,不過至少還算誠實,所以我也沒特別怎樣,但很確定該放棄這家了。

所以後來經學長推薦改用運匠,體驗真的良好許多,速度快,網頁雖說偏簡陋,但 UX 真的像是正常東西太多了,缺點的話則是國家站點較少,只有日本和支那。

美國站 - 主動催問才會入庫,包裏遺失近兩個月後尋回

這個站點使用的較為稀少,最初使用的時候沒有什麼問題,然而近期使用一次就讓人完全失去信任,在經過上面事件後還會使用的原因一樣是懶… 只能說自己還是沒學乖。

僅僅是因為運匠沒有美國站就再給他機會,疏不知這一次終於徹底把我打醒,印象中規定上就寫說要 2 天才會入庫,超過請聯絡,光是原本規定的就久到不可思議了,

我還是照規矩來,等到第 4 天還是不見蹤影才找客服,又逢假日,所以等周末過完才有消息,結果說只有收到一件,叫我再跟貨運確認,讓我賭爛到不行。

寫信給線上購物,說他們運出一概不負責,自己去跟 UPS 問,還提醒我他們規定不能送到轉運,整個很三小…

看 UPS 物流追蹤說是丟在碼頭的樣子,明明顯示已送達,查送達證明卻沒有照片,於是提起未送達申訴。

過了一個月 UPS 回說送到了,請再確認,還以為是想隨便把案子結掉,又氣了一回,再過五天 Shipgo 突然通知那包入庫了。

所以總的來說,應該是 UPS 和 Shipgo 都有問題,而且 UPS 或許責任更大一些,無法確定,可 Shipgo 相信是脫不了關係。

怎麼可能這麼大一個集貨服務,會跟這麼大的快遞沒有往來,東西就這樣丟下了也不找下的?我合理懷疑找別家就不會發生同樣問題。

之後打算依照這則[心得] 五家美國集運心得分享改試看看好運,日後有心得再來分享。

Raspotify / librespot 無法播放歌曲的暫時解法

· 閱讀時間約 2 分鐘

正文

平常有在 Raspberry Pi 上用 Spotify 播放音樂的習慣,用的是 Raspotify,就是把 librespot 包成 Debian 尤其是 Raspi 用的套件的專案,前幾天突然播不動,起先以為又是帳號被針對了…

後來弄巧成拙系統掛掉,也不確定是不是我親手搞爆的就是了,總之是乾脆重裝了,正好當作 clean install 升新版,之前一直懶得這麼做就卡在 Buster。

裝好後問題依舊,查到和我症狀一毛一樣的 issue,看起來是有災情,詳見 Getting status code 500s since Ads API sunset · Issue #1527 · librespot-org/librespot

起初找到的時候沒看到什麼簡便有效的方法,後來持續追蹤就看到有人說/etc/hosts 裡加上一筆 0.0.0.0 apresolve.spotify.com 的紀錄就行了,試了下還真的立竿見影,所以就是把那玩意擋掉的意思,蠻莫名其妙的…

我都已經是用付費帳號在播了還會撞到這種廣告關聯的問題…

不過開 issue 的人就有表示相信和 Spotify 的舊版廣告相關 API 下掉了有關…

暫且是這麼處置了,這件事也得記著,天知道會不會之後哪天變成反而因為這筆 DNS record 掛掉。

回顧

也不能說沒有收獲啦,因為一些很蠢的問題笨手笨腳的重裝很多次,時間花的遠沒有預期的久,主要好處是藉機升了新版。

再者是順便調整了音效介面相關的設定,音質似乎有顯著的變化,應該是好的方向啦… 我在這上面播也沒有追求音質就是了。

還有多學到了幾個音效相關的指令,像是 aplayspeaker-test,有點太晚就是,發現播不了的時候不確定到底是什麼部份出狀況, 因此重裝後也不曉得到底能不能播出聲音,但 raspotify 又處於播不了的狀態,等到找到有效解法才學會 speaker-test

後續更新

過沒太久 Raspotify 0.46.2 把 Librespot 升到最新版就把這問題給解決,不需要 workaround 了。

線上樂譜掃瞄轉檔服務實作了 ChatGPT 唬爛出來的功能

· 閱讀時間約 3 分鐘

Hacker News Daily 上讀到了這篇文章 - Adding a feature because ChatGPT incorrectly thinks it exists

我大致說下內容:

主角是一個叫作 Soundslice Sheet Music Scanner 的線上服務,提供上傳樂譜相片,將其轉檔為類似 GuitarPro 或 MuseScore 那種打譜軟體用的格式,方便閱讀、播放、編輯。

前陣子開始觀察到一些奇妙的錯誤,檢查了上傳的圖片,竟然是和 ChatGPT 的對話擷圖,上頭有 ASCII tab 譜,作者起先完全不明白這是怎麼回事,直到他親自試過才發現是 ChatGPT 豪洨說如果你想播放這個譜的內容的話可以用他們的服務。

然而該服務並沒有支援這種格式,完全是 ChatGPT 的幻覺。

這令他們受到了不切實際的期待,有損他們的商譽,考慮要直接在網站聲明沒有那種功能,最後決定乾脆把這個不存在的功能給做出來,反正本來就在他們排定會做的功能裡,只是順位在最底。

作者表示這大概是世界上第一次有人去做了 AI 妄想、唬洨存在的功能。


這一切是頗有共鳴的,問些相對冷門的領域的東西的問題 ChatGPT 就很會唬洨,我最近的例子是 CedarSpring Web Testing 相關的問題,都回答我一些不存在的功能或用法。

不過我更在意的是這年頭居然還有人在用那種 ASCII tab 譜,我以為是古早的時空背景下才流行,如今已經不太有人使用的東西才是…

我自己是沒有親自經歷過,畢竟是出社會後才真正開始學琴,但我想像中應該是早年網路頻寬比較有限,再加上打譜軟體也沒那麼普及等等因素才蔚為潮流的格式,在 Ultimate Guitar、911 Tabs 之類的網站上廣為使用。

在我還是學生的時候就已經都聽到是在用 gp 譜了啊,我過去還有找到可以讀取 gp 譜格式的開源軟體 powertabeditor,當時也早就有 Songsterr 這種線上網頁形式的,而且我看樂譜數量也是相當龐大了。

實在是有夠謎的…

WSL 2 因可用記憶不足而無法啟動的問題

· 閱讀時間約 2 分鐘
系統資源不足,無法完成要求的服務。
錯誤碼: Wsl/Service/CreateInstance/CreateVm/HCS/0x800705aa

[process exited with code 4294967295 (0xffffffff)]
You can now close this terminal with Ctrl+D, or press Enter to restart.

昨天正在打 Splitgate 2 突然想開一下 wsl 又遇到上面這個錯誤,前一次遇到的時候明明就沒有在打遊戲,所以困惑到不行。

這次才明暸原來是當下的系統記憶體不足,我桌機只有 32GB 的確是不多啦,可明明就還剩 8GB 以上,關了遊戲以後還真的就能開了…

於是查到 Advanced settings configuration in WSL # Main WSL settings 裡記憶體的預設值竟然是系統總記憶體的 50%。

沒事也切太多了吧,來改小一點看看還會不會撞到,日後電腦升級再順道加大,但絕對不能放預設抓一半就是了,有點瞎,一半的意思不就是要電腦夠閒或是主力都在 wsl2 上,超不合理啊。


後續更新:

看來問題根本不在記憶體… 後來又碰上了,當下關了一堆程式,閒置記憶體剩餘超過一半還是給我同樣的錯誤。

總之再度查找了起來沒什麼鳥結果,只發現這問題遠比想像中的普遍,大家都對於不講明什麼樣的資源不足感到莫名又束手無策。

Python 的 := 符號 (Assignment expressions)

· 閱讀時間約 2 分鐘

別名海象符號

What’s New In Python 3.8: Assignment expressions

PEP 572 – Assignment Expressions

3.8 加入的這個海象符號當年有注意到但沒看懂,也就被我淡忘掉了。

本來就很受不了多做一次不必要運算的行為,可是為了省那一次又多寫一個 assignment 也頗令人煩躁不舒爽,近期開始養成每天寫上一、兩題的習慣後特別有感。

讀到這則 Fastest Way to Read Excel in Python | Haki Benita 裡頭有用到才讓我回想起其存在並去找出究竟是什麼意思。

不算很常見,初見也不直覺,但用得上的時候真的能簡潔不少。

直接偷 release note 裡的例子來說明。

沒有 walrus operator 的情況下,一段程式懶惰的寫法如下:

if len(a) > 10:
print(f"List is too long ({len(a)} elements, expected <= 10)")

前述的減少不必要運算的不偷懶寫法則可能變成:

n = len(a)

if n > 10:

print(f"List is too long ({n} elements, expected <= 10)")

用上這個新符號的化就能夠簡化成:

if (n := len(a)) > 10:

print(f"List is too long ({n} elements, expected <= 10)")

拿這個例子來看就很容易理解,也就是顧名思義 assign 的同時亦是一個 expression,所以才能用在 if 的後頭。

另一個顯然很好用的情況就是在 while loop 裡:

# Loop over fixed length blocks

while (block := f.read(256)) != '':

process(block)

傳統的寫法多半會變成:

block = f.read(256)

while block != '':

process(block)

block = f.read(256)

Java Text Blocks (文字區塊)的運用要點

· 閱讀時間約 2 分鐘

最近開始拾起一些在 Java 裡屬相對較新的功能,例如本次想要稍微提下的 Text Blocks,這也是我個人期盼已久的功能。

自 Java 15 起 Text Blocks 脫離預覽成為標準功能,然而我的理解只停留在類似 Python 用 3 個引號括起來就可以寫下多行內容的程度。

至於縮排是怎麼認定的?尾巴的空白會保留還是被去掉?等問題由於過往的輕度使用大概都是在 SQL 語句上,便不是那麼在乎實際字串組成後的排版會長成什麼模樣,只要在原始碼裡面看起來順眼就行。

這回我下定決心要有足夠的理解便找到了這則官方教學 Programmer's Guide to Text Blocks,內容相當完善,相信已經涵蓋絕大部份使用上需注意的要點,亦有充足易懂的範例,強烈建議讀過原文,看似有相當長度實際上非常好理解且有不少示範,所以閱讀起來並不花費太多時間,以下取出一些摘要:

  • 基本語法
  • 解釋成品字串縮排空白計算的原則
  • 結尾的 3 個引號是否單獨成行會影響組成字串最後是否有個換行符號
  • 保留尾巴空白的技巧
  • 混用空白字元(空白跟 tab 等)縮排可能造成的問題
  • 如何使用跳脫連成同一行
  • 推薦/避免使用 Text Blocks 的時機
  • 應運而生的一些 instance method

以上要點大部份都是我原先沒想過要知道的事情,著是獲益匪淺,若干年前老覺得 Java 各種沒人性,近年許多實用功能補上來變成正式版,對於 Java 反而變得頗有好感了。

撿到一篇講古文:離線交易儲值卡的興衰史

· 閱讀時間約 1 分鐘

你所不知的塑膠貨幣歷史

2023-09-03 plastic money on Computers Are Bad

上面是一篇在 Hacker News Daily 看到專門講述 stored value cards,也就是一種餘額實際存在卡片內,離線進行交易的應用之興衰史。

裡頭從緣起、規範制定開發及相關技術、成功試驗案例乃至如今仍在營運中的大規模應用皆有涵蓋,相當詳盡。

令人感慨的是網路連線已經相當普及可靠,使得該技術在現代條件下沒有太多選用的理由,即便他有較線上交易簡便之處,當然也有其更複雜之處。

很喜歡這種講古的文章,這則又帶有一股哀傷的情緒…