此篇網誌將會記錄 x1c 使用心得以及問題
@
12/2018
拿到windows 10 pre-installed x1c 6th
壓縮容量
改bios開機設定
安裝 ubuntu 18 from usb
@
issue 1. 電量問題
config s3 省電模式
=====
look up:
$dmesg | grep -i "acpi: (supports"
=====
update firmware
$fwupdmgr refresh
$fwupdmgr update
=====
重新啟動 進入 bios
在 config -> power
change sleep state to linux
@
Saturday, December 29, 2018
Monday, July 16, 2018
最後一次實習
這個暑假在灣區做軟體工程師實習。
盡量往上或往下去找突破點
在三個實習中 ,
由於先前的兩個軟體實習以及大學研究所所學符合,
幸運地獲得 kernel, platform 相關的實習機會。
經過了三個實習
愛荷華州 8 個月
竹科 2 個月
灣區 3 個月
沒意外的話應該是求學生涯中最後一個實習了,
以下是目前我在軟體工程師實習中獲得的一些想法和能力。
以下是目前我在軟體工程師實習中獲得的一些想法和能力。
個人能力方面
程式能力及風格:
熟悉語言特性是最基本的門檻,
撰寫時有意識地去思考未來優化以及兼容性。
盡量捨棄炫技,
在簡潔以及效率中取得平衡。
溝通能力與情商:
項目通常一人是無法獨立完成的,
由於工程觀點還有程式代碼都是工程師的作品,
如何說服其他人接受你的觀點,
或著接受對方的 feedback 都需要良好的溝通能力。
系統思維和 Debugging:
debugging 時將範圍縮小並重現
反覆確認自己的假設
避免太多 trail and errors
盡量往上或往下去找突破點
尋找資源:
在做任何事之前先把相關資料看過一遍,
把問題找出時來通常就已經解決一半,
避免解決重複性的問題,
以及解決錯誤的問題。
生涯規劃方面:
企業文化:
了解整個公司注重的價值觀
我目前認為一個 team 的氣氛還有主管比較重要
自我價值:
工作是否有成就感決定在公司的生活品質
對我來說成就感來自解決問題
探索系統相關領域
在三個實習中 ,
除了獲得上述的能力、提早做生涯規劃。
實習的薪水還有下班之後空餘的時間,
也有助於了解未來工作後要如何生活。
實習的薪水還有下班之後空餘的時間,
也有助於了解未來工作後要如何生活。
Sunday, May 6, 2018
Computer Systems
這學期我修了影響我很深的三堂課,
operating systems
distributed computing systems
interconnection networks
每一門課中 都接觸到了大量相關領域的論文
在系統這個領域
Trade off 和 performance 一直是主要的課題
或者說 how to utilize the resources.
網路與系統 探討的是工程問題
也就是沒有最佳解或是唯一答案
會隨著參數或是硬體設備更新
有所突破
同樣的設計執行不同的程序也會有不同的表現
這些沒有標準答案又開放的學科
一開始學習會很挫折
通常研究一個問題時
切入一個點時需要做很多假設
先想好想要改進的點
然後試想可能可以改進的情況
同時間還要注意更動是否符合原本的設想
否則可能會在解決問題的同時製造出另外一個問題
目前我掌握這方面還是有限
只能從案例中學習
但是在分析一個系統時
已經能夠用比較全面的角度去切入
以及考慮不同情況
Thursday, February 22, 2018
Paxos Algorithm
最近上 operating systems, distributed systems 的課看了一些論文,
發現網路上中文資料相對英文還是少了一點,
所以想嘗試以初學者的角度解釋一些概念。
Paxos Algorithm 通常用在容錯分布式系統 (fault-tolerant distributed systems) 用來實現 Consensus Algorithm.
先來討論一下為什麼需要分布式系統。
假設你是一家銀行,擁有帳戶和餘額。
a. 今天我去領錢,機器當機了
1. 如果只有一個主機存資料,
-> 所有帳戶餘額會不正確
2. 如果有多個主機
-> 根據沒有當機的主機,recovery
b. 但是如果有多個主機,
餘額減少的那個主機,
如何更新餘額給其他主機知道就是 Paxos algo 討論的問題
核心概念:
每個process(node) 有 proposer, acceptor, learner.
proposer 送request 給其他 acceptors. (acceptors 有可能會收到多個)
prepare_request(n)
acceptors 會選收到最高的 n 的傳回去proposer
response_to_prepare_request(Proposal[m, w]/None)
proposer 根據 response 選出 MAJORITY 之後傳給其他 acceptor
accept_request(proposal[n,v])
acceptor 傳給其他 learner
decision(proposal[n,v])
learner 把收到的value寫到系統裡。
最終全部的process 都會有更新過的value.
這些步驟裡面有寫可以簡化,因此 paxos 還有其他的變種算法。
references:
https://www.youtube.com/watch?v=UUQ8xYWR4do
http://lamport.azurewebsites.net/pubs/paxos-simple.pdf
發現網路上中文資料相對英文還是少了一點,
所以想嘗試以初學者的角度解釋一些概念。
Paxos Algorithm 通常用在容錯分布式系統 (fault-tolerant distributed systems) 用來實現 Consensus Algorithm.
先來討論一下為什麼需要分布式系統。
假設你是一家銀行,擁有帳戶和餘額。
a. 今天我去領錢,機器當機了
1. 如果只有一個主機存資料,
-> 所有帳戶餘額會不正確
2. 如果有多個主機
-> 根據沒有當機的主機,recovery
b. 但是如果有多個主機,
餘額減少的那個主機,
如何更新餘額給其他主機知道就是 Paxos algo 討論的問題
核心概念:
每個process(node) 有 proposer, acceptor, learner.
proposer 送request 給其他 acceptors. (acceptors 有可能會收到多個)
prepare_request(n)
acceptors 會選收到最高的 n 的傳回去proposer
response_to_prepare_request(Proposal[m, w]/None)
proposer 根據 response 選出 MAJORITY 之後傳給其他 acceptor
accept_request(proposal[n,v])
acceptor 傳給其他 learner
decision(proposal[n,v])
learner 把收到的value寫到系統裡。
最終全部的process 都會有更新過的value.
這些步驟裡面有寫可以簡化,因此 paxos 還有其他的變種算法。
references:
https://www.youtube.com/watch?v=UUQ8xYWR4do
http://lamport.azurewebsites.net/pubs/paxos-simple.pdf
Sunday, January 28, 2018
Structure Padding in C/C++
這篇會簡單提到 C/C++ 裡面的struct padding.
前幾天面試有遇到相關問題, 沒有研究過 compiler 當場回答不出來
之後在網路上查了相關資料並且用clion測試後整理出結論:
structure 是 C/C++ 用來把不同data type 打包起來
struct car {
int serial_number;
long long year;
char type;
char name[8];
} car_t;
問題 1: sizeof(car_t) 有多大呢?
這種問題,是半開放的問題
需要做很多假設
1. 第一件事一定要考慮 32/ 64 bit machines.
這個或許會影響 pointer size 的不同. 為什麼我說也許, 因為platform 也會影響 pointer size.
2. 第二件事是compiler,有些comiler 可以optimize. 我不太懂就不多贅述了
考慮完之後我們可以計算
int serial_number; -> 32 bits -> 4 bytes
long long year; -> 64 bits -> 8 bytes
char type; -> 8 bits -> 1 byte;
char name[8]; -> 8 * 8 bits -> 8 bytes
得到 4 + 8 + 1 + 8 = 21 bytes.
這並不是正確答案
在底層實作上會加上padding.
通常會找出struct 中最大的 bytes. 然後一個一個往下放進去
以上述例子
最大的element 是 8 bytes. 放不下的時候要補足8 bytes 再往下做
int serial_number; -> 4 bytes
#### padding 4 bytes
long long year; -> 8 bytes
#### padding 0 bytes
char type; -> 1 byte + char name[:7] -> 7 bytes
#### padding 0 bytes
char name[8:]; -> 1 byte
#### padding 7 bytes
最後總共會是32 bytes.
依照上述的規則如果我們把順序調整
struct car {
int serial_number;
char type; // change the order
long long year;
char name[8];
} car_t;
int serial_number; -> 4 bytes
char type; -> 1 byte
#### padding 3 bytes
long long year; -> 8 bytes
#### padding 0 bytes
char name[8]; -> 8 byte
#### padding 0 bytes
總共會用到 24 bytes
在底層C/C++ structure 非常常用
如果可以減少 size 也許會對performance有很大影響
https://www.ibm.com/developerworks/library/l-port64/index.html
https://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packing/
前幾天面試有遇到相關問題, 沒有研究過 compiler 當場回答不出來
之後在網路上查了相關資料並且用clion測試後整理出結論:
structure 是 C/C++ 用來把不同data type 打包起來
struct car {
int serial_number;
long long year;
char type;
char name[8];
} car_t;
問題 1: sizeof(car_t) 有多大呢?
這種問題,是半開放的問題
需要做很多假設
1. 第一件事一定要考慮 32/ 64 bit machines.
這個或許會影響 pointer size 的不同. 為什麼我說也許, 因為platform 也會影響 pointer size.
2. 第二件事是compiler,有些comiler 可以optimize. 我不太懂就不多贅述了
考慮完之後我們可以計算
int serial_number; -> 32 bits -> 4 bytes
long long year; -> 64 bits -> 8 bytes
char type; -> 8 bits -> 1 byte;
char name[8]; -> 8 * 8 bits -> 8 bytes
得到 4 + 8 + 1 + 8 = 21 bytes.
這並不是正確答案
在底層實作上會加上padding.
通常會找出struct 中最大的 bytes. 然後一個一個往下放進去
以上述例子
最大的element 是 8 bytes. 放不下的時候要補足8 bytes 再往下做
int serial_number; -> 4 bytes
#### padding 4 bytes
long long year; -> 8 bytes
#### padding 0 bytes
char type; -> 1 byte + char name[:7] -> 7 bytes
#### padding 0 bytes
char name[8:]; -> 1 byte
#### padding 7 bytes
最後總共會是32 bytes.
依照上述的規則如果我們把順序調整
struct car {
int serial_number;
char type; // change the order
long long year;
char name[8];
} car_t;
int serial_number; -> 4 bytes
char type; -> 1 byte
#### padding 3 bytes
long long year; -> 8 bytes
#### padding 0 bytes
char name[8]; -> 8 byte
#### padding 0 bytes
總共會用到 24 bytes
在底層C/C++ structure 非常常用
如果可以減少 size 也許會對performance有很大影響
https://www.ibm.com/developerworks/library/l-port64/index.html
https://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packing/
Sunday, December 31, 2017
ECE MS 課程
過了一學期,
記錄一下在美國MS跟BS就讀的差別
美國碩士有non thesis 學程 修完課就可以畢業
這是我以ECE, Computer System Software. CS 的角度去看
先從碩士課程開始好了
我覺得主要分四類
一種是通識類型的
這種類型的課跟大學部的課沒有太大區別
目的通常是把碩博士的知識水平拉到及格線
也是大家所說的涼課/水課
這種類型的課程大部分的資料都可以在網路上找到
很適合有基礎但是有觀念不熟的人去聽
一種是Project 為主
用Projects 帶概念並且實現
通常會要求團隊合作
學習強度的深淺會跟隊友還有自己投入的心力有關
這些Project也可以成為面試的相關經驗
我認為這類課程是最接近我在實習時做的事情
缺點是花了心力的項目也許對未來的工作沒有直接關係
一種是研究導向
這類課程是BS不會接觸到的
上學期修的課要求每周同學輪流上台講解一篇Paper,
用現今技術去帶概念
例如這星期講 Dynamic Analysis
老師會選幾篇相關的paper幫助理解
這種課程比較像是幫助論文型學生找研究方向和題目
也可以當作練習presentation
培養在一大串廢話中找重點的能力
最後一種比較特別
通常是一個教授擅長的領域
例如 Advanced XXX, 或是 XXX Theory
這種課程比較容易跟找工作脫鉤
比較是為了興趣而學的
在大學需要有目的去選課
通識加上大部分專業課程有prerequisite
課表沒有想像中那麼彈性
在Georgia Tech ECE 很容易被迫為了學分畢業門檻去修相關課程
我算是修了很多有趣的課程 沒有特意去挑涼課
我很多同學他們課表都很像因為涼課大家皆知
我在通識方面修了
日文 靜力學 剛體力學 美國歷史 體育 現代物理
在選修上
嵌入式系統 網路 計算機結構 演算法 機率
在BS如果是將來想走研究路線
可能大學就會去做專題去實驗室打雜
修一些比較理論的課
跟教授套關係
同時洗GPA準備申請
反觀碩士課程
我個人是認為碩士沒有所謂的方向
比較像把BS 有興趣但是沒學完的東西學完
選課通常也比較自由
記錄一下在美國MS跟BS就讀的差別
美國碩士有non thesis 學程 修完課就可以畢業
這是我以ECE, Computer System Software. CS 的角度去看
先從碩士課程開始好了
我覺得主要分四類
一種是通識類型的
這種類型的課跟大學部的課沒有太大區別
目的通常是把碩博士的知識水平拉到及格線
也是大家所說的涼課/水課
這種類型的課程大部分的資料都可以在網路上找到
很適合有基礎但是有觀念不熟的人去聽
一種是Project 為主
用Projects 帶概念並且實現
通常會要求團隊合作
學習強度的深淺會跟隊友還有自己投入的心力有關
這些Project也可以成為面試的相關經驗
我認為這類課程是最接近我在實習時做的事情
缺點是花了心力的項目也許對未來的工作沒有直接關係
一種是研究導向
這類課程是BS不會接觸到的
上學期修的課要求每周同學輪流上台講解一篇Paper,
用現今技術去帶概念
例如這星期講 Dynamic Analysis
老師會選幾篇相關的paper幫助理解
這種課程比較像是幫助論文型學生找研究方向和題目
也可以當作練習presentation
培養在一大串廢話中找重點的能力
最後一種比較特別
通常是一個教授擅長的領域
例如 Advanced XXX, 或是 XXX Theory
這種課程比較容易跟找工作脫鉤
比較是為了興趣而學的
在大學需要有目的去選課
通識加上大部分專業課程有prerequisite
課表沒有想像中那麼彈性
在Georgia Tech ECE 很容易被迫為了學分畢業門檻去修相關課程
我算是修了很多有趣的課程 沒有特意去挑涼課
我很多同學他們課表都很像因為涼課大家皆知
我在通識方面修了
日文 靜力學 剛體力學 美國歷史 體育 現代物理
在選修上
嵌入式系統 網路 計算機結構 演算法 機率
在BS如果是將來想走研究路線
可能大學就會去做專題去實驗室打雜
修一些比較理論的課
跟教授套關係
同時洗GPA準備申請
反觀碩士課程
我個人是認為碩士沒有所謂的方向
比較像把BS 有興趣但是沒學完的東西學完
選課通常也比較自由
Monday, December 4, 2017
Dash Python API 中文簡介
這學期的雲端計算 project
用了 Dash 當作 front-end
layout 裡面用 id 去指定function
call back function 裡面要有 data, layout
然後設置一個 time interval
最後
指定完 host 還有 port 之後
sudo python app.py
用了 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
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
這個 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
Subscribe to:
Posts (Atom)
ubuntu on x1c carbon 6 th
此篇網誌將會記錄 x1c 使用心得以及問題 @ 12/2018 拿到windows 10 pre-installed x1c 6th 壓縮容量 改bios開機設定 安裝 ubuntu 18 from usb @ issue 1. 電量問題 co...
-
這個暑假在灣區做軟體工程師實習。 由於先前的兩個軟體實習以及大學研究所所學符合, 幸運地獲得 kernel, platform 相關的實習機會。 經過了三個實習 愛荷華州 8 個月 竹科 2 個月 灣區 3 個月 沒...
-
此篇網誌將會記錄 x1c 使用心得以及問題 @ 12/2018 拿到windows 10 pre-installed x1c 6th 壓縮容量 改bios開機設定 安裝 ubuntu 18 from usb @ issue 1. 電量問題 co...
-
這學期我修了影響我很深的三堂課, operating systems distributed computing systems interconnection networks 每一門課中 都接觸到了大量相關領域的論文 在系統這個領...