1.0.0 小數點那麼多在幹嘛?Breaking change 要 break 什麼?向下相容是要跟誰相容?

今天我推了一份扣,新增了 DB 某表格的欄位,發完 PR 沒過多久,我準備戴上耳機聽音樂。這時幫我 code review 的資深同事走到我旁邊坐下說:「你剛剛給我那包扣啊,有動到 DB schema,想跟你確認這要上 production 嗎?」

我誠惶誠恐的放下耳機:「可能要欸,因為之後前端還要接這支 API 回傳的東西,需要用更新的版本。」

「喔那如果這次要上線,就會有 breaking change……。」他說,「你先輸出這次更動的 script,我先上 script 再上扣。因為如果 script 沒先上直接上最新版號的扣,程式跟 DB 要東西要不到就可能炸掉。但因為你這次只新增欄位,對沒更版的人來說也是可以向下相容。」

修但幾咧……版號?Breaking change?向下相容?

身為菜 …


實現分散式儲存的星際檔案傳輸協定

Image for post
Image for post
Photo by Jeremy Thomas on Unsplash

IPFS (InterPlanetary File System) 是什麼?

A peer-to-peer hypermedia protocol designed to make the web faster, safer, and more open.

有鑒於 HTTP 協議在儲存檔案方面成本高、效率低、內容可能消失等特性, IPFS 是一個用 peer-to-peer (P2P) 架構設計出來的協議,目的是讓檔案儲存也能做到去中心化。

如果你對區塊鏈有興趣,你應該要了解 IPFS ,區塊鏈本身是一項去中心化的分散式資料庫系統,由於必須做到去中心化的程度,它本身僅是適合紀錄數字的簡單儲存系統,無法載入文件或是圖片。但區塊鏈技術若要成功商業化,則必須擁有更複雜的儲存系統,用來提供複雜程式、文件、圖片及影片的儲存功能,而 IPFS 能補足區塊鏈的儲存性能問題。

目前去中心化 …


Using state machines to define behaviors and state transitions — explained with dating apps

What’s a state?

In information technology and computer science, a system is described as stateful if it is designed to remember preceding events or user interactions; the remembered information is called the state of the system.

A system’s states are often defined by the aggregation of behaviors its users do. States are important because it’s a more systematic way of verifying whether certain behaviors at certain states are valid or not.

States of a traffic light

Consider a traffic light as an example. If it’s been green, drivers and passengers expect to see yellow — not red — next. When it turns yellow, they’d expect red and not…


寫程式前先釐清每個物件的「我是誰?」和「我在哪裡?」

最近架構師主管出了個作業給我們:康威生命遊戲(Conway’s Game of Life),要用這個經典題目讓我們練習 OOP 介面 (interface) 的設計理念。本文記錄我跟他聊生命遊戲程式設計的對話過程。

他出作業的理由是:

OOP 很強調 interface,而良好的 interface 是開出良好的 API 的基礎。看過太多用了先進開發工具與框架的工程師,卻設計出很糟糕的 API 有感。

舉例來說:看到一個題目你會定義哪些類別?你定義的類別各自的職責是什麼?如何表達各物件間的關聯?這個任務適合由這個類別的物件來做嗎?

Image for post
Image for post
Photo by Marisa Morton on Unsplash

遊戲都有規則,我們馬上來看看這個遊戲怎麼玩。

生命遊戲怎麼玩

康威生命遊戲,又稱康威生命棋,是英國數學家約翰·何頓·康威在 1970 年發明的細胞自動機

簡而言之,你可以想像有個棋盤(或是一片稿紙、或是一塊塊綠豆糕),在它的每一格都放入細胞,可能是活細胞或死細胞。細胞會因為一些條件在一段時間後生長或死亡,你在放入細胞後就可以站在旁邊開始觀察一段時間並計算整個過程。

像這樣(黑色是活細胞、白色是死細胞):


最近寫 PoC 在打 API 取得資料、瀏覽器 set-cookie 的時候,遇到一點問題:用本地透過 https 打都沒事,但用 docker 改成用 http 打就失敗了。

跟同事追了整整半天 ASP.NET core 的 cookies, same-site, secure policy 設定,最後才發現問題根源完全不是這些,而是瀏覽器的快取跟 HSTS 設定,於是想寫篇筆記做個紀錄。

問題

情境:用 dotnet webapp 一個專案中的登入頁 (/Signin),呼叫 HttpContext.SignInAsync,用 CookieAuthenticationDefaults 把登入成功拿到的資料(用戶名字、ID)塞到 cookies,轉址到會員資料頁 (/Member)。

var cl …


透過培訓轉職後端工程師的心得

因為最近又到了 AppWorks School 的申請季節,身邊很多親朋好友在詢問我這個軟體培訓計畫 (coding bootcamp) 的種種,於是希望透過本文分享心路歷程給非本科系、也想轉職成為工程師的人們。官網有的內容不做過多贅述,這邊整理關於 AppWorks School 常常有人問我的問題、以及分享我個人的體驗。

* Disclaimer: 本文為非官方的個人心得

Image for post
Image for post
Photo by Sean Lim on Unsplash

AppWorks School 是什麼?

Code Your Future

遠距學習 4 週 + 駐點集訓 16 週,成為軟體工程師

AppWorks School 是個「集結業界實務所需,精心設計的訓練課程」,目標就是透過它的培訓,你可以成為一位軟體工程師

我在 AppWorks School 花多少時間?

AppWorks School 要求連續 16 週、每週約 70–75 小時的學習量。表訂每週一到五 9 …


客製化種種零件以打造複雜物件

建造者模式在幹嘛?

建造者 (Builder) 模式將物件的「建構」與「表示」分離,隱藏並封裝建構過程的細節。它讓我們可以將物件本身拆解成不同的元件,一步一步建造每一部分,最後產生出我們想要的複雜物件。

Builder is a creational design pattern that lets you construct complex objects step by step. The pattern allows you to produce different types and representations of an object using the same construction code.

為什麼要用建造者模式?

要解決的問題為:

  1. 拖太長的建構子 (telescoping constructor)
  2. 建構子內不需要的參數 …


透過烤麵包的例子練習 C# 工廠設計模式

我的 mentor 丟給我 Refactoring Guru 的設計模式 (design pattern) 教學網站一陣子了,剛好連假回家看見我媽在揉麵團烤麵包,因此想借用烤麵包的例子,練習一下工廠方法 (Factory Method) 和抽象工廠方法 (Abstract Factory Method)。

GitHub Repo: 工廠方法 branch抽象工廠方法 branch

Image for post
Image for post
Photo by Nadya Spetnitskaya on Unsplash

來做麵包吧

今天我們想設計一間麵包店,先不要太複雜,就專做一種麵包:吐司。

首先要設計一個製造吐司的東西,可能是機器、團隊等等,這邊先當作是台機器,我們叫它 ToastMaker:

很簡單:讓這個吐司店有「生產吐司」的方法,回傳一個我們另外定義的 Toast 類別的物件。如果把 Toast 產出那段加工一下,可以針對 Toas …


HPV 是什麼?子宮頸癌疫苗怎麼打?做愛為什麼要戴套?什麼時候要做子宮抹片?

Image for post
Image for post
Photo by Dainis Graveris on Unsplash

上週跟朋友揪團去婦產科做抹片檢查和疫苗諮詢。在候診的時候,她說:「性需求好像每個女生都不大一樣。」

我說:「對啊,而且我覺得心理會影響生理。有性生活後就得好好檢查子宮,生為女生真的麻煩。到底為什麼人要有性慾?」

她說:「對啊!你不覺得如果人類沒有性慾、食慾這些基本生理需求,那會多出好多時間?」

我說:「還是我們等等進去問醫生這個問題?」

為何而寫?

當然,我們最後沒用這個哲學問題為難醫生。但在跟她、醫生還有許多友人聊天的過程中我發現,台灣人對很多極為基本的性知識大多似懂非懂,而且社會氣氛又偏向避諱公開談論性議題,導致很多時候疏忽了健康(不知道怎麼安全的做愛、不敢去做該做的檢查、不知道該檢查什麼……等等)。

長期忽略了預防和檢查,讓台灣每年約有 4,500 個子宮頸癌的新病例(含原位癌)發生,近 700 人死於 …


了解並分析連結網路中的樞紐資訊

本文概念摘錄至【數學的戀愛應用題】一書「親密關係的公式」章節,並延伸討論 Jon Kleinberg 的 Authoritative Sources in a Hyperlinked Environment 論文。歡迎一起討論,有啥可改進的地方也請不吝跟我分享!

Image for post
Image for post
Photo by NASA on Unsplash

網路

網路 (network) 是由多個節點 (node) 組成,可互通資訊的組織結構。

網際網路是最眾所週知的一種網路,每個網站頁面是一個節點,節點間會有連結互相導向不同網站(其他節點)。

性伴侶關係也是一種網路,一個人就是一個節點,有過親密關係的人們彼此節點就會串連,屬於社會人際網絡的一種。

以下主要以 Instagram 社群的網路、以及性伴侶的關係網路,探討網路的結構。並在最後用「搜尋引擎提供的資料搜尋結果」的網路,討論找出最佳資料的演算法。

無尺度網路

根據網路的分布特性,可以區分為隨機網路 (random network) 與無尺度網路 (scale-free network)。網際網路與性伴侶關係網路都屬於「無尺度網路」 …

Wenchin

Software engineer | youtuber

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store