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 可以看出是不是有前後對應的「條件說」?也可以對照俄文有的用 буду 有的沒用,都是相同的時間序列的意思.