181027沙螺灣

有一年夏天帶岳父去爬香港大嶼山,下山下到一半時大概四點半左右吧,遇到一輛巡邏警車,對方非常熱情把我們送到了山下,因為警官擔心等下天黑萬一我們下不去山會有危險。這是我第一次也是唯一一次坐香港警車,乾淨舒適,還不錯,港普口音也很有意思。

最近看到一則新聞,大概是一位滑翔傘愛好者不幸在大嶼山遇難。逝者隨身攜帶的手機有谷歌位置記錄,但是警方未能善用以致延誤救援時機最終釀成悲劇。其中比較吃驚的是,逝者的妻子將手機最後獲取到的10米左右精度的GPS記錄交給警察,警察居然說不知道怎麼打開json格式文件。

港珠澳大橋通車,又一座時代的雕像落成。

於是在這個周六我們又去了一次大澳。06:50到達公交站,過關坐上了07:25準時發車的B3巴士,在屯門碼頭轉富裕小輪就到了沙螺灣。東涌碼頭的硬朗阿伯,從我們第一次去東涌就在那裡工作,有一隻可愛且有個性的肥貓。可惜這次不在東涌下船,不能去聊幾句,只在短暫而嘈雜的靠岸時間透過船艙的窗戶遠遠地望到他喊「東涌東涌,東涌東涌……」。

巨大事物愛好者一定要來沙螺灣看看,倒不是沙螺灣有什麼巨大建築,而是因為沙螺灣比鄰香港機場的起飛跑道。在不遠的小山坡上可以清晰的感受到飛機起飛時的震撼,噪音和污染。香港機場為香港人和比鄰香港的內地人提供了非常好的服務,我在這裡說它污染好像很沒有良心。但是無論我說不說,飛機畢竟是一個較大的污染源,再說我也沒有呼籲大家為了環保都不要坐飛機了。提及飛機污染主要是想傳達,我們作為地球的一份子,還是應該多多保護環境,人與自然應該和諧相處。我每提一次飛機污染,便能提醒我每次旅行都產生了巨大的碳排放,便能督促我再日後的生活中,在力所能及的地方為環保出一分力,比如儘可能減少塑料的使用,不買瓶裝水和瓶裝飲料,儘量購買本地食材,不可浪費等。從沙螺灣到大澳有很大一段都走在東澳古道上,這條路屬於老少咸宜的路線,路況優良,風景優美(大橋扣一分,沿途散落的共享單車再扣一分),途中還有食肆可以休息。運氣好的話還能遇到本地人擺在門口的蔬果,本地香蕉或洛神花,10元一架或一小筐,要的話就自己放10塊錢在那裡,拿上自己要買的東西。其實10塊錢,在香港吃個早餐都不夠,所以這種小攤應該也是也是本着不浪費的原則在惠及大眾吧。在其他國家也有遇到過這種無人小攤,換算成當地貨幣都是1塊錢的感覺,性質也都是一樣的。忽然想起一個蘇聯笑話,大概是說撒哈拉實行了更加先進的制度後造成了沙子的短缺。

在炎熱的天氣里步行兩個小時後,一大杯凍檸樂真是無比的享受。凍檸樂其實是非常好做的,只需要冰,冰可樂和檸檬。但是如果想做的好喝,可能需要更多的冰,更好的可樂和有滋味的檸檬,或許還有商戶的責任心。那麼不及格的凍檸樂又是怎麼做的呢,那必然是凍檸樂粉啊。在神奇的淘寶世界里,「一滴香」這樣的存在非常普遍。我的舌頭不靈敏,不能準確分辨出真香還是一滴香;身體更加不靈敏,或許要在十年數十年後才能體現出毒素帶來的危害。到那時,應該也不會聯想到樓下那家好吃的僅僅開了半年的小館子。風聲雨聲讀書聲,事事關心到頭來就什麼都沒關心到,還不如多留意自己呼吸的空氣,飲用的食水,入口的飯菜和目力所及的綠化帶。

關於這天的另一個版本:沙螺灣徒步大澳

Linux上的離線字典——GoldenDict

GoldenDict是一款方便的字典應用,不僅支持離線字典和屏幕取詞,也支持在線辭典服務。Fedora直接從軟件倉庫安裝goldendict即可,默認的屏幕取詞快捷鍵是Ctrl+C+C。

分享幾個字典的下載地址:https://1drv.ms/f/s!AiSujQyFSc-uab_ItF61BBKnLUs。GoldenDict中的字典順序也是下面順序。

  1. Babylon_English_Chinese_S_.BGL
  2. Babylon_Chinese_S_English.BGL
  3. Oxford_Advanced_Learner_English-Chinese_Dictionary-4th.bgl
  4. ConciseOxfordEnglishDictionary.dsl.dz
  5. Oxford English Dictionary (2nd Edition) .bgl
  6. 现代汉英词典(金山).dsl.dz

安卓也有GoldenDict可用,我用的免費版(谷歌市場:GoldenDict Free),有最大5個字典的限制,但是也夠用了。

youtube-dl

之前用過一些在線提取和轉換YouTube視頻的服務,近來發現這些提取或轉換的鏈接要求ip一致,那就無法用洋蔥網絡下載了。好在發現youtube-dl這麼個好工具,不僅能下載單集視頻還能下載視頻列表;不僅能單獨下載字幕還能把字幕合入視頻,非常強大。目前用的這幾個參數,記錄一下。

#安裝youtube-dl
sudo dnf install youtube-dl
##單個視頻下載
#查看可下載的視頻,注意audio only的視頻,沒有伴音的哦
youtube-dl https://www.youtube.com/watch?v=qU52CFGTGu0 -F
#下載編號為22的視頻
youtube-dl --proxy socks5://127.0.0.1:9150 qU52CFGTGu0 -f 22
#續傳中斷的視頻
youtube-dl --proxy socks5://127.0.0.1:9150 qU52CFGTGu0 -f 22 --continue
#列出所有字幕
youtube-dl --proxy socks5://127.0.0.1:9150 qU52CFGTGu0 --list-subs
#只下載字幕而不下載視頻
youtube-dl --all-subs --skip-download --proxy socks5://127.0.0.1:9150 https://www.youtube.com/watch?v=qU52CFGTGu0
#使用aria2搭配proxychains實現多進程下載
sudo dnf install aria2 proxychains-ng
proxychains4 youtube-dl -f mp4 --external-downloader aria2c --external-downloader-args '-c -j4 -x 4 -s 4 -k 5M' lW0ugxbtIEE
##視頻列表下載
#將視頻列表中的視頻連接輸出到文本文件
youtube-dl -j --flat-playlist "https://www.youtube.com/playlist?list=PLATwx1z00HsdanKZcTMQEc-n_Bhu_aZ76" | jq -r '.id' | sed 's_^_https://youtu.be/_' > list.log
#從文件里讀取視頻地址並下載,下載過的會保存於done.txt不會重複下載
youtube-dl -f mp4 --external-downloader aria2c --external-downloader-args '-c -j5 -x 5 -s 5 -k 10M --max-download-limit 1024k' --batch-file list.log --download-archive done.txt

參考:youtube-dl批量下载时,跳过之前已经下载过的文件

Hourly Reminder

忙起來的時候不知不覺時間就過去了,而久坐對健康絕對不是什麼好事。那麼就產生了一個需求,提醒我時間的流逝。Android上有個不錯的開源應用Hourly Reminder,但是我是在工作的時候才需要提醒,所以最好是桌面彈窗。簡單搜索發現Fedora預裝的notify-send命令就能很好的實現toast效果,搭配crontab就能滿足需求了。

crontab -e
#單行Hourly Reminder簡潔版
0 9-18 * * 1-5 notify-send -t 6000 '整點咯' 'It is 🕛 time.'
#Hourly Reminder python 豪華版
0 9-18 * * 1-5 /home/42/Programs/p37/bin/python /home/42/eclipse-workspace/scriptsP37/hourlyReminder.py

file:/home/42/eclipse-workspace/scriptsP37/hourlyReminder.py

#!/home/42/Programs/p37/bin/python
import time,datetime,subprocess,random

ts = int(time.time())
hour = datetime.datetime.fromtimestamp(ts).strftime('%H')
title = "現在時刻"+hour+"點整"
emojiList=['🍏','🍎','🍐','🍊','🍋','🍌','🍉','🍇','🍓','🍈','🍒','🍑','🍍','🥭','🥥','🥝','🍅','🍆','🥑','🥒','🥬','🌶','🌽','🥕','🥔','🍠','🥐','🍞','🥖','🥯','🧀','🥚','🍳','🥞','🥓','🍗','🍖','🌭','🍔','🍟','🍕','🥙','🌮','🌯','🥗','🥘','🍝','🍜','🍲','🍛','🍣','🍱','🍤','🍘','🍥','🥮','🍢','🍡','🍧','🍨','🍦','🍰','🎂','🍮','🍭','🍬','🍫','🍿','🧂','🍩','🍪','🌰','🥜','🍯','🥛','🍼','☕️','🍵','🥤','🍶','🍺','🍻','🥂','🍷','🥃','🍸','🍹','🍾']
content = '\r        '+random.choice(emojiList)+'\r'
subprocess.check_call(['notify-send','-t','6000',title,content])

定時任務參考自crontab guru。 Emoji複製自Get Emoji

Fedora使用Impactor安裝ipa

使用Impactor可以為蘋果手機安裝ipa程序,無論手機是否越獄。從Cydia Impactor下載需要的包並解壓。

./Impactor

./Impactor: error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory
#若出現上述錯誤則
sudo ln -sf /usr/lib64/libudev.so.1 /usr/lib64/libudev.so.0

./Impactor: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
#若出現上述錯誤則
sudo dnf install libatomic

./Impactor: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
#若出現上述錯誤則
sudo dnf install ncurses-compat-libs

啟動Impactor後,先選中手機,再在Device>Install package選擇要安裝的包,輸入蘋果賬號密碼即可。




Fedora找尋丟失庫的方法,如

./Impactor: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
sudo dnf provides libncurses.so.5
ncurses-compat-libs-6.0-8.20170212.fc26.i686 : Ncurses compatibility libraries
軟體庫    :fedora
符合之來源:
Provide    : libncurses.so.5
sudo dnf install ncurses-compat-libs

棄用ibus-rime

試圖在Fedora26上使用Rime輸入法,經過數小時嘗試都不能完整打出自己想要的句子,只能吐血半升後放棄。IBus Intelligent Pinyin雖然有不少缺點也傻傻的,但仍然是我目前遇到最好用的開源拼音輸入法。查看源碼發現已經智能拼音已經更新到了1.10.92,在Fedora26上嘗試編譯失敗後(一天內兩次失敗,真是受打擊😫),決定升級Fedora。

迅速新裝了一個Fedora 29 Xfce,很好用,美滋滋。

幹掉QQProtect.exe

本文使用python3搭配windows的定時任務來實現正常使用TIM而不運行QQProtect.exe的功能。之所以沒有用bat是因為bat會彈出黑色命令行窗口,而使用pythonw則不會彈窗,體驗較好。方法參考自知乎如何禁用QPCore service启动项?

#file:killQQP.pyw
#杀死QQProtect.exe:killQQP.pyw 1
#启动TIM时杀死QQProtect.exe:killQQP.pyw 2

import os,time,sys

def killProgress(targetProgress):
    if targetProgress in os.popen('tasklist /FI \"IMAGENAME eq '+targetProgress+'\"').read():
        os.system('TASKKILL /F /IM '+targetProgress)

progressToBeKill = "QQProtect.exe"
progressToBeLaunch = "TIM.exe"
targetProgressFile = 'E:\\\"Program Files (x86)\"\\Tencent\\TIM\Bin\\QQScLauncher.exe' 
  
if str(sys.argv[1]) == "1":
    killProgress(progressToBeKill)
elif str(sys.argv[1]) == "2":
    count = 0
    time.sleep(5)
    os.system(targetProgressFile)
    time.sleep(2)
    while count < 5:
        killProgress(progressToBeKill)
        time.sleep(10)
        count = count + 1
        
else:
    killProgress(progressToBeKill)

然後在開始菜單運行taskschd.msc,新建定時任務。第一個定時任務:常規選項卡勾選“使用最高權限運行”;觸發器選項卡選擇“登錄時”;操作選項卡,程序或腳本填pythonw的位置,比如我的是C:\Users\42\AppData\Local\Programs\Python\Python35\pythonw.exe,添加參數則填寫上面腳本所在位置加參數,如E:\code\killQQP.pyw 1,保存。第二個定時任務:常規選項卡勾選“使用最高權限運行”;觸發器選項卡選擇“發生事件時”,然後日誌選“應用程序”,源填入QPCore,時間ID填入0;操作選項卡,程序或腳本填pythonw的位置,我的還是C:\Users\42\AppData\Local\Programs\Python\Python35\pythonw.exe,添加參數填寫腳本所在位置加參數,如E:\code\killQQP.pyw 2,保存即可。QQ用戶需要修改targetProgressFile為QQ的啟動文件,可以通過在QQ啟動快捷方式上右鍵查看詳情取得。

附:啟動TIM時幹掉QQProtect.exe的定時任務的導出文件killQQP2.xml。

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2018-11-05T11:11:00.0447223</Date>
    <Author>42-PC\42</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Application"&gt;&lt;Select Path="Application"&gt;*[System[Provider[@Name='QPCore'] and EventID=0]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    </EventTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>42-PC\42</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Users\42\AppData\Local\Programs\Python\Python35\pythonw.exe</Command>
      <Arguments>E:\code\killQQP.pyw 2</Arguments>
    </Exec>
  </Actions>
</Task>