2023年8月27日 星期日

我有酒,你有故事嗎?

最近不少事務變動,在公司待的年數也增加不少,在這多頭的年裡,經歷過同事加入與主動離職,這次開始經手組員離職的流程,回顧著被離職同事的工作項目,也得重新安排給其他同事接手。在管理團隊上也體驗完全套:招募成員、成員主動離去與成員被動離去 Orz

想著想著,就像木曜四超玩的畢業典禮:

對於被離職的同事,這樣的歲數上有著許多可選之路,恰恰好被推動去選擇其他擺盪許久的機會,雖然被離開肯定不是好事,但這樣的故事發展卻也不是壞事的。

想想好友們換房換車的繼續行動、出國的出國、皮拉提斯的皮拉提斯,大家還是持續過得很精彩的。

這陣子跟幾位朋友分享彼此近況,同輩的有那種越來越收斂在自身的狀態,實在是有太多不可控的項目,包括工作的變異、親人的分離、退化的健康,漸漸地「關我屁事」可能也真的成了主流?讓自己的心情專注在自身了。

時間依舊是稀缺,當年用第24個夏天來做個足跡紀錄,現在可能要變成“人生還有多少個暑假可用?”了,看在學生時期認識的教授開始退休,還有把刷 leetcode 當作娛樂的,努力譜曲著自己的故事。

2023年6月11日 星期日

建置 DSM 7.2 可運行的 tmux 工具 @ Synology DS723+, AMD Ryzen R1600, DSM 7.2 ToolChain

前幾天升級 Synology NAS 後,之前用 DSM 7.1 toolchain 編譯出的 tmux ,在 DSM 7.2 運行出包,一跑就顯示 server exited unexpectedly,通常解法是清除 /tmp 下跟 tmux 相關的檔案目錄,只是依舊沒解決問題 Orz 就試試看在 Ubuntu 22.04 + DSM 7.2 ToolChain 重新編譯一下,下載 ToolChain 資訊:
由於 DS723+ 的處理器是 AMD Ryzen R1600 系列,就來下載 AMD x86_64 : r1000-gcc1220_glibc236_x86_64-GPL.txz。基於 DS723+ 有 Docker 可用,這次就全在 Docker 內運行,直接叫一個 Ubuntu 22.04 出來使用:

# apt update -y ; apt upgrade -y ; install sudo vim openssh-server -y ; service ssh restart;

後續遠端進去後,就可以輕鬆建置完畢,最後實測 7.2 toolchain 編譯出來的 tmux 的確就可以正常運行啦。其餘編譯細節就參考 [Linux] cross compile tmux for Synology DS723+ via DSM 7.1 ToolChain - AMD x86 Linux 4.4.180 (r1000) 即可,僅一開始的 toolchain 換掉即可:

2023年5月3日 星期三

yt-dlp 開發筆記 @ Python3, macOS 13.2.1

yt-dlp 是知名的網路影音網站研究的專案,內含不少各大網站的爬蟲技術。若某個服務失效想要貢獻的話,可這樣操作,邊改 code 變測試:

% git clone https://github.com/yt-dlp/yt-dlp.git
% cd yt-dlp
% python3 yt_dlp/__main__.py 'URL' --skip-download -j

以 2023/08/31 即將關站的 Xuite 為例,從 github.com/yt-dlp/yt-dlp/tree/master/yt_dlp/extractor/xuite.py 找一則 unit test 來跑:

% python3 yt_dlp/__main__.py 'http://vlog.xuite.net/embed/cE1xbENoLTI3NDQ3MzM2LmZsdg==?ar=0&as=0' -f mp4 --skip-download -j | jq '' | tail -n 25
  "format_id": "720",
  "height": 720,
  "protocol": "http",
  "resolution": "720p",
  "dynamic_range": "SDR",
  "aspect_ratio": null,
  "http_headers": {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.50 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-us,en;q=0.5",
    "Sec-Fetch-Mode": "navigate"
  },
  "video_ext": "mp4",
  "audio_ext": "none",
  "format": "720 - 720p",
  "_filename": "男女平權只是口號?專家解釋約會時男生是否該幫女生付錢 (中字) [27447336].mp4",
  "filename": "男女平權只是口號?專家解釋約會時男生是否該幫女生付錢 (中字) [27447336].mp4",
  "_type": "video",
  "_version": {
    "version": "2023.03.04",
    "current_git_head": "b423b6a48",
    "release_git_head": "392389b7df7b818f794b231f14dc396d4875fbad",
    "repository": "yt-dlp/yt-dlp"
  }
}

至於,若要貢獻給 yt-dlp 社群,可以仿其架構,挑一個 extractor 來模仿,過程要繼承 InfoExtractor 來做事,例如實作 _VALID_URL 和 _real_extract(self, url) 等等,可以挑幾個實作沒那麼複雜的網站研究一下流程:

2023年4月19日 星期三

小米A3 Xiaomi Mi A3 Root 與 Restore 還原到原廠ROM的筆記 @ macOS 13.3.1




沒想到已經過了好幾年,當初花不到七千買的 Android one 手機,實在好用,試試看把小米A3 Root 一下吧!遙想十多年前,在製作 Android Image 時,還要埋個用C code包裝出 su 指令呢 XD 真的很久沒 root 手機了。整個過程稱不上快,但又覺得不會太不方便。

在進行前,依舊要老話重提:

Root 有風險,手機可能變磚又損失保固,請自行評估承擔風險,在此是對四年前的手機把玩,推論是小米A3國際版手機,產品代號 laurel_sprout 且系統沒有被限制不能 rollback,以下步驟不見得適合其他款手機或品牌。

先簡介如何還原到原廠 ROM 過程,這邊就不多提如何建置操作環境(例如 adb, fastboot 指令、手機的 bootloader 是解鎖狀態)

首先,先查看手機狀態,有個關鍵的產品代號:laurel_sprout ,這跟找尋小米A3原廠ROM有關。

% fastboot devices
############ fastboot

% fastboot getvar product
product: laurel_sprout
Finished. Total time: 0.002s

% fastboot getvar anti
anti: 0
Finished. Total time: 0.001s

% fastboot getvar all
(bootloader) crc:1
(bootloader) DP:0x0
(bootloader) parallel-download-flash:yes
(bootloader) hw-revision:10000
(bootloader) unlocked:yes
(bootloader) off-mode-charge:0
(bootloader) charger-screen-enabled:0
(bootloader) battery-soc-ok:yes
(bootloader) battery-voltage:4356
...

下載原廠ROM,網路上用 小米A3 跟 ROM 就會找到,當然,在用一下 laurel_sprout 或是小米A3國際版、全球版也能找到:


看到網址是 miui.com 就比較安心不用怕了。接著要讓手機進入 fastboot 模式,過程就是先關機,在開機時,同時按住 Power 和 Volume Down 按鍵:



進行燒機:

% cd ~/Downloads
% tar -xvf laurel_sprout_global_images_V12.0.26.0.RFQMIXM_20220808.0000.00_11.0_2292e2c0b1.tgz
% cd ~/Downloads/laurel_sprout_global_images_V12.0.26.0.RFQMIXM_11.0 
% chmod a+x ./flash_all.sh && time ./flash_all.sh

如果開機一直卡在這邊,就一樣先設法進入 fastboot 模式(先長按 Power 鍵促使關機又重開,重開時按 Power 和 Volume Down),接著一樣靠 fastboot devices 偵測到後,執行下面的指令,指定啟動位置即可排除:

% fastboot set_active a
% fastboot reboot



如此就可以順利進入到手機啟動畫面,若用時間來看,刷機(fastboot)約6-7分鐘,第一次重啟時,從 Android One 畫面到出現置中的 Mi logo 不到 30 秒,接著從 Mi logo 到進入首次啟用 Android 新機畫面要接近 3分鐘。


如此手機就還原到原廠狀態了!此時 bootloader 仍是處於解鎖狀態。

接下來,說說如何 root 手機,過程:
  1. 解開 bootloader (unlocked)
    • % fastboot flashing unlock
    • % fastboot flashing unlock_critical
  2. 打開開發者模式,也啟用 USB偵錯
  3. 下載原廠 ROM - laurel_sprout_global_images_V12.0.26.0.RFQMIXM_20220808.0000.00_11.0_2292e2c0b1.tgz 從中取出 boot.img 來製作使用
  4. 在 github.com 下載 Magisk apk 來安裝 ,並使用 Magisk boot.img 製作新的 boot image
  5. 把手機關鍵,再次進入到 fastboot 模式,把 magisk_patched-26100_MKaXg.img 燒入 boot 區,接著重啟後,就可以有 root 權限了。
以下連續動作:

% wget https://github.com/topjohnwu/Magisk/releases/download/v26.1/Magisk-v26.1.apk  
% adb install ~/Downloads/Magisk-v26.1.apk 
% tar -tzf ~/Downloads/laurel_sprout_global_images_V12.0.26.0.RFQMIXM_20220808.0000.00_11.0_2292e2c0b1.tgz
% tar -xvf ~/Downloads/laurel_sprout_global_images_V12.0.26.0.RFQMIXM_20220808.0000.00_11.0_2292e2c0b1.tgz laurel_sprout_global_images_V12.0.26.0.RFQMIXM_11.0/images/boot.img
% adb push ~/Downloads/laurel_sprout_global_images_V12.0.26.0.RFQMIXM_11.0/images/boot.img /sdcard/





接著是使用 Magisk app 製作出新的 magisk_patched-26100_MKaXg.img ,把它取出後,等下靠 fastboot 燒錄進去:

% adb pull /storage/emulated/0/Download/magisk_patched-26100_MKaXg.img ~/Downloads/
/storage/emulated/0/Download/magisk_patched-26100_MKaXg.img: 1 file pulled, 0 skipped. 36.4 MB/s (67108864 bytes in 1.760s)

接著手機進入 fastboot 模式後,燒錄:

% fastboot devices
############ fastboot
% fastboot flash boot ~/Downloads/magisk_patched-26100_MKaXg.img 
Sending 'boot_a' (65536 KB)                        OKAY [  1.682s]
Writing 'boot_a'                                   OKAY [  0.333s]
Finished. Total time: 2.026s
% fastboot reboot
Rebooting                                          OKAY [  0.000s]
Finished. Total time: 0.000s

如此,手機重啟動後,已完成 root 了,這時單純用 adb shell 進去後打 su 則可以看到手機出現攔截的事件資訊,收工!

2023年4月3日 星期一

TOTOLINK LR350 4G LTE SIM WIFI AP 無線網路分享器 與 無框行動 Circles.Life


之前一直想要實驗,趁一些特價活動先敗了一台約 1500 台幣的 TOTOLINK LR350 支援4G SIM卡的無線分享機,他的優勢是這個價格支援全台常見的 4G 電信,其次是有設計 USB 供電。如此就可以拿來隨便移動。若單純要再低價一點,應當還有約 1200 元左右的款式可挑,但並沒有支援所有全台電信網路,使用上要留意。


在台灣,單純的手機上網+熱點分享已經很夠用了,但還有一種可能,那就是住家電信訊號不佳,必須靠 WIFI AP 的服務,如路橋旁或是樓高超過10樓時,很有可能遮蔽到電信基地台,這時,可能整個空間只有少數幾處會有可連外的訊號,如靠窗的位置等等,這時就是這類設備的好處,當然,更正確地解方還是牽網路線來解吧! XD




目前在雲林實測的效果就是靠 fast.com 和 speed.cloudflare.com 可測得的瞬間速度可以有 10Mbps 似乎堪用。

最後,一開始在臺北交叉測試時,用一隻 android phone - 小米A3 直接插 SIM 卡實測可以有 80Mbps ,但用 TOTOLINK LR350 卻只能看到 50Mbps ,比較小可惜了。另外,同一時間也申辦 台哥大 和 遠傳 辦理體驗4G網路,實際上台灣大哥大的 SIM 卡在 LR350 上沒測試成功,有顯示可以連上並取的 IP ,但一直顯示無網路,簡稱無法連外(不確定是不是七日網路體驗版的差距,也無機會驗證了)。另外,用小米A3分別實測台哥大和遠傳的速度,實際上遠傳還是比較優的,也的確符合網路上的統計資訊,全台4G電信網路平均速度的品質是 中華電 > 遠傳 > 台哥大。

而這次測試至少也驗證 TOTOLINK LR350 與 無框行動 Circles.Lift 是可以正常連線使用的,若申請 Circles.Lift 需要推薦碼,可以再用這組:LFNGFYC5


參考資料: