ふるつき

私は素直に思ったことを書いてるけど、上から目線だって言われる

longとboolのoverload

こういうはまり方をした。

https://run.dlang.io/is/LpLTja

longを引数に取る f が呼ばれると思ってたんだけど、その実 bool のほうが呼ばれてた。0と1に限っては、こういうことになるらしい。 回避策としては 0L、1Lと書いてlongを明示するか、 int も overload して、 long を呼ぶか。

高専セキュリティコンテスト #SCKOSEN で優勝した

奈良高専は insecure というチームで、 theoldmoon0602、 thrust2799、 kyumina、 miwpayou の四人で、高専セキュリティコンテストに参加しました。現地行きたかったけど申し込み失敗しました。

あと師匠がいねぇ。

これは二日間(実質24時間程度)の Jeopardy + King of the Hill なCTFで、 Jeopardy が 22問くらい、 KoH が 2問ありました。 KoH では 30点が 10分ごとに与えられます。

私チーム insecure はチームワークを遺憾なく発揮して、 3930 点で 1位(35チーム中)でした。私はそのうち、 1400 + 630 点を入れましたので、解いたものについて 簡単な Write up をします。

f:id:Furutsuki:20171022123605p:plain

jeopardy Binary[100] フラグを答えろ

バイナリが降ってくるので strings する

jeopardy Binary[500] OreNoFS

途中で追加された問題。31M くらいのバイナリが渡されて、これが独自FSらしい。めっちゃよなべしたけど解けなかった。最終的には解いた。

バイナリは GPT でパーティショニングされているということ。1クラスタ4096byte 単位で管理されていること。AllocationTableのサイズ、DirectoryEntry 構造体が示されていた。

最初は binwalk などしていたが、 何かしらの zip ファイルが存在していて、 flag.png_MAXOSX/.flag.png が入ってることしかわからず、 unzip はできなかった。

二日目になってやっと参考になるサイトを見つけて ( http://memes.sakura.ne.jp/memes/?page_id=2303 ) 、AllocationTable がどのような存在かを理解したので、ごちゃっとパーサを書いたらunzippable な zip を取り出せました。

方針としては、

  1. DirectoryEntry をみつける
  2. これは ほしいzipのEntryだって知ってるので、 offset を見て、バイナリを読み、AllocationTable から次のクラスタのオフセットを手に入れる
  3. これ以上なくなったらそれを吐く

です。

import struct
import os
import codecs
import sys
from io import SEEK_CUR,SEEK_SET

LBA_SIZE = 512


f = open("raw.dmg", "rb")

f.seek(512, SEEK_CUR) # skip mbr
f.seek(512, SEEK_CUR) # gpt header (primary)

f.seek(32, SEEK_CUR) # partition entry

first_sector = struct.unpack('<Q', f.read(8))[0]
last_sector = struct.unpack('<Q', f.read(8))[0]
f.seek(8, SEEK_CUR)

partition_name = f.read(72)
partition_name_str = codecs.decode(partition_name, encoding='utf_16_le')
if len(partition_name_str)>0:
    print("------------")
    print("first sector: {}".format(first_sector))
    print("last sector:  {}".format(last_sector))
    print("name: {}".format(partition_name_str))
    print()

f.seek( first_sector*LBA_SIZE, SEEK_SET)



AT = f.tell()
print("ALLOCATION TABLE IS {:0X}".format(AT))

allocationTable = []
for _ in range(8192):
    v = f.read(2)
    v = struct.unpack("<H", v)[0]
    allocationTable.append(v)

print("----------------")
print("Allocation Table");
for i, v in enumerate(allocationTable):
    if v == 0:
        continue
    # print("[{0}]   {1:0X}( {1} )".format(i, v));
    pass

DIRENTS = f.tell()
print("DIRECTORY ENTRIES AT: {:0X}".format(DIRENTS))

binvalue = []

while f.tell() < (last_sector+1)*LBA_SIZE:
# read directory entry
    tell = f.tell()
    magic = f.read(1)
    if magic != b'\x0f':
        f.seek(31, SEEK_CUR)
        continue

    name = f.read(8)
    ext = f.read(3)
    size = struct.unpack("<I", f.read(4))[0]
    offset = struct.unpack("<H", f.read(2))[0]
    attr = f.read(12)
    reserved = f.read(2)


    print("-----")
    print("@ {:0X}".format(tell))
    print("magic: {}".format(magic))
    print("name: {}".format(name))
    print("ext: {}".format(ext))
    print("size: {0}({0:0X})".format(size))
    print("offset: {0}({0:0X})".format(offset))
    print("attr: {}".format(attr))
    print("resv: {}".format(reserved))

    nextoffset = offset
    while nextoffset != 0xffff:
        f.seek(0x1000 * nextoffset + AT, SEEK_SET)
        b = f.read(0x1000)
        binvalue.append(b)

        print("atvalue: ", end="")
        print(allocationTable[nextoffset])
        nextoffset = allocationTable[nextoffset]
        if nextoffset >= len(allocationTable):
            break

        
    print()

    break
o = open("kore", "wb")
for b in binvalue:
    o.write(b)

きったねぇ

jeopardy Crypto[100] かんたんな符号化2

これはほとんど thrust2799 が解いた。

わけのわからん文字列が与えられるけど、 base64 -d すると16進値っぽい数字列になる。これを decode('hex') してやると KP から始まる文字列になるので、エンディアンをひっくり返してあげて、保存する。 file をかけると Word 2007 と出るので、 libre Office Writer で開くと 縦にフラグが書いてある。コピーして適当なファイルに保存して cat | tr -d '\n' した。

jeopardy Network[100] 寝坊気味のコンピュータ

pcap が降ってくるので strings してうまいことつなぎ合わせる

jeopardy Network[100] ログインしたいんだ!

pcap が降ってくるので strings してBase64っぽい文字列を見かけたら base64 -d する

jeopardy Web[100] ログインせよ

ログインフォームがあるのでユーザ名 admin、パスワード 'or'a'='a と入力する

jeopardy Web[100] 灯台下暗し

ログインフォームと、ログインのロジックをPHPで書いたものが表示されるので ざっと眺めて login.db みたいな名前がひっかかる。アクセスすると sqlite dbファイルが降ってくるので apt install sqlite3 して sqlite3 login.db する。 .schema で users というテーブルだけがあることがわかるので select * from usersすると admin のパスワードがフラグになっている。

jeopardy Web[200] Web1

難読化された javascript がある。適当にBeautifyして処理を一つずつ追ってやる。すると DOM を書き換えるしょりと、別のことをしている処理が存在することがわかる。 別のことをしている処理が怪しいので単体で実行するように書き換え、余計な分岐をはずしてやるとフラグが手に入る。

jeopardy Web[200] Web2

いわゆる Javascript puzzle。解き方が何処かに乗ってないかと思って調べたら burningCTF でまったく同じ問題が出題されていることがわかったのでWriteUpをみながら真似をした。

KoH 通信を解析しろ

pcap ファイルが降ってくる。サイズはそこそこ。みると、幾つかの ssh ログインとたくさんの TCP SYN がある。ssh はよくわからないIP同士で通信していることが多い。TCP SYNは 10.201.1.101から10.201.1.102 へのもの。最初はポートスキャンかなと思っていた。

ちょっとだけある HTTP パケットにフラグが書いてあり、さらにバイナリが存在することが示唆される。フラグに port knocking とあるので TCP SYN のうちACKが帰ってきたものを真似て port knocking してやると a.out が手に入る(port knocking しなくてもいいという説がある→作問者がいるって言ってた)。

フラグは thrust2799 が手に入れ、私が port knocking してみれば、と言った。 thrust2799 はバイナリ読めないと開始前から何度も言っていたので、私が解析することにしてファイルを貰った。

radare2 で見ていたがわかりにくかったので Bokken を入れてる miwpayou にも解析してもらった。どうやら a.out は 8081番で待ち受ける fork型のサーバで、fork した先でstrncmp や strlen を使い、一部で popen していることがわかった。

gdb が存在することを思い出したので set follow-fork-mode child して b do_workして、fork後の処理を追う。 strncmp では recv した文字列を SCK と比較していることがわかった。さらに次では recvした文字列+3を popenに突っ込んでいることがわかった。

そこで試しに SCKwhoami と送ってみたところ ubuntu というレスポンスが来た。 SCKls → SCKcat README → SCKecho insecure >> flag してKoHになった。

余談だけど SCKkillall a.out したらサーバからのれすぽんすがなくなった。これを運営に報告したらしばらく経って復活した。復活して SCKwhoami したら root だった。


SECCON まわりのコンテストって教育的な問題が多いですよね。高専生のレベルが上ってもっとヤバゲな問題も出てきてほしいです。

それにしても楽しいコンテストでした。来年も参加したいものです。

あと #procon28 で悔しい思いをしたぶんこっちで晴らせてよかった。

最後ですけど

  運営の皆さんお疲れ様です。ありがとうございました。

  弊学のお方、休日出勤させてしまい申し訳ありません。優勝したので許して。

  ちーむめいとの人々。さいこう

Wayland は ~/.xprofile を読んでくれない

~/.profile~/.xinitrc もよまない。

おいおい、じゃあ環境変数どこに書いてやればいいんだよ。 ~/.bashrc に書いてもいい。これが一番楽でしょ。

あとは /etc/environment 。ここは読まれる。

最近 Ubuntu 17.10 にしたらデフォルトが Gnome3 on Wayland で fcitx が chrome 上でうまく動かなかったので、 /etc/environment

XMODIFIERS="@im=fcitx"
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx

って書いたらうまく行った。

Fcitx - ArchWiki

に書いてあったよ。普通に ~/.xprofile 読んでくれてもいいと思うし、個人のスタートアップスクリプトなんでもいいから一個読めるようにしといてくれりゃあいいのに

#procon28 にいってきた 

procon28 に行ってきた

この記事は、高専プロコンが嫌いな私が、いろいろ難癖をつける記事です。

「俺たちはプロコンに行ったらまず真っ先にバグを確認する」

本年で一番推してるラノベであるところの、「俺たちは異世界に行ったらまず真っ先に物理法則を確認する」へのリスペクトを最大限に発揮したチーム名で、全国高等専門学校プログラミングコンテストの競技部門に参加してきました。チームメイトはスーパーコンで一緒に組んでたクラスメイトと、一つ下のかわいい男の子です。

結果を端的にお伝えすると、「準決勝12位(くらい)で敗退」でした。

おいおまえパズルやめろ

昨年の競技部門の悪夢を憶えていますか。俺は憶えてるぞ。なんだあの人力は。なーにがプログラミングコンテストじゃ。(きくところによると高専プロコンは過去にもいろいろな悪夢を産んでるらしい。サイコロとかね)。

昨年、私たち奈良高専は「複合機」を引っさげて競技部門に参加し、人力で予選を突破したのち(バッテリーがうまく複合機につながらなかったんよ。焦った)、準決勝で適当な解を印刷、一瞬だけ場を沸かせた後退場しました。あの大会では、n-1解法(ガチャガチャとやってピースが一個以外すべて枠内に収まるような配置を探す)が横行し、出場者、聴衆、運営に対して、大きな傷跡を残していきました。

……なんで翌年、おんなじようなルールの競技をやらせるんだよ。

やりたくねえんだよ俺はあれが嫌いなんだ。パズルは解きたくねぇんだよ。

自分たちが解けない程度の雑魚であることを棚に上げてるのはわかってますが……。

とにかく、今年のルール発表を見た瞬間に私に押し寄せた絶望がおわかりか。またパズルだよ……。いやだ……。

問題作成側もいろいろ配慮はしてくれて、「すべての頂点がグリッド上に配置される」「ピースの形状はQRコードで配布される」という、コンピュータで解きやすい問題になっていましたが、だけど僕はこのパズルを解くための何を作る気持ちもうまれなかった。

別に競技で完全回答できたから楽しかったとか思ってないんだからね。成功体験(?)に負けたりしないんだから。

競技の成績

予行はよく見知った問題だし楽勝でしょw! と思ってましたが、実際にパズルを組み立てる練習をあんまりしていなかったのでいろいろ苦戦して、あと、形状情報のQRコードが分かれている想定を指定なかったのと、x座標y座標を逆に読んでいたのとでぎりぎりに解き終わりました。このときは入力をVimでがががと編集して使いましたけど、席に戻ってから急いでまとめて読めるように修正をかけました。

予選はどうだったんだっけ……。形状情報をとりあえず読んでみたけど、ソルバが行き詰まって、しかたなく配置情報を開けてみたらソルバが解いたところがあっているということがわかった気がします。それでもいっこ開けて、ソルバに正しい情報を入力してたけどばぐばぐし始めたので諦めて配置情報を全部使って人力したら、予選通過ぎりぎりだったはず。八位とかかな。

この日の夜にこのままじゃ負けると思ってソルバの修正をやろうとしてた(ピースの結合条件を緩めてたはず)んだけど眠気に負けて二時間くらいねたはず。

準決勝ではとにかく形状情報と配置情報1を読んだ。ソルバでやってみようかと思ったら反応しなくて、よく見たらNullPointerExceptionしてた。なんだおいおい、と思ってちょっと詳しく見たら、昨晩変更した箇所から未確認のバグが湧いて出てきていた。何が「俺たちはプロコンに行ったらまず真っ先にバグを確認する」だよ。ソルバがUndoできなくなったのでやむなく配置情報を3まであけて人力に方針変更。チームメイトが人力してる間に、わたしはソルバを何度も起動し直していろいろなパターンを探していた。

いくつかソルバが新情報をもたらしてくれたのでなんとかACして、ふえぇって言いながらソルバを適当に回してたら、形状情報だけで解答がでた。おいおい読めねぇよ。このなんかぐちゃあってなるのは既知の修正できてないバグで、回避策としてUndoがあったんだけど、Undoを封じられた結果コレですよ。

f:id:Furutsuki:20171009174617p:plain

チーム紹介動画

運営としてはこれは成功だったんですか。私ら一個も見れてなくてクソつまんないんだけど。ところで弊チームの紹介動画見てくれ。ウチの動画リーダーまじすげぇから。

学生交流会

去年も思ったけど出場するチーム毎でチーム組んでも交流につながらねぇよなぁ。上位陣にはやたら豪華な商品があることを学んでいたのでがんばりました。一位だよ。バグってなんですか。俺も知らねぇよ。確認なんかしません。2万円もらったけどバグがでました。

競技部門公募

その場にいなかったのでTwitterの聞きかじりですが、競技部門の内容、次回は公募するんですか? 個人的にはがっかりですね、運営頑張ってくれよ。というかこれ、解法を考えてから問題を投稿すればいいのでは(?)

次回

来年は順調にいくと五年生なので(最近学科主任に楯突いてるのでちょっと進級不安になってきた)、プロコンしてる余裕なさそうです。というか私はあんまり高専プロコン好きじゃないんだ。俺が勝てないから。あと競技が不遇なのと審査員が匿名なのが嫌。

でも、いざ身を引くとなると、少しさみしいものですね。高専プロコン、3位までに入って泊をつけるくらいしか参加意義が無いと思ってたのに。あとさくらのVPSのクーポンな。さくらさんどうしたんですか、高専プロコンは魅力的ではなくなってしまいましたか。

なんか書き忘れてたら書き足します。コレ書いてる途中にめっちゃ喉痛くなってきたし明日は寝こむ。やっと高専プロコンが終わって自分のやりたいことしたりアニメ見たりできるんだよな。やったー。

ことのは・アムリラートをやった

ことのは・アムリラートという百合ゲームをやった(とりあえずエンディングの一つにたどり着いた)ので短いポストを書きます。

sukerasparo.com

あらすじ

凛という女の子が唐突に異世界にやってきてしまいます。そこはいままでいた場所と瓜二つなのですが、 1.空がピンク色(作中で一度だけバラ色という表現もでてきたはず) 2.使われている言葉(文字も)がまるで違う という世界です。

途方に暮れていた凛ですが、Rukaという女の子に助けられ……

という感じです。

短い感想

面白かったです。Rukaかわいい。このゲームを作るのはめちゃめちゃ大変だったと思うのですが、よく出来ていました。でも相関詞の学習の部分は無限につらいです。はやくストーリーの続きを見たくて身が入らないし、ちょっと勉強して憶えられるものでもなさそうです。面倒ならセリフを聞くだけでも良いかも。

と、いいつつ、こんなことも言いました。偉そうだなぁ

Juliamo について

凛が迷い込んだ場所で用いられていたのは Juliamo という言葉でした。これは私たちの知る Esperanto と酷似した言語ですが、細部には違いがあるようです。もっとも大きな違いは、文字でしょうか。Esperantoで用いられる文字はラテン文字とそれにハットがついたものなのですが、Juliamoで用いられる文字は似て非なる文字です。私はこのフォントが大変気に入っていて(gはあんまりすきでは無いですが……、あとbを無限にwと間違えます)、ゲームを解析してでもフォントファイルを抜き出してやる、という心意気だったのですが、↑のURLできちんとフォントファイルが提供されていたのでありがたいことです。

これは完全に話がそれますが、juliamoフォントで、juliamo文字が全角英文字に割り当てられていることや、ハット付き文字が入力しづらいのは不満です。普通に半角文字でよかったし、 cx -> ĉ というような合字処理もぜひ欲しいところでした。まあこれは自給したのでよいです。

ゲームを遊んでどうなったか

Juliamo に大変興味がわきました。これは同じクラスに同じゲームをプレイした人間がいたという奇特な状況あってですが、ここ数日は毎朝、「Bonan matenon!」と言い合っています。

それから、アドベンチャーゲーム? ギャルゲー? に対かったする心理的ハードルが下がりました。きちんとしたパッケージのPCゲームを買ったのは今回がはじめてでしたが、他のゲームもあそんでみたいです。ところで私が好きなADVは シルフェイド見聞録です。

これからも Juliamo を学び、 Juliamo に親しんでいきたいです。 Gxis revido!

DMM.comラボにインターンに行ってきました

DMM.com ラボというところにインターンに行ってきた

学外実習という形で、 DMM.com ラボという会社に二週間ほどインターンに行ってきたので記事にします。

DMM.com ラボとは

DMMです。DMMのうちエンジニアがいる場所がDMM.comラボという認識で良い気がしています。

インターンまで

学校にインターンのお知らせが来たので応募しました。以上。 Messages DMM.comラボには私の所属するjokenのOBであるところの yanoshi さんという方がいらっしゃるわけですが、高専プロコンまわりでちょっとお知り合いになりまして、まあでも顔見てTwitterで相互フォローになりましたくらいに思ってたら、なんか私がインターン周りのツイをしていた関係でDMが飛んできまして「弊社でインターンやりたいんだけどどんな感じがいいですか」と。それでその時思ったことをつらつらと答えたわけですが、まあこの時点でインターン先決まったみたいなものでした。

で、まあ実際に募集が来て、「おいおいお金はどうしたよ」とか思いながら応募しました。応募の時は簡単な履歴書を書き(学校で履歴書のフォーマットが用意されてた。写真をスーツで撮れと書いてあり「おいおい勘弁してくれ」と思いながら学生服で撮った)、それから「自分をタグ付けする単語50」というのを書きました。あとでわかるんですがこの自分タグ付け、めっちゃ書くのしんどかった割に誰にも見られてないっぽかったです。

この辺から愚痴っぽくなる。

それからしばらく、結構待ちましてもう夏休み入っちゃうよ、というあたりで不安になった私が yanoshi さんに「どうなっとんのや」とDMを送り、とるものもとりあえずインターンに通ったらしいということがわかりました。クラスメイトからもう一人、DMM.comラボには応募していたのですが、その人の合否がわかったのはそれから更に一週間か二週間ほどあとになってからのことでした。この辺の対応が学生的にはものすごく遅く感じられて最高に不安でした。応募はメールでやったんだけど受領メールくらい返して欲しいですよね。

そのあともなかなかインターンの日程など決まらず(というか音沙汰がない)、「そろそろ新幹線とか確保したいんですが……」となった私がまた yanoshi さんにDM送るとそのまま日程がきまる。人事どないなっとるんやって思ってました。なんか向こうもタイミング悪かったみたいだし多分ノウハウもなかったので仕方ないですね。

というわけでインターンが決まりました。 8/21から9/1までの二週間(十日)、交通費、昼食代支給という感じです。なんか他に応募がなかったみたいで、私一人でした(弊学から応募してたもう一人は、結果待ちの間に別のインターンが決まってしまった)。DMM.comラボに応募するようなレベルの人は他の企業のお金が出るインターンに行ったんだと思いますよ!!

インターン中のこと

基本的に 11:00 - 18:00 の業務でした。他の社員さんは前後1時間ずつくらいながく業務するのが基本らしいです。 yanoshi さんの話を聞くに、私が出社するちょっと前とか私が退勤したちょっと後くらいが一番フロアが盛り上がる時間帯らしくて、私が稼働していた時間はかなり静かでした。

動画配信まわりのチームに yanoshi さん預かりという形でお世話になったわけですが、どういう業務をしたかというと、配信基盤をいじるとかではなく、小さなタスクを二、三潰した感じです。インターン生向けの華があるものではなかったのでちょっと以外に思いましたが、仕事という感じでした(でも私の書いたコードをそのまま使うのはやっぱり不安だあと思うの……)。

業務のレベルで言えば、私でもまあなんとかなるレベルでした。 yanoshi さんがこのあたりは振ってくれたのでまあ私のちからをよく把握してらっしゃるなという感じです。もっと細かい話はきっと読んでもつまらないと思うので私の日記にだけ書いておく。

あ、でもですね、一個 golang で書いたコードがあるんですが、社内の golang おじさんにレビューをしてもらいました。めちゃ丁寧なレビューで(ちょっと時間を多めに割いたと聞きましたが(ありがてぇ))大変参考になりました。Go Wayとか最高に学びになったし。「ここよい!」とか「ここはこのようがよさ気」とか書いてくれてレビュー上手すぎでしょとなりました。自分のコードを評価してもらえる機会なんでそうそうないですから貴重でした。

業務以外にも、各部署のお話を聞かせてもらう時間があったり、DMMのいろいろを見学させてもらったりしました。まーあこれはむちゃくちゃ良かったですね。各部の偉い人に話を聞かせてもらったわけですが、聞いてるうちにどんな組織だとかどんなことが大変だとかがだんだんわかってくるわけですよ。たいへん豪華で楽しい時間でした。

それから、お昼の時間とか、そうでない時間とか、 yanoshi さんと喋ったり yanoshi さんでない方と喋ったり会話を聞いていたりしていたわけですが、界隈の話がいろいろ聞けてよかったですね。

あとあと、インターンの最後に「こんなことをしました」っていう成果報告の時間があったんですが、これはあんまりうまくできなくてですね、こういうの苦手だなーって思ったし精進したい気持ちがあります。

その他いろいろ

  • 初日に yanoshi さんとか、いりいろ面倒見てくれた人事の方とか、CTO(!)の方とかと焼き肉に連れて行ってもらいました。若いもんは食うだろという感じで連れて行ってもらったわけですが食が細いオタクなのであんまりたくさんは食えずだった。
  • 人事の方がめっちゃ美人でよかった
  • yanoshi さんがことあるごとに「優秀ですよ」とか「即戦力です」とか言って私のことを他の方に紹介してくれたりしたわけですが、私の感想としては「おいおい私なんぞが即戦力になる会社で大丈夫かよ」という感じでした。まあ yanoshi さんも誇張した表現をしていたと思いますし、社員の方々は優秀 of 優秀という感じだったので実際に即戦力ということはないでしょう。
  • 仕事用のPCが支給されたわけですがMacBook Pro(TouchBarついてるやつ)で、興奮してしまった
  • 仕事はしてないけどお金欲しい系の人間なので無給インターンつらいです。学生のにわざわざ働いてしかも赤字なの愚者って感じがしませんか
  • お昼ごはん、オフィス周りのいろいろな店に連れて行ってもらったりしたんですが、おしゃれでうまい。あと値段が結構ですね。社会人という感じがする
  • 社内での移動に時間がかかるので大きい会社は大変だなぁと。あ、でも学校も一緒か……。
  • ホテルをとってもらってたわけですが、部屋を出てから着席まで 7分30秒ほどだったので良い暮らしでした。あさ10:30くらいまでゆっくりしてられるのは人権だった。
  • yanoshi さん若いのに会社でめっちゃうまく立ちまわってるっぽくてすごかった
  • 若い兄ちゃんがときどきかまってくれてよかった。かっこいいし性格が良いし頭もあるので非の打ち所なしですね
  • yanoshi さんと高専プロコンのはなしをして心が死にそう。がんばりますので……!
  • 二週間で生活費大体2万円に届かないくらいでした。コンビニ飯とかコンビニじゃない飯とか、洗濯したり、土日の交通費とかもろもろ合わせてその

まとめ

良かった。楽しかった。もっと精進していきたいというお気持ちが上がってます。

まあ大体こんなもんです。どうしてかあんまりインターンの内容がかけてない気がしますが……。文章力を上げたいなぁ。

二週間大変お世話になりました、ありがとうございました!!!!

追記

これは黙っているつもりだったんですが、耐えきれず Twitter に書いてしまったので載せておきます(教えてくれた人が先にTwitterに書いていたのでセーフなので。

これめっちゃ印象に残ったし一生これでやってく

高専入学のすゝめ

いつか書きたいと思ってたので書きます。

まずはじめに、私の立ち位置から。

高専のことは積極的にこき下ろしていくが、外様の奴らが高専についてあーだこーだ言うのは我慢ならない」というよくいる人間です。

こういう立場の人間なので「情報工学系に興味を持っている」高専入学適齢の方向けに、高専の良い所やそうでないところを述べていけたらと思います。

よりみちができます

 同じ界隈に住んでいる人たちが参考になる記事を書いてます。

yamasy1549.hateblo.jp

 私が勝手に「うちの学校の上位互換」と思ってるすごい高専に通っている人の記事。駅から近いのはまじでアドバンテージです。あと近くに美味しいものの店がたくさんあるきがする。私はそういうところに食べに行かないのであってもなくても一緒ですが。

chige.hatenablog.com

 弊学の人。忙しそうにしてるけど、顔が広くて楽しそうなので、多分高専生の生き様としてアリアリ。

こうしてみると受験のことって私の体験書いてないな。二ヶ月くらいちゃんと勉強しました。面接では自分の趣味(このころもゲーム作ってた。いまでも大したものはできない)についてオタク語りをしてたきがします。

高専って難しいんでしょ?

ずばり「NO」です。期待を裏切られます。私が通う高専は、偏差値の話をすれば高い方なのですが(全国の高専でも1,2を争えるし、五指に入っている程度だと思う)、ではそこでの授業が難しいか、留年してしまうかといえば、そんなことはありません。難しい授業を期待してはいけません。

多くの場合、高専の教員は怠惰です。あとカリキュラムも怠惰です。高専の授業だけで生きていけると思ってはダメです。学びたいことは自分で学ばなければ。

留年をするのは、一部の「留年するって決めてる勢」(本人はどうか知らないが傍目からはそうとしか見えない)と、「本当に不幸にも単位を落とした人」だけです。本当に不幸にも単位を落とした人というのは、情けに訴えることができない教員の科目で十分な成績を残せなかった人のことです。これは本当に不憫です。

入学もそんなに難しくなくて、数学の問題ををある程度のレベルまで解けるようなら、何も心配はいらないと言えます。なぜか英語が阿呆みたいに簡単だったのはよく覚えています。

ゲーム作れるんですか?

そんなわけはないですね。ゲームを作るのは、ゲームを作りたい人たちであって、授業でゲームを作るなんてことはありません。まあ、なんちゃってゲームくらいは作ることもあるかもしれませんが、それがあなたの求めていたものですか? (ちなみに、私が受けた Java の授業で「ゲームを作っていきます」と言っていた教員がいましたが、本当にひどいものでした。何ができた以前に何もできなかったし、何かができそうという雰囲気もなかった。学生たちは謎の世界観の押し付けを喰らったに過ぎない。言い過ぎたかな? これ以上は言及しないぞ) ゲームが作りたいひとは専門学校へ行ったほうが良いような気がします。

あ、まって、専門学校へ行く前に。高専でもゲームを作ってる人はいます。そういう人と仲良くなればいいでしょ。私もそういう同好会に入って、一年に一本程度、悲しい出来のゲームを作っています。

じゃあ高専ではなにをやっているんですか?

ひたすら基礎をやっています。非常にゆっくりと。基数変換とかやりましたね。符号化方式もちょっとやったり。コンピュータの五大装置ってなにかわかりますか。まあこんなの調べたら一瞬でわかるんですが、でもそれは例えば「基数変換」という言葉があるから、それが何かしら情報工学と結びついているという情報を得ているから調べられるわけです。右も左もわからない状態では何を知れば良いかもままならないというわけです。

プログラミングはするんですよね?

します。私の場合だと、一年生では何も触らせてもらえず、二年生三年生の二年間はJavaをやりました。四年生になったいまではC言語に突入しています。JavaでifやforやwhileをやっているのにCでまたifに何週間、forに何週間とかけているのは多分壮大なギャグでしょう。そういえば、3年生の3ヶ月間くらい、 python をさわることもありました。あれ、二年生ではCASL2もやりましたね。あ、また思い出したけど、四年生ではC#を使う授業があるって言ってました。遺伝的アルゴリズムを書いてたような気がしますね。

この授業を受けるとどのようなスキルがつくのかが気になりますよね? 二年間かけてやるJavaの授業を修めると、基本的な構文がわかります。驚くべきことに、try ~ catchのような例外処理もかけるようになりますし、クラスの継承もできます。インターフェイスも扱えるようになります。マルチスレッドプログラミングだってできるし、GUIアプリケーションも書くことができるようになります。今、クラスメイトに書けと言っても書けない人が大半でしょうけど……。だんだん、付け焼刃のプログラミングができるようになってくるんです。

え? JVM? JVMってなんですか?(よく考えたらJVMJavaの「基礎」なのでは……?)

レポートが大変って聞いたんですが

そういう学科もあります。そうでない学科もあります。うちは大変じゃない学科。お隣の学科はレポートを梯子してるのですごいですね。二年生の時は手書きを強要されましたが、三年生のときは自由でした。四年生になった今では、教員によってはTeXの能力を要求されます。とはいえ、テンプレートは渡されるのですが。ちなみにお隣の学科はずっと手書きらしいです。あほくさ。

進路ってどうなってるんですか?

就職と進学が半々くらいなんですかね。進学はまあ編入というやつで、たいていの(=高専生が入学しに行くような)大学だと、3年生から始められることになってます(結局高専での単位が認められなくて留年とかあるらしいですが “編入で単位認定が少なくて苦労することはあれども留年するのは本当に稀なので留年しちゃった人はその人がそうだっただけだと思う。” との意見をいただきました)。就職は、(就職先を選ばなければ)就職率100%を誇ってるので心配する必要はありません。高専に来る求人の数ってものすごいらしいですよ。でも成績がいい人はたいてい進学してしまうか、わざわざ高専に求人を出してない企業に自分で乗り込んでいきます。

専攻科という制度がありまして、高専卒業後も2年間、高専みたいな環境で過ごすことができたりもします(研究とかしてるみたいです。院のような感じなのかな)。これを卒業すると、大学卒と同じ年齢になるという仕組みです。最近は専攻科も謎に倍率が高い。

あ、三年を無事修了すると、高卒と同じ扱いを受けられるわけで、そこで中退して大学1年生になることもできます。推薦を受けて大学入学をしたいという稀有な人は事前にその学校が「退学して別の学校に入る人に対して推薦を与えるか」を調べておいたほうがいいです。

男子ばっかりなんですか?

私の置かれていた環境はそうです。おかげで女の子としゃべるのができません(男性としゃべるのも苦手だけど、女性は本当によろしくない)。でも最近の高専は女の子に入学してもらおうと頑張っているみたいで、いい感じの男女比になっていたりもするらしいです。

あと男子ばっかりだと変なことになったりする。

変な人が多いんでしょ?

まあ少しはいます。変でもなんでもない人の方が圧倒的に多いですが、変な人はいます。外の世界に比べて明らかに多い。尖ってますよね。でも高専生の全部が尖ってるわけじゃないんだ。

部活動ってどうなんですか

部活動によりけりです。

寮ってどうなんですか

高専の闇を凝縮するためにあるらしいです。私は運良く寮には入ってないのでよく知らないです。メリットは通学時間が短くなること。世の中には全寮制の高専もあるとか。

ハードウェアとかどうなんですか?

情報工学科」では、カウンタ回路をブレッドボード上に構築したり、オペアンプやらで加減算をしてみたりします(積分はやらなかったなぁ)。それから、Verilogを触ったりもします。今年からFPGA上にCPUみたいなのを構築する授業になったんですが、FPGAボードはなしで論理的な部分しかやりません。あと某学部のCPU実験のようなものではないのであしからず。

半導体がどうとか交流回路がどうとかも一応触れたような気はします。でも私、交流と直流がどうなってるのかわからんぞ……?(ちゃんと授業を受けてないという説がある)

他の学科ではもっとハードウェアしてます。材料工学とかやってるんじゃないかな。

学校の施設ってどんな感じですか

高校<高専<大学です。私学はその限りではないかもだけど。図書館はわりとよく出来ていて、長い時間籠もれるようになってるし、そういう系統の本が入ってるし、入れてもらうのも楽です。大学図書館でもそうなのかもしれないですが。本の競争率も低いんじゃないかなーと思ってます(借りたい本が借りられていて借りれないということはあんまりない)。あと、きりがないからというのでラノベはシリーズごとに3冊までしか入れてくれないんですが、あれはもったいないと思ってます。

立地とかどうですか

私鉄からもJRからもだいたい自転車で10~15分程度かかります。通えないほどではないこの感じな。これを立地がいい(電車で来やすいので寮に入らなくていい)と表現する人もいれば、悪い(通学に時間がかかって無駄)というひともいます。

あと、うちの高専に限った話かは知りませんが、隣にお寺(墓地)があります。

研究はどうなってますか

それは研究を始めたら書くかもしれない。

強くなるためにはどうしたらいいですか?

自分で頑張れ。幸い変で便利な環境にいることですし、少し運が良ければ仲間もいるでしょう(あなたの高専にはいなくても他の高専にはいるから大丈夫)。自由な時間も少なくないはず。

高専卒は即戦力なんですか?

そういう分野もあることでしょう。私もなんで高専卒に求人が来るのかわかってないんだ

結局高専に入ったほうがいいんですか?

自分で決めてください。


こんなところでどうですか。参考になりましたか。嘘を言っていたり、足りていない項目があったら教えて欲しいです。何か意見があればそれもお待ちしてます。