無限遠まで突撃中

ネット日記書きの徒然。

突撃隊 2021 総まとめ

2021年を振り返る

夏ごろから更新してなかったですね、まあ特に発信したいこともなかったのですが…

2021年も終わりそうなので一年を振り返ってまとめたいと思います。

学業

単位をかき集めていました。 周りの4年生はほぼ単位を取りきっていて、授業がないぜ~みたいなことを言っていましたが、自分は普通に落単しまくっていたので4年次でも授業を取っていました。 3年までと違って、まあ来年もあるしなと気軽に休んだり切ったりできなかったのでスリルがありました。

とりあえず秋ABで卒業に必要な単位は全部取りきったはずなので、これで安心ってわけ。 GPAは低いが、卒業できれば勝ち。

印象に残った授業:発展体育「トラック&フィールド」

4年生にもなってまだ体育を受けているのかというツッコミは無しでお願いします。 トラック&フィールドは走・投・跳の陸上競技をバランスよく行いました。

走る回(特に長距離)はクソザコ体力のせいで吐いたりもしましたが、器具を効率よく使ってうまく跳んだり投げたりできたときは大変楽しかったです。 ハンマー投げ円盤投げなど、珍しい陸上競技ができたのもよかったです。

筑波山登山

この授業の一環で筑波山に初めて登山に行きました。 日本一低い百名山(らしい)と聞いていたのでタカをくくっていたのですが、登山道は自分にとってはだいぶ急峻でかなり驚きました、もっとハイキング気分で行けると思ったのに…

5~6人のグループを作って登ったのですが、自分が一番体力がなかったのでだいぶ迷惑をかけてしまいました。 それでも文句を言わず自分のペースに合わせてくれたグループの皆さんに感謝です。

コースとしては筑波山神社から女体山山頂まで登って、また筑波山神社まで下山するというものでした。 山頂で飲んだカップスープが身体にしみわたりました。

卒業研究

4月から本格的にスタートしました。

テーマ決めから始まりましたが、いきなり指導教員の先生から「こういうテーマで科研費を取ったんだけど、やってみない?」と提案されました。 自分の想像していた方向とは微妙に違ったのですが、ある程度お金や機材が自由に使えそうというのと、既に同様のテーマに着手をしている先輩がいて、一から始めるよりスムーズに研究を始められそうと思ったので、提示されたテーマで卒業研究を始めました。

進化的アルゴリズム強化学習など、自分が触れてこなかった分野を手法として用いていたので、最初はそれらがよくわからず「本当にこの研究で卒業できるのか?」と不安でした。 また、着手始めは就活の時期とも重なっていたので余裕がなく、さらに研究とは全部自分で考えて実行して解決しなくてはいけないと思っていたので、なかなか質問などができませんでした。

その後就活が終わって心に余裕ができて、先行して着手していた先輩や先生にアドバイスを伺ったり、質問をしたりできるようになりました。 また、時間をかけて手法を理解して、実装を進めて、実験を回したら、ある程度は結果が出てきたので、案外何とかなりそうだな~と気楽に考えるようになりました。

今後ですが、年明けから卒論を書き始めます。 余裕をもって赤入れ、提出をしたいですね。

就活

院進するつもりがあまりなかったので、1月くらいから就活をしていました。 これについては過去記事があるのでそれをお読みください。

totsugekitai.hatenablog.com

趣味

DTM

DTMを始めて、停滞しました。 始めた当時はインスピレーションがあふれ出てたんですが、3つくらい作ったら枯れてしまったッピねえ。 これも過去記事があるのでそちらをお読みください。

totsugekitai.hatenablog.com

読書

復活しました。 大学受験で浪人して以来、小説の読書に関して集中力が続かなくなりあまり読めなくなっていた(技術書などは読める)のですが、最近ふとページをめくってみたらスラスラっと頭に入ってきてムスカ状態になったので、また読み始めるかと思い物理本やkindleなどを引っ張り出してきて読書しています。

趣味開発

自作OS

秋ごろからRustで自作OSを作り始めました。

github.com

Writing an OS in RustGitHub - 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さんから作曲本を誕生日プレゼントとしてもらいました。

とりあえずつくってみたもの

soundcloud.com

soundcloud.com

1つ目は作曲本に沿って作ってみた曲です。 2つ目は有名なコード進行を組み合わせてみた曲です。

音源について

自分はチップチューン、特にFM音源チップチューンが好きなので、作曲にもVOPMというFM音源のエミュレーションをするVSTプラグインを用いています。

MIDIキーボード

これがあってだいぶ作曲効率が上がりました。 ピアノが弾けないとしても、音が鳴らせると確認がすぐにできるので便利です。 DTM初心者の人は安いキーボードでもいいので持っておくと挫折しづらいと思います。

作曲本

作りながら覚える 3日で作曲入門

作りながら覚える 3日で作曲入門

Amazon

多分一番薄くてかんたんなものがプレゼントで手に入ったので読んでみましたが、非常に平易でわかりやすかったです。 これも挫折しづらい本だと思います。

今後

続けていきたいですね!

就職活動をしました

つかれた、もう二度としたくない。

就活始動時のスペック

こんな感じのスペックで12月くらいから就活してました。

狙った業界

低レイヤのソフトウェアに興味があったのでそういうのができそうな会社を受けました。

戦績

(たぶん)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社の内定を知る。

他にもまだ選考中だったりそもそもエントリー期間でまだ選考が始まっていないところもあるけど気力が尽きたので終わり。

まとめ・今後など

本当に疲れました、祈られるたびに自分が否定された気分になってつらかったです。 自分の体調不良と相まって最後は死にかけてました。

面接のほとんどがオンラインでできたので、そこは例年と比べてよかったかなと思います。オフラインで集団面接とかだと死んでたので。

あとは卒業研究して、単位とって、卒業するだけなのですが、ちょっと体調を崩しすぎたので、調子を戻すところからやっていきたいです。

就活を舐めてはいけない。

祝いを

Amazon.co.jp

*1:落ちた企業のメールとか速攻で削除してしまったので

*2:これはいわゆるSPIを適当にやりすぎた説がある

*3:エンジニアと面談して落とされるなら兎も角、この3次面接は人事との1on1形式だったので、人事に祈られたと思うとかなりもにょる

Ubuntu以外でもMikanOSを動かしたい

ゼロからのOS自作入門

ゼロからのOS自作入門

発売されましたね。

さて、「ゼロからのOS自作入門」は想定環境をUbuntuとしていますが、自分のラップトップがArchLinuxなので、これは困った。 ということで何とかして動かしてみます。

標準ライブラリをビルドする

まずは以下のリポジトリをクローンします。

github.com

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の中ボス撃破までワンコインでいきたいですね。 日々体調を整え、鍛錬を欠かさないようにしたいです。

最終的には

大学を出るまでにはワンコインクリアしたいです。

一日一ケツイ

*1:アケコンでやっています

12月は新生活の季節

これは

WORDIAN Advent Calendar 2020 - Adventar

の13日目の記事です。

引っ越しました

もうすぐ2021年ですね、突撃隊です。 10月あたりに「3年生の終わりには引っ越したいな」と思い不動産屋に行ったら、年内に入居すると1ヶ月フリーレントだと言われてそのまま12/1に新居に入居してしまいました。

洗濯機の水道パッキンが壊れていたり、洗面台の配管から水漏れしたり、無料インターネット完備と言われていたが業者の管理ミスでインターネット未開通だったり*1とトラブルはありますが、概ね快適に過ごせています。

この記事では引っ越しの際に色々ものを買ったりもらったりして調達したものをレヴューしていきたいと思います。 だいたいデスクまわりです。

イカれた品物たちを紹介するぜ!

Flexispotの電動昇降机の足&適当な天板

flexispot.jp

引っ越しを見越して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)

www.asus.com

祖母宅から余ったからあげると言われて送られてきました*4。 これ使っとけば無線LANは大丈夫やろ。

その他

炊飯器

今日初めて炊いたらうまかった。

冷蔵庫

YAMADA電気ブランドのやつだけど何十年も使う予定はないのでヨシ!

洗濯機

日立製。特に不満なし。 値段が安かった。

充電式ハンディタイプサイクロン掃除機

地味に良かったもの。

取り回しが良く、ごみも簡単に捨てられるのでかなりいいです。 充電もそんな時間かからないっぽい。

コーナンで買った電気ケトル

尿は沸かさないようにしましょう。

これから

まだコンロを買えていないので土日にでも買いに行きます。

*1:半月もネット無いのはつらい

*2:まだインターネットがないのでほとんどできることはないですが……

*3:紙でほしいときは大学で印刷しよう

*4:祖母宅は民宿なので、デカイ

自作OSに役立った本や資料を紹介する

この記事は 自作OS Advent Calendar 2020 - Adventar の4日目の記事です。

自分が今まで読んできた本や資料の中で、自作OSに役に立ったなと思ったものを紹介します。

書籍編

30日でできる!OS自作入門

30日でできる! OS自作入門

30日でできる! OS自作入門

紹介するまでもない有名な本です。 この本で自分は自作OSを始めました。 試行錯誤の過程を踏みながら、最後には立派なOSが出来上がります。

12ステップで作る組込みOS自作入門

12ステップで作る組込みOS自作入門

12ステップで作る組込みOS自作入門

こちらはH8マイコン上で動く自作OSを作ります。 x86_64でスレッドのコンテキストスイッチを実装する際に参考になりました。

Xinuオペレーティングシステムデザイン 改訂2版

現実の製品でも使われているXinuと呼ばれるオペレーティングシステムを、ソースコードレベルで解説したものです。 排他制御の実装が記載されている貴重な本です、自分もこの本を参考にセマフォを実装しました。 またコーディングルールなども簡単に解説されていて、統一感のあるきれいなソースコードだなと思いました。 アーキテクチャx86とArmに対応しているので、複数アーキテクチャに対応したい際にも参考になりそうです。 特におすすめです。

リンカ・ローダ実践開発テクニック

ELFについて詳しく書かれた本です。 ブートローダやプログラムローダ、リンカスクリプトを書く際に大変参考になります。

低レベルプログラミング

低レベルプログラミング

低レベルプログラミング

x86_64アーキテクチャ上で自作OSをするなら読むといい本です。 低レイヤを広く取り扱っている(OSだけでなくバイナリ形式なども)ので、ざっと眺めておくと低レイヤでの地雷を回避できる確率が上がります。

Linuxのブートプロセスをみる

Linuxgrubからブートする様子をソースコードを追って見ていく本です。 x86_64で64bitモードまで上げる際の呪文などが乗っているので、初期化処理を書く際に役立つでしょう。 Linuxの勉強にもなります。

web編

Intel SDM

software.intel.com

何回も読むことになるマニュアルです。 これを読めばCPUの仕様はだいたい乗ってます。

osdev.org

wiki.osdev.org

自作OSを作る際の情報が英語でまとまっています。 大変参考になるサイトですが、たまに動かないサンプルコードが混じっているので注意。

osdev-jpのwiki

github.com

こちらは日本語で自作OSを作る上での情報がまとまっています。 なおosdev-jpはslackやメーリスなどもあります。

resea.org

resea.org

nutaさんという方が作っているマイクロカーネルのページです。 reseaは本当にきれいに設計されており、ドキュメントがしっかりまとまっているので大変参考になります。

オペレーティングシステムⅡのページ

www.coins.tsukuba.ac.jp

筑波大学オペレーティングシステム2という授業のページです。 Linuxカーネルをコードリーディングしています。 実際にデータ構造を設計したりする際に参考になるかと思います。

QEMUソースコード

github.com

なにかデバイスの挙動がわからないときに使えるかもしれないQEMUソースコードです。 自分はAHCIを調査する際に(先輩に助けてもらいながら)読みました。 ただあまり細かい部分やマイナーなデバイスは雑なエミュレーションをしている可能性があるのでそこは注意してください。

他にもまだまだありますが

とりあえずパッと思いつくのを上げてみました。 これもいいよ!というものがあったらコメントなどで教えてください。