遷移到 hexo + github pages

如果你看的到這篇文章,表示我已經將網站徹底遷移到 github pages

為什麼?

從過去文章記錄看,我更新的頻率其實非常低,數個月一更到現在是年更

關心伺服器還有沒有活著比寫文章還累

再來是wordpress,他是一個優秀的多人寫作系統

但很明顯至今整個網站的使用者只有我一人

從後台看,我有裝的擴充不外乎就兩個,disqus留言板和GA

這兩個在hexo中都有替代方案

既然如此,用php動態語言去管理文章這類管靜態內容就是一件沒太大意義的事

加上用 markdown 寫文章原來是如此舒服的事,可以用自己喜歡的編輯器

雖然內容和排版就沒那麼豐富就是了

接下來…

過去大學四年活得太頹廢,都在打遊戲華盛頓撿垃圾真香

幸運的是畢業就有工作,但還是想回來寫blog(這兩個沒有關係吧

先從月更來恢復寫blog的習慣吧

主題的話,雖然我沒能接觸最新的技術像AI, blockchain之類的

就把自己遇到的問題和解法簡單寫出來好了,blog的名稱也換一下,舊的實在是…(捂臉

disqus 會晚點回歸,外部服務遷移時要比較謹慎

ASUS Tinker Board 2S 上 ubuntu server 22.04(for raspi)

前言/屁話

上一次寫blog已經是在一年多前了,這裡真的是放到快長草了
沒拉,我沒有忘記這裡,伺服器如果是託管或GH我可能真的真的就不管了,但這可是在我樹梅派2上運作的怎麼可能忘記

對!說到伺服器(強硬點題),原本買了一塊ASUS Tinker Board 2S,本來想做為一些軟體無線電應用之類的,但官方的Debian系統有點一言難盡,apt 預設source都在國外,下載速度實在是對不起家裡剛換的1G路由器

如果換source吧,會缺少特定軟體支援,而且官方系統的kernel版本最高就到4.9(沒記錯的話),那如果有這麼多問題為甚麼我不自己重新自己編譯一份系統呢?

所以這篇文是在描述我折磨我自己全過程

準備交叉編譯環境(cross-compile)

總而言之你只需要一個能夠編譯arm64的編譯器,我是直接在WSL 1上面設定的,可以參考其他人設定arm64交叉編譯環境

編譯U-Boot

萬事起頭難,開機也是從bootloader開始(硬扯),甚麼?你說其實是先從boot rom開始?,不重要啦,我又不是這個嵌入式系統專業的,而且我也不需要從boot rom編譯,等等我也不會編譯U-boot…

先看官方怎麼做的吧,從官方github找來u-boot原始碼,照著做總沒錯了,後來我用U-Boot官方v2022.04版本的source當最終版本,原本是用v2021.10,但不知道為甚麼沒辦法從EMMC開機,試到快瘋了才想到換版本

TK2S 的 CPU 是 RK3399 開機提供兩種模式,一種是使用官方的初始化程式(閉源),另一種是U-boot的TPL/SPL

既然都選擇開源了,那肯定是用第二種,編譯的時候需要config 和 device tree,config用官方的就可以了,記得打開lpddr4支援還有選對板子(預設是chromebook),如果有額外需要設定一些記憶體位址,參考rk3399-evb的config,device tree的部分,一樣用rk3399-evb的dts,但需要修改一下引用的記憶體類型,rk3399-evb用的是lpddr3,註解掉改引用lpddr4的版本

編譯完成後得到 idbloader.img 和 u-boot.img ,分別燒到0x40和0x4000

阿對了記得編譯ATF(bl31.elf),希望現在說還來的及(被揍

編譯 Linux Kernel

最最最最折磨人的時刻終於到了,先從device tree開始

device tree用於描述硬體訊息的方法,但RK3399的BSP kernel的device tree一部分並不相容 linux mainline,所以悲傷的事情來了,我需要從頭一個一個檢視這兩邊的差異從頭寫一份device tree

你是不是以為這就結束了?天真! fan53200是TK2S的voltage regulator,但是這個驅動並不存在 mainline 中,所以我也得自己修改相關驅動

你是不是又以為這就結束了?太天真了! TK2S上的乙太網路的MAC address是從I2C通道上的一片EPROM提供,然後mainline 中一樣沒有相關方法,所以也得自己改,不過我在這裡發了個懶,我直接在檢查MAC有效時直接寫死MAC,原諒我…

最後是config,按照ubuntu 基本需求去選就好了

編譯完成得到 dtb 和 kernel,放進boot分區,建立 extlinux/extlinux.conf 開機選單,最後從ubuntu那複製一份 meta-data, network-config, user-data 進來,分區label用system-boot,類別fat32

系統

理論上來說,我應該從ubuntu官方的base製作一份rootfs,但既然Rpi 4也是64位元的,所以我直接從for Rpi 4的image用dd貼過去

後記

到這裡,我有了一個能開機的,沒有其他功能(kernel module)的ubuntu

所以後來又用ubuntu的kernel source編譯了一遍,這邊坑也是蠻多,比方說編譯環境要求更高,initramfs沒辦法開機等,不過有zfs, wireguard等功能這些努力挺值得的

最後貼一下inxi證明:

最後把自己生的垃圾丟出來給大家圍觀,至於系統和其他二進制文件,就不丟出來丟人現眼了,畢竟問題還蠻多的

https://gist.github.com/Benny1923/a6e28f2406f305b7144c4d67908657aa

沒有問題的部分

  • 可以開機
  • 乙太網路介面
  • USB 3 type A 介面(type C 沒有條件測試)
  • 三顆LED(pwr, act, rsv,act 動作燈很暗,不清楚為甚麼)

有問題的部分

  • 藍芽
  • HDMI(沒有測試)
  • 其他沒提到的介面
  • sdio 電壓報錯(沒有影響)

目前是先用第一版的kernel進系統後用安裝自己編譯的ubuntu kernel替代,原本的當作備用開機替代

結論

我再也再也不要使用社群小的板子了…

proper functioning meteor sdrsharp plugin

somehow
I download meteor plugin from rtl-sdr.ru
and install it…

It’s not working as I expected, it didn’t shows on the plugin panel, then I close sdrsharp, .NET error message pop up, it happened at :
SDRSharp.Meteor.MeteorPlugin.Close()

I tried google, but nothing.

So I decided decompile the plugin and try to fix it.
and I did it.

meteor plugin v2.3 on SDR# 1738

There is download link:
modded version <– bug fixed, download this one
Original Post(rtl-sdr.ru) <– before bug fix

軟體無線電(SDR)入門,軟體篇

接續上篇硬體篇,東西都買好後就可以著手設定拉
這篇使用作業系統Windows 10,軟體用SDR#,初學用這個也方便

這裡放連結:
SDR#(SDRsharp)

下載完後解壓縮到桌面還是哪裡
打開資料夾找到install-rtlsdr.bat
然後點兩下安裝

接下來注意!
如果你用的是win7可以忽略下面操作(關閉驅動強制簽章部分)

關閉驅動強制簽章

win10有強制驅動簽章,要先關掉才能裝驅動
方法也很簡單,按著SHIFT不放,然後點重新開機
進入重啟選單然後照著下列選項點
「疑難排解」->「進階選項」->「啟動設定」->「重新啟動」(這邊會重開電腦)->鍵盤按數字7
下面有圖

安裝驅動

插上電視棒
在資料夾下找到並打開zadig.exe

選「options」,把「List All Devices」打勾

下面長條選單找到「Bulk-In, Interface (Interface 0)」
確定一下USB ID 是 0BDA 2838然後按「Replace Driver」
過程中可能有警告,按安裝就好

簡易操作教學

打開SDRsharp.exe,一個複雜的介面彈了出來

紅框:來源選擇
綠框:訊號格式
籃框:當前頻率

找到紅色框,找到並選擇「RTL-SDR (USB)」
齒輪按一下把「Tuner AGC」打勾後按Close,齒輪旁的播放鍵按下去,就可以開始收聽了

可以先試試看把頻率調到當地電台,訊號格式選WFM

What’s next?

SDR可以玩的東西很多的,最直接就是拿去收聽航空/業餘波段
再者,你也可玩數位解碼,DSD Plus, TETRA了解一下
(在這邊提醒一下,不要破解有加密的通訊,會犯法)

最後,暑假結束了,好不甘心
覆蓋一張自己接收到的衛星照結束這回合

軟體無線電(SDR)入門,硬體篇

WOW! 竟然,東摸摸西摸摸摸到了SDR
上網查過一輪資料,什麼AGC,Tuner,ppm等名詞都出現了
我是有看沒有懂

因此,這是一篇新手向的文章
如果你是老手,請…
沒有,我沒有請你離開,我反而還想請你留下來指正我的錯誤

這篇先說關於硬體部分,軟體篇之後會更新

接收器好多好難選,小孩子才做選擇,我全都要?

從設備開始好了,想要接收無線電,絕對不是把衣架塞進USB就可以接收的,你需要一個能接收和轉換訊號的設備,這些設備通常使用USB介面傳輸。

好的接收器可以到萬元以上,便宜的可以千元有找,該買哪一種好?就看你喜好囉
首先要先搞清楚差在哪,接收器通常由一個調諧器(Tuner)和一個類數轉換器(ADC)組成,調諧器的作用,就是把選定的頻率轉換成適合後方類數轉換器處理的訊號,類數轉換器則是將剛剛處理好的訊號轉換成數位資料並透過USB傳送到電腦

為甚麼要先說這兩個,因為價格大多都是在這兩個晶片上,拿後面的ADC來說好了,有8bit,12bit,14bit之分,越高的位元代表靈敏度越好,訊號識別能力更強,另外價錢也有可能加在一些奇怪的地方,像內建bias tee(T型偏壓器),可以幹嘛?可以直接由接收器供電給近天線端的LNA(低噪放大器)使用,還有改TCXO等

要怎麼在機海中找到適合自己的接收器呢?
鑒於大家都是初學者,我個人是使用RTL2832U+R820T2,對於新手來說是不二選擇(工商?),因為這是市面上最便宜的接收器了(我花了450NTD),雖然在訊號處理品質等其他問題上可能沒專業設備來的好,但夠新手用了,不管你是聽業餘還是航空頻道,而且網路上關於該接收器的文章夠多,基本上你能踩的雷別人都先踩過了

是天線還是牙籤?可以換天線嗎?

如果你是買了有包裝的RTL2832U,裡面送一根剔牙棒天線,纜線還不怎麼長,若你是使用筆電還好,整組搬出去接收信號還算OK,蹲在家的桌機呢?
下面來給一些奇怪的解法:

  1. 用單板機(Raspberry pi)使用rtl_tcp當遠端工作站
  2. 家裡有看無線電視嗎?可以用它的天線喔,電視那端用的是F connector,接收器用的是MCX  connector,找到轉接頭就可以直接用,接收效果還很好。
  3. 人家筆電都可以搬出去,桌機為什麼不能,氣勢不能輸!

我在天線這方面沒有研究很深,天線的學問太大了

硬體篇先到這裡,之後會更新軟體篇,主要講設定和操作SDR#

HD audio 接線

電腦前面板的音效輸出插座壞惹
這種跟機殼在一起成套的零件似乎是沒有在替換的

不然…自己試著修理看看?
先去買零件,麥克風的插座其實跟耳機是一樣的
然後回去拆了機殼上的插座,簡單記錄下腳位和對應的線路
然後悲劇了

買錯插座,少兩隻開關腳位
機殼上的音訊插座有個開關腳位
用來判斷耳機換是否插入

然後我買的插座沒有開關
怎麼辦呢?
那來研究一下腳位好了

這是HD audio前面板音效接腳
若7腳與6或10短路,晶片就會認為前面板有插入麥克風或是耳機
我的插座就是因為這裡壞了(接觸不良)才沒聲音

於是乎我索性直接把6,7,10直接銲接在一起
缺點就是電腦會一直認為前面板有麥克風耳機
只能手動切換輸出裝置
(沒差,反正我只用耳機)

圖片來源: https://www.sevenforums.com/sound-audio/44491-ac97-hd-audio-front-panel-layouts.html

Sony Xperia XA1 Ultra(G3226) 刷TWRP Recovery+Root

hi Android Root我又回來了,隨著手機功能越來越完善,Root這件事似乎變得沒那必要,但若想玩一些新奇的功能,那Root依然那裡等你,雖然近年來利用漏洞一鍵root的App的消失使root沒那麼容易,但對於熟悉刷機的你我都知道,製造商留了一扇窗給你…

老樣子

免責聲明: 刷機有風險,解鎖失保固,操作前請再三評估,作者一概不負責

好了不必多說,你需要的東西我列好了:

  1. 一隻Xperia XA1 Ultra(我手上這支型號是G3226,雙卡版,但理論上叫這名字都可以用)
  2. 一條傳輸線
  3. adb fastboot工具和相關驅動
  4. boot.img和recovery.img(詳見文末參考自第一條)
  5. 對解鎖、刷機等名詞相關基礎名詞之認識(對,如果你是第一次玩可能得去其它地方爬文)
  6. 記得備份,解鎖會清除資料

解鎖手機

打開手機的電話,輸入*#06#看第一組IMEI號碼,記下來然後關閉,輸入下一組號碼*#*#7378423#*#*進入工程模式,選Servie info > Configuration找到Rooting status下面那行,確定它寫著Bootloader unlock allowed: Yes就可以繼續進行下去,如果是No那就不用玩了。

打開設定,進入系統 > 關於手機,對著版本號碼連按7次回到系統找到開發者選項,打開USB偵錯OEM解鎖(可能需要輸入手機密碼,如果你有設定的話)

接上傳輸線,打開console(小黑窗)(注意!這邊假設你已經知道adb和fastboot的環境配置和小黑窗用法,不知道的可以去google”adb fastboot用法”,如果我寫了會分掉其他優秀作者的曝光度)
輸入:
adb devices
多留意一下手機,會有需要授權的提示,同意後,再輸入一次上面指令,確認裝置ID旁邊的狀態是device而不是unauthorized才能進行下一步

輸入:
adb reboot bootloader
你的手機回重開進fastboot模式,LED會是藍燈,先不要碰它

Sony解鎖網站最下面有Select your device:,選Xperia XA1 Ultra,再往下,在Enter IMEI, IDID or MEID中輸入剛剛記下的IMEI,下面第一個和第二個打勾,按Submit,會給你一組解鎖碼,複製下來

回到小黑窗,輸入:
fastboot oem unlock 0x解鎖碼
確定訊息沒出現FAILED就解鎖了

刷Recovery

接下來的部分是從文末參考那簡單翻譯過來的,任何我說明不清楚的部分可以去看看

參考那邊沒有G3226的boot和recovery,但你可以抓G3212的版本(個人正在用),基本上都是同一手機,只是在不同國家有其它型號。

在fastboot模式輸入:
fastboot flash boot boot.img
沒有FAILED就是成功了
然後重啟:
fastboot reboot
重開好後你應該需要重新設定手機,然後再去開發者模式設定USB除錯(adb)
都處理好了輸入:
adb reboot bootloader
(注意手機授權請求)
進fastboot後輸入:
fastboot flash recovery recovery.img
沒有FAILED就是成功了
最後拔掉傳輸線

進recovery

開機時同時按電源按鈕和音量向下鍵,向下鍵要按到手機震一下還有LED亮紫(?)燈才能放手

這邊要是遇到需要輸入密碼請直接無視,然後去Wipe那邊選Format Data輸入yes即可

刷Root

到這邊應該已經沒有老手在了吧,刷完Recovery基本就自由了
刷Root的簡短概述就是:

  1. 下載Magisk然後放進手機
  2. 進Recovery選Install
  3. 選剛剛放進去的卡刷包(在 /sdcard 下)
  4. 完成收工 , 重新開機

參考或翻譯自:
1.https://forum.xda-developers.com/xa1-ultra/development/g3221-built-sources-t3622886

網站維護日誌+CF的worker妙用

好久沒有寫blog了,上一次是多久前阿…

有看過關於本站頁的都知道(沒看過?右上角連結點一下)
我的網站是架在一台rpi 2上的
到今天依然是它在服務著我以及各位
自從網站架成後,四年過去了,之前對他不聞也不問,直到昨天心血來潮
「要不我把它重灌?」
的確,隨著新版本的php7出現,而我還在用php5,在安全及速度上都說不過去
雖然平常會apt update && apt upgrade -y
但升級php7這件事,我真的不想去動它,沒為甚麼,單純我懶
要改config有的沒的(藉口,到處都是藉口)

終於我在昨天下定決心把rpi 2的系統全部重裝,終於可以升級php7啦
先解決維護頁面問題,原本我是打算把文章全快取成靜態頁,這樣就不會影響維護時的流量
but 這實在是太麻煩了,還有我網站根本沒有流量(36篇文章真的沒什麼流量),所以用一段文字來顯示維護中就好
然後我需要一個靜態頁伺服器放顯示維護中的html
等等…我的pi等等要下線,那誰來負責這件事?
CF有一個叫 Workers 的功能(要開加速),你可以設定條件網址去觸發worker,worker 執行用javascript編寫的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})

/\*\*
\* Fetch and log a request
\* @param {Request} request
\*/
async function handleRequest(request) {

let modifiedHeaders = new Headers()

modifiedHeaders.set('Content-Type', 'text/html; charset=utf-8')
modifiedHeaders.append('Pragma', 'no-cache')


//Return maint page if you're not calling from a trusted IP
if (request.headers.get("cf-connecting-ip") !== "123.123.123.123")
{
// Return modified response.
return new Response(maintPage, {
headers: modifiedHeaders
})
}
else //Allow users from trusted into site
{
//Fire all other requests directly to our WebServers
return fetch(request)
}
}

let maintPage = "網站維護中...";

上面這段程式會把所有請求攔截下來,傳回”網站維護中…”的文字,除非你的ip是123.123.123.123,那你可以正常瀏覽網站

再來是備份和重灌
先把wordpress的文章和圖片導出,以防萬一,sqldump也跑個
確定東西備份好,關機,拔SD卡
我看著rpi 2想:「這東西竟然能連續通電4年?」
然後就是重寫映像,放進去開機,然後ssh連上去
在這邊奉勸各位系統剛灌好,第一件事就是:

改密碼!!

全世界都知道raspbian的預設帳密是 pi / raspberry
以前有個朋友我剛幫他裝完系統,離開前有提醒要改密碼,隔天就被駭去挖礦了
我實在是不知道該對他說什麼好,只好再幫他重裝一次(工具人貼紙+1)

然後 nginx php7-fpm mariadb(mysql) 裝好
“簡單”設定一下, wordpress 下載回來
把setup流程跑完,文章導回來,大功告成囉!
另外我也換了個佈景主題,希望各位喜歡

最後
新版的編輯器好不習慣啊,天啊我不在這段時間wordpress都改了些什麼
更新完後使用舊編輯器的文章語法高亮有問題,我會盡快修正
但對那些不能修復的呢,咳咳,我也不知道怎麼辦

參考資料: https://medium.com/clouddevops/cloudflare-no-maintenance-mode-still-a-maintainace-mode-d0d088d414c1

windows 10 沙盒 正式上線 自定義配置檔 自己寫

這星期1903上線拉,最讓我期待的是windows 10終於有內建的沙盒程式啦。

啟用方法很簡單,先確認自己更新到1903,然後去舊版控制台,程式集裡的「開啟或關閉Windows功能」把「Windows 沙箱」選項打勾然後確定完重新開機,然後你就可以在你的開始列表中找到「Windows Sandbox」。
點下去就有一個隨開即用的沙盒模式,直接關掉裡面發生的事情就當沒有發生過,重開又是一個乾淨的新系統。

以上就是沙盒的介紹,那Windows 沙盒也提供自定義配置檔案來對沙盒做部分修改,比如說讓沙盒存取外部檔案之類的。

首先先建立一個空檔案吧副檔名叫 .wsb

然後用記事本或其他文字編輯器打開它
輸入以下的文字

設定放這

所以這是一個xml格式的設定檔
所以可以在 configuration 的區段下寫配置
目前我查到支援的配置有

虛擬GPU(VGU)

1
<vgpu>參數</vgpu>

DisableDefault 兩個參數

網路功能(Networking)

1
<networking>參數</networking>

DisableDefault 兩個參數

資料夾映射(MappedFolders)

1
<mappedFolders> 子項目 </mappedFolders>

這裡面有子項目,參見下一節說明

資料夾映射子項

1
2
3
4
<mappedFolder>
<hostFolder>外部主機路徑</hostFolder>
<readOnly>參數</readOnly>
</mappedFolder>

HostFolder 參數:外部主機資料夾路徑,例如:C:\Users\Public\Downloads
ReadOnly     參數:是否為唯讀模式,接受 truefalse
備註:目前所有的映射都是指向桌面,希望未來可以有指向其他地方的設定

登入時執行(LogonCommand)

1
<logonCommand> <command>執行的指令</command> </logonCommand>

Command 參數:指令,程式或某個批次檔,例如要打開C:\的話:explorer.exe C:\

所以比如說我想把我的下載資料夾映射到沙盒中
設定檔就會長這樣
config.wsb

1
2
3
4
5
6
7
8
<configuration> 
<mappedFolders>
<mappedFolder>
<hostFolder>E:\\Downloads</hostFolder>
<readOnly>true</readOnly>
</mappedFolder>
</mappedFolders>
</configuration>

最後直接點開你寫好的檔案,你就得到一個桌面上有一個映射資料夾的臨時windows環境了

這就是全部拉,需要參考的可以去下面參考連結找,有提供兩組範例
上一次寫文章都隔了423天,真的好久,預名都續費1次了…

參考資料:微軟技術社群 https://techcommunity.microsoft.com/t5/Windows-Kernel-Internals/Windows-Sandbox-Config-Files/ba-p/354902

更改windows下vagrant和virtualbox預設VM安裝位置

身為一名苦逼的高中生,有時候被學校一些奇怪的文件格式和閱讀程式所以被windows綁住也是理所當然的(WTF
最近換了SSD,開機速度真的沒話說
換了SSD帶來的不一定只有好處

使命:盡量不要把它填滿 – Benny @ 2018

從前有個小男孩,他安裝程式就是下一步同意下一步到底
換了SSD後他需要仔細地看完每一步,並更改安裝位置到HDD
不得不說,SSD的容量真的很令我傷腦筋…
這還不打緊,SSD有明確的壽命問題,任何重要的資料放在SSD都不OK
最近在使用laravel開發網站
對,在windows上
想必得用到虛擬機之類的,但虛擬機真的超傷SSD(看那驚人的讀寫率)
照著官方的說明安裝虛擬機,發現他是裝在C碟的使用者資料夾下
搞什麼,我還不想那麼早讓SSD折壽
於是在網路上東找西找終於找到了類似的文章(感嘆google讚嘆google)
先說明我的環境 virtualbox 5.2.8 vagrant 2.0.3 在 windows 10 (build 1709) 全部都是64位元
不一定要用上面版本
那麼先把目標路徑的資料夾建好
然後執行
SystemPropertiesAdvanced.exe
打開「環境變數」
然後在使用者變數中新增一筆變數,叫「VAGRANT_HOME」,變數值輸入目的路徑加上「.vargrant.d
好了確定保存

大概像這樣吧
然後去修改
C:\Users\[使用者名稱]\.VirtualBox\VirtualBox.xml
找到 defaultMachineFolder,並把他的值修改成目標資料夾

改完後你就可以開心地使用vagrant下載box和安裝box不用擔心容量和SSD被操死的問題了
嗯?你問我怎麼把laravel的專案移動到其他地方?
知道homestead.yaml吧?這麼做就好啦

以上內容參考自
https://medium.com/@cedricdue/moving-vagrant-boxes-and-related-virtualbox-vms-to-another-drive-f1d7c50d20bc