2019年12月21日 星期六

2019年投資績效報告


今年財運整個旺的超厲害, 原本以為9月的時候報酬率已經是高峰了, 沒想到竟然繼續往上衝, 旺到我都有點怕怕的了..., 以下是今年目前的績效: 1/1~12/20




交易個股清單:



目前持有:
BIO, PE, SLM, SRCI


目前持股的地雷股分數 (https://norn-minehunter.zmcx16.moe/):





原本自己習慣是1/1才會寫整年的投資績效(+不定期想寫就寫), 今年早寫主要是現在數字很好看+現在就想寫XD 

至於2018年的份沒寫主要是因為中美貿易戰開打, 讓我原本1-9月的12%報酬率到年底變成-9% (還好沒破2位數, 不然就QQ了), 光是那三個月標普就跌了超過15%, 加上自己那時又有點過度交易, 跌破停損就立刻換部位, 換的又都是beta值不小的(e.g. Nvidia), 結果就這樣中斷了美股連續三年的獲利紀錄, 2018年的投資績效一個不爽就乾脆不寫了...。

經歷去年的教訓, 今年換部位就謹慎的多, beta值2以上的完全不考慮, 避免太快就直接被洗出場, 不過其實這擔心以今年來說有點多餘, 今年美股漲的超瘋狂, 標普今年整個漲了近25%..., 真的是隨便買隨便賺, 交易的18檔裡虧錢的也只有3檔, 虧最多那檔也才虧2000鎂..., 不過某方面來說也是今年運氣超好, 有大概1~2檔在我列入觀察期準備購買的前幾天就暴跌, 神奇的閃過去了(雖然還是有一檔沒閃到就是XD)。

因為之前9月那篇文主要寫已實現獲利跟虧損的標的內容跟分析, 這次打算寫目前持有的個股 & 相對應的策略:

1. BIO
1952年成立的生技公司, 詳細資料可以參考這:
https://money.moneydj.com/us/basic/basic0001/BIO

當時找到這個標的時, 不論是股價走勢以及財報都十分亮眼, 非常標準的穩定成長的公司, 其中最吸引我目光的有兩點, 其中一個是負債比超級低, 第二則是該公司的內幕人員持股比例超過10%以上, 內幕人士的淨購入股票也一直是正值, 這代表這家公司的高層人員對公司是很有信心的, 不過最讓我擔心的還是波動性問題, 雖然beta值看起來很低, 可是去年中美貿易戰9-12月就跌了28%, 這走勢也沒有什麼很強的支撐點, 所以進場時就決定不要想太多, 直接設15%的移動停利單, 看他能走到哪算到哪, 以目前股價來說已經超過我的成本價10%以上了, 基本上這檔已經不太需要擔心之後會賠錢。

2. PE
石油&天然氣的生產&銷售公司, 詳細資料:
https://money.moneydj.com/us/basic/basic0001/PE

會買這檔其實是已經有點找不到便宜的好股票了, 剛好看到這檔內幕人士持股比例也很高, 而且財報也算還行, 最主要的關注點是有個不錯的支撐點, 剛好手邊剛多一筆獲利了結的資金, 就決定進場並把停損點設在支撐價位。 不過後來觀察發現雖然有往上漲, 可是內幕人士12月賣了不少股票, 不過既然他這樣也還在繼續漲那就放著吧, 反正要是跌破支撐就會自動賣出, 以我進場的價位只要不大跳空就沒問題。

3. SLM
提供儲蓄以及學生貸款的教育公司, 詳細資料:
https://money.moneydj.com/us/basic/basic0001/SLM

這檔股票買買賣賣陪我2年了, 看財報這間公司每年都在持續成長, 所以基本上我就是跌到長期便宜價位就買, 漲到短期高價位就賣, 已經來來回回這樣買賣數次了, 這次他股價盤得有點久, 最近一次財報其實還是有成長, 不過因為貸款風險指數有提高, 所以財報公布時大跌, 目前停損就是設在這兩年支撐, 要是運氣差跌破就出場, 運氣好就是在賺一次買賣的價差~。

4. SRCI
跟PE一樣是石油公司, 詳細資料:
https://money.moneydj.com/us/basic/basic0001/SRCI

以股價走勢來說跟大盤比非常的弱勢, 可是盤整有一陣子了, 以支撐點來說我覺得還行, 而且看財報也是有賺錢有成長, 最近便宜的好股票越來越難找了, 就決定來抄底一下, 一樣跌破支撐就直接停損。

美股寫完再來就是台股抽籤的部分了, 沒想到籤王和潤給我抽到, 一下就多了近4W的抽籤獲利, 加上其它抽中的部分, 今年台股抽籤已經抽中五檔, 跟我6年前第一年抽籤平紀錄了, 今年目前的抽籤獲利大概台幣6~7W吧(沒特別仔細算), 不知道剩下的十天有沒有機會破紀錄XD

最後題外話, 認真覺得自己有寫美股掃雷網真是太好了, 現在選股跟檢視目前標的都會給他掃一下, 既可以少花整理資料研究的功夫又可以double check多做檢查有沒有遺漏, 雖然選股本身還是很大部分是看感覺, 可是用實質數據判斷的部分增加, 比起單靠感覺跟經驗應該可以減少更多踩雷的機會吧, 希望之後也能想到一些好用的tool可以做來玩玩~。

P.S. 人生第一次副業超越本業, 超開心~~~

2019年12月1日 星期日

MahoMangaDownloaderVer9.6更新

這次改版很好笑的是, 兩個禮拜前新增加的網站都雙雙改版, 導致下載器都不能下載了, 這真是神奇阿..., 應該不是針對我吧(?)  總之既然有使用者回報, 那我就來修吧, 不過這邊真的不得不承認, 這下載器已經五歲了, 現在網站改版我大概都知道是什麼問題, 處理效率比以前快超多, 這就是所謂的經驗吧...。 (雖然只針對爬蟲部分, 對工作沒什幫助就是了XD)

首先關於動漫之家(dmzj)改版後不能下載的問題, 主要是他以前網站完全沒擋下載器, 所以我也就直接用最簡單的方式去載圖片, 這次網站改版後會去檢查header看這download request是不是從他家網頁來的, 所以這邊就是很單純的加些header處理擋下載器的問題。

再來是youma的部分, 這個就有點好笑了, 原本這網站是我上上禮拜新支援的, 結果兩天後網站就死了, 死了一個禮拜後, 上禮拜我又新增一個替代網站, 沒想到有使用者反應這網站又復活了, 可是下載器卻不能載, 查了一下發現是網站強制要求https要使用tls1.2以上, 因為.net webrequest預設的ssl沒這麼新, 所以下載器才會不能下載, 這部分就是把設定打開就好, 不是什麼大問題。 這樣看起來這網站之前會死掉應該是管理者在改伺服器設定的關係, 只是有夠久就是了...。 不過奇怪的是這網站其實也沒有強制要求一定要用https, 就算用http也能正常瀏覽, 既然這樣的話網站幹嘛改成https的ssl一定要tls1.2以上, 這真是神奇哪...。

原本Ver9.6是要作使用者提的user experience enhance的, 不過這個禮拜我迷上某一款遊戲每天下班都在玩, 這次改版還是我今天兩小時前全破後才開始看前幾天的使用者留言後才修的, 使用者體驗的改版就麻煩讓我留到Ver9.7吧~。

再來不好意思容我傳教一下(未滿18歲的乖小孩麻煩請離開, 不要點下面的連結), 我這個禮拜都在玩一款最近DLSite上架的RPG 工口遊戲:
フォーリン・ラビリンス -隷属の少女たち-
















這款RPG遊戲製作大師製作的遊戲, 可以排行在我玩過的同人遊戲中前三名無庸置疑, 不管是完成度, 角色, 劇情都超級讚, 最厲害的地方是雖然我看不懂日文, 可是光是靠漢字以及語音, 我幾乎能理解八成以上的故事內容, 劇情的有趣性以及角色配音的高完成度所建立的高代入感, 讓我超享受遊戲中的世界, 雖然遊戲的遊玩時間大概是10小時左右, 不過我破完第一輪大概花了20多小時, 一直捨不得推主線, 真的好久好久沒這麼享受玩遊戲了, 這樣的遊戲不要說台幣600, 就算1200我也照樣收, 強力推薦阿!!!  期待這團隊下一次的作品(這遊戲才上市不到一個月, 應該還有得等就是了XD)


Ver9.6 更新內容:


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。


檔案位址:
https://drive.google.com/open?id=1mrdOi53uQpK7vEdwyMRsM1_cJuzz29tY

32位元版本:
https://drive.google.com/open?id=1-_e9LTrYkR_XW3ybWsfFs87SI_Upt5H7

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年11月23日 星期六

MahoMangaDownloaderVer9.5更新

這次很慘烈的是, 上禮拜新加的網站youma改版後就有使用者回報網站死了, 才過沒兩天啊, 太瞎了...。 然後那個使用者有推薦另一個韓漫網站, 看了一下發現網站除了名稱跟網域不一樣, 其他地方根本一模一樣..., 這代表我之前加的應該是某個分身網站, 超級蝦....。

所以這次改版新加支援網站我只是把youma的code改掉網域的部分就能完全work了, 改的時間不到5分鐘, 只能說是個很奇妙的體驗...。

P.S. 這個韓漫網站好孩子千萬不要進去逛喔~。

Ver9.5 更新內容:


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1Gg93zeZCrrknxzWSNLfDeyamb984Bylq

32位元版本:
https://drive.google.com/open?id=1O3_7APyeOageSyKPoSVRYywRRwM4X5h5

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年11月16日 星期六

MahoMangaDownloaderVer9.4更新

這次更新主要是這周有兩個使用者分別提了希望增加新網站的feature request, 原本是回覆說因為堆積了不少想做的事, 所以有空才會研究..., , 結果今天吃完壽喜燒後就完全做不下事也讀不下書..., 就乾脆來增加新網站了, 壽喜燒的魔力真是可怕XD

新增的兩個網站分別是https://manhua.dmzj.com/ 以及 https://www.youma.org/ , dmzj就是有名的動漫之家, 使用者推薦這網站的理由主要是這裡的資源都是網友主動上傳, 因為是源頭所以畫質都很高不會被再壓縮。 而youma則是以特定題材的韓漫為主的網站, 先聲明一下好孩子千萬不要隨便亂逛這網站喔(鳩咪)。

基本上這兩個網站都不像dm5或漫畫櫃那樣難搞, 所以加這兩個網站沒有遇到什麼大問題, 不過遺憾的是youma的漫畫有很多漫畫特定幾頁都404死圖, 而下載器基本上目前設定是遇到死圖重試N次失敗就轉狀態為pause, 不會繼續載之後的圖片, 如果像其他網站只有偶爾一兩張就算了, 我試了一下發現真的不少死圖, 而且這網站因為是用直版閱讀的方式, 為了方便竟然就乾脆直接切割圖源, 感覺真的有點無言... 不過以韓漫來說它的資源真的蠻豐富的, 所以最後還是決定滿足使用者的需求追加這個網站。

為了處理上面太多404死圖的問題, 目前youma設定成死圖就略過, 然後下載完成要是有圖片是下載失敗的, 就狀態直接轉pause, 讓使用者知道這集漫畫是有缺頁的。

另外這次新加的漫畫雖然也有照慣例寫3*3 = 9組 test case, 可是因為Azure DevOps的CI server的IP會被某些網站擋(可能擋亞洲以外的IP), 還有個網站是DNS找不到, 所以現在漫畫下載器的CI跟automation test基本上是廢的, 而且因為所有測試每次跑都要30分鐘以上, 我也不想用自己電腦的資源跑, 所以基本上現在我只有新加網站或心血來潮才會跑測試, 如果真的有網站改版導致不能下載, 就麻煩主動回報我再修了, 考慮到現在的支援網站越來越多, 要是每個都maintain我也忙不完, 之後的方針都會以有人使用+回報我才會維護~。



Ver9.4 更新內容:


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1TR0ICESvJv-IceFX_ueFtscKQ3dg0ria

32位元版本:
https://drive.google.com/open?id=17zOvINm29w2gi83fagH5CsrhcxdR_SSR

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年11月9日 星期六

FB粉絲專頁機器人開發 - 股票抽籤小秘書

今年財運很好, 11個月下來合計抽到4次股票, 不過我家的人雖然都知道抽股票幾乎無風險又好賺, 可是常常抽個幾次就忘了繼續抽, 所以幾乎沒什麼中獎過, 這樣真的很可惜...。 所以上禮拜忽然想到, 不然我來寫個會自動通知有股票抽籤的服務程式好了,  最後決定做的就是FB粉絲專頁機器人: 股票抽籤小秘書(助理), 以下是成果:



粉絲專頁網址:
https://www.facebook.com/%E8%82%A1%E7%A5%A8%E6%8A%BD%E7%B1%A4%E5%B0%8F%E5%8A%A9%E7%90%86-115560563215006

功能:
  1. 後端程式會每小時去證交所查詢是否有新的可抽籤股票, 如果有的話會自動發布新的抽籤資訊文章。
  2. 提供訂閱服務聊天機器人, 後端程式會在新股票可抽籤的那天發送抽籤訊息給訂閱用戶, 使用說明如下:
    1. 訂閱股票抽籤通知, 請發送訊息: "我要訂閱 FB個人頁面網址:[https://www.facebook.com/OOOXXX]"
    2. 取消訂閱通知, 請發送訊息: "取消訂閱"
    3. 取得目前可抽籤的股票資訊, 請發送訊息: "最新消息"


繪圖:  還在等我哥生出來, 先用櫻花莊的寵物女孩的女僕醬擋著先!!!


再來就是開發心得啦!! 首先要查有沒有抽籤資訊很簡單, 直接寫個爬蟲定時去證交所抓資料就好(目前設定是每個小時上去抓一次):

證交所公開申購網址: https://www.twse.com.tw/zh/page/announcement/publicForm.html

然後過濾掉央債就OK了, 至於要怎麼通知, 腦中浮現的想法有以下幾個:

1. 寄E-Mail通知: 
這個基本上最好做, 可是不可行, 因為我想我家的人應該不會天天檢查電子郵件, 所以XX。

2. LINE機器人:
當初原本覺得做LINE機器人應該是個好選項, 不過既然要做當然會希望作的這個服務能不只服務特定人, 而是所有想要這服務的人都可以訂閱, 可是研究了下發現LINE機器人有個大限制, 就是"主動發通知要錢", 如果是開發模式雖然可以不用錢發通知, 可是最多上限只能加50個人, 所以還是XX。

3. FB粉絲專頁:
最終決定就是做粉絲專頁了, 雖然已經有類似的粉絲專頁了, 不過他的訂閱服務必須下載他的手機APP, 而我想做的是直接用FB訊息通知, 並且會自動PO股票抽籤的訊息文, 不過因為我完全不想花時間經營粉絲團, 所以這粉絲團會全自動讓後端去做PO文還有發送通知訊息的服務, 我唯一的工作就是確保Server工作正常還有修bug。


決定好要做什麼之後, 再來就是實作啦!!  因為這兩樣功能基本很簡單, 所以基本功能我其實上周末兩天假日就做好了, 只是沒想到整合FB API時遇到了不少問題...。

1. 要使用FB的API, 就必須申請FB應用程式上架, 雖然說是應用程式不過其實也只是為了使用FB的API去作設定跟取得權限而已, 這個其實是很智障的事..., 因為我有帳號有Cookie, 那照理說我就能做到任何事, 用FB的API也只是為了更方便寫自動化的機器人, 為什麼還要針對各種API去取得權限, 簡直不可理喻...。要取得權限得申請隱私權文件網址, 編寫你的應用程式服務使用情境說明, 然後提供讓FB測試人員測試, 還要拍影片讓FB知道你的服務是如何運行, 超級無敵麻煩的阿!!!

因為超麻煩, 所以我一開始完全不想搞上面那些東西, 發送訊息跟PO文都不用FB API, 直接打個模擬的https request就好, 可是接受訊息就沒轍了, 因為要確認有沒有人傳訊息給粉絲頁, 我不可能讓Server一直polling FB server去問有沒有新訊息, 一定得註冊FB的webhook功能, 讓FB主動通知我的server有人傳訊息給我, 所以最後還是沒辦法, 只能乖乖走申請權限, 申請FB應用程式的流程...。

然後申請的過程其實很好笑, 我只有申請聊天機器人訊息收/發的權限, 然後測試步驟就寫:
發送"最新消息"或是"訂閱", 我的聊天機器人會回覆什麼資訊這樣, 然後拍個簡單的影片上傳。

結果送件後半天就收到回覆, 直接被退件了, 退件理由是服務太差, 機器人太智障, 然後提供的測試畫面則是: FB測試人員傳送:"what's news", "subscribe"訊息, 這樣當然我的後端當然看不懂只會回覆固定NPC台詞啊!!! 台股抽籤機器人根本沒有處理英文訊息的需求阿阿!!!

之後我就把"what's news", "subscribe"多加進if判斷, 然後再送件一次, 之後就通過了...。 這讓我深深覺得FB做這種事情只是想跟申請人說: "雖然看起來很智障, 可是我們真的有在審核喔, 要求權限是很麻煩的喔, 所以不要給我亂搞喔鳩咪", 根本只是過個水在刁難人而已...。



上架通過後我的粉絲頁就能跟我的後端溝通自動回覆訊息了, 至於自動PO文的部分如果要使用FB的API就還要在申請PO的權限, webhook我是真的沒辦法一定得申請, 自動PO文我就不想再走一次智障流程, 所以我就不用FB的PO文API, 自己在程式加cookie打個模擬的request就好~。

到這裡照理說功能都做完了, 不過其實還有個問題, FB的訊息API服務有個很大的限制, 俗稱24+1 policy, 為了避免粉絲頁惡意騷擾傳送一堆廣告訊息給使用者, FB規定當使用者傳訊息給粉絲頁後, 如果超過24小時使用者沒有在互動, 那之後最多只能再送一筆訊息, 更之後送的訊息都會被擋住, 只有符合某些規格的訂閱服務不受24+1的限制。

由於我的訂閱服務是未來有新股可抽籤時就會傳送訊息, 所以24+1限制基本上就是判死刑了, 雖然我想我也可以申請FB訂閱服務, 可是這個功能也會在明年一月終止掉, 明年一月後能不受24+1限制的只有新聞類型的專頁, 所以我就算申請也只能用到明年一月...超蝦。

既然這樣該怎麼解決呢, 後來看下文件加上簡單的POC, 確定24+1限制只針對FB的聊天機器人API, 一般人工發送訊息是不受限的, 這樣就好解決啦, 我一樣用打模擬request的方式搞定就好了XD

後來POC了下發現還是不可行, 因為FB webhook api收到的訊息的發件人id都是聊天機器人api專屬的id, 並不是那個用戶的真實id, 那個發件人id會受到24+1的限制, 用那個id打發送訊息的api或手動聊天的request只要過24小時就沒用了。

最後沒辦法, 只能請使用者在申請訂閱服務的時候, 請他們一併提供自己的個人頁面網址, 我在用那個網址去取得那個使用者的fb id, 在用那個fb id打模擬的request, 這樣就不會受到24+1 policy的限制了。

這種方式也會衍生一個問題, 因為那個網址是隨使用者填的, 那有人惡意幫其他人註冊的話怎麼辦?  幸好FB是有限制粉絲專頁是不能主動發送訊息給用戶的, 只有用戶在主動發訊息給粉絲頁時, 粉絲頁才可以發送訊息回去, 所以如果有人幫其他人惡意註冊, 我的後端程式也沒辦法發送訊息過去, 就是我的DB會多些garbage data, 不過也沒辦法就是了...。

這次的side project差不多就是這樣啦, 之後這個粉絲團就是完全自動化, 希望沒bug能一直順利運轉下去~。

2019年11月3日 星期日

MahoMangaDownloaderVer9.3更新

這次更新主要是有網友反應hitomi.la忽然不能下載了, 看了下發現是網站的資源網址從原本的純id改成了有類別以及漫畫名稱的形式, 導致下載器parse不到正確的ID所以才不能下載, 這邊就改一下parser就解決了, 不是什麼大問題。

Ver9.3 更新內容:
  • 修復hitomi.la網站改版造成下載器不能下載問題


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=15H4H4exsfGdFZ2xCiJEW5_DmcgBiNnb5

32位元版本:
https://drive.google.com/open?id=1-XCuoUq1dSlh883MM_o8Y3ESZKskDshp

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年10月30日 星期三

MahoMangaDownloaderVer9.2更新

這次更新主要是無限動漫又換網域了, 這網站還真是我看過最常換網域的漫畫網, 以下是下載器這五年下來看到的無限動漫網域名:
["8comic.com", "comicvip.com", "comicbus.me", "comicbus.com",  "comicvip.com", "v.comicbus.com", "v.nowcomic.com", "comicbus.live"]

不過認真說無限動漫也只是換網域跟改重導向的js, 我只要花5分鐘微調就好, 反倒是漫畫櫃還是動漫屋, 各種阻擋還有小改版防下載器的手段才真的是讓人噁到..., 不過也只有某一陣子特別誇張, 感覺最近也不太常改版了, 希望繼續保持XD


Ver9.2 更新內容:
  • 修復無限動漫換網域名導致下載錯誤問題


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=13XHKA96j4tGvOvZI-7EgxsY_zW2vAHzy

32位元版本:
https://drive.google.com/open?id=1aQTBzmwDqlsgVK_C8Vwf-HxU_5R1h8J_

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年10月24日 星期四

norn-minehunter網站開發 [美股掃雷&健檢網站]

由於今年美股獲利還不錯, 9月在寫投資日誌時忽然想到, 以往自己在選股以及選擇買賣時機時, 都是開Yahooh財經隨意看看財報, 並沒有一個有系統的方法去選股以及審視手邊持股, 這樣不僅浪費時間而且又不嚴謹, 如果有個系統或線上網站可以幫我去抓個股財報資料並用各種策略直接分析, 系統分析完只要地雷指數太高的個股就直接放生掉, 這樣不僅節省時間也可以避免主觀意識影響太重, 應該可以對我未來的投資生活有所幫助, 就決定立馬進行了!!!  以下是成果:

掃雷網站位址:
https://norn-minehunter.zmcx16.moe/

Github:
https://github.com/zmcx16/stock-minehunter

Illustrator:
超愛喝榛奶

Demo:





利用下班以及放假時間, 前端+後端大概花了兩個禮拜完成, 不過做完後還要等我哥把圖生出來, 4天連假除了打機戰T之外就想說來多實作幾個名人的策略, 主要是參考以下這兩個網站:

  1. 美股價值成長投資
  2. 台灣經濟新報(TEJ)

至於個股基本資料以及財報的取得, 目前主要是以下面兩個網站為主:
  1. Finviz
  2. Yahoo財經
Finviz是個十分強大的選股網站, 除此之外他也提供查詢個股基本資料(ROE, EPS, P/E, Dividend...etc), 不過提供的資料都只是單一數據, 並沒有完整的季財報以及年財報, 完整財報部分我則是從Yahoo財經取得, 不過Yahoo財經只提供近四年的財報給免費用戶, 雖然有點少不過也算堪用了, 不如說也只能妥協..., 如果有人知道有哪個地方可以方便取得更久遠的財報的話希望可以分享一下 > <


網站架構方面, 當初設計這個網站時就是定位成單一功能的小網站, 並且打算把所有策略相關的設定跟掃描等功能都做到後端, 好處是這樣以後新增策略也只要改後端, 不用再改前端的code; 缺點就是排版很沒彈性, 會稍稍不美觀, 不過因為這網站是以功能導向為主, 而且我就是PM兼RD兼QA, 所以就這麼決定我說了算了WWW

另外來說個開發過程遇到的趣事(?), 在網站完成只差等我哥把圖畫完的時間, 我想說來做個performance test看看, 就一口氣丟了一堆策略給server看能不能正常work, 結果server吐回502 bad gateway回來...。 然後看了下自己的log沒異常, 看IIS log也是502沒錯, 而且我的unit test還有實際環境送少量策略都是能正常work的, 就覺得應該是Azure or IIS設定的問題, 之後開始Google找原因, 雖然找到了不少可能的原因, 可是怎麼試都沒有用, 就卡關卡了超久...。

後來卡關到受不了, 死馬當活馬醫開Windows event log來看, 結果發現dotnet.exe crash了..., 這就很神奇了, 因為我的web application有用一層try catch包起來, 要是跳exception應該會被捕捉到並寫log才對啊。 之後再研究一下, 發現crash的點是在我開thread去跟Yahoo Finance要財報的地方, 如果我1分鐘內打超過100個request, Yahoo Finance會直接回404給我, 然後我打request要資料的部分為了省時間, 是同時開好幾個thread去執行的, 如果crash的地方是在其他thread, 那外層的try-catch就捕捉不到, 所以才造成明明跳exception但是log卻沒有任何資訊的問題, 我一開始就往迷宮錯的地方GO了ㄚㄚ!!!  難怪怎麼找都找不到原因...。

找到問題解決方法就簡單了, 我直接在thread function用一個try catch包起來, 要是跳exception我就自定義錯誤傳給外面的程式就好, 一個簡單的問題就因為方向錯誤搞到早上五點半, 這時候也只能笑了(遠望 + 眼神死)

最後來個閒話家常, 網站的形象圖一樣是交給我哥畫, 至於小妖精的Loading畫面則是拿我大學時代修遊戲製作的課程時請他幫忙畫的NPC動作圖, 直接挖出來做成loading小動畫, 畢竟要是使用者輸入太多個股以及策略的話就得等待比較長的時間, 就決定用現有素材來自製個小loading動畫了, 結果做出來總有種滿滿的復古感WWW

如果有人喜歡這網站並且想分享自己的策略的話, 歡迎留言 or 寄信聯絡我, 我有空的話會實作並放到網站上給大家使用 :)

2019年10月23日 星期三

MahoMangaDownloaderVer9.1更新

這次更新主要是有使用者反應EH站的CG圖庫或是標註ongoing的資源並不是一次性的資源, 然後每次新增圖片時有些資源都是往最前面插入新圖, 這會導致下載器的自動檢查已下載的機制有所衝突, 因為下載器檢查已下載是以網站的圖片順序去比對下載路徑的檔案頁碼是否存在, 如果是向前插入那網站上跟硬碟上的頁碼內容就整個位移造成錯亂, 遇到這種問題以往做法就是只能資料夾砍掉重載...。

原本這問題基本上無解, 因為下載器原本為了支援檢查圖片已下載的功能, 所以會重命名圖片檔名為頁碼名稱, 如果真的要支援下載原檔名, 那就得一個網頁一個網頁打request看檔名是什麼, 這樣檢查是否已下載過圖片的功能基本上就廢了(畢竟會超級慢...跟重新下載差不到哪去了...), 所以支援原檔名下載的功能即便不少使用者有提這個feature request, 不過因為沒想到好的解決方案我就一直沒有做(當時想到的解決方案只有下載時額外在儲存路徑多存一個索引檔紀錄資訊, 然後下載器就以那個索引檔作為基準, 不過那個索引檔還是要跟網站sync, 畢竟有可能同個網址又有update, 整個太複雜就一直放生了...)。

這次又有使用者提出這問題後, 就想說死馬當活馬醫研究一下, 結果竟然被我發現原來EH站的資源預覽頁面的縮圖資訊就有包含圖片檔案的檔名, 這樣我就不用真的一頁一頁去打request去要檔名, 跟檢查檔案衝突的問題立馬解決了。 當下心中第一個冒出的想法就是: "神諭降臨了!!! 感謝阿克婭女神為下載器給予天啟阿~~~"





沒想到這麼多年放生的feature request竟然最後真的實作了, 百感交集阿... 由於太興奮就打算今日事今日畢立馬更新了XDD


另外還有個更新是之前某天發現我的下載器資料夾怎麼超過1GB以上, 後來一查發現原來是CefSharp會自動寫log, 然後就越寫越肥寫到1G多, 他X的超恐怖!! 不過因為一般使用者更新完就會砍掉所有檔案只留setting檔, 所以之前有在更新的使用者就不會有影響, 基本上不是太大的問題, 這次也就順便加個砍Cefsharp log的機制。

Ver9.1 更新內容:
  • 新增支援檔案原檔名(目前只支援EH站) [啟用: 設置->勾選下載原檔名]
  • 自動移除CefSharp debug log


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1ujBkmI6-wcNv_epwRkNxVAD8xESIS_BX

32位元版本:
https://drive.google.com/open?id=1PN5rcIYfMFeUItQY7S4-DEF_vX1Kc3Ch

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年9月23日 星期一

個人網站開發更新 (新增Live2D血小板看板娘)

上周五~周日去聽PyCon活動, 其中週日有一場是有個日本老師介紹了Ren'Py這個用Python開發電子小說遊戲的遊戲引擎, 然後剛好跟同事Google到Ren'Py也可以用Live2D技術開發遊戲, 就忽然勾起我對Live2D的興趣了~。

個人對Live2D印象最深刻的就是以前PSP遊戲: 虎與龍以及櫻花莊的寵物女孩, 想當年我還是為了玩虎與龍的遊戲才買PSP的, 遊戲本身用Live2D技術做得非常好, 劇情也超讚, 補完了我不少遺憾(畢竟原作就是大河路線, 亞美跟實乃梨只能被放生, 而遊戲當然就能補足原作只有大河線的遺憾, 尤其是遊戲中的亞美路線的表結局跟真正結局做的超有愛, 如果有人也喜歡虎與龍這部作品的話, 強力推薦也玩玩看PSP的遊戲!!!)

一不小心就離題了XD  昨天PyCon結束回到家, 就開始狂嗑Live2D的資料, 想說總有一天也要自己刻一個喜歡的角色出來, 結果搜尋到一半發現一個超超超級讚的Live2D血小板:



這個Live2D模型是一位德國大神Denchi大大製作並放在推特上, 而且歡迎大家自行取用, 怎麼可以這麼大方, 真是太感動了阿~~~!!!

看到做得這麼讚的模型, 我想自己做個模型的慾望完完全全被打趴了, 立馬決定直接拿來使用了, 看到這麼讚的東西怎麼可能不行動呢, 自己做模型的規劃就決定直接往後推(我丟XD)

有了模型後, 再來就是要怎麼放到網站上了, Live2D支援在以下平台上使用:
Android, iPhone&iPad, FLASH, Unity, DirectX, Cocos2d-x, WebGL

有WebGL, 就表示可以用Javascript啦, 於是繼續挖教學資源, 雖然Live2D公司開的API功能很多所以非常複雜, 不過github上已經有不少神人打包成直接適用在網站上的library, 這代表我們只要小作修改就可以直接用大多數基本功能了, 讚讚讚。 詳細可以參考以下連結:

血小板的模型怎麼修改導入則是參考這位大大的文章

因為有上面這些大大們的成果讓我可以站在巨人們的肩膀上, 所以我只花半天就把血小板帶回我家(網站)了, 再來就是帶血小板熟悉新環境啦(小修改UI, 針對網站功能以及每個side project設計訊息的意思XD)。  以下是Demo:



個人網站:
https://project.zmcx16.moe/

順利的把血小板帶回家~~~ 開心XD

P.S. , 雖然除了原先預設台詞以外想了不少新台詞加進裡面, 不過其實原本在電腦裡有發現一張梗圖, 猶豫了很久最後還是忍住沒加那張梗圖的台詞進去, 我怕我真的加進去的話哪天真的會被麥當勞歡樂送XD  就是下面這張:

 

以上笑笑就好, 千萬不要太認真XD。

2019年9月21日 星期六

MahoMangaDownloaderVer9.0更新

有使用者反應dm5有些特定資源會無法下載, 查了一下發現dm5有些比較古早的漫畫圖源放的server不同, 造成下載器的檢查機制出錯而無法下載, 這種雷也只能case by case處理了哪...。

Ver9.0 更新內容:
  • 修復dm5部分漫畫無法下載的問題


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1sdULaNm6V5dgCeHqZJ7bSoUxS_nwfcI4

32位元版本:
https://drive.google.com/open?id=1gp2OBLu9DGH4xHtlX7eU7bJ432E_n7If

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年9月17日 星期二

protobuf-deserializer網站開發 [線上反序列化Google Protocol Buffers的網站]

前陣子趁下班幫同事寫了一個線上deserialize google protocol buffer的靜態網站, 比起用Tool去deserialize資料, 直接有個網站可以拖拉檔案的方式看檔案內容感覺會方便許多(就是快個幾秒啦XD)

上面的網站因為我不想在公司還要maintain一個server, 所以是把所有需要的proto檔案編譯成一個javascript library, 在push到github頁面做成靜態網頁, 好處是這樣我就不用maintain server了, 相反的壞處是只要proto schema有變動, 我就得重新編譯js檔在重新push上來。

後來反正不知道哪根筋不對, 想說這樣我就來做個通用的Google Protocol Buffers deserialize網站就好啦(怎麼又回到原始需求了, OMG!!!), 不過因為公司要用的已經做好了, 那這次我想做的就當我的side project吧~。

回到需求面來說, 這東西只有工程師會用得到, 而大部分工程師有pb data就代表它早就已經有寫好序列化/反序列化的程式了, 所以這東西基本上就是個做來自爽的東西, 不過轉心一想, 網路上也一堆base64編解碼的網站, 就算真的有tool可以用, 可以直接拉個檔案就出來視覺結果應該也是比較方便的吧?  只能這麼說服自己了, 就當練功囉, 還能前端後端一起長經驗值....。

做好的網站demo如下:




網站位址: 


這次的圖一樣是請我哥畫的, 它這次畫的背景我覺得很不錯~~ 蠻Happy的XD

另外關於網站的原理其實很簡單, 使用者先上傳想要deserialize的proto schema, 之後後端Server會根據使用者上傳的proto檔案去生成對應的javascript library, 在response給user對應的js檔案位址, 之後載入這個js檔之後就能解想解的proto buffer data了。

做了這個小網站之後, 我的Azure VM終於不再只為了MahoMangaDownloader做update server用, 總算又多了一件事可以用VM資源, 不然只做update server每個月繳300塊給M$真的有點瞎XD

在來先悠閒個幾天, 在想想之後要做什麼吧, 希望能想到有趣的好點子哪~~~。


2019年1-9月投資績效報告

今天在公司虛驚一場, 紀錄一下今年目前投資績效壓壓驚XD  直接PO圖:

績效圖:




交易個股清單:



上述的交易個股中, 有三檔是賠錢的, 分別是CTRN, EXEL, WFC, 其中CTRN賠最多, 因為中美貿易戰的關係一天就滑了14%, 畢竟服飾跟中國製造綁很大, 本來就不適合在中美貿易戰的過程中持有, 雖然後來有漲回來, 不過他大跌當天就碰到我設的停損出場了, 我也不想在中美貿易戰的過程持有它, 所以就果斷放生不繼續關注。

而EXEL原本是看他很便宜公司財報也很不錯, 不過進場後幾個月下來發現內部關係人士不斷的在出清持股, 雖然還沒跌破我設的停損, 不過我個人是覺得既然有基本面上的疑慮就不該持有, 所以就選擇出清轉換至其他標的。

WFC就不好說了, 因為中美貿易戰關係所以買保本用, 本來就沒預期會有大獲利, 在找到更好投資標的的情況就不管帳面選擇直接放生~。

至於賺錢的標的, 這次賺最多的就是PSX跟AT&T了, PSX當初會看上這檔主要是巴菲特也有買, 而且他是石油煉油廠不是挖石油的公司, 所以比較不會像一般石油公司隨著石油價格波動影響那麼大, 對於不想直接投資石油的人來說算是更安全的選擇。這次幸運的是一年多內光是PSX我就找到了兩次買點, 第一次是80塊買110塊賣, 後來PSX又大跌至80塊左右, 看起來稍微脫離80支撐後又在85塊買進, 現在價錢又重新回到100塊以上了, 還在等待出清的時機。

而AT&T就不用說了, 相當於美國的中華電信股, 看到30塊好價錢就買, 漲破10%以後在找時機賣, 這次賣得比較早34就出了, 不過AT&T這次盤整了超久..., 跟去年比真的被磨到比較沒耐心, 不過AT&T的好處就是不怕大虧損, 所以也是討厭風險的投資人的好標的, 這幾年下來真的揪甘心的投資標的。

剩下的其他個股太多就不一一介紹了, 在來就是慣例的台股抽籤部分, 今年目前累積抽中了三檔, 分別是浩鼎, 中壽以及得力實業, 獲利大概2W初, 每年一樣持續靠抽股票低風險穩穩賺加菜金XD


今年目前為止獲利真的超越以往, 目前能打贏大盤真的有爽到, 希望能繼續維持下去^^

2019年9月13日 星期五

[追加更新] MahoMangaDownloaderVer8.9更新 [含Ver8.8]

剛剛下載發現不只是dm5, 連manhuadui也有機率性載到重複頁的問題, 真有夠GY, 原因一樣是CefSharp的cache造成, 一樣是多加一道檢查機制避免下載到重複頁了...。

因為是機率性問題, 如果要加測試程式會變成只能大打壓力測試, 可是我Azure上的DevOps CI跑test已經幾乎廢掉了, 原因在於支援的網站中有2個會dns找不到domain, 1個則是會擋Azure的IP (八成是網站本身都是中文, 乾脆就只提供在亞洲地區才可以瀏覽吧...), 用我自己電腦auto跑CI又跑壓力測試也太不實際, 頂多就我自己偶爾手動run run cmd跑test了...。

因為載重複頁這個問題有各種可能(瀏覽器套件的cache, 網頁預載頁面等等), 只能case by case處理。如果有發現下載器會載到重複頁問題的話, 再麻煩回報給我, 因為有些漫畫本來上傳時就有重複頁, 所以我也沒辦法在程式上去事後檢查, 只能拜託使用者幫忙測試了 > <


Ver8.9 更新內容:
  • 針對manhuadui多加檢查機制避免載到重複頁

介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


檔案位址:
https://drive.google.com/open?id=1hR2uaEU2fGYhs5tEudeIpxsFXJC28kBM

32位元版本:
https://drive.google.com/open?id=1azE8FtykZSS8aVYdER88q377l05rNZaz


解壓密碼:zmcx16


<-----我是Ver8.8分隔線----->

不知道是不是最近dm5小改版的關係, 今天發現dm5下載時會有機率載到重複頁, 這次改版就多加一道檢查機制避免下載到前一頁。

Ver8.8 更新內容:
  • 針對dm5多加檢查機制避免載到重複頁


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1clOiCJ7NkofGBpC7nTEufMCuEZ3Mqg1U

32位元版本:
https://drive.google.com/open?id=1PQJSb9OjrLb6vyVzgLqZ-xtPoit83RrT

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

MahoMangaDownloaderVer8.8更新

不知道是不是最近dm5小改版的關係, 今天發現dm5下載時會有機率載到重複頁, 這次改版就多加一道檢查機制避免下載到前一頁。

Ver8.8 更新內容:
  • 針對dm5多加檢查機制避免載到重複頁


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1clOiCJ7NkofGBpC7nTEufMCuEZ3Mqg1U

32位元版本:
https://drive.google.com/open?id=1PQJSb9OjrLb6vyVzgLqZ-xtPoit83RrT

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年8月31日 星期六

MahoMangaDownloaderVer8.7更新

這次改版內容主要是實作 / 修復幾個使用者提的feature request & bug, 具體內容如下:

1. 新增支援網站 https://www.comicun.com/

有使用者希望能追加支援這個網站, 研究了一下發現這網站有不少其他網站斷更新的作品(Dr. Stone, 約定的夢幻島等等), 而且更棒的是這網站所有資料都是後端提供, 完全沒隱藏漫畫圖片的位址跟防下載器, 所以我只要打web request就可以拿到所有我需要的東西, 不需要開瀏覽器套件跑一堆js浪費電腦資源, 下載也更快~~~。

2. 修復dm5如果該漫畫只有一頁, 下載器很容易下載失敗的bug

因為dm5日漫跟港韓漫的顯示方式不一樣, 只有一頁的日漫會跟港韓漫的邏輯混在一起導致下載容易失敗, 修了一下這邊的邏輯處理這bug。

3. 設置頁面新增EH / EX站cookie keys: igneous, hath_perks

分別有使用者反應這兩個cookie key是有用的, 以igneous來說, 有些人的帳號應該是沒辦法進EX的, 不過有使用者實測以下方法可以讓申請的帳號進入EX, 步驟如下:

a. 用VPN設定美國跳板, 然後辦EH表站帳號
b. 等7天過後, 一樣用VPN設定美國跳板, cookie換EX domain就可以進入EX站, 此時的igneous會被設定一個有意義的值, 未來即便不用VPN, 只要cookie有這個值就能直接進EX。

表站帳號要到什麼情況才能無痛進EX這點我到現在還是不知道, 自己的帳號以前好像是不斷玩小遊戲忽然有天就進得去了, 所以也一直不需要igneous這個cookie, 如果有人帳號還是進不去EX的話, 可以用上面的方法試試看, 這次加這cookie也是為了這類帳號的使用者們。

另外新增hath_perks key的部分, 主要是有使用者反應這個key會反應使用者限制流量的值, 最免洗的帳號流量限制是5000, 有使用者反應他有這個key才會吃到自己帳號真實的流量限制。 我的帳號不知道是很老了還是其他情況, 就算沒那個key也是能拿到正確的值, 不過因為可能有不少帳號使用者也有上述的情況, 所以這次也一樣新增了這個cookie key, 希望能讓這類帳號使用者能用到自己帳號的流量限制。


這次更新總算是把累積的一些request清掉了, 再來可以清閒一陣子吧, 大概...XD


Ver8.7 更新內容:
  • 新增支援網站 https://www.comicun.com/ 
  • 修復dm5如果該漫畫只有一頁, 下載器很容易下載失敗的bug
  • 設置頁面新增EH / EX站cookie keys: igneous, hath_perks


下載器Demo圖:





介紹:
https://project.zmcx16.moe/?page=mahomangadownloader


環境需求



簡單除錯:
  1. 如果下載失敗, 麻煩先用瀏覽器測試看資源是否存活。
  2. 如果能正常用瀏覽器瀏覽, 麻煩先查看LogFiles資料夾內的log檔案看錯誤訊息為何。
  3. 回報問題時, 麻煩提供有問題的網址以及log內容, 這樣我才有辦法測試找問題原因。



檔案位址:
https://drive.google.com/open?id=1Aiuo7VsRBG-CpC8RkTbLK93SqSKkFBtS

32位元版本:
https://drive.google.com/open?id=1xPegyQXT5_mCweK9h4ZkPUDrStGhSaF2

解壓密碼:zmcx16



免責聲明:
******************
MahoMangaDownloader僅作為學術研究使用,禁止利用本程式行非法用途。

2019年8月29日 星期四

PhotoMosaic-Artifact Ver1.2 更新

上周末把UI刻好了, 這一兩天就是把功能連起來, demo如下:



影片如下 (中間轉換過程有點久, 原本想把中間片段做影片剪輯加速, 後來太浪費時間還是算了QQ)




這次的side project應該就暫時告一段落了~小專案花2個禮拜完工個人覺得還行 (畢竟只能用下班跟放假時間搞阿...), 不過認真說比起之前的 ChaldeaStockObservatory 進度真的順利太多了, 畢竟Electron已經不是第一次碰了, 也不用在卡環境問題就省了超多時間ㄚㄚ。


Ver1.2更新:
  • Implement GUI application
功能:

  1. Make the custom photographic mosaic image
  2. Support video material
  3. Support GUI tool

注意事項:
  1. 輸出圖的尺寸為 輸入圖 * scale,  輸出圖的寬度必須能整除參數col, 高度則必須能整除參數row, 整除後的寬度以及高度即為素材小圖的影像尺寸。
  2. 支援影片跟圖片做為素材圖, 不過如果素材圖的長寬比跟素材小圖不合, 在生成素材小圖時影像會自動被裁切。


程式原始碼: 
https://github.com/zmcx16/PhotoMosaic-Artifact



最後放上這之前做的所有demo成果, 對這tool有興趣的話十分推薦做些有趣的圖玩玩, 尤其是用色色的圖做馬賽克照片最好玩了XDD (逃~~~)





2019年8月18日 星期日

PhotoMosaic-Artifact Ver1.1 更新

這次更新主要就是支援影片作為素材, 只要把影片跟圖片一樣放到material資料夾下, PhotoMosaic-Artifact就會直接讀取影片並擷取小圖作為素材使用, 相關參數: [-video-sampling-ms, seed], -video-sampling-ms為擷取圖片的間隔時間, 預設時間為5000毫秒, 假設一個影片是23分鐘長的話, 總共會擷取276張小圖當作素材使用, 並且每次擷取時都會挑該區間時間的任意一張圖。


第二個修改則是效能改善, 原本算圖片平均顏色方法就是很單純的一個for-loop計算RGB平均顏色, 不過之前有經驗了知道矩陣相關的計算比起自己刻, 用numpy通常會快上不少。 下面是換上numpy後的比較結果(測試樣本為之前的AS圖):
  • Ver1.0:  2:04
  • Ver1.1:  0:44
直接快了2.8倍, numpy真是太神啦XD


另外除了新增支援影片跟改善效能之外, 這次也多加了-tolerance參數, 這個參數預設值為0, 所以在預設情況下每次產生馬賽克照片時輸出的圖都會是一樣的, 如果在不改變material素材的情況下想生成不同的輸出圖, 可以將tolerance稍微調高(0~10 or up), 並選定一個亂數種子(seed), 這樣PhotoMosaic-Artifact就會在容許誤差下亂數選擇不同的素材圖來組成馬賽克照片。


嘛...這次的side project真是異常順利阿, 畢竟跟之前從頭開始自己幹到底不同, 基本演算法已經有得參考, 實際上的功也就是用python重寫, 套一套library就搞定了。 像支援影片也只要套套opencv就搞定, 感覺嘴角都不禁失守了XD


最後來看下這次用影片生成的馬賽克照片吧, 這次選的素材為機動戰艦NADESICO (小時候心中的神作!!!) 素材為動畫TV版1-26 & 電影版, 取樣時間為5秒, 總共從影片產生了7947張素材小圖, 輸出結果如下:

output


原圖



恩...雖然看起來結果不錯, 不過因為這張圖色系比較單調, 所以重複的圖使用得特別多..., 在另外跑一張圖看看:
output


原圖


結果看起來不錯, 不過因為這張圖細節比較複雜, 所以我row跟col就調得比較高, 避免太多方塊不好看, 至於重複問題一樣還是有, 這個可以直接調-g參數搞定, 不過我懶得繼續try就先這樣就好XD

用影片生成馬賽克照片還有一個問題, 那就是影片截圖太花時間了..., TV 26集動畫 + 電影版影片總長度大概11小時, 截取7947張圖總共花了2小時多, 而產生row=100, col=100的馬賽克照片也才花7分鐘左右, 大部分時間都花在生成素材小圖上..., 不知道還有沒有其他方法可以改善影片取圖的效率問題...。


在來下一階段就是生個GUI Tool啦, 因為這部分要等我哥把icon圖畫出來才能收尾, 所以這塊就慢慢做了, 或是在想想還有什麼好玩的side project可以先動工 :)


Ver1.1更新:
  • 支援影片素材 (mkv, mp4, avi)
  • 效能改善
  • 新增參數(tolerance, random seed, video resampling interval)
功能:

  1. Make the custom photographic mosaic image
  2. Support video material
  3. Support GUI tool (TODO)

注意事項:
  1. 輸出圖的尺寸為 輸入圖 * scale,  輸出圖的寬度必須能整除參數col, 高度則必須能整除參數row, 整除後的寬度以及高度即為素材小圖的影像尺寸。
  2. 支援影片跟圖片做為素材圖, 不過如果素材圖的長寬比跟素材小圖不合, 在生成素材小圖時影像會自動被裁切。


程式原始碼: 
https://github.com/zmcx16/PhotoMosaic-Artifact


2019年8月14日 星期三

PhotoMosaic-Artifact Ver1.0 release

週日的時候花點時間把mosaic-generator (php)用python重新implement一遍, 因為演算法蠻簡單的, 所以真正的工作頂多就是把 GD library的方法找python的PIL library替代用, 另外就是把MySQL整個拔掉了, 為什麼作者當初要用MySQL我真的覺得超懸..., 唯一能想到的就是為了省記憶體, 畢竟要是素材圖超級多的話記憶體可能會吃不少, 不過每個素材圖也只需要記錄檔案名跟RGB值, 在怎麼樣記憶體用量也應該還好... 真心不懂QQ

把MySQL拔掉, 直接把素材圖資訊存到記憶體, 效率真的天差地遠, 以我下面那張做6400*4800, 素材圖282張的情況, 我用python寫的tool只需要2分鐘, 然後原版的php tool + MySQL要跑1小時27分..., 真的是天差地遠, 到底作者當初為什麼選擇用DB做這tool真是個謎阿...。

至於GD庫換成PIL庫的差異部分, 就是單純找類似功能的函式替代, 有差異就在自己手動解決, 沒什麼好講的XD

再來就是實際比較一下啦! 用python重新實作的tool跟原版php的差異如何, 畢竟用的影像函式庫也不同, 總還是會有些許不一樣, 這裡先用上次做的EVA圖比較看看:

mosaic-generator


PhotoMosaic-Artifact


原圖



恩....雖然看起來品質差不多, 可是我覺得明日香右眼跟嘴巴是mosaic-generator做的比較好, 輪廓比較明顯, 雖然應該只是運氣問題, 不過還是有點不甘心啊!!

既然如此就在來比較另一張圖吧, 選的圖是以前超喜歡的工畫堂音樂遊戲天使小夜曲:





比較之前照上次慣例先來張細緻點的圖(-row 192 -col 256 -scale 10 -gap 4 -e 27):

PhotoMosaic-Artifact


成果非常Great!!  不過這麼細緻的情況小圖就不清楚了, 為了馬賽克之美, 把row跟col各減一半, 然後一樣參數的情況下也跑mosaic-generator比較看看:


mosaic-generator


PhotoMosaic-Artifact


Perfect!! 看起來都很讚, 不過PhotoMosaic-Artifact看起來顏色稍微淡了點, 這問題主要是因為在做enhance colors時, PIL庫並沒有完全匹配GD庫的函式, 所以這邊我在做enhance colors合併時, 是用alpha值去代替合併程度, 如果把alpha值往上調就可以達到顏色更匹配原圖的, 這邊就不額外嘗試了, 現階段的結果已讓我足夠滿意XD

最後就是future work啦, 目前想好確定要做的有下面兩項:

1. 支援影像素材
2. 製作簡單的GUI應用程式
3. 優化效果 (optional)

第一點的話就是想要讓tool可以直接吃影像檔, 然後再根據使用者選的圖做馬賽克圖片, 舉例來說就是素材資料夾塞個一季13話的動畫, 最後產生出來的馬賽克圖就是這一季的回憶內容!!

至於第二點GUI應用程式一方面是順便練練前端技能的熟練度, 而且對一般使用者來說command line還是不親切, 有GUI應用程式還是比較好~。

第三點的話感覺有不少可以做, 像是有哪些filter可以用, 還有就是目前的演算法在選素材時, 是以average color決定哪張圖最適合, 可是以少數圖片來說, 用dominant color是比較適合的, 這塊就還要在試試看才知道, 想了解可以參考這裡

嘛...總之先休息個兩天, 之後再來慢慢做吧XD

功能:

  1. Make the custom photographic mosaic image
  2. Support video material (TODO)
  3. Support GUI tool (TODO)

程式原始碼: 
https://github.com/zmcx16/PhotoMosaic-Artifact


阿阿, 最後來還個願。  我FGO終於用送的石頭抽到阿比了!!!  前面幾篇的許願有傳達到阿, 感謝神~~~!!!