SlideShare una empresa de Scribd logo
1 de 102
Descargar para leer sin conexión
用 Docker 架設
班級 git-it 練習環境
By 和風信使 ( @taichunmin )
投影片 http://goo.gl/3aHqNd
原檔 https://goo.gl/EiUL61
等等會有一些程式碼
在投影片上面不容易複製
建議可以在原檔複製
DEMO!
緣起
網路上有很多 git 教學
但是幾乎大多數
都是模擬的系統
偶然之間
得知有 git-it
這套教學軟體
除了要在終端機下
實機操作 git
還要實機操作 GitHub
Very Good
BUT
但是社團跟系上借的
電腦教室
全部都有裝還原卡
一堂課的時間很寶貴
光安裝系統就飽了
練習 git-it 根本來不及
而且電腦教室的網路
所有人一起抓軟體時
就會慢到跟烏龜一樣
於是希望
可以省掉 git-it 安裝
還希望能有即時成績看板
ACM 中毒
使用 docker 架設 git-it 環境
首先 我們需要
能執行 Docker 的主機
以下是我用過的虛擬主機
DigitalOcean
Create Droplet → One-click Apps →
Docker 1.x.x on 14.04
AWS EC2
Ubuntu Server 14.04 LTS (HVM) →自己安裝 Docker
如果你需要安裝 Docker
官方 Linux 安裝腳本
Ubuntu
其他版本
如果你用 DigitalOcean 的 Docker 1.x.x on 14.04
就可以跳過啦。
“
“
實做時間
請大家完成到可成功測試 Docker
sudo service docker start
sudo docker run hello-world
接下來我們
要來寫 Docker le
Docker le 是什麼?
Docker le 包含創建映像檔所
需要的全部指令。
我們可以使用 docker build 指
令來創建映像檔。
通過減少映像檔和容器的創建
程序來簡化部署。
先來看幾個
Docker le 的訣竅
撰寫 Docker le 訣竅
1. 先開一個基礎的容器
# 開啟一個基礎的 ubuntu:14.04 指令
sudo docker run -ti ubuntu:14.04 /bin/bash
2. 按照安裝教學安裝一次
3. 將指令改成 non-interactive (不須互動,自動安裝)
4. 再把指令複製到 Docker le
git-it 安裝教學
https://github.com/jlord/git-
it/blob/master/original-readme.md
系統更新
sudo apt-get update
sudo apt-get upgrade
non-interactive
apt-get update -qq
apt-get upgrade -y
git-it 需求
Git
Node.js
純文字編輯器 (Text Editor)
英文語系 (English locales)
git 安裝
sudo apt-get install git
non-interactive
apt-get install -y git
Node.js & npm 安裝
sudo apt-get install nodejs npm
# 由於 git-it 預設使用 node 執行,故須 link
sudo ln -s /usr/bin/nodejs /usr/bin/node
non-interactive
apt-get install -y nodejs npm
ln -s /usr/bin/nodejs /usr/bin/node
純文字編輯器 (Text Editor)
sudo apt-get install vim nano
non-interactive
apt-get install -y vim nano
git-it 安裝
sudo npm install -g git-it
non-interactive
npm install -g git-it
Docker le 小結
FROM ubuntu:14.04
RUN apt-get update -qq
RUN apt-get upgrade -y
RUN apt-get install -y git nodejs npm vim nano
RUN ln -s /usr/bin/nodejs /usr/bin/node
RUN npm install -g git-it
接下來
該怎麼讓學員
進到自己的蘿蔔坑呢
我們只有很少的主機
一台主機上有很多個 client
不能讓學員
從 host 進入 client
r m - r f /
SSH
Secure Shell
然後再把
每個 client 的 SSH 埠
port forwarding 出來
BUT
Docker 容器
通常預設沒有 ssh
架設 ssh 教學
Docker 官方範例 https://goo.gl/edqX2W
Docker le 小結
# ... 略
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:git-it' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin y
RUN sed 's@sessions*requireds*pam_loginuid.so@session optional
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
現在
你的 Docker le
已經足以練習 git-it
BUT
一次面對一個班級的時候
還是有很多問題
該怎麼快速開很多 client?
docker start
docker-compose
安裝 docker-compose
請注意 Docker Compose 的版本。
curl -L https://github.com/docker/compose/releases/download/1.8.
chmod +x /usr/local/bin/docker-compose
docker-compose --version
參考網址
1. https://docs.docker.com/compose/install/
2. https://github.com/docker/compose/releases
“
“
docker-compose.yml
version: '2'
services:
client:
build: client/
ports:
- "22"
YML 的縮行很重要“ “
開多台 client
可自由指定數量
sudo docker-compose up -d
sudo docker-compose scale client=5
VPS 的 RAM 太小?
設定 swap (建議)
如果開的機器 RAM 較小,則建議手動新增 swap 以供
Docker 使用。
https://www.digitalocean.com/community/tutorial
s/how-to-add-swap-on-ubuntu-14-04
該怎麼指派
SSH PORT 給學員?
查詢 port forwarding 列表
docker-compose ps
Name Ports
----------------------------------------------------------------
gititcoursedocker_client_1 0.0.0.0:32794->22/tcp
scoreboard 0.0.0.0:22000->22/tcp, 0.0.0.0:80->80
client 的密碼
所有人都知道
該怎麼辦?
強制登入後更改密碼
在 Docker le 加上
RUN chage -d 0 root
實做時間
使用 SSH 進入 client
登入後立即要求更改 root 密碼
輸入 git-it 後進入選題選單
接下來是比較進階的主題
scoreboard
scoreboard
能幫助我們什麼呢?
scoreboard 能幫我們...
顯示 client 的 SSH PORT
顯示哪個 client 還沒有人使用
顯示學員的名字
顯示學員的解題數
使用網頁公開資料
scoreboard 該怎麼用程式
抓取 client 的 SSH PORT?
先幫 client 的 Docker le 加上
LABEL
# Dockerfile
LABEL role="git-it-client"
使用 LABEL 進行過濾
在 Docker Remote API 文件 範例
curl http://host/containers/json?filters={"label":["role=git-it-
docker ps 範例
docker ps --filter "label=role=git-it-client" --format '"{{.ID}}
接下來是 client 的回報程式
client 回報是否有人使用
1. 查詢登入密碼是否已被更改
OWNED=`[ "never" = "$(chage -l root | grep 'Password expires' |
2. client 定期 (cron) 回報給 scoreboard
client 回報學員的名字
git-it 的題目會要求幫 git 設定使用者的名字和 GitHub
的帳號,所以直接抓 git 的 user.name 和 user.username
就好了。
NAME=`git config --global user.name || hostname`
GITHUB=`git config --global user.username || echo ''`
顯示學員的解題數
git-it 會把解題數存放在
~/.config/git-it/completed.json
COMPLETED=`test -r /root/.config/git-it/completed.json && cat /r
client 需安裝 curl
sudo apt-get install curl
non-interactive
apt-get install -y curl
回報資料給 scoreboard
#!/bin/bash
COMPLETED=`test -r /root/.config/git-it/completed.json && cat /r
MID=`hostname`
NAME=`git config --global user.name || hostname`
GITHUB=`git config --global user.username || echo ''`
OWNED=`[ "never" = "$(chage -l root | grep 'Password expires' |
curl 
--data-urlencode "completed=${COMPLETED}" 
--data-urlencode "mid=${MID}" 
--data-urlencode "name=${NAME}" 
--data-urlencode "github=${GITHUB}" 
--data-urlencode "owned=${OWNED}" 
http://scoreboard/completed/update
為什麼剛剛的回報程式
可以用 scoreboard 當作主機?
因為 Docker 的 LINK
會很貼心的幫我們設定
DNS 解析 /etc/hosts
於 client 中
架設 crontab 定期回報
撰寫 /etc/crontab
每分鐘回報 client 的資料給 scoreboard,以 root 身份
執行。
* * * * * root /usr/bin/scoreboard-reporter.sh >> /dev/null 2>&1
client Docker le 加入 cron
參考 https://github.com/aptible/docker-cron-
example
RUN apt-get -y install rsyslog
ADD crontab /etc/crontab
ADD client-start.sh /usr/bin/client-start.sh
ADD scoreboard-reporter.sh /usr/bin/scoreboard-reporter.sh
RUN chmod +x /usr/bin/client-start.sh
RUN chmod +x /usr/bin/scoreboard-reporter.sh
RUN touch /var/log/cron.log
client 啟動腳本
由於我們需要執行的程式已經超過一個了,為了避免
Docker le 的 CMD 指令太過複雜,所以我們要開新
client 要執行的指令都寫在 client-start.sh
#!/bin/sh
# client-start.sh
sleep 5
rsyslogd
cron
/usr/sbin/sshd # 刪掉 -D 參數
/usr/bin/scoreboard-reporter.sh # 開機時先回報一次
tail -F /var/log/syslog /var/log/cron.log
修改 Docker le CMD 指令
# 要把舊的刪除,因為只有最後一個 CMD 有效
CMD /usr/bin/client-start.sh
實作時間
請參考 https://github.com/taichunmin/git-it-
course-docker/tree/master/client
client 完成到可以回報資料給 scoreboard
scoreboard
scoreboard Docker le
主要接收 client 的回報
還會去跟 Docker Remote API
取得每個 client
所對應的 PORT
單純就是一個 HTTP Server
由於不是每個人都會 PHP
所以就不深入談了
我已經事先把 scoreboard
build 到 Docker Hub
可以直接用 Docker Hub
來寫 docker-compose.yml
scoreboard 的
docker-compose.yml
version: '2'
services:
scoreboard:
# build: scoreboard/
image: taichunmin/git-it-course-docker:scoreboard
ports:
- "80:80"
- "22000:22"
container_name: scoreboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock
port 80 是網頁伺服器
port 22 是 SSH,為了方便就固定對應到 22000
設定了 container_name 可以避免誤開多台
設定 volumes 可以讓 scoreboard 存取 Remote API
須開放 Docker Remote API
給 scoreboard
開放 Docker Remote API
利用 Volumes
version: '2'
services:
scoreboard:
# 省略
volumes:
- /var/run/docker.sock:/var/run/docker.sock
然後我們需要修改 client 的
docker-compose.yml
version: '2'
services:
client:
build: client/
ports:
- "22"
links:
- scoreboard
depends_on:
- scoreboard
讓 docker-compose 自動對應 port 22 出來
LINK 到 scoreboard,讓 client 可以回報資料
depends_on 讓 docker-compose 確保有 scoreboard
到此結束
歡迎提問

Más contenido relacionado

La actualidad más candente

Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介Bo-Yi Wu
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Chu-Siang Lai
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出Miles Chou
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧Chu-Siang Lai
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率Bo-Yi Wu
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIChu-Siang Lai
 
20170905 dev ops in hiiir
20170905 dev ops in hiiir20170905 dev ops in hiiir
20170905 dev ops in hiiirIsaac Tseng
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探仲昀 王
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps BotBo-Yi Wu
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIContinuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIChu-Siang Lai
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介Zhichao Liang
 
Yet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom upYet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom upWen-Tien Chang
 
Bootstrap個人網站 20141117
Bootstrap個人網站 20141117Bootstrap個人網站 20141117
Bootstrap個人網站 20141117均民 戴
 
Docker Compose
Docker ComposeDocker Compose
Docker ComposeMiles Chou
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構Bo-Yi Wu
 
docker intro
docker introdocker intro
docker introkoji lin
 

La actualidad más candente (20)

Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
 
Docker 淺入淺出
Docker 淺入淺出Docker 淺入淺出
Docker 淺入淺出
 
前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧前端工程師一定要知道的 Docker 虛擬化容器技巧
前端工程師一定要知道的 Docker 虛擬化容器技巧
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
 
20170905 dev ops in hiiir
20170905 dev ops in hiiir20170905 dev ops in hiiir
20170905 dev ops in hiiir
 
認識那條鯨魚 Docker 初探
認識那條鯨魚   Docker 初探認識那條鯨魚   Docker 初探
認識那條鯨魚 Docker 初探
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
My DevOps Tour 0.1
My DevOps Tour 0.1My DevOps Tour 0.1
My DevOps Tour 0.1
 
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIContinuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
 
Docker應用
Docker應用Docker應用
Docker應用
 
微软Bot framework简介
微软Bot framework简介微软Bot framework简介
微软Bot framework简介
 
Yet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom upYet another introduction to Git - from the bottom up
Yet another introduction to Git - from the bottom up
 
Bootstrap個人網站 20141117
Bootstrap個人網站 20141117Bootstrap個人網站 20141117
Bootstrap個人網站 20141117
 
Docker Compose
Docker ComposeDocker Compose
Docker Compose
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
docker intro
docker introdocker intro
docker intro
 

Similar a COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境

容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuMarsZ Chen
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShopPhilip Zheng
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解zzc89522
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结Yiwei Ma
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析CC
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Chu-Siang Lai
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacMarsZ Chen
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)Chu-Siang Lai
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practicelitaocheng
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkitLainZQ
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建Liyang Tang
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介Kito Cheng
 
Git & git hub v1.2
Git & git hub v1.2Git & git hub v1.2
Git & git hub v1.2Chris Chen
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來Shengyou Fan
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 GradleJustin Lin
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub維佋 唐
 

Similar a COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境 (20)

容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Ruby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for UbuntuRuby on Rails 開發環境建置 for Ubuntu
Ruby on Rails 開發環境建置 for Ubuntu
 
Docker
DockerDocker
Docker
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
Android系统移植技术详解
Android系统移植技术详解Android系统移植技术详解
Android系统移植技术详解
 
Puppet安装总结
Puppet安装总结Puppet安装总结
Puppet安装总结
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
Continuous Delivery Workshop with Ansible x GitLab CI (2nd)
 
Ruby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for MacRuby on Rails 開發環境建置 for Mac
Ruby on Rails 開發環境建置 for Mac
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Hadoop平台搭建
Hadoop平台搭建Hadoop平台搭建
Hadoop平台搭建
 
Build Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratchBuild Your Own Android Toolchain from scratch
Build Your Own Android Toolchain from scratch
 
icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介icecream / icecc:分散式編譯系統簡介
icecream / icecc:分散式編譯系統簡介
 
Git & git hub v1.2
Git & git hub v1.2Git & git hub v1.2
Git & git hub v1.2
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
 
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 

Más de 均民 戴

CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用
CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用
CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用均民 戴
 
CKmates - AWS 雲端運算 基礎服務介紹
CKmates - AWS 雲端運算 基礎服務介紹CKmates - AWS 雲端運算 基礎服務介紹
CKmates - AWS 雲端運算 基礎服務介紹均民 戴
 
寫程式?那些老師沒教的事 (Git 部分節錄)
寫程式?那些老師沒教的事 (Git 部分節錄)寫程式?那些老師沒教的事 (Git 部分節錄)
寫程式?那些老師沒教的事 (Git 部分節錄)均民 戴
 
在 DigitalOcean 架設 Gitlab
在 DigitalOcean 架設 Gitlab在 DigitalOcean 架設 Gitlab
在 DigitalOcean 架設 Gitlab均民 戴
 
Bootstrap個人網站 20141027
Bootstrap個人網站 20141027Bootstrap個人網站 20141027
Bootstrap個人網站 20141027均民 戴
 
資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1均民 戴
 
MIS MySQL 入門
MIS MySQL 入門MIS MySQL 入門
MIS MySQL 入門均民 戴
 
SITCON 2014 - Regular Expression Introduce
SITCON 2014 - Regular Expression IntroduceSITCON 2014 - Regular Expression Introduce
SITCON 2014 - Regular Expression Introduce均民 戴
 
興大資訊社 CPE 訓練宣傳
興大資訊社 CPE 訓練宣傳興大資訊社 CPE 訓練宣傳
興大資訊社 CPE 訓練宣傳均民 戴
 
20130706閃電秀
20130706閃電秀20130706閃電秀
20130706閃電秀均民 戴
 
Drupalize your data use entities
Drupalize your data use entitiesDrupalize your data use entities
Drupalize your data use entities均民 戴
 
Drupal 7 Entity & Entity API
Drupal 7 Entity & Entity APIDrupal 7 Entity & Entity API
Drupal 7 Entity & Entity API均民 戴
 
植基於個人本體論的新聞推薦系統
植基於個人本體論的新聞推薦系統植基於個人本體論的新聞推薦系統
植基於個人本體論的新聞推薦系統均民 戴
 
JSON 和 Android 的火花
JSON 和 Android 的火花JSON 和 Android 的火花
JSON 和 Android 的火花均民 戴
 
寫程式?那些老師沒教的事
寫程式?那些老師沒教的事寫程式?那些老師沒教的事
寫程式?那些老師沒教的事均民 戴
 

Más de 均民 戴 (15)

CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用
CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用
CKmates - AWS 三大 AI 解決方案:應用影像辨識、聊天機器人與語音轉換以及 Serverless 應用
 
CKmates - AWS 雲端運算 基礎服務介紹
CKmates - AWS 雲端運算 基礎服務介紹CKmates - AWS 雲端運算 基礎服務介紹
CKmates - AWS 雲端運算 基礎服務介紹
 
寫程式?那些老師沒教的事 (Git 部分節錄)
寫程式?那些老師沒教的事 (Git 部分節錄)寫程式?那些老師沒教的事 (Git 部分節錄)
寫程式?那些老師沒教的事 (Git 部分節錄)
 
在 DigitalOcean 架設 Gitlab
在 DigitalOcean 架設 Gitlab在 DigitalOcean 架設 Gitlab
在 DigitalOcean 架設 Gitlab
 
Bootstrap個人網站 20141027
Bootstrap個人網站 20141027Bootstrap個人網站 20141027
Bootstrap個人網站 20141027
 
資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1資訊創意課程 - Create A Personal Website 1
資訊創意課程 - Create A Personal Website 1
 
MIS MySQL 入門
MIS MySQL 入門MIS MySQL 入門
MIS MySQL 入門
 
SITCON 2014 - Regular Expression Introduce
SITCON 2014 - Regular Expression IntroduceSITCON 2014 - Regular Expression Introduce
SITCON 2014 - Regular Expression Introduce
 
興大資訊社 CPE 訓練宣傳
興大資訊社 CPE 訓練宣傳興大資訊社 CPE 訓練宣傳
興大資訊社 CPE 訓練宣傳
 
20130706閃電秀
20130706閃電秀20130706閃電秀
20130706閃電秀
 
Drupalize your data use entities
Drupalize your data use entitiesDrupalize your data use entities
Drupalize your data use entities
 
Drupal 7 Entity & Entity API
Drupal 7 Entity & Entity APIDrupal 7 Entity & Entity API
Drupal 7 Entity & Entity API
 
植基於個人本體論的新聞推薦系統
植基於個人本體論的新聞推薦系統植基於個人本體論的新聞推薦系統
植基於個人本體論的新聞推薦系統
 
JSON 和 Android 的火花
JSON 和 Android 的火花JSON 和 Android 的火花
JSON 和 Android 的火花
 
寫程式?那些老師沒教的事
寫程式?那些老師沒教的事寫程式?那些老師沒教的事
寫程式?那些老師沒教的事
 

COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境