elnath-geek’s diary

情報系の大学院生を卒業して社会人です。気が向いたことを対外発信する場所として使っていきます。

キーボードだけで、PCを手早く操作しよう! mac編

どうもこんにちは、

  • ロッカーのない職場に、毎日メカニカルキーボード(Keychron K8)とマウスを持参し、
  • フリーアドレスな職場に、マイデスクを構築してると揶揄されつつある新卒です。

この記事では会社に入って特に重要性を痛感する、PC基本操作のスピードアップに向けて自分が実施してることをレベル別で紹介します。
一度に全部をこなそうとすると、頭がショートカットに慣れないと思うので、焦らずしかし着実に導入アプリを増やしてみて下さい!
レベル感に関するコメントや、こんなアプリもいいぞ!という声はいつでも受け付けているので、あなたの推しアプリがあればぜひ教えてください~!

なお、この記事は偉大な先人たちが紹介している効率化記事を、どの順番に使うべきかという視点でまとめ直した記事になる予 定です。

Lv. 1 ウインドウ操作をコマンドで行う

まずはこちら、アプリウインドウをボタンぽちーで、画面の左右にピッタリ寄せる、もしくは全体表示にする。です。

ウインドウ操作のショートカットキーの実演動画
※上の gif 画像・内容は、下記のいちごさんの記事から引用しています。

zenn.dev

上のリンクを開いて、Raycastというアプリをインストールしたら、目次を参考に、”よく使う機能4つ”の2番目、”2. ウインドウ操作のショートカットキーを設定” だけやりましょう。

  1. RaycastのSetting→Extensionsを開いて、
  2. 検索欄にwindowと入力し、
  3. 登録したい操作名のHotKeyという部分をクリックし、
  4. 登録したいショートカットキーを実際に押してください。 下の画像のようになればOKです。

RayCastのwindows操作ショートカット設定後の様子

CapsLock キーはこれを機にControlキーに変えてしまいましょう(同様にいちごさんの記事を参考に)。

まずはこの状態で、

  • ワードとブラウザを左右に並べたり
  • Zoomの画面を全画面表示にしてみたり
  • Slackを画面左 2/3表示、音楽アプリを 右 1/3 にしてみたり

と、試してみてください。これだけでも、新しいアプリを開くたびに、ウインドウの四隅にカーソルを持っていって、アプリを広げて~、というストレスから解放されます。

Lv. 2 Cmd + Tab で、フォーカスアプリを切り替える

さてみなさんは、Lv.1 の RayCast のおかげで、1画面にアプリを複数きれいに並べることが得意になったはずです。 次に覚えるのは、アクティブウインドウをコマンドで切り替える方法で、簡単に言えば、一番前に表示されるアプリをショートカットで切り替える方法を覚えましょう!

2/3のサイズでアプリを運用してると、こんな感じにアプリが半分隠れてしまったり、全画面表示の後ろにあるアプリが使いたい!という状況に陥ることがあると思います。

ウインドウが重なってる状態

そこで、Cmd + Tab を押してみてください すると以下の gif 画像のように、アクティブウインドウが切り替わるのがわかると思います。

これができると、マウスを触らなくても、半分隠れたZoomを手前に出したり、デザイン中に参考画像を手前に表示したりできてとても便利です。 トラックパッドで上になぞって、アプリを小さく表示して、そのなかから目的のアプリを選ぶという動作から解放されます!

ちなみに、Cmd + TabMacのデフォルト機能ですが、デフォルト機能の場合同じアプリの違うウインドウを区別できません。 具体的には、Chromeで複数ウインドウ開いていても、そのどれにフォーカスを当てたいかの選択ができません。
それを解決してくれるのが、AltTabというアプリです。

AltTab - Windows alt-tab on macOS

上の公式サイトから、インストールして、少し設定をすると使えます。
権限が必要だよ!って言われたら、許可してあげてください。
筆者は、下の画像の赤枠で囲った部分だけを変更しました(多分)。

AltTabの設定項目と動作動画

Cmd + Tab を押したときの挙動は左下の画像の通りです。 FireFoxのウインドウが複数存在していますが、それらが区別されて選択できる&ウインドウのプレビューがあるので、Macのデフォルトの挙動より便利です。

Lv.3 ランチャーを使いこなす

さて、ウインドウの配置と最前面に出すアプリの選択までキーボードでできるようになったので、次はアプリの起動等をキーボードだけでできるようになりましょう。

といっても、この機能はもともと Mac にSpotlight として搭載されているので、デフォルトでも問題はないです。 筆者は、下のような感じで、Cmd + Space で起動するランチャーを Raycast製のものに変更しています。
ランチャー内で計算できて、たまに便利です。

Cmd + Spaceで起動するランチャーの変更方法

カーソルをアプリのもとに持って行って、クリックして起動するのではなく、
Cmd + Space を押してから、アプリ名を入力して Enter を押してアプリを起動するようになれば、また一つマウスを触らなくてよくなります!

Lv.4 各アプリのショートカットに慣れる。Tab キーを使いこなす。

ウインドウ操作やアプリの起動・切り替えがキーボードだけでできるようになったので、次はアプリ内の操作でマウスを使う頻度を減らしていきましょう!

この段階では、とりあえず Tab キーを押す & 各アプリ固有のショートカットを覚える ことをめざします。

いろんなアプリ上でとりあえず Tab キーを押してみると、画面上のいろんな場所に枠がついて動くのがわかると思います。 枠がついてる場所は、フォーカスが当たってる状態で、Enterを押せばその枠がついているものを実行できます。

簡単に言えば、
Tab を連打して枠がついた状態で Enter = マウスクリック
です。
ただ、Tab は画面の左上から右下に動いていくのでそれだけではやりづらい操作もあり、それを補完するのが各アプリ特有のショートカットです。

Chromeブラウザ

多くの人は、右手でマウス or トラックパッドを触っていると思うので、左手はCmd, Ctrlあたりに小指を構えておくとよいと思います。 ブラウザのタブという狭い領域にマウスを動かしてクリックするより、コマンドでタブ操作する方が100倍速いです。

覚えるコマンドは以下の通り。多くのブラウザで共通です。
Cmd + T:新規タブを開く
Cmd + W:タブを閉じる
Cmd + Shift + T:直前に閉じたタブを開く(間違えて消したタブの復帰)
Cmd + ←:前のページに戻る

Ctrl + Tab:次のタブへ移動する
Ctrl + Shift + Tab:前のタブへ移動する

ここまで来たみなさんなら、きっとこう思うはずです。

タブの操作はキーボードでできたけど、検索結果を開くのにマウスが必要なの不便だなー

と、そんなあなたはこのChrome拡張を入れましょう! chromewebstore.google.com

vim基準のキーバインドでブラウザを縦横無尽に操作できて、最高な拡張機能なのですが、まず覚えるべきは一つだけ。

検索結果画面で、f キーを押しましょう。

Vimiumのfキーを押した様子

するとこんな感じで、画面上のクリック可能なボタンやリンクすべてに、キーが割り当てられます。
例えば、右画像一番下の ”ブラウザを Vim ライクに操作する Vimium の布教と知見まとめ" を開きたい場合は、その左上に表示されている w キーを押すことで、そのサイトを開けます。

ということで、キーボードだけで、めでたく検索&ページを開くことが出来ました!
ページ内では、j を押すと下に進んで、k を押すと上に戻ります。
めっちゃ下に進みたいときはSpaceを押しましょう。
え、前のページに戻れないじゃん、って思った人は、そっと Shift + h を押してみて下さい。
他にも機能はたくさんあるので、機能一覧を眺めてみるなり、こんな機能ないの?って思ったら、適宜自分で調べてみるなり、してみてください。

Zoom

Cmd + Shift + A:マイク切り替え
Cmd + Shift + V:ビデオの切り替え

Teams 編

WIP
Cmd + 数字
Tab, Enter, Esc, ←, ↓, ↑, →
Ctrl + R
Ctrl + M
あたりをよく使います。

Slack 編

よく使うのは以下。 ※ ↓↑は上下矢印を意味します。
Option + ↓↑:上下のチャンネルに移動
Option + Shift + ↓↑:上下の未読チャンネルに移動
(チャンネル内で)↓↑:投稿を移動(フォーカスが移動)
(投稿にフォーカスが当たった状態で)e:投稿の編集

さらなる高みへ、、、

筆者が力尽きたため、この投稿はここで終わりになりますが、気が向いたらまた更新しに来ます。
続編では、さらなるアプリのショートカットや、キーボードのリマップ(Karabiner-Elements)について話す予定です。

それではみなさん、良いキーボードライフを!!!

文章強度・思考強度という概念を広めたい

世の中には答えがない問題がたくさん(ほとんど?で)あり、身近な例でいえば「どこに就職すべきか」であったり、「ChatGPTは人間の仕事を奪うのか」といったものがあると思います。

そのほかにも、「会社・プロジェクトの開発方針をどうするか」であったり、「対人関係をうまくマネジメントするにはどうしたらいいか」など、考えるほどに深みが増していくようなことはたくさんあり、私はこうした少し哲学的な考えを人と話すことが好きです。

そして、友達とこういった議論をしていく中で、自分の中で「主張の強度」のようなものを考えるきっかけがあったため、自身の考えを整理しつつ、今回の記事を書くに至りました。

そして、私が考える思考強度の変遷と、段階別の内容の目安についてまとめたのが以下の図となります。

文章・思考強度の区分と内容の目安

提案する思考強度と変遷は5段階ですが、強度1の考えは強度2という変化状態を経て、強度3となり、強度4という中間状態を経て強度5となる、という関係図にあります。

 

さて、各段階の思考の強度がどのようのものなのか考えていきましょう。

まず、強度1:思い付き ですが、これは個人の(継続的な)主張ともいえない、何か情報を見たときに個人の脳内で思いつく条件反射のようなものだと考えています。

こういった条件反射的な思い付きは、興味深い考えのもとではありますが、最初の思い付きがそのまま素晴らしいものであることは、なかなかありません。

そして、強度1:思い付きの思い付きと、強度3:個人の主張 を区別するのが、強度2:共有・会話だと考えています。

 

まず前提として本文章において私が議論するものは、「正解がない問いへの考え方」であり、こうした課題への取り組みは、正解がない以上、最善だと思われる内容を緻密に考えるということが正しいと考えています。

そのため、自分の中で繰り返し主張を吟味したり、知人とアイデアについて話すことが、個人の主張を洗練されることにつながるため、強度1:思い付き の次のステップとして、それを洗練させている状態である、強度2:共有・会話を定義しました。

ちなみに自分の修士学生期間では、論文のテーマ探しという形で、この強度1と強度2の間を高速反復横跳びしてました(笑)。

思い付きというは大概にして、他人との簡単な議論にも耐えられる強度がないことが明らかになる(すぐに論破・反例が見つかる)ものです。

 

そこで、少数の知人との話し合いや内省を経て、少しもしくは大きく変化しつつも、自己の中で確立された考えを強度3とします。

この強度まで来た考え方というのは、少なくとも自分の中では首尾一貫した論理があるもので、他人にある程度の影響を与える、一つのものの見方であるというイメージです。一方で気を付けないといけないことは、この強度3の考え方は首尾一貫はしているものの、その主張の正しさは全く保証されていないという点です。

もう少し正確に書くと、強度3:個人の主張は各々の正義や経験の上に作られた考えであり、その各自の主張が社会的通念に則っているか、アドバイスを受けた自分の状況においても正しいか、などに関しては議論の余地があり、それを議論する場として、強度4の存在が必要だと思われます。

 

ちなみに少し脱線すると、強度3のうかつな否定は、いらぬ争いのもとになると自分は考えていて、というのも簡単に相手の人格の否定につながるからです。

「私は〇〇という状況で✖✖して成功した」

これは相手の中ではある程度の強度を持った事実であることが多いです。

ただ厄介なのは、多くの人が

「私は✖✖して成功した」

など背景情報を無視して語ることが多く、その時に

「俺は(△△な状況で)■■したらうまくいって、✖✖は逆効果だった!」

などの話をし始めると、両者とも筋の通った主張の元、前提が違うので無駄な議論をしてしまう。さらにお互いが事実を語っているがため、主張を曲げず言い争いが起き、「相手が間違っている!」という熱のこもった言い争いにつながる可能性が十分にあります。

なので、相手が強度3相当の主張をしているな、と感じたときは、その状況まで含めて議論するのが大事です。

 

さて強度4では、前段で話したような背景情報を含めた強度3の意見のぶつかり合いというものを想定しています。また、個人の意見から大衆の意見と変化するのもこのあたりであり、PrivateとPublicの境目もまた、この強度3-4のあたりにあると考えています。

個人的には、強度3には個別の事情(前述での背景情報)がたぶんに含まれ、個別の事情が見え隠れしてる間はPrivate、個人の意見であっても、背景情報がクリーンな場合はPublicなものと区別できそうな気がしています。

 

強度4から上は、個人の領域を抜けて他人にも納得感を持って聞いてもらうための主張作りという色が出てくると考えており、クライアントや投資家、論文査読者などが仮想的といえます。この段階で重要なのは、多様なバックグラウンドを持つ人間が等しく合意できる提案にまとめること、つまりいろんな人からの指摘に耐える強度を持つ主張を作り上げることです。

本文のタイトルにもある強度という言葉が一番しっくりくるのがこのプロセスだと思います。

ちなみにこの段階が一番大変で、なぜなら以下のような、どっちにしろ対応に骨が折れる意見が、ごちゃまぜの状態で、たくさん自分のもとに届くからです。

  • 背景情報まで含め正しい指摘 →正しいがゆえに対処が困難
  • 背景情報を混濁した指摘 →相手の人格否定にならないように丁寧な説明・和解が必要

ただ、これらの玉石混交な意見によって、考えというのは研ぎ澄まされていくもので、この強度4を突破した暁には、強度5の状態に到達できると考えています。

 

強度5の考え方というのは、非常にシンプルながら奥深く、関連する質問をしても的確に返されることがほとんどです。というのも、すでにその質問は強度4の段階で対応済だからです。強度3との違いで言えば、ある程度の範囲の人にその考え方が浸透している、その強度5の考え方が秩序として浸透している組織がある(強度3の影響力は個人とその少数の知人)などの影響力の大きさと、あとは考慮済な意見の広さなどがあると思います。

 

もう一つ、最後に気を付けないといけないことは、個人間で強度3や強度5に該当する主張の強さは異なる、ということです。

端的に言えば、教授の強度3の主張は、学生が頑張って高めたはずの強度5の主張よりも強いこともあるし、敏腕経営者の強度3に見える主張は、いっぱしのビジネスパーソンの強度3の主張をはるかに超えるものであるということです。

これは、強度3と強度5の違いの一つでもある、他者からの受容性の高さという点において、分野の経験が深い人物であればあるほど、脳内で強度4の議論を疑似的に繰り返ことが可能で、強度5に近い意見を自分だけでも持てるというロジックで説明できます。

強度4の段階で、こうした考えが深い人物を巻き込めるほどに、強度5としての意見の質は上がり、中途半端な強度4のプロセスでは、造形が深い人の強度3の主張に及ばないときもあることに気をつけましょう。

 

 

さて、締まらない文末となりますが、本投稿で説明したかった文章強度・思考強度の概念は読者の皆様に伝わりましたでしょうか?

そして、勘のいい読者ならお気づきかと思われますが、この投稿自体が私の個人的な主張であり、強度3の意見です(内省が足らないから強度2.5くらいかも 笑)。

本文を読んで、「あなたのこれまでの経験ではそうかもしれないが、私的にはこう違う」という意見大歓迎であり、願わくば背景情報を開示したうえで楽しい議論ができる方、この考え方を強度4にともに載せてくれる方をいつでも募集してますので、気軽にメールなりご飯に誘うなり、アプローチをお待ちしています(笑)。

 

最後まで読んでくださった方はありがとうございました。
この内容が面白かったら、いいね&友達に共有してね!

 

 

外出時、スマホをカバンに入れてみた

表題の通り、外出時にスマホをズボンのポケットではなく、わざと取り出しに時間がかかるカバンに入れてみることにした。

本質的な目的は、目的意識を持たないとスマホを使わなくすること。

きっかけとしては、スマホの利用時間を減らしてみたら、自分の生活がどうなるかの検証

初日にして思うところがまあまああったので、こうしてブログを書いています。

 

気づいたこと

  1. めっちゃ無意識にスマホを求めてる。
    • 移動中に歩いてて、「んーー、なんかねえかな」と思った瞬間に左ポケットに手を差し込んでいる。
    • エレベーターの待ち時間になった瞬間に左手がポケットへ。
      • ※自分は普段、左ポケットにスマホを入れてます。
  2. 別に移動中にスマホは不要
    • 前提:スマートウォッチで通知は見れるので、緊急対応は可能
      • それこそデジタル依存だろ!という指摘はごもっともですが、今回はスマホの利用時間にフォーカスしてるので、スルーします。
    • 移動中に1分1秒を惜しんでやるほどのことはないなと再認識。
    • 家の鍵とかSuicaは”必ず”必要になるが、スマホはあれば便利程度。
      • モバイルSuicaは知りません…、自分は物理カードユーザです。
      • 誰かと未知の場所で待ち合わせとかは、ぜひスマホを使いましょう
  3. 本当に必要であればカバンから出して操作すればいい。ただその際にスマホを選ぶ理由は薄い。
    • どうせカバンを開くなら、本読むかーとなる。もしくは最適なデバイスへ。
    • 実際、この記事の前半は電車でPCを開いて書いてます。長文書くならPCのほうが良いので。
  4. 移動中に思考時間を確保できる
    • この記事内容も歩きながら考えて、思考の整理のために文章化している。
    • 最近、長時間の思考が出来なくなってると感じるので、その原因解決に?(すぐにスマホに逃げるのがよくないのでは、という意見)

その他、考え中のこと

  • 歩きスマホはするのに、歩き読書はしないのはなぜ?
    • 持ち運びの容易さ、必要な集中力、緊迫性とか?
    • でも、ネット記事で調べ物はする…

 

習慣化には平均3週間程度かかるらしいので、3週間後自分がどうなっているかはわかりません。ただ、実行にかかる意識コストがほぼ0なので、続いてはいるかもです。その価値があるか、これからの思考によりますが…。

 

ということで、本記事は以下の問題提起をして終わります。

スマホがいつでもすぐに取り出せることは、本当にあなたに利益をもたらしますか?

 

意見がある人、関連書籍を進めたい人、直接話してみたい人、なんでもござれなので、気軽にコメント・DM お待ちしています。

ここまで読んでくださった方は、ありがとうございました。

 

PC利用時間管理のススメ - ManicTime の使い方とオンプレサーバーの建て方 -

時間管理はいいぞ!!!

みなさん、自分がPCをいじってる時間は把握してますか?

「今日は8時間もコード書いた自分偉い!」とか、「気づいたら半日ゲームしてたわ~」とか、世の中にはいろんな人がいるとは思いますが、自分は「あ、やべ今日はYoutube見すぎだ、もっと研究しよ()」ってなるためにも、何を何時間やったか把握したいという願望を持っています。

時間を管理するメリットはほかにもあって、例えば業務日報の作成などは、あとからPCのアプリ使用状況を見れば、いつ何時間作業したのか大体振り返ることが出来ますし、過去の作業にかかった時間が参照できると、仕事の見積もり精度が上がるなどいいことがたくさんあると考えています。

もちろんそんな需要はたくさんあって、「時間管理アプリ」などで検索すればたくさんのツールが出てきます。実際に私は過去に Toggl Track を利用していましたが、

  • タイマーを開始するのを忘れる
  • 止めるのを忘れる
  • 名前(タグ)を設定してる作業しか追跡しないがち
  • 名前を付けるほどではない作業は追跡されない(するモチベがなく、タイマーが起動されるに至らない)(要は一つ上と同義)

などの使いづらさを感じていました。そこで自分が半年以上使っているのが、このManicTime です!

ManicTimeの概要

ManicTimeはシステムに常駐して、PCの利用状況を自動でトラッキング・集計してくれるソフトです。

と言ってもわかりづらいと思うので、システムの出力例と自分の使い方を軽く説明したいと思います。

ManicTimeの使用例1

上図は自分のトラック結果の一例で、この図を見てどんなことを考えられるかをコメントで残しています。

アプリは自動で色分けされており、この日は青が多くて、VsCodeで開発してた日だなーと大体わかります。

ManicTimeの使用例1 詳細

当然、表示エリアも変更できるので、コードを書いてはStackoverflowを見てデバッグして、localhostもちょくちょく開いてるな〜とか、後から確認できたり。

ManicTimeの使用例2

他の日だと、この日は9時半ごろにPCをつけて、午前中はコーディング
昼過ぎはYouTube見てて、14時からは、slack(水色)で話してて、その後は調べ物(ピンク)してる。夜は22時前からゲームの攻略情報調べてるなー(うすい水色)

などといろんなことを振り返って知ることができます!

他にも、その日にアクセスしたURLが一括で遡れるようなUIや、欲しいと思える統計情報などが多数提供されており、見てるだけでも楽しいです。

 

ManicTimeを実際に使う

ということで、みなさんManicTimeを使いたくなったと思いますので、使い方について説明していきたいと思います。

導入概要

ManicTimeの個人での使い方(プラン)は何パターンか考えられて、

  1. Windows / linux が1台だけの人:普通にアプリをインストールして常駐させる。
  2. Macの人:月$7課金してクラウドサーバーか、サーバーソフトをバックで動かして、ネイティブでトラッカー、Webで結果を見る。
  3. 複数PCの追跡結果をまとめて見たい人:自分でサーバーを立てるか、クラウドサーバーに課金し、Webでまとめて結果を見る。
    (2023/04/04 追記:個人でサーバーを立てても、windows/mac からサーバーにデータを送るのにはライセンスが必要なようです!)

などがあると思います。企業ユースケースは今回取り扱いません。

自分は、デスクトップPC(Windwos)とM1 Macの結果をまとめて見たかったので、サーバー用のラズパイ4B含めVPNを構築し、ラズパイ上のManicTime Server にデータを送りWebで結果を確認するという運用をしております。

詳細についてはあとで説明します。

パターン1

WindowsもしくはLinux 1台の人は、特に難しいことはないです。公式HPから自分のOSにあったソフトをダウンロードして、ダブルクリックとかをしてれば動きます。

強いていうのであれば、「OS起動時にアプリを起動する」というようなチェックを入れておくと少しだけ幸せになれると思います。

パターン2

Macでは、Windows/Linuxとは違って、ネイティブで統計結果まで表示するようなアプリではなく、PCの操作情報をサーバーに送信するトラッカーのみが提供されています。

https://www.manictime.com/Mac

そのため、課金してクラウド個人サーバーを契約するか($7-9/month)、自分でサーバーを立てることになります。

自分はクラウドサーバーの契約をしていないので詳細については不明ですが、データ送信・クライアントの接続方法・管理ページなどは、オンプレサーバーもクラウドサーバーもあまり変わらないと思います。

サーバーの立て方などについては次の章でまとめて解説します。

パターン3

複数PCの情報をまとめて管理するにはサーバーが必要となります。統計情報はそれぞれのPCで開いて見ればいいじゃん!という人はそうしてくださいませ。

自分はWindowsMacの統計を一つのページで管理したかった&そもそもMac用にサーバーが必要だったなどの理由と、手元に余ってたラズパイからオンプレサーバーを建てることにしました。

詳細はパターン2と同様に次の章です。

(オンプレ)サーバーの建て方から動かすまで

(この記事を書いた理由の半分は、サーバーを建てるのに、日本語情報が少なくて共有するため…!)

と言っても、公式ドキュメントが存在するので、それにしっかり従えば問題なくインストールできるとは思います。

Macの人向けに軽くお気持ち表明した(実際に動かしていません)あとに、自分がラズパイに導入しようとした際につまづいた点の共有含め、導入方法を書きたいと思います。

役立ち情報たち

サーバーのダウンロードページはこちら:Download Server - ManicTime
公式ドキュメントはこちら:Setup

Windows編?

Windows向け日本語説明書(非公式)も存在します:https://support.lifeboat.jp/docs/mts/MTS_guide.pdf

Mac

まず、Mac単体でサーバーとトラッカーを動かそうとするのは結構大変そうです。

ManicTime Mac

ここに書いてあるように、Macではトラッカーのみが提供されており、サーバーは別で用意する必要があります。

クラウドサーバーを契約する人は頑張ってください。ラズパイ編の後半ぐらいから参考になる情報があるかもしれません。

Mac 自体にサーバーを建てるには Installation が参考になるかもしれません。

と言っても、

install your own ManicTime Server. On Mac you can use Docker version.

と書かれてるだけで、要はmac上にDockerを動かして、そこでLinux用のManicTime Serverを建てろということらしいです。

追跡データはストレージに貯められ、サーバーと接続できたタイミングで同期されるので、厳密には常にサーバーを動かさなくても良いのですが、運用としては微妙になると思っています。

なので、MacユーザがManicTimeを快適に使うには、クラウドサーバーに課金するか、Global IP を持った仮想マシンを借りるか、自分みたいにVPN&ラズパイとかになると思います。

ラズパイ編

まず、使用ハードについて、

結論から言うと、Raspberry Pi Zero, Zero 2はどちらも起動できませんでした。

というのも、サーバーソフトのtarファイルに64という記載があるので、32bit CPUのZeroでは当然起動しません。

Zero2でも起動を試しましたが、 ソフトのダウンロード・解凍・実行までできましたが、実行するとkernel panicが出て修復できず、諦めました。

これに関してはハードの性能不足だと考えており、Before installing にあるように、サーバーの性能要件として、メモリがGB単位で要求されており、メモリが512MB の Zero 2 には荷が重かった、という理解をしています。

と言うことで、満を持してRaspberry Pi 4 Model B を使用することにしました(以下ラズパイ4B)。なのでこれ以降は、ラズパイ4Bにsshできる状況(GUIなし)での構築のための手順を説明します(macで構築する際に気をつけるべきことも、少しは補足するつもりですが)。

また、ラズパイ上のサーバーにデータを送る必要があるので、VPNの使用も必要になってくると思います。

自分は ZeroTier – Global Area Networking というVPNを使っていますが、Tailscale · Best VPN Service for Secure Networks を使ってる人も周りにいます。

なんにせよ、ラズパイのipアドレスがわかっていれば大丈夫です(VPNを使っていれば、192.168.xxx.xxxとかだと思われる)。

公式ドキュメントに従って、最初はサーバーソフトをダウンロードします。

ラズパイはLinux かつ arm  なので、この画像の↓左下のmanicTime Server ARM を選びましょう。

ホストPCにダウンロードしてscpで飛ばすもよし、右クリックでリンクをコピーして、ラズパイ側で、 wget {リンク} としても大丈夫です。

ManicTime Server Downloadページ

 

ダウンロードできたら、コードを解凍します

tar -zxvf {ダウンロードしてきたファイル}

で解凍してください。

参考までに自分のコードは以下になります。導入時期によって、バージョンとかが変わると思います。

tar -zxvf manictimeserver-portable-5.2.8.0-linux-arm64.tar.gz

解凍できたら、

cd manictimeserver

をして、

./Setup

すれば初期設定ができて万事解決!と言いたいのですが、./Setup ではブラウザでの操作が必要であり、ssh onlyでGUIがない環境で設定していると、

xdg-open: no method available for opening

というエラーが発生します。これはGUIがない時に表示されるものです。

Linuxのコマンドライン(CUI)で使えるテキストベースWebブラウザを使い比べてみた | 俺的備忘録 〜なんかいろいろ〜

このサイトに紹介されるように、Lynxなどを入れることでコマンドラインでテキストベースのWebブラウザを使用することはできるのですが、

ManicTime Server ./Setup with Lynx

このようなページが表示されるだけで、これ以上進むことができませんでした。

公式ドキュメントでは ./Setup の下に Databse と Administrators という記載があり、これが設定できると思われますが、自分はこのページへ行き着くことができなかったので違う方法で設定を行います。

と言っても Database については、個人利用であれば default の SQLite で十分であり設定は必要ありません。

一方で、Administrators の方は注意が必要で、管理用ページにログインし、ユーザの管理などをするのに、adminユーザが必要です。

なので、Setting administrators にあるように、

./ManicTimeServer addadmin -u user@email.com -p somePassword

上記のコマンドでadminユーザを作成してください。

メアド、パスワードは各自で適当に設定してください。

adminユーザの作成ができたら、改めて、

./ManicTimeServer

でサーバーを起動して、表示されたURLにアクセスすると、ログインページ(下図)が見えると思います。

VPNを構築していれば、この以降の操作はホストPCで可能です。

ただ、現状はラズパイへのsshセッションを切断すると、./ManicTimseServer が終了してしまうので、なんかしらの方法で永続化する必要があります(後で説明します)。

ManicTime 管理ページのログイン画面

ログイン画面では、先ほど設定したadminユーザの情報を入力してください。

ログイン後は、左上にある License の設定が必要です(多分)。そして、個人利用ならTrial Licence で十分だと思われます(多分)。

 

ManicTime 管理ページ

いろんな統計情報が上図左側に示した青背景のページ、右上の歯車マーク→Administration を押すことで右の灰色のページに移動でき、灰色サイドバーの中央あたり、Usersからユーザの追加ができます。その他の設定はお好みでお願いします。

Usersでは、New userからユーザの追加が可能です。

ユーザを追加する際、メアドの重複はできず、Nameは管理画面でしか用いられない表記名となります。

ユーザを追加したら、Activaton linkが生成されるので、そのリンクに飛んでパスワードを設定することで、ユーザ登録が完了します。

企業向けの運用としては、ここで利用者のメールを登録しますが、個人利用では、適当なメアドで運用しても問題はないと思われます。

ユーザ登録が終了したら、いよいよトラッカーの登録です。

Windowsであればネイティブアプリから、Macであればメニューバーにいるアプリから、オンプレミスサーバーに接続というものを選択します。

ManicTime Server users

ManicTime Mac

これらのサイトを参考にするといいと思います。

Windowsはアプリのオレンジのアップグレードと書かれた場所を押すと、オンプレミスサーバーに接続というボタンがあるはずです。

その際に、サーバーに接続する際に求められる Username というのが、先ほど管理画面で登録した Name ではなく、メアドであることに注意してください。

Windowsのネイティブアプリでは、接続が完了するとアプリ左下にサーバー情報や同期状況について確認できます。

ここまで設定できたら、あとは管理画面に進み、adminアカウントでログインし、

サイドバーの TEAM -> Timelines 右上の青いボタンから、Show: All timelinesなどを設定すれば、いろんな情報が見えると思います。

正直自分もこの管理画面にはまだ慣れていないので、各自でいろいろ探索してみてください!

ManicTimeServerの永続化について

サーバーがちゃんと動いて、Webからデータも見れた!となっていると思いますが、

./ManicTimeServerがラズパイへのsshセッション上で動いているので、sshを切断するとサーバーが止まります。つまりはホストPCを落としたらサーバーも止まるとかそういう状況です。そのために、ターミナルセッションの永続化(というか多重化)を行う必要があります。

「terminal ssh コマンド永続化」などで検索すればいろいろ出てきますが、自分は

tmux - ArchWiki というものを使っています。

tmuxはターミナルマルチプレクサ(Terminal Multiplexer) の略で、一つのターミナルで複数のセッションを持つことができるソフトです(他にもたくさん機能があるので、ぜひ使ってみてください!)。

使い方だけ教えろ!って人は以下のコマンドを入力してください

sudo apt install tmux 

tmux new -s manictime

./ManicTimeServer

Ctr + b, d

インストールして、tmuxの新規セッションを作って、(画面が変わって、)サーバーを起動して、起動が確認できたらCtr+b, d で tmux のセッションを Detachしています。

使いこなしたいよ!って人は tmux cheatsheet でググるなり、自分で勉強するかしてみてください。

 

最後に

長くなりましたが、ここまでの手順をしっかり追ってくれれば、あなたも快適なManicTime 生活を送れると思います!

何かわからないことがあれば、気軽にコメント、ツイッターDM等なんでも送ってきてください。

ここまで読んでくださった方はありがとうございました!
スターやコメントお待ちしてます!

初心者が、PREEMPT_RTを適用したRTOS(Ubuntu 22.04)が動く環境を用意するまで

tl;dr

きっかけは?

大学で受講している授業で、PREEMPT_RTを適用したlinux kernelを作成し動かしてみるという課題があり、その際にハマった点・苦労した点をまとめました。

基本的に、自分が行った操作とその考察に関してのみ記述しており、理解や解釈は読者に任せる方針となっておりますのでご了承ください。

使用したPCは以下の通り

前提 - 仮想マシンではRTOSは使えない -

OSを切り替える手間を省くために、最初は Oracle VM VirtualBox を利用していましたが、PREEMPT_RT patchを適用しても、Cyclictest でのレイテンシのMax が30000(ns)( = 30ms) を超えることさえあり、とてもとてもRTOSとして稼働しているとは言えない状況でした(リンク先のCyclictestの実行例ではMaxは30程度)。

※5.15.86-rt56-KY:rt kernelで、最後の-KYは識別のためのlocalversionなので無視してください。

これは当然といえば当然のことで、汎用OSであるWindowsの上で動いているvirtualboxには、そもそも適当なスケジューラアルゴリズムでしかCPUが割り当てられず、仮想マシン上でリアルタイムに最適化しても無駄だという結論に至りました。

dual boot先の Ubuntu 22.04 でRTOSをビルドする

RTOSとしてのkernelを利用するだけなら方法は大きく2つだと考えています。

  1. ダウンロードしてきた linux の kernel に、別途 patch をあててビルドする。
  2. linux-rt or linux-rt-lts(RT patchが既に適用されたlinux kernel) をダウンロードしてビルドする。

自分は当初、1の方法を用いて仮想マシン上でkernelをビルドしていましたが、その後2の方法を発見し、dual boot先のUbuntuでは2の方法しか試していません。

 

1の方法については、こちらのサイトを参考にしました。

【C言語】LinuxカーネルのPREEMPT_RTパッチでリアルタイムプログラミング

PREEMPT_RT linux などで検索すると簡単に見つけられて、日本語で読みやすく解説されており、大変参考になりました。一方で、記事の最後の方にある、Cyclictest の実行結果については、少しミスリードな部分があるようにも感じました(レイテンシがMax: 30000ほど)。

 

2の方法については、

https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-stable-rt.git こちらのサイトからkernelをダウンロードし(今回はlinux-stable-rt-5.15.86-rt56-rebase.tar.gzを利用しました)、1の方法で紹介したサイトを参考にビルドをしました。

Linuxカーネルの.configで「General setup -> Preemption Model -> Fully Preemptible Kernel (Real-Time)」を有効にするを忘れないようにしてください。

 

dual boot 先のUbuntuに PREEMPT_RT patch を適用した kernel をインストールし、再起動すればRTOS自体は利用可能になります(Cyclictest でも Max: 10~20を記録しました)。

しかし、NVIDIA GPUを積んでおり、外部ディスプレイに接続している場合、画面の解像度が低く固定されてしまう場合があります。その原因としては nvidia-driver と PREEMPT_RT の相性の悪さがあります。

(再起動後、問題がなかった方はこれ以下の記事を読む必要はないと思われます。)

ハマったポイント - RTOSにしたらUbuntuの解像度が低くなったのを直したい -

【結論】こちらのサイトを参考に、利用しているグラボに対応したドライバーを(.runファイル)インストールしたら治りました。

Installing NVIDIA drivers on a realtime Linux (PREEMPT-RT) · GitHub

.runファイルはこちらのサイトからダウンロードしてください

公式ドライバー | NVIDIA

 

経緯や考察

RT patch 未適応の kernel で起動した際には解像度は正しく表示されていたものの、RTOSで起動した際は解像度が低く、Ubuntuの設定から変更しようとするも、変更不可能でした。

Ubuntuディスプレイ解像度の変更 | 1920x1080 - BioErrorLog Tech Blog

などのサイトを参考に解像度の変更を試みましたが、xrandr コマンドでエラーが発生しており、GPUから映像出力していることがバグ要因と当たりをつけて、nvidia-smi コマンドを実行するとエラーが発生しました。

ちなみに、GPUを搭載しているPCではマザーボードからの映像出力は無効にされていることがほとんどであり、実際に自分もディスプレイポートの接続先を変更してみましたがダメでした。

そこで、nvidia-driver をインストールするために  run ファイル探して来て実行するも、「PREEMPT_RT patch が適用されている kernel には対応してません」等のエラーログにぶつかり、"preempt_rt nvidia"で検索したところ、【結論】で示した解決策に行きつくことが出来ました。

 

ということで、長くなりましたが自分は無事RTOSを動かせる環境を用意できたので、改めて開発を続けていきたいと思います。

ここまで読んでくださった方はありがとうございました。参考になった、面白かったという方は、記事にスターをつけてくれると嬉しいです。指摘、議論コメント等もお待ちしております。

初投稿

気が向いてブログを始めてみました。

少なくともこのページの内容はいつでも更新されると思います。

 

自分がやったことのうち、外に発信してもいいと思えることを公開する場所にするつもりです。

自身が理系学生なこともあり、Tech系の発信が多いとは思います。誰かの役に立てば幸いです。

 

ちなみに、このブログの目的はPVを集めることでも、人の役に立つことでもなく(主に思想系の記事は)、自分のことを知りたいと思った人への情報開示、あとは自分の考え方の変遷を記録することだったりします。