Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSC 2016 Hiroshima LT "オンラインコンパイラAmadeusの開発"
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
mrtc0
March 01, 2017
0
340
OSC 2016 Hiroshima LT "オンラインコンパイラAmadeusの開発"
mrtc0
March 01, 2017
Tweet
Share
More Decks by mrtc0
See All by mrtc0
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
3.1k
コードで理解する eBPF セキュリティモニタリング
mrtc0
2
270
Product Security Casual Talk #1 - Datadog を使ったセキュリティモニタリングと 自動化の取り組み
mrtc0
2
650
GMO ペパボ株式会社 23卒・24卒向け セキュリティ勉強会 実践 DevSecOps パイプライン
mrtc0
1
700
実践 DevSecOps パイプライン ~システム開発へのセキュリティの取り入れ方~
mrtc0
2
590
脅威モデリングで考える Kubernetes セキュリティ / CloudNative Days Tokyo 2021 #CNDT2021 #CNDT2021_B
mrtc0
8
3.4k
ProSec-IT 2021 Container Security
mrtc0
2
810
GMO Developer Day 2021 - DevSecOps 推進の取り組みの紹介.pdf
mrtc0
4
1.8k
Web セキュリティ研修 / GMO ペパボ 新卒研修 2021
mrtc0
7
46k
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
160
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.6k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
57
50k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.4k
Visualization
eitanlees
150
17k
Exploring anti-patterns in Rails
aemeredith
2
250
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
740
How STYLIGHT went responsive
nonsquared
100
6k
The Invisible Side of Design
smashingmag
302
51k
Transcript
オンラインコンパイラ 「Amadeus」の開発 OSC 前夜祭 @mrtc0
> whoami もりたこ(@mrtc0) 広島工業大学 B3 #seccamp'15,16 #ctf4b NW/Forensics WebApp Pentenster
(好きな||嫌いな)脆弱性: DOM Based XSS 2
Amadeusとは? 3
Aiming to the most accessible development environment for university students
学生のための開発環境(オンラインコンパイラ) 4
牧瀬紅莉栖とは関係ないです 5
> 背景 プログラミング初学者がどこで躓くのか テスト(試験)だけではわからない コーディングの様子を監視したい 環境構築に時間を取らせたくない VisualStudio, MSYS, Cygwin... オンラインコンパイルつくるか!!
6
> 構成 バックエンド Django REST Framework, NodeJS フロントエンド VueJS, ReactJS,
Electron コンテナ LXD 7
8
> 特徴 多言語 C(gcc,clang), Java, Scala, Python, Ruby... RESTful API
補完可能なエディタ AceEditorをfork 入力を1文字ずつロギング Online Judge機能 9
> 特徴 ユーザーのリアルタイム監視 コピペの検知, 正解までのdiffなど 変数トレーサー GDBのPythonAPIを利用 Terminal gottyをfork etc
チャットなど 10
> DEMO 11
> コンテナ ユーザーのコードを安全に実行 コード実行環境を隔離/仮想化 コンテナ技術の利用 cgroupsやNamespaceによるホストとの分離 ホスト側/他コンテナに影響を及ぼさない できるだけ速く,オーバーヘッドが小さいもの 12
> どのコンテナ使うか問題 Docker? FreeBSD Jail? LXC? Dockerはオーバーヘッドが大きい印象があった 速度, スケーラビリティでLXDを採用 LXCをより柔軟に扱うための機構
(OpenStackプラグインもあるので遊びたい... 13
> Security 各種リソース制限 LXC cgroupsでCPUやメモリ使用量, プロセス 数を制限 ディスク領域の制限 特に設けていない(!w) LXDはZFS,
btrfsでのみ制限可能 Quotaで制限をかけるか検討中 14
> Restful API Django REST Frameworkで実装 $.ajax({ 'type': 'POST', 'url':
'/api/compiler/', 'data' : { 'post_code': '#include <stdio.h>\nint main()...', 'stdin': '1 2 3', 'language': 'c-gcc', ... }, 'dataType' : 'json', ... 15
> ユーザーの監視 担当講師が1人ずつ見て回るのは大変 全員のコーディング状況を把握 チャットによるアドバイス Server Sent EventとWebSocket 16
> DjangoでWebSocket しんどい Nginx + uwsgiで苦戦 NodeJS(Express)で実装することに DjangoのセッションをNodeJSから利用する Redisにセッション情報を保存 NginxのリバースプロキシでCookieのSOP制限
回避 17
18
> その他 無限ループ対策 SIGALRMをPythonから叩く @timeout(5) def execute_code(): # コンテナでコードを実行する関数 ...
except TimeoutError: container.execute('kill -9 a.out') ... 19
> 作ってみて/運用してみて 型... UI構成が難しい ここが一番しんどかった どこに何のボタンを配置すればいいか DB, モデル設計大事... 「SQLアンチパターン」をもっと早く読んでお くべきだった...
20
> 作ってみて/運用してみて 学習から試験まで使える上に全てのログが取れる ので重点的に教える箇所が分かる ユーザー(学生)から好評 やはりこれが一番うれしかった 21
> 今後の展望 取得したデータの分析 対応言語などの拡張 教師の自動化とプログラムの評価 できればOSS化していきたい 22