發佈日期:

[LeetCode] Coin Change

https://leetcode.com/problems/coin-change

最近開始刷leetcode覺得思考這些邏輯問題還滿好玩的
第一個刷的是這個,他是一個動態規劃的題目

一般我們在思考的時候會去思考以錢幣為基準,例如1,3,5的錢幣要怎麼湊成11元,我們會拿1,3,5去隨機湊硬幣,但是當數值大了以後,要計算最小的錢幣組合就會變成很困難.

像這種極限求值就會需要將思考轉換過來, 我們可以一步步的拆解, 先了解1,3,5,若要組成1是用幾個(1個1),那組成2要用幾個(2個1),若要組成3要用幾個,到3時我們就會發現,3可以用”3個1″或”1個3″組成, 這時候就可以來比較誰用的硬幣比較少,然後把最小可組成的數字”1″存到可組成結果為3的陣列。
接下來在思考4的時候,我們就可以思考4減掉硬幣1,也就是3,的最小使用硬幣數量,那就代表我們使用3,再加上硬幣1,可以組成4。接下來算要組成6要幾個硬幣,6減掉硬幣3,可以拿到硬幣3要用幾個硬幣,所以就是硬幣3使用的硬幣數量+1。
var coinChange = function (coins, amount) {
if (amount == 0) return 0;
let amountRecord = []
amountRecord[0] = 0
lastExistResult = 0
minCoin = Math.min(…coins);
//紀錄這些硬幣能夠組合成的數值所使用的硬幣數, 並用這些數值來推算目標所需的硬幣
for (var currentAmount = 1; currentAmount <= amount; currentAmount++) { amountRecord[currentAmount] = Infinity if (currentAmount + minCoin >= lastExistResult) {
for (var coin of coins) {
if (coin <= currentAmount) {
//尋找這一個數字可不可以用之前可組成的硬幣加上其中一個新的硬幣來滿足(以確認是最小的硬幣數目)
amountRecord[currentAmount] = Math.min(amountRecord[currentAmount], amountRecord[currentAmount – coin] + 1);
}
}
}
if (amountRecord[currentAmount] != Infinity) {
lastExistResult = amountRecord[currentAmount];
}
}
console.log(amountRecord)
return amountRecord[amount] == Infinity ? -1 : amountRecord[amount]
};
這個JS的效能只贏了32.59%的人

覺得不太開心(?)
所以我把console.log拿掉,再把let amountRecord = []; amountRecord[0] = 0;改成一行let amountRecord = [0](是有沒有這麼無聊)

接著我突發奇想,想說若是這個數字可用硬幣湊齊, 下個數字如果小於最小的coins數字的話,可以省略(如硬幣是10,15,18, 但是要組成11,很明顯就不可能會有結果,因為11-10小於10)

PS: 但是測試後其實拿掉console.log影響最大XD
var coinChange = function (coins, amount) {
if (amount == 0) return 0;
let amountRecord = [0]
lastExistResult = 0
minCoin = Math.min(…coins);
//紀錄這些硬幣能夠組合成的數值所使用的硬幣數, 並用這些數值來推算目標所需的硬幣
for (var currentAmount = 1; currentAmount <= amount; currentAmount++) { amountRecord[currentAmount] = Infinity if (currentAmount + minCoin >= lastExistResult) {
for (var coin of coins) {
if (coin <= currentAmount) {
//尋找這一個數字可不可以用之前可組成的硬幣加上其中一個新的硬幣來滿足(以確認是最小的硬幣數目)
amountRecord[currentAmount] = Math.min(amountRecord[currentAmount], amountRecord[currentAmount – coin] + 1);
}
}
if (amountRecord[currentAmount] != Infinity) {
lastExistResult = amountRecord[currentAmount];
}
}
}
return amountRecord[amount] == Infinity ? -1 : amountRecord[amount]
};

結果至少擊敗了72.28%的人,累了…先這樣吧XDD

發佈日期:

LBP 區域二值模式

其實會發這一篇文,主要是看到這個博客的文章真的感動到快哭了…

這幾天因為想增加OCR辨識正確率開始與LBP打交道
https://zh.wikipedia.org/wiki/%E5%B1%80%E9%83%A8%E4%BA%8C%E5%80%BC%E6%A8%A1%E5%BC%8F
我找到了一個看起來很強大很棒的函式庫
https://scikit-image.org/docs/stable/api/skimage.feature.html#skimage.feature.local_binary_pattern

網路上有很多教學文章,看起來是很知名的套件
a href=\”https://machine-learning-python.kspax.io/classification/ex1_recognizing_hand-written_digits\”>https://machine-learning-python.kspax.io/classification/ex1_recognizing_hand-written_digits
然後我遇到了和這位博主一樣的問題
https://www.cnblogs.com/ilk123/p/11797261.html
沒錯…….LBP明明出來的應該是1-256的值阿…我也是設定R=1, P=8\r\n這樣用default的LBP出來的應該要是1-256之間的值,但是卻是0和1的二值陣列….

我一直想..這麼偉大的一個scikit-image怎麼可能有錯,一定是我的使用方法有誤…
害我撞頭撞到快崩潰…..
沒想到在此遇到一個和我一樣的苦主
太感動了,特此記錄!

另外,後來我也找到了一個最原始的LBP算法
程式碼下載於 https://github.com/zhongqianli/local_binary_pattern/blob/master/local_binary_pattern.py

def original_lbp(image):
"""origianl local binary pattern"""
rows = image.shape[0]
cols = image.shape[1]

lbp_image = np.zeros((rows - 2, cols - 2), np.uint8)

for i in range(1, rows - 1):
for j in range(1, cols - 1):
code = 0
center_pix = image[i, j]
if image[i - 1, j - 1] > center_pix:
code = code | (1 << 7) if image[i - 1, j] > center_pix:
code = code | (1 << 6) if image[i - 1, j + 1] > center_pix:
code = code | (1 << 5) if image[i, j + 1] > center_pix:
code = code | (1 << 4) if image[i + 1, j + 1] > center_pix:
code = code | (1 << 3) if image[i + 1, j] > center_pix:
code = code | (1 << 2) if image[i + 1, j - 1] > center_pix:
code = code | (1 << 1) if image[i, j - 1] > center_pix:
code = code | (1 << 0) lbp_image[i - 1, j - 1] = code return lbp_image[/code]

發佈日期:

WEBM影片格式介紹

WEBM格式是一種媒體文件格式,開源為Web使用設計,主要用於視頻的播放。

WebM簡介

WebM 是一個開源的媒體文件格式,主要用於封裝使用 VP8 或 VP9 編碼的視頻流和使用 Vorbis 或 Opus 編碼的音頻流。這個格式是由 Google 主導開發的,並於 2010 年首次推出。

以下是一些 WebM 格式的特點和詳情:

1. 設計目的

WebM 主要設計用於在線流媒體傳輸,特別是作為 HTML5 的 <video> 標籤的一部分。它旨在提供一個開放、高效、免版權費的視頻壓縮方案。

2. 視頻和音頻編碼

  • 視頻:VP8 或 VP9
  • 音頻:Vorbis 或 Opus

3. 優勢

  • 開放和免費:WebM 是一個完全開源和免費的格式,這意味著任何人都可以使用和分發它,無需支付任何費用。
  • 高效壓縮:使用 VP9 編碼的 WebM 文件可以提供與 H.264 相似的視頻質量,但文件大小通常更小。
  • 廣泛支持:大部分主流瀏覽器,如 Chrome、Firefox 和 Opera,都支持 WebM 格式的播放。

4. 缺點

  • 兼容性問題:一些瀏覽器(如 Safari)和一些媒體播放器可能不原生支持 WebM 格式。
  • 硬體支持限制:與某些其他視頻格式相比,硬體支持可能較少。

5. 適用場景

由於 WebM 的高效壓縮和開放性質,它特別適合用於網頁視頻、視頻會議、流媒體服務等場景。

6. 文件結構

WebM 使用 Matroska 容器格式,這是一個流行的開源媒體容器格式,可以容納多種編碼的音頻和視頻流。

可使用的傳輸協議

  1. HTTP/HTTPS:作為最常見的Web傳輸協議,HTTP和HTTPS可用於傳輸WEBM文件。這是在網頁中嵌入和播放WEBM視頻的標準方法。
  2. RTSP (Real-Time Streaming Protocol):用於控制多媒體流的傳輸,可以用於WEBM格式的傳輸。
  3. HLS (HTTP Live Streaming):由Apple開發的基於HTTP的流媒體通信協議,也可用於傳輸WEBM格式。
  4. DASH (Dynamic Adaptive Streaming over HTTP):另一種基於HTTP的適應流媒體傳輸協議,支持WEBM格式。
  5. FTP (File Transfer Protocol):用於在客戶端和服務器之間傳輸文件的協議,可以用於傳輸WEBM文件。
  6. WebSocket:允許在Web瀏覽器和服務器之間建立全雙工通信通道,也可用於傳輸WEBM數據。
  7. WebRTC:允許Web瀏覽器進行即時通信,也可以用來傳輸WEBM格式的視頻。

優缺點分析

優點:

  1. 開放標準: WEBM是一個免費並開源的格式,這意味著它不受專利限制,可以自由使用。
  2. 高質量和高效編碼: WEBM使用VP8/VP9視頻編碼,這些編碼器提供了與其他流行格式相當的視頻質量,但文件大小更小。
  3. 廣泛支持: 大多數現代Web瀏覽器都支持WEBM格式,使其成為網絡視頻的理想選擇。
  4. 支持HTML5: WEBM被設計為與HTML5 <video> 標籤完全兼容,使其在網頁中的集成變得簡單。
  5. 支持透明度: VP8/VP9支持透明度(Alpha Channel),允許視頻有透明背景。

缺點:

  1. 軟件兼容性: 雖然大多數現代瀏覽器支持WEBM,但一些舊的或非主流的瀏覽器和媒體播放器可能不支持。
  2. 專業編輯支持有限: 相比其他格式如MP4,WEBM在專業視頻編輯軟件中的支持可能較少。
  3. 不是所有設備都支持: 一些移動設備和媒體播放器可能不支持WEBM格式。
  4. 沒有廣泛的工業標準: 雖然WEBM在Web環境中表現出色,但它還沒有像MP4那樣成為廣泛接受的工業標準。
  5. 音頻格式限制: WEBM通常使用Opus或Vorbis作為音頻編碼,這可能不是所有應用的最佳選擇。

由Google開發的其他格式

WEBP 是一種圖像格式,用於同時提供有損和無損壓縮。同樣也是由Google開發,目的是加速圖片在網頁上的加載速度。

要把.jpg轉成.webp可使用下面的語法

ffmpeg -i input.jpg -c:v libwebp output.webp

QUIC

  • QUIC則是一個多路復用的傳輸層協議,使用UDP進行數據傳輸。
  • 它的目的是減少連接建立的延遲,並且改善在不可靠網絡中的數據傳輸性能。
  • QUIC還包括了一個內置的TLS,增強了安全性。

WEBM和QUIC解決了網絡中不同的問題。WEBM專注於視頻編碼和播放,而QUIC則專注於連接和數據傳輸的效率和可靠性。Google作為一個網絡技術的領先公司,一直在推動和創造各種新的技術標準,以改進整個互聯網的性能和體驗。

發佈日期:

TCP/UDP協議中的串流協定

基於或可以使用UDP (User Datagram Protocol)的協定

RTP(Real-time Transport Protocol)

RTP(Real-time Transport Protocol,即時傳輸協定)是一個網絡協定,用於交付音頻和視頻等多媒體數據流。以下是RTP的一些關鍵特性和細節:

  1. 即時性:RTP旨在實時交付數據,這意味著它需要以最小的延遲和抖動來傳輸數據。
  2. 協議層次:RTP通常運行在UDP之上,這樣可以降低延遲,但可能會導致一些封包丟失。在某些情況下,它也可以運行在TCP上。
  3. 封包結構:RTP封包包括了一個標頭和有效負載。標頭包括有關封包的資訊,如序列號、時間戳等,用於同步和順序排列。有效負載則包括媒體數據。
  4. 同步和排序:RTP的頭部包含一個序列號,用於標識每個數據包。這使得接收端能夠檢測丟失的數據包並重新排序接收到的數據包。在實時通信中,尤其是視頻和音頻流,這一功能非常重要,因為它可以讓接收端正確地播放數據。每個RTP數據包還包含一個時間戳,用於表示數據的取樣時刻。這可以讓接收端同步不同類型的媒體流(例如音頻和視頻),並控制播放的速度和節奏。
  5. 與RTCP的組合使用:RTP通常與RTCP(RTP控制協議)一同使用。RTCP可以提供有關媒體傳輸質量的反饋,如丟包率、抖動等,這有助於調整和改進傳輸質量。
  6. 多播和單播:RTP支持單播和多播傳輸,使其能夠服務於一對一通信和一對多通信的場景。
  7. 可擴展性:RTP本身是一個相對簡單的協議,但它的設計允許通過擴展標頭和其他機制來添加新功能。
  8. 安全性:RTP可以與SRTP(安全RTP)結合使用,以提供加密和數據完整性保護。

RTP(Real-time Transport Protocol)和WebRTC(Web Real-Time Communication)是兩個密切相關但有所不同的技術。

  1. 定義和目的
    • RTP:是一個協議,用於實時傳輸多媒體數據,例如音頻和視頻流。它可以運行在各種應用和平台上。
    • WebRTC:是一個開放的框架,允許Web瀏覽器進行即時通信(RTC)。它包括一組協議和API,用於在Web瀏覽器之間建立P2P連接。
  2. 組件和協議
    • RTP:是實時數據傳輸的核心協議之一,通常與RTCP(RTP控制協議)一起使用。
    • WebRTC:使用了多個協議和技術,其中RTP就是其中之一,用於媒體數據的實時傳輸。WebRTC還使用了其他協議,如STUN/TURN/ICE(用於NAT穿透和對等發現)和DTLS/SRTP(用於安全性)。
  3. 應用範圍
    • RTP:不限於Web,可用於各種音頻和視頻通信應用。
    • WebRTC:主要用於Web應用,允許瀏覽器進行視頻和音頻通信。
  4. 傳輸層
    • RTP:通常運行在UDP上,也可以在TCP上。但是RTP在TCP上運行時,可能會有一些效能方面的考量,由於RTP自身具有序列號,用於檢測丟失的數據包並重新排序接收到的數據包,與TCP的可靠傳輸機制重疊。另外,TCP的可靠傳輸機制需要確認(ACK)機制,可能會增加傳輸的延遲
    • WebRTC:使用RTP作為其媒體數據的傳輸協議,並使用UDP作為傳輸層協議。

在WebRTC應用中,你可能需要使用WebSocket作為信令通道,以此幫助建立和協調P2P連接。在這種情況下,WebSocket用於傳送元數據(例如SDP描述和ICE結果),而WebRTC用於傳送實時語音、視頻和數據。

RTSP(Real Time Streaming Protocol)

RTMP 和 RTSP 都是使用 TCP 進行控制信令傳輸,但它們在傳輸媒體數據的方式上有所不同。RTMP 使用 TCP 進行媒體數據的傳輸,而 RTSP 使用 RTP/RTCP 在 UDP 上進行媒體數據的傳輸傳輸。RTSP允許客戶端通過建立和控制媒體流會話來請求和傳輸實時媒體數據。

以下是RTSP的一些特點和功能:

  1. 實時性:RTSP主要用於實時傳輸音頻和視頻等實時媒體數據,能夠提供較低的傳輸延遲,適用於實時的音視頻通訊。
  2. 客戶端/服務器模型:RTSP採用客戶端/服務器模型,客戶端通過發送請求來控制服務器上的媒體流,並獲取媒體數據。
  3. 控制功能:RTSP支持控制功能,客戶端可以發送請求來控制媒體流的播放、暫停、快進、倒退等操作。
  4. 媒體描述:RTSP支持媒體描述功能,客戶端可以通過請求獲取媒體流的描述信息,如編解碼器信息、媒體流格式等。
  5. 使用RTP/RTCP:RTSP常用與RTP(Real-time Transport Protocol)和RTCP(RTP Control Protocol)結合使用,以在網絡上傳輸實時媒體數據。

RTSP在視頻監控、視頻會議、流媒體直播等場景中得到廣泛應用。它為實時媒體數據的傳輸提供了一種靈活、高效的通信機制,使實時音視頻通訊和流媒體播放成為可能。

SRT(Secure Reliable Transport)


SRT(Secure Reliable Transport)是一種基於UDP的開源傳輸協定,由Haivision公司發起並由SRT聯盟持續開發。它的主要目的是優化在公共網路(如互聯網)上進行高品質視訊串流的性能。

SRT旨在解決在廣播等高品質視訊串流場景下,對於低延遲、丟包率低的傳輸要求。它在UDP之上實現了數據包重傳機制,並且加入了AES加密,以確保傳輸的安全性。此外,SRT還提供了一個預測網路傳輸性能的機制(稱為「SRT預測模型」),該模型可動態調整傳輸參數,以優化傳輸性能並減少延遲。

因此,SRT協定將UDP的低延遲特性與TCP的可靠傳輸特性相結合,旨在在公共網路上提供一種安全、可靠、低延遲的視訊傳輸解決方案。這使得它在如廣播、遠程生產和OTT串流等領域中得到了廣泛應用。

QUIC (Quick UDP Internet Connections)

Quick UDP Internet Connections(QUIC)是一種實驗性的傳輸層協議,旨在優化網絡連接性能並提高網絡傳輸的安全性。QUIC主要依賴於用戶數據報協議(UDP)而非傳統的傳輸控制協議(TCP) 。這使得 QUIC 能夠降低網絡延遲、提高連接速度,並在保持安全性的同時減少握手次數

要使用QUIC,您需要遵循以下幾個步驟:

  1. 確保支持QUIC協議的瀏覽器或客戶端要使用QUIC,首先您確保的瀏覽器或客戶端支持該協議。許多現代瀏覽器(如Google Chrome和Mozilla Firefox)已默認啟用QUIC。如果使用或其他瀏覽器,請查看其文檔以確認是否支持QUIC,並了解如何實現。
  2. 使用支持QUIC的服務器為了充分利用QUIC協議的優勢,您需要確保服務器端也支持QUIC。您可以選擇支持QUIC的雲服務商,如Google雲平台,或者手機搭建支持QUIC的服務器,例如使用Caddy或nginx 。
  3. 配置服務器 如果您要搭建自己的服務器,需要配置服務器以啟用QUIC。對於Caddy和nginx等服務器軟件,您可以參考相應的文檔來配置QUIC支持。確保您已正確配置服務器以使用QUIC,並且需要時提供相應的加密證書。
  4. 測試QUIC連接一旦服務器和客戶端都支持QUIC,您就可以通過訪問設置為使用QUIC的網站或服務來測試連接。可以使用瀏覽器的開發者工具檢查網絡連接是否成功地使用了QUIC協議。
  5. 監控和優化使用QUIC協議後,您可能需要監控連接性能,並根據需要進行調整。可以使用各種網絡分析工具來評估QUIC連接的表現,並根據結果優化服務器配置。

MPEG-DASH(Dynamic Adaptive Streaming over HTTP)

在使用HTTP-TS進行傳輸時,需要對數據進行分片,以提高傳輸效率和穩定性。可以使用各種分片技術,例如MPEG-DASH的架構技術、HLS的架構M3U8文件等。雖然名稱中包含“HTTP”,但MPEG-DASH可以在任何數據傳輸協議上運行,包括UDP

MPEG-DASH 通常使用 HTTP 協議,因此它可以通過標準的 HTTP 端口 80 進行傳輸。如果是使用 HTTPS 的話,則是端口 443。這樣的設計使得 MPEG-DASH 能夠更容易通過防火牆和代理伺服器,並且在現有的 Web 基礎設施上部署,因為它使用的是 Web 通信的標準端口和協議。

這種基於 HTTP 的流媒體傳輸方式還有其他的好處,例如緩存和兼容性,因為許多現有的 HTTP 伺服器和網絡設備已經能夠支持 MPEG-DASH,無需進行特殊的配置或升級。

MPEG-DASH(Dynamic Adaptive Streaming over HTTP)是一種自適應比特率流媒體技術,允許高品質的流媒體通過HTTP進行交付,從不同的比特率和質量的媒體文件中進行選擇。因此,你可以將其視為一種基於HTTP的分片技術,而非一個獨立的傳輸協議

這種自適應技術的核心是將媒體內容分成多個小的段(或稱分片),然後通過HTTP傳輸。客戶端(例如視頻播放器)可以根據網絡條件和設備能力動態選擇不同的質量和比特率的段進行播放。

這使得MPEG-DASH可以在各種網絡條件下提供更好的視頻觀看體驗,適應網絡帶寬的變化,並提供流暢的播放,無論連接速度快慢。它不是一個新的傳輸協議,而是建立在現有的HTTP協議之上的一種媒體交付方法。

RTMP (Real-Time Messaging Protocol)

RTMP(Real-Time Messaging Protocol)和 RTSP(Real Time Streaming Protocol)都是基於 TCP 的應用層協議,它們都使用 TCP 協議進行數據傳輸。雖然它主要使用TCP,但也可以使用UDP。

RTMP是一種用於實時數據傳輸的協議,主要用於音頻、視頻等媒體數據的傳輸。它使用TCP連接來傳輸數據,因為TCP提供了可靠的數據傳輸機制,確保數據的可靠性和缺陷,適合實時數據的傳輸。

RTSP也是一種用於實時媒體數據傳輸的協議,它用於控制媒體流的傳輸和播放。RTSP使用TCP連接來發送控制命令和接收媒體描述信息等控制數據,以確保控制信令的可靠傳輸。而媒體數據本身通常使用RTP(Real-time Transport Protocol)和RTCP(RTP Control Protocol)協議在UDP上進行傳輸,因為UDP具有較低的傳輸延遲,更適合實時媒體數據的傳輸。

因此,RTMP 和 RTSP 都是使用 TCP 進行控制信令傳輸,但它們在傳輸媒體數據的方式上有所不同。RTMP 使用 TCP 進行媒體數據的傳輸,而 RTSP 使用 RTP/RTCP 在 UDP 上進行媒體數據的傳輸傳輸。

那RTSP和RTMP是同樣的數據,如果RTSP設計於UDP傳輸,不是有順序可靠的檢查的動作,而RTMP沒有?

其中,RTSP(Real Time Streaming Protocol)和 RTMP(Real Time Messaging Protocol)在設計上有一些不同,儘管它們都是用於實時媒體傳輸的應用層協議。

RTSP 是一個控制協議,主要用於控制媒體流的傳輸和播放。RTSP 使用 TCP 連接發送控制命令並接收媒體描述信息等控制數據,以確保控制信令的可靠傳輸。而媒體數據本身通常使用RTP(Real-time Transport Protocol)和 RTCP(RTP Control Protocol)協議在 UDP 上進行傳輸。

RTP和RTCP是專門設計用於傳輸實時媒體數據的協議。RTP負責傳輸媒體數據,並提供時序、序列號等信息來保證數據順序和實時性。而RTCP則用於傳輸控制信息,例如網絡RTCP的一項功能就是檢查丟包率並做出相應的調整,以保證媒體數據的傳輸質量。

相比而言,RTMP 是一種用於實時數據傳輸的協議,主要用於音頻、視頻等媒體數據的傳輸。RTMP 使用 TCP 連接來傳輸數據,保證數據的可靠性和缺陷。RTMP 協議本身並並沒有專門設計用於檢查丟包率和調整傳輸速率的機制,這些功能通常需要在應用層實現。

綜上所述,RTSP 和 RTMP 在傳輸實時媒體數據的方式和設計上有所不同。RTSP 主要用於控制媒體流的傳輸和播放,使用 RTP/RTCP 在 UDP 上進行媒體數據傳輸,並帶有丟包而RTMP則主要用於傳輸媒體數據,使用TCP進行數據傳輸,對於丟包率和傳輸速率的控制通常需要應用層實現。

基於 TCP 的串流協議

  1. HTTP Live Streaming (HLS):由 Apple Inc. 提出的基於 HTTP 的串流協議,被廣泛使用在各種串流場景中。它將串流內容分割成一系列小型的基於 HTTP 的文件來傳遞給客戶端。
  2. MPEG-DASH(Dynamic Adaptive Streaming over HTTP):這是一種領先的元率串流技術,使高品質的串流媒體成為可能,通過HTTP傳輸。
  3. RTSP (Real-Time Streaming Protocol):雖然 RTSP 本身是一種控制協議,用於控制串流媒體服務器,但實際上,它的串流通常用 RTP 跨越 UDP 實現。然而,RTSP 也可以跨越 TCP 串流實現傳輸。
  4. RTMP (Real-Time Messaging Protocol):RTMP 是由 Adob​​e Systems 為 Flash 播放器播放音訊、視訊和數據而開發的開放協議,主要使用 TCP。
  5. Microsoft Smooth Streaming (MSS):這是微軟開發的一種前置串流協議,通過HTTP進行傳輸。
  6. HTTP/2:這是 HTTP 協議的第二個主要版本,它允許服務器將多個響應客戶端到客戶端,而無需客戶端明確的請求,這對於串流媒體來說是有利的。
發佈日期:

串流的網路概念

FFmpeg介紹

FFmpeg 是一個應用程式工具,它的主要功能包括讀取、解碼、編碼、轉碼、重新封裝、串流等各種視頻和音頻格式。這種應用程式大多數情況下被認為是在應用層(Application Layer)

然而,如果從數據表示、編碼和轉換的角度來看,你也可以說 FFmpeg 做的工作涉及到表示層(Presentation Layer)的部分功能。例如,它會解碼影片檔案(從一種表現形式轉換為另一種),並將其轉換為對應的像素和音頻資料。

若是使用ffmpeg讀取HTTP-FLV的串流,HTTP-FLV 協議主要是在應用層工作,而接收端的應用程序(例如媒體播放器)則在應用層和表示層之間工作,負責解封裝和解碼接收到的數據

HTTP 和 WebSocket 協議

HTTP 協議的握手過程通常包括客戶端發送一個請求到伺服器,然後伺服器回應這個請求。這種請求/回應模式構成了 HTTP 的基本交互模式。

而 WebSocket 協議的握手過程稍微有些不同。WebSocket 的握手過程基於 HTTP,一開始由客戶端發送一個 HTTP 升級請求到伺服器。如果伺服器接受這個升級請求,它會回應一個升級的回應,此時連接就會從 HTTP 轉變為 WebSocket。然後這個 WebSocket 連接就可以用來做全雙工的通訊,直到一方選擇關閉連接為止。

這些握手過程都是在應用層進行的,並且直接涉及到最終的應用程序(例如網頁瀏覽器或者 Web 伺服器)的行為。

WebRTC(Web Real-Time Communications)的網路概念

WebRTC(Web Real-Time Communications)是一種用於網頁瀏覽器的 P2P(Peer-to-Peer,即點對點)通訊技術。它可以讓網頁瀏覽器直接與另一個網頁瀏覽器進行實時的音視頻通訊,不需要中間的伺服器轉發。

WebRTC 在 OSI 模型中的定位並不容易確定,因為它實際上涉及到了多個 OSI 層次。例如,WebRTC 使用了 RTP(Real-time Transport Protocol,實時傳輸協議)來傳輸音視頻數據,RTP 通常被認為是在傳輸層(第四層)。同時,WebRTC 還需要用到 STUN/TURN/ICE 這些協議來進行 NAT 穿透和對等節點的發現,這些協議也工作在傳輸層。而且,WebRTC 最終的實際應用(例如在網頁瀏覽器中進行音視頻通話)則是在應用層(第七層)

所以,我們不能簡單地說 WebRTC 屬於 OSI 模型的某一個層次。相反,我們可以說 WebRTC 是一種跨層次的技術,它涉及到了 OSI 模型中的多個層次。這也再次顯示了 OSI 模型在實際應用中的限制,並非所有的網路技術都能夠簡單地映射到 OSI 的七個層次中。

WebRTC 是一個開放標準,允許通過網頁進行實時通信(RTC)。它使用一系列的協議和技術來實現這一點。下面是一些關鍵部分:

  1. RTP(實時傳輸協議):用於媒體數據(例如音頻和視頻)的傳輸,通常基於UDP。
  2. STUN/TURN/ICE:這些協議和技術用於 NAT 穿透和對等節點發現。STUN 和 TURN 伺服器協助 WebRTC 節點找到彼此並建立直接連接。TURN 伺服器可以在需要時中轉數據,可能使用 TCP 或 UDP。
  3. 信令:WebRTC 本身不規定信令協議。信令用於在通信的兩個端點之間交換元信息,例如呼叫設置、能力協商等。這可以通過各種方式實現,例如使用 WebSocket、HTTP 或其他協議,通常基於 TCP。

所以,WebRTC 使用了多個協議,其中一些是基於 UDP 的(如 RTP 和某些 TURN 場景),而其他一些可能是基於 TCP 的(如信令或當 TURN 使用 TCP 時)。

上圖展示了整個WebRTC所運用的協定架構,左邊(TCP)為Signal應用,右邊(UDP)為串流應用, 協定堆的搭配使用,補足彼此的不足,而本章主要專注在串流應用(右邊)上的協定上,為WebRTC提供了哪些功能。

SRT(Secure Reliable Transport)協定

SRT(Secure Reliable Transport)是一種基於UDP的開源傳輸協定,由Haivision公司發起並由SRT聯盟持續開發。它的主要目的是優化在公共網路(如互聯網)上進行高品質視訊串流的性能。

SRT旨在解決在廣播等高品質視訊串流場景下,對於低延遲、丟包率低的傳輸要求。它在UDP之上實現了數據包重傳機制,並且加入了AES加密,以確保傳輸的安全性。此外,SRT還提供了一個預測網路傳輸性能的機制(稱為「SRT預測模型」),該模型可動態調整傳輸參數,以優化傳輸性能並減少延遲。

因此,SRT協定將UDP的低延遲特性與TCP的可靠傳輸特性相結合,旨在在公共網路上提供一種安全、可靠、低延遲的視訊傳輸解決方案。這使得它在如廣播、遠程生產和OTT串流等領域中得到了廣泛應用。

SRT 加入了一些特性來強化它的穩定性和效能,這使得它能夠對傳輸過程進行更細膩的控制,同時也提供了比 TCP 更低的延遲。

這些特性包括:

  1. 數據包重傳:如果檢測到數據包丟失,SRT 會嘗試重新傳輸這些丟失的數據包,這樣就可以保證數據的完整性。
  2. 端到端的安全性:SRT 支持數據加密,確保數據在傳輸過程中的安全性。
  3. 低延遲:相比 TCP,UDP 的傳輸延遲更低,這使得 SRT 更適合實時或近實時的視訊串流

SRT通常不直接在網頁上播放的原因也是因為他是使用UDP的傳輸協定:

  1. 協議支援:瀏覽器通常支援的協議,如HTTP和WebSocket,是基於TCP的。這些協議被廣泛用於Web應用程序中,因為它們提供了可靠的連接和內建的流控制。由於SRT是基於UDP的,它不是瀏覽器原生支援的協議之一。
  2. UDP的限制:UDP不保證資料包的到達順序或可靠性。SRT在此基礎上增加了一些特性來改善這些問題,但這並不意味著它可以直接在所有客戶端上使用。瀏覽器可能因安全和可靠性的考量而限制或不支援UDP流量。
  3. 轉碼和轉封裝:為了在網頁上播放SRT流,可能需要額外的伺服器組件來轉碼或轉封裝流為瀏覽器支援的格式,例如HLS或MPEG-DASH。這可能增加了複雜性和延遲。
  4. 安全性考量:網頁的安全模型可能限制了直接使用UDP的能力。WebRTC是一個允許網頁使用UDP的技術,但即使如此,它也需要符合特定的安全和隱私要求。
發佈日期:

網路概念模型介紹

網際網路協議模型(網路模型)和開放系統互連(OSI)模型都是描述電腦網路通訊的框架。它們將通訊過程分解為不同的層級,每個層級都有特定的功能和協議。

OSI 七層模型介紹

  1. 實體層(Physical Layer):這一層負責管理電腦通信設備和網路媒介之間的互動。它處理的是二進制位元組在通訊媒介(如電纜、無線電波)上的傳輸。
  2. 資料連接層(Data Link Layer):主要負責將網路層(第三層)傳來的數據封裝成幀(Frame),在兩個網絡節點之間傳輸這些幀,並處理錯誤的檢測和修正。以下是一些在資料連接層工作的知名協議:
    • 乙太網路(Ethernet):這可能是最廣泛使用的網路技術之一。乙太網路使用 MAC 地址來識別網絡中的節點,並提供在本地網絡範圍內傳輸數據的方法。
    • 點對點協議(Point-to-Point Protocol,PPP):被認為是在第二層的資料連接層運作,是因為它的主要功能和職責都集中在這個層次。資料連接層的主要責任包括組織原始位元組成有意義的資料幀(Data Frames)、在通信實體間建立和終止連接,以及進行錯誤檢測和修正。
      PPP協定主要用於在兩個直接連接的網路節點之間建立網路層(第三層)連接,例如兩個通過撥號網絡、數據機或專用線路直接連接的系統。PPP定義了如何建立、配置和測試在直接連接的節點之間的網路層連接的方法,也包括如何將網路層封包封裝成幀、如何進行錯誤檢測,以及在出現問題時如何終止連接。這些功能都屬於OSI模型中的資料連接層。
      因此,即使PPP提供了對上層網路協定(例如IP)的支援,並能夠將網路層的數據封裝為幀並在點對點的連接中傳輸,但由於它的核心功能主要在於建立、管理和終止連接,進行錯誤檢測和修正,以及將數據封裝為幀,因此我們說PPP是在資料連接層運作的。
    • 無線局域網(Wi-Fi):無線局域網也是在資料連接層工作,它為無線網絡提供了傳輸數據的方法。
    • 媒體存取控制(Media Access Control,MAC):用於控制多個裝置如何在共享媒體(例如乙太網)上存取數據。這裏的”碰撞”是指在半雙工通信系統中,如果兩個或多個設備同時嘗試發送數據,則可能會互相干擾,導致數據損壞。MAC協議(例如CSMA/CD在乙太網中的使用)協助協調這些設備的傳輸,以最小化碰撞的可能性。
    • 邏輯鏈路控制(Logical Link Control,LLC):這種協議為網絡應用程序提供了一個統一的接口,使得它們可以無需關心下層的具體硬體細節(如乙太網路、無線局域網等)。
  3. 網路層(Network Layer):這一層負責將網路地址(如 IP 地址)分配給裝置,並決定數據的路徑。這一層的協議決定如何將資料從來源位置轉移到目的地。
    IPv4和IPv6協議都是在OSI模型的第三層,也就是網路層(Network Layer)運作的。在這一層中,數據包的路由和傳輸,以及網路的連接管理等操作都會被處理。包括IP在內的網路層協議會對數據包進行封裝並確定其在網路中的路徑,也就是它們需要經過哪些路由器才能到達目標。IPv4和IPv6主要的差異在於地址的長度和格式,其中IPv6提供的地址空間遠大於IPv4,因此能夠對更多的設備進行唯一地址的分配。
  4. 傳輸層(Transport Layer):這一層提供了端到端(source-to-destination)的通訊服務。TCP 和 UDP 都是這一層的協議,它們負責將資料切割為小的數據包,並確保所有的數據包都可以在目的地正確無誤地重組。
  5. 會議層(Session Layer):這一層負責在數據傳輸過程中建立、管理和終止會話。
    在HTTP/1.1及其更高版本中,的確是由應用層(即HTTP協議)來管理和控制會話的建立和中止的。
    這是因為OSI模型是在很多現代協議(如HTTP)之前設計的,當時的網路環境和今天相比有很大的不同。另外,OSI模型是一種理想化的框架,並不是所有實際的網路協議都會或應該完全符合這個模型。實際上,很多現代的網路協議都會按照他們的具體需求和設計目標來實現必要的功能,而不一定會遵循OSI模型的所有規定。
    因此,雖然理解OSI模型可以幫助我們更好地理解網路通信的一般原理,但在研究具體的網路協議時,我們也需要考慮到這些協議可能會有自己特定的設計和行為方式,這些可能會與OSI模型的某些預期行為有所不同。
  6. 表示層(Presentation Layer):這一層對資料進行編碼和轉換,以確保數據能夠由接收端的系統理解。它也可以實現數據的壓縮和加密。數據的編碼和轉換主要涉及以下操作:
    • 字符編碼轉換:例如從ASCII轉換為UTF-8,或者從一種語言編碼(如拉丁文)轉換為另一種語言編碼(如Unicode)。
    • 數據格式轉換:例如將XML轉換為JSON,或者將CSV轉換為EXCEL。在此過程中,數據的結構和語義保持不變,但格式和表示方式可能會變化。
    • 數據壓縮和解壓縮:例如使用ZIP、RAR、GZIP等壓縮算法進行壓縮和解壓縮,以減少數據的體積,提高傳輸效率。
    • 數據加密和解密:例如使用AES、RSA等加密算法對數據進行加密,確保數據在網路傳輸中的安全性。
  7. 應用層(Application Layer):這是最接近用戶的一層,負責處理特定的應用程式細節。包括 HTTP、SMTP、FTP、DNS 等協議。

OSI實際的應用場景

實際的網路協議和應用中,一個應用功能可能會跨越多個層次進行這些操作。例如,一個Web應用可能會在應用層處理字符編碼和數據格式轉換,並在傳輸層或網路層實現數據加密。這就是為什麼我們說OSI模型的層次劃分並不是絕對的。

儘管OSI模型的層次劃分在實際應用中可能並不絕對,但它仍然是理解和描述網路系統的一種重要工具。OSI(Open Systems Interconnection)模型的主要目的是為了提供一種通用的、理論性的框架,讓我們能夠更好地理解和描述網路系統中不同部分的工作原理和它們之間的交互。雖然在實際的網路協議和應用中,不一定嚴格遵循OSI模型的層次劃分,但OSI模型仍然提供了一種有用的工具來理解複雜的網路系統

在OSI模型中,第1層(實體層)到第3層(網路層)主要處理硬體與網路傳輸相關的問題,包括數據的實際傳輸、網路交換、路由等等,這些層通常由硬體設備(如網路卡、交換機、路由器等)和相關的驅動程式來實現。

另一方面,第4層(傳輸層)到第7層(應用層)主要關心如何在這個傳輸網路上建立有效的通訊,這包括了確保數據可靠地從源點到達目的地(如TCP協議的工作)、提供給應用程式使用的通訊服務(如HTTP協議的工作)、資料的格式轉換和加密等等,這些層的實現主要在軟體中完成。

因此,一些具有豐富功能的軟體或應用程式,可能會跨越OSI模型中的多層來提供服務。例如,一個網頁伺服器可能需要處理從TCP連接的管理(傳輸層)到HTTP請求的解析(應用層),甚至可能包括加密(表示層)。同時,由於這些層都在軟體中實現,開發者有更大的靈活性來實現跨層的功能。

但是,硬體層(1-3層)的功能則較固定,因為它們直接與網路傳輸的物理現象打交道,如電信號的傳輸、數據包的路由等,這些通常不會在應用程式中進行操作或修改,而是由硬體設備和驅動程式來管理。

網際網路協議模型

網際網路協議模型(Internet Protocol Suite)通常被稱為TCP/IP模型,它是一個分層的網路架構,包括四個層次。這四個層次分別是:

  1. 應用層(Application Layer):這一層處理與應用程序的通信和數據傳輸,例如HTTP、FTP、SMTP等。
  2. 傳輸層(Transport Layer):這一層主要負責端對端的通信,例如TCP和UDP。
  3. 網際網路層(Internet Layer):這一層主要負責封包的路由和傳遞,例如IP協議。
  4. 網路存取層(Network Access Layer):這一層處理與實體網路的通信,包括數據鏈路層和物理層的功能,例如以太網和Wi-Fi。

這個模型與OSI模型有些相似,但更簡單,並且更直接反映了實際的網際網路協議的設計和實現。

兩個概念的模型的層級比較

  • 應用層(Application Layer):對應於OSI模型的第4層(傳輸層)到第7層(應用層)。
  • 傳輸層(Transport Layer):對應於OSI模型的第4層(傳輸層)。
  • 網際網路層(Internet Layer):對應於OSI模型的第3層(網路層)。
  • 網路存取層(Network Access Layer):對應於OSI模型的第1層(物理層)和第2層(資料連接層)。

這些對應關係是大致的,因為兩個模型在設計和目的上有一些差異。TCP/IP模型更侧重於實際的網際網路協議結構,而OSI模型則是一個理想化的、更通用的網路架構參考模型。

封包傳送流程

以一個用戶從他的電腦訪問某個網站為例,以敘事的方式描繪整個過程。

  1. 應用層開始動作:用戶打開瀏覽器,輸入想訪問的網站的URL。瀏覽器解析URL並創建一個HTTP請求。
  2. 傳輸層協同作戰:操作系統的TCP協議堆棧接收到HTTP請求後,將其分割成合適大小的段,每一個段包含了目的地的IP地址和端口號。
  3. 網際網路層導航:這些段被打包成數據包,並由IP協議處理。IP協議會查找目的地的路由,並將數據包指向該方向。
  4. 資料連接層的傳輸:數據包到達資料連接層,被封裝成幀,包括MAC地址等信息,通過網絡介面卡(NIC)發送出去。
  5. 穿越本地網絡:封包穿越用戶的本地網絡,可能經過交換機和路由器等設備。
  6. 經過互聯網:封包繼續通過各種路由器和交換機,穿越互聯網,可能經歷多次轉發和路由選擇。
  7. 到達目的地伺服器:最終,封包到達目標伺服器的網絡,經過其防火牆、負載平衡器等,到達伺服器的NIC。
  8. 數據包的解封裝:封包在目標伺服器的OS中被解封裝,首先在資料連接層解讀MAC地址,然後在網際網路層解析IP,再到傳輸層解析TCP信息,最終到達應用層。
  9. 伺服器處理請求:伺服器的網絡應用(例如Web伺服器軟件)處理HTTP請求,讀取相應的網頁內容。
  10. 回應的路程:伺服器創建HTTP回應,並且沿著相同的路徑,但方向相反,將數據回傳到用戶的電腦。
  11. 在用戶端解析回應:用戶的操作系統和瀏覽器解析回應,渲染網頁,最終展示給用戶。
發佈日期:

2022 Taipei Women in Tech Honorees

得獎連結(Award link)

2022 Taipei Women in Tech Honorees

得獎過程(Award process)

我在2021年由於主持了幾場Women Who Code的活動,並成為主講者分享了幾個技術活動,受Women Who Code的邀請成為了WWC Taipei的核心志工成員。

因為我在社群的活躍和表現獲到了肯定,他們便推薦我參加科技女性榮譽榜的選拔,其實在選拔過程中並沒有甚麼特別的感受,但是在慶祝活動當中,有很深的感受到這個活動的意義。因為其實現場真的有很多其他很優秀的女生,而且女性科技人相對男性的科技社群,比較不會滿嘴科技能力的比較感(誰技術強、誰知道最多新技術),而是更重視彼此(你是誰、你對甚麼有興趣、你對你有興趣的事情的想法),這也是我第一次愛上WWC這樣的女性科技社群。

我成為工程師已經超過15年,其實女性在科技業的辛苦,並不在於真正的具體地歧視,而是在於【你與大多數的人都不一樣】。因為男女的觀點不同、看事情、想事情的方式不同,怎樣看待重要事情的優先順序也會不同。所以女性真正的職涯困境,並不是來自於刻板印象,而是來自於我與大多數的同事都不一樣(因為我是純研發工程師,真的環境大多都是男的)。

這會影響到女性很難和同事有較好的私下交情,比較難和同事擁有一起打拼的同伴感,也會影響到私下的資訊交流。同時,男性在意的點和女性也不一樣,我就很不擅長瘋狂的一直講技術,表達自己技術上的超然,但是事實上我所做的專案的技術難度完全不亞於男性開發者,甚至對於一些複雜程式的思考領域上,我是勝過許多男性同事的(我周遭的而已啦不代表所有狀況)。

所以來到這個純女性科技社群真的很開心,也好像找到同好,也發現,原來這麼多女生都會有所謂的【冒牌者症候群】。我們只是不夠清楚自己的好,而不是真正不夠好,因為這邊的大家是如此的勇敢而出色。

In 2021, I became a core volunteer member of WWC Taipei after hosting several Women Who Code events and sharing some technical talks as a speaker. Because of my active participation and performance in the community, they recommended me for the selection of the Women in Tech Honor Roll. In fact, I didn’t feel anything special during the selection process, but I deeply felt the significance of the event during the celebration. There were many other excellent women present, and unlike the male-dominated tech community, women in tech place more emphasis on each other as individuals, their interests, and their ideas, rather than on who has the most technical skills or knowledge of the latest technologies. This is why I fell in love with the female tech community like WWC for the first time.

As a woman who has been an engineer for over 15 years, the difficulty of women in the tech industry is not really about concrete discrimination, but rather that “you are different from most people.” Because men and women have different perspectives, ways of looking at and thinking about things, and different priorities for important matters. Therefore, the real career dilemma for women does not come from stereotypes, but from the fact that I am different from most of my colleagues (because I am a pure R&D engineer, and most of my colleagues are men).

This can affect women’s ability to have good personal relationships with colleagues, make it harder to feel like they have a comrade-in-arms while working together, and also impact private information exchange. In addition, men and women may have different points of interest and priorities, and I am not particularly skilled at constantly discussing technical topics or expressing my superiority in technical expertise. However, in reality, the technical difficulty of the projects I work on is no less than that of male developers, and in some areas of complex programming thought, I outperform many male colleagues (at least those around me, not representative of all situations).

So I am really happy to be part of this all-female tech community. I feel like I have found like-minded individuals, and I have also discovered that many women experience imposter syndrome. We just don’t know our strengths well enough, and it’s not because we are not good enough, but because everyone here is so brave and excellent.

得獎頁面截圖(Screenshot of the award page)

My experience in software development is highly related to the fields of graphics, animation, and gaming. I have over ten years of experience in developing Flash games and have since transitioned to developing HTML5 web games. In the last three years, I have also crossed over into real-time streaming, graphics recognition, and other related fields. These areas of software development often involve complex performance and computational logic, and I believe this is my biggest strength in software development.

I am also very familiar with operating Windows and Linux servers, as well as communication protocols such as WebSockets. This enables me to take a more comprehensive approach in software development. Because my understanding of products extends beyond programming languages, I can understand or solve problems encountered in applications from various aspects such as operating systems, networks, hardware devices, etc. This has become the main reason why I can develop high-quality products.

得獎慶祝活動(Award celebration event)

發佈日期:

Interview with Senior Frontend Female Engineer Claire

Link to the original interview

“Women in Tech Series #1” Interview with Senior Frontend Female Engineer Claire: Improving skills and gaining team recognition to have an impact

Interview Experience

I’m honored to share my work journey as a female engineer. The interviewer and author is a female student in her final year studying Management Information Systems at National Taiwan University. She noticed that although men and women now have equal access to education, there is still a gender disparity in labor participation and average wages. This inspired her to write this interview.

During the interview, I could feel that she was a thoughtful, serious, high self-demanding, and gentle woman. She listened carefully to my expressions and asked further questions to understand more. When I saw the interview article, I was surprised by how well she understood and systematized what I wanted to say. She is truly an excellent young woman! I hope that there will be more excellent female information workers, and that more women can shine in the workplace!

Interview Content

I’m Joan Chen, and this article is the first in the “Miss Tech” Women in Tech series of interviews. “Miss Tech” is a social feedback project initiated by me to encourage more female students to enter the information technology industry through interviewing female tech professionals and hosting women’s exchange events.

This is the first interview, and I nervously and excitedly turned on the video camera and waited for Claire to join us. Soon, I saw a familiar face with a friendly smile greeting us.

Claire Chang is a frontend engineer with more than ten years of experience. She loved playing games since childhood and dreamed of entering the gaming industry to write interesting programs. Due to her curiosity about games, Claire started using Flash, a web development software, in junior high school, and even in her university graduation project, she was responsible for frontend design and development.

In addition to being an engineer, Claire is also a mother of two, juggling multiple roles as a mother, wife, daughter-in-law, and engineer, and is often busy balancing family and work.

How to balance life and work? Claire: “It’s just different choices.”

I asked her if there was a particularly difficult time at work. She replied: “I think the most difficult time was when my first child was born. All prenatal examinations were normal, but problems were found after birth.”

Due to her first child’s special needs, one parent needs to focus on taking care of the child. After coordinating with her husband, they decided that the father would take care of the child, and the mother would mainly focus on work. When it comes to how female engineers balance life and work, Claire wisely responded: “It’s just different choices.” In the limited time and energy, some mothers choose to educate their children at home, some choose to have only one child, and some choose to hire a nanny to take care of their children.

There is no such thing as the correct way of life, only the choice that suits oneself.

The benefits of female engineers in the workplace: reducing ineffective overtime and forcing new technology

Claire believes that female engineers can also play a good role in the engineering field and are essential. When she first joined the company, except for the product testing team, she was the only female engineer. But as more and more research on workplace diversity emerged and society gradually paid attention to the problems caused by the lack of diversity, the company also became more aware of the need to balance the gender gap.

She found that since the increase of female engineers in the company, there has been a significant improvement in “ineffective overtime.” Based on her observations, she found that most female engineers are not fond of working overtime, so one of the reasons why ineffective overtime may decrease is that other male colleagues gradually realize that it is possible to have good project output without working overly hard. Additionally, she has noticed that in the past, engineers would often “force new technology” onto unsuitable projects, but since the increase of female engineers, this situation has become increasingly rare.

Claire emphasizes that it is not because of female leadership that these changes have occurred, but rather that the addition of female engineers has brought different voices to the workplace. Perhaps these voices are not necessarily correct, but they can provide the team with different directions for thinking and discussing, leading to the development of a diverse culture. In fact, not only gender, but diverse professional fields and cultural backgrounds can also positively influence the work environment and output.

Increasing the proportion of female engineers may be the first step, but it is not enough to achieve a diverse and harmonious work environment. Claire shares that if female engineers want their voices to be heard and adopted by everyone, they must first gain recognition from their colleagues for their abilities. “Improving oneself and gaining recognition from the team” is an indispensable prerequisite. With recognition and value, it is easier to have an impact. Claire said, “When my suggestions are slowly accepted and seen, and I also see the success of the project, I feel a great sense of achievement.”

How to Build Good Relationships in a Workplace with a Large Gender Imbalance

Although the gender gap is significant in the workplace, and from college to the workplace, the majority of Claire’s classmates and colleagues were male, she still feels that she is out of place. Especially after work, not going to play sports or drink (with women) with male colleagues reduces opportunities to build relationships with colleagues and obtain information.

Despite this, Claire, with her extensive work experience, has found a good way to deal with it: “I choose to do my job well and improve my abilities, at least making them respect you.” At the same time, she also shared a small secret: “Try to help them as much as possible, such as helping them solve problems, at least this way they will want to have a good relationship with you.”

Conclusion: Participate in external activities to increase confidence.

Finally, Claire encourages young girls who are interested in information technology not to be afraid to participate in hackathons or technology discussion communities. She shared that when she participated in a hackathon, she received praise from the organizers, which greatly increased her confidence: “I thought I did a bad job, but everyone thought it was great, so I wondered if I really did a good job (laughs).” She encourages everyone to participate in external activities and communities, whether it’s a hackathon or a technology discussion group, because the people you meet at these events have no vested interests with you, not only do you feel comfortable interacting with them, but you are also more willing to encourage each other.

I am honored to have the opportunity to interview Claire today and have a glimpse into the lives of female engineers today, as a student with a dream of becoming an engineer. What kind of harvest does her life experience bring to you? Feel free to leave a message and share with everyone!

Note: A hackathon is a combination of “hack” and “marathon” and usually refers to a group of programmers who spend about two days brainstorming innovative ideas and programming prototypes.

發佈日期:

專訪資深前端女工程師Claire

專訪原文連結

《女科技人系列 #1》專訪資深前端女工程師 Claire:提升實力、獲得團隊認可,才能發揮影響力

被訪談心得

謝謝Joan Chen的專訪!🙋‍♀️
很榮幸的能夠以女工程師的身分,分享我一路以來工作的心路歷程。
專訪的訪談兼作者是一位就讀台大資管系大四的女生,因為她發現到,即便現在男女有相同的受教機會,但整體的參與勞動比例以及平均薪資仍是男大於女,因而有了這一篇專訪文。
在訪談的過程中,我能感覺到她是一位心思細膩、認真、自我要求高、也很溫柔的女生。她一路認真的傾聽、理解我所表達的,並且進一步提問,想了解更多。在看到專訪文後,更是讓我非常驚豔,作者完全的消化、理解我所想說的,並且有系統的撰寫成文章,真的是非常優秀的女生!
願這樣優秀的女性資訊工作者能夠越來越多,讓女性更多的在職場展露頭角!

訪談內容轉錄

我是 Joan Chen 陳佳雯,這篇文章是《科技小姐 Miss Tech》女科技人專訪文章的第一篇。《科技小姐 Miss Tech》是一個由我發起的社會回饋計畫,透過專訪女科技人及舉辦女性交流活動鼓勵更多女學生進入資訊科技產業。

這是第一場專訪,緊張又興奮的我打開視訊鏡頭等待 Claire 的加入,沒多久就看見一個熟悉的面孔帶著親切的笑容跟我們打招呼。

Claire Chang 是擁有十多年經驗的前端工程師。從小熱愛打遊戲的她,夢想是進入遊戲產業,寫出趣的程式。因著對遊戲的好奇,Claire 從國中開始就接觸網頁開發軟體 Flash,一直到大學時的畢業專題也是負責前端的設計與開發。

除了是工程師之外, Claire 同時也是兩個孩子的媽媽,身兼母親、妻子、媳婦、工程師等多重角色的她,時常忙碌於家庭與職場當中。

生活與工作該如何平衡? Claire :「其實都只是不一樣的選擇而已」

我問她,在工作上曾經覺得哪個時刻特別困難嗎?她回答:「我覺得比較困難的是在生大寶的時候,出生前的一切檢查都正常,但出生後就發現問題。」

由於大寶是特殊兒的緣故,需要一位家長專心照顧小孩。在與先生協調後,兩人決定由爸爸專心帶小孩,媽媽則主要專心於工作。談到女性工程師該如何平衡生活與職場時,Claire 智慧的回應說:「其實都只是不一樣的選擇而已」。在時間精力有限的情況下,有些母親選擇在家教育下一代,有些選擇只生一個孩子,也有些選擇請保母照顧小孩。

沒有所謂最正確的生活之道,只有最適合自己的選擇。

女性工程師帶給職場的好處:減少無效加班、減少硬套新技術

Claire 相信女性在工程領域的職場也可以有很好的發揮,而且是不可或缺的角色。她剛進公司時,除了產品測試團隊外,就只有自己一位女性工程師。但自從有越來越多關於職場多元性的研究出現,社會漸漸重視缺乏多元性帶來的問題,公司也越發意識到應該稍微平衡懸殊的性別比。

她發現自從公司裡女性工程師增加後,「無效加班」的情況就改善很多。根據她的觀察,發現大部分女性工程師都不太喜歡加班,因此推測無效加班會減少的其中一個原因,可能是其他男性同事慢慢發現,其實不用拼命加班也可以有很好的專案產出。另外她也發現,以往常會發生工程師「硬套新技術」在不適合的專案上,而自從女性工程師漸漸增加後,這樣的情況也越來越少。

Claire 強調並非是因為女性的帶領而出現這些改變,而是因為女性加入後,職場環境多了一些不同的聲音。或許這些聲音不一定是正確的,但卻可以提供團隊不同的思考方向。在同事之間互相學習的過程中,一起討論出更佳的解決方案。過程中也能發展出多元的文化。其實不僅是性別,多元的專業領域、文化背景等,都可以正向影響工作的環境與產出。

提升自身實力、獲得團隊認可

增加女性工程師的比例也許是第一步,當光是如此仍不足以達成多元和諧的職場環境。Claire 分享若女性工程師希望自己的聲音可以被大家傾聽與採納,首先必須先獲得同事對自己能力的認可。「提升實力、獲得團隊認可」是不可缺少的前提。在被認可與重視的情況下,自然較容易發揮影響力。Claire 說:「當我的建議慢慢的被採納被看見、而我也看到專案的成功時,我覺得會帶來很大的成就感。」

在男女比懸殊的職場如何建立良好關係

雖然從大學到出社會,身邊的同學、同事都是以男性居多,Claire 還是說:「就是會覺得格格不入。」尤其是下班後不會與其他男性同事一起去打球或喝(看)酒(妹),就減少了一些可以拉近同事關係的機會以及獲得消息的管道。

雖然如此,工作經驗豐富的 Claire 也找到一套對應的好方法:「我會選擇把份內的事情做好,並提升自己的能力,至少讓他們尊重妳。」同時,她也分享一個小秘訣:「盡可能地去幫助他們,比如幫助他們解決問題,至少這樣可以讓他們想要與妳打好關係。」

結語:多參加外部活動,增加自信

最後,Claire也鼓勵對資訊科技有興趣的新生代女孩們,不要害怕參加黑客松或技術討論社群。她分享自己當初參加黑客松時收到主辦方的稱讚,而大大增加對自己的自信心:「自己覺得做得很爛,但大家都覺得很好,就覺得難道自己真的做得很好嗎(笑)。」她鼓勵大家多參加外部的活動跟社群,不管是黑客松還是技術討論團體,因為在這些活動遇到的人們跟自己沒有利益掛勾,不僅相處起來自在舒服,也更願意鼓勵彼此。

今天很榮幸的可以採訪到 Claire,讓夢想成為工程師但還是學生的我,有機會一窺現今女性工程師的生活。她的人生經驗帶給妳什麼樣的收穫呢?歡迎留言跟大家交流!

註:黑客松是「程式設計(hack)」和「馬拉松(marathon)」的複合詞,通常指一群程式設計者在兩天左右的時間發想創新的點子,並將原型用程式編寫出來。