2025-03-26

Linux Live的記憶體(RAM)使用

 二十幾年前開始玩KNOPPIX這個很不同的Linux distribution後,就再也沒回去用正常安裝方式,KNOPPIX當時的壓縮法是用cloop,幾年之後各大distribution也開始採用Live system的方式來製作自家的CD/DVD ISO,絕大多數都是採用squashfs壓縮演算法,之後差不多squashfs主導了Live system。

 不過各家Live system用在initrd裡的系統導引法各有不同,Debian用「live」, Ubuntu用「casper」,已經走入歷史的CentOS用的也叫「live」但和Debian不同,Siduction用fll。各種live system有一個相同的開機參數「toram」, 它會把整個Live系統cp到RAM裡面,在開機完成後,我們可以把用來開機的USB隨身碟或光碟整個拿掉,因為系統已經不再依賴它了。

 但是Ubuntu用的casper在遇到「toram」參數後,會cp整支USB隨身碟全部進入RAM裡面, 這樣是有問題的,如果你的USB是64GB,而裡面裝了其他不是Live system的檔案,它會全部cp到RAM裡,萬一你的RAM只有16GB或更少,這樣就無法完成開機,因為RAM被塞滿了,而系統還沒完全cp進入RAM。

 使用Ubuntu而不要讓它cp所有USB裡的檔案進入RAM,必需自行手動拆解initrd好把casper裡面cp「整支USB」的那一段程式改成只cp「某個目錄」之下的檔案,再做成initrd,這樣才不會把RAM灌爆掉。其他Live system有的會有不同的參數(例如image_name)來指定只cp目錄下的特定檔案(squashfs壓縮的主系統檔)到RAM裡,像siduction用的fll會自行計算該檔案的大小,以便切割出為存放那個檔案大小的區域,也避免會浪費RAM。

 Live system有一項重要的參數"overlay", 在絕大多數initrd裡的規化都是採用50%, 極少數可以讓user自行指定,在我實際使用上發現50%其實不太符合需求,特別是在RAM少的電腦,例如RAM只有4G的系統下,overlay 50%的話就是只有2G能拿來當儲存體,存放開機完成後諸如 /etc, /home, /usr, /var等等,會相當不足!

 如果把"overlay"加大到90%的話,既使只有4G RAM的電腦也還算堪用,但這時就不宜使用"toram"的方式,而是保持系統放在儲存設備如USB隨身碟或電腦本身的硬碟。

至於開機有哪些參數可用,好像沒有共通的說明文件,只能自行拆解「initrd」看它裡面有什麼相關的參數可用,沒有的話就只能自行修改。

關於RAM少的電腦還有一個可以補救的方法就是使用zram, 而zram大概用50%就好,因為RAM已經很少,然而這50%可以存放大約三倍容量的資料,也就是說一台只有4G RAM的電腦,使用zram後的記憶體相當等於(4-2)+(2*3)=8G RAM,邏輯上多出來一倍,不過它要依賴CPU運算進行「壓縮/解壓縮」,或許會稍微延遲軟體的執行,但對於無法在物理上增加RAM的環境,還是相當有益處。

2025-02-27

MacBook與Linux kernel

 之前在一台退休的Intel MacBook跑Linux Live系統都只是用USB隨身碟開機進入使用,完全沒動到它的SSD,因為老機器RAM很少,不能用"toram"來載入,因此全程都要掛一支USB碟在機器上,其實有些不方便也不好看。

 後來這台MacBook的macOS已經無法再升級(其實硬要升級還是有辦法,只是已經對使用macOS沒什麼興趣)。個人在各種機器上使用Linux Live system已經二十幾年了,想到這台老MacBook的touchpad觸感不錯,重量相對的輕,電池續航力也有三個多小時,偶而帶它外出也蠻好用,現在把它的SSD割了10GB一小塊,打算用來塞入Live system(只是單純從USB copy到SSD, 不是執行正常的Linux install)。

 之前做的USB開機碟可以支援MacBook本身的Wifi以及Camera,更新到最後是Ubuntu 20.04.4,可以看到MacBook的SSD無誤,但有一陣子沒再用它,加上20.04有點年紀了,某些軟體無法換用新版本,於是這次改用Debian Trixie來開機,並且做好Wifi以及Camera(Mac叫做FacetimeHD)的支援,MacBook的硬體都能用到。

只是用它開機完成後,發現完全看不到MacBook已經割好的SSD!就是說用cat /proc/partitions時除了USB隨身碟之外完全看不到MacBook的SSD partition。變成使用的全程要一直依賴插一支支USB隨身碟。

 這時再降回去用Ubuntu 20.04.4開機,卻是可以在/proc/partitions看得到SSD,先懷疑Trixie包的initrd方式不同,於是拆除initrd裡的early,early2,再試還是一樣!看來不是initrd裡面的問題。

 搜尋網路上的相關Linux以及MacBook的資訊,但看到一堆都是講怎麼用apfs-fuse來mount,而我遇到的問題是完全看不到SSD,跟mount的問題無關。

 接著分別找了Arch,Debian,Ubuntu相關或衍生的distribuion的kernel/initrd (4.x或5.x以及6.x)來開機比對,發現只有5.x能看到SSD,而4.x跟6.x都看不到,真的是很奇怪的問題?

 又在網路上陸續找一些相關MacBook問題,最後找到一篇小小的文裡提到解決方法是在boot option加上intel_iommu=off

 加了這個option的Trixie 6.x kernel開機後果然能看到MacBook的SSD。

 那麼隨機找幾個不同kernel版本來看看它是怎麼定義"intel_iommu"的?

  • 4.9.0
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y
  • 4.15.0-20
    CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
  • 5.10.188
    CONFIG_INTEL_IOMMU_DEFAULT_OFF=y
  • 5.19.0-32
    CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
  • 6.1.0-29
    CONFIG_INTEL_IOMMU_DEFAULT_OFF is not set
  • 6.11.5
    CONFIG_INTEL_IOMMU_DEFAULT_OFF is not set
  • 6.12.6-1
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y
  • 6.13.2
    CONFIG_INTEL_IOMMU_DEFAULT_ON=y

 以上各版本kernel在不加任何boot option的情況下,只有5.10.188可以看得到MacBook SSD, 因為只有它是CONFIG_INTEL_IOMMU_DEFAULT_OFF=y 也就相當於在開機時加上 intel_iommu=off

 其它版本有幾個都是相當於
intel_iommu=on
或可以說,沒定義成off 就看不到SSD了。

 根據kernel文件提到「The Intel IOMMU driver allocates a virtual address per domain. Each PCIE device has its own domain.」
如果想進一步研究,可以參考以下文件:
http://www.intel.com/content/dam/www/public/us/en/documents/product-specifications/vt-directed-io-spec.pdf

低效款電腦執行AI distilled model

 前一篇提到被媒體大力炒作的Deepseek R1,因為手上電腦比較薄弱,所以拿它的distilled 8b model來跑,之後陸續再試的也都挑能力差不多的distilled model,像是tulu3:8b model, 感覺它明顯比deepseek R1:8b model來得聰明,如果說deepseek R1:8b是小學生,那tulu3 8b幾乎是高中生,因為問tulu3有關宗教的問題它也能清楚對答,不像前者常常胡說八道不知所云。

 接著又試了gemma2:9b model, 不曉得是不是多了1b ? 發現它比前兩種更聰明,對這三個能力差不多的distilled AI model 用同樣的「台灣台北市木柵以出產什麼聞名?」來提問,得到的回答是:

  1.  deepseek R1:8b -> 高品质木材(它聲稱自己會用正體中文,但所有回答都是簡體字)
  2.  tulu3:8b -> 優質竹炭
  3.  gemma2:9b -> 文山包種茶

看來多了1b的model確實有比較聰明一些!

2025-01-31

Deepseek R1與π小數點

 農歷新年這幾天,Deepseek成為新聞談話的主題,因為它把NVDA股價嚇了一大跳,原本只是到Youtube找找看有什麼評論資訊,其中看到包括微軟退休工程師David Plummer的看法,他提到如果Deepseek所宣稱的都是真的,那就像你在家裡就可以自製一台法拉利跑車,而且功能完全跟公司貨真品法拉利一模一樣,這當會嚇掉法拉利公司的股價。

 David又提到從它的model來看,它是從大model來training出小model,這個小model不必依賴強大的硬體就能在一般人家裡的電腦執行AI。

就像幾十年前個人電腦發展史一樣,PC出來的時候讓一般人不必購買像大公司大機構裡的大電腦,而可以擁有自己的個人電腦來執行各種軟體。但這樣的問題是,當大model裡有什麼bug,由它train出來的小model便繼承了先前的bug。

 另外也看了Jeff Geerling以及Aleksandar Haber的Youtube video,發現只要用Raspberry Pi也可以安裝小model的Deepseek在家裡玩,於是動手用一台比Pi的性能還高一些的舊Macmini(16GB RAM)裝來玩玩看。從https://www.ollama.com可以找到六個distill的版本,當然也有原本的R1(671b)。我的舊Macmini完全沒有NVidia GPU,所以不可能快,不過我想正確性應該相同。

先裝一個最低階1.5b來玩,發現它幾乎答非所問,於是再裝一個8b的,問它列出π小數點後面100位,結果它開始跟我聊天,說什麼一般人不會用到小數點後面100位,接著東扯西扯。我想這跟我的電腦沒有NVidia GPU應該無關吧?但它還是繼續東扯西扯就是不肯列出小數點後面100位,後來終於列了小數點後40位,不過我一看,從第21位數開始就是錯的!因為我記得小數點後面50位,可以百分之百確認從第21位之後就是錯的。

 我再孤狗一下「怎麼用python程式列出π小數點後面100位」,得出來的結果是只用了三行python code就能做到要列幾位數就列幾位數,但是為什麼8b model 的deepseek一直列不出來?

 另外在一篇網路文章https://www.kelacyber.com/blog/deepseek-r1-security-flaws/ 裡看到說他利用兩年前早就公開的技術,可以jailbreak Deepseek來得到想要的資料,也就是說別的AI裡早已補起來的漏洞,在Deepseek卻仍存在!而且能從Deepseek得到一些違法的知識,像是製造爆裂物等等。

 目前OpenAI也質疑Deepseek偷了他們的東西來用,這也讓人難免不想到中國各行各業過去幾十年來總是盜用、抄襲別人的智慧財,OpenAI指責Deepseek利用OpenAI的model來train Deepseek的model,也就像盜印圖書館的書來自己成立一間圖書館,這樣當然不必花大錢買書。但目前對於版權的法律還沒進步到AI這一塊,因此就算OpenAI能舉出Deepseek抄襲、盜用,這個問題目前仍是無解。

2024-12-28

Bluetooth跟network stack有關嗎?

最近拿到一台Asus UX303UB舊電腦, 原主人嫌它在Windows跑不動,我拿來跑Debian Trixie,週邊device都沒什麼問題,查一下BIOS是202版,未曾更新,再到Asus網站download新版302來升級。下載的BIOS是zip檔,解開之後cp到USB隨身碟上。

這台機器的好處是可以直接開機進BIOS,在這環境下升級BIOS,不必依賴其他程式在Windows環境裡進行升級。開機按F2進BIOS畫面,從flash的畫面找到USB碟上面的BIOS檔案,按下去,確認要升級,等BIOS升級完成後reboot進入Trixie,跑一個script來巡一遍系統週邊,發現竟然沒有Bluetooth!

用lsmod查一下bluetooth module已載入無誤,modinfo查它並不需要相關firmware,再用rfkill看竟然沒有bluetooth, systemctl查bluetooth有啟動,bluetoothctl查看是沒有controller!太奇怪了!原本有啊!

重開機進BIOS畫面找找看是不是有什麼bluetooth的設定?找了半天並沒有,倒是有一個Network stack的設定項目,發現它是disabled,之前看到是enabled,所以把它改回enable,包括ipv4、ipv6,然後重開機進Trixie,有bluetooth了!

試試看連接Android手機傳送檔案、藍牙喇叭,都可以正常工作。

google查了一下好像找不到bluetooth跟network stack有相關的資訊?

2024-11-29

讓美國再次偉大

上個月川普當選下一任美國總統了,之前他說「要讓美國再次偉大」,就我從媒體上看到的川普,他所謂的偉大只不過是「賺錢」罷了,這和美國的真正偉大顯然完全不同。

美國之所以偉大,是在七十幾年前出錢出力,幫歐洲那些不中用的國家打仗,使得今天的歐洲不是在希特勒納粹德國的統治下。美國的偉大,是在七十幾年前不只在歐洲出錢出人,在亞洲一樣的出錢出人,幫的不中用的亞洲國家拋頭顱灑熱血,使得今天的亞洲不是在皇軍的大日本帝國統治下。要不是美國的偉大,哪有今天的歐洲、亞洲?

你可以說那是美國為了自身利益才出錢出兵,但是那不就是你們無能的歐洲國家、你們無能的亞洲國家免於被征服併吞的原因嗎?別再說什麼英勇抗戰的屁話了,沒有美軍的血汗,你們有今天的日子嗎?

可惜的是美國在過去三十年間只想賺錢,姑息養奸的果實便是讓邪惡國家利用廉價的勞工賺了大錢。美國曾經一相情願的以為那個邪惡又窮困的國家有了錢之後,就能改邪歸正,能成為民主自由的國家。但是遲至這幾年美國才大夢初醒,原來邪惡國家有了錢之後,變得更加邪惡,繼承當年大日本帝國的遺志,開始東征西伐,準備引來再一次的世界大戰。

商人本色的川普有什麼能耐讓美國偉大呢?看來似乎沒有!只想關起門來賺大錢,絕對無法讓美國偉大,川普應該仔細回顧七十幾年前的美國,有那些流血流潭的先烈的美國才叫做偉大!

2024-09-30

AC75,風力推進的極限?

最近看了America's Cup直播,赫然發現單靠風力推動的帆船,竟然速度可以達到四十幾knots(節,1knot=1.86km/h),這應該是現代科技的極限了吧?

這種帆船叫做AC75,是2018年出現的新規格,它的長度為75英呎,再查了一下,另外還有AC40,也就是船身長度40呎,還有一種叫做LEQ12,就是船身小於或等於12呎。船身做到跟F1賽車類似,風阻很小,AC75為八個乘員,身體都藏在船身裡,只有頭部露出船身,以減少風阻,而他們不斷像騎腳踏車那樣在踩的,應該是提供控制帆以及水翼的動力(我猜測)。

AC75這一類的應該叫做水翼帆船,它不是使用引擎動力,而是單靠風力。它有三支水翼,左、右各一,以及尾翼。左、右的水翼可以視需要抬出水面,除了更減少水中的阻力之外,也能提供平衡,後面的尾翼跟飛機尾巴的水平尾翼相似。

水翼構造像飛機翼一樣,有flap可以調整攻角,當船達到某種速度,水翼會把船身推出水面,只利用在水下的翼就能行進,完全沒有船身與水的阻力,因此能高速航行,AC75的極速是50knots(時速93公里!),而AC40的極速也能達到45knots。(一般貨櫃輪最快大約22knots,我國沱江級軍艦最快航速約44knots)

更特別是它的主帆,傳統上帆船的帆就是一層布(或其他軟式材質),但是AC75是以twin-skin的方式來建構主帆,兩層帆就類似豆莢,像荷仁豆的豆莢,中間有一個空間,如果從桅桿正上方看下來,主帆的剖面圖跟飛機翼的剖面圖相似,也就是說它可以產生跟機翼一樣的流體力學,讓氣流的方向跟浮力(推力)的方向成為大約90度。飛機的氣流是從機首來,浮力是從機翼下方,互差90度,AC75氣流從船首來,推力卻從船左、右側來,也是互差90度。(這是我的理解)

這樣當AC75在逆風需要做Z字型前進時,船帆不必轉到大攻角來取得風力,連帶船身也不必切到太大的角度就能保持向目標前進,這時船速依然能維持在三十幾knots,任何傳統帆船都做不到的事。

在37屆America's Cup中(https://www.americascup.com/)看到參賽國家分別是紐西蘭、英國、瑞士、義大利、美國、法國,其中很驚訝的有瑞士,它明明是個四面環山的內陸國家啊!怎麼會有帆船運動?

2024-08-28

CEO會是全公司最害怕、抗拒AI的人

 這兩年AI炒熱起來,有人用ChatGPT來寫程式,於是寫程式的工程式開始害怕。曾經有某個CEO說五年內寫程式的工作就可以用AI取代,於是programmer人人自危。

 其實更該被AI取代的職位應該是CEO!

 CEO的職責不必懂程式,而是跟據各種情報以及資訊來下決定,以推展公司業務、提高公司獲利,讓股東賺大錢,但事實上CEO可能會下了錯誤的判斷,其中原因除了專業是否足夠?還包括自己的利益、自己的情緒、私生活等等干擾,最終下了錯誤或不應該的決策。

 一個CEO決策的錯誤,比數百個programmer的錯誤所導致公司的損失更加巨大,更不用說捲款潛逃的CEO了。

 一個造成公司虧損的CEO,卻領著比幾百、幾千個programmer加總起來還要高幾倍的薪水!

 如果用AI來當CEO,不必支付這一份在公司裡『絕對高的薪水』,更不用分股票,只要對AI CEO提出(輸入)各種條件、資料,透過AI來摸擬推演各種可能狀況,AI CEO能快速、無私、客觀、公正的做出最有利公司的判斷、下決定,相信這是絕大多數投資人所信賴和支持的。

  1. AI的運算比人腦快太多,能推演的狀況比人腦還多
  2. AI的判斷不帶個人私利、情緒、偏見、人情
  3. AI任職CEO不必領全公司最高的薪水
  4. AI CEO可以24小時,週休零日
  5. AI CEO不會有大房、二房、三房、小三
  6. AI CEO不會把公司員工當韭菜割

 這麼好的CEO不請來公司上班對嗎?

 如果說五年內programmer的工作會被AI取代,相同的,五年內CEO的工作也應該被AI取代。

2024-06-26

用mpv做簡報

 前面提到用mpv可以看youtube並且載入不同語文的字幕,後來想到是不是可以利用自製的vtt格式字幕來搭配mpv播放影片做簡報?

 一樣是影音播放軟體,VLC可能比mpv更出名,但我認為mpv比VLC好用,因為mpv可以在command line加上各種參數或由script來執行,達到把各種組合自動化的結果。

 這個試作是以最基本的簡報為目標,只用「圖片+文字」來構成,對於不想使用現成簡報軟體的時候,mpv是個不錯的選項,可以透過python或bash script呼叫ffmpeg,把「圖片、文字」組合成影片,再交給mpv播放,就達到基本簡報的目的了。

 關於影片製作以及字幕時序,是以每一秒換一張圖、一次字幕來算,或許會懷疑一秒不是太快了?不會!因為可以控制mpv的播放速度,如果設為0.1倍,原本的速度就變成10秒換一張圖、一次字幕的簡報速度。如果10秒不夠,那就按下暫停在某一張圖,便有充裕的時間進行講解,然後前進到下一個畫面,直到結束。

 vtt字幕的格式,以"WEBVTT"為第一行。
-----------
WEBVTT

1
00:00:00.000 --> 00:00:00.900
簡報文字第一行
簡報文字第二行

2
00:00:01.000 --> 00:00:01.900
簡報文字第三行
簡報文字第四行

3
00:00:02.000 --> 00:00:02.900
簡報文字第五行
簡報文字第六行

-----------
將文字檔存成例如 present.vtt 的檔名。1是搭配第一張圖的文字,2就是搭配第二張圖的文字,以此類推,可以只用一行,或很多行也可以,字很多的話,再把字體調小一些。

假設有十張圖要做簡報,我們用ffmpeg來組合圖片變成影片:
ffmpeg -framerate 1 -pattern_type glob -i 'present*.jpg' -c:a copy -c:v libx264 -r 1 present.mp4
"-framerate 1" 是一秒一張圖的意思(一般影片是30fps,一秒播30張圖),之後用mpv來播放時再把速度放慢到 "--speed=0.1" 就是一秒的十分之一,變成一張圖停留10秒(最慢可以設成 0.01秒,就是一張圖會停留100秒)。

然後在播放影片時,帶上自己做的字幕,播放時用的最基本參數是:
mpv --speed=0.1 present.mp4 --sub-file=present.vtt

mpv帶字幕時還有很多參數可用像是:
 --sub-border-color=\#000000\
 --sub-border-size=3\
 --sub-color=\#d0d0a0\
 --sub-shadow-color=\#2020d0\
 --sub-shadow-offset=15\
 --sub-back-color=\#3506080a\
 --sub-visibility=yes \
 --sub-align-x=left \
 --sub-align-y=top \
 --sub-pos=95\
 --speed=0.1\
(詳細說明請參考man mpv)

這樣製作出來的簡報mp4影片及自製字幕vtt加起來體積很小,很方便攜帶或傳送。

如果有RP2040微控器,也就是Pi Pico或Waveshare Zero之類的,焊上一個紅外線接收器,可以搭配circuitpython加上irremote(紅外線遙控)以及 adafruit-hid 來模擬鍵盤。
circuitpython的code.py可以加上以下模擬鍵盤的控制

kbd.send(Keycode.SPACE) #mpv 暫停/播放
kbd.send(Keycode.V) #mpv 字幕 顯示/隱藏
kbd.send(Keycode.LEFT_ARROW) #mpv 倒退10秒
kbd.send(Keycode.RIGHT_ARROW) #mpv 前進10秒
kbd.send(Keycode.SHIFT, Keycode.LEFT_ARROW) #mpv 倒退1秒
kbd.send(Keycode.SHIFT, Keycode.RIGHT_ARROW) #mpv 前進1秒
kbd.send(Keycode.R) #mpv 字幕上升
kbd.send(Keycode.SHIFT, Keycode.R) #mpv 字幕下降
kbd.send(Keycode.SHIFT, Keycode.G) #mpv 字體變大
kbd.send(Keycode.SHIFT, Keycode.F) #mpv 字體變小
(這些都是mpv內建控制播放用的按鍵。)

2024-05-31

用mpv看youtube也可以選字幕

用瀏覽器看youtube的壞處是廣告隨之而來,雖然firefox可以安裝adblock,但是在瀏覽器環境下看video還是不方便,例如要把螢幕截圖或是音量大小聲,都不如在mpv環境直接用手指來得方便。

個人認為mpv 是最方便的影音播放程式,它可以在command line執行,所以可以搭配其他程式來呼叫進行。各Linux版本都可以直接用它的管理程式來安裝,或是到以下官網下載。

https://mpv.io/

mpv可以分別按's'或大寫'S'來截圖,大寫'S'不含字幕,小寫會把字入納入。
最主要的是在mpv.conf裡加上這幾行有關截圖規格、存放目錄、檔名

screenshot-format=jpg
screenshot-jpeg-quality=90
screenshot-directory=~/caps/
screenshot-template="mpv_%ty-%tm%td_%tH%tM-%tS-%wT"

mpv 直接按 '/' 來把音量變小,或按'*' 來放大音量。

mpv也可以有各種語言字幕,當然是依youtube是否提供為準。
以下幾行關於影像解析度、字體、語言的設定,是針對較近的mpv版本使用。

ytdl-format=bestvideo[height<=?1080]+bestaudio/best
sub-font='Noto Sans'
sub-auto=fuzzy
ytdl-raw-options=ignore-config=,sub-lang="en,eng,enUS,en-US,cht,tc,zh,chi,zho,zh-TW,zh-CN,ja,jp",write-sub=,write-auto-sub=

就算你不看中國簡體字,也有需要寫zh-CN,因為youtube有些video雖然提供的是台灣正體字的字幕,但卻把定義寫成zh-CN,沒加這項就沒有字幕可看。

最後,要用mpv看youtube的話,要安裝yt-dlp,這裡有最新版
https://github.com/yt-dlp/yt-dlp

2024-04-29

地震、螢幕與Mac Mini

這個月最大的事件就是地震,4/3日最大,4/23其次,台北搖得很大,特別是高樓,驚嚇感十足,會讓人覺得是不是樓房要垮了?我的三鳥牌大螢幕從一公尺高的桌上搖到摔趴在地板上,但神奇的是,完全沒壞,連外表也沒明顯受損,可能是角度正好平趴到地板,擠壓的空氣成了緩衝保護,所以沒撞壞。

還好目前為止,大部份台灣人的生命、財產都還平安。

另外,一件有趣的事,就是拿到一台2012年下半生產的阿婆的Mac mini(Macmini6,2),接上HDMI螢幕跟一般PC用的鍵盤之後,按住Alt不放,再按電源開機,聽到鋼琴聲之後稍等,就可以選擇從我自製的USB Live Linux開機。

各項硬體包括Bluetooth(只有4.0)、Ethernet(Gb)、Audio、Video,除了Wifi都不必再手動做什麼安裝設定,便能夠使用了。Wifi的話就只是加裝b43的firmware到/lib/firmware/b43/目錄下,然後重新載入kernel(6.2.0-37-generic)本身的b43.ko就能用,不過效能似乎比外插的USB Wifi差一些,拆開底蓋拔除內建的小圓型天線,再接一條SMA母頭延長線,鎖上一支3dBi天線,就有相較於原廠天線更好的訊號,可以觀察cat /proc/net/wireless來比較。

 

但畢竟是古老的Intel第三代i7(i7-3615QM),效能上不能太要求,但也還能正常工作。RAM是兩支4G DDR3 1600,正好手上有一支標示8G PC3-12800的RAM,查了一下是可以用的,所以換上這一支8G,總共是12GB RAM。

整台包得很密,似乎散熱效率不好,所以為換天線把底蓋拆下來之後,就不再蓋回去,而是黏上四個腳,讓它站在桌面而不是緊貼著趴在桌面,這樣空氣可以流通,CPU的溫度馬上低了4度C。

使用起來雖然不能說又是一尾活龍,但一台12年前的電腦,跑Linux聽串流廣播、看串流影片、Youtube,做一般使用,像是從Bluetooth接收從手機把照片傳進來……等等都是OK的。

最後,還有一個device問題未解,就是紅外線接收器。用lsusb可以看到
Bus 001 Device 005: ID 05ac:8242 Apple, Inc. Built-in IR Receiver
但是在/sys/class/rc/目錄下是空的,比對其它內建IR receiver的ARM小電腦,在/sys/class/rc/下面可以看到一個rc0,那樣才能使用。

2024-03-16

隨手關歪壞(Wifi)

日常生活中大家常說「要隨手關燈、要隨手關水龍頭」,但是沒有人說「要隨手關歪壞」?一來是人們使用歪壞也沒幾年,對歪壞認識不多,反正種花電信來安裝,可以用就好了,沒想過要關掉。二是歪壞設備大部份是沒有像電燈的開關,沒辦法讓人按一下就關、就開。

大部份歪壞設備要透過網路從瀏覽器畫面登入,再慢慢翻頁到可以關或開的選項,然後進行設定,而且幾乎只有透過時程控管開或關,沒有按一下就開或關的,而且按一下設定之後,還要等一段時間讓歪壞重新啟動才能生效。

現在市售歪壞設備更是標榜「穿牆」,功率越強越好,賣方跟買方都有這樣訴求。所以我們打開歪壞一掃,左右鄰居的AP名字都會出現,有的甚至比你家裡的更強!

嚴格一點來看,歪壞訊號到處射,也會有安全上的隱憂吧?如果能「隨手關歪壞」應該會比較安全,也比較環保。

要能夠隨手關歪壞,大概只有自己DIY一途,DIY需要哪些東西?(可能需要一點電子焊接工作) 

1.一組SBC ARM電腦,例如各種Pi,Banana pi Zero, NanoPi Neo, RPi zero……,不需要高規格硬體。
2.作業系統使用Linux,所以需要一些基本的使用經驗。
3.Wifi硬體,SBC板上內建的,或PCIe/MiniPCIe介面的,或USB介面的,最好有外接天線。(可能會遇到某些硬體沒有支援AP mode,或需要自行compile driver,要實際試才知道)
4.紅外線接收頭(有些SBC會內建),網路買一個5元以內(搜尋1838B這一款),紅外線發射器(家裡不用的紅外線遙控器,或壞掉只剩一個按鍵正常的遙控器,因為我們只要用一個鍵就夠了)
5.一個LED(可以是onboard的或接在GPIO腳上)來顯示歪壞On/Off,或是接一個WS2812(NeoPixel)多彩LED,這個好用,只要三支GPIO就能控制幾十個RGB LED。
6.板上內建的MCU或外接的MCU(例如RPi pico 或 RP2040-zero),用來解讀紅外線訊號,下指令控制歪壞的開、關。
7.用某種語言來寫控制介面,例如常見的python,以及MCU上面的程式(例如circuitpython)。
8.底層控制程式,一為控制AP的hostapd,另一為dhcpd(可以用dnsmasq或是更簡便的busybox udhcpd)分配IP,以及routing, iptables NAT給client端。

SBC上面內建紅外線接收頭是最方便的,如果沒有,就要在GPIO上面插紅外線接收頭,如果從GPIO插有問題,那就把紅外線接收頭插在USB外接式MCU(RPi pico 或RP2040-zero)上面也可以。

解碼紅外線發射器的某個按鍵所發出來訊號的值,如果是內建MCU,可以在SBC上面執行例如"sudo ir-keytable -c -t"來讀取按鍵值,以便寫入介面程式。如果用RPi pico或RP2040-zero這種外接MCU,可以用"adafruit_irremote"這個circuitpython用的library來讀取按鍵值。

用bash寫一個同時啟動dhcpd以及hostapd的介面程式。

最後寫一個銜接MCU到OS的介面程式,來「開」「關」歪壞AP。
1.紅外線『發射器』送出訊號
2.紅外線『接收頭』收到訊號
3.MCU確認這個訊號是要控制歪壞AP,而非其他按鍵
4.MCU向介面程式傳達『收到了』
5.介面程式檢查hostapd,若是未執行,就執行bash介面,啟動hostapd及dhcpd
6.介面程式檢查hostapd,若是執行中,就執行bash介面,中斷hostapd及dhcpd

完成之後,按下遙控器上某一個鍵,歪壞就開啟,LED就亮,再按一下同一鍵,歪壞就關閉,LED就滅,這樣就能「隨手關歪壞」了。

2024-02-07

一位上帝,各自要怎麼表述?

今天看到「馬太 28:20」,查了一些不同語文譯本的文句,意思看起來有所不同.

一些中文本翻成「我所吩咐……遵守,[我就/我要]…與你們同在」
一些英文本用「Teach[ing] them .... to [obey/observe] ..... I will be with you」
一些俄文本用「...... Я буду с вами всегда」
這一類的會因為時間的線性關係,得出「條件A成立 -> 產生B的結果」的邏輯

但在呂振中本是用「…遵守…… 一切日子、我都和你們同在」
或是思高本的「…遵守 ...... 我同你們天天在一起」
或是巴克禮本「kà-sī in siú ...... góa ji̍t-ji̍t kap lín tī-teh」
一些英文本(包括KJV)用「Teach[ing] them .... to [obey/observe] ..... I am with you alway[s]
一些俄文本用「...... Я с вами всегда」
這樣的語句裡看不到時間前後對應,也就沒有「條件A成立 -> 產生B的結果」的邏輯,特別是從英文時式用 am 或 will 可以看出是不是有前後對應的「條件說」?也可以對照俄文有的用 буду 有的沒用,都是相同的時間序列的意思.

2024-01-31

公教服務是什麼?

最早在馬來西亞檳城的GEORGETOWN 看到一棟建築物外面寫著「公教服務處」,心裡覺得奇怪,怎麼這邊會有跟台灣類似的名稱,再看,原來是Catholic information service, 所以這裡指的是「天主教」的機構。

一樣會在公共場所使用漢字的國家,「公教」兩字卻有天差地別,在台灣指的是「公務人員、教師」,在馬來西亞指的是「Roman Catholic(羅馬公教[台灣為天主教])」。

在台灣,人們普遍會把「天主教」、「基督教」、「東正教」想成不同的宗教,但是在西方文化裡,這幾個只是教派差異,他們的用詞是Roman Catholic, Protestant, Orthodox, 通通都是Christian(基督教),只不過他們對神的解釋(神學)以及宗教儀式上有一些差異,那麼台灣的翻譯是不應該改成「羅馬公教」、「新教」、「東正教」才不會造成普遍的不正確認知?

說到這些,甚至可以進一步把Christian, Islam, Judaism視為兄弟教,因為他們都是奉侍亞伯拉罕(Abraham/Ibrahim閃族人的共認祖先)所宣講的神,而這位神就是祖先亞伯拉罕所認的唯一一位,只因後代的神學解釋不同,導致代代子孫打得鼻青臉腫。

不過話說回來,西方文化對是非的堅持,是不是同樣也是來自這樣的認知精神?而不是見人說人話,見鬼說鬼話,想討好一切的人、神?

2023-12-30

安慰劑、效果、中藥

安慰劑原本是用來給新藥進行盲測實驗時做為對照用,就是新發明的藥在受藥者身上發生的效果,一定要比用了安慰劑的人還要高出特定的百分比,才能斷定這個新藥是有效的。但隨著累積的案例增多之後,意外發現有些受試者雖是服用安慰劑,但也產生相當明顯的療效。

然後衍生出來的實驗是,原本盲測是不讓受藥者知道自己是吃了治療藥或安慰劑,改成讓他們明確知道自己所服用的是安慰劑,而不是真的治療藥,甚至告知安慰劑裡的成份是什麼。(稱為open label placebo,相對於盲測)

奇異的是,有些安慰劑受藥者跟用了治療藥的人有相同的治療結果!

當然不是所有人都有這樣的反應,但確實有些人既知道自己用的是安慰劑,又產生與使用治療藥的人產生同樣效果。

讓我想到,中藥之所以對有些人有效,對有些人卻無效,會不會也是類似安慰劑效應?尤其在華人文化圈裡,普遍意識認為中藥是有治療效果。

(從網路上的資料看到的是,不是所有人、不是所有疾病,都產生安慰劑效應,而只是部份)

2023-10-27

UV-K5 firmware資訊更新

使用了一段時間之後,在收接飛航通訊方面效果最好的是使用
https://github.com/egzumer/uv-k5-firmware-custom
這個github的firmware,它針對AM mode改良,所以聽起來不輸Uniden的scanner.

它包括spectrum功能,可以開啟頻譜模式來掃描飛航通訊,而且可以用到12.8MHz寬的範圍來掃描。

 

 按F以及5啟動頻譜模式,以截圖中的掃描來說,凸出來這一支訊號就是128.5MHz, 所謂12.8MHz寬,是在頻譜模式按4切換成128,再按1(7減少)增加到100.00k,最左端是118.1MHz最右端是130.9MHz。這個範圍掃描時會停在ATIS,因為它是不間斷發射(RCSS ATIS=127.4),所以按一下PTT下方的第一個按鍵Fn1,會把這個頻率列為不接收,下一輪掃到這裡就跳過,如果你所在環境還有其他強雜訊,使得掃描時停在那個訊號,就按一下Fn1來跳過。

 這裡說切換為100.00k是因為幾乎全部的通訊都落在小數後一位,即NNN.M,例如127.4 118.1 125.5 119.7 128.5,除了131.95外都適用。

 幾個重要按鍵:
1/7 增減掃描頻率間隔
4 掃描總數(循環改變)
2/8 增減掃描時改變頻率的間隔(按上/下鍵來改變頻率)
5 直接輸入你要起始的頻率(用*來輸入小數點)
3/9 改變收聽訊號的dB值
6 收聽頻率的頻寬
0 切換FM/AM/SSB
F/# 改變squelch線的高低
Fn1(PTT下面第一個鍵) 把出現的頻率列為跳過
Fn2(PTT下面第二個鍵) 頻譜掃描中,按Fn2可以切換背光
PTT 可以停在掃到的頻率

 從頻譜掃描來找出會出現的頻率,然後把頻率寫入記憶,常態收聽時切換到記憶模式(非VFO模式),按*鍵啟動記憶掃描。

 記憶掃描途中可以長按*鍵來切換 I 跟 II 兩個群組或是不分群組全部掃描
在非掃描時的記憶頻率,按5可以把這個頻率切換為第I或第II群組,或不屬群組.

 

 這是非掃描時的畫面,同時顯示兩個記憶頻道名稱及頻率,目前收到的是119.7000

 如果不想用web界面的方式燒錄(在Linux只能用chrome,不能用firefox),可以用k5prog這個工具,它已經修正bug,可以正常使用(之前版本會在半途中斷無法完成)。
https://github.com/sq5bpf/k5prog
在使用k5prog燒錄之前,要把下載來的bin或自己compile出來的bin拆解開,工具是這一支程式 https://github.com/amnemonic/Quansheng_UV-K5_Firmware/blob/main/uvmod_kitchen/qsfirm.py

 進入燒錄模式的按鍵是
1.先關機,插入連接線(3.5mm/2.5mm耳機接頭)
2.按住PTT不放,開電源,這時螢幕無顯示,照明用LED必須亮起來

執行方式如以下這一行
qsfirm.py unpack abc-xyz.bin k5flash.bin abc-xyz_ver.bin
"unpack" 這個就是拆解出給k5prog燒錄的格式
abc-xyz.bin 就是下載來或自行compile出來的bin檔
abc-xyz_ver.bin 只是看看它是什麼版本用的,與燒錄無關
k5flash.bin 是要交給 k5prog 燒錄用的格式檔bin,然後開始燒錄

k5prog -b k5flash.bin -YYYYY -F
這裡一定要加 -YYYYY -F
開始它會列出一些資訊,其中包括firmware的大小:
Writing blocks from address 0x0 until 0xf000, firmware size is 0xefec
然後看它的最後一行是不是 0xef00 跟 0x00ec
*** FLASH at 0xef00 length 0x00ec  result=1
這樣就表示全部燒錄完成了

記憶頻道的管理要用chirp, 請找next裡新的版本才有支援UV-K5機種
https://trac.chirp.danplanet.com/chirp_next/