2023年12月31日日曜日

ダイハツの第三者報告書にみるプロジェクトマネージメント

 ダイハツがなんかえらいことになってますね。

そして、第三者報告書に関する𝕏のポストがちょっと話題になっています。

言いたいことはわかるし概ねこの人に同意なんですが、一点引っかかることが。

②日程に間に合わないと感じ手を挙げると「なぜ間に合わないのか」「どうしたら間に合わせられるのか」「今後どうするのか」の説明に追われる

これは、特に最初の2つについて説明するのは当たり前じゃね?と思うのですよ。

2023年12月24日日曜日

Goでmain関数が終わった時の終了ステータスは?

 突然ですが問題です。Go言語で以下のコードを実行した時の終了ステータスは何だと思いますか?

package main

import "fmt"

func main() {
	// 地獄の言葉
	fmt.Println("hell, word")
}

「え、普通に考えたら0じゃないの?」そう思ったあなた。試しに実行してみてください。

はい、0が返ります。

・・・何が言いたいんやこいつは。

2023年12月17日日曜日

StyleX

 MetaがStyleXという新しいスタイリングシステムを公開したようです。すでにFacebookやらInstagramやらのMetaのサービスで使われているようですね。

最近知ったばかりなので詳しいところはまだ見ていないのですが、これを知った時に思ったことが2つ。

MetaってJSに色々ぶっ込むの好きだね。ReactがHTML in JSならStyleXはCSS in JSみたいな感じ。

イーロンマスクがつけそうな名前だね。というか先に考えてたら絶対つけてたね。

2023年12月10日日曜日

Dockerのdebian-slimイメージでwait-forを使う時の注意

 恒例のドジなハマりシリーズです。相変わらずこういうハマり方をしています。

Dockerでウェブサービスとかを開発するとき、DBサーバーなどの依存サービスが立ち上がるまでアプリケーションサーバーをwait-forなどで待機、という使い方をすることがあると思います。そこで無駄にハマったのでメモしておきます。

2023年12月3日日曜日

TypeScriptでジョブキュー

 多分使い古されたネタですが、なんとなく思いついた&作ってみたくなったので気にせずに投下します。

「一度に実行するジョブの数は最大でN個、それ以上はキューイングしておき、実行中のジョブが終了したら順次実行」というアレです。

2023年11月26日日曜日

先週JSConf JP 2023がありましたよ

 先日告知した通り、去る11月19日にJSConf JPが開催されました。当日の様子は後ほど公開されると思うのでお楽しみに。

これまた先日告知した通り、トラックCの司会をしてきました。心配していたハプニングは特になかったとは思います。多分。

公開される動画を見た人は多分こう思うでしょう。

「部屋暗すぎね?」

ハイその通りです。思ったより暗くしすぎました。これにはちょっと理由がありまして・・・

朝の最初のセッションはスライドがちょっと明るめで、部屋もちょっと明るめだったので皆さんが見づらい&配信でも映りにくそうだと判断して、照明を消してブラインドを下ろすなどしていました。陽が昇っていたうちは、まだ光量のバランスは取れていたと思います。多分。

ただ見落としていたのが季節。秋も終わりかけて冬に入ろうかという季節では釣瓶落としもいいとこなわけです。昼を過ぎて夕方に差し掛かっても照明もブラインドもそのままだったので、気づいた時は「めっちゃ暗い・・・」という状況に。

要するに完全にこっちのミスです。去年はオンライン開催だったのでその辺を考える必要はなかったんですが、来年も司会をするなら照明についても考えないとダメですね。それではまた来年会いましょう。

2023年11月19日日曜日

React&muiで、ダイアログオープン時にフォーカスを移す方法

かなり久しぶりに仕事でReactを使っています。最近はバックエンドとかモバイル通信網とかプロトコルの仕様書を読んで自分で実装したりとかどんどん低レイヤーな内容に寄っていたので、フロントエンドをやったのはかなり久しぶりな気がします。

muiでポチポチインターフェースを作っていたんですが、ダイアログを開いた時に中のコンポーネントにフォーカスを当てる方法で詰まりました。

あ、今日の内容はトラブルシューティングというよりReact/mui弱者の戯言だと思ってください。

2023年11月12日日曜日

来週JSConf JP 2023がありますよ

 来週11/19(日)に、毎年恒例の日本最大級のJavaScriptカンファレンスJSConf JP 2023が開催されます。今年は久しぶりにオンライン開催です。

2023年11月5日日曜日

Trick or Treat!

 お菓子くれなきゃ手品するぞ?




2023年10月29日日曜日

ImageMagickで、画像フォーマット変換の結果を標準出力に出す方法

 ImageMagickで画像フォーマットを変換するとき、普通は出力先のファイル名を指定すればその拡張子から自動的に適切なものにしてくれるんですが、標準出力に出すにはどうすればいいんだろうと気になったので調べてみました。

magick input.jpg png:-

このように変換先フォーマット:-を指定すれば、指定のフォーマットで標準出力に出してくれるそうです。

これでパイプ処理にも使えますね!

2023年10月22日日曜日

ITエンジニアの慣用句

 AIに考えさせた「メモリを食う」「サーバーが落ちる」の絵がそのまんますぎて笑い呼ぶ

こんな記事を見て思わずクスッと笑ってしまったので、こちらも負けずにBing Chatゾンビプロセスの絵を描いてもらいました。

ゾンビというよりマドハンドですねこれ🤔

2023年10月15日日曜日

Install SSH Key v2.6.1を公開しました

 Install SSH Key v2.5.0でアクション終了時に .ssh ディレクトリーを削除する機能を追加したんですが、その数日後に「あらかじめ.sshがセットアップされているセルフホストランナーでも問答無用で削除するなんてひどいや!」という報告がありました。いやその通り。.ssh自体が存在していないマシン上で動かすことしか想定していませんでした。ごめんなさい。

というわけで、その報告から10ヶ月後の先日、v2.6.0でついに対応しました(おせーよ)

今回の変更で、アクション終了後にInstall SSH Keyを実行する前の状態に戻るようになりました。内部処理は以下のとおりです。

  • 最初に.sshディレクトリーが存在しなかった場合は、終了後に.sshディレクトリーを削除(これまでと同じ)
  • .sshディレクトリーが存在していた場合は、各種ファイルを作成するときに同名のファイルが存在していればバックアップを別名でコピー、終了時に戻す

.sshディレクトリーの中身自体をまるっと別名でコピーする方法も考えたのですが、ファイルの移動やコピーが最小限ですむ今回の方法を採用しました。とはいえ、まるっと待避→まるっと復元の方がリスクも少ないので、もしかしたら今後こちらの方法に変更するかもしれません。

そしてリリースの翌日にちょっとしたバグが見つかったので、急遽v2.6.1をリリースしました。このバグが発生する状況は限定的で、バグ自体も致命的ではないとはいえ、このバグはまるっとコピーしていれば発生しなかったものです。。。

2023年10月8日日曜日

ローカルやと 8080 でちゃんと動くのに Docker にのせたら8080でリッスンしてないのなんで

知り合いの子がこんなことを𝕏にポストしていました。

ローカルコンピューター内で作ってみたサーバーをDockerイメージ化すると、ちゃんとポートもマッピングしているのに外からアクセスできない。うん、Dockerのあるあるですね。

答えはコレ。

あーそうだそうだ。しょっちゅう忘れる。度々ハマるくせに、そもそもDockerイメージの設定ファイルを作る頻度自体がそこまで高くないので、次回作るときまでに諸々忘れているアレです。覚書としてここに残しておこう。

ちなみにChatGPTに聞いてみたところ

  1. ポートは正しくマッピングされているか?
  2. ファイヤーウォールなどでブロックされていないか?
  3. アプリケーション側で該当のポートを正しくListenしているか?
  4. ポートが別のアプリケーションと競合していないか?

などをチャックするように言われましたが、0.0.0.0のことは指摘してくれませんでした。。。

2023年10月1日日曜日

OpenTofu

 オープンコーラのような、レシピがOSSになっているやつではありません。

簡単にまとめると

  1. Terraformのライセンスが変更された
  2. ライセンス変更前のTerraformからOSS版のフォーク(OpenTF)が誕生
  3. OpenTFだと商標を侵害する可能性があるので新しい名前を募集
  4. OpenTofuに決定

Terraformとは何か?については、今回の主題ではないので説明は省略します。知らなくてもこの記事の理解に支障はありません。

元々このTerraformはOSS(MPL)として提供されていたのですが、v1.6からライセンスが変更されました

こちらによると、商用利用が一部制限され、Terraform作成元のHashiCorpと競合するような使い方をするとこの制限に引っかかりそうです。単にインフラ整備のために使うなら問題なさそうですね。

とはいえ、それでも今後のリスクがあるので、ライセンス変更前のバージョンからフォークしてOpenTFという新しいOSSが誕生しました。まあ最近よくある流れです。

ただ、このOpenTFという名前もHashiCorpの商標の侵害の可能性があるねということで新たな名前を募集したところ、OpenTofuが支持を集めたようです。OpenTofuのロゴ画像は一部黄色いので、どちらかというと揚げ豆腐なんでしょうか。

こちらによると、OpenTofuのいいところは

  • 元の単語と意味的に離れていて訴訟の心配が少ないこと
  • 単語・発音が短いこと
  • 「.tf」という拡張子の互換性を維持できること

だそうです。なるほど確かに。

OSS企業がプロダクトのライセンスを商用利用を制限する方向に変更するのはここ数年よく見るパターンですが、このOpenTofuは名前に恥じない健康的なプロダクトになって欲しいものです。

ところで、さくらインターネットではたこ焼きのレシピをオープンソースとして公開しています。。。と思ったらライセンスが明記されていなかった。

2023年9月24日日曜日

docker-entrypoint.shからプロセスを起動する時の注意

 ウェブアプリケーションなどをコンテナ管理するためにDockeを使うとき、docker runの引数を処理できるように、Dockerfileの中で本体のプロセスを直接ENTRYPOINTCMDに指定するのではなくdocker-entrypoint.shから起動する場合も多いのではないでしょうか。

そのとき、以下のように書いたらダメです。「何がアカンの?」という方、今まで普通にこういう書き方をしていた方はご注意。ちなみに「set -euをつけろ!」とかそういう話ではないです。

#!/bin/bash

# 引数を処理したり色々
...

# 本体のプロセスを起動
/path/to/some-process

いやまあこれでも動くんですが、docker stopCtrl-Cなどでコンテナを止めようとしたときに10秒ほど待たされます。これは、コンテナに対するSIGTERMSIGINTdocker-entrypoint.shが動いているプロセスにしか届かず、本体のプロセスまで送られません。そのため、Dockerはコンテナを止めたいのに本体のプロセスが止まってくれず、10秒のタイムアウトの後に強制的にプロセスを終了するという流れです。

ではどうすればいいかというと、ハイそうです。docker-entrypoint.shのプロセス自体を本体のプロセスで置き換えれば解決。というわけでexecを使いましょう

exec /path/to/some-process

#!/bin/bash

# 引数を処理したり色々
...

# 現在のプロセスを本体のプロセスで置き換える
exec /path/to/some-process

これでDockerからは本体のプロセスになるので、コンテナを止めたときに本体のプロセスがすぐ止まるようになります。めでたしめでたし。

2023年9月17日日曜日

Bun v1.0がリリースされたよ

 このブログを書いている時点ですでにv1.0.2まで上がっていますが、先日Bunの安定版v1.0がリリースされました

というわけであらためてBunまわりの歴史についておさらい。とは言ってもあまり詳しいことまでは話しません(話せません)。

2023年9月10日日曜日

OpenAPIソースファイルの分割

 大規模なウェブサービスを作っていると、WebAPIの数も膨大になってきます。APIのドキュメントを作成するためにOpenAPIを使っている人も多いと思いますが、APIの数が増えてくるとドキュメントのソースファイル(JSON/YAML)が大きくなり、編集しづらくなります。

でかいソースファイルは分割するのが世の常で、もちろんOpenAPIにもソースファイルを分割できる仕様はあるのですが(文法はJSON Schemaなので)、問題は分割したファイル($refによる参照先のファイル)にIDEのコード補完が利かなくなることです。

そこで、ソースファイルを分割しつつ、IDEのコード補完も利かせる方法を考えてみます。IDEはウェブ開発の定番Visual Studio Codeを想定します。え?VSCodeはIDEじゃない?気にするな。

なお、この記事は「OpenAPIのドキュメントの書き方を知っていること」「ソースファイルの分割方法($ref)を知っていること」「VSCodeのOpenAPI拡張機能を使っていること」を前提としています。その上で、分割したファイルの補完を使う方法の説明です。

2023年9月3日日曜日

目標決めと人事考課

 そろそろ上半期が終わる時期なので、ぼちぼち人事考課を始めている会社もあるのではないでしょうか。

ところで、部署の目標や自分の役割をしっかりと認識できていますか?そして期中の成果をきちんと説明できますか?

というわけで、本日は目標決めと成果の説明のやり方についての授業です。といってもちゃんとやってる人にとってはあまり得るものはないと思います。なんとなくやってるマネージャーに向けたお話です。

2023年8月27日日曜日

空気を読んで機械翻訳

 突然ですが、そして今更ですが、最近の機械翻訳の精度はすごいですよね。まるでネイティブのように自然な翻訳をしてくれます。

そこで思ったのが、日本語学習者が戸惑うアレをどこまで正確に英訳してくれるかということ。翻訳精度に定評のあるDeepL翻訳Google 翻訳でちょっと試してみました。

2023年8月20日日曜日

Software Design 2023年9月号が発売されました

 先日、「Software Design 2023年9月号に寄稿したよ!」という記事を書きましたが、その9月号が予定通り8月18日に発売されました。

寄稿部分がこれ。


うん、Twitterってなってるね

確か、ちょうど校正あたりの時期にTwitterのサービス名が𝕏に変わるとかどうとかの騒ぎがあったんですが、校正&コロナでてんてこ舞いになっていて、ここの修正まで頭が回りませんでした。別に致命的なミスではないので許してください。

2023年8月13日日曜日

こんなところにInstall SSH Key

おかげさまで、Install SSH Keyがいろいろなところで使われています。もうGitHub ActionsでSSH鍵を使うするときの定番にすらなったんじゃないかと思います。知らんけど。

とは言っても、エディター戦争のように群雄割拠の中から勝ち上がったわけではなく、GitHub Actionsのv2がリリースされたばかりでActionがまだ充実していなかった頃にたまたまSSHを使いたくて作ったものでした。要するに完全に運と先行者利益に恵まれただけのラッキーパンチなのですが、そんなことはどうでもいいんです。運だろうが先行者利益だろうが、そのチャンスをものにできた奴の勝ちなんです。別に勝負してないけど

そんなInstall SSH Keyですが、GitHubの公式ツールでも使われているらしいという情報を教えてもらいました。

それはGitHub Actions Importerというツールです。概要はこちらに書いてあるのですが、要は他のCIからGitHub Actionsへの移行ツールらしいです。

これを使うと、BambooJenkinsなどでSSH鍵を設定しているところがInstall SSH Keyに置き換えられるようです。使ってないので詳しいことはわからないのですが、ドキュメント出力例を見る限りでは確かに使われていそう。ただ、ソースコードを見ても具体的にどの部分でどのように変換しているのかわかりませんでした。別の場所に変換用のデータがあるのかな。

それはともかく、みんなもバンバン使ってええよー。

2023年8月6日日曜日

Software Design 2023年9月号に寄稿しました

 8月18日に発売予定のSoftware Design 2023年9月号に寄稿しました。担当したのはJavaScript非同期処理特集の3-5章。Promise, async/awaitについての記事です。

Promise編は通り一遍の解説だけでなく、実際にPromiseクラスを自作して内部の動きを解説するというどこかで見たような内容です。まあ実際Promise編はさくらのナレッジの記事をベースにしているので、そちらの記事をすでに読んでいる方は特に得るものはないかもしれません。ただし細かな解説を追加しているので、さくらのナレッジの記事で腹落ちしていない方はあらためてSoftware Designの記事も読んでみるといいかもしれません。

async/await編は、さくらのナレッジにPromise編の続きとして書こうと思っていた内容を先取りしています。さくらのナレッジは数年間放置しているのでそろそろ何とかしないとなぁ・・・と思っていたところに今回の依頼が来たので、締め切り効果を期待して引き受けました。紙面の都合上、こちらは使い方の解説のみです。後日さくらのナレッジにはこれをベースとした記事を載せる予定ですが、そのときはPromise編のように内部の動きまで解説しようかと思っています。

執筆や校正は6月後半〜7月がメインでしたが、7月は父親の葬儀やらコロナやらで2週間ほど仕事どころではない日が続きました。葬儀のときは昼間か夜にある程度時間が取れ、コロナのときはほぼ校正だけで済んだので、何とか原稿を落とさずに済みました。

一家に一冊ぜひどうぞ。

2023年7月30日日曜日

愛知で「俺コロナ」

 3年ほど前に愛知で「俺コロナ」が多発というニュースがありましたね。それとは全く関係ない話ですが、先日愛知で俺がコロナにかかりました

2023年7月23日日曜日

value-schema v4.0.0が出ました

 去年の12月に「そろそろv4が出るよ」と予告して早7ヶ月。先日ようやくリリースしたので報告です。

・・・と思ったらDeno版が最新になってない。あとで直しておきます。

機能的には去年の記事から変わっていませんが、テストケースを増やして最新のNode.js / Deno / Bunでも動作することを確認しました。

手前味噌ながら、まあまあ便利なライブラリだと思っているのでよろしければ使ってみてください。

2023年7月16日日曜日

Proton Passをちょっと使ってみた

以前ちょっと話題に出した、Proton Mailの開発元が提供する新しいパスワードマネージャーであるProton Pass一般ユーザーも使えるようになったようです。

ちょっと使ってみましたが、以前予想した通り

  • 保存場所はProtonのサーバ
  • PCではブラウザーの拡張機能で提供、つまりPCでは基本的にブラウザーで使うことが前提(単にメモを取る場合でもブラウザーを立ち上げている必要がある)

…という感じでした。

料金表を見ると、有料プランも月額制(年額払い)で買い切りはないようです。まあ自前でサーバーを運用している以上、買い切りプランというのは難しいんでしょう。

やっぱり今使っているEnpassが機能的にも料金的にも個人的にはまだ理想形です。日本語がところどころおかしいこと、Linux版ではIMEの使用に難があることを除けば…

2023年7月9日日曜日

サインイン vs ログイン vs ログオン

「サインイン」「ログイン」「ログオン」「ログオフ」の使い分けは必要か

英語のニュアンスの話は知らんけど、個人的には「ログイン」一択ですね。自分でサービスを作る時も「ログイン」です。

  • 「サインイン」と「サインアップ」はどっちがどっちだっけと一瞬迷うので嫌い
  • サービスの「中に入る」というイメージなので、(オンではなく)「イン」

という消去法で「ログイン」。でも上記ストーリーの「sign in なら「受付で氏名を書く」という現代の現実に沿っていてわかりやすい」という説明はなるほどと思いました。

そもそもこれ、日本語で適訳がないのが問題かもしれないですね。誰かいい訳を作ってください。あと、日本語のサービスでは「サインアップ」とか書かずに「新規登録」と表記してほしいです。


ところで、"login"と"log in"の使い分けについて。

"login"は名詞、"log in"は動詞です。

なので、受動態は"logined"でも"loggedin"でもなくて"logged in"です。

「ログインしているユーザー」みたいな場合は"logged-in user"のように表記してください。

2023年7月2日日曜日

いいプログラマーの境目

1ヶ月ほど前に「配列のすべての要素が条件を満たすならtrueを返す」関数に空配列を渡したらtruefalseか?というツイートが話題になったそうです。

多分自分ならこういうふうに書くかな。

function kansuu(hairetu) {
  for (const youso of hairetu) {
    if (!jouken(youso)) {
      // 1つでも条件を満たさなければfalseを返す
      return false;
    }
  }
  return true;
}

なので空配列を渡したらtrueを返しちゃいますね。

そもそも本来は「仕様を(依頼元に、もしくは要求仕様から)確認し、それに応じたコードを書ける人」がいいプログラマーだと思います。

はい、ワイは良くないプログラマーです。

なお、実際のシステム云々は置いておいて数学(集合論、論理学)としての話であれば、trueが正解です。上記ストーリーのこのコメントが簡潔に表現しています。

  • 「配列のすべての要素」とは、「全N個のうちN個」である
  • 問題の関数は空配列(N=0)を許す
  • 空配列が渡された際は「全0個のうち0個」の要素が条件を満たしている
  • ゆえに、空配列が渡された際はtrueを返すべきである

2023年6月25日日曜日

アクセスコントロールの責任分界点

 先日転職ドラフトの情報漏洩事故がありましたね。この事故に対する重大さの感覚がエンジニアと非エンジニアで(さらにいうならエンジニア間でもレベルによって)まるで違うように思えたので、ちょっと取り上げます。

2023年6月18日日曜日

ネット投票

ネット投票法案、立憲と維新が共同提出 全選挙の投票24時間可能案

前にもネット投票についてこのブログで取り上げたことがありますが、それとは別の切り口で。

2023年6月11日日曜日

sedで簡易URLエンコード

需要がどれだけあるかわかりませんが、使えたら使ってください。POSIX sedでもGNU sedでも動作します。

sed -r \
	-e 's/%/%25/g' \
	-e 's/\$/%24/g' -e 's/\(/%28/g' -e 's/\)/%29/g' -e 's/\*/%2A/g' -e 's/\+/%2B/g' -e 's/\//%2F/g' -e 's/\?/%3F/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' \
	-e 's/!/%21/g' -e 's/#/%23/g' -e 's/&/%26/g' -e "s/'/%27/g" -e 's/,/%2C/g' -e 's/:/%3A/g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/@/%40/g' \
	-e 's/ /+/g'

関数化すれば、シェルスクリプト内でパイプ的に使えるのでまあまあ便利かも?

function urlencode() {
	sed -r \
		-e 's/%/%25/g' \
		-e 's/\$/%24/g' -e 's/\(/%28/g' -e 's/\)/%29/g' -e 's/\*/%2A/g' -e 's/\+/%2B/g' -e 's/\//%2F/g' -e 's/\?/%3F/g' -e 's/\[/%5B/g' -e 's/\]/%5D/g' \
		-e 's/!/%21/g' -e 's/#/%23/g' -e 's/&/%26/g' -e "s/'/%27/g" -e 's/,/%2C/g' -e 's/:/%3A/g' -e 's/;/%3B/g' -e 's/=/%3D/g' -e 's/@/%40/g' \
		-e 's/ /+/g'
}
echo "a*a + b*b != c*c" | urlencode

制御文字やASCII範囲外の文字には対応していないので限定的にしか使えませんが、場合によってはまあ使えるんじゃないかと思います。

ちゃんとしたものが必要なら、JavaScriptなりPHPなり専用の関数を備えた言語で書くのが確実です。

2023年6月4日日曜日

ウェブのBaseline

 Web標準に新たなステータス「Baseline」が登場。変化し続けるWeb標準のうちWeb開発者が安心して使える機能群を示す。MDNドキュメントなどで表示開始

これは朗報。特に「Chromeだけで動けばいいや」ではなくて多くのブラウザーに対応したいサービスにとってはいい規定だと思います。

今までは、使いたい機能がCan I use...とかでどのブラウザに対応してるかを一々調べた上で独自の基準で採用するかどうかを決めていたと思いますが、今後は「Baselineに載っているかどうか」という簡単な基準を使えるようになるので、システムの発注側にとってもありがたい基準なのではないでしょうか。

2023年5月28日日曜日

アホなパスワードルール

「辞書に載っている単語を含めてはいけない」「120日ごとに新しくパスワードを設定すること」などバカげたパスワードのルールを持つサイトを集めた「Dumb Password Rules」

パスワードに関しては以前にもこのブログで書きましたが、こちらの記事では具体的なサイトも含めて公開されています。

以前のブログの内容と重複しているもの・いないものが色々ありますが、重複していないものだと定期的にパスワードの更新を要求されるのはイヤですね。どこかの研究で、「パスワードを定期的に更新するとかえって危険になる」というような内容を見たことがあります。詳しい内容は忘れましたが、定期的に更新するとどれが現在使っているものかわからなくなったり、覚えやすいパスワードを使うようになったりする・・・みたいな話だったかな。

あとはキーパッドによる入力を強要されるのもダルそう。キーロガーを警戒しているのかもしれませんが、ダルいだけでなくキーの順序がランダムなので入力ミスが多そう。そんな独自仕様を作るより、WebAuthnにでも対応してくれたほうがよっぽど安全なんですが。。。

2023年5月21日日曜日

Gentoo LinuxでpinentryがGNOME Keyringを参照しなくなった

 説明がややこしくてなんのこっちゃという感じですが、ようするにどういう影響があるかというと

  • Gitとかでデジタル署名をしている場合に
  • commitのたびに
  • 毎回パスフレーズを聞かれるようになる

ということです。デジタル署名を使っていないとか、そもそもGnuPGを使ってないという場合は影響ありません。あとUbuntuのようにGentoo Linux以外を使っている人も影響ありません。

今まではパスフレーズが必要なときはpinentryがGNOME Keyringに入っているパスフレーズを参照して自動入力してくれたので手動では何も入力する必要がなかったんですが、つい最近から急に入力ダイアログが出始めました。

PAMの設定も問題なく、ログイン時に自動的にGNOME Keyringが解錠される設定はこれまでと変わっていません。

原因

結論を書くと、Gentoo Linuxのpinentryパッケージv1.2.1-r2gnome-keyring USEフラグをkeyringに改名したのが原因です。

問題のコミットはこれこれ

対応は、インストール時に設定しているgnome-keyringフラグをkeyringにしてやればOK。

いや勝手なことすんなし。せめてeselect news readコマンドで注意喚起してくれ。

とりあえず、Gentoo Linuxユーザーで、2023年5月20日前後から急にGnuPGのパスフレーズプロンプトが表示されたというピンポイントな悩みの方がいたら本記事が役に立つかもしれません。

2023年5月14日日曜日

関西Node学園 10時限目でSingle Executable Applicationsの話をしました

去る5月9日に関西Node学園 10時限目を開催しました。コロナ鍋で中々オフライン開催できなかったのですが、3年ぶりに開催することになりました。

個人的にはJSConf JP(旧Node学園祭)の運営のお手伝いをしていますが、地元の関西Node学園の運営にはほとんど関わっていませんでした。今回はちょっとだけお手伝い。

そしてついでに登壇もしてきました。話したネタはv19.7で追加されたSingle Executable Applications。以前にちょっとここでも触れました

スライドはこちらです。以前のブログを書いた時から、仕組みをちょっとだけ調べました。

スライドに出てきた実装例はこちらにあります。好きに使ってください。

2023年5月7日日曜日

Goのrangeではメモリーを使い回している

最近ちょっとハマったところについてメモ。

要するにこういうことです。これを実行したらどうなると思いますか?おそらくfoo, bar, bazすべて同じ値になっていると思います。どんな値になるかは実行タイミングによって違うようです。

つまりrangeは各ループで毎回同じアドレスに値を入れているので、そのアドレスをあとで使おうと思っても想定外の値に変化していることがあります。

よく考えれば・・・というか考えなくても、「ループ内で毎回専用の領域を確保する」より「最初に領域を確保してループ内で使い回す」ほうが効率的なのは明らかなので、そういう仕様なのはまあ納得。

アドレスを後で使いたい場合は、一度別の変数にコピーして使いましょう

2023年4月30日日曜日

書き込み権限のないGitHubリポジトリーへプルリクエストを出す方法メモ

 ただの備忘録です。たまに人様のリポジトリーにプルリクエストを出すけど、その度にやり方を忘れるので。

2023年4月23日日曜日

新しいパスワードマネージャー

 プライバシー重視のメールサービスProton Mail開発元のProtonが、Proton Passというパスワードマネージャーを開発しているそうです。

Proton Pass is now in beta

あまり詳しい情報が出ていませんが、現在判明していることはこのあたりでしょうか。

  • オープンソースで提供
  • 二要素認証をサポート
  • スマホ(iPhone, iPad, Android)とデスクトップPCに対応
  • Brave, Chrome, Firefox用のブラウザー拡張機能を提供

気になるのはデスクトップPCの対応OSが明記されていないこと。もしかしてブラウザー拡張機能だけで提供?

あとは、パスワードの保存先も気になります。Enpassのように、ローカルや複数のクラウドストレージに対応していて、好きなものを選べるならとてもありがたいです。

他のProtonプロダクトから推測すると、保存先はProtonのサーバー、ただしサーバーソフトウェアはオープンソースで提供するのでオンプレミスでも使える・・・という感じかもしれません。

だったらいらないかなぁ・・・🤔

いい意味で裏切ってくれることを期待してまます。

2023年4月16日日曜日

データ圧縮のパイオニア?

 データ圧縮のパイオニアであるジェイコブ・ジヴ氏の功績とその半生とは?

2年前の記事に何を今更という感じですが、偶然たどり着きました。昔(高校生くらいの頃かな?)データ圧縮について色々調べたことがあり、記事の内容についてちょっと気になったので今更ですがいくつかコメントします。

どっかで似たようなことを書いてる人もいそうですが。

2023年4月9日日曜日

Linuxでユーザーのホームディレクトリーをあとから作る方法

 ちょっとドジ踏んでしまったので記録を残しておきます。

Linuxで新しいユーザーを作るときはuseraddコマンドを使うじゃないですか。そのときに-mを指定すればホームディレクトリーを作ってくれるんですが、つけるのを忘れてコマンドを実行してしまいました。

単純に/home以下にmkdirしてもいいんですが、/etc/skelのコピーとか他にやることがあるかもしれないので、作成はシステムに任せたい。。。

やっぱり他にもこういうドジっ子はいるようで、ちゃんと用意されていました。mkhomedir_helperコマンドを使えば後から作れそうです。

「そうです」と書いたのは、このコマンドの存在に気づく前にユーザーを削除→再作成したので試してないからです。。。

2023年4月2日日曜日

レゴのGPL違反の件

 レゴがオープンソースのライブラリをコピペしてGPL違反をしていたことが判明

正確にはレゴじゃなくてレゴの子会社だということはさておき、ざっと読んだ感想としては「よくあるGPLの勘違いかなぁ?」です。

当該ライブラリはGPL(GNU General Public License)の元で公開されているものであるため、ソースコードが非公開の製品に使用することはライセンス違反であると指摘されています。

GPLは「製品を手に入れた人からソースコードを見せろと言われても拒否できない」というものであって、製品自体にソースコードをつける必要はありません。つまり「ライブラリをコピペして作った製品にソースコードをつけずに販売した」だけではGPL違反とは言えません。

GPL違反と断言するには、たとえば

  • 製品を購入した人からのソースコードの公開要請を拒否した
  • 製品自体がGPL以外のライセンスで提供されている(インストール時に表示されるライセンスがGPLではない等)
  • GPL非互換のソースコード(ライブラリなど)と一緒にビルドされている

などが必要ですが、記事を見る限りではそういった記述はありません。でもまあどれかに当てはまってそうですけど。特に2番目。

2023年3月26日日曜日

Install SSH Key v2.5.1を公開しました

 つい先日、github.comのRSA公開鍵を変更したというニュースが飛び込んできました。記事によると、秘密鍵を誤って公開リポジトリーに置いてしまったため、なりすましや中間者攻撃を防ぐために新しい鍵に置き換えたとのこと。ひえっ。

わざとじゃなくて操作ミスだとは思いますけど、何の操作をミスったんだろう。公開鍵と間違えたのかな。とりあえず、外部から侵入されたわけではないということで安心しました。世界中の開発インフラであるGitHubでもこういう初歩的なやらかしがあるんですね。

というわけで、みんな大好きInstall SSH Keyでもgithub.comの公開鍵を使っているので新しいものに置き換えました。変更部分はそれだけです。

2023年3月19日日曜日

AsyncLocalStorage + multerの落とし穴

 先日Async HooksとかAsyncLocalStorageの話をしましたが、ちょっとハマったところがあるのでメモ。

現象としては、Expressのファイルアップロードミドルウェアであるmulterを経由したときにAsyncLocalStorageが使えなくなる(getStore()がundefinedを返す)というものです。

この原因にたどり着くまでに切り分け等いろいろ苦労したんですが、まあそれは置いといて。

バグなのか仕様なのかよくわかっていませんが、どうもmulterを経由すると非同期コンテキスト(コールバックチェーンの親子関係)が切れてしまうようです。

解決方法は、ここにあるように非同期コンテキスト化するラッパー関数を作って、multerをラップしてやるとうまくいきました。

2023年3月12日日曜日

ChatGPTに回文を作ってもらった

 先日ChatGPTネタで記事を書きました。そのとき「ブログのネタに困ったらChatGPTに頼るかな」と書いたのですが、早速ネタに困ったので頼ってみました。

2023年3月5日日曜日

Node.jsのSingle Executable Application

 Node.js v19.7から、Node.jsファイルを単一の実行バイナリにできるようになったそうです。ElectronみたいにNode.js本体も同梱される感じなんでしょうか。

ただし現状では制約があり、OSはWindows/macOS/Linux、CPUはAMD64、そして単一のファイルのみとのこと。

単一のファイルのみということは、当面はnccとかのバンドラーで1ファイルにまとめてからバイナリ化という使い方を想定しているんでしょうかね。

2023年2月26日日曜日

ハイテンションなChatGPT

 史上最速で1億ユーザーを獲得したChatGPTですが、それも納得の精度。個人的にももちろん楽しく使わせてもらっています。

なんかテンションが上がってきたので、ChatGPTとハイテンションで会話してみました。といってもハイテンションなのはChatGPTだけです。

2023年2月19日日曜日

いまさら聞けないAsync Hooks

 Node.js v8あたりで追加されたAsync Hooksについて。タイトル通りいまさらなんですが、簡単な説明をします。

あまり詳しい説明はしません。

2023年2月12日日曜日

GitHubでコメント駆動CI

 アプリケーション開発でCIによる自動テストを行っているとき、CIの実行回数や実行時間を減らしたい場合があります。

どういうときかって?そらもうアレよ。コミット回数が多すぎるとか一回のCIに時間がかかりすぎるとかでCIサービスの時間上限にひっかかりそうなときです。

GitHub Actionsでのやり方を説明します。

ちなみに記事の前半は特別なことは何も書いていないので、この記事のタイトルにつられて来た人は「コメント駆動で動かそう」まで読み飛ばしても大丈夫です。

2023年2月5日日曜日

ChatGPTをレスバの末説得した

 最近、回転寿司業界がヤバそうですね。10年くらい前からバイトの悪ふざけが社会問題のようになっていましたが、最近は客の悪ふざけが目立つ印象です。昔からあったものがSNSによって可視化されただけなのかもしれませんが。

それとは全く関係ありませんが、最近はChatGPTがすごいですね。もちろん間違ったことを答えることもありますが、あまりにも自然な日本語で堂々と答えるので妙な説得力があります。チューリングテスト通るんじゃないのかと思ったらやっぱり通ってました

ちなみに今回は完全なネタ記事なので有用なことは一切期待しないでください。

2023年1月29日日曜日

TypeScriptで「任意のプロパティーを持てるが特定のプロパティーだけ型が違う」オブジェクトの型宣言をする方法

タイトル意味不明かもしれません。ちょっとうまい表現が見つかりませんでした。要するにこういうオブジェクトを作りたいということです。

  • プロパティーa, b, cはstring型
  • それ以外の任意のプロパティーはnumber型

コードで書くとこんな感じ。

// a, b, cはstring型
foo.a = "a";
foo.b = "b";
foo.c = "c";

// それ以外でも任意のプロパティーを使えるが、これらは全てnumber型
foo.abc = 123;
foo.xyz = 456;
foo.bar = 789;

TypeScriptを使うならanyとか使わずにできるだけ厳密に型定義をつけたいのでやってみました。

多分周回遅れのネタだと思いますが、ちょっと苦労したので同じように苦労している他の方の参考になれば。。。

2023年1月22日日曜日

1/18のTechFeed Experts Night#11に登壇しました

 先週告知した通り、1/18にイベント登壇してきました。

TechFeed Experts Night#11 〜JavaScript/TypeScript最前線

スライドはこちら

8分間で51ページという超絶ボリュームですが、33ページ目以降はおまけスライドで発表時には触れていません。また、PDF化する都合でアニメーションを複数枚のページに分けたものもかなりあるので見た目ほど中身は濃くないです。

以前もちょっと書きましたが、他の登壇者のみなさんが公認エキスパートばかりの中で1人だけ公認でもエキスパートでもない奴がポツンといる状態で、ある意味プレッシャーでした。

実はこれ、3年前のTSConf JPで発表しようとしていた内容に最近のDenoとかBunの事情を加えた内容です。昔話が多いのはそのせいです

2023年1月15日日曜日

1/18のTechFeed Experts Night#11に登壇します

先月告知したTechFeed Experts Night#11についての続報でございます。もうイベントページが公開されたので詳細を紹介します。

イベントページはこちら、テーマは「JavaScript/TypeScript最前線」です。

話す内容は「パッケージ開発者の苦悩 -JavaScriptランタイム群雄割拠-」で、その名の通りパッケージ開発者向けの内容です。ただし、最前線というテーマに反して昔話が多めなので、心してお聞きください。

2023年1月8日日曜日

Bunをバージョンを指定してインストールする方法

 以前の記事でちょっとだけ触れた新進気鋭のJavaScriptランタイムのBunについて。

トップページにワンライナーでインストールする方法が書いてあります。

curl -fsSL https://bun.sh/install | bash

これだと問答無用で最新バージョンがインストールされます。まあ殆どの場合は最新バージョンで問題ないんですが、ライブラリーの動作検証時などでは特定のバージョンを指定したい場合があります。

でも検索しても特定のバージョンをインストールする方法がヒットせず、公式サイトにも記載がないように見えたので、ちょっと調べてみました。どっかに書いてあって見落としてただけならごめんなさい。

2023年1月1日日曜日

GitHub Actionsのcomposite actionでNPMをキャッシュする方法

えー、あけましておめでとうございます。

これは2023年最初の記事なんですが、実は2022年最後の記事のつもりでした。なぜこうなったかというと、単に2022年の日曜がもう1回あると思ってただけです。

というわけで、新年一発目はタイトルどおりGitHub ActionsのTipsです。季節一切関係ないから2022年最後だろうが2023年最初だろうがどうでもいいんですが。