2022年4月15日 星期五

尋找DS Audio的替代方案

家裡有Synology NAS的人,可能都用過DS Audio(手機APP)與Audio Station(Server),用來播放音樂算是還可以用,但這麼多年都沒什麼改進,缺乏一鍵加到最愛的功能,網頁跟手機APP把音樂加到播放清單的功能也不好用,給音樂評分的功能看起來也沒什麼用處。尋找替代方案,大多都會提到Plex Media Server,可是這個軟體太過臃腫(bloated),不符合我的需求。除此之外就是各種相容Subsonic的方案。

Server部份,目前使用NAVIDROME,運作起來相當輕量且迅速,網頁界面也比較現代化。安裝方式使用Docker,說明文件建議不要用root啟動程式這點就要特別注意設定檔貯存位置與音樂檔案儲存位置的存取權限,否則程式會無法啟動或存取音樂檔案。

Android手機APP部份先測試了substreamer,看起來很漂亮但是ui會因為io存取卡住,使用體驗打折扣。除此之外還試了UltrasonicSubtracks,都相當順暢,不過在Play Store的安裝量很少,比不上substreamer。這三個App都有一鍵加到最愛與下載離線收聽的功能,基本上符合我的需求。不過從界面上來看,substreamer跟Subtracks比較符合我的喜好(跟Spotify很相似),應該會優先使用Subtracks。

2022年1月1日 星期六

Sonoff Basic R2 1.3刷Tasmota

從網拍上買兩個Sonoff Basic R2,想要接臥室的嵌燈。使用ESPhome透過網頁界面把韌體刷入後,接上電源發現沒動作,LED也不會亮,改用Tasmota用網頁界面刷韌體也是同樣的情況。

之後在網路上搜尋找到有人使用同樣硬體版本的R2刷入韌體可以使用,他是用esptool這個指令界面工具去刷,參數部份特別指定刷入模式使用dout (Dual Output),我也用同樣的指令刷入後就可以正常運作了。

2021年8月23日 星期一

讓Win10在連入Samba 4 Server時,會出現登入身份驗證畫面

這次的情況是使用者用Windows 10去連安裝在Ubuntu 20.04上頭Samba 4,不會出現身份驗證畫面,這樣就無法使用Samba分享的家目錄。如果是換成Windows 7以前的版本則會。

在網路上搜尋許久,最終找到這個問題的解答。

Ubuntu版本的Samba設定檔,預設會把map to guest指定為Bad User,只要改成never或註解這行,就會強制驗證使用者。

2020年1月27日 星期一

解決使用IPv6時,無法連上isthereanydeal.com的問題(EdgeRouter X)

使用環境:中華電信光世代100M/40M,使用Ubnt EdgeRouter X(ER-X)設置IPv6 Dual Stack
症狀:isthereanydeal.com可以正確解析到正確的v6 IP,Ping也沒有問題,但是用瀏覽器開啟總是會顯示連線失敗,查Google得到以下結果

建議使用SSH登入ER-X,然後修改防火牆設定
admin@er-x:~$ configure
[edit]
admin@er-x# set firewall options mss-clamp6 mss 1432
[edit]
admin@er-x# commit
[edit]
admin@er-x# save
Saving configuration to '/config/config.boot'...
Done
[edit]

以上設定僅適用家用型光世代,如果是固定制光世代,可能會有不同的mss值。

參考來源:
https://community.ui.com/questions/IPv6-mss-clamp6-setting-optimization/dfa1b7e1-e92e-4ab9-902f-580725d2e653
https://community.ui.com/questions/BUG-REPORT-Mss-clamping-creates-buggy-IPtables-rules/f373f88f-ff35-4984-b879-63f114f2b6ad

2019年11月13日 星期三

如何在Django正確使用ManifestStaticFilesStorage這個功能


假設Django專案目錄在/home/myproj。在settings.py要設定
# 靜態檔案對應的URL
STATIC_URL = '/static/'
# 靜態檔案放置的位置,這裡就等於/home/myproj/static
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 放置其他靜態檔案的路徑,把css/js等檔案放在這,以下的設置等於/home/myproj/staticfile
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "staticfile"),
)
# 使用ManifestStaticFilesStorage作為靜態檔案處理方式
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

 在正式運行的伺服器執行
./manage.py collectstatic -v 3
會看到css跟js等檔案都複製到static目錄,並產生附加hash值的檔案。
...
Post-processed 'css/bootstrap.min.css' as 'css/bootstrap.min.a15c2ac3234a.css'
...
每次更動這些檔案後都要執行collectstatic,否則會出錯。

在基礎樣板載入靜態檔案要使用{% load static %}與{% static 'css/bootstrap.min.css' %}來載入靜態檔案。

在Nginx關於靜態檔案目錄的設置
...
location /static {
        alias /home/myproj/static;
    }
...

如果把css/js等檔案放在STATIC_ROOT裡頭,那麼執行collectstatic就不會產生附加hash值的檔案,瀏覽網站就會跳出500錯誤。錯誤Log會有ValueError: Missing staticfiles manifest entry for .... 的訊息。