Submit Search
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
141 likes
44,466 views
Richie Shellshoccar
シェルスクリプトがいかに最強の言語であるかを、POSIX原理主義集団「シェルショッカー日本支部」がとくと教えてやる。 ― 2016/03/20@歌舞伎座.tech#9
Software
Read more
1 of 59
Download now
Downloaded 58 times
1
2
3
4
5
6
7
8
9
10
11
Most read
12
13
14
15
16
17
18
19
20
Most read
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Most read
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
More Related Content
PDF
マイクロサービスアーキテクチャとは何か
Yusuke Suzuki
PPTX
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
PDF
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
PDF
CRDT in 15 minutes
Shingo Omura
PDF
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
PDF
Dockerからcontainerdへの移行
Kohei Tokunaga
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
PPTX
世界一わかりやすいClean Architecture
Atsushi Nakamura
マイクロサービスアーキテクチャとは何か
Yusuke Suzuki
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
CRDT in 15 minutes
Shingo Omura
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Dockerからcontainerdへの移行
Kohei Tokunaga
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
世界一わかりやすいClean Architecture
Atsushi Nakamura
What's hot
(20)
PDF
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
PDF
Rest ful api設計入門
Monstar Lab Inc.
PDF
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
sasezaki
PDF
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
PDF
Where狙いのキー、order by狙いのキー
yoku0825
PDF
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
PPTX
20171005 告白に学ぶ http status code
Shinichi Takahashi
PDF
Spring Bootをはじめる時にやるべき10のこと
心 谷本
PDF
コスト最適化概論
RikiMakita
PDF
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
PDF
アプリを成長させるためのログ取りとログ解析に必要なこと
Takao Sumitomo
PDF
REST API のコツ
pospome
PDF
俺の俺による俺のための App Service Environment
Sunao Tomita
PDF
ナレッジグラフとオントロジー
University of Tsukuba
PDF
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
PDF
RESTful Web アプリの設計レビューの話
Takuto Wada
PDF
各種データベースの特徴とパフォーマンス比較
株式会社オプト 仙台ラボラトリ
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
PDF
Java8から17へ
onozaty
PDF
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
Rest ful api設計入門
Monstar Lab Inc.
PHP、おまえだったのか。 いつもHTTPメッセージを 運んでくれたのは。
sasezaki
Amazon S3による静的Webサイトホスティング
Yasuhiro Horiuchi
Where狙いのキー、order by狙いのキー
yoku0825
爆速クエリエンジン”Presto”を使いたくなる話
Kentaro Yoshida
20171005 告白に学ぶ http status code
Shinichi Takahashi
Spring Bootをはじめる時にやるべき10のこと
心 谷本
コスト最適化概論
RikiMakita
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
アプリを成長させるためのログ取りとログ解析に必要なこと
Takao Sumitomo
REST API のコツ
pospome
俺の俺による俺のための App Service Environment
Sunao Tomita
ナレッジグラフとオントロジー
University of Tsukuba
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
RESTful Web アプリの設計レビューの話
Takuto Wada
各種データベースの特徴とパフォーマンス比較
株式会社オプト 仙台ラボラトリ
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
Java8から17へ
onozaty
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
Ad
Viewers also liked
(16)
PDF
POSIX中心主義と情報科学教育
Tomoyuki Matsuura
PDF
恐怖!シェルショッカー1号男
Tomoyuki Matsuura
PDF
TeX vs Wordの不毛な争い
Hidetsugu Tamura
PDF
【企画書】ReceReco:新規事業討議用社内資料
Find Job Startup
PDF
P2 P 奨学金プロジェクト Ver3 5
Daisuke Miyoshi
PDF
【企画書】UIscope:MOVIDA JAPAN_Demo Day用資料
Find Job Startup
PDF
T TIME 滞在時間割キャンペーン(第4回販促会議企画コンペティション)
Keita Takizawa
PDF
PIXTA_シードラウンド用事業プラン説明資料
Find Job Startup
PDF
【企画書】チャットワーク:社内検討用資料
Find Job Startup
PDF
Cyta.jp_サービスEC説明資料
Find Job Startup
PDF
【企画書】omiai:IVS_LAUNCH PAD用資料
Find Job Startup
PDF
【企画書】gamba!(ガンバ):サムライインキュベート様向け_企画プレゼン資料
Find Job Startup
PDF
BASE_プレゼン用サービス説明資料
Find Job Startup
PDF
創業時の「nanapiのナマ企画書」
Find Job Startup
PDF
メルカリ_サービス説明資料
Find Job Startup
PDF
ストリートアカデミー_ローンチ前企画書
Find Job Startup
POSIX中心主義と情報科学教育
Tomoyuki Matsuura
恐怖!シェルショッカー1号男
Tomoyuki Matsuura
TeX vs Wordの不毛な争い
Hidetsugu Tamura
【企画書】ReceReco:新規事業討議用社内資料
Find Job Startup
P2 P 奨学金プロジェクト Ver3 5
Daisuke Miyoshi
【企画書】UIscope:MOVIDA JAPAN_Demo Day用資料
Find Job Startup
T TIME 滞在時間割キャンペーン(第4回販促会議企画コンペティション)
Keita Takizawa
PIXTA_シードラウンド用事業プラン説明資料
Find Job Startup
【企画書】チャットワーク:社内検討用資料
Find Job Startup
Cyta.jp_サービスEC説明資料
Find Job Startup
【企画書】omiai:IVS_LAUNCH PAD用資料
Find Job Startup
【企画書】gamba!(ガンバ):サムライインキュベート様向け_企画プレゼン資料
Find Job Startup
BASE_プレゼン用サービス説明資料
Find Job Startup
創業時の「nanapiのナマ企画書」
Find Job Startup
メルカリ_サービス説明資料
Find Job Startup
ストリートアカデミー_ローンチ前企画書
Find Job Startup
Ad
Similar to 恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
(7)
PDF
2017-12-04 Linuxの基本構造とBashでの扱い方
浩平 渡邉
PDF
Unix
Hiramatsu Ryosuke
PDF
Unix architecture
raw-hide
PPTX
20150227 オープンソースカンファレンス Tokyo 2015 Spring
Ryuichi Ueda
PDF
PowerShell+Lisp = ? (第2回残パン会)
Kenta USAMI
PDF
Unix 基礎
Sho A
PDF
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
2017-12-04 Linuxの基本構造とBashでの扱い方
浩平 渡邉
Unix
Hiramatsu Ryosuke
Unix architecture
raw-hide
20150227 オープンソースカンファレンス Tokyo 2015 Spring
Ryuichi Ueda
PowerShell+Lisp = ? (第2回残パン会)
Kenta USAMI
Unix 基礎
Sho A
密着!わたしのコンソールアプリ開発環境
Fumihito Yokoyama
恐怖!シェルショッカーの POSIX原理主義シェルスクリプト
1.
恐怖 シェルショッカーのPOSIX原理主義シェルスクリプト シェルショッカー日本支部 https://github.com/ShellShoccar-jpn 1 2016年3月20日@歌舞伎座.tech#9
2.
全世界 70000000000000000000000人 くらいのプログラマー達よ、 2
3.
お前たちは、 今の開発言語、開発環境に 満足しておるのか? 3
4.
OS、言語、ライブラリー、 ミドルウェア…… 毎日飽きもせずver. up、 4
5.
突然動かなくなって、 徹夜で泣きながら修正…… とか... 5
6.
そういう目に遭わずに 済む奴はいるのか? 6
7.
より便利な競合ソフトの登場、 代わりに、消えていくソフト…… 7 Developer Survey Results
2016 IV. Trending Tech on Stack Overflow (Losers) http://stackoverflow.com/research/developer-survey-2016
8.
せっかく勉強したのに 開発現場から消え、 知識が役に立たなくなる…… 8
9.
10年後の自分は、 10年分の成長が できているのか…… 9
10.
10 秘密結社シェルショッカー。
11.
POSIX中心主義 プログラミング (POSIX Centric Programming) 秘密結社シェルショッカーの 11
12.
POSIX中心主義 ― 概要 UNIX系OSの最低限のI/Fを定めた規格、 「POSIX」に極力準拠させる プログラミング方針 12
13.
POSIX中心主義 ― 概要 POSIX準拠させる理由①
― 準拠OSが多い 明示的準拠……商用UNIX、 Mac OS Xなど 暗示的準拠……FreeBSD、 LinuxなどのPC UNIX →どこへ持っていっても動く 13
14.
POSIX中心主義 ― 概要 POSIX準拠させる理由②
― 殆ど改定しない 非営利団体の国際規格 準拠するベンダーが多いので簡単に改定できない →長年動く (動いてきた) 14
15.
POSIX中心主義 ― 概要 過酷な環境変化に耐える 「ソフトウェアの乾パン」 15
16.
POSIX中心主義 ― 概要 複雑な状態変質がイヤで Immutable
Infrastructure? 16
17.
POSIX中心主義 ― 概要 必要ない! サーバーよ、好きなだけ変質しろ! Be
mutable! infrastructure 17
18.
POSIX中心主義 ― 実践 3つの方針を導入 18 ① POSIX 原理主義 ②交換可能性担保 ③ W3C 原理主義 単独ホスト
または Webサーバー Webクライアント
19.
POSIX中心主義 ― 実践①POSIX原理主義 1.
POSIXコマンドだけで実装 AWK、sed等はチューリング完全。 2. 言語はシェルスクリプト POSIXにあるのがそれだから。 → POSIXの範囲で、どんな計算も書ける。 19 POSIX公式情報サイト http://pubs.opengroup.org/onlinepubs/9699919799/
20.
POSIX中心主義 ― 実践①POSIX原理主義 例(1)―XMLパーサ(parsrx.sh)
https://github.com/ShellShoccar-jpn/Parsrs/blob/master/parsrx.sh XML→行列指向フォーマット(XPath - value)への変換 sed, AWK等、26個のコマンドをパイプで連結し生成。 JSON, CSVパーサも同様に実装済。 20 <文具購入リスト 会員名="文具 太郎"> <購入品>はさみ</購入品> <購入品>ノート(A4,無地)</購入品> <購入品>シャープペンシル</購入品> <購入品><取寄商品>替え芯</取寄商品></購入品> <購入品>クリアファイル</購入品> <購入品><取寄商品>6穴パンチ</取寄商品></購入品> </文具購入リスト> /文具購入リスト/@会員名 文具 太郎 /文具購入リスト/購入品 はさみ /文具購入リスト/購入品 ノート(A4,無地) /文具購入リスト/購入品 シャープペンシル /文具購入リスト/購入品/取寄商品 替え芯 /文具購入リスト/購入品 /文具購入リスト/購入品 クリアファイル /文具購入リスト/購入品/取寄商品 6穴パンチ /文具購入リスト/購入品 /文具購入リスト ¥n ¥n ¥n ¥n ¥n ¥n ¥n
21.
POSIX中心主義 ― 実践①POSIX原理主義 例(2)―RDBMS的操作
データは半角空白区切りのテキストファイル持ち AWK, grep, sort, join等の組み合わせでselect文相当が実現 → SQL文(RDBMS)など要らぬ! 21 SELECT MEM."会員ID", MEM."会員名" FROM blacklist AS MEM RIGHT OUTER JOIN members AS BL ON BL."会員名" = MEM."会員名" WHERE BL."会員名" IS NOT NULL ORDER BY MEM."会員ID" ASC; cat blacklist.txt | # 第1列:BL会員ID # sort -k 1,1 | ←会員IDで並替え uniq > sorted_bl.txt cat members.txt | # 第1列:会員ID 第2列:名前 # sort –k 1,1 |←会員IDで並替え join -1 1 -2 2 -v 2 sorted_bl.txt - ←BLの会員IDで joinできない行 のみを抽出 ブラックリストに掲載された会員「以外」を表示するデータ操作 SQL版 POSIX版
22.
POSIX中心主義 ― 実践①POSIX原理主義 例(3)―その他いろいろ
非Web系 乱数、 mktemp相当、 全角・半角文字相互変換、 排他制御…… Web系 Cookie、 セッション管理、 MIMEマルチパート作成・解読、Base64、 CGI変数授受…… 主にRFC文書を読みながら作る。 Webアプリ開発に必要なものまで、概ね作れる。 22
23.
POSIX中心主義 ― 実践②交換可能性担保 POSIXの範囲で実現できないもの バイナリ処理(非現実的処理速度なため) ネットワーク処理(コマンドが無く、原理的に不可) 一定条件の元、POSIX外コマンドを認める。 23
24.
POSIX中心主義 ― 実践②交換可能性担保 一定条件とは、「交換可能性」の担保 交換可能性 「現在依存している製品が使えなくなっても、同じ機 能を持つ別製品が存在し、交換できる」 (例)
Apache ←→ nginx ←→ lighttpd 等 sendmail ←→ Postfix ←→ qmail ←→ exim 等 cURL ←→ Wget そもそもPOSIX準拠OS同士には交換可能性がある。 24
25.
POSIX中心主義 ― 実践②交換可能性担保 例
― CUI版Twitterクライアント怪人「恐怖!小鳥男」 https://github.com/ShellShoccar-jpn/kotoriotoko 25
26.
POSIX中心主義 ― 実践②交換可能性担保 Twitter
APIアクセスでcURL、Wget両対応にする。 26 : s=$(mime-make -m) ct_hdr="Content-Type: multipart/form-data; boundary=¥"$s¥"" eval mime-make -b "$s" $mimemake_args | if [ -n "${CMD_WGET:-}" ]; then case "$timeout" in '') : ;; *) timeout="--connect-timeout=$timeout";; esac cat > "$Tmp/mimedata" "$CMD_WGET" ${no_cert_wget:-} -q -O - --header="$oa_hdr" --header="$ct_hdr" --post-file="$Tmp/mimedata" $timeout "$API_endpt" elif [ -n "${CMD_CURL:-}" ]; then case "$timeout" in '') : ;; *) timeout="--connect-timeout $timeout";; esac "$CMD_CURL" ${no_cert_curl:-} -s $timeout -H "$oa_hdr" -H "$ct_hdr" --data-binary @- "$API_endpt" fi : [注意] Wgetには、ファイルアップロード 機能がないため、cURLにあっ ても使わない。 →POSIX原理主義で実装 (使ったら交換不可能に なるではないか!) Wget用、 cURL用、 2つの書式で書く。
27.
POSIX中心主義 ― 実践②交換可能性担保 その他の例 メール送信コマンド
― sendjpmail sendmailコマンドの日本語対応ラッパー 主要MTAには、必ずsendmailコマンドがある。 添付ファイルにも対応 https://github.com/ShellShoccar-jpn/misc-tools/blob/master/sendjpmail 27
28.
POSIX中心主義 ― 実践③W3C原理主義 WebアプリではWebブラウザー側でも開発必要 WebブラウザーはUNIXではない。
HTML/CSS/JavaScript W3C勧告に準拠 W3C勧告は、いわば「POSIXのWebブラウザー版」 28
29.
POSIX中心主義 ― 実践③W3C原理主義 W3C勧告のHTML/CSS/JavaScript仕様のみ使用
https://www.w3.org/TR/ 個々のWebブラウザーの独自仕様は使用禁止。 独自ライブラリーも禁止 jQueryその他 W3C勧告の範囲でフルスクラッチ 29
30.
POSIX中心主義 ― 実践③W3C原理主義 Ajax処理ごとき、40行足らずでフルスクラッチ可能。
(例)https://github.com/ShellShoccar-jpn/Ajax_demo/blob/master/CLOCK.JS 30 // 1.Ajaxオブジェクト生成関数 function createXMLHttpRequest(){ if(window.XMLHttpRequest){return new XMLHttpRequest()} if(window.ActiveXObject){ try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){} try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){} try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){} } return false; } // 2.Ajax通信関数 function update_clock() { var url,xhr,to; url = get_homedir()+'CLOCK.CGI'; xhr = createXMLHttpRequest(); if (! xhr) {return;} to = window.setTimeout(function(){xhr.abort()}, 30000); xhr.onreadystatechange = function(){update_clock_callback(xhr,to)}; xhr.open('GET' , url+'?dummy='+(new Date)/1, true); xhr.send(null); } つづく→ →つづき // 3.コールバック関数 function update_clock_callback(xhr,to) { var str, elm; if (xhr.readyState === 0) {alert('タイムアウトです。');} if (xhr.readyState !== 4) {return; } window.clearTimeout(to); if (xhr.status === 200) { str = xhr.responseText; elm = document.getElementById('clock'); elm.innerHTML = str; } else { alert('サーバーが不正な応答を返しました。'); } }
31.
POSIX中心主義 ― 実践③W3C原理主義 動作例―Ajax
Clock(ボタンを押すたび時刻文字列だけ更新) http://lab-sakura.richlab.org/AJAX/CLOCK.HTML 31
32.
POSIX中心主義 ― 戦歴 (1)
郵便番号から住所を検索 http://lab-sakura.richlab.org/ZIP2ADDR/public_html/ 全国のたかが14万レコードなど、一瞬で探せる。 32
33.
POSIX中心主義 ― 戦歴 (2)
ショッピングカート(組織の資金源) https://richlab.org/coterie/ 商品・在庫データをテキストファイルで管理 Cookie等で 買い物カゴ実装 クレカ決済 (Web API)も対応 WordPressも、はてなブログも ショッピングサイト化可能 「恐怖! シェルショッカー 1号男」 → http://www.slideshare.net/tomoyukimatsura/1-php-con2014-40134119 33
34.
POSIX中心主義 ― 戦歴 (3)
鉄道運行状況表示プログラム http://metropiper.com 東京メトロのWeb APIから車両の現在位置を取得 何駅前まで列車が来ているかわかる 34
35.
POSIX中心主義 ― 戦歴 (3)
鉄道運行状況表示プログラムは、 東京メトロのコンテストに送り込んだ怪人 https://developer.tokyometroapp.jp/ オープンデータ活用コンテスト 2014年開催 35
36.
POSIX中心主義 ― 戦歴 コンテストは東京五輪を意識していた、 らしい。 2020年(=コンテストの6年後) 観光客の利便性向上のため、 スマホアプリまで広く募集。 受賞作品は、スマホアプリが 大半を占めた。 http://car.watch.impress.co.jp/docs/news/20150220_689397.html 36
37.
POSIX中心主義 ― 戦歴 審査員達よ・・・ その受賞作、2020年の 本番まで動くのか? Android、iOSアプリって6年ももつのか? 37
38.
POSIX中心主義 ― 戦歴 我らが送り込んだ怪人(作品)は、 2020年に動くことを最優先に 作ったのだがな・・・・・・ 38
39.
結論 低水準領域を学べ 39
40.
低水準領域を学べ この男も言っているぞ 「人体を理解するとよい」と。 40 報道ステーション 2016.03.17スペシャル対談2016 イチロー×稲葉篤紀 より引用
41.
低水準領域を学べ ウェイトトレーニング(シーズン前)で筋力増 ↓ 春先、打てない! ↓ シーズン中、トレーニングできず痩せる ↓ スイングスピード上がる 41
42.
低水準領域を学べ この男も学習したぞ 「ハンマーの柄の方を振り回すと強い」 ことを。 42 映画「少林寺三十六房」より
43.
低水準領域を学べ 重いハンマーを振り回す。 ↓ 先端が重くて動きが鈍く、反撃される。 ↓ 僧侶に言われ、柄を相手に向けて振り回す。 ↓ 撃退に成功 43
44.
低水準領域を学べ POSIX中心主義では、 比較的低水準領域を学習する。 44 ハードウェア ハードウェア ハードウェア カーネル シェル 言語
言語 アプリ アプリ アプリ アプリ アプリ POSIX中心主義と高級言語の学習範囲のイメージ 高級言語の学習領域 POSIXの学習領域
45.
低水準領域を学べ 同じこと。 頭でっかちは不利。 45
46.
低水準領域を学べ 道具を探し回るな! 使いこなせ! 46
47.
低水準領域を学べ コンピューターの本質を 理解するのだ。 47
48.
低水準領域を学べ POSIXシェルスクリプトは 本質に近い。 48
49.
低水準領域を学べ 「シェルスクリプトなんてクソだ!」 だと? 49
50.
低水準領域を学べ お前は、シェルスクリプトや UNIXを、 何も理解していない!! 50
51.
低水準領域を学べ 「シェルスクリプトは OS依存が激しい」 だと? 51
52.
低水準領域を学べ POSIXの仕様を読まずに 書くからだ! 52
53.
低水準領域を学べ 依存性回避のために 他言語やソフトを、OSや環境依存に苦しみながら、 コンパイル・インストール・バージョンアップしてたら、 意味がなかろうが! 53
54.
まとめ 54
55.
まとめ 基礎から学べ! 55
56.
まとめ シェルスクリプトを使え! 56
57.
まとめ POSIX原理主義の 聖典を買え! (宣伝) 57 本の形をした怪人 「すべてのUNIXで20年動くプログラムは どう書くべきか」 C&R研究所 発行 https://richlab.org/coterie/pfb.html を、全国書店に送り込んだ!
58.
まとめ ついでに、授業も受けろ (宣伝) 58 「シェルスクリプト言語論」 金沢大学@大学コンソーシアム石川で 2016年4月開講 (社会人も受講可) 組織の幹部を送り込む!
59.
今日はこれくらいに しといてやる! 59
Download