星期六, 6月 26, 2021

在Google 日曆設定以農曆為準的循環活動

起因是每年農曆的某一天必須祭拜。在Google 日曆中可以顯示農曆,也可以設定以陽曆日期為準的週期活動。例如每年的陽曆的6月4日來記念一下。但是要設定在每年農曆的七月十五日就只能一年一年自己人工設定,沒辦法自動循環。因為每年的七月十五日對應到的陽曆不都是同一天。例如2021年8月22日是農曆七月十五日。如果設定在這個日期要以年為週期的活動,下次日期會是落在2022年8月22日,但當年的農曆七月十五日卻是在8月12日,對不上了。

嘗試了許多可能後,決定用Excel 產生日曆的CSV檔,再匯入 Google 日曆。

EXCEL並沒有農曆轉陽曆的函數可以直接利用,我選擇的是用VBA的自訂函數來做轉換。這個函數並不是我自己寫的,參考的是這個網頁「

EXCEL-VBA function: Lunar calendar to Gregorian calendar, format YYYY-MM-DD

」。

在Excel中使用VBA,要先把 選項→自訂功能區→開發人員,這個「開發人員」勾選起來。


再來就到VBA中,新增模組,再複製貼上去。



原本的程式是計算自1921年2月8日起100年的時間,也就是到2021年。啊!今年就是2021年了,要用來預定未來行事活動跟本就不夠用。關鍵在程式裡定義的一個陣列變數NongliData(100),只有100個。還好網路上有人再繼續延伸到179,但奇怪的是隔了2天,我再也找不到原本分享的網站了。
NongliData(101) = 2773
NongliData(102) = 133557
NongliData(103) = 1206
NongliData(104) = 398510
NongliData(105) = 2638
NongliData(106) = 3366
NongliData(107) = 335142
NongliData(108) = 3411
NongliData(109) = 1450
NongliData(110) = 200042
NongliData(111) = 2413
NongliData(112) = 723293
NongliData(113) = 1197
NongliData(114) = 2637
NongliData(115) = 399947
NongliData(116) = 3365
NongliData(117) = 3410
NongliData(118) = 334676
NongliData(119) = 2906
NongliData(120) = 1389
NongliData(121) = 133467
NongliData(122) = 1179
NongliData(123) = 464023
NongliData(124) = 2635
NongliData(125) = 2725
NongliData(126) = 333477
NongliData(127) = 1746
NongliData(128) = 2778
NongliData(129) = 199350
NongliData(130) = 2359
NongliData(131) = 526639
NongliData(132) = 1175
NongliData(133) = 1611
NongliData(134) = 396618
NongliData(135) = 3749
NongliData(136) = 1706
NongliData(137) = 267628
NongliData(138) = 2734
NongliData(139) = 2350
NongliData(140) = 203054
NongliData(141) = 3222
NongliData(142) = 465557
NongliData(143) = 3402
NongliData(144) = 3493
NongliData(145) = 330581
NongliData(146) = 1386
NongliData(147) = 2669
NongliData(148) = 264797
NongliData(149) = 1325
NongliData(150) = 529707
NongliData(151) = 2709
NongliData(152) = 2890
NongliData(153) = 399018
NongliData(154) = 2773
NongliData(155) = 1370
NongliData(156) = 267450
NongliData(157) = 2651
NongliData(158) = 1323
NongliData(159) = 202023
NongliData(160) = 1683
NongliData(161) = 462419
NongliData(162) = 1706
NongliData(163) = 2773
NongliData(164) = 330165
NongliData(165) = 1206
NongliData(166) = 2647
NongliData(167) = 264782
NongliData(168) = 3350
NongliData(169) = 531750
NongliData(170) = 3410
NongliData(171) = 3498
NongliData(172) = 396650
NongliData(173) = 1389
NongliData(174) = 1198
NongliData(175) = 267421
NongliData(176) = 2605
NongliData(177) = 3349
NongliData(178) = 138021
NongliData(179) = 3410


把這一串複製接上以後,別忘了前面宣告的部份也要一併修改 Dim NongliData(100)改成Dim NongliData(180),這樣可以計算到2101年了,我應該沒有活那麼久了。

回到Excel中,就多了Lunar2Gong(),這個函數可以用了,下面的例子就是A欄是農曆日期,B欄是用Lunar2Gong()轉換成陽曆。有了對應的陽曆就可以複製到要匯入Google日曆的CSV檔。

CSV檔的格式和匯入,網路有許多參考資料。Google網站也有十分清楚的說明。

將活動匯入 Google 日曆

它有8個欄位可以填入。但不是每個欄位都必須具備,最基本只要有Subject和Start Date這兩個欄位就可以匯入了。

Subject:行程名稱。

Start Date:行程的開始日期。

Start Time:行程的開始時間。

End Date:行程的結束日期。

End Time:行程的結束時間。

All Day Event:是否為全天行程。True為是;False為否。

Description:行程附註。

Location:行程地點。

我還希望在設定的日期前一週就先提醒我。但匯入的欄位並沒有這個功能。變通的方法是我把活動匯入獨立的日曆中,再對這個日曆設定預先提醒的功能,只要是這個日曆中的活動都一起適用這個設定,來達到預先提醒的目的。 


下面就是這次用到的程式

 

Public Function Lunar2Gong(Optional Lunar As Date)

    Dim LunarYear, LunarMonth, LunarDay

    Dim NongliData(180)

      'Lunar data

  NongliData(0) = 2635

  NongliData(1) = 333387

  NongliData(2) = 1701

  NongliData(3) = 1748

  NongliData(4) = 267701

  NongliData(5) = 694

  NongliData(6) = 2391

  NongliData(7) = 133423

  NongliData(8) = 1175

  NongliData(9) = 396438

  NongliData(10) = 3402

  NongliData(11) = 3749

  NongliData(12) = 331177

  NongliData(13) = 1453

  NongliData(14) = 694

  NongliData(15) = 201326

  NongliData(16) = 2350

  NongliData(17) = 465197

  NongliData(18) = 3221

  NongliData(19) = 3402

  NongliData(20) = 400202

  NongliData(21) = 2901

  NongliData(22) = 1386

  NongliData(23) = 267611

  NongliData(24) = 605

  NongliData(25) = 2349

  NongliData(26) = 137515

  NongliData(27) = 2709

  NongliData(28) = 464533

  NongliData(29) = 1738

  NongliData(30) = 2901

  NongliData(31) = 330421

  NongliData(32) = 1242

  NongliData(33) = 2651

  NongliData(34) = 199255

  NongliData(35) = 1323

  NongliData(36) = 529706

  NongliData(37) = 3733

  NongliData(38) = 1706

  NongliData(39) = 398762

  NongliData(40) = 2741

  NongliData(41) = 1206

  NongliData(42) = 267438

  NongliData(43) = 2647

  NongliData(44) = 1318

  NongliData(45) = 204070

  NongliData(46) = 3477

  NongliData(47) = 461653

  NongliData(48) = 1386

  NongliData(49) = 2413

  NongliData(50) = 330077

  NongliData(51) = 1197

  NongliData(52) = 2637

  NongliData(53) = 268877

  NongliData(54) = 3365

  NongliData(55) = 531109

  NongliData(56) = 2900

  NongliData(57) = 2922

  NongliData(58) = 398042

  NongliData(59) = 2395

  NongliData(60) = 1179

  NongliData(61) = 267415

  NongliData(62) = 2635

  NongliData(63) = 661067

  NongliData(64) = 1701

  NongliData(65) = 1748

  NongliData(66) = 398772

  NongliData(67) = 2742

  NongliData(68) = 2391

  NongliData(69) = 330031

  NongliData(70) = 1175

  NongliData(71) = 1611

  NongliData(72) = 200010

  NongliData(73) = 3749

  NongliData(74) = 527717

  NongliData(75) = 1452

  NongliData(76) = 2742

  NongliData(77) = 332397

  NongliData(78) = 2350

  NongliData(79) = 3222

  NongliData(80) = 268949

  NongliData(81) = 3402

  NongliData(82) = 3493

  NongliData(83) = 133973

  NongliData(84) = 1386

  NongliData(85) = 464219

  NongliData(86) = 605

  NongliData(87) = 2349

  NongliData(88) = 334123

  NongliData(89) = 2709

  NongliData(90) = 2890

  NongliData(91) = 267946

  NongliData(92) = 2773

  NongliData(93) = 592565

  NongliData(94) = 1210

  NongliData(95) = 2651

  NongliData(96) = 395863

  NongliData(97) = 1323

  NongliData(98) = 2707

  NongliData(99) = 265877

  NongliData(100) = 1706

  NongliData(101) = 2773

NongliData(102) = 133557

NongliData(103) = 1206

NongliData(104) = 398510

NongliData(105) = 2638

NongliData(106) = 3366

NongliData(107) = 335142

NongliData(108) = 3411

NongliData(109) = 1450

NongliData(110) = 200042

NongliData(111) = 2413

NongliData(112) = 723293

NongliData(113) = 1197

NongliData(114) = 2637

NongliData(115) = 399947

NongliData(116) = 3365

NongliData(117) = 3410

NongliData(118) = 334676

NongliData(119) = 2906

NongliData(120) = 1389

NongliData(121) = 133467

NongliData(122) = 1179

NongliData(123) = 464023

NongliData(124) = 2635

NongliData(125) = 2725

NongliData(126) = 333477

NongliData(127) = 1746

NongliData(128) = 2778

NongliData(129) = 199350

NongliData(130) = 2359

NongliData(131) = 526639

NongliData(132) = 1175

NongliData(133) = 1611

NongliData(134) = 396618

NongliData(135) = 3749

NongliData(136) = 1706

NongliData(137) = 267628

NongliData(138) = 2734

NongliData(139) = 2350

NongliData(140) = 203054

NongliData(141) = 3222

NongliData(142) = 465557

NongliData(143) = 3402

NongliData(144) = 3493

NongliData(145) = 330581

NongliData(146) = 1386

NongliData(147) = 2669

NongliData(148) = 264797

NongliData(149) = 1325

NongliData(150) = 529707

NongliData(151) = 2709

NongliData(152) = 2890

NongliData(153) = 399018

NongliData(154) = 2773

NongliData(155) = 1370

NongliData(156) = 267450

NongliData(157) = 2651

NongliData(158) = 1323

NongliData(159) = 202023

NongliData(160) = 1683

NongliData(161) = 462419

NongliData(162) = 1706

NongliData(163) = 2773

NongliData(164) = 330165

NongliData(165) = 1206

NongliData(166) = 2647

NongliData(167) = 264782

NongliData(168) = 3350

NongliData(169) = 531750

NongliData(170) = 3410

NongliData(171) = 3498

NongliData(172) = 396650

NongliData(173) = 1389

NongliData(174) = 1198

NongliData(175) = 267421

NongliData(176) = 2605

NongliData(177) = 3349

NongliData(178) = 138021

NongliData(179) = 3410

 

  Dim m, monthCount, toCurMonthCnt, LeapMonth, TheDate, curTime

  Dim i1, i2, i3, bit

  

     'Get the current variable date

  curTime = Lunar

  LunarYear = Year(curTime)

  LunarMonth = Month(curTime)

  LunarDay = Day(curTime)

 

  m = LunarYear - 1921

  monthCount = 0

  toCurMonthCnt = 0

  LeapMonth = -1

  TheDate = LunarDay - 1

 

    For i1 = 0 To m - 1 Step 1

        If (NongliData(i1) < 4095) Then

            monthCount = 11

        Else

            monthCount = 12

        End If

        For i2 = 0 To monthCount Step 1

            bit = NongliData(i1)

            For i3 = 1 To i2 Step 1

                    bit = Int(bit / 2)

            Next

            bit = bit Mod 2

            TheDate = TheDate + 29 + bit

        Next

    Next

   

    If (NongliData(m) < 4095) Then

        monthCount = 11

        toCurMonthCnt = monthCount - LunarMonth + 2

    Else

        monthCount = 12

        toCurMonthCnt = monthCount - LunarMonth + 1

        LeapMonth = Int(NongliData(m) / 65536)

        If LunarMonth <= LeapMonth Then toCurMonthCnt = toCurMonthCnt + 1

    End If

   

    For i2 = monthCount To toCurMonthCnt Step -1

        bit = NongliData(m)

        For i3 = 1 To i2 Step 1

                bit = Int(bit / 2)

        Next

        bit = bit Mod 2

        TheDate = TheDate + 29 + bit

    Next

   

    Lunar2Gong = DateAdd("d", TheDate, "1921/2/8")

End Function


星期日, 6月 06, 2021

A thousand years Christina Perri

 A thousand years Christina Perri

(David Hodges / Christina Perri)


Heart beats fast

Colors and promises

How to be brave

How can I love when I'm afraid to fall

But watching you stand alone

All of my doubt suddenly goes away somehow


One step closer


*I have died everyday, waiting for you

Darling, don't be afraid

I have loved you for a thousand years

I'll love you for a thousand more


Time stands still

Beauty in all she is

I will be brave

I will not let anything take away what's standing in front of me

Every breath, every hour has come to this


One step closer (*)


**And all along I believed I would find you

Time has brought your heart to me

I have loved you for a thousand years

I'll love you for a thousand more


One step closer

One step closer (*,**)

星期六, 5月 15, 2021

ASUS RT-AC66U+ B1原廠三年保和簡易工業包的無線路由器有什麼不同

因為原廠三年保和簡易工業包有著不少的價差,以致於我買了原廠三年保在使用了一段時間之後,因有了AiMesh的需求,在採購第二台時鋌而走險的在網上選購了簡易工業包的ASUS RT-AC66U+ B1。我在購買時對於是什麼原因造成這價差有著不小的疑問,但在網路上卻遍尋不著。我想也許有人也想知道,就簡單做了一下記錄,根據我的開箱結果,我認為這不只是平行輸入和原廠公司貨的差別。也許它經曾歷過某種人工銷毀的過程,但因為我不是這方面的專家,所以想不通有什麼原因要在產品完成後才銷毁。以下是我的記錄。

簡易工業包裡有塑膠氣泡層層嚴密包裹。原廠三年保的是彩盒包裝,內有多國語言的完整說明書一本,簡易工業包裡只2張說明書裡中文的部份縮小影印。

原廠三年保的主機本體背面有中文印刷的安規資訊,還有貼一張小標籤印了MAC位址等本機資訊。簡易工業包的主機只有英文標示,也缺少小標籤,原本應該貼標籤的附近明顯看得到人為刮痕。另外正面ASUS金色商標也有同樣明顯的人為破壞痕跡,把保護的膠膜撕去,甚至翹起的金字還會割手。主機的上蓋和本體之間貼了一張用簡體中文寫著「XX無線」的保固貼紙。

兩者的電源線不同,簡易工業包的電源線插頭也有ASUS的標誌,但明顯比較大。

開機後發現簡易工業包的韌體並非ASUS原廠,而是merlin&vortex&koolshare firmware:380.69_2-X7.8。可以到ASUS的網站下載原廠的韌體,透過主機的WEB管理介面選擇手動韌體更換。目前使用了幾天,還沒感覺到有什麼不同。

2021/5/19 補充

這兩台機子開機中外殼都很燙,估計溫度都很高,簡易工業包的機子有當機過一次。所以又買了USB風扇放在下面幫助散熱。

我又下載了Asuswrt-Merlin RT-AC68U的韌體給簡易工業包,可以正常更新。AiMesh也可以正常運作,ASUS當主機,Asuswrt-Merlin當節點。

2021/6/8 補充 原廠保固的USB3.0插孔故障送修,到府取件,約6天送回,更換新機。保固很安心。新機韌體更新到版本 : 3.0.0.4.386_43129-g60defb2,原本可以運作的AiMesh無法再運作,我把簡易工業包的韌體也更新到和新機一樣就可以了。











星期六, 8月 22, 2020

抽出YOUTUBE的字幕

https://savesubs.com/

 在YOUTUBE 上學英語,想把字幕單獨抽出文字檔來。沒想到網路上早有這樣的服務,更好的還是免費的,當然你還是可以自由樂捐贊助。使用方式很直觀。功能也不只有下載文字檔,還可以存成字幕檔或雙語字幕等等。

創作者還有其他影音截取的服務,看來也是很好用。

https://123sudo.com/projects



星期三, 7月 10, 2019

PC設定用USB 鍵盤開機

因為不管電腦放在桌上或桌下,坐定之後,鍵盤和滑鼠是離雙手最近的設備。當使用PS/2鍵盤時,設定按任意鍵開機,會比按主機上的電源鍵方便。

但時至今日,USB鍵盤十分普遍,也是採買時的第一選擇。有次我買PS/2鍵盤,店員還再三向我確認沒買錯。

我的主機板是華擎ASROCK H170M pro。在BIOS設定選項裡有USB鍵盤開機,雖然設成啟用,但亳無作用,無法使用USB鍵盤開機 。

查尋網路上的資訊,較舊的資料主要描述是可用在休眠時喚醒,開機則沒辦法。
原廠的中文常見問題則沒有相關的提問或回覆。
最後查到原廠的英文論壇裡有人提了這個問題,原廠也給了回覆。

原來是還要在WIN10的「電源選項」裡把「開啟快速啟動」的勾選取消掉。原本的預設值會讓USB鍵盤開機無作用。


星期日, 6月 18, 2017

再見了ANOBII

早先,也可以說多年前,用ANOBII來紀錄自己閱讀過的書,它就是網路書櫃,當時類似的網路服務不多,ANOBII的資料量和讀者的評論算是當中的佼佼者。網站幾經轉手,現在賣給義大利商人。似乎盛況不再,中文書籍資料不再增添,網站不再更新。對讀者提交的資料也置之不理。這個網站從香港誕生,走向世界,又淹沒在日新月益的網路洪流中。

雖然現今類似的網站多了起來,也結合了電子書和網路購物等多項功能。但看來看去,還是ANOBII比較順眼,依然保有那單純美好的樣子。但也僅存樣子,只能欣賞了。

把簡單的事想得太複雜了

一直有用隨身碟儲存工作資料,方便到處可以工作的形態。即使現在雲端硬碟相對可靠多了,既不會忘了帶也不會遺失,但習慣的改變可真難。另一方面使用隨身碟比較沒有容量上的限制,不擔心塞爆了免費的雲端硬碟空間。

但是深怕哪天遺失了找不回來,除了必要的同步備份外,外殼也要貼上姓名貼。再來就是裡面要存入個人聯絡資料的檔案。檔案名稱我就取「0誰撿到請還我」,加個「0」讓它在排序時可以在檔案清單的最前面。

但是隨身碟除了一大堆工作的檔案外,還有許多資料夾,電腦排序時,預設資料夾是排在檔案之前,因此這個檔案會被一堆資料夾擠到後面,也就沒那麼顯眼。於是就再加一個「0誰撿到請還我」的資料夾,這個資料夾裡就放了「0誰撿到請還我」檔案的捷徑。

沒想到隨身碟因為可拔插,所以它的磁碟機代號不是固定的,因此我所建立的捷徑就不是一定可用,只要代號不同,便會顯示找不到這個檔案。

我想了想網頁的連結和LINUX系統都有回上一層的寫法,windows 也可能會有。於是花了幾分鐘上網搜尋,卻找不到有用的參考。

但是腦筋一轉,幹嘛費事做捷徑,直接複製那個檔案進去就好了。三秒鐘解決了這個問題,於是又花了10分鐘記下這件蠢事。

星期日, 6月 11, 2017

逆時針環八卦山

實在太熱了,在二水吃冰時,把GPS紀錄暫停,要離開時卻忘了開,騎到龍仔頭時才想起來又打開,才會在地圖上拉出不可思議的一直線。路徑大概有6.5公里,扣掉GPS直線紀錄大約5公里,約有1.5公里沒紀錄到。
http://www.sportstracklive.com/track/map#woodykuo/Cycling/2299211/

https://www.strava.com/activities/1029215237

https://www.relive.cc/view/1029215237

想在二水吃冰,出二水車站左前轉角的冰店招牌還在,但是刨冰機已堆放雜物積滿灰塵。再往街上騎。不到100公尺左手邊出現一家冰店,也是小小的店,沒什麼配料,大都是可以久放的醃漬類。老闆推薦仙草冰,加了牛奶,還不錯,老闆人很親切,會和客人聊天。