梅花雀莊

何震邦的個人網站,通常寫電腦和橋牌相關的文章,未來可能會寫關於日本麻將的東西

在 Linux 上使用 Nintendo Switch Pro 手把

今年發現用鍵鼠玩遊戲會導致機械鍵盤暫時接觸不良,於是 11 月初在朋友的推薦下就買了 Switch Pro 手把。按起來真的很很舒服,不過卻從此開啟了惡搞之路……。

首先,在 Linux < 5.16 並沒有 hid-nintendo 這個任天堂系列手把的驅動程式,所以 Steam 自幹了透過 hidraw 去抓手把的動作的驅動程式。所以如果插線接電腦然後打開 Steam,其實 Steam 可以抓到手把。然而最初我遇到的問題就是右蘑菇頭會一直亂飄,飄到我需要用 Steam 的手把校正功能把死區調大才解決。

圖:死區調到比預設值大才能讓它安靜……

然後到月底直接不演了,放在桌上都可以各種亂飄,並且產生莫名其妙的按鍵輸入。用 Gamepad Tester 一看才知道原來時脈被當成按鍵,然後被當成軸的意義不明,可能是陀螺儀吧。

hid-nintendo 核心模組

Daniel Ogorchock 大大寫的 hid-nintendo 終於要進 Linux 5.16 了。然而,我所使用的 Fedora 35 此時的核心版本仍然是 5.15.4。幸好我們可以利用 dkms-hid-nintendo 自行安裝。(-v 所接的版本可能會再更新,請到官網再確認。)

git clone https://github.com/nicman23/dkms-hid-nintendo
cd dkms-hid-nintendo

sudo dkms add .
sudo dkms build nintendo -v 3.2
sudo dkms install nintendo -v 3.2

安裝過後,一般的 Linux 程式和瀏覽器都能正確讀取 Switch Pro 手把的輸入。

joycond 常駐程式

然而 Steam 直至今日仍然不支援 hid-nintendo,所以我們還需要 Daniel Ogorchock 大大的 joycond 才能玩 Steam。它的原理是去模擬一個未知的任天堂手把,然後再讓 Steam 讀取這個虛擬的手把。

既然是不認識的手把,那就需要自己定義按鍵的定義了。我建議直接使用 Steam 預設的按鍵配置就好。雖然它看起來是 Xbox 或美版 PS 的配置,但是最後存檔的時候只要選擇它是 Switch Pro 手把,Steam 就能透過「使用 Nintendo 按鍵配置」(Use Nintendo Button Layout) 把 A/B 和 X/Y 調整回來。

圖:使用 Steam 預設的按鍵配置就好

然後因為 hid-nintendo 會過濾掉雜訊,所以死區也可以再縮小,讓手把的反應更敏捷。

圖:死區可以調小了

思源宋體來啦!

思源宋體真的來啦!

終於有字重齊全的宋體啦!不用再讓思源黑體 cosplay serif 字型啦!本來我還想要募資把王漢宗明體補完的說……。XD

我已經把字型檔整理起來,並且也附上轉換成更適合作為網路字型的 WOFF 檔。歡迎各位下載或以 @font-face 套用於網頁上。感謝 GitHub 願意成為大家的 CDN

Clerkship 懶人包

為了維護病人隱私,如果簡報中有個案資料,無論真實或虛構,則需要登入北醫帳號才能讀取。

內科

新陳代謝科
翁瑄甫《糖尿病之治療及新趨勢》
血液腫瘤科
陳博明 Oncologic emergencies 🔒
胸腔內科
吳宗翰《胸腔 X 光片基本判讀》 🔒
麻醉科
陳建宇《美國 ACGME Milestones 之導入與建置⸺以麻醉科為例》
腎臟內科
高治圻《腎絲球疾病》 🔒
學術討論
倪衍玄《糞土黃金》影片
小考解答
小考解答 🔒
胸腔內科
柯信國 Dual bronchodilator in GOLD 2017

案例討論 🔒###

此處只列出日期和講者,因為講題可能包含病人姓名,應保密。

讓 nginx 重定向遵循 HTTP

根據 RFC 2616,除了 Location 標頭外,回覆實體(也就是一般使用者看到的網頁)裡面也需要包含重定向的目標。不過基於程式的健壯性原則,瀏覽器等 user agents 會選擇只看 Location,而且從網頁中找尋正確的連結對程式來說比較困難。然而,一般使用者還是有機會看到重定向的網頁,例如重定向失敗1的時候。

不過 nginx 的錯誤頁面(狀態碼 ≥ 300)其實都沒有附連結。以 302 重定向為例:

幸好 nginx 可以讓我們自訂錯誤頁面,並且支援 SSI。所以我就自己寫了重定向頁面。這樣就有符合 HTTP 標準的重定向頁面了。

該頁面已經搬家囉!
==================
它的新家在 <a href='<!--# echo var="sent_http_location" -->'><!--# echo var="sent_http_location" --></a>
  1. 依規定 301, 302 重定向只接受 GET 和 HEAD,因此以其他請求方式就會停在回覆實體。 

在 nginx 上調整所有文本的編碼

全站的文字檔都使用相同編碼是很常見的。尤其是 UTF-8 儼然是今日的實作標準。然而,nginx 預設的 charset_types 設定不包括 text/css,遑論其他非純文本。(例如 text/markdown

預設的 charset_types 應該要是 text/* 才對,因為為了向後相容,許多 text/* 格式預設解讀為 ASCII (us-ascii)。就連 text/xml 也是如此,即使檔案中有 BOMXML 宣告也徒勞無功。所以,現在我們應該用 application/xml 來傳遞 XML。

然而 charset_types 設定只檢查完全符合的 MIME,不然就必須用 * 匹配所有類型。幸好 nginx 有可以匹配正則表達式的 map,而且 charset_types 也接受變數。

map $sent_http_content_type $charset {
    ~^text/   utf-8;
}

charset       $charset;
charset_types *;

這樣的設定會讓 nginx 指定所有文本為 UTF-8,例如 text/css; charset=utf-8

如何用嘸蝦米打出〇

嘸蝦米從〇到十都是一碼字。取 O 就可以打出了。

事情不是憨人想的這麼簡單。

實際在 Unicode 查碼網站查詢用嘸蝦米打出來的其實是空心圓圈 (U+25CB WHITE CIRCLE) 而不是漢字(U+3007 IDEOGRAPHIC NUMBER ZERO)

為什麼會用錯誤的代替漢字呢?這也不是嘸蝦米願意的。過去台灣使用的中文編碼是 Big5,當初 1970 年的溪頭會議就堅決把當成符號而不是字,因此也就只收錄符號。在嘸蝦米輸入法設計的時候,Unicode 尚未興盛,當然就是收錄 Big5 中的了。

直到 Unicode 興盛以後,嘸蝦米也從善如流把加入字根。然而為了向後相容,要打出〇必須選字。不過多數使用者,包括過去的我,仍然一直傻傻地把 ○ 當成中文的〇……。

把 ○ 當成〇有什麼影響

對機器來說 ○ 就只是個符號。這對於電腦翻譯是一大阻礙,更會干擾視障人士的輔助設備。視障輔助軟體把二○一七唸成二, white circle, 一七甚至二、十七都有可能,留下滿頭問號的使用者。

此外,對明眼人來說,把 ○ 當成〇也很醜。因為 ○ 是符號,所以字型的設計上會與漢字脫鉤,和漢字擺在一起就很不協調。而且文字加粗時,符號應該保持原狀。粗體的 、斜體的 看起來仍是 ♠。

錯誤版正確版
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七
二○一七二〇一七

〇字的身世

則天文字中的。南宋算草中亦以圓圈符號代表 0,於是後來〇才假借為 0。雖然〇也可以算是符號,但是使用上與一、二、三等漢字無異,字型設計上應視為漢字。而且與表示正確、圈選的的意義迥異,應該視為不同的字元。

反序低花搭配強無王可能有害

我一直在研究 Wbridge5 這個優秀的橋牌程式。曾經我對於它收錄反序低花卻預設停用感到不解。後來我得出一個結論。

Wbridge5 預設開叫強無王,因此停用反序低花。收錄反序低花是因為 Wbridge5 提供開叫弱無王的選擇。

反序低花源自 K-S 制。反序低花流行東亞與東南亞,是因為精準制的流行。精準制大致是 K-S 制加上強梅花,因此也繼承了弱無王的傳統。

現在我們打美式的制度,開叫強無王。很多人卻仍然使用反序低花。不可否認反序低花有好處,只要搜尋反序低花inverted minors 就能找到。在此我只列出反序低花的壞處作為平衡報導。

答叫垃圾筒 1NT

反序低花的問題不在於特約本身,而是制度隨著特約修改 1NT 答叫。答叫 1NT 通常有二種意思:

建設性 1NT
即使我方兩人皆低限,也期望吃到 6 墩。
垃圾筒 1NT
可能是弱牌。假如我方皆低限,期望吃到 5 墩。

開叫 1♠, 1, 1,若敵方不插叫,為了防止掉局,答叫的 1NT 都是垃圾筒。

假如答叫反序低花,敵方不插叫,都是垃圾筒 1NT。

假如答叫反序低花,那麼開叫 1♣ 後即使敵方不插叫,答叫的 1NT 也是建設性 1NT,因為弱牌可以答叫最長牌組。即使是 3-3-3-4 的弱牌也答叫 2♣,因為開叫人常有 4 張梅花。

開叫 1♣ 保證 3 張
低限時,恰好 3 張的機率是 21.5%。
開叫 1♣ 可以是 4-4-3-2
低限時,恰好 3 張的機率是 20.4%,4-4-3-2 的機率是 5.19%。

反序低花把 4 張支持的弱牌丟進垃圾筒

在 3 階表達 5 張支持的確提升了阻塞性,但 4 張支持的弱牌由 1NT 出聲卻降低了阻塞性。難道 2 低花只比 1NT 高一、二級,差這麼多嗎?我們考慮以下的叫牌過程。

W N E S
  1♣ - 1NT
X1 - -2 ?

要不要逃倒是其次,重點是東家用罰放表達正性答叫。無王合約對莊家不利,平均牌力只能吃到 6.06 墩。即使 1NTxS−3 還是比 3NTE= 慘,除非身價有利,況且雙方主打總和很可能不到 13 墩。

假如當初回答的是 2♣,東家要有梅花牌組才能罰放,否則正性答叫都得到 2NT 以上。阻塞的意義在於讓敵方高叫強牌。雖然 2♣ 只比 1NT 高一級,敵方原本用於表達強牌的 pass 與扣叫硬是被抬到了 2NT 以上。

  1. 迫伴賭倍 

  2. 轉為處罰 

智力測驗

本文所稱的臺灣包含臺灣本島、周圍外島以及澎湖群島。

中華民國之於臺灣就如同以色列之於巴勒斯坦。臺灣與巴勒斯坦在二戰前分別是日本和英國的殖民地,在戰後獲得解放,理應經由住民自決成立新政府或選舉決定併入現存國家。但在英美的主導下,巴勒斯坦被猶太人的以色列國管轄,而臺灣則是被中華民國管轄,並未經過住民的同意。

巴勒斯坦已經在 2012 年加入聯合國。希望有生之年能看見臺灣遲來的住民自決。

下載

本圖CC BY-SA 4.0 釋出。國旗都取自維基共享資源

反導函數與雅量

學妹拿了一張微積分考卷,白色的底子帶著黑色的題目與滿江紅的批閱。當她拿給我們看時,一位數學愛好者說:

設 \( y = \cos x \)

\[ \tan x = \frac{\sin x}{\cos x} = -\frac{y’}{y} \] \[ \int \tan x\,dx = -\ln \left| y \right| = \ln \left| \sec x \right|. \]

我說:

設 \( y = \sin x \)

\[ \begin{align*} \int \tan x\,dx &= \int \frac{y}{1 - y^2} dy \\ &= -\frac{\ln \left( 1 - y^2 \right)}2 \\ &= -\frac{\ln \left( \cos^2 x \right)}2 \\ &= \ln \left| \sec x \right|. \end{align*} \]

一位外號叫大怪客的同學緊接著說:

設 \( y = \tan x \),則 \( y’ = y^2 + 1 \)。

\[ \begin{align*} \int \tan x\,dx &= \int \frac{y}{y^2 + 1} dy \\ &= \frac{\ln \left( y^2 + 1 \right)}2 \\ &= \frac{\ln \left( \sec^2 x \right)}2 \\ &= \ln \left| \sec x \right|. \end{align*} \]

我們不禁哄堂大笑,同樣的一題,每個人卻有不同的感覺。那位學妹連忙把考卷用 L 夾夾好,她覺得 tan 就是 tan,不是 sin/cos,也不是 \( y \),更不是 sec2 的反導函數。

如果他能從老把戲解題,你又何必要他走向法國佬的新方法呢?你聽你的 Bronstein,他看他的 Moses,彼此都會有等量的 pass 的感受。人與人偶有摩擦,往往都是由於缺乏那分雅量的緣故;因此,為了避免學生來要分數,增進和諧,我們改考卷的時候必須努力培養雅量。

2015 臺北 101 跨年煙火

從信義松仁路口以 Xperia Z1 拍攝。