Posts

Let's contribute to Node.js, JSDC x Google

Image
不久前有幸參加到在台北 101 的 Google 辦公室舉辦的 Node.JS workshop,決定來紀錄一下這次難得的經驗。 這次的講者是 Myles Borin ,大學時期主攻藝術,不是台灣傳統認知的畫畫、雕刻的類型,而是結合 Arduino 和 Coding 做的新媒藝術。後來研究所轉換跑道主修音樂,最後跑去開發 Node.js,現在是 Node.js TSC 的核心成員,是個經歷還蠻神奇的傢伙。說來有意思的是,其實接觸開發領域一段時間後,會發現有很多厲害的開發者一開始是藝術家出生的,像在 Node.js 社群生產力驚人、現在轉去寫 Go 的 TJ Holowaychuk,本業其實是個攝影師。 這次 Myles 的工作坊內容相當平易近人,流程有三個部分:一開始是介紹 Node.js 的一些歷史、碰到的難題和最新進展,再來是和大家討論它的 core value,最後則是分派一些非常簡單的 task 給大家,讓我們去 fork Node.js 的 repo 做些小修改,跑完測試後再發 pull request。 在第一部分裡頭,特別有趣的是暸解到 commonJS 和 ESM 在做依賴的不同之處,跟 server 端和 browser 端理解邏輯的不同有些關係,裡頭帶到了一點 graph traversal 的觀念,這裡就不多提。他也提到這個部分的整合到目前還沒有找到好的解決方式,所以 Babel 在 compile 時會把所有 ESM 的語法先直接轉換成 commonJS。另外他還提到最近有個很酷的技術 Hook 正在開發中,估計幾年後大家可以直接在 browser 裡面寫各種在現今仍需要被 webpack compile 的語法。 第二部分是討論 core value,其實就是讓現場的三十幾個人在便利貼上寫下自己認為 Node.js 的價值和優點在哪,最後再把這些便利貼貼到牆壁分類。結果被貼最多的果然都是直觀、好開發、"Write Everything in Javascript" 等XD 最後發 pull request 的部分就比較無聊一點,因為不需要真的去暸解 Node.js 的內核,只要幫忙加條 error handling 的 code,實質上在做的就是去熟悉用 git/githu...

Arzela-Ascoli 定理

Image
最近在看分析時讀到了 Arzela-Ascoli 定理的證明,覺得手法還蠻酷的。證明過程用到了一個很潮的對角線選取法來選定收斂列,並很巧妙的用 compact 的定義結合三角不等式推導均勻收斂,某方面來說它把很多塊之前學到的數學定義連結了起來,在學分析時是相當有紀念價值的一個里程碑。 也因為這樣想要發篇文來紀念一下,因為個人覺得理解數學最好的方式是用自己的口語去講出嚴謹的數學論證,所以想藉由打下這篇證明來加深自己對定理的感覺(順便練習 LaTeX,MathJax 這個 JavaScript library 真的神好用)。 以下會把先把一些基本的定義、定理粗略介紹一下,包含 Bolzano–Weierstrass 定理、compact、uniform continuous、函數空間的收斂、完備空間等。接著介紹 dense、uniformly bounded、equicontinuous 這幾個 Arzela-Ascoli 定理敘述裡的重要名詞,最後再開始證明 Arzela-Ascoli 定理。 值得先提的是, Arzela-Ascoli 定理是 Bolzano–Weierstrass 定理在連續函數空間上的推廣,它們的本質源自於緊緻(Compact)的觀念。 $\textbf{Bolzano-Weierstrass Theorem}$ $\mathbb{R}^n$ 裡的任何 $bounded\ sequence$ 必存在收斂 $subsequence$ $\underline{proof\ sketch}$ 只要將這組 $bounded$ 數列一直對半切,取剩下無限多元素的那半,每切一次挑一個數列元當新的子列元素。由 $nested\ interval\ postulate$ 可知切了無限次後將所有得到的集合交集的只會有一個元素,也就是收斂到的值。 $\textbf{Compact}$ 一個集合的任何開覆蓋($open\ cover$)都有有限的子覆蓋($finite\ subcover$)。  $\textbf{Uniform Continuous}$ $f$ 將 $X$ 映射到 $\mathbb{R}$ 是均勻連續($Uniform\ Continuous$)$\iff$ 對任意 ...

從反及閘到俄羅斯方塊之旅

Image
(這篇是前陣子幫台大 點開小視窗工作坊 寫的一篇資源分享文案,因為寫的時候腦中的預設對象其實還蠻大眾的,所以決定也搬到這分享) 今天要分享的,是一個對於學習編程和電腦科學十分有用的課程,畢竟在二十一世紀,基本的電腦科學知識已被視為一種基本素養。 先講結論。不論你是否接觸過程式相關的領域、不論你高中是幾類組、更不論你對自己的未來是否已經做足了打算,只要平常還撥的出時間,我強烈推薦你,到網路上註冊一個 Coursera 的帳號,上上看 From Nand to Tetris 這套課程。 在這個網路課程滿天飛的時代,想要自學程式其實是非常簡單的,諸如 Udacity、CodeAcademy、CodeSchool 等程式教學平台都已有一定的成熟度,較為學術性的 Coursera、edx 或商業化的 Udemy 也有許多高品質的課程,許多論壇、Blog 裡頭更是充斥著淺顯卻充滿洞見的閱讀素材。 從軟體設計到網路開發、從程式語言到資料結構與演算法,基本上任何初學者想學的內容,大都可以在網路上找到對應的學習資源。但是,如果要在我至今接觸過的所有編程資源裡頭萬中選一,推薦一套課程給朋友,那麼 From Nand to Tetris 將會是其中首選。 編程的世界十分廣大,光語言就有千百種,其涵蓋的領域更是多如牛毛,諸如作業系統、演算法、App、遊戲、社群網站、搜尋引擎...等等,每個大主題背後更是由無數的支幹撐起,不同領域與支幹上手的難易度也大相逕庭。 若要在這程式碼的茫茫大海中站住陣腳,勢必需要先將出航的基本配備準備周全,例如一艘穩固的船、指北針、航海圖和糧食配備,可以的話最好找幾個出海經驗豐富的人當你的航海士。 Coursera 的這門課所扮演的角色,即是那艘帶著你出海的船,裡面的老師正是你的航海士。 課程價值 在武俠小說裡,如果沒有內功為基礎,練習各種武術招式是沒有實際意義的。學習編程亦是如此。倘若對於電腦的結構和運作原理沒有一定程度的暸解,或是對於程式語言背後在記憶體上的運作機制一竅不通,那麼在編程這條路上愈到後頭走的只會愈加艱難,亦容易因知其然不知其所以然,導致最後處處碰壁。 同時,當今跟程式相關的大學教育主要落於電機和資工兩系,前者著重硬體層面的課程較多,後者則較強調程式設計。然而一直以來除非是將兩方相關領域的課程修好修滿,再查閱...

2017 BioPhyChemEarth

Image
源起 BPCE,三年前還叫做 BPC,那時我高一升高二,是物理組的一個小小學員。當時懷著想學些物理的心情報名了這個營隊,卻發現對有走過競賽的學生來說,課程內容有點太簡單。好在有趣的活動和新認識的許多好朋友彌補了這點,於是開啟早上放空補眠晚上各種玩樂的五天。 然而就在我覺得學不太到東西時,第四天早上到了,那天上的是文于學長的狹義相對論。聽說這個學長很厲害,也想說近代物理比較不熟,於是認真的聽了一下......怎知不聽還好,一聽就停不下來,學到一堆超級超級有趣的東西!可惜相對論只有一堂,在五天的課表中如曇花一現。我好希望能繼續聽更多這種有趣的內容!我想聽廣義相對論......我想聽量子力學......我不想再聽普物課本的東西啦啊啊啊!!! 這樣的聲音在腦中吶喊,最後形成內心中的一點遺憾。 然後三年就過去了。去年八月我人在加州,有天正準備北上 Seatle,在機場裡等班機時突然接到那時根本還不算認識的郭芸彤的訊息: 「你知道 BPC 嗎?」 「參加過」 「你願意出來選物理教學長嗎?」 「WTF」 對話精簡起來大概就這樣吧。那時覺得 BPC 已經是很久以前的事了,也沒當過實習屆,基本上去以後一定是個八九成人都不認識冗在一邊的邊緣人。原本打算委婉拒絕,但因為當時有讀一點跟教育相關的東西,其實也想嘗試看看教別人物理,於是最終經過一番妥協後接下三堂課八小時的物理教學。 有鑒於文于學長在三年前給我的啟發,我決定把課程全部拿來講近代物理。天真的我原本很貪心的打算一堂講量子力學,一堂講廣義相對論,一堂講弦論和其他近代科學的重要發展,後來很快發現課程的時間和節奏會遠遠無法負荷......幾番掙扎後,最終定案把三堂都拿來講相對論,第一堂講狹義,二三堂講廣義。 準備 決定好以後,就得開始備課和編講義。狹義相對論本來就很簡單不擔心,廣義相對論的教學才是真正麻煩的地方。為了想辦法讓高中生也能學會,我花很多時間在研究各種廣相課程的教學方式和優缺點。 大一下特地選了物理所的廣相課,課程的優點是簡單,但數學論證方面相當不嚴謹,內容深度也顯得不足;我也參考了台大 OCW 高湧泉教授的課程,雖然推導論證比較詳盡,但在很多時候太拘泥細節、缺乏物理感;Stanford 的 Susskind 教授放在網路上的 Theoritical Minimum 講課為強...

大一

Image
打去年的今天開始,我最常問自己的問題是:「我想要的到底是什麼?」 如今已經從大一登出快兩個月了。 大學的第一年經歷了很多,一直以來都想寫篇長文來沈澱這些過程。剛好今天雙主修確定通過,決定趁這個時機談談作為一個在台大物理待了一年的學生,闖進數學和電腦科學這兩塊領域的一點想法和心得,以及大學至今對於自己的一些反思。 這一年來我的活動不多。沒在跑友會、沒報名之夜、沒帶物理營、沒辦物理週,也沒加入社團。稍微有參與的活動,大概就是系足球隊練球時過過冠霖中洞。我平常也沒在做什麼社交,會接觸的大概就是偶爾一起吃宵看巨人的高中同學和原 130 跟 141 的室友們。原以為躁動如我會耐不住性子,但結果是我跟這種大學局外人的生活十分對頻。 上大學以來的種種決定,上大學前一年半的經歷造成了很大的影響。大概是自高二下確定保送後,我得到五百天的完全自由。這五百天雖然有不少時間在耍廢,但更多時間是在找尋自己在一些未知領域的可能性。 轉眼間來到台大,當很多人開始迫不及待的準備參與各項大學活動時,我腦中只有收心的念頭。當中最大的原因在於,長時間的自由跟探索、與人對話,讓我深切暸解到自己各方面的狹隘與弱小,也決定更誠實的去面對自己。 世界很大,我知道的東西還太少。學問很深,我理解的內容還太淺。 我開始思考,有哪些東西是可以透過內化一直保留在腦中的,又有哪些東西只屬於表層,不該在上面投資太多時間? 我開始思考,我學的一切在學術上的意義是什麼?市場上的價值是什麼?對未來的貢獻又有哪些? 我開始思考,除了物理,我還具備什麼樣的潛能?我的極限在哪裡?我要如何在這世界上留下自己的足跡? 我開始思考,我想要的到底是什麼? 越是深入思考,越是意識到,自己想要做的、需要做的、重要的事情實在太多。時間很珍貴,才一晃眼大學的四分之一就結束了,就好像過去二十年已經回不來一樣,但當中被浪費掉的時間卻數也數不清。我必須更謹慎的去做未來的選擇跟時間安排。 我必須再更深入的暸解自己。

105-2台大修課小結

Image
大一下課表 大一上的 25 學分讓我力有餘但心不適,不但覺得內心無法聚焦、簡單的課枯燥乏味,東西學起來也比較缺乏實感。於是這學期稍微調了一下選課的內容,把課程的硬度調高,然後將原本的九門課 25 學分調成六門課 17 學分,果然一學期下來內心感到踏實許多,也學到了不少覺得有價值的東西。按慣例來替學期的選課做個小結。

MERN Boilerplate

Image
上學期學 Web Programming 的過程中,對於不斷湧上來的新技術總是感到期待,畢竟學得愈多能做的事情就愈多,把工具一個個串接在一起做想要做的東西也很有成就感。不過我一直覺得要重複那些實作上必經的例行步驟相當乏味,於是便把自己寫的 Blog App 改了一下,打造成一個以 Node 和 webpack 為基礎,React 做前端、Express 做 Server 並接上 Mongo database 的開發模板。 直到前陣子合作開發  Beact 的時候, Vibert Thio  學長所做的環境配置讓我有點嚇到(所謂的被技術霸凌),才發現自己根本沒有真的使用到 webpack 強大的地方。於是當時便下定決心暑假要找時間將 webpack 的細節研究的更深一點,改良之前那個陽春的模板,並用這些新技術回頭去修正開發 Beact 時因時間因素尚未解掉的 issue。 經過將近三天的折騰,總算完成了一個能看的新模板(回頭看舊版覺得好丟臉啊Orz)。聽說寫程式定期 review 和紀錄是提升自己的好習慣,所以我決定在這邊把自己這幾天開發時的一些想法和技術內容給記下來。模板的詳細內容可以參考底下連結,也歡迎善心/熱心人士發 pr~ Github: MERN-BoilerPlate