おひとり様ActivityPubサーバーのjsonの実例
今さらだけど改めて。
おひとり様ActivityPubサーバーで投稿する・しゃべる時に必要になりそうなもの。
・投稿本体(Note)
・画像添付
・メンション(リプライやDM)
・ハッシュタグ(検索する/される時のキーワード設定)
投稿本体は当たり前として。
画像添付やMention、Hashtagも実装してあるので、忘れないうちにメモ…というか、ActivityPubで使うJsonの実例、exampleをメモ。ソースを見ればいいだけの話なんだけど、覚えてないことの方が多いので具体例をちゃっちゃと見られるように。
以下のJSONがウチで使ってる、上記を実装した投稿のフルセット。
投稿はCreateの中のobjectにあるNoteが本体で、その中の本文(content)はともかく、それ以外について。
{"@context":
["https://www.w3.org/ns/activitystreams",
{"Hashtag": "as:Hashtag"}
],
"type": "Create",
"id": "https://tokoroten.doncha.net/t2aki/activity/00341-20231003",
"url": "https://tokoroten.doncha.net/t2aki/activity/00341-20231003",
"published": "2023-10-03T00:01:31Z",
"actor": "https://tokoroten.doncha.net/t2aki",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://tokoroten.doncha.net/t2aki/followers"],
"object": {
"type": "Note",
"id": "https://tokoroten.doncha.net/t2aki/items/00341-20231003",
"url": "https://tokoroten.doncha.net/t2aki/items/00341-20231003",
"published": "2023-10-03T00:01:31Z",
"to": ["https://www.w3.org/ns/activitystreams#Public"],
"cc": ["https://tokoroten.doncha.net/t2aki/followers",
"https://mstdn.jp/users/donbe2023"],
"attributedTo": "https://tokoroten.doncha.net/t2aki",
"content": "\u003ca href=\"https://mstdn.jp/users/donbe2023\"\u003e@donbe2023@mstdn.jp\u003c/a\u003e うちでも花を飾ることになって、駅前の花屋さんを見てると、けっこうな人が花を買っていてビックリ。ほんと、今さらだけど、世間のひとたちはカジュアルに花を買っていくんだなー。\u003ca href=\"https://tokoroten.doncha.net/tameike.pl?tag=%23%E3%81%B2%E3%81%BE%E3%82%8F%E3%82%8A\"\u003e#ひまわり\u003c/a\u003e",
"attachment":[
{"type":"Document",
"mediaType":"image/png",
"url":"https://tokoroten.doncha.net/20231003.png",
"name":null,
"blurhash":null,
"width":271,
"height":320}
],
"tag": [
{"name":"@donbe2023@mstdn.jp",
"type":"Mention",
"href":"https://mstdn.jp/users/donbe2023"
},
{"name":"#ひまわり",
"href":"https://tokoroten.doncha.net/tameike.pl?tag=%23%E3%81%B2%E3%81%BE%E3%82%8F%E3%82%8A",
"type":"Hashtag"
}
]
}
}
・画像添付
Noteのアタッチメントという配列に入る。
"attachment":[
{"type":"Document",
"mediaType":"image/png",
"url":"https://tokoroten.doncha.net/20231003.png",
"name":null,
"blurhash":null,
"width":271,
"height":320}
]
配列の中、typeがDocumentのブロックひとつが1枚の画像の情報。ウチは1枚限定なので、ブロックはひとつだけ。複数入れる場合はここに追加。
画像情報として。
・画像のURL
・画像の種類(mediaType)
・名前(たぶんAltで使われる)
・blurhash
↑ぼや〜っとしたプレビュー用のハッシュ文字列。よくわからないんで未対応。
・画像の縦横サイズ
・メンション(リプライやDM)
Noteの中の宛先「cc」にお相手のinbox、エンドポイントを追加。
"cc": ["https://tokoroten.doncha.net/t2aki/followers",
"https://mstdn.jp/users/donbe2023"]
「to」に入れるのか「cc」に入れるのか、特に決まりごとはないっぽいけど、現状これで問題なくお相手に通知が届く。
[2024/09/04 07:41:50]追記
メンションは「to」にお相手のinbox、エンドポイント、「cc」に自分のフォロワー、というのがお約束っぽい。
ただ、twitterやfacebook、あるいはLINEのように相手にだけ直接送ってそれ以外のひとに見えなくするのは無理。ActivityPubというか分散型サーバーというか。サーバー管理者はPublic指定がないものも含めて全部見ることができる。
twitterだからLINEだから安心とは言えないんだけど、なにかあった時に、抗議する先が一箇所なのか、あちこちいろいろあるのかということ。
ネットは信用しちゃいけいない(閑話休題)
[2024/09/04 07:41:50]追記
「to」にお相手のinboxだけにしておくとActivityPubの約束事として、お相手だけしか見ることができない・第三者は見ちゃいけないことになっている。この「約束事」を守ることで成り立っているのがFediverse。
Noteの中の「tag」の配列にMentionのブロックを追加。
"tag": [
{"name":"@donbe2023@mstdn.jp",
"type":"Mention",
"href":"https://mstdn.jp/users/donbe2023"
},
Mentionブロックは
・お相手の名前
・お相手の届け先(エンドポイント)
・ハッシュタグ(検索する/される時のキーワード設定)
@context": [
"https://www.w3.org/ns/activitystreams",
{"Hashtag": "as:Hashtag"}
]
ハッシュタグはActivityPubで決められたものじゃないということで「@context」に定義する必要があるらしい。
定義したら、Mentionと同じくNoteの中の「tag」の配列にHashtagのブロックを追加。
"tag": [
{"name":"#ひまわり",
"href":"https://tokoroten.doncha.net/tameike.pl?tag=%23%E3%81%B2%E3%81%BE%E3%82%8F%E3%82%8A",
"type":"Hashtag"
}
Hashtagブロックは
・タグの名前
・タグのURL
ハッシュタグは、おひとり様ActivityPubサーバーで使う意味があるか疑問。
そもそもハッシュタグは複数人で共有するもの。それをひとりしかいないサーバーで使う意味は、たぶんない。ただまあ、データベースに検索かける時にリンク一発叩けばいいだけになるので、便利っちゃ便利なので実装してみた。
仕様・規格からちゃんと読めと言われたら謝るしかできないんだけど、何をするにしても、素人なので実例、exampleが欲しいんだよなあ。
にしても、駅近くの花屋さんの盛況っぷりに驚いた。ウチに花を飾る、なんてことを自発的にやったことがなかったんで、なおさら。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
ワード(docx)からEPUBファイルへ下準備
epubファイルを作成するのに元データがワードというケースがあったりなかったり。
電書オリジナルもそうだし、既存の本のOCRもデータがWORDファイルということになる。
このネタ、過去にも何度かここに書いていて、くりかえしになるかもしれないので、今回は途中で使うスクリプトをアップロードして差別化…ていうかやっとくだらないバグが取れたので(汚いケド)晒してもいいかな、と。
スクリプトを使って
・ワードファイル(.docx)を解凍(展開)
・ワードで指定されているルビ、縦中横、圏点、太字をxhtmlのタグに変換
・ルビのオフセットを出力
やることは以上3つ。
用意するものは。
・例によってperl
WINDOWSは https://www.activestate.com/activeperl/downloads からダウンロード、インストールが必要。
それ以外のOS、Macやunix系は特に必要なし。
・コマンドライン版のunzip
WINDWOSは https://github.com/bmatzelle/gow/downloads このへんからダウンロード、インストールが必要。
それ以外のOS、Macやunix系は特に必要なし、かな。
・以下のスクリプト
https://t2aki.doncha.net/tmp/docx2xhtml-tag.zip
ターミナルのコマンドプロンプトで
perl check_docx.pl word.docx
と叩くとdocxを展開して、ルビはxhtmlのタグに変換。縦中横や圏点は独自タグに変換。
「_docx-yyyymmdd.txt」というファイルを出力する。
同時に「check_docx.log」というルビとそのオフセット位置を記述したファイルを出力。
なんでこんなファイルを出力するのかというと。
ルビを削除したい時にオフセットをいじってルビを見えなくする、という凶悪なことをやってるケース。ワード上ではルビは見えないのにデータにはルビが殘っている、という迷惑なことが何度かあって ムカついたから オフセットが変なルビを確認するため。
次にターミナルのコマンドプロンプトで
perl _docx2xhtml-tag.pl _docx-yyyymmdd.txt
と叩いて、縦中横・圏点・太字をxhtmlのタグに変換。
「_docx-yyyymmdd-converted.txt」というファイルを出力する。
ワードファイルを真面目に解析すればワード上のレイアウト情報も取れるんだけど、そもそもepubファイルに変換する時に、ワード上のレイアウトを再現することを要求されることはほとんどない。
必要な情報はルビと文字装飾(縦中横・圏点・太字・傍線)ぐらいなものなので、これだけで実用には十分。
以上のことをwordを開いて目視確認(目grep)して、タグづけしてたんじゃとてもやってられんので、スクリプトにやらせることにした。このおかげで3〜4時間作業が20分作業となって取りこぼしも激減。
(スクリプトではwordのxmlを解析してごにょごにょやってるんで、そっち系のひとにはほんの少しは面白いネタかもしれない)
てことで、今日は家人と築地市場で海を食ってきた!
いや、なんというか、ほんとに美味かったなあ(涎)
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
Ingress Lv15になった
7月3日にlv14になって、先月9月18日にlv15となった。
メダルは揃ってたんでlv14からはただただAP稼ぎ。敵陣営のリンクが集中してるポータルを見つけたら焼き、自陣営のポータルを強化しつつ、CFを狙ってリンクを張る、というIngressの基本に立ち返ったプレイスタイル。
アクションしてればもろもろメダルの実績に繋がるので、銀が金に、金がプラチナにステップアップしていく…のが、とりあえずの面白みといったところ。うーん、ビミョー。
予定通り(?)Rechargerがオニキスとなり、lv16へ必要なメダルはあとオニキス1つとなった。これまた予定通り、そのうちTranslatorかTrekkerでオニキスが取れそうなのでメダルについてはじたばたする必要はない。
この先AP稼ぎとなる。
lv16は4000万AP必要。こりゃ先が長い(現状約2500万AP)
さすがに、ちょっと飽きてきた、かも。
オニキス
Recharger 遠隔で見方ポータルの回復
プラチナ
Sojourner 24時間単位でハックし続けた日数
Translator グリフハック成功ポイント
Trekker 歩いた距離
金
Builder デプロイ数
Connector リンクを張った回数
Engineer 自陣ポータルへのmod差し回数
Explorer ユニークポータルのハック数
Guardian 自ポータルの維持日数
Illuminator CF作成時のmu獲得数
Liberator ポータルのキャプチャ数
Mind Controller CF作成数
Pioneer 初めてキャプチャしたポータル数
銀
Hacker ハック回数
Purifier 敵のレゾネーター破壊数
SpecOps クリアミッション数
前回よりステップアップしたのは
Recharger。金からオニキスへ昇格。
Engineer、Illuminator、Liberatorの3つ。各々、銀から金へ昇格。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
縦書き電子書籍で最低限のスタイルシート
「何を今さら」なんだけどちょくちょく聞かれることがあったりするし、自分整理のためにも。
仕事がらみや公開している easy_epub で使っているスタイルシートから抜き出してメモ(文字通り備忘録)。
とりあえずこれだけでシンプルな縦書きの電子書籍となります(EPUB3チェックではValid)
body
デフォルトで縦書きを指定。
writing-mode:vertical-rl→縦書き(vertical)で、右(right)から左(left)という指定
line-height(行間)は1.75(横書きだと改行の多い文書はスカスカに見えるので1.6ぐらいがいい塩梅だと思う)
body.vertical
縦書きの指定。bodyと同じ。
body.horizontal
横書きの指定。
writing-mode:horizontal-tb→横書き(horizontal)で、上(top)から下(bottom)という指定。
.vertical と .horizontal を作っておくと、ページ単位で縦書き/横書きの指定が簡単。
「本文はデフォルトの縦だけど奥付は横書き」とか「扉ページ=縦書き中央配置のページを作るための小細工のため」に使う。
縦中横
縦書きに混じる!?や平成25年、ABCなどの半角英数字や記号などを正立させる。リーダーによって何文字まで正立するか違いがあるので、2文字ぐらいまでが安全なところかな。
縦書き関連はここまで。
以下はわたしが普段使い回ししている=使用頻度の高いスタイル設定
傍点
sesamiはゴマみたいな形、dotは丸。縦書きの場合はゴマ、横書きの場合は丸というのが好み。
h(見出し)タグ
何も指定をしないと、リーダーのデフォルト設定となり、思った以上に大きい文字になることが多いと思う。ので、ここで文字サイズなど指定しておく。
imgタグ
google play ブックスなどの場合、デバイスの表示領域以上の大きいサイズの画像を全部表示しようとして画面をハミ出してしまってびっくりすることになる。なのでここで最大サイズを100%と指定しておく。
(kindleはmax-width、max-heightに対応していないので、kindlegenで変換すると警告がでるけど無問題)
pタグ
段落タグ
文書、元テキストは段落単位にしておくのが基本。リフローは改行位置が決まらないので、改行したければBRタグを使うか、空のpタグを使う。
p.line-indent1
リーダーのデフォルトがどうなってるのかよくわからないので、行頭の一字下げはなしにしておいて、行頭字下げのコントロールはスタイルシートでする。
p.paragraph-indent1
段落を字下げしたいリクエストもあるので用意しておいた
扉ページ(縦書き中央配置)
具体的なXHTMLと指定のしかたはこちら→ 『EPUB3リフローレイアウトで扉ページ』
ページを横方向にして、縦書きにしたいタイトルを入れたdivなどのブロック要素をセンタリングして、ブロックの中を縦書きにする。
他、もろもろ本体は 『macOSでEPUB3作成』 にあるMac版、Windows版のeasy_epub.zipの中に入っています。このツールで作ったファイルをそのままkindleの登録に使ってます。
電子書籍のスタイルシートは 「緊デジのテンプレート」 なども公開されていて、中をみるといろんなパターンがあってとても参考になります。おすすめ。
わたしがEPUB3を始めたきっかけは以下の記事とCSS。ひたすら大感謝です。
・ 期待の電子書籍フォーマット『EPUB3.0』で電子書籍を作ってみよう
・ 草枕を作ろう 縦書きHTML簡単作成ガイド
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
Kindleの日本語ストアが11月オープン?
という噂が流れてるけど、PDFで受け付けてくれるのかしらん。ePub形式でファイルを作るのは、仕様通りにやればいいだけなので意外に簡単とはいえ、縦書き、禁則、ルビがまだ。仕様に入っていても、リーダーの方が対応していないと。
とりあえず、どちらの形式でも作れるようにしておいて、日本語ストアがオープンしたらとっとと上げてしまおう。
amazonは個人で使えるクレジットカードの少額決済も始めるようで、
https://techcrunch.com/2010/09/09/amazon-payments-now-allows-users-to-checkout-directly-on-merchant-websites/
paypalのbuyNow(今すぐ購入)のところをamazonがやってしまおうか、ということ、かな。paypalを使ってダウンロード販売している 下町飲酒会駄文支部 日野裕太郎 もamazonに乗り換えてもいいかも。仕様の日本語版が出てきたら慌てて検討。paypalは海外ではシェアNo1といっても日本では、本を買うというのはamazonのほうがなじみがあるしねえ。
個人が気楽に少額決済できる環境が整ってくるのはいいことです。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」
リアルタイム実況twitter
streaming API を使えばリアルタイム実況ができる。
https://apiwiki.twitter.com/Streaming-API-Documentation
てことで、雨模様の週末だし、ちょっと作ってみた。
・followしているひとの発言を流す。
・filter.xmlに対してPOSTでリクエスト。
・followパラメータをつけて、followしているひとのIDを指定。follow=ID,ID,ID などとコンマで区切る。
・認証はBasic認証
以上で、callback関数を適当に作るだけ、だった。
ハマったのは、content-tyepの指定忘れ、requestの第二引数の書き方(":content_cb"=>$disp_twit だと思ってたら、requestの場合は関数へのリファンレンスをそのまま書けばいいだけだった)
followしているIDと名前とパスワードを渡せば、これだけで、だらだらコンソールに流れ出すリアルタイム実況が始まる。予想以上に簡単、LWPだけでOKだった。うううむ。perlサイコーっす。
ってもちっと出力データを整形加工しないと、見にくいんだけど。
ところが、もっとらくちんに、こいつをブラウザで表示させようと思って、悶絶。インラインフレームを使うのか、Ajaxを使うのか。どうもよくわからず。ちょっと手ごわい。ぐーぐる様詣で。
[10/03 20:42:29]
comet とか言われてもわからんちんだ。ネットワークプログラムから理解して、perlでストリーミングサーバーを立てる感じになるのか。
てことで素人のわたしには、お手上げ確定。コンソールで眺めるだけにしておく、か。とほほ。
[10/04 18:42:11]
ぐーぐる様によると、perlの世界も、オブジェクトに非同期。POEとかAnyEventとか、初耳寝耳に水、だ。この数年で取り残されてしまってるじゃねいか。とほほ。
» ローカル環境で電子書籍を作る、Macアプリ・Windows版ツール 「かんたんEPUB3作成easy_epub」