1 | FPGA |
---|
2 | FPGAの状況 |
---|
3 | FPGAボード |
---|
4 | 立地で使い勝手の良いものは高い |
---|
5 | 雑誌付録もあるが…… |
---|
6 | PDP-11 |
---|
7 | 16bitミニコン |
---|
8 | 1970-1990頃 |
---|
9 | 回路図などの詳細なマニュアルが公開されている |
---|
10 | 大型冷蔵庫くらいあったものが、最終的には1チップに |
---|
11 | |
---|
12 | 初期のUNIXのプラットフォーム |
---|
13 | ソースコードが公開されていて、UNIX第6版の詳細な注釈本(Lions本)も出ている |
---|
14 | FPGAにPDP-11を実装する |
---|
15 | 目標は「PDP-11用のプログラムが動く」 |
---|
16 | PDP-11の命令セットや周辺回路はHDLで記述 |
---|
17 | HDL |
---|
18 | 見た目はプログラミング言語に似ている |
---|
19 | コンパイル・リンク・ロード→論理合成・配置実装・プログラム |
---|
20 | 本質的に並列処理 |
---|
21 | 仕様を記述する、という思想から出発 |
---|
22 | テスト記述も意識している |
---|
23 | |
---|
24 | 主流はVHDLとVerilog HDL |
---|
25 | SystemCというものもあるがいまいち流行らない |
---|
26 | VHDL |
---|
27 | Adaベース |
---|
28 | 強い型付け言語 |
---|
29 | 激しくダサい(主観) |
---|
30 | |
---|
31 | 何故ダサいか |
---|
32 | 大文字と小文字の区別がない |
---|
33 | エラーが出ないのに動かないことがある |
---|
34 | シミュレーション |
---|
35 | HDLによる記述はシミュレーション出来る |
---|
36 | ghdlなら無料 |
---|
37 | |
---|
38 | 波形が格好いい |
---|
39 | 目で見て理解 |
---|
40 | 問題の発見に有効 |
---|
41 | |
---|
42 | 信号が伝わっていくときの遅延など、様々なレベルでシミュレーションが出来る |
---|
43 | |
---|
44 | シミュレーション例 |
---|
45 | ghdl + gtkWave |
---|
46 | UNIXのブート中の例 |
---|
47 | |
---|
48 | 何をやったか |
---|
49 | w11(OpenCores)をAvent Microboardに移植 |
---|
50 | 元々他のFPGAボードでは動いていた |
---|
51 | 入出力デバイスのフィッティング |
---|
52 | |
---|
53 | デモ |
---|
54 | ……元々使っていたボードが壊れましたので出来ません |
---|
55 | -> 別のボード |
---|
56 | |
---|
57 | UNIX v6 |
---|
58 | 当時は出力がターミナルではなくてプリンタといったこともありえたので、 |
---|
59 | 現在のように環境などがログインプロンプト時に出ない |
---|
60 | |
---|
61 | w11 CPU coreのdoxygen出力 |
---|
62 | |
---|
63 | ロジアナ |
---|
64 | XilinxならChipScopre |
---|
65 | |
---|
66 | 何が嬉しいのか |
---|
67 | ソフト屋はマニュアル通りハードウェアが使えれば十分なのか |
---|
68 | ユーザはマニュアル通りソフトウェアが使えれば十分か |
---|
69 | |
---|
70 | 必須ではないが、知っていればお得 |
---|
71 | |
---|
72 | 野望 |
---|
73 | PDP-11の回路をFPGAでそのまま実装 |
---|
74 | VAXを実装 |
---|
75 | |
---|
76 | 「PDP-11でライバルと差を付けよう!」 |
---|
77 | |
---|
78 | Extreme Java |
---|
79 | @Fantom_JAC |
---|
80 | |
---|
81 | 自己紹介 |
---|
82 | Java原人(Java原理主義者) |
---|
83 | Javaのためならなんでも |
---|
84 | 無線、特にZigBee |
---|
85 | (Java原人からみた) Javaとは |
---|
86 | 小型の組み込み機器等に使えるプラットフォーム |
---|
87 | やりたかったこと |
---|
88 | JavaからUSB無線ドングル |
---|
89 | 環境 |
---|
90 | Javaで直接レジスタがたたける |
---|
91 | EHCIデバイス |
---|
92 | 想定と違った |
---|
93 | 途中に仕様の分からないドライバと・仕様の分からないAPIが挟まっていた |
---|
94 | 必要なもの |
---|
95 | EHCIドライバ |
---|
96 | USBスタック・フレームワーク |
---|
97 | Ralinkドライバ |
---|
98 | 802.11MACスタック |
---|
99 | TCP/IPスタック |
---|
100 | EHCIとは |
---|
101 | USB2.0のコントローラ仕様 |
---|
102 | ちゃんとレジスタの仕様が公開されている |
---|
103 | 用意されたUSB環境 |
---|
104 | cHCが存在しない |
---|
105 | EHCIで1.1も繋がる謎仕様 |
---|
106 | 1ポート |
---|
107 | OTGを経由している |
---|
108 | OTGにはレジスタの仕様の標準がない |
---|
109 | Global Controller |
---|
110 | OTG Controller |
---|
111 | 「せめてJavaらしく」 |
---|
112 | 自分でメモリ管理するJava |
---|
113 | new出来ないので |
---|
114 | USBスタック |
---|
115 | JSR-80にたぶん準拠 |
---|
116 | 実装はない…… |
---|
117 | TCKは通してません |
---|
118 | IMBの作ったRIを使用 |
---|
119 | squilla-jsr80 |
---|
120 | JSR-80をOSGiに対応させた |
---|
121 | UsbDeviceDriverを継承するとデバドラが簡単に作れる |
---|
122 | Ralink |
---|
123 | その界隈ではあまりにも有名 |
---|
124 | RT2860/3070を使用 |
---|
125 | FreeBSD用非公式ドライバを移植 |
---|
126 | Ralink IO |
---|
127 | Ralink共通(?)のAPIセット |
---|
128 | たぶんUSB以外のインタフェースでも共通 |
---|
129 | USBの実装はControl |
---|
130 | Ralinkの謎 |
---|
131 | 起動時にファームウェアを丸ごと転送 |
---|
132 | しかも転送がよく転ける |
---|
133 | 膨大な量の転送 |
---|
134 | 改造すれば普通に電波法破れそう |
---|
135 | メモリいじってパッチを当てている疑惑 |
---|
136 | 怪しいノード管理 |
---|
137 | wcid = associationId & 0xFF |
---|
138 | 8bit <- 16 bit |
---|
139 | ControlFrameだけは実装されているっぽい |
---|
140 | リアルタイム性の問題 |
---|
141 | squilla-net |
---|
142 | Javaでプロトコルスタックを書くためのライブラリを作った |
---|
143 | 802.11関連 |
---|
144 | ManagementFrame |
---|
145 | MLME |
---|
146 | Javaに欠けているWLAN用API |
---|
147 | Androidにはある…… |
---|
148 | MLME |
---|
149 | SCAN |
---|
150 | JOIN |
---|
151 | AUTHENTICATE |
---|
152 | |
---|
153 | JOINがよく分からない |
---|
154 | 実際にはsyncのこと? |
---|
155 | TCP/IPスタック |
---|
156 | IPv4 |
---|
157 | 適当 |
---|
158 | フラグメント処理とかやっていない |
---|
159 | ARP |
---|
160 | RequestおよびReply監視用Thread一本 |
---|
161 | UDP |
---|
162 | 簡単 |
---|
163 | Thread未使用 |
---|
164 | TCP |
---|
165 | もう二度と実装したくないプロトコルスタック堂々の一位(一人に聞いた) |
---|
166 | 不可解な輻輳制御 |
---|
167 | 理不尽な仕様書 |
---|
168 | ... |
---|
169 | Slow-startもCongrestion avoidanceもなし |
---|
170 | TCPConnectionごとにThread一本 |
---|
171 | 基本動作 |
---|
172 | 基本はステートマシン |
---|
173 | tickと呼ばれるMethodを無限ループで呼び続ける |
---|
174 | 3Dゲーム開発でよくやる手法 |
---|
175 | tickされた時に |
---|
176 | 受信FIFOに溜まっていれば取り出して、TCPInputに投げて処理 |
---|
177 | なければTCPOuputにて、ACK可能か判断し、送信 |
---|
178 | 最後に再送タイムアウトが発生したかチェックして、再送信 |
---|
179 | |
---|
180 | 何故Single-Threadか |
---|
181 | 当初はMultiの予定 |
---|
182 | GCが使えないので管理が大変 |
---|
183 | GCより高いプライオリティで動いている |
---|
184 | プログラムのミスが起こりやすい |
---|
185 | リソースを消費する |
---|
186 | tickが空回りしないように何もしないときは50ms程sleep |
---|
187 | BufferedPipe |
---|
188 | スライディングウィンドウ実現のために作ったクラス |
---|
189 | 内部はリングバッファ |
---|
190 | 非同期に可変長のバイト列を出し入れ |
---|
191 | つまり両端がInputStream/OutputStream |
---|
192 | |
---|
193 | 探したけど意外とこういうクラスはなかった |
---|
194 | 元々TCP向けなので入出力個別にシャットダウン可能 |
---|
195 | readするとブロック |
---|
196 | 残酷な現実 |
---|
197 | やっぱりどうしてもTCPはまともに動かない |
---|
198 | 相性が酷い |
---|
199 | より具体的にいうと、暗黙の了解のようなものが多かった |
---|
200 | スクラッチから実装することの意義 |
---|
201 | 勉強になる |
---|
202 | 百聞は一コーディングにしかず |
---|
203 | デバッグが容易 |
---|
204 | 腐っても自分の書いたコード |
---|
205 | ライセンス問題ゼロ |
---|
206 | 話のネタになる |
---|
207 | 分かったこと |
---|
208 | Linuxはすごい |
---|
209 | EHCIのコードの雑さ |
---|
210 | ネット周りのスパゲティ |
---|
211 | よくこれで動いているな |
---|
212 | FreeBSDは読みやすい |
---|
213 | 特にネットワークスタック |
---|
214 | IEEEの仕様書は非常に親切 |
---|
215 | ちゃんとPDFで公開されている! |
---|
216 | IETFの仕様書は非常に非親切 |
---|
217 | そもそも |
---|
218 | ギョウムで必要でした |
---|
219 | 半年強で実装 |
---|
220 | 結局使われず |
---|
221 | TCP動かなかったし… |
---|
222 | |
---|
223 | 「Javaなんて使わない方が良いんじゃないの?」 |
---|
224 | 今後 |
---|
225 | JavaMEがCortex-M向けに出るらしいので |
---|
226 | 使い道募集中 |
---|
227 | |
---|
228 | 組み込みJavaの場合GCが無い |
---|
229 | ImmotalHeapというものを使用する |
---|
230 | 自分でfreeする |
---|
231 | |
---|
232 | なのは完売 |
---|
233 | super_rti |
---|
234 | とある関数のバトルプログラミング |
---|
235 | |
---|
236 | フック処理 |
---|
237 | 相手のプロセスに干渉して、特定のタイミングで自分の任意の処理を呼ばせる |
---|
238 | 外部からソフトウェアの拡張を行える |
---|
239 | 誰からもフックされないようなプロセスを作るには? |
---|
240 | 管理者特権は出てこない |
---|
241 | Windowsでのフック |
---|
242 | dllを作る |
---|
243 | フィルタドライバ |
---|
244 | APIを使う |
---|
245 | よく使われるAPIの話 |
---|
246 | dllやドライバは管理者特権が必要だったりで、気づかれやすい |
---|
247 | dll injection |
---|
248 | OSのプロセス保護を突破しやすい |
---|
249 | プログラムを作りやすい |
---|
250 | ドMくんとドSくん |
---|
251 | なのフェイの薄い本ください -> なのは完売 |
---|
252 | 守りたい、この笑顔 |
---|
253 | anti dll injection |
---|
254 | 賢いLoadLibraryAを作ればよい |
---|
255 | 攻撃用dllであれば拒否する |
---|
256 | APIフック |
---|
257 | 今回は |
---|
258 | sexyhookを使う |
---|
259 | バリアを作った感じ |
---|
260 | LoadLibraryは複数ある |
---|
261 | LoadLibraryAがやられたようだな… |
---|
262 | 裏ボス:SetWindowsHookEx |
---|
263 | LdrLoadDll |
---|
264 | LoadLibraryの元締め的役割 |
---|
265 | SetWindowsHookExも採取的にはLdrLoadDllを呼び出す |
---|
266 | LdrLoadDllに対応すれば良い |
---|
267 | 全てのdll injectionに対応可能 |
---|
268 | |
---|
269 | dllを使わない攻撃 |
---|
270 | 実はdllは無くても攻撃出来る |
---|
271 | CreateRemoteThreadで直接マシン語コードを挿入可能 |
---|
272 | anti thread injection |
---|
273 | そもそもThreadはどうやって作られているのか |
---|
274 | スレッドが実行されたら、実行される中身をUSOThreadに飛ばしてしまう |
---|
275 | スレッド開始 -> BaseThreadInitThunk -> uso thread |
---|
276 | 判別が難しいので、現時点では無差別 |
---|
277 | |
---|
278 | やられっぱなしは悔しいので攻性防壁 |
---|
279 | 結構難しい |
---|
280 | 攻撃してきた相手を特定する必要がある |
---|
281 | 注意としては、dllを削除するのは危険 |
---|
282 | anti thread injection |
---|
283 | 攻撃者のコードによっては反撃出来る |
---|
284 | dll名からexeを特定して、exitする |
---|
285 | zap! zap! |
---|
286 | 攻撃してきたらsleepに置き換える |
---|
287 | 攻撃元はfreezeしてしまう |
---|
288 | |
---|
289 | 残酷なのは戦争 |
---|
290 | |
---|
291 | 相手の攻撃より先にバリアを張るのが大切 |
---|
292 | |
---|
293 | コマンドとシェルスクリプトで企業システムを作る |
---|
294 | 上田隆一 @uecinfo |
---|
295 | |
---|
296 | USP友の会 |
---|
297 | @usptomo |
---|
298 | bashでCGIを書く人間 |
---|
299 | word pressを使っていたが、injectionされたので「bashで作ればinjectionされないでしょう」 |
---|
300 | Universal Shell Programming Laboratory |
---|
301 | |
---|
302 | 自社開発指導 |
---|
303 | 顧客企業の情報システム部 |
---|
304 | CUIでOSを使う講習 |
---|
305 | vimの講習 |
---|
306 | awk・sedの講習 |
---|
307 | シェルスクリプトの書き方 |
---|
308 | イントラ用CGI |
---|
309 | いわゆるSIの世界 |
---|
310 | 4次受け・5次受け当たり前 |
---|
311 | DBのレイアウト表の作者が某大手の3次受け |
---|
312 | 1次2次は何をしてたのか? |
---|
313 | まず、どのRDBMSを入れるか、から始まる |
---|
314 | 実績があるが高い企業と、安いが知らない企業はどちらが選ばれるか |
---|
315 | 知らない企業は警戒される |
---|
316 | ソフトウェア開発の問題点 |
---|
317 | 見えない |
---|
318 | 安いといわれても、実物がどんなものになるか分からない |
---|
319 | 失敗リスク |
---|
320 | 関わる人が増えていく |
---|
321 | 失敗しない設計を請け負うSE・下請け、弁護士 |
---|
322 | 「これを入れれば大丈夫」というミドルウェア |
---|
323 | 俺たちは成功する、という広告を請け負う広報・代理店 |
---|
324 | 「震度ゼロで倒壊しない家!」 |
---|
325 | そんなに人が居ないソフトウェアハウス |
---|
326 | 実績をコツコツ作る |
---|
327 | 自分たちで作ってもらう |
---|
328 | 仲間作り |
---|
329 | 自分たちの取り組みを知って貰う |
---|
330 | 失敗しない仕組み |
---|
331 | 人・マニュアル・「見通しのよいアーキテクチャ」 |
---|
332 | USP手法(ユニケージ) |
---|
333 | コマンド+シェルスクリプト |
---|
334 | データをテキストファイルで持つ |
---|
335 | ファイルシステムを使う |
---|
336 | 余計なソフトウェアを入れない |
---|
337 | コマンド、apache、NFS、その他標準のもの |
---|
338 | データを整理整頓するノウハウ塊 |
---|
339 | ファイルがファイルシステム上であちこちに分散してしまわないようなシステムを構築する |
---|
340 | データの整理整頓 |
---|
341 | 実会社でのデータの流れを意識 |
---|
342 | 例えば伝票の扱い |
---|
343 | DBに相当するレベル |
---|
344 | 受け取った伝票は捨てないで綴じる |
---|
345 | 綴じた伝票をノートに書き出して台帳 |
---|
346 | 台帳から統計データを集計 |
---|
347 | アプリケーションに相当するレベル |
---|
348 | 統計データを加工、問われたら答えるデータを準備 |
---|
349 | Apacheのログ解析での例 |
---|
350 | L1 |
---|
351 | ログをそのままコピーしてきたもの |
---|
352 | L2 |
---|
353 | awkで扱える形式に変換 |
---|
354 | L3 |
---|
355 | 集計したデータ |
---|
356 | L4 |
---|
357 | 表示する形式にしておく |
---|
358 | ブラウザに表示する直前のデータ -> アプリケーション |
---|
359 | DBを使う方法との差異 |
---|
360 | DB v.s. テキストという話ではない |
---|
361 | 「DBを使う」は道具の話 |
---|
362 | レベル1-5はアーキテクチャの話なのでもっと親切 |
---|
363 | データを整理整頓して失敗を避ける仕組み |
---|
364 | DBは木構造の概念が薄い -> DBより生のUNIXが良い |
---|
365 | ファイルからファイルへの変換 |
---|
366 | ファイルの入力リダイレクト -> コマンド -> パイプ -> コマンド -> 出力リダイレクト |
---|
367 | コマンド+シェルスクリプト |
---|
368 | コマンドはCで書かれているので速い |
---|
369 | |
---|
370 | シェルスクリプトの例 |
---|
371 | 関数を使わない |
---|
372 | sedが酷い |
---|
373 | ログファイルに全角は来ないだろう -> 「あ」をsplit文字に使う |
---|
374 | プログラミングしない人にはこちらの方が分かりやすい |
---|
375 | gyo というコマンドで行数を数える |
---|
376 | wcはオプションが必要、遅い |
---|
377 | 一億行のparasort -> 20秒 |
---|
378 | keta コマンド |
---|
379 | open-usp-tukubai |
---|
380 | FreeBSD ports |
---|
381 | |
---|
382 | デバッグはteeとheadコマンドを使っている |
---|
383 | |
---|
384 | FreeBSD 9 新機能 |
---|
385 | 後藤大地 @daichigoto |
---|
386 | さらに先の未来10へ & 最小特権オペレーション Capsicum |
---|
387 | |
---|
388 | ONGS オングス 代表取締役 |
---|
389 | |
---|
390 | FreeBSD committer |
---|
391 | FreeBSD unionfsの再設計と再実装 |
---|
392 | FreeBSD Daily Topics |
---|
393 | 可能な限りデイリーでFreeBSDのトピックをアップ |
---|
394 | |
---|
395 | FreeBSD Expert 2012 Digital Edition |
---|
396 | EPUBとHTMLで |
---|
397 | 今すぐ購入しよう! |
---|
398 | |
---|
399 | ZFSv28 |
---|
400 | 「ZFSのバージョンは上げない」が安定運用の鉄則 |
---|
401 | どうしても新しい機能が使いたい場合は新しいサーバを作ってコピーが良い |
---|
402 | 重複排除の機能 |
---|
403 | 実装上非常に大容量のメモリが必要となる |
---|
404 | 4GB以上、8GB~が推奨 |
---|
405 | AMD64版が推奨 |
---|
406 | v28以降のコードは出るのか |
---|
407 | Oracleの動きが分からない |
---|
408 | 暗号化はGEOMを使うという手もある |
---|
409 | 最小特権オペレーション Capsicum |
---|
410 | NFSv4のサポート |
---|
411 | nfsuserdが新しく追加 |
---|
412 | useridとgroupidのマッピングを行う必要が無くなったため |
---|
413 | デーモンの起動する順序が重要 |
---|
414 | rcoderコマンドで確認出来る |
---|
415 | nfscallbackd |
---|
416 | コールバックの機能を使いたいときは有効にする |
---|
417 | MacOSX LionからNFSv4にアクセス出来るようになった |
---|
418 | USF2 |
---|
419 | Soft Updatesジャーナリング機能 |
---|
420 | どのタイミングで再起動してもデータは壊れないといわれている |
---|
421 | メタデータとデータ本体の整合性がとれなくなることはある |
---|
422 | スナップショット機能 |
---|
423 | 起動時にfsckが掛かる場合、バックグラウンドfsckを行うために用いる |
---|
424 | ただし、I/O負荷が高いので、実用には耐えかねる |
---|
425 | FreeBSDでは、Soft Updatesの操作に対してジャーナルログを取るようにした |
---|
426 | ブロックサイズとフラグメントサイズが引き上げられた |
---|
427 | dumpfsを見ると分かる |
---|
428 | UFS vs ZFS |
---|
429 | 必ずしもZFSが良いとは限らない |
---|
430 | 小さいファイルが大量にある場合はUSFは高速で動く |
---|
431 | BSD Installの導入 |
---|
432 | sysinstallの欠点 |
---|
433 | 最近のFreeBSDで導入された機能を使用出来ない |
---|
434 | CUI installer |
---|
435 | OSの機能をフルに使う場合は、Cで書くよりもシェルスクリプトで実装した方が拡張しやすい |
---|
436 | GUIインストーラがどうしても必要であれば、PC-BSDを使うと良い |
---|
437 | TCP輻輳制御アルゴリズムの切替え |
---|
438 | 本書ではjailとVImageを使って別々のネットワークスタックを用意し、個別の輻輳制御を試している |
---|
439 | 動的切替えが重要な理由 |
---|
440 | 無線の輻輳制御と高速なネットワークの輻輳制御を一つのアルゴリズムで行うのは現実的ではない |
---|
441 | v6オンリーカーネル |
---|
442 | v4が有効になっていると、v4が影響して問題が出ているのか、分かりにくい |
---|
443 | v4オンリー、IP無しのカーネルも可能 |
---|
444 | ATAサブシステムがCAMサブシステムに統合された |
---|
445 | disk ad -> adaに名前が変更になった |
---|
446 | ataraidが使えなくなった |
---|
447 | GRAIDを使って |
---|
448 | GPTがデフォルトへ |
---|
449 | MBRの制限が無くなったので、スライスを使わなくなっている |
---|
450 | FreeBSD 10へ |
---|
451 | USF2のライブラリサイジング |
---|
452 | BHyVe+jail |
---|
453 | GCC -> clang |
---|
454 | GPL3への懸念 |
---|
455 | どうなるか分からない部分はある |
---|
456 | Capsicum |
---|
457 | ケーパビリティの実装の一つ |
---|
458 | FreeBSDの既存のリソース保護機能 |
---|
459 | 保護ドメイン |
---|
460 | アクセス制御リスト |
---|
461 | 複数の保護レベルを持ちたいとき |
---|
462 | 特に問題になるのはChromeのようなアプリケーション |
---|
463 | 最小特権オペレーション |
---|
464 | エンジニアが学習する量が非常に少なくて済む |
---|
465 | ファイルディスクリプタに、どこまでアクセスして良いか書かれている |
---|
466 | cap_enter(); |
---|
467 | イメージとしては、プロセスが自分でjailの中に飛び込んでいく感じ |
---|
468 | ケーパビリティに入った後にopenしようとするとエラーになる |
---|
469 | 一度ケーパビリティモードに入ると、forkしても出られない |
---|
470 | Chromeの実装における書くOSの追加コード |
---|
471 | Windows 20k以上 |
---|
472 | FreeBSD 100 |
---|
473 | |
---|
474 | FreeBSDサーバ構築・運用ガイド |
---|
475 | 労力の割に儲からないので、これが最後のFreeBSD本になるかも… |
---|
476 | |
---|
477 | ZFSの特許に対するFreeBSDの対応 |
---|
478 | ディベロッパーからの回答「I don't know.」 |
---|
479 | 会社に任せているので分からない |
---|
480 | ライセンス的には問題ないでしょう |
---|
481 | dtraceは現状のまま取り込むことは出来なさそう |
---|
482 | |
---|
483 | @sora_h |
---|
484 | |
---|
485 | Self Introduction |
---|
486 | Rubyコミッター |
---|
487 | 中卒フリーター (オワコン最終兵器) |
---|
488 | cookpad |
---|
489 | 新幹線通勤 |
---|
490 | 飯テロ |
---|
491 | |
---|
492 | tweet紹介でほぼ終わった |
---|
493 | |
---|
494 | 「あと33分の質問出来るよ」 |
---|
495 | |
---|
496 | Nyarlathotep |
---|
497 | @hiromu1996 |
---|
498 | |
---|
499 | Self Introduction |
---|
500 | 「ちゃんと高校に行っています!」 |
---|
501 | 未踏の合宿から直接来ました |
---|
502 | 名状しがたいプログラミング言語nyaruko |
---|
503 | brainfuck置き換え(笑) |
---|
504 | |
---|
505 | Esolangの恐ろしさを教えてやる |
---|
506 | |
---|
507 | SKIコンビネータ |
---|
508 | チューリング完全 |
---|
509 | Uコンビネータ |
---|
510 | チューリング完全 |
---|
511 | 同級生の純粋関数型言語野郎に、Iotaの命令置換じゃんといわれた |
---|
512 | ニャルコンビネータとか作る |
---|
513 | |
---|
514 | ------------------------------------------------ |
---|
515 | LTタイム |
---|
516 | |
---|
517 | m4で実用的プログラミング |
---|
518 | @a4lg |
---|
519 | |
---|
520 | 最初にお詫び |
---|
521 | 例によって手抜き |
---|
522 | ネタかぶり… => @hiromu1996 |
---|
523 | m4とは |
---|
524 | きわめて実用的なマクロ言語 |
---|
525 | CPPなどよりはるかに自由度が高い |
---|
526 | いろいろな所で使われている |
---|
527 | configureスクリプト (autoconf) |
---|
528 | sendmail |
---|
529 | posix |
---|
530 | m4でプログラミング |
---|
531 | マクロの中で同じマクロが出現しても良い |
---|
532 | CPP: #define a a -> a |
---|
533 | m4: define(`a', `a()')a() -> 無限ループ |
---|
534 | マクロの中から新しいマクロを定義出来る |
---|
535 | GNUの拡張はもはやカオス |
---|
536 | m4 言語 |
---|
537 | クオート |
---|
538 | `文字列' |
---|
539 | ``マクロ展開を抑制'' |
---|
540 | dnl コメント |
---|
541 | マクロ変数 |
---|
542 | |
---|
543 | ifelse() |
---|
544 | 数値計算をやる expr(`数式') |
---|
545 | 便利すぎるので今回は禁止 |
---|
546 | incr(`') / decr(`') |
---|
547 | m4における再帰 |
---|
548 | 再帰 = ループ ≠ 再帰呼び出し |
---|
549 | m4におけるマクロはスタックを使わない |
---|
550 | m4におけるマクロ定義 |
---|
551 | = スタック |
---|
552 | マクロ定義はスタック状に詰むことが出来る |
---|
553 | 数々の黒魔術 |
---|
554 | ループ |
---|
555 | Diversion |
---|
556 | exprを使う |
---|
557 | m4はチューリング完全なのでは? |
---|
558 | brainf*ck処理系の実装 |
---|
559 | DEMO |
---|
560 | trコマンドで、brainf*ckの入力をm4のマクロに変換 |
---|
561 | |
---|
562 | おまけ |
---|
563 | 会場で10分で作った「名状しがたいプログラミング言語」 |
---|
564 | github:a4lg |
---|
565 | |
---|
566 | Arduinoで作る耳grep |
---|
567 | @katsyoshi |
---|
568 | whoami |
---|
569 | mikutter |
---|
570 | fav.rb, pakuri.rb |
---|
571 | 耳grep |
---|
572 | 2012/2/19 盛大なgrep TL |
---|
573 | バイナリにwavヘッダ |
---|
574 | Arduino for 耳grep |
---|
575 | バイトごとに音を鳴らそう |
---|
576 | headerとか面倒 |
---|
577 | PCでやっても面白くない |
---|
578 | => ではArduinoで |
---|
579 | Arduinoとは |
---|
580 | PICみたいなもの |
---|
581 | プログラマブル |
---|
582 | DEMO |
---|
583 | 再生が速すぎて…… |
---|
584 | 1MBで30分近く掛かる |
---|
585 | おわり |
---|
586 | 聞こえにくかった? |
---|
587 | ノイズですまんかった |
---|
588 | バイナリアンだったらもう一工夫在るのかなぁ |
---|
589 | |
---|
590 | grepはどこでやるのでしょう? |
---|
591 | 考えてなかった! |
---|
592 | シリアルのレートは9600で、サンプリングレートは? |
---|
593 | そのまま出ている |
---|
594 | バイトを10倍して、40を足している |
---|
595 | |
---|
596 | |
---|
597 | Software Development with Editor |
---|
598 | @suma90h |
---|
599 | |
---|
600 | Interest |
---|
601 | Developing Hex Editor |
---|
602 | |
---|
603 | Development life-cycle with Text Editor |
---|
604 | 我々は毎日何を行っているのだろう? |
---|
605 | テキストエディタはこのままでいいのか? |
---|
606 | |
---|
607 | KernelとVMの共通点 |
---|
608 | ハードウェアの抽象化 |
---|
609 | リソース管理 |
---|
610 | APIの提供 |
---|
611 | テキストエディタは? |
---|
612 | テキスト内部を気にせず編集 -> 抽象化 |
---|
613 | 編集バッファ -> リソース管理 |
---|
614 | elisp -> VM? |
---|
615 | コンテキストスイッチ |
---|
616 | kernel <=> アプリ |
---|
617 | VMM <=> kernel -> 今回は考えない |
---|
618 | エディタ <=> 人間 |
---|
619 | エディタと人間 |
---|
620 | ソフトウェア開発において |
---|
621 | 考え、設計し、 |
---|
622 | 実装する with Editor |
---|
623 | ビルド、実行、デバッグ |
---|
624 | |
---|
625 | コンテキストスイッチ |
---|
626 | |
---|
627 | バイナリエディタでは |
---|
628 | 16進数ダンプ、ASCIIなど読める部分を読む |
---|
629 | 色で見る、耳? |
---|
630 | 考える |
---|
631 | データを抜き出したり加工したり |
---|
632 | |
---|
633 | 複数のことを同時に考えるのは人間には無理ぽ |
---|
634 | GB単位のバイナリデータを目grepは無理 |
---|
635 | バイナリエディタで支援 |
---|
636 | |
---|
637 | 大規模ソフトウェア開発 |
---|
638 | コード量が増えると一度に編集出来ない |
---|
639 | |
---|
640 | 未来のエディタに求めたいこと |
---|
641 | バイナリエディタ |
---|
642 | 求められる機能ははっきりしている -> ok |
---|
643 | テキストエディタは? |
---|
644 | Terminalとエディタ、人間のコンテキストスイッチを減らしたい |
---|
645 | でも、マルチタスクしたい |
---|
646 | リファレンス、ブラウザを見たい |
---|
647 | 分散システムの結合テストとかもやる |
---|
648 | |
---|
649 | |
---|
650 | SAN値論理と名状しがたいプログラミングSAN値Prolog |
---|
651 | たけおか @takeoka |
---|
652 | |
---|
653 | 二値論理 |
---|
654 | |
---|
655 | 三値論理 |
---|
656 | e進数がもっとも情報の表現効率がいい |
---|
657 | 2.72進数というのは扱いにくい -> 三値論理 |
---|
658 | |
---|
659 | SAN値とは |
---|
660 | |
---|
661 | 論理型言語にSAN値というものを入れる |
---|
662 | 評価時の「頭のおかしさ具合」を「SAN値」と呼ぶ |
---|
663 | |
---|
664 | 評価時に、SAN値に近いSAN度を持つ節が選ばれる |
---|
665 | |
---|
666 | 節は評価して、真であったらSAN値が比較される |
---|
667 | |
---|
668 | 似た研究 |
---|
669 | ファジィ論理 Prolog |
---|
670 | 閾値より大きな事実が選ばれる |
---|
671 | |
---|
672 | 「大きい」ではなく、SAN値に近いものを選ぶ |
---|
673 | |
---|
674 | Lispで書いたPrologの処理系 |
---|
675 | |
---|
676 | 「set-sanchi」 |
---|
677 | プロンプトが「にゃ?」 |
---|
678 | |
---|
679 | |
---|
680 | 軽快なPlan 9 Update Illumos KVM上陸 |
---|
681 | @go_vm |
---|
682 | |
---|
683 | 軽快なPlan9では |
---|
684 | KVMの上で動いているPlan9 |
---|
685 | ネットワークに繋がっていないゲストがOSとのsocketを呼び出して、外のネットワークからデータを取ってくる |
---|
686 | ハイパーコール |
---|
687 | |
---|
688 | Linux KVMがIllmosに移植された |
---|
689 | Joent社の成果 |
---|
690 | Node.jsとかもやっているところ |
---|
691 | |
---|
692 | コードの構造は同じ |
---|
693 | Linux KVMが読めれば同じように読める |
---|
694 | ただしコードはBSDスタイル |
---|
695 | |
---|
696 | 床抜き |
---|
697 | clojureでスタブを書いた |
---|
698 | 起動中にbell研のサイトに繋がってhtml取ってくる |
---|
699 | しかし、ifconfigするとネットワークは繋がっていない |
---|
700 | Illmos KVMの利点 |
---|
701 | ネットワークの設定が楽 |
---|
702 | dtraceが使える |
---|
703 | いろんなイベントを観察出来る |
---|
704 | |
---|
705 | 軽快なBHyVe |
---|
706 | @syuu1228 |
---|
707 | |
---|
708 | BHyVeの現状 |
---|
709 | 独自ローダからFreeBSDカーネルをゲストOSとしてロード、ブート出来るだけ |
---|
710 | BIOSが動かないので、ブートローダが動かない |
---|
711 | BIOSの仕組み |
---|
712 | int13h -> ソフト割込み -> CPUが割込みベクタを読む -> BIOS状のハンドラを実行 |
---|
713 | KVMでは |
---|
714 | SeaBIOSがHWへのIOを実行 |
---|
715 | 実機状のBIOSと同じ動きをする |
---|
716 | IOはTrapされてQEMUで処理される |
---|
717 | SeaBIOSを載せればいいやん |
---|
718 | 却下 <= GPLだから |
---|
719 | BSDLでBIOSをエミュレートするソフトは既にある |
---|
720 | doscmdとか (FreeBSD状で動作) |
---|
721 | 仮想8086モードでDOSプログラムを動作 |
---|
722 | BIOSコールなどをtrap |
---|
723 | 32bit実装だし、移植するならhypervisor側に入れた方が良い |
---|
724 | ソフト割込みの時点でTrapするようにする |
---|
725 | IntelVTの機能でソフト割込みをTrapすると… |
---|
726 | 全てのソフト割込みがTrapされてしまう |
---|
727 | 多くのOSがシステムコールにソフト割込みを使っている |
---|
728 | ソフト割込みの中からBIOSコールだけを抽出したい |
---|
729 | ステート管理が必要になる |
---|
730 | リアルモードを用いるOSではシステムコールでTrapがかかる |
---|
731 | 軽快なBIOSコール |
---|
732 | VMの床抜き術はここでも使えます! |
---|
733 | 疑似BIOSを用いる |
---|
734 | 疑似BIOSがVMCALL命令を発行 |
---|
735 | |
---|
736 | AMD対応は? |
---|
737 | ToDOリストに載ってる段階 |
---|
738 | |
---|
739 | つくっておぼえる!仮想マシン ~直前で実装編~ |
---|
740 | @siritori |
---|
741 | @iorivur |
---|
742 | |
---|
743 | MIPSのマシンを |
---|
744 | erlangで |
---|
745 | haskellで |
---|
746 | |
---|
747 | 実装してみました |
---|
748 | 昨日頑張りました |
---|
749 | 意地でも手続き型言語では書かない |
---|
750 | Erlang |
---|
751 | アクターモデルな並列指向言語 |
---|
752 | OTPというすごいフレームワークを使うための言語 |
---|
753 | 出来ている所 |
---|
754 | 出来ていない所 |
---|
755 | ELFローダ |
---|
756 | レジスタとメモリ |
---|
757 | ETS |
---|
758 | 命令の実装 |
---|
759 | 高階関数 |
---|
760 | 感想 |
---|
761 | MIPSのVMを複数立ち上げるのも朝飯前なのでやってみたい |
---|
762 | Haskell |
---|
763 | みんなMonadになる |
---|
764 | できているところ |
---|
765 | できていないところ |
---|
766 | 例外、コプロセッサ命令、ジャンプ命令 |
---|
767 | 実装 |
---|
768 | 再帰がそのままクロックのようなイメージ |
---|
769 | Erlang |
---|
770 | 実行中にコードの書き換えが可能 |
---|
771 | Haskell |
---|
772 | インタラクティブにレジスタに対する命令が入力出来る |
---|
773 | |
---|
774 | なんでMIPSなの? |
---|
775 | さすがにx86をやる勇気はなかった |
---|
776 | なんでErlangなの? |
---|
777 | 関数型言語を触ってみたかった |
---|
778 | ビットマッチングが出来たから |
---|
779 | |
---|
780 | Xとかオワコンじゃね…っていう男の人って |
---|
781 | @naota344 |
---|
782 | |
---|
783 | 自己紹介 |
---|
784 | SD誌でLinuxカーネルについて連載している |
---|
785 | |
---|
786 | X.ORGのコード |
---|
787 | スパゲティ |
---|
788 | XはもういやなのでWayland |
---|
789 | Xのアーキテクチャ |
---|
790 | X serverじゃまじゃね? |
---|
791 | Wayland |
---|
792 | client <-> Compositor <-> KMS / evdev |
---|
793 | Wayland Terminal |
---|
794 | フォントが気持ち悪い |
---|
795 | デモ |
---|
796 | Wayland自作クライアント |
---|
797 | 画像を表示するクライアント |
---|
798 | Wayland |
---|
799 | Waylandはプロトコル |
---|
800 | オブジェクト |
---|
801 | wl_display |
---|
802 | コアオブジェクト |
---|
803 | wl_shm |
---|
804 | クライアントとのメモリ共有 |
---|
805 | などなど |
---|
806 | メッセージ |
---|
807 | UNIXドメインソケットで送られる |
---|
808 | クライアント -> サーバ |
---|
809 | リクエスト |
---|
810 | 逆はイベント |
---|
811 | 実装 |
---|
812 | Haskellで書いた |
---|
813 | 問題点 |
---|
814 | クライアントIDを適当にやったらSEGVした |
---|
815 | intがうまく渡せないときがある |
---|
816 | Haskellだけど実装があれ |
---|
817 | Fdをメッセージと一緒に渡すので、パッチが必要だった |
---|
818 | |
---|
819 | |
---|
820 | x86_64/Linuxに独自メモリ空間を買って増設 |
---|
821 | @nminoru_jp |
---|
822 | |
---|
823 | メインフレームのソフトウェアエミュレータ |
---|
824 | 富士通のメインフレームのエミュレータ |
---|
825 | IBM System/370互換 |
---|
826 | エミュレータを高速化するには |
---|
827 | ゲストとホストでCPUが異なる計算機を想定 |
---|
828 | ARM,MIPS,SPARCなどをx86_64上で |
---|
829 | |
---|
830 | ゲストの仮想メモリがネック |
---|
831 | ホストのMMUを使いたい |
---|
832 | |
---|
833 | どうやって使う |
---|
834 | ・OSを自前で作る |
---|
835 | ・OSから一部のCPUを切り離して独自処理 |
---|
836 | ・既存のOSを改造 |
---|
837 | |
---|
838 | Linuxの仮想メモリの中に自分専用のVMを! |
---|
839 | |
---|
840 | /proc/oreorevm をmmap |
---|
841 | CPU命令をインタープリタがロード・ストア |
---|
842 | ゲストのTLBミスなどはSIGSEGV |
---|
843 | |
---|
844 | Hugetlbを参考に |
---|
845 | Shadow Page Table |
---|
846 | ゲストの仮想メモリ空間をホストのページテーブルに組み込む |
---|
847 | |
---|
848 | 俺俺VMの利点 |
---|
849 | ゲストCR3を切替え対応 |
---|
850 | ゲストのコンテキストスイッチに応じてSPTの書き換えが必要 |
---|
851 | 毎回破壊するとコストが高いので、過去のSPTも保存 |
---|
852 | PUDをゲスト仮想空間一つに割りあてると効率がよい |
---|
853 | ゲストモード対応 |
---|
854 | ゲストにもusermodeとsupervisormodeがある |
---|
855 | JITコンパイラ対応 |
---|
856 | まとめ |
---|
857 | 俺俺VMではx86_64のMMUが使える! |
---|
858 | カーネルのリベースが必要だが、大変 |
---|
859 | なにかうまい手はないか…… |
---|
860 | |
---|
861 | bcacheのベンチマーク |
---|
862 | |
---|
863 | 低速で大容量のブロックデバイスを高速で小容量のブロックデバイスでキャッシュすることで |
---|
864 | 高速で大容量のブロックデバイスを実現しよう! |
---|
865 | |
---|
866 | consumer -> bcache -> SSD -> HDD |
---|
867 | まだLinuxメインラインに入っていない |
---|
868 | |
---|
869 | /dev/bcache0 などという名前のブロックデバイスが出来る |
---|
870 | |
---|
871 | ベンチマーク1 |
---|
872 | iozone |
---|
873 | HDD: Seagate 2.5inch 750G 7200rpm |
---|
874 | SSD: Intel 520 120GB |
---|
875 | RAID5: LSI MegaRAID |
---|
876 | Write |
---|
877 | HDD -> SSDで5%~7%の性能アップ |
---|
878 | Rewrite |
---|
879 | だいたい同じくらい |
---|
880 | Random Write |
---|
881 | だいたい同じくらい |
---|
882 | |
---|
883 | あまり利点が見つけられなかった |
---|
884 | |
---|
885 | ベンチマーク2 |
---|
886 | KVMで運用している既存の共用ホスティングサーバのディスクイメージに対するvfs_read/writeをSystemTapして記録 |
---|
887 | レイテンシを計測 |
---|
888 | |
---|
889 | bcacheありだと、レイテンシのばらつきがほとんど無い |
---|
890 | 無しだと、レイテンシがばらついてしまう |
---|
891 | ただし、使っているときより速いこともある |
---|
892 | |
---|
893 | FBのflashcacheとどう違うのか? |
---|
894 | write backとして使った時に、SSDにだけ書かれてHDDに書かれていない状態で電源が落ちても |
---|
895 | bcacheだと救える |
---|
896 | キャッシュの扱い方が違う |
---|
897 | bcache -> b-tree |
---|
898 | flashcache -> CPUのキャッシュと同じやり方 |
---|
899 | bcacheだとアクセスが偏らないみたい |
---|
900 | |
---|
901 | Tinycc on NaCl |
---|
902 | @shinh |
---|
903 | |
---|
904 | モチベーション |
---|
905 | ブラウザでちょっとCを実行出来ると嬉しい |
---|
906 | |
---|
907 | IOCCCのコードを実行してみよう |
---|
908 | |
---|
909 | 仕組み |
---|
910 | Tiny C Compiler |
---|
911 | セルフコンパイル可能な3301BytesのCコンパイラ |
---|
912 | TCCの特徴 |
---|
913 | コンパイルは速い |
---|
914 | 出来たバイナリは遅い? |
---|
915 | 割といろんなものがコンパイル出来る |
---|
916 | コンパイラであり、プリプロセッサであり、リンカでもあり、ローダでもある |
---|
917 | 3万行くらい |
---|
918 | Native Client |
---|
919 | CUIで実行するためのloaderもある |
---|
920 | NaCl Sandboxのつらいところ |
---|
921 | いろんなところがころころ変わる |
---|
922 | ドキュメントがない |
---|
923 | TinyCC on NaCl |
---|
924 | ToDO |
---|
925 | 頑張った割にまだ色々動かない |
---|
926 | |
---|
927 | kernelvim探検隊 |
---|
928 | @shougomatsu |
---|
929 | |
---|
930 | Vim枠 |
---|
931 | vinariseについて |
---|
932 | x86勉強会で発表する内容の予告編 |
---|
933 | XXDには問題があるので、vinariseを作っている |
---|
934 | |
---|
935 | bitmap viewer |
---|
936 | |
---|
937 | 驚異のvimスクリプトテクノロジー |
---|
938 | 動的にバッファが増えていく……! |
---|
939 | |
---|
940 | MBCSにも対応! |
---|
941 | bitmap viewerによって目grepが可能に |
---|
942 | |
---|
943 | バイナリっぽいデータが見つかったらvinariseで開く、といったことも可能 |
---|
944 | |
---|
945 | あなたにとってVimとは? |
---|
946 | どの要素も持っているが、エディタではないことは確か |
---|
947 | 彼女とVim、どっちをとる? |
---|
948 | 一応、彼女の方が大切 |
---|
949 | bviとはどう違うか |
---|
950 | メモリ展開しない |
---|
951 | 日本語対応 |
---|