pretty code

2023年8月31日 星期四

The GUI framework of Go - Wails

太久沒有吸收新知了,Go 除了增加 generics 外,還有一個除了 Fyne 以外的 GUI framework 可以選擇,那就是 Wails!

Wails 是一個以 Go 為後端以及使用 vue 為前端的 GUI framework,除了 Android 不支援外,它支援三大平台,分別是 Windows、Linux 還有 macOS。

在 Windows 上,它需要 WebView2 runtime 來作渲染,故本質上很像個跑在瀏覽器上的 App,如果將其跑在未安裝 WebView2 runtime 的環境,執行時也會貼心的跳出提醒視窗並安裝。

以官方 Hello World 的例子來說,編譯出來的執行檔只有 8.38 MB,執行的速度還算不錯,只有啟動及關閉時會覺得稍有延遲。

這個專案其實已經發展了四年多(2019/4/25 - v.11.2),只是最近才在 PTT 軟體版推文中看到,如果不是太複雜的 App,也許以後可以考慮使用,當然為了方便的話,我用 wxWidgets 還是最快的,也可以跨平台跑在 Linux 上。

2023年8月28日 星期一

I code so I am

折戟沉沙鐵未銷,正所謂爛船也有破釘三斤XD

今年過年後開始,工作型態正式變成研究 CV 課題!

感謝公司及大小老闆們沒有一下就要我們生出東西,取而代之的是讓我們從頭開始學習。

坦白說數學不是我的強項,尤其對我這麼一個 AT 叛客來說,我以前查帳時還是按計算機比較多,根本沒有用到數學,轉換跑道後雖然寫了很多年的程式,也去過兩家上市公司以及錄取國家考試資訊處理職系,不論是工作或生活其實也沒用到什麼數學?

如果說現在沒有工作,我當然是有信心在半年內把需要的數學底子練起來,奈何年紀漸長,雙親年紀漸大,要用錢的地方很多,已經無法像以前一樣想辭職就辭職。

也因為如此,一直覺得進度緩慢,尤其前半年很少寫到程式,更覺得自己好像失去了什麼?

還好有郭靜妹子天籟之聲的陪伴,才讓這個無趣的生活有點笑容…

今早在準備開會報告資料時,無意間讓我發現學習專案作者的 Matlab code 與我移植的 Python code 用的公式居然不同?

數學小白的我居然可以在幾秒之內想到可能的問題,原來是作者有留一手或是無心之失,兩者的投影相位圖是使用不同數學函數!

Python code 和網頁說明是使用 cos 函數,但 Data 給的卻是用 sin 函數,難怪會有所謂的錯位情況?一開始還以為是翻拍的圖導致?

除了手畫 0 ~ 2 pi 的圖來驗證作者思路外,也簡單讀取 0 pi 的圖來畫出波型圖,終於可以證明我的想法無誤!

僅以最後的大衛朗基羅絕對相位正規化灰階圖來為這幾個月的學習留下最好的回憶!


希望有一天也能像尼飛彼多一樣,說出那樣霸氣的一句話:我好像有點強XD

2023年8月26日 星期六

測試一下 Kobo Expense

最近 Chrome Store 似乎又更改政策了,不過似乎跟我的專案沒啥關係?

趁此機會再一次確認 Kobo 網頁是否又亂改版了XD


今年雖然到目前為止的購書金額跟去年差不多,但 7 月的購買金額中,其實有很多本工作相關原文書,故繁體中文書其實並沒有買很多,可見,我真的是被數學搞到人生都走味了?

還好我的 Code 看起來一切正常,這也是寫網頁爬蟲最辛苦的地方,網頁如果改版,就必須要跟著修改,這一點讀墨就做得比較好,購買記錄是以 API 形式回傳,比較不會跟 HTML or CSS 內容有關!

今天是 2023/08/26,我放上 github 的 code 有針對之前改版修改,但我在 Chrome Store 的版本並未更新,反正沒人用我也懶得更新,github 的東西起碼還有五六十顆星星,Chrome Store 的幾個專案明明也有超過 50 個人安裝,但卻連一顆星都沒有,真是沒勁XD

一入江湖無盡期

開了 19 年的車了,每次開車多少還是會犯一些錯,有些會記得下次改進,有些則是過後就忘了,以後還是做個記錄,好時時提醒自己:

01. 狹窄會車處還是要按喇叭!

一直很討厭我家的地下室,當初一定是地主為了停車位的個數以致建商才如此設計,我們整個地下室不論哪一層樓都只有單線道,沒有車的時候倒也相安無事,遇到要會車時一整個阿雜,如果又剛好是上坡的車還要禮讓下坡的車,現在開的車又是類休旅車,實在不太好倒車,雖然有燈號提醒,但據我觀察摩托車似乎根本感應不到,此時按個喇叭比較實在,今天連我一共三台車卡在上樓轉彎處平面,還好另外兩台都還在平面輪不到我這台先上坡的讓,如果我之前先按聲喇叭,應該能適時提醒另外兩台車吧?

02. 遇到騎得慢的摩托車要讓就要讓到底,不能不耐煩。

今天遇到一台騎得很慢的摩托車,只有一線道我又不想跨越雙黃線,跟在他後面跟了快 5 分鐘,好不容易捱到下到平面路線,那台車還是依然顧我,完全不管後面的車,一個人騎在兩線道的接近中線處,慢得我都懷疑他是故意的?後來我實在受不了,以很貼近中間分隔島的方式從他旁邊呼嘯而過。

其實這樣很沒必要,前面都讓那麼久了,不差另外一個 5 分鐘,假設我在通過他時,他一時沒騎好,A 到他倒楣的還是我,何必逞一時之快呢?

03. 台 64 下板橋時,外線車道是不能左轉的,今天遇到一台硬要左轉的車,我前面的車又要閃他,導致我這台車被這兩台車卡在下高架處,後面如果煞不住車,我又是第一個會被波及的。

錯的事就是錯,不該讓他左轉成功,但也沒必要跟他硬卡,不過會這樣無恥左轉的人,我懷疑按喇叭有個屁用,這件事我到現在還沒有好的解決方式,只能先記錄起來,真要說的話,只有我前面那台車按喇叭或是不要讓他才有解決之道?

唉,真的很不喜歡開車,還是早一點讓機器人統治世界好了,至少數位的世界最有規矩XD

2023年8月23日 星期三

vcpkg path too long issue

好不容易完成每日計劃表,正準備開始我的 Kobo EInk-Bro 專案時,就遇到第一個問題。

雖然我需要 cross compiler,但我可以先在 Windows 下測試 ChatGPT 幫我寫好的 Qt 小程式,把大工作切成小工作是一件好習慣。

我在 C:\src\vcpkg 預設目錄下編譯 qt5-webengine 時,會出現以下錯誤:

CMake Warning at ports/qt5-webengine/portfile.cmake:5 (message):
  The qt5-webengine source was will be extracted to
  C:/src/vcpkg/buildtrees/qt5-webengine , which has more then 35 characters
  in length.

就像字面上意義說的,路徑名稱過長,印象中新 Windows 早就沒 255 這個限制了?

時間寶貴,我還在找殺死大衛朗基羅的兇手,懶得看它的 cmake 檔案在抱怨什麼,另外開一個 C:\vcpkg 路徑,重 build 所有函式庫。

由於編譯需要一點時間,等待結束後再來更新是否有解決?

2023/08/24 更新

總共花了 22 個小時編譯,辛苦都是值得的。另外,在回捲查看相關訊息時,似乎看到 qt5-webengine 對硬體有些要求,記錄一下!

Installing 37/37 qt5-webengine:x64-windows...
Building qt5-webengine:x64-windows...
-- qt5-webengine requires a lot of free disk space (>100GB), ram (>8 GB) and time (>2h per configuration) to be successfully build.
-- As such qt5-webengine is currently experimental.
-- If qt5-webengine fails post build validation please try manually reducing VCPKG_MAX_CONCURRENCY and open up an issue if it still cannot build.
-- If it fails due to post validation the successfully installed files can be found in C:/vcpkg/packages/qt5-webengine_x64-windows
-- and just need to be copied into C:/vcpkg/installed/x64-windows
-- Downloading https://sourceforge.net/projects/gnuwin32/files/gperf/3.0.1/gperf-3.0.1-bin.zip/download -> gperf-3.0.1-bin.zip...
-- Downloading https://www.python.org/ftp/python/2.7.18/python-2.7.18.amd64.msi -> python-2.7.18.amd64.msi...
-- Found external ninja('1.10.2').
-- Downloading https://download.qt.io/archive/qt/5.15/5.15.10/submodules/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz;https://mirrors.ocf.berkeley.edu/qt/archive/qt/5.15/5.15.10/submodules/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz -> qtwebengine-everywhere-opensource-src-5.15.10.tar.xz...
-- Extracting source C:/vcpkg/downloads/qtwebengine-everywhere-opensource-src-5.15.10.tar.xz

目前雖然可以成功編譯出執行檔,但會抱怨找不到 QtWebEngineProcess.exe,稍微找了一下,位在下列這個路徑 C:\vcpkg\installed\x64-windows\tools\qt5,雖然過了這一關,執行時又會觸發 Exception,看起來跟找不到 locales 語言設定檔有關,快速 Google 一下,Qt5 使用 QtWebEngineProcess.exe 做為 WebView 的橋樑,故佈署時有些眉角要注意,我猜可能跟處理 request 或是跟 UI 渲染有關,一時半刻還沒時間處理,目前先這樣。


關關難過關關過,我對 C++ 函式庫早就免疫了,一次就能成功我才會嚇到XD

QtWebEngineProcess.exe 需要 qtwebengine_locales 這個資料夾並放在程式根目錄的 translations 資料夾裡,另外還需要一個 resources 的資料夾,可能是 vcpkg 沒有幫忙 handle 這塊,故不像 DLL 一樣會複製一份到我的編譯資料夾內,這也簡單,直接在 vcpkg 搜尋並複製到正確的位置即可。

事情還沒結束,好不容易可以執行起來,並沒如我預期的去瀏覽網頁並顯示在 QWebEngineView 元件上,看了一下 console,又有一個錯誤如下:

QOpenGLShader::compile(Fragment): ERROR: 4:1: 'textureSampler' : syntax error syntax error

*** Problematic Fragment shader source code ***
#version 110
#ifdef GL_KHR_blend_equation_advanced
#extension GL_ARB_fragment_coord_conventions : enable
#extension GL_KHR_blend_equation_advanced : enable
#endif
#define lowp
#define mediump
#define highp
#line 1
varying highp vec2 uv;uniform sampler2DRect textureSampler;uniform bool swizzle;uniform highp float opacity;void main() {   highp vec4 tmpFragColor = texture2DRect(textureSampler,uv);   tmpFragColor.a *= opacity;   gl_FragColor = swizzle ? tmpFragColor.bgra : tmpFragColor;}
***

這次倒真的是 Qt5 的鍋了,居然會跟 Intel 顯示卡有關,詳此網頁

這個問題已經在去年 09/14 修正,修正的版本是 5.15.11。

查了一下 vcpkg 維護的版本,居然是 5.15.10,有沒有這麼背呀?


再來我需要想想下一步要如何做了?

2023/08/25 更新

昨天下班前查了一下,vcpkg support list 中有 Qt6 版本可以安裝,名稱為 qtwebengine,只要針對這項安裝,其他相依 vcpkg  會幫你搞定,這也是我一直推薦在 Windows 下用 vcpkg 來管理 C++ 函式庫的原因,不用從一堆 README 中找到相關的編譯設定(雖然很多時候還是會有問題,但就只能 by 問題看 log 來解)。

早上滿心期待的要看到安裝成功的畫面,沒想到連一半都沒安裝完畢便又遇到 qtbase 安裝問題,從 log 中看到有此錯誤:

ERROR: C++11 <random> is required and is missing or failed to compile.

稍微 Google 一下,有人說是 Visual Studio 16 2019 generator is not supported.

我的媽呀,那篇文章是 2020 年的,現在都民國哪一年了,居然還有這個問題?

我決定跳去 Linux 作業環境了,不然猴年馬月我才能完成第一步,deadline 剩沒幾天了。

順帶一提,Qt 似乎開始被很多人不爽了,因為下載又需要帳號了,我個人也沒那麼喜歡 Qt,要不是 Kobo 底層使用到它,我也不需要用它來開發程式,偏偏 Kobo EInk-Bro 又需要 GUI,不然我早就爽爽用 Golang 來寫了,老天爺有必要這麼搞我嗎?明明我昨天才買了一包愛心餅乾呀XD 

又要思考下一步了…

2023/09/01 更新

Linux 下安裝也不是很順利,故之前試了一下就沒試了。

雖然原本的目標已經過期,但這種事急不得,有開始並且持續有進度,對白天要上班晚上還有一堆事要忙的我來說,我覺得已經很棒了XD

今天將之前 build 好的程式拿回家裡電腦嘗試,由於筆電是有 NVDIA 顯卡,故確實可以正常執行無誤,只是啟動速度有夠慢。另外,UI 似乎沒有拉好,WebView UI 元件並沒有如我預期的顯示畫面,這部份還要再確認一下。

每日計劃表出爐

暫時先這樣安排好了,試行幾個月後再行調整。


2023/08/25 更新

人生中第一次有正式做計劃是在民國 98 年準備國考的時候,那時會規劃每天該讀哪些科目,還會提醒自己要看美女主播XD

雖然不做公務員很久了,但還蠻懷念那一段唸書的日子,我為我工作的感覺真棒!

計劃確實重要,但也不是一定要照表操課?

所謂的計劃只是先幫你想好一個大框架,讓你知道在什麼時間裡應該要做什麼事,但人生就是會有一連串的變化,不是你想做什麼就能做什麼!

此時,計劃的優點開始浮現,我們可以在這框架下,視情況調整項目,就算真的這一整個星期都沒有時間照表操課?(假設你真的遇到這種情況,表示目前你的生活出了問題,這時應該要先解決那個問題而不是煩惱沒有照計劃進行!)

沒關係,星期日晚上睡一覺起來,我們又會有全新的一週了,耶!

P.S 此心法只適用在有自制力的人?

2023年8月21日 星期一

是誰殺了我的大衛朗基羅

右邊是原作者的點雲,明顯跟我不在同一個檔次XD

原本以為是自己少搬了作者的 Code,上星期五放假時還特地做了 memo 寄信給自己,想說早上提早來辦公室便可以輕鬆搞定XD

沒想到今天一整天除了下午開會報告進度花了兩個小時外,其餘時間都在跟我的大衛朗基羅奮戰,可惜直到下班前都還是一無所獲。

還是學阿甘去跑步好了,看看能不能從中悟道?

奈何身為一個資本主義下的小小工程師,一日不工作無法養活自己,只好爬爬樓梯再回去做柯南吧!

邪惡組織的黑衣壞人,快出來別躲了,我已經看到你了?

你為什麼要殺了我的大衛朗基羅呀XD


2023/08/22 更新

起床後做伏地挺身時想到一些關於大衛朗基羅的解法,條列一下:

01. 作者給的公式是否正確,如何推導?我的想像應該是要把投影機逆投影變成相機,產生四步法的相位圖,配合格雷碼的輸出,產生像是右相機的圖片,但這裡有兩個難點,一是我不知道作者產生相位的公式到底跟它原投影的是否一致?二是格雷碼並沒有覆蓋到整張圖片,我很難推斷出右相機的格雷碼圖形應該要位在相機解析度的哪個區塊?

02. 再比對一次作者給的 Matlab 和 Python code 是否有一致,也許是自己哪裡疏忽少搬了?

03. 老老實實的回去看作者相對相位和絕對相位關於補償的算法,搞不好答案就在這裡?

早上坐公車時一直在思考問題出在哪裡,都沒時間看看窗外妹子XD

雙目相機是否有要求左右相機要一樣?即使相機不一樣,只要得到各自校正好的內參,理論上應該是沒影響才對?至少以我目前幼幼園小班的程度,我是這樣認為的。

註記:一般我們還是會保持左右相機參數儘量一致,對電腦視覺來說,環境光影響成像品質甚巨,為了讓雙目相機拍攝到的景像一致,使用同樣的相機我們比較好讓他們同步工作,這是我目前的理解。

故問題一我根本不用管格雷碼會投射到左相機圖片的哪個區塊,一樣站在投影機的角度思考即可,記得確認一下小氣的作者是否有放原始的 pattern?

2023/08/23 更新

問題應該還是出在數學,因為投影機的 pattern 在不同 y 下都相同,感覺好像抓到什麼?校正後的相機和投影機一定存在某種關係,只是我還不知道罷了。

江湖一點訣,說破不值錢。需要的數學還是從針孔相機模型那來的,詳此處

終於,我也有個帥帥的大衛朗基羅了,雖然我的相位值還是會有缺口,但我覺得應該是作者只給影片翻拍的圖,而不是原始相機的圖片,可能是 distorted image or something,故才有此結果?


2023/08/28 更新

今早突然神來一筆,發現錯位情況來自相位產生公式不同所導致,詳此篇

成也蕭何,敗也蕭何

前天去聽了人生中第一場演唱會, 再加上這兩天看了歌迷的留言,我才發現人的想法真的差異很大!

有歌迷覺得星期六的觀眾都不熱情,不如星期日的氛圍!像我就是喜歡安安靜靜的坐在那邊聽著可愛妹子唱歌,雖然我內心是很開心激動,但我不會表達出來,不代表這樣的歌迷就不熱情,只是大家支持歌手的方式不同,沒有誰對誰錯。

我反而覺得一直拿手機在拍短片才是不尊重其他人的表現,喜歡一位歌手,看她都來不及了哪還有時間拿出手機拍照,拍短片到底是為了紀念還是要 PO 文,我這裡是打一個問號?

演唱會現場的梯度並不是很足夠,比電影院還糟糕!我已經是買到 2F VIP 的第二排,還是會被前面一直拿手機錄影跟動來動去的先生影響,這樣的品質說真的不是很好,但這不是主辦單位的問題,只能說自己下次沒買到第一排是不會再去了,即使我很喜歡那位可愛的妹子XD

這讓我不禁想到之前參加讀墨社團,我只想安安靜靜的看書,不是想看莫名其妙的網友 PO 些不相關的美食照,但我改變不了那時的狀況,山不能轉只好人轉,於是我改去 Kobo 買書了,這次學乖了,不再參加任何社團,過了兩年倒也相安無事,反正這兩家對我來說自己都有解 DRM 的能力,倒沒有一定要呆在哪裡的問題,不過讀墨無時無刻的三本七五折倒是很香,但我不會為了購書便宜而違背自己的原則,人生已經夠苦悶了,我只想堅持自己的原則。

除了歌迷的想法以外,我想這次演唱會最失敗的就是兩個場次有差別待遇,一個有安可一個沒有安可,雖然我是不以為意,反正我喜歡的歌都不會在歌單中是早就預料中的事,但這樣的決策很失敗,加開場次也是主辦方同意的,花的價錢也一樣,這樣做坦白說真的不好。

如果我是經營者,我應該不會做這樣的決定,也許只是一個小疏忽,但這樣可能就會把顧客推出門了?

我在買完加購場次票後,連續兩個星期都會注意一下售票狀況,平常最討厭加入會員的我,因為扣打已用完,為此還多申請了一個帳號才能看到座位情況,沒記錯的話應該有 4 種座位沒賣出去,雖然我沒精算,但少說也有三四百個座位未能銷售一空,記得前面幾天我還會因為這樣心情不好,覺得可愛妹子的歌迷怎麼那麼少,我還無聊到用 Google Trend 比較 A-Lin、徐佳瑩和我最愛的妹子差異,至於結果是什麼就不說了,難過。也難怪第一場次的好像是庶子,因為歌迷不買單?難怪會有這樣的差異。

理性的講完,換講點感性的好了。

也許一位歌手最需要的就是歌迷的熱情,故大部份的歌手都會喜歡熱情的歌迷吧?

不過我還是覺得需要數據分析才能知道歌迷性質,投歌迷所好才能順利的銷售商品。

掌握顧客心理、搭配訂價策略、有用的行銷方式,其中我認為對銷售最有幫助的還是顧客心理!

你想賣什麼東西,誰會買這些東西,顧客為什麼要買這些東西,在自問自答的過程中,我想答案應該就在這裡面吧?

我還是覺得研究投資簡單多了,畢竟人心最難測呀XD

2023年8月20日 星期日

當個稱職的小當家還真不容易

寫程式的人都知道,過早對 Code 最佳化不是件好事!只有當功能都完成且效能遭遇到瓶頸,此時才是最佳化的好時機,配合 Profile Tool,大概都不是什麼問題,如果還有問題一定是自己的 Coding 功力不行?

但最近時間真的是不夠用,故今天嘗試將所有事都先在心裡跑過一遍模擬,應該算有開了雙核吧XD

早上將昨天看演唱會前逛無印買的收納盒實際拿來整理收納廚櫃,看起來果然舒服多了,該不該補充備品一目了然,一般整理師都很喜歡把收納發揮到極致,但我認為配合當下狀況並適當留白才是一個適合自己的收納方式,畢竟專家的話也不能照單全收。

原本以為忙完廚房清潔後,可以在煮飯之前把管委會保全公司投標資料逐一看完,但我果然想的太簡單,連 66.67 % 的進度都未能完成,只好吃完飯收拾完廚房再繼續。

簡單煮了一個青菜,一個無添加物芋頭貢丸炒蛋,再加上一個調理包,這已經是我今天在有限時間能做的最好結果,希望下午在看完廠商資料後,能有時間再去大賣場買幾個收納箱,好把一些地方整理乾淨,這樣才能早日開始修練我的劍一呀!


2023/08/21 更新

由於今天準時煮好飯菜,不到兩點前就已經洗完碗清潔好廚房,也順利的在下午三點前看完所有的廠商資料,一個月 130,000 的保全費收入都要準備那麼多審查資料,這行也確實競爭激烈,連我們不到百戶的社區住戶都會有些意見了,要能一直拿到社區的案子應該要很努力。

人生總是會有 But,一出門沒多久就傾盆大雨,到了家樂福又排隊到加油站入口,雖然我能像前面幾台車一樣趁著紅燈左迴轉進到被斷開的排隊車潮,但我自己在買板橋麥當勞得來速時就很討厭被這樣插隊,所以只好看著這樣的車潮 say goodbye!

還好在地人不是講假的,馬上想到新店捷運站有無印,也可以買我的收納盒,立馬朝著捷運站飛奔過去XD

太久沒開車進新店捷運站停車場了,在 B3 下 B4 時我還以為車道是分開的,故在轉彎時被一台車嚇到,幸好那個車主跟我一樣有 sense,知道在狹窄的車道下,在鏡子看到有車就先停等,彼此也不會被 A 到,當然也有可能被我這台開路中間的車嚇到?真是萬分抱歉呀!

But 果然是接二連三,B4 爬到 1F 的樓梯我懷疑不只 4 層,平常會爬 10 F 的我都覺得有點小累,我一向是爬到 6F 後才會有感覺,可能是捷運有挑高的緣故?

好不容易上到 1F,居然要淋一小段路的雨才能去無印,很少上台北的我才發現捷運站沒有連通到無印那段,只好又去買把傘,新店的小七有夠小,根本沒地方排隊,前一位顧客顧著跟店員繼續聊天,店員便伸長手接走我的雨傘要結帳,坦白說動作有點大力,害我對這家小七的印象不好,如果服務業可以排名,我一定是給小七店員接近滿分的分數,每個人都十項全能,對著不同顧客都能良好的應對,以我的個性一定是不能做服務業的,哈!

我也知道心要像井中之月,無欲無求,只需忠實的反映外在,外在的任何情緒波動,對心來說都只是過客而已。奈何道行不夠,尤其開車時特別糟糕,我想能夠想出武俠小說心法的作者,在古代中一定都是一代大俠,才能想出這麼有哲學又有科學根據的武功心法。

好不容易買完盒子,實在不好意思跟大家擠那麼小台的電梯,只好又走回 B4,我都感覺到膝蓋在哭泣了…

雖然有那麼多 But,但這一切的努力都是值得的,家正逐漸朝我想要的方向前進,當然如果可以,我是很想把客餐廳的木頭家具都換掉,但我應該會被父母吊起來打吧?

雖然有了收納盒後還是很亂(這都要感謝我親愛的老婆?被毆飛中…),但收納盒的好處就是當我之後要擦拭椅子時就會容易多了,大腦就跟男人一樣,就是那麼單純,只喜歡 18 歲?雖然我就是那個例外,我最近最喜歡的妹子只小我 4 歲,但我還是覺得可愛,手機桌布看了就是開心XD

扯太遠了,只要大腦覺得輕鬆就不會覺得煩,這樣就有動力做家事了,說穿了就是這樣簡單,哪來那麼多家事整理書中的大道理,真理只要幾句就夠了XD

劍一

在武俠小說的世界裡,主角只要專心練武都不用工作賺錢,也沒有家庭、數學、英文等各種煩惱。我總覺得我如果活在小說的世界裡,我早就是天下第一了!

一個人一天的時間有限,要做的事又那麼多,已經被數學追著跑了快一年的我,再加上周遭很多煩人事情,真的覺得要靜下心來好好安排了。

想要好好把英文學好,以英聽來說,我只能犧牲寫程式時聽郭靜的時間,雖然我大部份都進入心流狀態不知道郭靜在唱什麼,我懷疑拿來聽英聽能有多大成效?

除了英文之外,舉凡數學、家庭、家事、寫 Code、中醫、運動、投資,哪一樣事不是都需要時間投入,偏偏正常人的時間就是那麼的不夠用。

先給自己幾個小小的目標好了,看看能不能為這個無趣的生活做點改變?

01. 在 2023/08/31 午夜前完成 Kobo 版 EInk-Bro,最近又看到有人在討論我的 KoboPageTurner 專案,害我想把這個一直想完成卻沒動工的專案做好,既然 Kobo 看漫畫 App 的作者已經先把 QPA 修改好了,理論上我這個概念應該是可以無痛接軌的。

02. 在 2023/08/27 午夜前排好雙週每天家事計劃,家事還是要一點一滴固定做,這樣才是最省力的作法,大腦的注意力很寶貴,不要浪費時間在這種地方心煩,有時候最笨的方法就是最好的方法。

03. 完成前面兩項待辦事項。

暫時先這樣就好,期待 2023/09/01 的到來,我好開始我的另一個計劃。

2023/09/01 更新

最近家裡事情太多,故第一項沒有辦法順利完成,持續努力中…

《大齡女子》真的是好悲傷的一首歌呀

好久以前 YouTube 聽彭佳惠的《舊夢》時,總是會跳出《大齡女子》這首歌,但我是個反骨的人,我最討厭自動推薦的機制,想當然爾,我從來不知道這首歌長怎樣?

今天可愛的郭靜演唱會中,我最喜歡這首歌了,也終於知道《大齡女子》的廬山真面目了!

由於聽的時候,只專心在看郭靜,沒有很注意歌詞在寫什麼,但在唱完後我還特地問了我老婆知不知道這首歌,可見這首歌的曲風是我會喜歡的沒錯!

聽完演唱會回到家等待老婆洗好澡的時間,剛好在粉絲團看到演唱會曲目,才讓我知道這首歌就是之前一直錯過的《大齡女子》,Google 演算法我真是對不起你呀XD

順便看了一下原唱的 MV,才發現這首歌還真不是普通的心酸,看完歌詞之後感覺心裏都沉甸甸的…

A 喜歡 B,B 又喜歡 C,人想要的總是得不到,可以兩情相悅白頭到老,真的是很不容易呀!

話雖如此,回頭看我父母那一輩的很多例子,似乎結婚也不代表有著好的歸宿?

一段不幸福的婚姻,其實回過頭來也會影響小孩,不論這個小孩子是否還是個小孩子…

2023/08/21 更新

昨天除了開車有聽郭靜的歌,其餘時間聽了一整天的《大齡女子》,這才讓我發現歌詞也是有寫得不好的地方。

真正的幸福是自己給的,不假外求,幸福又何需所有人的羨慕?

2023年8月15日 星期二

忙了一天,就為了這個心累的 Bug

我是個很喜歡整理 Code 的人,為了程式碼美觀,我習慣把 Code 整理成一個又一個小函數。

今天遇到一個奇怪的 Bug,坦白說我還不知道為什麼,但我知道如何避免。

我有一個小函數是把作完運算的 np array 透過 np.save 儲存起來,下次 main 函數如果有帶 arg,就會改以 np.load 的方式取得原本 array,這樣可以節省我的開發時間避免重覆運算。

我的問題就是如果使用這種方式來取得之前計算好的 array,感覺我的值都是錯的?故我後續的計算也都是錯的。

解決方式就是把取值 Code 寫在 main 函數,不要透過函數存取 np array。

2023/08/17 更新

搞了半天,原來是自己犯了個低級錯誤,我總共回傳了 4 個 numpy array,其中一個名字尾碼重覆多打了一遍,由於我這些 numpy array 是電腦視覺相關的又有分左右不同,故名字都會取特別長以利區分,一眼望去不容易找到這種錯誤,害我一直往 stack overflow 或是需要轉換型別的地方去想。

不知道換一個 IDE 就能避免這種低級錯誤嗎?但我還是覺得 UltraEdit 最好用!我可是傳說中在十二年間買了兩套 UltraEdit 的男人呀XD

履約保證注意事項

注意:此篇文章之外部資料皆來自相關單位,所有權利屬於各相關單位,個人撰寫部份則為公眾授權。

爸媽常買的《長春食素名人館》餐券店家停止營業了(長春食素名人館是餐廳名稱,營業登記名稱為長春素食有限公司,已於民國 112 年 7 月 18 日變更名稱,現為唐龍國際股份有限公司)!

還好手邊只剩不到幾張,看了一下店家 FB,似乎到我現在發文時間為止,都還沒有人收到退款金額?

趁此機會來研究一下所謂的履約保證機制到底有什麼用好了?

根據《餐飲業等商品(服務)禮券定型化契約應記載及不得記載事項》應記載事項規定,禮券應記載「履約保障機制,並載明逾保障期間者,發行人仍負履約責任」。另外,發行人應依下列方式之一提供消費者自出售日起算至少一年期間之履約保障機制:

(一)禮券面額已經○金融機構提供足額履約保證。保證期間自中華民國○年○月○日(出售日)起至○年○月○日止(至少一年)。

(二)禮券面額已先時存入發行人於○金融機構開立之信託專戶,專款專用,信託期間自中華民國○年○月○日(出售日)起至○年○月○日止(至少一年)。

(三)禮券面額已經○金融機構或○電子支付機構提供價金保管服務,並先時存入○金融機構之價金保管專戶或○電子支付機構於○金融機構開立之專用存款專戶,專款專用。保管期間自中華民國○年○月○日(出售日)起至○年○月○日止(至少一年)。

(四)禮券面額已與依公司章程規定得對外為保證之同業同級○公司等為相互連帶擔保,持本禮券可依面額向上列公司請求提供等值之商品(服務),上列公司不得為任何異議或差別待遇,亦不得要求任何費用或補償。連帶擔保期間自中華民國○年○月○日(出售日)起至○年○月○日止(至少一年)。

(五)其他經主管機關許可之履約保障機制。(禮券明顯處應記載該履約保障機制內容,及主管機關許可字號)。

從上可得知,發行人需提供至少一年之履約保證,此保證並非無限期

我們常以為的無限期,指的是不得記載事項中的不得記載使用期限,故不要跟履約保證期間搞混

另外,從《附表_商品_服務_禮券定型化契約應記載及不得記載事項之主管機關及適用範圍》中我們可以得知,餐券的主管機關是衛生福利部

假設廠商發生倒閉等事件,理論上在履約期間,消費者應該可以向提供擔保之金融機構詢問有關履約保證程序如何處理。

以這次的例子來說,廠商仍然有在處理,只是變更公司名稱,故金融機構此時不會介入。另外,在永豐銀行信託網最新消息可以看到有關長春素食履約保證之聲明公告,內容大意是『長春素食有限公司係委託本行辦理「信用卡價金保管」之禮券履約保障方式,尚非「禮券預收款信託」』


換言之,以現金購買之餐券照金融機構聲明來看,應該不在保障範圍內?



以上就是網路上查到的相關資料,留個記錄先。

2023/08/15 更新

不過還是無法搞懂所謂的信用卡價金保管背後到底是如何運作?消費者持信用卡消費,該信用卡發行銀行只是負責代墊款項,只要商家有來請款便會代付,看起來並沒有強制性?故唯一有可能發生保管作用的地方應該是在收單銀行這頭?

根據經濟部經商字第 10602423341 號公告來看,看起來長春走的是其他經主管機關許可之履約保障機制築起防火牆的應該是收單銀行無誤?但這裡有一個盲點,如果發行禮券商家,不是由提供信用卡價金保管的銀行來負責收單,此機制根本無任何作用?因為據我所知,政府並未對這塊作任何的定期稽查?

又或者是此類信用卡價金服務是依交易金額按費率計收手續費,商家只要再找其他家收單銀行並在顧客結帳時使用其他家收單銀行的刷卡機來刷卡,這樣也是在合法範圍內?

總之,沒事不要買禮券,除非是很有名的大公司!

2023/09/01 更新

上個星期回父母家,順便記下去年購買還未用完餐券的編號,果不其然查無資料,我想就跟我想的一樣,當初刷卡時不是走永豐銀行收單,當然沒有辦法進價金帳戶。

還好我一向最討厭加會員、儲值或是買券,越簡單的流程越不會被廠商騙。

2023年8月9日 星期三

木工初體驗

自從上次社區消防檢查後,鞋櫃就不再擺放外面了,雖然大家還是很有默契的在檢查後移出去了?

因為是老舊社區,住戶規範並沒有那麼清楚,公共空間即使只擺放鞋櫃還是會影響消防安全,因為逃生時需沿著牆壁迅速撤離,不過目前無法解決只能管好自己就好。

想要趁此機會換個簡易新鞋櫃,之前物色了好久,才勉強找到一個,但離自己想要的尺寸還有一點差異,除非走遍各大傢俱店,不然自己動手做應該是比較快的。

剛好特力屋有想要的深度板材又可以幫忙裁切,花了快 3,000 搞定板材,還有一些鑽頭螺絲等,我估計這個自製鞋櫃成本約 3,400 左右。

底下就是我犯的錯誤記錄,記取這次經驗後,下次會更好!

01. 特力屋板材本身就會有幾 mm 的誤差,工作人員幫忙裁切也是會有誤差,再加上板材不一定是平的,故在劃線、引孔時要適時修正,總之,抓固定一邊對齊,在沒有工作桌及夾具的情況下,千萬不要有先把孔都引好的想法,最好是邊鑽邊鎖比較不會有誤差。

深度標示 30 cm,最大誤差有到 30.4 cm

02. 劃線還是需要角尺或三角板,劃出來的線才會平行,徒手煉鋼的結果就是引孔都不能用XD。

03. 假設木工螺絲是 4 mm,引孔鑽頭需要小於螺絲直徑,我第二次引孔是用 2.5 mm,感覺使用起子機不太好鎖,把好幾個螺絲都搞滑牙了,下次我應該會用 3 mm 鑽頭來引孔。另外,螺絲如果滑牙了,簡單一點可以用老虎鉗把它慢慢轉出。

04. DIY 除非有把握,先用電動起子把螺絲鎖到一定深度後,改用手動鎖螺絲也可以避免滑牙,使用棘輪工具鎖螺絲手也比較不會酸。滑牙也有可能是起子頭已損壞,簡易驗證方式是把螺絲接到起子頭,稍微甩看看是否會掉落。當然注意起子是否有垂直於木板以及使用時稍施加垂直力鎖螺絲也有助於避免螺絲滑牙。

05. 在沒有木工桌或夾具的幫忙下,使用白膠不太好固定,我的選擇是先用雙面膠定位來輔助。

護目鏡、口罩還有手套一定要記得戴上,安全至上。


上圖就是我的完成品,旁邊就是千瘡百孔的洞,我預計先用白膠補洞後,再買木紋貼紙來修飾XD