m.o.b Blog

なんとなくブログ

Go製finderのfing

背景 find コマンドというファイルを検索するコマンドがあります。 これはとても有名なコマンドであり、ネットで検索すれば大量の使い方の記事がヒットします。 大量のオプションが用意されており、様々な方法でファイルを検索できる便利なコマンドです。(まぁ、そんなに複雑な検索をしたいかという疑問はありますが…。) 対して、fd という rsut製のファイルを検索するツールが存在します。これは find よりも使いやすくて速いことを目指して作られています。 fing の設計思想は fd とは異なります。 fing は find コマンドとの互換を目指して設計しています。 そのため、find で作成されている script ファイルにおいても fing に置換するだけで動作することを目標としています。(オプションの全網羅は諦めていますが…) fd 並に速くて、find と同じ使用感を目指して作成しました。 インストール Go で作成したため以下のコマンドでインストールが行なえます。 go install github.com/komem3/fing@latest 使い方 基本的には find コマンドを fing に置き換えるといいです。 例えば jpg ファイルの検索は以下のようになります。 fing -name *.jpg また、 fd の良いところである gitignore を反映してくれる機能もあります。 fd ではデフォルトでそのように動作しますが、fingでは -I オプションで指定します。 fing -I これは fing 特有ですが gitignore に書かれているが無視しないといこともできます。 エッジケースですが、僕が欲しかったため追加しました。-EI オプションをクエリとともに使用します。 以下のコマンドは gitignore に .envrc が書かれていても、.envrc が検索結果に表示されます。 fing -I -name ....

2022/04/30(作成日) · 2022/09/26(更新日)

ブログを Hugo に移行した

サイトを一新しました 理由は以下です! Nuxt がでかすぎて依存関係の更新が面倒 プラグインとかを見る余裕がないうちに更新がたまってやる気がなくなります。 料金が amazon prime ぐらいかかる Server Side Rendering (SSR) でやっていたため Cloud Run に乗っけていました。しかし、コールドスタートからのスピンアップが思った以上にかかるため、最小インスタンスを 1 にしていました。 これが普通にお金がかかります。現状ブログしかないのに amazon prime ぐらいかかるのは何か嫌なので静的サイトにしたい欲が増していきました。 Build が長い 長いと書くモチベが下がります。 そんなこんなで 移行することを決心しました。重視したことは以下です。 完全静的サイトであること(firebase hosting や github page に安く乗せられるから) ビルドが早い 依存関係が少ない これを満たすものと言ったらHugo一択です。11ty も悩みましたが、go を使い慣れているのでこちらにしました。 移行作業 基本的には Hugo の適当なテーマを使用して、markdown ファイルをそのまま持ってきて終わりにしました(やる気がない…)。 hosting 先は firebase にしました。これはいくつか URL 変更したものがあり、google 検索のインデックス登録されているものからリダイレクトしたかったからです。github page だとこういうことができないので、firebase hosting の利点を強く感じました。 まぁ、firebase hosting にしておけば GCP の恩恵を受けることもできるので、なおよしです。 これから 記事の書きやすさは向上したと思うので、もう少し書くようにしたいなと思っています。最近は chrome book をいじっているので、github.dev から markdown を書いて、コミットしたらそのままデプロイという感じでやっています。かなりいいです。

2022/02/12(作成日) · 2022/09/26(更新日)

Goのflagのboolにコールバック関数を渡す方法

Go の flag パッケージってとても便利ですよね。 CLI を作成するさいによくお世話になると思います。 しかし、bool のフラグに対して関数を渡せないのが不便です。今回はそれを解決する方法を紹介します。 ※go1.17 時点の方法のため、go のバージョンアップで使用できなくなる可能性があります。 bool 値を渡せないとは? flag パッケージには、flag.Funcというコールバック関数を受け取るものが用意されています。 func Func(name, usage string, fn func(string) error) 使い方は以下のような形です。 package main import ( "flag" "log" ) func main() { var arg string flag.Func("hello", "set string", func(s string) error { arg = s return nil }) flag.Parse() log.Print(arg) } $ go run flag.go -hello ok 2022/01/04 22:30:16 ok $ go run flag.go -hello ok -hello override 2022/01/04 22:30:23 override このコールバック関数で渡されている string の s は見ての通り実行時にフラグに対して指定した値になります。...

2022/01/04(作成日) · 2022/09/26(更新日)

emacsのシンタックスハイライトを無効化

まずは切り方。これを気になってこのブログを見た人がいるかもしれないので。 (global-font-lock-mode 0) こちらの設定で全てのシンタックスハイライトが無効になります。簡単ですね。 切ろうと思った理由 プログラムの中にはシンタックスハイライトを切っている人が一定数います。 不思議ですよね。僕も不思議でした。 そこでちょっと理由を調べてみました。そこで出会ったのがこのブログです。 こちらの内容は面白いので是非読んでみて欲しいのですが、要約すると 「シンタックスハイライトはプログラムを読みやすくするために開発されたはずだが、 開発者はコードの内容の理解よりもコードの形を見てしまい、コードの正しい理解から遠ざけてしまう。」 といった内容です。 好きな文を抜粋すると 色の付いたテキストは文章をつなぎ合わせるため、より脳を使う。 補助輪付きの自転車で練習しても自転車に乗れるようになるわけではない。 (コメントアウトを)色を変えて見えなくすることは、敷物の下に隠すようなものだ。 上記のようなものは過激ですが、成程なぁと思いました。 そんなこんなで感銘を受けて切ってみました。 使ってみて さすがに全てのシンタックスハイライトを切ると diff が見辛すぎたので以下のものだけ有効化しました。 (add-hook 'magit-mode-hook #'font-lock-mode) (add-hook 'diff-mode-hook #'font-lock-mode) 使用イメージ こんな感じになりました。 全然読めると思います。 感想 全然問題なく使える、というのが感想の一番です。むしろシンタックスハイライトを復活すると見辛く感じます。 個人的に良かったポイントは以下です。 コメントが読みやすいので読む習慣が付く。変なコメントに気付けるようになりました。 シンタックスハイライトの色で微妙な気持ちになることがなくなった。テーマで悩むこともなくなりました。 シンタックスハイライトが逆に付かなくなることによるイライラが失くなった。だって最初から付いてないんだから。 おわりに これを見てくれた人も試しに切ってみると世界が変わるかもしれません。 追記 ちなみに、flyspell を使う場合はコメントアウトにシンタックスを当てないと、flyspell が反応しません。 そのため、以下のように一回有効かしてからコメントアウト以外を無効にする必要があります。 (add-hook 'prog-mode-hook #'(lambda() (turn-on-font-lock) (setq-local font-lock-keywords nil)))

2021/11/21(作成日) · 2022/09/26(更新日)

Opera GX に乗り替えました。

今まで、Vivalid を使用していたのですが、何か重いなぁとか、 何か微妙だなぁと思うことが多かったため、思い切って Opera GX というブラウザに乗り替えました。 今回はこのあまり有名でないブラウザの良さを紹介していきます。 Opera GX って? 公式ホームページを見てもらえれば分かると思いますが、ゲーマーのためのブラウザです。 一応 opera の派生のため、ゲーマーのための opera と言った方がいいかもしれません。 ただ、ゲーマーのためのブラウザと聞いてピンと来る人は少ないと思います。なので、どんな機能があってどんな点が良いかを書いていきたいと思います。 機能 公式ホームページにも色々書いてありますが、特徴的な機能と言うと以下になると思います。 組み込みの広告&トラッキングブロッカー。(あんま強くはない) SNS 連携。サイドバーから SNS が見れます。 CPU・RAM・ビットレートの使用率を制限。 memory cleaner 標準搭載。 ダークモード強制。ウェブページを強制的にダークモードにする機能があります。 ゲーマーのためのブラウザ これを感じさせるポイントを上げていきます。僕はゲーマーじゃないので、ついでに僕が思う良い所も上げていきます。 見かけ もう何よりもこれです。こんなカッコイイ見た目のブラウザ見たことありません。 この見かけが一番ゲーマーらしいと思います。これだけで使う気になりました。 音 起動音がちゃんとあります。笑っちゃうので聞いてほしいです。 また、文字を入力するとカタカタ言います。何と無駄な音と思いますが、個人的にとても好きです。 SNS 連携 機能にも書きましたが、これがかなり強いです。一つのブラウザで完結することができるため、ポイント高いです。 正直ゲームしないので、ゲームよりの SNS よりも Slack とかも連携してくれればいいのにとは思っていますが、それでも便利なものは便利です。 特に Discord で便利に使っています。アプリの起動が必要ないのはとても便利です。 ワークスペース機能 複数のワークスペースを持つことができます。イメージは実際に見てもらう方が早いと思います。 chrome にラベル機能が付いたり vivaldi のようなスタック機能も出てきましたが、やっぱりワークスペースが一番便利なんじゃないかと個人的には思います。 個人的な使い方としては、仕事用 Slack 個人用 に分けて使用しています。 おすすめ拡張 拡張は opera の拡張を使う感じになります。軽くおすすめ拡張を列挙します。 translator google 翻訳の opera 版。chrome のやつより使いやすいです。 Install Chrome Extensions...

2021/06/27(作成日) · 2022/09/26(更新日)

Discord の定期リマインダーボット作成

discord の有名な reminder-bot がスケジュールリマインダー(特定の曜日に通知みたいなもの)に対応していなかったので、 自分で作成しました。今回は簡単にできるけど融通が効かないものと、面倒だけど融通が効くものを紹介していきます。 Cloud Scheduler + Cloud Workflow 完結に言うと、定期的に webhook するだけです。多分無料枠で納まります。 本来は Cloud Schduler から discord に直接送信したかったのですが、なぜか 400 エラーになってしまうので、Cloud Workflow 経由で実行しました。 作成手順 1. まず、discord 上でウェブフックを作成し、作成された URL を取得します。 2. workflow の作成 workflow は cloud console からの作成が容易なので、簡単なものならそちらで作成するのもいいと思います。コンソール上で以下のような workflow を作成します。 - postDiscord: call: http.post args: url: 先程発行したdiscordのwebhook url body: { "content": "メッセージは届いていますか?" } headers: Content-Typ: payload_json content に入れたメッセージが実際にチャンネルに投稿される内容になります。body の内容次第ではよりリッチなメッセージを送ることも可能です。 参考 workflow を作成したら実際に実行してみると、メッセージが届くことが確認できると思います。 3. cloud scheduler の設定 こちらのドキュメントに沿ってやっています。 リンクが死ぬ可能性もあるので、やった手順を一応載せときます。 gcloud iam service-accounts create bot-shedular # PROJECT_NAME を置換して下さい gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:bot-shedular@PROJECT_NAME....

2021/05/09(作成日) · 2022/09/26(更新日)