'sqr'atch-note

ちりはつもれど ちりぬるを

atcoder-cliの導入

  • 今更ではあるんだけど、AtCoderの解答前準備を楽にするため、atcoder-cliを導入した。
  • 今回、インストールした環境は以下の通り。
 $ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
 $ npm -v
8.5.1
 $ nodejs -v
v12.22.9
  • nodejsとnpmは普通にaptを使ってインストールした。
$ sudo apt update
$ sudo apt install nodejs npm
$ acc config-dir
/home/username/.config/atcoder-cli-nodejs

$ cd $(acc config-dir)
$ mkdir python
$ cat <<EOF > python/template.json
{
     "task": {
         "program": [
             "main.py"
         ],
         "submit": "main.py"
     }
 }
EOF

$ acc config default-template python
$ acc config default-test-dirname-format test
$ acc config
  • acc config default-test-dirname-format test
    • この設定は、accが作成するテストケースのディレクトリ名をtestに変更している。ojコマンドは、デフォルトでテストケースを./testディレクトリから探すため。
    • -dオプションでテストケースのディレクト名を指定も出来るが、毎回指示するのも面倒であるのでacc側の設定を変更してあげる。
  • 適当な問題をダウンロードとojでテストケースの実行をやってみる。
$ acc new abc099
abc099/contest.acc.json created.
create project of AtCoder Beginner Contest 099
? select tasks A ABD
[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.1)
[INFO] load cookie from: /home/username/.local/share/online-judge-tools/cookie.jar
[NETWORK] GET: https://atcoder.jp/contests/abc099/tasks/abc099_a
[NETWORK] 200 OK

$ oj t -c "python3 main.py" 
[INFO] online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.1)
[INFO] 3 cases found
[WARNING] GNU time is not available: time

[INFO] sample-1
[INFO] time: 0.005157 sec
[SUCCESS] AC

[INFO] sample-2
[INFO] time: 0.004408 sec
[SUCCESS] AC

[INFO] sample-3
[INFO] time: 0.004404 sec
[SUCCESS] AC

[INFO] slowest: 0.005157 sec  (for sample-1)
[SUCCESS] test success: 3 cases
  • OK
  • 毎回、テスト時にコマンドを入力するのは手間なので、エイリアスを設定してあげる
    • alias ojpy='oj t -c "python3 main.py"'
    • 必要に応じて~/.zshrc~/.bashrcに追記する

サモラン、年始バイト

  • とてつもなく癖の強い編成だった。雑魚シャケに弱いし、塗りも弱いので、非常につらい。
    • ボトルガイザーは祝いのお酒のボトルを表して、竹は門松を表してるとかなんとか。2年前?の年明けバイトも似た編成だったようす(その頃はスプラ2だったので、サモランやってないので知らない)。
    • ハイドラントとRペンは、対タツ戦において圧倒的な強さを誇るので組み込まれたんだと思う。
      • タツ戦で、ハイドラントを持ったときは、オオモノを完全に無視してフルチャを弱点に叩き込んでるだけで、すごい早さでHPが減っていくので非常に楽しい。
    • 最も、これでステージがアラマキ砦であれば、かなり楽だったと思うけど、見通しが悪くて広いシェケナダムだったので、新年早々心が折れそうなバイト始まりだった。
  • 評価300からスタートしたけど、そこはかとなくしんどかったので、評価を100までリセットしてしまった。ハイドラントを握ってタツ戦をやりたかったので。
    • 本来、こういうクセ強編成であってもある程度の評価まで自力で上げられるような実力を付けたいと思ってはいるんだけど、やっぱりしんどすぎて修行感が強く出てあまり楽しめない。
    • そんな気構えで、シェケナダムとドンブラコの野良カンストを今年中に達成できるのか・・・?

2024年目標

今年の目標(OKR)をセルフコミットメントとして書き出しておく。

  • O:技術的な知識を付ける
    • O:技術書を読む
      • KR:ソフトウェアアーキテクチャ関連や設計に関する本を始め再読含め年間20冊読む
    • O:C++に入門する
      • KR:C++入門 APG4bやる
      • KR:C++本を何か1冊読む
    • KR:LinuCレベル2の取得
  • O:コーディングに慣れる
    • O:AtCoderで茶色になる
      • KR:ABCコンテストに24回参加する(2回/月x12ヶ月)
      • KR:Boot camp for BeginnersのEasyを100問全て解く
      • KR:競プロ典型90問やる
      • KR:あさかつにN回参加する(頻度は要検討)
    • KR:GolangでWebアプリを1本作り上げる
    • KR:Githubで200コミット以上する
  • O:健康になる
    • KR:エアロバイクを1400km乗る(9km/日x3回/週x52週)
  • O:サモランで全ステ野良カンストする

訂正メモ

  • C++入門目標のキャンセル
    • 毎年一言語学んでいくという思想に基づいて、今年はC++を学ぼうと考えてた。加えて、AtCoderで茶色になるという目標もあるので、問題を解くためにC++を使うと一石二鳥でお得かなと思い、今年の目標に設定していた。
    • が、AtCoderで茶色になるという目標を考えたときに、使用する言語は手段でしかないため、何だっていい。
    • もちろんC++の人気が高くて情報が多いのと、解説がC++で行われている場合が多いので、C++が分かるのはAtCoderをやっていく上で利便性が高い。でも、次の理由からも個人的にはPythonをやめてC++に乗り換えるのは微妙かなと判断した(もちろん、茶色の先を考えて長期的に見ればC++でやり直す方がメリットの方が大きいが、今時点でそこまで上を目指していない)。
      • コンパイル型の言語は、Golangをちゃんと使えるようになりたいと思っていること(まだGolangが自信を持って使いこなせていると言えない状態でC++に手を出すのは、どっちも中途半端になってしまうのではないか)。
      • 普段、Linuxのログ解析などを始めたとしたテキスト処理をやってることが多く、その場合Pythonもしくはbashを使っており、AtCoderの問題においてもAB問題ではテキスト処理が問われる問題はそこそこあるため、それがPythonで解けるようになっていくのは都合が良いこと。

2023年振り返り

2023年は特に目標を立てなかったので、予実的な振り返りは出来ないが、年末なので今年やってきたことを振り返ってみる。

プログラミング

  • 今年はシェルスクリプトPythonスクリプトを書く機会が多かったものの、普段から書いていないので必要なコードをさっと書けずもどかしいく思い、プログラミングの練習として5分コーディングを9月頃から始めた。その中で、2020年にちょっとだけやったきりになっていたGolangも再開。
    • 短いコードをさっとかけるようになるためにも日常的にコーディングをやるべきだけど、習慣化のために負荷は軽くという方針から最低5分はコーディングしようという考え。
    • 5分コーディングのおかげで、コードを書いている時間は増えているけど、まだまだ掛けてる時間が全然足りて無い感がある。それに加えて、1本のアプリを実用的なレベルまで作りきるという体験の積み重ねがまだまだ足りない気がする。
    • 経験もそうだけど、知識も圧倒的に足りておらず、自分が実現したい処理をどう言葉にして表現すればよいのか分からないレベル。なので、来年はソフトウェアアーキテクチャを始めとして知識も並行して身に付けたい。
  • あとAtCoderを初めてみた。こっちはPythonで問題を解いている。
    • ビギナー問題集を50%くらい解いてみて、ABC問題のうちABはほぼほぼ15分以内に解けるようになった。Pythonのリスト内包記法も慣れたし、基本的なイディオムは抑えたように思う。自分で問題を解いてACしたら、他の上手い人の解法をみてみるのが、やっぱり勉強になる。
    • 茶色になるための課題がC問題で、単純に実装してしまうと実行時間が足りないため、典型的な問題の解法を覚えたり、基本的なアルゴリズムの知識を付けていく必要がある。来年の課題。

サモラン

  • 野良カンストしたいと1月からずっとバイトし続けて、今年はサモランだけで500時間以上プレイし、今日までに4つのステージで野良カンストを達成。
    • カンスト出来たのは、アラマキ砦、ムニエール海洋発電所すじこジャンクション跡、トキシラズいぶし工房の4つ。
    • トキシラズは、12/27から始まった最強編成(ボールド、ホットブラスター、キャンピングシェルター、ジムワイパー)で駆け込みのカンストを達成。
    • ドンブラコとシェケナダムの野良カンストを達成できず全ステ野良カンストとはならなかったのは残念。2023年最後に割と強そうな12/26〜27の編成(52ガロン、96ガロン、ラクト、トライストリンガー)がきたので、だいぶ時間を使って910まで評価を上げたが、結局時間切れとなりカンストならず。バイト初日に400から800に4時間ほどであげられたので、カンストまであと3時間くらいでいけるだろうとたかを括っていたら、翌日のバイトは沼ってしまい5時間かけてもカンストまで至らなかった。
  • 来年こそはシェケナダムとドンブラコの野良カンストを達成したい・・・。
  • かなりやり込んだ方だと、ぼくは思っているけど、まだまだ目の前のことで手一杯になってしまい全体を見られていないなと言う気がする。
    • というか、ドンブラコとシェケナダムは見通しが悪いため、オオモノの対応が遅れがちでバイトが困難というステージであるので、全体を見る癖を他のステージで徹底して身に付けて、ドンブラコとシェケナダムのカンストを目指したい。
    • オオモノ処理については、カタパッドとコウモリ(のアメダマ)を放置しがち。ミサイルとアメが降って足場の塗りが無くなり、動きづらくなる上に地味にダメージを蓄積して、コジャケの一発でやられてしまうみたいなパターンがある。オオモノの寄せをしつつ、海岸に湧いたカタパッドの対応を同時にやるのが難しいので、その辺りの立ち回りを考えて改善したい。

LinuCレベル1

  • LinuCレベル1を取得した。
  • こっちも決めてた目標では無いけど、今年は何やかやとLinuxを触る時間が長くて、今の知識だと困る場面もあったため、もう少しちゃんと知識つけて詳しくなりたいなと思ったので、LinuCを取ってみた。こういう資格があってもあまり意味はないでしょと思ってたので長い間、取得する気が起き無かったが。
  • レベル1は基礎的な知識が問われる内容なので、正直あっても無くてもって感じで、ぼくが求めてる知識レベルにはまだまだな気がするので、いまはレベル2の取得に向けて勉強してる。最終的にはレベル3の303まで取れると良いなと考えてる。
  • これまである程度Linuxは触ってきたので、その経験でサクッとレベル1に関してはクリアできたものの、レベル2から普段はあまり触ってない部分の知識が求められるので、問題を解くだけではなく実機使って試してみるのも取り入れて学習する必要があるなと思う。

『Efficient Linuxコマンドライン』読んだ

  • 本書は、多くのディストリビューションで標準となっているbashを使ったコマンドライン作業をより効率的に行えるようになるために必要な基礎知識を解説した本。
    • Linuxでの読者のコマンドラインスキルと次のレベルに引き上げ、より速く、より賢く、より効率よく作業を行えるようになることを目的として」(p. ix)いる。
    • 内容としては基礎的な部分が多いので、複数のコマンドをパイプで組み合わせつつ作業を行うことに慣れてない人向け。
    • cut, grep, sort, uniq, find, paste, trといったコマンドが出てくるが、結局テキストから目的の文字列を抽出したり、加工したりという作業を行いたい場合って、最終的にはawkを極めることになりがち。
    • awkコマンドについて詳しくなりたい場合は、『マスタリングLinuxシェルプログラミング』を参照するのが良いと思われる。
  • よりこういったワンライナー処理を極めていくための本として「シェルワンライナー160本ノック」がある。最も、かなりニッチなワンライナーを書いたりするので、用途は限られそう。

MacBook Proのセットアップ(2023年)

  • 8年ぶりにMBPを買って始めはWindowsとの違いに結構戸惑ってしまったが、セットアップを兼ねて1週間くらい触ってみて、ようやくしっくりくるようになってきた。iPhoneiPadを使ってると macOSを使うと利便性が高くてとても良いが、こういうベンダーロックインは本当であれば避けたいものだけど、タブレットスマートフォンApple製品以外に個人的に使い勝手の良いものがないのもまた事実で抜け出せない。
  • と小言を言いつつも5年後にはMBPを買い直すと思うので、その時の参考とするためにも今回のセットアップ内容をメモしておこうと思う。

MBPのセットアップ

  • まずは何はともあれHomebrewをインストールする
  • そして、brewを使って、必要なアプリをインストールしていく。
brew install --cask visual-studio-code
brew install --cask orbstack
brew install --cask coteditor
brew install --cask vlc
brew install --cask iterm2
brew install gh
brew install --cask karabiner-elements

コメント

  • VS Code
    • コーティングに必要なのでインストール。特にいうことなし。
  • OrbStack
    • macOSでもWindowsにおけるWSL2のような環境を使いたかったので、それに近しい環境が使えるらしいOrbStackをインストール
  • CotEditer
    • テキスト編集のために入れる。VS Codeでも代用できるのだけど、いちおう入れておく
  • VLC
  • iTerm2
    • ターミナルエミュレータmacOS標準のターミナルでは心許ないので入れておく。WindowsではRLoginを使っていたが、macOSでは使えないので、iTerm2をインストール。
  • gh(GitHub CLI)
  • Karabiner-Elements
    • キーボードの装飾キーなどの入れ替えたのためにインストール
      • macOSの標準でも基本的な入れ替え設定はできるが、右⌘だけを別のキーに置き換えるような細かい設定はできないので、Karabiner-Elementsを使う

個別インストールしたもの

システム設定の変更

  • ⌘+Spaceのショートカットは、デフォルトではSpotlightが開くので、入力モード切り替えに変更する
    • システム設定→キーボード→キーボードショートカット→入力ソース→「前の入力ソース」を変更
  • トラックパッドでドラッグを有効にする
    • システム設定→アクセシビリティ→ポインタコントロールトラックパッドオプション→ドラッグ方法を「ドラッグあり」に変更
      • そして、ドラッグ方法を「3本指のドラッグ」に設定
    • ドラッグ方法を「ドラッグロックあり」にすると、掴んでいるウィンドウを離すときにもう一度タップする必要があり、これには違和感があったので指を離せばウィンドウも離せる3本指ドラッグ方式にした(Windowsでも指を離せば良かったので似た感じにしたかった)
  • ファイアウォールの有効化

アプリの設定変更

そのほか気になったところ

  • OrbStack
    • brewでインストール。
    • Ubuntu 22.04LTSを動作させている。初期起動時はメモリを1.8GBほど確保しているが、使い続けるとメモリの設定上限(5GB;デフォルト値)まで食っていき、これは一度確保されると二度と開放されない様子。
    • WSL2では、使っていなければ自動でメモリ解放されていきホスト側メモリが増えていく挙動だったけど、OrbStackはそういうメモリ解放の機構は実装されていない様子。これはOSネイティブに実装されてるWSL2のメリットかなと思った。
    • Pro trialが標準で開始されている。無料ユーザに切り替える方法がわからない。特に何も設定せずともデフォルトでインストール直後はProライセンスが割り当てられる様子。30日が過ぎたら自動で自動でフリーライセンスになるとのこと。
  • ChromeGoogleカレンダーに予定を登録する挙動がおかしい。予定が二重登録されているように見えてしまう。リロードするとちゃんと1つだけしかないので、大きな問題ではないのだけど。

第5回ビッグラン結果と感想

  • ハイスコア173個で無事、金のオキモノをゲット
  • 今回のビッグランから、ボーダーは固定化され、開催日のバンカラジオで発表される形式になった。前回までボーダーが上がる一方で過激化してた気がするので良い改善だと思う。
  • タラポートショッピングパークというステージだったけど、個人的に難しい気がした。全然慣れることがなかった。
    • 前回同様にタマヒロイのスポーン地点がほぼ固定だったため、納品はしやすかったものの、ステージに慣れず失敗が多かったため評価を上げるのに結構苦労した。10時間くらいプレイして結局評価は最高890で、野良カンストは未達。
    • また、クマブキ全種からランダムに配布されるように仕様が変更されてた様子。ビッグランという3ヶ月に一度のお祭なんだから、こういうので良いんだよ。
  • そして、今回から新しく出現したオカシラシャケのジョー。明らかに弱点みたいな部分があるけど、弱点だったのだろうか?イクラキャノンで狙っても他より大きくダメージを与えられるようには見えなかった。でも、どうやら弱点らしい。
    • タラポートのステージがそもそも狭いのと、ジョーがデカすぎて、満潮時に出現したら本当にステージが狭くてつらかった。満潮ドンブラコにジョーが出現すると、狭すぎて無理なのではないか?ステージに応じてサイズが変わったりしないだろうし。