未来永劫

メリーバッドエンドが好きです.

図書館情報学徒が作ったシステムは(大抵)危ない

この記事はklis Advent Calendar 2015 10日目の記事です.www.adventar.org

Who Are you?

shopetan.hatenablog.com

前置き

情報システムとは.大雑把に以下のような事を指すらしいです.

情報システムとは、情報を適切に保存・管理・流通するための仕組み。

情報システムとは|コンピュータシステム|information system - 意味/解説/説明/定義 : IT用語辞典

本題

さて,私達図書館情報学徒は弊学で知識資源を扱うための術であったり,システムの構築なども(ぼんやりと)学びます.
例えばですが,今年私が受講する限りでシステム構築を行った授業は以下の通り.

  • 主専攻実習
  • 知識情報演習(CJE)
  • Webプログラミング
  • DB演習,DB技術etc...

まぁ内容はまちまちで,PHPを書いてたりRubyCGIを書いてたりフレームワークを使ってたりと 結構様々な手段を学びます.

が,

お前らが作ったシステムは(大抵)危ないぞ.というお話です.

システム主専攻として目指している所

知識情報システム主専攻はどんなところ?
 知識情報システム主専攻は情報技術に注目します。インターネットに代表される情報技術の進歩により、人類はかつてない膨大な知識と情報を共有しています。この知識や情報を有効に活用するためには、効率よくあつかうための高度な技術が不可欠です。

  知識情報システム主専攻では、知識情報の分類や構造化、 Web における知識情報の提供と共有技術、多様な知識情報の表現と管理のためのデータベース技術、知識情報から有益な情報を取り出す情報検索技術、ディジタルライブラリをはじめとする知識情報システムの実装技術などを修得します。

筑波大学 情報学群 知識情報・図書館学類


とりあえず知識資源の扱い方を学んだり知識情報システムの実装技術を取得するそうです.

そもそもこのKlisで勉強すること

Klisでは一般的に,必修科目として1年次にrubyを勉強します.
この必修科目の酷さは他に譲るとして,プログラミングは1年生の半期,2年生の必修で半期程度勉強します.
その後の3年次に主専攻という枠組みで各専攻ごとの授業を受ける事になるわけです.

で,私が所属している知識情報システム主専攻なのですが,知識資源を扱う授業は確かに豊富で,図書館という枠組みを中心に授業が行われています.
しかし,システムと名がつく割に,そもそものシステム開発方法を学べたり,システムを扱う哲学的な講義などはありません.
その結果,自由課題に直面した時に黙々とCGIで何千行書いている人も居ますし,フレームワーク使って賢く開発している人も居ます.
全然出来ない人も当然居ますね.

何が言いたい

私はシステム開発を学ぶ以上,全員が何らかのフレームワークを活用して自力で作成できるレベルに水準が上がるべき と考えています.
我々は,OPACを始めとした情報検索システムや知識にまつわるシステムを作ります.
その開発に,知識資源を扱う以上,知識資源となる"データ"を守る必要が出てきます.
私たちは果たして,学内で学んだ知識のみで大切な知識を守ることが出来るでしょうか?

例えばセキュリティ

おそらく,この学類で具体的にセキュリティを学べる講義は無いと思います.
ただでさえ最近騒がれているのに,システムだけ作らせて肝心なところはカバー出来ていません.

例えば運用・保守

人に見せられるコードをかけていますか?
後で自分が見た時に,内容を説明できますか?

そこでフレームワークです.

例に挙げるのはRuby on Railsという,rubyで書けるWebアプリケーション・フレームワークです.
Railsは,大きく分けて3つの理念を持ったフレームワークです.

1. CoC(Convention over Configuration)
「設定より規約」という意味です.
開発者側で設定を考えずとも,規約として決まり事にすれば余計な手間がかからない.
コードの多様性が減るので保守や運用もし易い.


2. DRY(Don’t Repeat Yourself)
「同じ事を繰り返さない」という意味です.
複数の修正が必要なく,単一の修正で済むように設計されています.

3. REST(Representational State Transfer)
Webの設計思想の一つです.
ここは割愛します.

また,大事な理念として,レール(規約)の上を歩けば安全なシステムが作れる.
という理念があります.
早い話,Railsの決められた書き方をすれば,殆どのセキュリティ上の心配事は無くなるという意味です.

最近では,フレームワークに則った書き方をすればセキュアになるようにしようという動きが多々あります.
開発者が難しいセキュリティの事を考えずとも,使うだけで安全なアプリケーションになるように設計が行われています.
使う以外の選択肢は無いですね!(というか自信がない人ほど使って下さい.)

Railsが出来るようになるためには?

Railsは比較的重量級のフレームワークのため,Webアプリケーションまったくの初心者が作るのはオススメ出来ません.
幸い,我々は2年次にCGIで動的なページを作る事を勉強しています.
「一般的なWebアプリケーションの作成が出来るレベルに立っている」ということです.
Railsは学習コストが高いことで有名ですが,反面,多くの先駆者がいるメジャーなフレームワークのため,ドキュメントが豊富です.
また,書籍等も多く充実しております.
Railsが難しいようであれば,sinatraという軽量のフレームワークなども存在します.

以下にオススメのサイトを貼っておきます.

railstutorial.jp

www.slideshare.net
有名なチュートリアルサイトであるが,少し敷居は高い.
歩き方と合わせてどうぞ.

dotinstall.com
こちらはドットインストールさんの入門.僕はコレで覚えました.

openbook4.me
これに沿って作るだけで簡単なWebアプリケーションが作れます.
こちらは本当に分かりやすいのでおすすめです.

終わりに

自力でシステムを作るための道筋を紹介しました.
講義で習っただけの知識で作成するシステムは危ないです.
また,就職にあたっても,エンジニアとして求められるレベルは,この程度の知識を持って作れるという事がラインになっている気もします.
開発側としてシステムに触れる以上,自力で簡単なモノが作れる程度の実装力は付けておきたいですね.

2015年のまとめ

今年作ったもの,今年やってきた事をまとめる.
ブログという媒体を通してアウトプットを始めたのは今年になってから.

1月

  • 高専の卒業研究の追い込みの時期だった.
  • 情報処理学会への発表が決定しており,年明けに論文提出を求められていたので死にそうだった.
  • 朝6時半前から家を出て,夜12時過ぎに家に帰る生活をしていた.
  • 学校との往復は4~5時間掛かる. 何が言いたいか分かるか.

他にもバイトをしてました.
バイトは3つで

  1. 小学校の非常勤の先生
  2. 小~高校生への塾講師
  3. 中学生の家庭教師

月3~4万は稼げていた.
でももうこんなに忙しい思いはしたくない.

2月

  • 学内での卒論発表があった.
  • 「相互採点における能動的評価法の提案」という,教育データマイニングに関わる発表をした.
  • 卒論の提出があるので30pしないくらいの論文を書いた.
  • (蟻本を読んで)競技プログラミングを触りだす.

3月

  • 無事に単位が取れていたので晴れて卒業
  • 卒業旅行で京都に行く
  • 数日後,学会発表で京都に行く(2度目)
  • 地元の人達が飯を奢ってくれたり,門出を祝ってくれたのを覚えている.
  • 競技プログラミング,ここでDPに出会い挫折

4月

  • ITF.klisに晴れて編入
  • 千葉県南部から茨城県まで,5時間かけて原付きで走った.死ぬほど寒かった.
  • 茨城県はガソリンスタンドが少なく,また道も何もない田んぼ道だらけで,ここで死にたくないと強く願った.
  • COJTに参加が決定した.ここで俺の人生が狂いだす.
  • 主にSWのWebデザイン,Webアプリケーションを学ぶ.
  • UI/UXを意識することが増えた.

COJTというのはこんな感じの取り組みです.
強い人達が集まる強いところです.
筑波大学情報学群 組み込み技術キャンパスOJT/University of Tsukuba

5月

  • 早い段階でITFの強い人達と繋がったことで,いい意味で刺激を受けまくる.
  • 逆求人に誘われる.(また人生が狂う)
  • tiwtterのフォロワーが,入学後に200人超増える.(なんだこの大学は.)

逆求人とは,こんな感じの,企業の方が私達を指名して面接をしてくださるイベントです.www.studenthunting.com

6月

  • 逆求人に参加した.
  • 全8ターム中,7社の会社の方が指名して下さった.とてもありがたい
  • Twintterを@himktと作った.
  • 大学の学生支援サービスみたいな奴
  • セキュリティ・キャンプ2015年全国大会に受かった(今年は倍率4.3くらいだっけ?).
  • 本格的にセキュリティの勉強を始める.

f:id:shopetan:20151203171315p:plain
shopetan.hatenablog.com

7月

  • インターンの面接とかが始まる.
  • なんだかんだ4社受かったので4社に行くことにした.
  • SEゼミさんのOSSHackイベントに参加し,OSSデビューした.
  • 落し物共有サービスLPMを作った.(ありがたいことにstarが多い)

shopetan.hatenablog.com
github.com

8月

  • 地獄の2ヶ月が始まった.
  • おかげさまで休みが全く無かった.
  • Rock in Japanに参加 -> (殆ど寝れずに)30時間ハッカソン -> (寝れずに)セキュキャン参加という,休むまもなく弾丸スケジュールで進んだ.(正直一番しんどかった.)
  • B社のハッカソンは3位だった.
  • セキュキャングランプリマンになれた(ありがたい).

shopetan.hatenablog.com

9月

  • 某CA社のインターンに優勝した.
  • 優勝賞品のMacBookProが貰えました(嬉しい).
  • 某L社のインターン機械学習コンペみたいなもので優勝した.
  • しかし優勝賞品の焼き肉が予定のブッキングでいけなかった(死にたい).
  • G社で業務としてデータサイエンティストをやる.

10月

  • Memoria というJavaScriptで動く教育RPGを作った.(詳細は後日)

少し分かりにくいので,リファレンス等後日作成します.(むしろこっちにstar欲しい)

  • Intel Edisonに触りだす(進行中).
  • 某イベントでまた京都に行く(3度目)
  • Qiitaを始める.
  • 技術系の記事はこちらに書こうと思った.
  • 4記事で200ストックされているので結構嬉しい.
  • PyConJP,OSCなどイベント盛りだくさんだった.
  • Goも触りだす.


github.com
qiita.com

11月

  • 研究室配属に就活の陰を見る.
  • Asobeatというプロジェクトを始めた.
  • Edisonを活用したウェアラブルデバイスで,新しい"アソビ"を提供します.(1月末までにする予定です.)
  • JPHacksという国内最大級の学生ハッカソンに参加する.
  • KnowlectというWebサービスを作った.

github.com
jphacks.xn--7wu811h.jp
github.com

12月

  • ネットワークの基礎知識が足りなすぎるため,そろそろ勉強しようと思っている.
  • セキュキャンアワードというものがあるらしい,出たいので1ヶ月程度研究するかもしれない.

www.security-camp.org

まとめ

1年でこれだけやっていたらしい.
Webアプリケーションを真剣に勉強しだしたのは今年始めてです.
Androidも初めて書いたし開発もしまくりました.
人間やればどこまでも出来るようになるみたいです.
後はstarが欲しいです.

機械学習をあまり触らない年だったので,来年はもっと触れ合いたいですね.
とりあえず,来年度もよろしくお願いします.

Mac OSX でPythonのScrapyをインストールする時に躓いた事

こちらにある,Scrapyのインストールガイドを参考にして素直にpip installを実行したらハマった.
Installation guide — Scrapy 1.0.3 documentation

MacBook-Pro-9:$  pip install scrapy
Collecting scrapy
  Downloading Scrapy-1.0.3.tar.gz (948kB)
    100% |████████████████████████████████| 950kB 296kB/s 
Collecting Twisted>=10.0.0 (from scrapy)
  Downloading Twisted-15.4.0.tar.bz2 (3.1MB)
    100% |████████████████████████████████| 3.1MB 108kB/s 
Collecting w3lib>=1.8.0 (from scrapy)
  Downloading w3lib-1.12.0-py2.py3-none-any.whl
Collecting queuelib (from scrapy)
  Downloading queuelib-1.4.2-py2.py3-none-any.whl
Collecting lxml (from scrapy)
  Downloading lxml-3.4.4.tar.gz (3.5MB)
    100% |████████████████████████████████| 3.5MB 109kB/s 
Collecting pyOpenSSL (from scrapy)
  Downloading pyOpenSSL-0.15.1-py2.py3-none-any.whl (102kB)
    100% |████████████████████████████████| 106kB 108kB/s 
Collecting cssselect>=0.9 (from scrapy)
  Downloading cssselect-0.9.1.tar.gz
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.2 in /usr/local/lib/python3.4/site-packages (from scrapy)
Collecting service-identity (from scrapy)
  Downloading service_identity-14.0.0-py2.py3-none-any.whl
Collecting zope.interface>=4.0.2 (from Twisted>=10.0.0->scrapy)
  Downloading zope.interface-4.1.3.tar.gz (141kB)
    100% |████████████████████████████████| 143kB 648kB/s 
Collecting cryptography>=0.7 (from pyOpenSSL->scrapy)
  Downloading cryptography-1.0.2.tar.gz (332kB)
    100% |████████████████████████████████| 335kB 521kB/s 
Collecting characteristic>=14.0.0 (from service-identity->scrapy)
  Downloading characteristic-14.3.0-py2.py3-none-any.whl
Collecting pyasn1 (from service-identity->scrapy)
  Downloading pyasn1-0.1.9-py2.py3-none-any.whl
Collecting pyasn1-modules (from service-identity->scrapy)
  Downloading pyasn1_modules-0.0.8-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python3.4/site-packages/setuptools-15.2-py3.4.egg (from zope.interface>=4.0.2->Twisted>=10.0.0->scrapy)
Collecting idna>=2.0 (from cryptography>=0.7->pyOpenSSL->scrapy)
  Downloading idna-2.0-py2.py3-none-any.whl (61kB)
    100% |████████████████████████████████| 61kB 634kB/s 
Collecting cffi>=1.1.0 (from cryptography>=0.7->pyOpenSSL->scrapy)
  Downloading cffi-1.2.1.tar.gz (335kB)
    100% |████████████████████████████████| 335kB 289kB/s 
    Complete output from command python setup.py egg_info:
    cc1: error: unrecognized command line option "-Wno-unused-result"
    cc1: error: unrecognized command line option "-Wno-unused-result"
    
        No working compiler found, or bogus compiler options
        passed to the compiler from Python's distutils module.
        See the error messages above.
        (If they are about -mno-fused-madd and you are on OS/X 10.8,
        see http://stackoverflow.com/questions/22313407/ .)
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/pw/y9z4j4y133v6sf6b8_z906km0000gn/T/pip-build-djas2rha/cffi

どうやらcffiをdownloadした直後に死んでいる.


はじめは,

    cc1: error: unrecognized command line option "-Wno-unused-result"

この手のエラーが出ていたのでgccの問題かな?と思いgccのバージョンを確認していた.

MacBook-Pro-9:$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix

う〜んLLVMの問題かな…と悩んでいたが同様のエラーは見つからなかった.

再びインストールガイドを確認したところ,pythonの推奨系列は2系列だったことを確認.

MacBook-Pro-9:$ pip --version
pip 7.1.2 from /usr/local/lib/python3.4/site-packages (python 3.4)

どうやらデフォルトが3系列になっていたらしい…

これを

MacBook-Pro-9:$ pip2.7 install scrapy

と明示的に2系列を使用するとしたうえでインストールを行うと無事にインストールできた.

Collecting scrapy
  Downloading Scrapy-1.0.3-py2-none-any.whl (290kB)
    100% |████████████████████████████████| 294kB 639kB/s 
Collecting cssselect>=0.9 (from scrapy)
  Using cached cssselect-0.9.1.tar.gz
Collecting queuelib (from scrapy)
  Using cached queuelib-1.4.2-py2.py3-none-any.whl
Collecting pyOpenSSL (from scrapy)
  Using cached pyOpenSSL-0.15.1-py2.py3-none-any.whl
Collecting w3lib>=1.8.0 (from scrapy)
  Using cached w3lib-1.12.0-py2.py3-none-any.whl
Collecting lxml (from scrapy)
  Using cached lxml-3.4.4.tar.gz
Collecting Twisted>=10.0.0 (from scrapy)
  Using cached Twisted-15.4.0.tar.bz2
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.2 in /usr/local/lib/python2.7/site-packages (from scrapy)
Collecting service-identity (from scrapy)
  Using cached service_identity-14.0.0-py2.py3-none-any.whl
Collecting cryptography>=0.7 (from pyOpenSSL->scrapy)
  Using cached cryptography-1.0.2.tar.gz
Collecting zope.interface>=3.6.0 (from Twisted>=10.0.0->scrapy)
  Using cached zope.interface-4.1.3.tar.gz
Collecting characteristic>=14.0.0 (from service-identity->scrapy)
  Using cached characteristic-14.3.0-py2.py3-none-any.whl
Collecting pyasn1-modules (from service-identity->scrapy)
  Using cached pyasn1_modules-0.0.8-py2.py3-none-any.whl
Collecting pyasn1 (from service-identity->scrapy)
  Using cached pyasn1-0.1.9-py2.py3-none-any.whl
Collecting idna>=2.0 (from cryptography>=0.7->pyOpenSSL->scrapy)
  Using cached idna-2.0-py2.py3-none-any.whl
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages/setuptools-15.2-py2.7.egg (from cryptography>=0.7->pyOpenSSL->scrapy)
Collecting enum34 (from cryptography>=0.7->pyOpenSSL->scrapy)
  Downloading enum34-1.0.4.tar.gz
Collecting ipaddress (from cryptography>=0.7->pyOpenSSL->scrapy)
  Downloading ipaddress-1.0.14-py27-none-any.whl
Collecting cffi>=1.1.0 (from cryptography>=0.7->pyOpenSSL->scrapy)
  Using cached cffi-1.2.1.tar.gz
Collecting pycparser (from cffi>=1.1.0->cryptography>=0.7->pyOpenSSL->scrapy)
  Downloading pycparser-2.14.tar.gz (223kB)
    100% |████████████████████████████████| 225kB 145kB/s 
Installing collected packages: cssselect, queuelib, idna, pyasn1, enum34, ipaddress, pycparser, cffi, cryptography, pyOpenSSL, w3lib, lxml, zope.interface, Twisted, characteristic, pyasn1-modules, service-identity, scrapy
  Running setup.py install for cssselect
  Running setup.py install for enum34
  Running setup.py install for pycparser
  Running setup.py install for cffi
  Running setup.py install for cryptography
  Running setup.py install for lxml
  Running setup.py install for zope.interface
  Running setup.py install for Twisted
Successfully installed Twisted-15.4.0 cffi-1.2.1 characteristic-14.3.0 cryptography-1.0.2 cssselect-0.9.1 enum34-1.0.4 idna-2.0 ipaddress-1.0.14 lxml-3.4.4 pyOpenSSL-0.15.1 pyasn1-0.1.9 pyasn1-modules-0.0.8 pycparser-2.14 queuelib-1.4.2 scrapy-1.0.3 service-identity-14.0.0 w3lib-1.12.0 zope.interface-4.1.3

みなさまも推奨バージョンにはご注意を…

ITベンチャー4社のインターンシップに参加しました

久しぶりに全く遊ばない夏休みを過ごしました.

セキュリティ・キャンプ

夏休み一発目はセキュキャンでした.shopetan.hatenablog.com

セキュリティ・キャンプは本当に価値のあるイベントだと思います.
参加者として,同じ志を持った他の参加者と出会えるという点,
講師の先生方やその手のプロの方々から直接勉強できるという点などがサクッと挙げられます.
自分のやってきた事に対して,これからどのようにキャリアを積めばよいかなどの社会的な勉強も出来ました.
興味関心が広がるので,来年度参加したいと思ってる人は是非参加してみてください.(と言っても例年高倍率なのだけれども)



他には,今年はなんだかんだあり,結局4社もの企業にお世話になりました.
株式会社サイバーエージェントさん,
株式会社ベーシックさん,
株式会社リブセンスさん,
株式会社ぐるなびさんの4社です.

前の2社ではエンジニアとして,後の2社ではエンジニア/データサイエンティスト枠として参加しました.
後者の2社さんでは生データを触ったので詳しいお話は出来ませんが,それぞれの感想を話したいと思います.

サイバーエージェント

shopetan.hatenablog.com

1つはサイバーエージェントさんですね,生まれて初めてネイティブアプリケーション書いたのですが刺激的でした.
実務期間は約2週間弱,エンジニア2人,デザイナー1人の3人チームでした.
また,環境も良かったです,サポート体制がとんでもなかったです.
今秋にもサーバサイドのコンペを開催するようです.
書類選考のみ(?)なので,興味がある方は私と一緒に参加しませんか!(学科学年不問です.)www.cyberagent.co.jp

ベーシック

ベーシックさんではハッカソン形式で超短期間でRuby on Railsを活用したWebアプリケーションを開発しました.
チームは3人で行いました.
結果としては3位という微妙な順位だったんですが,楽しむことが出来ました.
環境が良く,お寿司食べたりレッドブル飲んだりしながらガリガリ書いた思い出です.
社員さんのサポートも厚く,チャレンジ精神があればやり切る事ができると思います.

リブセンス

リブセンスでは,実際の業務プロジェクトにジョインし,プロジェクト内の問題解決を行うという形式でした.
期間は1週間でした.
3人チームで行い,1人がWebアプリケーション制作,1人がデータ加工やアプリケーション制作のお手伝い,
僕はエンジニア兼データサイエンティストとして生データを解析してある推定をするための手法検討や精度向上,サーバサイドのAPI部分の実装を行いました.
データ解析の推定精度は1位でした.
椅子が気持ちよかったです.そして最新のMBP15inchですね.エンジニアはデスクワークが多いので環境が良いとウキウキします.

ぐるなび

こちらは直接データソリューショングループにジョインし,実務相当の事を任せて頂けました.
実際の企業のビッグデータを使ってデータ解析,予測や推定などを1人で行いました.
期間は2週間でした.
このインターンは,とあるエンジニアイベントでたまたまご縁があり,引き抜かれる形で参加が実現しました.
直接開発グループにて受け入れをするのは初めてという事をお伺いしました.
業務の内容も新卒には任せないようなものにチャレンジして良いとの事で,ヘビーな内容の業務に従事しました.
手厚いサポートで,本当に社内のグループの皆様にはお世話になりました.

総括して自分のこと

この夏休みの2ヶ月で,やったことは以下のとおり.

  • セキュリティ
  • ネイティブアプリケーションエンジニア
  • フロントエンドエンジニア
  • サーバサイドエンジニア
  • データサイエンティスト

お前のやりたい事なんだよっていうね
やりたいことは,データマイニング系(サーバサイドのAPI作るのでも有り),セキュリティ系の2つです.
ただ,学生が実際に会社で行う業務に参加できる機会は中々無いので,あらゆる分野で万遍なく戦えたのは良い経験になりました.
これを期にリモートで出来る業務があれば,是非IT企業でアルバイトしたいです.
3年次編入なので単位習得が忙しい&地方なので都会に出るのが大変&しかも今年はあるプロジェクトに参加しており,安定して入れる時間がない というのがネックです.
ということで,データマイニングやセキュリティ系などのお仕事がありましたら超待遇で雇ってください(ひどい話だ).

情報系を学びたい学生は高専に進学すべきか?

高専の情報系出身者が,あくまで「高専全体」ではなく,「高専の情報系」という限られた観点のみから話をする.


世間一般的に高専の認知度はそこまで高くない.
今まで自分自身も,自己紹介で「高専生です.」と名乗ると周囲の友人や普通の大人からは「専門?」と聞き返されるのが頻繁にあった.
しかし,世間一般の認知が低いからと言って,大学へ進学出来ないという事も無ければ就職が出来ないという事も全くない.
現に自分も,高専の情報系を卒業し,今は大学に編入している.


www.nikkan.co.jp
最近ではこんなニュースも話題になった.


少し話がそれるが,
高専では,就職はワイルドカードを使っていると言っても過言でない.
これはおそらく殆どの高専がそうであり,高専の卒業者は大手のメーカに勤めていたり,大手のインフラ系に勤めているケースが少なくない.
また,情報系に限った話ではなく,これは一般的な高専生の就職先のケースとして挙げられるものである.
(しかし,「安く雇える即戦力」として扱われるケースも多いと聞く.この辺りの本当の実態はよく分からない.)



本題に戻る.
最近,「情報系をやりたいので高専に入りたい.」という相談を中学生やその保護者さんから受ける事があった.
この場では,中学生が安易に情報系に道を絞ってしまう危険性と,社会的な「情報系の」高専生の評価という2つの観点から進学すべきか否かを考えたい.


情報系を学びたいという中学生でも,大きく分けて3パターンが存在すると思っている.

1. 「ぼんやりと情報系に興味がある」という方
2. 「いずれ情報系を学びたいと思っており,大学進学後に学ぶよりも高専で学んだ方が3年早く得できるのでは」という方
3. 「バリバリプログラムが書ける猛者達が集まっているんだろう…俺はここでやっていけるのだろうか…」と武者震いしている方

「ぼんやりと情報系に興味がある」という方

このパターンが正直一番危険だと思っている.
下手な事は言わないのでやめた方が良い.
学科にも寄るだろうが,大体の高専は1年にしてプログラミングの実習が始まる.
1年生,2年生にして大体のプログラムが書けるようなカリキュラムになっているが,このパターンの子は低学年にして挫折する事が多いと思う.
「そもそも自分はプログラムを書くのに向いていない」と感じる子が低学年にして大多数を占めていた.
例えば何かを制作する自由課題が出た時に,この向き不向きは顕著に表れる.
向いている子・強い興味関心があった子の方が上手く結果を出せるのは当然であり,何となく興味があって進学した子は強い嫌悪感を抱いて課題に取り組むことが多い.
また,この手の課題は低学年に始まり,卒業するまで何らかの制作は行い続ける必要がある.
興味を失くしてしまった子は制作するのも他人任せであったり,嫌々取り組んでいる子も少なくなかった.

これはあくまで経験であるが,卒業時までに情報系に強い興味関心を持って取り組んでいたのは40人中10人にも満たなかったと思う.
ぼんやりとした興味関心が,強い興味関心に変わるのは,環境に加えて自分自身が能動的に取り組む必要があるので博打的要素が強い.
普通高校に進学してから,自分自身でその分野を調べ,それでも更に興味が湧くようであれば大学からでも遅くないと思っている.

「いずれ情報系を学びたいと思っており,大学進学後に学ぶよりも高専で学んだ方が3年早く得できるのでは」という方

このパターンの子は是非高専に来て勉強すべきだと思う.
情報系を学びたいと考えている以上,何かしら情報系に興味があるはずなので,その興味関心は高専に進学すればきっと広がると思う.

一つ注意すべきパターンの子が「自分でゲームを作りたい」という理由で高専に進学してくる子だ.(今こそまるで興味が無くなってしまったが,当時はそうだった.)
高専オープンキャンパスなどで先輩が作った凄いゲームを見て「カッケ―!」と思って進学する子は要注意.
授業でゲームは作らない.
大体作っている人は能動的に,あくまで自主的に作っている人であり,「授業でゲーム作りたい」という受動的な考えだと入ってからギャップに後悔する.
しかし,同じような志を持って高専に進学してくる人は何故か多い.
高専はそういった観点から観ると,人生の早い時期に同じ志を持つ仲間と出会えるというメリットもあるので良いと思う.
また,情報系に興味がある以上,何かしらの他の情報分野に使える技術は学べる.
ゲームは作れなくとも,ゲームを作る為の基礎は理論的に学ぶことができると思っている.

「バリバリプログラムが書ける猛者達が集まっているんだろう…俺はここでやっていけるのだろうか…」と武者震いしている方

そんな期待はしない方が良い.
大体の人は入学して初めてプログラミングをする子が多いので,そんな強い人は全体の1割未満と考えてよい.
同じ猛者を求める人は,高専プロコンに参加するか,ロボコンに参加すると良いと思う.
また,最近ではIT系の企業がエンジニアとしてアルバイトを雇ってくれるケースも多い.そういったコミュニティから仲間を作れば不満は感じにくいのではないだろうか.
(それでも先述したように,同じクラス内で能動的に取り組む人はせいぜい10人程度と考えてよいので,クラスでの不満は募るかもしれない.これは仕方ない.)

高専の授業は,出来る人に足を揃えず,出来ない人に足を揃えて行う授業が殆どだ.(それでも留年率は5年間で1クラス8人が消えると考えてよい 厳しい世界)
そのような環境の中で,出来る人が授業に対して満足できることは少ないかもしれない.
しかし,何故か出来る人に限って留年する率が高いのも事実である.
自分が見てきた,聞いてきた殆どのケースは,「自分のやりたい事に没頭しすぎて授業に出ない/テスト勉強をしない」ために留年するようだ.
普通高校でも大学に進学すれば情報系の勉強は出来るうえ,早い段階で闇落ちするよりは高専に進学しないで適度な束縛の中で勉強をした方が親孝行かもしれない.

ただ,これは極端なケースであり,実際に優秀で,能動的に勉強をし,かつ自分の趣味のプログラミングも両立して行っている人も存在した.
高専は,普通高校と比較して比べ物にならないくらい自由なので,自由をはき違えずに有効活用すればきっと高専生活は良いものになるのではないだろうか.


社会的な評価のこと

IT系に限っては高専の情報系出身の学生の評価は高いと思う.
IPA主催のセキュリティキャンプでの関わりをはじめ,今年は計4社インターンに参加したが,どの会社でも高専生の評価は高かった.
自虐的な高専生もよく見るが,このような評価にはもっと自信を持った方が良いと思う.
(その分期待も大きいので,しっかり応えられる人間にならねば とも感じた.)

また,大学的にも高専出身の学生の評価は高い様に感じる.
大学に関しては,色々な大学の話を聞く限り,内部生よりも編入生の方が出来る割合が大きいという話を頻繁に耳にする.
学部2年の年齢で殆どの高専生が卒業論文に着手しており,そういった意味での専門性も高いと感じる.
(他の内部生より始めるのが早いのだから当たり前といえば当たり前かもしれない. 中学生にして高専に入る覚悟を持っているのだから当たり前と言わずに評価されるべきとも思う.)


自分のこと

私も高専出身であり,中学生の頃は2番目のパターンに該当している人物であった.
しかし,早々に情報系の分野に挫折し,高専が嫌になっていた時期もあった.
結果的に今は好きな学問を見つけ,それを追求しようと日々取り組んでいる.
自分自身が高専1年生に戻るとしたら,「能動的に,色々な事に興味を持ってほしい」.
学問である以上,何かしらの興味があれば,そこから爆発的に成長するケースも少なくない.
結局,自分が本当に興味がある事に出会ったのは高専4年になってからであった.
高専の先生方は親身に相談に乗ってくださるし,友人も皆良い人達だった.
もう戻りたいとも思わないが,高専という環境下で情報系を学べたのは本当に良かったと感じている.
高専は低学年と高学年で印象が変わるところだと思う.
より専門性が問われるのは高学年になってからなので,どれだけ低学年の間に色々な事に興味を持てるかが重要だと本当に感じている.


色々なご意見お待ちしております.

【TechDesignCAMPエンタメ編】サイバーエージェントのインターンに参加してきた.【2015】

表題の通りです.
機密(ソースコードなど)に触れない程度のお話はしても良いそうなので,ありのままの気持ちを話したいと思います.

参加したきっかけ

そもそも私がこのインターンを知ったのはサイバーエージェントさんのエンジニアブログを読んでからでした.
元々サイバーエージェント秋葉原ラボの記事を読んでいたりしたので,会社自体にも興味があっての参加でした.
また,エンタメ編(ゲーム作る系とエンタメ事業系があった)を選んだ理由ですが,これは3つあって,
1つ目は他のゲーム系には興味が無かったこと.
2つ目は他社のインターンにも興味があったので長期は選択肢になかったこと.
最後はエンタメ事業で使われている,サービスの中身のデータマイニングや関連アルゴリズムに興味があったことです.
なので「開発バリバリです!」みたいな人ではないので,参加者の中では珍しいタイプだったと思います.

エントリーシートからインターン決定まで

某逆求人でサイバーエージェントさんが参加していることは知っていたのですが,サイバーさんが参加していたイベントに参加をしていた訳ではないので選考スキップ等は無く,1から選考に参加しました.
エントリーシートを一人でガリガリ書いて,無事に面接までたどり着き…という感じでした.
面接は,私の場合は1次と2次の2回で,1度目は技術部門の担当の人事の方,2度目は技術系やデザイナーさんなどの採用責任者さんでした.(怖い)
話した内容は色々ありますが,私は自分が興味のある事や作った事のあるもの,研究していた事などアレコレ話しました.
一般的なフロントエンドやサーバサイドとも言えないニッチな分野だったにも関わらず,理解を示してもらえるのが楽しくて話していたという感じでした.
会社の雰囲気や内容なども伺う事ができて,とても楽しかったのを覚えています.

インターンの内容

このインターンは,エンタメ事業部の既存の「AWA」と「宅スタ」をより良くするアプリケーションを作るという内容のものでした.
また,メンバーはエンジニア2人,デザイナー1人の3人チームでした.
どのような技術選定で,どのようなものを実際に行うのかは知らされておらず,インターン開始の数週間前になって「(iOS,Androidの)ネイティブアプリで作る」という事を知りました.
私はネイティブアプリを生まれて一度も書いた事が無かったので,参加が決まった事を凄く後悔してました.(メンバーに迷惑をかけると思って)
期間に関しては6日間(土日も合わせると8日間)で,1日単位では10時から19時の間で行ってました.
実際は私の場合は8日間フルで10時-22時(業務終了後に自主的に残って)とか平気でやってました.

これだけ聞くと悪い印象があるかもしれないですが,実際は全然そんな事もなく,全期間で内定者メンターさんが一緒に協力して下さったり,中のエンジニアさん,デザイナさんが10人以上(もっといたかも)一緒に協力をしてくれる物凄いサポート体制でした.
特に内定者メンターさんには本当に付きっきりでペアプロして頂きました.一緒に理論からロジック,実装まで考えて頂き,この期間で0だったAndroid力が圧倒的成長したのは言うまでもないです.
また,環境も良く,筑波からの交通費に加えて宿泊先を期間中に加えて前泊後泊まで用意して頂きました.本当に感謝してもしきれません.(しかも日給1万円!!)
環境も良ければインターンに関わる方々もいい人ばかりでした.メンバーをはじめ,一緒に参加していた他グループのメンバー,人事の方々,エンジニア,デザイナの方々,色々な人たちが全力で協力してくれました.
お陰で期間中は全然辛くなく,楽しくて楽しくて延々と夜まで開発している感じでした.

余談あれこれ

「楽しくて楽しくて延々と開発していた.」と書きましたが,冗談抜きで楽しかった!
その証拠としていくつかツイートを載せておきます.


例えばお昼ご飯支給してくれたりとかサイバーエージェントの水飲み放題だったりとか.


例えばStatic🍣の差し入れがあったりとか.


例えばおやつにエナジー注入が出来たりとか.


例えばオフィスの自販機がこんなことになってたりとか.


例えばゴリゴリ開発してた結果,こんなことになったりとか.
(これは冗談抜きでメンバーに恵まれて優勝できました.足引っ張ってばかりでしたがメンバーの2人,本当にありがとう!メッチャ楽しかった!)


例えば夜景の綺麗な都内某所が打ち上げの会場だったりとか.

まとめ

約1週間の開発でしたが,丁度良かったです.(多分これ以上短いと制作物の質も悪くなっていただろうし,これ以上長くても疲れてしまってたと思うので.)
とても濃密で価値のある時間になりました.
とにかく技術力があり,魅力的な方々の多い会社だと改めて感じ,自分の目指す場所を考えるいい機会を与えてもらったと思ってます.
技術面でもサーバサイド寄りからネイティブやフロントエンドも触るきっかけにもなって,フルスタックエンジニア感増しました.強くなった感半端ないです.
関係者各位ありがとうございました.また是非お伺いします!

【Security Camp 2015】セキュリティ・キャンプ全国大会2015に参加してきました.【#seccamp 】

5日間に渡るキャンプの参加記事になります.

About me

HN: しょぺたん
年齢:0x14
Like:機械学習, 自然言語処理, データマイニング
日常的にやってる事:Web Developer, Researcher
Securityに関する知識:(ほぼ無かった)

来年以降,参加したいと思っている方へ

記事が長くなると伝えたい言葉がボヤけるので先に結論からお話します.

冗談抜きで5日間が宝物になりました.

情報系に身をおいてから,このキャンプ以上に密度の濃い時間を過ごした事が無いです.
今年は,参加者50名に対して講師・チュータを始めとした方々が45名以上と恵まれたキャンプとなりました.

参加しようとしている方,惜しくも今年参加出来なかった方もいらっしゃると思いますが,来年度以降もチャンスがある方は
まずは絶対に応募用紙提出しような.
セキュリティに興味が無い方もいらっしゃると思いますが,興味ない人こそむしろ参加した方が良いかもしれません.

セキュリティ・キャンプに参加すると,

こんな事になったり,

こんな事になったりします.しかも,全額無料で.


今年は「未解決問題に対してどのようなアプローチを仕掛けるか」というテーマのグループワークがあり,
最終日に講師・チュータさんをはじめ,協賛の企業さんや関係者の方々,に向けて成果発表をするセッションがありました.

セキュリティを知らなかった人間でも沢山の方々に評価を受け,グランプリをいただくことが出来ました.いえーい

今までセキュリティに興味が無かった人ほど吸収できることは多いと思います.


Q.「全然分からなくて申し込むのすら億劫」
A.申し込まないと永遠に分からないままかもしれないです.
逆に気持ちさえあれば,何倍も知識の吸収ができます.マジで.
また,分からなくても事前学習があるのである程度のところまで引き上げられます.
授業についていけないと思う人もいると思いますが,講師やチュータの皆様のお陰で 分からなかった私でも最後まで完走できました.


Q.「大体知ってるし行かなくてもいいわ」
A.知ってる人こそ参加すべき.
これだけすごい人が集まってるのってなかなか無いですよ.
出来る人に合わせた授業も多く,基本的に知ってる人はどこまででも成長できる機会なのではと思いました.
また,嫌でもすごい人たちに囲まれます.参加者も大抵何かの分野で強い人達です.
こうしたコミュニティって中々形成されないと思うので,人脈を広げるという観点でも非常に価値があると思います.


また,参加してみて面白かったのは,


本当にこれ.

参加したきっかけは?

後述する応募に関する資料でも確認出来ますが,自分の興味関心分野に役立てたいという思いがありました.
セキュリティのスペシャリストを目指していた訳ではなく,普段の自分の活動に活かしたいという気持ちが強いです.

加えて,開発者サイドとセキュリティサイドがあるとすると,ぼくは完全に開発者サイドの人間でした.
(開発者サイドと言うと語弊があります 本当は研究者サイドの興味関心が強いです.)

参加まで

shopetan.hatenablog.com
ここに事前課題に関する以前の記事があります.
参加決定後は事前課題に追われていました.
後は,積極的にCTFを始めたりですかね.

ksnctf.sweetduet.info

CTFは,ゲーム感覚で脆弱性などを発見しポイントを競うものです.
一日丸つぶれするくらい楽しいので一度触ってみる事をオススメします.
ここで頑張った知識がキャンプでも何度か役立ちました.

参加直前

とにかく名刺を沢山刷りました.100枚では足りないとのアドバイスも貰ったので200枚刷りました.
結果的に本当に100枚近く交換したので準備してよかったです…

後は,

参加3日前: Rock in Japan 2015参加(全然寝てない)
参加2日前:某社で30時間ハッカソン開始(まったく寝てない)
参加1日前:ハッカソン終了 夜中に帰宅後 即キャンプ準備(準備に追われ全然寝てない)

参加当日:グロッキーな状態で初日を迎える.

こんな事にならないためにも,是非余裕を持ったスケジュール管理をして下さい…

参加初日

かなり大勢の方々と名刺交換して頂けました.
あんまりにも人が多いと覚えてもらうのに困りそうだったので,海にでも行くような格好して行きました(結果的に色々な人に自分を認知してもらえたのでよかった)

初日は開講式,特別講義と題してプレゼンがありました.
また,初日の夜には早速専門講義が始まりました.

以降専門講義が続くわけですが,専門講義は人によって選択している講義が違います.
私は高レイヤを中心に選択していましたが,他にも低レイヤ,検知,解析と4つのトラックから選択できる形でした.
私が講義中にメモした,各講義の内容はGistでシェアしたいと思います.(必死にメモったので雑ですが,結構ボリュームあります.)


セキュキャン2015講義メモまとめ · GitHub
こちらに全メモがありますのでご自由に確認して下さい.

2,3,4日

本当に朝から晩まで講義です.
朝8時30分にスタートし,22時に終了です.
例年寝坊して遅れる人がいるようですが,今年もいましたね.
ちなみに就寝は23時でした.皆さんちゃんとに寝てました.(寝てました.)

同時にグループワークもスタートし,講義の合間を縫って講師の先生方にインタビューをしたり,ディスカッションをしたり,プレゼン書いたり…
実際,体調的にはかなりしんどいですが,皆さんちゃんとに寝てましたので元気でしたね.(元気でした.)
ご飯も3食きちんと食べられますし,食事中も色々な人とお話ができるので楽しかった!

最終日

グループワークの成果報告会がありました.
僕達のグループは近年市場の規模が懸念されるブラックマーケットに焦点を当てて問題解決に取り組みました.

www.slideshare.net
結果的に9チーム中1位のグランプリを頂けました.
(ふざけたスライドですが)よくまとまってるとのコメントも頂けたので宜しければ何かの参考にして下さい.

また,最初にtweetを埋め込んだように,協賛企業の方のグッズや,講師の先生方が書いた本など,沢山いただくことが出来ました.

まとめ

非常に有意義な5日間でした.
僕自身もかなり成長できたと思っています.そういった意味ではチャンスを活かせてよかった!

興味があるなしに関わらず,この記事で何らかの参考になれば幸いです.
時間ごとの詳細な感想も他の参加者の方がきっと書いてくださると思います.


本記事は,次回以降の参加者に参考になるように執筆しました.
何か質問や問題があれば遠慮なくお声がけ下さい.
ありがとうございました.


講義資料のまとめもあるようなので是非ご参考にして下さい.(私はメッチャ参考にしてます!)d.hatena.ne.jp

セキュリティ・キャンプで"""最高の夏"""にしような.