思元的開發筆記

關於 web service, unity, blogger 等軟體工程筆記

Github SSH 連線設定,確保 Mac SourceTree 正常運作

前陣子在 Mac 上使用 SourceTree 這套 GUI 工具來管理 Github repositories,但由於帳號因安全性考量改用 2FA (Two-factor authentication) 認證後,原先在 SourceTree 採用 HTTPS 利用帳...

Senior Unity Developer 面試題目分享

分享前陣子尋找新機會所遇到的 Unity 考題 ,十分有水準與微難度,事後回想並整理成此問題筆記。關於該機會的綜合心得放置在文章頁尾。

Go Reader Pattern 設計與實作

最近在寫小專案所遇到的設計問題,其中一個目標是從檔案中讀取英文單字 (word),並且將其轉換成英文小寫,因此記錄如何在 Golang 設計此機制,並且不斷改進寫了三個版本,並撰寫額外的測試程式碼 (testing code) 進行驗證。

Unity 遊戲存檔機制淺談,加密 (Encryption) 保護遊戲存檔防作弊

延續在 前一篇文章 中的議題。 前題,任何的加密機制只是增加破解難度,單機遊戲存檔若沒有特殊硬體的保護,幾乎都可以被破解,光是程式碼反編譯 (decompiling) 並且分析程式碼,便能知道該遊戲如何處理存檔加密,甚至能直接拿到加密用的金鑰 (key)。

Unity 遊戲存檔機制淺談,關於壓縮 (Compression) 的三兩事

延續在 前一篇文章 中的議題,在遊戲存檔進行壓縮 (compress) 後儲存,可減少其儲存所需空間,之後讀取先經過解壓縮 (decompress) 後,再反序列化 (deserialize) 還原成遊戲狀態物件來使用。

Unity 遊戲存檔機制淺談,從序列化 (Serialization) 到儲存裝置 (Storage)

之前在社團看到的有趣問題,因此綜合以前的開發經驗,整理成這份筆記。

Unity rendering order 整理筆記

自從上次 GameJam 體驗在 Unity 中,使用 SpriteRenderer 可直接調整 Sorting layer 來決定 render 順序後,便一直很好奇其背後實作到底是什麼,為什麼改變一個數值便能調整 sprites 在 render 結果的先後順序,而不...

AWS Beanstalk: 日誌 Logs 推送到 CloudWatch 之設定筆記

參考 Reference 章節的 AWS 文件,紀錄如何將部署 在 AWS Beanstalk 的服務所產生的日誌 (logs),設定 CloudWatch Logs agent 來自動推送至 CloudWatch,而不用每次發生問題得自己花時間去撈 logs……。

CentOS 7 環境安裝筆記,GUI/gcc/g++/Code::blocks/Go 完整的 Go/Cgo 開發環境

整理之前在 Linux 建立 Go/Cgo 開發環境的安裝筆記。

HTTP TimeoutHandler 所踩到的雷與解決方式,需要額外判斷 Request.Context() 的狀態

最近遇到在 HTTP 伺服器壓力測試時遇到棘手的問題,從 nginx logs 發現伺服器回應許多 HTTP 503 service unavailable 的錯誤,一路追蹤最終發現是程式碼實作錯誤,記錄其筆記提醒自己不要忘記這個雷。

Go build 建置時加入時間 (build time) 與版本號 (git commit id)

因應合作廠商需求,希望我們這邊提供網路服務 (web service) 的執行檔 (executable),能透過某些方法知道其版本號或是建置時間等資訊,以協助其 IT 人員部署 (deployment) 時使用。

Go with Cgo 靜態連結 (static linking) 函式庫建置範例與筆記

延續上一篇 Go with Cgo 動態連結 的文章,由於部署 (deployment) 需求的改變,合作廠商 IT 運維技術人員 (Ops) 對於 Linux 的不熟悉,期望部署不需要管理那些動態連結 (dynamic linking) 函式庫,因而開始研究改用靜態連...

Go with Cgo 動態連結 (dynamic linking) 函式庫建置範例與筆記

在 上一篇文章 中,已經知道如何在 Windows 中,利用 gcc/g++ 建置動態連結函式庫 (dynamic-link library),本篇文章筆記如何在 Go (Golang) 中,利用 cgo 來動態連結函式庫,呼叫使用其函式。

在 Windows 環境建置動態連結函式庫 (Dynamic-link library),使用 MinGW gcc/g++ 以及 CodeBlock

整理在 Windows 環境下,編譯 C/C++ 產出動態連結函式庫 (Dynamic-link library) 給其他專案使用的筆記。 大部分的情況下,在 Windows 作業系統中,通常都使用 Microsoft 所推出的 Vistual Studio IDE 來...

開發 Blog 文字雲工具,統計部落格字詞出現次數

空閒時間開發的小工具,能夠統計部落格 (Blog) 文章字詞數量,然後根據字詞出現頻率,組合畫在一張圖片上的功能。 建議使用桌機電腦 (desktop),以避免繪製文字雲效能的低落 這功能記得從 2017 下半年就想嘗試,然後一直拖拖...

Heroku with Golang,如何部署第一個 WebApp

Heroku 是一套支援多程式個語言的雲平台即服務 (platform as a service, PaaS),只要將程式碼上傳到該服務中,便可上頭自動編譯執行,建造自己的網路應用程式,且該服務提供免費試用方案 (有限制的),又有支援 SSL (https)。

Linux CentOS Network unreachable 處理解決方式

最近在 VMware VMPlayer 的虛擬機器上安裝 CentOS 7,準備進行需 Docker 環境測試與研究,但卻發現沒有網路……跟以前安裝 CentOS 6 情況不同,當時可是直接有網路的,花點時間整理啟用網路的筆記,對 Linux 不熟悉就得花上許多時間研究...

使用 Lighthouse 來檢查網站設定,為了更好的 SEO 以及瀏覽體驗

從新聞得知有這個工具,GoogleChrome Lighthouse 是一套開源自動化工具,用來協助檢查網站 (Website) 或是網路應用程式 (Web App) 的質量 (quality),從讀取效能 (performance)、網頁親和力 (accessibil...

C# 回傳內部資料集合的幾種方式,考慮封裝與設計需求

Game Jam 活動 上遇到的有趣問題,如何設計回傳資料集合 (data collection) 的函式 (function)?筆記以下幾種方式,範例採用背包類別 (ItemBag class),要將其類別的內部道具資料,暴露給其他類別使用。 附註:System.Co...

LeetCode #84 Largest Rectangle in Histogram

Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of larges...

Unity C# 遊戲事件訊息通知機制設計 - Observer pattern

前陣子同事分享去資策會 Design pattern 課程所學,聽到 Observer pattern (觀察者模式) 的介紹,感覺這比較是 C++ 老派的實作方式,不一定適用於 C#,因此在此寫此筆記記錄。

如何設定 Linux 使用 SSH Key-based 登入驗證方式,使用 PuTTY 登入 Linux 伺服器

最近公司架台內部使用的 Linux 機器,原先是輸入 MIS 所設定的帳號密碼登入,但保管帳號密碼顯得有點難以記憶,因此想到可以使用公開金鑰認證 (Public Key Authentication) 方式,不用輸入密碼而是提供私密金鑰來進行登入。

AWS Beanstalk: Cannot open shared object file and ldconfig

持續的 Beanstalk 部屬筆記,最近部屬的 Go web application,使用到 cgo 動態連結其他函數庫 (shared library) 的函數,在執行階段發生找不到函數庫的錯誤:

AWS Beanstalk: Configuring the proxy server - Keepalive connection with backend app

無意間在檢查應用服務時,所發現的 nginx 設定問題,每次與 nginx 連線要求時,nginx 都會另外開一個連線來處理與後端伺服器 (backend app) 的資料交換。目前專案服務採用 source bundle 方式在 Beanstalk 平台部屬 (dep...

AWS Beanstalk: HTTP 502 Upstream sent too big header while reading response header from upstream

最近檢查即將上線的服務,發現主要服務經常發生 HTTP 500 的錯誤,從 logs 中確認是其中某個 REST 微服務回應 HTTP 502 Bad Gateway 所導致的,因而從中翻翻閱該微服務的全部 logs,並找到出錯原因以及解決方法。

Unity C# Interface, Inheritance and Component:以狀態血量設計為例

最近同事分享之前受訓所學的 Design patterns,加上看到社群有人詢問血量設計問題,因此整理關於在 Unity 中,設計血量系統的可能實作方法。 不得不說,剛從學校畢業開始接觸 Unity 時,最優先採用的是類別繼承 (class inheritance),...

Unity C# Inheritance vs Composition 繼承與組件式設計之戰鬥系統經驗談

基於一些機緣而回憶之前身為初心者所掉過的坑,到底應該是使用繼承 (Inheritance) 抑或是組合 (Composition) 方式來設計遊戲中的戰鬥系統,哪一種比較適合 持續變動的遊戲開發 ?