<div class="title-h1"> # トラブルエミュレーター事例集 </div> <p class="subtitle">@Takeno_hito</p> ---- ## 自己紹介 <img src="https://q.trap.jp/api/v3/public/icon/Takeno_hito" style="width:3em;" /> Takeno_hito - 22B 工学院 - プログラミング歴は一応7年目 - ゲームが趣味 - さっき焼き肉焼く手伝いしてた ---- ## 今日話そうとしてる事 - 文化祭当日に文化祭内の全員が使うシステムを作った経験 - あれこれ準備してよかった事・悪かったことを色々話したい - (そんなに面白くないかも……) ---- ## 今日話そうとしてる事 - ~~文化祭当日に文化祭内の全員が使うシステムを作った経験~~ - ~~あれこれ準備してよかった事・悪かったことを色々話したい~~ - (そんなに面白くないかも……) - 内容が増えすぎた - 自分が経験した健常者エミュレーターもどきのトラブル事例集を見よう ---- ## 0. 自分が作ったものを軽く話す (n度目) - 「CAPPUCCINO」という文化祭の来場者の行動を管理できるシステム - 予約のQRコードを用意し、来場者を確認してQR付きのリストバンドを提供 - 各展示スペースの入退室時にリストバンドのQRコードを毎回読む事で、現在地・滞在者数を管理した - そのほか、各来場者の退場時刻の設定と展示の定員の設定ができる ---- ## お品書き - 来場者不正事例集 - 運営側トラブル事例集 - 教員・チーム内トラブル事例集 ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - (何がおきたでしょう?) ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - 受験生(小学一年の女児)が来た ※男子校 ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - 受験生(小学一年の女児)が来た ※男子校 - 受験生枠で保護者が2人来た ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - 受験生(小学一年の女児)が来た ※男子校 - 受験生枠で保護者が2人来た - 抽選落ちたのを自覚しながら来た ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - 受験生(小学一年の女児)が来た ※男子校 - 受験生枠で保護者が2人来た - 抽選落ちたのを自覚しながら来た - 一般枠で申し込んでるのに受験生を連れてきた ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - 受験生(小学一年の女児)が来た ※男子校 - 受験生枠で保護者が2人来た - 抽選落ちたのを自覚しながら来た - 一般枠で申し込んでるのに受験生を連れてきた - 同じQRコードを使って不正入場を試みられた ---- ## a. 来場者不正事例集(1) ### 状況 来場可能なのは「一般枠(一人)」か「受験生枠(受験生+保護者1名)」のみ 抽選して予約チケットをURL形式で送付済み ### 事例 - 受験生(小学一年の女児)が来た ※男子校 - 受験生枠で保護者が2人来た - 抽選落ちたのを自覚しながら来た - 一般枠で申し込んでるのに受験生を連れてきた - 同じQRコードを使って不正入場を試みられた - 指定されてない時間帯で入場させて欲しいと粘られた ---- ## a. 来場者不正事例集(2) チケットの話 ---- ## a. 来場者不正事例集(2) チケットの話 - URL `https://ticket.afes.info/?id=R-8614471` ---- ## a. 来場者不正事例集(2) チケットの話 - URL `https://ticket.afes.info/?id=R-8614471` - アクセスログ見てたら末尾を弄って他のチケットを探そうとしてる人が居た ---- ## a. 来場者不正事例集(2) チケットの話 - URL `https://ticket.afes.info/?id=R-8614471` - アクセスログ見てたら末尾を弄って他のチケットを探そうとしてる人が居た - もちろん対策済み。下一桁はチェックディジットを使った - 新しいチケットを見つけてる人は居なかった ---- ## a. 来場者不正事例集(2) チケットの話 - URL `https://ticket.afes.info/?id=R-8614471` - アクセスログ見てたら末尾を弄って他のチケットを探そうとしてる人が居た - もちろん対策済み。下一桁はチェックディジットを使った - 新しいチケットを見つけてる人は居なかった - アクセスログ見てたら`/wp-login.php`, `.env` 等のアクセスがあった ---- ## b. 生徒側トラブル事例集 ### 事案1: 入場処理漏れ対応のミス (1) #### 状況 - 来場者に渡すリストバンドは入場口で予約QRと紐づけてアクティベートする - アクティベートしてないリストバンドを使われると行動履歴を追えないので使えないようにしてる - ただ、たまに入場処理を忘れたままリストバンドを受け取ってしまう来場者が… - 予めインフォメーションセンターでこの漏れを処理するように指示していた ---- ## b. 生徒側トラブル事例集 ### 事案1: 入場処理漏れ対応のミス (2) #### 発生したこと - 入場管理の担当局とインフォメーションセンターの担当局は同じと聞いていたのに実際は違った ---- ## b. 生徒側トラブル事例集 ### 事案1: 入場処理漏れ対応のミス (2) #### 発生したこと - 入場管理の担当局とインフォメーションセンターの担当局は同じと聞いていたのに実際は違った - 入場漏れに対する指示は全く守られていなかった - 実際に対応してる人たちは、アクティベートを全くせずにリストバンドを渡してしまっていた ---- ## b. 生徒側トラブル事例集 ### 事案1: 入場処理漏れ対応のミス (2) #### 発生したこと - 入場管理の担当局とインフォメーションセンターの担当局は同じと聞いていたのに実際は違った - 入場漏れに対する指示は全く守られていなかった - 実際に対応してる人たちは、アクティベートを全くせずにリストバンドを渡してしまっていた - **【結果】** 来場者は一生使えないリストバンドを渡されるハメに…。 - 実際にこれでどこの展示にも入れないというクレームを入れて帰るお客様もいた ---- ## b. 生徒側トラブル事例集 ### 事案1: 入場処理漏れ対応のミス (3) #### 反省点 - 万が一があっては困るものなので、自分が直接見に行くしかなかった ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) - チケットを持ってないOBがあの手この手で中に入ろうとしてくる - 皆さんはずるいOBだとして、何をしますか? ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) #### 答え ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) #### 答え - 「差し入れを持ってきたんです!!」 ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) #### 答え - 「差し入れを持ってきたんです!!」 - 正門から正面突破 ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) #### 答え - 「差し入れを持ってきたんです!!」 - 正門から正面突破 - 裏門(しまってる)を乗り越えて入場 ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) #### 答え - 「差し入れを持ってきたんです!!」 - 正門から正面突破 - 裏門(しまってる)を乗り越えて入場 - 過去の生徒証を持ってくる ---- ## b. 生徒側トラブル事例集 ### 事案2: OBの乱入騒動 (1) #### 答え - 「差し入れを持ってきたんです!!」 - 正門から正面突破 - 裏門(しまってる)を乗り越えて入場 - 過去の生徒証を持ってくる #### そのほか - チケット持ってるOBも退場時刻を超えて居座ろうとする - 生徒用に配布した色分けしたリストバンドの有無で判別できた ---- ## b. 生徒側トラブル事例集 ### 事案3: 入場開始の遅れ - 予め10時開始と伝えてたし告知されてた ---- ## b. 生徒側トラブル事例集 ### 事案3: 入場開始の遅れ - 予め10時開始と伝えてたし告知されてた - しかし、開場前の文実委員長の宣言がすごく伸びた ## b. 生徒側トラブル事例集 ### 事案3: 入場開始の遅れ - 予め10時開始と伝えてたし告知されてた - しかし、開場前の文実委員長の宣言がすごく伸びた - 更に、入場口の iPad を wi-fi につなぎ忘れていて、入場処理に失敗 ---- ## b. 生徒側トラブル事例集 ### 事案3: 入場開始の遅れ - 予め10時開始と伝えてたし告知されてた - しかし、開場前の文実委員長の宣言がすごく伸びた - 更に、入場口の iPad を wi-fi につなぎ忘れていて、入場処理に失敗 - 現場は大混乱結果として10分弱の遅れが発生した ---- ## b. 生徒側トラブル事例集 ### 事案3: 入場開始の遅れ - 予め10時開始と伝えてたし告知されてた - しかし、開場前の文実委員長の宣言がすごく伸びた - 更に、入場口の iPad を wi-fi につなぎ忘れていて、入場処理に失敗 - 現場は大混乱結果として10分弱の遅れが発生した #### 反省点 - 前日のシミュレーションはしてたので完全に油断してた - 直前でもチェックするようにするべきだった - あと遅れるなら言ってほしかった ---- ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (1) #### 状況 (東工大だと違うのかもしれない) ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (1) #### 状況 (東工大だと違うのかもしれない) - 高3の cappuccino チーム ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (1) #### 状況 (東工大だと違うのかもしれない) - 高3の cappuccino チーム - 高2以下で文化祭をやる生徒の機関”文化祭実行委員会” ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (1) #### 状況 (東工大だと違うのかもしれない) - 高3の cappuccino チーム - 高2以下で文化祭をやる生徒の機関”文化祭実行委員会” - 文化祭と生徒関連の業務を担当する”生徒委員会” ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (1) #### 状況 (東工大だと違うのかもしれない) - 高3の cappuccino チーム - 高2以下で文化祭をやる生徒の機関”文化祭実行委員会” - 文化祭と生徒関連の業務を担当する”生徒委員会” - 教員全体の意思決定を取る”職員会議” ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (1) #### 状況 (東工大だと違うのかもしれない) - 高3の cappuccino チーム - 高2以下で文化祭をやる生徒の機関”文化祭実行委員会” - 文化祭と生徒関連の業務を担当する”生徒委員会” - 教員全体の意思決定を取る”職員会議” cappuccino に直接関わる団体・機関が4つ!! ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (2) #### 起きた事 - チームが4つあって連携が全然取れない - 職員会議に関しては生徒は参加もできないし議事録等も非公開 - あとから仕様の追加とかもあってかなりチームの負担になってた ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (2) #### 起きた事 - チームが4つあって連携が全然取れない - 職員会議に関しては生徒は参加もできないし議事録等も非公開 - あとから仕様の追加とかもあってかなりチームの負担になってた - 生徒側も学年が違うという問題があってお互いそこまで介入できない - 入場処理周りで大きく事故が発生してしまった ---- ## c. 教員・チーム内トラブル事例集 ### 事案1: 連携の問題 (2) #### 起きた事 - チームが4つあって連携が全然取れない - 職員会議に関しては生徒は参加もできないし議事録等も非公開 - あとから仕様の追加とかもあってかなりチームの負担になってた - 生徒側も学年が違うという問題があってお互いそこまで介入できない - 入場処理周りで大きく事故が発生してしまった #### 対策 - スケジュールにゆとりをかなり持たせるしかない (3ヶ月) ---- ## c. 教員・チーム内トラブル事例集 ### 事案2: チケット印刷ミス (1) #### 状況 - 一般客にはメールでURLを送信していたが、保護者に対しては紙でチケット配布 - 紙にQRコードを印字してもらうように教員にお願いした - 1日目の午前、午後 2日目の午前、午後 で 4種類の入場枠があって、QRコードを4つ渡していた ---- ## c. 教員・チーム内トラブル事例集 ### 事案2: チケット印刷ミス (1) #### 状況 - 一般客にはメールでURLを送信していたが、保護者に対しては紙でチケット配布 - 紙にQRコードを印字してもらうように教員にお願いした - 1日目の午前、午後 2日目の午前、午後 で 4種類の入場枠があって、QRコードを4つ渡していた #### 起きた事 - 教員が全員同じQRコードを印刷してしまい、それに気づかないまま配布してしまった ---- ## c. 教員・チーム内トラブル事例集 ### 事案2: チケット印刷ミス (2) #### その後 - チームメンバーが教員にぶち切れて「全員に再送付」しろと言ってた - オフライン対応を実装する関係で既にQRコードに入場情報が添付されてた - 僕がメンバーをなだめて、結局「保護者のQRコードだったら無条件で通す」というコードをアプリ側に仕込むハメになった ---- ## c. 教員・チーム内トラブル事例集 ### 事案3: 本番 DB を壊した (1) やってしまった ---- ## c. 教員・チーム内トラブル事例集 ### 事案3: 本番 DB を壊した (1) やってしまった #### 状況 - 午前・午後のタイミングで来場客は一旦全員外に出す事になっていた - 全員外に出すときに退場スキャンは必要ないと判断、DBを直接操作して対応 #### 起きたこと ---- ## c. 教員・チーム内トラブル事例集 ### 事案3: 本番 DB を壊した (1) やってしまった #### 状況 - 午前・午後のタイミングで来場客は一旦全員外に出す事になっていた - 全員外に出すときに退場スキャンは必要ないと判断、DBを直接操作して対応 #### 起きたこと - 一日目は問題なかったが、二日目は午後の入場が始まったあとに問題に気づく ---- ## c. 教員・チーム内トラブル事例集 ### 事案3: 本番 DB を壊した (1) やってしまった #### 状況 - 午前・午後のタイミングで来場客は一旦全員外に出す事になっていた - 全員外に出すときに退場スキャンは必要ないと判断、DBを直接操作して対応 #### 起きたこと - 一日目は問題なかったが、二日目は午後の入場が始まったあとに問題に気づく - 「入場時刻が今日の午前より前のデータをすべて退場状態にする」 SQL 文を実行 ---- ## c. 教員・チーム内トラブル事例集 ### 事案3: 本番 DB を壊した (1) やってしまった #### 状況 - 午前・午後のタイミングで来場客は一旦全員外に出す事になっていた - 全員外に出すときに退場スキャンは必要ないと判断、DBを直接操作して対応 #### 起きたこと - 一日目は問題なかったが、二日目は午後の入場が始まったあとに問題に気づく - 「入場時刻が今日の午前より前のデータをすべて退場状態にする」 SQL 文を実行 - 生徒の入場時刻は2日前になっているので生徒が全員退場されてしまった ---- ## c. 教員・チーム内トラブル事例集 ### 事案3: 本番 DB を壊した (2) #### 反省点・危なかった事 - SQL 文を実行する前に問題ないか共有するべきだった - そもそも DB を操作しなくても良いようにした方が良かった - 「退場処理漏れ」のデータ退場する、という処理は元々想定していた - 退場をソフトデリートによって行っていたので、戻す事ができた - ハードデリートだったらまじで終わってた 怖い - DB は直接操作しないようにしよう ---- ## 終わりに - 当たり前の話だったかもしれないけど、世の中アクシデントは無限に発生してる - 起きたときは参考にしてほしい <style> /* text */ .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p { font-family: "游ゴシック体", YuGothic, "游ゴシック Medium", "Yu Gothic Medium", "游ゴシック", "Yu Gothic", sans-serif; color: #2d4459; text-align: left; line-height: 1.8; letter-spacing: normal; text-shadow: none; word-wrap: break-word; } .text-color2 { color: #809ca6; } /* background */ .reveal { position: relative; background: #f2f2f2; } .reveal::before, .reveal::after { content: ''; position: absolute; height: 3vw; width: 3vw; background-image: url(https://md.trap.jp/uploads/upload_018faaedbc9a50a830b0e83c0013ab20.png); background-size: contain; z-index: 5; } .reveal::before { top: 1.5vh; left: 1.5vw; } .reveal::after { bottom: 1.5vh; right: 1.5vw; } .reveal .backgrounds { position: relative; } .reveal .backgrounds::before, .reveal .backgrounds::after { content: ''; position: absolute; height: 30vh; width: 30vw; background-image: url(https://md.trap.jp/uploads/upload_8d88c322a43800bfb389c40fbd22a820.png); background-repeat: no-repeat; background-size: contain; z-index: 5; } .reveal .backgrounds::before { top: 1.5vh; right: 1.5vw; background-position: bottom right; transform: rotate(0.5turn); } .reveal .backgrounds::after { bottom: 1.5vh; left: 1.5vw; background-position: bottom left; } .reveal .slides::before { content: ''; position: absolute; bottom: 0; right: 0; height: 5vh; width: 30vw; background-image: url(https://md.trap.jp/uploads/upload_87c469f429a84148037d45f0e6ee906a.png); background-repeat: no-repeat; background-size: contain; background-position: bottom right; z-index: 5; } /* header */ .reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 { font-weight: bold; } .reveal h1 { font-size: 7vmin; padding: 0.1em 0; margin: 0.3em 3vw; border-top: 0.05em solid #66ebea; border-bottom: 0.05em solid #66ebea; } .reveal h2 { font-size: 5vmin; padding: 0.1em 0; margin: 0.3em auto; border-bottom: 0.05em solid #66ebea; width: calc(100% - 3em); min-width: fit-content; } .reveal h1, .reveal h2 { text-align: center; } .reveal .title-h1 { margin-top: calc(50vh - 7 * 1.8vmin - 55px); } /* other */ .reveal .subtitle { text-align: end; font-size: 4vmin; margin-right: 10vw; } .reveal ul > li { list-style: none; background-image: url(https://md.trap.jp/uploads/upload_1ac1a2154c5bdfcfc403cf7373221f25.png); background-repeat: no-repeat; background-position: 0 0.45em; background-size: 0.6em; padding-left: 1em; } .reveal mark { color: inherit; background: #ff0c; } .reveal .footnotes li, .reveal .footnotes li p { color: #809ca6; } .reveal .alert { padding: 20px; } .reveal h1 code, .reveal h2 code, .reveal h3 code, .reveal h4 code, .reveal h5 code, .reveal h6 code { font-size: inherit; } .reveal section > div { max-height: 88vh; overflow: hidden; } .reveal .slides > section.stack { padding: 20px 0; } /* ここからはコピーしたもの */ .reveal th {background: #DDD;} .reveal section img {background:none; border:none; box-shadow:none; max-width: 95%; max-height: 95%;} .reveal blockquote {width: 90%; padding: 0.5vw 3.0vw;} .reveal table {margin: 1.0vw auto;} .reveal code {line-height: 1.2;} .reveal p, .reveal li {padding: 0vw; margin: 0vw;} .reveal .box {margin: -0.5vw 1.5vw 2.0vw -1.5vw; padding: 0.5vw 1.5vw 0.5vw 1.5vw; background: #EEE; border-radius: 1.5vw;} /* table design */ .reveal table {background: #f5f5f5;} .reveal th {background: #444; color: #fff;} .reveal td {position: relative; transition: all 300ms;} .reveal tbody:hover td { color: transparent; text-shadow: 0 0 3px #aaa;} .reveal tbody:hover tr:hover td {color: #444; text-shadow: 0 1px 0 #fff;} /* blockquote design */ .reveal blockquote { width: 90%; padding: 0.5vw 0 0.5vw 6.0vw; font-style: italic; background: #f5f5f5; } .reveal blockquote:before{ position: absolute; top: 0.1vw; left: 1vw; content: "\f10d"; font-family: FontAwesome; color: #2980b9; font-size: 3.0vw; } /* font size */ .reveal h3 {font-size: 2.8vw;} .reveal h4 {font-size: 2.6vw;} .reveal h5 {font-size: 2.4vw;} .reveal h6 {font-size: 2.2vw;} .reveal section, .reveal table, .reveal li, .reveal blockquote, .reveal th, .reveal td, .reveal p {font-size: 2.2vw;} .reveal code {font-size: 1.6vw;} /* new color */ .red {color: #EE6557;} .blue {color: #16A6B6;} /* split slide */ #right {left: -18.33%; text-align: left; float: left; width: 50%; z-index: -10;} #left {left: 31.25%; text-align: left; float: left; width: 50%; z-index: -10;} </style>
{"title":"らんぷろ 2022/Summer","type":"slide","slideOptions":{"theme":"white","slideNumber":"c/t","center":false,"transition":"none","keyboard":true,"width":"93%","height":"100%"},"tags":"Takeno_hito/slides"}