Monday, December 4, 2017

Dash Python API 中文簡介

這學期的雲端計算 project

用了 Dash 當作 front-end

這是 Dash 介紹

Written on top of Flask, Plotly.js, and React.js, Dash is ideal for building data visualization apps with highly custom user interfaces in pure Python. It's particularly suited for anyone who works with data in Python


整個架構需要寫一個 app.py

可以包含 plot graph 還有 html layout.

比較進階的寫法是 live updating components

這個 feature 可以設個 interval


讓網站在一個時間內自動update

這裡是簡單的example, 提供兩種寫 graph 的方法


https://gist.github.com/boalinlai/7da3aac5a73cd45e046c88bdaae016cf

layout 裡面用 id 去指定function

call back function 裡面要有 data, layout

然後設置一個 time interval

最後

指定完 host 還有 port 之後

sudo python app.py

Sunday, November 19, 2017

Cloud Computing AWS (雲端計算)

雲端計算會這麼實用,

在我的觀點主要有兩類,



第一點是計算量的負擔,

傳統的計算必須先空出硬體資源

造成過多資源空轉

雲端計算能夠把計算量分散

同時實現

用多少拿多少的硬體支援



第二點是簡化開發流程

最早以前要開發一個環境

要買主機 把作業系統(windows, linux macos) 裝進去

再來用虛擬機 (virtual machine)

直接從電腦上用軟體模擬出硬體空間

到現在

可以用AWS 直接拿一個虛擬主機來用

接來會針對我有興趣的AWS 技術做介紹


Wednesday, October 4, 2017

Information Theory (資訊理論)

這篇文章會記錄我對 information theory 的了解。


==== Entropy ====

先來討論所有機率是平均分佈


A 有一個硬幣,正面反面出現機率各一半

A 擲了一次硬幣 現在他想把結果告訴 B

但是A 和 B 不可以直接溝通 只能透過其他方式

這些方式有共通點, 只能有兩個狀態

例如:聲調高低, 顏色深淺

我們可以把兩種狀態用 0, 1 來表示

在硬幣的例子,我們可以用 0 代表反面,  1 代表正面

A 擲了2次硬幣 2 次都是正面。

A 現在只要用兩個 1 就可以讓 B 知道結果了

現在我們可以換一個角度想兩種狀態的意義,

A 給 B 0 或 1
可以想成 B 可以問 A 一個問題

A 會回答 0 或 1 代表 是或否

這個例子B 問 A 1個問題就可以知道 1 次結果 



2 個問題 2 次結果


現在考慮骰子 x  = [1, 2, 3, 4, 5, 6], p(x) = 1/6

我們一樣只有兩種狀態

A 丟了 6

現在 B 需要什麼資訊才能知道 A 拿到 6 呢?

a,  B 可以問 A, 是 1,  是 2 ,  是 3 ... 是6?

考慮最壞結果

B 必須問 A 6 個問題

但是  B 也有可能第一次就問到正確結果

 B 實際上不能確定他到底要問幾次才知道


b.  B 可以問A:這個數字是否是 {1, 2, 3} 
這樣子的話我們一次可以把一半的可能去除

1 -> 01
2 -> 001
3 -> 000
4 -> 11
5 -> 100
6 -> 101


由於 log2(6)  = 2.58 不是整數,
我們需要 3 個問題 來確定數字是什麼




a, b 的差別:


假設丟的次數很大

a. 

我們可以想成我們平均需要 3.5 個問題可以問出結果

b.
在 b 情況 3 個問題就可以得到 A 丟的結果

當次數很大時

我們考慮長度

2 * (2 * 1/6) +  4 * (3*1/6) = 2.667

這裡可以看到我們算出來的平均長度會比log2(6) 大

2.667  > log2(6)  = 2.58


to be continue...





























Wednesday, June 14, 2017

軟體工程師實習

研究所前,做過了兩個軟體工程師實習。

一個是美國航空電子業,

一個是台灣晶片廠。

在大公司做實習,


這兩個裡面我都是被指派一個小領域裡面。

解決別人邏輯上或是因為版本更新的錯誤。

這種工作需要很強的除錯能力,

要了解整個軟體的架構後,

開始分析可能的原因,開始一個一個試。


上次在國外實習,

我連 version control 怎麼用都不知道,

最主要的收穫還是了解怎麼跟別人合作討論解決問題。

還有在龐大的公司軟體架構中做出自己的貢獻。




這次在台灣做實習,

被指定了一個side project,

有一點意外這個工作需要的背景知識,

很難想像一個新人需要花多少時間才能把知識補齊。

可是感覺一鑽進去,

就會因為有經驗就出不來了。



我覺得軟體工程師算是一個很需要經驗的行業。

解決一個問題,

要去解決背後所有的小細節。

還有解決問題時,

有沒有想要用最優雅的方式去寫,

還是只要能過關就好。


在大公司裡,

有各式各樣的軟體工程師,

我覺得也很好,

大家都有自己的優先事項,

有些混一口飯吃。

有些重心是家庭朋友。

有些單純是喜歡技術。

有些想跳槽。

這些都沒有對錯,

只要不要留麻煩給其他工程師就好。










Monday, May 15, 2017

大學成績

雖然我在一年之前就確定直升碩班,

大學畢業對我來說只是一個過程。

但是想整理一下自己對大學成績的感想。



大學期間在我一直覺得修課拿 A 是學生的本分,

先把成績顧好,再想其他事。

但是畢業前我想了一下,

工數以及化學這些課程拿高分對我到底有什麼意義?

如果別人用這些來評斷我,到底合不合理?



成績這個代表一個學生在有限的時間內,

被教授以及學校量化的學習過程。

其中又有天份、努力、運氣成分。

一個拿書卷獎的學生,

只代表獲得了教授一致的肯定,

吸收消化了所有的教材或是做出指定的項目要求。



到了大三大四,

我發現身邊的人都有了自己的規劃,

不管是找工作、研究專題、還是準備研究所。

如果不是要考頂尖研究所,

成績只是態度的參考而已。

如果可以重來,

我會想在維持中上的成績同時培養興趣和實力。

















Thursday, April 13, 2017

大學考試對學生的意義

大學接近尾聲,畢業前只剩下四個考試。想記錄一下對於大學裡考試的想法。

第一步先來將考試分類:記憶、理解、表達。運氣就不討論了。


在台灣的國高中填鴨教育裡面,大部分人對記憶、理解型的考試都不陌生。

學測單選四選一,數學物理或者都標準答案,寫錯就寫錯沒有例外。


我想討論一下表達類型的考試,

我在大學生涯大概就修過三堂課是這種類型,

這種考試大多數考題非常開放、評分主觀。

例如:請解釋半導體如何運作、請解釋網路如何完成封包傳遞。


我認為這類問題非常有深度,根據回答就能夠透澈了解學生是否理解這個主題,

必且能有自己的觀點。

這也是找工作時面試官喜歡的問題類型。

我百分之百同意這種訓練有助於表達自己,同時展現專業能力。


但是,如果在公平原則上,主觀評斷答案這樣是否對每個學生公平呢。

要如何區分一個學生是了解了60%的觀念而不是80、90% 呢?

用短短的一小時的時間寫下的答案評斷學生學習的價值正確嗎?


我想在台灣,大家喜歡平等,所以考試方法很制式,

努力及毅力成為成績的分水嶺。

在這種情況下,有天分的人優勢不大,因為技巧以及努力也重要。


到美國以後,面對記憶、理解力的考試,只要有時間準備拿高分不是問題。

但是遇到表達類型的考試,

第一,需要寫到別人看得懂,

第二,需要符合出卷者的主觀標準答案。

把這些結果當作決定學生的學習程度有意義嗎?那些文字表達不出的理解呢?

學生會不會只能被動接受出卷者的單一主觀答案呢?


在這裡我沒有要推廣哪一種,

由於期中期末對於學期成績影響很大。

我認為考試必須某種程度上反映出學生的用功程度,

也就是學期成績應該是學習態度的呈現,而不是智力能力測驗。

Monday, April 10, 2017

關於我對網路課程的想法

在大學裡面我上了兩門網路的課程。

第一門主要介紹基本網路架構,OSI Model,以及各個 layer 的功能。

課堂上討論比較多 crc, go back n 這些通訊基礎。

但是上述這些在第二門網路課程裡面被歸類在“傳統” 網路。

第二門網路課程從 router, switch 切入利用 cisco router 以及 switch 模擬網路結構,

比較偏向 layer 2, layer 3整體系統設計。

從vlan 的限制帶入 data center 還有 SDN 的原理以及應用。

我認為學習網路需要非常好的英文閱讀能力,相較於電資學院的其他課程,

應用類的網路通常是給一個情境,或者用文字敘述不同硬體軟體行為。

在敘述完之後,通常發現(發明)者會給他一個特別的名字。

例如 ARP, ICMP, HTTP, TCP, IP, BGP, packet, datagram, frame, ping. 各有不同意思,需要記憶能力。

這些都非常熟稔之後,對於課上提到的論文才能有較深刻的了解。

然後等全部都會了,又如何呢?也許就是學會了一個能跟網路工程師或者教授溝通的 protocol 吧。

Saturday, March 25, 2017

我在計算機工程(Computer Engineering)學到的事

想了一下還是決定用中文寫網誌, 記錄我在不同時間點的想法。

這是我在大學最後一個學期,想要趁春假得空擋來思考我在過去五年到底學了什麼。

以下是我認為能夠節省時間, 增進效率的能力

英文閱讀:幾乎所有的開源碼都是英文.

google未知事物: 當有一個陌生名詞, 陌生的軟體,API。

該用什麼關鍵字去搜尋.,如何在短時間找到自己需要的資訊.

基本的程式能力: 演算法,資料結構了解各大主流語言。

C++, Java,python 的優缺點.。根據情況決定用哪種語言去解決問題。

Unix command line:基本的cp, cd scp, ssh, mv, chmod. 以及用 man 閱讀 api。

github:我在實習中用了 svn, 到了大四才接觸. 對大型或是複雜的project這是必要工具之一。

Latex,習慣以後。 對於制式化的報告會節省很多時間。

那學校教的高階課程對於培養上述能力以及找工作呢? 基本上我覺得相關程度不到 20%.

舉例來說,advanced computer architecture

其中一個project要求用 C++ 實現 tomasulo simulator。

教授助教不會教怎麼寫。 code 寫的怎麼樣完全取決在課外培養的能力。


我認為上課最主要是為了學一些各個領域中的專有名詞,大家才有相同的語言可以溝通。

這個現象在網路和操作系統,還有計算機結構最明顯.。

我認為是因為在電腦剛出來的時候, 大家都學這個。

那接下來要做什麼呢? 


我會繼續念 MS in ECE. 到時候再紀錄心得。

Dash Python API 中文簡介

這學期的雲端計算 project 用了 Dash 當作 front-end 這是 Dash 介紹 Written on top of Flask, Plotly.js, and React.js, Dash is ideal for building data v...