Plan 9とGo言語のブログ

主にPlan 9やGo言語の日々気づいたことを書きます。

転売しない人に譲りたい

人からもらった家電があったのだけれど、しばらく使っていないし今後も使う予定がなかったし、未開封のまま捨てるのも勿体ないなという気持ちがあったので某フリマサイトで売った。まあまあ良い金額にはなったけれど、おそらく転売目的だろうと思われる人に…

GAE第2世代で実装方法はどう変わったか

久しぶりにGAE/Goで自分用サービス作ったとき、第1世代(Go 1.9まで)と全く違っていて混乱したので自分用メモ。 DatastoreがCloud Firestoreになった 以前はAppEngine専用のDatastore APIを使っていたが、Cloud Datastoreを経て現在はCloud Firestoreを使うよ…

Acmeエディタの使い方

この記事は本来Plan 9 Advent Calendar 2019の11日目でしたが、今は27日ですね、はい...すいません... Acmeエディタ、使ってみたけど何もわからないという声をよく聞くので、基本的な使い方を説明します。この記事ではplan9portのacmeを使うことを想定してい…

opencensus-goでPlan 9用のmackerel-agentを作っている話

この記事はMackerel Advent Calendar 2019の12日目です。 公式に提供されているmackerel-agentはGoで書かれていて、Windows、Linux、macOSなどに対応していますが、Plan 9には対応していません。個人のサーバはPlan 9が動作しているし良い機会なので、opence…

個人的によく眺めるPlan 9情報

この記事はPlan 9 Advent Calendar 2019の6日目です。 Plan 9関連の情報を集めるときに、個人的によく使う場所を紹介します。これらの他にも、DiscordコミュニティやIRCチャンネルなどもあるようですが、だいたい9fans眺めていれば済む気はします。 ML 9fans…

意外と難しいos/execの話

Go

Goのos/execパッケージは、別のコマンドを扱うためのパッケージですが、使い方を間違えたり、気が散っていたりするとリソースリークを引き起こす可能性があります。こないだリークするコードを目にしたので、どういった理由なのかも含めて紹介します。ここに…

今から始めるPlan 9

この記事はPlan 9 Advent Calendar 2019の2日目です。 ベル研の公式ディストリビューションは、2015年1月に最後のメンテナだったGeoff Collyerさんが離職されたことにより、現在活動が停止していますが、代わりにコミュニティで派生したものがいくつかあり、…

macOS 10.15 Catalinaでexecvが失敗する

macOS 10.15では、execv(2)する前に実行していたプロセスの実行ファイルが削除されていると、execv(2)がENOENTを返す場合があります。どういうことかというと、 a.outを実行 a.out実行中にa.outファイルを削除(削除できる) a.outがfork(2)して親は子プロセス…

macOSのセキュリティとプライバシー保護

plan9portのAcmeエディタを通常のmacOSアプリケーションと同じような感覚で使えるようにするため、起動処理をAppleScriptで実装したappパッケージを使っています(GitHub)。AppleScriptを使っているのは、シェルスクリプトだけではファイルのドロップが実現で…

Acidの使い方(基本)

AcidはPlan 9またはPlan9portで使えるデバッガです。おそらくAcidの用途で最も多いのは、suicide*1したプロセスをアタッチして、stk()やlstk()を使って落ちた様子をみてCtl-dで抜ける、ような使い方だと思いますが、Acidはこれ自体がシェルとCの中間みたいな…

Titan Security Keyを使ってみた

2FA

ここ数年で、身の回りでは2段階認証が当たり前になってきたように思います*1。個人的には今まで、2段階認証が可能なサービスにはSMSとモバイルアプリを登録していました。しかしここ最近は、サービスにログインする度にIIJ SmartKeyやGoogle Authenticatorな…

カーネル拡張をApple Notary Serviceにアップロードする

個人的にメンテしているHHKPS2USBDriverというカーネル拡張を、Apple Notary Serviceから証明してもらえることができたので記録に残します。 どんな拡張なのか 古いPS/2接続のHappy Hacking Keyboardは、PS/2をUSBに変換するコンバータを使ってmacOSに接続す…

公式Gitのソースコードレイアウト

Git

Gitのソースコードには、gitコマンドをビルドするためのMakefileが含まれている。Gitコマンドのレイアウトを知らなければ理解の難しいものがいくつかあったので調べた。 Gitコマンドのレイアウト $PATHに含まれる場所(ほとんどは /usr/bin)にGit関連のコマン…

Acmeをプログラムから操作する

Acmeは、Plan 9のために書かれたテキストエディタです。現在はPlan 9 from User SpaceでUnix環境にも移植されています。 このエディタはプログラムから操作するための機能がいくつか用意されていて、それを使うとキーボードやマウスなどの入力イベントを外部…

Plan 9 ANSI/POSIX環境での環境変数

Plan 9ネイティブのCライブラリはPOSIXに準拠しておらず、独自の習慣がある。例えばfopenやfcloseなどは使わずopenやcloseシステムコールを使う。バッファリングが必要であればBiobufを使いなさいという態度を取る。Goの標準パッケージに名残が残っているの…

Goでファイルの存在確認

Go

Goでファイルの存在確認について、インターネットではos.Statの戻り値がエラーかどうかを判定する方法が紹介されていますけれど、os.Statはファイルが存在する場合でもエラーを返すことがあるため、この方法では正しく判定できないケースが存在します。また…

GitをPlan 9に移植した話

2018年の夏頃から、時間をみつけてはPlan 9にGitを移植していて、概ね動いたので公開する。ソースコードはこの辺りにある。 https://github.com/0intro/plan9-contrib/pull/6 https://github.com/0intro/plan9-contrib/pull/7 https://github.com/madler/zli…

Plan 9のローダは先頭から順にシンボルを解決する

半年に1回は8lのエラーでハマっているので書いておこうと思いました。*1 こないだ curl をコンパイルしている時に、こういう設定を mkfile に入れました。 # リンクするライブラリのリスト LIB=\ /$objtype/lib/ape/libcurl.a\ /$objtype/lib/ape/libz.a\ /$…

エンジニアとして働く環境に望むこと

なんか最近、給料を上げればエンジニアは逃げないって論調の記事が目について、少し価値観違うなと思ったので気持ちを書いてみた。 過去に、東京一人暮らし、交通費を除いて手取り14万の時があって、働いても貯金がすり減るし昇給が1,000円だったこともあっ…

Plan 9のCプリプロセッサを読んだ

Plan 9には cpp(1) というANSIに準拠したCプリプロセッサが用意されていますが、Plan 9標準のCコンパイラはコンパイラ自身が簡略化したプリプロセッサを持っているので基本的には使いません。ただし、Cコンパイラが持っているプリプロセッサは設計思想の影響…

Perlの環境作った

plenv 個人的にはenv使わないことが多いけど、必要になったので入れた。 $ brew install plenv これに伴って perl-build も必要だけど、Homebrewで perl-build を入れたらplenv install実行時にSSL/TLS関連のエラーが出た。 599 Internal Exception, https:/…

MackerelでGitHubのイシュー数推移を記録してみた

この記事はMackerelアドベントカレンダー2018の18日目です。 Mackerelはサーバ管理・監視サービスですが、取得する数値はサーバに限ったものではなく、例えば体重など、数値なら比較的なんでも記録することができて、記録した値の推移を眺めることができます…

GoのPrintfでカスタムフォーマッタを使う

Go

Goの fmt パッケージは、%s や %3.4f のような書式を使えます。基本的にはCと同じですが、%#v や %T などGo固有なものもあります。書式は基本的に %[flag][width][.precision]{verb} のように分かれていて、それぞれの数値は幅や0埋めなどを指定します。{ver…

GitHubへHTTPSアクセスする場合はトークンを使った方が良さそう

2FA

GitHubやGitHub Enterpriseで、HTTPSを経由したgit pushや git pullをするとログインIDとパスワードの入力を促されますが、二段階認証を有効にしていると、正しいIDとパスワードでも認証がエラーになります。この場合、repo スコープを有効にしたトークンを…