'sqr'atch-note

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

『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ヶ月に一度のお祭なんだから、こういうので良いんだよ。
  • そして、今回から新しく出現したオカシラシャケのジョー。明らかに弱点みたいな部分があるけど、弱点だったのだろうか?イクラキャノンで狙っても他より大きくダメージを与えられるようには見えなかった。でも、どうやら弱点らしい。
    • タラポートのステージがそもそも狭いのと、ジョーがデカすぎて、満潮時に出現したら本当にステージが狭くてつらかった。満潮ドンブラコにジョーが出現すると、狭すぎて無理なのではないか?ステージに応じてサイズが変わったりしないだろうし。

M3のMBPを買った

  • M3のMacBook Airが発売されるのを待とうと思っていたけど、MBAMacbook Proを比較したとき、別にMBAである必要性も無いなと分かったため、M3 MacBook Proを購入した。色はスペースグレイを選択した。
    • MBAを待たずにMBPを買った理由はいくつかあって、まずMBAは15インチだとしても実解像度は14インチのMBPの方が高く、MBPのみリフレッシュレート120Hzに対応しており、そしてSDカードスロットやHDMIポートも付いているため、MBPの方が利便性は高そうで、今後M3 MBAが発売するとなっても、この辺りの差異は変わらないだろうと思った。
    • さらに、15インチのMBAは1.5kgくらいあって、14インチMBPと変わらず、Airと言っても流石に15インチだからそこまで軽い訳では無い。
    • 価格的な面を考えてみても、MBAを今回購入したMBPと同等の構成(メモリ16GB、ディスク512GB)にした時、MBPとは2万円程度の差額しか発生しない。上記の機能を2万円程度で追加できるなら、安いものだと思う。
  • そういう訳で、MBPを購入。2018年まではMBP 2015を使っていて、2018〜2023年はWindowsのラップトップを使っていたため、3年ぶりにWindowsからmacOSに乗り換え。
    • ていうか、結構な頻度でラップトップ買い替えてるなあ・・・。自重したい。
    • 今回買ったMBPの構成は以下の通り。
    • 変更したのは、メモリサイズを8GB→16BGBに、キーボードをUS配列に、の2点だけ。
  • いま頑張って色々とセットアップ中。これに関しては別エントリを書きたいと思う。

2023秋 Drizzle Season振り返りと来シーズンの話

  • いつものように、スプラトゥーン3の2023秋 Drizzle Season振り返りをしようと思ったものの、今シーズンはあまりバイトもしてこなかったため、振り返ることが少ない。
    • 通常バイトは、野良カンストを目指したいなとまだ思ってるが、評価40から999まで上げるためには最低6時間以上必要なため、そういうまとまった時間を取れなくなったのが大きい。というのも、競プロをはじめ、色々その他にもやることが増えたため、単純にサモランに時間を割きづらくなった。言い換えれば、モチベーション低下かもしれない。
    • ただ、来シーズンのアップデートによって、取得しているバッジに応じてバイト開始時の評価値が400スタートなどのように変わるようになったので、来シーズンは野良カンスト未達のステージのカンストが出来るかもしれない。
  • で、来シーズンのアップデートで個人的に一番の目玉は、シオカラーズの冬コスが見られる特別なフェス。
  • ほんとこれ可愛すぎる。冬コスのシオカラーズが可愛すぎて、これは卑怯。追加コンテンツ課金不可避。

今月やってきたこと

まだ11月は終わってないけど、今月の振り返り。今月は主に次のことをやってた。

  1. GolangでTodoアプリの再実装
  2. Duolingo
  3. AtCoderで競プロ

GolangでTodoアプリの再実装

  • 『Go言語Webアプリケーション開発』のTodoアプリをハンズオン形式で一通り実装してみたものの、19章以降の部分からほとんど理解できなかったので、より理解するために本書のTodoアプリを書き直していた。
  • 再実装にあたっては、設計としては同じだけど、データの保存先をsqlite3にして、WebフレームワークEchoを使ってWeb GUIも追加しようと考えている。
  • 現状は、本書の18章データの永続化処理までを実装し直した状況。

Duolingo

  • Duolingoを使って英語の勉強を始めた。洋画を見る時に、もう少しまともに聞き取れるようになりたいなとちょっとだけ思ったため。
  • 本当は、英単語や熟語をたくさん覚えたいという方向性を考えていたけど、Duolingoはそういうサービスでは無く英語の基礎を学ぼうって感じのサービスなので、その目的は達成できず、このまま続けるかどうかは悩んでいる。と言いつつ、1レッスンが5分程度であり、Xを見てる無駄な時間の代わりにDuolingoやってたら、30日連続で遊んでいた。
    • もっと聞き取れるようになりたいとは思いつつも、そこまでモチベーションは高くないため、隙間時間で出来るのはありがたい。
    • 最初のセクションがあまりにも簡単過ぎて、1つ1つ進めるのはめんどくさかったので、セクション4まで飛び級をした。Duolingoには現状セクション6まであって、そこまで飛び級できそうだと思ったけど、飛ばしまくっても意味ないじゃないのかなと思い、セクション4からはレッスンを1つ1つ真面目にやっている。ただ、それから3週間経っても、進捗はまだユニット2が7割ほど。
    • セクション4は全部で30ユニットあるので、1日5分(1レッスン)だけやってくスタイルだと、やり終えるまでに1年以上かかるのでは?と思わないでもない。
  • 英語初心者でもないため、Duolingoは非常に簡単で、これをやるより英単語を覚えまくった方が色んな意味で手っ取り早いのではという気がする。もっとも、Xをダラダラと眺めてる時間よりかは有意義だと思いたい・・・。

AtCoderで競プロ

  • 先月から始めたAtCoderは、まだ継続しており、ほぼ毎週ABCに参加してる。
  • AB問題は、20分以内に解けるようになって、いまパフォーマンス的には280くらいの位置(ただ、コンテスト参加数が9回以下なので正式なレーティングは算出できてない)。ここからレーティングを120だけ伸ばして400(茶色)になるためにはC問題を解けるようになる必要がある。むしろ、AB問題を短時間で解けるようになるよりもC問題が解けるようになったほうがパフォーマンスは伸びるはず。
    • C問題は、問題文の通りに単純に実装してしまうと計算量が多くTLEになってしまうため、少し工夫が必要となってくる。が、現状その工夫部分が知識として身についてないので、時間内に解ききれない。過去問をたくさん解いてパターンを覚えていく必要があり、そのために時間がかかるだろうなと思っている。先月時点では1年後くらいに茶色になっていれば良いなという計画だったので、それよりも早くに達成しそうな雰囲気はある。
    • 過去問としてAtCoder Problemsの「Boot camp for Beginners」に取り組んでおり、今日までに32問解いた。 1日1問くらいのペースで最低限はやっているが、もう少し消化率を上げたい。

CLIでWebサイトのスクショを取る

developer.chrome.com

& "C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --screenshot=C:\Users\noname\Pictures\sample.png https://google.com
  • 気をつける点は、Powershellで外部プログラムを実行する場合には&(アンパサンド)を先頭につけること。chrome.exeのパスが文字列として認識されてしまい、エラーとなる。もしくは、Start-Processコマンドでプログラムを実行する方法でも良い。

オプションについて

  • --headless=new
    • 上記公式ブログでは、新しいヘッドレスモードを利用するためには、newフラグを指定する必要があると書いてあるが、今回試したChrome 119では、フラグを指定すると逆に動かなかった。
    • また同ブログにはフラグ無しだと、古いヘッドレスモードが起動するとあるものの、新しいヘッドレスモード用のオプションは使えたので、もしかしたらフラグの設定は不要になって、デフォルト動作が新しいヘッドレスモードになったのかもしれない。しらんけど。
  • --screenshot
    • スクリーンショットを取得するオプション。このオプションと併用できる物として以下のものがある。
    • --window-size
      • --window-size=1920,1080のように指定して、スクショのサイズを変更できる
    • --timeout
      • ページのレンダリングを一定時間待ってからスクショを取るためのオプション
  • --print-to-pdf
    • WebサイトをPDFとして保存するオプション
      • Webサイトのフルサイズスクショを取りたい場合は、PDFとして出力したほうが良い。windows-sizeオプションでは絶対値で指定するので、足りなかったり余白が多くなったりしがち。

PythonSeleniumでスクショを取る

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless') ## ヘッドレスモードを指定
driver = webdriver.Chrome(options=options)

url = "https://www.python.org"
driver.get(url)

## ページの最大幅
page_width = driver.execute_script('return document.body.scrollWidth')
## ページの最大縦
page_height = driver.execute_script('return document.body.scrollHeight')

driver.set_window_size(page_width, page_height)

filename = url.translate(str.maketrans({':': '_', '/': None}))) #=> https_www.python.org
driver.save_screenshot(filename + '.png') ## => True
driver.quit()
  • このプログラムでは、ページのフルサイズスクショを取得し、指定されたURLをファイル名として保存する。
  • うーん、基本のコードなのであまり追加で説明することはない。実行環境は以下の通り。