蒼時弦也蒼時弦也

COSCUP 2019 - 演講後談復活的頁遊 - Unlight (一)

COSCUP 分享了這兩週左右(8/3 ~ 8/17)把一款決定開放原始碼的網頁遊戲,從無法啟動到恢復伺服器開始運作的一些經驗跟大家分享。 不過看起來還是有很多人沒有機會來聽,雖然之後因為會把一部分重心放在這款遊戲上,所以應該還是有不少機會,但還是簡單的來彙整一下今天講的東西。

上一篇快速閱讀 Unlight 原始碼大致上有提到了我在當時看到原始碼的看法跟概觀。有興趣的話可以搭配演講簡報一起讀這篇文章。

另外,這次整個遊戲運作起來除了我自己本身對 Ruby / ActionScript 有一定的了解外,也要感謝一下我們這個團隊(Open Unlight)的初期成員 Poka 和舞鶴,給我硬體上的支援跟對其他玩家的客服支援,不然有時候真的很難同時處理這些事情。

蒼時弦也蒼時弦也

快速閱讀頁遊 Unlight 開源後的原始碼

最近一款有點年紀的頁遊 Unlight 在停止營運後幾年,突然公佈說要開放原始碼跟圖片素材。

這款遊戲嚴格說起來並沒有像我們熟悉的端遊、手遊之類的那樣華麗,但是非常有特色的人物設計跟對戰系統倒是讓很多玩家即使在好幾年後仍然在期待他能復活。

作為一個曾經的玩家,其實也是非常期待的,不過這次的開放原始碼路線大概是復活無望。不過從這幾天公開的資料來看,圖片、音效到客戶端和伺服端都公開的狀況下,還是很有希望被熱血的玩家復活的。

另一方面,既然伺服器是透過 Ruby 撰寫的,身為使用 Ruby 的開發者在遊戲類應用不常見的狀況下,能可以作為學習素材肯定是要看過一遍的。

蒼時弦也蒼時弦也

你大概沒機會遇到的 Bug - 跟 Ruby Committer 聊 Enumerator 跟 Fiber

今年 RubyConf Taiwan 嘗試辦了 After Hack 這個活動,也因此有機會可以跟 Ruby 語言的 Commiter 聊一些有趣的問題。

當天我的預定是把活動這幾天寫的 Gem 認真的補完測試,不過沒想到還剩下一個多小時就做完了,那就順便來思考一下 Tamashii 專案能怎樣去改進,在今年的演講中大家應該都對 Fiber 有一個認識,而這個也許是一個不錯的選項。

所以就馬上去看了一下講者(Samuel)的 Async 這個 Gem 做了些什麼事情,因為剛講完關於 Enumerator 的演講,所以自然地看到了一段引起我興趣的說明。

Due to limitations within Ruby and the nature of this library, it is not possible to use to_enum on methods which invoke asynchronous behavior. We hope to fix this issue in the future.

既然作者本人就在現場,而且 Issue 的內容也看不太出來發生什麼問題,那麼就直接問吧!

蒼時弦也蒼時弦也

RubyConf Taiwan 2019 會後感想、議程概覽

跟前幾年一樣基本上就是工作人員,這幾年參加研討會也都比較沒有在仔細聽了,所以大多是邊顧邊寫點程式。

比較不一樣的大概是今年更累了,從週四下午場佈到 Pre Party 然後兩天的活動、Official Party 最後到今年嘗試的 After Hack 幾乎是四天左右的連續接力,每天早上醒來都要先懷疑自己是否能撐過這一天。

蒼時弦也蒼時弦也

巴哈姆特 Chatbot 之亂:用 Ruby on Rails 接收 Webhook

六月底的時候發現巴哈姆特似乎想為他們推出的 Messaging APP (哈哈姆特)舉辦一個聊天機器人的比賽,看到之後想說還算蠻有趣的,所以我就跟朋友很隨意的組成一個團隊來開發。

跟大多數我們熟悉串接 Chatbot 的機制是類似的,我們可以用 Webhook 的方式接收一個來自使用者發送的訊息,然後再透過程式處理後回傳訊息給使用者。

蒼時弦也蒼時弦也

用 CloudFlare Workers 製作簡單的 Uptime Status 頁面

最近跟朋友弄了一個透過 Chatbot 做出手遊效果的專案,沒出什麼意外的話大概能在九月看到一個雛形。不過既然是手遊類型的遊戲,更新資料跟維護其實就會遇到一些困難點。

如果是線上遊戲或者手遊,大多數只要在公告後把玩家切斷連線然後升級過程中避免玩家連上就好。不過因為是 Chatbot 所以除非能做到不停機升級,不然是很困難的。 如此一來,讓玩家知道遊戲(機器人)正在更新,處於無法使用的狀態,就是一個重要的關鍵。

蒼時弦也蒼時弦也

Ruby 中 Constant 和 Class 的關係

下班前龍哥說在 Mailing List 看到了一段 Code 很有趣。

 1a = Class.new
 2
 3p a        #=> #<Class:0x0000558d34f68b48>
 4p a.name   #=> nil
 5
 6B = a
 7p a.name   #=> 'B'
 8
 9C = a
10p C.name   #=> 'B'

裡面 C = a 到底發生了什麼事情,是很值得討論的,因為有了線索是 rb_const_set 可以找到原因,所以就利用下班時間來讀看看這段。

關於前面的用法可以參考之前寫過的自由的 Ruby 類別來了解原因。

蒼時弦也蒼時弦也

關於 Rails 中的 Form Object / Presenter 這些物件該怎麼用(一)

前陣子在 Review 新專案中同事的程式碼時,發現同事對像是 Service Object / Form Object 這類物件不太有概念。不過這個新專案因為是接手其他公司的專案,所以有不少地方要微調。至少那個值得吐槽的「因為 Controller 程式碼太長不知道放哪裡,就都丟去 Service Object 好了!」的神奇用法,完全沒有幫助改善程式碼。

也因為這個機會,我用了一點時間跟專案的同事分享了一下我對這些物件的看法。畢竟當出我也是搞不太懂,不過隨著了解物件導向和 Ruby 的語言特性,從這些角度切入後,就比較能理解該怎麼使用。

蒼時弦也蒼時弦也

利用 Ruby 的 Lambda 做條件判斷

週末在思考一些 Ruby 特性可以應用的小技巧時,想到龍哥大概跟我講了三次以上的一個特性。

1fn = ->(other) { other == 1 }
2fn == 1
3# => false
4fn === 1
5# => true

剛好最近工作的專案上有個問題,似乎挺適合用這個技巧。

蒼時弦也蒼時弦也

如何在沒有任何設定下產生 Rails 的 Docker Image

前陣子看到 Throughbot 這間在 Ruby 圈 算是蠻有名的公司做了一個叫做 Suspenders 的 Gem 主要是對 Rails 擴充,簡單說就是基於原本的 rails new 做了一個替代品,而這個替代品會自動幫你先做好一些原本要手動做的事情。

像是安裝好常用的 Gem、套版之類的,想了一下覺得五倍其實也很需要,不少新專案也都是從我這邊經手初始化的,有一個這樣的工具會省下不少時間。

所以 Bankai (卍解) 這個 Gem 就樣做出來了,裡面基本上就是設置好在五倍大多數時候用的標配 Ex. GitLab CI 設定、RSpec 等等

但是又發現好像不太夠用,有些時候有 Docker 會方便很多,但是 Bankai 現在做不到!