at backyard

Color my life with the chaos of trouble.

手元でNostrクライアントのIrisを動かす方法のメモ

数日前にnostrの方にも書いていたが、一応こちらにもメモを残しておく。

nostrクライアントのirisをローカルで動かす際のメモとなる。

github.com

ローカルの開発モードで動かす際には以下のようにコマンドを打つとREADMEにはあるが、

yarn dev

これをこのまま実行すると以下のようなエラーとなる。

ERROR Error: error:0308010C:digital envelope routines::unsupported

一応この問題が発生したときの自身のNode.jsなどのversionは以下。

node -v
# v18.12.1

yarn -v
# 1.22.19

ローカルでyarn devを実行する方法

解決方法としては以下のissueを参照している

github.com

以下のように NODE_OPTIONS=--openssl-legacy-provider をつけることでローカル(dev)の起動に成功した。

NODE_OPTIONS=--openssl-legacy-provider yarn dev

Nostrに関する使い方メモ(Damus利用)

昨日Nostrについて少し調べたので、主にユーザ目線からの使い方に関する備忘録を残しておく。

なお、Nostrの仕様などについての話はしない。

画像設定や認証バッジの設定方法

Nostrではアカウント情報として表示させる画像やバナーについては登録するための仕組みがないので、外部のサイトにホスティングして配信する必要がある。

私はGitHub Pagesを用いて配信することにした。

以下のリポジトリを作成し、 assets 内に表示させる画像を格納している。

github.com

また .well-known/nostr.json を作成し、配信もしている。

これは認証バッジをつけるために必要になるようだ。

参照させていただいた記事は以下。

zenn.dev

nostr.json 内のHex値は以下のサイトを利用して生成した。
以下のサイトにアクセスして damus key というところに公開鍵を貼り付ければ、hex keyが出力される。

damus key converter

これらの設定を終えてGitHub Pages経由で公開されていることを確認までした後、Damus側のプロフィール編集画面から対応するURLやドメインなどの値をそれぞれ入力することで以下のように設定が完了できた。

NostrのDamusをmacからも利用する

私はNostrが出たときにひとまずiPhone上でDamusを用いて利用を開始した。
(と言っても全然利用していない状態だったが)

Nostrのクライアント自体は他にも色々あり、観測した感じだとirisがよく使われていそうな印象を受けた。

iris.to

オープンソースのようで以下にソースコードがある。

github.com

macOSから使う場合はDamusも良さそう

mac側でNostrを利用する際はirisを利用するのでも良かったが、M1以降のMacであればDamusのアプリもそのままmacから使えるようなので、どうせならと思い、こちらの方法を試してみることにした。

なお、参照した情報は以下となる

netafull.net

手元のM2 MacBook AirApp Storeから Damus と検索すると、検索結果が出てくる。

macOSでは検証されていません と出ているが問題なく動いている。

起動するとこのような画面になるのでログインを選択

フォーム内に秘密鍵を入力することでログインは完了する

Nostrで引用リツイート的なことをしたい

Nostr内でも返信やリツイート(Nostr内ではリポストと呼ばれるらしい)などはできるが引用リツイートの方法が分からなったので、Damusを利用した場合のやり方を載せておく

まずは対象のポストでiPhoneの場合は長押し、macの場合は右クリックを実施。

すると以下のような画面が出てくるので、Note IDをコピー を選択

これをポスト画面にペーストすると、note〜 のような文字列がペーストされる。 その文字列の先頭に @ をつけて以下の画面のようにしてポストする。

そして投稿すると、以下のような見た目で投稿される。
(見た目はクライアントによって異なるかもしれない)

以上

とりあえず現状メモしておきたい内容だけをこちらに書いた。

ChatGPTでHello Worldするまで(Node.js)

ChatGPTのAPIHello worldするまでの備忘録。

といっても思ったよりも簡単だった。

なお、Open AIのアカウントはChatGPTを利用するためにすでに作成済みだったので、アカウント作成はすでにしてある前提。

またChatGPT APIの詳細な内容なども省略する。

ChatGPT APIで利用するキーの発行方法

以下のリンクにアクセスしてログインする。

https://platform.openai.com/account/api-keys

すると、キー作成画面が出てくるので、Create new secret key のボタンを押すことでキーが発行できる。

これでキー発行は完了。簡単すぎる...

ChatGPT APIの利用料とお試し用のクレジットについて

ChatGPT APIは有償のサービスだが、なんとFree trialが用意されていて、$18文が利用できるようだった(※有効期限付きなので注意)

クレジットや有効期限などはアカウントメニューの manage account というところから確認ができる。

なお、ChatGPT APIのpricingは以下となる。
( $0.002 / 1K tokens )

openai.com

Node.jsでHello worldだけ実施する

ひとまず一度動かしてみたかったので、下記のドキュメント見ながら実行してみた。

https://platform.openai.com/docs/api-reference/chat/create

画面の右上部分にサンプルコードの言語を切り替えるボタンがあるので、こちらをNode.jsに変更してサンプルをコピーする。

サンプルコードの右上辺りに切り替えるドロップダウンリストがある

また実行の際には下記のnpmパッケージを入れる必要がある。

www.npmjs.com

Hello worldを実行するまでの作業ログ

ここからは実際に行ったことの作業ログ。
適当な作業ディレクトリで作業している。

# プロジェクトのセットアップとopenaiのインストール
npm init -y
npm install --save openai

# ファイル作成。ひとまずcommon.jsで書いていく
touch main.js

main.js の中身
内容はOpenAIのドキュメントを引っ張ってきただけだが、CommonJS形式で動かすために少しいじっている。
CommonJSで動かそうと思ったのには特に理由はない。

const { Configuration, OpenAIApi } = require("openai");

(async () => {
    const configuration = new Configuration({
        apiKey: process.env.OPENAI_API_KEY,
    });
    const openai = new OpenAIApi(configuration);

    const completion = await openai.createChatCompletion({
        model: "gpt-3.5-turbo",
        messages: [{ role: "user", content: "Hello world" }],
    });

    console.log(completion.data.choices[0].message);
})();

あとは先程取得したキーを使って以下のように実行するだけ。

OPENAI_API_KEY=**** node main.js

以下のようなレスポンスが返ってくるのが確認できる。

{
  role: 'assistant',
  content: '\n\nHello! How can I assist you today?'
}

これでひとまずhello worldまでやれた。

APIキーの取得は簡単だし、試してみようと思った際の敷居が低いのは大変良い。

MacBookのキーボードで満足していた自分がREALFORCE R3HC23購入に至るまでと、Mac用のセットアップメモ

最近Twitterでも呟いていたがREALFORCE R3HC23を購入した。

MacBookのキーボードで満足していた自分がREALFORCE R3HC23購入に至るまで

もともとキーボードはそこまで興味がなかった、というか以前FILCO Majestouchを試してみて、やはりMacBookのキーボードが一番しっくり来るなと思い直したこともあって、あまりキーボード方面には興味が行かなかったが、最近rebuildで話題に上がっていたキーボードの話を皮切りにYouTubeでキーボード関連の動画を見ていたら、面白そうなチャンネルをYouTubeのレコメンドアルゴリズムがどんどん勧めてくるものだから、せっかくだから自分もたまにはキーボードを買ってみるかとついつい興味が出てきてしまった。

rebuild.fm

結構仕事でも色々と文章を打つことが多く、最近手の疲れを感じる瞬間が何度かあったので疲れにくいキーボードを購入するというコンセプトのもと、少しずつキーボードを探したりしていた。

といっても、キーボードは実際に触ってみないとなんとも言えないのが正直なところで、仕事が自宅メイン、かつ出不精の自分にはなかなかキーボード欲を刺激される瞬間というのが訪れることはなかった。

...だが、先日外出した際に何気なく寄った家電量販店にリアルフォースがおいてあり、たまたま触ったR3HC23が自分にとってドンピシャだったので、触った翌日に購入を決意した。

私のキーボードの好み

もしこの記事をREALFORCE R3HC23の購入を検討しようと考えている人が読んだ際に参考になるように、予め自身のキーボードの好みも書いておくことにする。

私はMacBookのキーボードの感じが好きで、2016年ぐらいに出ていたペチペチタイプのキーボードも全然行けるタイプ。
あれはキーストロークがかなり浅くてペチペチうるさいと言うので結構評判は悪かったと思うが、私はキーボードを押し込むタイプではなく撫でながら打てるタイプのものが好みなので、ああいうタイプでも結構楽しんで打てた。

あとは最近のM1, M2系のキーボードも好きだ。まあ、こちらのほうがペチペチ感はなくなり、以前のような感じのキーボードに戻ったので、こちらのほうが好きという人も多いだろう。
(ただ2012年頃のMacBook Proを今でも触る機会があるが、あの頃よりは押下圧?やキーストロークの深さは浅くなっているように感じるし、今のタイプの方がやはり薄いようには感じる。そして今ぐらいのバランスが良いなと個人的には感じる)

色々とグダグダ書いてしまったが、私のキーボードの好みとしてはいま出ているM1, M2 MacBook Airのキーボードの感じが好みだ。

なので、こういうタイプのキーボードに不満を感じる方は私のこのレビューは当てにならないと思う。

REALFORCE R3HC23が良いと思ったポイント

では、早速私が良いなと思ったポイントをいくつか書いていく。

押下圧30gの打ち心地の軽さ

まず何より押し心地が良かった。 REALFORCE R3HC23は押下圧が30gでだいぶ軽い。

色々とYouTubeを見ていると30gは軽すぎるという意見も目にするが、私にとっては45gは重すぎるように感じた。

ちなみにFILCO Majestouchは黒軸を使っていたが、今押下圧を調べてみたらどうやら60あったらしい...!!
FILCO Majestouchを手放した理由の一つに、打っていたら手が疲れる、というのがあったが、自分が求めているキーボードからはだいぶ離れたものを選んでしまっていたらしい。
(まあ、当時はキーボードのこととか全く詳しくなかったのでこれはしょうがない)

静電容量無接点方式のスコスコ感

私は静電容量無接点タイプのキーボードを触るのは初めてなのだが、なるほどこれがスコスコ感というやつかという感じがする。

R3HC23は静音タイプなので打鍵時の音はかなり静かなので、仮に他人もいるようなオフィスなどで利用してもあまり気にならないような気はする。

音としては高音は少なめで、全体的にこもったスコスコというような音がする。

特にスペースキーは低音が豊かなスコスコ感があり、スコスコ感が強めだ。

※語彙がスコスコしかない...

あと底打ち感がないのも良い。

最後まで押し切る前に反応してくれるので、撫でるような意識でキーボードを打っても割と違和感なく文字を打てる気がする。

そのためMacBook AirからREALFORCE R3HC23に持ち替えてもそれほど違和感を感じずにスイッチできるのはかなり良いなと思った。

私は現在業務シーンによって複数のPCを使い分けている形で、常にリアルフォースだけで仕事ができる状態ではないため、あまりREALFORCE R3HC23に体を最適化しようとは考えていないが、逆に最適化しなくとも違和感なく使えるというのは求めていたものだったので結構良いかもしれない。

ブルートゥース接続可能な点

これは買ったあとに気づいたのだがREALFORCEのR3シリーズからBluetooth接続可能なモデルも発売されたようで、私が購入したモデルはまさにそのタイプだった。

Bluetooth接続については今まで使ったことがなかったし(というかほとんどラップトップのキーボードしか使っていない)どっちでもいいかなと思っていたが、いざ使ってみるとやはりこれはとても便利だ。

10分利用していないと接続が切れ、再度電源を入れる必要がある点が微妙というコメントもあったが、電源ボタン一秒押せば済む話だし(ここらへんは個人的な意見)、今現在は設定でスリープに入るまでの時間を最大で180分まで伸ばせるようになったらしいので、そこらへんが微妙に感じていた人もあまり気にしなくてもよいのかもしれない。

とにかく無線接続でキーボードが打てるとデスク環境も色々と変えられるし、ここらへんは面白いなと思った次第。

もちろん有線接続も可能な点も良い。

ちなみに後述するがREALFORCEのソフトウェアをインストールしてそのソフト内で色々とキーボードの設定を変える際は有線接続していないと私の場合は認識されなかったので、有線接続は必須なのかもしれない。
(私だけかもしれないが。あといちど設定してしまえば当然Bluetoothモードでもその設定は維持される)

REALFORCE R3HC23をMacBook Airで利用するために行った設定

ここからはmacユーザ向けの内容となる。

このREALFORCE R3HC23はWindows用配列となるため購入してすぐ利用できない点には注意が必要である。

ただいくつかのセットアップを行うことで現在違和感なく利用できているので、そのセットアップ内容をこちらにも記載しておこうと思う。

Bluetooth接続

まずはmacに限った話ではないが、最初にBluetoothの接続手順である。

リアルフォース側の接続方法は説明書などにも書いてあるので迷うことはなかったのだが、mac側の操作で少し手間取ったのでそちらについて書いていく。

macの設定からキーボードを選択した先の Bluetoothキーボードを設定 という箇所から設定する、とリアルフォース側の説明書には記載されていたがそちらではキーボードは認識されずBluetooth環境設定画面の方で接続を実施した。

何故かそちらでは正常に認識されていたので他のBluetooth機器同様に接続を選択して設定した形となる。

REALFORCE ソフトウェアのインストール

下記からmac向けのソフトウェアをインストールする

www.realforce.co.jp

使い方などは以下のページに記載されているので一目目を通したほうが良い

※個人的には使い方があまり直感的ではなく、最初よくわからない状態になったのでこういうソフトを使い慣れていない人は見ておいたほうが良いかも

www.realforce.co.jp

上でも書いたがソフトウェアをインストール後、起動してキーボードの設定を行う際は有線接続していないと私の場合は認識されなかったので、もし同じような症状になった方は参考にしてみてください。

キーのリマップ

上でインストールしたソフトウェアを用いてキーのリマップをしていく。

私は以下のような設定を行った。

  • Caps lockCtrl の入れ替え
  • 無変換→英語変換に変更
  • 変換→かな変換に変更
  • AltCommand に変更
  • WindowsキーOption に変更

これで私の場合はmac環境で違和感なく操作ができるようになった。

パームレストの存在

写真は本一冊だが、このあとにもう一冊足して二冊構成となった

これはTwitterにも書いたが、パームレストがないと結構打ちづらいことに気づいた。

我が家にはパームレストなんてものはないので、本棚から適当な暑さの本を二冊持ってきてキーボードの前に置いて使ってみたが、これがかなり良い感じだった。

そのうちパームレストも試してみるかもしれないが今のところはこれで満足している。

わざわざこういうタイプのキーボードを購入するような人はパームレストのこともご存知かと思うので特にこういう話は不要だろうが、結構ないと打ちづらくて満足度も激減するのでパームレスト(またはそれの代わりになるもの)は必須と考えても良いかもしれない。

以上の内容で私は違和感なくREALFORCE R3HC23を利用できている。

疲れ方がどう変わったかについてはもうしばらく使い込んでから、追記としてこちらに書いていこうと思う。

ただ今4,000文字ぐらいここまで一気に打ち込んだが、以前よりは疲れていないような気もする。が、たぶんこれはプラシーボな気もするなー

Web上で気軽にPythonを試せるPlayground

自分用のメモ。

ひとまず python playgroundといった検索キーワードで調べて一番上に出てきたサイトが以下。

www.programming-hero.com

どうやら調べていくと trinketというサービスを利用しているようなので、別に以下のサイトでも同じことを試せそうだ

Trinket

様々なモジュールを試すということは難しそうだが、簡単なPythonコードの検証ぐらいであれば試せそう。

ちなみに以下のモジュールは利用できるようだ

Available Python Modules

ChatGPTとRust学習の相性について

ChatGPTとRust学習の相性は良い

最近Rustを学習する際はChatGPTを用いながら行うことが多い。

私はRustに関する知識がまだまだ足りず、

  • なぜこのようなコードを書く必要があるのか?
  • この実装の意味はわかったが、なぜそうする必要があるのか?
  • どうしてこのようなエラーが出るのか?またどのように修正すれば動くのか?

というような疑問が浮かんでくることが多々ある。

そんな疑問を抱えているとき、Google検索では問題解決までに時間がかかるケースが多い。
なぜなら自分が今抱えている課題・疑問点を解決するためのキーワードがわからないからだ。

Google検索の場合、キーワードが分からないとなかなか最初の一歩を踏み出すのが難しい。
そのときに感じていることをそのまま検索窓に打ち込んでもよいのかもしれないが、そんなことしてもSEOに全振りしたような中身の薄いサイトが上位に上がってきてしまうだろう、という諦めが常にあるので、あまりそういう行動を撮ろうとは思わない。
(まあ、ただRustあたりにあるとそういうサイトは少ない気もするが)

そこで私は最近ChatGPTに対して、今抱えている課題・疑問点を質問するようにしている。
コードも理解してくれるので例えば、


以下のようなコードで使われている 'a はどういう意味なのでしょうか?

impl<'a> Foo for Bar<'a> {
    ・
    ・
    ・
}

というような質問もできるし、疑問に感じている部分のキーワードを知らなくても、ふんわりとしたニュアンスを用いて確信に向けた最初の一歩を踏み出すことが出来る点で、とても有効だと思う。
書き方だけは認識していたが、その文法の名称なども知ることができたりして、Rustの理解を深めて行けている感はある。

また対話形式で話ができるので会話の中で分からない部分が出てきたらそちらについても深堀りして聞くことが出来るし、気兼ねなくRustのわからない部分をぶつけられる、というのはRustを学ぶ上でかなり大きい。

あとコンパイラの出したエラーメッセージの解説をしてくれるのも地味にありがたい。

別にエラーメッセージを読めば済む話ではあるが、会話の中で噛み砕いて教えてもらえる、というのは自分でも思った以上に理解の助けになる、ということをChatGPTを通じて知った。

まるでペアプロをしているような気分になるし、一人だと行き詰まりがちなRust学習に追い風を吹かせてくれるという意味でも非常に有用だ。

もちろん回答には誤りも多いため、本当にあっているかどうかをGoogle検索を使って(というか主にRustのドキュメントを読んで)調べている。

ちなみにRustのとあるライブラリについて調べたとき、Google検索だと該当する検索結果が1ページ分も出なかったのだけど、ChatGPTだとものすごく詳しく応えてくれた。

たまたまそのライブラリに関する情報がGoogleのデータベースにはインデックス化されていなかっただけだろうか?

まあ、そんなわけでRust学習とChat GPTの相性は良いと感じている。

Chat GPTと会話したあとに、下記の本の関連箇所を読み返すなどすると、自分の中でうまく噛み砕いて理解できるので個人的にはおすすめ。
(購入してから定期的に読み返している本。購入した技術書関連でも3本の指に入るぐらいよく読んでいる書籍かもしれない)

www.oreilly.co.jp

ChatGPTでもなかなかコンパイルエラーを解決できないケースはある

Rust学習から一歩踏み込み、Chat GPTにサポートしてもらいながらRustのコードを書こうとすると結構大変になる。

試しにChat GPTを用いてRustで書いたライブラリに機能追加をしてみようと思い、追加したい機能要件をChat GPTに伝えたことがあるが、サンプルコードを生成するところまでは他のコード同様行えるものの生成したコードをそのままエディターに貼り付けてもコンパイルが通るケースは少ない。

例えばJavaScriptのコードなら意図した動きを生成してくれるケースでも、それをRustで生成するように依頼したソースコードは殆どの確率でどこかしらにコンパイルエラーが潜んでいる。
その場合、コンパイルエラーのメッセージを伝えてコードを修正してもらえるが、それでもなかなか解決できない。
(要はコンパイルエラーを解決できない)

もしかしたら自身のChat GPT力が足りないだけかもしれないが、現状ではRust学習には活用できるが、実際にコード書く際は普段どおり自身の力で書きつつ、局所的に分からない箇所のみ教えてもらうようにしたほうが良いかもしれないと思った次第。

WordPressプラグインのTable of Contents Plus (TOC+)が動かなくなっていたので対応した備忘録

WordPressで書いた記事に対して目次を自動生成する Table of Contents Plus というプラグインがある。

今日、とあるWordPressのサイトメンテナンスを行っていたらこれが動かなくなっていた(目次内に何も表示されなくなっていた)ので対応したメモ。

解決方法については以下のフォーラムのやり取りを参考にしている。

wordpress.org

Table of Contents Plus (TOC+)の対応メモ

対応方法としては、 設定 -> TOC+ を選択して Table of Contents Plus の設定ページを表示させる。

設定方法の下の方に上級者向けと書かれた箇所があるので、そこを開き、以下のように 見出しレベル にチェックを付けると従来どおり表示されるようになる。

今後のアップデートで修正されるとよいのだが、ひとまずの対応としてはこれで良さそうだったので対応した内容をメモとして残しておく。