突撃隊 2021 総まとめ
2021年を振り返る
夏ごろから更新してなかったですね、まあ特に発信したいこともなかったのですが…
2021年も終わりそうなので一年を振り返ってまとめたいと思います。
学業
単位をかき集めていました。 周りの4年生はほぼ単位を取りきっていて、授業がないぜ~みたいなことを言っていましたが、自分は普通に落単しまくっていたので4年次でも授業を取っていました。 3年までと違って、まあ来年もあるしなと気軽に休んだり切ったりできなかったのでスリルがありました。
とりあえず秋ABで卒業に必要な単位は全部取りきったはずなので、これで安心ってわけ。 GPAは低いが、卒業できれば勝ち。
印象に残った授業:発展体育「トラック&フィールド」
4年生にもなってまだ体育を受けているのかというツッコミは無しでお願いします。 トラック&フィールドは走・投・跳の陸上競技をバランスよく行いました。
走る回(特に長距離)はクソザコ体力のせいで吐いたりもしましたが、器具を効率よく使ってうまく跳んだり投げたりできたときは大変楽しかったです。 ハンマー投げや円盤投げなど、珍しい陸上競技ができたのもよかったです。
筑波山登山
この授業の一環で筑波山に初めて登山に行きました。 日本一低い百名山(らしい)と聞いていたのでタカをくくっていたのですが、登山道は自分にとってはだいぶ急峻でかなり驚きました、もっとハイキング気分で行けると思ったのに…
5~6人のグループを作って登ったのですが、自分が一番体力がなかったのでだいぶ迷惑をかけてしまいました。 それでも文句を言わず自分のペースに合わせてくれたグループの皆さんに感謝です。
コースとしては筑波山神社から女体山山頂まで登って、また筑波山神社まで下山するというものでした。 山頂で飲んだカップスープが身体にしみわたりました。
卒業研究
4月から本格的にスタートしました。
テーマ決めから始まりましたが、いきなり指導教員の先生から「こういうテーマで科研費を取ったんだけど、やってみない?」と提案されました。 自分の想像していた方向とは微妙に違ったのですが、ある程度お金や機材が自由に使えそうというのと、既に同様のテーマに着手をしている先輩がいて、一から始めるよりスムーズに研究を始められそうと思ったので、提示されたテーマで卒業研究を始めました。
進化的アルゴリズムや強化学習など、自分が触れてこなかった分野を手法として用いていたので、最初はそれらがよくわからず「本当にこの研究で卒業できるのか?」と不安でした。 また、着手始めは就活の時期とも重なっていたので余裕がなく、さらに研究とは全部自分で考えて実行して解決しなくてはいけないと思っていたので、なかなか質問などができませんでした。
その後就活が終わって心に余裕ができて、先行して着手していた先輩や先生にアドバイスを伺ったり、質問をしたりできるようになりました。 また、時間をかけて手法を理解して、実装を進めて、実験を回したら、ある程度は結果が出てきたので、案外何とかなりそうだな~と気楽に考えるようになりました。
今後ですが、年明けから卒論を書き始めます。 余裕をもって赤入れ、提出をしたいですね。
就活
院進するつもりがあまりなかったので、1月くらいから就活をしていました。 これについては過去記事があるのでそれをお読みください。
趣味
DTM
DTMを始めて、停滞しました。 始めた当時はインスピレーションがあふれ出てたんですが、3つくらい作ったら枯れてしまったッピねえ。 これも過去記事があるのでそちらをお読みください。
読書
復活しました。 大学受験で浪人して以来、小説の読書に関して集中力が続かなくなりあまり読めなくなっていた(技術書などは読める)のですが、最近ふとページをめくってみたらスラスラっと頭に入ってきてムスカ状態になったので、また読み始めるかと思い物理本やkindleなどを引っ張り出してきて読書しています。
趣味開発
自作OS
秋ごろからRustで自作OSを作り始めました。
Writing an OS in Rust や GitHub - nuta/kerla: A new operating system kernel with Linux binary compatibility written in Rust. なんかを参考にして作っています。
最近は停滞気味です。 研究がひと段落したらまた再開したいですね。
Androidアプリ
公開はしていないのですが、思い立って最近KotlinでAndroidアプリを書き始めました。 Kotlinというよりも周辺環境(Gradleなど)がわからずなかなか苦労しています。
来年は?
年始には卒論提出&発表が待ち構えているので、まずはそれらを倒してちゃんと卒業したいです。
4月からは社会に出荷されるので自由な時間が減ると思うと寂しい気持ちになります。 時間は減りますが、自分と遊んでくれると嬉しいです。
それでは皆さん
良いお年を。
DTMを始めました
なにか趣味を作ろうと考えた結果DTMを始めることにしました。
きっかけ
KOBA789さんからMIDIキーボードをもらい、azarashi_uniさんから作曲本を誕生日プレゼントとしてもらいました。
デカ過ぎず丁度いいサイズ感 pic.twitter.com/E6IbkWlXMB
— 夜は働く女子大生 (@totsugeki_tai) 2021年8月6日
@azarashi_uni さんから『作りながら覚える3日で作曲入門』を頂きました!
— 夜は働く女子大生 (@totsugeki_tai) 2021年8月11日
こないだ @KOBA789 からもらったキーボードと一緒に使います、ありがとうございます! pic.twitter.com/7MK1V3voRQ
とりあえずつくってみたもの
1つ目は作曲本に沿って作ってみた曲です。 2つ目は有名なコード進行を組み合わせてみた曲です。
音源について
自分はチップチューン、特にFM音源のチップチューンが好きなので、作曲にもVOPMというFM音源のエミュレーションをするVSTプラグインを用いています。
MIDIキーボード
これがあってだいぶ作曲効率が上がりました。 ピアノが弾けないとしても、音が鳴らせると確認がすぐにできるので便利です。 DTM初心者の人は安いキーボードでもいいので持っておくと挫折しづらいと思います。
作曲本
多分一番薄くてかんたんなものがプレゼントで手に入ったので読んでみましたが、非常に平易でわかりやすかったです。 これも挫折しづらい本だと思います。
今後
続けていきたいですね!
就職活動をしました
つかれた、もう二度としたくない。
就活始動時のスペック
こんな感じのスペックで12月くらいから就活してました。
- 情報系学部3年生(今は4年生)
- 2浪0留
- GPAは2.x(0 < x < 5)
- 論文とか書いたことないです
- 2,3年生でセキュリティキャンプとかサイボウズラボユースとかをやっていた
- インターンは過去1社
狙った業界
低レイヤのソフトウェアに興味があったのでそういうのができそうな会社を受けました。
戦績
(たぶん)7戦1勝(嫌な記憶は抹消されがち)。
時系列順にお話しします
なるべく気を付けていますが、一部思い出せないので正確ではないです*1。
会社名は適当です。
2020年12月
試しに就活してみるかと思いBtoBのソフトメーカーであるA社を受けてみる。初めての新卒採用の面接だったので緊張してあまりにもしどろもどろな受け答えをしてしまった。まだ本格的に就活を考えていなかったのでそもそも働くということに対して真剣でなかった。A社は一次面接でお祈り。
2021年1月
就職するかと本格的に思い立ち、マイナビリクナビに登録をしてみる。またメガベンチャーのB社のwebテストを受けて通過したので一次面接を受け、通過。
2021年2月
B社の2次面接とエンジニアとの1on1を通過する。
2021年3月
リクナビマイナビ経由で登録した企業の採用がスタートする。 ネットワーク分野で有名なC社と車載OSで有名なD社に応募するも、書類ではじかれる*2。
低レイヤ 企業[検索]で見つけたE社の書類が通る。
ベンチャー企業F社の書類も通る。
B社の3次面接を受け、祈りを得る*3。
OSをいじれる日系大企業G社にエントリー、早期ジョブマッチング(1回目)を受け、通過。
2021年4月
E社の面接を受ける、ライブコーディングで腹筋ボコボコにパンチを食らう。
F社の1次面接を受ける、ライブコーディング終了直後に今コードをメールで送ってほしいといわれメーラーを開いたらE社のお祈りが届きすごい顔をしてしまう。
G社の早期ジョブマッチング(2回目)を受け、祈られる。この企業ではかなり働いてみたかったので落ち込みました。
2021年5月
GW内の平日にF社の最終面接を受ける。
GW明けに電話が来て、F社の内定を知る。
他にもまだ選考中だったりそもそもエントリー期間でまだ選考が始まっていないところもあるけど気力が尽きたので終わり。
まとめ・今後など
本当に疲れました、祈られるたびに自分が否定された気分になってつらかったです。 自分の体調不良と相まって最後は死にかけてました。
面接のほとんどがオンラインでできたので、そこは例年と比べてよかったかなと思います。オフラインで集団面接とかだと死んでたので。
あとは卒業研究して、単位とって、卒業するだけなのですが、ちょっと体調を崩しすぎたので、調子を戻すところからやっていきたいです。
就活を舐めてはいけない。
祝いを
Ubuntu以外でもMikanOSを動かしたい
発売されましたね。
さて、「ゼロからのOS自作入門」は想定環境をUbuntuとしていますが、自分のラップトップがArchLinuxなので、これは困った。 ということで何とかして動かしてみます。
標準ライブラリをビルドする
まずは以下のリポジトリをクローンします。
MikanOSの標準ライブラリはどうやら devenv_src/stdlib/build.sh
でビルドできるようです。
mikanos-build/build.sh at master · uchan-nos/mikanos-build · GitHub
リポジトリから大事な部分を引用します。
exe docker cp ${CID}:/usr/local/x86_64-elf ${HOME}/osbook/devenv SRC=/usr/local/src DST=${HOME}/osbook/devenv/x86_64-elf exe docker cp ${CID}:${SRC}/newlib-cygwin/COPYING.NEWLIB ${DST}/LICENSE.newlib exe docker cp ${CID}:${SRC}/llvm-project/libcxx/LICENSE.TXT ${DST}/LICENSE.libcxx exe docker cp ${CID}:${SRC}/freetype-2.10.1/docs/FTL.TXT ${DST}/LICENSE.freetype echo "" echo "Done. Standard libraries at ${HOME}/osbook/devenv/x86_64-elf"
Docker内部でビルドした成果物を ${HOME}/osbook/devenv
にコピーしているので、この部分を書き換えればよさそうです。
こんな感じに書き換え。
exe docker cp ${CID}:/usr/local/x86_64-elf /path/to/mikanos_third_party SRC=/usr/local/src DST=/path/to/mikanos_third_party/x86_64-elf exe docker cp ${CID}:${SRC}/newlib-cygwin/COPYING.NEWLIB ${DST}/LICENSE.newlib exe docker cp ${CID}:${SRC}/llvm-project/libcxx/LICENSE.TXT ${DST}/LICENSE.libcxx exe docker cp ${CID}:${SRC}/freetype-2.10.1/docs/FTL.TXT ${DST}/LICENSE.freetype echo "" echo "Done. Standard libraries at /path/to/mikanos_third_party/x86_64-elf"
こうすると /path/to/mikanos_third_party/x86_64-elf
に成果物ができている、はずです。
mikanos-buildの各種スクリプトを書き換える
次はmikanos-buildに含まれるmikanosのビルドスクリプトを書き換えます。
buildenv.sh
mikanos-build/buildenv.sh at master · uchan-nos/mikanos-build · GitHub
BASEDIR
を書き換えればよさそうです。
こんな感じ。
# Usage: source buildenv.sh BASEDIR="/path/to/mikanos_third_party/x86_64-elf" export CPPFLAGS="-I$BASEDIR/include/c++/v1 -I$BASEDIR/include -I$BASEDIR/include/freetype2 -nostdlibinc -D__ELF__ -D_LDBL_EQ_DBL -D_GNU_SOURCE -D_POSIX_TIMERS" export LDFLAGS="-L$BASEDIR/lib"
make_mikanos_image.sh
mikanos-build/make_mikanos_image.sh at master · uchan-nos/mikanos-build · GitHub
edk2のパスに合わせて LOADER_EFI
を書き換えます。
edk2は適当な場所にクローンして、 git submodule update --init
をしておくとよい。
#!/bin/sh -ex DEVENV_DIR=$(dirname "$0") MOUNT_POINT=./mnt if [ "$DISK_IMG" = "" ] then DISK_IMG=./mikanos.img fi if [ "$MIKANOS_DIR" = "" ] then if [ $# -lt 1 ] then echo "Usage: $0 <day>" exit 1 fi MIKANOS_DIR="$HOME/osbook/$1" fi LOADER_EFI="/path/to/edk2/Build/MikanLoaderX64/DEBUG_CLANG38/X64/Loader.efi" KERNEL_ELF="$MIKANOS_DIR/kernel/kernel.elf" $DEVENV_DIR/make_image.sh $DISK_IMG $MOUNT_POINT $LOADER_EFI $KERNEL_ELF $DEVENV_DIR/mount_image.sh $DISK_IMG $MOUNT_POINT . . .
mikanos本体の build.sh
最後にmikanos本体の build.sh
を書き換えます。
mikanos/build.sh at master · uchan-nos/mikanos · GitHub
${HOME}/osbook/...
となっている部分をmikanos-buildをクローンしたパスに書き換えます。
#!/bin/sh -eu make ${MAKE_OPTS:-} -C kernel kernel.elf for MK in $(ls apps/*/Makefile) do APP_DIR=$(dirname $MK) APP=$(basename $APP_DIR) make ${MAKE_OPTS:-} -C $APP_DIR $APP done DISK_IMG=./disk.img MIKANOS_DIR=$PWD /path/to/mikanos-build/devenv/make_mikanos_image.sh if [ "${1:-}" = "run" ] then /path/to/mikanos-build/devenv/run_image.sh ./disk.img fi
起動
以上のことをして、mikanosのosbook_day30fのルートディレクトリで
APPS_DIR=apps RESOURCE_DIR=resource ./build.sh run
で動作する(はず)。
2020年の「ケツイ~絆地獄たち~」プレイ振り返り
これは WORDIAN Advent Calendar 2020 - Adventar の21日目の記事です。
ケツイ~絆地獄たち~は2002年に稼働開始したCAVEのアーケード弾幕シューティングだが、レトロゲームの移植に定評があるM2がPS4に移植した「ケツイ Deathtiny ~絆地獄たち~」がある。
自分はWORD編集部に加入してからずっとこのゲームをプレイしています*1が、未だワンコインクリアには至っていません。 いつクリアできるんだろ……
2020年のワンコインケツイ
しかし年を追うごとに進めるステージが増えてきました。
今年はステージ4までワンコインで進めるようになりました。 中ボスのカニを倒した後の左にスライドするシーンあたりが限界ですが……
また2019年まではステージ2の中ボスに対してはボムを決めていたのですが、最近はボムを決めないでも切り抜けられるようになりました。
2021年のワンコインケツイに向けて
ステージ5の中ボス撃破までワンコインでいきたいですね。 日々体調を整え、鍛錬を欠かさないようにしたいです。
最終的には
大学を出るまでにはワンコインクリアしたいです。
一日一ケツイ。
12月は新生活の季節
これは
WORDIAN Advent Calendar 2020 - Adventar
の13日目の記事です。
引っ越しました
もうすぐ2021年ですね、突撃隊です。 10月あたりに「3年生の終わりには引っ越したいな」と思い不動産屋に行ったら、年内に入居すると1ヶ月フリーレントだと言われてそのまま12/1に新居に入居してしまいました。
洗濯機の水道パッキンが壊れていたり、洗面台の配管から水漏れしたり、無料インターネット完備と言われていたが業者の管理ミスでインターネット未開通だったり*1とトラブルはありますが、概ね快適に過ごせています。
この記事では引っ越しの際に色々ものを買ったりもらったりして調達したものをレヴューしていきたいと思います。 だいたいデスクまわりです。
イカれた品物たちを紹介するぜ!
Flexispotの電動昇降机の足&適当な天板
引っ越しを見越して11月に注文して編集部に放置していたのを入居日に回収して新居に導入しました。
重量なんと35kg。重すぎる。 新居が2階だったので良かったですが、これが3階とかだったら死んでいました。
組み立てるのが面倒で入居から1週間くらい放置していましたが、頑張って組み立てたら大変使い心地が良いものでした。 お好みの高さを3つまでメモリに保存できます、自分は
- 立ってPC作業をするときの高さ
- 座ってPC作業をするときの高さ
- 座って書き物をするときの高さ
の3つを保存しています。
天板サイズは140×70cm、モニタ2つ置くと少し手狭です。横を160cmくらいにしてもよかったな……
オフィスバスターズで買ったバロンチェア
こういうところから選ぶ
バロンチェア オカムラ(okamura)オフィスチェア(椅子)の通販|中古格安オフィス家具通販ならオフィスバスターズ
5万くらいで買いました。ヘッド部はないです。
最初はエルゴヒューマンにしようかと思いましたが、身長が高くないと辛いというレヴューを見てバロンチェアにしました。
届いてみると163cmとお世辞にも高くはない自分の身長にぴったりでGood。 アームレストもいい感じの高さまで上がるし、他にも座部が前後に動いたりして楽しいです。
昇降机と組み合わせるとかなり楽に作業ができます*2。
ThinkCentre M73
ThinkCentre M73 Small 製品仕様書 | レノボジャパン
新生活ですから新たなマシンが必要です。 CPUはHaswell i7-4790でメモリは16GB乗っています。ストレージはHDD 1TBなので、速さを求める人はSSDに換装する必要があるでしょう。
とりあえずUbuntu Serverのインストールメディアが手元にあったのでインストールしました。 VM牧場にでもして遊びます。
FlexScan 23.5型(くらい)(型番は失念)
研究室が決まってそろそろ論文も読みたい季節、なかなかいいモニタが手に入りました。 解像度は1920×1200です。
縦置きでPDFを表示するとかなりきれいにうつります。 これで論文読むようにすればプリンタ要らずってわけ*3。
YAMAHA RTX1200
おなじみルータ。まだ使っていないですが、インターネットが開通した暁には役に立ってくれるでしょう。
NETGEAR GS108T
L2スイッチ。裏の設置用の磁石が錆びていたので取っ払いました。 これもまだ動かしていない。
ZenWiFi AX(XT8)
祖母宅から余ったからあげると言われて送られてきました*4。 これ使っとけば無線LANは大丈夫やろ。
その他
炊飯器
今日初めて炊いたらうまかった。
冷蔵庫
YAMADA電気ブランドのやつだけど何十年も使う予定はないのでヨシ!
洗濯機
日立製。特に不満なし。 値段が安かった。
充電式ハンディタイプサイクロン掃除機
地味に良かったもの。
取り回しが良く、ごみも簡単に捨てられるのでかなりいいです。 充電もそんな時間かからないっぽい。
コーナンで買った電気ケトル
尿は沸かさないようにしましょう。
これから
まだコンロを買えていないので土日にでも買いに行きます。
自作OSに役立った本や資料を紹介する
この記事は 自作OS Advent Calendar 2020 - Adventar の4日目の記事です。
自分が今まで読んできた本や資料の中で、自作OSに役に立ったなと思ったものを紹介します。
書籍編
30日でできる!OS自作入門
紹介するまでもない有名な本です。 この本で自分は自作OSを始めました。 試行錯誤の過程を踏みながら、最後には立派なOSが出来上がります。
12ステップで作る組込みOS自作入門
- 作者:坂井 弘亮
- 発売日: 2010/05/01
- メディア: 単行本
こちらはH8マイコン上で動く自作OSを作ります。 x86_64でスレッドのコンテキストスイッチを実装する際に参考になりました。
Xinuオペレーティングシステムデザイン 改訂2版
Xinuオペレーティングシステムデザイン 改訂2版 (アスキードワンゴ)
- 作者:Douglas Comer,神林 靖
- 発売日: 2020/03/04
- メディア: Kindle版
現実の製品でも使われているXinuと呼ばれるオペレーティングシステムを、ソースコードレベルで解説したものです。 排他制御の実装が記載されている貴重な本です、自分もこの本を参考にセマフォを実装しました。 またコーディングルールなども簡単に解説されていて、統一感のあるきれいなソースコードだなと思いました。 アーキテクチャはx86とArmに対応しているので、複数アーキテクチャに対応したい際にも参考になりそうです。 特におすすめです。
リンカ・ローダ実践開発テクニック
リンカ・ローダ実践開発テクニック―実行ファイルを作成するために必須の技術 (COMPUTER TECHNOLOGY)
- 作者:坂井 弘亮
- 発売日: 2010/08/01
- メディア: 単行本
ELFについて詳しく書かれた本です。 ブートローダやプログラムローダ、リンカスクリプトを書く際に大変参考になります。
低レベルプログラミング
- 作者:Igor Zhirkov
- 発売日: 2018/01/19
- メディア: Kindle版
x86_64アーキテクチャ上で自作OSをするなら読むといい本です。 低レイヤを広く取り扱っている(OSだけでなくバイナリ形式なども)ので、ざっと眺めておくと低レイヤでの地雷を回避できる確率が上がります。
Linuxのブートプロセスをみる
Linuxがgrubからブートする様子をソースコードを追って見ていく本です。 x86_64で64bitモードまで上げる際の呪文などが乗っているので、初期化処理を書く際に役立つでしょう。 Linuxの勉強にもなります。
web編
Intel SDM
何回も読むことになるマニュアルです。 これを読めばCPUの仕様はだいたい乗ってます。
osdev.org
自作OSを作る際の情報が英語でまとまっています。 大変参考になるサイトですが、たまに動かないサンプルコードが混じっているので注意。
osdev-jpのwiki
こちらは日本語で自作OSを作る上での情報がまとまっています。 なおosdev-jpはslackやメーリスなどもあります。
resea.org
nutaさんという方が作っているマイクロカーネルのページです。 reseaは本当にきれいに設計されており、ドキュメントがしっかりまとまっているので大変参考になります。
オペレーティングシステムⅡのページ
筑波大学のオペレーティングシステム2という授業のページです。 Linuxカーネルをコードリーディングしています。 実際にデータ構造を設計したりする際に参考になるかと思います。
QEMUのソースコード
なにかデバイスの挙動がわからないときに使えるかもしれないQEMUのソースコードです。 自分はAHCIを調査する際に(先輩に助けてもらいながら)読みました。 ただあまり細かい部分やマイナーなデバイスは雑なエミュレーションをしている可能性があるのでそこは注意してください。
他にもまだまだありますが
とりあえずパッと思いつくのを上げてみました。 これもいいよ!というものがあったらコメントなどで教えてください。