---
title: SITCON 2019 R2 共筆
tags: SITCON 2019 共筆, SITCON 2019, R2, 2019, 共筆
GA: UA-34467841-15
---
# SITCON 2019 R2 共筆
:::info
- SITCON 2019 議程表:https://sitcon.org/2019/agenda
- 其他演講廳共筆:
- R0: https://hackmd.io/FOG2p2x1RIiZTr_Bpb_RYQ
- R1: https://hackmd.io/P-oMfddFSuWbEeFX1WfIVg
- R3: https://hackmd.io/3enaH38DRbqo9GHz_YJuzQ
:::
## 一分钟Get一个开箱即用的linux?(Instantbox - Yuefeng Zhu)
* [instantbox](https://github.com/instantbox)
### 關於講者
<https://github.com/import-yuefeng>
### sosconf 2019 工商
### 專業 `rm-rf /*`
> `rm -rf /*` 是一個對系統無害的指令👍
- 如果擁有root權限可以操作很多的東西
### 你最近可能見過這個……

更安全的學習Linux 你需要instantbox,不需要擔心你的指令對系統造成的影響。
### 你需要一個instantbox - instantbox是什麼?
你需要一個瀏覽器(不是IE)
> 在沙盒裡啟動一個CentOS、Ubuntu等等,玩壞也不用擔心
### 它用來做什麼?
* 學習
* 演講演示(講者學員教學環境同步)
> 在不到30s內得到一個**乾淨、開箱即用的臨時Linux系統**
### 與 Cloud Provider 之差別
* 免費
* 基於 Docker (毫秒級啟動 vs 數秒鐘至數分鐘的時間)
### 誰在用它?它有什麼優點?
* 教Linux的培訓班
* VPS 愛好者
* 以一個統一入口啟動多個服務器
* 企業內部學習
* LUG
### 架構
* 建議使用 Chrome / Firefox 瀏覽器
* Websocket
* Docker Swarm
### 現場演示
<http://lxc.im/>
補充:[什麼是 LXC](https://zh.wikipedia.org/wiki/LXC)
* 一個臨時的Linux環境
### 未來的功能
* 支持HTTPS,保證web-shell通訊訊息安全
* 支持集群佈署,充分發揮所有服務器資源
* 支持登入/註冊,持久化存儲容器
* 可視化管理所有容器的控制面板
* 支援自定義image鏡像列表
* 支持application-mode/system-mode
> application-mode
> - 如果要啟動一個Python3環境,就可以直接選擇而不用選擇全新的再自己安裝
### 如何參與貢獻?
<https://github.com/instantbox/instantbox>
<team@instantbox.org>
### Hexang 工商
<https://hexang.org>
### Q&A
## 104 履歷診療室~~尋找光明之路\
## 微服務自己動手做
* [slide link](https://www.slideshare.net/YenCHenLiu6/ss-136678916)
- 微服務架構
- 透過api gatway進入
- 優點
- 單一服務檔案小 啟動快
- 服務可採用不同語言與技術
- 低耦合性
- 所有東西都能分開
- 常用通訊協定
- HTTP
- 需要知道IP
- 可能會有很多不同服務
- 問題:我該怎麼知道當次服務的IP是什麼
- A:用命名伺服器命名服務(常用DNS)
- AMQP
- 我可以用message Queue
- 有幾個服務就有幾個queue
- 要給回去的話就利用queue導回去
- 範例
- [PIKA](https://pika.readthedocs.io/en/stable/)
- [nameko](https://www.nameko.io/)
- Docker
- 直接在作業系統上切資源給他(直接建立在作業系統上的虛擬化技術)
- 將程式直接封裝成映像檔
- 輕鬆的遷移和擴展
- 如何建立
- 配置Dockerfile
```Dockerfile=
FROM python:3.7.1-alpine3.8
MAINTAINER Yenchen
WORKDIR /app
ADD . /app
RUN apk add --no-cache gcc musl-dev
RUN pip install -r requirements.txt
CMD python app.py
```
- bulid
- 執行映像檔
- KUBERNETES
- 自動擴展、部屬、管理容器
- YAML檔描述
- 對初學者來說很複雜
- 容器單位POD
```yaml=
apiVersion: v1
kind: Pod
metadata:
name: gateway-pod
labels:
app:dateway-pod
spec:
containers:
name:pod-gateway
image:daychen/gateway
ports:
containers:9090
name:web
```
- [參考](https://github.com/yenchenLiu/RentalManagementMicroservice)
- Deployment: 無狀態的Pod
- 程式碼見github
- 可動態變更
- ingress
- 配置外部服務可訪問的url
## 開發現代化PHP套件:從零開始
[投影片連結
](https://speakerdeck.com/peter279k/kai-fa-xian-dai-hua-php-tao-jian-cong-ling-kai-shi
)
- PHP 5.5 -> PHP 7.1
- 效能提升
- 可讀性變高
- 建置PHP7.1+環境
- ubuntu 16.04 or 18.04
- **Composer**
- 可以檢查環境上的PHP的情形
> note: composer 為類似 node.js 中的 npm 套件管理器,方便 PHP 開發者進行第三方套件安裝與引入,不太確定原本記錄者的「檢查環境」的意思
- OOP Principles
- Single Responsibility
- 一個類別負責單項任務就好
- 可以操作只有跟user有關的東西
- Open-Close Principle
- 易於擴充(Ex. Facebook login)
- 對修改封閉
- Liskov Substitution
- 跟繼承有關
- Interface Segregation
- Don't make FAT interface
- Many client-specified interfaces is better than one general-purpose interface
- Dependency Inversion
- 對不同類別做支援
- Design pattern
- 依照上面四個準則去做設計
- 為什麼還要學這個?
- Single patter 方便管理
- Solution to common problems in software design
- Common language 有共通的語言(溝通上的效率)
- [DesignPatternPHP](https://github.com/domnikl/DesignPatternsPHP)
- 軟體開發心法
- 分析→設計→實做→測試
- [DEMO](https://github.com/peter279k/dependency-calculator)
- 分析
- EX: 很大的整數相加減
- 設計
- 實做
- 用interface去定義加減乘除
- 測試
- Unit test with PHPUnit
- 需要考慮到可能發生的意外
- [php-code-coverage](https://github.com/sebastianbergmann/php-code-coverage)
- 同場加映
- creat-project: README
- new: no README
## 手把手玩 PE Injection <3
[簡報在此](https://ppt.cc/fegQox)
* 講者:短短
* PE(Protable Executable)
* 微軟的一種文件格式
* 常見如exe, dll檔案
- header+body的組合
- body: 真正的內容
- Section Table
- 有幾個section就會有幾個section header
- Body Header
- /*不知道該寫什麼 請幫忙補充*/
[程式碼及PE檔](https://ppt.cc/fYgAHx)
## 你在 VR 遊戲中過得還好嗎?
* 講者:Rain
- Controller
- 一種Input管道
- 按鈕、角度、位置
- 消耗時間和力氣、分散注意力
- 慎選Input的方式
- UI Display
- 高度介於眼睛和手之間
- 距離玩家1.5~2.5m
- UI直接融入場景
- 觸發方式
- 減少轉頭行為
- 集中視覺資訊在Field of view 60^o^~90^o^
- 瞬間移動後自動面向主要目標
- 減少暈眩機率
- 避免視野遮蔽
- 遮蔽物消散
- 火球擊中玩家或打到物件之後消散,避免持續遮住玩家視野
- 擊退玩家
- 火球擊退玩家,伴隨震動與音效,較真實
- 將Input獨立處理
- 自定義介面
- 理想擴充規劃
## 淺談社會網絡分析
* 講者:文月
* 簡報:https://slides.com/meng-yingtsai/sna_intro/
* 國小生也會的Graph介紹
* Basic Construct
* Density
* Distance
* Connectivity
* Centrality
* Degree
* Closeness
* Betweenness
* Eigenvector
* Cluster
* n-Clique
* k-core
* 暗黑網路 Dark/covert Network
* Cases
* 911 hijacking data
* 鬆散
* Poly-drug Network
* 沒有鬆散、去中心化的
* betweenness, degree centrality high
* SNA的應用
* 數位人文研究
* 冰與火之歌人物關係圖
## 誰說工程師一定爆肝!一起走入雲端世界
[投影片連結](https://www.slideshare.net/mobile/shaIliao/sitcon-2019-137916514)
{%slideshare shaIliao/sitcon-2019-137916514 %}
Q.對工程師的想像到底是什麼?
肥、油、宅、輪班、爆肝(他說的100%正確)
肉搜:[Mr.沙先生](https://shazi.info/) or [Mr. 礦物男人](https://life.shazi.info/)
Q. 什麼是雲端?什麼東西是雲端,什麼東西不是雲端?
是一個在網路上的東西。
A.
- 一個在網路上的東西
- 每天手機打開就在用
- 用了就對了,不能用就靠悲
> FB 壞了就到 PTT 靠北,PTT 壞了就到 FB 靠北
[name=scott.liao]
### 雲端在哪裡?
- 雲端服務(SaaS, Software as a Service)
以前需要再電腦中安裝軟體,但是現在可以直接在網路上使用,目前已經可以把軟體包裝成服務,讓使用者可以直接在網路上使用。
- Google, Facebook
- Uber Eats, Netflix (已經不需要一台電視就可以看影片,只要有網路就可以用了)
- LINE, PTT, Apple Pay
雲端其實很廣義,現在再用的網路服務都算是雲端。
- 雲端運算(IaaS, PaaS)
例如會架Service
- Amazon Web Service(AWS)
> 提供雲端的運算資源,其實連電腦都不需要,只要有網路就不需要有電腦
- Google Cloud Platform (GCP)
- Microsoft Azure (Azure)
### 為什麼要雲端
- 有**網路**就有雲端
> 現在的人不需要用電腦、可以簡化很多事情,市場有需求
- 好像能賺很多**錢**
> 常用的軟體LINE等似乎都很賺錢(大的公司)
- 加上雲端就是**潮**
> 好像只要加上雲端就可以賣得很貴的樣子
雲端的概念就是使用者 (錢花得很快) 可以透過網路快速的touch到雲端。
### **使用者**角度看雲端
- 節省時間成本
### **工程師**角度看雲端
- 節省架站時間
> 更多時間 get
- 建立自動化規則
> 彈性調整設備需求
### Feature 雲端
> 優點
- 什麼都有什麼都不奇怪
- 用多少算多少,花少少的錢大大的享受
- 想用的時候就用,不用的時候就關掉
- 自動化
- 背後有一群人幫你
### Not 雲端
> 缺點
- 不相信雲端的人
- 變化速度太快,沒有熱情不要來
- 不缺錢的人
### Select 雲端
- Amazon Web Service(AWS)
- 使用者最多
- 種類最多
- 最近的節點在日本
- Google Cloud Platform(GCP)
- 老爸很強
- 對 AWS 窮追猛打
- 速度最快(台灣就有節點)
- Microsoft Azure
- 偏愛 Microsoft Windows
- 阿里雲
- 中國推薦
### Learn 如何學習雲端
- 線上影音課程
- A Cloud Guru
- Udemy
- Safari books
- 線上實作
- Qwiklabs
- Free tier
- AWS User Group 社群
### 未來工作
- 新創公司最愛
- 休不停的年假
- 百萬年薪
- 吃不完的零食
- 年輕妹妹很多(?)
- 老牌企業轉型
- 穩定的薪水
- 穩定的制度
- 養老
> 把時間留給更美好的事
[name=scott.liao]
[AWS User group](https://www.facebook.com/groups/awsugtw/)
[104 工程人才計畫](http://www.104.com.tw/cfdocs/project/1702/170125_104_hr/index.html)
## 解放 Linux 桌面!用 Xlib+樹狀結構打造自己的Window Manager
### Windows Enviroment
Desktop Enviroment
[簡報](https://docs.google.com/presentation/d/10EBNTM8tgNT7j9lK1UjkMqoonLBlvywtFmTiUqiVBCA/edit#slide=id.g46b9b474b3_0_3)
Windows Management
- 其實是一隻程式
- Stacking / Floating(堆疊式/浮動式)
- Gnome: mutter
- KDE: KWin
- Other: Openbox, 2bwm, compiz...
- Tiling(平鋪式)
- Linux: bspwm, Herbstluftwm
- MacOS: chunkwm
- Dynamic 動態式
- 結合 Stacking & Tiling ,可在兩者間切換
- i3 , dwm , awesome , Wmderland
平鋪式特性
- Window overlapping
- Screen Space wasted
- Manual Arrangement
- Point & Click
Tiling window manager
- 自動安排視窗大小、位置
- keyboard-driven (vim-like)
- highly customizable
- 把功能類似的程式group在同一個Workspace
- 跟vim很像,用習慣就很爽
選擇 Tiling Wm
- 常見:i3 , i3-gaps , dwm , bspwm ...
- 如果package manager沒有就自己git clone && Compile
- WM != DE
- System Bar: Polybar, tint2, i3blocks
- System Tray: stalonetray
- Notification Service: dunst
- Program Launcher: dmune, rofi (好像不是dmune,求修正)
- 你可以重複利用的:
- Terminal
- File Manager
可以自訂:
- Hotkey (內建動作 / 執行 shell command)
- 每個程式要執行在哪個 Workspace
- 哪些視窗要float?
- 那些視窗要fullscreen?(通常是遊戲)
- autostart那些程式?
- border color/width
- gap width
### Part 2 : X - window system
- X Window System / X / X11
- Unix-like作業系統上繪製GUI的Protocol
- XFree86在2004年因更改License引發爭議
- Client-Server 架構
- 有 GUI 就有 X Window System (平常看到的 GUI 程式都是 X client)
通常用 GUI toolkit ,把他提供的 widget 組合
1. X Client : Terminal emulator, Firefox, Sublime Text
2. GUI toolkit : GTK+, Qt
3. 缺
4. Display server 也會接收鍵盤、滑鼠事件
5. WM 可以根據收到的 X Event 處理視窗
6. X11 中,最外面的是 X Window ,內不得每個 Widget 也是 X Window
Xlib & xcb
### Part 3
為何會想自己寫 WM
Choose your weapon
- 語言:任何有 X -bindings (C , C++ , Java , Rust)
- Client Library: Xlib or xcb
- Programming Paradigm: 結構化 vs 物件導向
1. 前置作業
1. main()
2. 對 X Server 連線
3. Main Event Loop
4. 攔截 X Events
5. 常用 Xlib functions
2. Workspaces
- Tree
- Leaf : 視窗
- Internal Node: 切割方向(Vertical/Horizon)
- Root Node 永遠存在
- 刪除 Window
- 直接刪除
3. Tiling Algorithms
- Add Window
- Rwmove Window
- 回傳所有樹葉
- 借助一個 Stack ,並從 root node 開始走訪
-
-
- 樹狀空間切割 Tree Spce Partitioning (Recrusive)
4. Inter-process communication
- `properties.h`
- Q: 我們目前在第幾個 Workspace ,只有 WM 知道,要如何讓其他程式(如 System tray )知道我們在第幾個 Workspace
後記
- Xlib 中所有 ERROR 預設都是 fatal
- WM = Event + Properties + Tiling Algorithms
- Segfault 很痛苦
- GDB
- 但講者選擇裝 Stacktrace lib 和 glog,把 Stacktrace 寫進 log