2018年11月29日 星期四

Graveyard Keeper遊戲心得與啟發

Graveyard Keeper,中文翻譯為《守墓人》,是一款像素風格的經營管理類遊戲,類似牧場物與或者前陣子爆紅的《星露谷物語》(Stardew Valley),只是這款遊戲要經營的是墓園(牧場變墳場)。其宣傳標語相當逗趣:

The most inaccurate medieval cemetery management sim of the year.

Graveyard-keeper
這款遊戲我陸陸續續花了一兩個月才破關,遊戲時數不多,時間會拖這麼長其實對我來說也是家常便飯了,畢竟都是利用下班以及哄小孩入睡之餘的空檔來玩遊戲的。
但遊玩之後,對於遊戲開發所需要的知識以及經驗,有幾項特別的心得(以前沒想到的),特別整理一下:

2018年11月22日 星期四

從Google圖書到可攜式epub

前語

很多買了電子閱讀器的人,可能會發現從《Google圖書》花錢買下來的電子書籍,下載之後,居然無法在電子閱讀器底下開啟。這其實是因為這些電子書商對於保護著作財產權的一種防範措施,避免單一消費者任意散布檔案給其他未付費的讀者。目前(2018)較慣用的做法多半是為這些下載下來的檔案附加上DRM(Digital Restrictions Management)屬性,而循規蹈矩的電子閱讀器基本上就無法任意開啟受DRM保護的電子書籍檔案(即便那是你花錢買來的)。可是這可能對於以購買的消費者帶來一定程度的不便,畢竟買這類eReader有很大一部分原因就是不想看較為刺眼的電腦/手機螢幕,但購書管道又不想侷限於單一平台。畢竟貨比三家不吃虧,電子書購買平台本來就不應侷限於電子閱讀器上面的那款。以下文章提供一些簡單的做法來移除這些惱人的DRM屬性。

2018年11月11日 星期日

新增更多Anaconda Prompt字型

More Fonts for Your Anaconda Prompt

使用Windows+Anaconda套件的中文語系使用者,多半都會發現anaconda prompt的字型實在是有點糟糕,但更換字型的時候絕大多數會看到下列畫面:
windows prompt fonts in BIG-5

2018年11月9日 星期五

第一篇利用StackEdit編輯的文章

Motivation

最近一陣子回鍋開始使用blogger,發現blogger文字編輯器真的不是那麼好用。尤其在工作場所,接觸過hiwiki/wiki/redmine套件之後,真的是覺得blogger這一類的文字編輯器實在有點抱歉。尤其hiwiki更是越來越神,對於工程背景的人來說,利用這些工具整理邏輯性很強的文章相當重要,必較讓作者可以更專注於內容而非排版。因此我開始搜尋是否有更容易的方式在blogger發表文章。

Markdown

有編寫過wiki/redmine文章就會略微知道其實他用一些簡單的標記就可以輕鬆做一些文字標籤或者表格,不過到今天我才知道這一類語法多半是有standard的,其中比較多人使用的標準叫做markdown。
維基百科: https://zh.wikipedia.org/wiki/Markdown
Markdown中文文件: https://markdown.tw/

Does Blogger Support Markdown?

2018的當下,答案顯然是不支援,Google了一下可行作法:大多數都還是在別的地方編輯markdown文檔,利用其他工具轉成html之後,直接用blogger html edit mode將內容貼上。不過找著找著,突然發現了StackEdit (https://stackedit.io/) 這個網站提供的服務相當特別,StackEdit基本上是讓你編輯markdown檔案,每篇文章以獨立檔案儲存在類似GoogleDrive的workspace裡面做備份,同時,透過StackEdit提供的publish按鈕就可以直接將markdown文章發表到Blogger/GitHubPages/因此來試用看看!

Who Else Support Markdown?

最明顯的應該是GitHub Pages,不過這樣就等於要從blogger跳槽,暫時還沒這個打算。

2018年11月5日 星期一

字型的深度學習(3)

Tensorflow平台選擇


跑tensorflow平台大致研究了一下, 除了用自己的PC來跑之外, 也可以使用Google Cloud Platform(GCP)或者Amazon的AWS服務, 但發現GCP收費約 USD $300/month跑不掉, 即使是可以使用小時計費的TPU感覺還是不便宜, 自己畢竟還是初學者, 先用PC研究看看吧

zi2zi project will migrate to python 3


zi2zi project似乎還在使用比較舊的python2, 但目前大多數tensorflow app/tutorial都已經轉向python3, 有人在github上面提問後, 作者也已經回應將會將zi2zi migrate到python3

使用local desktop PC來跑Tensorflow

2018年10月24日 星期三

字型的深度學習(2)

發現一個有趣的東西:
zi2zi: Master Chinese Calligraphy with Conditional Adversarial Networks
這個github上面的zi2zi(字到字)專案,跟我之前想到的人工智慧字型學習的概念相當雷同!

稍加研究之後,簡單而言,style transfer的一種AI應用方式,就我初步的理解,這一類的應用主要是在training的時候,給定一組已知input stream,以及他相對應型別轉換後的output stream。講白話一點,如果我的style transfer叫做『灰階化』,那麼這一對已知的input就可以是彩色圖片,而對應的output便是灰階處理過的圖片。下圖是一個風格化的例子
https://www.techleer.com/articles/466-insight-into-fast-style-transfer-in-tensorflow/
如果對style transfer有興趣,可以搜尋prisma這個app看看他們的厲害之處
https://prisma-ai.com/


以下是目前對zi2zi初步理解:


zi2zi利用這個style transfer的基本做法(之一),大致如下:

training的時候…


先用字型A產生特定中文字的圖像當作training input stream,接著找另外一個字型B產生同樣的相同中文字的圖像來當作training output stream。

inference的時候…


當deep learning model已經學習完畢,如果它訓練效果很好,表示它大致上已經摸熟了字型A到字型B的微調原則,所以我們可以刻意給定另外一組不同中文字所組成的圖像當作inference input stream,讓它產生inference output stream。到這邊為止,還是zi2zi的本質。

但我想到的應用是:


倘若字型B是一個字數有短缺的字型,也許因為人力資源有限導致開發中斷或緩慢等等。透過這種作法我們其實可以要求這位虛擬字型學徒,透過inference的方式產生其他原先它並沒有看過的中文字。用這個特點,假設字型A是類似全字庫字型的full set,那我們可以這種做法來補足字型B的字數!

但有幾個潛在的問題:


A. 虛擬字型學徒可能學習效果很差
B. 虛擬字型學徒只能做圖到圖的轉換,但數位字型檔是OTF格式,中間還有一番轉換功夫

2018年10月18日 星期四

字型的深度學習(1)

之前看到日星初號楷體的時候,對這種字型相當著迷,無奈我得知這款字型的當下,日星鉛華網站已經停止服務,我甚至連這個網站原本長啥款都還不知道。
然後,我找到這家鉛字行的粉絲專業
似乎嗅出了那麼一點字型為何停止開放下載的理由,似乎是部分鉛字師父認為部分字型透過數位呈現出來的效果跟他們想的不一樣。

不過,我個人看到這款字型的問題,跟鉛字師傅在意的點完全不一樣,我認為缺字率太高的字型很難被接受,更甭論廣泛使用,畢竟字型這種東西要有人使用,才會被看到才會有人記住。但要克服缺字率這一點似乎就又回到了﹝人力短缺﹞這個很根本的老問題,畢竟鉛字行也算是夕陽產業沒錯吧?願意投入這一行,要能長期執行甚至以此養家活口的人,相對來說應該會很少。所以才冒出了『保留傳統工藝 發揮漢字文化價值』這樣豪邁的標語,打著文化價值的觀點來提倡這項技藝。

感覺這套字型如果還有下一步(也許已經完全停止開發),可能會是刻字老師傅要徹底教會製造數位字型的年輕字型設計師,然後這位還要這數位相對年輕的數位字型設計師還有辦法持續養活自己,持續造字(因為常用字數應該3k-5k可能跑不掉, 全字庫可能也要40k up才算),我們才有可能看到下一代字數足夠的「日星貳號楷體」

但,我有個不同的想法!


如果學會鉛字符號造型精隨的那個傢伙,不是人類,而是一台電腦呢?

如果我們讓人工智慧學會這個字型的外貌(如同老師傅訓練新手學徒造字),接著再讓這個二位元世界的學徒,自動去產生其他字符,是不是就比較有機會產生一個字數足夠的數位字型呢?

一般而言,人工智慧分成training/inference兩個步驟,前者是學習階段,後者算是應用階段。

舉例來說,支付寶電子支付廠商,如果想透過人工智慧的方式來辨識人臉,並加以自動扣除消費者的電子錢包,在他推出這項服務之前,他得先透過一系列複雜的學習跟計算過程,訓練出一的程式模型,而這一段程式碼專精於讀取圖片來進行人臉辨識,最後對應到某特定帳號,那這一段訓練過程叫做training;

而當支付寶公司推出這項服務之後,用戶手機裡面或者結帳櫃台上的電腦裡面,在適當的場合(結帳)來執行這段程式碼進行辨識,叫做inference。

如果有一套方法能夠讓某特定人工智慧程式能夠學會某特定字型的眉眉角角(training),那麼之後要產生數位字型的時候(inference),應該就有機會能夠大量生產眾多中文字符,省去冗長的琢磨時間,藉此解決字數不足的困處