Theories of Pleiades

技術の話とかイベントに行った話とか思ったこととか

高専カンファレンスin西京2の運営をした話

TL;dr

  • たくさん人が来てくれたし楽しんでくれていたので良かった
  • 中途半端に企業を関わらせると良くない
  • 運営としては失敗だった


注意

呪詛っぽい話が多いです。
ぼく個人としてのあくまで主観的な話です。高専カンファレンスin西京2実行委員会とは関係がありません。


事前準備

昨年3月17日に行われた高専カンファレンスin西京を引き継ぐということで実行委員長が奮起になってくれたので手伝うよと声を掛けました。5,6月には運営メンバーは大体決まっていました。

元々「宇部と徳山合同なので宇部って使うのもあれだし西京にしませんか」というのが名前の由来だったので,西京という名前を引き継ぐわけだし徳山の人間も入れませんか良いですねとなり結局宇部徳山の7人?ぐらいで運営チームを組みました。

昨年の反省を活かした結果少人数での運営になりましたがここは非常に良かった点です。正解でした。


11月とかそれぐらいの頃に運営メンバーを集めて顔合わせをしました。

主に役割分担とか自己紹介とかをしていました。ぼくはまあ受付とかやりますとなりました。


顔合わせミーティングのときに,運営のメンバーから「ある企業の人からイベントをやるなら面白いゲームがあるから呼んでほしいと言われている」みたいな話をされました。

西京2に来た人ならわかると思います。懇親会のゲームです。

このときは詳しいことを聞いていなくて,まあ盛り上げてくれるなら良いんじゃないぐらいに思っていました。「良いんじゃないですか」と言った覚えがあります。思えばこのときにもっと詳細を明らかにしておくべきでしたね。


ある程度の準備は順調に進みました。当初会場にしようと予定していた中市コミュニティホールNacさんとはこの頃既に3月16日に会場を借りるという話を進めていました。


…が,会場担当とNacさんとの間で何らかの認識の食い違いがあり(認識の食い違いがあったとしか聞いていません),突如Nacはカンファ当日に使えなくなりました。これが判明したのが1月始めです。厳しい。

このあとはしばらく必死に会場探しをすることになります。


良い感じに会場が山口労福協会館に決まりました。立地以外は特に文句ない環境だったかなと思います。


並行して「ある企業」とのやりとりが進んでいました。ここでいろいろと問題がありました。

「ゲームに2時間かかる」との話があったのです。

いやいやいや2時間は無いだろ。懇親会全部潰れるだろ。絶対に無理だろ。人集まらんだろ。

さらに内容が「ビジネスゲーム」だと言うので,それ人集まるか?と思い始めました。ぼくは不安になりました。


このときは結局まあ所要時間は1時間が限界ではないですかという話になったので,担当のメンバーには先方にそのように伝えてもらいました。

そこで判明したのが,実はこの2時間には企業紹介が含まれていたということです。

メンバーからは「企業紹介とゲーム説明の一部を削ってもらうことで所要時間を1時間に短縮することができたが,その結果こちらから来てもらうようにお願いしたような形になってしまった」と連絡がありました。ぼくはとても不安になりました。


当初の話ではスポンサーをお願いするということで交渉を進めていたはずだったのですが,相手方からは「企業としての利益が薄い,今のままでもボランティアのようなものなので」と断られたとのことでした。はい…


さて,そんなこんなでごたごたしている間にも発表応募が始まります。当初の予定以上の応募をいただきました。ありがとうございました。

できるだけたくさんの発表を聞きたかったので当選発表直前,ギリギリまでスケジュールを調整しました。その結果当初は懇親会を2時間ほど取りゲームに参加した人も懇親会で自由な時間が取れるようにと思っていたところが半分に削れて厳しいことになってしまいました。懇親会でゲームに参加してくださった参加者の方には本当に申し訳ないと思っています。


抽選を完全に抽選にするかある程度内容でふるうかという議論がありましたが,結局あのフォームの内容ではふるいにかける材料として足りないし云々というので完全抽選式にしました。

ここでやりとりをしていた企業の方から「10分枠で登壇したい」と声掛けがありました。

ここには

  • 応募フォームからの応募ではない
  • connpassで参加者として登録されていない

という問題がありました。


高専カンファレンスin西京2のconnpassページには

発表を希望される方は、当ページからイベントに参加登録した後、以下のフォームからご応募ください。

と明確に記述があります。

この記述があるにも関わらず運営と関わりがあるからという理由で特例措置を取って良いものなのかというので運営でも揉めました。結局,降りていただくことにしました。


正直企業として来られる以上ある程度イベントに対する理解はしてほしかったという気持ちがあります。公式な手続きも踏まずにイベントに対して「利益が薄い」と言われてしまうとこちらとしてはうーんとなりますね。当日も「自分たちはイベントに参加しに来たのではない,ゲームを提供しに来たのだ」みたいな態度をされていてあまり良い印象は受けなかったです。


このあとは基本的にポスターやステッカーの入稿スケジュールと戦うことになります。

ポスター担当には2月14日を期限としてお願いしていましたが実際に原稿が上がってきたのは3月3日でした。おかしいな。

ステッカーは爆速で仕上げてもらいました。ありがとうございました。


当日

特別問題なく進めることができました。参加者のみなさん円滑な運営にご理解・ご協力ありがとうございました。


運営のメンバーが当日無線LANルータを持参してくれたり,私物の配信機材を持ってきてくれたりしました。

それに伴って司会担当が突如配信と司会を両方行ってくれていたので途中からはぼくが司会を交代しました。


気になった点は司会が登壇者名を正しく読まなかったり知り合いだからといって「〇〇くん」と呼んでしまったりしたなどです。

イベントの運営に私情を持ち込んではいけないと思います。これは高専祭のゲーム大会でも思ったことですが。


途中から司会を交代したので,ぼくが司会をしている間に懇親会のお菓子を買ってきてもらいました。ごめんなさい。

展示発表はとにかく厳しかったなという印象です。時間に余裕がなかったことと事前準備が十分でなかったことが原因としてあります。

ぼくとしては事前準備として不備なく展示品が動くかどうかのチェックまでしておいてほしかったのですが,担当メンバーに上手く伝わっていなくて設置のみの事前準備になってしまっていました。実際に上手く展示品が動いていないっぽいのを見たので悔しかったです。ここは本当に運営の意思疎通が悪かったです。

また,展示ブースに展示者の知り合いが集まってほぼオフ会状態になっていたりしたので適宜散らしていました。純粋に展示を楽しみたい人に対して迷惑でしかないですし,展示者としてもそれを自分から散らせないのはちょっと誠意が足りないかなという気がしなくもなかったです。


一番心配していた時間については綺麗に想定範囲内に収まったので良かったかなと思っています。

タイマーのベルの回数について司会から言及がないと心配になりますね。


飛び入りLTも良い感じに進みましたし,今回の運営の一番良かった点はリアルタイムに参加者の意見を聞きながら動けた点かなと思います。

途中から飛び入りLTの会場を移動したのは正解だったと思いつつ,移動前に話をしてくださった方には申し訳ない気持ちしかありません。


個人的に不満だったのはぼくの飛び入りLTのときに知り合いが野次を飛ばしてきていたところで,ぼくはあくまで運営として登壇者としてLTをしていたので,ぼく個人を茶化す意図の大きな声が飛び交っていたのは正直少し悲しいなと思いました。仕方ないと言えばそう。


今後の反省

中途半端に企業との関わりを作るのは良くないです。


また,今回はぼくは受付という立場だったのに関わらず事前準備のスケジュール管理をしたり当日の司会をしたりしてしまったので,そこは悪い癖だなと思っています。ちゃんと実行委員長にやらせなければいけないところでした。


去年は運営チームが大きすぎて運営がいろいろと滞ったりしてしまいましたが,今年は少数で進めたことで発言に対して誰からもレスポンスがないという嫌な事態は目にせず済みました。良かったです。

ただやはり宇部と徳山の間にはいろいろと壁があったように思います。イベントの運営は少なくとも実行委員長が全員とある程度信頼関係のあるメンバーで行うべきです。


とは言え全体的には参加してくださった方々にも楽しんでもらえていたようですし,イベントとしてはまあまあ良かったのかなと思います。

参加してくださった皆さんは全国各地から山口まで来ていただいてありがとうございました。

山口が「なにもないクソ田舎」という認識をされていないことを祈ります。ぜひまた山口に来てください。


また,高専カンファレンスin西京の実行委員長として,このように下の代が自分の意志を継いでくれたことを本当に誇りに思います。嬉しいです。実行委員長,本当にありがとうございました。お疲れ様でした。


また山口県高専カンファレンスをするという動きがあればそれは本当に嬉しいことだなと思います。

以上でぼくの高専カンファレンスin西京2を締めたいと思います。お疲れ様でした。

Docker入門備忘録① Dockerの基本コマンドを使えるようになる

TL;dr

  • docker runの基本的なコマンドを使う
  • コンテナにローカルのディレクトリをマウントする


想定層

  • dockerが本当にわからない
  • dockerの基本的なコマンドも使えない
  • docker-composeの良さがよくわからないし何をしているのかもわからない


Dockerの概要

Dockerの中にコンテナと呼ばれる無数の仮想環境を作ることができる。

DockerHubにはたくさんのイメージ(=既に出来上がった環境)が転がっているので,それをdocker pullで拾ってくると使えるようになる。


docker pullで拾ってきたイメージをdocker runで有効化し(=コンテナ化)再生することができる。


docker psをすると現在立ち上がってるコンテナの一覧が見れる。

docker ps -aで現在存在する(止まっているコンテナも含む)コンテナを一覧できる。


docker stopでコンテナを停止できる。

docker rmでコンテナを削除できる(このとき元になったイメージは残る)。

元のイメージを削除したい場合はdocker rmi,現在システム上にあるイメージはdocker imagesで確認できる。


docker execでコンテナの中に入ってコマンドを実行できる。


Docker上にGolangの実行環境を作ってみる

まずはGolangを実行するためのイメージを拾ってきます。

$ docker pull golang


$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
golang              latest              36e5881731e4        6 days ago          774MB

正常にgolangというイメージが取得できていることがわかります。


このイメージを使ってコンテナを作ります。

$ docker run -d -it --name golang_container golang
85f7fd1c6ea3155d8a6ac6cf924715d20c0e2f3dd9235756298ef1710d6389a4
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
85f7fd1c6ea3        golang              "bash"              6 seconds ago       Up 5 seconds                            golang_container

コマンドを解説していきます。


docker run -d -it --name golang_container golanggolangというイメージを元にしたコンテナgolang_containerを作っています。

-dフラグはバックグラウンドで実行するという意味です。これがなければ直接ターミナル上でコンテナが起動します。

-itフラグはコンテナ上で任意のコマンドを実行し,ターミナルにつなげます(lscatなど。今回の場合(?)指定がない場合bashが起動します)。

--nameフラグはコンテナに名前を付けています。名前は直後の引数に指定します。この場合はgolang_containerです。

最後にgolangとして元にするイメージを指定します。


よって,今回の例では,golangというイメージを元に作成したコンテナにgolang_containerと名付け,bashをバックグラウンドで実行しています。

この例でbashをバックグラウンドで実行している理由として,今回利用しているgolangイメージの場合デフォルトの状態だとコンテナを実行したときに何もせず終了してしまうためです。

本来ならこの中でサーバプログラムを実行するなどして永続的に終了しないようにするのですが,今回は説明のためにbashを実行したままにしてコンテナが止まらないようにしています(今回の例で-itを付け忘れるとdocker psに出てこなくなります)(正直この辺よくわかっていません)。


コンテナの中に入ってみます。

$ docker exec -it golang_container /bin/bash
root@bac2899e4a10:/go#

コンテナ内のbashが立ち上がり,ターミナルに接続され入出力ができるようになりました。

この中にはデフォルトでbin,srcの2つのディレクトリがあります。この中に自由にソースを作成し,実行できます。


動作確認ができたので,コンテナから出て,コンテナを削除します。

root@bac2899e4a10:/go# exit
exit
$ docker stop golang_container
golang_container
$ docker rm golang_container
golang_container


$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


コンテナからホストのディレクトリにアクセスできるようにする

Dockerを使う際,ふつうコンテナの中でソースを書いたりすることはありません。ホスト側で作ったソースコードをDockerコンテナ上から実行したいと思うはずです。

そのような場合,ホストのディレクトリをコンテナ内にマウント(=対応付け)することができます。


ホストの./src/appをコンテナ内の/go/src/appにマウントします。

$ docker run -d -it --name golang_container -v $(pwd)/src/app:/go/src/app golang
b303f3e4eb06db65242bafb1e746f90d187c354b8eb3597776011b36486057e1

このコマンドでは,新しく-vフラグが出てきました。
直後の引数に[ホスト側の絶対パス]:[コンテナ側の絶対パス]と指定することで,ふたつのディレクトリを結びつけることができます。

$(pwd)と書いたところには,カレントディレクトリの絶対パスが出力されます。


実際に以下のようなファイルをホストのsrc/app下に置いておきます。

package main

import (
  "fmt"
)

func main() {
  fmt.Println("Hello, golang from docker!")
}

このソースをコンテナ上で実行してみます。

$ docker exec -it golang_container /bin/bash
root@b303f3e4eb06:/go# go run src/app/hello.go
Hello, golang from docker!


正しくコンテナ上からホスト側のディレクトリに存在するファイルを読み込み,実行できました!


まとめ

  • golangのイメージからコンテナを作成しホストで作成したプログラムを実行できた


気が向いたらっていうか勉強したらDockerfileの話とかdocker-composeの話とか書きます。


参考にしたもの

qiita.com

高専に入学して内定をもらうまでを振り返る

注意

  • 当たり前ですが個人差があります。あくまでぼくの場合の話です
  • 人生振り返りポエムです

  • 詳しい経歴はこっちの記事


結論

  • 組み込み系の学科から独学で無事Web系の某社に内定をもらいました
  • 人前でプレゼンができるようになりました
  • マネジメントやコミュニケーションの能力を褒められるようになりました


高専入学前のスペック

高専入学前のぼくのスペックです(2chみたいだな)。

  • 極度のコミュニケーション弱者
    • 同級生に声を掛けられると赤面・吃り
    • 担任ともまともに話ができない
    • 同級生と友達を介して筆談でコミュニケーションしてました
  • ものづくり(広義)は好き
    • 幼稚園の頃から絵を描いていた
    • 中学生の頃はペンタブでデジタル絵を描いていた
    • アニメーション動画を作ったり作曲したり3Dモデリングしたり
    • HTMLとCSSがほんのちょっとできた
  • 勉強は上の下
    • 塾は行ったことがないです
    • 定期テストは450/500点ぐらい
    • 高専入学時点でクラス内20位


高専に入ってから

高専1年生

12月までは普通の「高専生」をしていました。

クラスメイトとカラオケに行ったり居残りで試験勉強をしたり休日はゲーセンに行ったりそういうやつです。

入学1ヶ月で「人前は得意じゃないけど同級生とはそこそこ喋れる」ぐらいになりました。


12月に同級生にコンピュータ部に誘われ,入部しました。

コンフェス(これとかこれを参照)に出す作品づくりのために3Dモデリングとか声優とかキャラデザインとかをしました。

メディアコンテンツ部門3位を取りました。


プログラミング経験は一切無し(授業のみ),授業ではまあ得意な方…ぐらい。


高専2年生

ゲーム作りてえなあと思っていたらTwitterにゲーム専門学校の広告が出てきました。

なんとなく読んだら中にUnreal Engine4というゲームエンジンの話があり,FF7のリメイクに使われているゲーム作成ソフトが無料で使えるということを知りました。スクエニが好きなので入れてみました。


当時の部活には3Dゲームを作る人はひとりもいなかったので,ビジュアルプログラミングしかできないぼくでも「部内で一番派手なゲームを作るやつ」になれました。

デスマーチの末に高専祭のゲーム大会のゲームを作ったり,コンフェスでは初めて人前でプレゼンをして企業賞をもらったりしました。

ちなみにプレゼン中緊張しすぎてマイクを使うことを忘れていて,終わったあとに言われて気付きました。


プログラミングは「コードを書く」ということはしていなくて,Scratchに毛が生えたレベルでした。


高専3年生

部内で一番ゲームが作れる!みたいな気分になってきました。図に乗って後輩に教えるばかりをしていたら自分の作品は何も作れないまま秋になっていまいた。


秋にプロコンを見学に行って,1,2年生が開発に携わって課題部門や自由部門に出ていることに驚きました。

ぼくは「まだ3年生だからプロコンに出れる実力はなくて当然」と思っていましたがそうではありませんでした。

知り合った人がTwitterで難しいプログラミングの話をしているのを見て,自分も中に入れるようになりたいと思いました。


この頃から,Twitterで見かける技術系のブログやQiitaの記事を読むようになりました。読むだけでわかった気になっていました。

学校では1,2年生で1〜5位ぐらいの席次を維持していて,部内でも一番ゲームが作れるやつ,ぐらいの気持ちだったので,「本当はこのすごい高専生たちとぼくの間には大した差はないはずだ」と思っていました。アホ?


この年の7月ぐらいにPythonという言語を知って,入門書を買いました。その中にWebAPIを使ってみようみたいな章があり,Twitterでプログラミングの人の言っている「TwitterAPI」というのが何なのか理解しました。

ちなみにずっと「ついったーあぴ」だと思っていました。


12月ぐらいにようやく「何か作らないと」という気持ちになって,SlackのAPIを使ってbotを作ってみたりしていました。コンフェスに出したゲームはクラスを使って書いてみたりしました。


この頃やっとプログラミング初心者ぐらいになりました。


高専4年生

自由応募でWeb系の企業の長期インターンに行きたい気持ちになりました。

できれば給料も欲しいと思っていて,お前この期に及んでまだ驕ってんのかという感じがあります。今考えると。

Djangoチュートリアルを見ながら初めてのWebアプリを書いてみたり,ポートフォリオサイトを作ってみたりしました。

3社受けて(うち2社はスカウト)全部落ちました。当たり前かな…


インターンに全部落ちてこのとき初めて「あっ自分全然ダメなんだ」というのに気付きました。遅えよバカ。


夏休みはひたすらプログラミングをしたりイベントに行ったりしました。

SECCON for Beginners 広島とか,逆求人フェスティバルとか行きました。

hsm_aiもこのとき作りました。

最近の企業ではRailsを使っているところが多いっぽいということに気付いたので,ProgateでRailsのコースを1週間掛けて修了しました。APIサーバを作ってみました。


プロコンがあったり,高専祭があったりしました。部活はやめたくなりましたがいろいろあって結局残っています。


12月にはサポーターズの1on1に行きました。このときにはプロコンとか高専祭のおかげでアピールできる作品も増えていて,たくさんの企業の人に褒めてもらえました。選考免除もいっぱいもらいました。

ちなみにこの辺でまた慢心が出たりしました。徐々に選考を受け始めました。


面接を受ける中で,「気合を入れて作った作品」やその経験が足りないことに気付き始めました。

特にcombappについては「それGoogleスプレッドシートでいいじゃん」を何度も言われてしまい言い返せなかったので,改良してequipperを作りました。


この頃,宇部市オープンデータアプリコンテストで最優秀賞をもらいました。


気合を入れて作った作品『equipper』と『ゆりかごマップ』でのコンテスト受賞経験が生き,この頃からは面接が割と良い調子で進むようになりました。

というので,現在に至ります。


就活の進め方

就活の進め方ですが,とにかくまず逆求人系のイベントに行くのが良いと思います。

1日で7〜8もの会社とつながりを持てるというのはそうなのですが,自分の長所や短所が見えてきたり,複数の会社を見ていると「この会社は向いていない」「この会社は好きかもしれない」と自分の志向が見えてきます。

実際,ぼくは正直「都内のそこそこのWeb系企業で自分を採ってくれるならどこでも良いや」と思っていましたがそんなこともないかもなーと思い始めました。


その後は見えてきた自分の短所を克服する方向に動きました。

行動力やリーダーシップみたいな部分は褒めてもらえて,足りているというのがわかったので,質問されて上手く返事できなかったところについて返せる話題を作っていきました。


1回目のイベントで十分だった場合はその中で良さそうな企業を選んで受けると良いと思います。

ぼくは1回目では上手く行かなかったので,2回目の逆求人イベントに参加しました。

一度経験してフィードバックを受けているので他の学生より良い受け答えができますし,実際にこのとき会った会社の方からはたくさん特別選考のお誘いをもらいました。多分9社中6社ぐらいからお誘いが来ました。


その後はひたすら選考を受けていきます。選考を受けていくにつれて,n次面接ではどんな話をすればいいかとか,自分に足りない部分がまた見えてきます。

例えば人事の方や現場のエンジニアの方であれば逆求人イベントと同じような感覚で話せば良いとか,現場責任者になると技術的に掘り下げたことを聞かれるので使っている言語の特徴や作ったプロダクトのこだわった部分とかを用意しておくとか,そういう感じです。


ぼくは筆記試験1回,2次面接1回以外は今のところ落ちていないです。どの会社も面接の立ち位置が同じであれば似たような傾向の質問をされることが多いので,落ちてしまったときは練習だったと思うことにすれば問題ありません。前向きに行きましょう(ぼくは割と後ろ向きだったかもしれない)。


特に,会社によって評価の軸はかなり違っていて,即戦力を求めていてがっつり技術力を重視する会社があればコミュニケーション力を見ている会社,リーダーシップのある学生を採用したい会社などまちまちです。

技術という観点を一つ取っても,ひとつの専門分野のある学生を採りたい会社やマルチスタックな学生を採りたい会社など本当にいろいろな会社があります。

相手側の評価したい箇所と自分の推したい箇所が違っていたという場合は絶対にあると思いますし,過度に落胆する必要は無いと思います。自分の良いところを伸ばしてくれそうな会社を探せば良い話なので。


という感じで,場数を積んでいるうちに緊張せず話せるようになり選考の通過率も爆上がりしました。前向いて行きましょう。


結論

組み込み系でもインターン全落ちでも自由応募で就職はできます。


ぼくが高専に入ってから今までの生活で重要だなと思ったことを以下に載せておきます。

  • 自分から情報を掴みに行く
    • TwitterでもQiitaでも本屋でもイベントでも良いです
  • 周りの悪い雰囲気に流されない
    • 「現実を見て諦める」は別にかっこよくないです
  • 行動は早いほど強い
    • 迷ったら今やりましょう(迷う時間がもったいないので)
    • 仮に失敗しても経験になります
  • 身体は大切にする
    • 倒れる前に休め
    • 適度に運動をすると良いです
  • 先輩には教わる
    • 使えるものは使え
      • もちろん調べてわかることは調べる
      • 調べてわからないことは聞く(重要)
    • 困ったときには相談しましょう
  • とにかく手を動かす
    • どんなにつまらないものでも作れば何かを得られます
    • 大きすぎる目標は挫折しがちなので小さいものから

以上です(今思いつくのは)。時間切れとか「今更やってももう遅い」とかはないです。ぼくもWeb書き始めたのは4年になってからだったけどなんとかなりました。


ということで,これから入学する新入生や今の後輩は後悔のないように頑張ってほしいなあと思います。

まだしばらく就活は続きますが頑張っていきます。