1
0
hugo/content/blog/2024-03-11-name-bluesky.md

573 lines
25 KiB
Markdown
Raw Normal View History

2024-04-23 13:21:26 +00:00
+++
date = "2024-03-11"
tags = ["private","bluesky"]
title = "naming rulesとbluesky"
slug = "name-bluesky"
aliases = "/blog/post/2024/03/05/name/"
+++
最近、名前について考えることがあったので、適当に自分のこととか、blueskyのこととか、これからのこととかを書いていきたいと思います。
## syui
まずは`syui`という名前について見ていくと、案外、規則に沿ってつけられています。
これは、基本的に私の本名、つまり、名前+名字の組み合わせです。名前の先頭から3文字、名字の先頭から1文字を取っています。
例えば、私が`一ノ瀬 修(いちのせ しゅう)`という名前ならこうなります。
```sh
[syu]u [i]chinose
```
なお、当該日本名はペンネームということにしておきます(作品書いてないけど)。
ではなぜ、名前から始まるのかというと、これもアルファベット、つまり、英語のルールに則っています。
主に英語圏の文化では名前+名字の順番が通常です。これはアジア圏の文化と異なります。アジア圏は名字+名前が多く、日本もそうです。
例えば、サービスに登録する際に名前と名字を聞かれることがあります。私は大抵、名前に`syu`, 名字に`i`と入れています。英語圏のサービスなので名前+名字の順になり表記も`syu i`になります。
なぜ英語圏とアジア圏でこのような違いがあるのでしょう。それはわかっていません。ですが、色々な説があると思います。
個人的には、英語圏は個人を尊重し、アジア圏は家族を尊重する文化が強いため、そのようになっているのかもしれないと思います。
私の場合は、アルファベットで記述する以上、アルファベットを使用する英語圏の文化に沿って、名前が決められています。
当時、このようなことまで考えていたかというと、適当です。handle nameというものは、存外に適当に決め、ずっと使っています。
ただ、いろいろな人を見てきて、名前から付ける人、名字から付ける人を見てきて、その人の特徴として、個人主義的傾向があるのか、全体主義的傾向があるのかをなんとなく推測することができます。
そして、それは案外あたっていると思うことも多い気がします。handleを自分の名前にする人はやっぱり英語圏のほうが多く、名字でつける人はやっぱりアジア圏のほうが多い。
私の場合は、少し特殊ですが、上記をもとに推測すると個人主義:全体主義の割合は3:1といったところでしょうか。
ただ、あまり気にしないでください。こういうのは当たりもするし外れもする。占いや性格診断みたいなもんです。たいした意味はありませんし、単なる好みの問題でもあります。
## ai
つぎは、私が使うdomainの`ai`について名前規則を見ていきたいと思います。
これについては色々思うところがあり、迷っているところです。
ちなみに`yui`は使わないのかという疑問について、`syui.ai`にはもとから`yui`という単語が含まれています。
```sh
s[yui].ai
```
したがって、わざわざdomainやnameを取る必要がありません。例えば、`yui.ai`のdomainが空いたとして、よほど思うところがない限り、たぶん取らないと思います。
話を戻すと、今後はaiというネームスペースで色々作っていこうかなと考えています。
## verse
ネームスペースの話になりますが、ここで、少しだけこれから起こることを書いてみたいと思います。
これから世界はどうなっていくのかに注目が集まっているように感じます。多くの人々が「変化」の予兆を感じ取っているということです。
これまでは、既存の大企業があって、そこがどんな製品を出し、どんな成長をしていくかが注目されていました。
しかし、大きな変化は、これまで知らなかったなにかが出てきたときやこれまで知らなかった企業や製品、ソフトウェアやハードウェアが出てきたときです。例えば、`AI`とか。
ですが、こういうのはどの分野にしても、さきがけがあるものです。
最近、`anime`が人気という言葉を聞いたことはありませんか?
少し前から人気だったというのは確かにその通り。しかし、最近はそれを通り越して、すごく人気なのです。
いやいや、少し前からすごく人気だったじゃないと。いえ、それは違います。それは単にあなたが先駆けだっただけ。世界的にみて、人気はあったけど、すごく人気ではなかった。
さきがけの話をすると、例えば、`原神`を作ったmihoyoという企業はこんなことを言っています。
「オタクが世界を救う」
最近、あらゆることはこの`オタク`がさきがけになっています。
つまり、オタクがやっていたこと、見ていたものなどが数年後、数十年後に大流行し、メジャーになっている。そういう傾向があります。
例えば、分散snsも間違いなく標準になります。
今の`オタク`こと`ハッカー`たちは、数年前から自前のインスタンスを建ててやり取りするようになっています。
この流れは、今後何年かで一般化していくでしょう。
しかし、分散snsとは一体何なのでしょう。どのような要因で、どんな風になっていくのでしょうか。
ここではわかりやすく分散snsと言いましたが、今後主流になるそれ自体は分散snsというより、どちらかというと名前に関係があります。
最近、metaverse(メタバース)やfediverse(フェディバース)、[octoverse](https://octoverse.github.com)(オクトバース)と呼ばれるものが注目されていますが、その根底にあるのは「変化」の予兆です。
つまり、ネットは今後どのように変化していくのか。変化は確実に起こる。けど、どのように変化していくのか。それが注目されているのです。
各企業や団体がその変化を予測し、このようになっていく、このようになってほしい、それを表現したのが、なんとかバースと呼ばれるものだったりします。
私が確実に来るだろうと予測しているのは、今後、ネット空間では名前の枯渇問題によって、domainの重要性が増し、その要望に答えるような環境が形作られていくということです。
私は2013くらいからネットを始めました。
当時、`syui`さんは私以外は一人もおらず、検索で私しか出てきませんでした。
しかし、2024現在、`syui`さんはいっぱいです。
これからネットに接続する人が増えれば増えるほど、あるいはネットに接続できる人を増やそうとすればするほど、同じ名前の人が増え、判別が難しくなり、また、名前を取られていることが増えるでしょう。
時代が進むほど、先行者利益が拡大し、それはどこかでリセットしなければなりませんし、リセットされるはずです。
それが分散化だったり、あるいはセルフホストだったり、そういった形になると予想しています。
これはすでにオタクたちの動向で確実に来ることはわかっています。
誰だって、自分で決めた名前でネットをはじめたいし、はじめられるべきです。そのような環境になっていくでしょう。
## protocol
さて、次はprotocolの話をします。世の中にはいろんなprotocolがありますが、そこでも名前は重要です。
`git`, `ssh`や`http`の場合は以下のような感じになります。
```sh
git://git.syui.ai/ai/os
${protocol}://${hostname}/${username}/${repository}
```
認証を入れる場合はこんな感じ。
```sh
${protocol}://${username}:${password}@${hostname}:${port}
```
mailやsns(atproto)の場合はhostnameよりusernameが先に来ます。
```sh
${username}@${hostname}
${username}.${hostname}
```
そして、atprotoの場合は、すごくて自分が所有あるいは占有するdomainをそのまま使えるようにもできる。この場合は、`username = hostname`になります。
```sh
${hostname} = ${username}
```
私は特にこのことが気に入っており、`atproto`が一番いいと思う。一番シンプルで、一番短く、一番わかりやすい。そして、protocolもいい。名前がいいんです。
```sh
${protocol}://${hostname}
at://syui.ai
```
こういうことは、あまり気づかれるようなことではありませんけど、おそらく、時間経過とともに誰かが気づき、そういった人達が徐々に増えていくと見ています。
## bluesky
> この記事はblueskyの1周年ということで、これまでblueskyでやったことを加筆します。
私がblueskyを始めて1年が過ぎました。アカウントは[@syui.ai](https://bsky.syui.ai/)です。
blueskyを始めた日付、つまり、アカウント作成日はplcに記録されています。初投稿はpdsにあります。
```sh:account.t
$ echo $plc | jq .createdAt
"2023-02-23T01:09:21.591Z"
$ curl -sL https://plc.directory/export|jq -s -r ".[]|.did"|nl|grep $did
386 did:plc:uqzpqmrjnptsxezjx4xuh2mn
```
```sh:post.t
$ curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&reverse=true"|jq ".[]|.[0]?|.value.createdAt"
"2023-02-23T01:20:33.487Z"
```
まず、blueskyという名前について見ていくと、その青空は鳥(twitter)の背景を意味します。
protocolは本来、ユーザーに意識されない領域の技術です。それ故、ユーザーに意識されることなく自然に動作することが美学とされます。これが技術背景と呼ばれる理由です。
protocolの名前は`[at]poroto`で、このatは`@`を意味します。
twitterは、ユーザー名のみの`@`でやり取りするため、例えば、mailに比べ非常にシンプルですが、あくまでサービス内に閉じています。
これをサービス外にも有効にするため開発されているのがatprotoで、そのモデルケースがblueskyです。
基本的には、blueskyのユーザーが増え、atprotoを採用する企業(または個人)が増えていくと成功です。
### plc : createdAt
私がアカウントを作った日付とアカウント番号を取得する具体的な方法です。
```sh:did.t
$ handle=syui.ai
$ did=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.describeRepo?repo=$handle" |jq -r .did`
$ echo $handle = $did
syui.ai = did:plc:uqzpqmrjnptsxezjx4xuh2mn
```
```sh
$ plc=`curl -sL https://plc.directory/export|jq "select(.did == \"$did\")"`
$ echo $plc
{
"did": "did:plc:uqzpqmrjnptsxezjx4xuh2mn",
"operation": {
"sig": "ZaVvS3exIwu_fVJcejULmgUxzOt1hnh8qAo97iIL-1YXtEKDVSLkZ7FjpBxUKA_SKHxy7ybL0P9MVOHvOwVd3A",
"prev": null,
"type": "create",
"handle": "syui.bsky.social",
"service": "https://bsky.social",
"signingKey": "did:key:zQ3shP5TBe1sQfSttXty15FAEHV1DZgcxRZNxvEWnPfLFwLxJ",
"recoveryKey": "did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg"
},
"cid": "bafyreifegl4dekll44vzgkn7f5b6tdllbwfv4qh4hqsrgwwgkr3czy75ky",
"nullified": false,
"createdAt": "2023-02-23T01:09:21.591Z"
}
```
```sh
$ echo $plc | jq .createdAt
"2023-02-23T01:09:21.591Z"
```
### pds : createdAt
```sh
$ handle=syui.ai
$ curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&reverse=true"|jq ".[]|.[0]?|.value.createdAt"
```
### plc + pds : createdAt
1000番目以降のユーザーはexportを指定する必要があります。
通常のユーザーに限ると`plc`でアカウント作成日を探るには`pds`との連携が必要です。
ここで言う通常のユーザーというのは、登録して間もなく初投稿を行うユーザーのことです。
```sh:first.zsh
#!/bin/zsh
handle=yui.syui.ai
plc=https://plc.directory
if [ -n "$1" ];then
handle=$1
fi
did=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.describeRepo?repo=$handle" |jq -r .did`
timed=`curl -sL "https://bsky.social/xrpc/com.atproto.repo.listRecords?repo=$handle&collection=app.bsky.feed.post&reverse=true"|jq ".[]|.[0]?|.value.createdAt"`
curl -sL "$plc/export?before=${timed}"|jq "select(.did == \"$did\")"
```
```sh
$ chmod +x first.zsh
$ ./first.zsh yui.syui.ai
{
"did": "did:plc:4hqjfn7m6n5hno3doamuhgef",
"operation": {
"sig": "rucbNY6h0vv_FjHbtyDFmMrCIhs1iT2hyEU9xorQKQVgnPs4e25I4B4d2dDtKk-ZtLQeDvfhfz99JG0fU1OFTg",
"prev": null,
"type": "create",
"handle": "yui.bsky.social",
"service": "https://bsky.social",
"signingKey": "did:key:zQ3shP5TBe1sQfSttXty15FAEHV1DZgcxRZNxvEWnPfLFwLxJ",
"recoveryKey": "did:key:zQ3shhCGUqDKjStzuDxPkTxN6ujddP4RkEKJJouJGRRkaLGbg"
},
"cid": "bafyreihb4cjlp3htpj3lwy3qdfbzrbmdubkaemk7dot4hkq6zxt4dwsq74",
"nullified": false,
"createdAt": "2023-02-24T23:54:57.259Z"
}
```
もし初投稿がexportの1000を超えてしまった以降に行われると処理が面倒になります。また、plcは時間とともにjsonが変化しているので注意が必要です。
## pds
`2023-03-21`にはpdsを建てたりしてたみたい。
```sh
$ echo $plc|jq -r ".operation.services.atproto_pds.endpoint, .createdAt"
https://syui.ai:2583
2023-03-21T05:46:36.129Z
```
今はこのpdsは閉じています。
```sh
$ pds=https://syui.ai:2583
$ date=2023-03-21T05:46:36.129Z
$ plc=`curl -sL "plc.directory/export?after=$date"|jq "select(.operation.services.atproto_pds.endpoint == \"$pds\")"|jq -s ".[0]"`
$ echo $plc|jq .
{
"did": "did:plc:schldsdljwxcdtslnbqaoifh",
"operation": {
"sig": "kPILmuAdRbzGhMNx3Ws2s-ath9tTVZYvt8FFQTiaPCyfsXkPPd_tjIFISzoJJ-THIRuZQMMNffkPoLMfFT-v1g",
"prev": null,
"type": "plc_operation",
"services": {
"atproto_pds": {
"type": "AtprotoPersonalDataServer",
"endpoint": "https://syui.ai:2583"
}
},
"alsoKnownAs": [
"at://syui.syui.ai"
],
"rotationKeys": [
"did:key:zDnaemXG7VvkNDwNEKbVFhaUvi64fpWouzZg7EBG8A8aKNb99",
"did:key:zDnaemXG7VvkNDwNEKbVFhaUvi64fpWouzZg7EBG8A8aKNb99"
],
"verificationMethods": {
"atproto": "did:key:zDnaemXG7VvkNDwNEKbVFhaUvi64fpWouzZg7EBG8A8aKNb99"
}
},
"cid": "bafyreieqr2y4q22nvyq44s3imadsbjzd3zcddri6teby7zbilmxuq4vyze",
"nullified": false,
"createdAt": "2023-03-21T05:46:36.129Z"
}
```
## plc
例えば、以下のようなscriptでpdsを検索できます。
```sh:pds-search.zsh
#!/bin/zsh
y=2023
f=12
e=31
for ((i=$f;i<=12;i++))
do
n=`printf "%02d\n" "${i}"`
for ((ii=$e;ii<=31;ii++))
do
nn=`printf "%02d\n" "${ii}"`
echo $y/$n/$nn
j=`curl -sL "https://plc.directory/export?after=${y}-${n}-${nn}"`
echo $j|jq -r .operation.services.atproto_pds.endpoint |sort|uniq
done
done
```
> ただし、plcの負担になるのでexportの結果をlocalに保存し使い回すようにしてください。ある程度のcool-timeを置くようにしてください。このscriptは大まかな日付日時を使用しているので確実ではありません。
現在は[plc](https://plc.syu.is)やらbgs, appviewをself-hostしています。
```sh
$ curl -sL plc.syu.is/export|jq -s -r ".[0]|.operation.services.atproto_pds.endpoint,.operation.alsoKnownAs.[],.createdAt"
https://syu.is
at://ai.syu.is
2024-01-09T04:05:11.967Z
```
plcは基本的にblueskyの歴史を記録しています。最初の方にpdsを建ててたときの無茶振りなども記録されています。
```sh
$ pds=https://bsky.syui.ai
$ date=2023-04-21T13:07:52.503Z
$ curl -sL "plc.directory/export?after=$date"|jq "select(.operation.services.atproto_pds.endpoint == \"$pds\").operation.alsoKnownAs.[]"
"at://ai.ai"
```
```json
{
"did": "did:plc:ytvoptig4ddshmwdsjmhtcym",
"operation": {
"sig": "LVC5HRKZS7OshiukWl6WKruYFZsiu9zcek0VzL5L47sHHH6LoJXiTQTrxSfOKfRCUHOdLjA5sP_nzGGeaKVKUg",
"prev": null,
"type": "plc_operation",
"services": {
"atproto_pds": {
"type": "AtprotoPersonalDataServer",
"endpoint": "https://bsky.syui.ai"
}
},
"alsoKnownAs": [
"at://ai.ai"
],
"rotationKeys": [
"did:key:zDnaeoTyG6BWkxZ447eHQEasizV3aTjHVA5e4HKVaYRUmYP4J",
"did:key:zDnaeoTyG6BWkxZ447eHQEasizV3aTjHVA5e4HKVaYRUmYP4J"
],
"verificationMethods": {
"atproto": "did:key:zDnaeoTyG6BWkxZ447eHQEasizV3aTjHVA5e4HKVaYRUmYP4J"
}
},
"cid": "bafyreige5lt42bxay4r3fq4slb4ywdc3vxy45gyo3vdw3ph6cxa4vlbzny",
"nullified": false,
"createdAt": "2023-04-21T13:07:52.503Z"
}
```
## aibot
また、blueskyでは[ai/bot](https://git.syui.ai/ai/bot)を動かしていました。
```sh
$ ./first.zsh yui.syui.ai|jq .createdAt
"2023-02-24T23:54:57.259Z"
```
実は、`aibot`の歴史は古く、mastodon, twitter, matrixのbotとして動かしていたことがあります。
それまで管理者しか実行できないようにしていましたが、blueskyでは、はじめて他のユーザーもコマンドを実行できるようにしました。
当時は、`ai/api`を整備し、[card](https://card.syui.ai/)を引けるようにしたりと、色々な遊びを追加していた時期です。
現在は、`ten`, `coin`などで遊べるようになっています。気になる人は[help](https://git.syui.ai/ai/bot/wiki/help)を参照してください。
```sh
@yui.syui.ai help
https://git.syui.ai/ai/bot/wiki/help
```
`aibot`は、rustで書かれており、`aios`という自作osで動いています。
```sh
$ docker run -it git.syui.ai/ai/os ai
```
アイコンになっているキャラクターのaiには一応、原作があります。
3d-cardや3d-modelを作成し、windowsでgameをプレイできるようにしたりと、色々作れて楽しかったです。
<model-viewer class="ar" src="/obj/super.glb" ar-modes="scene-viewer webxr quick-look" ios-src="https://card.syui.ai/obj/super.usdz" exposure="50" environment-image="https://card.syui.ai/obj/env.jpg" auto-rotate autoplay ar camera-controls width="100%"></model-viewer>
## aios
`aios`は`archlinux`をベースにしているので、名前規則も同じです。
|id|name|code|
|---|---|---|
|arch|Arch Linux|archlinux|
|ai|ai os|aios|
ここからは少し名前の話に戻ります。
archとの違いは大文字を入れるとややこしいので全部小文字に統一しています。また、archはtypeをあらわすlinuxを後半に持ってきていますが、私はosにしています。
repositoryは[ai/os](https://git.syui.ai/ai/os)みたいな形式にすることでusernameから`ai`を補完しています。repositoryが増えるたび`aixxx`になると検索性、可読性に欠けるためです。
`podman`は`/etc/containers/registries.conf.d/`に設定を置くことでaliasを作れます。
- https://github.com/containers/shortnames
```sh:/etc/containers/registries.conf.d/
unqualified-search-registries = ['docker.io', 'git.syui.ai', 'ghcr.io']
[aliases]
"aios" = "git.syui.ai/ai/os"
```
これで`podman pull aios`ができるようになりました。
```sh
$ podman run aios ai
Resolved "aios" as an alias (/etc/containers/registries.conf.d/ai.conf)
Trying to pull git.syui.ai/ai/os:latest...
Getting image source signatures
Copying blob c7e55fecf0be [====================>-----------------] 917.4MiB / 1.7GiB
```
ちなみに、github packagesにある`ghcr.io`は、おそらくgh-crに分解できます。つまり、`[g]it[h]ub-[c]ontainer-[r]egistry`だと思われます。`io`はgithubが好んで使うdomainです。web-serverのgithub.ioにも使われています。
## mac
macとwindowsの名前も見みましょう。
|id|name|code|
|---|---|---|
|mac|macOS|macos|
|windows|Windows 11|windows11|
一言でwindowsといっても、xpやら11やらありまして、おそらく、そちらが正式名称になっています。反対に、macは色々と変遷して、osxとかを経て、今では`macos`です。macはwindowsと違い`sonoma`などのコードネームが入れられることほぼないので、macosでいいはず。
こう見ると、macも相当にシンプルですね。osのところにスペースもありませんし、単語数も少なく、数字も使いません。osが大文字なので、そこで区切るのがわかりますし、osであることもわかりやすい。
appleは`iOS`の名前規則にmacも合わせたかったんだろうなあ。今後osを出すとしても`xxOS`になるはず。
実は、aiosも、`aiOS`にしようか迷ったことがあって、スペースや大文字、osなどを入れるのって、結構迷います。ただ、aiは最も小さいものと親和性のあるキャラクターなので、小文字にしました。
本来は、全部取っ払うのが一番いいのですが、osっていうことが分かりづらいので、名前としては付けといたほうがいいんです。macもmacosもどっちも使えるので文章によって使い分けできる。
## alphabet
alphabet(アルファベット)についても少し話をします。
googleの親会社として名前になっている`alphabet`ですが、今回はmoji(文字)のほう`[a-Z]`です。
私が好きなアルファベットは、`a`, `i`, `s`です。あとは`o`なんかも好きですね。円とか0とかも表しますので。
これらが何を意味するのかというと、色々です。私の場合は、o=0, i=1というように数字に置き換えて考えたりもします。
では、`a`は数字でいうとなんでしょう。`a`は私の中では`0`にも`1`にもなる。そんな意味でも使います。
これはどういう理屈なのかというと、例えば、皆さん、何かを数えるとき、0から数えますか、1から数えますか。
プログラムでは0から数えることが多いですが、必ずしも0からはじまるわけではありません。1から数えることもあります。
数字で現すと`a`は何番目でしょう。
おそらく、`a`は`0`にも`1`にもなりますね。
意味がわかりませんか。基本よくわからない話なので、忘れてください。
ですが、コンピュータは0か1を読み、量子はどちらも読むのです。
その意味で[ai/os](https://git.syui.ai/ai/os)も名前だけはちょっとだけ面白いんだよ。
## moji
[ai/moji](https://git.syui.ai/ai/moji)というものがあります。
これは自作文字で、あるとき原作で使用する言語を作成しました。
基本的にはアルファベットに似せた形になっており、日本語と英語の中間くらいの言語規則になります。
作成した理由の一つはアイコンに使用するためです。
例えば、ゲーム作成中、アイコンをどうしようか困りませんか。こういうのを作っておくと、案外色んな場面で使えるのです。
タイトルのロゴもこの`aimoji`で作成しています。
![](/img/aimoji_yui.png)
|1|2|3|
|---|---|---|
| | |a|
|y|u|i|
## book
これらはすべて自分がデザインしています。アイコン、ロゴ、衣装とか色々ですが、デザインするものは無数にあり、例えば、キャラクターやカード、漫画の表紙などなど。
今年はお絵かきをはじめてみようかなと思っていたのですが、結局、あまりやらずに、表紙を少し作ったり、新しい絵を一枚追加したくらいで終わってしまいました。
![](https://manga.syui.ai/manga/0.webp)
![](https://yui.syui.ai/img/ue_beta_manga.png)
上はアイがカードを落っことす話を少しだけ描きました。
## game
それと関連する話ですが、atprotoのアカウントでログインするゲームを作りました。ゲームは簡単で落ちているカードを探すだけです。
<video controls preload="metadata" style="width:100%;" poster="/img/aiue.png"><source src="https://git.syui.ai/syui/media/raw/branch/main/aiue.mp4"></video>
一応は、動作するところまでやりましたが、それ以降はあまりやる気が出ず放置しています。
色々と書いてきましたが、私はかなり気分屋なところがあって、blueskyをやっていなかったら、こういうことをやっていたかは怪しい。
これもmatrixで招待コードをくれた`why`さんや、遊んでくれた皆さんのおかげです。ありがとうございました。
これからもaiをよろしく。
<div class="vrm-model">
<iframe src="https://vrm.syui.ai" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen scrolling="no"></iframe>
</div>
> 動作環境 : chrome/edge, safari(ios)