分類
方法

通過 ICS 文件給日曆增加農曆

很長一段時間以來,我一直受沒有農曆可用的困擾。安卓原生的日曆不支持農曆,谷歌日曆也是到了安卓 8 才開始有農曆,等我用到安卓 8 的時候我已經開始去谷歌化了。轉用開源日曆應用(Etar)後也沒有發現很好的辦法來解決農曆的問題,主要是曆法這東西真的很複雜。終於在最近找到了一個方案,通過 ICS 文件把計算好的農曆導入日曆就可以了。我這裏提供了從 2017 年 01 月 01 日到 2049 年 12 月 31 日的農曆和節氣與公曆對應關係的 ICS 文件,只要選擇需要的年份導入日曆即可。 這些 ICS 文件是基於 infinet 開發的 lunar-calendar 項目生成的,其原始日期數據來自於香港天文台的公曆與農曆日期對照表。我在使用的時候將節氣和生肖做了繁體中文的轉換,並且刪減了一些不展示在日曆中的文本以減小文件大小。我修改後的腳本也可以在上面的分享文件夾中找到。

順便說下我這邊具體是怎麼導入的:我一直在用 Disroot 提供的 Nextcloud 實例,其中有日曆的功能,而我之前就已經在安卓上通過 DAVx⁵ 來同步日曆和聯繫人了。所以我是在電腦上通過瀏覽器來操作的,理論上在手機上也是類似的。日曆網頁的左側點「新日曆」選擇「新日曆」輸入名稱就創建好了新日曆了,如「農曆」。然後點擊左下角的「設定及匯入」-「匯入日曆」,選擇 ICS 文件然後選擇要匯入的日曆即「農曆」。最後耐心等待一番,因爲我通過網絡請求看到農曆竟然是一條一天這樣傳的,我的文件都是三年三年的,所以要耐心等它傳完,傳完後點擊一下「農曆」左側的開關就可以看到農曆了。手機上同步前先從菜單中「刷新日曆列表」就會出現「農曆」,再來同步就可以在日曆裏看到農曆和節氣了。

當然你也可以通過 Calendar Import-Export 將 ICS 文件導入本地日曆。

本文更新於 2023/03/06。

分類
软件

使用 Send Reduced 來減小圖片大小

Send Reduced 雖然只有區區 52 KB,但是卻有兩個非常好用的功能——壓縮照片和清理 Exif 數據。現在安卓手機照片越來越大,動輒一張照片就八九 MB,但是選擇 85% 的壓縮比壓縮後,圖片大小就只剩下六百多KB,肉眼也沒有可見的畫質損失,很適合發送給聯繫人和社交媒體。

不過也有一個小小缺陷,就是壓縮後的最大尺寸是個選項列表,最大的選擇是 2560,如果你一定要選擇大於此尺寸的圖片,就不能用它不行了。

分類
软件

安卓截屏軟件 Screenshot Tile

截图瓷贴 Screenshot tile(NoRoot)是一個方便的截圖軟件,它可以在快速設置面板(從屏幕頂端下滑即出現)中添加一個截圖的按鈕。我的手機用電源鍵和音量鍵截圖會有咔嚓一聲快門音,但是用這個軟件就不會。還可以設置爲先選截圖區域再執行截圖動作,這樣只截取重點區域而防止頂部狀態欄泄露隱私。看介紹還可以和一些自動化軟件聯動實現連續截圖,這個我就沒試過了。截图瓷贴要求安卓 7 以上的系統。

分類
软件

搜索引擎

Ecosia

Ecosia 是一個總部位於德國柏林的搜索引擎,他們將至少80%的利潤捐贈給非營利組織,用於在全球範圍內種植當地原生樹木。Ecosia 是 B Lab 認證的公益企業。他們宣稱實踐了碳吸收,使用再生能源為伺服器供能,保持財務透明,還保護用戶的隱私。

我試用了兩天,感覺還不錯,也安裝了他們的火狐插件,打算繼續使用。它的結果是從 Bing 返回的,一般資訊也都能順利找到,由於 Bing 很懂中國,所以它不會把維基百科的鏈接放在前面。順帶一提,同是使用 Bing 搜索結果的 DuckDuckGo 最近又可以直接訪問了。

searx

searx 是一款元搜索引擎(對其他搜索引擎的結果進行處理後返回結果),這樣其他搜索引擎便不易獲得搜索者的個人隱私。如果不想自己搭建,也有很多在線實例可供選擇。

在沒有遇到 Ecosia 之前,有用過一段時間 searx,搜索結果質量不是很穩定,但還是可以作爲一個不錯的備選的。它有兩個特點挺好的,一個是如果搜索到的頁面已經被互聯網檔案館所保存,則可以去看存檔的網頁;另一個是對於維基百科詞條可以在搜索頁就展示概覽。

Startpage

Startpage 在過去很長一段時間裏都是我的首選搜索引擎,它最大的特定就是保護用戶隱私。由於它的搜索結果來自谷歌,所以搜索質量幾乎等同谷歌。但是後來它不能從中國直接訪問了。


如果有興趣,可以讀下這篇關於搜索引擎的文章:A look at search engines with their own indexes

分類
软件

在線翻譯

除了谷歌翻譯之外,DeepL 翻譯器(註:2021-07-03日發現無法直接訪問了)也是一個不錯的選擇。

但是我今天發現了另一個在線翻譯——LibreTranslate。下面是一些英文翻中文的測試:

English中文
I like you主席先生
Do you like me??
What a lovely day, I hope the good weather continues.我的那一天爱好一天,我希望那里的天气继续发生。
I have never used such a stupid translator!我从未使用这种流行病的变压器!

如你所見,用這個 LibreTranslate 翻中文現在就是純搞笑。希望有一天它能學會真正的翻譯吧。最後無論使用哪一款在線翻譯都不能掉以輕心,即使是大廠產品也經常會翻車。

本文更新於 2021/07/03。

分類
网站

使用 UpUp 讓網站離線可用

UpUp 是個很小(2.5 KB)的 Javascript 庫,但卻可以方便的實現網站的離線訪問。我之前有一個小項目,PHP 的後端和頁面,另外藉助 Apeche Cordova 用 HTML 實現了安卓的客戶端以供離線使用。最近用 Django 重新寫了,藉助 UpUp 的離線頁面,我不用爲了離線使用而再去生成一個安卓應用。

一般的網站,要使用 UpUp 是非常簡單的,只需要在網站的頂層文件夾引入對應的庫即可,但是 Django 的靜態文件一般是放在 static 下的,要想在項目根目錄下提供它們,可以這樣設置。

#項目的 url.py 文件
from django.urls import path
...
from . import views

urlpatterns = [
    ...
    path('upup.min.js', cache_page(60 * 60 * 48)(TemplateView.as_view(template_name="site/upup.min.js", 
  content_type='application/javascript', )), name='upup.min.js'),
    path('upup.sw.min.js', cache_page(60 * 60 * 48)(TemplateView.as_view(template_name="site/upup.sw.min.js", 
  content_type='application/javascript', )), name='upup.sw.min.js'),
]

然後將 upup.min.js 和 upup.sw.min.js 放在項目的模板目錄裏,比如 mysite/site/templates/site/ 中。

最後在 HTML 頁面中引用並設置需要離線的文件即可。

...
<script type="text/javascript" src="{% url 'upup.min.js' %}"></script>
<script type="text/javascript" src="{% static 'site/js/jquery-3.6.0.min.js' %}"></script>
<script>
UpUp.start({
  'content-url': '/site/',
  'assets': ['/static/site/js/jquery-3.6.0.min.js',
   '/static/site/js/site.js', '/static/site/css/site.css']

});
</script>

離線站點調試的過程中遇到的另外一個問題是,離線站點必須是 HTTPS 類型的加密頁面,但是本地配置 HTTPS 又略嫌繁瑣,其實只要再 Chrome 裏添加例外(chrome://flags/#enable-site-per-process)即可。火狐我還不知道要怎麼添加,最近安卓火狐的一系列更新都不盡人意,實在是有些令人擔憂。

分類
软件

心臟異常檢測 Heart Anomaly Detection

藉助手機的麥克風來錄製心跳,然後使用 MananAgarwal 訓練的 Heartbeat-Classifier 模型來判斷心跳是否異常。經過測試,我和 Emanon 的心跳都是正常。我也有嘗試使用其他項目的實驗數據來測試這個模型,對於「二尖瓣迴流」和「主動脈狹窄」的異常心跳都成功的識別了出來。不過它畢竟只是一個人工智能模型,如果有不舒服,還是應該儘早去看醫生。

安裝 Heart Anomaly Detection

這是一個 python3 的 tensorflow 項目。項目本身並不大(9 MB)但依賴大概有 600MB ,所以推薦使用虛擬環境來安裝

#安裝依賴
pip install tensorflow keras librosa 
#下載項目
git clone https://github.com/MananAgarwal/Heartbeat-Classifier.git
#測試運行
cd Heartbeat-Classifier
python testing.py heartbeat-to-classify.wav
#稍等片刻應該會成功輸出
Normal heartbeat
confidence: 0.9638266

使用手機錄製心跳

由於我不是蘋果手機用戶,所以無法推薦和測試適合的錄音應用。但是該模型的訓練數據中有用到蘋果手機(用iStethoscope Pro)錄製的心跳音頻,所以蘋果手機應該也是沒問題的。我的安卓手機使用的是 Audio Recorder,一個開源免費又小巧的錄音軟件(5.6 MB)。設置裏只需要把編碼格式改爲「.wav」,其他的保持不變即可滿足我們的需要。

找到手機的麥克風位置,一般都在手機的底部。找一個相對安靜的地方,點擊開始錄音(爲了避免誤觸屏幕,可以按一下電源鍵把屏幕關閉),把手機的麥克風的位置貼近心臟的位置,按住15秒左右,然後打開手機,停止錄音。我的建議是手機直接接觸皮膚來錄音,可能會獲得更好的音質。但是我給 Emanon 錄音的時候是隔着 T 恤的,倒也沒有影響的測試結果。

錄好的聲音文件默認保存在 /sdcard/Android/data/com.github.axet.audiorecorder/files/recordings 中,可以通過 USB 線或 Material Files 文件管理器將文件傳輸到電腦上。

最後使用上面的測試命令進行檢測,即可得到預測的心率狀態:Normal(正常)或 Abnormal(不正常),以及預測的信心值 confidence。

關於這個預測模型

該模型由博拉理工学院(印度皮拉尼)的 Manan Agarwal 和 Ankita Chakravarty 根據 The Classifying Heart Sounds Challenge 2011的數據集訓練而來。模型的訓練準確度爲 89.73,測試準確率爲 84.04。下面的文字摘自他們的論文說明:

我們的目標是提供一個可靠,快速且低成本的系統,讓未經培訓的一線衛生工作者或任何具有互聯網訪問權限的人都可以使用,以幫助確定是否應該將受試者推薦給專家診斷,尤其是在訪問臨床醫生和專家比較困難的地區。這也將有助於早期診斷心血管疾病,並大大降低這些死亡的潛在危險因素。