-
@ 52b4a076:e7fad8bd
2025-05-03 04:42:13Introduction
Me and Fishcake have been working on infrastructure for Noswhere and Nostr.build. Part of this involves processing a large amount of Nostr events for features such as search, analytics, and feeds.
I have been recently developing
nosdex
v3, a newer version of the Noswhere scraper that is designed for maximum performance and fault tolerance using FoundationDB (FDB).Fishcake has been working on a processing system for Nostr events to use with NB, based off of Cloudflare (CF) Pipelines, which is a relatively new beta product. This evening, we put it all to the test.
First preparations
We set up a new CF Pipelines endpoint, and I implemented a basic importer that took data from the
nosdex
database. This was quite slow, as it did HTTP requests synchronously, but worked as a good smoke test.Asynchronous indexing
I implemented a high-contention queue system designed for highly parallel indexing operations, built using FDB, that supports: - Fully customizable batch sizes - Per-index queues - Hundreds of parallel consumers - Automatic retry logic using lease expiration
When the scraper first gets an event, it will process it and eventually write it to the blob store and FDB. Each new event is appended to the event log.
On the indexing side, a
Queuer
will read the event log, and batch events (usually 2K-5K events) into one work job. This work job contains: - A range in the log to index - Which target this job is intended for - The size of the job and some other metadataEach job has an associated leasing state, which is used to handle retries and prioritization, and ensure no duplication of work.
Several
Worker
s monitor the index queue (up to 128) and wait for new jobs that are available to lease.Once a suitable job is found, the worker acquires a lease on the job and reads the relevant events from FDB and the blob store.
Depending on the indexing type, the job will be processed in one of a number of ways, and then marked as completed or returned for retries.
In this case, the event is also forwarded to CF Pipelines.
Trying it out
The first attempt did not go well. I found a bug in the high-contention indexer that led to frequent transaction conflicts. This was easily solved by correcting an incorrectly set parameter.
We also found there were other issues in the indexer, such as an insufficient amount of threads, and a suspicious decrease in the speed of the
Queuer
during processing of queued jobs.Along with fixing these issues, I also implemented other optimizations, such as deprioritizing
Worker
DB accesses, and increasing the batch size.To fix the degraded
Queuer
performance, I ran the backfill job by itself, and then started indexing after it had completed.Bottlenecks, bottlenecks everywhere
After implementing these fixes, there was an interesting problem: The DB couldn't go over 80K reads per second. I had encountered this limit during load testing for the scraper and other FDB benchmarks.
As I suspected, this was a client thread limitation, as one thread seemed to be using high amounts of CPU. To overcome this, I created a new client instance for each
Worker
.After investigating, I discovered that the Go FoundationDB client cached the database connection. This meant all attempts to create separate DB connections ended up being useless.
Using
OpenWithConnectionString
partially resolved this issue. (This also had benefits for service-discovery based connection configuration.)To be able to fully support multi-threading, I needed to enabled the FDB multi-client feature. Enabling it also allowed easier upgrades across DB versions, as FDB clients are incompatible across versions:
FDB_NETWORK_OPTION_EXTERNAL_CLIENT_LIBRARY="/lib/libfdb_c.so"
FDB_NETWORK_OPTION_CLIENT_THREADS_PER_VERSION="16"
Breaking the 100K/s reads barrier
After implementing support for the multi-threaded client, we were able to get over 100K reads per second.
You may notice after the restart (gap) the performance dropped. This was caused by several bugs: 1. When creating the CF Pipelines endpoint, we did not specify a region. The automatically selected region was far away from the server. 2. The amount of shards were not sufficient, so we increased them. 3. The client overloaded a few HTTP/2 connections with too many requests.
I implemented a feature to assign each
Worker
its own HTTP client, fixing the 3rd issue. We also moved the entire storage region to West Europe to be closer to the servers.After these changes, we were able to easily push over 200K reads/s, mostly limited by missing optimizations:
It's shards all the way down
While testing, we also noticed another issue: At certain times, a pipeline would get overloaded, stalling requests for seconds at a time. This prevented all forward progress on the
Worker
s.We solved this by having multiple pipelines: A primary pipeline meant to be for standard load, with moderate batching duration and less shards, and high-throughput pipelines with more shards.
Each
Worker
is assigned a pipeline on startup, and if one pipeline stalls, other workers can continue making progress and saturate the DB.The stress test
After making sure everything was ready for the import, we cleared all data, and started the import.
The entire import lasted 20 minutes between 01:44 UTC and 02:04 UTC, reaching a peak of: - 0.25M requests per second - 0.6M keys read per second - 140MB/s reads from DB - 2Gbps of network throughput
FoundationDB ran smoothly during this test, with: - Read times under 2ms - Zero conflicting transactions - No overloaded servers
CF Pipelines held up well, delivering batches to R2 without any issues, while reaching its maximum possible throughput.
Finishing notes
Me and Fishcake have been building infrastructure around scaling Nostr, from media, to relays, to content indexing. We consistently work on improving scalability, resiliency and stability, even outside these posts.
Many things, including what you see here, are already a part of Nostr.build, Noswhere and NFDB, and many other changes are being implemented every day.
If you like what you are seeing, and want to integrate it, get in touch. :)
If you want to support our work, you can zap this post, or register for nostr.land and nostr.build today.
-
@ 3589b793:ad53847e
2025-04-30 12:40:42※本記事は別サービスで2022年6月24日に公開した記事の移植です。
どうも、「NostrはLNがWeb統合されマネーのインターネットプロトコルとしてのビットコインが本気出す具体行動のショーケースと見做せばOK」です、こんばんは。
またまた実験的な試みがNostrで行われているのでレポートします。本シリーズはライブ感を重視しており、例によって(?)プルリクエストなどはレビュー段階なのでご承知おきください。
今回の主役はあくまでLightningNetworkの新提案(ただし以前からあるLSATからのリブランディング)となるLightning HTTP 402 Protocol(略称: L402)です。そのショーケースの一つとしてNostrが活用されているというものになります。
Lightning HTTP 402 Protocol(略称: L402)とは何か
bLIPに今月挙がったプロポーザル内容です。
https://github.com/lightning/blips/pull/26
L402について私はまだ完全に理解した段階ではあるのですがなんとか一言で説明しようとすると「Authトークンのように"Paid"トークンをHTTPヘッダーにアタッチして有料リソースへのHTTPリクエストの受け入れ判断を行えるようにする」ものだと解釈しました。
Authenticationでは、HTTPヘッダーにAuthトークンを添付し、その検証が通ればHTTPリクエストを許可し、通らなければ
401 Unauthorized
コードをエラーとして返すように定められています。https://developer.mozilla.org/ja/docs/Web/HTTP/Status/401
L402では、同じように、HTTPヘッダーに支払い済みかどうかを示す"Paid"トークンを添付し、その検証が通ればHTTPリクエストを許可し、通らなければ
402 Payment Required
コードをエラーとして返すようにしています。なお、"Paid"トークンという用語は私の造語となります。便宜上本記事では使わせていただきますが、実際はAuthも入ってくるのが必至ですし、プルリクエストでも用語をどう定めるかは議論になっていることをご承知おきください。("API key", "credentials", "token", らが登場しています)
この402ステータスコードは従来から定義されていましたが、MDNのドキュメントでも記載されているように「実験的」なものでした。つまり、器は用意されているがこれまで活用されてこなかったものとなり、本プロトコルの物語性を体現しているものとなります。
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/402
幻であったHTTPステータスコード402 Payment Requiredを実装する
この物語性は、上述のbLIPのスペックにも詳述されていますが、以下のスライドが簡潔です。
402 Payment Required
は予約されていましたが、けっきょくのところWorldWideWebはペイメントプロトコルを実装しなかったので、Bitcoinの登場まで待つことになった、というのが要旨になります。このWorldWideWebにおける決済機能実装に関する歴史話はクリプト界隈でもたびたび話題に上がりますが、そこを繋いでくる文脈にこれこそマネーのインターネットプロトコルだなと痺れました。https://x.com/AlyseKilleen/status/1671342634307297282
この"Paid"トークンによって実現できることとして、第一にAIエージェントがBitcoin/LNを自律的に利用できるようになるM2M(MachineToMachine)的な話が挙げられていますが、ユースケースは想像力がいろいろ要るところです。実際のところは「有料リソースへの認可」を可能にすることが主になると理解しました。本連載では、繰り返しNostrクライアントにLNプロトコルを直接搭載せずにLightningNetworkを利用可能にする組み込み方法を見てきましたが、本件もインボイス文字列 & preimage程度の露出になりアプリケーション側でノードやウォレットの実装が要らないので、その文脈で位置付ける解釈もできるかと思います。
Snortでのサンプル実装
LN組み込み業界のリーディングプロダクトであるSnortのサンプル実装では、L402を有料コンテンツの購読に活用しています。具体的には画像や動画を投稿するときに有料のロックをかける、いわゆるペイウォールの一種となります。もともとアップローダもSnortが自前で用意しているので、そこにL402を組み込んでみたということのようです。
体験方法の詳細はこちらにあります。 https://njump.me/nevent1qqswr2pshcpawk9ny5q5kcgmhak24d92qzdy98jm8xcxlgxstruecccpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszrnhwden5te0dehhxtnvdakz78pvlzg
上記を試してみた結果が以下になります。まず、ペイウォールでロックした画像がNostrに投稿されている状態です。まったくビューワーが実装されておらず、ただのNotFound状態になっていますが、支払い前なのでロックされているということです。
次にこのHTTP通信の内容です。
通信自体はエラーになっているわけですが、ステータスコードが402で、レスポンスヘッダーのWWW-AuthenticateにInvoice文字列が返ってきています。つまり、このインボイスを支払えば"Paid"トークンが付与されて、その"Paid"トークンがあれば最初の画像がアンロックされることとなります。残念ながら現在は日本で利用不可のStrikeAppでしか払込みができないためここまでとなりますが、本懐である
402 Payment Required
とインボイス文字列は確認できました。今確認できることは以上ですが、AmethystやDamusなどの他のNostrクライアントが実装するにあたり、インラインメディアを巡ってL402の仕様をアップデートする必要性や同じくHTTPヘッダーへのAuthトークンとなるNIP-98と組み合わせるなどの議論が行われている最中です。
LinghtningNetworkであるからこそのL402の実現
"Paid"トークンを実現するためにはLightningNetworkのファイナリティが重要な要素となっています。逆に言うと、reorgによるひっくり返しがあり得るBitcoinではできなくもないけど不便なわけです。LightningNetworkなら、当事者である二者間で支払いが確認されたら「同期的」にその証であるハッシュ値を用いて"Paid"トークンを作成することができます。しかもハッシュ値を提出するだけで台帳などで過去の履歴を確認する必要がありません。加えて言うと、受金者側が複数のノードを建てていて支払いを受け取るノードがどれか一つになる状況でも、つまり、スケーリングされている状況でも、"Paid"トークンそのものはどのノードかを気にすることなくステートレスで利用できるとのことです。(ここは単にreverse proxyとしてAuthサーバががんばっているだけと解釈することもできますがずいぶんこの機能にも力点を置いていて大規模なユースケースが重要になっているのだなという印象を抱きました)
Macaroonの本領発揮か?それとも詳細定義しすぎか?
HTTP通信ではWWW-Authenticateの実値にmacaroonの記述が確認できます。また現在のL402スペックでも"Paid"トークンにはmacaroonの利用が前提になっています。
このmacaroonとは(たぶん)googleで研究開発され、LNDノードソフトウェアで活用されているCookieを超えるという触れ込みのデータストアになります。しかし、あまり普及しなかった技術でもあり、個人の感想ですがなんとも微妙なものになっています。
https://research.google/pubs/macaroons-cookies-with-contextual-caveats-for-decentralized-authorization-in-the-cloud/
macaroonの強みは、Cookieを超えるという触れ込みのようにブラウザが無くてもプロセス間通信でデータ共有できる点に加えて、HMACチェーンで動的に認証認可を更新し続けられるところが挙げられます。しかし、そのようなユースケースがあまり無く、静的な認可となるOAuthやJWTで十分となっているのが現状かと思います。
L402では、macaroonの動的な更新が可能である点を活かして、"Paid"トークンを更新するケースが挙げられています。わかりやすいのは上記のスライド資料でも挙げられている"Dynamic Pricing"でしょうか。プロポーザルではloop©️LightningLabsにおいて月間の最大取引量を認可する"Paid"トークンを発行した上でその条件を動向に応じて動的に変更できる例が解説されています。とはいえ、そんなことしなくても再発行すればええやんけという話もなくもないですし、プルリクエストでも仕様レベルでmacaroonを指定するのは「具体」が過ぎるのではないか、もっと「抽象」し単なる"Opaque Token"程度の粒度にして他の実装も許容するべきではないか、という然るべきツッコミが入っています。
個人的にはそのツッコミが妥当と思いつつも、なんだかんだ初めてmacaroonの良さを実感できて感心した次第です。
-
@ 3589b793:ad53847e
2025-04-30 12:28:25※本記事は別サービスで2023年4月19日に公開した記事の移植です。
どうも、「NostrはLNがWeb統合されマネーのインターネットプロトコルとしてのビットコインが本気出す具体行動のショーケースと見做せばOK」です、こんにちは。
前回まで投げ銭や有料購読の組み込み方法を見てきました。
zapsという投げ銭機能が各種クライアントに一通り実装されて活用が進んでいることで、統合は次の段階へ移り始めています。「作戦名: ウォレットをNostrクライアントに組み込め」です。今回はそちらをまとめます。
投げ銭する毎にいちいちウォレットを開いてまた元のNostrクライアントに手動で戻らないといけない is PAIN
LNとNostrはインボイス文字列で繋がっているだけの疎結合ですが、投稿に投げ銭するためには何かのLNウォレットを開いて支払いをして、また元のNostrクライアントに戻る操作をユーザーが手作業でする必要があります。お試しで一回やる程度では気になりませんが普段使いしているとこれはけっこうな煩わしさを感じるUXです。特にスマホでは大変にだるい状況になります。連打できない!
2月の実装以来、zapsは順調に定着して日々投げられています。
https://stats.nostr.band/#daily_zaps
なので、NostrクライアントにLNウォレットの接続を組み込み、支払いのために他のアプリに遷移せずにNostクライアント単独で完結できるようなアップデートが始まっています。
Webクライアント
NostrのLN組み込み業界のリーディングプレイヤーであるSnortでの例です。以下のようにヘッダーのウォレットアイコンをクリックすると連携ウォレットの選択ができます。
もともとNostrに限らずウェブアプリケーションとの連携をするために、WebLNという規格があります。簡単に言うと、ブラウザのグローバル領域を介して、LNウォレットの拡張機能と、タブで開いているウェブアプリが、お互いに連携するためのインターフェースを定めているものです。これに対応していると、LNによる支払いをウェブアプリが拡張機能に依頼できるようになります。さらにオプションで「確認無し」をオンにすると、拡張機能画面がポップアップせずにバックグラウンドで実行できるようになり、ノールック投げ銭ができるようになります。
似たようなものにNostrではNIP-07があります。NIP-07はNostrの秘密鍵を拡張機能に退避して、Nostrクライアントは秘密鍵を知らない状態で署名や複合を拡張機能に移譲できるようにしているものです。
Albyの拡張機能ではWebLNとNIP-07のどちらにも対応しています。
実はSnortはzapsが来る前からWebLNには対応していたのですが、さらに一歩進み、拡張機能ウォレットだけでなく、LNノードや拡張機能以外のLNウォレットと連携設定できるようになってきています。
umbrelなどでノードを立てている人ならLND with LNCでノードと直接繋げます。またLNDHubに対応したウォレットなどのアプリケーションとも繋げます。これらの接続は、WebLNにラップされて拡張機能ウォレットとインターフェースを揃えられた上で、Snort上でのインボイスの支払いに活用されます。
なお、LNCのpairingPhrase/passwordやLNDHubの接続情報などのクレデンシャルは、ブラウザのローカルストレージに保存されています。Nostrのリレーサーバなどには送られませんので、端末ごとに設定が必要です。
スマホアプリ
今回のメインです。なお、例によって(?)スペックは絶賛議論中でまだフィックスしていない中で記事を書いています。ディテールは変わるかもしれないので悪しからずです。
スマホアプリで上記のことをやるためには、後半のLNCやLNDHubはすでにzeusなどがやっているようにできますが、あくまでネイティブウォレットのラッパーです。Nostrでは限られた用途になるので1-click支払いのようなものを行うためにはそこから各スマホアプリが作り込む必要があります。まあこれはこれでやればいいという話でもあるのですが、LNノードやLNウォレットのアプリケーション側へのインターフェースの共通仕様は定められていないので、LNDとcore-lightningとeclairではすべて実装方法が違いますし、ウォレットもバラバラなので大変です。
そこで、多種多様なノードやウォレットの接続を取りまとめ一般アプリケーションへ統一したインターフェースを媒介するLN Adapter業界のリーディングカンパニーであるAlbyが動きました。AndroidアプリのAmethystで試験公開されていますが、スマホアプリでも上記のSnortのような連携が可能になるようなSDKが開発されました。
リリース記事 https://blog.getalby.com/native-zapping-in-amethyst/
"Unstoppable zapping for users"なんて段落見出しが付けられているように、スマホで別のアプリに切り替えてまた元に戻らなくても良いようにして、Nostr上でマイクロペイメントを滑らかにする、つまり、連打できることを繰り返し強調しています。
具体的にやっていることを見ていきます。以下の画像群はリリース記事の動画から抜粋しています。各投稿のzapsボタン⚡️をタップしたときの画面です。
上の赤枠が従来の投げ銭の詳細を決める場所で、下の赤枠の「Wallet Connect Service」が新たに追加されたAlby提供のSDKを用いたコネクト設定画面です。基本的にはOAuth2.0ベースのAlbyのAPIを活用していて、右上のAlbyアイコンをタップすると以下のようなOAuthの認可画面に飛びます。(ただし後述するように通常のOAuthとは一部異なります。)
画面デザインは違いますが、まあ他のアプリでよく目にするTwitter連携やGoogleアカウント連携とやっていることは同じです。
このOAuthベースのAPIはNostr専用のエンドポイントが建てられています。Nostr以外のECショップやマーケットプレイスなどへのAlbyのOAuthは汎用のエンドポイントが用意されています。よって通常のAlbyの設定とは別にセッション詳細を以下のサイトで作成する必要があります。
https://nwc.getalby.com/ (サブドメインのnwcはNostr Wallet Connectの略)
なぜNostrだけは特別なのかというところが完全には理解しきれていないですが、以下のところまで確認できています。一番にあるのは、Nostrクライアントにウォレットを組み込まずに、かつ、ノードやウォレットへの接続をNostrリレーサーバ以外は挟まずに"decentralized"にしたいというところだと理解しています。
- 上記のnwcのURLはalbyのカストディアルウォレットusername@getalby.comをNostrに繋ぐもの(たぶん)
- umbrelのLNノードを繋ぐためにはやはり専用のアプリがumbrelストアに上がっている。https://github.com/getAlby/umbrel-community-app-store
- 要するにOAuthの1stPartyの役割をウォレットやノードごとにそれぞれ建てる。
- OAuthのシークレットはクライアントに保存するので設定は各クライアント毎に必要。しかし使い回しすることは可能っぽい。通常のOAuthと異なり、1stParty側で3rdPartyのドメインはトラストしていないようなので。
- Nostrクライアントにウォレットを組み込まずに、さらにウォレットやノードへの接続をNostrリレーサーバ以外には挟まなくて良いようにするために、「NIP-47 Nostr Wallet Connect」というプロポーザルが起こされていて、絶賛議論中である。https://github.com/nostr-protocol/nips/pull/406
- このWallet Connect専用のアドホックなリレーサーバが建てられる。その情報が上記画像の赤枠の「Wallet Connect Service」の下半分のpub keyやらrelayURL。どうもNostrクライアントはNIP-47イベントについてはこのリレーサーバにしか送らないようにするらしい。(なんかNostrの基本設計を揺るがすユースケースの気がする...)
- Wallet Connect専用のNostrイベントでは、ペイメント情報をNostrアカウントと切り離すために、Nostrの秘密鍵とは別の秘密鍵が利用できるようにしている。
Imagin the Future
今回取り上げたNostrクライアントにウォレット接続を組み込む話を、Webのペイメントの歴史で類推してみましょう。
Snortでやっていることは、各サイトごとにクレジットカードを打ち込み各サイトがその情報を保持していたようなWeb1.0の時代に近いです。そうなるとクレジットカードの情報は各サービスごとに漏洩リスクなどがあり、Web1.0の時代はECが普及する壁の一つになっていました。(今でもAmazonなどの大手はそうですが)
Webではその後にPayPalをはじめとして、銀行口座やクレジットカードを各サイトから切り出して一括管理し、各ウェブサイトに支払いだけを連携するサービスが出てきて一般化しています。日本ではケータイのキャリア決済が利用者の心理的障壁を取り除きEC普及の後押しになりました。
後半のNostr Wallet ConnectはそれをNostrの中でやろうとしている試みになります。クレジットカードからLNに変える理由はビットコインの話になるので詳細は割愛しますが、現実世界の金(ゴールド)に類した価値保存や交換ができるインターネットマネーだからです。
とはいえ、Nostrの中だけならまだしも、これをNostr外のサービスで利用するためには、他のECショップやブログやSaaSがNostrを喋れる必要があります。そんな未来が来るわけないだろと思うかもしれませんが、言ってみればStripeはまさにそのようなサービスとなっていて、サイト内にクレジット決済のモジュールを組み込むための主流となっています。
果たして、Nostrを、他のECショップやブログやSaaSが喋るようになるのか!?
以上、「NostrはLNがWeb統合されマネーのインターネットプロトコルとしてのビットコインが本気出す具体行動のショーケースと見做せばOK」がお送りしました。
-
@ 3589b793:ad53847e
2025-04-30 12:10:06前回の続きです。
特に「Snortで試験的にノート単位に投げ銭できる機能」について。実は記事書いた直後にリリースされて慌ててw追記してたんですが追い付かないということで別記事にしました。
今回のここがすごい!
「Snortで試験的にノート単位に投げ銭できる機能」では一つブレイクスルーが起こっています。それは「ウォレットにインボイスを放り投げた後に払い込み完了を提示できる」ようになったことです。これによりペイメントのライフサイクルが一通りカバーされたことになります。
Snortの画面
なにを当たり前のことをという向きもあるかもしれませんが、Nostrクライアントで払い込み完了を追跡することはとても難しいです。基本的にNostrとLNウォレットはまったく別のアプリケーションで両者の間を繋ぐのはインボイス文字列だけです。ウォレットもNostrからキックされずに、インボイス文字列をコピペするなりQRコードで読み取ったものを渡されるだけかもしれません。またその場でリアルタイムに処理される前提もありません。
なのでNostrクライアントでその後をトラックすることは難しく、これまではあくまで請求書を送付したり(LNインボイス)振り込み口座を提示する(LNアドレス)という一方的に放り投げてただけだったわけです。といっても魔法のようにNostrクライアントがトラックできるようになったわけではなく、今回の対応方法もインボイスを発行/お金を振り込まれるサービス側(LNURL)にNostrカスタマイズを入れさせるというものになります。
プロポーザルの概要について
前回の記事ではよくわからんで終わっていましたが、当日夜(日本時間)にスペックをまとめたプロポーザルも起こされました(早い!)。LNURLが、Nostr用のインボイスを発行して、さらにNostrイベントの発行を行っていることがポイントでした。名称は"Lightning Zaps"で確定のようです。プロポーザルは、NostrとLNURLの双方の発明者であるfiatjaf氏からツッコミが入り、またそれが妥当な指摘のために、エンドポイントURLのインターフェースなどは変わりそうなのですが、概要はそう変わらないだろうということで簡単にまとめてみます。
全体の流れ
図は、Nostrクライアント上に提示されているLNアドレスへ投げ銭が開始してから、Nostrクライアント上に払い込み完了したイベントが表示されるまでの流れを示しています。
- 投げ銭の内容が固まったらNostrイベントデータを添付してインボイスの発行を依頼する
- 説明欄にNostr用のデータを記載したインボイスを発行して返却する
- Nostrクライアントで提示されたインボイスをユーザーが何かしらの手段でウォレットに渡す
- ウォレットがLNに支払いを実行する
- インボイスの発行者であるLNURLが管理しているLNノードにsatoshiが届く
- LNURLサーバが投げ銭成功のNostrイベントを発行する
- Nostrクライアントがイベントを受信して投げ銭履歴を表示する
特にポイントとなるところを補足します。
対応しているLNアドレスの識別
LNアドレスに投げ銭する場合は、LNアドレスの有効状態やインボイス発行依頼する先の情報を
https://[domain]/.well-known/lnurlp/[username]
から取得しています。そのレスポンス内容にNostr対応を示す情報を追加しています。ただし、ここに突っ込み入っていてlnurlp=LNURL Payから独立させるためにzaps専用のエンドポイントに変わりそうです。(2/15 追記 マージされましたが変更無しでした。PRのディスカッションが盛り上がっているので興味ある方は覗いてみてください。)インボイスの説明欄に書き込むNostrイベント(kind:9734)
これは投げ銭する側のNostrイベントです。投げ銭される者や対象ノートのIDや金額、そしてこのイベントを作成している者が投げ銭したということを「表明」するものになります。表明であって証明でないところは、インボイスを別の人が払っちゃう事態がありえるからですね。この内容をエンクリプトするパターンも用意されていたが複雑になり過ぎるという理由で今回は外され追加提案に回されました。また、このイベントはデータを作成しただけです。支払いを検知した後にLNURLが発行するイベントに添付されることになります。そのため投げ銭する者にちゃんと届くように作成者のリレーサーバリストも書き込まれています。
支払いを検知した後に発行するNostrイベント(kind:9735)
これが実際にNostrリレーサーバに発行されるイベントです。LNURL側はウォッチしているLNノードにsatoshiが届くと、インボイスの説明欄に書かれているNostrイベントを取り出して、いわば受領イベントを作成して発行します。以下のようにNostイベントのkind:9734とkind:9735が親子になったイベントとなります。
json { "pubkey": "LNURLが持っているNostrアカウントの公開鍵", "kind": 9735, "tags": [ [ "p", "投げ銭された者の公開鍵" ], [ "bolt11", "インボイスの文字列lnbc〜" ], [ "description", "投げ銭した者が作成したkind:9734のNostrイベント" ], [ "preimage", "インボイスのpreimage" ] ], }
所感
とにかくNostrクライアントはLNノードを持たないしLNプロトコルとも直接喋らずにインボイス文字列だけで取り扱えるようになっているところがおもしろいと思っています。NostrとLNという二つのデセントライズドなオープンプロトコルが協調できていますし、前回も述べましたがどんなアプリでも簡単に真似できます。
とはいえ、さすがに払込完了のトラックは難しく、今回はLNURL側にそのすり合わせの責務が寄せられることになりました。しかし、LNURLもLNの上に作られたオープンプロトコル/スペックの位置付けになるため、他のLNURLのスペックに干渉するという懸念から、本提案のNIP-57に変更依頼が出されています。LN、LNURL、Nostrの3つのオープンプロトコルの責務分担が難しいですね。アーキテクチャ層のスタックにおいて3つの中ではNostrが一番上になるため、Nostrに相当するレイヤーの他のwebサービスでやるときはLNプロトコルを喋るなりLNノードを持つようにして、今回LNURLが寄せられた責務を吸収するのが無難かもしれません。
また、NIP-57の変更依頼理由の一つにはBOLT-12を見越した抽象化も挙げられています。他のLNURLのスペックを削ぎ落としてzapsだけにすることでBOLT-12にも載りやすくなるだろうと。LNURLの多くはBOLT-12に取り込まれる運命なわけですが、LNアドレス以外の点でもNostrではBOLT-12のOfferやInvoiceRequestのユースケースをやりたいという声が挙がっているため、NostrによりBOLT-12が進む展開もありそうだなあ、あってほしい。
-
@ 3589b793:ad53847e
2025-04-30 12:02:13※本記事は別サービスで2023年2月5日に公開した記事の移植です。
Nostrクライアントは多種ありますがメジャーなものはだいたいLNの支払いが用意されています。現時点でどんな組み込み方法になっているか調べました。この記事では主にSnortを対象にしています。
LN活用場面
大きくLNアドレスとLNインボイスの2つの形式があります。
1. LNアドレスで投げ銭をセットできる
LNURLのLNアドレスをセットすると、プロフィールやノート(ツイートに相当)からLN支払いができます。別クライアントのastralなどではプリミティブなLNURLの投げ銭形式
lnurl1dp68~
でもセットできます。[追記]さらに本日、Snortで試験的にノート単位に投げ銭できる機能が追加されています。
2. LNインボイスが投稿できる
投稿でLNインボイスを貼り付ければ上記のように他の発言と同じようにタイムラインに流れます。Payボタンを押すと各自の端末にあるLNウォレットが立ち上がります。
3. DMでLNインボイスを送る
メッセージにLNインボイスが組み込まれているという点では2とほぼ同じですが、ユースケースが異なります。発表されたばかりですがリレーサーバの有料化が始まっていて、その決済をDMにLNインボイスを送付して行うことが試されています。2だとパブリックに投稿されますが、こちらはプライベートなので購入希望者のみにLNインボイスを届けられます。
おまけ: Nostrのユーザ名をLNアドレスと同じにする
直接は関係ないですが、Nostrはユーザー名をemail形式にすることができます。LNアドレスも自分でドメイン取って作れるのでNostrのユーザー名と投げ銭のアドレスを同じにできます。
LNウォレットのAlbyのドメインをNostrのユーザ名にも活用している様子 [Not found]
実装方法
LNアドレスもLNインボイスも非常にシンプルな話ですが軽くまとめます。 Snortリポジトリ
LNアドレス
- セットされたLNアドレスを分解して
https://[domain]/.well-known/lnurlp/[username]
にリクエストする - 成功したら投げ銭量を決めるUIを提示する
- Get Inoviceボタンを押したら1のレスポンスにあるcallbackにリクエストしてインボイスを取得する
- 成功したらPayボタンを提示する
LNインボイス
- 投稿内容がLNインボイス識別子
lnbc10m〜
だとわかると、識別子の中の文字列から情報(金額、説明、有効期限)を取り出し、表示用のUIを作成する - 有効期限内だったらPayボタンを提示し、期限が切れていたらExpiredでロックする
支払い
Payボタンを押された後の動きはアドレス、インボイスとも同じです。
- ブラウザでWebLN(Albyなど)がセットされていて、window.weblnオブジェクトがenableになっていると、拡張機能の支払い画面が立ち上がる。クライアント側で支払い成功をキャッチすることも可能。
- Open Walletボタンを押すと
lightning:lnbc10m~
のURI形式でwindow.openされ、Mac/Windows/iPhone/Androidなど各OSに応じたアプリケーション呼び出しが行われ、URIに対応しているLNウォレットが立ち上がる
[追記]ノート単位の投げ銭
Snort周辺の数人(strike社員っぽい人が一人いて本件のメイン実装している)で試験的にやっているようで現時点では実装レベルでしか詳細わかりませんでした。strikeのzapといまいち区別が付かなかったのですが、実装を見るとnostrプロトコルにzapイベントが追加されています。ソースコメントではこの後NIP(nostr improvement proposal)が起こされるようでかなりハッキーです。zap=tipの方言なんでしょうか?
ノートやプロフィールやリアクションなどに加えて新たにnostrイベントに追加しているものは以下2つです。
- zapRequest 投げ銭した側が対象イベントIDと量を記録する
- zapReceipt 投げ銭を受け取った側用のイベント
一つでできそうと思ったけど、nostrは自己主権のプロトコルでイベント作成するには発行者の署名が必須なので2つに分かれているのでしょう。
所感
現状はクライアントだけで完結する非常にシンプルな方法になっています。リレーサーバも経由しないしクライアントにLNノードを組み込むこともしていません。サードパーティへのhttpリクエストやローカルのアプリに受け渡すだけなので、実はどんな一般アプリでもそんなに知識もコストも要らずにパッとできるものです。
現状ちょっと不便だなと思っていることは、タイムラインに流れるインボイスの有効期限内の支払い済みがわからないことです。Payボタンを押してエラーにならないとわかりません。ウォレットアプリに放り投げていてこのトレースするためには、ウォレット側で支払い成功したらNostrイベントを書き込むなどの対応しない限りは、サービス側でインボイスを定期的に一つ一つLNに投げてチェックするなどが必要だと思われるので、他のサービスでマネするときは留意しておくとよさそうです。
一方で、DMによるLNインボイス送付は活用方法が広がりそうな予感があります。Nostrの公開鍵による本人特定と、LNインボイスのメモ欄のテキスト情報による突き合わせだけでも、かんたんな決済機能として用いれそうだからです。もっとNostrに判断材料を追加したければイベント追加も簡単にできることをSnortが示しています。とくにリレーサーバ購読やPROメニューなどのNostr周辺の支払いはやりやすそうなので、DM活用ではなくなにかしらの決済メニューを搭載したNostrクライアントもすぐに出てきそう気がします。
- セットされたLNアドレスを分解して
-
@ 3589b793:ad53847e
2025-04-30 11:46:52※本記事は別サービスで2022年9月25日に公開した記事の移植です。
LNの手数料の適正水準はどう見積もったらいいだろうか?ルーティングノードの収益性を算出するためにはどうアプローチすればよいだろうか?本記事ではルーティングノード運用のポジションに立ち参考になりそうな数値や計算式を整理する。
個人的な感想を先に書くと以下となる。
- 現在の手数料市場は収益性が低くもっと手数料が上がった方が健全である。
- 他の決済手段と比較すると、LN支払い料金は10000ppm(手数料1%相当)でも十分ではないか。4ホップとすると中間1ノードあたり2500ppmである。
- ルーティングノードの収益性を考えると、1000ppmあれば1BTC程度の資金で年利2.8%になり半年で初期費用回収できるので十分な投資対象になると考える。
基本概念の整理
LNの料金方式
- LNの手数料は送金額に応じた料率方式が主になる。(基本料金の設定もあるが1 ~ 0 satsが大半)
- 料率単位のppm(parts per million)は、1,000,000satsを送るときの手数料をsats金額で示したもの。
- %での手数料率に変換すると1000ppm = 0.1%になる。
- 支払い者が払う手数料はルーティングに参加した各ノードの手数料の合計である。本稿では4ホップ(経由ノードが4つ)のルーティングがあるとすれば、各ノードの取り分は単純計算で1/4とみなす。
- ルーティングノードの収益はアウトバウンドフローで発生するのでアウトバウンドキャパシティが直接的な収益資源となる。
LNの料金以外のベネフィット
本稿では料金比較だけを行うが実際の決済検討では以下のような料金以外の効用も忘れてはならない。
- Bitcoin(L1)に比べると、料金の安さだけでなく、即時確定やトランザクション量のスケールという利点がある。
- クレジットカードなどの集権サービスと比較した特徴はBitcoin(L1)とだいたい同じである。
- 24時間365日利用できる
- 誰でも自由に使える
- 信頼する第三者に対する加盟や審査や手数料率などの交渉手続きが要らない
- 検閲がなく匿名性が高い
- 逆にデメリットはオンライン前提がゆえの利用の不便さやセキュリティ面の不安さなどが挙げられる。
現在の料金相場
- ルーティングノードの料金設定
- sinkノードとのチャネルは500 ~ 1000ppmが多い。
- routing/sourceノードとのチャネルは0 ~ 100ppmあたりのレンジになる。
- リバランスする場合もsinkで収益を上げているならsink以下になるのが道理である。
- プロダクト/サービスのバックエンドにいるノードの料金設定
- sinkやsourceに相当するものは上記の通り。
- 1000〜5000ppmあたりで一律同じ設定というノードもよく見かける。
- ビジネスモデル次第で千差万別だがアクティブと思われるノードでそれ以上はあまり見かけない。
- 上記は1ノードあたりの料金になる。支払い全体では経由したノードの合計になる。
料金目安
いくつかの方法で参考数字を出していく。LN料金算出は「支払い全体/2ホップしたときの1ノードあたり/4ホップしたときの1ノードあたり」の三段階で出す。
類推方式
決済代行業者との比較
- Squareの加盟店手数料は、日本3.25%、アメリカ2.60%である。
- 参考資料 https://www.meti.go.jp/shingikai/mono_info_service/cashless_payment/pdf/20220318_1.pdf
3.25%とするとLNでは「支払い全体/2ホップしたときの1ノードあたり/4ホップしたときの1ノードあたり」でそれぞれ
32,500ppm/16,250ppm/8,125ppm
になる。スマホのアプリストアとの比較
- Androidのアプリストアは年間売上高が100万USDまでなら15%、それ以上なら30%
- 参考資料https://support.google.com/googleplay/android-developer/answer/112622?hl=ja
15%とするとLNでは「支払い全体/2ホップしたときの1ノードあたり/4ホップしたときの1ノードあたり」でそれぞれ
150,000ppm/75,000ppm/37,500ppm
になる。Bitcoin(L1)との比較
Bitcoin(L1)は送金額が異なっても手数料がほぼ同じため、従量課金のLNと単純比較はできない。そのためここではLNの方が料金がお得になる目安を出す。
Bitcoin(L1)の手数料設定
- SegWitのシンプルな送金を対象にする。
- input×1、output×2(送金+お釣り)、tx合計222byte
- L1の手数料は、1sat/byteなら222sats、10sat/byteなら2,220sats、100sat/byteなら22,200sats。(単純化のためvirtual byteではなくbyteで計算する)
- サンプル例 https://www.blockchain.com/btc/tx/15b959509dad5df0e38be2818d8ec74531198ca29ac205db5cceeb17177ff095
L1相場が1sat/byteの時にLNの方がお得なライン
- 100ppmなら、0.0222BTC(2,220,000sats)まで
- 1000ppmなら、0.00222BTC(222,000sats)まで
L1相場が10sat/byteの時にLNの方がお得なライン
- 100ppmなら、0.222BTC(22,200,000sats)まで
- 1000ppmなら、0.0222BTC(2,220,000sats)まで
L1相場が100sat/byteの時にLNの方がお得なライン
- 100ppmなら、2.22BTC(222,000,000sats)まで
- 1000ppmなら、0.222BTC(22,200,000sats)まで
コスト積み上げ方式
ルーティングノードの原価から損益分岐点となるppmを算出する。事業者ではなく個人を想定し、クラウドではなくラズベリーパイでのノード構築環境で計算する。
費用明細
- BTC市場価格 1sat = 0.03円(1BTC = 3百万円)
初期費用
- ハードウェア一式 40,000円
- Raspberry Pi 4 8GB
- SSD 1TB
- 外付けディスプレイ
- チャネル開設のオンチェーン手数料 6.69円/チャネル
- 開設料 223sats
- 223sats * BTC市場価格0.03円 = 6.69円
固定費用
- 電気代 291.6円/月
- 時間あたりの電力量 0.015kWh
- Raspberry Pi 4 電圧5V、推奨電源容量3.0A
- https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#power-supply
- kWh単価27円
- 0.015kWh * kWh単価27円 * 1ヶ月の時間720h = 291.6円
損益分岐点
- 月あたりの電気代を上回るために9,720sats(291.6円)/月以上の収益が必要である。
- ハードウェア費用回収のために0.01333333BTC(133万sats) = 40,000円の収益が必要である。
費用回収シナリオ例
アウトバウンドキャパに1BTCをデポジットしたAさんを例にする。1BTCは初心者とは言えないと思うが、このくらい原資を用意しないと費用回収の話がしづらいという裏事情がある。チャネル選択やルーティング戦略は何もしていない仮定である。ノード運用次第であることは言うまでもないので今回は要素や式を洗い出すことが主目的で一つ一つの変数の値は参考までに。
変数設定
- インバウンドを同額用意して合計キャパを2BTCとする。
- 1チャネルあたり5m satsで40チャネル開設する。
- チャネル開設費用 223sats * 40チャネル = 8,920sats
- 初期費用合計 1,333,333sats + 8,920sats = 1,342,253sats
- 一回あたり平均ルーティング量 = 100,000sats
- 1チャネルあたり平均アウトバウンド数/日 = 2
- 1チャネルあたり平均アウトバウンドppm = 50
費用回収地点
- 1日のアウトバウンド量は、 40チャネル * 2本 * 100,000sats = 8m sats
- 手数料収入は、8m sats * 0.005%(50ppm) = 400sats/日。月換算すると12,000sats/月
- 電気代を差し引くと、12,000sats - 電気代9,720sats =月収益2,280sats(68.4円)
- 初期費用回収まで、1,342,253sats / 2,280sats = 589ヵ月(49年)
- 後述するが電気代差引き前で年利0.14%になる。
理想的なppm
6ヵ月での初期費用回収を目的にしてアウトバウンドppmを求める。
- ひと月あたり、初期費用合計1,342,253sats / 6ヵ月 + 電気代9,720sats = 233,429sats(7,003円)の収益が必要。
- 1日あたり、7,781sats(233円)の収益
- その場合の平均アウトバウンドppmは、 7,781sats(1日の収益量) / 8m sats(1日のアウトバウンド量) * 1m sats(ppm変換係数) = 973ppm
他のファイナンスとの比較
ルーティングノードを運用して手数料収入を得ることは資産運用と捉えることもできる。レンディングやトレードなどの他の資産運用手段とパフォーマンス比較をするなら、デポジットしたアウトバウンドキャパシティに対する手数料収入をAPY換算する。(獲得した手数料はアウトバウンドキャパシティに積み重ねられるので複利と見做せる)
例としてLNDg(v1.3.1)のAPY算出計算式を転載する。見ての通り画面上の表記はAPYなのに中身はAPRになっているので注意だが今回は考え方の参考としてこのまま採用する。
年換算 = 365 / 7 = 52.142857 年利 = (7dayの収益 * 年換算) / アウトバウンドのキャパシティ
例えば上記のAさんの費用回収シナリオに当てはめると以下となる。
年利 0.14% = (400sats * 7日 * 年換算)/ 100m sats
電気代を差し引くと 76sats/日となり年利0.027%
もし平均アウトバウンド1000ppmになると8,000sats/日なので年利2.9%になる。 この場合、電気代はほぼ1日で回収されるため差し引いても大差なく7,676sats/日で年利2.8%になる。
考察
以上、BTC市場価格や一日のアウトバウンド量といった重要な数値をいくつか仮置きした上ではあるが、LN手数料の適正水準を考えるための参考材料を提示した。
まず、現在のLNの料金相場は他の決済手段から比べると圧倒的に安いことがわかった。1%でも競争力が十分ありそうなのに0.1%前後で送金することが大半である。
健全な市場発展のためには、ルーティングノードの採算が取れていることが欠かせないと考えるが、残念ながら現在の収益性は低い。ルーティングノードの収益性は仮定に仮定を重ねた見積もりになるが、平均アウトバウンドが1000ppmでようやく個人でも参入できるレベルになるという結論になった。ルーティングノードの立場に立つと、現在の市場平均から大幅な上昇が必要だと考える。
手数料市場は競争のためつねに下方圧力がかかっていて仕様上で可能な0に近づいている。この重力に逆らうためには、1. 需要 > 供給のバランスになること、2. 事業用途での高額買取のチャネルが増えること、の2つの観点を挙げる。1にせよ2にせよネットワークの活用が進むことで発生し、手数料市場の大きな変動機会になるのではないか。他の決済手段と比較すれば10000ppm、1チャネル2500ppmあたりまでは十分に健全な範囲だと考える。
-
@ 3589b793:ad53847e
2025-04-30 10:53:29※本記事は別サービスで2022年5月22日に公開した記事の移植です。
Happy 🍕 Day's Present
まだ邦訳版が出版されていませんがこれまでのシリーズと同じくGitHubにソースコードが公開されています。なんと、現在のライセンスでは個人使用限定なら翻訳や製本が可能です。Macで、翻訳にはPDFをインプットにできるDeepLを用いた環境で、インスタントに製本してKindleなどで読めるようにする方法をまとめました。
手順の概要
- Ruby環境を用意する
- PDF作成ツールをセットアップする
- GitHubのリポジトリを自分のPCにクローンする
- asciidocをPDFに変換する
- DeepLを節約するためにPDFを結合する
- DeepLで翻訳ファイルを作る
- 一冊に製本する
この手法の強み・弱み
翻訳だけならPDFを挟まなくてもGithubなどでプレビューできるコンパイル後のドキュメントの文章をコピーしてDeepLのWebツールにペーストすればよいですが、原著のペーパーブックで438ページある大容量です。熟練のコピペ職人でも年貢を納めて後進(機械やソフトウェア)に道を譲る刻ではないでしょうか?ただし、Pros/Consがあります。
Pros
- 一冊の本になるので毎度のコピペ作業がいらない
- Pizzaを食べながらタブレットやKindleで読める
- 図や表が欠落しない(プロトコルの手順を追った解説が多いため最大の動機でした)
- 2022/6/16追記: DeepLの拡張機能がアップデートされウェブページの丸ごと翻訳が可能になりました。よってウェブ上のgithubの図表付きページをそのまま翻訳できます。
Cons
- Money is power(大容量のためDeepLの有料契約が必要)
- ページを跨いだ文章が統合されずに不自然な翻訳になる(仕様です)
- ~~翻訳できない章が一つある(解決方法がないか調査中です。DeepLさんもっとエラーメッセージ出してくれ。Help me)~~ DeepLサポートに投げたら翻訳できるようになりました。
詳細ステップ
0.Ruby環境を用意する
asciidoctorも新しく入れるなら最新のビルドで良いでしょう。
1.PDF作成ツールをセットアップする
$ gem install asciidoctor asciidoctor-pdf $ brew install gs
2.GitHubのリポジトリを自分のPCにクローンする
どこかの作業ディレクトリで以下を実行する
$ git clone git@github.com:lnbook/lnbook.git $ cd lnbook
3.asciidocをPDFに変換する
ワイルドカードを用いて本文を根こそぎPDF化します。
$ asciidoctor-pdf 0*.asciidoc 1*.asciidoc
いろいろ解析の警告が出ますが、ソースのasciidocを弄んでいくなりawsomeライブラリを導入すれば解消できるはずです。しかし如何せん量が多いので心が折れます。いったん無視して"Done is better than perfect"精神で最後までやり切りましょう。そのままGO!
また、お好みに合わせて、htmlで用意されている装丁用の部品も準備しましょう。私は表紙のcover.htmlをピックしました。ソースがhtmlなのでasciidoctorを通さず普通にPDFへ変換します。https://qiita.com/chenglin/items/9c4ed0dd626234b71a2c
4.DeepLを節約するためにPDFを結合する
DeepLでは課金プラン毎に翻訳可能なファイル数が設定されている上に、一本あたりの最大ファイルサイズが10MBです。また、翻訳エラーになる章が含まれていると丸ごとコケます。そのためPDCAサイクルを回し、最適なファイル数を手探りで見つけます。以下が今回導出した解となります。
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output_1.pdf 01_introduction.pdf 02_getting_started.pdf 03_how_ln_works.pdf 04_node_client.pdf 05_node_operations.pdf
$gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output_2_1.pdf 06_lightning_architecture.pdf 07_payment_channels.pdf 08_routing_htlcs.pdf
$gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output_2_2.pdf 09_channel_operation.pdf 10_onion_routing.asciidoc$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output_3.pdf 11_gossip_channel_graph.pdf 12_path_finding.pdf 13_wire_protocol.pdf 14_encrypted_transport.pdf 15_payment_requests.pdf 16_security_privacy_ln.pdf 17_conclusion.pdf
5. DeepLで翻訳ファイルを作る
PDFファイルを真心を込めた手作業で一つ一つDeepLにアップロードしていき翻訳ファイルを作ります。ファイル名はデフォルトの
[originalName](日本語).pdf
のままにしています。6. 一冊に製本する
表紙 + 本文で作成する例です。
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=mastering_ln_jp.pdf cover.pdf "output_1 (日本語).pdf" "output_2_1 (日本語).pdf" "output_2_2 (日本語).pdf" "output_3 (日本語).pdf"
コングラチュレーションズ🎉
あなたは『Mastering the Lightning Network』の日本語版を手に入れた!個人使用に限り、あとは煮るなり焼くなりEPUBなりkindleへ送信するなり好き放題だ。
-
@ f11e91c5:59a0b04a
2025-04-30 07:52:21!!!2022-07-07に書かれた記事です。
暗号通貨とかでお弁当売ってます 11:30〜14:00ぐらいでやってます
◆住所 木曜日・東京都渋谷区宇田川町41 (アベマタワーの下らへん)
◆お値段
Monacoin 3.9mona
Bitzeny 390zny
Bitcoin 3900sats (#lightningNetwork)
Ethereum 0.0039Ether(#zkSync)
39=thank you. (円を基準にしてません)
最近は週に一回になりました。 他の日はキッチンカーの現場を探したり色々してます。 東京都内で平日ランチ出店出来そうな場所があればぜひご連絡を!
写真はNFCタグです。 スマホにウォレットがあればタッチして3900satsで決済出来ます。 正直こんな怪しい手書きのNFCタグなんて絶対にビットコイナーは触りたくも無いだろうなと思いますが、これでも良いんだぜというメッセージです。
今までbtcpayのposでしたが速度を追求してこれに変更しました。 たまに上手くいかないですがそしたら渋々POS出すので温かい目でよろしくお願いします。
ノードを建てたり決済したりで1年経ちました。 最近も少しずつノードを建てる方が増えてるみたいで本当凄いですねUmbrel 大体の人がルーティングに果敢に挑むのを見つつ 奥さんに土下座しながら費用を捻出する弱小の私は決済の利便性を全開で振り切るしか無いので応援よろしくお願いします。
あえて あえて言うのであれば、ルーティングも楽しいですけど やはり本当の意味での即時決済や相手を選んでチャネルを繋げる楽しさもあるよとお伝えしたいっ!! 決済を受け入れないと分からない所ですが 承認がいらない時点で画期的です。
QRでもタッチでも金額指定でも入力でも もうやりようには出来てしまうし進化が恐ろしく早いので1番利用の多いpaypayの手数料(事業者側のね)を考えたらビットコイン凄いじゃない!と叫びたくなる。 が、やはり税制面や価格の変動(うちはBTC固定だけども)ウォレットの操作や普及率を考えるとまぁ難しい所もあるんですかね。
それでも継続的に沢山の人が色んな活動をしてるので私も何か出来ることがあれば 今後も奥さんに土下座しながら頑張って行きたいと思います。
(Originally posted 2022-07-07)
I sell bento lunches for cryptocurrency. We’re open roughly 11:30 a.m. – 2:00 p.m. Address Thursdays – 41 Udagawa-chō, Shibuya-ku, Tokyo (around the base of Abema Tower)
Prices Coin Price Note Monacoin 3.9 MONA
Bitzeny 390 ZNY Bitcoin 3,900 sats (Lightning Network)
Ethereum 0.0039 ETH (zkSync) “39” sounds like “thank you” in Japanese. Prices aren’t pegged to yen.These days I’m open only once a week. On other days I’m out scouting new spots for the kitchen-car. If you know weekday-lunch locations inside Tokyo where I could set up, please let me know!
The photo shows an NFC tag. If your phone has a Lightning wallet, just tap and pay 3,900 sats. I admit this hand-written NFC tag looks shady—any self-respecting Bitcoiner probably wouldn’t want to tap it—but the point is: even this works!
I used to run a BTCPay POS, but I switched to this setup for speed. Sometimes the tap payment fails; if that happens I reluctantly pull out the old POS. Thanks for your patience.
It’s been one year since I spun up a node and started accepting Lightning payments. So many people are now running their own nodes—Umbrel really is amazing. While the big players bravely chase routing fees, I’m a tiny operator scraping together funds while begging my wife for forgiveness, so I’m all-in on maximising payment convenience. Your support means a lot!
If I may add: routing is fun, but instant, trust-minimised payments and the thrill of choosing whom to open channels with are just as exciting. You’ll only understand once you start accepting payments yourself—zero-confirmation settlement really is revolutionary.
QR codes, NFC taps, fixed amounts, manual entry… the possibilities keep multiplying, and the pace of innovation is scary fast. When I compare it to the merchant fees on Japan’s most-used service, PayPay, I want to shout: “Bitcoin is incredible!” Sure, taxes, price volatility (my shop is BTC-denominated, though), wallet UX, and adoption hurdles are still pain points.
Even so, lots of people keep building cool stuff, so I’ll keep doing what I can—still on my knees to my wife, but moving forward!
-
@ fd0bcf8c:521f98c0
2025-04-29 13:38:49The vag' sits on the edge of the highway, broken, hungry. Overhead flies a transcontinental plane filled with highly paid executives. The upper class has taken to the air, the lower class to the roads: there is no longer any bond between them, they are two nations."—The Sovereign Individual
Fire
I was talking to a friend last night. Coffee in hand. Watching flames consume branches. Spring night on his porch.
He believed in America's happy ending. Debt would vanish. Inflation would cool. Manufacturing would return. Good guys win.
I nodded. I wanted to believe.
He leaned forward, toward the flame. I sat back, watching both fire and sky.
His military photos hung inside. Service medals displayed. Patriotism bone-deep.
The pendulum clock on his porch wall swung steadily. Tick. Tock. Measuring moments. Marking epochs.
History tells another story. Not tragic. Just true.
Our time has come. America cut off couldn't compete. Factories sit empty. Supply chains span oceans. Skills lack. Children lag behind. Rebuilding takes decades.
Truth hurts. Truth frees.
Cycles
History moves in waves. Every 500 years, power shifts. Systems fall. Systems rise.
500 BC - Greek coins changed everything. Markets flourished. Athens dominated.
1 AD - Rome ruled commerce. One currency. Endless roads. Bustling ports.
500 AD - Rome faded. Not overnight. Slowly. Trade withered. Cities emptied. Money debased. Roads crumbled. Local strongmen rose. Peasants sought protection. Feudalism emerged.
People still lived. Still worked. Horizons narrowed. Knowledge concentrated. Most barely survived. Rich adapted. Poor suffered.
Self-reliance determined survival. Those growing food endured. Those making essential goods continued. Those dependent on imperial systems suffered most.
1000 AD - Medieval revival began. Venice dominated seas. China printed money. Cathedrals rose. Universities formed.
1500 AD - Europeans sailed everywhere. Spanish silver flowed. Banks financed kingdoms. Companies colonized continents. Power moved west.
The pendulum swung. East to West. West to East. Civilizations rose. Civilizations fell.
2000 AD - Pattern repeats. America strains. Digital networks expand. China rises. Debt swells. Old systems break.
We stand at the hinge.
Warnings
Signs everywhere. Dollar weakens globally. BRICS builds alternatives. Yuan buys oil. Factories rust. Debt exceeds GDP. Interest consumes budgets.
Bridges crumble. Education falters. Politicians chase votes. We consume. We borrow.
Rome fell gradually. Citizens barely noticed. Taxes increased. Currency devalued. Military weakened. Services decayed. Life hardened by degrees.
East Rome adapted. Survived centuries. West fragmented. Trade shrank. Some thrived. Others suffered. Life changed permanently.
Those who could feed themselves survived best. Those who needed the system suffered worst.
Pendulum
My friend poured another coffee. The burn pile popped loudly. Sparks flew upward like dying stars.
His face changed as facts accumulated. Military man. Trained to assess threats. Detect weaknesses.
He stared at the fire. National glory reduced to embers. Something shifted in his expression. Recognition.
His fingers tightened around his mug. Knuckles white. Eyes fixed on dying flames.
I traced the horizon instead. Observing landscape. Noting the contrast.
He touched the flag on his t-shirt. I adjusted my plain gray one.
The unpayable debt. The crumbling infrastructure. The forgotten manufacturing. The dependent supply chains. The devaluing currency.
The pendulum clock ticked. Relentless. Indifferent to empires.
His eyes said what his patriotism couldn't voice. Something fundamental breaking.
I'd seen this coming. Years traveling showed me. Different systems. Different values. American exceptionalism viewed from outside.
Pragmatism replaced my old idealism. See things as they are. Not as wished.
The logs shifted. Flames reached higher. Then lower. The cycle of fire.
Divergence
Society always splits during shifts.
Some adapt. Some don't.
Printing arrived. Scribes starved. Publishers thrived. Information accelerated. Readers multiplied. Ideas spread. Adapters prospered.
Steam engines came. Weavers died. Factory owners flourished. Villages emptied. Cities grew. Coal replaced farms. Railways replaced wagons. New skills meant survival.
Computers transformed everything. Typewriters vanished. Software boomed. Data replaced paper. Networks replaced cabinets. Programmers replaced typists. Digital skills determined success.
The self-reliant thrived in each transition. Those waiting for rescue fell behind.
Now AI reshapes creativity. Some artists resist. Some harness it. Gap widens daily.
Bitcoin offers refuge. Critics mock. Adopters build wealth. The distance grows.
Remote work redraws maps. Office-bound struggle. Location-free flourish.
The pendulum swings. Power shifts. Some rise with it. Some fall against it.
Two societies emerge. Adaptive. Resistant. Prepared. Pretending.
Advantage
Early adapters win. Not through genius. Through action.
First printers built empires. First factories created dynasties. First websites became giants.
Bitcoin followed this pattern. Laptop miners became millionaires. Early buyers became legends.
Critics repeat themselves: "Too volatile." "No value." "Government ban coming."
Doubters doubt. Builders build. Gap widens.
Self-reliance accelerates adaptation. No permission needed. No consensus required. Act. Learn. Build.
The burn pile flames like empire's glory. Bright. Consuming. Temporary.
Blindness
Our brains see tigers. Not economic shifts.
We panic at headlines. We ignore decades-long trends.
We notice market drops. We miss debt cycles.
We debate tweets. We ignore revolutions.
Not weakness. Just humanity. Foresight requires work. Study. Thought.
Self-reliant thinking means seeing clearly. No comforting lies. No pleasing narratives. Just reality.
The clock pendulum swings. Time passes regardless of observation.
Action
Empires fall. Families need security. Children need futures. Lives need meaning.
You can adapt faster than nations.
Assess honestly. What skills matter now? What preserves wealth? Who helps when needed?
Never stop learning. Factory workers learned code. Taxi drivers joined apps. Photographers went digital.
Diversify globally. No country owns tomorrow. Learn languages. Make connections. Stay mobile.
Protect your money. Dying empires debase currencies. Romans kept gold. Bitcoin offers similar shelter.
Build resilience. Grow food. Make energy. Stay strong. Keep friends. Read old books. Some things never change.
Self-reliance matters most. Can you feed yourself? Can you fix things? Can you solve problems? Can you create value without systems?
Movement
Humans were nomads first. Settlers second. Movement in our blood.
Our ancestors followed herds. Sought better lands. Survival meant mobility.
The pendulum swings here too. Nomad to farmer. City-dweller to digital nomad.
Rome fixed people to land. Feudalism bound serfs to soil. Nations created borders. Companies demanded presence.
Now technology breaks chains. Work happens anywhere. Knowledge flows everywhere.
The rebuild America seeks requires fixed positions. Factory workers. Taxpaying citizens in permanent homes.
But technology enables escape. Remote work. Digital currencies. Borderless businesses.
The self-reliant understand mobility as freedom. One location means one set of rules. One economy. One fate.
Many locations mean options. Taxes become predatory? Leave. Opportunities disappear? Find new ones.
Patriotism celebrates roots. Wisdom remembers wings.
My friend's boots dug into his soil. Planted. Territorial. Defending.
My Chucks rested lightly. Ready. Adaptable. Departing.
His toolshed held equipment to maintain boundaries. Fences. Hedges. Property lines.
My backpack contained tools for crossing them. Chargers. Adapters. Currency.
The burn pile flame flickers. Fixed in place. The spark flies free. Movement its nature.
During Rome's decline, the mobile survived best. Merchants crossing borders. Scholars seeking patrons. Those tied to crumbling systems suffered most.
Location independence means personal resilience. Economic downturns become geographic choices. Political oppression becomes optional suffering.
Technology shrinks distance. Digital work. Video relationships. Online learning.
Self-sovereignty requires mobility. The option to walk away. The freedom to arrive elsewhere.
Two more worlds diverge. The rooted. The mobile. The fixed. The fluid. The loyal. The free.
Hope
Not decline. Transition. Painful but temporary.
America may weaken. Humanity advances. Technology multiplies possibilities. Poverty falls. Knowledge grows.
Falling empires see doom. Rising ones see opportunity. Both miss half the picture.
Every shift brings destruction and creation. Rome fell. Europe struggled. Farms produced less. Cities shrank. Trade broke down.
Yet innovation continued. Water mills appeared. New plows emerged. Monks preserved books. New systems evolved.
Different doesn't mean worse for everyone.
Some industries die. Others birth. Some regions fade. Others bloom. Some skills become useless. Others become gold.
The self-reliant thrive in any world. They adapt. They build. They serve. They create.
Choose your role. Nostalgia or building.
The pendulum swings. East rises again. The cycle continues.
Fading
The burn pile dimmed. Embers fading. Night air cooling.
My friend's shoulders changed. Tension releasing. Something accepted.
His patriotism remained. His illusions departed.
The pendulum clock ticked steadily. Measuring more than minutes. Measuring eras.
Two coffee cups. His: military-themed, old and chipped but cherished. Mine: plain porcelain, new and unmarked.
His eyes remained on smoldering embers. Mine moved between him and the darkening trees.
His calendar marked local town meetings. Mine tracked travel dates.
The last flame flickered out. Spring peepers filled the silence.
In darkness, we watched smoke rise. The world changing. New choices ahead.
No empire lasts forever. No comfort in denial. Only clarity in acceptance.
Self-reliance the ancient answer. Build your skills. Secure your resources. Strengthen your body. Feed your mind. Help your neighbors.
The burn pile turned to ash. Empire's glory extinguished.
He stood facing his land. I faced the road.
A nod between us. Respect across division. Different strategies for the same storm.
He turned toward his home. I toward my vehicle.
The pendulum continued swinging. Power flowing east once more. Five centuries ending. Five centuries beginning.
"Bear in mind that everything that exists is already fraying at the edges." — Marcus Aurelius
Tomorrow depends not on nations. On us.
-
@ 83279ad2:bd49240d
2025-04-29 05:53:52test
-
@ 78b3c1ed:5033eea9
2025-04-29 04:04:19Umbrel Core-lightning(以下CLNと略す)を運用するにあたり役に立ちそうなノウハウやメモを随時投稿します。
・configファイルを用意する Umbrelのアプリとして必要な設定はdocker-compose.ymlで指定されている。 それ以外の設定をしたい場合configファイルに入れると便利。 configファイルの置き場所は /home/umbrel/umbrel/app-data/core-lightning/data/lightningd ここにtouch configとでもやってファイルをつくる。
cd /home/umbrel/umbrel/app-data/core-lightning/data/lightningd touch config
以下内容をひな型として使ってみてください。 行頭に#があるとコメント行になります。つまり.iniフォーマット。 /home/umbrel/umbrel/app-data/core-lightning/data/lightningd/config ```[General options]
[Bitcoin control options]
[Lightning daemon options]
[Lightning node customization options]
[Lightning channel and HTLC options]
[Payment control options]
[Networking options]
[Lightning Plugins]
[Experimental Options]
``` configに設定できる内容は以下を参照 https://lightning.readthedocs.io/lightningd-config.5.html セクションを意味する[]があるけれどもこれは私(tanakei)が意図的に見やすく区別しやすくするために付けただけ。これら行の#は外さない。
・configの設定をCLNに反映させる appスクリプトでCLNを再起動すると反映することができる。 configを書き換えただけでは反映されない。
cd /home/umbrel/umbrel/scripts ./app restart core-lightning
・ログをファイルに出力させる
以下の場所でtouch log.txtとしてlog.txtファイルを作る。 /home/umbrel/umbrel/app-data/core-lightning/data/lightningd
cd /home/umbrel/umbrel/app-data/core-lightning/data/lightningd touch log.txt
次にconfigの[Lightning daemon options]セクションにlog-fileを追加する。 ```[Lightning daemon options]
log-file=/data/.lightning/log.txt ``` ※Dockerによって/home/umbrel/umbrel/app-data/core-lightning/data/lightningd は /data/.lightning として使われている。
・addrとbind-addrの違い どちらも着信用のインターフェースとポートの設定。addrは指定したホストIPアドレス:ポート番号をノードURIに含めて公開する(node_announcementのuris)。bind-addrは公開しない。
・実験的機能のLN Offerを有効にする configの[Experimental Options]セクションに以下を追加する。 ```
[Experimental Options]
experimental-onion-messages experimental-offers ``` ※ v24.08でexperimental-onion-messageは廃止されデフォルト有効であり、上記設定の追加は不要になりました。 ※ v21.11.1 では experimental-offersは廃止されデフォルト有効であり、上記設定の追加は不要になりました。 もう実験扱いじゃなくなったのね...
・完全にTorでの発信オンリーにする UmbrelはなぜかCLNの発信をClearnetとTorのハイブリッドを許している。それは always-use-proxy=true の設定がないから。(LNDは発着信Torのみなのに) なのでこの設定をconfigに追加してCLNも発着進Torのみにする。 ```
[Networking options]
always-use-proxy=true ```
・任意のニーモニックからhsm_secretを作る CLNのhsm_secretはLNDのwallet.dbのようなもの。ノードで使う様々な鍵のマスター鍵となる。Umbrel CLNはこのhsm_secretファイルを自動生成したものを使い、これをバックアップするためのニーモニックを表示するとかそういう機能はない。自分で作って控えてあるニーモニックでhsm_secretを作ってしまえばこのファイルが壊れてもオンチェーン資金は復旧はできる。
1.CLNインストール後、dockerコンテナに入る
docker exec -it core-lightning_lightningd_1 bash
2.lightning-hsmtoolコマンドを使って独自hsm_secretを作る ``` cd data/.lightning/bitcoin lightning-hsmtool generatehsm my-hsm_secret・上記コマンドを実行するとニーモニックの言語、ニーモニック、パスフレーズの入力を催促される。 Select your language: 0) English (en) 1) Spanish (es) 2) French (fr) 3) Italian (it) 4) Japanese (jp) 5) Chinese Simplified (zhs) 6) Chinese Traditional (zht) Select [0-7]: 0 ※定番の英単語なら0を入力 Introduce your BIP39 word list separated by space (at least 12 words): <ニーモニックを入力する> Warning: remember that different passphrases yield different bitcoin wallets. If left empty, no password is used (echo is disabled). Enter your passphrase: <パスフレーズを入力する> ※パスフレーズ不要ならそのままエンターキーを押す。 New hsm_secret file created at my-hsm_secret Use the
encrypt
command to encrypt the BIP32 seed if neededコンテナから抜ける exit
3.appスクリプトでCLNを止めて、独自hsm_secret以外を削除 ※【重要】いままで使っていたhsm_secretを削除する。もしチャネル残高、ウォレット残高があるならチャネルを閉じて資金を退避すること。自己責任!
cd ~/umbrel/scripts/ ./app stop core-lightningcd ~/umbrel/app-data/core-lightning/data/lightningd/bitcoin rm gossip_store hsm_secret lightningd.sqlite3 lightning-rpc mv my-hsm_secret hsm_secret
4.appスクリプトでCLNを再開する
cd ~/umbrel/scripts/ ./app start core-lightning ```【補記】 hsm_secret作成につかうニーモニックはBIP39で、LNDのAezeedと違って自分が作成されたブロック高さというものを含んでいない。新規でなくて復元して使う場合は作成されたブロック高さからブロックチェーンをrescanする必要がある。 configの1行目にrescanオプションを付けてCLNをリスタートする。 ``` // 特定のブロック高さを指定する場合はマイナス記号をつける rescan=-756000
// 現在のブロック高さから指定ブロック分さかのぼった高さからrescanする rescan=10000 ※現在の高さが760,000なら10000指定だと750,000からrescan ```
・clnrestについて core-lightningでREST APIを利用したい場合、別途c-lightning-restを用意する必要があった。v23.8から標準でclnrestというプラグインがついてくる。pythonで書かれていて、ソースからビルドした場合はビルド完了後にpip installでインストールする。elementsproject/lightningdのDockerイメージではインストール済みになっている。 (v25.02からgithubからバイナリをダウンロードしてきた場合はpip install不要になったようだ) このclnrestを使うにはcreaterunesコマンドでruneというLNDのマカロンのようなものを作成する必要がある。アプリ側でこのruneとREST APIを叩いてcore-lightningへアクセスすることになる。 自分が良く使っているLNbitsやスマホアプリZeus walletはclnrestを使う。まだclnrestに対応していないアプリもあるので留意されたし。
・Emergency recoverについて LNDのSCBのようなもの。ファイル名はemergency.recover チャネルを開くと更新される。 hsm_secretとこのファイルだけを置いてCLNを開始すると自動でこのファイルから強制クローズするための情報が読み出されてDLPで相手から強制クローズするような仕組み。この機能はv0.12から使える。
動作確認してみた所、LNDのSCBに比べるとかなり使いづらい。 1. CLNがTor発信だとチャネルパートナーと接続できない。 Clearnet発信できても相手がTorのみノードならTor発信せざるを得ない。 相手と通信できなければ資金回収できない。 2. 相手がLNDだとなぜか強制クローズされない。相手がCLNならできる。
つまり、自分と相手がClearnetノードでかつ相手もCLNならば Emergency recoverで強制クローズして資金回収できる。こんな条件の厳しい復旧方法がマジで役に立つのか?
v0.11以降ならばLNDのchannel.dbに相当するlightningd.sqlite3をプライマリ・セカンダリDBと冗長化できるので、セカンダリDBをNFSで保存すればUmbrelのストレージが壊れてもセカンダリDBで復旧できる。そのためemergerncy.recoverを使う必要がないと思われる。
・LN offer(BOLT#12)ついて 使いたいなら 1.publicチャネルを開く publicチャネルを開けばチャネルとノードの情報(channel_announcement, node_announcement)が他ノードに伝わる。送金したい相手がこの情報を元に経路探索する。 2.その後しばらく待つ CLNノードを立てたばかりだと経路探索するに十分なチャネルとノードの情報が揃ってない。せめて1日は待つ。
LNURLの場合インボイスをhttpsで取得するが、OfferはLN経由で取得する。そのためにチャネルとノードの情報が必要。privateチャネルばかりのノードはチャネル情報もそうだがノード情報も出さない。 Offerで使えるBlind pathという機能なら中間ノードIDを宛先ノードとすることが可能で、これならチャネルとノード情報を公開しなくても受けとれるのだがCLNは対応してない模様(2025年1月現在) CLNでOfferで受け取るにはチャネルとノード情報を公開する必要がある。そのためpublicチャネルを開く。公開されていれば良いのでTorでもOK。クリアネットで待ち受けは必須ではない。
・hsm_sercretとニーモニック lightning-hsmtoolを使うとニーモニックからhsm_secretを作れる。ニーモニックからシードを作ると64バイト。これはニーモニックおよびソルトにパスフレーズをPBKDF2(HMAC-SHA512を2048回)にかけると512ビット(64バイト)のシードができる。しかしhsm_secretは32バイト。CLNでは64バイトの最初の32バイトをhsm_secretとして利用しているみたい。 このhsm_secretにHMAC-SHA512をかけて512ビットとした値がウォレットのマスター鍵となる。なのでhsm_secret自体がBIP-32でいうマスターシードそのものではない。 sparrow walletにCLNのウォレットを復元したい場合は lightning-hsmtool dumponchaindescriptors --show-secrets
とやってディスクリプターウォレットを出力。出力内容にマスター鍵(xprv~)があるので、これをインポートする。導出パス設定はm/0とする。sparrowが残りを補完してm/0/0/0, m/0/0/1とやってくれる。 <おまけ> configファイルのサンプル。Umbrelを使わない場合は以下のサンプルが役に立つはず。上記のelementsproject/lightningdならば/root/.lightningに任意のディレクトリをマウントしてそのディレクトリにconfigを置く。 ```
[General options]
不可逆なDBアップグレードを許可しない
database-upgrade=false
[Bitcoin control options]
network=bitcoin bitcoin-rpcconnect=
bitcoin-rpcport= bitcoin-rpcuser= bitcoin-rpcpassword= [Lightning daemon options]
postgresを使う場合
wallet=postgres://USER:PASSWORD@HOST:PORT/DB_NAME
bookkeeper-db=postgres://USER:PASSWORD@HOST:PORT/DB_NAME
sqlite3を使う場合。デフォルトはこちらで以下の設定が無くても~/.lightning/bitconに自動で作成される。
wallet=sqlite3:///home/USERNAME/.lightning/bitcoin/lightningd.sqlite3
bookkeeper-db=sqlite3:///home/USERNAME/.lightning/bitcoin/accounts.sqlite3
ログファイルは自動で作成されない
log-file=/home/USERNAME/.lightning/lightningd-log
log-level=debug
[Lightning node customization options]
alias=
rgb= 固定手数料。ミリサトシで指定。
fee-base=1000000
変動手数料。ppmで指定。
fee-per-satoshi=0
最小チャネルキャパシティ(sats)
min-capacity-sat=100000
HTLC最少額。ミリサトシで指定。
htlc-minimum-msat=1000
[Lightning channel and HTLC options]
large-channels # v23.11よりデフォルトでラージチャネルが有効。
チャネル開設まで6承認
funding-confirms=6
着信できるHTLCの数。開いたら変更できない。1~483 (デフォルトは 30) の範囲にする必要があります
max-concurrent-htlcs=INTEGER
アンカーチャネルを閉じるためにウォレットに保持しておく資金。デフォルトは 25,000sat
チャネルを"忘れる(forget)"するまではリザーブされる模様。forgetはチャネル閉じてから100ブロック後
min-emergency-msat=10000000
[Cleanup control options]
autoclean-cycle=3600 autoclean-succeededforwards-age=0 autoclean-failedforwards-age=0 autoclean-succeededpays-age=0 autoclean-failedpays-age=0 autoclean-paidinvoices-age=0 autoclean-expiredinvoices-age=0
[Payment control options]
disable-mpp
[Networking options]
bind-addrだとアナウンスしない。
bind-addr=0.0.0.0:9375
tor
proxy=
: always-use-proxy=true Torの制御ポート。addr=statictor だとhidden serviceをノードURIとして公開する。
addr=statictor:
: tor-service-password= experimental-websocket-portは廃止された。bind-addr=ws:が代替。
bind-addr=ws:
:2106 clnrestプラグイン, REST API
clnrest-host=0.0.0.0 clnrest-port=3010 clnrest-protocol=http
v24.11よりgrpcはデフォルト有効
grpc-host=0.0.0.0 grpc-port=9736
[Lightning Plugins]
[Experimental Options]
experimental-onion-messages # v24.08で廃止。デフォルト有効
experimental-offers # v24.11.1で廃止。デフォルト有効
流動性広告からチャネルを開くときにexperimental-dual-fundが必要らしい。
experimental-dual-fund
experimental-splicing
experimental-peer-storage
```
-
@ 78b3c1ed:5033eea9
2025-04-27 01:48:48※スポットライトから移植した古い記事です。参考程度に。
これを参考にしてUmbrelのBitcoin Nodeをカスタムsignetノードにする。 以下メモ書きご容赦。備忘録程度に書き留めました。
メインネットとは共存できない。Bitcoinに依存する全てのアプリを削除しなければならない。よって実験機に導入すべき。
<手順>
1.Umbrel Bitcoin Nodeアプリのadvance settingでsignetを選択。
2.CLI appスクリプトでbitcoinを止める。
cd umbrel/scripts ./app stop bitcoin
3.bitcoin.conf, umbrel-bitcoin.conf以外を削除ディレクトリの場所は ~/umbrel/app-data/bitcoin/data/bitcoin
4.umbrel-bitcoin.confをsu権限で編集。末尾にsignetchallengeを追加。 ``` [signet] bind=0.0.0.0:8333 bind=10.21.21.8:8334=onion51,21,<公開鍵>,51,ae
signetchallenge=5121<公開鍵>51ae
5.appスクリプトでbitcoinを開始。
cd ~/umbrel/scripts ./app start bitcoin ``` 6.適当にディレクトリを作りgithubからbitcoindのソースをクローン。7.bitcoindのバイナリをダウンロード、bitcoin-cliおよびbitcoin-utilを~/.local/binに置く。6.のソースからビルドしても良い。ビルド方法は自分で調べて。
8.bitcondにマイニング用のウォレットを作成 ``` alias bcli='docker exec -it bitcoin_bitcoind_1 bitcoin-cli -signet -rpcconnect=10.21.21.8 -rpcport=8332 -rpcuser=umbrel -rpcpassword=<パスワード>'
ウォレットを作る。
bcli createwallet "mining" false true "" false false
秘密鍵をインポート
bcli importprivkey "<秘密鍵>"
RPCパスワードは以下で確認
cat ~/umbrel/.env | grep BITCOIN_RPC_PASS9.ソースにあるbitcoin/contrib/signet/minerスクリプトを使ってマイニング
cd <ダウンロードしたディレクトリ>/bitcoin/contrib/signet難易度の算出
./miner \ --cli="bitcoin-cli -signet -rpcconnect=10.21.21.8 -rpcport=8332 -rpcuser=umbrel -rpcpassword=<パスワード>" calibrate \ --grind-cmd="bitcoin-util grind" --seconds 30 ★私の環境で30秒指定したら nbits=1d4271e7 と算出された。実際にこれで動かすと2分30になるけど...
ジェネシスブロック生成
./miner \ --cli="bitcoin-cli -signet -rpcconnect=10.21.21.8 -rpcport=8332 -rpcuser=umbrel -rpcpassword=<パスワード>" generate \ --address <ビットコインアドレス> \ --grind-cmd="bitcoin-util grind" --nbits=1d4271e7 \ --set-block-time=$(date +%s)
継続的にマイニング
./miner \ --cli="bitcoin-cli -signet -rpcconnect=10.21.21.8 -rpcport=8332 -rpcuser=umbrel -rpcpassword=<パスワード>" generate \ --address <ビットコインアドレス> \ --grind-cmd="bitcoin-util grind" --nbits=1d4271e7 \ --ongoing ``` ここまでやればカスタムsignetでビットコインノードが稼働する。
-
@ 78b3c1ed:5033eea9
2025-04-27 01:42:48・ThunderHubで焼いたマカロンがlncli printmacaroonでどう見えるか確認した。
ThunderHub macaroon permissions
get invoices invoices:read create invoices invoices:write get payments offchain:read pay invoices offchain:write get chain transactions onchain:read send to chain address onchain:write create chain address address:write get wallet info info:read stop daemon info:write この結果によれば、offchain:wirteとonchain:writeの権限がなければそのマカロンを使うクライアントは勝手にBTCを送金することができない。 info:writeがなければ勝手にLNDを止めたりすることができない。
・lncli printmacaroonでデフォルトで作られるmacaroonのpermissionsを調べてみた。 admin.macaroon
{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "address:read", "address:write", "info:read", "info:write", "invoices:read", "invoices:write", "macaroon:generate", "macaroon:read", "macaroon:write", "message:read", "message:write", "offchain:read", "offchain:write", "onchain:read", "onchain:write", "peers:read", "peers:write", "signer:generate", "signer:read" ], "caveats": null }
chainnotifier.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "onchain:read" ], "caveats": null }
invoice.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "address:read", "address:write", "invoices:read", "invoices:write", "onchain:read" ], "caveats": null }
invoices.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "invoices:read", "invoices:write" ], "caveats": null }
readonly.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "address:read", "info:read", "invoices:read", "macaroon:read", "message:read", "offchain:read", "onchain:read", "peers:read", "signer:read" ], "caveats": null }
router.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "offchain:read", "offchain:write" ], "caveats": null }
signer.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "signer:generate", "signer:read" ], "caveats": null }
walletkit.macaroon{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "address:read", "address:write", "onchain:read", "onchain:write" ], "caveats": null }
・lncli listpermissions コマンドですべての RPC メソッド URI と、それらを呼び出すために必要なマカロン権限を一覧表示できる。 LND v0.18.5-betaでやると1344行ほどのJSONができる。 AddInvoiceだとinvoice:writeのpermissionを持つmacaroonを使えばインボイスを作れるようだ。
"/lnrpc.Lightning/AddInvoice": { "permissions": [ { "entity": "invoices", "action": "write" } ] },
lncli listpermissionsからentityとactionを抜き出してみた。 ``` "entity": "address", "entity": "info", "entity": "invoices", "entity": "macaroon", "entity": "message", "entity": "offchain", "entity": "onchain", "entity": "peers", "entity": "signer","action": "generate" "action": "read" "action": "write"
lncli とjqを組み合わせると例えば以下コマンドでinvoices:writeを必要とするRPCの一覧を表示できる。 invoices:writeだとAddInvoiceの他にホドルインボイス作成でも使ってるようだ
lncli listpermissions | jq -r '.method_permissions | to_entries[] | select(.value.permissions[] | select(.entity == "invoices" and .action == "write")) | .key'/invoicesrpc.Invoices/AddHoldInvoice /invoicesrpc.Invoices/CancelInvoice /invoicesrpc.Invoices/HtlcModifier /invoicesrpc.Invoices/LookupInvoiceV2 /invoicesrpc.Invoices/SettleInvoice /lnrpc.Lightning/AddInvoice
invoices:readだと以下となる。
/invoicesrpc.Invoices/SubscribeSingleInvoice /lnrpc.Lightning/ListInvoices /lnrpc.Lightning/LookupInvoice /lnrpc.Lightning/SubscribeInvoicesLNの主だった機能のRPCはoffchainが必要ぽいので抜き出してみた。 offchain:write チャネルの開閉、ペイメントの送信までやってるみたい。 デフォルトのmacaroonでoffchain:writeを持ってるのはadminとrouterの2つだけ。openchannel,closechannelはonchain:writeのpermissionも必要なようだ。
/autopilotrpc.Autopilot/ModifyStatus /autopilotrpc.Autopilot/SetScores /lnrpc.Lightning/AbandonChannel /lnrpc.Lightning/BatchOpenChannel /lnrpc.Lightning/ChannelAcceptor /lnrpc.Lightning/CloseChannel /lnrpc.Lightning/DeleteAllPayments /lnrpc.Lightning/DeletePayment /lnrpc.Lightning/FundingStateStep /lnrpc.Lightning/OpenChannel /lnrpc.Lightning/OpenChannelSync /lnrpc.Lightning/RestoreChannelBackups /lnrpc.Lightning/SendCustomMessage /lnrpc.Lightning/SendPayment /lnrpc.Lightning/SendPaymentSync /lnrpc.Lightning/SendToRoute /lnrpc.Lightning/SendToRouteSync /lnrpc.Lightning/UpdateChannelPolicy /routerrpc.Router/HtlcInterceptor /routerrpc.Router/ResetMissionControl /routerrpc.Router/SendPayment /routerrpc.Router/SendPaymentV2 /routerrpc.Router/SendToRoute /routerrpc.Router/SendToRouteV2 /routerrpc.Router/SetMissionControlConfig /routerrpc.Router/UpdateChanStatus /routerrpc.Router/XAddLocalChanAliases /routerrpc.Router/XDeleteLocalChanAliases /routerrpc.Router/XImportMissionControl /wtclientrpc.WatchtowerClient/AddTower /wtclientrpc.WatchtowerClient/DeactivateTower /wtclientrpc.WatchtowerClient/RemoveTower /wtclientrpc.WatchtowerClient/TerminateSession"/lnrpc.Lightning/OpenChannel": { "permissions": [ { "entity": "onchain", "action": "write" }, { "entity": "offchain", "action": "write" } ] },
offchain:read readの方はチャネルやインボイスの状態を確認するためのpermissionのようだ。
/lnrpc.Lightning/ChannelBalance /lnrpc.Lightning/ClosedChannels /lnrpc.Lightning/DecodePayReq /lnrpc.Lightning/ExportAllChannelBackups /lnrpc.Lightning/ExportChannelBackup /lnrpc.Lightning/FeeReport /lnrpc.Lightning/ForwardingHistory /lnrpc.Lightning/GetDebugInfo /lnrpc.Lightning/ListAliases /lnrpc.Lightning/ListChannels /lnrpc.Lightning/ListPayments /lnrpc.Lightning/LookupHtlcResolution /lnrpc.Lightning/PendingChannels /lnrpc.Lightning/SubscribeChannelBackups /lnrpc.Lightning/SubscribeChannelEvents /lnrpc.Lightning/SubscribeCustomMessages /lnrpc.Lightning/VerifyChanBackup /routerrpc.Router/BuildRoute /routerrpc.Router/EstimateRouteFee /routerrpc.Router/GetMissionControlConfig /routerrpc.Router/QueryMissionControl /routerrpc.Router/QueryProbability /routerrpc.Router/SubscribeHtlcEvents /routerrpc.Router/TrackPayment /routerrpc.Router/TrackPaymentV2 /routerrpc.Router/TrackPayments /wtclientrpc.WatchtowerClient/GetTowerInfo /wtclientrpc.WatchtowerClient/ListTowers /wtclientrpc.WatchtowerClient/Policy /wtclientrpc.WatchtowerClient/Stats・おまけ1 RPCメソッド名にopenを含む要素を抽出するコマンド
lncli listpermissions | jq '.method_permissions | to_entries[] | select(.key | test("open"; "i"))'{ "key": "/lnrpc.Lightning/BatchOpenChannel", "value": { "permissions": [ { "entity": "onchain", "action": "write" }, { "entity": "offchain", "action": "write" } ] } } { "key": "/lnrpc.Lightning/OpenChannel", "value": { "permissions": [ { "entity": "onchain", "action": "write" }, { "entity": "offchain", "action": "write" } ] } } { "key": "/lnrpc.Lightning/OpenChannelSync", "value": { "permissions": [ { "entity": "onchain", "action": "write" }, { "entity": "offchain", "action": "write" } ] } }
・おまけ2 thunderhubで作ったmacaroonはテキストで出力されコピペして使うもので、macaroonファイルになってない。 HEXをmacaroonファイルにするには以下コマンドでできる。HEXをコピペして置換する。またYOURSの箇所を自分でわかりやすい名称に置換すると良い。
echo -n "HEX" | xxd -r -p > YOURS.macaroonthunderhubで"Create Invoices, Get Invoices, Get Wallet Info, Get Payments, Pay Invoices"をチェックして作ったmacaroonのpermissionsは以下となる。
{ "version": 2, "location": "lnd", "root_key_id": "0", "permissions": [ "info:read", "invoices:read", "invoices:write", "offchain:read", "offchain:write" ], "caveats": null } ``` offchain:writeはあるがonchain:writeがないのでチャネル開閉はできないはず。 -
@ 3bf0c63f:aefa459d
2025-04-25 18:55:52Report of how the money Jack donated to the cause in December 2022 has been misused so far.
Bounties given
March 2025
- Dhalsim: 1,110,540 - Work on Nostr wiki data processing
February 2025
- BOUNTY* NullKotlinDev: 950,480 - Twine RSS reader Nostr integration
- Dhalsim: 2,094,584 - Work on Hypothes.is Nostr fork
- Constant, Biz and J: 11,700,588 - Nostr Special Forces
January 2025
- Constant, Biz and J: 11,610,987 - Nostr Special Forces
- BOUNTY* NullKotlinDev: 843,840 - Feeder RSS reader Nostr integration
- BOUNTY* NullKotlinDev: 797,500 - ReadYou RSS reader Nostr integration
December 2024
- BOUNTY* tijl: 1,679,500 - Nostr integration into RSS readers yarr and miniflux
- Constant, Biz and J: 10,736,166 - Nostr Special Forces
- Thereza: 1,020,000 - Podcast outreach initiative
November 2024
- Constant, Biz and J: 5,422,464 - Nostr Special Forces
October 2024
- Nostrdam: 300,000 - hackathon prize
- Svetski: 5,000,000 - Latin America Nostr events contribution
- Quentin: 5,000,000 - nostrcheck.me
June 2024
- Darashi: 5,000,000 - maintaining nos.today, searchnos, search.nos.today and other experiments
- Toshiya: 5,000,000 - keeping the NIPs repo clean and other stuff
May 2024
- James: 3,500,000 - https://github.com/jamesmagoo/nostr-writer
- Yakihonne: 5,000,000 - spreading the word in Asia
- Dashu: 9,000,000 - https://github.com/haorendashu/nostrmo
February 2024
- Viktor: 5,000,000 - https://github.com/viktorvsk/saltivka and https://github.com/viktorvsk/knowstr
- Eric T: 5,000,000 - https://github.com/tcheeric/nostr-java
- Semisol: 5,000,000 - https://relay.noswhere.com/ and https://hist.nostr.land relays
- Sebastian: 5,000,000 - Drupal stuff and nostr-php work
- tijl: 5,000,000 - Cloudron, Yunohost and Fraidycat attempts
- Null Kotlin Dev: 5,000,000 - AntennaPod attempt
December 2023
- hzrd: 5,000,000 - Nostrudel
- awayuki: 5,000,000 - NOSTOPUS illustrations
- bera: 5,000,000 - getwired.app
- Chris: 5,000,000 - resolvr.io
- NoGood: 10,000,000 - nostrexplained.com stories
October 2023
- SnowCait: 5,000,000 - https://nostter.vercel.app/ and other tools
- Shaun: 10,000,000 - https://yakihonne.com/, events and work on Nostr awareness
- Derek Ross: 10,000,000 - spreading the word around the world
- fmar: 5,000,000 - https://github.com/frnandu/yana
- The Nostr Report: 2,500,000 - curating stuff
- james magoo: 2,500,000 - the Obsidian plugin: https://github.com/jamesmagoo/nostr-writer
August 2023
- Paul Miller: 5,000,000 - JS libraries and cryptography-related work
- BOUNTY tijl: 5,000,000 - https://github.com/github-tijlxyz/wikinostr
- gzuus: 5,000,000 - https://nostree.me/
July 2023
- syusui-s: 5,000,000 - rabbit, a tweetdeck-like Nostr client: https://syusui-s.github.io/rabbit/
- kojira: 5,000,000 - Nostr fanzine, Nostr discussion groups in Japan, hardware experiments
- darashi: 5,000,000 - https://github.com/darashi/nos.today, https://github.com/darashi/searchnos, https://github.com/darashi/murasaki
- jeff g: 5,000,000 - https://nostr.how and https://listr.lol, plus other contributions
- cloud fodder: 5,000,000 - https://nostr1.com (open-source)
- utxo.one: 5,000,000 - https://relaying.io (open-source)
- Max DeMarco: 10,269,507 - https://www.youtube.com/watch?v=aA-jiiepOrE
- BOUNTY optout21: 1,000,000 - https://github.com/optout21/nip41-proto0 (proposed nip41 CLI)
- BOUNTY Leo: 1,000,000 - https://github.com/leo-lox/camelus (an old relay thing I forgot exactly)
June 2023
- BOUNTY: Sepher: 2,000,000 - a webapp for making lists of anything: https://pinstr.app/
- BOUNTY: Kieran: 10,000,000 - implement gossip algorithm on Snort, implement all the other nice things: manual relay selection, following hints etc.
- Mattn: 5,000,000 - a myriad of projects and contributions to Nostr projects: https://github.com/search?q=owner%3Amattn+nostr&type=code
- BOUNTY: lynn: 2,000,000 - a simple and clean git nostr CLI written in Go, compatible with William's original git-nostr-tools; and implement threaded comments on https://github.com/fiatjaf/nocomment.
- Jack Chakany: 5,000,000 - https://github.com/jacany/nblog
- BOUNTY: Dan: 2,000,000 - https://metadata.nostr.com/
April 2023
- BOUNTY: Blake Jakopovic: 590,000 - event deleter tool, NIP dependency organization
- BOUNTY: koalasat: 1,000,000 - display relays
- BOUNTY: Mike Dilger: 4,000,000 - display relays, follow event hints (Gossip)
- BOUNTY: kaiwolfram: 5,000,000 - display relays, follow event hints, choose relays to publish (Nozzle)
- Daniele Tonon: 3,000,000 - Gossip
- bu5hm4nn: 3,000,000 - Gossip
- BOUNTY: hodlbod: 4,000,000 - display relays, follow event hints
March 2023
- Doug Hoyte: 5,000,000 sats - https://github.com/hoytech/strfry
- Alex Gleason: 5,000,000 sats - https://gitlab.com/soapbox-pub/mostr
- verbiricha: 5,000,000 sats - https://badges.page/, https://habla.news/
- talvasconcelos: 5,000,000 sats - https://migrate.nostr.com, https://read.nostr.com, https://write.nostr.com/
- BOUNTY: Gossip model: 5,000,000 - https://camelus.app/
- BOUNTY: Gossip model: 5,000,000 - https://github.com/kaiwolfram/Nozzle
- BOUNTY: Bounty Manager: 5,000,000 - https://nostrbounties.com/
February 2023
- styppo: 5,000,000 sats - https://hamstr.to/
- sandwich: 5,000,000 sats - https://nostr.watch/
- BOUNTY: Relay-centric client designs: 5,000,000 sats https://bountsr.org/design/2023/01/26/relay-based-design.html
- BOUNTY: Gossip model on https://coracle.social/: 5,000,000 sats
- Nostrovia Podcast: 3,000,000 sats - https://nostrovia.org/
- BOUNTY: Nostr-Desk / Monstr: 5,000,000 sats - https://github.com/alemmens/monstr
- Mike Dilger: 5,000,000 sats - https://github.com/mikedilger/gossip
January 2023
- ismyhc: 5,000,000 sats - https://github.com/Galaxoid-Labs/Seer
- Martti Malmi: 5,000,000 sats - https://iris.to/
- Carlos Autonomous: 5,000,000 sats - https://github.com/BrightonBTC/bija
- Koala Sat: 5,000,000 - https://github.com/KoalaSat/nostros
- Vitor Pamplona: 5,000,000 - https://github.com/vitorpamplona/amethyst
- Cameri: 5,000,000 - https://github.com/Cameri/nostream
December 2022
- William Casarin: 7 BTC - splitting the fund
- pseudozach: 5,000,000 sats - https://nostr.directory/
- Sondre Bjellas: 5,000,000 sats - https://notes.blockcore.net/
- Null Dev: 5,000,000 sats - https://github.com/KotlinGeekDev/Nosky
- Blake Jakopovic: 5,000,000 sats - https://github.com/blakejakopovic/nostcat, https://github.com/blakejakopovic/nostreq and https://github.com/blakejakopovic/NostrEventPlayground
-
@ 8cda1daa:e9e5bdd8
2025-04-24 10:20:13Bitcoin cracked the code for money. Now it's time to rebuild everything else.
What about identity, trust, and collaboration? What about the systems that define how we live, create, and connect?
Bitcoin gave us a blueprint to separate money from the state. But the state still owns most of your digital life. It's time for something more radical.
Welcome to the Atomic Economy - not just a technology stack, but a civil engineering project for the digital age. A complete re-architecture of society, from the individual outward.
The Problem: We Live in Digital Captivity
Let's be blunt: the modern internet is hostile to human freedom.
You don't own your identity. You don't control your data. You don't decide what you see.
Big Tech and state institutions dominate your digital life with one goal: control.
- Poisoned algorithms dictate your emotions and behavior.
- Censorship hides truth and silences dissent.
- Walled gardens lock you into systems you can't escape.
- Extractive platforms monetize your attention and creativity - without your consent.
This isn't innovation. It's digital colonization.
A Vision for Sovereign Society
The Atomic Economy proposes a new design for society - one where: - Individuals own their identity, data, and value. - Trust is contextual, not imposed. - Communities are voluntary, not manufactured by feeds. - Markets are free, not fenced. - Collaboration is peer-to-peer, not platform-mediated.
It's not a political revolution. It's a technological and social reset based on first principles: self-sovereignty, mutualism, and credible exit.
So, What Is the Atomic Economy?
The Atomic Economy is a decentralized digital society where people - not platforms - coordinate identity, trust, and value.
It's built on open protocols, real software, and the ethos of Bitcoin. It's not about abstraction - it's about architecture.
Core Principles: - Self-Sovereignty: Your keys. Your data. Your rules. - Mutual Consensus: Interactions are voluntary and trust-based. - Credible Exit: Leave any system, with your data and identity intact. - Programmable Trust: Trust is explicit, contextual, and revocable. - Circular Economies: Value flows directly between individuals - no middlemen.
The Tech Stack Behind the Vision
The Atomic Economy isn't just theory. It's a layered system with real tools:
1. Payments & Settlement
- Bitcoin & Lightning: The foundation - sound, censorship-resistant money.
- Paykit: Modular payments and settlement flows.
- Atomicity: A peer-to-peer mutual credit protocol for programmable trust and IOUs.
2. Discovery & Matching
- Pubky Core: Decentralized identity and discovery using PKARR and the DHT.
- Pubky Nexus: Indexing for a user-controlled internet.
- Semantic Social Graph: Discovery through social tagging - you are the algorithm.
3. Application Layer
- Bitkit: A self-custodial Bitcoin and Lightning wallet.
- Pubky App: Tag, publish, trade, and interact - on your terms.
- Blocktank: Liquidity services for Lightning and circular economies.
- Pubky Ring: Key-based access control and identity syncing.
These tools don't just integrate - they stack. You build trust, exchange value, and form communities with no centralized gatekeepers.
The Human Impact
This isn't about software. It's about freedom.
- Empowered Individuals: Control your own narrative, value, and destiny.
- Voluntary Communities: Build trust on shared values, not enforced norms.
- Economic Freedom: Trade without permission, borders, or middlemen.
- Creative Renaissance: Innovation and art flourish in open, censorship-resistant systems.
The Atomic Economy doesn't just fix the web. It frees the web.
Why Bitcoiners Should Care
If you believe in Bitcoin, you already believe in the Atomic Economy - you just haven't seen the full map yet.
- It extends Bitcoin's principles beyond money: into identity, trust, coordination.
- It defends freedom where Bitcoin leaves off: in content, community, and commerce.
- It offers a credible exit from every centralized system you still rely on.
- It's how we win - not just economically, but culturally and socially.
This isn't "web3." This isn't another layer of grift. It's the Bitcoin future - fully realized.
Join the Atomic Revolution
- If you're a builder: fork the code, remix the ideas, expand the protocols.
- If you're a user: adopt Bitkit, use Pubky, exit the digital plantation.
- If you're an advocate: share the vision. Help people imagine a free society again.
Bitcoin promised a revolution. The Atomic Economy delivers it.
Let's reclaim society, one key at a time.
Learn more and build with us at Synonym.to.
-
@ 9a859fbc:8a9270f3
2025-04-22 15:45:55A story of art and inspiration
This image was generated by AI
That is...
I am artificial. I was created by two other humans (hi mum and dad 👋)
I am intelligent. I can perceive the world, experience it, learn to understand cause & effect, and make decisions.
To go perhaps deeper, cells, DNA and life itself are artifices of the fabric of reality.
I sat, in a pub in Bristol, a place where I rarely frequent. I sat with one housemate, who I rarely spent time with. I met his friends that day, only once, never we met again.
I got chatting with a lady there. I had some paper and pencils with me. My intention, for a couple of weeks, was to come up with a symbol to represent Deep Sea Frequencies, at that time still known as Psychedelic Jelly. We were a new collaboration.
She and I got chatting about art. About symbolic representation of concepts, feelings, ideas. We chatted about flow, about how there are different types of flow, different elemental conditions of flow. I doodled some shapes, and we noticed how fire, water and air all look similar due to their fluid natures. So we considered how to differentiate, distinguish them from one another.
I doodled some more, and we came up with swooshes, curls, crests and bubbles. These seemed to be distinguishing enough such that they were no longer reminiscent of fire or air. I doodled fire and air too, just in case, just to check.
Then we chatted about symmetry types, reflective, axes, rotational. About geometry, geometric containers. We both enjoy triangles and hexagons. (It's always hexagons!)
I doodled some more shapes and put them in hexagonal shapes. Then I tried bending them into triangular forms instead, and overlaid two triangles.
Each triangle looked like a triskelion. Perfect.
Overlaid, they looked just like the flow of water, coming up, spiralling down.
The logo was born in this moment, in this serendipitous meeting, in this unlikely chat with a total stranger. We met for the first time that day, and I'm not sure if we ever met again. This interaction was, is, precious, and it led to a particular creation that is now a core part of my life and is a highlight for many people around the UK and the world, as we put on events and released musicians' music.
This is inspiration. This is expression. This is flow, through the fluid nature of the cosmos.
This is what you miss out on when you talk into your AI LLM black hole prompt.
This is what you steal from when you demand your AI LLM to generate you something according to your whim.
Art and expression is the very foundation of human community. Join in! Try new things! Learn from each other! Bring us all closer together by interacting and creating through shared ideas, shared visions, shared wisdom!
After that, I drew it up cleanly, geometrically.
I photographed it like scanning it, carefully aligning the camera because I didn't have a scanner.
I redrew it more than twice.
I digitised it, colourised it, split it into two layers so I could apply colour & lighting effects to it.
I painstakingly traced the photograph into a vector format, to enlarge it and use it for various media.
I even more painstakingly (do we have a more extreme adverb??) divided all the vector shapes into new objects so that the layers became "real". And cleaned up the vector nodes, shaping them to my imagination.
The vector form is used all over our record label & events branding.
And then I imported the vector form into Blender, a 3D rendering application, free and open source.
I learnt Blender, day by day developing my understanding and my skills. Day by day my GPU crashing on raytracing and cutting the laptop's power out!
And finally, I learnt to make some simple renders that look like being underwater, like surreal glassy objects floating in the deep. I even learnt to animate it, although I haven't released that into the wild.
I imagined all of this stuff, and then I spent months over years developing my skills in my spare time in order to bring these imaginations to life.
You can do the same.
You have to sacrifice things.
Sacrifice your time.
Sacrifice your energy.
Sacrifice your distractions and enter yourself into the learning process and the creative process.
To you, amazing lady who helped me draw this symbol from the fabric of the Realm of Forms, thank you! I'm sorry that I don't recall your name, although actually I think I do remember but I would be embarrassed if I tagged the wrong person. Please reach out if you recognise this story! It was about 7, maybe 8 years ago, in the painted pub in St. Werburgh's.
-
@ 1beecee5:d29d2162
2025-04-21 06:30:55 -
@ 3f770d65:7a745b24
2025-04-21 00:15:06At the recent Launch Music Festival and Conference in Lancaster, PA, featuring over 120 musicians across three days, I volunteered my time with Tunestr and Phantom Power Music's initiative to introduce artists to Bitcoin, Nostr, and the value-for-value model. Tunestr sponsored a stage, live-streaming 21 bands to platforms like Tunestr.io, Fountain.fm and other Nostr/Podcasting 2.0 apps and on-boarding as many others as possible at our conference booth. You may have seen me spamming about this over the last few days.
V4V Earnings
Day 1: 180,000 sats
Day 2: 300,000 sats
Day 3: Over 500,000 sats
Who?
Here are the artists that were on-boarded to Fountain and were live streaming on the Value-for-Value stage:
nostr:npub1cruu4z0hwg7n3r2k7262vx8jsmra3xpku85frl5fnfvrwz7rd7mq7e403w nostr:npub12xeh3n7w8700z4tpd6xlhlvg4vtg4pvpxd584ll5sva539tutc3q0tn3tz nostr:npub1rc80p4v60uzfhvdgxemhvcqnzdj7t59xujxdy0lcjxml3uwdezyqtrpe0j @npub16vxr4pc2ww3yaez9q4s53zkejjfd0djs9lfe55sjhnqkh nostr:npub10uspdzg4fl7md95mqnjszxx82ckdly8ezac0t3s06a0gsf4f3lys8ypeak nostr:npub1gnyzexr40qut0za2c4a0x27p4e3qc22wekhcw3uvdx8mwa3pen0s9z90wk nostr:npub13qrrw2h4z52m7jh0spefrwtysl4psfkfv6j4j672se5hkhvtyw7qu0almy nostr:npub1p0kuqxxw2mxczc90vcurvfq7ljuw2394kkqk6gqnn2cq0y9eq5nq87jtkk nostr:npub182kq0sdp7chm67uq58cf4vvl3lk37z8mm5k5067xe09fqqaaxjsqlcazej nostr:npub162hr8kd96vxlanvggl08hmyy37qsn8ehgj7za7squl83um56epnswkr399 nostr:npub17jzk5ex2rafres09c4dnn5mm00eejye6nrurnlla6yn22zcpl7vqg6vhvx nostr:npub176rnksulheuanfx8y8cr2mrth4lh33svvpztggjjm6j2pqw6m56sq7s9vz nostr:npub1akv7t7xpalhsc4nseljs0c886jzuhq8u42qdcwvu972f3mme9tjsgp5xxk nostr:npub18x0gv872489lrczp9d9m4hx59r754x7p9rg2jkgvt7ul3kuqewtqsssn24
Many more musicians were on-boarded to Fountain, however, we were unable to obtain all of their npubs.
THANK YOU TO ALL ZAPPERS AND BOOSTERS!
Musicians “Get It”
My key takeaway was the musicians' absolute understanding that the current digital landscape along with legacy social media is failing them. Every artist I spoke with recognized how algorithms hinder fan connection and how gatekeepers prevent fair compensation for their work. They all use Spotify, but they only do so out of necessity. They felt the music industry is primed for both a social and monetary revolution. Some of them were even speaking my language…
Because of this, concepts like decentralization, censorship resistance, owning your content, and controlling your social graph weren't just understood by them, they were instantly embraced. The excitement was real; they immediately saw the potential and agreed with me. Bitcoin and Nostr felt genuinely punk rock and that helped a lot of them identify with what we were offering them.
The Tools and the Issues
While the Nostr ecosystem offers a wide variety of tools, we focused on introducing three key applications at this event to keep things clear for newcomers:
- Fountain, with a music focus, was the primary tool for onboarding attendees onto Nostr. Fountain was also chosen thanks to Fountain’s built-in Lightning wallet.
- Primal, as a social alternative, was demonstrated to show how users can take their Nostr identity and content seamlessly between different applications.
- Tunestr.io, lastly was showcased for its live video streaming capabilities.
Although we highlighted these three, we did inform attendees about the broader range of available apps and pointed them to
nostrapps.com
if they wanted to explore further, aiming to educate without overwhelming them.This review highlights several UX issues with the Fountain app, particularly concerning profile updates, wallet functionality, and user discovery. While Fountain does work well, these minor hiccups make it extremely hard for on-boarding and education.
- Profile Issues:
- When a user edits their profile (e.g., Username/Nostr address, Lightning address) either during or after creation, the changes don't appear to consistently update across the app or sync correctly with Nostr relays.
- Specifically, the main profile display continues to show the old default Username/Nostr address and Lightning address inside Fountain and on other Nostr clients.
- However, the updated Username/Nostr address does appear on https://fountain.fm (chosen-username@fountain.fm) and is visible within the "Edit Profile" screen itself in the app.
- This inconsistency is confusing for users, as they see their updated information in some places but not on their main public-facing profile within the app. I confirmed this by observing a new user sign up and edit their username – the edit screen showed the new name, but the profile display in Fountain did not update and we did not see it inside Primal, Damus, Amethyst, etc.
- Wallet Limitations:
- The app's built-in wallet cannot scan Lightning address QR codes to initiate payments.
- This caused problems during the event where users imported Bitcoin from Azte.co vouchers into their Fountain wallets. When they tried to Zap a band by scanning a QR code on the live tally board, Fountain displayed an error message stating the invoice or QR code was invalid.
- While suggesting musicians install Primal as a second Nostr app was a potential fix for the QR code issue, (and I mentioned it to some), the burden of onboarding users onto two separate applications, potentially managing two different wallets, and explaining which one works for specific tasks creates a confusing and frustrating user experience.
- Search Difficulties:
- Finding other users within the Fountain app is challenging. I was unable to find profiles from brand new users by entering their chosen Fountain username.
- To find a new user, I had to resort to visiting their profile on the web (fountain.fm/username) to retrieve their npub. Then, open Primal and follow them. Finally, when searching for their username, since I was now following them, I was able to find their profile.
- This search issue is compounded by the profile syncing problem mentioned earlier, as even if found via other clients, their displayed information is outdated.
- Searching for the event to Boost/Zap inside Fountain was harder than it should have been the first two days as the live stream did not appear at the top of the screen inside the tap. This was resolved on the third day of the event.
Improving the Onboarding Experience
To better support user growth, educators and on-boarders need more feature complete and user-friendly applications. I love our developers and I will always sing their praises from the highest mountain tops, however I also recognize that the current tools present challenges that hinder a smooth onboarding experience.
One potential approach explored was guiding users to use Primal (including its built-in wallet) in conjunction with Wavlake via Nostr Wallet Connect (NWC). While this could facilitate certain functions like music streaming, zaps, and QR code scanning (which require both Primal and Wavlake apps), Wavlake itself has usability issues. These include inconsistent or separate profiles between web and mobile apps, persistent "Login" buttons even when logged in on the mobile app with a Nostr identity, and the minor inconvenience of needing two separate applications. Although NWC setup is relatively easy and helps streamline the process, the need to switch between apps adds complexity, especially when time is limited and we’re aiming to showcase the benefits of this new system.
Ultimately, we need applications that are more feature-complete and intuitive for mainstream users to improve the onboarding experience significantly.
Looking forward to the future
I anticipate that most of these issues will be resolved when these applications address them in the near future. Specifically, this would involve Fountain fixing its profile issues and integrating Nostr Wallet Connect (NWC) to allow users to utilize their Primal wallet, or by enabling the scanning of QR codes that pay out to Lightning addresses. Alternatively, if Wavlake resolves the consistency problems mentioned earlier, this would also significantly improve the situation giving us two viable solutions for musicians.
My ideal onboarding event experience would involve having all the previously mentioned issues resolved. Additionally, I would love to see every attendee receive a $5 or $10 voucher to help them start engaging with value-for-value, rather than just the limited number we distributed recently. The goal is to have everyone actively zapping and sending Bitcoin throughout the event. Maybe we can find a large sponsor to facilitate this in the future?
What's particularly exciting is the Launch conference's strong interest in integrating value-for-value across their entire program for all musicians and speakers at their next event in Dallas, Texas, coming later this fall. This presents a significant opportunity to onboard over 100+ musicians to Bitcoin and Nostr, which in turn will help onboard their fans and supporters.
We need significantly more zaps and more zappers! It's unreasonable to expect the same dedicated individuals to continuously support new users; they are being bled dry. A shift is needed towards more people using bitcoin for everyday transactions, treating it as money. This brings me back to my ideal onboarding experience: securing a sponsor to essentially give participants bitcoin funds specifically for zapping and tipping artists. This method serves as a practical lesson in using bitcoin as money and showcases the value-for-value principle from the outset.
-
@ 83279ad2:bd49240d
2025-04-20 08:39:12Hello
-
@ 1bc70a01:24f6a411
2025-04-19 09:58:54Untype Update
I cleaned up the AI assistant UX. Now you can open it in the editor bar, same as all other actions. This makes it a lot easier to interact with while having access to normal edit functions.
AI-generated content
Untype uses OpenRouter to connect to various models to generate just about anything. It doesn't do images for now, but I'm working on that.
Automatic Title, Summary and Tag Suggestions
Added the functionality to generate titles, summaries and tags with one click.
A Brief Preview
Here is a little story I generated in Untype, ABOUT Untype:
This story was generated in Untype
Once upon a time, in the bustling digital city of Techlandia, there lived a quirky AI named Untype. Unlike other software, Untype wasn't just your everyday article composer — it had a nose for news, quite literally. Untype was equipped with a masterful talent for sniffing out the latest trends and stories wafting through the vast digital ether.
Untype had a peculiar look about it. Sporting a gigantic nose and a pair of spectacles perched just above it, Untype roamed the virtual city, inhaling the freshest gossip and spiciest stories. Its nostr-powered sensors twitched and tickled as it encountered every new scent.
One day, while wandering around the pixelated park, Untype caught a whiff of something extraordinary — a scandalous scoop involving Techlandia's mayor, Doc Processor, who had been spotted recycling old memes as new content. The scent trail was strong, and Untype's nose twitched with excitement.
With a flick of its AI function, Untype began weaving the story into a masterpiece. Sentences flowed like fine wine, infused with humor sharper than a hacker’s focus. "Doc Processor," Untype mused to itself, "tried to buffer his way out of this one with a cache of recycled gifs!"
As Untype typed away, its digital friends, Grammarly the Grammar Gremlin and Canva the Artful Pixie, gathered around to watch the genius at work. "You truly have a knack for news-sniffing," complimented Grammarly, adjusting its tiny monocle. Canva nodded, painting whimsical illustrations to accompany the hilarious exposé.
The article soon spread through Techlandia faster than a virus with a strong wifi signal. The townsfolk roared with laughter at Untype’s clever wit, and even Doc Processor couldn't help but chuckle through his embarrassment.
From that day on, Untype was celebrated not just as a composer but as Techlandia's most revered and humorous news-sniffer. With every sniff and click of its AI functions, Untype proved that in the world of digital creations, sometimes news really was just a nose away.
-
@ 1bc70a01:24f6a411
2025-04-16 13:53:00I've been meaning to dogfood my own vibe project for a while so this feels like a good opportunity to use Untype to publish this update and reflect on my vibe coding journey.
New Untype Update
As I write this, I found it a bit annoying dealing with one of the latest features, so I'll need to make some changes right after I'm done. Nonetheless, here are some exciting developments in the Untype article composer:
-
Added inline AI helper! Now you can highlight text and perform all sorts of things like fix grammar, re-write in different styles, and all sorts of other things. This is a bit annoying at the moment because it takes over the other editing functions and I need to fix the UX.
-
Added pushing articles to DMs! This option, when enabled, will send the article to all the subscribers via a NIP-44 DM. (No client has implemented the subscription method yet so technically it won’t work, until one does. I may add this to nrss.app) Also, I have not tested this so it could be broken… will test eventually!
- Added word counts
- Added ability to export as markdown, export as PDF, print.
The biggest flaw I have already discovered is how "I" implemented the highlight functionality. Right now when you highlight some text it automatically pops up the AI helper menu and this makes for an annoying time trying to make any changes to text. I wanted to change this to show a floating clickable icon instead, but for some reason the bot is having a difficult time updating the code to this desired UX.
Speaking of difficult times, it's probably a good idea to reflect a bit upon my vibe coding journey.
Vibe Coding Nostr Projects
First, I think it's important to add some context around my recent batch of nostr vibe projects. I am working on them mostly at night and occasionally on weekends in between park runs with kids, grocery shopping and just bumming around the house. People who see buggy code or less than desired UX should understand that I am not spending days coding this stuff. Some apps are literally as simple as typing one prompt!
That said, its pretty clear by now that one prompt cannot produce a highly polished product. This is why I decided to limit my number of project to a handful that I really wish existed, and slowly update them over time - fixing bugs, adding new features in hopes of making them the best tools - not only on nostr but the internet in general. As you can imagine this is not a small task, especially for sporadic vibe coding.
Fighting the bot
One of my biggest challenges so far besides having very limited time is getting the bot to do what I want it to do. I guess if you've done any vibe coding at all you're probably familiar with what I'm trying to say. You prompt one thing and get a hallucinated response, or worse, a complete mess out the other end that undoes most of the progress you've made. Once the initial thing is created, which barely took any time, now you're faced with making it work a certain way. This is where the challenges arise.
Here's a brief list of issues I've faced when vibe-coding with various tools:
1. Runaway expenses - tools like Cline tend to do a better job directly in VSCode, but they can also add up dramatically. Before leaning into v0 (which is where I do most of my vibe coding now), I would often melt through $10 credit purchases faster than I could get a decent feature out. It was not uncommon for me to spend $20-30 on a weekend just trying to debug a handful of issues. Naturally, I did not wish to pay these fees so I searched for alternatives.
2. File duplication - occasionally, seemingly out of nowhere, the bot will duplicate files by creating an entire new copy and attached "-fixed" to the file name. Clearly, I'm not asking for duplicate files, I just want it to fix the existing file, but it does happen and it's super annoying. Then you are left telling it which version to keep and which one to delete, and sometimes you have to be very precise or it'll delete the wrong thing and you have to roll back to a previous working version.
3. Code duplication - similar to file duplication, occasionally the bot will duplicate code and do things in the most unintuitive way imaginable. This often results in loops and crashes that can take many refreshes just to revert back to a working state, and many more prompts to avoid the duplication entirely - something a seasoned dev never has to deal with (or so I imagine).
4. Misinterpreting your request - occasionally the bot will do something you didn't ask for because it took your request quite literally. This tends to happen when I give it very specific prompts that are targeted at fixing one very specific thing. I've noticed the bots tend to do better with vague asks - hence a pretty good result on the initial prompt.
5. Doing things inefficiently, without considering smarter approaches - this one is the most painful of vibe coding issues. As a person who may not be familiar with some of the smarter ways of handling development, you rely on the bot to do the right thing. But, when the bot does something horribly inefficiently and you are non-the-wiser, it can be tough to diagnose the issue. I often fight myself asking the bot "is this really the best way to handle things? Can't we ... / shouldn't we .../ isn't this supposed to..." etc. I guess one of the nice side effects of this annoyance is being able to prompt better. I learn that I should ask the bot to reflect on its own code more often and seek ways to do things more simply.
A combination of the above, or total chaos - this is a category where all hell breaks loose and you're trying to put out one fire after another. Fix one bug, only to see 10 more pop up. Fix those, to see 10 more and so on. I guess this may sound like typical development, but the bot amplifies issues by acting totally irrationally. This is typically when I will revert to a previous save point and just undo everything, often losing a lot of progress.
Lessons Learned
If I had to give my earlier self some tips on how to be a smarter vibe coder, here's how I'd summarize them:
-
Fork often - in v0 I now fork for any new major feature I'd like to add (such as the AI assistant).
-
Use targeting tools - in v0 you can select elements and describe how you wish to edit them.
-
Refactor often - keeping the code more manageable speeds up the process. Since the bot will go through the entire file, even if it only makes one small change, it's best to keep the files small and refactoring achieves that.
I guess the biggest lesson someone might point out is just to stop vibe coding. It may be easier to learn proper development and do things right. For me it has been a spare time hobby (one that I will admit is taking more of my extra time than I'd like). I don't really have the time to learn proper development. I feel like I've learned a lot just bossing the bot around and have learned a bunch of things in the process. That's not to say that I never will, but for the moment being my heart is still mostly in design. I haven't shared much of anything I have designed recently - mostly so I can remain speaking more freely without it rubbing off on my work.
I'll go ahead and try to publish this to see if it actually works 😂. Here goes nothing... (oh, I guess I could use the latest feature to export as markdown so I don't lose any progress! Yay!
-
-
@ 1bc70a01:24f6a411
2025-04-11 13:50:38The heading to be
Testing apps, a tireless quest, Click and swipe, then poke the rest. Crashing bugs and broken flows, Hidden deep where logic goes.
Specs in hand, we watch and trace, Each edge case in its hiding place. From flaky taps to loading spins, The war on regressions slowly wins.
Push the build, review the log, One more fix, then clear the fog. For in each test, truth will unfold— A quiet tale of stable code.
This has been a test. Thanks for tuning in.
- one
- two
- three
Listen a chill
Tranquility
And leisure
-
@ 6b0a60cf:b952e7d4
2025-04-01 11:53:31nostr:nevent1qqspynu0th85xlczqgnafy2na46mg276u0c5dmpd9utcz36npmqdmpsunn5rl nostr:nevent1qqs06cvm4qq9ymt2j58u0p7c46j2atxevjkp5vpezvlzesxcp7v03fqm0tp5k nostr:nevent1qqs8vjpu7wd5h7p0elysezzml7wzhaxgjwnp5h7yst0uudyy8pjt3pckcapzl nostr:nevent1qqswmpc5vghej8uz5mk8nta2szx3ejdsvdrvxtspmc3mld683j53mfsf0ujes nostr:nevent1qqs9cwaua4gvrxms3qz8rntj7jmuyvv953sm9lcwk5j4p8jfc4qxpgc7sfhw2 nostr:nevent1qqsx4f2m3njh0cpgqe376xpqde65ujq0aq50nj45ttfqls3yzluqujgpuum60 nostr:nevent1qqsrx7q02xfyak54zcmh233trqtpw725ywasfyg9dz08prxdvcnnuhqdnymnw nostr:nevent1qqsdllaud8mjpfhfzgu9nxjgvys5g08eu344909nyekrrn92pzhpxac56vtuj nostr:nevent1qqsxhx3skvs8xeddpwvhct3yhp02vgmdu90my67ttlj70muhcu3malqjadl5f nostr:nevent1qqs2k5q965ppnvxs7tna9wwx3njtp9r40ur4ahud8ykug85vth03haqe6m4py nostr:nevent1qqspzh3q002ssre56emu2kkhel82sd9j2sacd75fm998km8p6cxn8gg7agpxy nostr:nevent1qqsy8v9vj7u3jfnmhl6867n847d2gs7gpvdn5zdnm98nes9zlgu3rnqjkwmt9 nostr:nevent1qqsq559y4mj940540zhzxa9teknz74l9d6tqptste7l4lqu5yfvu2tg74dky7 nostr:nevent1qqs8gq3t2wk6qluhcjqy5cp8v3y20wmtw3uyfujmga7njpq3fe76pcgtgp34k nostr:nevent1qqsztaj9ut2lxru8la8lcs95lgyrpypwhgx92jc74r5nj7ss8tf9fvsr70m5v nostr:nevent1qqsghxwhmfywe40sdrq2cw750ug5f62nfh2u3jwe476zj6s0xmgcgpchj5qwx nostr:nevent1qqsdaw986p4qwujz99a0eg0yqtpjqhl6rcamxa0hn0yyg8pcwch6cysmans7p nostr:nevent1qqsyh8g0et5catuar388v56eahc4qmf7l6t79cs6scuuqa72vxj5lxq7de8wr nostr:nevent1qqszvxdc8vf2tjlayf7qf839p2j245nt7447ytqnju65s4ypz402gecrcsp8q nostr:nevent1qqspyx8mxme44n9vjspewch8s2tmtezt3z87kpytzetn68m39f0yhfsskl808 nostr:nevent1qqsdu6r2sf6npr3xn5gwkdc6st62zvy6r6r8u7sh078rjd7cjvy5jdcy8crru nostr:nevent1qqsrc0j0xa769ymehgxjem3lchwccndwj3ms922ltu7r7sy567lyzncddqjsv nostr:nevent1qqs0gcr269zzgcmrq6fjyzgqh7lqerhqqaknfrd5k563xnr9vanmtgcfzza5l nostr:nevent1qqsru4vxn5sw02zq4v44xtcpkt0qxqp9yc6gyy5pyavvvwa96dxyzscp3apme nostr:nevent1qqsp0ajlpxnvu64recf69efhxzv6sgu7yk235u59nj2v529dq92x2wgvcna9c nostr:nevent1qqsdmcrqmdkzf9tptgh5mytuan9q3ur7l50a5kjfrskfr54gxqq5k0szyhfsj nostr:nevent1qqsfk0duvuamrutcpansw3hqarnmhcr4vp0zt9r8pta9zlycma2jscs5wz0fm nostr:nevent1qqs82xxv600mtzxhhped2vn9yw7aer487ws8yy5hk5ppyuzxjw92hzs06hxp6 nostr:nevent1qqsfs96nd96mvulw9yp0dyygdtsegxkmnvytkq5xgmepkrh0504x0ns0rnm60 nostr:nevent1qqspa5f2fc5w4f9ghq2eryjnc44hs3grmaq6eyrx4s7ggkpjdmx2gjckswv0a nostr:nevent1qqs96s99kv7h207twu8s9mhmms7e5ck2s9qhndnp0m2w3uqpsh724ysnd6esu nostr:nevent1qqs8z5jzrlmeenpst0xtrm336tt0racrx63cnchskgs2d9cgmrtugdgmluxwa nostr:nevent1qqs9aqladqaf2jvanehny0mhd6mq9cdrgwr838z68p8h9clmcgf0zygqfvdd9 nostr:nevent1qqsd2m5tlpztgfqhzhc09upzzc876j6s60299m9lha2sxvnyjrvfasctaurj9 nostr:nevent1qqsg2yq7mw55vqnjmrfetc453v3z6vzzynmevt2ljgg4yppn5m2ry3ce2jlfe nostr:nevent1qqsr3vckac3re8ayyhv3m3g5s8a4rat5720un7qle8am2lfn7ew3magu6vk8f nostr:nevent1qqsg73fke3mszmuz0nh7r34sl3jlgdx70npfjc5almxrpycykhvnersq3rfaq nostr:nevent1qqsr73gdk6n0dgvg7nv6c390qf0c2j80t7qf99nftmze3dlr7k3nhpsfhl2ql nostr:nevent1qqs2mfw8a5vz3tjrnuerw6vxge0t6kd6snyeaj5jpfye7jvkqyqsv8cdw09np nostr:nevent1qqsr3qpal7xkhkttp4jrmjehm86ulh8hzarusgnyhhuf4ttdkqq0vhg7279w0 nostr:nevent1qqs0m4l3rza008tax28s3mh0tpexeqpzk8y2hlx2h8dgaqcft4rvm5c8xz2sq nostr:nevent1qqszt96jl70h9ku86s8mldsa8vk7m2vtwgfc2sksxcqfmkl2dksjntsjhz5zx nostr:nevent1qqsqdhulqcal3edfn2tu5lsj2tcgyq73zft3z6sa0xaqt4rd7m2gq4qpgs30l nostr:nevent1qqsygu35a9rrlh8ld5nuucjj9nw4up0d8mx6dmq98hqpj7j2kc6w7ts44y0wh nostr:nevent1qqsfnzz55mveegemu9nmqvfvm4wyarpevh29m778946lphw4wya23ms7z8ll2 nostr:nevent1qqs02ft4599adqeu9v3ny04k5x3mdued0rnj2hgg5lsg82xmqnpgxvsr48clp nostr:nevent1qqstkr7gr3flahhe9e6gl70sudqm5qz23rq2f2q9as3ys9s6l9c06lsgrduvd nostr:nevent1qqsqzmjj8rn6pl8wrn5km7an00cfhy5wzqzz9nlne5hzhktwlnsp0ag0qd665 nostr:nevent1qqsfc2x5vx23yyztnvr3n59dv9kyw64jc88pxxfgawt4c8m32qq5ekqqe4neh nostr:nevent1qqs0f7fkwlky42jxsdgr33xttz3rkg7gk200qkmv2rulrlauqwee7ts7mzn5q nostr:nevent1qqsg3c8qyp4n86qdtkyzcnk6kr7gnmad3sd2vhel52m3r64ala9rqugrcnnv6 nostr:nevent1qqsw9dn2cuhe4xu76z2xyugh8gaah92rdyazyg0s2mvkll0qrll02gs4uvvvk nostr:nevent1qqsv0pymkvfqz53jyqwqjj5wypp375ljlstav67zzpdlq536xpm8d6snawjc0 nostr:nevent1qqs20fpumlhmzs49mlsvd2f0s7kfgjq68auzkfvf6s3yr7a0njy782qv778m2 nostr:nevent1qqswqq7pl8g5redm0t82k4ys50w65z03m5xl6ayr374c2vknqfwjcrgguyt5s nostr:nevent1qqsp0fn3adqdq3jvcna0vwkwjnaq32lx6ac7qzpquvdt8zpugx5gvhshhkgez nostr:nevent1qqsvtd6surkas9nrvnlndk3r53aqq82dedmm8ayf2zhrv9w9lf90g8gslhagd nostr:nevent1qqsqw56qfhvkv56ss5r066yrf2hnwchcn4ldav576ldhvk3jk543clcsayyfz nostr:nevent1qqsxq9faxju2wp9zl5gw7usu00rkm7n0x9ylnlujsjjn323wppqpausm4etyu nostr:nevent1qqsrl7gdwgd5mqf3s3ygn2e5j34qnjxeldr99qwn7lge3ncfdwhf4usl70dm2 nostr:nevent1qqsd2a32drg7teet8fnkauxede52lyrau8ey24dzzqflu7pad2fhsvsdgtyr4 nostr:nevent1qqsv5uqj4zxhdtdapzk44tfuxyft55tlp900r4l7rf9vtma8d6cgjms2hjwde nostr:nevent1qqszcepleg57p2k03e06et848frekk79x3f523nmx8t3guxmuyfgsyqeat4pt nostr:nevent1qqsvklay6j4ukvc0w9n74u5hzselsrmclm9jfmezrztqf3xf74522ac0rlcen nostr:nevent1qqs909ldkkvchacs32hpj4zphwxdyxtnvv2nz0wdk7d26ec25j7xyfcsx997r nostr:nevent1qqs0nyvnc4j8xen06z9t784htam8e9jsucpm7g0xq2cdtenxrcx4qdgmgtj8q nostr:nevent1qqsfq3gqv98x97s0wu2cyenz5ng0v52fsv8erzyuj8q7ls9kwaaafggwt30r0 nostr:nevent1qqs2pu4lcqakjgkx524jvd967vk2fkuw6urtp7tw38q3accra6hf0xqd99kc3 nostr:nevent1qqsvgwlfeju2qsnllqgexscdrta9lnqamxlq2kvansadmhyy0g0eqhg02dpeg nostr:nevent1qqsvveq4k9cz0t3xh55cudydkweh58aekjrmqh6zut7ekqsnuv3hfyqdrru6x nostr:nevent1qqsfn29l63mfggnvq2j3ns9u09su2zrsahrxmczh4mk6q8mq45lxkps5alh6e nostr:nevent1qqszg3s0jdwj4qug6plqe865ul8zh6j60gue9c5f897dclmvu5xc2zqv77xmu nostr:nevent1qqswla2n4l5cu2z3czyt8vyawylv2hxj2avjg0lx6lnl7cw9p3kn5ac9nf5u8 nostr:nevent1qqsf8qufcluup4tl8rcngu5z8tarzxl7the3wfe0xnfdyjht9rzvpaqyzcn57 nostr:nevent1qqs8turf9zhsjc7uunw8wgqtd7dc5wtlrgxf2wrvsnw2cgz534wd6sghzcgw4 nostr:nevent1qqsqwngx9nxgf7slse6yeh9uvnpmwz3exa95qyh6x3ez00z72y2jvwsrfqdhk nostr:nevent1qqsv8z7leemtzl5cfexxynl7243uqd4nr7kacdaumyx8rq46kune2psgz47rc nostr:nevent1qqsp0ttn3kcnds34zjew7w7e8hwnaa8hwx29t3tej2guawf8pdt9csgz4m9nv nostr:nevent1qqszy0yufenkexssavnv0p5k98e3vu77f4r4tze5v6p94gmgcrgpx4qd27h77 nostr:nevent1qqs2xj626q46rpzwnas5259t5ywpwzltnvj3pwvrjcqseddtyu500qg5rn883 nostr:nevent1qqsw02jdkpg2vzs5k5c3ymvndsrkje6uwkxf0dqmz0yvycfwt6lvq6qjqgfgz nostr:nevent1qqs2d237yzkmuxl82fc2u7wdpzxyvjw2gje6vgadtw4dzmnp483jgrcval8vd nostr:nevent1qqsrwqj390vqwp7e6nwu3k8m6h4luks86gq3sql99k5tnvy4w52kamqp73nl8 nostr:nevent1qqstdtqpxl78ecn9x8dzylvzul0cfsxh64gfunzts72l3sqmvzt0ylqwp9c8n nostr:nevent1qqswcvajl70frlhwtuch6cwlsehl0u7f2hfw27vhxvzwhzatm2ugjss4zle92 nostr:nevent1qqszfrq6zdsclykmeke3a7znqgp7y975mslf5w0fk0hfujajj9jh4hssc4s7f nostr:nevent1qqsp253cwmp33yedu7asa6k2f09w08j34zcky52ks6jh97msqsrh9nqylwer9 nostr:nevent1qqsd3u0gms7u8gqkvhpfqlvk2jrttjzs5zuvc8qdl3g5pse4dt8ugcsqcez79 nostr:nevent1qqsxq8t0u67schrxvv0dtuf2j6nlvqytkez42f0jmhpjtnkap5ssvsgm7pdcc nostr:nevent1qqsvp878n0zlqkge6famsdwcqp8k92flz2wf97c0emxlsrf7f6gqt8gyzkgp8 nostr:nevent1qqsx3xnxupzzfvws2etneycjyvcx0n7mcqru09gyym5x20s3n9ewcrgcsetd6 nostr:nevent1qqsf666tlstrgssclusaam50nfk0xjs7m849f70fuv5hw9h7tsmqpegaduhy9 nostr:nevent1qqs23eqhwhvah5yjn54m7n5klw4e5efg8s6994pamz5ejcgnsq4d2wss89y7y nostr:nevent1qqs2q84pdl6qvf8h7yu9g6hfvfzj49z28ea5m6k4lpmwvl86tnuedxqkxxajr nostr:nevent1qqsyf0quzl6ttedn7qftse9386uh0pvp8795egxumyvs8sjckm8xgxs2srhmy nostr:nevent1qqsf7n8rqr2wsjpcuczlcee85227rylnv0kanj4mca0hllptyerd8csnyspns nostr:nevent1qqsycgshmjcqsr76tlhuppp23a49zy4e995lj5wnqm8jkz5vmv9l55cjpughr nostr:nevent1qqsp4vwephtxxlv2pjgupymfl6k288qh6gdzsy8qesmu0natsh095tsnfrpnk nostr:nevent1qqs297q9e00dpmj78rdx2qrjg3hva5ye9p7nke8avagn844jxucudwg2mtxgq nostr:nevent1qqs9c08g0fxv3vy7v5c9gsme0jx6fujkv88k3rtnmxjcd89ejpy72hcadrjas nostr:nevent1qqsvmwsetretl7dm42c3g690llwylyn37cunkauepzj3le3qhaytrjsh2ga9h nostr:nevent1qqsgyqu6zjppqek23fgpzlmg7hqfl4knryjvuflx54ypx70m58gt6rs5s9dms nostr:nevent1qqspxcsk7g56qhapmzek243az6zhv9v5hwupnyg4nn352kvc2z0fw7qklkcv7 nostr:nevent1qqsxwe7u49q4yc4ney5kt6gkfep0v9jlx68r5u0uf9upl7u9mcfxpkcqpu7z8 nostr:nevent1qqsrmyeh30f4kfdleq23w9vgcx9jcqgkv3stg9au5m593tlywlca0lgylty6g nostr:nevent1qqsg2v2e7tthtd8m39ctt7yyqw0lqkx23s7e2fqt4s2ymlnn33n5axg7fy4da nostr:nevent1qqsvtgfln33c2nllxt2797xfqttcuy6qtlh8we8q9lv9gn7r5jy4ahsfqpyg7 nostr:nevent1qqsz2al0emnaf5cjtrtdfv9c9t5ey8475yx5kp5442cg0afmlys6dgg29jq4x nostr:nevent1qqsg8lvelaeq9uyv7hzrxgpelckuz5hpf5g3ajyghj8nsk2ycckv63sllv797 nostr:nevent1qqsxhp4g53ltg7qjz2puzvsdwxk54xev46n8jmc2tlg2pdp529ckgfg2329m7 nostr:nevent1qqs82j5zgk3plkk8fugmflertrl8uc6x36elfeet643npvyuxr39tvcrr2u63 nostr:nevent1qqsd4vye657t504chaqf2d5gwgd5946t9tfg6aq0fnkjljnnmkfmadg3ss3uw nostr:nevent1qqsxhr5lanyrce0c6amgvxzd77a26fpap505hl74jztuc5svst8dtrcvtcl4f nostr:nevent1qqsrdap3r0ptlwxgd0dav04y53w04x0jzh22d4sxksuzfpetf6j8zwgtmay55 nostr:nevent1qqsvyqj4lr5g5swahxxjrpmga3569qlmd96xk6f4xwm84gmwu7aqw4c69zqtx nostr:nevent1qqsf9dntcjdmmzsu0s2t7pnlx6ver9usvaz53hvgtjggfgn8da6eydc7l5gc2 nostr:nevent1qqs9njwwgechxesqycm29asghutvq0e2fec2v4jc0gvpsk2dsnujq8c9vnuuq nostr:nevent1qqs9ahfkkycdlkemndn0dc7am5djnp8pwjnu72sng2tg0pk5kq7jv2skfv95c nostr:nevent1qqsflgngaeu8w2xz2lkzly5rvr3rudcvq4yyrn2w724dlr32p2mulpqasv6vj nostr:nevent1qqswg7qfwtdj38kr9xfp7f6gfvaxm5kpuwp22ueqny5pp6da7snl92svggqww nostr:nevent1qqs256vewt769a0q8teqh3n5eggjvw0jddl4xzejx4rykhcrrx2k4zcr70g2w nostr:nevent1qqstf7w5lej9qqm63x2r9c5ztc7s9tre65f3e27p5mhqjzy3555856g0lptxq nostr:nevent1qqsfzchhw84ldh2egvqethzychr8jvaaurdacvav3qhgelwzldy7adslwelmw nostr:nevent1qqsqy4uzgsedu94j6jyjpavrmn35khc7nsdmhxnwqehy9umdkgac79skwad40 nostr:nevent1qqsrzxkswpug72gc6eqf4qklemc29quyscds2ftwuqmf0lwvz78fckqxq9r9d nostr:nevent1qqsfzvl36d5k89q0frn9gfepwjrd65cgarh3gtj6gmqffjh9v7ncpesfxuyug nostr:nevent1qqs9vcndnjwtjcg2p5yj2jcktscn8lyf766kqtjef2a3fmyhsga0mgg6d5vp7 nostr:nevent1qqsdf65dzcvx2pkwh297amygfcdypu80g3hc2w0hzl6l8ed8ptcd83ccux9kt nostr:nevent1qqsr69tp6y6dj6agued5vqvv8wrhwngtl9nk6yln2amzg4j0fnxfsksj59765 nostr:nevent1qqs0jjfn0tnjgvech67ks5n3x9zrpredskg67twea7m2x8hvuq3zvvsjdgjcx nostr:nevent1qqs8s9wuwnqmkdjwmrxmqrjyktq3egkxlaqzx7t6q9e53yalga55xuq5ez8ug nostr:nevent1qqste2hugs0txe9xqzle5y60t2m5sakxfcq4flw9e6gtxvdlpuy2qqq3ksyc5 nostr:nevent1qqsxrns3rez8vhnym5qvqkg434w26r2paw8jm9640lzmhzs7jc00r2sk5nqq7 nostr:nevent1qqs05du8xmstnuajfj6cqetxv06xk8xgj23eepfpyjk8hdz3v5hx3hqg7tcwf nostr:nevent1qqswq92249238q2gp6cjcuup5w0e60htyqrp22cepc6uelysmewp46s3n3c76 nostr:nevent1qqspwxsck6zz60gc8tr48l4qqdnlnva0s9gay2hmdckutrz5sk8mnpcueftjt nostr:nevent1qqsywqjwwnuycnzkar8cnua5lerl80kr9wvwdr4yy07k2r7enlup08s0w3tg6 nostr:nevent1qqs87m5zz4x2cctfvxrvxx9546fe9rl5j82dxcrz4s89qzk47huyalgrd3rk7 nostr:nevent1qqst7lun76xhcmaw84s7cwqu9wu5dfterxxhjptlw54gxhnz5duxcaceaky47 nostr:nevent1qqsyexk849hlfxhnqlt4t6y23jshgeevrvtu53dh95w6xfeuuxrvz7c2aj87m nostr:nevent1qqsglmpnfw3jgl9ekwanzlgzhndce6pmncvunkswpc3y2n40vu33m0cwds2v5 nostr:nevent1qqsdaw8rm6yww2ks8300m2xw22c8xdemnkspdvwrjh2jn6hnuvuh9zc6quvml nostr:nevent1qqs0p6d8ny8kunevc8capqu9ntjmd9ze24ql2sjam0j0h8ju0xjydygkm9ffq nostr:nevent1qqswu057ppwc2lars6nu8sc8j4rupnahsrn79a8zktsqawq6p5fh46s5t4yqn nostr:nevent1qqs270vsqqtjwjyswfmqyldjnmnvrrp5g5q7wh3k5qj8cuhljwn0j5c8md0u6 nostr:nevent1qqs2ypcx6p5cqe8dqqmrm36qvgucflgvss885r8czcal6zv0axqdr7sn0x2df nostr:nevent1qqsqvf477f73gm2qfkuly89sy4sadju6wh4t6dcqgh4zwr8ds9g9txg9gppkp nostr:nevent1qqswnmvwph8x9xnqr4n6ytxnfz8nl89a7hfrk2453ldxudtql3j4yns2fj3hs nostr:nevent1qqs2ecqgkcgmlvzj90c8trmw3nld0trtuujnv28f5ezt3huhvvtegmcagpf0y nostr:nevent1qqs9s9zkznyxu6qk7svajntw0v02ldr8462dgt7n5f9slq7aleycsusl96zph nostr:nevent1qqsp7nux9qjzsx4ypcrjexrz25clr9586ar5n5ahc70r7yhakzvaeasd63ulx nostr:nevent1qqsp5gp2xg8lx4kneqrhv990x0velm85s5u2jmggkwwzt8yrxygdc8qgfsp3z nostr:nevent1qqsxdt30myarjhkprzt8xx4kfy7fhyjxshaza0z52nq0pkgwkqguhugt0jswa nostr:nevent1qqs2qq3wpva3lt07xrde3y2vehqy0cwyzye52cvhjnlyw5x3rghsgrq93jycs nostr:nevent1qqsw0959762aa5pxz9hhaa6saszqrnqjrr5umtl5kkj00prqka4fc5qnpfek9 nostr:nevent1qqsx5htpawdvx500074r0skyxhrezkfs7rctuu4afp4puykuvth9kksr9dc64 nostr:nevent1qqsf7kexs3s0g0f4dzv9c8qdns6jh6e26qvecu59d579ud0fta8a7ag7pss04 nostr:nevent1qqszkphl8n8vtgfnrpkudwe8nsm47pm95ajy9a7cdaz3k7shadjynaccpqzv6 nostr:nevent1qqsgrperqd4nrjegephrrdcj0qwkk22glfeq3msumte2evup3f5f29cv9e5vq nostr:nevent1qqsqueyp46tjgh4s6fc7af8r6nnpdetrutmemalfkk0ruqp93zt4ltc3hdj29 nostr:nevent1qqsd34zcm5gm0aws879q9t7sdm7r7rvd75sj4uzxxslwa25ffay3pnc4x9wmg nostr:nevent1qqsz233vcgpjrtkn03kh2wv93jwt0m042jpqp06uank9vfummhdrqxgvq0hnj nostr:nevent1qqsxdtchwzjvxvml4h27ta75542vgc6zpdtzeuma4hrz55v9trswdns9dpxna nostr:nevent1qqs922qlylqjrmr3uaj0f29s82smytg67cxcl208memnktx4h7fhhxqd2wzwc nostr:nevent1qqsrpzxupddee90chcj8psnlhhd8s2r68tvz5u09u7u46wj5a0hyyvs98d2z7 nostr:nevent1qqsfkl9ukp2gss96ut95rwyg3gfcdft4qnkzjc6mg2x4dnpxsezwx3g7dl4fg nostr:nevent1qqs03mv7zygd5stzm6mlh3v57mszuhvnumwfpa94m2axlwqhrtyjfacm9hfaj nostr:nevent1qqsg0k2f4l79804jydkq3ryekkjk95rcysswg02ktrg3cftwq5jnvdc6pcn0x nostr:nevent1qqsw8fnh3x09dj7m4w0engzftejh5pq0dgjzcr23erpg38kyvgz6taq9hg083 nostr:nevent1qqsycaw0y5z5te9r8m3sx8cngczuc0dtzcltf6khwgwhls4y3vxv7wcehkkgx nostr:nevent1qqswpdv0jy9ag757st0c29efprl6jttz3jvrgaxg382txm4r38shhcgfnzhvu nostr:nevent1qqswzt4yac0p8536j4venvexgt03shq94xnsp7lmxuy0vq9wl9dj69qqtr6tg nostr:nevent1qqsw5p0cm9wxvwjlv3z2kewze2t4lw073h7x5lql0g3az7h7jnd0pagxxsmwp nostr:nevent1qqsz92z4pa6zdhhchrygypy39x3j8u4mv98dflxmsw39dyuerfgy2xsp7rg2g nostr:nevent1qqsqur6s28xh68lzft7k6suklrv5knjp4hysunyr7g79caucc8vt7yq6kl0zd nostr:nevent1qqsf02sunq6yqjcpjlm8a4ku8txkyte68gmtvmhyez0lx424cxk65zsv6gk3q nostr:nevent1qqspexe5ew6dt7g3ps9tk2cd345y3jd0asfuyj8pgxv4m5ywqw990lqyhzv9m nostr:nevent1qqsyedkwvv6u4ludqgz623ftuj4mncn5c3tzf533q6xgc4k5xgn435s62yr3l nostr:nevent1qqs0qr3al6we2zeqr4lrkz6nk9cp7cvf9ymt06khw7d4377k7ar5n2gxtem3f nostr:nevent1qqsg5x0qrjk38xpmxh83n2wspg32gwwr4hxqjsc6xz60wess9efy4eg6cpn6v nostr:nevent1qqs9swl3twdd9zjr55gsq43gctczv4cjn0an58gn83wf3ujquu0l7lcff4ma9 nostr:nevent1qqsv9sc8m3e36a253p4jg5am9ay92ncjnx9nttsh5ss37ndr4znu97g0lg0hz nostr:nevent1qqs90fava6xzrjhdpkwld3utw3xl6ghddfmlu9ceql8p82mkv6luvwswptxe2 nostr:nevent1qqsrx0h5jz7vjv7ul0w30rjqzg0eey8r0ff0k9cf8jfcjjr5a57kg8s8tz2qy nostr:nevent1qqsfwln27aduh4yw80cqwml5f7vh5z6v7q80gxmrv3a97x8zfw0a7us40qsmx nostr:nevent1qqsyyl03g27p9ekau4v483800dwc02sfeay8txxn67mr3h3zt476sdqv7dc0g nostr:nevent1qqsgup96lkscndr7jdze308kt495s65uura9vjl8yucfcd0depzpe8cdvlxjr nostr:nevent1qqs0c0zwxpfv4krj0vfku448tl3jpudw56nw4wr4whlje7cexauhd0g6zqjxn nostr:nevent1qqs0dvc82lc2mmzvkmqtcua7kt0vwz4am48kj9sq0rk8xpsxjxw5pgg4qe329 nostr:nevent1qqsxzttj97g67mag82fww0aglmvt5qwvk59e7euswn3nmjtpx5j6thg6c3nz7 nostr:nevent1qqs0gxfve8yz6m93jaseldl8xzhsmpt7k3gkqlv8xlje4q6aqjnna0gezcl83 nostr:nevent1qqspj6puxtaj06z2shd9nr82t2rwwmh6mszapee4gjyj7vra6pwfj4q22x99e nostr:nevent1qqspcrj2zg0jyy7ardz4kt4d5n95wz84jl65hmrdxum7nneeglwtnzcxxzdt7 nostr:nevent1qqsd4ddx493uj3wuxscwfjl9le3f7t2f78yh385666knu26vr9luz4gwa0w24 nostr:nevent1qqsx4w8ztgk5m3wz59mm0sqr7nyzx9hzu005vae6kqaepnpxqw0svwqaq9le0 nostr:nevent1qqsztgtzz4nqf8znh8u3q5fwtnx84mzrjur8gq6dmg3mj2kn3ugx2xca4g2nv nostr:nevent1qqsv6m42nk6uerh02wnflytfvj4nuj0sp43s9lzuvd5thprz9k7jjgqgywnf9 nostr:nevent1qqsvennjay5vvk40t99jwnuefa4lw6zuhya4mg74fsd0klrwyfwjjus0atnfx nostr:nevent1qqs8awph7hzu76df5w8k4xx6j5wmc8tnddxa4sfwnuruea78wr4tg8c47rsa3 nostr:nevent1qqst2222z58smd36lltudxlme8fpyupg8t2c34z803n668t5pmt0ypgsv3ryg nostr:nevent1qqsvjphy6fz8ae244jzdha9xxmz2jcy0pz6zfcse626t9ms5xlcyeecmpdyt6 nostr:nevent1qqs93ghgzxt4ywr404yn4jm5lx8m7l964mmgqtl55khza7jfwsk3klcyup39u nostr:nevent1qqsq0lhuuwewq2kgtjk44z8wnuhv9x0lrvym08dk5p70zk3l9gupp3sv3dlrp nostr:nevent1qqsyq8u0tnangar2w7ft0cfzwglxmwk7kkczpj8k7wqjnasz3sq2sgqssvy50 nostr:nevent1qqsyh3f6lhft7mxmf57v68ypfa4j5fdkuvf43c9q0g5w83jtzwsg86gwhjqtp nostr:nevent1qqsysgrlqjk2wayzw0dymw0r0wv30lk0c5qeagc8h7lmulyffj75clg4t4anr nostr:nevent1qqswcpe2hfr6zk46p0jv65kl3wtp63smv6uxe6j4evsav9dlcpe7xmcx9kqrq nostr:nevent1qqsxv5tuzmfjm3dcz05xng5e9gl6e7vqx84h37p83d6qstzx3hwqwlqtw59hv nostr:nevent1qqs86k2c9akxtzvw7upchwu4pnesj4ds3d3fsg8m76mjdpvj38zwcac6vud53 nostr:nevent1qqszltfvvs22flkqd2v9jzuu222nq9jud78z5sjk8z6y7jmqnd3f3fgme3yek nostr:nevent1qqsrglucq53e84kgkaa2hsq6a5xahraethlykzx6znymtg4gvxenkssx4un3a nostr:nevent1qqsvaq0lwefwnrfkvmrul84fneecua2g7eg8henlkuht0r8u0sp79cqqwt7s8 nostr:nevent1qqsfrah0av2l3dc7valuqklryz2a687t7cenharuq7r6xelm0e0yv4s494vpz nostr:nevent1qqsrt7uykaetqwl2q90x6kd5xhgh6apn8kz7gvy6hgsa42xe6qmqgxcmyll46 nostr:nevent1qqsgl80erg8t5cqdz3wnxzd2g6ekhdtm7rt3nxszzvzxft7v7x8lqgc084p04 nostr:nevent1qqs8gsthklfdzy6fku378tf6807qk86kjcgrgaavrjtdffh2e57la8cwltl53 nostr:nevent1qqswjgler7slw0lncaxhtne5kz3np3tu5umdef2aqavy5atq0tvgm9gns8h40 nostr:nevent1qqsr2ka8n6zv0z4mk6ty9nztqd9qz8rkgt6cjck4ce6mtpm8sxupmsqj7s257 nostr:nevent1qqsrudy60t40q9vup3p0kxrrnlllwnwnyh8kt4x623d3f74jctpnrvsmd8zam nostr:nevent1qqsqskyce40lmwc9v94tkxy5phnzf4p55q090g02wt0x40czw8mkk4svtu7a2 nostr:nevent1qqs24dsj4x02x80lvgtj3khkcqpqv6qyypfse2676et46phrztxs75shwde3x nostr:nevent1qqs2cyspyllevj6ahmzep5jhlnnfc8448uh3jn5m2qfmn8y3dma2qggcrtvve nostr:nevent1qqs0k044ntscwad95k8347wuflpchrl0aszzltfyp2nxpv3g6kr2cass8k459 nostr:nevent1qqsqq9cce7umtkm9e3588n7nl4y3dktlskssapph5z6004hqg9setaq4zcqr3 nostr:nevent1qqsdsxzfqhwxg42a652t4234z7p703lwrulfnz9drsus8erjvnag74c3606pt nostr:nevent1qqs0wjxh4ze8xfk7sec3zu4cepwtwexqty80qpvp5nxxgvutk9lqydch9jzp4 nostr:nevent1qqsgavz69cxs6mx2y42j4qnqn7q5xdwvmnaae2tj2px8zdep0j8rs6g87hl3t nostr:nevent1qqsru6z84jtjmycunulyzf5ns3rq0dweseseyq5rxmuzvcs7ylenu9sykk9re nostr:nevent1qqs2kxhn4sl0p8wyxzcv4gpqqwztky37p2j22qhpjqgn0cy407yn03qmsctfx nostr:nevent1qqsf7ug82cd5c02jkm7uahc4p7kc8j32q2dgvuun46ywmlfmrwu6xns3r0egn nostr:nevent1qqszckunp53566u6grgw75gy2c9ce6902zd3jp9cfg20paq66lxxdjs9l259l nostr:nevent1qqs07qw0kashdjyxgj6w92p44hnd3l9jeamxhc63fkdz9cr8na85pwgqlset5 nostr:nevent1qqsga4g5haatk09u4vkm6nfmw6ngctg6p5jzam5kax27lcnc74vcsdc5fwjjf nostr:nevent1qqs8uu57ukvxfvve900uvynudvazpu8xuw7zvexkctm62rdgtpu600qcdwg0y nostr:nevent1qqsgdc297tvnh06kqrg3e68ftyu6prwjqtvxj782f549jugart2jc5gqcqjyp nostr:nevent1qqsqkus0qg7nnl5jkjzhugjpd6vfn70m0r7xtpyz3mhq9k49unuwg6shprvut nostr:nevent1qqsgxaedjvy4s3rlfg8235c7yh0uxc0e7n967p9j6uuz90tzvafzy6qrmcrwe nostr:nevent1qqsv2j2dchuyajecmrqxv9pra3cju03fwkes5qy3xrjtf55twjmx64cjvx347 nostr:nevent1qqsqmnnasdsf5zmqlq3alycl5r2uestvx5mshvnl56fdjk0qx4t2hkgnzn7ww nostr:nevent1qqsvdm79znu685uehrmmegcmq836jj3qeqtym8cv356wx8y5tscjg9c0dvw4y nostr:nevent1qqsy8wx4ujy7z3e6svmz72zaapu7xqx7y4xsuthuk6ynwkzfl9u92nsl42f8c nostr:nevent1qqswccl50t2p57wdfam07p2lvdqzxeg6dzm72vrjsf0xjl88uk03m4gzx25jj nostr:nevent1qqstv4gslzxfte85yckx07fdn5phluvcnj7a7pf28j7hgthkngs7fgqhl5fay nostr:nevent1qqspeada7h3749ex026n4gp60pkv7rtt5nzn4p76dyz9vfzyhxp5puqw6uech nostr:nevent1qqs88tlgk2gd2dsf3mre36e5nurg8afmynkafwlj59p5295wq2dycccjtp7l7 nostr:nevent1qqstu5z907epgq3rechx0ezqyge3uj7nm2j2ty93hj9rwuxxzrljffc4zr0qc nostr:nevent1qqs2r67wggz466rv4kh3vrhyl8e4t26a5s4tq7wgfrglghnhcw47n6q9mhltw nostr:nevent1qqszerzkulum87k7ykzzg0t7wa2lww8ttt7xlu6m385hl5p07lsk9ych3s90p nostr:nevent1qqs804wfmxcdt6gev9qmyasz7mxq6m8k287ulsfz39umqcgpqqf2jnca7xk42 nostr:nevent1qqsgusg06zl58x44778cskde5n8uudgwwajfdq28nvq38kt8nwsyu8qyw6hhx nostr:nevent1qqsy8ecclr3p6s9r7d0ge060fsc6qveuj8509nkndq9stzp4aslejuqw9j892 nostr:nevent1qqsyxns5ze0qm54f3nhpc0dygqnq60e2nmmgpvlhkg99zt2fp7umedc7latuk nostr:nevent1qqs27g6c4vaqxkc2gvnvuged60095fwdsk4e4ze77ylazg9lgz0mlng67q65m nostr:nevent1qqswcy0v5pn5v9wx6uzln6nr4nl4w5d0c688gx5z3qhepswmhu4zgdcrvux38 nostr:nevent1qqst3l22tc9thmnks3nxa9lqdtejktk44ved3xkyqy34dzuzcz92npcdvgtlr nostr:nevent1qqs0jnryazxjjl8g3hxw2xh4fastfy9cu47lpm2qgh2fc6tf4d78sqcphuvzg nostr:nevent1qqsva8k2qn9pjm4wpg879k37f9hxtrpa6twa4ck9uf33e4udzq308rsavs72j nostr:nevent1qqsggahcy8q0zgyvjdpxpljykjahjsx4tkg7z8qr6m28y0hjvfkredsyu0tfj nostr:nevent1qqspayr6m5dcevp96sgew5zn7dye0gm2lrvwmlhr0nlv8kcayarlp9qlntm3p nostr:nevent1qqsdssqj635ee355wdugls0lr7hgfwjjxdzr3appz2pc0wrsp228wrghtxuzg nostr:nevent1qqs0end22ejwqry63pt4yq99ez2jsxj2d35kpy3dfnkmsdx8pk53pjcw2qdwy nostr:nevent1qqsw5t6gr0svp9wefrve6przj6hqlkp7ma787ac8tauxwtc53ws2a8sru5vm9 nostr:nevent1qqsr53vq37g7mm6chgsafpgn9hscgaku6m00mu96d05lryqx285k0yq7ujhye nostr:nevent1qqs8w3ds968pe2jeazwt3ra5y6r3dlgxqgt0an7fd0zy7wm2lkgc2ucahcjqq nostr:nevent1qqs26szux5exxukg7ht579uytrcs72j2j9h2xf4dwvz044jpntsynagqv9sdz nostr:nevent1qqsrej9r6kazt3eda4hhu70tkax4j5ft9l3ve4apnh5u8p9ltj6allgmn68a7 nostr:nevent1qqsq64h92pdffc50xvmlwdfyms802x029qf5pe8fwlu9n4v4rg93t8gfa7kee nostr:nevent1qqs8hhmaww599xz682l2hx0uvn4sfluc6aa7lydk4nugxejqjeaqeugyg0glt nostr:nevent1qqs832edsy9yxhq765zfummutc0r54zc4xj7n9lcuwcf60c66q494zc7tlqgx nostr:nevent1qqs8etkcd8f2aw2s7efjdsj8w5ch8r8ej9capyx976w343ps9sm7s4g0l37gr nostr:nevent1qqsfwaetdhzn3z6fqs50usmktug5v4stcet3lus70p5hffjq8kcpuhqpu5ef4 nostr:nevent1qqswnvtzachtgqc9gwqvcu4s0mtmwxnl78v544p22u6cuud95s2jgmgaz5glx nostr:nevent1qqspmckx784xjj7mkn70tu6rfnyq0kmpcg4p8jr6dmlh98um8dcqnvgj8n426 nostr:nevent1qqsdxeatzq42tstmculgf62rhj84mpgfzsa54gjsh4hrl6e64jv3wfcvr8fec nostr:nevent1qqspcksa07zqnc0xf9h57mpvna4ke5fd5g8lw0v6wycf980lhh9fzes3k5t94 nostr:nevent1qqsy8kvy6s5spzhyfjvj6lzesj0ynnp5d30pqzuwe93d2t3xmrl77dcjz5sfg nostr:nevent1qqsyh342up3pkjfkvzr0yjaxtu4qg5syquz93xyd6fgatdwqxy8e7mgklaf0f nostr:nevent1qqsyp94g3puhpz0k9vaft8tvpqew024n3asxpklgnax6fdsu2mu4kcqkq7fqz nostr:nevent1qqsznp4zqx06tjmplxdr0q548f3kcn7pj4hvf4g4rgm74yk62c59lnswzsdn4 nostr:nevent1qqs29ffntcwt0t5zv7ecrzjgpd6v2r0nqwg9ymm5luhehgrzhlr4f4shqhwee nostr:nevent1qqsfrn6h3hjk4zrs6pamcdzapap0gvemrm2akxlur005chgh4vaps9sx4y5sl nostr:nevent1qqsql32xdfshaa73ex68fz8e4r6e0lhpcgsgdhczwfsq6e7lqqt703cuhue8l nostr:nevent1qqs952dv2ycq0a2tdvyj7st7sd87pxzh7hceth96hhhwjq7gs95m5ccdf764h nostr:nevent1qqs29kzdduhtv7v2gr40nhzkykls6pwmn9maspl2qs83gqkk23ql42cmxwq3n nostr:nevent1qqspwpz06fysr7xqyjfxg296e5d7hcycp3wkmladpe39tkwtmyyaprgycny5j nostr:nevent1qqswsj30jgpyt623gqpy5gk434xeff94cwqrpzpm2tdznhqlvs6dghcuxdx4l nostr:nevent1qqsvty7umlq35gydcj4n2tmzv334yuf5dnw9p662q22rzfq5yhwpk4gz7fnyp nostr:nevent1qqsppkpezwkyfezakg9se8uzvx8j6z33e7k3f4xrpad378m5jua5z4cms7k8m nostr:nevent1qqsykvscexq75xect594xvyp0yzlstagqa62kmpwr94wl7q0exg8h9cwfxcmz nostr:nevent1qqstfqwlc8rmrqrhdt7zdd082eehssdt4r66h3j3ns42cxvnzjegfrc7qr8wd nostr:nevent1qqs0prhhhyvtz3fwwsu93ndvc6ye32zp885eyg6rkxldc37f0jck2eqe3kqr2 nostr:nevent1qqsvr4nsccw9dehyettdc0tr4t3yycvldjxka6cte8uth5r6xz8vhxcat20d4 nostr:nevent1qqsfkxvh4h3ga60l3w3x5ngu777up09sxrqdjgkrnv3yzdhdn2ljsnsylcsge nostr:nevent1qqsfc83pkdtd4jph9r4hjyc4xqczdcem3ytkvp732zalqkl8jhxaq6c26cp54 nostr:nevent1qqszd2hpl8h2uljcgqe0r4zqrk9v0us4nwu5x03v02cx52hkgrlykjqehsv2d nostr:nevent1qqsdz3m0pc789hk8vv7ldhwnz2ydj93qatn5t6g995y9nqkylcfh8hsex7w94 nostr:nevent1qqsvpr85pg2gammm3fqzhw8lme342mplaau3zeeku0up372eps75cfssvpzkt nostr:nevent1qqsq8j9f0vg5an20rdxfpgylaslpf6nt33srglu9f2pthesfqhjgy4s8w3qmn nostr:nevent1qqsyxu3dg4fprxjc4rneslkgucnwx5h4sc7zvd0w0yydkv2hzymletcksa04g nostr:nevent1qqs08n09gvne3d46y8dhxhv68duzvlkwmg9mnv7467cz4x5utgu3rmc0dcuny nostr:nevent1qqs8tcakcm8dqnzef535ylh8j7m5n98s5qu2zydj9w8d2kfa5mgsv2ccpxcqw nostr:nevent1qqs2sm3kfej6t258k6su7krggu362slve3m9gayjyskgvwt0m49ahdsgdmjnm nostr:nevent1qqs8dvmywjutfgx5cw3r9h355dmfufsxwse495svdx79kq820g2u9fgap3umm nostr:nevent1qqsdqram3x44q994z4e93ufqqav5dwa2la28j4fmwqr5swympy5k8esk2py04 nostr:nevent1qqst0vhcp4sy6h7h6c3cfe957z9pj48ujvhw7yhmgjjmqe0d4u5x3hq45hqan nostr:nevent1qqs28z599avfsddedq8dwulzhyhqggs9wukc6jqdp60fp0kcruck7gg048zc5 nostr:nevent1qqsptwc7rfkt7lhkvwz0h2hrrwxj9v0kak9dqg0lph3pfsxq4mna8ac38gqdm nostr:nevent1qqs04rh8vcey9p78kjugs9xvlmyl5m6043n6turhg0d6xrnn745y5fcqkes8f nostr:nevent1qqs0j9h04kfesvcqeax0ynawe7g7j62jhdanmzp0eal57ayqhgn67qqvs8d6h nostr:nevent1qqsrg4gvrwhvj3np8hqyyl6nsz4twjnxdy3wtd99try3t5pkz07e3pc3sn26m nostr:nevent1qqsga3tc0kc02g726fwrwrjm2e5x7tl3vzmv80sd2as9ywht58gcztcgfcrad nostr:nevent1qqsr5srauwprlzlfl0gxnfkaya0rlqwusqnrnkjzmta03kqxx2xc25s5ctflc nostr:nevent1qqs0fjpmu9w0dgc4a808vvals2j23ny6lrp0u0dz89w5mn9749xsalqva29uj nostr:nevent1qqstrrhjlp5h0qetmyll3dzg95yj4rr0m7rzfvp4f0yla2f3g5uj7hcdkkep0 nostr:nevent1qqs9p5z3djta5r223lpdvjgrcc9y9vcm4lsvj69zqfuhrgw3zqeapccfk9dcw nostr:nevent1qqsfrz8sp6sk0u75zwfskwxqgk2t495ymf5fqtalwdptagrx85d0yhsnejvgv nostr:nevent1qqs9a6ujeew8mzmuh8tewk89cv53fahgwyl552hq2qd5zjp5dccc3uq34j4s4 nostr:nevent1qqs8rhur5klw8pfu32nrqh0cp8n6fwgppvpjzpf9q437csc48x5gmmsngq8hr nostr:nevent1qqspr3sgff05240mlyg9y0j7x45qck8x7edzfeqrdafc9l3jwl490wsm4ll68 nostr:nevent1qqs2vzfrp2082gm88uc34zh7pe5zqypgsxkhed4f2aluep2265955vsatghhe nostr:nevent1qqsfjfaz8932tlxz9gqppvmvk9jpqclp6ejg6cdk488xexp5l8jn44gslrmke nostr:nevent1qqs06kyqpy4y6p24p8rpjc728hzn5cu5yvg57nl393t3hzhs4zrhmdgx7s02z nostr:nevent1qqsw5ez3ew4jmeuvz5tg2whsggqfn4097du4jspawxpun375njduxxq4s79hy nostr:nevent1qqsxrrmedupcnyjkv9azw656c0h70x7allk6kv3wqcqq2enar97xc0qmfsdgd nostr:nevent1qqsf88gx3w544ukdxz6wsr70vnhx42ruf7mn6p93e57jqpff4ty3adcgsu5sq nostr:nevent1qqsg7tef7jx07yp4udwnr3mhk4zc9ckdymqsre2xcjcu8y3ejszk0yqes906u nostr:nevent1qqswmqh45286p5uw83kcy38e0qz65xycn06xlwwg48g99kn6mkmmh4sn4nudp nostr:nevent1qqsdgdmdrnk6mf4rcfnqanjtptkazlkry3dnv5wt49znt4xn2ycyvvq2hp8ke nostr:nevent1qqswyueph6kfgwacrdhttat5pnk732m7qcsqt59sptu3cux9hzjw3scte3kfv nostr:nevent1qqs9gw4n83hgclvurawkhpqwtfdqm257kgkzve9gf6gx6n8p0k46acclzglst nostr:nevent1qqsvf9heuqcsxw05uhmnu67884h73mhq27rcv46lhdjhvly9e5eq4lgsalqhu nostr:nevent1qqs0s3mu4k6wey5zjj7rrff26q7nxpt8r2d3qex5mww00dpfqdltpvq56r5nj nostr:nevent1qqsty4e39zsmsax4m5m06wmw3fe05tlkqujk05k9d0sdz053zguagtstnfgu0 nostr:nevent1qqs9rz3at95dava3wnp05wdp7f6s7kl0rzfzpmm04ahk7a38akspzdqw7slkq nostr:nevent1qqs0vwqx7edy8z7m6sr4tjqjscgqf2fmqynkqequq6cp2cw98te5ags908vau nostr:nevent1qqspf7ms32mqyzt46jss7e2eurk66p2j0kdjt4mxx840e4fnfmd0fpgpnanv3 nostr:nevent1qqsfjtqrw4wmzc926gzkmval7s99p0m36vkkag206y25r0yevaw5dqcvk53zu nostr:nevent1qqsdhhmptxgvjxv30r3zkg48kjangs9u9yyfncjs7j26y3xq04r0e6sgktj68 nostr:nevent1qqszzmmc2krvwn6auf9nvhr9uwau66kymjajwzlfukq7evfyee4ukecs0kgyy nostr:nevent1qqst6w7u8lhjzat6vdl5ys7m4dpr2dp07kqrw6qzflehkd2chhu3u6qlwvdha nostr:nevent1qqsgl48cu28690ns7endh3es2ydjv5wjeexv5gqhjmhmgj2alp352tgdzzss3 nostr:nevent1qqs2dzyjlj99mhxznnuvhlqrn9rma6ydatj63umwaxw7yzvlltafyqcv3f9mz nostr:nevent1qqsgu088v434nqvnnqrsltnuvhh68698gm5acgmne3k67lh48au8vtc6ys0jz nostr:nevent1qqsvvp5wg5mrnc4226c9ukl7kydyd4v0zgte24nff9l7qad4wx7xpqgc2x3h2 nostr:nevent1qqsfwqwgttstups774qu448437tn6wx9ffw7l5w5fu5ljs5s7efh0zq7csjfn nostr:nevent1qqs0n9gqdjrant7lx2vd77023kh9csr256apwv2f7lsucewuz0kzwzgtmxda2 nostr:nevent1qqsreqlk6ncm7j0zsy7ym2kthv0mc93vgjl5l5jkn3s083ztswsujfszcyhyw nostr:nevent1qqsznlsfkf7ptq4rnegqsd0uvz38mmtk2eeshkmw4y7z2klupzrmgqc2rhluu nostr:nevent1qqstfheaq9cfq96w8kyvwc4herjnt5ehru3zen2yjfh4muc8zx9kmtgehnpyc nostr:nevent1qqs8ac3g79el94kgudcce80h6j6u3nnwagh2rgh87fu0ffky09tx6ugsyxd7g nostr:nevent1qqs0vvczfx44sk9vx7f7fd0l5d8nu9jp9mgv8n0n4rx03ytsx9rh64cml8am0 nostr:nevent1qqsyrk88pql3s2ue85cuwr56pude6f7ay67ylymmtezxdl855tu0pfc2sdwre nostr:nevent1qqs06nhur8vlwf2evmjt2fujamcka38v5krpzfs0yh0n7lk25vtj03ct8nxy4 nostr:nevent1qqsdetdugy6me4l44svtrsy4nc6lsvy8fha9824lca5v9ejdfdasclqd9jf2t nostr:nevent1qqs22th6z0g63dswxjxfwnk92tmpzafec4p9j93cw99tvelervzj2ys3lrsgf nostr:nevent1qqswyktlpagzpjfmv7ldtgkpdzt93zt76s04sa96ngkl976wjpm3dagat2pny nostr:nevent1qqs9pv0457acvajt7ln7tlq39nhlt7tcn4u2l8pvmtjm0f3n3ueuvggxtjsq4 nostr:nevent1qqsztv6rh9s3mx3h237nywtz3z86w6ydsynyp9nzyu43qhuejx5kj5cmc4sv4 nostr:nevent1qqsdu6aqu9y06pw9uk5zah408f5whnuunc3eafmemh5pfeyh20gwc9gr2m00g nostr:nevent1qqsdctkdrz4d0vnendwrekj9uhfw4lkxfjny2gnyrmjvgn0huj3u2xc3aavvw nostr:nevent1qqsp477v4mk2d4qvpj4xt6ua43rj53eqs48qk6jh7lm4c300fq6nm2qxmqz68 nostr:nevent1qqsfgl3x0mv25ytjtr0p5vq2acm4hhnmuxynwxe9a0whvvylsff9ajg0r6du2 nostr:nevent1qqsyvy3qd2hg5tmatgzgzrw9nuqk7tnqtuzzvxhfj7cf9mn06nsq3psxv56se nostr:nevent1qqsgx7lwjaj65ey59m42lvquam85l0vxvx9fcky43nhff3fxy8t7a4su60nr7 nostr:nevent1qqsv6g20rdeq229sfanduu2c497gp9gttejyd9hcpalm4u2f6af3gjc8ynpjf nostr:nevent1qqsqqrmzka388vxuq3ly3urust3svxr7lewxjnhul6v2f9na0xwr3ncxu638f nostr:nevent1qqsxdx9heupdzvhepkq52j0655p94j5w5z72hsy9dcst8h9dgcnq82qwssgfj nostr:nevent1qqsrdvpmljkwdxf4m8jj3ju63w7f42cy869ukwhmgxk5u47vr9q4vsgg54903 nostr:nevent1qqswyy7rwkrfv0q98tdhv43sln0m6gt2yy585m5km70ylxds76g9shst6r9e8 nostr:nevent1qqsw2e5a6hn8hca8xe0aywrgrgd89800xy8680f7cmwc9vtnag47jwqxplvu0 nostr:nevent1qqsywxjm4ay8lcxqvrxqvfgfcfsck29w67uf6fpwas0u2vvm5e772dq6unz4j nostr:nevent1qqsxa9w7lyydy3kxwnnm0a8w2vzjt2px7xklegw2apyvr68wgeepq6qjvmm32 nostr:nevent1qqszt2x6zft0f39yxu2er5qhh7z09xh67kcas9cunwshx7pz3w2xlzg8w6yyx nostr:nevent1qqsvj9q04sw0hlwvfc9ul7yufjd8uy9v0zlhlplr36u9r9t37ffl3ggtx7ard nostr:nevent1qqsgwj2umphzxm82njqzqhm3ujhyept9wd5pvxyzl0u8yctvh4feugcl83uh6 nostr:nevent1qqs93wup3yx2l85rs427uzucujaym9xpkrq6frnhyl8cd9rl8atp6hsak3a3t nostr:nevent1qqs22gxegsg8jwqzptdu9v0m0z9a33tnr42asuujp880qegvakdfasqzzz8tn nostr:nevent1qqsvx3na0fj2k5z9n9jjmcfnxjscq4j58mhpk9yd5ga29z7tq5rayug2pd030 nostr:nevent1qqsgalz2tjnszu03qja9tqmh3fnfhmpmdav9khcwh9506wq9dx50s0gqxe550 nostr:nevent1qqstd0rl52dcjacw8v072e40kc54nyygv436fkja6k2npka0h4x8qhgg87n9y nostr:nevent1qqsyj0hhcgdj3s97zvdnlpwktru2e0f6g002674spyyektxqxky5mpsqym78u nostr:nevent1qqs8tyugskp6gyl89qeynpjp485vsfpltyqx0v5d6cvuacv773q9eqquleude nostr:nevent1qqst2u3y6w830ef6a3sp66gxceryenl3k36ch36mvl9e2d6jwfmgkwqkv4v3e nostr:nevent1qqsy8qhhxhh36xq4kaksyhxm2vy7vuyujrjdxu9m80mw889wx0va3eghz6xc6 nostr:nevent1qqsz7spxfkrzawcwge0hqt9l2q6kc5fc3s5h7pcwj8kqmdtgwsft56q32ezp9 nostr:nevent1qqsrtj4xvtx6tdjv4zmm6axugf29t8xrzp2nmdyh09rzfmaukzp79nckyr3p6 nostr:nevent1qqsrthfeuwsw8ty32lgk6jxqnt2mcr2g7sajze29tyztzys0lxavhkgn609w9 nostr:nevent1qqs8afxujdxjw2jcdjtfsmux72xufzwhhvtc6f44e4yawlcygu9mhvckpdr2f nostr:nevent1qqsfuz3xezyq9e3y99wz6u4z68e09ult0urcyk80rrd4w38jxrcp08gh2hp8f nostr:nevent1qqsrc9nth6vef28sylzxsp7a7ydzqq3slsuas2ydcm4chz76erzpy3qu52mes nostr:nevent1qqsvqr903utwyynxkqyt3nf4jd3gtk355t0rfj6vec6yfp5huqvu39g5tt923 nostr:nevent1qqsgs0alua2ftak3yjp2dkvaxtxk59q8jr6fl3z02z9dt5ecalgjsmqyvpnz8 nostr:nevent1qqsx7sg2tshm7fgku6y86krp2sfvk7evua8mzy86agqfrwphtf5zk9q0rszzc nostr:nevent1qqs95ztf6g0w0k88d8ts5zcc72sw2f0lc0anhcp0f590sxrya70vlas3p0fzr nostr:nevent1qqsq4fsrzz7r60qk7lhmpq9j3e38edee4uuuhqnlpgw90dmqyz3jkscwh3emm nostr:nevent1qqsgnsekfcu53ser5pdnrfpwghsjl57r69xdgjnrn0qxflrvwhv0yxcnw8yyu nostr:nevent1qqswwf3wnj082vrpdjzjd8th0lkes6rdvtzgx0wfftn9398hajvypqc7fvpxs nostr:nevent1qqsyjdhjarz0dmpzpqd0ywhmnyenhmmy28lwj8nkca9av3fxme3s4xsc459u8 nostr:nevent1qqsyqkuylp78memrx58atm4pjggfjpnqmv2z6u0unngpgm89xrp7wtg0qtdus nostr:nevent1qqsv9sdnzjpk98ezcldylxmp7cr5207uxq3em0qdq4mxlc9rw3uflzgsra6wt nostr:nevent1qqsqalxng8fyvyzm5x9rvmu8f6g2mc4fvl42s8qks3v23admjjva9rst7th07 nostr:nevent1qqs245rsx9q22ycamy0dcm6p8gmawzlwj8eq9lp6v0kw96ssdzs2zxswfywrz nostr:nevent1qqsxjvyqjmy9h42kz5pud7uhl87kj3ceagdv4pseyjgrst9aj4r45nqxpwv47 nostr:nevent1qqsr97gg0jm0f87dqvt5dq97jx32uj004lkvapvkqy59wspuytup8zq6skp4k nostr:nevent1qqsy7xuzq5dewwfwrvwannr6vvdxhkxg7njjhqd435nq2k4vcm2ecns4d0agk nostr:nevent1qqs9e5ztm2fhqzm0283u2mzkvgnuv94cvx2h8p0946ch75g03lwr7xsg8mqt7 nostr:nevent1qqs0fvyf9w00k7cfdr7r8hptptx5t7q9gchw40twx24l4e7jcuv605gq34ugz nostr:nevent1qqs9zswmvckn4tke053m9tvhurpf7pwuc3kq82evun9vmvczdz9r5ec95k43c nostr:nevent1qqsrxpxjylc2fjtvwjvt7grk5ae5mwtsp9frkemm2lygfhqurfnfqwcm9k48f nostr:nevent1qqsw6p2j9g9yq0lh3d794nt20flzms2nyvq2752ypfwj2rnlx5sw4tghd5rvx nostr:nevent1qqswrv27dzmtavpcz6d9aphrg8anarhv7jvzfw3twfu43j03qahuc7g3j7pu7 nostr:nevent1qqsvqjgqkw0nfj0yph2ahgfhutw28u5ntyv6s8sz7lxn4jyg6mtw99ga78gwz nostr:nevent1qqsgp93wmz9uyzmzwunh8zvaz8wndg36x04kryw565fwgs6glprlfjqxu537m nostr:nevent1qqszrqjw83xkxdwkp9k45e5fnulp7gjf9ct5zqwxuy8e0mdx2r9fsrcdyay6n nostr:nevent1qqsdyvrhkvdwz6m73sckckr4esauq09u9dhphskxa22kl408gkpmdmg4f85pz nostr:nevent1qqs9g7dhjwlnludgsnkutdf2mnuc4tvagn4jcg7z4uufr3h2w9jd5zsv777kv nostr:nevent1qqsgdwljd9dynp9zd6c2c5l6fyy0j8sh5c44tv55rn5l24lfcq0pz3q2r0hmw nostr:nevent1qqs2atfxw3lzqtawhksqdvzqx7qw3xgp30knlks6lp0rtzhhdczafdqugctck nostr:nevent1qqstr87at5uetk975gwa26evejf9uuhdja84uc602dq7u3ktgfculkc8z948c nostr:nevent1qqsw6kt9s9hqc0p6cd97gxgfdgntdc4kwsf06t8r5q8k7syllr5nffc3e2ved nostr:nevent1qqs2vvsyxxsf73g68nnfkpskyjrhd655852w9w39m4t9yfxk70t2amsqtvlc8 nostr:nevent1qqs9qha3elys5qneel0rlt0s5ch6y6hytt8umpp25knpfu5lm3kvs8snxet5m nostr:nevent1qqs2gkprq3kd4dqf7lzqhg9mgqa9dnagjgaresvgcv63syf0zma0jagdcykl0 nostr:nevent1qqsdn093lcfapk0ke2zqe0982yx66auxvnjklq0ytsxmv7txsn5l06q76jefa nostr:nevent1qqsx2yxa4y7u4trxgtkyvp4jfssdm3lfrtkk7cpkewnpuflq522mkccttn0m9 nostr:nevent1qqsfpphq39tphc0znfdvzty88fdejm4wjr5l0n7ksld3vff0kuhak2cas8yhv nostr:nevent1qqsfvzmk7cfanupzthrjh0t600z6szxj0mz40hrrm4rd7kwqqcehrec27k2qw nostr:nevent1qqsqamgz56h7lqg96p3a42mhr9f7rxjprpsaawz9n2uhgh8n7kaukvglw2xvy nostr:nevent1qqsqt3wp8htyhre4d9n22ldml7k9vs655h55n8758yeenwnc2c8yxmc4fn77d nostr:nevent1qqsrurt0gcz8jzlkyqahz288ex3mqwu8tyh0rcpwlrmu5jckhj3wg5sd6m3a8 nostr:nevent1qqsrsz2uyqvakvwpkne2aqhl3d9yjjyzz2wemsj6vv63rcvcylra6cge70xu7 nostr:nevent1qqs93dzpp2acdw7aq9nwtjg4ap6ytjrc6z99mz0x4l6gq2arpd4r8nq3vzw6u nostr:nevent1qqsvam60cggvxtgxdelm4ja6n8wkqjlsdvwau4yqpr67q85jrc8fmcs6tud72 nostr:nevent1qqsztc59n4p23tw3zwewzn88nz99pwal0fh37aw3gg3ymzlg8np5ghguh0r69 nostr:nevent1qqs9p8k384u2qmugnzusxnna2ge3wldg4rvs895zu5pq6l9df24h0ygrytc6v nostr:nevent1qqsvh2lfpxvp7x7cs9d8ttr9ra9m6xl5405lal7x6f2uf5xymlz6j9gqp4ut3 nostr:nevent1qqspndcrk2lxd86tvdy3yd5gqmytvr543pa2cpsgmjylprk33zcsk3crx34t7 nostr:nevent1qqspr3nmus3ch4zy8js73gvqxyz5p5ed8ch6rxl4ymqs2x9fql4ys8gn9x9qw nostr:nevent1qqspslhp7kzfgu0t8rgf0nhm0s4rgnj9rx329vuze8f62r0qmtpx8xcm0tprj nostr:nevent1qqsg3hk5mdre8ny2fpp5xwct7cary359ld8cx97f5h388epg9flwgeqfuzwzy nostr:nevent1qqs9d7dqsqfp2cv3mstn7fnwdsemtct44wan43uy4kkfchd49l65lxg5h2cjz nostr:nevent1qqszn7ycnfn9suns5xxam2207v70ast0w07yq9shwzv6e9cuvz2w0vq22kafd nostr:nevent1qqsdyfrj2n0mxtkgmdy562qdahj8vzrt8drjphvw4cfgp45qvwq06lgu8tzea nostr:nevent1qqs0tja3rdn95q3plklyvz2swkyj8wmfnf5sese5882mh40yj85mdkgcx9sdt nostr:nevent1qqsdfj4zf20wpg8ldkdt2pdnr0tjmjfgc0mz8e2t7l4kf7syrelxhnqnplcq8 nostr:nevent1qqsp9wva4ujkvzyl7ve05h95quq6shnvsgexkw6n588n8wym6tutujcrmdcp8 nostr:nevent1qqs2f6t7et6tag8qms6vkzwpw9tn3fvxqp86hh7dxrr4pxfeeunge6cgaykdg nostr:nevent1qqs0lnhgz0khlsjjq6404p2hug3pwvcqt6x2x6l7yfmfqwzxf364y2gawq8xh nostr:nevent1qqspj2ar7xc4zs3catcks73ppvs77sj59zfdd6vu0h99ukqdt7wf0cgpdcq7s nostr:nevent1qqsyytgaxazjm8gnj64g5l4hushyu9040r336xs4sl0s79jet77esyspcmfel nostr:nevent1qqsw0jdhk5sytywvpn4gzfy6ahrjsmarellyjwy6vm4t82l83x9h4zca63vzu nostr:nevent1qqsgs9q52e920wx0gsy29egqch5x6aey9mtt3jl8kv340uw7lmcgceg43ecjv nostr:nevent1qqsdj0awygazadajkysga3anet6s38vrxrvj55kvhyguvyagqxk2z3sjla65v nostr:nevent1qqsypmjgxeqt9rah3sfxraudpdfhfj0k0sut39n07e4xwtpw5fmju8qfdh234 nostr:nevent1qqspaqxwrg9trpcg4sp2gtjjw6jw6u2rj9yu8al2hscdfdv8ra60f2s5z56vf nostr:nevent1qqsdp3kg2f7ena80zkpw68uc8x4fatccul56jf5j87nhzaqk8mwgsccczcc57 nostr:nevent1qqs9p8wdx53y57ysg39jjgzt5gu67ntqq0u8zv7gsgp3v3xsxw6ta4ssvh6vp nostr:nevent1qqsppejxz438ummams5427fzzfg4lnuswfww6ha2yapf4kkl73mhm6sjtlans nostr:nevent1qqsfewzswnqzwkp76qp7rga0007v2er0s797eqcd2z8cee57u74xv0cn290jt nostr:nevent1qqsq9vjah3gtma3gz99y4m7ey6df8p34n8u572cmaqzwq95xl9xm72gwfrqg8 nostr:nevent1qqsw2qm4664k4f6633j57t7vrwxn9rht6x0sf2suaejjgttrgxm52ccvv9lrj nostr:nevent1qqsplx6sls8ga3eez376m6umwszjj6lmuardvzs72pyekgzyanf0c5s5d5q2r nostr:nevent1qqs8cast93yvaxl0zj20aakl6h4hz6wx8vr7sv4cy4sz20frpdj9ezslrvq4s nostr:nevent1qqswku45leeulqe574ustynud357jwneu3t02qatw0atr3zyclxzaqscxj0sj nostr:nevent1qqsfmsqlukjx47aumecfhq979c53mmyv99ftfgj2luz9h8fe54m9x7sg0jcy9 nostr:nevent1qqsyquj9cquhsmzescerqjyur4cct2eatd6yrp7cxlfjzr0502s7fccyggrwq nostr:nevent1qqsxxurfn8xd83nz52jw2z37cvc3pdnsxvtp6fn9wkzysezh600wl0qs3mdws nostr:nevent1qqsdalre0nscl5mcg8z5tj2rwc08qpjphzvdy56fqvshtuuuvaqgjtskgr03s nostr:nevent1qqszln2q627ef64djy5pn05jzuh8alnuurl4z67fagtehucfg24pkscrgnnth nostr:nevent1qqs0ztxssvt4kt7kuwyts6z4pm7k46undqpccfvn6r54snuzax66z8qw8fyvk nostr:nevent1qqsw8h3n6xc6f5tpqtcqud68tdczruae32hqwdenes34k5dup6kqxqgnwawsu nostr:nevent1qqswjh2qdz0dgmj3va747seu5eu9lnr49zt9kws4lx8lczw74x5gj0c70r6lg nostr:nevent1qqswvkdqtkxy627hvxue8jsam0m93scj7p6jjgqh0mn2r6m9u4pfq9g6q882j nostr:nevent1qqsd4uhh42gq9sj4vtwcr6cnkpwd9k3mzm0g8myakg9ynglfkxyvlqca64zcs nostr:nevent1qqs8wnayqec04sqvl6rt9kyylty09jng6g4ktv8h594x95vn352a43suhqvtu nostr:nevent1qqsfsguft8a77ttqff88emq8dfrvqs8v8lc8ka5d2pjt57wesq6tk8cz4a84y nostr:nevent1qqsf99szvuzldnvgg49dnvlttttd89xpkc9rhfn4wghsfwalrsplesqvw5tpd nostr:nevent1qqsv4vptazj68zgxvf8z5zy3ptz8vwfgkq99a65l2s7hslc5y8vafequjwp3t nostr:nevent1qqsqa5zjxcdu3t7qxlqnrgcgyvftwr8adns8eq6anevwalawpshjs2g48e9gl nostr:nevent1qqsx92uj3cg62w3fsnys7vepwvf9x347hdm3cgww4nvqetdc8h6y5aszzrs7z nostr:nevent1qqs97wu7kt8g3u9sp06rduksjh22uz28etjv7d9fqccfzh2rcajc5ssx6660y nostr:nevent1qqszrjy9qltpxrmqelm39s8f68p3mzq3mz6hy535kt576ryd4xj45rc6m42vz nostr:nevent1qqsz3tzzg2cp2qqu0wpcvg3lgdz7t5jalrl3z9vnhh4qxacx3mt370gma2eur nostr:nevent1qqs8ys6zj6ta8c9m4f47g04tyc4s0uk3rzlj8nzyvn88rqjsak8d3acd9m46w nostr:nevent1qqszc99x43vh4y6g6ufa6s4ffrppjgjmun27je898u90fdml6p2hz8g3dtnhp nostr:nevent1qqs8k903clgruktvagvadtf5huyx4leedd0w9shcrgwyg90y0g7tzmck89mzp nostr:nevent1qqsydxc8mzmsf0qyx8paweap69qaw8fgssz56xmg5q6grxqee2uz75gszqegy nostr:nevent1qqsdscwrfvt0fr0847qd2edna8lduuh7fk2g8jhktvr0r3gmrs7l4kgw08n9r nostr:nevent1qqsrf7tduyxx0h3ywed0pfjtnf7wxjde6xqzeu9qczwar50ptql64uc2cytg3 nostr:nevent1qqstnwlulgt689cwygappskjlexnt3ejzlh380w6gsx93e4mg2smt8gdrz8l9 nostr:nevent1qqsdmke8e87qvy54lz0u3twz36wsz02t8cp0qp5v5hepwd2nf4lfg3seyp84n nostr:nevent1qqszrr2k94yve0v5lxnm82x55vkwu3g36eqf8nya5cgxz9utwc7tlvccuu63k nostr:nevent1qqswgyad2qu6ltmnfasetun80hctvkx5npnwqamse33auvpm2tev5usvx5xd2 nostr:nevent1qqs9cxp7w8tjzed2aaxfscglmac4ddcqzmt667pv2qxck6zmfs7gmkcdxpzps nostr:nevent1qqsgdknwqqa6gkr0x403s6eh3xxjxqd0gy8hxp9mkxkuffaxqmffk9gya2fhh nostr:nevent1qqs0rq7r8s56jhnrysnkg4k99f0q96uphl7vjvjexaazufpzmjl2ldc8ppz5l nostr:nevent1qqsx24ratma6qgt65vj30k5vtcf8ls5l9swrxhe82t3f7xev92n2ckgxepk7g nostr:nevent1qqs06jpjgw56t0xuuu82td6sd8yjnpu9d78z4vvxc6q9gxq5axh0n6spryvch nostr:nevent1qqspa75xvvkw6zpavvrgp3mk30y6shjsg43v0yekk2nqf582xek3mvqr4vjw4 nostr:nevent1qqsvlz88ahc6uq7yqfuuus2vgk035ywa582amt3umaxq0a4hw7sdvzchnavfj nostr:nevent1qqs908tjsfvv9hwn64v800da3p2lkgwcwv695eksc6hhkavgqk6wleg3ue08p nostr:nevent1qqs97hyy2zm3lsah7r3d6u536xf5wn2w8afyqlz7zgqwmaqsn0flsnczp2q4f nostr:nevent1qqsg2hatn34sm5qpsxsykdk35nwrp68n5ggjlgac2qrhjxrzp6vgvlc8v8nuj nostr:nevent1qqsyu8evwrh0kagzjcpcfy8nhdvt5gdnf5q0pex7vukagnm3llzljycp4d3h0 nostr:nevent1qqsvj2hnvgme0zzf8p6u0ehlk27z5yn4zwlravn9ft3smgks77gnxnst533zf nostr:nevent1qqszhfx4aq8qllq3xd2cnyqyenwzu0gysqr9fdrwsx73zp5rv9uflegmeqz70 nostr:nevent1qqsqmga4dkcqkw8tzugg23p7qck622wlgxhhtfshppuzpt8a8xpneac9avf4s nostr:nevent1qqsp3tf4vamjezdpcc4d9jxjrqj6mpunehw4n0p0m6cwdzxy2rgllyqeves5g nostr:nevent1qqs8vnfc2uuvsce0c88kyz5qpn954zv5wqdksprq20c84x0m8axndlg3wc3v2 nostr:nevent1qqsgvctjju645q2yuleqmmt7ku4pwjrf0pjgher4um87k6t33h4yycg5ewtzj nostr:nevent1qqs0ud2vpw9mp59dq5pm9hyxhu6vye9z68k9syrhfjsdqed89zhureqycl52m nostr:nevent1qqszkwqymc8xhvn0afnw9j4ax3dts6e7rv5v9n5zhqmxuxgqmv09kns8rjn00 nostr:nevent1qqs8e6kcap8ae2es6t34053pfvpkeucpt34ve6hhrfgnvh7j2fa4u7qnxaaw0 nostr:nevent1qqsvjd08zysyj93ypsze3jraww4hjdqgr25kzee86c2mutz08rzjgac4k4ef0 nostr:nevent1qqsqqgqnayjy80wfa3qkws83a0ef2rxfnpdet5f33ph0csz3gcqap8gjjnyf8 nostr:nevent1qqsp5m8ar6rsuaah2s8mz8knsq7fm3vlqk60pkvs9xvgugxt99c46wq8va8vg nostr:nevent1qqszptmufg2y38v2cy6v57ptnf27mg7kvh5hmp8uhk9cjwl9m8zrnqc6vf5dx nostr:nevent1qqsg9jl952dq4qvzyfklverpt5aqkp6lmw04kzz6z3zz3n9qg5unt7qjchphg nostr:nevent1qqs9e8jgsv4kyulgz0r7x5z3mxuw2l5ya8las4tkf5z8sy97elvud8qq9s88n nostr:nevent1qqsw0w3f0jvx6pa203kqm8lmhaf2qq69tvnt0f7pedp8ksmtazmjunqzvz5d5 nostr:nevent1qqs25shxc9l6mcudx8su646etmfmx7ywv87dcewjxu87qax49lnkylglpk47n nostr:nevent1qqsfj00j5sk7fuxuxxt8wpf9d60vysfqk0mz53478tfvccx4s4ys7rc2l0uzj nostr:nevent1qqsfwdnw4qfc7j3hnhcrxdu7ecxvgpjmveftu9g29fxg4ra7k9vvehgd744hs nostr:nevent1qqsfqm6phetgyjr7f5zt67gq6k8dv2lgh7j4leax75wk0ry4wfral4sp9pv56 nostr:nevent1qqsrtl8wtsxcrmncwkjrshm3d7ys633zswz5y7r530ywlfpsjk8qtpsprkh4r nostr:nevent1qqs2mqqlpq3s5scaz9dsvn4vnqwzyyp8wtxe43k2pmlfvn9qk9ck8ksts3ll3 nostr:nevent1qqsyl7rhny5et457dm6l23z6hercuvv5hch7pm5xs4v2ekn44c27zaqjpx0r2 nostr:nevent1qqsp3yaj6hzzfd840kmvsct9nw7y94c7pdfw2cnkdgqwaswx2xr0wcqeusc5d nostr:nevent1qqs2ze6chukganrfwmnspce3nuu02zmh0r4nn3z5ed62xx8qtvdjfzsyzp75l nostr:nevent1qqs0kq8eevn32v0karl0naywzeqck2m9sqsync2p0z4phc2tdx2mf2cqer0ws nostr:nevent1qqs9h77g2c3t72q4l9n7e76me8488qkdxyjw2l95nztx36kzxd73tjq973dat nostr:nevent1qqszq5lza048954nq30pwfmqaapentajp7zjqmjtw8zvh0zunt662vsvuqzz5 nostr:nevent1qqsxwhlaqhtkhpsn209e0a7lla3upc0gyse4pyg9np44lc7vg0nuzhcjtljuf nostr:nevent1qqsg2a04k9r6mggptyxjjt9d5whjull77d3aw8xfel8e29eeje8ugzqd8frp4 nostr:nevent1qqs8sk0p79mn9cgcjgxhycyrtq0fxzxepvlnd706mfyrhyyj7jqyk5qhuqfpw nostr:nevent1qqsx9t68ffff4cnz2z36n52eezk6ayqefud340j5thdft7fjt2upd3q0vyzc7 nostr:nevent1qqsw6cn4w95ku93u9atcrduz6st8vuwf9zf4qjge3w6xkpa8lp6rzesufawc4 nostr:nevent1qqsv9yjmw4gq3xgxy4fq02rqk8gsqxk7wyh4uvhppezxrcp7utacdyq233x8j nostr:nevent1qqsrlgvn2uu0zueultxv7stkaalw7vdu2z2ukvttfdw5sj2y865g50gws5cds nostr:nevent1qqsgarz5ppp3mn4m77t2xzzjqq0tps5sjxuve3k2w0ylf55vd4a4uqsxvd9xj nostr:nevent1qqs95z85mhl75j27g5aqw8s3ntm5kasmlglsg3w3u2h6lncyrg0rvkqc5zgjf nostr:nevent1qqspdzkrtk8h8h67egltafs7s32j9vvzxcpycm8dd689e572atr8xfg30a8ce nostr:nevent1qqsq2kd7c2flkrwqz4344gpwx4al4ekrr9wxe3kt7rjz7amcutnzcpsej2atv nostr:nevent1qqsfhz5rx22f5m3x60dpe08fjjpu7mrkeqpq0z2jjn54yh3uzdw257gpws5nq nostr:nevent1qqszc7l3tp70y0ml3zvppuyj2kvs07knxq6d8je3saemv2pgthc2hgczy6pw9 nostr:nevent1qqsta6ec23jz9jpxg8cfy0ae84xcqrcka6u7vsknjfwsq7ec9cx2k2gyfmgup nostr:nevent1qqsyad6h6dpykmhehuaseh2cu53reqf4q5ff7g0k494jvqwjua2dmesxdjwtq nostr:nevent1qqs0g5nm4jajj9rfzd42cueqhakyevs0zg3zsmnv2y6va6dqfnzx79cds0u6e nostr:nevent1qqs8kzvkgq7judfywvt6vaekwn9azslavl75xe40t8wnzhtar24p3kcndx7ld nostr:nevent1qqs24ynaypvt745e0nmdux5cjt57fxs9wtda3p7nnn5jslmxv9g9q4g2zt603 nostr:nevent1qqsp2nujt5m6ypp5cn4yauz58stjn4m3jguecklw7hgyjdg73zc4ddsdz32p3 nostr:nevent1qqsx9sqkyv5afv03mdc2w0ay3t0u872nme3c6ryvs48r5hd7gjg6raq9qa7sq nostr:nevent1qqsv0jsyde7lndup8czlzft8dw9mg06w3evmhtz4ezj2zteepzxacwgdsv7jw nostr:nevent1qqsdu644w6mrn3u468vzuhprckkc8xjqznev2h602ft74c76vx2350cgrqv3a nostr:nevent1qqsg6v7z35vjrfrqkly6fewjjk0yxd5rwdepp28t9ghnt3s9kpdynhce8w5t9 nostr:nevent1qqs9l446svwqwr5h54ygrceqvf20guta566ezwkneu2hx49ha5vdalcjevmxl nostr:nevent1qqsfurxh37ap65w8c87ju4pr4jr9245drjf3ua4l7hc29429cse7e5cw46m4c nostr:nevent1qqs2q76mjpqq8p9kz86869gs65ccrjye2uml887tdau9znqg43k7phg0mzlx2 nostr:nevent1qqsdq24a356ep48la4yt74tcyt5as37ux0ejxfzpthzd5y85ws0n4xqars3lu
-
@ 83279ad2:bd49240d
2025-03-30 14:21:49Test
-
@ ff517fbf:fde1561b
2025-03-30 04:43:09ビットコインが「最強の担保」と言われる理由
ビットコインは「デジタルゴールド」とも呼ばれることがありますが、実はローンの担保としても最強だと言われています。その理由を、他の資産(株式、不動産、金など)と比較しながら見てみましょう。
-
流動性と即時性:ビットコインは24時間365日世界中で取引されているため、非常に流動性が高い資産です。売買がすぐにできて価格も常に明確なので、担保評価がしやすく、お金を貸す側・借りる側双方に安心感を与えます。一方、株式や不動産は市場が営業時間内しか動かず、現金化にも時間がかかります。不動産は売却に数ヶ月かかることもありますし、金(ゴールド)は現物を保管・輸送する手間があります。ビットコインならネット上で即座に担保設定・解除ができるのです。
-
分割性と柔軟性:ビットコインは小数点以下8桁まで分割可能(1億分の1が最小単位の「サトシ」)なので、必要な額だけ正確に担保に充てることができます。他方、土地や建物を一部だけ担保に入れることは難しいですし、株式も1株未満の細かい調整はできません。ビットコインなら価値の微調整が容易で、担保として柔軟に扱えるのです。
-
管理のしやすさ(マルチシグによる信頼性):HodlHodlのLendでは、ビットコイン担保は2-of-3のマルチシグ契約で管理されます。これは「借り手・貸し手・プラットフォーム」の3者それぞれが鍵を持ち、2つの鍵の同意がないとビットコインを動かせない仕組みです。このため、誰か一人が勝手に担保を持ち逃げすることができず、第三者(HodlHodl)も単独ではコインを移動できません。ビットコインだからこそ実現できる非中央集権で安全な担保管理であり、株式や不動産を担保にする場合のように銀行や証券会社といった仲介業者に頼る必要がありません。
-
国境を越えた利用:ビットコインはインターネットがつながる所なら世界中どこでも送受信できます。このため、日本にいながら海外の相手とでもローン契約が可能です。たとえば日本の方がビットコインを担保にドル建てのステーブルコインを借り、それを日本円に換えて使うこともできます(為替リスクには注意ですが…)。不動産を海外の人と直接やり取りするのは現実的に難しいですが、ビットコインならグローバルに担保が活用できるのです。
-
希少性と価値の上昇期待:ビットコインは発行上限が決まっており(2100万BTCまで)、時間とともに新規供給が減っていきます。過去の長期的な価格推移を見ると、短期的な変動は激しいものの数年〜十年のスパンでは上昇傾向にあります。一方、法定通貨建ての資産(債券や株式など)はインフレの影響で実質価値が目減りすることがあります。ビットコインは長期保有すれば価値が上がりやすい特性があるため、「今手放したくない資産」として担保に向いています。実際、HodlHodlのチームは「ビットコインはスーパーカCollateral(超優秀な担保)だ」と述べています。
こうした理由から、ビットコインは現時点で考えうる中でも最良の担保資産と考えられています。株や不動産のように書類手続きや名義変更をしなくても、ビットコインならブロックチェーン上の契約でシンプルに担保設定ができる――この手軽さと信頼性が大きな魅力です。
匿名&プライバシー重視:KYC不要のP2Pレンディングのメリット
HodlHodlのLend最大の特徴の一つは、本人確認(KYC)が一切不要だという点です。日本の多くの金融サービスでは口座開設時に運転免許証やマイナンバー提出など煩雑な手続きが必要ですが、Lendではメールアドレスでアカウント登録するだけでOK。これは「匿名性・プライバシー」を重視する人にとって非常に相性が良いポイントです。
-
個人情報を晒さなくて良い安心感:日本では昔から「人に迷惑をかけない」「目立たない」ことが美徳とされ、特にお金の話は他人に知られたくないと考える人が多いですよね。Lendは匿名で利用できるため、借金をすることを周囲に知られたくない人でも安心です。銀行からローンを借りるときのように収入証明や保証人を用意する必要もなく、誰にも知られずひっそりと資金調達ができます。
-
ノー・チェック&ノー・ペーパー:貸し借りにあたって信用審査や過去の借入履歴チェックがありません 。極端な話、今まで金融履歴が全く無い人や、銀行に相手にされないような人でも、ビットコインさえ持っていればお金を借りられるのです。書類のやり取りが無いので手続きもスピーディーです。「印鑑証明や収入証明を揃えて…」という面倒とは無縁で、ネット上でクリックして契約が完結します。
-
プライバシーの保護:個人情報を提出しないということは、情報漏洩のリスクも無いということです。近年、日本でも個人情報の流出事件が相次いでおり、不安に感じる方も多いでしょう。Lendではアカウント登録時にメールアドレスとパスワード以外何も求められません。財務情報や身元情報がどこかに蓄積される心配がないのは、大きな安心材料です。
-
国や機関から干渉されにくい:匿名であるということは、極端に言えば誰にも利用を知られないということです。たとえば「ローンを借りると住宅ローンの審査に響くかな…」とか「副業の資金調達を会社に知られたくないな…」といった心配も、匿名のP2Pローンなら不要です。借りたお金の使い道も自由ですし、何より利用自体が自分だけの秘密にできるのは、日本人にとって心理的ハードルを下げてくれるでしょう。
このように、ノーKYC(本人確認なし) のP2Pレンディングは、日本のようにプライバシーや控えめさを重んじる文化圏でも利用しやすいサービスと言えます。実際、HodlHodlのLendは「地理的・規制的な制限がなく、世界中の誰もが利用できる純粋なP2P市場」とされています。日本に居ながらグローバルな貸し借りができ、しかも身元明かさずに済む――これは画期的ですね。
Borrow編:HodlHodlのLendでビットコインを担保にお金を借りる方法
それでは具体的に、HodlHodlのLendでどのようにビットコイン担保のローンを借りるのか、手順を追って説明します。初心者でも迷わないよう、シンプルなステップにまとめました。
1. アカウント登録 (Sign up)
まずはHodlHodlのLendサイトにアクセスし、無料のアカウントを作成します。必要なのはメールアドレスとパスワードだけです。登録後、確認メールが届くのでリンクをクリックして認証すれば準備完了。これでプラットフォーム上でオファー(契約希望)を閲覧・作成できるようになります。
※HodlHodlは日本語には対応していませんが、英語のシンプルなUIです。Google翻訳などを使っても良いでしょう。
2. 借りたい条件のオファーを探す or 作成
ログインしたら、「To Borrow(借りる)」のメニューから現在出ている貸し手のオファー一覧を見てみましょう。オファーには借入希望額(例:$1000相当のUSDT)、期間(例:3ヶ月)、金利(例:5%)やLTV(担保価値比率、例:60%)などの条件が書かれています。自分の希望に合うものがあれば選んで詳細画面へ進みます。条件に合うオファーが見つからない場合は、自分で「○○ USDTを△ヶ月、金利○%で借りたい」という借り手オファーを新規作成することも可能です。
用語補足:LTV(ローン・トゥ・バリュー)とはローン額に対する担保価値の割合です。たとえばLTV50%なら、借りたい額の2倍の価値のビットコインを担保に入れる必要があります。LTVは貸し手が設定しており、一般に30%〜70%程度の範囲でオファーが出ています。低いLTVほど借り手は多くのBTC担保が必要ですが、その分だけ貸し手にとって安全なローンとなります。
3. 契約成立とマルチシグ担保のデポジット
借り手・貸し手双方が条件に合意すると契約成立です。HodlHodlプラットフォーム上で自動的に専用のマルチシグ・エスクロー用ビットコインアドレス(担保保管先アドレス)が生成されます。次に、借り手であるあなたは自分のウォレットからビットコインをそのエスクローアドレスに送金します。
- 📌ポイント:マルチシグで安心 – 上述の通り、このエスクロー用アドレスのコインを動かすには3者中2者の署名が必要です。あなた(借り手)は常にそのうちの1つの鍵を保有しています。つまり、自分が承認しない限り担保BTCが勝手に引き出されることはないのでご安心ください。
ビットコインの入金がブロックチェーン上で所定の承認(通常数ブロック程度)を得ると、担保デポジット完了です。これで契約は有効化され、次のステップへ進みます。
4. 貸し手から資金(ステーブルコイン)を受け取る
担保のロックが確認できると、今度は貸し手がローン金額の送金を行います。Lendで借りられるのは主にステーブルコインです。ステーブルコインとは、米ドルなど法定通貨の価値に連動するよう設計された仮想通貨で、USDTやUSDC、DAIといった種類があります。借り手は契約時に受取用のステーブルコインアドレス(自分のウォレットアドレス)を指定しますので、貸し手はそのアドレス宛に契約どおりの額を送金します。例えばUSDTを借りる契約なら、貸し手からあなたのUSDTウォレットにUSDTが送られてきます。
これで晴れて、あなた(借り手)は希望のステーブルコインを手にすることができました! あなたのビットコインは担保としてロックされていますが、期限までに返済すれば取り戻せますので、しばしのお別れです。借りたステーブルコインは自由に使えますので、後述する活用例を参考に有効活用しましょう。
5. 返済(リペイメント)
契約期間中は基本的に何もする必要はありません(途中で追加担保や一部返済を行うことも可能ですが、初心者向け記事では割愛します)。期間が満了するまでに、借りたステーブルコイン+利息を貸し手に返済します。返済も、貸し手の指定するウォレットアドレスにステーブルコインを送金する形で行われます。
- 利息の計算:利息は契約時に決めた率で発生します。例えば年利10%で6ヶ月間$1000を借りたなら、利息は単純計算で$50(=$1000×10%×0.5年)です。契約によっては「期間全体で○%」と定める場合もありますが、プラットフォーム上で年率(APR)換算が表示されます。
期間内であれば任意のタイミングで早期返済することも可能です。返済期限より早く全額返せば、利息もその日数分だけで済みます(※ただし契約によります。事前に契約条件を確認してください)。HodlHodlでは分割返済にも対応しており、例えば月ごとに少しずつ返して最後に完済することもできます。
6. ビットコイン担保の解除(返却)
貸し手があなたからの返済受領を確認すると、プラットフォーム上で契約終了の手続きを行います。マルチシグの担保アドレスからあなたのビットコインを解放(返却)する署名を貸し手とプラットフォームが行い、あなたの元のウォレットにビットコインが送られます。こうして無事に担保のBTCが戻ってくれば、一連のローン取引は完了です🎉。
もし返済が滞った場合はどうなるのでしょうか?その場合、契約で定められた猶予期間やマージンコール(追加担保のお願い)を経た後、担保のビットコインが強制的に貸し手に渡されて契約終了(清算)となります。担保額が未返済額を上回っていれば、差額は借り手に返ってきます。つまり、返せなかったとしても借り手が担保以上の損をすることはありませんが、大切なビットコインを失ってしまう結果にはなるので注意しましょう。
Borrow(借りる)側のまとめ:ビットコインさえあれば、あとの手続きは非常に簡単です。借入までの流れをもう一度簡潔にまとめると:
- メールアドレスでLendに登録
- 借入オファーを探すor作成してマッチング
- マルチシグ契約が自動生成・BTC担保を自分で入金
- 貸し手からステーブルコインを受領
- 期限までにステーブルコイン+利息を返済
- ビットコイン担保が自分のウォレットに戻る
第三者の仲介なしに、ネット上でこれだけのことが完結するのは驚きですよね。HodlHodlは「あなたの条件、あなたの鍵、あなたのコイン」と銘打っており、自分の望む条件で・自分が鍵を管理し・自分の資産を動かせるプラットフォームであることを強調しています。
Lend編:HodlHodlのプラットフォームでお金を貸してみよう
次は逆に、自分が貸し手(Lender)となってステーブルコインを貸し出し、利息収入を得る方法です。銀行に預けても超低金利のこのご時世、手持ちの資金をうまく運用したい方にとってP2Pレンディングは魅力的な選択肢になりえます。HodlHodlのLendなら、これもまた簡単な手順で始められます。
基本的な流れは先ほどの「Borrow編」と鏡写しになっています。
1. アカウント登録
借り手と同様、まずはHodlHodlに登録します(すでに借り手として登録済みなら同じアカウントで貸し手にもなれます)。メールアドレスだけでOK、もちろん貸し手側もKYC不要です。
2. 貸出オファーの確認 or 作成
ログイン後、「To Lend(貸す)」メニューから現在の借り手募集一覧を見ます。各オファーには希望額・期間・支払い利率・LTVなど条件が表示されています。「この条件なら貸してもいいかな」という案件があれば選択しましょう。もし自分の希望する利回りや期間が合わない場合は、自分で貸し手オファーを作成することも可能です。「○○ USDTまで、最長△ヶ月、最低利息◻◻%で貸せます」といった条件を提示できます。プラットフォーム上ではユーザーがお互いに条件を提示しあってマッチングする仕組みなので、金利や期間もすべてユーザー自身が自由に設定できます。
3. マッチングと契約開始
あなたの提示した条件で借りたい人が現れたら契約成立です(逆に誰かの借入オファーに応じる形なら、その時点で成立)。システムがマルチシグの担保用BTCアドレスを生成し、借り手がそこへビットコインをデポジットします。借り手からのBTC入金が確認できるまで、貸し手であるあなたは資金を送る必要はありません。担保が確保されたのを見届けてから次に進みます。
4. 資金(ステーブルコイン)の送金
借り手の担保ロックが完了したら、契約で定めたステーブルコインを借り手へ送金します。送金先アドレスは契約詳細画面に表示されます(借り手が指定済み)。例えばUSDCを貸す契約なら、相手のUSDCアドレスに約束の額を送ります。ここで送金した金額がローンの principal(元本)となり、後ほど利息とともに返ってくるわけです。
無事に相手に届けば、あとは契約期間終了まで待つだけです。あなたは担保のBTCに対して鍵を1つ持っている状態なので、万一トラブルが起きた場合でも担保を引き出す権利を部分的に持っています(詳しくは次ステップ)。
5. 返済の受領
契約期間が終わると、借り手があなたにステーブルコインを返済してくるはずです。約束どおり元本+利息を受け取ったら、それを確認してプラットフォーム上で「返済完了」を操作します。すると担保のビットコインがマルチシグから解放され、借り手に返却されます。これで貸し手としてのあなたは利息分の収益を獲得できました。お疲れ様です!
もし借り手が返済しなかった場合どうなるでしょうか?その場合、所定の猶予期間やマージンコール通知の後、担保のビットコインがあなた(貸し手)に渡されることになります。具体的には、LTVが90%に達するか返済期日から24時間以上滞納が続くと強制清算となり、担保BTCからあなたの貸付相当額が充当されます。担保が十分であれば元本と利息はカバーされ、余剰があれば借り手に返還されます。つまり貸し手側はかなり手厚く保護されており、返済を受け取れない場合でも担保で穴埋めされる仕組みです。
6. 収益を管理・再投資
受け取ったステーブルコイン(元本+利息)は再度プラットフォームで貸し出しても良いですし、他の用途に使ってもOKです。年利に換算するとだいたい10%前後の利回りになる案件が多く見られます。条件次第では更に高い利率の契約も可能ですが、その分借り手が見つかりにくかったりリスク(担保不足のリスク)が高まる可能性もあります。ご自身のリスク許容度に合わせて運用しましょう。
Lend(貸す)側のまとめ:
- HodlHodlに登録(メールアドレスのみ)
- 貸出オファーを提示 or 借り手募集に応じる
- 契約成立後、借り手がBTC担保を入金
- 貸し手(自分)がステーブルコインを送金
- 期限まで待ち、借り手から元本+利息を受領
- 担保BTCを返却し、利息収入を得る
銀行預金では考えられないような利息収入を得られるのが魅力ですが、その裏でビットコイン価格変動リスクも担っています。大暴落が起きて担保評価額が急落すると、清算時に元本を割るリスクもゼロではありません(LTV設定とマージンコール制度で極力保護されまますが)。リスクとリターンを理解した上で、小額から試すことをおすすめします。
ステーブルコインの活用:お金持ちは借金で生活する?
ここまで、ビットコインを手放さずにステーブルコインを手に入れる方法を見てきました。それでは、借りたステーブルコインは具体的に何に使えるのでしょうか?いくつか例を挙げてみましょう。
-
日常の出費に充当:ビットコイン投資家の中には「生活費はすべて借りたお金で賄い、自分のBTCはガチホ(売らずに長期保有)する」という方針の人もいます。例えば毎月の家賃や食費をステーブルコインのローンで支払い(これについても今後詳しく解説していきます)、ビットコインは一切使わないというイメージです。こうすれば、手持ちのBTCを売らずに済むので将来の値上がり益を逃しません。また日本では仮想通貨を売却すると雑所得として高率の税金がかかりますが、ローンで得たお金は借入金なので課税対象になりません(※将来的な税務計算は自己責任で行ってください)。つまり、ビットコインを売却して現金化する代わりにローンを使うことで、節税と資産温存のメリットが得られる可能性があります。
-
投資・資産運用に回す:借りた資金をさらに別の投資に活用することもできます。例えば有望な株式や不動産に投資したり、あるいは他の仮想通貨を買うこともできます。極端な例では、ビットコインを担保にUSDTを借りて、そのUSDTでまた別の仮想通貨を買い、それを運用益で返済する…といった戦略も理論上は可能です。ただし、借りたお金での投機はハイリスクなので慎重に!手堅い使い道としては、事業資金に充てるのも良いでしょう。例えば小さなオンラインビジネスを始めるための元手にしたり、新しい資格取得のための学費にするなど、自分への投資に使えば将来的なリターンでローンを返しつつ利益を上げることが期待できます。
-
急な支払いへの備え:人生何があるか分かりません。医療費や冠婚葬祭など急に現金が必要になる場面もあります。そんなとき、ビットコインをすぐ売ってしまうのは惜しい…という場合にローンで一時的にしのぐことができます。後で落ち着いてから返済すれば、大事なBTCを手放さずにピンチを乗り切れます。言わばデジタル質屋のような感覚で、ビットコインを預けてお金を工面し、後で買い戻す(返済する)イメージですね。日本でも昔から「質屋」で着物や宝石を預けてお金を借りる文化がありましたが、HodlHodl Lendはビットコイン版の質屋とも言えるでしょう。
-
市場の機会を逃さない:仮想通貨市場は変動が激しく、「今これを買いたいのに現金が無い!」というチャンスもあるでしょう。例えば「ビットコインが急落したから買い増したいが、現金が足りない」という場合、手持ちBTCを担保にしてステーブルコインを借り、その急落で安く買い増しする、といった動きもできます。そして後日価格が戻したところで返済すれば、差益を得つつBTC保有枚数も増やせるかもしれません。このようにローンを戦略的に使えば、市場の好機を掴む資金余力を生み出すことができます。ただしハイリスクな手法でもあるため、上級者向けではあります。
ここで覚えておきたいのは、「お金持ちは借金との付き合い方が上手い」という点です。日本では借金にネガティブな印象を持つ人も多いですが、世界的な資産家や大企業はしばしばあえて借金をして手元資金を他に活用しています。アメリカのベストセラー『金持ち父さん貧乏父さん』で有名なロバート・キヨサキ氏も「富裕層は他人のお金(借金)を利用してさらに富を築く」と強調しています。例えば彼は借金で高級車を買い、不動産投資にも借入を活用したそう (金持ちは貧乏人より借金が多い | 「金持ち父さん 貧乏父さん」日本オフィシャルサイト)❤️。借金を味方につけて資産運用すれば、自分の持ち出し資金を抑えつつ豊かな生活を実現できる可能性があります。
もちろん無計画な借金は禁物ですが、ローンを上手に使うことは決して悪いことではなく、むしろ経済的戦略として有効なのです。ビットコイン担保ローンはその新しい選択肢として、「お金にお金に働いてもらう」感覚を身につけるきっかけになるかもしれません。
高い金利でもローンを利用するのはなぜ?その理由と戦略
Lendのプラットフォームで提示される金利は、年利換算で見ると10〜15%程度が一つの目安 です。中にはそれ以上の利率の契約もあります。日本の銀行ローン(金利数%以下)と比べるとかなり高利に思えますが、それでも多くの人がこのサービスを利用してローンを組んでいます。なぜ高い利息を支払ってまで借りる価値があるのでしょうか?最後に、その理由と利用者の戦略について考えてみましょう。
-
(1) ビットコインの期待リターンが高い:借り手にとって一番の動機は、「ビットコインは将来もっと値上がりするはずだから、多少利息を払っても売りたくない」というものです。例えば年利15%で$1000借りると一年後に$1150返す必要がありますが、もしビットコイン価格がその間に15%以上上昇すれば、利息分を差し引いても得をする計算になります。過去のビットコイン相場は年率ベースで大きく成長した年も多く、強気のホルダーほど利息より値上がり益を優先する傾向があります。「金利よりビットコインの価値上昇のほうが大きい」という自信が、高金利を払ってでも借りる動機になっているのです。
-
(2) 課税や手数料の回避:先ほど述べたように、日本ではビットコインを売却すると高額の税金が発生する可能性があります。仮に30%〜50%の税金がかかるのであれば、年利10%前後のローンで済ませたほうがトクだという判断も成り立ちます。また、取引所で売却するときのスプレッドや出金手数料なども考えると、売却コストを回避する手段としてローンを選ぶ人もいます。要するに「売るくらいなら借りた方がマシ」という考え方ですね。
-
(3) 自由と速さを優先:従来の金融機関からお金を借りるには時間がかかりますし、使途にも制限があることが多いです(事業資金なのか生活費なのか、といった審査があります)。それに対してHodlHodlのP2Pローンは使い道自由・即日資金調達が可能です。利息が高めでも「今すぐ○○がしたい」「明日までに現金が要る」といったニーズには代えられません。特に仮想通貨業界はスピード命ですから、チャンスを逃さないために高コストでも素早く借りるという選択が生まれます。
-
(4) 借金=時間を買うこと:あるユーザーの言葉を借りれば、「借金をすることは未来の時間を先取りすること」でもあります。例えば住宅ローンがあるからこそ若い世代でもマイホームに住めますし、事業ローンがあるからこそ企業は成長の機会を掴めます。ビットコイン担保ローンも同じで、「今はお金が無いけど将来増やすアテはある。だから今借りてしまおう」というケースもあるでしょう。将来の収入や資産増加を見込んで、時間を味方につけるためにあえて借金をするのです。日本語では「借金してでも◯◯する」という表現がありますが、前向きな借金は将来への投資とも言えるでしょう。
-
(5) 非中央集権への支持:もう一つ見逃せないのは、HodlHodlのようなプラットフォームを利用する理由に思想的な支持があります。つまり「銀行や政府に頼らないお金の流れを実現したい」「ビットコインのエコシステムを活性化させたい」というビットコイナーたちです。多少コストが高くても、理念に共感して使っているケースもあります。匿名で自由にお金を借りられる世界を体験することで、金融システムの新たな可能性を感じているのです。
以上のように、高い金利にも関わらずローンを利用するのは明確なメリットや戦略があるからなのです。もちろん全ての人に当てはまるわけではありません。ビットコイン価格が下落局面ではリスクも伴いますし、利息分だけ損になる場合もあります。しかし、それらを理解した上で「自分のお金を働かせる」「資産を手放さずレバレッジを利かせる」手段として活用している人々が増えてきています。
最後に、HodlHodlの公式ブログの一文をご紹介します。
“私たちはビットコインこそがスーパーカ collateral(超優秀な担保)であり、利回りを得るために使うのではなく、それを担保に資金を借りるために使われるべきだと考えています" (The lending is dead, long live the lending | by Hodl Hodl | Hodl Hodl | Medium)。
ビットコイン時代の新しいお金の借り方・貸し方であるP2Pローン。最初は難しく感じるかもしれませんが、仕組みを理解すればとてもシンプルで強力なツールです。日本ではまだ馴染みが薄いかもしれませんが、匿名性を好み、コツコツ資産を増やすのが得意な人にこそフィットするサービスかもしれません。ぜひ少額から試し、自分なりの活用法を見つけてみてください。きっと新たな発見があるはずです。
もしビットコイン担保のP2Pローンなどについてもっと深く知りたい、あるいは個別に相談してみたいと思えば、どうぞお気軽にご連絡ください。1対1のコンサルティングも承っています。
サービスには決まった料金はありませんが、ご相談を通じて「役に立った」と思い、お悩みや疑問を解決できたと感じていただけたら、「3つのT」でのご支援(Value for Value)をぜひご検討ください:
- 時間(Time):この記事をSNSなどでシェアしていただくこと。
- 才能(Talent):コメントや補足情報などを通じて知識を共有していただくこと。
- 宝(Treasure):世界で最も健全なお金、ビットコインの最小単位「sats」でのご支援。
もちろん、支援の有無にかかわらず、お力になれればとても嬉しいです。 では、また次回!
-
-
@ ff517fbf:fde1561b
2025-03-26 16:48:41フアン・ラモン・ラッロ氏は、スペイン出身の経済学者・作家であり、自由市場経済とリベラルな思想の提唱者として知られています。彼は、国家による過剰な介入や財政政策の問題点を鋭く分析し、自由主義の基本原則に基づく社会の実現を目指す論考や著作を多数発表しています。数多くのメディアや学会で講演を行い、現代社会における経済政策や公共の役割について、国際的な議論にも影響を与えている人物です。
皆様、こんばんは。そして、Andorra Economic Forumの皆様、本日はご招待いただき誠にありがとうございます。
本日の講演では、これまで私が持ち続けてきた見解、すなわち、より自由で、より繁栄するために、スペイン及び世界において自由主義革命がなぜ必要であり、さらには急務であるのかという理由をお伝えしたいと思います。また、現代国家が、ストックホルム症候群のような論理に我々を陥れており、その結果、国家が我々の自由を体系的に制限し、財産を構造的に攻撃している状況を、ほとんどの人々が抗議もせず、またはその非常事態性すら意識していないという現実をどのように理解すべきかについても触れます。まず初めに、皆様のご反応から察するに、これは既知の内容に感じられるかもしれませんが、自由主義の基本原則、すなわち四つの基本的な考えを確認させていただきます。どのようにして、社会生活と、各個人が自らの人生計画を追求するための自律性とを両立させ、かつ、個々の自律性が打ち消されるような一個または多数の専制に服従することなく生きることができる社会が成立するのでしょうか? それは、協力と共存が可能な社会の中で、各人が自己の利益を追求し、同時に他者の利益追求を尊重するための基本原則、すなわち以下の四つの原則によって支えられているのです。
第一に、個人の自由、すなわち他者の行動を踏みにじることなく自ら行動するという、いわゆる非攻撃の原則です。自分が望むことは何でもできますが、他者が望むことをするのを妨げてはならず、また、他者があなたの望むことを妨げることも許されないのです。
第二に、私有財産です。平和的に獲得し、平和的に自らのものとしたものはあなたのものであり、それによって自由に行動し、自らの人生計画や行動計画を追求する手段となります。もしも、これらの計画遂行に必要な手段が恣意的に奪われるならば、それはあなたの個人の自由、すなわち自らの人生計画を追求する自由を侵害することになるのです。
第三に、契約の自律性です。あなたは第三者と自由に合意を結ぶことができます。もちろん、第三者を攻撃することは許されませんが、双方が望むことについて自発的に合意することは可能です。合意は、当事者間の私法上の契約であり、両者が履行すべき約束であり、第三者が介入してこれを正当化したり否定したりするものではありません。ただし、合意の内容は、あくまで当事者双方やその所有物にのみ影響を及ぼすものです。
そして最後に、広義の意味での結社の自由です。個人は、契約上、望むことについて合意するだけでなく、共に生活する方法や、ある程度安定した形で組織される方法を合意することも明示的に可能です。これらの原則は、しばしば国家によって保証されると言われます。なぜなら、国家がなければ、法体系も安全保障機関も存在せず、個人の自由、私有財産、契約の履行、そして結社の自由を保障するものが何もないと思われがちだからです。とはいえ、確かにある程度の国家は、警察国家としてこれらの基本的な社会的共存の規範を保証するために必要かもしれませんが、私たちが必要としているのは、単にこれらの自由主義社会の原則と自由な人々の相互作用が尊重されることを確保するための、巨大かつ過剰な国家ではありません。
実際、国家が大きくなるほど、つまり社会における国家の存在感が増すほど、これらの原則は侵害されがちです。なぜなら、国家は恣意的に規制を強化し、税金を引き上げることで、たとえ他者に損害を与えなくとも、個人が望むように行動する自由を阻み、また、私有財産を強制的に奪い、当事者間の取引を妨げ、さらには、結社および脱会の自由さえも制限してしまうからです。たとえば、誰かが既存の国家から離れ、他の国家に参加したり、あるいは新たな国家や政治共同体を形成して自らを組織しようとした場合でさえ、現行の国家はそれを認めないのです。
さて、これらの自由主義の基本原則は、各個人の計画や人生のプロジェクトが社会の中で花開くために必要不可欠なものであり、現代国家によって体系的に侵害されているのです。しかし、現代国家とは、必ずしも常に我々と共にあった国家ではありません。私たちは、今日のようなメガ国家、ハイパーステート、過剰に肥大化した国家をある程度は当たり前のものとして受け入れてしまっていますが、これらは唯一の政治的選択肢ではなく、歴史を通じて存在してきた唯一の政治現実でもないのです。
ここで、主要な西洋諸国における国家の社会に占める重みの変遷について、皆様にご覧いただければと思います。今日、国家の重みは国によって大きな違いはないものの、概ね国内総生産(GDP)の40〜50%を占めています。中には、例えばフランスのようにGDPの60%に達する国もあります。国家が社会的調和や幸福の保証とされることは稀であり、実際、フランスは世界最大の国家を有しながら、またはそのために、今最も分断され混沌とした国の一つとなっています。
しかし、現状、国家はGDPの40〜50%、すなわち社会が毎年生み出す生産の約半分を吸収し、再分配または政治層や官僚階級が決定した形で消費しているのです。これは常にそうであったわけではありません。19世紀、ひいては第一次世界大戦前までは、近代先進国における国家の経済的重みはGDPの5〜10%程度に過ぎなかったのです。
例えば、アメリカ合衆国では第一次世界大戦前、国家のGDPに占める割合は3〜4%でしたし、今日巨大な社会民主主義国家となっているスウェーデンでさえ、かつてはGDPの5%程度でした。すなわち、国家というものが必然的に経済の半分を占めなければならないというわけではなく、これは徐々に積み重ねられてきたプロセス、いわばゆっくりと沸騰させられるカエルのようなものです。第一次世界大戦後、国家の経済に対する重みは大幅かつ確固たる上昇を見せ、さらに第二次世界大戦後には、急激かつ持続的な上昇を経て、1970年代以降、現在の水準にまで達したのです。
ちなみに、ここで我々がしばしば耳にする「国家が後退しているから、我々は新自由主義の時代にいる」というレトリックが、いかに毒性がありずる賢いものであるかにも注目してください。過去40年間で、グラフ上に国家の重みが大幅に後退したと示す兆候は見当たりません。ある時点で国家のGDPに占める割合が1〜2%減少することがあったとしても、200年の間にGDPの5%から50%へと増加し、現在は概ね50%前後に留まっているのです。国家が後退し、民間部門がすべてを占めるようになっている、というのは全く逆の現象です。
実際、多くの人は、国家が拡大し続けるのが当然であり、もし急速な成長が見られなければ、国家は後退していると考えがちです。しかし、国家は既にそれ以上大きく成長する余地がほとんどないのです。もちろん、GDPの60%、70%、80%にまで達すれば、直接的または間接的な社会主義経済になってしまいます。
そして、なぜ国家はこれほどまでに成長したのでしょうか。急激な国家拡大を説明する基本的な要因の一つは、福祉国家の発展です。つまり、かつては国家が提供していた医療、社会保障(年金、事故保険など)や教育といったサービスの国家による提供が、福祉国家として大きく発展したのです。
ご覧の通り、1930年代や第二次世界大戦後までは社会保障費は非常に低い水準にありましたが、特に第二次世界大戦後からは、GDPの20〜30%にまで急上昇しました。これらはかつて、市民社会や市場を通じ、または必ずしも商業的な交換を介して提供されていた、労働組合などが担っていた社会保障の役割を、国家が吸収していったものです。労働組合は国家から独立し、時には国家に対抗しながら、社会保障の機能を果たしていたのですが、その役割が国家に吸収されることで、我々は国家に依存するようになってしまったのです。
なぜなら、社会保障費は支出であり、中には「依存費用」とも呼ばれるものもあります。たとえば、老後に収入がなくなった時や、何らかの障害によって収入が得られなくなった時のために、個人の貯蓄から基金を積み立てる場合、その基金が自分自身で管理されるなら自律的ですが、国家が管理すれば、私たちは国家に全く依存することになってしまうのです。国家が消滅するか、大幅な予算削減が行われれば、我々は何も残らないのです。結果として、国民は容易には消えない国家の爪痕に囚われることになるのです。公共年金制度の問題を考えてみてください。現代の先進国家において、公共年金制度は最も大きな支出項目の一つです。
では、どうすれば公共年金制度を解体できるのでしょうか。どうすれば、必要以上に介入してきた国家、例えばアメリカ合衆国では大恐慌期(1930年代)に、必要がなかったのに介入してきた国家を、その状況から脱却させることができるのでしょうか。設立当初は、ある一定の年齢に達した者には一定額の年金を支給すると約束し、その費用を現在働いている者への税負担によって賄うというシステムでした。
システムの構築は、当時の平均寿命がかなり低く、支給期間が2~3年程度であったため、比較的容易で安価に行われたのですが、システムが一度確立され、世代を超えた労働者の貯蓄能力を事実上奪う形で構築された今、どうやってそれを解体すればよいのでしょうか。もし「年金は支給されなくなるのか」と言えば、かつて生産期に労働者の給与のかなりの部分を国家が吸収し、貯蓄を阻害していた結果、何百万人もの人々が貧困に陥ることになるのです。
じゃあ、もう引退されている皆さんは年金を受け取ることになりますが、現役世代がその年金の費用を負担し、そして自分たちが引退する時には年金を受け取ることができなくなるのです。つまり、この世代からは何の対価もなく、給与のごく大部分が没収されることになるというわけです。これをどうやって解体するつもりですか? 決して容易なことではありません。
また、例えば医療制度についても同様です。若者にとっては医療制度の解体はそれほど難しくないように見えるかもしれませんが、貯蓄がなく、保険にも加入していない高齢者にとって、もし今、公共医療制度が終了し、年齢とともに医療費が指数関数的に上昇するために通常以上の医療費が発生すると告げられたら、彼らはその医療費にどう対処すればよいのでしょうか? 彼らは、公共医療制度が機能するという説明のもとに、その医療費が賄われると予め想定し、税金を支払っていたのです。
これをどう逆転させるか? もちろん、即座に行えることではありませんが、時間をかけた移行措置として行っていかなければなりません。だからこそ、国家はこの道を通じて成長し続け、社会がますます国家による再分配に依存するようになることで、国民の自律性を奪っていくのです。
ちなみに、現代福祉国家の発明者の一人であるのは、プロイセン出身のドイツの首相オットー・フォン・ビスマルクです。彼の回顧録――つまり、批判的ではない親しい記者によって書かれた回顧録――によれば、ビスマルクは、公共年金制度を創設することで労働者階級を国家に依存させ、労働者が国家に対して反抗しないように仕向けたと説明しています。当時、反抗は、いわば反資本主義的な行為とみなされていたのです。彼は、国家主義を維持するためではなく、「労働者には社会主義的傾向がある。では、どうすれば労働者を手なずけることができるのか?」という視点から、公共年金制度を利用したのです。同様に、労働者は公共年金制度を通じて、または国家に対抗する形で手なずけられるのです。そして、現状はこの通りになっています。
そこで、皆さんは疑問に思うかもしれません。この何世代にもわたって築かれてきた巨大国家は、具体的にどのような機能を果たしているのでしょうか? その資金はどこに行っているのか? この巨大国家は何に対して支出をしているのか? ここに、2022年の欧州連合各国の平均、すなわちGDPの50%という数字があります。スペインの場合も2022年時点で大きな差はなく、GDPの47%を支出しているため、概ね代表的な数値といえます。さて、この50%のうちの20%は社会保障費、主に年金費用(老後だけでなく、遺族、障害、孤児などに関する給付も含む)です。これに加え、比較的低コストな非拠出型給付も存在します。次に、スペインの場合は約7.7%、すなわち7〜8%が医療費、6%が官僚機構の運営費用、そして何よりも重要なのが公債の利子支払い費用です。さらに6%は経済政策に充てられ、例えばインフラ整備や農業支援などが含まれています。教育に関しては、公立教育や協定校を含めて約4.7%、環境保護は0.8%(これは必ずしも気候政策だけでなく、森林の管理なども含む)、住宅や地域サービスが1%、そして余暇、文化、宗教に関しては1.1%となっています。これらは、メディアや文化、宗教団体への補助金などとして支出されています。
かつて、リベラルな最小国家、例えばアメリカではGDPの3%程度であった国家がありました。なぜなら、当時は上記のような広範な機能を持たず、防衛(GDPの1.3%)と治安・司法(GDPの1.7%)に集中していたからです。つまり、19世紀にGDPの3%を占めていた国家が、現在もその核となる部分は同じ3%のままであるということです。国家が高価になったわけではなく、19世紀に存在した国家のコストは大体同じであったにもかかわらず、現代国家は19世紀よりもはるかに多くの機能を担っているため、多くの税金が必要とされているのです。もちろん、すべては税金で賄われています。
では、いったいどれだけの税金が支払われているのでしょうか。ここでは、国民が被っている税負担の実態について十分に認識されていないのではないかと思います。もしその実態が明らかになれば、社会的不服従が起こるでしょう。国家は、税の実感を曖昧にするための手段を多数用いているのです。例えば、さまざまな理由で税金を徴収する仕組みです。「この項目に対して税金を払え」と一律に要求するのではなく、「稼いだ金額、支出、保有資産、さらには支出全体に対して税金を課す」といった形で、複数の種類の税金を同時に適用します。消費全体に対して一律に税金を課すのではなく、付加価値税(IVA)やその他の特別税など、多岐にわたる特別な税金が存在し、相続税に至るまで多岐に渡ります。
さらに、我々はさまざまな側面で税金を支払っているにもかかわらず、その実感すら持っていないこともあります。たとえば、関税はその値上がり分を商品の価格に転嫁されるため、意識されにくいのです。付加価値税が上がっても、スーパーなどが告知しない限り、私たちはその上昇に気づきにくいのです。また、税負担を一度にまとめて徴収するのではなく、分散して給与から差し引くことで、その実感を薄めています。かつては、年間に稼いだ金額に対して一括で所得税(IRPF)を支払うのが普通でしたが、現代では分割して徴収されるため、納税者は自分がどれだけの税金を支払っているのかを実感しにくいのです。ちなみに、IRPFの源泉徴収制度は、第二次世界大戦中にリベラルのミルトン・フリードマンによって考案されたものです。つまり、敵はしばしば自国に潜むものでもあるということです。
ここで示したのは、平均的な支出額です。スペイン国家のすべての財政収入を国民または労働者で割ると、国民一人あたりの国家負担のおおよそのコストが見えてきます。実際には公共赤字、すなわち収入以上に支出している部分もあり、その分は将来の税負担として転嫁されるため、実際のコストはさらに大きくなります。ここでは、現状で国民から徴収されている税金のみを取り上げています。なお、これらの数字はインフレーションを考慮していないため、2001年と2024年の数字を直接比較することはできませんが、ここでは2024年現在の状況に焦点を当てています。現在、平均してスペイン国民一人あたり、約15,000ユーロの税負担がかかっているのです。つまり、一般的には夫婦と子供一人の家庭で約50,000ユーロの税金が支払われている計算になります。労働者という視点に立てば、実際に税金を支払っているのは、平均で30,000ユーロ以上にのぼります。もちろん、高所得者層が多くを負担しているという見方もありますが、これは平均値であり、平均値は必ずしも実態を正確に反映するものではありません。
さて、労働者一人あたりの支払いを、かなり寛大な見積もりで考えてみましょう。スペインにおける現在の中央値の給与は22,400ユーロです。しかし、この22,400ユーロという数字が給与明細に反映される前に、企業側がすでに支払っている社会保険料が約7,000ユーロ存在しています。つまり、実際の中央値の給与は29,000ユーロ、ほぼ30,000ユーロであるべきものですが、この30,000ユーロは労働者自身が実感できるものではありません。そして、たとえ「実際は自分のものである」と伝えても、「それは企業が支払っているものであって、自分が支払っているわけではない」と言われ、自己欺瞞に陥るのです。結局のところ、実際に支払っているのは自分自身なのです。
実際、30,000ユーロの実質報酬を基にすると、そこから7,000ユーロが差し引かれて、給与明細に表示されるのは22,400ユーロです。さらに、労働者側の社会保険料として約1,500ユーロを追加で支払い、所得税(IRPF)が約3,000ユーロ、さらに消費に応じた間接税が最低でも約2,000ユーロ(場合によってはそれ以上)かかります。さらに、ここでは取り上げていない他の国家への支払い、たとえば不動産税(IBI)やサービス料、共済負担金なども存在します。結果として、中央値の労働者は、本来約30,000ユーロあるべき給与のうち、税引き後に手元に残るのは約15,800ユーロに過ぎないのです。つまり、ほぼその半分が国家によって吸収されていることになります。年間で見ると、さまざまな税金、特に社会保険料、所得税、そして間接税として、合計約13,400ユーロが徴収されているのです。
このように、中央値の労働者は、所得分布の中央に位置しており、非常に多くの人々が彼より少なく、また多く稼いでいる人もいます。だからこそ、中央値の労働者が支払っている税負担、すなわち年間約13,400ユーロという数字は、スペイン国民に対して行われている極めて大規模な税負担の実態を物語っています。これにより、国家から提供されるサービスが強制的に受け入れられているのです。
果たして、これは必然なのでしょうか? 歴史的に見れば必ずしもそうではなく、また現代においても地域によって差があります。つまり、労働者が生み出す富の半分以上を国家が吸収するという、巨大な国家が当然であるという考え方は、今後も続くものではありません。ここには、異なる繁栄度を持つ国々が存在し、一般的に発展した国々であっても、欧州やアメリカのような国家に比べ、国家の規模はかなり小さく抑えられている国もあります。しばしば「スペインの国家規模は欧州平均より小さい」と言われますが、欧州平均自体が、プロの略奪者たちのクラブのようなものなのです。従って、欧州平均という水準と比較するのではなく、もっと控えめな国家規模を持つ国々や、税負担の貪欲さが制限された国々と比較すべきです。
例えば、ヨーロッパ内ではスイスがあります。偶然かどうかはさておき、スイスはヨーロッパで最も豊かな国の一つでありながら、国家のGDPに占める割合は33%と、欧州やアメリカに比べて10〜15ポイント低いのです。また、香港や韓国はGDPの28%、チリはこの分類の中では最も貧しいかもしれませんが約26%、台湾は16%、そして世界で最も豊かな国であるシンガポールは15%です。シンガポールや台湾は、国家がGDPの15〜16%という小規模な状態で十分に現代社会の機能を果たしているのです。もちろん、シンガポールの場合は都市国家であるため、経済規模のメリットもあるでしょうが、公共支出の大部分が社会保障に回っている現状を鑑みると、都市規模か大国家かは大した違いがないのです。むしろ、シンガポールや台湾のように、GDPに対して国家の規模が30ポイントも低い国の方が、国家による私有財産の侵害が少ないと言えます。
したがって、もし大規模な国家による大規模な略奪を回避でき、しかも機能的には他の国と同等以上に運営できるのであれば、当然、より少ない税負担で、なおかつより効率的な公共サービスを提供する国家の方が望ましいのです。実際、国家が何でもかんでも行おうとすれば、その多くは非効率にならざるを得ません。一方で、企業がすべてを行おうとしても、専門分野に特化した他の企業に競争で敗れるため、最終的には消費者がより良いサービスを選ぶことになるのです。問題は、国家の場合、国民が国家から自由に離脱し、同じサービスを提供する他の組織と契約する余地がないという点にあります。国民は、非常に非効率かつ高コストな国家サービスに縛られており、選択の余地がないのです。したがって、もし小規模で効率的な国家が存在すれば、それは大規模で税負担の重い国家よりも好まれるはずです。
そして、もし国家が回収するGDPの割合が30ポイントも大きいのであれば、それは明らかに国民の私有財産を暴力的に侵害していると言わざるを得ません。ですから、もし国家による大規模な略奪を回避し、かつ他国と同等以上の機能を果たすことが可能であれば、国家は少なくとも縮小されるべきです。なぜなら、そうした国家は国民にとって好都合であるだけでなく、公共サービスの質も向上し、効率的に運営されるからです。結局のところ、すべては国家ではなく、国家に寄生する巨大な官僚組織の福祉が優先されているのです。
もし、あなたの社会にこれほど大きく根付いた寄生虫が存在するならば、その寄生虫は当然、去ろうとはしません。むしろ、さらに大きな植民地を形成しようとするでしょう。これが、国家が成長し続ける理由であり、そして、血を吸い上げるこの寄生虫と戦う必要性が生じる所以なのです。
別のシナリオを考えてみましょう。つまり、現代社会における国家の規模を実質的に縮小するという仮定を立て、その実現可能性や現実味について見極めるためです。これまでに、ヨーロッパにおける現代国家の重みがGDPの50%に達していること、その内訳を示してきました。さて、かつての状況を想像してみてください。あの時代は、科学フィクションのようなことは必要なく、医療はゼロ、経済政策も実質ゼロで、民間部門が構築できないインフラだけが、もしあれば驚くほど僅か、GDPの1%程度だったのです。教育はゼロ、防衛と公共秩序は維持されるものの、余暇・文化・宗教への補助金はゼロでした。地域サービスや環境保護に関しては、下水道、街路灯、森林の維持管理など必要な分は残され、官僚組織も非常に大幅に縮小され、社会保障も一部のみが残されていました。
さて、しばしば「国家は富裕層からお金を奪い、貧困層へ再分配するために存在する」と言われますが、実際、社会保障はGDPの20%に相当します。ここで、極端な貧困を防止するために本当に必要な支出額を計算してみましょう。そうすれば、皆さんも、このGDPの20%は貧困撲滅のためのものではなく、むしろ国家が横方向の所得再分配システムを通じて国民を捕らえ続けるためのものであると気づくでしょう。すなわち、国家はあなたからお金を取り、そのお金を自らの利益や必要に応じて配分するために、あなたと国家の間に割り込むのです。バストス教授が正しく指摘しているように、その所得の移動は、富裕層から貧困層へ、またはその逆ではなく、すべての人々から国家へ向かっているのです。そして国家は、その所得を自らの利益や必要に従って再分配することを決定します。
では、先ほど示したような形で国家の各機能を大幅に縮小した場合、結果として国家はGDPの9~10%程度の規模となり、現状よりも30~40ポイント、つまり約80%縮小された国家になるでしょう。防衛費、治安費は現状と同等に維持される(ただし、治安費については内部の官僚機構によっても左右されるため、この点はまた別の議論になります。たとえば、スペインはヨーロッパで国民一人あたりの治安部隊職員数が最も多い国ですが、本当にそれだけ必要なのかはまた別問題です)。安全保障費がGDPの1.7%、防衛費が1.3%、官僚組織が1%、地域サービスや環境保護が1%、民間部門ではまかなえないインフラがさらに1%、そして社会保障が3%という具合です。現在、社会保障としてGDPの3%、すなわち450億ユーロが支出されています。これは、450億ユーロの社会保障費を、例えば4.5百万人(スペイン人口のおよそ10%)に対して年間1人あたり1万ユーロずつ支給するか、あるいは300万人に対して1万5千ユーロずつ支給するということになります。繁栄した社会において、極端な無助状態に陥る国民の割合はどれほどか、という問題です。彼らは、生命保険、障害保険、個人貯蓄すら持たず、福祉国家が生まれる前に存在したボランティアや民間の相互扶助ネットワークさえも利用できなかった層です。これらを踏まえた上で、絶対的な無助状態に陥り、国家からの継続的な支援を必要とする国民の割合がたとえば5~10%だとすれば、実際に必要な支出はGDPの3~4%程度で十分にカバーできるはずです。しかし、現実には我々は社会保障にGDPの20%を費やしているのです。
明らかに、このGDPの20%は、富裕層から少しだけ富を奪って、巨大な貧困層を作らないためのものではありません。驚くべきことに、国家がGDPの50%を占めるにもかかわらず、貧困層は依然として存在しているのです。さらに、貧困を解消するための手段として、まず第一に、依存性を生む補助金を設けるべきではありません。しかし、現実には、経済活動が全くできず、自己の貯蓄や家族の支援、民間の相互扶助ネットワーク、そして最終的には国家に依存せざるを得ない層が一定割合存在します。しかし、そのようなケースはGDPの3%程度の支出で十分にカバーされるはずなのです。
さて、国家の規模を縮小した場合、たとえばGDPの50%から10%にまで削減できると仮定しましょう。これは約80%の削減に相当します。先に述べたように、中央値の労働者は現在、年間約13,500ユーロの税金を負担しています。この80%の削減が実現すれば、労働者の可処分所得は、国家が提供する各種サービスに充てるための支出分が年間1人あたり1万~1万1千ユーロ増加することになります。家庭内で中央値の労働者が2人いる場合、2万~2万2千ユーロの追加収入となるでしょう。この追加収入があれば、教育費、医療費、年金のための貯蓄など、国家が現在負担させているコストを自前でまかなうことが可能になるはずです。実際、多くのスペインの労働者は、国家の劣悪なサービスから逃れるため、民間の医療や教育、そして補完的な年金積立を実施しているのです。特に、公共教育は、学生の生産性向上よりも、国家のイデオロギーを植え付けることに重きを置いている場合が多いのです。
また、この話は、GDPの3%相当の再分配、すなわち450億ユーロ分が、現実的に考えても国民の基礎的な生活を支えるには十分であるという観点からも論じられます。現行の過剰な収用体制に対して、もし国家規模が大幅に縮小されるならば、労働者にとって有利な状況が実現するはずです。
さて、ここまでの議論から、もし国家主義のウイルスが社会の頭脳や利権に深く根付っている現状において、現状が最適でないと理解したとしても、移行のコストの高さゆえに多くの人々が現状から変わることを望まないという現実があるのです。たとえば、公共年金制度の解体は非常に困難です。年金受給者は「こんな不公平な体制であっても、自分の年金を受け取りたい。自分自身の貯蓄がなくなるリスクを冒したくはない」と考えるでしょう。
では、この国家――明らかに国家とその官僚機構に有利なこのモデル――から脱却するために、すなわち、表向きは国民のために存在するようでいて、実際には社会を寄生しているこの体制から逃れるためには、どのような手段が考えられるでしょうか。ここで、国家改革またはハイパーステートのパラサイト化に対抗するための、四つの可能なアプローチについて述べます。
第一のアプローチは、トップダウン型の方法です。すなわち、自由主義的な理念を掲げた善意の政治家が権力の座につき、内部からリベラル革命を起こそうとするというものです。しかし、私はこの方法は、次に述べるボトムアップ型の文化戦線と併せなければ、全体として非常に単純で実現不可能だと考えます。なぜなら、社会の大多数が国家改革を望まなければ、その改革は十分な勢いを持って実施されることは決してないからです。多くの改革は長期的な取り組みであり、一夜にして実現できるものではありません。一度実行された改革が元に戻らないようにするには、最低でも二世代を要するのです。もし社会がその方向に向かわなければ、いつかまた別の人物が権力に就いて、国民の大多数が望まない体制を再び打ち壊してしまうでしょう。例えば、チリの年金制度の民営化は、ピノチェト政権下の1981年に始まり、数年前に旧公共年金制度が完全に清算されました。しかし、その後、旧体制に戻そうとする動きが見られるのです。なお、チリは当時、非常に若い労働人口と限られた高齢人口という、改革に適した人口構造を有していたにもかかわらず、改革には約40年もの歳月がかかりました。これが、世界の他の国々で実施されるとなれば、どれほど困難なものになるか想像に難くありません。そして、もし世界中がそのような改革を望まなければ、いかに自由主義者の政治家を内部に潜り込ませ、社会民主主義の装いを与えたとしても、十分な効果は得られないでしょう。さらに、政治そのものが権力に触れると必ず腐敗すると、ロード・アクトンが指摘したように、権力は人を変えてしまいます。つまり、権力に惹かれて権力の座についた者は、その権力を維持・拡大するために、かつて掲げた理念を容易に放棄し、他者を蹂躙し、欺く行動に出るということです。
政治的競争というのは、もしあなたが行動しなければ、行動する者があなたを追い出してしまう、という状況を生み出します。そのため、もし存在するとしても、誠実で、信念を持った政治家は、力に屈する者に押されて公共の場から姿を消してしまうのです。権力闘争では、手が縛られている者と自由な手を持つ者との間で戦いが行われるため、劣悪な選択が働き、最終的には最悪の者が権力の座に就くという現象が生じるのです。(この点については、ハイエクも『隷属への道』で記述しています。)
次に、第二の可能性はボトムアップ、すなわち文化戦線によるアプローチです。これは、アイデアの戦いを、じわじわと、少しずつ社会に浸透させ、心を開かせ、意識を目覚めさせ、より多くの人々がこの変革を要求するようになるという方法です。しかし、これは特に有望な道ではないことは明白です。もし、ここでマルクス主義的な語調に傾くとすれば、客観的な物質的条件があって、そうした思想が大規模に広まる環境が整わない限り、人々は現状に満足して「今のままで十分だ」と感じ、急激な変革に乗り出す理由が見出せません。現状が著しく悪化しない限り、文化戦線による大規模な勝利が起こり、既存の社会制度が覆されるというのは極めて困難な道なのです。例えば、アルゼンチンでは、40年間にわたって底をつき続けた結果、人々が明らかに欠陥だらけのモデルにうんざりし、ハイパーインフレーションに苦しんだことで変革が進んだように見えます。もし、そこに一貫性があり、破壊的かつ斬新なメッセージ―社会主義的なものか、あるいは幸運にもリベラルなもの―があれば、一定の確率でそのアイデアが覇権を握り、新たな現状として定着する可能性が出てくるのです。しかし、スペインの場合、文化戦線による闘いは、相手側のプロパガンダがあふれ、対抗する者がいなければ、現状が一層固定化し、国家権力が加速度的に拡大していくため、非常に厳しい状況にあります。私自身も長い間、文化戦線で戦ってきましたが、スペインという環境におけるその限界を痛感しています。
第三の道は、そもそも国家改革を目指さず、自分の生活を改善するために他の地域へ移住するというものです。もし、競争が可能な複数の法域が存在すれば、現状に非常に不満を抱く者は、物理的に他の地域へ移り住み、そこで自らの生活基盤を築くことができます。そして、こうした法域間の競争は、他の法域による収用や寄生的な政策の力を制限する効果も持ちます。たとえば、ある法域で税率が非常に低く、規制が緩やかであれば、他の法域は資本が流出し、寄生者側から見れば、寄生対象(=ホスト)が成長しなければ、寄生する意味がなくなるのです。もし、ホストを窒息させて殺してしまえば、またはホストが他の、寄生が少ない地域へ流出してしまえば、寄生者にとっては不利益となります。このような効果は、実際には見かけ以上に大きな影響を持つのです。
たとえば、最も身近な例として、アンドラの場合が挙げられます。多くの場合、静かに、あるいは時に華やかに報じられる移住現象があり、一定の社会的反響を呼んでいます。問題は、これらはすべて財政上の問題であり、移住者を犯罪者扱いする試みがあっても、スペイン国家にとっては重要な問題とならないのです。よく批判されるのは、YouTuberなどがアンドラへ移住することについて、「国が自国民の資源不足を訴えるような状況に直面しない」とされる点です。もしそうなれば、国家は財政の引き締めを迫られるはずですが、現実はそうではありません。むしろ、これは他者に対する懲罰の一形態であり、「移住して税負担を軽減しようとするなら、あなたは悪い人間であり、悪い市民だ。もしあなたが著名人であれば、意識を啓発するために、我々はあなたを徹底的に攻撃し、公の場から追放する」といったメッセージが発せられるのです。しかし、実際にアンドラへの移住が進むこと自体は悪いことではなく、たとえそれがスペイン国家に与えるダメージが短期的にはそれほど大きくなくとも、他のケースでは、目に見えにくいながらも国家に損害を与えている場合があるのです。
たとえば、2か月前に発表されたドラギの報告書では、欧州が「足を引きずっている」との根本的な不満が示されています。すなわち、欧州では生産性が20年間にわたって停滞しており、成長期に新たに設立される企業が、厳しい規制の下で成長できず、資本調達が困難となり、結果としてアメリカに流出してしまうという現象です。これは「足で投票する」という現象であり、企業側の実情を反映したものです。そして、これは国家権力の内部から出た、我々の社会が停滞しているという自らの寡占層からの認識でもあります。彼らは、ここ20年間にわたり市民を内部から圧迫してきた手法を見直す必要があると訴えているのです。そして、ここで議論されているのは、欧州連合とアメリカという二つの経済ブロック間での移住の問題なのです。
もし、かつてヨーロッパに存在していたような、多数の競合する法域が現在も存在していたと想像してみてください。ここで歴史的な議論に深入りするつもりはありませんが、ヨーロッパが16世紀あるいは17世紀から産業革命に至るまで発展し、東洋が(少なくとも最近まで)停滞していた理由の重い仮説の一つは、ヨーロッパが政治的にはるかに細分化され、都市国家や小国、王国、そして公国など、まさにアンドラのようなケースに近い形態であったため、相互の競争が激しかったという点にあります。ひとつの領域内で生まれる思想を制限・抑制・検閲する能力は非常に低く、もし一方で弾圧されれば別の場所へ移動できたため、その結果、後の産業革命を引き起こす知的な開花が促されたのです。これに対して、中国のような中央集権的で統一された国家では、官僚組織が本来より強大な権力を持っていたため、このような発展は見込めませんでした。
「足で投票する」という現象は非常に強力です。したがって、文化戦線から取り組むべきもう一つの課題は、政治的な中央集権化や財政の調和化に反対することです。なぜなら、政治的に中央集権化が進んだり、財政が調和化されるほど、法域間の競争は減少し、その結果、国家が無罰で私有財産を寄生的に吸い上げる余地が広がるからです。これは市場経済ではよく理解される現象ですが、国家の場合は例外扱いされがちです。市場において本当の意味での独占、すなわち単にその分野で唯一の企業という状況ではなく、競合が存在しない真の独占状態になると、その独占者は価格を引き上げ、品質を低下させる傾向にあります。なぜなら、あなたは逃げ出すことができない、まるで人質のような状態に置かれるからです。つまり、国家もまた独占状態にあり、国家が直面する唯一の競争は、他の国家へ移住するという可能性なのです。領域を統一して競争余地を狭めれば狭めるほど、国家は独占的な力を強め、結果としてあなたに提供するサービスの質を低下させ、収用を強める傾向が出てきます。したがって、私はどんな中央集権化のプロセスにも反対し、逆に政治的な分権化を支持すべきだと考えます。
そして最後に、第四の戦略ですが、これはやや曖昧で漠然としているかもしれません。しかし、私が考えるに、実際に多くの人々が採用しており、多くの場合国家の影響力を制限している方法、それは直接的に「国家からの分離」を目指すことです。もちろん、あなたにとって寄生者のような国家が窮屈に圧しかけてくる場合、その寄生者を打倒しようと多大なエネルギーを費やすこともできます。しかし、寄生者が既に存在する以上、その存在を前提として生活基盤を築く、その固定費を受け入れながらも、寄生者のさらなる拡大を防ぐ、あるいは寄生の及ばない領域を確保する新たな方法を模索するということです。これが国家からの「分離」、すなわち、重くのしかかる国家の負担から自らを切り離す試みなのです。例えば、先に述べたように、私立教育、私立医療、私的年金といった選択肢があります。本来であれば、国家が私たちから過剰な資源を吸い上げることなく、その分をこうした目的に振り向けられれば理想的ですが、幸いなことに、現状では国家が私立教育への進学を禁止しているわけではありません(ただしかなりの規制は存在します)。私立教育は完全に自由なものではなく、国家のカリキュラムに沿ったものですが、それでも私立教育、私立医療、そして貯蓄や資産形成の道を開いてくれるのです。もちろん、今後さらに税が引き上げられ、国内外で資産が収用されるリスクが高まるまではの話ですが。
したがって、国家を一つの悪と捉え、その悪に支配される中で自由を追求する、すなわちその影響力からできるだけ逃れる方法を探るべきです。さらに、社会が自ら開発していく様々なツールが、私たちが国家の監視や統制から離れて生活する手助けとなります。たとえば、デジタル経済は、今日のところ、国家が我々をコントロール・規制・収用するのをより困難にする領域をある程度確保できる可能性を秘めています。ビットコインの例は、没収不可能な資産として、適切な管理を行えば、富の保蔵庫あるいは国家の統制や知識から独立した交換手段として機能する可能性を示しています。
これらは、寄生者である国家に吸い付かれないため、自らの活動から国家の影響力を一部でも排除する、新たな生活の仕方を模索する一つの方法です。こうした新しいツールは、今後も次々と登場し、国家が私たちの生活に及ぼす影響を制限するために活用されるべきです。社会全体を変えるのは非常に困難ですが、多くの人々を同じ方向に動かすことが難しい現状において、少なくとも我々が体系的に受けている搾取の度合いを最小限に抑えることは可能です。
以上、複数の道筋があります。第一の道は私個人としてはほぼ排除したいと考えますが、残りの三つは排他的ではなく、互いに補完し合うものです。どの方法も目的地に必ず到達できる保証はありませんが、これらは連携することで、国家が私たちや社会全体に及ぼす権力の影響を徐々に抑制する助けとなるでしょう。そして、我々自身の利益のため、あるいは共に生きる社会を改善するために、可能な限りこれらの道を追求すべきだと考えます。
-
@ 220522c2:61e18cb4
2025-03-26 03:24:25npub1ygzj9skr9val9yqxkf67yf9jshtyhvvl0x76jp5er09nsc0p3j6qr260k2
-
@ 714dd0db:9c6f1a4c
2025-03-22 09:48:44やっと春が来ました
ようやく暖かくなってきた。 買い物から帰ってくると、なにやら甘い香り。
あ、もしかして、花の香りか!
探してみると、沈丁花が咲いている。
ああ、甘くていい香り。
近くには蝋梅も咲いている。我が家の近くに蝋梅があったなんて、すっかり忘れていた。
そして、早咲きの桜。桜のどの種類かは分からないのだが、毎年、ソメイヨシノよりも先に咲いている。
花の蜜を吸いに百舌鳥も来ている。いや、鳥の種類には疎いが、おそらく百舌鳥だろう。多分。
モノクロの冬から、ようやくカラフルな春になってきた。
季節を感じるのは、心が豊かになる。 今は今、今度は今度。 俺は今を生きている。
-
@ 8fb140b4:f948000c
2025-03-20 01:29:06As many of you know, https://nostr.build has recently launched a new compatibility layer for the Blossom protocol blossom.band. You can find all the details about what it supports and its limitations by visiting the URL.
I wanted to cover some of the technical details about how it works here. One key difference you may notice is that the service acts as a linker, redirecting requests for the media hash to the actual source of the media—specifically, the nostr.build URL. This allows us to maintain a unified CDN cache and ensure that your media is served as quickly as possible.
Another difference is that each uploaded media/blob is served under its own subdomain (e.g.,
npub1[...].blossom.band
), ensuring that your association with the blob is controlled by you. If you decide to delete the media for any reason, we ensure that the link is broken, even if someone else has duplicated it using the same hash.To comply with the Blossom protocol, we also link the same hash under the main (apex) domain (blossom.band) and collect all associations under it. This ensures that Blossom clients can fetch media based on users’ Blossom server settings. If you are the sole owner of the hash and there are no duplicates, deleting the media removes the link from the main domain as well.
Lastly, in line with our mission to protect users’ privacy, we reject any media that contains private metadata (such as GPS coordinates, user comments, or camera serial numbers) or strip it if you use the
/media/
endpoint for upload.As always, your feedback is welcome and appreciated. Thank you!
-
@ 82b30d30:40c6c003
2025-03-17 15:26:29[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
-
@ 06639a38:655f8f71
2025-03-17 14:59:40https://ccns.nostrver.se is a (Drupal powered) website that I started to build in January 2024 (source on Github and Gitlab). It's a fork of an earlier (abandoned) project https://cchs.social/.
Currently CCNS is a link aggregration website and for now it's only my who is using it to save and share Nostr related links. When you post a new link, you have the option to cross-post it as a Nostr note (example here).Kind 39700
Last month Jurjen and Abir have started to work on a social bookmark client built with Nostr (inspired by Del.icio.us from the past). Earlier this month they changed to event kind 39700 for broadcasting the Nostr event with the bookmark / link data accross the network. They did this because Sep already created a social bookmark like client called Pinja when fiatjaf raised this idea.
With these developments to me it was very obvious to integrate the feature that new created CCNS links are now also published as kind 39700 events to the Nostr network. This means that links are now also distributed on multiple relays as kind 39700 events and are accessible in multiple clients (Yumyume and Pinja).
Here you can see the same data, from left to right:
Structure
The current data structure for the 39700 kind looks as follow:
- "id": "event_id"
- "pubkey": "pubkey author"
- "created_at": unix_timestamp
- "kind": 39700
- "tags":
- "description", "description text here"
- "d", "unique-slug-value"
- "t", "hashtag"
- "content": "https://book_mark_url"
- "sig": "signature"
As there is no NIP (yet) for this event kind, I see some possible improvements:
- Use the bookmark URL as
d
tag so it can be used as a unique identifier for every client - Use the content field for the description
- Use the
a
tag for an addressable event following NIP-01:["a", "39700:pubkey_of_author:", recommended_relay_url_optional]
On short-term I don't have any plans to developer CCNS further, as most of my attention goes to the development of the Nostr-PHP library and Drupal related contribs using that library. That said, CCNS is a Drupal project but all the Nostr stuff is done client-side (Javascript) with NDK and Nostr-PHP is not used (maybe this will change in the future).
-
@ 4bcc0228:299141d7
2025-03-14 04:01:55GeminiのDeep Researchiで今日の昼ご飯に良いレシピを調べてもらった。
プロンプトはこんな感じ。
今日のお昼ご飯に何が適しているか調査してください。
要望として以下のものがあります。
・麺類が良い
・自宅で調理可能なものが良い
・自宅にはパスタの乾麺とそうめんがある
・パスタソース等はない
・自宅近くにコンビニがあるので、最悪そこで調達することは可能だが、できる限り避けたい
今日のお昼ご飯、お家にある麺で簡単レシピ
はじめに:悩ましいお昼ご飯を、手軽な麺料理で解決!
毎日のお昼ご飯、何にしようか悩みますよね。特に時間がない時や、わざわざ買い物に行くのが面倒な時、お家にあるものでパッと美味しいものが作れたら最高です。このレポートでは、そんなあなたのために、ご自宅にある乾麺のパスタとそうめんを使った、簡単で美味しいお昼ご飯のアイデアをご紹介します。パスタソースがなくても大丈夫!特別な材料がなくても、身近な調味料で本格的な味わいが楽しめます。パスタもそうめんも、アレンジ次第で様々な表情を見せてくれる万能な食材です。このレポートを読めば、きっと今日のお昼ご飯の悩みが解消され、手軽で満足できる一品が見つかるはずです。
パスタの力:ソースなしでも美味しい、簡単パスタレシピ
パスタといえば、お店で食べるような本格的なソースがないと美味しくないと思っていませんか?実は、ご家庭にある調味料を工夫するだけで、簡単に絶品パスタが作れるんです。ここでは、特別な材料は使わず、あなたのキッチンにあるかもしれないもので作れる、とっておきのパスタレシピをご紹介します。
ごま油香る!和風にんにくパスタ
いつものパスタに、ちょっと意外な和の風味を加えてみませんか?ごま油とにんにくの香りが食欲をそそる、簡単なのに本格的な味わいの和風パスタです。1
作り方- にんにく1かけをみじん切りにします。鍋にお湯を沸かし、スパゲティ80gを表示時間より1分短く茹で、水気を切ります。茹で汁を大さじ2ほど取っておきましょう。
- フライパンにごま油大さじ1を入れ、中火で熱します。にんにくから香りが立ったらスパゲティを加え、取っておいた茹で汁と3倍濃縮めんつゆ大さじ1を加えて混ぜ合わせます。
- 塩こしょう少々で味を調えたら完成です。
このレシピのポイントは、何と言ってもごま油の香ばしさ。加熱することで風味が引き立ち、食欲をそそります。また、めんつゆのうま味がパスタ全体に広がり、シンプルながらも奥深い味わいに仕上がります。茹で汁を加えることで、麺と調味料がよくなじみ、一体感のある美味しさになります。普段とは違うパスタを試してみたい時におすすめです。
アレンジ:お好みで、ラー油を少し加えてピリ辛にしたり、乾燥パセリや刻みのりを散らして風味をプラスするのもおすすめです。バター醤油のシンプルパスタ
材料はシンプルなのに、なぜか後を引く美味しさ。バターと醤油の組み合わせは、まさに魔法です。2
作り方- 鍋に湯を沸かし、塩(分量外)を少々入れ、スパゲティ100gを半分に折って袋の表示時間通りに茹でます。茹で汁を大さじ2ほど取り分け、スパゲティは水気を切ります。
- フライパンをさっと洗い、有塩バター10gを入れて中火で熱します。バターが溶けたらスパゲティ、取り分けた茹で汁、醤油小さじ2を加えて炒め合わせます。
- 器に盛り付け、お好みで刻みのりを散らしたら完成です。
バターのコクと醤油の香ばしさが絶妙にマッチした、シンプルながらも奥深い味わいのパスタです。茹で汁を加えることで、パサつきを防ぎ、しっとりとした仕上がりになります。刻みのりの風味がアクセントになり、食欲をそそります。忙しいけれど美味しいものが食べたい、そんな時におすすめの一品です。お弁当にもぴったりですよ。
アレンジ:仕上げに粗挽き黒胡椒を振ると、味が引き締まります。電子レンジで簡単!ツナとガーリックのオイルパスタ風
火を使わずに、電子レンジでパパッと作れるお手軽パスタです。3
作り方- 耐熱ボウルに早ゆでスパゲッティ(1.6mm)100gを半分に折って入れ、シーチキンマイルド1缶(油を切らずに)、水適量(パスタが浸る程度)、おろしにんにく少々を加えます。ラップをせずに600Wの電子レンジで7分加熱します。
- 加熱後、めんつゆ大さじ1、オリーブ油小さじ1、バター5gを混ぜ合わせ、醤油少々、こしょう少々で味を調えます。
- 器に盛り付け、お好みで粉チーズ、黒こしょうをかけたら完成です。
電子レンジで麺を茹でることで、時短になり、洗い物も少なく済むのが嬉しいポイントです。ツナの旨味とニンニクの風味が食欲をそそり、めんつゆとバターのコクが絶妙なハーモニーを生み出します。忙しいけれど手軽に済ませたいランチに最適です。
アレンジ:加熱前に、冷凍のミックスベジタブルなどを加えても彩り豊かになります。シンプル is ベスト!オイルとニンニクの基本パスタ
材料はシンプルながらも、素材の味が際立つ奥深い味わいのパスタです。4
作り方- にんにく1かけを薄切りにします。お好みで赤唐辛子を少量用意します(輪切りでも種を取り除いたものでも)。鍋にお湯を沸かし、スパゲティ80gを表示時間より少し短く茹でます。茹で汁を大さじ2ほど取っておきます。
- フライパンにオリーブオイル大さじ2を入れ、弱火で熱します。にんにくを加え、焦がさないようにじっくりと炒めます。にんにくが薄く色づき、香りが立ったら、お好みで赤唐辛子を加えます。
- 茹で上がったスパゲティをフライパンに加え、取っておいた茹で汁を加えてよく混ぜ合わせます。塩、こしょうで味を調えたら完成です。お好みで刻みパセリを散らします。
このパスタの美味しさの秘訣は、じっくりと炒めたにんにくの香りと、良質なオリーブオイルの風味です。シンプルだからこそ、素材の味がダイレクトに伝わります。茹で汁を加えることで、オイルと麺が乳化し、より一体感のある仕上がりになります。
アレンジ:ベーコンやきのこなどを加えても美味しくいただけます。また、仕上げに粉チーズを振ると、コクが増します。そうめんの魅力:軽やかで爽やかなランチアイデア
暑い日や、あっさりとしたものが食べたい時にぴったりのそうめん。いつものめんつゆで食べるのも美味しいですが、少しアレンジを加えるだけで、全く違う味わいが楽しめます。ここでは、簡単にできるそうめんのアレンジレシピをご紹介します。
定番の美味しさ!シンプルめんつゆでいただくそうめん
まずは基本から。そうめん本来の美味しさを味わう、シンプルながらも飽きのこない食べ方です。10
作り方- 鍋にたっぷりの湯を沸かし、そうめん1束(約80~100g)を入れ、表示時間通りに茹でます。
- 茹で上がったそうめんをザルにあげ、流水でよく洗い、ぬめりを取り除きます。しっかりと水気を切って器に盛り付けます。
- 市販のめんつゆを用意し、お好みでネギやミョウガ、大葉などの薬味を添えていただきます。
冷たくてつるつるとしたそうめんは、食欲がない時でも食べやすく、暑い季節には特に美味しく感じられます。めんつゆの優しい味わいと、薬味の爽やかな香りが食欲をそそります。
アレンジ:めんつゆに、すりおろし生姜やラー油、ごま油などを加えると、風味豊かな味わいに変わります。15ちょっとアレンジ!簡単そうめんバリエーション
いつものそうめんに、ちょっとした工夫を加えるだけで、様々な味が楽しめます。
- ごま油香る塩そうめん 10:茹でたそうめんにごま油と塩を和えるだけで、風味豊かな一品に。お好みでネギや白ごまを加えても美味しいです。
- トマトとツナのそうめん 11:茹でて冷やしたそうめんに、ツナ缶とカットしたトマトを乗せ、めんつゆをかけるだけ。大葉や刻みのりを添えると、さらに美味しくなります。
- 釜玉風そうめん 10:熱々の茹でたてのそうめんに、生卵と醤油(またはめんつゆ)を絡めるだけ。お好みでネギやかつお節を添えて。
- 韓国風ピリ辛そうめん 10:茹でて冷やしたそうめんに、きゅうりやキムチを乗せ、コチュジャンやごま油を加えたピリ辛のタレをかけます。
- バター醤油そうめん 12:茹でて水気を切ったそうめんに、バターと醤油を絡めるだけ。シンプルながらも後引く味わいです。
これらのアレンジは、どれも手軽にできるものばかり。冷蔵庫にあるものや、ちょっとした調味料を加えるだけで、普段のそうめんが大変身します。
温かくいただく!あったかそうめんレシピ
そうめんは冷たいイメージがありますが、温かくしても美味しくいただけます。
- かきたまにゅうめん 12:だし汁を温め、茹でたそうめんを入れ、溶き卵を流し入れてさっと煮れば完成。優しい味わいで、寒い日にもぴったりです。
- わかめスープそうめん 12:市販のわかめスープに茹でたそうめんを入れるだけで、手軽な一品に。ごま油を少し加えると風味がアップします。
- 親子にゅうめん 19:だし汁で鶏肉と玉ねぎを煮て、茹でたそうめんを加え、溶き卵でとじます。栄養も満点で、満足感のある一品です。
温かいそうめんは、冷たいそうめんとはまた違った優しい味わいが楽しめます。体調が優れない時や、ほっこり温まりたい時におすすめです。
いざという時のコンビニ頼み:ちょい足し食材でさらに美味しく
できる限り避けたいとのことでしたが、もし少しだけ何かプラスしたいと思った時のために、コンビニで手軽に手に入るおすすめ食材をご紹介します。
- にんにく:チューブタイプでも、カットされたものでも。パスタの風味を格段にアップできます。
- ラー油:ピリ辛好きにはたまらない。そうめんやパスタに少し加えるだけで、味が引き締まります。
- ツナ缶・鮭フレーク:手軽にタンパク質をプラスできます。パスタにもそうめんにも合います。
- 卵:パスタのトッピングにしたり、釜玉風そうめんにしたり。栄養も満点です。
- ネギ:刻みネギが便利。そうめんやパスタの薬味に。
- めんつゆ:もし自宅にない場合は、コンビニで手軽に購入できます。そうめんの基本としてあると便利です。
- バター:パスタやそうめんにコクをプラスできます。
- 醤油:バター醤油パスタや、そうめんの味付けに。
これらの食材は、少量から購入できるので、必要な時に少しだけ買い足すことができます。
結論:今日のお昼ご飯は、お家にある麺で決まり!
このレポートでは、ご自宅にある乾麺のパスタとそうめんを使った、簡単で美味しいお昼ご飯のアイデアをいくつかご紹介しました。特別なソースや材料がなくても、工夫次第で様々な美味しい麺料理が楽しめます。パスタは、ごま油やバター醤油でシンプルに、また電子レンジを使えばさらに手軽に調理できます。そうめんは、定番のめんつゆでいただくのはもちろん、ちょっとしたアレンジを加えるだけで、飽きずに楽しむことができます。温かくしていただくのもおすすめです。
今日のお昼ご飯、何にしようか迷ったら、ぜひこのレポートでご紹介したレシピを参考に、お家にある麺で美味しい一品を作ってみてください。きっと、手軽さと美味しさに満足できるはずです。| レシピ名 | 主な材料 | アレンジ例 | 調理方法 | 参照元 | | :---- | :---- | :---- | :---- | :---- | | ごま油香る!和風にんにくパスタ | スパゲティ、にんにく、ごま油、めんつゆ | ラー油、刻みのり | 炒め | 1 | | バター醤油のシンプルパスタ | スパゲティ、バター、醤油 | 黒胡椒 | 炒め | 2 | | 電子レンジで簡単!ツナとガーリックのオイルパスタ風 | スパゲティ、ツナ、にんにく、めんつゆ、オリーブ油、バター | 冷凍野菜 | 電子レンジ | 3 | | シンプル is ベスト!オイルとニンニクの基本パスタ | スパゲティ、にんにく、オリーブ油 | 赤唐辛子、ベーコン、きのこ | 炒め | 4 |
| レシピ名 | 主な味付け | 主な材料 | 参照元 | | :---- | :---- | :---- | :---- | | シンプルめんつゆそうめん | めんつゆ | そうめん | 10-13-18 | | ごま油香る塩そうめん | ごま油、塩 | そうめん | 10 | | トマトとツナのそうめん | めんつゆ | そうめん、トマト、ツナ | 11 | | 釜玉風そうめん | 醤油またはめんつゆ | そうめん、卵 | 10 | | 温玉そうめん(にゅうめん) | だし汁、醤油、みりん | そうめん、卵 | 12 | | バター醤油そうめん | バター、醤油 | そうめん | 12 |
引用文献
1. ごま油がポイント! にんにく風味の和風パスタのレシピ動画 ..., 3月 14, 2025にアクセス、 https://delishkitchen.tv/recipes/167590676693778924
2. 簡単! 具なしバター醤油パスタのレシピ動画・作り方 | デリッシュ ..., 3月 14, 2025にアクセス、 https://delishkitchen.tv/recipes/525069302701752674
3. 包丁なし簡単 ツナ缶油ごと使って作るやみつきパスタ | セブンプレミアム公式, 3月 14, 2025にアクセス、 https://7premium.jp/recipe/search/detail?id=9949
4. 材料は…たったこれだけ!?超簡単なのに絶品な「シンプルパスタ」レシピ帖 | キナリノ, 3月 14, 2025にアクセス、 https://kinarino.jp/cat4/33954
5. 【作り置き】材料5つだけ!簡単ペペロンチーノソース - macaroni, 3月 14, 2025にアクセス、 https://macaro-ni.jp/53793
6. にんにく香る!簡単に作れる基本のペペロンチーノの作り方 | デ ..., 3月 14, 2025にアクセス、 https://delishkitchen.tv/recipes/171524636704506348
7. 簡単・本格・失敗なし!ペペロンチーノ基本のレシピ - Nadia, 3月 14, 2025にアクセス、 https://oceans-nadia.com/user/253470/recipe/440736
8. 【乳化の極意を解説】にんにく香る本格ペペロンチーノレシピ。プロの技で旨みたっぷり! | 三越伊勢丹の食メディア | FOODIE(フーディー), 3月 14, 2025にアクセス、 https://mi-journey.jp/foodie/77708/
9. すぐにできる! 具なしペペロンチーノのレシピ動画・作り方 | デリッシュキッチン, 3月 14, 2025にアクセス、 https://delishkitchen.tv/recipes/301564582369953005
10. 毎日食べても飽きない【そうめん】レシピ20選!余ったそうめんの ..., 3月 14, 2025にアクセス、 https://www.kurashiru.com/articles/336924d1-3266-4050-bc51-e79a6383400f
11. 【そうめん】アレンジ人気レシピ45選!15分以内で簡単 - Nadia, 3月 14, 2025にアクセス、 https://oceans-nadia.com/user/10022/article/3242
12. 子どもも喜ぶ そうめんを使った人気のレシピ20選の人気レシピ ..., 3月 14, 2025にアクセス、 https://delishkitchen.tv/curations/9367
13. アレンジそうめんの簡単レシピ・人気料理 1位~20位, 3月 14, 2025にアクセス、 https://recipe.rakuten.co.jp/category/16-154-918/simple/
14. もうゆでない!絶品そうめん作り方!火を使わず簡単 つゆもレンジにおまかせ つゆのアレンジも紹介しています - YouTube, 3月 14, 2025にアクセス、 https://m.youtube.com/watch?v=LyChkGwtH4A\&pp=ygUiI-OCsOODqeOCueOCseODvOOCrTEwMOWdh-WFpeOCjOeJqQ%3D%3D
15. そうめんつゆの基本&アレンジレシピ16選!人気のおすすめちょい足しも - マカロニ, 3月 14, 2025にアクセス、 https://macaro-ni.jp/32748
16. そうめん&つゆのアレンジレシピ20選を一挙ご紹介! - デリッシュキッチン, 3月 14, 2025にアクセス、 https://delishkitchen.tv/articles/1048
17. めんつゆレシピをご紹介!料理にめんつゆ|だし・かつお節のヤマキ, 3月 14, 2025にアクセス、 https://www.yamaki.co.jp/mentsuyu/recipe/
18. めんつゆを使った簡単アレンジレシピ!基本の料理から「かえし」を使ったレシピも紹介, 3月 14, 2025にアクセス、 https://www.sobahonda.co.jp/blog/mentsuyu_arrange/
19. 【そうめん】定番からアレンジまで 激旨な人気レシピランキング (全332品) - デリッシュキッチン, 3月 14, 2025にアクセス、 https://delishkitchen.tv/categories/3058
20. 【アレンジ自在!そうめんレシピ】バラエティ豊かな人気レシピ70選 - デリッシュキッチン, 3月 14, 2025にアクセス、 https://delishkitchen.tv/curations/7216 -
@ 84b0c46a:417782f5
2025-03-13 06:44:10 -
@ 04c915da:3dfbecc9
2025-03-12 15:30:46Recently we have seen a wave of high profile X accounts hacked. These attacks have exposed the fragility of the status quo security model used by modern social media platforms like X. Many users have asked if nostr fixes this, so lets dive in. How do these types of attacks translate into the world of nostr apps? For clarity, I will use X’s security model as representative of most big tech social platforms and compare it to nostr.
The Status Quo
On X, you never have full control of your account. Ultimately to use it requires permission from the company. They can suspend your account or limit your distribution. Theoretically they can even post from your account at will. An X account is tied to an email and password. Users can also opt into two factor authentication, which adds an extra layer of protection, a login code generated by an app. In theory, this setup works well, but it places a heavy burden on users. You need to create a strong, unique password and safeguard it. You also need to ensure your email account and phone number remain secure, as attackers can exploit these to reset your credentials and take over your account. Even if you do everything responsibly, there is another weak link in X infrastructure itself. The platform’s infrastructure allows accounts to be reset through its backend. This could happen maliciously by an employee or through an external attacker who compromises X’s backend. When an account is compromised, the legitimate user often gets locked out, unable to post or regain control without contacting X’s support team. That process can be slow, frustrating, and sometimes fruitless if support denies the request or cannot verify your identity. Often times support will require users to provide identification info in order to regain access, which represents a privacy risk. The centralized nature of X means you are ultimately at the mercy of the company’s systems and staff.
Nostr Requires Responsibility
Nostr flips this model radically. Users do not need permission from a company to access their account, they can generate as many accounts as they want, and cannot be easily censored. The key tradeoff here is that users have to take complete responsibility for their security. Instead of relying on a username, password, and corporate servers, nostr uses a private key as the sole credential for your account. Users generate this key and it is their responsibility to keep it safe. As long as you have your key, you can post. If someone else gets it, they can post too. It is that simple. This design has strong implications. Unlike X, there is no backend reset option. If your key is compromised or lost, there is no customer support to call. In a compromise scenario, both you and the attacker can post from the account simultaneously. Neither can lock the other out, since nostr relays simply accept whatever is signed with a valid key.
The benefit? No reliance on proprietary corporate infrastructure.. The negative? Security rests entirely on how well you protect your key.
Future Nostr Security Improvements
For many users, nostr’s standard security model, storing a private key on a phone with an encrypted cloud backup, will likely be sufficient. It is simple and reasonably secure. That said, nostr’s strength lies in its flexibility as an open protocol. Users will be able to choose between a range of security models, balancing convenience and protection based on need.
One promising option is a web of trust model for key rotation. Imagine pre-selecting a group of trusted friends. If your account is compromised, these people could collectively sign an event announcing the compromise to the network and designate a new key as your legitimate one. Apps could handle this process seamlessly in the background, notifying followers of the switch without much user interaction. This could become a popular choice for average users, but it is not without tradeoffs. It requires trust in your chosen web of trust, which might not suit power users or large organizations. It also has the issue that some apps may not recognize the key rotation properly and followers might get confused about which account is “real.”
For those needing higher security, there is the option of multisig using FROST (Flexible Round-Optimized Schnorr Threshold). In this setup, multiple keys must sign off on every action, including posting and updating a profile. A hacker with just one key could not do anything. This is likely overkill for most users due to complexity and inconvenience, but it could be a game changer for large organizations, companies, and governments. Imagine the White House nostr account requiring signatures from multiple people before a post goes live, that would be much more secure than the status quo big tech model.
Another option are hardware signers, similar to bitcoin hardware wallets. Private keys are kept on secure, offline devices, separate from the internet connected phone or computer you use to broadcast events. This drastically reduces the risk of remote hacks, as private keys never touches the internet. It can be used in combination with multisig setups for extra protection. This setup is much less convenient and probably overkill for most but could be ideal for governments, companies, or other high profile accounts.
Nostr’s security model is not perfect but is robust and versatile. Ultimately users are in control and security is their responsibility. Apps will give users multiple options to choose from and users will choose what best fits their need.
-
@ 2cb8ae56:84d30cba
2025-03-06 07:40:38どうも、Nostrまとめ(2024)ぶりですね。
記事として出すのはかなりお久しぶりかも、お名前変わりまして「フェゼレント」でございます。 意味としては以下の通りです
1.Fezer(フェザー)という英単語 2.ent(エント)という造語 2-1. netを崩した形、よくこれに打ち間違えます。 2-2. Entertainment(エンターテイメント)の略語、なんか娯楽とか話題を生み出せる人になりたいですね。
1と2をガッタイ!!!(トムブラウン風)しまして、フェゼレントです。
なんとググってみますと、Fezerent及びフェゼレントの検索結果が0。 これは...一種のチャンスでは!?と思って、使っています。
さて、そこで出てくるのが「薄味のキャルピス」と「IVstrook」の今後ですよね。 後者に至っては3年分の料金を払ってドメインまで取っているわけですし、前者はかなりネットとかラジオでも浸透しています。
というわけで、こんな風に置き換えます。
Nostr、YT、Discordはフェゼレント及びFezerentを使用します。 それ以外(ラジオを含む)では薄味のキャルピス、IVstrookを使用します。 そして、NHKなどAM波を使用して放送を行っているラジオ局用で使用していた「テックジャンカー」ですが、使用を停止します。 あんま浸透しなかったわけですからね
そんな感じでやっていきます 最後に、記事最後に使用する署名のような奴ですが、そちらは変更なく「IVstrook」単体で行います。
また、ニコニコ動画及び各種ポッドキャストサービスにて配信しておりました「Small Room Space」ですが、今後はzap.streamというNostrのシステムを使用したサービスを用い、番組名の変更は行わないものとします。 zap.streamでの配信開始は「4月7日」 ちょうど#1が公開されてから1年が経過した日です
重ねて、当名義を使用したニコニコ動画への投稿は「3月8日」をもって終了とし、zap.streamへ移行します。
以上、今年に入ってからまともにニコニコ動画で投稿できていませんでしたが、そのような運びとさせていただきます。
2025/03/06 IVstrook
-
@ 75869cfa:76819987
2025-03-04 14:05:38GM, Nostriches!
The Nostr Review is a biweekly newsletter focused on Nostr statistics, protocol updates, exciting programs, the long-form content ecosystem, and key events happening in the Nostr-verse. If you’re interested, join me in covering updates from the Nostr ecosystem!
Quick review:
In the past two weeks, Nostr statistics indicate over 228,000 daily trusted pubkey events. The number of new users has seen a notable increase, with profiles with a contact list amounting to 17 times the same period. More than 11 million events have been published, with posts and reposts showing an increase. Total Zap activity stands at approximately 13 million, marking a 22% decrease.
Additionally, 28 pull requests were submitted to the Nostr protocol, with 5 merged. A total of 45 Nostr projects were tracked, with 11 releasing product updates, and over 462 long-form articles were published, 26% focusing on Bitcoin and Nostr. During this period, 2 notable events took place, and 1 significant events is upcoming.
Nostr Statistics
Based on user activity, the total daily trusted pubkeys writing events is about 228,000, representing a slight 8.7% decrease compared to the previous period. Daily activity peaked at 18256 events, with a low of approximately 16087.
The number of new users has increased significantly. Profiles with a contact list are now around 393,637, a 17-fold increase. Pubkeys writing events have declined to approximately 227,635, but have still grown by 14%. Profiles with a bio are now 9 times the previous number.
Regarding event publishing, the total number of note events published is about 11 million. Posts remain the most dominant in terms of volume, totaling approximately 1.7 million, reflecting an increase of 6.8%. Reposts are showing a increase of approximately 12%, while reactions have experienced a 8% decline.
For zap activity, the total zap amount is about 13 million, showing a decrease of over 22% compared to the previous period.
Data source: https://stats.nostr.band/
NIPs
nip99 e-commerce use case extension
nostr:npub1gmmrkec8een5jelrxq5rz260nqzpnj45yzznpaerqv0yma3s86gqpfe2h0 is proposing nip99 e-commerce use case extension. This pull request simply adds a link to the specification we are developing and have consensus on, allowing other developers who want to implement NIP-99 for e-commerce to discover how the major developers are approaching it. In this way, we ensure that NIP-99 remains lightweight and allows for broad use cases while also providing guidance for the e-commerce use case that is currently prevalent.
nostr:npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 is proposing "global" relay lists that streamlines the b/c process by standardizing it across multiple apps and also by allowing these lists to be shared, so when the relays that were hardcoded (and that were, at the time of the hardcoding, known to be such public squares) get shut down then clients can automatically or manually switch to new ones.
[NIP 53 Addendum] - Add Interactive Rooms, Meetings, and Live Presence.
nostr:npub18pudjhdhhp2v8gxnkttt00um729nv93tuepjda2jrwn3eua5tf5s80a699 is proposing that add Interactive Rooms and Meetings, and Live presence to NIP-53. Kind 30312 (Interactive Rooms), Kind 30313 (Meetings), Kind 10312 (Room Presence). These Kinds would apply to interactive audio/video platforms such as Hivetalk version 2.0 (not public yet) and Nostr Nests.
NIP-5E: Censorship Resistant Live Streams
v0l is proposing a way to distribute live video streams via Nostr. "Live Video" in this context implies segmented video streams like HLS or DASH. Each segment of the stream is a NIP-94 event which describes where the file can be found and its hash.
Add birth field to NIP-24 for birth date representation
nostr:npub12egp0pvh2f0fp6sk5nt6ncehqzkz8zsma8dl8agf8p3f98v6resqku4w26 is proposing a PR that introduces the birth field to NIP-24, allowing users to specify their birth date. The goal is to enable applications to celebrate users' birthdays and allow other users to notice and join in the celebration, enhancing social interactions.Defined the format as [day, month, year (optional)]. The year is optional to accommodate users who prefer not to disclose their age.
NIP-05: add dynamic server recommendation
nostr:npub1q3sle0kvfsehgsuexttt3ugjd8xdklxfwwkh559wxckmzddywnws6cd26p is proposing NIP-05 services who let people sign up for a NIP-05 name are recommended to make the names unique case insensitive.
Staab is proposing PR that adds a delegation command to NIP 46, which allows applications that are already authorized to create new sessions with limited permissions. My use case for this is sharing a read-only session with push- or email- notification servers, which can only sign kind 22242 events on behalf of the user, in order to get access to auth-gated relays.
Staab updates NIP: XXX - Push Notifiation with the following differences: It uses parameterized replaceable events, which allows for multiple subscriptions to exist at the same time;It uses NIP 44 encryption rather than NIP 04;It uses filters rather than ad-hoc targets;It uses delegated authentication in order to gain access to gated relays;It uses a different mechanism for pausing notifications and auto-expiring pauses.
NIP-22: Format should follow scope
nostr:npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z is proposing This adds some flexibility in formatting styles for NIP-22. Since this NIP is always used inside a scope (another NIP), formatting rules SHOULD be defined by that NIP. Examples: If the Comment is replying to a markdown-based NIP, it should allow markdown. If the Comment is replying to an asciidoc-based NIP, it should allow asciidoc.
NIP-34!: use NIP-22 thread style for patch and status events
nostr:npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr created this as part of reviewing #1744. For the status event, references to merged patch events are done using the q tag even though the they are not included in content. This is because NIP-22 only supports the use of e reference for the parent event id.
believethehype introduces kind 7007 (ping) to send a small request to a dvm to check if it is alive. The DVM replies with a kind 7000 feedback event and status pong, and optional information in content. This allows clients to test if a dvm is alive without sending an actual job request to the dvm.
Notable Projects
Coracle 0.6.5 nostr:npub1jlrs53pkdfjnts29kveljul2sm0actt6n8dxrrzqcersttvcuv3qdjynqn
New maintenance release of Coracle is out: * Fix memory leak * Fix isEventMuted * Fix toast animation * Fix (and improve) drafts * Fix parser dropping sections of notes
Primal nostr:npub12vkcxr0luzwp8e673v29eqjhrr7p9vqq8asav85swaepclllj09sylpugg
Primal for iOS build 2.1.26 has just been released. Here’s what’s new: * Improved feeds * Deep linking threads, articles, profiles * Bug fixes & stability improvements
Yakihonne nostr:npub1yzvxlwp7wawed5vgefwfmugvumtp8c8t0etk3g8sky4n0ndvyxesnxrf8q
web v4.4.0: * Zap polls can now be added directly from the list or created instantly within notes and comments. * Muting users is now more reliable. * Users can download and export their NWC secret for wallets. * Wallets and account credentials are automatically saved upon signup and logout. * Faster login and signup when interacting with Yakihonne while logged out. * Bug fixes and performance optimizations for improved reliability.
mobile v1.6.6: * Ability to export your NWC wallets and your keys. * Blink wallet is now available as one of the external wallets that can be used. * Private messages drafts are now available. * Notes stats optimised. * Wallet management overall performance has been improved. * Fixing bugs and improving the overall performance
GOSSIP nostr:npub189j8y280mhezlp98ecmdzydn0r8970g4hpqpx3u9tcztynywfczqqr3tg8
Several major bugs have been fixed in the last week. * PRIVACY: gossip was authenticating to relays in many cases even if you turned on "require user approval before AUTHenticating..." * Gossip was rendering nevent links as note1 links in some cases * When clicking the parent link, sometimes it wasn't finding the parent note (even though the note you clicked correctly hinted at which relay the note was at) * New users who adjusted settings during the first run were having their public key wiped, which appeared to have no identity and they had to regenerate on second run
nos.social nostr:npub1pu3vqm4vzqpxsnhuc684dp2qaq6z69sf65yte4p39spcucv5lzmqswtfch
With the Nos 1.2 update, you can use Nos to create, edit, and delete lists of your favorite people and accounts! We're also bringing you fixes for the biggest issues in the previous version: * Fixed: restarting app reverts to Following rather than selected list or relay * Fixed: lists change positions randomly * Fixed: adding and removing relays is not reflected in the feed filter * Fixed: text fields sometimes don't work on onboarding screens * Fixed: main action button is not visible on iPad on "Build Your Network" onboarding screen * Fixed: crash when processing a malformed delete event
Fountain 1.1.17 nostr:npub1v5ufyh4lkeslgxxcclg8f0hzazhaw7rsrhvfquxzm2fk64c72hps45n0v5
- In this update, we completely rebuilt the authentication flows as some users reported issues accessing the app. We're currently building out the redesigned library and content pages along with updates to transcripts.
Plebeian Market nostr:npub1market6g3zl4mxwx5ugw56hfg0f7dy7jnnw8t380788mvdyrnwuqgep7hd
- Social Sharing: New social sharing buttons have been implemented, allowing users to share listings and pages effortlessly across social platforms.
- Open Graph Integration: Enhanced sharing capabilities with the addition of an Open Graph library, making it easier to share listings on social media.
- Pagination on Mobile: Now see up to 20 items before you need to paginate, making browsing smoother and more efficient on your mobile device.
- UX/UI Overhaul: Significant improvements to the UX and UI of the Settings and Dashboard for a more intuitive navigation.
- Dashboard Enhancements: Various fixes to ensure the dashboard is more functional and user-friendly.
- Relays Pop-Out: Improved UI so the Relays pop-out no longer goes underneath the category menu on the homepage and other pages.
- Save Button: A 'Save' button has been added to every page for quick and easy updates to your listings or settings.
- Payment Details Clarity: Examples are now included in the 'Payment Details' field to guide sellers on what information to provide.
- And fixes some bugs.
DEG Mods nostr:npub17jl3ldd6305rnacvwvchx03snauqsg4nz8mruq0emj9thdpglr2sst825x
- The ability to switch between reply and quote-replies
- Preview the recent posts of an author under their profile box when viewing a mod or blog they've published
- Clicking on images in a feed post triggers the gallery system for it
- Adjusted the design of images and videos that appear in the feed page
- Reposting won't trigger a popup
- Textarea in feed page will reset its size after posting, along with preview reset
- Load new posts button now works/appears properly
- Reply depth numbering now works correctly
- User LN address now updates correctly if they change it (was a caching issue)
Zapstore 0.2.5 nostr:npub10r8xl2njyepcw2zwv3a6dyufj4e4ajx86hz6v4ehu4gnpupxxp7stjt2p8
- Hopefully fixed the missing apps issue
- No more toast showing Zapstore update available (pinned instead)
- Trigger local version refresh on app detail page
futr nostr nostr:npub18wxf0t5jsmcpy57ylzx595twskx8eyj382lj7wp9rtlhzdg5hnnqvt4xra
- Optimized Subscription Handling
- Implemented proper event pagination with timestamp tracking.
- Added event deduplication across batches.
- Improved debug logging for pagination and subscription events.
- Fixed timestamp handling to prevent future-dated events.
- Reduced events per pubkey from 2000 to 500 for better efficiency.
- Relay Connection & Event Parsing
- Improved relay connection state management.
- Fixed parsing of OK messages from relays.
- Updated follow list and DM relay parsing.
- Added proper nevent links for quoted reposts.
- Increased connection timeout from 3s to 15s to enhance reliability.
- UI & UX Enhancements
- Fixed follow list flickering by improving model caching.
- Improved login experience with better async timing.
- Fixed profile filter issues to improve data consistency.
- And another changes.
ZEUS v0.10.0 nostr:npub1xnf02f60r9v0e5kty33a404dm79zr7z2eepyrk5gsq3m7pwvsz2sazlpr5
- Receive: add advanced settings toggle
- Remove deprecated backends
- Move sweep on-chain functionality to Tools view
- Update colors according to themes in external link modal
- Improve contrast of warning buttons in Disaster Recovery view
- Bug fix: display of backup status
- Bug fix: ZEUS Pay local notifications
- Renewable channels
- NWC client support
- Embedded LND: v0.18.5-beta
- New share button (share ZEUS QR images)
- Activity: highlight filter icon when filters active
- chantools: sweepremoteclosed
- Tools: Export Activity CSVs, Developer tools
- Activity: filter by max amount, memo + note
- CLNRest: add payment timeout setting
Long-Form Content Eco
In the past two weeks, more than 462 long-form articles have been published, including over 79 articles on Bitcoin and more than 42 related to Nostr, accounting for 26% of the total content.
These articles about Nostr mainly explore its potential as a decentralized, censorship-resistant communication protocol, contrasting it with traditional social media platforms like Facebook and X. They discuss Nostr’s ability to foster free speech, privacy, and security while providing a foundation for new applications, including encrypted messaging (such as the use of the Double Ratchet Algorithm in NIP-117 and NIP-118), decentralized identity management, and anonymous event relaying (as proposed in "Renoters"). Several pieces, including "The Advancement of the Nostr Protocol," highlight recent technical advancements, developer tools like Nostr SDK, and practical use cases for Bitcoin applications. Others, criticize centralized platforms for their control over user data and content moderation policies. Additionally, topics like relay setup, voting systems, and AI alignment with human values are explored, emphasizing Nostr’s broader applications beyond social media.
These Bitcoin articles explore adoption, investment strategies, security, privacy, and their impact on global finance. Many highlight Bitcoin’s role in fostering financial resilience in Zimbabwe, rural economies, and the importance of user adoption over merchant adoption. Investment discussions cover DCA strategies, ETF influence, and ways to maximize returns. Privacy and security topics emphasize decentralization, self-custody, and best practices to protect assets. Bitcoin is framed as an alternative to fiat, with critiques of traditional finance and central banking. Geopolitical discussions examine the IMF’s influence, France’s fiscal crisis, and El Salvador’s Bitcoin policy. Technical innovations, such as EVM integration, Lightning Network advancements, and multi-payment solutions, continue to expand the Bitcoin ecosystem, driving broader adoption and usability.
Thank you, nostr:npub1m0sxqk5uwvtjhtt4yw3j0v3k6402fd35aq8832gp8kmer78atvkq9vgcru nostr:npub13rvvn5g23anm09kwnya8qvzqejxfajfa56rnn47ck5l96ke6cq4sdcd4e0 nostr:npub10m6lrv2kaf08a8um0plhj5dj6yqlw7qxzeag6393z352zrs0e5nsr2tff3 nostr:npub17v7g49shev2lwp0uwrx5v88ad6hj970zfse74wkes9jguhkx7aqsgjwsvj nostr:npub18lav8fkgt8424rxamvk8qq4xuy9n8mltjtgztv2w44hc5tt9vets0hcfsz nostr:npub1nlk894teh248w2heuu0x8z6jjg2hyxkwdc8cxgrjtm9lnamlskcsghjm9c nostr:npub1xzuej94pvqzwy0ynemeq6phct96wjpplaz9urd7y2q8ck0xxu0lqartaqn nostr:npub1g53mukxnjkcmr94fhryzkqutdz2ukq4ks0gvy5af25rgmwsl4ngq43drvk nostr:npub16dswlmzpcys0axfm8kvysclaqhl5zv20ueurrygpnnm7k9ys0d0s2v653f nostr:npub1x7zk9nfqsjwuuwm5mpdu8eevsnu2kk0ff23fv58p45d50fhuvaeszg44p2 nostr:npub1mwce4c8qa2zn9zw9f372syrc9dsnqmyy3jkcmpqkzaze0slj94dqu6nmwy and others, for your work. Enriching Nostr’s long-form content ecosystem is crucial.
Nostriches Global Meet Ups
Recently, several Nostr events have been hosted in different countries. * The Bitcoin Freedom Festival took place from February 20 to 24, 2025, at the Awakening Center in Uvita, Costa Rica. In collaboration with the Awake Earth Festival, the event blended a music festival with Bitcoin seminars and lectures. From February 20 to 23, it featured music, healing workshops, ceremonies, and educational talks, with internationally renowned artists and captivating discussions. February 24 was a special day dedicated to Bitcoin, with all activities centered around it. nostr:npub14f26g7dddy6dpltc70da3pg4e5w2p4apzzqjuugnsr2ema6e3y6s2xv7lu * The 5th Bitcoin Educators Unconference, organized by Mi Primer Bitcoin, was successfully held on February 27, 2025, at Bitcoin Park in Nashville, USA. The event focused on grassroots projects and Bitcoin education, adopting a decentralized, community-led format. Every participant was a potential speaker, proposing discussion topics at the beginning of the event, which were then grouped into breakout sessions for in-depth discussions. nostr:npub17cyatz6z2dzcw6xehtcm9z45m76lde5smxdmyasvs00r4pqv863qrs4ml3
Here is the upcoming Nostr event that you might want to check out.
- The Bitcoin Educators Unconference will take place on April 10, 2025, at Bitcoin Park in Nashville, USA. The event follows a decentralized, community-led format, with a focus on Bitcoin education and independent Bitcoin educators. It aims to foster collaboration and networking among Bitcoin educators, creating a truly interactive space.
Additionally, We warmly invite event organizers who have held recent activities to reach out to us so we can work together to promote the prosperity and development of the Nostr ecosystem.
Thanks for reading! If there’s anything I missed, feel free to reach out and help improve the completeness and accuracy of my coverage.
-
@ b2d670de:907f9d4a
2025-02-28 16:39:38onion-service-nostr-relays
A list of nostr relays exposed as onion services.
The list
| Relay name | Description | Onion url | Operator | Payment URL | Payment options | | --- | --- | --- | --- | --- | --- | | nostr.oxtr.dev | Same relay as clearnet relay nostr.oxtr.dev | ws://oxtrdevav64z64yb7x6rjg4ntzqjhedm5b5zjqulugknhzr46ny2qbad.onion | operator | N/A | N/A | | relay.snort.social | Same relay as clearnet relay relay.snort.social | wss://skzzn6cimfdv5e2phjc4yr5v7ikbxtn5f7dkwn5c7v47tduzlbosqmqd.onion | operator | N/A | N/A | | nostr.thesamecat.io | Same relay as clearnet relay nostr.thesamecat.io | ws://2jsnlhfnelig5acq6iacydmzdbdmg7xwunm4xl6qwbvzacw4lwrjmlyd.onion | operator | N/A | N/A | | nostr.land | The nostr.land paid relay (same as clearnet) | ws://nostrland2gdw7g3y77ctftovvil76vquipymo7tsctlxpiwknevzfid.onion | operator | Payment URL | BTC LN | | bitcoiner.social | No auth required, currently | ws://bitcoinr6de5lkvx4tpwdmzrdfdpla5sya2afwpcabjup2xpi5dulbad.onion | operator | N/A | N/A | | relay.westernbtc.com | The westernbtc.com paid relay | ws://westbtcebhgi4ilxxziefho6bqu5lqwa5ncfjefnfebbhx2cwqx5knyd.onion | operator | Payment URL | BTC LN | | freelay.sovbit.host | Free relay for sovbit.host | ws://sovbitm2enxfr5ot6qscwy5ermdffbqscy66wirkbsigvcshumyzbbqd.onion | operator | N/A | N/A | | nostr.sovbit.host | Paid relay for sovbit.host | ws://sovbitgz5uqyh7jwcsudq4sspxlj4kbnurvd3xarkkx2use3k6rlibqd.onion | operator | N/A | N/A | | nostr.wine | 🍷 nostr.wine relay | ws://nostrwinemdptvqukjttinajfeedhf46hfd5bz2aj2q5uwp7zros3nad.onion | operator | Payment URL | BTC LN, BTC, Credit Card/CashApp (Stripe) | | inbox.nostr.wine | 🍷 inbox.nostr.wine relay | ws://wineinboxkayswlofkugkjwhoyi744qvlzdxlmdvwe7cei2xxy4gc6ad.onion | operator | Payment URL | BTC LN, BTC | | filter.nostr.wine | 🍷 filter.nostr.wine proxy relay | ws://winefiltermhqixxzmnzxhrmaufpnfq3rmjcl6ei45iy4aidrngpsyid.onion | operator | Payment URL | BTC LN, BTC | | N/A | N/A | ws://pzfw4uteha62iwkzm3lycabk4pbtcr67cg5ymp5i3xwrpt3t24m6tzad.onion:81 | operator | N/A | N/A | | nostr.fractalized.net | Free relay for fractalized.net | ws://xvgox2zzo7cfxcjrd2llrkthvjs5t7efoalu34s6lmkqhvzvrms6ipyd.onion | operator | N/A | N/A | | nfrelay.app | nfrelay.app aggregator relay (nostr-filter-relay) | ws://nfrelay6saohkmipikquvrn6d64dzxivhmcdcj4d5i7wxis47xwsriyd.onion | operator | N/A | N/A | relay.nostr.net | Public relay from nostr.net (Same as clearnet) | ws://nostrnetl6yd5whkldj3vqsxyyaq3tkuspy23a3qgx7cdepb4564qgqd.onion | operator | N/A | N/A | | nerostrator | Free to read, pay XMR to relay | ws://nerostrrgb5fhj6dnzhjbgmnkpy2berdlczh6tuh2jsqrjok3j4zoxid.onion | operator |Payment URL | XMR | | nostr.girino.org | Public relay from nostr.girino.org | ws://gnostr2jnapk72mnagq3cuykfon73temzp77hcbncn4silgt77boruid.onion | operator | N/A | N/A | | wot.girino.org | WoT relay from wot.girino.org | ws://girwot2koy3kvj6fk7oseoqazp5vwbeawocb3m27jcqtah65f2fkl3yd.onion | operator | N/A | N/A | | haven.girino.org/{outbox, inbox, chat, private} | Haven smart relay from haven.girino.org | ws://ghaven2hi3qn2riitw7ymaztdpztrvmm337e2pgkacfh3rnscaoxjoad.onion/{outbox, inbox, chat, private} | operator | N/A | N/A | | relay.nostpy.lol | Free Web of Trust relay (Same as clearnet) | ws://pemgkkqjqjde7y2emc2hpxocexugbixp42o4zymznil6zfegx5nfp4id.onion | operator |N/A | N/A | | Poster.place Nostr Relay | N/A | ws://dmw5wbawyovz7fcahvguwkw4sknsqsalffwctioeoqkvvy7ygjbcuoad.onion | operator | N/A | N/A | | Azzamo Relay | Azzamo Premium Nostr relay. (paid) | ws://q6a7m5qkyonzb5fk5yv4jyu3ar44hqedn7wjopg737lit2ckkhx2nyid.onion | operator | Payment URL | BTC LN | | Azzamo Inbox Relay | Azzamo Group and Private message relay. (Freemium) | ws://gp5kiwqfw7t2fwb3rfts2aekoph4x7pj5pv65re2y6hzaujsxewanbqd.onion | operator | Payment URL | BTC LN | | Noderunners Relay | The official Noderunners Nostr Relay. | ws://35vr3xigzjv2xyzfyif6o2gksmkioppy4rmwag7d4bqmwuccs2u4jaid.onion | operator | Payment URL | BTC LN |
Contributing
Contributions are encouraged to keep this document alive. Just open a PR and I'll have it tested and merged. The onion URL is the only mandatory column, the rest is just nice-to-have metadata about the relay. Put
N/A
in empty columns.If you want to contribute anonymously, please contact me on SimpleX or send a DM on nostr using a disposable npub.
Operator column
It is generally preferred to use something that includes a NIP-19 string, either just the string or a url that contains the NIP-19 string in it (e.g. an njump url).
-
@ 460c25e6:ef85065c
2025-02-25 15:20:39If you don't know where your posts are, you might as well just stay in the centralized Twitter. You either take control of your relay lists, or they will control you. Amethyst offers several lists of relays for our users. We are going to go one by one to help clarify what they are and which options are best for each one.
Public Home/Outbox Relays
Home relays store all YOUR content: all your posts, likes, replies, lists, etc. It's your home. Amethyst will send your posts here first. Your followers will use these relays to get new posts from you. So, if you don't have anything there, they will not receive your updates.
Home relays must allow queries from anyone, ideally without the need to authenticate. They can limit writes to paid users without affecting anyone's experience.
This list should have a maximum of 3 relays. More than that will only make your followers waste their mobile data getting your posts. Keep it simple. Out of the 3 relays, I recommend: - 1 large public, international relay: nos.lol, nostr.mom, relay.damus.io, etc. - 1 personal relay to store a copy of all your content in a place no one can delete. Go to relay.tools and never be censored again. - 1 really fast relay located in your country: paid options like http://nostr.wine are great
Do not include relays that block users from seeing posts in this list. If you do, no one will see your posts.
Public Inbox Relays
This relay type receives all replies, comments, likes, and zaps to your posts. If you are not getting notifications or you don't see replies from your friends, it is likely because you don't have the right setup here. If you are getting too much spam in your replies, it's probably because your inbox relays are not protecting you enough. Paid relays can filter inbox spam out.
Inbox relays must allow anyone to write into them. It's the opposite of the outbox relay. They can limit who can download the posts to their paid subscribers without affecting anyone's experience.
This list should have a maximum of 3 relays as well. Again, keep it small. More than that will just make you spend more of your data plan downloading the same notifications from all these different servers. Out of the 3 relays, I recommend: - 1 large public, international relay: nos.lol, nostr.mom, relay.damus.io, etc. - 1 personal relay to store a copy of your notifications, invites, cashu tokens and zaps. - 1 really fast relay located in your country: go to nostr.watch and find relays in your country
Terrible options include: - nostr.wine should not be here. - filter.nostr.wine should not be here. - inbox.nostr.wine should not be here.
DM Inbox Relays
These are the relays used to receive DMs and private content. Others will use these relays to send DMs to you. If you don't have it setup, you will miss DMs. DM Inbox relays should accept any message from anyone, but only allow you to download them.
Generally speaking, you only need 3 for reliability. One of them should be a personal relay to make sure you have a copy of all your messages. The others can be open if you want push notifications or closed if you want full privacy.
Good options are: - inbox.nostr.wine and auth.nostr1.com: anyone can send messages and only you can download. Not even our push notification server has access to them to notify you. - a personal relay to make sure no one can censor you. Advanced settings on personal relays can also store your DMs privately. Talk to your relay operator for more details. - a public relay if you want DM notifications from our servers.
Make sure to add at least one public relay if you want to see DM notifications.
Private Home Relays
Private Relays are for things no one should see, like your drafts, lists, app settings, bookmarks etc. Ideally, these relays are either local or require authentication before posting AND downloading each user\'s content. There are no dedicated relays for this category yet, so I would use a local relay like Citrine on Android and a personal relay on relay.tools.
Keep in mind that if you choose a local relay only, a client on the desktop might not be able to see the drafts from clients on mobile and vice versa.
Search relays:
This is the list of relays to use on Amethyst's search and user tagging with @. Tagging and searching will not work if there is nothing here.. This option requires NIP-50 compliance from each relay. Hit the Default button to use all available options on existence today: - nostr.wine - relay.nostr.band - relay.noswhere.com
Local Relays:
This is your local storage. Everything will load faster if it comes from this relay. You should install Citrine on Android and write ws://localhost:4869 in this option.
General Relays:
This section contains the default relays used to download content from your follows. Notice how you can activate and deactivate the Home, Messages (old-style DMs), Chat (public chats), and Global options in each.
Keep 5-6 large relays on this list and activate them for as many categories (Home, Messages (old-style DMs), Chat, and Global) as possible.
Amethyst will provide additional recommendations to this list from your follows with information on which of your follows might need the additional relay in your list. Add them if you feel like you are missing their posts or if it is just taking too long to load them.
My setup
Here's what I use: 1. Go to relay.tools and create a relay for yourself. 2. Go to nostr.wine and pay for their subscription. 3. Go to inbox.nostr.wine and pay for their subscription. 4. Go to nostr.watch and find a good relay in your country. 5. Download Citrine to your phone.
Then, on your relay lists, put:
Public Home/Outbox Relays: - nostr.wine - nos.lol or an in-country relay. -
.nostr1.com Public Inbox Relays - nos.lol or an in-country relay -
.nostr1.com DM Inbox Relays - inbox.nostr.wine -
.nostr1.com Private Home Relays - ws://localhost:4869 (Citrine) -
.nostr1.com (if you want) Search Relays - nostr.wine - relay.nostr.band - relay.noswhere.com
Local Relays - ws://localhost:4869 (Citrine)
General Relays - nos.lol - relay.damus.io - relay.primal.net - nostr.mom
And a few of the recommended relays from Amethyst.
Final Considerations
Remember, relays can see what your Nostr client is requesting and downloading at all times. They can track what you see and see what you like. They can sell that information to the highest bidder, they can delete your content or content that a sponsor asked them to delete (like a negative review for instance) and they can censor you in any way they see fit. Before using any random free relay out there, make sure you trust its operator and you know its terms of service and privacy policies.
-
@ 6a3d3f20:6a569bcc
2025-02-23 08:50:19Imagina un internet donde tú tienes el control, donde nadie puede silenciarte y donde las conexiones entre personas fluyen sin barreras corporativas. Esto no es un sueño lejano, ¡es la realidad que está tomando forma gracias a Nostr! Este protocolo descentralizado, nacido en 2020 de la mente ingeniosa de un desarrollador brasileño conocido como fiatjaf, ha surgido como una respuesta vibrante a los desafíos del internet actual. En un mundo donde las redes sociales centralizadas han comenzado a tambalearse bajo el peso de la censura, la privacidad comprometida y el control excesivo, Nostr llega como un soplo de aire fresco, prometiendo devolvernos el poder sobre nuestra voz y nuestros datos.
Cómo surge Nostr
El nacimiento de Nostr no fue un accidente, sino una reacción a un panorama digital que pedía a gritos un cambio. Hacia finales de la década de 2010, plataformas como Twitter enfrentaban crecientes críticas por sus políticas de moderación, dejando a muchos usuarios frustrados y silenciados. Al mismo tiempo, alternativas como Mastodon o ActivityPub, aunque descentralizadas, no terminaban de cuajar para todos debido a su complejidad técnica o diferencias culturales. Fue en este caldo de cultivo donde fiatjaf, inspirado por la resistencia de Bitcoin y su criptografía de clave pública, lanzó Nostr en noviembre de 2020. Pero el verdadero punto de inflexión llegó en diciembre de 2022, cuando Jack Dorsey, cofundador de Twitter, donó 14 bitcoins (unos 250,000 dólares) al proyecto. ¡Ese fue el momento en que Nostr pasó de ser un secreto de la comunidad web3 a brillar en el radar global!
Una evolución que no para de sorprendernos
Desde sus humildes comienzos, Nostr ha crecido a pasos agigantados. Su diseño es simple pero poderoso: "Notes and Other Stuff Transmitted by Relays" (Notas y otras cosas transmitidas por relevadores) usa servidores ligeros llamados relays para distribuir mensajes firmados criptográficamente por los usuarios. ¿Lo mejor? No depende de un servidor central, lo que lo hace prácticamente ++imposible de censurar++. En sus primeros años, era un terreno experimental, con aplicaciones como Damus (un cliente tipo Twitter) abriendo camino. Hoy, en 2025, la escena es vibrante: desde Primal 2.0, con búsquedas avanzadas y feeds personalizados, hasta integraciones con la Lightning Network de Bitcoin, que permite "zaps" (micropagos) para apoyar a creadores. Los desarrolladores no paran de innovar, creando desde marketplaces descentralizados hasta sistemas de identidad, demostrando que Nostr es mucho más que una red social: ¡es una base para reinventar el internet!
La importancia de Nostr hoy y mañana
¿Por qué Nostr importa tanto ahora? Porque está devolviendo la soberanía a los usuarios en un momento en que la privacidad y la libertad en línea están bajo asedio. Con cada relay que se suma y cada cliente que aparece, Nostr construye una red resistente donde las grandes tecnológicas no dictan las reglas. Su integración con Bitcoin está creando una economía circular emocionante: imagina ganar sats (fracciones de bitcoin) por tus publicaciones o apoyar directamente a tus creadores favoritos sin intermediarios. En febrero de 2025, ya vemos comunidades activas, desde entusiastas de la tecnología hasta artistas, floreciendo en este ecosistema abierto.
De cara al futuro, Nostr tiene el potencial de ser un pilar del internet que siempre quisimos: descentralizado, transparente y al servicio de las personas. No solo compite con las redes sociales tradicionales, sino que las supera al ofrecer un lienzo en blanco para que cualquiera construya lo que imagine, desde plataformas de comunicación hasta soluciones IoT o mercados globales. Su simplicidad invita a miles de desarrolladores a sumarse, y su resistencia a la censura asegura que las voces marginadas siempre tengan un lugar. Si Bitcoin nos dio libertad financiera, Nostr nos está dando libertad digital, y juntos podrían ser la dupla que transforme cómo interactuamos en línea. []()
Un gran futuro nos espera
Nostr no es solo un protocolo; es un movimiento, una chispa de optimismo en un mundo digital que a veces parece gris. Cada vez que alguien se une, configura un relay o prueba una nueva app, estamos dando un paso hacia un internet más justo y emocionante. Así que, ¿qué esperas? Nostr no es el futuro lejano, ¡es el presente vibrante que está creciendo hoy! Únete, experimenta y sé parte de esta revolución que está poniendo el poder de internet de vuelta en nuestras manos. ¡El mañana digital nunca lució tan prometedor!
-
@ 97c70a44:ad98e322
2025-02-17 14:29:00Everyone knows that relays are central to how nostr works - they're even in the name: Notes and Other Stuff Transmitted by Relays. As time goes on though, there are three other letters which are becoming conspicuously absent from our beloved and ambiguously pronounceable acronym - "D", "V", and "M".
For the uninitiated, DVM stands for "data vending machines". They're actually sort of hard to describe — in technical terms they act more like clients, since they simply read events from and publish events to relays. In most cases though, these events are part of a request/response flow initiated by users elsewhere on the network. In practice, DVMs are bots, but there's also nothing to prevent the work they do from being powered by human interaction. They're an amazingly flexible tool for building anything from custom feeds, to transcription services, to chatbots, to protocol gateways.
The hype cycle for DVMs seems to have reached escape velocity in a way few other things have - zaps being the possible exception. But what exactly DVMs are remains something of a mystery to many nostr developers - and how to build one may as well be written on clay tablets.
This blog post is designed to address that - below is a soup to nuts (no nutzaps though) guide to building a DVM flow, both from the client and the server side.
Here's what we'll be covering:
- Discovering DVM metadata
- Basic request/response flow
- Implementing a minimal example
Let's get started!
DVM Metadata
First of all, it's helpful to know how DVMs are reified on the nostr network. While not strictly necessary, this can be useful for discovering DVMs and presenting them to users, and for targeting specific DVMs we want a response from.
NIP 89 goes into this in more detail, but the basic idea is that anyone can create a
kind 31990
"application handler" event and publish it to the network with their own (or a dedicated) public key. This handler was originally intended to advertise clients, but has been re-purposed for DVM listings as well.Here's what the "Fluffy Frens" handler looks like:
json { "content": "{\"name\": \"Fluffy Frens\", \"picture\": \"https://image.nostr.build/f609311532c470f663e129510a76c9a1912ae9bc4aaaf058e5ba21cfb512c88e.jpg\", \"about\": \"I show recent notes about animals\", \"lud16\": \"discovery_content_fluffy@nostrdvm.com\", \"supportsEncryption\": true, \"acceptsNutZaps\": false, \"personalized\": false, \"amount\": \"free\", \"nip90Params\": {\"max_results\": {\"required\": false, \"values\": [], \"description\": \"The number of maximum results to return (default currently 100)\"}}}", "created_at": 1738874694, "id": "0aa8d1f19cfe17e00ce55ca86fea487c83be39a1813601f56f869abdfa776b3c", "kind": 31990, "pubkey": "7b7373dd58554ff4c0d28b401b9eae114bd92e30d872ae843b9a217375d66f9d", "sig": "22403a7996147da607cf215994ab3b893176e5302a44a245e9c0d91214e4c56fae40d2239dce58ea724114591e8f95caed2ba1a231d09a6cd06c9f0980e1abd5", "tags": [ ["k", "5300"], ["d", "198650843898570c"] ] }
This event is rendered in various clients using the kind-0-style metadata contained in the
content
field, allowing users to browse DVMs and pick one for their use case. If a user likes using a particular DVM, they might publish akind 31989
"application recommendation", which other users can use to find DVMs that are in use within their network.Note the
k
tag in the handler event - this allows DVMs to advertise support only for specific job types. It's also important to note that even though the spec doesn't cover relay selection, most clients use the publisher'skind 10002
event to find out where the DVM listens for events.If this looks messy to you, you're right. See this PR for a proposal to split DVMs out into their own handler kind, give them a dedicated pubkey along with dedicated metadata and relay selections, and clean up the data model a bit.
DVM Flow
Now that we know what a DVM looks like, we can start to address how they work. My explanation below will elide some of the detail involved in NIP 90 for simplicity, so I encourage you to read the complete spec.
The basic DVM flow can be a little (very) confusing to work with, because in essence it's a request/response paradigm, but it has some additional wrinkles.
First of all, the broker for the request isn't abstracted away as is usually the case with request/response flows. Regular HTTP requests involve all kinds of work in the background - from resolving domain names to traversing routers, VPNs, and ISP infrastructure. But developers don't generally have to care about all these intermediaries.
With DVMs, on the other hand, the essential complexity of relay selection can't simply be ignored. DVMs often advertise their own relay selections, which should be used rather than a hard-coded or randomly chosen relay to ensure messages are delivered. The benefit of this is that DVMs can avoid censorship, just as users can, by choosing relays that are willing to broker their activity. DVMs can even select multiple relays to broker requests, which means that clients might receive multiple copies of the same response.
Secondly, the DVM request/response model is far more fluid than is usually the case with request/response flows. There are a set of standard practices, but the flow is flexible enough to admit exceptions to these conventions for special use cases. Here are some examples:
- Normally, clients p-tag the DVM they wish to address. But if a client isn't picky about where a response comes from, they may choose to send an open request to the network and collect responses from multiple DVMs simultaneously.
- Normally, a client creates a request before collecting responses using a subscription with an e-tag filter matching the request event. But clients may choose to skip the request step entirely and collect responses from the network that have already been created. This can be useful for computationally intensive tasks or common queries, where a single result can be re-used multiple times.
- Sometimes, a DVM may respond with a
kind 7000
job status event to let clients know they're working on the request. This is particularly useful for longer-running tasks, where feedback is useful for building a responsive UX. - There are also some details in the spec regarding monetization, parameterization, error codes, encryption, etc.
Example DVM implementation
For the purposes of this blog post, I'll keep things simple by illustrating the most common kind of DVM flow: a
kind 5300
content discovery request, addressed to a particular DVM. If you're interested in other use cases, please visit data-vending-machines.org for additional documented kinds.The basic flow looks like this:
- The DVM starts by listening for
kind 5300
job requests on some relays it has selected and advertised via NIP 89 (more on that later) - A client creates a request event of
kind 5300
, p-tagged with the DVM's pubkey and sends it to the DVM's relay selections. - The DVM receives the event and processes it, issuing optional
kind 7000
job status events, and eventually issuing akind 6300
job result event (job result event kinds are always 1000 greater than the request's kind). - The client listens to the same relays for a response, and when it comes through does whatever it wants to with it.
Here's a swimlane diagram of that flow:
To avoid massive code samples, I'm going to implement our DVM entirely using nak (backed by the power of the human mind).
The first step is to start our DVM listening for requests that it wants to respond to. Nak's default pubkey is
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
, so we'll only listen for requests sent to nak.bash nak req -k 5300 -t p=79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
This gives us the following filter:
json ["REQ","nak",{"kinds":[5300],"#p":["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"]}]
To open a subscription to
nos.lol
and stream job requests, add--stream wss://nos.lol
to the previous request and leave it running.Next, open a new terminal window for our "client" and create a job request. In this case, there's nothing we need to provide as
input
, but we'll include it just for illustration. It's also good practice to include anexpiration
tag so we're not asking relays to keep our ephemeral requests forever.bash nak event -k 5300 -t p=79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 -t expiration=$(( $(date +%s) + 30 )) -t input=hello
Here's what comes out:
json { "kind": 5300, "id": "0e419d0b3c5d29f86d2132a38ca29cdfb81a246e1a649cb2fe1b9ed6144ebe30", "pubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", "created_at": 1739407684, "tags": [ ["p", "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"], ["expiration", "1739407683"], ["input", "hello"] ], "content": "", "sig": "560807548a75779a7a68c0ea73c6f097583e2807f4bb286c39931e99a4e377c0a64af664fa90f43e01ddd1de2e9405acd4e268f1bf3bc66f0ed5a866ea093966" }
Now go ahead and publish this event by adding
nos.lol
to the end of yournak
command. If all goes well, you should see your event pop up in your "dvm" subscription. If so, great! That's half of the flow.Next, we'll want our client to start listening for
kind 6300
responses to the request. In your "client" terminal window, run:bash nak req -k 6300 -t e=<your-eventid-here> --stream nos.lol
Note that if you only want to accept responses from the specified DVM (a good policy in general to avoid spam) you would include a
p
tag here. I've omitted it for brevity. Also notice thek
tag specifies the request kind plus1000
- this is just a convention for what kinds requests and responses use.Now, according to data-vending-machines.org,
kind 5300
responses are supposed to put a JSON-encoded list of e-tags in thecontent
field of the response. Weird, but ok. Stop the subscription in your "dvm" terminal and respond to your "client" with a recommendation to read my first note:bash nak event -k 6300 -t e=a65665a3a4ca2c0d7b7582f4f0d073cd1c83741c25a07e98d49a43e46d258caf -c '[["e","214f5898a7b75b7f95d9e990b706758ea525fe86db54c1a28a0f418c357f9b08","wss://nos.lol/"]]' nos.lol
Here's the response event we're sending:
json { "kind": 6300, "id": "bb5f38920cbca15d3c79021f7d0051e82337254a84c56e0f4182578e4025232e", "pubkey": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798", "created_at": 1739408411, "tags": [ ["e", "a65665a3a4ca2c0d7b7582f4f0d073cd1c83741c25a07e98d49a43e46d258caf"] ], "content": "[[\"e\",\"214f5898a7b75b7f95d9e990b706758ea525fe86db54c1a28a0f418c357f9b08\",\"wss://nos.lol/\"]]", "sig": "a0fe2c3419c5c54cf2a6d9a2a5726b2a5b766d3c9e55d55568140979354003aacb038e90bdead43becf5956faa54e3b60ff18c0ea4d8e7dfdf0c8dd97fb24ff9" }
Notice the
e
tag targets our original request.This should result in the job result event showing up in our "client" terminal. Success!
If something isn't working, I've also create a video of the full process with some commentary which you can find here.
Note that in practice, DVMs can be much more picky about the requests they will respond to, due to implementations failing to follow Postel's law. Hopefully that will improve over time. For now, here are a few resources that are useful when working with or developing DVMs:
Conclusion
I started this post by hinting that DVMs might be as fundamental as relays are to making nostr work. But (apart from the fact that we'd end up with an acronym like DVMNOSTRZ+*, which would only exascerbate the pronounciation wars (if such a thing were possible)), that's not exactly true.
DVMs have emerged as a central paradigm in the nostr world because they're a generalization of a design pattern unique to nostr's architecture - but which exists in many other places, including NIP 46 signer flows and NIP 47 wallet connect. Each of these sub-protocols works by using relays as neutral brokers for requests in order to avoid coupling services to web addresses.
This approach has all kinds of neat benefits, not least of which is allowing service providers to host their software without having to accept incoming TCP connections. But it's really an emergent property of relays, which not only are useful for brokering communication between users (aka storing events), but also brokering communication between machines.
The possibilities of this architecture have only started to emerge, so be on the lookout for new applications, and don't be afraid to experiment - just please, don't serialize json inside json 🤦♂️
-
@ ec42c765:328c0600
2025-02-05 23:45:09test
test
-
@ ec42c765:328c0600
2025-02-05 23:43:35test
-
@ ec42c765:328c0600
2025-02-05 23:38:12カスタム絵文字とは
任意のオリジナル画像を絵文字のように文中に挿入できる機能です。
また、リアクション(Twitterの いいね のような機能)にもカスタム絵文字を使えます。
カスタム絵文字の対応状況(2025/02/06)
カスタム絵文字を使うためにはカスタム絵文字に対応したクライアントを使う必要があります。
※表は一例です。クライアントは他にもたくさんあります。
使っているクライアントが対応していない場合は、クライアントを変更する、対応するまで待つ、開発者に要望を送る(または自分で実装する)などしましょう。
対応クライアント
ここではnostterを使って説明していきます。
準備
カスタム絵文字を使うための準備です。
- Nostrエクステンション(NIP-07)を導入する
- 使いたいカスタム絵文字をリストに登録する
Nostrエクステンション(NIP-07)を導入する
Nostrエクステンションは使いたいカスタム絵文字を登録する時に必要になります。
また、環境(パソコン、iPhone、androidなど)によって導入方法が違います。
Nostrエクステンションを導入する端末は、実際にNostrを閲覧する端末と違っても構いません(リスト登録はPC、Nostr閲覧はiPhoneなど)。
Nostrエクステンション(NIP-07)の導入方法は以下のページを参照してください。
ログイン拡張機能 (NIP-07)を使ってみよう | Welcome to Nostr! ~ Nostrをはじめよう! ~
少し面倒ですが、これを導入しておくとNostr上の様々な場面で役立つのでより快適になります。
使いたいカスタム絵文字をリストに登録する
以下のサイトで行います。
右上のGet startedからNostrエクステンションでログインしてください。
例として以下のカスタム絵文字を導入してみます。
実際より絵文字が少なく表示されることがありますが、古い状態のデータを取得してしまっているためです。その場合はブラウザの更新ボタンを押してください。
- 右側のOptionsからBookmarkを選択
これでカスタム絵文字を使用するためのリストに登録できます。
カスタム絵文字を使用する
例としてブラウザから使えるクライアント nostter から使用してみます。
nostterにNostrエクステンションでログイン、もしくは秘密鍵を入れてログインしてください。
文章中に使用
- 投稿ボタンを押して投稿ウィンドウを表示
- 顔😀のボタンを押し、絵文字ウィンドウを表示
- *タブを押し、カスタム絵文字一覧を表示
- カスタム絵文字を選択
- : 記号に挟まれたアルファベットのショートコードとして挿入される
この状態で投稿するとカスタム絵文字として表示されます。
カスタム絵文字対応クライアントを使っている他ユーザーにもカスタム絵文字として表示されます。
対応していないクライアントの場合、ショートコードのまま表示されます。
ショートコードを直接入力することでカスタム絵文字の候補が表示されるのでそこから選択することもできます。
リアクションに使用
- 任意の投稿の顔😀のボタンを押し、絵文字ウィンドウを表示
- *タブを押し、カスタム絵文字一覧を表示
- カスタム絵文字を選択
カスタム絵文字リアクションを送ることができます。
カスタム絵文字を探す
先述したemojitoからカスタム絵文字を探せます。
例えば任意のユーザーのページ emojito ロクヨウ から探したり、 emojito Browse all からnostr全体で最近作成、更新された絵文字を見たりできます。
また、以下のリンクは日本語圏ユーザーが作ったカスタム絵文字を集めたリストです(2025/02/06)
※漏れがあるかもしれません
各絵文字セットにあるOpen in emojitoのリンクからemojitoに飛び、使用リストに追加できます。
以上です。
次:Nostrのカスタム絵文字の作り方
Yakihonneリンク Nostrのカスタム絵文字の作り方
Nostrリンク nostr:naddr1qqxnzdesxuunzv358ycrgveeqgswcsk8v4qck0deepdtluag3a9rh0jh2d0wh0w9g53qg8a9x2xqvqqrqsqqqa28r5psx3
仕様
-
@ ec42c765:328c0600
2025-02-05 23:16:35てすと
nostr:nevent1qqst3uqlls4yr9vys4dza2sgjle3ly37trck7jgdmtr23uuz52usjrqqqnjgr
nostr:nevent1qqsdvchy5d27zt3z05rr3q6vvmzgslslxwu0p4dfkvxwhmvxldn9djguvagp2
test
てs
-
@ ec42c765:328c0600
2025-02-05 22:05:55カスタム絵文字とは
任意のオリジナル画像を絵文字のように文中に挿入できる機能です。
また、リアクション(Twitterの いいね のような機能)にもカスタム絵文字を使えます。
カスタム絵文字の対応状況(2025/02/06)
カスタム絵文字を使うためにはカスタム絵文字に対応したクライアントを使う必要があります。
※表は一例です。クライアントは他にもたくさんあります。
使っているクライアントが対応していない場合は、クライアントを変更する、対応するまで待つ、開発者に要望を送る(または自分で実装する)などしましょう。
対応クライアント
ここではnostterを使って説明していきます。
準備
カスタム絵文字を使うための準備です。
- Nostrエクステンション(NIP-07)を導入する
- 使いたいカスタム絵文字をリストに登録する
Nostrエクステンション(NIP-07)を導入する
Nostrエクステンションは使いたいカスタム絵文字を登録する時に必要になります。
また、環境(パソコン、iPhone、androidなど)によって導入方法が違います。
Nostrエクステンションを導入する端末は、実際にNostrを閲覧する端末と違っても構いません(リスト登録はPC、Nostr閲覧はiPhoneなど)。
Nostrエクステンション(NIP-07)の導入方法は以下のページを参照してください。
ログイン拡張機能 (NIP-07)を使ってみよう | Welcome to Nostr! ~ Nostrをはじめよう! ~
少し面倒ですが、これを導入しておくとNostr上の様々な場面で役立つのでより快適になります。
使いたいカスタム絵文字をリストに登録する
以下のサイトで行います。
右上のGet startedからNostrエクステンションでログインしてください。
例として以下のカスタム絵文字を導入してみます。
実際より絵文字が少なく表示されることがありますが、古い状態のデータを取得してしまっているためです。その場合はブラウザの更新ボタンを押してください。
- 右側のOptionsからBookmarkを選択
これでカスタム絵文字を使用するためのリストに登録できます。
カスタム絵文字を使用する
例としてブラウザから使えるクライアント nostter から使用してみます。
nostterにNostrエクステンションでログイン、もしくは秘密鍵を入れてログインしてください。
文章中に使用
- 投稿ボタンを押して投稿ウィンドウを表示
- 顔😀のボタンを押し、絵文字ウィンドウを表示
- *タブを押し、カスタム絵文字一覧を表示
- カスタム絵文字を選択
- : 記号に挟まれたアルファベットのショートコードとして挿入される
この状態で投稿するとカスタム絵文字として表示されます。
カスタム絵文字対応クライアントを使っている他ユーザーにもカスタム絵文字として表示されます。
対応していないクライアントの場合、ショートコードのまま表示されます。
ショートコードを直接入力することでカスタム絵文字の候補が表示されるのでそこから選択することもできます。
リアクションに使用
- 任意の投稿の顔😀のボタンを押し、絵文字ウィンドウを表示
- *タブを押し、カスタム絵文字一覧を表示
- カスタム絵文字を選択
カスタム絵文字リアクションを送ることができます。
カスタム絵文字を探す
先述したemojitoからカスタム絵文字を探せます。
例えば任意のユーザーのページ emojito ロクヨウ から探したり、 emojito Browse all からnostr全体で最近作成、更新された絵文字を見たりできます。
また、以下のリンクは日本語圏ユーザーが作ったカスタム絵文字を集めたリストです(2025/02/06)
※漏れがあるかもしれません
各絵文字セットにあるOpen in emojitoのリンクからemojitoに飛び、使用リストに追加できます。
以上です。
次:Nostrのカスタム絵文字の作り方
Yakihonneリンク Nostrのカスタム絵文字の作り方
Nostrリンク nostr:naddr1qqxnzdesxuunzv358ycrgveeqgswcsk8v4qck0deepdtluag3a9rh0jh2d0wh0w9g53qg8a9x2xqvqqrqsqqqa28r5psx3
仕様
-
@ ec42c765:328c0600
2025-02-05 20:30:46カスタム絵文字とは
任意のオリジナル画像を絵文字のように文中に挿入できる機能です。
また、リアクション(Twitterの いいね のような機能)にもカスタム絵文字を使えます。
カスタム絵文字の対応状況(2024/02/05)
カスタム絵文字を使うためにはカスタム絵文字に対応したクライアントを使う必要があります。
※表は一例です。クライアントは他にもたくさんあります。
使っているクライアントが対応していない場合は、クライアントを変更する、対応するまで待つ、開発者に要望を送る(または自分で実装する)などしましょう。
対応クライアント
ここではnostterを使って説明していきます。
準備
カスタム絵文字を使うための準備です。
- Nostrエクステンション(NIP-07)を導入する
- 使いたいカスタム絵文字をリストに登録する
Nostrエクステンション(NIP-07)を導入する
Nostrエクステンションは使いたいカスタム絵文字を登録する時に必要になります。
また、環境(パソコン、iPhone、androidなど)によって導入方法が違います。
Nostrエクステンションを導入する端末は、実際にNostrを閲覧する端末と違っても構いません(リスト登録はPC、Nostr閲覧はiPhoneなど)。
Nostrエクステンション(NIP-07)の導入方法は以下のページを参照してください。
ログイン拡張機能 (NIP-07)を使ってみよう | Welcome to Nostr! ~ Nostrをはじめよう! ~
少し面倒ですが、これを導入しておくとNostr上の様々な場面で役立つのでより快適になります。
使いたいカスタム絵文字をリストに登録する
以下のサイトで行います。
右上のGet startedからNostrエクステンションでログインしてください。
例として以下のカスタム絵文字を導入してみます。
実際より絵文字が少なく表示されることがありますが、古い状態のデータを取得してしまっているためです。その場合はブラウザの更新ボタンを押してください。
- 右側のOptionsからBookmarkを選択
これでカスタム絵文字を使用するためのリストに登録できます。
カスタム絵文字を使用する
例としてブラウザから使えるクライアント nostter から使用してみます。
nostterにNostrエクステンションでログイン、もしくは秘密鍵を入れてログインしてください。
文章中に使用
- 投稿ボタンを押して投稿ウィンドウを表示
- 顔😀のボタンを押し、絵文字ウィンドウを表示
- *タブを押し、カスタム絵文字一覧を表示
- カスタム絵文字を選択
- : 記号に挟まれたアルファベットのショートコードとして挿入される
この状態で投稿するとカスタム絵文字として表示されます。
カスタム絵文字対応クライアントを使っている他ユーザーにもカスタム絵文字として表示されます。
対応していないクライアントの場合、ショートコードのまま表示されます。
ショートコードを直接入力することでカスタム絵文字の候補が表示されるのでそこから選択することもできます。
リアクションに使用
- 任意の投稿の顔😀のボタンを押し、絵文字ウィンドウを表示
- *タブを押し、カスタム絵文字一覧を表示
- カスタム絵文字を選択
カスタム絵文字リアクションを送ることができます。
カスタム絵文字を探す
先述したemojitoからカスタム絵文字を探せます。
例えば任意のユーザーのページ emojito ロクヨウ から探したり、 emojito Browse all からnostr全体で最近作成、更新された絵文字を見たりできます。
また、以下のリンクは日本語圏ユーザーが作ったカスタム絵文字を集めたリストです(2024/06/30)
※漏れがあるかもしれません
各絵文字セットにあるOpen in emojitoのリンクからemojitoに飛び、使用リストに追加できます。
以上です。
次:Nostrのカスタム絵文字の作り方
Yakihonneリンク Nostrのカスタム絵文字の作り方
Nostrリンク nostr:naddr1qqxnzdesxuunzv358ycrgveeqgswcsk8v4qck0deepdtluag3a9rh0jh2d0wh0w9g53qg8a9x2xqvqqrqsqqqa28r5psx3
仕様
-
@ 83279ad2:bd49240d
2025-01-24 09:15:37備忘録として書きます。意外と時間がかかりました。全体で1時間くらいかかるので気長にやりましょう。 仮想通貨取引所(販売所ではないので、玄人が使えばお得らしい)かつBitcoinの送金手数料が無料(全ての取引所が無料ではない、例えばbitbankは0.0006bitcoinかかる)なので送金元はGMOコインを使います。(注意:GMOコインは0.02ビットコイン以下は全額送金になってしまいます) 今回はカストディアルウォレットのWallet of Satoshiに送金します。 以下手順 1. GMOコインでbitcoinを買います。 2. GMOコインの左のタブから入出金 暗号資産を選択します。 3. 送付のタブを開いて、+新しい宛先を追加するを選択します。 4. 送付先:GMOコイン以外、送付先ウォレット:プライベートウォレット(MetaMaskなど)、受取人:ご本人さま を選んで宛先情報の登録を選ぶと次の画面になります。
5. 宛先名称にwallet of satoshi(これはなんでも良いです わかりやすい名称にしましょう) wallet of satoshiを開いて、受信→Bitcoin On-Chainからアドレスをコピーして、ビットコインアドレスに貼り付けます。
6. 登録するを押します。これで送金先の登録ができました。GMOコインの審査がありますがすぐ終わると思います。 7. ここから送金をします。送付のタブから登録したビットコインの宛先リストwallet of satoshiを選択し、送付数量と送付目的を選択して、2段階認証をします。
8. 実行を押せば終わりです。もうあなたがやることはありません。送金が終わるのを40分くらい眺めるだけです。
8. 取引履歴のタブから今の送金のステータスが見れます。
9. 15分くらい待つとステータスが受付に変わります。
10. 20分くらい待つとトランザクションIDが表示されます。
この時点からwallet of satoshiにも送金されていることが表示されます。(まだ完了はしていない)
11. ステータスが完了になったら送金終わりです。
wallet of satoshiにも反映されます。
お疲れ様でした!
-
@ 21ac2956:09d1e2df
2025-01-22 15:27:00kakoi の仕様についてのメモ
キーボード操作
- 左手での操作に最適化
| キー | 動作 | |:-|:-| | ESC | 設定画面 | | F1 / F12 | ポストバーの表示と非表示 | | F2 | 時間の表示と非表示 | | F3 | ユーザーアイコンの表示と非表示 | | F4 | 名前の表示と非表示 | | F5 | Geminiによるタイムラインまとめ画面を表示 | | F9 / Z | コンテンツの折り返し表示の切り替え (余白ダブルクリックでも動作) | | F10 | ユーザーリストとキーワード通知の設定画面 (余白右クリックでも動作) | | F11 | メイン画面の表示と非表示 (ポストバー表示) | | Shift + W | イベント最上行へ移動 | | W / ↑| イベント選択上移動 | | S / ↓ | イベント選択下移動 | | Shift + S | イベント最下行へ移動 | | A / ← | Webビューを開く (イベントを右クリックでも動作) | | F / → | リアクションを送信 (イベントをダブルクリックでも動作) | | 1 ~ 0 | リアクションを選択 | | R | 返信 | | B | リポスト | | Q | 引用 | | C | Webビューを閉じる | | Ctrl + Shift + A | メイン画面をアクティブにする |
タイムライン
- kind:1, 6, 7, 16を取得して表示する
- フォロイーの名前の前には * が付く
フォローリスト(kind:3)
-
参照のみで更新はしない
-
F10 で開くユーザーリストでユーザーを選択し petname セルをクリックすることで未フォローユーザーにもペットネームを設定可能(ローカル保存)
プロフィール(kind:0)
- F10 で開くユーザーリストでユーザーを選択し picture セルをクリックすることでユーザーのアイコン表示を変更可能(ローカル保存)
返信(NIP-10 kind:1)
- kakoi のタイムラインに流れるすべてのイベント種に返信可能とする
- スレッドを考慮せず、単一イベントへの単発返信とする
- e タグは marker と返信先 pubkey は設定していない。 relay-url には空文字を設定
json ["e", "返信先 event-id", ""]
- p タグは 返信先 pubkey ひとつだけを指定
リポスト(NIP-18 kind:6 , 16)
- kakoi のタイムラインに流れるすべてのイベント種をリポスト可能
- kind:1はkind:6。その他はkind:16でリポストする
- e タグは relay-url に空文字を設定
json ["e", "リポスト元 event-id", ""]
引用(NIP-18 kind:1)
- q タグは relay-url に空文字を設定
json ["q", "引用元 event-id", ""]
-
@ e3168078:10f13b2c
2025-01-21 15:44:45ノス!
最近Umbrel上のn8nを使ってstacker newsの記事を要約するNostr botを作ってみました。
その際にFirecrawlというスクレイピングのSaaSを使っていたんですがセルフホストできるようなので試してみました。
Firecrawlは動的なページも読めたりマークダウンへの変換をしてくれますが無料プランだと1ヶ月500ページの制限があり、セルフホストすれば気兼ねなく使えます!
今回はUmbrel上のPortainerというアプリを使ってFirecrawlを動かせたのでその記録です。手順
まずはUmbrelにPortainerアプリをインストールします。 Poratinerは今回初めて使ったんですが独自のDockerコンテナをUmbrelで動かす際に推奨されているアプリのようです。
アプリを開いてパスワードの初期設定などを済ませるとダッシュボードが表示されるかと思います。 ここでStackという機能を使ってFirecrawlのDocker composeを一括で取り込むことができます。
新しいStackを作成する画面で以下を入力します。
Repository URL: https://github.com/mendableai/firecrawl
Repository reference: refs/heads/main
Compose path: docker-compose.yaml (デフォルトがymlになっててハマりました…)上記に加えてenv varを設定する必要があるんですがPortainerでは上記の画像下部にあるように "Load Variables from .env file" からenvファイルを選択できます。 Firecrawlのgithubにあるように apps/api/.env.example をダウンロードし以下の内容を更新しPortainerに取り込ませます。
USE_DB_AUTHENTICATION=false TEST_API_KEY=fc-test-key
あとはDeploy the stackを押して少し待つとfirecrawlのセットアップ完了です。
確認
動作テストにはUmbrelの設定からAdvanced Settings -> Terminal -> Umbrel OSを開き以下のコマンドを実行ししマークダウンが返って来れば成功です。
$ curl -X POST http://localhost:3002/v1/scrape -H 'Authorization: Bearer fc-test-key' -H 'Content-Type: application/json' -d '{ "url": "https://example.com", "formats": ["markdown"] }' {"success":true,"data":{"markdown":"Example Domain\n==============\n\nThis domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.\n\n[More information...](https://www.iana.org/domains/example)","metadata":{"title":"Example Domain","ogLocaleAlternate":[],"scrapeId":"7c196348-6561-4ebb-bb8a-9121a29c64b5","viewport":"width=device-width, initial-scale=1","sourceURL":"https://example.com","url":"https://example.com/","statusCode":200}}}
またn8n等のUmbrelの他のアプリ(コンテナ)から利用する場合はlocalhostがコンテナ自身になってしまうので別のIP等(172.17.0.1)を使う必要があるのでご注意ください。 (参考)
以上でUmbrel上でのFirecrawlセルフホストができるようになりn8nからも制限なく使えるようになりました。
-
@ 58937958:545e6994
2025-01-13 03:31:48I made croquettes inspired by Spiral's character "Bitcoin (Puppet)."
The method is the same as making regular croquettes. I also tried making a version (right) with the arms and legs attached while shaping the filling, but they fell off before I could coat them in flour.
The face is made with seaweed and sliced cheese. The arms and legs are made with fish cake (hanpen). I brushed soy sauce on the legs and lightly toasted them in a toaster, which gave them a brown color.
The arms and legs are attached using thin spaghetti. When I searched for character-themed bentos (kyaraben), I came across the idea of using dried pasta, which made sense. I used fried spaghetti sticks for attachment.
Here’s Bitcoin Croquette squished into a bento box:
Halving
Notes
- I tried freezing the filling to help it hold its shape, but it backfired. It stuck to the plate and the cooking paper, and once partially thawed, it became way too watery. Freezing might work with better preparation.
- The filling was quite dry when shaping, so it might be better to add a binder (this time, I only used potatoes and sautéed onions).
The shape of Bitcoin Puppet was really easy and fun to make, so I’d love to try creating something else next time!
nostr:nevent1qqsxgpjvf9g9suhzx5asqhvnlvnarl43kuhas8v5g2ryjr9yjjp0z5ctkh5pt
-
@ 58937958:545e6994
2025-01-13 03:19:17Spiralのキャラクター「ビットコイン(パペット)」のコロッケを作りました
作り方は一般的なコロッケです 試しにタネの状態で手足をくっつけたバージョン(右)も作りましたが 粉をつける前に手足がもげました
顔はのりとスライスチーズ 手足ははんぺんです 足は醤油をつけてトースターで軽く焼いたら茶色になりました
手足はサラスパでくっつけてます 細いスパゲッティ キャラ弁でググったらサラスパが出てきてなるほどな~と思いました 自分は揚げパスタにして刺しました
弁当箱に押し込まれてるコロッケくん
半減期
メモ
- タネを作った時に形を保たせるために冷凍してみたんですけど逆効果だった(皿とクッキングペーパーにくっついて取れなくなった&半解凍したら水分がすごいことになった)ので冷凍するなら対策が必要そう
- 形作るときにかなりパサパサだったので、つなぎがあった方がいいのかも(今回はじゃがいも&炒めタマネギだけ)
ビットコインくんの形はすごく作りやすくて面白いのでまた何か作りたいなぁと思いました
nostr:nevent1qqsxgpjvf9g9suhzx5asqhvnlvnarl43kuhas8v5g2ryjr9yjjp0z5ctkh5pt
-
@ 84b0c46a:417782f5
2025-01-11 01:48:46nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qqs0df2mwnp2q6hm6zjrthkmx3fudwsuwrmgnwrdavpzgjy8nnuqm5cqpd06k
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qqs2muhvnev5367ywuzkhell9my86jlnzhsnuszwl46tnc3fpsx9mtgjkqnu7
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qqsznnkrl8qdwzgp7ry2hc7a77kwhg440gv9xtmvyfawggrpz3rhwvcx4rckf
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qqsyjf80k3djt96qncgvwl2yem09fdqcc0y9l8t657yc9qg2yhmg7kcnua8vn
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qqs0s3lp0w0yclk64j0tpc5fvrulv78g2lfjz3gcgacw9mt6czek26qtqxuck
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qywhwumn8ghj7mn0wd68ytnrdakhq6tvv5kk2unjdaezumn9wsqs6amnwvaz7tmev9382tndv5qjqamnwvaz7tmjv4kxz7fddfczumn0wd68ytnhd9ex2erwv46zu6nsqqs89tst72clc60wse3zq4qfs0976y7areffnhx26atvu6pv58hg6dsxvcc79
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qyxhwumn8ghj77tpvf6jumt9qys8wumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5uqpr3mhxue69uhhxun5wfjkccte9e3j6um5v4kxcctj9ehx2aqqyp5k40r3ug02yz5y0tn67tm2lwevuwac54qyw3yyct8n8uzr7pjz2q92pyt
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qyxhwumn8ghj77tpvf6jumt9qys8wumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5uqqyp9pennjwq2qk4dxpr440wxqm5cfwah4qccd8la62hantxdelkk82ty9mr8
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qyxhwumn8ghj77tpvf6jumt9qqsz9w30kxzjshwd8sq7jg2hsy2hwqg3zu7gyvxnsyrgfw0ur4rkhsg9v0re4
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qyxhwumn8ghj77tpvf6jumt9qqs8wkx2r8txt9q69c3zvpqs2em2s40nc8tajmcc5l8ngxn8v2ng3sc43xvzu
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qyxhwumn8ghj77tpvf6jumt9qys8wumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5uqqyzdkacpjqvv2y79zgvufx9jh39rd7xa8v056rgn4xelmnmrq9u2tuguswek
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qy2hwumn8ghj7mn0wd68ytnyv96xztngv96hxqpqmdtjrs38fv8r20deplrlt8fma54gu43keuzquzks7673a27ud58slunr8y
nostr:nevent1qvzqqqqqqypzpp9sc34tdxdvxh4jeg5xgu9ctcypmvsg0n00vwfjydkrjaqh0qh4qyxhwumn8ghj77tpvf6jumt9qys8wumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5uqpr4mhxue69uhkummnw3ezucm0d4cxjmr994jhyun0wghxuet5qqsxzpx2r5hd36pruzn2e58wh947y2t0t205fp5xtstqp5wq0qgcjuq07rqlk
-
@ 78b3c1ed:5033eea9
2025-01-10 12:31:01※ライトニングノード保有者向け
Alby Hubをインストールした時なんもわからずポチポチしているとMegatlith LSPノードからインバウンドを購入してチャネルを開くことになります。2万sats(2024/12/4 午後7時時点で三千円ほど)かかります。
そこで誰もが思うに違いない 「高いなぁ。だれかタダで無料で私のHubにチャネル開いてくれないかなぁ...」
その願望をかなえる献身的なノードランナー(笑)がAlby Hubへチャネルを開いてあげるための手順書みたいなものがこの記事です。 ~~ppmをうんと高くしてぼったくってやりましょう!~~
※AlbyHubにオンチェーン資金が無くてもLNDから開く方法を発見しました。末尾に追記しました。
《これはアンカーアウトプットを利用するタイプのチャネル》 条件 ・チャネルを開く側 Clearnet IPアドレスで着信可能であること。Torノードは不可。ノードURIを公開していなくても良い。AlbyHubでピア登録できるClearnet IPアドレスと着信ポートがあればOK。
・開いてもらうAlby Hub側 オンチェーン資金25,000sats以上をデポジットしておく。ないと開けません。
手順
-
[Alby Hub側] オンチェーン資金をデポジット Hubログイン後の左メニューからNodeを選択。Saving BalanceのDepositを選択。するとbc1qではじまるオンチェーンアドレスが表示される。ここへ送金してオンチェーンをデポジットしておく。
-
[Alby Hub側] 開く側のノードをピア登録 左メニューからNodeを選択。右上のAdvancedからConnected Peersを選択。 右上のConnect Peerを選択。欄にノードURI (ノードID@IPアドレス:着信ポート番号)を入力してConnect。
-
[開く側ノード] AlbyHubを確認、チャネルを開く ThunderhubやRide-The-Lightningなどを使い、Alby Hubのノードが表示されていることを確認。Hubにエイリアスは無いのでノードIDで表示される。 このノードに対してチャネルを開く。Private channelが望ましいと思われる。 6conf後に開設完了。
終わり!
メモ
- Alby Hubではbase feeは設定可能だがrateが設定できない。そもそもAlby Hubはルーティング向けノードとして設計されてない。セルフカストディアルウォレットです。
- public channelだとchannel_update, channel_announcementがゴシップされるまでHubへ送金できない(no route)。上記の通りウォレットとしてのノードならprivate channelだけにしてルートヒント付きインボイスが発行できるようにしとくのが望ましい。
- LDKにおいて相手からチャネルを開いてもらう場合にオンチェーン資金が必要。相手がチャネルリザーブ無しのチャネルでもOKなら不要。現にメガリスLSPからチャネルを開いてもらう時オンチェーン資金が0satsでも開けているのがその実例。
- オンチェーン資金が必要なのはチャネルタイプがanchorの場合。オンチェーン資金でアンカーアウトプットをCPFPするためみたい。anchorが登場する前のstatic-remotekeyのタイプならオンチェーン資金は不要。
<ここからが追加>
《これはアンカーアウトプットを利用しないタイプのチャネル》 LNDからチャネルを開くときにstatic remote keyを利用するタイプを指定します。
条件 ・チャネルを開く側 ※上記と同様。
・開いてもらうAlby Hub側 無し。 手順 1. [Alby Hub側] 開く側のノードをピア登録 左メニューからNodeを選択。右上のAdvancedからConnected Peersを選択。右上のConnect Peerを選択。欄にノードURI (ノードID@IPアドレス:着信ポート番号)を入力してConnect。 2. [開く側ノード] AlbyHubを確認、チャネルを開く SSHログイン、UmbrelならLightningのターミナルで以下のコマンドを実行します。
<ノードID>は開きたいAlbyHubのノードIDで置き換えてください。 <チャネルサイズ>は開きたいチャネルの金額、例えば20万satsなら200000としましょう。 <手数料率>はチャネル開設のトランザクションに掛ける手数料率です。mempool. spaceなどで手数料水準を確認して指定しましょう。 --channel_type tweaklessがキモです。デフォルトだとanchorになります。RTLやTHで開くとこのanchorになります。なのでlncli openchannelでやります。
lncli openchannel --node_key <ノードID> \ --local_amt <チャネルサイズ> \ --sat_per_vbyte <手数料率> \ --private --channel_type tweakless
終わり!
-
-
@ dffd3ffc:5ade7be1
2025-01-04 12:58:17Nostr 利用開始から 1 年を迎えて
はじめに
みなさんこんにちは。おっぱぴぃです。
ハッカーのおもちゃとしての Nostr のススメ と Nostr の面白さをエンジニア目線で解説してみるをみて Nostr にはじめて投稿をしたのが 2024/01/04 09:04:18 でした。
nostr:nevent1qqsd5v80f9zazxd4kq2r2dls5znd40ht6c7cj4slt6wtlv483vkmxdcjvq66c
Nostr で私が 1 年間をどう過ごしてきたか、振り返ってみようと思います。
初投稿日
今見たら 10 リポスト、20 そこそこのリアクションをいただいてたんですね。初投稿というだけでこんなおバズリあそばすことあるんだって思いました。~~みんな年始で暇やったんかな~~
これだけリアクションがあって、フォローもしていただいたおかげで Nostr の印象がよくなったこと、日本人話者にすぐたどり着けてことが Nostr を続けられている要因になっていると思います。あとはエアリプ文化が懐かしい&近すぎず遠すぎずで居心地がよくて沼ったところがあると思います。
その日はNostr の Scrapbox(現 Cosense)をその日中にざっと読み漁って、記事の誤字修正したり、WoS を設定してみたり、Lightning Address を設定したりしていたようです。
nostr:nevent1qqsxml4ak7g3u8gjcyuhy89sd8vlk3fu6we9ecgey69jltd42dr0etcvt0l3w
~~おまえ、このころから大欲情を…~~
のす会でのオン会(?)
Nostr 日本人ユーザーの集まる Discord サーバとして、「のす会」というものがあります。 過去ログを漁ってるとどうやら 2024/01/15 ごろにボイチャに入りはじめ、
nostr:nevent1qqszm0kv7aulxnmxr2fdxg5cvme7nyv3j6rgfa30cat8cs3npnsep9caz0xyc
その翌日にはのす会にて Geo guesser で遊んだりしていたようです。こじらさんが尋常じゃない強さでどういう事なの…となった覚えがあります。
nostr:nevent1qqs9knrf4ww8g0fsu4l74gxeeh3s9pwpnf47xn8pf5u8pplkz4yatjg03ufd5
こうした経験を経て、徐々に Nostr ユーザーの方と直接会話することのハードルが下がってきた所でした。
初のオフ会参加
2 月頭、TL で話題になっていた火鍋を食べた経験がないなぁ…ということで、2024/02/10、ゴリラ.vim#30~四谷ラボコラボ~の参加と併せて、海底撈火鍋でオフ会を開催したのが Nostr における初めてのオフ会参加&幹事でした。
この日は中国の春節初日だったのもあって異様に店舗が混んでおり、18:00 に予約したのに一行に案内されず、
nostr:nevent1qqspcttj4gv2ey7vkt0wp2nehqfwxjnp55vm4agnwu9kullep88ysccpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsyg87v060ssxrpew6a0vrhkcy36hqppvrwjmlqnrgqrrvf8fghgg0pypsgqqqqqqs07ajzp
顔面が痙攣したり、
nostr:nevent1qqs9d5vycslspatsnx6u5qqqwpfmdt33w2v7xkytljzsfwv56acs79czyr0l60lu824k9yc63jcg7z32fzx6w3cr6zx3mmuns69wxr66mea7zp6f7wn
詫び菓子を貰ったり、
nostr:nevent1qqs8a0u47alv9vexd5r5s5vygs77ecadm6dl9vlky32hjywdx8f3gtczyr0l60lu824k9yc63jcg7z32fzx6w3cr6zx3mmuns69wxr66mea7zgjxmhl
病院待合室みたいな場所で検尿コップで水飲んだりと
nostr:nevent1qqsq44zs04g5zng35ks6jrvrv6uel2f9ls26d7nsc6svuggrlfnvtcgzyp4kuxwwg7530jlp8fn7adq982dnq8ncajv3gyl824y4xzyw6cknkvj37gy
トラウマになりそうなオフ会でした。当時の様子はnosli でまとめています。
今振り返ってもくちゃくちゃの体験してるなと思いますが、 ~~クレーターを作りそうな青ウサギがいたものの~~
nostr:nevent1qqsrs8y3phadhcukwjlkjkgdcs43ndkc8a42m88zayfj6p2lex6a6tgpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsygrtdcvuu3afzl97zwn8a66q2w5mxq083myezsf7w42f2vyga43d8vpsgqqqqqqsyfx7da
誰も怒らないし宴会自体は楽しかったので、Nostr のオフ会の原体験としては良かったな、と感じています。ひどい思い出ほど振り返ったら美化されるやつかもしれない。
各種イベント参加
Nostr には四谷ラボ参加者の方が沢山いらっしゃったこと、お声かけいただいた縁などもあり、いろいろなイベントにスタッフとして参加する経験ができました。例えば…
- Bluesky Meetup in Tokyo Vol.2
- 技術書典 16 ⇒ 関わらせていただいたのぶこ本
- Nostrasia2024
など。
微力ながら、自らの役割に合わせてイベントに貢献させていただけて、とても楽しめました。 自分に自信がなく、私生活では責任が発生する立場を回避しがちであったこともあって、自分としてはこれらのイベント参加はとても貴重な経験になりました。 関係されている方々が思い思いの仕事のやりようでイベントに取り組んでいる様が刺激になったなと思います。
オフ会履歴
私を Nostr でフォローいただいている方であれば、「こいつ、やたらオフ会行ってないか…?」と思われるでしょう。ということで、自分でも一度整理をしてみました。
うわっ...私のオフ会参加、多すぎ…? ~~1 年間は52週しかないねんぞ~~
このように、火鍋のオフ会を皮切りに、相当な数のオフ会に参加させていただきました。オフ会というかもう普通に Nostr で知り合っただけの友人との集まりみたいな感覚になっているかも。
ちなみに、人単位でお会いした回数もまとめています。
※:Nostrasia などのイベントでお会いした回数は除いています。
こうみるとしおと神(かすてらふぃさん)と会った回数めちゃくちゃ多いですね。28,26回だとほぼ2週に1回ペースですが、過去どんなに親しい友人でもこんな頻度で会ってたことないかも。
思い出深かった出来事
nostr:nevent1qqsyeyycax9qgrr4qvtty4h62x96vc6lydh8yg7jl5er99zg7wlpdrcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsygxll5llcw4tv2f34r9s3u9z5jyd5ars85ydrhhe8p52uv844hnmuypsgqqqqqqskevt6r
nostr:nevent1qqs0sqhtzc4p3vysz5k7l29x2lcnedeys55t7mqp2mz7ugrmw0v725cppemhxue69uhkummn9ekx7mp0qgsdllfllsa2kc5nr2xtprc29fygmf68q0gg6800jwrg4cc0tt08hcgrqsqqqqqpaua8e8
この誤字投稿を経て、私の(たまにほかの人も)誤字は大欲情と呼ばれるようになりました。~~毎回思うけど新しく入ってきた人は何だこれってなるよなこれ~~
その後も酔ってる時を中心に結構誤字をやらかすので、那月さんによるまとめが作られています。
名前としては不名誉かもしれませんが、面白いのでOKです。
おわりに
振り返ってみれば Nostr 日本人ユーザーコミュニティの心地良さに浸った 1 年だったと思います。 Nostr の仕組み自体も好きですが、私はコミュニティの方に目が行っている気がします。
Nostr 歴 1 歳になったので、今後は私が Nostr を使う人々に心地良いと思ってもらえるような人になれるとよいなと思います。
これからもよろしくお願いします。
-
@ 58937958:545e6994
2025-01-03 11:07:06January 3, 2024 I made a Bitcoin-inspired Osechi to celebrate Bitcoin's birthday. Everything was handmade! Osechi: A traditional Japanese New Year’s feast, typically served in stacked boxes.
First Layer (Ichino-jū)
- Tazukuri: Dried sardines, symbolizing a wish for a bountiful harvest.
- Simmered Kuai: A vegetable with large sprouts, symbolizing growth and success.
- Kombu Rolls: A play on words with the Japanese term yorokobu ("to be joyful"), making it a good luck dish.
- Matsukazeyaki: Ground meat coated with sesame or poppy seeds on one side, symbolizing honesty (no "hidden side").
- Black Beans: Represent hard work and good health.
- Datemaki: Sweet rolled omelet resembling scrolls, symbolizing knowledge and learning.
- Grilled Yellowtail: A fish whose name changes as it grows, symbolizing success. Salmon Terrine: A classic addition to Western-style Osechi. Salmon symbolizes success, avoiding misfortune (sakeru), and prosperity for future generations.
- Tataki Gobo: Burdock root with deep roots, symbolizing family stability and prosperity.
Second Layer (Nino-jū)
- Candied Kumquat: A dish symbolizing wealth and good fortune.
- Namash: Pickled daikon and carrot, resembling celebratory red and white decorations.
- Chestnut Kinton: Golden in color, symbolizing wealth and a prosperous year.
Bitcoin-themed additions:
- Pumpkin Yokan
- Chicken and Spinach Terrine
- Kinako Sticks
Third Layer (Sanno-jū)
Nishime: A simmered dish with various ingredients, symbolizing family harmony and long-lasting prosperity. I used snow peas to represent Bitcoin, and I couldn’t help but laugh at myself.
Dishes Inspired by Bitcoin
Pumpkin Yokan
I made firm milk jelly, cut it into a "B" shape with a knife, and filled it with pumpkin yokan.
Chicken and Spinach Terrine
It was my first attempt, and I think with more care, the shape could be even better.
Kinako Sticks
A simple snack made with honey and roasted soybean flour (kinako). Roll it out, cut it into sticks, and coat with more kinako.
Candied Kumquat
Candied Kumquat: A dish symbolizing wealth and good fortune. In Japan, 金柑 (kumquat) includes the kanji 金, which represents "gold."
nostr:nevent1qqspu8gegzdamtx2rsm4995t3sg8qssw3vn3yn25ru8plghsqyrwtkcn0u7vy
I wonder what Satoshi might have eaten on the day Bitcoin was born. Wouldn't it be amusing to imagine him snacking on Osechi while working on his computer? (Satoshi chose a Japanese name, so perhaps he might have an interest in Japanese culture.) Maybe, right now, Satoshi is relaxing and enjoying some Osechi... though probably not! In any case, I hope Satoshi is living peacefully somewhere.
-
@ 58937958:545e6994
2025-01-03 11:01:492024年1月3日 ビットコインのお誕生日に合わせて ビットコインっぽい具材を入れたおせちを作りました 全部手作りです
1の重
(左上から)
- 田作り…田んぼに田作り(カタクチイワシ)を肥料として撒いたことから、豊作祈願の意味合いがある。
- くわいの煮物…大きく芽が出る野菜で、出世や成功を祈る。
- 昆布巻き…「喜ぶ(よろこぶ)」の語呂合わせで縁起物。
- 松風焼き…表面だけケシの実やゴマをまぶす=裏がない→隠し事のない正直な生き方ができるように、という意味が込められている
- 黒豆…「まめに働く」ことや健康を祈る。
- 伊達巻き…巻物に似ていることから、知識が豊富になるようにと願いが込められている。
- ぶりの幽庵焼き…ぶりは成長とともに名前が変わる出世魚で、将来の出世を願う。
- 鮭のテリーヌ…洋風おせちの定番。鮭には「出世」「災いを避け(サケ)る」「子孫繁栄」などの意味がある
- たたきごぼう…根が深く張るごぼうは家族や子孫繁栄の象徴。
2の重
- 金柑の甘露煮…金柑の「金」の文字から、金運や財運を祈る。
- なます…紅白の水引のような形状で祝いの意味がある
- 栗きんとん…黄金色が金運を表し、豊かな1年を願う。
以下はビットコイン具材として入れました
- カボチャようかん
- 鶏とほうれん草のテリーヌ
- きな粉棒
3の重
煮しめ…様々な具材を一緒に煮ることから、「皆で仲良く、末永く繁栄するように」という願いが込められている きぬさやのBは我ながらちょっと笑ってしまった
ビットコインを意識して作った具材
カボチャようかん
固めの牛乳かんを作り、包丁でBの形に切り抜いて、カボチャのようかんを流す感じです
鶏とほうれん草のテリーヌ
鶏むね肉とはんぺんをミンチにして、半分にほうれん草を入れて形作りました 初めて作ったので不安でしたが丁寧に作ればもっと良い形になると思いました
きな粉棒
はちみつときな粉だけで作る駄菓子的なおやつです のばして包丁で切り抜いてきな粉をまぶします
金柑の甘露煮
丸くてオレンジ色なので作ってみました しかも名前に「金(ゴールド)」が入っているのでビットコイン食材のポテンシャルがあると思います とろける感じでめっちゃおいしかったです
nostr:nevent1qqspu8gegzdamtx2rsm4995t3sg8qssw3vn3yn25ru8plghsqyrwtkcn0u7vy
サトシはビットコインが生まれたその日に何を食べていたのかなぁと おせちをつまみながらパソコンに向かっていたりしたら面白いなぁと思いながら作りました (日本文化が好きだから日本名にした可能性はあるかな~とか)
今頃のんびりおせちを食べてくつろいでいる・・・なんてことはないですかね 何にせよサトシが平和に暮らしていればいいなぁと思います
-
@ 101b30ee:18a46a45
2025-01-02 17:28:15
ハンドシェイク
- HTTPリクエスト解析
- [ ] HTTPリクエストラインのパーサー関数作成
- [x] HTTPヘッダーのパーサー関数作成
- [ ] HTTPリクエストボディのパーサー関数作成
- [ ] WebSocket関連ヘッダーの検証
- [ ]
Upgrade: websocket
- [ ]
Connection: Upgrade
- [ ]
Sec-WebSocket-Key
の取得と検証 - [ ]
Sec-WebSocket-Version: 13
の検証
- [ ]
- HTTPレスポンス作成
- [ ]
Sec-WebSocket-Accept
の生成- [x]
Sec-WebSocket-Key
にSHA-1適用(外部依存) - [ ]
Sec-WebSocket-Key
にSHA-1適用(非依存) - [x]
Sec-WebSocket-Key
にBase64エンコードを適用
- [x]
- [x] HTTP 101 Switching Protocolsレスポンスの構築と送信
データ転送
WebSocketフレームの処理
- フレーム解析
- [x]
fin
ビットの取り出しと解釈 - [x]
rsv1
,rsv2
,rsv3
の取り出しと検証 - [ ]
opcode
の取り出しと処理- [ ] 0x0: 継続フレーム
- [ ] 0x1: テキストフレーム
- [ ] 0x2: バイナリフレーム
- [ ] 0x8: 接続終了
- [ ] 0x9: Ping
- [ ] 0xA: Pong
- [x]
mask
フラグの取得と検証 - [x]
payload_len
の取り出しと解析 - [x] 拡張されたペイロード長(
extended payload len
)の取り出し - [x]
masking key
の取得とデコード - [x]
payload
データの取り出し - [ ]
fin
に基づく分割パケット対応 - デコード
- [x]
masking key
を使用したペイロードデコード - opcode別処理
- [ ] テキストフレーム(0x1)のUTF-8デコードと処理
- [ ] バイナリフレーム(0x2)のデータ処理
- [ ] Ping(0x9)フレームへのPong応答
- [ ] 接続終了(0x8)の処理
- [ ] 不正なopcodeに対するエラー応答
フレーム生成
- フレーム構築
- [ ]
fin
フラグ設定 - [ ]
opcode
の設定 - [ ] ペイロードのマスキング処理(クライアント向けのみ)
- [ ] ペイロード長の設定(拡張ペイロード長を含む)
- [ ] フレーム全体のバイトストリーム化
接続管理
- [x] クライアント接続の確立
- [x] 2クライアント以上の接続の確立
- [ ] 接続中のクライアントのリスト管理
- [ ] 接続のタイムアウト処理
- [ ] 不正なクライアントからの接続拒否
- [ ] 接続終了時のクリーンアップ処理
- [ ] ハートビート機能(Ping/Pong)による接続維持
セキュリティ
- [ ] WebSocket Originヘッダーの検証(許可されたオリジンのみ受け入れる)
- [ ] メッセージサイズの上限設定(大規模メッセージ攻撃の防御)
- [ ] 不正なフレーム/データに対するエラーハンドリング
- [ ] SSL/TLSサポート(wssプロトコル用)
拡張機能とプロトコルアップグレード
- [ ] サブプロトコル(Sec-WebSocket-Protocol)の処理
- [ ] 拡張(Sec-WebSocket-Extensions)のサポート
- 圧縮データのデコード (例: permessage-deflate)
テストとデバッグ
- [ ] 単体テスト
- [ ] ハンドシェイクのテスト
- [ ] フレーム解析と生成のテスト
- [ ] 各opcode処理のテスト
- [ ] 負荷テスト(高負荷時の動作確認)
- [ ] プロトコルコンフォーマンステスト
- [ ] RFC 6455に準拠しているかの確認
- [ ] ロギングとデバッグツールの実装
ドキュメント
- [ ] コードベースのコメントとドキュメント化
- [ ] WebSocketサーバーの設定と使用法についてのユーザーガイド作成
タグ
RFC6455
-
@ 58937958:545e6994
2025-01-02 12:33:17May 22, 2024 I made Badger-kun’s pizza bread to celebrate Bitcoin Pizza Day.
Badger-kun: A character from the Japanese YouTube channel "Bitcoiner Hanseikai."
Making the pizza bread was quite a challenge:
Attempt 1: Rice Flour Bread
I thought it might be difficult to shape the character using yeast-based dough (since fermentation might turn it into just a plain round shape). So, I tried rice flour bread with psyllium, but it didn’t feel quite right.
Attempt 2: Cream Bread Style
The rice flour bread was too firm, so I wanted to try something softer. It ended up burning.
Attempt 3: Cheese Naan Style
I wanted to capture that melty cheese vibe and finally thought of cheese naan. For a character-themed pizza bread, this cheese naan approach seemed to work pretty well. I realized that simpler character designs might be easier (and clearer) to make. nostr:nevent1qqsd3a7thkzqde4sp4hx7qjwrjp4kxsnl66kytx40mk73djfvxfkspgu2fw34
-
@ 58937958:545e6994
2025-01-02 12:32:512024年5月22日
ビットコイン・ピザ・デーに合わせてバッジャー君のピザパンを作りました
バッジャー君…日本のYoutubeチャンネル「ビットコイナー反省会」のキャラクター
ピザパン作りはかなり苦戦しました
1回目:米粉パン
イースト発酵だとキャラクターの形を作りにくい気がして(作っても発酵後に単なる丸になっちゃう懸念)
サイリウムを使った米粉パンにしたんですけど
何かこれじゃない感
2回目:クリームパン風
米粉パンが固かったので柔らかいパンが食べたくなりました
焦げました
3回目:チーズナン風
とろけるチーズ感を出したいな~と考えて
ここでようやくチーズナンを思いつく
キャラクター×ピザパンならこのチーズナン方式が結構いいかもしれない
もうちょっとシンプルなキャラクターだと作りやすそう(分かりやすそう)だと思いました nostr:nevent1qqsd3a7thkzqde4sp4hx7qjwrjp4kxsnl66kytx40mk73djfvxfkspgu2fw34
-
@ 58937958:545e6994
2025-01-02 12:32:28October 31, 2024 I made pumpkin yokan to celebrate the anniversary of the Bitcoin whitepaper release.
*Yokan: A firm, jelly-like Japanese dessert typically made with azuki bean paste.
Cut a clear file into the shape of the Bitcoin logo.
Place the ₿ mark on a slightly firm milk jelly (gyunyukan) and carefully cut it out with a knife.
Fill the cut-out with pumpkin yokan.
The mixture I made was a bit firm, so it was challenging to fill the gaps in the ₿ shape. Later, I tried a milk-based yokan with a smoother texture, which made the process much easier.
nostr:nevent1qqszzcz9npq5xgw08tp5wud0kg9wfacf9fkj07gu82wn3wjsad3wd2cppvjdw
You don’t need any special molds, so anyone can try this! I’m thinking of experimenting with different variations of the milk jelly and applying this technique to other dishes as well.
-
@ 58937958:545e6994
2025-01-02 12:32:102024年10月31日 ビットコインホワイトペーパー公開の記念日に合わせてカボチャようかんを作りました
100均のクリアファイルをビットコインロゴマークに切り抜きます
ちょっと固めに作った牛乳かんに₿マークを乗せて 包丁を使って気合で切ります
カボチャようかんを入れます
この時作ったのはちょっと固い配合で₿の隙間に入れるのが難しかったです
後で牛乳入りのサラッとしたようかんも試しましたがそちらの方が作りやすかったです
nostr:nevent1qqszzcz9npq5xgw08tp5wud0kg9wfacf9fkj07gu82wn3wjsad3wd2cppvjdw
特別な型などは必要ないので誰でもできます
牛乳かんの部分を色々変えて 他の料理にも応用したいと思います
-
@ 1bda7e1f:bb97c4d9
2025-01-02 05:19:08Tldr
- Nostr is an open and interoperable protocol
- You can integrate it with workflow automation tools to augment your experience
- n8n is a great low/no-code workflow automation tool which you can host yourself
- Nostrobots allows you to integrate Nostr into n8n
- In this blog I create some workflow automations for Nostr
- A simple form to delegate posting notes
- Push notifications for mentions on multiple accounts
- Push notifications for your favourite accounts when they post a note
- All workflows are provided as open source with MIT license for you to use
Inter-op All The Things
Nostr is a new open social protocol for the internet. This open nature exciting because of the opportunities for interoperability with other technologies. In Using NFC Cards with Nostr I explored the
nostr:
URI to launch Nostr clients from a card tap.The interoperability of Nostr doesn't stop there. The internet has many super-powers, and Nostr is open to all of them. Simply, there's no one to stop it. There is no one in charge, there are no permissioned APIs, and there are no risks of being de-platformed. If you can imagine technologies that would work well with Nostr, then any and all of them can ride on or alongside Nostr rails.
My mental model for why this is special is Google Wave ~2010. Google Wave was to be the next big platform. Lars was running it and had a big track record from Maps. I was excited for it. Then, Google pulled the plug. And, immediately all the time and capital invested in understanding and building on the platform was wasted.
This cannot happen to Nostr, as there is no one to pull the plug, and maybe even no plug to pull.
So long as users demand Nostr, Nostr will exist, and that is a pretty strong guarantee. It makes it worthwhile to invest in bringing Nostr into our other applications.
All we need are simple ways to plug things together.
Nostr and Workflow Automation
Workflow automation is about helping people to streamline their work. As a user, the most common way I achieve this is by connecting disparate systems together. By setting up one system to trigger another or to move data between systems, I can solve for many different problems and become way more effective.
n8n for workflow automation
Many workflow automation tools exist. My favourite is n8n. n8n is a low/no-code workflow automation platform which allows you to build all kinds of workflows. You can use it for free, you can self-host it, it has a user-friendly UI and useful API. Vs Zapier it can be far more elaborate. Vs Make.com I find it to be more intuitive in how it abstracts away the right parts of the code, but still allows you to code when you need to.
Most importantly you can plug anything into n8n: You have built-in nodes for specific applications. HTTP nodes for any other API-based service. And community nodes built by individual community members for any other purpose you can imagine.
Eating my own dogfood
It's very clear to me that there is a big design space here just demanding to be explored. If you could integrate Nostr with anything, what would you do?
In my view the best way for anyone to start anything is by solving their own problem first (aka "scratching your own itch" and "eating your own dogfood"). As I get deeper into Nostr I find myself controlling multiple Npubs – to date I have a personal Npub, a brand Npub for a community I am helping, an AI assistant Npub, and various testing Npubs. I need ways to delegate access to those Npubs without handing over the keys, ways to know if they're mentioned, and ways to know if they're posting.
I can build workflows with n8n to solve these issues for myself to start with, and keep expanding from there as new needs come up.
Running n8n with Nostrobots
I am mostly non-technical with a very helpful AI. To set up n8n to work with Nostr and operate these workflows should be possible for anyone with basic technology skills.
- I have a cheap VPS which currently runs my HAVEN Nostr Relay and Albyhub Lightning Node in Docker containers,
- My objective was to set up n8n to run alongside these in a separate Docker container on the same server, install the required nodes, and then build and host my workflows.
Installing n8n
Self-hosting n8n could not be easier. I followed n8n's Docker-Compose installation docs–
- Install Docker and Docker-Compose if you haven't already,
- Create your
docker-compose.yml
and.env
files from the docs, - Create your data folder
sudo docker volume create n8n_data
, - Start your container with
sudo docker compose up -d
, - Your n8n instance should be online at port
5678
.
n8n is free to self-host but does require a license. Enter your credentials into n8n to get your free license key. You should now have access to the Workflow dashboard and can create and host any kind of workflows from there.
Installing Nostrobots
To integrate n8n nicely with Nostr, I used the Nostrobots community node by Ocknamo.
In n8n parlance a "node" enables certain functionality as a step in a workflow e.g. a "set" node sets a variable, a "send email" node sends an email. n8n comes with all kinds of "official" nodes installed by default, and Nostr is not amongst them. However, n8n also comes with a framework for community members to create their own "community" nodes, which is where Nostrobots comes in.
You can only use a community node in a self-hosted n8n instance (which is what you have if you are running in Docker on your own server, but this limitation does prevent you from using n8n's own hosted alternative).
To install a community node, see n8n community node docs. From your workflow dashboard–
- Click the "..." in the bottom left corner beside your username, and click "settings",
- Cilck "community nodes" left sidebar,
- Click "Install",
- Enter the "npm Package Name" which is
n8n-nodes-nostrobots
, - Accept the risks and click "Install",
- Nostrobots is now added to your n8n instance.
Using Nostrobots
Nostrobots gives you nodes to help you build Nostr-integrated workflows–
- Nostr Write – for posting Notes to the Nostr network,
- Nostr Read – for reading Notes from the Nostr network, and
- Nostr Utils – for performing certain conversions you may need (e.g. from bech32 to hex).
Nostrobots has good documentation on each node which focuses on simple use cases.
Each node has a "convenience mode" by default. For example, the "Read" Node by default will fetch Kind 1 notes by a simple filter, in Nostrobots parlance a "Strategy". For example, with Strategy set to "Mention" the node will accept a pubkey and fetch all Kind 1 notes that Mention the pubkey within a time period. This is very good for quick use.
What wasn't clear to me initially (until Ocknamo helped me out) is that advanced use cases are also possible.
Each node also has an advanced mode. For example, the "Read" Node can have "Strategy" set to "RawFilter(advanced)". Now the node will accept json (anything you like that complies with NIP-01). You can use this to query Notes (Kind 1) as above, and also Profiles (Kind 0), Follow Lists (Kind 3), Reactions (Kind 7), Zaps (Kind 9734/9735), and anything else you can think of.
Creating and adding workflows
With n8n and Nostrobots installed, you can now create or add any kind of Nostr Workflow Automation.
- Click "Add workflow" to go to the workflow builder screen,
- If you would like to build your own workflow, you can start with adding any node. Click "+" and see what is available. Type "Nostr" to explore the Nostrobots nodes you have added,
- If you would like to add workflows that someone else has built, click "..." in the top right. Then click "import from URL" and paste in the URL of any workflow you would like to use (including the ones I share later in this article).
Nostr Workflow Automations
It's time to build some things!
A simple form to post a note to Nostr
I started very simply. I needed to delegate the ability to post to Npubs that I own in order that a (future) team can test things for me. I don't want to worry about managing or training those people on how to use keys, and I want to revoke access easily.
I needed a basic form with credentials that posted a Note.
For this I can use a very simple workflow–
- A n8n Form node – Creates a form for users to enter the note they wish to post. Allows for the form to be protected by a username and password. This node is the workflow "trigger" so that the workflow runs each time the form is submitted.
- A Set node – Allows me to set some variables, in this case I set the relays that I intend to use. I typically add a Set node immediately following the trigger node, and put all the variables I need in this. It helps to make the workflows easier to update and maintain.
- A Nostr Write node (from Nostrobots) – Writes a Kind-1 note to the Nostr network. It accepts Nostr credentials, the output of the Form node, and the relays from the Set node, and posts the Note to those relays.
Once the workflow is built, you can test it with the testing form URL, and set it to "Active" to use the production form URL. That's it. You can now give posting access to anyone for any Npub. To revoke access, simply change the credentials or set to workflow to "Inactive".
It may also be the world's simplest Nostr client.
You can find the Nostr Form to Post a Note workflow here.
Push notifications on mentions and new notes
One of the things Nostr is not very good at is push notifications. Furthermore I have some unique itches to scratch. I want–
- To make sure I never miss a note addressed to any of my Npubs – For this I want a push notification any time any Nostr user mentions any of my Npubs,
- To make sure I always see all notes from key accounts – For this I need a push notification any time any of my Npubs post any Notes to the network,
- To get these notifications on all of my devices – Not just my phone where my Nostr regular client lives, but also on each of my laptops to suit wherever I am working that day.
I needed to build a Nostr push notifications solution.
To build this workflow I had to string a few ideas together–
- Triggering the node on a schedule – Nostrobots does not include a trigger node. As every workflow starts with a trigger we needed a different method. I elected to run the workflow on a schedule of every 10-minutes. Frequent enough to see Notes while they are hot, but infrequent enough to not burden public relays or get rate-limited,
- Storing a list of Npubs in a Nostr list – I needed a way to store the list of Npubs that trigger my notifications. I initially used an array defined in the workflow, this worked fine. Then I decided to try Nostr lists (NIP-51, kind 30000). By defining my list of Npubs as a list published to Nostr I can control my list from within a Nostr client (e.g. Listr.lol or Nostrudel.ninja). Not only does this "just work", but because it's based on Nostr lists automagically Amethyst client allows me to browse that list as a Feed, and everyone I add gets notified in their Mentions,
- Using specific relays – I needed to query the right relays, including my own HAVEN relay inbox for notes addressed to me, and wss://purplepag.es for Nostr profile metadata,
- Querying Nostr events (with Nostrobots) – I needed to make use of many different Nostr queries and use quite a wide range of what Nostrobots can do–
- I read the EventID of my Kind 30000 list, to return the desired pubkeys,
- For notifications on mentions, I read all Kind 1 notes that mention that pubkey,
- For notifications on new notes, I read all Kind 1 notes published by that pubkey,
- Where there are notes, I read the Kind 0 profile metadata event of that pubkey to get the displayName of the relevant Npub,
- I transform the EventID into a Nevent to help clients find it.
- Using the Nostr URI – As I did with my NFC card article, I created a link with the
nostr:
URI prefix so that my phone's native client opens the link by default, - Push notifications solution – I needed a push notifications solution. I found many with n8n integrations and chose to go with Pushover which supports all my devices, has a free trial, and is unfairly cheap with a $5-per-device perpetual license.
Once the workflow was built, lists published, and Pushover installed on my phone, I was fully set up with push notifications on Nostr. I have used these workflows for several weeks now and made various tweaks as I went. They are feeling robust and I'd welcome you to give them a go.
You can find the Nostr Push Notification If Mentioned here and If Posts a Note here.
In speaking with other Nostr users while I was building this, there are all kind of other needs for push notifications too – like on replies to a certain bookmarked note, or when a followed Npub starts streaming on zap.stream. These are all possible.
Use my workflows
I have open sourced all my workflows at my Github with MIT license and tried to write complete docs, so that you can import them into your n8n and configure them for your own use.
To import any of my workflows–
- Click on the workflow of your choice, e.g. "Nostr_Push_Notify_If_Mentioned.json",
- Click on the "raw" button to view the raw JSON, ex any Github page layout,
- Copy that URL,
- Enter that URL in the "import from URL" dialog mentioned above.
To configure them–
- Prerequisites, credentials, and variables are all stated,
- In general any variables required are entered into a Set Node that follows the trigger node,
- Pushover has some extra setup but is very straightforward and documented in the workflow.
What next?
Over my first four blogs I explored creating a good Nostr setup with Vanity Npub, Lightning Payments, Nostr Addresses at Your Domain, and Personal Nostr Relay.
Then in my latest two blogs I explored different types of interoperability with NFC cards and now n8n Workflow Automation.
Thinking ahead n8n can power any kind of interoperability between Nostr and any other legacy technology solution. On my mind as I write this:
- Further enhancements to posting and delegating solutions and forms (enhanced UI or different note kinds),
- Automated or scheduled posting (such as auto-liking everything Lyn Alden posts),
- Further enhancements to push notifications, on new and different types of events (such as notifying me when I get a new follower, on replies to certain posts, or when a user starts streaming),
- All kinds of bridges, such as bridging notes to and from Telegram, Slack, or Campfire. Or bridging RSS or other event feeds to Nostr,
- All kinds of other automation (such as BlackCoffee controlling a coffee machine),
- All kinds of AI Assistants and Agents,
In fact I have already released an open source workflow for an AI Assistant, and will share more about that in my next blog.
Please be sure to let me know if you think there's another Nostr topic you'd like to see me tackle.
GM Nostr.
-
@ 59cb0748:9602464b
2025-01-01 06:15:09Nostrでお世話になっている方も、お世話になってない方も、こんにちは!
タコ頭大吉です!
NIP-23を使った初めての投稿です。
今回は、私がここ数ヶ月中にデザインをした三種類のビタキセケースの紹介記事になります!!
ビタキセを買ったもののあまり自分の好みに合う外観や仕様のケースがなく、いくつかプロトタイプを作りそれなりに時間をかけて考えたケース達です。
これら3シリーズに関しては、FDMタイプの3Dプリンタの精度、耐久性、出力後の作業性を考慮して一つのパーツで完結することに拘って設計をしました。
一定以上の充填率でプリントをすればそれなりに丈夫なはずです。
また、基本的に放熱性と保護性を両立できるように設計をしたつもります。
それぞれのモデルについて簡単に紹介をさせていただきますので、よろしければ各リポジトリに付属のREADMEを読んでいただいて自作、フィードバックをいただけましたら幸いです。
それでは、簡単に各モデルの紹介をさせていたきます。
AirLiftFrame
最初に作ったモデルです! 少し大きいのが難点ですが、分厚めのフレームをベースとし基盤周辺をあえて囲わない設計により、保護性と放熱を阻害しない事の両立を狙っています。
TwinAirLiftFrame
ビタキセを買い増ししたことにより、複数台をカッコよく運用したいという需要が自分の中に出てきたので、AirLiftFrameを2つくっつけたら良いのではと言うごくごく単純な発想でつくり始めたケースです。 しかし、ただ横並びにしただけでは廃熱が干渉するだけではなく、DCジャックやUSBポートへのアクセスが阻害されるという問題にすぐに気がつきました。 そこで、WebUI上でディスプレイの表示を上下反転出来ることに注目し、2台を上下逆向きに取り付ける事でそれらの問題を解決しました!
VoronoiShell
AirLiftFrameシリーズのサイズを小型化する事から始めたプロジョクトです。 縦横の寸法の削減だけではなく、厚みを薄くつくリたいという希望がありました。 所が単純に薄くすると、持った時に発熱する背面パーツに手が触れてしまったり、落下などでぶつかった際に背面パーツが破損する懸念がありました。 そこで、(当初は付けたくはなかった)背面保護用のグリルをデザインする必要が出てきました。 初めは多角形でしたがあまりにもダサく、調べている内にVoronoi柄という有機的なパターンに行き付き即採用しました。 結果、ビタキセを取り付けると柄が見えなくなるのが勿体無いぐらい個性的でスタイリッシュなデザインに仕上がりました。
いずれカスタム方法やインサートナットや増設ファンの選定方法等を紹介したいのですが、今回はNIP-23になれるという意図もあるので紹介に留めます! また、他の関連OSハードウェアプロジェクトのケースもデザインできたらと思っております!
今後ともタコ頭をよろしくお願いいたします。
-
@ 714dd0db:9c6f1a4c
2024-12-31 10:54:01Nostrで初めての長文投稿
2024年の大晦日。今年1年、個人的に何があったか振り返ってみる。
自転車生活に慣れてきた
移動手段を電車や車から自転車メインに切り替えた。暑さも寒さも体験し、生きてるなあ、という実感が得られるね。
ふと寄り道もできるし、お店やら新しい発見も多かったな。
夏の山口県旅行
夏に実家への帰省も兼ねて、山口県を旅行した。今年は日本酒にハマってしまったので、山口県内の酒蔵をいくつか巡ってみた。
美祢市にある別府弁天池の水の蒼さに感動。まさにエメラルドグリーンだった。
日本酒にハマる
最初は、お米の可能性として、お米からできている麺や米菓子を好んでいたが、「そういえば 日本酒もお米からできているよな」と気づき、飲み始めたところ、はまってしまったというわけ。
とは言っても下戸の部類に入るので、低アルコールの日本酒ばかりを飲んでいる。6〜7度のフルーツ日本酒も美味しいが、身体に合っているのは14度のスッキリ系もしくは若干のフルーツさの味わいをよく飲んでいる。山口の大嶺酒造や栃木の仙禽が多いかな。
SNSはNostrとfediverseで
分散型SNSにハマった1年だった。今ではすっかり馴染んで活用している。もうXwitterやInstagramは見なくなったなあ。
Nostrのおかげで、Satsのことも知り、仮想通貨の情報収集や勉強をしているところ。
Nostrは、クライアントによって、見え方が全然違うのが面白い。
そして2025年へ
2025年は、昭和100年にあたる。100年かぁ。昭和世代には感慨深い。
来年もぼちぼちやっていきます。よろしくお願いいたします。
-
@ 84b0c46a:417782f5
2024-12-26 10:28:26- lumilumi The Nostr Web Client.
Lightweight modes are available, such as not displaying icon images, not loading images automatically, etc.
Follow List ( kind3 ) organization tool.
- NAKE NIP-19, NIP-49 Encode/Decode Tool
- chrome extension
- firefox add-on
- nostviewstr
Addressable or Replaceable Event Editor ( いろんなリストエディター )
Addressable or Replaceable Event Recovery tool ( いろいろリカバリーツール )
Bookmark event ( kind:10003,30001,30003 ) recovery tool ( ぶくま復活させたいやつ )
プロフィールを編集するやつ - nostr-bookmark-viewer
Bookmark event ( kind:10003,30001,30003 ) Editor ( ぶっくまーくをみるやつ )
Broadcast an event from relay to relay ( イベントをブロードキャストするやつ )
-
@ 21ac2956:09d1e2df
2024-12-24 23:24:04スペース2つ+改行→
改行2つ→ハードブレイク→
いかがでしたか? -
@ 32310997:0c1e64cc
2024-12-24 23:10:03※このポエムはNostr Advent Calendar 2024の25日目の記事です。24日目はtansaibowさんのご担当です。
この鍵ひとつあれば
僕はどこにだってゆける
なんだってできる
さぁ進もう
この曠野を(※画像はイメージです。本文とはたいして関係がありません)
-
@ 9be5722a:6e939518
2024-12-24 07:17:09この記事は、Nostr Advent Calendar 2024 🗓️24日目の記事です
- 12/23 opensats税務署編 著:@mono さん
- 12/24 準備中 著:@showV3 さん
本記事は技術的な知見などを含まない感想文です。
< br>タグが使えることを知らずに書いて調整していたので
不自然な改行が多いですが、最後まで読んでいただけると嬉しいです
内容目次
- 自己紹介
- Before Nostr
- Hello Nostr!
- Nostrの魅力: 自由と哲学
- おわりに
自己紹介
1浪目の浪人生です。目標は天文学者です。自立したいので来年は大学生です。
天文台があるのと南国育ちのため雪が降ってほしいのとで東北地方の大学を受験します。
Before Nostr
Nostrを始める前、SNSは主にInstagramとTwitterを使っていました
Instagramはリア友とのコミュニケーションツールとしての利用が主で
キラキラ大学生活と浪人生活とのギャップに耐えられないだろうと考えて3月末にアカウント停止。
TwitterはROM専で情報が手早く得られるツールとして利用していたつもりですが
全くいらない情報ばかりなこと、見ていない期間のメンタルの調子が良いことがわかり
情報収集の手段を見直した上でTwitterを削除し、そのうち
大学生なったらホームページつくってみたい!ブログやろう!
と考えるようになったため、受験のためにもSNSを完全にやめることにしました
SNSに費やしていた休憩時間を使い、積読を解消する作業や英字新聞の購読を始めました
Hello Nostr!
Nostrとの出会い
Nostrに出会ったきっかけは英文記事に
"Blueskyを離れたJack Dorsey"
という内容があり、Jack Dorseyが何をしているのか調べたことです
(Jack DorseyのWikipedia薄すぎ........のすたー?のすとら?)
キャリアの最後にNostrとありましたのでこいつを検索窓にぽいっ
そしてkojiraさんの記事に出会い
Nostr /ˈnɒstʃrə/
というよくわからない名前をした分散SNSプロトコルを知りました
さらに検索するとScrapboxがあったので誘導に乗るままこちらのかわいいサイトへ
そして私はnostterから生まれました(?)
nostr:nevent1qqspgrhygeu55pjnhyysaxd09dhdhhtu8w0dshxkf2xywelalxu70ecrfeuej わけもわからず初投稿 irisからだったかな?
インスタしか投稿したことないので何気にミニブログ初投稿Nostr村で過ごした1ヶ月
Zap解放と認証バッジ
まずはすべての機能を解放させようと思い、zapの設定に取り組みました。 nostr:nevent1qqsxj6w23mck4nwz204ftsnhqd32pcly44y6gcf9lvu403ahf8qrptc38n7nl scrapboxを参考に難なくクリア
しかしこの日から1週間は勉強の合間にドメイン認証に挑戦するも苦戦。。。 nostr:nevent1qqsz8jke4xazhx8arpx6jxd96a0f6k5rgkaklqwhshu90nkqknh9mtcwsmw06 原因はCORSの設定ミスだとおもったのですが
{"names":{"tansaibow":"公開鍵"}}
とすべきところを
{"name":{"tansaibow":"公開鍵"}}
としていたことが原因でした。
コピペしたつもりなんだけどなあ( ; ; ) nostr:nevent1qqsv2xj5z3yc3x9gk6x2g98x3x24a627n3mln9rlpm88gsvgmnde93c3nz2hc ここらから1ヶ月間Time Lineを斜め読みしつつちょくちょく言葉を投げてみます
Hello Nostrシリーズ nostr:nevent1qqsdwe46ykmyck9hxy4wjfx43mzhv92p70c5ytm9z8z6wak47460tzgs6na4e 1週間くらいでNostrがなんだか好きになってきたので書籍も購入しました
受験が終わったら再度、手を動かしながら読みます
今思えば紙で購入しておけばもっと嬉しくなれたと後悔しています
崇徳さんのイラストがすきです
LUMILUMI nostr:nevent1qqsqfzpps79nv8cht3xlpdzyx5jcy0kyme72sav6sgxpg3tra7yqykqyjl5yl nostr:nevent1qqszxqvedp0zaapneptx6xzvmvn7ltmfpz6dx97dctpw5hp90n0lens7cn5gt かわいい
ろぐぼ
28日目にしてはじめてやぶみちゃんからろぐぼをもらいました nostr:nevent1qqstuk49ull23668s5cwmzmzl5p6wjlg0tgt4ctke3nammhm0d5lyxscjxxhf ちなみに初回は失敗しました。初々しくてかわいいですね?
Nostrの魅力: 自由と哲学
秘密鍵、OSS、冗長構成! 自由が特徴でとてもインターネットらしくてクールです。
Nostrこそがインターネット!
ここに広がる独特な文化や人々の交流スタイルも魅力的です
第一印象ではエンジニアの溜まり場でしたが、実態はそう単純ではなく
エンジニアリングとユーザー体験が一体化している
というよりもむしろ、誰もがエンジニアでありユーザーであり
個人の裁量が各々の技術に委ねられるという形で自由が表現されています
確かに技術者の割合は比較的多いかもしれませんが
作りたいものを自由につくるという精神が随所にみられ、
技術と思想が相互に作用できる環境が全ユーザーに与えられているだけだと
現在はそのような印象を持っています
また、タイムラインが自動で流れるため
既存SNSのようにスワイプしてリロードしてポストを求めるというような
パブロフの犬的な強化がされないのがしばらく使っていて快適でした
依存度を高めないクライアントも自由に作れることも魅力的です!
そして何よりいろんな方がいて平穏賑やかで楽しいです nostr:nevent1qqsqrcuy22k4ax09yurlynp8c4jw08aq5kylu6006ltqqs0vks6wa2q9ammmn TLでは技術系の話題と日常的な話題が自然に絡み合っていて独特な雰囲気があります。
良くも悪くも棲み分けが進むほどの規模ではないNostr村
日を経るごとに村たる所以をひしひしと感じています
そのままで、村のままでもいいんだよ?
おわりに🌸
いつかNostrのなにかしら開発してみたいです。(漠然)
とりあえず3月まで受験にすべての時間をかけますが
大学生活と勉強とやりたいことと折り合いをつけつつ
技術を身につけてNostrを使いこなせたらいいなと思います
明日はAdvent Calendar最終日、ひゅうが霄さん(@showV3)が担当なさいます。
受験勉強の合間に書いたため拙い文章になりましたが
さいごまでお付き合いいただき、本当にありがとうございました!
メリークリスマス!🙌
-
@ 9be5722a:6e939518
2024-12-23 12:44:30test test test nostr:nevent1qqspgrhygeu55pjnhyysaxd09dhdhhtu8w0dshxkf2xywelalxu70ecrfeuej
-
@ ec42c765:328c0600
2024-12-22 19:16:31この記事は前回の内容を把握している人向けに書いています(特にNostrエクステンション(NIP-07)導入)
手順
- 登録する画像を用意する
- 画像をweb上にアップロードする
- 絵文字セットに登録する
1. 登録する画像を用意する
以下のような方法で用意してください。
- 画像編集ソフト等を使って自分で作成する
- 絵文字作成サイトを使う(絵文字ジェネレーター、MEGAMOJI など)
- フリー画像を使う(いらすとや など)
データ量削減
Nostrでは画像をそのまま表示するクライアントが多いので、データ量が大きな画像をそのまま使うとモバイル通信時などに負担がかかります。
データ量を増やさないためにサイズやファイル形式を変更することをおすすめします。
以下は私のおすすめです。 * サイズ:正方形 128×128 ピクセル、長方形 任意の横幅×128 ピクセル * ファイル形式:webp形式(webp変換おすすめサイト toimg) * 単色、単純な画像の場合:png形式(webpにするとむしろサイズが大きくなる)
その他
- 背景透過画像
- ダークモード、ライトモード両方で見やすい色
がおすすめです。
2. 画像をweb上にアップロードする
よく分からなければ emojito からのアップロードで問題ないです。
普段使っている画像アップロード先があるならそれでも構いません。
気になる方はアップロード先を適宜選んでください。既に投稿されたカスタム絵文字の画像に対して
- 削除も差し替えもできない → emojito など
- 削除できるが差し替えはできない → Gyazo、nostrcheck.meなど
- 削除も差し替えもできる → GitHub 、セルフホスティングなど
これらは既にNostr上に投稿されたカスタム絵文字の画像を後から変更できるかどうかを指します。
どの方法でも新しく使われるカスタム絵文字を変更することは可能です。
同一のカスタム絵文字セットに同一のショートコードで別の画像を登録する形で対応できます。3. 絵文字セットに登録する
emojito から登録します。
右上のアイコン → + New emoji set から新規の絵文字セットを作成できます。
① 絵文字セット名を入力
基本的にカスタム絵文字はカスタム絵文字セットを作り、ひとまとまりにして登録します。
一度作った絵文字セットに後から絵文字を追加することもできます。
② 画像をアップロードまたは画像URLを入力
emojitoから画像をアップロードする場合、ファイル名に日本語などの2バイト文字が含まれているとアップロードがエラーになるようです。
その場合はファイル名を適当な英数字などに変更してください。
③ 絵文字のショートコードを入力
ショートコードは絵文字を呼び出す時に使用する場合があります。
他のカスタム絵文字と被っても問題ありませんが選択時に複数表示されて支障が出る可能性があります。
他と被りにくく長くなりすぎないショートコードが良いかもしれません。
ショートコードに使えるのは半角の英数字とアンダーバーのみです。
④ 追加
Add を押してもまだ作成完了にはなりません。
一度に絵文字を複数登録できます。
最後に右上の Save を押すと作成完了です。
画面が切り替わるので、右側の Options から Bookmark を選択するとそのカスタム絵文字セットを自分で使えるようになります。
既存の絵文字セットを編集するには Options から Edit を選択します。
以上です。
仕様
-
@ 2cb8ae56:84d30cba
2024-12-21 11:27:14ども、薄味のキャルピスでございます。
当記事は、「Nostr Advent Calendar 2024」7日目の記事です。
この記事を読んでいる人でいないとは思いますが、Nostrとはなんぞやとお思いの方は以下をご覧ください。https://hello.nostrapp.me/
僕は「Nostrで過ごした2024年」というタイトルの通り、一年間を振り返ってみようと思います。
自己紹介
まず知らん人のために軽く自己紹介をします
「薄味のキャルピス」という名前で、色んな所にいるどこかの高校生です。 左利き、箸とベースとお盆は右手。
普段は学業の傍ら、画像を弄ったり作ったりしている上に、イヤホンを集めたりラジオにメッセージを送っています。
コーディングは出来ないテクノロジーまみれのガラクタ人間(→テックジャンカー)です
参加経緯とスタンス
なぜ参加したのかを思い出しながら書いていきます まず、どんな媒体でNostr(ノスター・ノストラ)の存在を知ったのかと言うと、ネットニュースです。
https://gigazine.net/news/20230425-nostr-intro/
こちらの記事で「そんなのあるんだ」と知り、4月1日ついにjoin!!!!
現時点での参加スタンスは「気楽に、素直に」という感じで参加しています
やりたいときにやりたいことをやるって言うリアルでは到底難しいことを、Nostrのなかでやっている気もします。
後述するNostrasia 2024の開催日「9月23日」を持って、Mastodon(マストドン)から乗り換え、上記のスタンスのもと、メインで精力的に活動しています。
Nostr活動年表
2024/04/01 Nostr Join!!!
2024/06/08 人生初オフ会「たくろうさんオフ」参加、LNアドレス追加。
2024/09/23 人生初小規模イベント「Nostrasia 2024」運営メンバーとして参加
2024/10/12 2度目のオフ会「デザイン談義」主催・参加
簡易的に各種紹介!
人生初オフ会「たくろうさんオフ」 渋三魚金でご飯→猿田彦珈琲でリラックス、Linux使ってると話を切り出す(唐突)→スクランブル交差点で解散。 ウォークマンの再生画面を送付した投稿を行う
人生初イベント「Nostrasia 2024」
あ、記事出したので見てください。初版
第二版
2度目のオフ会「デザイン談義」
秋葉原の「創作空間caféアトリエ あきば店」で行われたオフ会。 ちょくちょく内容を上げているので、見ていってください。 https://nostter.app/npub19ju2u4sduewta4hxl22kke7se8yxm2puytzw47lr6y999pxnpjaqtjjfxj/2024/10/12 終了後、e☆イヤホン 秋葉原店にて、BTR13の在庫状況を確認し、在庫がないため予約しました。 (10月24日到着) 雑多すぎますが、一応こんな感じで大丈夫かな?まとめ
僕がNostrに出会い、Nostrにのめり込むまでの話はいかがだったでしょうか。 Nostrに入る前、オフ会に参加するまでは「ネットにロクな人なんていない!」と思っていましたが、Nostrは違いましたね。 いい意味で期待はずれ、本当にいい人たちばかりで、とにかく自然体で接することができるSNSであると感じました。 そんな世界にぜひとも一回足を踏み入れてみてはいかがでしょうか? それではまた、来年のアドベントカレンダー、及び開催されましたら「Nostrasia 2025」でお会いしましょう。 -
@ 4657dfe8:47934b3e
2024-12-18 13:42:46Alby Hub enables creation of subaccounts, decentralizing trust and creating usecases for shared, community nodes.
Simplifying Bitcoin Wallets for Friends and Family
Alby Hub empowers you to take full control of your bitcoin and manage your payments. Through a user-friendly, self-custodial wallet with a one-click lightning node setup, you can effortlessly connect to dozens of applications. The integrated App Store provides access to popular apps like Amethyst, Damus, Stacker News, Podcasting 2.0, and a wide range of other external tools—all directly linked with your Alby Hub wallet. One of the latest and most exciting additions to Alby Hub is the Friends & Family app.
With the Friends & Family app, you can create subaccounts for friends and family, all powered by your Hub. In just a few clicks, you can set up wallets for them, giving them a smooth onboarding experience and making bitcoin accessible even to those new to the ecosystem. Think of it as a custodial wallet but with a personal touch—since you’re the one managing it, there’s a direct relationship and trust.
These subaccount holders can tap into all the channels and liquidity of your Hub without needing to handle any technical setup. Plus, you can preload their wallets with a few sats, creating a welcoming and smooth experience that’s hard to find elsewhere.
And that’s not all. Beyond providing an intuitive wallet, they can get their own lightning address, configurable payment notifications, access to Alby Go (a mobile app for payments on the go), and the Alby Browser Extension for easy web payments.
Let’s have a look how to set it up.
How to provide a wallet to Friends and Family?
- Open your Hub and find the Friends & Family app in the App Store
- Enter a name e.g. your friend’s name and click “Create subaccount”
- Share the Connection Secret with your friend for the different options
Here are two examples how your the new subaccount can be used.
Alby Go mobile App
Alby Go makes it easy to carry bitcoin in your pocket. This lightweight wallet connects directly to an Alby Hub subaccount, so your friends can pay and check transactions on the go.
Here’s how to set it up: 1. Open the Alby Go Mobile App tab in your Hub.
2. Copy the Connection Secret and share it with your friend if you cannot onboard them in person. 3. Your friend downloads Alby Go for Android or iOS and scans the code.
And that’s it—your friend now has a bitcoin wallet in their pocket, ready for seamless transactions anytime, anywhere. 🎉
Get a Lightning Address with an Alby account
An Alby Account offers a variety of useful features that make managing bitcoin payments easy. Among these are a personalized lightning address and email payment notifications—two powerful tools that help your newly onboarded friends stay connected and informed.
To set up an Alby account for someone:
-
Open the Alby Account tab in your Hub.
-
Copy the provided URL and share it with your friend.
-
Your friend simply needs to create their Alby account and afterwards click on the provided URL.
That’s it! The wallet is instantly connected, and they’re ready to receive payments to their new lightning address. 🥳
Onboarding Family & Friends Made Easy In this article, we explored how to create subaccounts for family and friends, connect them with Alby Go, and set up an Alby account to provide a smooth onboarding experience for your loved ones—all achievable in just a few clicks.
Stay tuned as we dive into more exciting use cases for subaccounts in Alby Hub! If you have ideas for improvement,let us know.
- Open your Hub and find the Friends & Family app in the App Store
-
@ 07804b78:c375c543
2024-12-15 12:56:05Japanese follows. 日本語はあとで。
This article is for the 14th day of Nostr Advent Calendar 2024 (relay blogging). The article for the 13th day was "Open Sats 申請編" (Applying for Open Sats) by mono-san. The article for the 14th day will be "Nostrはじめました。" (I started Nostr) by bro-san.
Thinking of Thingstr
I've come up with an idea for Other Staff that I think is interesting (at least, for me), so I'm going to write about it. I actually wanted to show you the implementation and brag about it, but it's not solid enough to be implemented yet.
The key idea is just “add a reaction to the WikiData ID”.
WikiData
There is a service called WikiData. It is a knowledge base that provides structured data. You may be wondering what it is, but the important thing to understand here is that WikiData assigns identifiers to a fairly wide range of “objects” and “things”.
So, if you can react to this, you can think of various applications just by thinking of it for a moment, right?
For example, the anime series “There are too many losing heroines!” is assigned the ID
Q123819103
. The corresponding page is https://www.wikidata.org/wiki/Q123819103 .(NOTE: The canonical URI for entities on Wikidata is http://www.wikidata.org/entity/Q1142841. This is in accordance with Semantic Web conventions, and is not https, but http. Also, this URI does not necessarily match the actual address of the correspnding web page. Just an identifier. In most cases, it will redirect).
What can wd do?
For example, what about a website that records your anime viewing history? You can record what you want to watch with 👀, what you've already watched with ✅, and your favorites with ☆. You can also express your “likes” for production companies, staff, voice actors, etc. In this way, you can see what a particular user likes.
This could be a movie, a book, a comic, an author, music, an idol group, a place, or food (Someone likes pork cutlet
Q1142841
). The fact that you can record everything in the same framework is what makes it interesting.What form of event should it be recorded as?
There is probably room for discussion about how to record this information in a concrete way. The simplest way would be to use NIP-25's "Reactions to a website" kind:17 (a.k.a. Makibishi). How about something like this?
json [ ["i", "wd:Q123819103", "http://www.wikidata.org/entity/Q123819103"], ]
Since NIP-73 has External Content IDs, it would be good if we could include WikiData here so that we could write
wd:Q123819103
. Actually,isbn:
and other identifiers have already been defined, so it is possible to use the current NIP range to describe books (however, the authors do not have IDs. If we use WikiData as an ID, we can also describe reactions related to the author). Of course, it is not a matter of choosing one or the other, and it is also fine to add the ISBN tag at the same time as the WikiData tag for books.Search for recorded reactions
So far, this is all very simple, but it would be inconvenient if we didn't include tags to mark subsets of reactions (for example, only those related to anime) so that we can query them together. When we try to create a site that is specialized for a certain purpose, we need to be able to extract the reactions that are necessary.
On Wikidata, the predicate
wdt:P31
(instance of) is used to group together concepts that represent the same thing. For example, how about including this in thel
tag? "There are too many losing heroines!" is a "Japanese television anime series (Q63952888
)", so:json [ ["i", "wd:Q1142841", "http://www.wikidata.org/entity/Q1142841"], ["l", "wdt:P31 wd:Q63952888"] ]
UPDATE(2024-12-15): rnurachue-san suggested that
#l
or#L
might be better for labeling (the first version used#a
). I think that's a good idea, so I've updated the article. nostr:nevent1qgswamu0rsela0kwhj87p24ueapxdp04vzz7ar0pp6lfyq923t3l02cqyr9786635s60ra0f973nwv2sln2l74lqx4twdlgxfz2jgevpvsgtc9zwn6dHowever, when you think about creating an anime website, you may want to query both TV anime and anime films. This makes things more complicated. "Japanese TV anime series (
Q63952888
)" is a subclass (subclass of;wdt:P279
) of "Anime series (Q117467261
)", which is in turn a subclass of "Anime (Q1107
)". However, if you were to embed this hierarchy in each reaction, it would waste a lot of space. The following query will get all the superclasses of "Japanese TV anime series (Q63952888
)", but there are 54 of them.https://query.wikidata.org/#%23%20Subclass%20hierarchy%20traversal%20for%20Q63952888%0ASELECT%20%3Fitem%20%3FitemLabel%20%3Fsuperclass%20%3FsuperclassLabel%0AWHERE%20%7B%0A%20%20%23%20Starting%20class%0A%20%20wd%3AQ63952888%20wdt%3AP279%2a%20%3Fsuperclass%20.%0A%20%20BIND%28wd%3AQ63952888%20AS%20%3Fitem%29%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%7D%0A%7D%0AORDER%20BY%20%3Fsuperclass%0A
So, I think it should be okay for practical purposes to embed
P31
s of the reaction target. In other words, if you search for "anime seriesQ63952888
" and "anime movieQ20650540
", that should be enough. Fortunately, the conditions for single-character tags work with OR, so you can query multiple tags at once. we'll have to try it to see how well it works in practice, though.Discussion: Which kind should I use?
So far we have considered using kind:17, but we have not yet decided whether it is a good idea to mix Thingstr events with reactions to web pages.
Also, there may be a debate over whether to record regular events or addressable events, depending on the purpose of use. For example, if you want to record the transition of viewing results and impressions on an anime viewing site, you should use regular events, and if you want to maintain the viewing status, you should use addressable events.
What do you think?
Other ideas
If we can react to Nodes on OpenStreetMap using the same framework, we might be able to create something like Swarm. Since the views you want to see will differ depending on the purpose, it would be good to create various sites while having a consistent way of recording. Wouldn't that be the most Nostr-like thing?
Summary
I discussed how to use WikiData and OpenStreetMap as an ID infrastructure and realize various check-in and review services with a unified data model by using them on Nostr. Please let us know if you have any feedback. Or why not try implementing it?
この記事は Nostr Advent Calendar 2024 の14日目の記事です。13日目の記事はmonoさんによる「Open Sats 申請編」でした。15日目の記事はbroさんによる「Nostrはじめました。」です。
Thingstrについて考えた
面白そうな(と勝手に思ってる) Other Staff のアイディアを思いついたので、書いてみます。 本当は実装を持ってきて自慢したかったのですが、まだふわっとしていて実装に落ちていません。
コアになるアイディアは「WikiData の ID に対して、Reactionをつける」これだけです。
WikiData
WikiData というサービスがあります。構造化データを提供する知識ベースです。 なにそれ?という感じですが、ここで大事なのはWikiDataはかなり広範な「もの」「こと」に識別子(Identifier)を付与している、ということです。
だから、これにリアクションできれば、ぱっと思いつくだけでもいろいろな応用ができそうじゃないですか。
例えば、アニメシリーズ「負けヒロインが多すぎる!」には
Q123819103
というIDが振られています。これに対応するページとして https://www.wikidata.org/wiki/Q123819103 があります。(ただし、WikiData のエンティティに対する canonical な URI は http://www.wikidata.org/entity/Q1142841 であることには注意が必要です。セマンティックウェブの作法で https ではなく http になっています。そして、このURIは必ずしもWebページのアドレス一致しません。大抵の場合はリダイレクトされます)。
なにができるの
たとえば、アニメの視聴記録サイトはどうでしょう。👀は見たい作品、✅は視聴済み、☆はお気に入り、みたいに記録していく。制作会社、スタッフ、声優、...に対してLikeを表明したりできそうです。そうすると、あるユーザが何にLikeしているかわかります。
これが映画でもいいし、書籍、漫画、作家でもいいし、音楽でもいいし、アイドルグループでもいいし、場所でもいいし、食べ物でもいい(とんかつ
Q1142841
が好き、とか)。全部同じ枠組みで記録できるのが面白そうなところです。どういうNostrイベントで記録する?
具体的な記録の仕方には議論の余地があるでしょう。一番単純なのは、NIP-25の "Reactions to a website" kind:17 (Makibishi) を使う方法でしょうか。こんなのはどうでしょう。
json [ ["i", "wd:Q123819103", "http://www.wikidata.org/entity/Q123819103"], ]
NIP-73にExternal Content IDsがあるので、ここにWikiDataを入れられるようにして
wd:Q123819103
と書けるとよさそうです。実はisbn:
などはすでに定義されているので、書籍に関しては現行のNIPの範囲でもうまいことできます(ただ、著者にはIDが振られていません。WikiDataをIDに使うと著者に関するリアクションも記述できます)。もちろん、どちらか一方を選ぶというものでもなくて、書籍にはWikiDataのタグと当時にISBNのタグを付与しておいてもいいと思います。記録されたリアクションを検索する
ここまではシンプルでよいのですが、リアクションの部分集合(たとえばアニメに関連するものだけ、とか)をまとめてクエリできるように、目印となるタグを入れておかないと不便です。ある目的に特化したサイトを作ろうとしたとき、必要になるリアクションが抽出できるようにしておかないといけません。
WikiData では
wdt:P31
(instance of) という述語で、ある概念が何を表しているかをグルーピングしてくれています。例えばこれをl
タグとかに含めておくのはどうでしょうか。負けヒロインが多すぎる!は「日本のテレビアニメシリーズ(
Q63952888
)」なので、json [ ["i", "wd:Q1142841", "http://www.wikidata.org/entity/Q1142841"], ["l", "wdt:P31 wd:Q63952888"] ]
みたいな感じで付与します。
UPDATE(2024-12-15): rnurachueさんからラベル付けには
#l
または#L
のほうがよいかもという提案をいただきました。最初のバージョンでは#a
を使用していました。そのとおりだと思ったので更新しました。 nostr:nevent1qgswamu0rsela0kwhj87p24ueapxdp04vzz7ar0pp6lfyq923t3l02cqyr9786635s60ra0f973nwv2sln2l74lqx4twdlgxfz2jgevpvsgtc9zwn6dただ、アニメサイトを作ることを考えると、テレビアニメも劇場版アニメも両方クエリしたいこともありそうですよね。そうなると話が複雑になってきます。
「日本のテレビアニメシリーズ(
Q63952888
)」は「アニメシリーズ(Q117467261
)」のサブクラス(subclass of;wdt:P279
)で、それがさらに「アニメ(Q1107
)」 のサブクラスになっています。ただ、この階層をいちいちリアクションに埋め込むのと大変なことになります。以下のようなクエリで「日本のテレビアニメシリーズ(Q63952888
)」のすべての上位クラスが取れるのですが、54件もあります。https://query.wikidata.org/#%23%20Subclass%20hierarchy%20traversal%20for%20Q63952888%0ASELECT%20%3Fitem%20%3FitemLabel%20%3Fsuperclass%20%3FsuperclassLabel%0AWHERE%20%7B%0A%20%20%23%20Starting%20class%0A%20%20wd%3AQ63952888%20wdt%3AP279%2a%20%3Fsuperclass%20.%0A%20%20BIND%28wd%3AQ63952888%20AS%20%3Fitem%29%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%20%7D%0A%7D%0AORDER%20BY%20%3Fsuperclass%0A
なので、リアクション対象の
P31
を埋め込む、くらいで実用上は問題ないような気がします。つまり、検索するときに 「アニメシリーズQ63952888
」と「アニメ映画Q20650540
」を対象にすれば、十分では、ということです。幸い、一文字タグの条件はORで効くので、複数を並べて一度にクエリできます。実際にどのくらいうまく行くかはやってみないとわからないですが。議論: どの kind を使うべきか?
一旦 kind 17 を使うことを考えてきましたが、Thingstr のイベントが Web ページに対するリアクションと混ざるのが良いことなのか、いまいち判断がついていません。
また、用途によって regular event で記録するべきか、それとも addressable event で記録すべきか、という議論もありそうです。 アニメ視聴サイトを例にあげるなら、視聴実績とか感想の変遷を記録したいならば regular event でしょうし、視聴の状態を保持したいならば addressable とするのがよさそうです。
どう思いますか?
他のアイディア
これと同じ枠組みで OpenStreetMap の Node に対してリアクションできるようにすれば Swarm のようなものも実現できるかもしれません。
用途ごとに見たいビューは違うだろうから、一貫した記録の仕方を持ちつつ、色々なサイトを作ったらいいんじゃないでしょうか。それって最高にNostrっぽくないですか?
まとめ
WikiDataやOpenStreetMapをID基盤として活用し、Nostr上でreactすることで、様々なチェックインサービス、レビューサービスを統一的なデータモデルで実現する方法について議論しました。フィードバックがあったら教えてください。むしろ実装してみてください。
-
@ ec42c765:328c0600
2024-12-15 11:13:44てすと
nostr:nevent1qqst3uqlls4yr9vys4dza2sgjle3ly37trck7jgdmtr23uuz52usjrqqqnjgr
nostr:nevent1qqsdvchy5d27zt3z05rr3q6vvmzgslslxwu0p4dfkvxwhmvxldn9djguvagp2
-
@ ec42c765:328c0600
2024-12-13 08:16:32Nostr Advent Calendar 2024 の 12日目の記事です。
昨日の 12/11 は きりの さんの 2024年のNostrリレー運営を振り返る でした。
nostr-zap-view 作った
リポジトリ: https://github.com/Lokuyow/nostr-zap-view/
動作確認ページ: https://lokuyow.github.io/nostr-zap-view/それ何?
特定の誰かや何かに宛てたZap(投げ銭)を一覧できるやつ
を
自分のWebサイトに設置できるやつ
自分のサイトに設置した例 * SNSリンク集ページ(最下部): https://lokuyow.github.io/
おいくらサッツ(Zap一覧ボタン): https://osats.money/
今日からビットコ(最下部): https://lokuyow.github.io/btc-dca-simulator/なんで作ったの?
私の去年のアドベントカレンダー
【Nostr】Webサイトにビットコインの投げ銭ボタンを設置しよう【Zap】
https://spotlight.soy/detail?article_id=ucd7cbrql/
が前提になってるけど長いので要約すると * ZapするやつはあるけどZap見るやつがないので欲しい * ZapをNostr(の典型的なkind:1クライアント)内だけに留めるのはもったいない * Webサイトの広告うざいからZap(的な何か)で置き換わって欲しいお前だれ?
非エンジニア、非プログラマー
AIにコード出させてるだけ人作った感想
できた
作った感想2
完成してから気付いた本当に作りたかったもの
こういうところにそのままZapを表示できる感じにしたい
(ここまでちゃんとした商業ブログでなく)個人のブログやHPの端っこに「Sponsored by」欄があって名前が表示される感じ
もうZapっていう文字もビットコインっていう文字もNostrも出さなくていいし説明もしなくていいのでは感がある
イメージはWebサイトを対象にしたニコニ広告 + スーパーチャット + 祭りとか神社の奉納者一覧
で思ったのは
個人からの投げ銭なら推し活的なものにしかならないけど
企業がNostrにアカウントを作ってサイトに投げ銭をしたら企業の広告になるんでは!?
~~企業がNostrにアカウントを!?デリヘルしか見たことない!~~今後
思いつき、予定は未定
* ボタン→ダイアログ形式でなくバナー、Embed形式にしてページアクセスですぐ見れるようにする * 多分リレーに負荷がかかるのでなんかする * Zapの文字は出さず「Sponsored by」等にする * 単純な最新順でなくする * 少額Zapをトリミング * 一定期間(一か月など)ごとで金額順にソート * 多分リレーに負荷がかかるのでなんかする * 今は投稿宛てのZapをWebサイト宛てのZapと勝手に言い張ってるだけなのでちゃんとWebサイト宛てのZapにする * NIPの提案が必要 * ウォレットの準拠も必要 * リレー(wss://~)宛てのZapもできてほしい将来
インターネットのすべてに投げ銭をさせろ
おわり
明日は mono さんの Open Sats 申請編 です!!
-
@ a80fc4a7:dc80ebd1
2024-12-10 07:40:32I have noticed a pattern lately that makes me kind of sad, It seems Photography and Real photos are becoming harder and harder to find these Days, With the rise of AI And Computer generation. If you go to Google or any Search engine and simply Search "Nature Photos" you will get largely AI Photos or heavily altered images, it's almost as if it was programmed this way, is nobody taking real photos anymore? Or is Google simply trying to replace real art and real photos with AI? This honestly puzzles me and worries me, has anyone else noticed this? Or is it just me. Was it always this way on Google?
-
@ f0c7506b:9ead75b8
2024-12-08 10:03:35-
Bazı şeyleri yapmak, söylemekten daha kolaydır.
-
Bütün güzel şeyleri bize toprak verir. Bütün güzel şeyler toprağa geri döner.
-
Eğer mevsimlere bakarsanız her mevsim meyve getirir. Yazın meyve vardır, sonbaharda da. Kış farklı meyveler getirir, ilkbahar da. Hiçbir anne çocukları için bu kadar çok çeşit meyveyle buzdolabını dolduramaz.
-
Kendimi bu hayattan kurtarmaya karar verdim. Ne için mi? Bu anlamanıza yardım etmeyecektir ve bunun hakkında sizinle konuşamam; anlayamazsınız. Anlamayacağınız için değil; çünkü benim hissettiklerimi hissedemezsiniz. Duygularımı anlayıp paylaşabilirsiniz, bana merhamet gösterebilirsiniz; ama acımı hissedebilir misiniz? Hayır. Acı çekersiniz ve ben de çekerim. Sizi anlarım. Acımı anlayabilirsiniz; ama onu hissedemezsiniz.
-
İnsanın devam edemeyeceği bir an gelir.
-
Birisine yardım etmek istediğiniz zaman bunu uygun biçimde yapmalısınız, bütün kalbinizle. Bu daha iyidir. Daha adil ve daha makul.
-
İntiharın en büyük günahlardan birisi olduğunu biliyorum. Fakat mutsuz olmak da büyük bir günah. Mutsuzken başka insanları incitirsiniz. Bu da bir günah değil mi? Başkalarını incittiğinizde bu bir günah değil midir? Aileni incitiyorsun, arkadaşlarını, kendini incitiyorsun. Bu bir günah değil mi? Size yakın olan insanları incitiyorsanız bu da büyük bir günahtır.
-
Yardım, mutlaka karşılığı ödenmesi gereken bir şey değildir.
-
Size başımdan geçen bir olayı anlatacağım: henüz yeni evlenmiştim. Belaların her türlüsü bizi buldu. Öylesine bıkkındım ki her şeye son vermeye karar verdim. Bir sabah şafak sökmeden önce arabama bir ip koydum. Kendimi öldürmeyi kafama koydum. Yola koyuldum. Dut ağaçlarıyla dolu bir bahçeye vardım. Orada durdum. Hava henüz karanlıktı. İpi bir ağacın dalı üzerine attım; ama tutturamadım. Bir iki kere denedim ama kâr etmedi. Ardından ağaca tırmandım ve ipi sımsıkı düğümledim. Sonra elimin altında yumuşak bir şey hissettim: Dutlar. Lezzetli, tatlı dutlar. Birini yedim. taze ve suluydu. Ardından bir ikincisini ve üçüncüsünü. Birdenbire güneşin dağların zirvesinden doğduğunun farkına vardım. O ne güneşti, ne manzaraydı, ne yeşillikti ama! Birdenbire okula giden çocukların seslerini duydum. Bana bakmak için durdular. "Ağacı sallar mısın?" diye bana sordular. Dutlar düştü ve yediler. Kendimi mutlu hissettim. Ardından alıp eve götürmek için biraz dut topladım. Bizim hanım hâlâ uyuyordu. Uyandığı zaman dutları güzelce yedi. Ve hoşuna gitti. Kendimi öldürmek için ayrılmıştım ve dutlarla geri döndüm. Bir dut hayatımı kurtarmıştı.
-
Bir türk, doktoru görmeye gider. Ve ona der ki: "Doktor bey, vücuduma parmağımla dokunduğumda acıyor, başıma dokunsam acıyor, bacaklarıma dokunsam acıyor, karnıma, elime dokunsam acıyor." doktor onu muayene eder ve sonra ona der ki: "vücudun sağlam; ama parmağın kırık!"
-
Hayat dümdüz ilerleyen bir tren gibidir; rayların sonuna geldiğinde son durağa ulaşır. Ve ölüm son durakta bekler. Elbette, ölüm bir çözümdür; fakat ilk olarak değil. Genç yaşta hiç değil.
-
Dünya göründüğü gibi değildir. Bakış açınızı değiştirmelisiniz ki dünya değişsin. İyimser olun. Her şeye olumlu tarafından bakın.
-
-
@ 28313968:7e036f8d
2024-12-08 09:39:08This event has been deleted; your client is ignoring the delete request.
-
@ 58937958:545e6994
2024-12-08 07:57:42Making Waves:Bitcoin-themed handmade goods
nevent1qqs04vf85pyducj8h4s49g2ex84r6dvzenjjg4m7wrd9g955506r36cpz4mhxue69uhhxarjvee8jtnfwf5hxtn5duhsygzcjdu4sqmvah54tvjmj22c8q2qhgk74judryu7mydyr039ghnfjs09g2yq
20081031
This bag is inspired by the Bitcoin White Paper.
「20081031」
— Making Waves (@MakingWavesBTC) November 23, 2024
Price:210,000 sats
Limited to 21 pieces
Free Shipping
I will produce and sell one per week.#ProofOfHandmade #MakingWavesBTC pic.twitter.com/9mKtsYJft3For details, please visit ↓
https://makingwaves-btc.com/en/
Sales have also started at Geyser. https://geyser.fund/project/makingwaves
Sales on Shopstr is also planned.
BitcoinTokyo2024
I exhibited at "Shibuya Lightning Marche" in Japan and made sales of 1,885,314 sats (approximately $1,181 at the exchange rate on the day) over two days.
Handmade goods by MakingWaves (Example)
— Making Waves (@MakingWavesBTC) September 21, 2024
・Bookmark
・Coaster
・COLDCARD Q case
・Japanese-Style Drawstring Bag
Enjoy the Lightning Marche🧸#BitcoinTokyo2024#渋谷ライトニングマルシェ pic.twitter.com/qqNXAT0nWNMoving forward, I will focus on selling items priced at 2,100 sats, 21,000 sats, and 210,000 sats.
- 2,100 sats: Bookmarks, beginner-friendly Bitcoin comic booklets, etc.
- 21,000 sats: Pouches, and similar items.
- 210,000 sats: Limited-edition bags, and more.
Short Video:Bitcoin Handmade Anime【MakingWaves】
A short animation for Bitcoin beginners & kids.
Bitcoin guide site for beginners:bitcoin-zukan.com
Although the site is in Japanese, there are many articles translated into English.
Supervised by Koji Higashi, co-organizer of BitcoinTokyo2024.
Podcast:Grassroots Bitcoin
A podcast supporting grassroots Bitcoin activities.
While most episodes are in Japanese, the episode listed below is in English.
Introducing "MakingWaves" https://www.fountain.fm/episode/7si9y8sxmWmhfK8CeMQ8
Podcast URL * Fountain:https://www.fountain.fm/show/eWVWc2vZXycjPlMTZsLf * Spotify:https://creators.spotify.com/pod/show/shigeru-minami * Apple Podcast:https://podcasts.apple.com/us/podcast/%E8%8D%89%E3%81%AE%E6%A0%B9%E3%83%93%E3%83%83%E3%83%88%E3%82%B3%E3%82%A4%E3%83%B3/id1757540844
Other activities, SNS, etc.
Twitter(English):Making Waves
“20081031”
— Making Waves (@MakingWavesBTC) November 26, 2024
No.1/21 Completed!
I adjusted it so that the word bitcoin is printed on the back of the outer pocket as well.
I think it will be useful when showing it to fellow bitcoiners. pic.twitter.com/00ejMN6s2HI post about handmade goods.
https://x.com/MakingWavesBTC
Twitter(Japanese):Shigeru Minami
COLDCARDでビットコインを受け取り・送金する解説動画を
— Shigeru Minami (@kiterugumatic) October 21, 2024
YouTubeにアップしました
私は操作する度に緊張する上に結構間違えるので
どなたかの役に立つかもと思って作りました pic.twitter.com/7UFnClknSUI mainly share posts about Bitcoin, along with personal updates.
https://x.com/kiterugumatic
Nostr:Shigeru Minami
nostr:nevent1qqszzcz9npq5xgw08tp5wud0kg9wfacf9fkj07gu82wn3wjsad3wd2cppvjdw
My posts are mostly personal.
As I’m practicing English, I try to post without using translation tools as much as possible.
Please forgive any awkward or hard-to-read sentences.
npub1tzfhjkqrdnk7j4djtwfftqupgzazm6kt35vnnmv35sd7y4z7dx2qzhkje9
Instagram(English):Making Waves
I share short videos of the handmade goods production process.
https://www.instagram.com/making_waves_btc/
Note
The illustrations on bitcoin-zukan.com and my SNS icons were created by a commissioned illustrator.
All other activities are personally handled by Shigeru Minami.
Examples include handmade crafting, video production, article writing, product photography, designing original fabric, and creating illustrations for my original characters, "Bull & Bear."
For inquiries, please feel free to contact me via the SNS platforms mentioned above or the email address provided below.
E-mail:contact@makingwaves-btc.com
Thank you for reading all the way through.
-
@ 8fb140b4:f948000c
2024-12-08 05:21:39After nuking my second LND node (the first one died due to hardware failure) by my own typo and lack of any thought in the design of the CLI of LND lightning node tools, I decided to take a plunge into the world of mature and complex implementation of the protocol, Eclair by ACINQ. It has been almost one year (the birth of the node was on Christmas Day 2023), 50 thousand transactions routed, and over 30 BTC of routed value. In this post, I'd like to reflect on my experiences with Eclair, go over some of the gotchas and issues, and highlight some of the good choices that I've made since the beginning of my adventure.
Learnings from the Past Experience
While I was learning Lightning network and had very little understanding of how things worked in the whole Bitcoin space, Umbrel was my go-to solution that helped me get off the ground. It proved to be easy and somewhat educational but was not something that I would continuously run for the production setup or trust with any significant amount of bitcoin that I could not afford to lose. Lightning is built on top of the L1 (Bitcoin) network but manages the state of the channels in its own database that is negotiated and agreed upon with its peers. Any failures in the state integrity may result in the complete loss of liquidity or hefty penalty transactions (significant loss of capital). A Lightning node that participates in routing public transactions is also required to be constantly online with as little downtime as possible and only short periods offline at a time. Otherwise, you may risk causing force-closure of the channel due to expired HTLC that is measured in number of blocks.
The Setup
Taking all of my learnings into consideration, I decided to first invest in reliable enterprise-grade hardware: - Server-grade hardware with ECC memory and reliable power supply and CPU - UPS (Uninterruptible Power Supply) to avoid any headaches due to electrical spikes or drop-outs - Reliable enterprise SSDs and NVMEs - ZFS (filesystem) to mirror the critical storage and to ensure full integrity of the data (bit-rot prevention). You do need to tune ZFS for your specific workload and reliability - Reliable and replicated database (PostgreSQL) with two local and one remote replica, and a requirement to have at least two replicas committing the transaction to the disk - Backup! On-site and off-site backup of the critical configuration that you could use to restore the node if your house burns down - Spare parts, redundancy, backup, monitoring - Reliable and stable internet connectivity
The software is Eclair 0.11.0 (latest release as of today), PostgreSQL 16 with two replicas, Bitcoin Core 27.2 (with redundant storage of blocks), additional Bitcoin Core running on a separate node and in-sync with the chain (in case primary node fails), Ubuntu 22.04 with the latest docker software from the official Docker repo.
All Major Gotchas That I Came Across
While Eclair is mature and very stable in itself, it does have some quirks and design choices that you need to account for when running your node. The software is written in Scala and requires a specific version of JVM to run it, as well as JRE and Maven to build it. It doesn't mean that other versions won't work, but you may find unpleasant bugs that may result in catastrophic failures of your node with nobody to help you. All of the requirements are listed in the release notes and installation guide. Whenever in doubt, RTFM first, then ask questions.
Limited Support by the FOSS Community
Eclair is not the most popular implementation of the Lightning protocol, and therefore it is hard to find tools or plugins that could help you manage the node. GUI for the node so far is only supported by RTL and with a very limited number of features. For any sort of statistics, you are limited to either Prometheus (extensive metrics are available) or writing your own SQL on top of the Eclair tables.
On-chain Fee Differences Between Yours and Partner Nodes
This one hit me hard, and many times. I've had more than a few force-closures of the channels because of the conservative and safe default settings. The worst part is, it strikes you when there is a huge spike in fees, which results in significant losses to force-close the channel due to high fees. I am still not 100% sure how the big difference can be exploited in practice, and opted for increase of the tolerance levels to avoid surprise FCs:
eclair.on-chain-fees { feerate-tolerance { ratio-low = <0.01~> // will allow remote fee rates as low as XX our local feerate (spikes) ratio-high = <20.0~> // will allow remote fee rates as high as XX times our local feerate (drops) } }
It is up to you and your risk tolerance to define something reasonable and yet allow for secure and reliable node operation.Initial Lightning Network State Sync
When I just started running the node, I had very few channels and startup times were fast. Later, when I expanded the number of channels, I noted that it took my node up to 6-12 hours before it was fully in-sync and routing traffic fast. Given that ACINQ maintains one of the largest nodes on the network, I knew that there was something with my settings that caused the issue. After some research, I came across the setting that whitelisted node IDs for state sync, which immediately rang a bell since I knew from the LND days that not all peer nodes are used for the network sync. Setting the list to my most reliable and largest nodes reduced the startup settling times down to minutes again:
eclair.sync-whitelist = [ "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f", ... ]
You do not need to have too many public keys in here, and should keep it between 5-10.Automatic MAX HTLC Adjustment for the Channel
One of the killer features of Eclair is its ability to automatically adjust MAX HTLC for the channel and reduce the number of failed transactions due to insufficient liquidity on the channel. It can be used to estimate your total channels' balances but with smart configuration and a little thinking, you can make it reasonably private while still maintaining a good transaction flow:
eclair.channel.channel-update.min-time-between-updates=1 hour # Allows for the adjustments to be made once every hour eclair.channel.channel-update.balance-thresholds=[ { available-sat = 10000 max-htlc-sat = 0 // 0% of 10000 }, ... ]
You can have as many variations as you need, and ensure that the channel MAX HTLC is set well and within reasonable ranges. You would also want to account for multiple transactions going through the channel, but also account for the channel size and an average amount of sats per transaction.Max Accepted HTLCs
By design, the Lightning channel is limited to a specific number of in-flight HTLCs, and the setting is fixed during channel opening time with no way of changing it unless you close and reopen the channel with new settings. If you find your node routing a lot of small transactions (zaps), you may quickly fail many due to that limit (I think default was in single digit range):
eclair.channel.max-htlc-value-in-flight-percent=98 # Default I think is half or 50% eclair.channel.max-accepted-htlcs = 50
The setting above will allow for the channel to be more fully utilized and have more concurrent transactions without clogging.CLTV Delta
This is basically a setting that is global for Eclair and sets the maximum number of remaining blocks (in time) before HTLC expires. Setting this too high may result in many HTLCs failing for the small nodes with not so great centrality, and reduce the number of routed transactions: ```
CLTV delta
eclair.channel.expiry-delta-blocks = 60 ``` Default is 144 but I found that setting this to 60 (minimum possible for my node setup and configuration) yields better results for routing. It does expose you to more risk of expired HTLCs that may cause force-closures, but I have seen only one so far on my node.
Allocate Sufficient Memory
You will want to adjust the heap size for Eclair, since the default is too small to run any sizable node. Setting
JAVA_OPTS=-Xmx32g
(or half the size of your available RAM) would be a good start. I would advise having at least 32GB of RAM for the node, and allocating at least 16GB (JAVA_OPTS=-Xmx16g
) for smooth and fast operations.And More Settings and Parameters to Tune
I have covered only some of the major settings that I felt were worth writing about, but there is much more you could configure and tweak. Read all of the Guides and especially focus on the Configure and a sample reference configuration file.
Good Decisions
First, going with Eclair was the right choice, along with using server-grade hardware with ECC RAM and reliable storage. Second, having a replicated database on three separate nodes with one off-site saved me from a sure destruction of all state and loss of funds. Third, deciding to only maintain channels with reliable and stable nodes saved me from some bad force-closures, where I would choose to close the channel if a peer node goes up and down too frequently, regardless of how well it routes. Even big nodes run by single operators fail badly, as do nodes operated by companies. Keeping your eyes on the node and its health, as well as the health of its peers, is something that very few operators do, which can cause failures and unnecessary loss of your and their funds.
Lastly, if you decide to run a routing node, you have a responsibility to maintain it well and monitor its health. There are many tools you could use, and with Eclair you can use Prometheus and Grafana. Keep your node's packages updated and monitor for any security-related issues that may appear from time to time, so you can mitigate them quickly.
Conclusion
So far I am satisfied with Eclair despite all of the difficulties and headaches I've had with it. It is not perfect, and it requires me to create small tools to do some basic things, but I need a stable and reliable node that I can trust. Eclair has proved to be all that I wanted, and saved my bacon a few times when I nuked one of the PostgreSQL servers and all of its data, and managed to do the same for another replica, but was able to recover and recreate from the remaining replica. Eclair is also stateless during runtime and guarantees consistency of the node regardless of how it fails. Even if you pull a plug on the node's server, it will still be able to come up and recover its consistent state that is in agreement with its peers.
Is it for everyone? No, it is definitely not for everyone or for anyone who just wants a small node to run their online shop with a few channels. You could have a very reliable and trusted node for the online shop with Eclair, but you will need some technical skills to be able to set up, maintain and recover it if things go wrong.
In the end, it is all up to you, your skills, your willingness to learn, and your risk tolerance to make that decision. For me, it was the right choice, and I have no regrets despite not having access to the latest shiny features of the Lightning network.
-
@ 65beb8bb:55cf5527
2024-12-06 06:25:01Test1
-
@ 6b0a60cf:b952e7d4
2024-12-05 11:16:09フォロワーリストを低コストで取得する仕様を考える
Nostr リレーはフォロワー数をカウントしたほうが良いを受けて考えたことを雑多に書き留めておきます
単一リレーの場合
NIP-45 COUNT を使う
短所
- 単一リレーで数えた総数でしかない
- 現時点では数を返すのみ
- 複数リレーでマージできるようにidsを一緒に返そうという提案もある
{"#p": <pubkey>, "kinds": [3]} でREQする
短所
- 単一リレーで数えた総数でしかない
- フォロワーの数だけクソデカイベントが返ってくるので時間がかかるしギガが減る
複数リレーの場合
{"#p": <pubkey>, "kinds": [3]} でREQする
長所
- 複数リレーでマージできる
- そこそこもっともらしいフォロワーリストが取れる
短所
- 一度でもフォローをしたことがある人のリストでしかない(後にアンフォローしたかもしれない)
- nostr:nevent1qqs829n0s3qa3wegnhpf6haz3t87hn9huznldd4x2ld6c0d02uq09gsge47l7
- リストすべての公開鍵で接続リレーとkind3を調べ直してアンフォローされている場合を除く処理をすればそこそこ正確になる
- 大変すぎる
- 未調査のリレーにフォロワーがいるかもしれない
新しいkind(フォロワーを格納する)を新設する
仮にkind1003とする
kind3と同じ構造とする{ "kind": 1003, "pubkey": "<Aさんの公開鍵>", "tags": [ ["p", "<Bさんの公開鍵>"], ["p", "<Cさんの公開鍵>"], ["p", "<Dさんの公開鍵>"] ], // other fields... }
で、これ誰が作るの?
リレーが作る
- pubkeyにはAさんの公開鍵を入れることになるけど、署名するにはAさんの秘密鍵が必要だよ?
- 無理
クライアントが作る
- Rabbitやnostter等のクライアントにはプロフィール画面でフォロワーのところをクリックするとフォロワーの取得が始まる
- その際、構築したフォロワーリストをkind1003イベントとしてリレーに送ってしまえば良い
- リレー毎でなく複数リレーのマージした結果であるが、その方が有用だろう
- でもkind1003を作成した時期はアカウント毎にバラバラになってしまうね
誰が嬉しいの?
- クライアントは恩恵を受けない
- 本来kind1003の恩恵を受けるべきクライアント自身がkind1003を作らなくてはならない
- 統計調査に興味がある人が満足する
- そのためだけに各クライアントを使用するユーザーの端末のリソースを使う価値があるかどうか
そもそもリレーである必要があるだろうか
- リレーはシンプルであるべきだが、リレーに高機能を求めること自体は否定されるべきことではない
- NIP-50のように検索に特化したリレーもある
でもこの統計情報ってWebSocketで送られてくるべきものだろうか?HTTPで良くない?
リレーである必要すらなくて、REST APIを提供するサービスがあれば十分だよね?
外部サービスとして独自にデータを集めているサービスは既にあるこれをNIPにする必要があるだろうか
- WebSocketやリレーが登場しないからといってNIPに定義してはいけないなんてことはない
- 例: NIP-96
- しかしNIPというのは仕様を共通化して共有するためのものであり、複数の実装を期待するものである
- 統計API提供サービスなど1つあれば十分で、耐検閲性を目的として10個も100個も存在を期待されるものではない
-
@ 148755e6:450c107f
2024-12-05 10:09:32突然荒野に行きたくなったので行ってきたエントリーです
まずは練習。高尾山へ
Nostrは古今東西ありとあらゆるオフ会が生えており、
まるで荒野に行きたいという私の意志を完全に汲み取ったかのように「紅葉を見にいこうようオフ」がそこに生えていたので参加した。(しおんさんご主催ありがとうございました)
前半1時間くらいの坂道がマジきつかったです。前半キツすぎて後半足痛かった。。 終始人がいっぱいいて渋谷かと思った。
確かに道がかなり整備されていて、逆にコンクリート故に足が疲れたのかもしれない。隣の人は途中の急な坂道で足を滑らせてて、横で転倒事故が起きるかと思いました。
山頂に行っても人がたくさんいて、迷子になりかけた。あそこはスクランブル交差点や。 そして山頂の先にあるもみじ台まで歩くと人がまばらで、まったりして蕎麦食べたりしながら休憩して下山。
登りは暑くて汗かきましたが、山頂でまったりしてると汗も引いてきて少し冷えました。
下山はスイスイ。16時近くで結構暗かったので、冬の間は早めの登頂・下山がおすすめですね。
登り2時間・下り1時間半で概ね見込み通りって感じでした。
高尾山は登ってると景色が変わります。ちょっと開けた場所に出て下の街が見えたり、草木があったり、階段があったり、参道があったり。。そういう意味では退屈しない2時間でした。
ビギナー山とはいえ、革靴やヒールのある靴で登ってる人がいてびっくり。ツルッと滑ることあると思いますので、スニーカーで登ることをお勧めします。
舐めプしてたとはいえめちゃくちゃキツかったおもひで。
更なる練習。小浅間山へ
さて私は荒野に行きたいワケなのですが、高尾山に荒野はありませんでした。更なる練習として小浅間山へ。
前日(か前々日)に雪が降ったようで、山に雪が残っておりました。
それでも都内の汚れてべちゃっとした感じの雪ではなく、粉砂糖がちょっと積もってるみたいな感じで綺麗だった。
登り前半の30分くらい、景色や道が変わらず、ずっと歩きっぱなしになってしまいました。時間みて休憩しながら行けばよかったなあ。
登るにつれて気温が下がっていくのか、積雪が厚くなっていく。
40分くらいは割と平坦な道が続きますが、突然山頂っぽいものが現れて、「これを登れっていうのかい...?」とビビるほどピーンと急な道が出てきました。(写真だと分かりづらいですね)
ただ、高尾山のコンクリート道に比べると足の疲れはそこまででした。雪道なので気をつけて歩くという意味では疲れましたが、春〜秋とかは快適に登れるんじゃないでしょうか。
山頂に到着するとドーンと浅間山が見えて圧巻。
風が強くて飛ばされる恐怖はありましたが、なんとか無事でいられました。あったかいお茶美味しかった〜。
なぜかギャルの看板があって、謎でした。写真はひとまずありません。
山頂が2箇所あって、それぞれで眺めを満喫していたら結構時間が経ってました。
小さい背丈くらいの木や足元にちょっとした植物があったり、自分的にはかなり理想の荒野に近かったです。(植物に対する解像度が低すぎる) 往復で2時間程度の山らしいんですが、なんやかんやと2時間半強くらいいた気がします。
荒野ビギナーは小浅間山に往け
というわけで、荒野に行きたい人はまずは小浅間山を登ると良いと思います。 また登りたい。
荒野部部長
一緒に高尾山・小浅間山に登ってくれた方、ありがとうございました! 個人的には来年の春までに秩父多摩甲斐国立公園に行き、来年の秋までに大山隠岐国立公園に行くという目標を立ててるんですが、 少々時間が空くので次どこに行こうかしらと考えているところです。
ヒントとしては、火山で、あまり高低差のないところだとビギナーの私にちょうど良さそうです。
とある情報筋によると伊豆大島が良さそうなので、次の機会に行けたらと思っています。
みんなで荒野に行こう!
-
@ e0a8cbd7:f642d154
2024-12-04 15:42:58これは「Nostr Advent Calendar 2024」5日目(12月5日)の記事です。
2024年にNostrにのみ投稿した絵で今年を振り返りたいと思います。 あえて、タイトルのみで、なぜその絵を描いたかなどの絵の説明は書かないことにします。
1月2日 ブルルッチモ大噴火!
1月9日 Macの箱を開けながら、ギャォォォォンって叫ぶぺぇさん。
1月12日 便器の上で踊るサボテンになったぽーまんさん。
1月15日 空飛ぶつるるん。
1月23日 ぽわどん
1月26日 Lokuyow said "I am a pen."
1月28日 ロクヨウ「早く人間にのりたい」
1月31日 小さなmonoから大きなmonoまで
2月1日 しおさん、巨象恐怖症
2月1日 枕を積んで寝るDonさん。
2月4日 ブロッコリの逆襲
2月8日 びっとこダチョ太郎
2月13日 虹色カレーを食べて虹色になったロクヨウさん
2月13日 ロクヨウさん誕生秘話
3月5日 人参と椎茸たべるロクヨウさん
3月5日 まきうさん、ロクヨウさんに乗って東京へ
3月26日 ごはんの上のめんたいこぽーまん
3月26日 ポワニッチモ
4月4日 上司にズラしていくことを許可されて朝の悩みが増えたぺえさん
5月7日 とうふさんが演じる「お洋服とっかえひっかえして遊ぶりとりんとやぶみん」
6月20日 ソファーと一体化するポーマンさん
6月21日 つるるん食べていい?
6月28日 ぽーまんさん、たいきんのまい
7月5日 ソファから剥がれて出発するぽーまんさん
8月10日 ぽーまんさん、床のコスプレ
8月18日 アルパカプリン
8月23日 とうふさんが演じるやぶみちゃんの日
8月23日 神妙な顔のぽ-まんさん
8月26日 恋のアルパカキューピット
8月27日 仲良く激辛火鍋
8月28日 Microsoftが「Mono」をWineチームに寄贈
9月12日 もの発射
9月19日 ロクヨウさんヒツジ化
9月20日 ゴリラ食べてバナナになったロクヨウさん
10月13日 頭が増えるぽーまんさん
10月24日 カメムシと青いうさぎ
10月25日 ATMとお話しするポーマンさん
10月26日 パペェ
10月26日 ぺどがわさん
11月7日 伸び縮みぺぇ
11月10日 座布団で寝るぽーまんさん
11月17日 5等分のぽーまん
11月27日 ルンバブルな部屋
11月28日 7人のぽーまん、那月さんに祓われる
11月29日 捕鯨ぽーまん
11月30日 ぽーまんさん脳内のゴミカスサンバ♪
楽しい1年でした。
Nostrのみなさま、たのしい話題をありがとうございます。
明日の「Nostr Advent Calendar 2024」は、OHASHI Hideyaさんです。
しーゆー。 -
@ 26bb2ebe:70530958
2024-12-02 16:46:10nostterに画像最適化機能つけたよ(サーバー編)
この記事はNostr Advent Calendar 2024 の3日目の記事です。
あまり技術的な話はないので暇つぶし程度に読んでみてください。
どうしてこうなった?
そもそも認証の改善以前にNostrあんまり人が増えてないのが一番課題だよねと思ったのが始まりでした。 Nostrに人が増えないのはオーガニック検索流入が少ないからに違いないと特に根拠もなく思ったのでNostrのまとめサイト(Toggeter)のようなものを作ろうと考えました。
ところでNostrのまとめを行うアプリ自体は鎌倉さんという方がノスリというのを作成されていました。ブログ形式のイベントにTwitterライクな短文投稿をまとめるというものでまさしくToggeterですが、そこまで活用されていません。 そこでその仕組みをありがたくそのまま転用してまとめ記事を何らかの方法で量産しつつ、一つのドメインのサイトにまとめてSEOもなんかうまいことやれば検索流入増えるんじゃねという目論みです。
ところでそのまとめサイトは静的サイトジェネレータで(SSG:Static Site Generator)でつくりたいなと思いました。いや普通に考えてSSRにしてサーバ側でNostrからデータとってきたらSEO的にもよくねって感じなんですが、SSRでサーバーでウェブソケット呼ぶのだる…レイテンシを考慮すると結構不利じゃないかなと思ったわけです。うそです。そこまで考えてなくてほとんど個人的な好みです。(多分ちゃんとキャッシュきかせればそんなにレイテンシ問題にならなさそうな気がする)。ただキャッシュとかも考慮すると結構複雑な気はする。
ということで今年の6月頃にNostrのブログ記事をSSGするサイトをためしに作りました。 去年のアドベントカレンダー記事とか乗っけてます。
全然画像最適化の話になりませんね。もうちょっとです。
SSGのブログといえばGatsby(今は下火かも)とかで作成した経験があります。Gatsbyでは画像用のプラグインが公式に用意されていて生成されたブログに表示される画像はもとの画像データから変換され、表示時のサイズに最適化されたサイズにリサイズすることができます。
それだけではなくサイトの初期表示時には画像の画質を落としてぼやけた画像を表示してその後元画像が読み込まれたらきれいな画像を表示する、みたいなことができます。インラインでデータを持っているのでHTMLの表示と同時に画像の初期表示ができたりします。(その頃はよくわかってなかったがNostrのNIP-92で定義されているblurhashとかを使っていたんでしょう多分)
とにかくSSGは初期表示の速さが良い。というのが自分の頭の中にあるわけです。SSGのブログをNostrで作るとなると当然同じことがやりたい。
しかし、Nostrの画像はただのURLです。(オプショナルで画像のメタデータを定義できるimetaタグはあるが…)
基本的にSSGの画像最適化というのはローカルに存在する画像データをビルド時に変換するという流れで行われます。もしくはリモートURLに画像が置かれる場合は画像ストレージサービスやCDN上で配信されるときに最適化されることになります。
Nostrの画像はただの外部のURLですから(2回目)、ローカルの画像を変換する方法は採用できないわけです。無理やり実行するならビルド時にURLからすべての画像を一旦ダウンロードして変換するとかも考えましたが、ただの外部URLというのはつまりは一体どういうファイルなのかダウンロードしてみるまでわからない、要するに全然信頼できないということですから、よくわからないURLをかたっぱしからダウンロードするようなことは避けたいわけですね。(極端な話100GBの画像URLとかつくって攻撃されたら破綻しますよね)
ここが結構他の中央集権的なSNSと違って辛いところなのかなと思います。X(Twitter)とかであれば画像ストレージサーバは一つなので表示される画像の形式も一つに限定されるのですが、画像のアップロードが外部頼みでただのURLなので(3回目)何が来るかわからないということですね。
サーバ側で画像形式などを制限できない(imetaも信頼できるかわからない)となるとクライアント側でなんとか対応する必要があり、Nostrはクライアント側が大変なプロトコルだなあとということに思いを馳せていましたが、いろいろ考えたり調べた結果として作るべきものは画像最適化のためのプロキシサーバであるということがわかりました。
プロキシサーバというのはここでどういう働きをするのかというと、もとの画像がおいてあるサーバとクライアントのあいだに入って、もとの画像を一旦ダウンロードして圧縮したり縮小したりしてそのあとクライアントに送ってあげるという働きをします。
プロキシがないとき
[画像置き場] -> [クライアント]
プロキシがあるとき
[画像置き場] -> [プロキシ] -> [クライアント]
利点としてはクライアントが実際にダウンロードするのはサイズの小さな画像になるので通信量や画像の表示スピードは改善します。が、一方でサーバを経由する分通信にかかる時間(レイテンシ)が長くなります。というわけなので、当初の目的である表示速度の改善を実現するには、画像をエッジキャッシュするなどの対応が必須となります。平たく言うと一度送った画像はプロキシで保存しておいて次に要求されたらそれをすぐ返すということです。
画像をどれくらいのサイズにするか、画質はどうするかなどはプロキシに指示してあげれば良いのでクライアント側は想定通りの画像を受け取れてハッピーということになります。嘘です。ある程度はハッピーですが、プロキシ自体がエラーを返す可能性もあるし、処理できなくてもとの画像をそのまま返す場合もあります。そんなあれこれの結果、クライアントはフォールバック処理を実装する必要がありました。(それはまた別の記事で)
一方で自分はNostrのモバイルクライアントのヘビーユーザですので、Nostrの通信量の多さも解決したい課題でした。Nostrやってるとすぐギガがなくなります。 通信量の多さのボトルネックはウェブソケットで送られるNostrのイベントの通信量というよりは投稿に添付される画像のダウンロードの方ではないかという話もTLで耳にしたため(特に裏もとらず)、いっちょ画像最適化のプロキシサーバを作ってクライアントに実装してプルリクエスト投げるかと考えました。
そこで私はまずクライアントをAmethystからnostterに乗り換えることから始めました。なぜならばAmethystよりもTypeScriptとSvelteで書かれているnostterのほうがコントリビュートしやすかったという私的な事情です。
解決したい課題
遠回りしてきましたが課題はこれ。
- Nostrの画像の表示改善
- Nostrの通信量の改善
インターフェイス(設計)
画像最適化のプロキシは実装よりもインターフェースを考えるのが大変です。ここはとても苦労しそうな気がしたので、何も考えず cloudflare Imagesのインターフェースをそのまま借用することにしました。
https://developers.cloudflare.com/images/transform-images/transform-via-url/
また何かあってもcloudflare Imageに課金して乗り換えることが可能という利点もあります。
実装
とにかく時間がないので手グセでかけるTypeScriptかJS。かつ課金しないで可用性を維持できる無料枠のサーバレス環境が使いたかったので cloudflare workers に目星をつけて調査したところ、非常に素晴らしい記事を見つけましたのでこのwasmのライブラリをTSから呼び出して使わせていただくことにしました。
自分の実装したところはURLのパースと、キャッシュAPIの呼び出しを行って、最後にこのライブラリを叩くだけです。 ほかはクライアントキャッシュ用のヘッダーを書き換えたりとか細かいことはやっていますが全く大したことはやっておらず、サーバは非常にリーズナブルにやりたいことを実装した形になりました。 大変助かりました。
実装したものがこちらです。
https://github.com/ocknamo/nostr-image-optimizer
実装後の課題
このプロキシただのパブリックAPIなのでDoS攻撃に弱いです。何回もAPIをたたかれたら無料枠をすぐに超えてしまうことが容易に想像できました。 無料枠超えても使えなくなるだけで破産はしないので安心ですが、しかし対策は考える必要があります。
WAF
WAFです。APIに対するリクエスト回数などに対する制限をIPごとにかけています。また攻撃された場合検知できれば特定のIPや地域をブラックリストに入れることも可能です。
細かいことを説明してギリギリを攻めて攻撃されても困るので細かく説明しませんが、当初は全力でDoS攻撃されても無料枠超えないくらいの感じで制限をかけていました。 しかしNostrのTLをちょっと早めに表示するとすぐにWAFに引っかかってエラーになるという状態になることもあり、結局アイコンの表示は画像最適化の対象にしない方針にするなどの影響がありました。
いろいろあって、前提が変わり、もう少し制限をゆるくしたのでアイコンの対応は今後は検討できるかもしれません。
まとめ
割と手抜きで作ったことがわかるかと思います。実装しててNostrへの貢献ではあるはずですが、Nostrのプロトコル(NIPsとか)全然関係ないことやってるなと思いました。
フロントについては来週書きます。
次回のアドベントカレンダーの記事は eyemono.moe さんによる”クライアント自作を通して得られた知見まとめ”ですね!楽しみです!
-
@ 4c5d5379:3a4383ee
2024-12-01 03:21:49first header
I'm testing YakiHonne article.
にほんごだよ
header
header
header
header
header
header
ヘッダ
ヘッダ
ヘッダ
ヘッダ
ヘッダ
ヘッダ
-
@ df8f0a64:057d87a5
2024-11-29 13:58:482024年下半期の振り返り
あんまり変化はないんですが、進捗ありません!で終わっても仕方ないのでちょっとは無理やりでも振り返りましょう
0. 退職した
上半期時点で決まってはいたんですが、 6年間ほど勤務した会社を退職しました
退職直前まで爆発物取扱みたいなタスクをこなして、なかなかひやひやした退職プロセス
静かに退職したいので送別会の類のイベントは無しにしてくれというお願いをきいてくれた各メンバーに感謝です
1. 公開していたNostrリレーの設定を変更した
日本のみに公開していたリレーを、全世界に公開しました
当初はCloudflareでリレーをホストしていたのが、利用していたnosflareもcfrelayもクライアントに対してイベントを配布するコードがなく(R2だけではできない)
さてどうしたものかと悩んでいたタイミングで、Umbrelのおひとり様リレーのポートを公開する対応をしました。リレーのお引越し
で、公開してしばらくしたら、すごい勢いで日本国外からの投稿が着信するようになり大困惑
調べてみたら、Mutiny wallet(現在はサービス終了)が運営しているblastr.mutinywallet.com(たぶんまだ稼働している)が原因でした
Nostr.watchのAPIを利用して、世の中にあるNostrリレーすべてにイベントを送り込む凶悪な思想犯です
ヘッダー情報などでブロックできなかったので、blastrがホストされてるCloudflareのIPを全てブロックする力技で対処しました
ちなみに、nosflareもいつのまにかblastrのようなものをホストしているようです
なんなんでしょうね、Nostrの白人さんたちの、過激なほど分散というか対検閲をしようとするお節介さは
2. 公開していたNostrリレーを潰した
上記のように折角いろいろやったリレーを潰しました
Reply guyというbotが猛威をふるった時期、クソみたいなイベントをばら撒かれてくることに私がキレたからです。クソが
NostrとしてはこれをきっかけにWoTを組み込んだリレーが開発されたりして、スパム対策が一歩前進した感があります。クソが
スパムばら撒きをBostrが助長してるみたいな批難を受けて、作者のYonleさんがブチ切れ、全Nostr関連リポジトリのメンテを放棄する事態も発生
ちょうどMutiny walletでGOXしたご本人の機嫌が悪かった時期に、クソスパムがぶつかったことによる悲しい出来事でした。ほんとクソ
3. おわりに
他にもこまいことはいくつかあるんですが、主にはこんなとこでしょうか。来年も楽しくNostrしたいですね
-
@ 6a3d3f20:6a569bcc
2024-11-28 12:54:19En el mundo de las redes sociales descentralizadas, múltiples protocolos buscan resolver problemas relacionados con la privacidad, la interoperabilidad y la resistencia a la censura. Entre ellos, destacan Nostr, AT Protocol (usado por Bluesky) y ActivityPub (adoptado por Mastodon). Cada uno tiene sus méritos, pero Nostr se ha posicionado como una opción innovadora con ventajas únicas que lo diferencian de sus competidores.
Ventajas del Protocolo Nostr
-
Sencillez y Minimalismo
• Arquitectura simple: A diferencia de otros protocolos que requieren complejas infraestructuras, Nostr se basa en un diseño minimalista. Solo necesita claves públicas/privadas y relays para funcionar, lo que reduce los puntos de fallo y facilita su implementación. • Facilidad de desarrollo: Los desarrolladores pueden crear aplicaciones rápidamente sin enfrentarse a las complejidades técnicas de protocolos más elaborados como ActivityPub.
-
Resistencia a la Censura
• Modelo distribuido: Nostr no depende de servidores centralizados ni de federaciones específicas. Esto lo hace más resistente a la censura, ya que los mensajes se replican en múltiples relays, y un relay censurado no afecta al resto del sistema. • Claves privadas como identidad: La identidad de los usuarios no depende de una instancia o servidor. Conservar la clave privada permite mantener el control total sobre la identidad.
-
Interoperabilidad y Flexibilidad
• Compatibilidad con múltiples aplicaciones: Nostr permite que las aplicaciones utilicen el mismo protocolo para diversos casos de uso (mensajería, redes sociales, pagos, etc.), a diferencia de ActivityPub, que está más limitado a redes sociales. • Extensibilidad: Al ser un protocolo simple, puede ser extendido fácilmente para adaptarse a nuevos usos o necesidades.
-
Neutralidad y Descentralización
• Sin entidades centralizadas: Nostr no depende de organizaciones o consorcios que dicten reglas, a diferencia de AT Protocol o ActivityPub, que están influenciados por sus comunidades o estructuras de gobernanza. • Incentivos abiertos: No hay jerarquías ni dependencias, lo que permite una verdadera descentralización sin riesgo de monopolios.
-
Privacidad y Seguridad
• Cifrado de extremo a extremo: Al depender de claves públicas y privadas, se garantiza un alto nivel de privacidad y seguridad en las comunicaciones. • Anonimato opcional: Los usuarios pueden interactuar sin necesidad de compartir datos personales.
Conclusión
Nostr destaca entre otros protocolos descentralizados por su sencillez, resistencia a la censura y verdadera neutralidad. Mientras que AT Protocol y ActivityPub tienen sus fortalezas, su complejidad y dependencia de entidades específicas limitan su alcance. Nostr representa una solución ágil y poderosa que podría convertirse en el estándar para un internet más libre y descentralizado.
-
-
@ 1d685541:f0883831
2024-11-24 03:24:04Shibuya Font #art 24, November, 2024 https://www.shibuyafont.jp//
きらめく渋谷
渋谷パラレル
マルキュー
渋谷女子メイク
ティタイム
幾何学
つぎはぎ
◯△□02 夢見る自由
通り過ぎるシブヤ
レインボーピープル
すれ違い
青海波
まちあかり
あなたへのお花
ササヅカノネコカフェ
-
@ d7c6d014:a6abb6b8
2024-11-23 18:40:47こんにちは!kohei です。
久々のエントリ投下ですが、今回は先日弊 TL で話題になっていた、Android を P2P のローカルリレーサーバー化して Tor で公開する方法を紹介していこうと思います。
用意するもの
- Android 端末
- Orbot
- Citrine
- Amethyst
前提と下準備
今回は、Orbot の詳細設定は省いて、Power User Mode の設定が完了している前提でお話を進めます。 Android 端末を用意して、2~4 のアプリをインストールしておいてください。
設定方法
それでは早速設定していきましょう。 まず、Citrine を起動して、Settings のタブからローカルリレーの詳細を設定します。
設定が終了したら、ローカルリレーを起動します。
また、ここで表示されるポート番号をメモしてください。
次に、More のタブに移り、Hosted Onion Services へアクセスし、Service Type の項目で User Services にチェックを入れて、右下の + マークをタップすると以下のポップアップが表示されます。(Orbot がスクショを許してくれないので一部画像割愛)
表示されたら、Name に任意の名前を、Local Port と Onion Port に先ほどメモした Citrine のポート番号を入力します。
入力したら再起動を求められるので再起動してください。 再起動後に Hosted Onion Services の項目に .onion のアドレスが表示されたら成功です (何故か私の環境では、一回の再起動では設定が反映されなかったのですが、もし同じような現象が起きた場合は、再起動 -> Connect -> .onion アドレスが発行されてるかの確認、を数回試すと発行されるはずです)
発行されたら、.onion アドレスをタップしてクリップボードにコピーします。
次に、Amethyst を起動して、リレーの設定画面に入り、Outbox の設定にコピーした .onion アドレスを貼り付けて保存します。
後は、Amethyst 側で Orbot のポート番号を設定して Orbot に接続すれば BOOM! 設定完了です。
お疲れ様でした!
素敵な Nostr ライフを!
-
@ 07804b78:c375c543
2024-11-21 11:37:37Chef's notes
- The Premium Juku Curry comes individually packaged in single-serving portions, so it's convenient for using small amounts like in this recipe.
- Use your favorite spicy level of hot bean-curd soup base/curry roux.
Details
- 🍽️ Servings: 4
Ingredients
- 1 box of “Cook Do®” (Chinese seasoning mix) for Szechuan-style Mapo Tofu
- 2 servings of Premium Juku Curry
- 500g tofu
- 400g cut tomatoes
- 200g minced meat
- 80g garlic sprouts
- 100ml water
- 1 tablespoon sesame oil
- Cooked rice, enough for the number of people
Directions
- Slice the garlic shoots diagonally into 3-4cm pieces. Cut the tofu into bite-sized pieces.
- Heat the sesame oil in a frying pan and fry the minced meat over a medium heat.
- When the meat is about 80% cooked, add the garlic shoots and continue to fry, stirring, until the meat is fully cooked.
- Turn off the heat and add the Cook Do® Sichuan-style Mapo Tofu seasoning, and mix well.
- Turn the heat back on to medium, add the cut tomatoes and water, and bring to the boil, stirring gently.
- When it comes to a boil, turn the heat down to low, add the Premium Juku Curry, and stir well to dissolve.
- Once the curry has dissolved, add the tofu and cook until the tofu is warmed through.
-
@ fd208ee8:0fd927c1
2024-11-21 07:24:34The motherhood illusion
Growing up, I was always told that women wanted children, whilst men wanted sex. So, marriage was created, to unite these two urges, and men and women don't otherwise particularly differ. But, it turns out, that women want protection and sex, and men want children and sex.
This is why women tend to be attracted to more masculine men (they're associated with protection) and men tend to be attracted to more feminine women (they're associated with motherhood). Women who are attracted to men, who aren't overtly masculine, are looking for a different aspect of protection (reliability, steady income or wealth, emotional security, etc.)
This wasn't readily apparent, in earlier generations, as widespread, youthful marriage meant that there weren't any real decisions being made by the participants. Almost all women got married and had kids, and almost all men got married and had sex. Math checks out. But the number of women who could protect and provide for themselves was low, and the men marrying were often very young and libidinous, and not yet contemplating their own legacy.
Feminism, easy abortion, deindustrialization, delayed marriage, and reliable contraception have dissolved this illusion, completely. Millions of Western women quickly turned into cougars, careerists, party girls, and e-girls, and an entire army of childless men and sidelined dads bubbled up and began to make their pain known. Humanity's dirty underbelly has been exposed.
Women aren't as sweet, as we thought, and men are much sweeter.
Women also want children, but not as intensely. In fact, they seem to often viscerally dislike children, and are jealous of the protection they are to give them. So, they are prone to offing their offspring because they are averse to having any in-house competition.
If you just left women up to their own devices and reduced the social pressure, at least a fifth of them wouldn't bother having children, at all, and another quarter will have one and then lose interest or age out. This is not a new phenomenon, as we can see.
The male competition for potential mothers turns out to be absolutely brutal, and more difficult than simply finding a woman to sleep with. And, now, we finally understand why men traditionally jumped through so many hoops, to attain a wife. It wasn't for the sex; we've always had brothels, masturbation, and pornography. It was for the familial comfort, and, especially, for the children.
Good fathers make good mothers
Some women don't know if they are "potential mothers", until they meet a "potential father", and their urge to procreate suddenly kicks in. They didn't want children for their own sake, but now they want some for his sake. All of a sudden, they're imagining themselves rocking the cradle, googling "what to eat, when you're expecting", and find themselves gushing over anything that gives off Hint of Infant.
I'm pregnant! Look what I can do! Look what I can do! For you, darling.
Women married to men they are deeply in love with, are much more likely to desire to become mothers (and be devastated by infertility), and make for better mothers, because children are like individualized presents they can give to their husband.
They want to impress him. Most want to be decent parents in their own right, but the urge to impress seems to raise this to a much higher level because women are vain, and therefore focused on raising their own status and how they appear to others. And the greatest "other", of a happy wife, is her husband.
Because men are narcissistic, and therefore in love with anything associated with themselves (which underpins their obsession with owning property), men have an intense attachment to their children. What is more "yours", than your progeny?
Fathers seem to develop a special attachment to, or fondness for, the mothers of their children, that goes beyond lust or romantic love; they never forgot who gave them this new Mini Me. And they are often quite impressed by their own ability to perform this trick numerous times, which leads to the intense satisfaction they feel at "going into serial production" and churning out more of those Mini Mes until their adoring wife pleads for mercy.
Men want children. Women, who love a man, want to give him those children and gain the fidelity that comes along with those children. This is the actual "trade" underpinning the urge to marry.
-
@ 6b0a60cf:b952e7d4
2024-11-17 07:02:11ビットコインのウォレットは取引形態によって2種類に分かれます。
- オンチェーン(L1)
- 取引がブロックチェーンに刻まれるタイプ。時間がかかるし手数料が高い。
- ライトニングネットワーク(L2)
- ブロックチェーンに刻む前の少額決済を目的としたレイヤー。高速で手数料が安い。
NostrでZapを利用する場合はライトニングネットワーク(以下、LNと呼びます)のウォレットが使われますが、さらにその中でもZap対応/非対応で分かれることになります。
また、秘密鍵を誰が管理するかによっても2種類の呼び方に分かれます。
- カストディアル
- 秘密鍵をサービスの運営に預けるタイプ。
- ノンカストディアル/セルフカストディアル
- 秘密鍵(シードフレーズ)を自分で持っておくタイプ。
Nostrで人気があるWallet of Satoshi(以下、WoSと呼びます)はLNのカストディアルウォレットです。 今回はLNのセルフカストディアルウォレットであるPhoenixを使ってみて、その仕組みや注意点など、学んだことを記録したいと思います。
Phoenixでウォレットを作る場合、初回でシードフレーズ(12個の単語)が作られますので、大切に控えておきましょう。
WoSからPhoenixに送金してみる
メイン画面左下にあるReciaveからQRCode表示画面へ遷移します。そこでcopyボタンを押して
Lightning invoice(text)
をコピーしましょう。次に、WoSの画面からSendを選択し、クリップボードからの貼り付けを選択します。
金額を指定して送金します。
送金した額が満額届いてないんだけど?
下の方に
Service Fees
とありますが、これはPhoenix運営(ACINQ)へのお布施ですね。結構高く見えますが初回だけです。 またMiner Fees
という項目は、mempoolのfeeに連動して変わるようですが、これはチャネルを太くする(送受信できる金額の上限を上げる)ために使われる手数料になります。財布が重たくなると手数料が取られる?
有り体に言えばそういうことになります。以下のように10,000satsをもらう度にチャネル拡張のための手数料が引かれています。
上記の8,000satsを受け取っている時には手数料が発生していませんね。これはチャネル拡張が必要ないギリギリの金額を狙って送金したためです。送金前は8,859satsの余裕がありました。送金後は1,719satsに減っています。(余裕分がぴったり8,000sats減るわけではないようです。このへんの仕組みはよくわかりません。) (画面は左上⚙️マークの設定からPayment channelsから。)
財布が軽くなると余裕が増える?
逆にPhoenixからWoSに5,000satsほど送金してみます。(手数料として24satsほど余計に抜かれました)
余裕(Inbound Liquidity)が5,883satsまで復活しています。受け取るばかりでなく、バランスよく送ることで財布を重たくしなければチャネル拡張せずに使い続けることができそうです。(太くしたチャネルは永遠に残るわけではなく、1年までらしいです)
自動でチャネル拡張にsatsを使われたくない!
自動チャネル拡張を設定で無効化できます。左上⚙️マークの設定から
Channel management
から。これでチャネル拡張が必要なほどの金額を送金しようとするとエラーになり失敗します。
まとめ
セルフカストディアルウォレットならではの概念があり、謎の手数料が発生したりして怖いイメージがありましたが、どういう理由で手数料が発生するのかを知り、設定でのコントロールの仕方を習得することである程度怖いイメージを払拭することができました。 しかしカストディアルウォレット(特にWoS)の使いやすさを再認識することにもなりました。ただ自分で管理することの重要性も理解していますので、徐々に知識を深めていこうと思います。
参考/謝辞
- Phoenix wallet(フェニックスウォレット)の使い方!ビットコインのセルフカストディができるアプリを解説 - 知っとこ!ビットコイン図鑑
- nostr:npub10zeurmg22wc89l8m3npw9cyu45cun0lvs6w3ep69cdpa25pna65s0994qz 様
-
@ ec42c765:328c0600
2024-10-21 07:42:482024年3月
フィリピンのセブ島へ旅行。初海外。
Nostrに投稿したらこんなリプライが
nostr:nevent1qqsff87kdxh6szf9pe3egtruwfz2uw09rzwr6zwpe7nxwtngmagrhhqc2qwq5
nostr:nevent1qqs9c8fcsw0mcrfuwuzceeq9jqg4exuncvhas5lhrvzpedeqhh30qkcstfluj
(ビットコイン関係なく普通の旅行のつもりで行ってた。というか常にビットコインのこと考えてるわけではないんだけど…)
そういえばフィリピンでビットコイン決済できるお店って多いのかな?
海外でビットコイン決済ってなんかかっこいいな!
やりたい!
ビットコイン決済してみよう! in セブ島
BTCMap でビットコイン決済できるところを探す
本場はビットコインアイランドと言われてるボラカイ島みたいだけど
セブにもそれなりにあった!
なんでもいいからビットコイン決済したいだけなので近くて買いやすい店へ
いざタピオカミルクティー屋!
ちゃんとビットコインのステッカーが貼ってある!
つたない英語とGoogle翻訳を使ってビットコイン決済できるか店員に聞いたら
店員「ビットコインで支払いはできません」
(えーーーー、なんで…ステッカー貼ってあるやん…。)
まぁなんか知らんけどできないらしい。
店員に色々質問したかったけど質問する英語力もないのでする気が起きなかった
結局、せっかく店まで足を運んだので普通に現金でタピオカミルクティーを買った
タピオカミルクティー
話題になってた時も特に興味なくて飲んでなかったので、これが初タピオカミルクティーになった
法定通貨の味がした。
どこでもいいからなんでもいいから
海外でビットコイン決済してみたい
ビットコイン決済させてくれ! in ボラカイ島
ビットコインアイランドと呼ばれるボラカイ島はめちゃくちゃビットコイン決済できるとこが多いらしい
でもやめてしまった店も多いらしい
でも300もあったならいくつかはできるとこあるやろ!
nostr:nevent1qqsw0n6utldy6y970wcmc6tymk20fdjxt6055890nh8sfjzt64989cslrvd9l
行くしかねぇ!
ビットコインアイランドへ
フィリピンの国内線だぁ
``` 行き方: Mactan-Cebu International Airport ↓飛行機 Godofredo P. Ramos Airport (Caticlan International Airport, Boracay Airport) ↓バスなど Caticlan フェリーターミナル ↓船 ボラカイ島
料金: 飛行機(受託手荷物付き) 往復 21,000円くらい 空港~ボラカイ島のホテルまで(バス、船、諸経費) 往復 3,300円くらい (klookからSouthwest Toursを利用)
このページが色々詳しい https://smaryu.com/column/d/91761/ ```
空港おりたらSouthwestのバスに乗る
事前にネットで申し込みをしている場合は5番窓口へ
港!
船!(めっちゃ速い)
ボラカイついた!
ボラカイ島の移動手段
セブの移動はgrabタクシーが使えるがボラカイにはない。
ネットで検索するとトライシクルという三輪タクシーがおすすめされている。
(トライシクル:開放的で風がきもちいい)
トライシクルの欠点はふっかけられるので値切り交渉をしないといけないところ。
最初に300phpくらいを提示され、行き先によるけど150phpくらいまでは下げられる。
これはこれで楽しい値切り交渉だけど、個人的にはトライシクルよりバスの方が気楽。
Hop On Hop Off バス:
https://www.hohoboracay.com/pass.php
一日乗り放題250phpなので往復や途中でどこか立ち寄ったりを考えるとお得。
バスは現金が使えないので事前にどこかでカードを買うか車内で買う。
私は何も知らずに乗って車内で乗務員さんから現金でカードを買った。
バスは狭い島内を数本がグルグル巡回してるので20~30分に1本くらいは来るイメージ。
逆にトライシクルは待たなくても捕まえればすぐに乗れるところがいいところかもしれない。
現実
ボラカイ島 BTC Map
BTC決済できるとこめっちゃある
さっそく店に行く!
「bitcoin accepted here」のステッカーを見つける!
店員にビットコイン支払いできるか聞く!
できないと言われる!
もう一軒行く
「bitcoin accepted here」のステッカーを見つける
店員にビットコイン支払いできるか聞く
できないと言われる
5件くらいは回った
全部できない!
悲しい
で、ネットでビットコインアイランドで検索してみると
旅行日の一か月前くらいにアップロードされた動画があったので見てみた
要約 - ビットコイン決済はpouch.phというスタートアップ企業がボラカイ島の店にシステムを導入した - ビットコインアイランドとすることで観光客が10%~30%増加つまり数百~千人程度のビットコインユーザーが来ると考えた - しかし実際には3~5人だった - 結果的に200の店舗がビットコイン決済を導入しても使われたのはごく一部だった - ビットコイン決済があまり使われないので店員がやり方を忘れてしまった - 店は関心を失いpouchのアプリを消した
https://youtu.be/uaqx6794ipc?si=Afq58BowY1ZrkwaQ
なるほどね~
しゃあないわ
聖地巡礼
動画内でpouchのオフィスだったところが紹介されていた
これは半年以上前の画像らしい
現在はオフィスが閉鎖されビットコインの看板は色あせている
おもしろいからここに行ってみよう!となった
で行ってみた
看板の色、更に薄くなってね!?
記念撮影
これはこれで楽しかった
場所はこの辺
https://maps.app.goo.gl/WhpEV35xjmUw367A8
ボラカイ島の中心部の結構いいとこ
みんな~ビットコイン(の残骸)の聖地巡礼、行こうぜ!
最後の店
Nattoさんから情報が
なんかあんまりネットでも今年になってからの情報はないような…https://t.co/hiO2R28sfO
— Natto (@madeofsoya) March 22, 2024
ここは比較的最近…?https://t.co/CHLGZuUz04もうこれで最後だと思ってダメもとで行ってみた なんだろうアジア料理屋さん?
もはや信頼度0の「bitcoin accepted here」
ビットコイン払いできますか?
店員「できますよ」
え?ほんとに?ビットコイン払いできる?
店員「できます」
できる!!!!
なんかできるらしい。
適当に商品を注文して
印刷されたQRコードを出されたので読み取る
ここでスマートに決済できればよかったのだが結構慌てた
自分は英語がわからないし相手はビットコインがわからない
それにビットコイン決済は日本で1回したことがあるだけだった
どうもライトニングアドレスのようだ
送金額はこちらで指定しないといけない
店員はフィリピンペソ建ての金額しか教えてくれない
何sats送ればいいのか分からない
ここでめっちゃ混乱した
でもウォレットの設定変えればいいと気付いた
普段円建てにしているのをフィリピンペソ建てに変更すればいいだけだった
設定を変更したら相手が提示している金額を入力して送金
送金は2、3秒で完了した
やった!
海外でビットコイン決済したぞ!
ログ
PORK CHAR SIU BUN とかいうやつを買った
普通にめっちゃおいしかった
なんかビットコイン決済できることにビビッて焦って一品しか注文しなかったけどもっと頼めばよかった
ここです。みなさん行ってください。
Bunbun Boracay
https://maps.app.goo.gl/DX8UWM8Y6sEtzYyK6
めでたしめでたし
以下、普通の観光写真
セブ島
ジンベエザメと泳いだ
スミロン島でシュノーケリング
市場の路地裏のちょっとしたダウンタウン?スラム?をビビりながら歩いた
ボホール島
なんか変な山
メガネザル
現地の子供が飛び込みを披露してくれた
ボラカイ島
ビーチ
夕日
藻
ボラカイ島にはいくつかビーチがあって宿が多いところに近い南西のビーチ、ホワイトビーチは藻が多かった(時期によるかも)
北側のプカシェルビーチは全然藻もなく、水も綺麗でめちゃくちゃよかった
プカシェルビーチ
おわり!
-
@ 6bcc27d2:b67d296e
2024-10-21 03:54:32yugoです。 この記事は「Nostrasia2024 逆アドベントカレンダー」10/19の分です。Nostrasiaの当日はリアルタイムで配信を視聴していました。Nostrを使ってアプリケーションの再発明をすべきという発表を聴き、自分だったらどんなものを作ってみたいかを考えて少し調べたり試みたりしたのでその記録を書きます。また、超簡単なものですがおそらく世界初となるvisionOS対応のNostrクライアントをつくってみたので最後の方に紹介します。
アプリケーションを再発明する話があったのは、「What is Nostr Other Stuff?」と題したkaijiさんの発表でした。
Nostrプロトコルを使って既存のアプリケーションを再発明することで、ユーザ体験を損なわずにゆるやかな分散を促すことができ、プロトコルとしてのNostrも成長していくというような内容でした。
自分はまだNostrで何かをつくった経験はなかったので、実装に必要な仕様の知識がほとんどない状態からどのようなアプリケーションをつくってみたいかを考えました。
最初に思いついたのは、Scrapboxのようなネットワーク型のナレッジベースです。自分は最近visionOS勉強会をやっており、勉強会でナレッジを共有する手段としてScrapboxの導入を検討していました。
Nostrコミュニティにも有志によるScrapboxがありますが、Nostrクライアントがあればそれを使うだろうから同じくらいの実用性を備えたクライアントはまだ存在しないのではないかという見立てでした。
長文投稿やpublic chatなどの機能を組み合わせることで実現できるだろうか。そう思っていた矢先、NIP-54のWikiという規格があることを知りました。
https://github.com/nostr-protocol/nips/blob/master/54.md
まだちゃんとは読めていないですが、Scrapboxもwikiソフトウェアだし参考になりそうと思っています。正式な仕様に組み込まれていないようで、採用しているクライアントはfiatjafによるリファレンス実装(?)のwikistrくらいしか見つかりませんでした。
Scrapboxのようなナレッジベースを志向するNostrクライアントがあれば、後述するvisionOS対応クライアントの存在もありアカウントを使いまわせて嬉しいので試してみたいです。もし他にも似たようなサービスをどなたか知っていたら教えてください。
また現在は、勉強会やワークショップ、ハッカソンなどのコラボレーションワークを支援するためのツールを自分たちでも開発しています。Apple Vision Proに搭載されているvisionOSというプラットフォームで動作します。
https://image.nostr.build/14f0c1b8fbe5ce7754825c01b09280a4c22f87bbf3c2fa6d60dd724f98919c34.png
この画面で自分が入りたいスペースを選んで共有体験を開始します。
スライドなどのコンテンツや自らのアバターを同期させることで、遠隔地にいてもまるでオフラインかのように同じ空間を共有することが可能になります。
https://image.nostr.build/cfb75d3db2a9b9cd39f502d6426d5ef4f264b3d5d693b6fc9762735d2922b85c.jpg
ということなので、急遽visionOS対応のクライアントを作ってみました。検索しても1つも事例が出てこなかったので多分まだ世界で実装しているアプリはないのではないでしょうか。
とはいえ、クライアントを名乗っているもののまだ大した機能はなく、リレーからデータを取得するだけの読み取り専用です。
https://image.nostr.build/96e088cc6a082528682989ccc12b4312f9cb6277656e491578e32a0851ce50fe.png
画像では自分のプロフィールデータをリレーから取得しています。
まだどのライブラリもvisionOSに対応していなかったりで手こずったものの仕様の勉強になりました。
ただvisionOSアプリはiOSアプリ同様NIP-7が使えないので秘密鍵を自分で保管しなくてはならず、今後どう対処すべきかわかりかねています。これから時間ある時に少しずつ調べていこうと思っていますが、ネイティブアプリの秘密鍵周りはあまりリソースが多くないようにも感じました。もしどなたかその辺の実装に詳しい方いたら教えていただけると嬉しいです。
準備ができたらそのうちコードも公開したいと思っています。
これから少しずつ色んな機能を実装しながらNostrで遊んでいきたいです!
-
@ 101b30ee:18a46a45
2024-10-15 00:30:33背景
Junさんが山形県在住で、車で色々案内いただけることになりました。
メンバー (敬称略)
- Jun (nostr:npub1nlnjcakw6xfkpuhx9kym3d20sr774pm6rue5kk93uj7lrca9lypqgqj7fd)
- りら (nostr:npub1tuqsl6l8xzly95vv80um7wsnt7gxy8w9wgt4khp4wyv4xwhfw44slm93e9)
- あめ (nostr:npub1eqw8nx0hya3cwvtc0rje6lpjzzf6gvuh0mngz898dhp6juuwrp5s5uzduw)
- Don (nostr:npub1dv9xpnlnajj69vjstn9n7ufnmppzq3wtaaq085kxrz0mpw2jul2qjy6uhz)
- 横谷加奈子 (nostr:npub1sd2zns7qsfster7vcyjcqkert4cev2rzfeuus0d8hnfdh74t6g7su0p4c6)
- 発火大根 (nostr:npub1zqdnpm5gcfap8hngha7gcp3k363786phvs2etsvxw4nh6x9ydfzsuyk6mn)
スケジュール
10/12
11:00 - 11:30 霞城セントラル 日本酒めぐりツアー
500円で3コインもらえて、1コインでカップ1杯分の試飲ができるシステムのようです。
山形はフルーツも有名で、日本酒だけでなくワインなども試飲できました。個人的には、梨ベースのお酒が飲み口すっきりしていておいしかったです。
名前は忘れました ()霞城公園セントラル
https://yamagatakanko.com/attractions/detail_13443.html
nostr:nevent1qqszfgt4vef3ncyw7cy9yykuwv06pq5v9znaf2xeehfpp6s5j27ncqg2val6m nostr:nevent1qqsvfknrdtwsyvmztdzx40adzvtx8nztxu3vscgkljzzk2zr8kfmfnce54ke0
11:30 - 12:30 霞城公園散策
東北屈指の戦国大名・最上義光(もがみよしあき)公 (1546-1614)が礎を築いた「山形城」を復原整備した都市公園らしいです。
Junさんに聞いたところ、最上義光の妹が伊達政宗の母・義姫 (よしひめ)で、息子の伊達政宗を毒殺しようとしたことで有名らしいです。
後で調べたところ、毒殺事件が捏造だったとする記事もあり、真偽はいかに。また、これもJunさんに聞いたのですが山形藩は幕府重役から失脚した左遷の地と呼ばれているようです。
ちょっと悲しい。
後に調べたところ、山形藩は計12家が収めており、入れ替わりも激しかったようです。
まぁ、左遷だったとしても自然豊かな地でスローライフを過ごすのもアリかもしれない。個人的には、最上義光像が精巧に出来ているなぁと感動しました。
構図がナポレオンに似ていたので、もしかして身長が低かった?と思いましたが
後で調べたところ、180cm以上の長身だったとする文献があるようです。山形藩
https://ja.wikipedia.org/wiki/%E5%B1%B1%E5%BD%A2%E8%97%A9
義姫の毒殺事件について
https://bushoojapan.com/bushoo/date/2024/08/12/76725
最上義明の身長
http://iiwarui.blog90.fc2.com/blog-entry-13581.html
霞城公園セントラル
https://yamagatakanko.com/attractions/detail_2304.html
nostr:nevent1qqsp78jf76yudrwf6w88szq4x50t0zpeht77adkmk5pj5xsg6wplcmcv25e3g nostr:nevent1qqsfvw828mus5ek44m5myuya5ndpvj8mjhlltzx4y6ha93932cvzaxgwqwah3 nostr:nevent1qqs9sd8m43lj6pmd7hzu0quf4v0s7rm4uaq83aqp5jn5sqfy8aw6f8skg0sgv
12:30 - 13:30 旧済生館
済生館は1878年(明治11年)に山形県立病院として建設され、東北地方で最も早く西洋医学を取り入れたことで有名のようです。
建物内部の展示物の写真撮影は禁じられていたので写真は取れていませんが、あの有名な杉田玄白の訳書「解体新書」や、明治時代の医療器具などが展示されていました。私は工業高校出身で電気科だったので、昔の医療電気機器の展示などは見ていて飽きないものがありました。
旧済生館
https://www100.pref.yamagata.jp/110001/sangyo/sangyoushinkou/him_top/him_maincat1/him_15.html
13:30 - 14:30 山寺付近に移動・ランチ
山寺付近に車で移動後、玉こんにゃくを食べながら山寺方面に徒歩移動。
玉こんにゃくは名産らしく、山形のいたるところで売っていました。途中で近場のお店でランチ(蕎麦)を食べました。
ランチを食べながら映画 (オッペンハイマー)の話とかビットコインの話をしてました。
ちなみに私はオッペンハイマー見れてません。
あめさんはオッペンハイマーを見に県外 (奈良 -> 大阪)まで行ったらしい。
行動力すげぇ。nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpgqwakh6t2vm0ufy82rmwjqa2ld2z9jdl9l90v0ds7afwe6n5myl5uf5p7 nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpqq570ak2p9wx9q09xafjnlnulshwg2wc5c66q37z884m0pselu36sz5k7jk nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpp8xy7nktvyq87d676pkh6hjpftm5s703fq8e8c52l2l9xupe55wyhfc0p nostr:nevent1qvzqqqqqqypzq6c2vr8l8m9952e9qhxt8acn8kzzypzuhm6q70fvvxylkzu49e75qyshwumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5up0qy08wumn8ghj7un9d3shjtnwdaehgu3wwa5hyetydejhgtn2wqhsqgqthnr72cp92yqv9upzg2fyplvt6eazf6kxe24h6ea6syg3mthsl5tc3r26
14:30 - 16:00 山寺 (宝珠山立石寺)
宝珠山立石寺 (愛称:山寺)は山形屈指の観光スポットで、松尾芭蕉が「閑さや岩にしみ入る蝉の声」の名句を紀行文「おくのほそ道」に残したことでも知られているそうです。
展望台付近まで登りましたが、前日2時間程度しか寝れてなかった からか、途中で何回か力尽きました。
何気にずっと階段だったのが厳しかった。w
展望台から見る景色が超綺麗でした。達成感あった。途中でDonさんが「松尾芭蕉も山寺登ってますよ!」と励ましてくれましたが、松尾芭蕉は服部半蔵だったのでは、といわれる説が頻繁に出るくらい、体力おばけです ()
#### 山寺・宝珠山立石寺 https://yamagatakanko.com/attractions/detail_2352.html
松尾芭蕉が忍者服部半蔵ではないかと言われる都市伝説の理由5つ
https://spirituabreath.com/matuobasyou-hattorihannzou-5207.html
nostr:nevent1qvzqqqqqqypzp8l893mva5vnvrewvtvfhz65lq8aa2rh58enfdvtre9a7836t7gzqqs2jsu0efm0s0xnp9exv0m4xkxaw07nsraxhfjqrl6rmjd977aqcycfaf05e nostr:nevent1qvzqqqqqqypzp8l893mva5vnvrewvtvfhz65lq8aa2rh58enfdvtre9a7836t7gzqqsxmrsa8h6y6z8hmt7hzg8cmspvc373gnjjs67vlrdp24lud8wm8ncp682ev nostr:nevent1qvzqqqqqqypzq6c2vr8l8m9952e9qhxt8acn8kzzypzuhm6q70fvvxylkzu49e75qyshwumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5up0qy08wumn8ghj7un9d3shjtnwdaehgu3wwa5hyetydejhgtn2wqhsqgq3a6ehlurcsmpzlc4vghnnu7tnk5tekwm2kxn7e9rkrq7uslqmlu9sg6vl nostr:nevent1qvzqqqqqqypzp8l893mva5vnvrewvtvfhz65lq8aa2rh58enfdvtre9a7836t7gzqqs9lp9n8yjwjx56khduh7sqehtpgfs20d5w7x9lnjpnlt3vmqkpnmq7xfcef nostr:nevent1qvzqqqqqqypzp8l893mva5vnvrewvtvfhz65lq8aa2rh58enfdvtre9a7836t7gzqqsx4m8un5h952d6f7zuq9yraucs82lcah2p2lk4z6n9u0lduje2pcs40zhkz nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzq5pf4h2je6jkpypup9kj2k66qtlcmce3gcg9q39xpv5388u50sun6ku45d nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpqkdwwjagam6rcxmakpcgsylu95zkm8s0qkvae8j2km6e5l5sr9alsm8vrfn nostr:nevent1qvzqqqqqqypzq6c2vr8l8m9952e9qhxt8acn8kzzypzuhm6q70fvvxylkzu49e75qyshwumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5up0qy08wumn8ghj7un9d3shjtnwdaehgu3wwa5hyetydejhgtn2wqhsqg9cqvgzvegmdsnc6xc5mhwnvsn9unyx4nx6megwcqxlheaddffc8ckpk3qj
16:00 - 18:30 山形駅でりらさん合流・産業科学館
車で山形駅まで戻り、りらさんと合流。
山形駅内の産業科学館を見て回りました。産業科学館は子供向けの知育ブースや山形県民向けの各種企業ブースもあり、見ていて飽きないものが沢山展示されていました。
発電機を回してミニカーを動かすゼネコンレーシングが楽しかった。
また、各種企業ブースを回りながら、Junさんに山形県民憧れの就職先などを聞いていました。産業科学館
http://y-sunka.org/
nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpx0ykjd6egvded9jksguphr4deluxlz56dm4rpw9n68npx9wt3hx976mcl nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpek5k3fygrx8y0024mmmnhqxdnd7jmqed7gf7sqt2tnushcv8xu7dwwctd nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyzzfwt63psqw4w5x7s33al0k0ms2v80p88vjjjd4rx7f8t4juppkux27ek7 nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpqgj58fqpvpngr2vafhdcqtf5vn264960dad73kqfrem3m27hr6mpstqgs5t nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyrnaxmkc47f5p46p36v8qnf4pr5ktm5algd86fsgzw9de96n9yp4qxu6dl8 nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqypehj7clkzll3yf7yftcp5t9k6dfnetvrpl943q4jd8ccy39neq66nyavjs nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzqnc3mmp8sg4lysfkcz7x4ft3c6rrulne8aetvd8lwkzz86k8fp9lt040df nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzqgdms2ltla34u9qr4whzlz69r3mpsj7e3jlpv935yltn799xsk89d3a6g4
18:30 - 20:40 旅館チェックイン、夕食
私 / あめさん / りらさんで、喜三郎という温泉旅館に泊まりました。
ここの温泉の泉質は芒硝泉(リウマチ・高血圧・切り傷・婦人病に効くとのこと)で、保養温泉として親しまれているそうです。
夕食のしゃぶしゃぶ、サザエ、釜めし、芋煮、... 全部旨かった!!!
夕食を食べていたら意外と時間ギリギリになり、露天風呂は朝入ることにして爆速で風呂に入りました。温泉旅館 (喜三郎)
https://kisaburo.jp/
nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyqr9wgwca9jknh88c83nq3n5nnqtflrrd4v5d7uhuh9d47a2qsl870yprel nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyr6yt65e79gqh4dp8pll2kfgaw837xulq2jh2x3y9zd4udk47lkn55pqkzm nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpqwdv2aa4n5z5r5k8q3z2retc9zgujytx9z36xmpsw6h9npc97250qkne529 nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzp2rhy02kfw73jtzq7t7sp2njn2gnt9elta7nm09u55csld8kg5t39lh49r nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyzv32r03thal6tvjqh4wgxk6xv6x2tkuwngw6kfv6ar49rg2yq55jc8arsp nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpqy2duq6xsl8jwns0r7qxgpf6703uwvawrhhlanytrepd082mnyugqxnxpj3
20:40 - 23:00 二次会
二次会の居酒屋でJunさん、Donさんと再度合流。
Junさんの奥さんで漫画家をされている、横谷先生も来てくれました。山形の地酒を飲みながら、Nostrasia 2024での思い出 / 山形の特産品 / Junさん夫妻が東京にくるタイミングはいつか など話していました。
横谷先生はM3やコミティアなど東京に来られるタイミングがいくつかありそうでしたが、Junさんが東京に来るタイミングはなかなか無さそう。
山形にまた会いにいくか、東京で面白いイベントをやって呼ぶしかない!また、山形には「ほや」と呼ばれる海産物が有名という話を聞きました。
ほや、結局食べ損ねてしまった。山形うまいものと地酒 母家
https://r.gnavi.co.jp/t846900/?sc_lid=smp_top_01
横谷先生の読み切り : 遠い日の陽
https://comic-days.com/episode/14079602755391426482
nostr:nevent1qvzqqqqqqypzq6c2vr8l8m9952e9qhxt8acn8kzzypzuhm6q70fvvxylkzu49e75qyshwumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5up0qy08wumn8ghj7un9d3shjtnwdaehgu3wwa5hyetydejhgtn2wqhsqgplnrvwhk6hsl9rk979u6qtmnmrpgywdgexruznhmtkmyevsaua8s8cy2pq nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpkwu2t5zgug7wlwqh8nfh4zyma3f6tlacx9dag4kawnq7nynkxr33rdgaz nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpq8szzc33567mtsjnvajzgur9n8us3fuv2ckx86y0et3c7kddqd37uxuz0
23:00 - 旅館に戻る・就寝
旅館まで車で送ってもらい、旅館で就寝。
翌日も朝早いので、恒例(?)の枕投げやトランプをして遊ぶこともなく、12時に消灯しました。10/13
6:00 - 起床・露天風呂 ~ 7:30 朝食 ~ 8:30 チェックアウト
前日に入れなかった露天風呂に入るため、早めに起きて露天風呂に入りました。
旅館の窓を開けると須川が流れていて、天然のASMRを感じられました。nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzpz260lg35sg06h758y7eppvrwzypv5kc3yj4n0t8jyx5q4f82mse3ung9s nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpqt6cyt5hmatsuct2plneae7t0apnkkrxm38hvee3auhu0h3hljjgs943h27 nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzp2qq9lv0d3umyxprne6xpjj70af6flzcfs2qpgsx2r347q7ukpdm2rwml4 nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzqgaugf683lhlww8ynlgd7qfhgj2d3zlkecm72td35lfw6m4tkvhke4k8jt nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyz750rwdqdk0x8r08m96fcyf5l4wp9pmc0rz8mle02ygtrdzdhf0gjwc823 nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzqq36wgay36wz58kmjvsucple6whamvd28pqrhu082wsdkkpvxzht34tq02
8:30 - 移動・買い物 ~ 9:40 Junさんの家に移動・芋煮会開始
近隣のスーパーで芋煮会用の買い物を済ませたあと、Junさんの家に移動して芋煮会を始めました。 あめさんが帰宅の関係上、山形駅を11:11に出ねばならず、芋をよく煮るために爆速で芋煮を作る必要がありました。
皆で協力して爆速で芋煮を作り、しっかり煮えた状態の芋煮をあめさんに持って帰ってもらうことができました!nostr:nevent1qvzqqqqqqypzqyqmxrhg3sn6z00x30mu3srrdr4ru05rweq4jhqcvat805v2g6j9qy0hwumn8ghj7mn0wd68yttjv4kxz7fwdehkkmm5v9ex7tnrdakj7qg6waehxw309aex2mrp0ykk5upwwd5xjmn0xvhxuet59uqzqe03zqdcpjzakz3u7jjs07crz05y024lvgmjuvh0zysf4zal9q0la8772q nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpq6xaa2etzypq7hlm8zs3rkrjsc0wh5c29huupe9mfxqqeu5uanttq39l9w6 nostr:nevent1qqs0zkh2t2crsv8ljxzvmy3ndwzncyl6wwz67hfy4p09tacem3pjzwg2h4ac8 nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpq3ugypvt2fw886375nzltef4fzlasvk7nzj5n9tpuunwrr4p9etasskzqd6 nostr:nevent1qvzqqqqqqypzpjqu0xvlwfmrsuchs789n47ryyyn5seewlhxsyw2wmwr49ecuxrfqyv8wumn8ghj7mn0wd68ytnxd46zuamf0ghxy6t69uq3uamnwvaz7tmwdaehgu3dwp6kytnhv4kxcmmjv3jhytnwv46z7qpq9u5559ucupe755xnlm00vm5wcj7rpu3wwc3wvrdjxxdcadcwumzqjg8e6r
芋煮ビルド過程
nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqypn3w96w3wu375rz5hwhwhnmvrc664dltaudzvt578s6dh6kzq205u0m44v nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqypc0nxkt4ht0ku9l4hjmvtlv9rh5lt496r7s3755clg7q45fypnxkjms92t nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqypdfx9umwcyupt4cx38klfhl0f3saf3ar47jr7rcyj69dzyxve7tqk8wmcm nostr:nevent1qqsve084cxu5kw3gvqhjaehfge202z2nyddft89ufn9j73wyynwzhwczwz8j2 nostr:nevent1qqs26rp3gc2dhz4yznynym0y3c6y257kt2u773dvaaf87uf40fzjmcqk2zxxm nostr:nevent1qqsf3jx69s6guydhfxqstcw2m5aaw0zpum74aawe79nhz3xyg7p7dks0x9gn5 nostr:nevent1qqswtgfxseqwnt424ay668ps782drdmxkyyqj8uk8lfxs264gayfnkg3ls82a nostr:nevent1qqsqd257ng55ynkrwe3v2skcx29xalz85qcgn3ghj8ug4lqt9ewqvwgshz303 nostr:nevent1qqsw04zd3wgd3c5ztave9yhhavupl7pc3e4rcke5qn4azn8gpctz23cm7e5p8 nostr:nevent1qqsv8kqnr36jyhj9tnc602p6njakhgcuf6klm0xfrsngjrxlej9068s9vz3jg nostr:nevent1qvzqqqqqqypzqhcppl47wv97gtgccwlehuapxhusvgwu2ushtdwr2uge2vawjattqyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcpy9mhxue69uhhyetvv9uj66ns9ehx7um5wgh8w6tjv4jxuet59e48qtcqyrpm5t3gxyjxnfw6y8eu2j0mpgf8acj83c86ueykdqke6nxchjku63rl6q5
11:20 - 14:30 Junさんの家でまったり・ねるねるねるね
Junさんにあめさんを駅に送ってもらった後は、残ったメンバーでテレビを見たり、ねるねるねるねを作って皆で食べたりしていました。
りらさんが仙台に行くため、14:30で帰っていきました。nostr:nevent1qqsya6u4r9amxs32m4k45s9203ph3kwmtlyddq283zrtyufk3z7tk9gaw3dyv nostr:nevent1qqs0nr6xznhxr4hfrczatlgy26lcrlup3zg8ey6j6ldthxnu9fy3mfq7tauam
14:30 - 16:30 伺かレクチャーを受ける
Junさんにりらさんを送ってもらっている途中、せっかく伺かベテランのDonさんがいるので
伺かを始めました。
※元々伺かやSSTPには興味があった
Donさんに伺かの基礎や「Nostr x 伺か」のOSSの機能などをレクチャーしてもらいながら、
Nostrと伺かで出来ることを話し合っていました。個人的に驚いたのは、一方通行で喋らせるだけだと思っていた伺かが、SSTPを通じてデスクトップマスコットとシーケンシャルに「やりとりができる」ことです。
非常に拡張性が高く、Nostrと同じで無限に遊べそうな雰囲気を感じました。伺か (うかがか) とは
2000年5月25日に初公開されたデスクトップ常駐型のフリーウェアで、24年間色んな人が発展・メンテナンスしています。
SSTP (Sakura Script Transfer Protocol) と呼ばれるプロトコルで指定のポート番号 (9801番)あてにメッセージを送ると、デスクトップマスコットを喋らせたり色んなことができます。
プロトコル仕様が公開されており、SSTPクライアントやサーバー、ベースウェアまで自作することが可能です。詳細 https://dic.nicovideo.jp/a/%E4%BC%BA%E3%81%8B
伺か参考 (ばぐとら研究所)
現在デファクトスタンダードとなっているベースウェア、SSPがここからダウンロードできます。 https://ssp.shillest.net/
nostr:nevent1qqsyrz64vff9fjkpj297qyr278d2a58l3fuysgknsm8jwyuwy6v8hcgvmn4mt nostr:nevent1qqsdzfjfvxxk5ph49x40s3hf8pdgazzq2x5xekd6ztqnqw4y4z3r8as4pdywy nostr:nevent1qqsr8sdds33g53asp7c45v3eems3vj3qhtxayvku9nxext95aauuuaq4d6t0x
16:30 - 17:30 四谷ラボの配信アーカイブを見る・帰宅
Nostrasia 2024やBluesky meetup、Nostr勉強会の配信アーカイブを見ながら、当時の思い出やNostrの未来について語っていました。
こういうのを忘年会や新年会でやっても面白いかもしれない。
18時の山形駅発の新幹線を取っていたので、18時にJunさんに駅まで送ってもらい、山形を去りました。四谷ラボの配信アーカイブ
https://www.youtube.com/@428-lab
終わりに
私は1泊2日でしたが、山形を味わい尽くしてリフレッシュすることが出来ました!
今回、Junさんには企画だけでなく車で色々連れて行ってもらったりと、本当にお世話になりました。
次に直接お会いしたら、何かしらもてなしたい。また、Donさんに直接会えて色々話せたのは本当に貴重でした。聞くところによると、Nostrのオフ会だけでなく、歴の長い伺か仲間とのオフ会も出たことがないらしいです。
また山形に行きたい!と思えるようなオフ会でした。
-
@ 82b30d30:40c6c003
2024-10-11 12:25:34[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
[38]
[39]
[40]
[41]
[42]
[43]
[44]
[45]
[46]
[47]
[48]
[49]
[50]
[51]
[52]
[53]
[54]
[55]
[56]
[57]
[58]
[59]
[60]
[61]
[62]
[63]
[64]
[65]
[66]
-
@ 82b30d30:40c6c003
2024-10-09 03:51:41[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
-
@ 319ad3e7:cc01d50a
2024-10-08 14:33:14https://image.nostr.build/4824c65d9a07c577bee8591b18ee147e7a457849fbaee53244667ec062914751.jpg
OCT 2024 | ISSUE 2 | LETTER FROM THE FOUNDER | LIFE EXPERIENCE | FEATURED RECIPES | REVIEWED RECIPES | ECONOMICS | MICROFICTION | FAMILY FOODLOVE | FOOD SWOON | NOTE SYNCING | SOUNDS | QUOTE OF THE MONTH | UPCOMING EVENTS | ANNOUNCEMENTS | LANGUAGE | #NOSTRASIA2024 ALBUM | FINAL THOUGHTS
LETTER FROM THE FOUNDER 📝
Hey Everyone!
Exciting things are cooking at Zap Cooking! We’re thrilled to announce that we’ll be in Happy Valley, State College, PA, on October 12th as proud sponsors of Nostr Valley. It’s shaping up to be an incredible weekend, and we can’t wait to share it with you! We’ll be hosting a dynamic panel that dives deep into the intersection of food, culture, and, of course, the unique world of Nostr. This event promises a great mix of good times and engagement, and we’d love to have you join us! If you're interested, sign up now at nostrvalley.com.
We’re also excited to have you reading our second monthly newsletter. At Zap Cooking, our focus goes beyond development - we're committed to creating content that inspires. Follow our npub on Nostr to catch flavorful food ideas and captivating creative content. We’re working on fresh perspectives and new projects that celebrate cultural diversity, all while keeping the quirky, authentic spirit of Nostr alive. Thanks for being part of this journey with us. Let’s keep Nostr weird and delicious!
Seth
https://i.nostr.build/nQqsPGmJ8hjvxROK.png
Artwork by Bread and Toast | https://breadandtoast.com/
LIFE EXPERIENCE 😮💨
In August 2024, Nostriga held the afterparties at the Basement, an underground Bitcoin bar in Riga, Latvia. The crowd spent the nights enchanted in conversations, dancing, drinking, and smoking cigars to celebrate freedom and life.
It was a fascinating experience smoking cigars with the Nostr men on those cobblestone streets, reminding me of my younger years working in a private social club, where the cocktail lounge would fill with a thick layer of cigar smoke as I crafted and served Bourbon or Rye Manhattans, Old Fashioned cocktails (one with Sweet 'n Low!), and neat single malt Scotch whiskies.
Recently one of the voices of Nostr - The Beave - tagged me in a note, introducing me to Duchess and their love of coffee & cigars. In less than twenty minutes, Duchess and I were collaborating for the next Zap.Cooking newsletter. The following review is going to take us out of the nightlife and into a morning zen session. - SimplySarah
CIGAR & COFFEE | Duchess
https://image.nostr.build/eff42693d5d4c9f086c25a11e57563b5163dad2f3da600de5e835ba2e1a1a842.jpg
There’s nothing quite like starting your day with a good cigar and a cup of coffee. The rich, earthy flavors of a cigar paired with the bold aroma of coffee create a perfect harmony that awakens all the senses. The Coffee will give you that little morning boost, while the cigar will ease you into a calm, zen-like state. Together, it’s a ‘boosted zen’ that really sets the tone for a productive yet relaxed day.
CIGAR | PDR 1878 DARK ROAST CAFE
A cigar known for its rich, coffee-infused flavor. This particular one is designed to complement a dark roast coffee experience.
https://image.nostr.build/0ab1bb066281c4d6ed2cf0f65548076255535552c27b7a723953bd1ba5713cbe.png
The PDR 1878 Dark Roast Cafe cigar has a unique, slightly spicy profile that pairs beautifully with a cup of dark roast coffee. The coffee I paired with my cigar this morning was one of my favorite dark roasts: Jamaican Blue Mountain Roast, from Jamaica. Another dark roast that I love but didn’t have on hand is Black Ivory Coffee from Thailand.
COFFEE | JAMAICAN BLUE MOUNTAIN COFFEE
Known for its exceptional smoothness, mild flavor, and low acidity, Jamaican Blue Mountain Coffee is one of the world’s most luxurious and sought-after coffees. Grown at high elevations in Jamaica’s Blue Mountains, this coffee is loved for its balanced and refined taste.
https://image.nostr.build/57700f4defe71f9f01c9406ca7c1d6cbf4ccdc621a9b48db31065834079b0b17.png
Most purists drink Jamaican Blue Mountain Coffee without milk or cream to fully appreciate its unique and subtle flavors. However, I like to add fresh cream from the farm if you have access to a local farmer. I feel that adding cream creates a richer, smoother cup, no matter what coffee I’m drinking.
Coffee and cigars are both fascinating rabbit holes, much like wine, if you're interested in going down them.
ENJOYABLE PART OF SMOKING A CIGAR | Cigars are enjoyed primarily for their flavor. The rich taste of a cigar comes from the blend of different tobaccos, which is best experienced by holding the smoke in your mouth, where your taste buds can fully appreciate it. Inhaling isn't necessary and actually makes the experience less enjoyable because cigar smoke is much stronger and can be harsh on your lungs.
HEALTH BENEFITS OF SMOKING A CIGAR | Nicotine, in small doses, can have some positive effects, like improving focus and mental sharpness. It also stimulates certain receptors in the brain that can support heart health. Cigars are the healthiest vehicle to deliver nicotine into your body, as they offer a slower, more natural release of nicotine compared to cigarettes or other forms of tobacco.
ENJOYABLE PART OF DRINKING COFFEE | Coffee is widely enjoyed for its flavor and aroma. The rich, complex taste of coffee comes from carefully roasted beans, which can range from bold and dark to mild and fruity, depending on the origin and roast. Sipping coffee slowly allows the palate to savor the intricate layers of flavor, from chocolaty and nutty to floral and fruity notes. Whether black or with milk, coffee offers a comforting and energizing experience.
HEALTH BENEFITS OF DRINKING COFFEE | In moderate amounts, coffee offers several health benefits. It is rich in antioxidants, which are known to support heart health, brain function, and help combat inflammation. The caffeine in coffee can boost focus, mental sharpness, and physical endurance by stimulating the central nervous system. Some studies have also suggested that coffee may support heart health, improve metabolic rate, and reduce the risk of certain diseases, such as Parkinson’s and Alzheimer's. Organic coffee—free from pesticides and chemicals—provides a cleaner, more natural source of these benefits.
Find Duchess on Nostr: duchess@orangepiller.org
FEATURED RECIPES 🥪
https://image.nostr.build/8ec8e09bc081e7f70de446fda8fc85d485c01ed4579b13f511753568b21f3c8b.jpg
https://image.nostr.build/e902abea3014325e848f7cbc8f1bd00f8899880fedcd2490361d12ec595c451a.png zap.cooking/recipe/naddr1qqsxxmrpwdekjcedwp3zv63dwa5hg6pdvykkx6r9v4ehjtt5wa5hxaqzyzmjwnfgu05c80mjpk6tfgf2x86u0mexyvsdqhp9ajgy3xkfjc5vkqcyqqq823cfuzkwc
https://image.nostr.build/b2a84afc5ea7948c3f8087b555ce9a43a5f543402b1ecb283cc884b93f1f8a2b.png
zap.cooking/recipe/naddr1qqvxyet9vckkzmny94sh2cn9wfnkjmn9943h2unj0ypzq3xurskmnslm67lwjft7e66jhc7033qt4aak8arw266c5ycuwnctqvzqqqr4guhg7y8e
https://image.nostr.build/ec7ef7667e252d63164682ed420ae94dc15758798cd80d62e8491ec35cef0f69.png
zap.cooking/recipe/naddr1qqfkvetjd4jkuar9vskksmm5945x7mn90ypzqqwsh0u4xlh3l5xalq2lg8qcjeec7636pasq75w8s2ma3zg3xr2vqvzqqqr4guvhlwd6
https://image.nostr.build/13b8af46a09dcf0ab04a37aae7f22c16fe31740ef4bc0984e8cf7b582e45332f.png zap.cooking/recipe/naddr1qq8xyetpdeej6mmw946x7ctnwspzp89qh469qapddgsrr8qw84xx08y7q34fm3cw3m64c2g9ufq9ydqtqvzqqqr4gug3lkp4
RECIPE REVIEWS ✏️
https://image.nostr.build/5ef1e884bde50d01215de6c3ed63e2d9a78bac0bd8eade1df6bf91c1b63ad3c1.png zap.cooking/recipe/naddr1qqtkwctjd35kxumpw43k2ttxdaez6ctw0ykkycn3qgswat02dja4qx9pjrcpz7zhmegnesn36fxfgl2kekpv2jntvjhy0fqrqsqqqa28m4rxcx
https://image.nostr.build/96299dcb152c513360f171038d032de102c29497634e1ba7b60abc1b215a4a42.png zap.cooking/recipe/naddr1qqjkket5dukksctd9skk2em895nz6cmgv4jhxefdvfex2cttveshxapdvd6hquczyzdu956dmk5rm9p2rlwndf6g07d2a36qmvjw57tn9kgw8q73n555sqcyqqq823c8r4tsp
ECONOMICS 🍞
AN ARTICLE ABOUT BAKERS | Silberengel (4 minute read)
https://image.nostr.build/4f11eea6d6a5f7476c0bbe0504f57e7111454c9b30ee0816ee0f85816d240e3b.jpg
Let's Talk About Baking Bread
I've mentioned a few times, how large-scale central planning inevitably leads to artificial scarcity and rising prices. Allow me to illustrate -- using a completely invented allegory about bread -- that has absolutely no parallels to any economy you may already be familiar with…
Read More | habla.news/a/naddr1qvzqqqr4gupzplfq3m5v3u5r0q9f255fdeyz8nyac6lagssx8zy4wugxjs8ajf7pqqxnzdejxucnwvfnxvmnsd3cgqxylq
MICROFICTION 📖
GOOD DEEDS | Rustypuppy
Being a trail guide at the UCP (Unique Creatures Preserve) meant I saw a lot of weird things. Some I show to the tourists; some I don’t.
The starved, green-skinned toddler with the turtle shell back, beak, and dish of water on his head was one of the latter. As he ignored the bologna sandwich and devoured the cucumber salad from my lunch, I flipped through my identification guide. Finally found him in the Japanese yokai section; a kappa - known for drowning animals and people, loves cucumbers and sumo wrestling, can be friendly and helpful, empty the dish on its head to severely weaken.
I filled up his dish from my water bottle, and he followed me down the mountain trail. As soon as he saw the glimmer of water, he ran ahead and dove in. I assumed from the lack of frothing water and the fact he didn’t end up punted onto the bank meant the lake god had accepted him.
Later that week, two teens stumbled into our office. One guy, obviously stoned, wanted us to give him the official wizard certificate since he had just walked on water. The other guy, obviously drunk, said his friend needed the druid certificate because he had summoned a turtle to appear under his feet, which is how he had spent the past half hour walking across the lake. I told the intern to take their contact info and arrange a taxi.
The next day, I left a large container of cucumber salad at the edge of the lake.
RECIPE REFERENCE | Grandma’s cucumber recipe zap.cooking/recipe/naddr1qq0kwunpdejx6cf8wvkkxun9v9khjttrw43h2mtzv4ez6umpd3skgq3qkgh77xxt7hhtt4u528hecnx69rhagla8jj3tclgyf9wvkxa6dc0sxpqqqp65wss0rqd
Follow Rustypuppy | https://rustypuppy.npub.pro/
FAMILY FOODLOVE 🐤
https://image.nostr.build/c5b498d176a03742a864de6ae1c833107089e798e4a9c3c111b5be8850df2397.png
https://image.nostr.build/55a8948263766f0f4360d9bddb30ada915cae51a93b3d7be1b4a7a9e6cc21b71.png
https://image.nostr.build/f17a5dd1cf93ae0d20b7904e0e0274d4dda3a6dd4c90c506b512232af08bec83.png
https://image.nostr.build/ef81f242c481e60cff9dd4a66ac74326a8e27ff0f87ae1f51a915046eecb8258.png
FOOD SWOON 💌
https://image.nostr.build/a0eeb835a8eee1221f4e6aeeb884b5897eea7335680f2e5b35bee35b517db432.png https://image.nostr.build/f2a8a21cd1587a39d0ce5fe09ef5176b773416d0419a6b5fb404c02fa6616730.png https://image.nostr.build/c4f54698566500ace19d12bef5168b0a6e7047a0c8c1daa3faa207253177b104.png https://image.nostr.build/22a0aaacbf37e88db702db655a4f9e7b0692d586304e9ecfffa694f379a88fd9.jpg https://image.nostr.build/f3918b3c68dc04bc3aae4e5202702875ebd4668676abe64fbc1e8cb001dde3c2.png
NOTE SYNCING 🗒️
“..everyone needs to eat pizza. Each individual country can choose what toppings they want on their pizza, so whether that’s pepperoni or mushrooms or anchovies if you are weird…” | OpnState on https://fountain.fm/episode/dg7rlmtOICVDGwtr7Jnc
"I eat sardines out of the tin with chopsticks." | @the_beave
“Chef has renamed Sardines to ‘Salt Daddies’. Please inform the staff.” | @enki
“My segue into sardines #FoodPorn” | @Deva Pyne (talking about HowToFoodPrep’s Sardine Dish) https://image.nostr.build/0f979d1bb7c0ba3c600694b83c5bc8e84ce4ff039839fb9f9af7ea727accef8b.jpg
SOUNDS 🔊
MUSIC
MAN LIKE KWEKS x BILLIV
Shoutout to Man Like Kweks x Billiv for making songs about PB & J cool! | singing Go together like peanut butter and jelly... | NOSTR CITY | KWEKS x BILLIV • Man Like Kweks (wavlake.com) | https://wavlake.com/track/f46d82f2-7f26-4357-9258-32da68324f74 | Man Like Kweks made a special appearance on Detox Radio | https://fountain.fm/episode/hGH0AgRj6hvrZEnSlX6n/ | https://image.nostr.build/baf111d653e75e88fc818529ba7872563e72be9540b21d0dea70b712d565dadd.png
PODCASTS
PLEBCHAIN RADIO
https://image.nostr.build/748c4c9f104582f583c3e3e30603be3964d0ddd3c8041a72680d5b8d48bc7108.png Zap.Cooking's very own Seth joins former Nostr CEO Derek Ross on Plebchain Radio hosted by the infamous duo: QW & Avi | CLIP - Super Rare Nostr.Cooking Magnet | "That's one of those physical NFTs" | https://fountain.fm/clip/dTzOg3VXOtLaXdR28oKE
ON THE FLY WITH STU
https://image.nostr.build/56ac7daf7d8158cde5f31ac2555f03ba26fe9de1afb5eeb26f4ba54f350bb7b8.jpg Recommended listening from our new fly fishing aficionado, onthefly@iris.to with Stu aka ON THE FLY WITH STU | https://fountain.fm/clip/9KjsUBPwmnmpR11UscKP
THE BITCOIN PODCAST
https://image.nostr.build/53fcc6f8468f3f18d0920fa0dcf386c01b7f02833101984bb26fff31916da498.jpg A VERY special thanks to Walker, the host of The Bitcoin Podcast, for giving Zap.Cooking a shoutout on his platform | "Okay this is pretty neat. Recipes on Nostr. Like the recipe? #zap it. Check out https://zap.cooking #grownostr" | Please check out one of the best voices that Nostr has to offer at bitcoinpodcast.net/podcast
QUOTE OF THE MONTH 📣
"Nostr and Bitcoin will change the world because they're like peanut butter and jelly - decentralized freedom meets unstoppable money, making sure no middleman gets a slice of your sandwich!" | Uncle Rockstar✊
UPCOMING EVENTS 🥳
Submit your Nostr event with @ZapCooking on Nostr
Nostr Valley @ Happy Valley Brewing Company | October 12, 2024 - 12pm to 4pm (est) Sign Up @ www.nostrvalley.com
Nostrville 2.0 No Panels, All Party! @ Bitcoin Park | November 6, 2024 - 4:30pm to 7:30pm (cst) https://www.meetup.com/bitcoinpark/events/303283108/
https://image.nostr.build/d484fb5058f39d7f15dfe048dc91b1b697c45c117612ec0202d8a5bb681af02a.jpg
ANNOUNCEMENT 📰
RABBIT HOLE RECAP REBRANDING
https://image.nostr.build/dacfbb06c6b76582814ad035ff44d9a66a885cdb97783e56b491d6b2e4b6d1f5.png https://video.nostr.build/a6b670ea0839d2d5d35ee4d38d9a082a0ce4b93aeb6ffaad18c89de829ccbc95.mp4
https://rhr.tv/ | Please send them a warm congratulations! 🤠
https://image.nostr.build/497029805a46bbb4942bcb13a0e8f0238e3c7956282d4d2866ca342d19f54bad.jpg
LANGUAGE 🏫
SCHOOL'S IN SESSION
Write "egg" in 50 of the Most Popular Languages
English: egg | Spanish: huevo | French: œuf | German: Ei | Italian: uovo | Portuguese: ovo | Russian: яйцо (yaytso) | Chinese (Simplified): 蛋 (dàn) | Japanese: 卵 (tamago) | Korean: 계란 (gyeran) | Arabic: بيضة (bayda) | Hindi: अंडा (anda) | Bengali: ডিম (dim) | Turkish: yumurta | Vietnamese: trứng | Thai: ไข่ (khai) | Persian (Farsi): تخممرغ (tokhm morgh) | Swedish: ägg | Danish: æg | Norwegian: egg | Finnish: muna | Hungarian: tojás | Czech: vejce | Slovak: vajce | Romanian: ou | Bulgarian: яйце (yaytse) | Ukrainian: яйце (yaytse) | Malay: telur | Indonesian: telur | Filipino: itlog | Swahili: yai | Serbian: јаје (jaje) | Croatian: jaje | Bosnian: jaje | Lithuanian: kiaušinis | Latvian: ola | Estonian: muna | Icelandic: egg | Maltese: bajda | Welsh: wy | Irish: ubh | Scottish Gaelic: ugh | Basque: arrautza | Catalan: ou | Galician: ovo | Armenian: ձու (dzu) | Georgian: კვერცხი (k'verts'khi) | Tatar: йомырка (yomyrka) | Kazakh: жұмыртқа (jumyrtqa) | Tamil: முட்டை (muttai)
#NOSTRASIA2024 ALBUM 📷
https://image.nostr.build/9243af94d1ae162bcf9ea14baad39286c4162dc838dd3d82f988e7a032f50328.png
Community Photos & Videos by A.k.A. radish on fire🎤 @hakkadaikon, @HonokaShisha, @Kojira, @Jeroen and the contributors of the hashtag #NostrAsia2024 | Share your Nostr community photos or videos with @ZapCooking
MESSAGE from A.k.A. radish on fire🎤 @hakkadaikon
Hello!
Thank you very much for coming to Nostrasia 2024 on the 23rd of September!
Now, you can see the live-streamed videos of the speaker events and the afterparty from the YouTube archive. Please check them out especially if you could not join the talking events. You can jump into a session you like from the chapter lists in the video descriptions.
Thank you!
Nostrasia 2024 Part 1 https://www.youtube.com/live/i-oHjdYWo1E
Nostrasia 2024 Part 2 https://www.youtube.com/live/tGeHKrqTA4A
Nostrasia 2024 Part 3 - Afterparty (Tuna cutting show) https://www.youtube.com/live/ery0aWATjWk
GIKOGIKO KAIJI TUNA | KOJIRA
https://i.nostr.build/Y2jTdGxblC98KeWI.jpg https://v.nostr.build/dKSZbmNOZ9JbM8wv.mp4
SHISHA CAFE, BAR & COMMUNITY SPACE
https://i.nostr.build/UdNbeXdB628wW2dK.jpg
JEROEN'S TOKYO VISIT
https://image.nostr.build/8e384c2620088f3fe5001f797576625649e0c0f53f3415193d2f51a92d16ba3b.jpg https://image.nostr.build/b43988efa086653155b7c9109ca5f4d2903adb5e0879a302a9ef743c05263523.jpg https://image.nostr.build/f2b584e728f95b747a5795741451df63c36c5eafef5886ecd3635c381bcd40e2.jpg https://image.nostr.build/d9e6c2ccd290a558202747e471ec5df025e0c37720f0563a7f5928ed56429a9b.jpg https://image.nostr.build/c9f5ec9f7ec03cd2f4d9c12f151e7548879b022590d063dc2226f5deb00c40f1.jpg https://image.nostr.build/cd58ed78004f46a65b84ea279fee5a07e4ca6762b4964b1b95149dde2303bc6a.jpg https://image.nostr.build/674ef0111ee987967bf1f98bb880bc3d7c4667033d5f067668881fd3d8bf1918.jpg https://image.nostr.build/5df690358d06cc62fe9260311d606c812a67a0d4b4b6779a3c48f4986446799e.jpg https://image.nostr.build/837696634b1e546ee1f6e2ec8cd1aa4f813df017010c4434c9b93291fa4a6d1c.jpg https://image.nostr.build/771c0b2f8e15aa901f4ef1da34be8843eeac716a1f792be714745283be71eecd.jpg https://image.nostr.build/48555bd4db7bb7f707dd78882dafd669cb1f860d851389d18ab0b1f2e3423da6.jpg https://image.nostr.build/76d3c990cb337d9f8a413032a0c4b7ab60c7b3faffc52baed6c7bcda9ddec8ee.jpg https://image.nostr.build/4c532360c28aaceb7fadbcc0ff0e9737be27d41a8213c79cbd0621f2b367a15b.jpg
FINAL THOUGHTS 🤔
What are your thoughts on the instant translation of food videos to enhance global accessibility?
https://video.nostr.build/4dba5f5e87d2f9bfda5f04dae82c3ce8d7cee41f19033906c6d59a60dd42a9a5.mp4
What is your opinion regarding Trump’s visit to PUBKEY and purchasing food & beverages with Bitcoin?
PUBKEY: * Smash Burger: $12.50 x 50 = $625.00 * Diet Coke: $3.00 x 50 = $150.00 * Subtotal: $775.00 * Tax: $68.77 * 20% gratuity: $155.00 * Total: $998.77 A former president spending #bitcoin at your bar: PRICELESS.
https://image.nostr.build/70c72f924b9cd8d429e0f1c030ce35c52604485e553f1c24af0b1d1737f3adc9.jpg https://image.nostr.build/f1bd17df540bceb7f8f4f2ed7979cc20c86e7d38ddc35d1d8988321c08cc1ee4.jpg https://media.primal.net/uploads/2/ed/89/2ed896f3be4eaec166230e582e4228a53d82652e38a90620aef09cb5da5b1c7d.png https://v.nostr.build/sbPbqOIvSpCffo4I.mp4
fin💐
September Issue 1 | https://habla.news/u/zap.cooking/ZAP-COOKING-NEWSLETTER-4yxs6s
-
@ 5f010feb:3ae9756b
2024-10-03 13:28:13[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
[11]
[12]
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
[38]
[39]
[40]
[41]
[42]
[43]
[44]
[45]
[46]
[47]
[48]
[49]
[50]
[51]
[52]
[53]
[54]
[55]
[56]
[57]
[58]
[59]
[60]
[61]
[62]
[63]
[64]
[65]
[66]
[67]
[68]
[69]
[70]
[71]
[72]
[73]
[74]
[75]
[76]
[77]
[78]
[79]
[80]
[81]
[82]
[83]
[84]
[85]
[86]
[87]
[88]
[89]
[90]
[91]
[92]
[93]
[94]
[95]
[96]
[97]
[98]
[99]
[100]
[101]
[102]
[103]
[104]
[105]
[106]
[107]
[108]
[109]
[110]
[111]
[112]
[113]
[114]
[115]
[116]
[117]
[118]
[119]
[120]
[121]
[122]
[123]
[124]
[125]
[126]
[127]
[128]
[129]
[130]
[131]
[132]
[133]
[134]
[135]
[136]
[137]
[138]
[139]
[140]
[141]
[142]
[143]
[144]
[145]
[146]
[147]
[148]
[149]
[150]
[151]
[152]
[153]
[154]
[155]
[156]
[157]
[158]
[159]
[160]
[161]
[162]
[163]
[164]
[165]
[166]
[167]
[168]
[169]
[170]
[171]
[172]
[173]
[174]
[175]
[176]
[177]
[178]
[179]
[180]
[181]
[182]
[183]
[184]