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年最初だろうがどうでもいいんですが。