Unengineered Weblog

PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND

Rust で書かれたプログラムを Plan 9 上で動かす (Wasm で)

Rust は人気なプログラミング言語である。 しかしながら今は Rust は Plan 9 での実行をサポートしていない。 doc.rust-lang.org したがって Plan 9 で Rust で書かれたプログラムを実行するには、コンパイラを移植するといった大変な作業が必要かと思ってい…

Go の新機能 Range Over Func を使って database/sql の Query を楽にする

Go 1.22 から実験的機能として Range Over Func が実装された。 このブログでは Range Over Func とは何か、どういうものなのか、といった説明はしないので、知らない人は次のページを見てほしい。 go.dev 標準パッケージの database/sql で RDB を Query す…

Go スライスのソート順を維持したまま要素を追加する

スライスのソートを維持したまま要素を追加する関数 appendSorted の実装 func appendSorted[S ~[]E, E cmp.Ordered](s S, e E) S { i, _ := slices.BinarySearch(s, e) return slices.Insert(s, i, e) } 挙動 s = []int{} s = appendSorted(s, 4) // [4] s …

Mackerel をファイルシステムにした

この記事ははてなエンジニア Advent Calendar 2023の 12月36日 2024年1月5日の記事です。 developer.hatenastaff.com Mackerel をファイルシステムにしてみましょう。 Mackerel でファイルシステムを監視するのではありません。 Mackerel をファイルシステム…

perl のワンライナーで日本語 (UTF-8) を使う

ややこしかったので こうする $ perl -Mutf8 -CSDA [のこりのオプション...] 使用例 $ echo 'にゃんぱす' | perl -Mutf8 -CSDA -nlE 'say length($_);' 5 かんたんな説明 -Mutf8 でプログラムが UTF-8 で記述されていると指定 -C オプションの次の引数で要素…

OpenTelemetry のヒストグラムメトリックを計装して Mackerel に投稿する

Mackerel Advent Calendar 2023 12月17日の記事です。 qiita.com Mackerel は OpenTelemetry のメトリックに対応するよう開発中です。この記事では OpenTelemetry のヒストグラムメトリックの詳細と Mackerel での扱い、 SDK を用いてヒストグラムを計装する…

Mackerel で開発中のマイクロサービスを OpenTelemetry のトレースを活用してパフォーマンス改善した

Mackerel Advent Calendar 2023 の2日目の id:rmatsuoka です。 qiita.com 私は今年に新卒としてはてなに入社し、 Mackerel のアプリケーションエンジニアとして開発に携わっています。さて Mackerel では OpenTelemetry のメトリックに対応することが発表さ…

最近の macOS の /usr/bin/diff は色をつけることができる

いつからかは分からないが、最近の macOS の /usr/bin/diff は色をつけるオプションが生えた。 記憶が曖昧だが過去のバージョンではこのオプションはなかった気がする。 使い方は簡単。 --color オプションをつけること。 下は macOS (Ventura 13.5.2) の di…

Linux でファイルがどのファイルシステムにあるのか調べるのは簡単ではなかった

GNU/Linux で df の挙動を見てみよう。引数に(デバイスファイルではなく、普通の)ファイル名を渡すと、それが保存してあるファイルシステムを探してきて、デバイスファイルやマウントポイントなどそのファイルシステムの情報を表示する。 $ df Makefile File…

Bash が環境変数を勝手に変えてくる!

.netabare { font-size: 1.3rem; border: 3px solid; padding: 0.3rem 0.8rem; border-radius: 12px; margin: 1rem; } .large-font { font-size: 3rem; } ネタバレ 犯人は BASH_ENV 私がシェルスクリプトを書いていたとき、 bash が勝手に環境変数を変えてく…

入力ソースを切り替えるキーバインドを ctrl + space に変えよう(と思ったが…)

入力モードを切り替えるキーバインドは何を設定していますか? 私はこれまで ctrl + \ で入力ソースを切り替えていたが、ターミナルで STOP シグナルを送るキーバインドとかぶっていることに気づいた。 普段 STOP シグナルを送ることはあまりないが、このよ…

環境変数$SHELLの使い方を間違っていませんか?

要約 いま動いているインタラクティブシェルを知る方法に環境変数$SHELLを読むのが広く知られているが、これはこの環境変数の誤った使い方である。 $SHELLはユーザーのお気に入りのシェルを指定するものである($EDITORに近い)。 シェルは起動時に$SHELLの値…

Goでスライスなどを無理やり比較する

Goには比較可能ではない型がある スライス 関数値 上記のものを含んだ構造体など package main import ( "fmt" ) func main() { a := []int{1, 2, 3} b := []int{1, 2, 3} fmt.Println(a == b) } $ go run x.go # command-line-arguments ./x.go:11:14: inva…

株式会社はてなに入社しました

株式会社はてなに入社しました 株式会社はてなに入社しました - hitode909の日記 本当です。23年度の新卒エンジニアとして入社します。 Plan 9にハマったら株式会社はてなに入社した話 Plan 9を調べていくうちに blog.lufia.org というブログを見つけて、そ…

go generateでクオート、標準出入力を扱う。

まとめ //go:generate sh -c "m4 -DVAL=\"hello world\" hello.go.m4 > hello.go" 注意点 //go:generateディレクティブ以降に指定されたコマンドはシェルで実行されるわけではない。 だからシェルが提供する機能であるクオート、標準出入力は使えない。 ただ…

Goのファイルシステムfs.FSを実装するときのヒント

pkg.go.dev fs.FSを実装するには次のインターフェースを満たす具象型を実装しなければならない。 fs.FS fs.File and / or fs.ReadDirFile fs.DirEntry fs.FileInfo 多いね。それぞれのメソッドとインターフェースの関係は次の図で表すことができる。 例えば…

POST RequestをハンドルするシンプルすぎるHTTPサーバー

github.com Usage postsrv [-flag] cmd [arg ...] postsrvはとてもシンプルなHTTPサーバー。 カレントディレクトリをサーブするファイルサーバーとほとんど同じだが、/uploadはPOSTリクエストをハンドルする。 POSTリクエストのBodyが標準入力を通してcmdへ…

POSIXのmanをインストール

Unixにはシステムコールやライブラリ(C言語)、コマンド(シェルスクリプト)などのインターフェースを定義したPOSIXという規格がある。移植性の高いソフトウェアの開発を容易にすることを目的としており、GNU/LinuxやmacOS, BSDなどはPOSIXにだいたい準拠…

Unixのファイルシステムを9Pでサーブするu9fsを「ちょっと」使う

github.com u9fsはPlan 9に付属している(のに)Unix向けのソフトウェアである。これはUnixのファイルシステムをPlan 9の通信プロトコル9Pでサーブし、Plan 9でマウントすることを目的としている。私は初め使い方が全く分からなかったので、私と同じ人のため…

君はPythonでcatが実装できるか?

これは技術ブログでない。ただの日記だ。 皆様はPythonでUnixのコマンドcatを実装できますでしょうか?それっぽいのではなく、ちゃんと標準の/bin/catと同じ動作するものを作ろうとすると意外と引っかかる部分が多いと思います。 まず最も単純な実装(cat1.py…

awkでpstreeを実装

タイトル通り。 github.com [init]-+-[systemd-journald] |-[systemd-udevd] |-[systemd-oomd] |-[systemd-resolved] |-[systemd-timesyncd] |-[acpid] |-[avahi-daemon]---[avahi-daemon] |-[@dbus-daemon] |-[irqbalance] |-[python3] |-[polkitd] |-[powe…

sedのコマンドとして使える英単語

sedの置換表現s/foo/bar/のセパレータは/でなくても良い。\と\n以外の1byteキャラクターなら何でも良い。だからsequenceも使える。 $ echo _qu_ | sed sequence _nc_ 他に使える英単語は?次のシェルスクリプトを使って探そう。 #!/bin/sh words=/usr/share/…

ダム端末でzshをまともに使う方法(9term, Acme, Emacsなど)

zshはmacOSのデフォルトログインシェルである。多機能で便利なシェルであるが、ダム端末で使われることを想定していないようだ。この記事ではダム端末とはshellやコマンドの出力をそのまま表示する端末のこととしよう。Acme, 9term, Emacs shellなどはダム端…

シェルスクリプトでpickを作った(シェルスクリプトのwhile read...の中で対話的なreadをする方法)

Brian W. KernighanとRob Pikeの「Unixプログラミング環境」にはpickと呼ばれるコマンドが紹介されている。 これは対話的にプログラムを処理するためにシェルスクリプトで書かれたツールである。pick args...とすると、引数を一度に1つずつ表示しユーザーの…

Termuxのトリビア

新しいものが見つかるたびにこまめに更新する予定 TermuxはAndroid上でLinuxのシェルが動かせるアプリケーションである。現在はF-Droidまたは直接apkをダウンロードすることによりインストールができる。このページではルート化していないAndroidについて述…

非技術的なUnixのブログ

僕はUnix (Plan 9, Linux, *BSD, macOS, ...)で遊んでいます。その記録を残すためにこのブログを始めました。遊んでいるだけなので、ITエンジニアには役に立たないであろう情報が多いと思います。 Unixに関係する自己紹介 UbuntuとmacOSがメインのオペレーテ…