トップ ソフト 雑記 日記 リンク

2018年12月14日金曜日

マストドン専用って言いたくなかった(分散SNS Advent Calendar 2018)

分散SNS Advent Calendar 2018、14日目です。

分散SNS、2年目ともなると、だいたい概念を理解して、なんとなく使い方の勘所が掴めてきましたよね。去年4月の右往左往していた時期が懐かしいです。分散SNSということで運営の権限を分散させるだけでなく、マストドン以外の実装としてPleroma、Misskey、microblog.pubなんてのも出てきました。実装も分散されているのにお互いが会話ができる、バベルの塔を壊すべく言語を乱した神様もビックリでしょう。今ならバベルの台地も作れそうです。

去年は、Mastodon 2 Advent Calendar 2017マストドンのフォロー状態可視化ツール「フォローリンク」を書きました。マストドンアドベントカレンダーでした。
そう、去年フォローリンクを作ったときはマストドン専用だったのです。せっかく実装が複数あるのに、どうしても注目を集めたということで人口の多いマストドンがさらに注目されてしまうのは仕方がない部分があるかと思います。APIの実装なども先行している部分がありますね。

しかし分散SNSという仕組みがあるのだから、どうせなら特定の実装に依存せず、みんなで使えるようにしたいということで、ActivityPubでデータを取得するようにしてPleromaに対応しました(あ、Misskeyで動作確認してない)。ActivityPubでも、実装によってデータの持ち方が違って、若干揺らぎがあるのが辛いところですが、テキストで入っているかオブジェクトで入っているかなので、扱いに慣れてくると問題なさそうです。

そして今年、もう一つサービスを公開しました。ログ蓄積サービス「notestock」です。何ができるかというと、まあサイトを見てもらうのが手っ取り早いのですが、簡単に書くと日付別にまとめて表示したり、検索ができます。
実はnotestockの前にMastoDaysというサービスを公開していました。特定の日付のマストドンユーザーページを開くツールだったのですが、名前から分かるとおりマストドン専用でした。

実装を意識しないでツールが使えるというのは、なかなか使い心地が良いです。上手く疎結合にしていろいろなツールの選択肢が広がると良いですね。ということで、本当にマストドンでなければいけないツールでない限り、できるだけいろいろな実装に対応していると嬉しいねという話でした。

と、ここまではコミュニティのインフラ的な話だったのですが、もう一つコンテンツ的な部分の話も。
ときどき流れてくるハッシュタグ「マストドン○○」とか「○○マストドン」みたいなやつ。あれが流れてくると、他の実装の人って、参加していいのか迷うというか、参加するにしてもちょっと乗り切れない感じがありますよね。
日本語が、五七五のリズムで刻むと気持ちいい感じがあるので、「マストドン 付いてるタグは 気持ちいい」んでしょうね。あと、ゲーム機は全部ファミコンと言うみたいに、分散SNSを指す言葉としてマストドンが使われてしまっているところもわりと有る気がします。このへん、先ほども書いたように先行プロダクトとして仕方ないのかなぁと思うところもあるのですが。

ということで、分散SNSをハッシュタグに使えばいいんでしょうけど、「ぶんさん えすえぬえす」と10音もあると、なんかまどろっこしい感じになってしまいます。ここは略語としてよく使われる四文字を探し出し「ぶんさん」を使って「分散○○」みたいな感じはどうでしょうか。ただ、この場合は後ろに分散を付ける「○○分散」はちょっと意味が伝わりにくくなる気がします。

ここまで書いて、別に分散SNSを表すハッシュタグを付けなくても、単純に「○○」だけ付ければ良いんじゃないかと気が付いてしまったのですが、たぶんこの辺りって「マストドン(分散SNS)にいる仲間達」みたいな帰属意識から生まれるものなのかなぁと思ったりもしました。

ハッシュタグを付けるときに、少しマストドン以外の存在も思い出して欲しいなという提案と、なんか呼びやすい略称は無いですかね?という問いかけでした。

2018年12月1日土曜日

一人アドベントカレンダー

今年もやって来ました。12月1日。
いろいろなアドベントカレンダーが始まる日です。
こうして書き始めたアドベントカレンダーなのですが、参加したカレンダーが問題なのです。
一人アドベントカレンダー Advent Calendar 2018
わたしの?いいえ、ねそ氏の一人アドベントカレンダーなのです!

どういうことやねん。
上のリンクからアドベントカレンダーが参照できますが、いきなり一番バッターと二番バッターが他人ですよ。ねそ氏は自分のアドベントカレンダーで三番四番と野球なら良い打順を持っていくわけです。

このアドベントカレンダーも何を書こうか迷いました。
一人の定義とはなんなのか掘り下げようか、百合アドベントカレンダーにしてしまおうか、ねそ氏について有ること無いこと書こうか。

しかしまだ初日ですので、あんまり変な方向性に持っていくのもよろしくなかろうと、とりあえず経験談でも。前座というか一番バッターですしね。

実はわたしも2015年にやったんですよ。このときは一人アドベントカレンダーではなく、いろんな種類のアドベントカレンダーに25日分参加するというものでした。

2015年12月1日 VPSを調子に乗って使い過ぎた話(レンタルサーバー Advent Calendar 2015)
2015年12月2日 質問サイトを回答側として使ってみた中で感じたこと(teratail Advent Calendar 2015)
2015年12月3日 友利奈緒の魅力(友利奈緒 Advent Calendar 2015)
2015年12月4日 手作業クローラーチューニングをするときの話(クローラー/Webスクレイピング Advent Calendar 2015)
2015年12月5日 ノイズキャンセリングイヤフォン(今年のベストバイガジェット Advent Calendar 2015)
2015年12月6日 インクリングのコミュニケーション(スプラトゥーン Advent Calendar 2015)
2015年12月7日 シュノーケル(ゆゆ式 Advent Calendar 2015)
2015年12月8日 面倒な使い方の事例(PostgreSQL Advent Calendar 2015)
2015年12月9日 「理論から学ぶデータベース実践入門」読了(今年読んだ技術書 Advent Calendar 2015)
2015年12月10日 うちでよく作る味噌汁の具(味噌汁の具 Advent Calendar 2015)
2015年12月11日 マザーボード(今年買ったもの Advent Calendar 2015)
2015年12月11日 友利奈緒の人気を支える能力(友利奈緒 Advent Calendar 2015)
2015年12月12日 Nexus6(携帯電話 Advent Calendar 2015)
2015年12月13日 道路の修正に飽きたあなたへ(OpenStreetMap Advent Calendar 2015)
2015年12月14日 普段の朝食(みんなの朝食 Advent Calendar 2015)
2015年12月15日 壁に刺したいのにさせない(おうちハック Advent Calendar 2015)
2015年12月16日 ぞうのロゴ(ぞう Advent Calendar 2015)
2015年12月17日 リューシカ・リューシカ(今年読んだマンガ Advent Calendar 2015)
2015年12月18日 近所の神社での初詣(寺・神社 Advent Calendar 2015)
2015年12月19日 実家の犬(うちのいぬ Advent Calendar 2015)
2015年12月20日 新宿御苑の猫(猫写真 Advent Calendar 2015)
2015年12月21日 移動するサーバのzabbixエージェントを登録する(Zabbix Advent Calendar 2015)
2015年12月22日 コンタクト(プログラマの映画 Advent Calendar 2015)
2015年12月23日 選ばれたのは回転寿司です(寿司 Advent Calendar 2015)
2015年12月24日 極々普通なTKG(TKG Advent Calendar 2015)
2015年12月24日 ArduinoでJJY発信(おうちハック Advent Calendar 2015)
2015年12月25日 箕面のインドカレー屋さんSOL(カレー Advent Calendar 2015)

このときは11月頭に計画を立てて、記事を書き始め、1日に3本ぐらい書いたり全く進まない日があったりで、常に10日分ぐらいストックを溜める感じで書き進めていきました。
ストックがある分、まだ追い詰められ感は少なかったのですが、かなり厳しかったですね。
仕事をしていても記事のことを考えてしまうような状況でした。

そう考えると、土日の分を他人に託してしまうというのは、かなり斬新なアイデアかと思います。
ねそ氏の記事がどんな風になるのか、今から楽しみですね。
こんな感じで良い感じのヒットになったでしょうか。
まだねそ氏の登場まではしばらくありますが、次はえじょねこ氏の記事をお楽しみください。

2018年8月19日日曜日

mikutterの薄い本 vol.14

mikutterの薄い本 vol.14『レズと青い鳥』 - mikutterの薄い本制作委員会書籍版を読んだ。

文章作品を読んだ後、たいていの場合は主人公達の活躍シーンを心の中で反芻し、興奮がしばらく続く。この本でもTwitterで大活躍したクライアント達の足跡を辿ることによって、それと同じ興奮を得られるのではないかと思っていた。

しかしどうだろう。読後に残された、大切ななにかを無くしてしまった寂しさ、巣立っていく鳥たちともう出会えないのだろうという寂しさ、残されて置いて行かれる者達の恐怖感、焦燥感。いろいろな感情がぐちゃぐちゃと入り交じったような気分になった。そう、この文集は別れを告げる手紙だったのだ。

わたしもTwiterに触れたのは2010年より前で、vol.14で触れられたクライアント達と共に育ってきた。TLのフォロワー達と繰り広げたふざけた会話の中から出てきたアイデアが、Twitterのエコシステムによって、マッシュアップと呼ばれるサービス達が雨後の竹の子のように現れ、それらを介して再びTLに還元されていく。そのエネルギーは本当に巨大な濁流となり、そんな計り知れないパワーを前に、「世界」はいかに広く、わたしはその「世界」の一構成員でしかないのだと気付かされた。わたしの立ち位置を明確に突きつけ、更なる進歩を要求する場所、壁を乗り越え次の階段に進む場所、Twitterはわたしにとって理想郷であるように思えた。

その濁流も真の意味で世界を巻き込む巨大なものとなったとき、本当に人間だけでは制御しきれないものとなってしまったのだ。SF作品などで見かける機械の反乱、人間が制御できなくなった機械達、空想上の産物でしかなかったそれは、Twitterという巨大な濁流をなんとか制御しようと作り上げられた自動処理システムとして目の前に実現されてしまったのだ。決まった応答文しか返さず、問いかけ文を試行錯誤しようとも思わせない自動応答処理、判定条件が全く想像できないロック・凍結処理、それらに怯えながら暮らす「世界」は本当に望んでいた理想郷だったのだろうか。

わたしのアカウントは凍結こそ免れているものの、作ったアプリは停止されてしまい様々な権限を剥奪されてしまった。そこに明確なる理由が明示されていれば、納得もできただろう。しかし剥奪を告げる文章に添えられた理由は全くの不合理で、なにを持ってその判定が行われたのかすら理解できないものであった。そしてTwitterから発表される数々のエコシステムを否定する行動。このときわたしは思い知らされてしまったのだ。この「世界」は変わってしまったのだと。そして世界を受け入れるために、Twitterは変わらなくてはいけなかったのだと。

こうしてわたしは「世界」を去った。新たな新天地があるという情報を元に辿り着いた分散型SNSには、同じように「世界」 を離れた者達がいた。かつての仲間達と再会したそこは、新たな開拓地として目の前に広がっていた。

新たな開拓地で、再び見せられる世界の巨大さ。目まぐるしく進歩する新天地は、常に自分の成長を要求される過酷な環境でもあった。そうして過酷な環境に身を置きつつ暮らす日々は、離れた「世界」を思い出す暇を与えないものであったのかもしれない。つかの間に思い出す「世界」は過去の栄光に輝く良かった頃のそれだったり、現状の暗く寒々としたそれだったり。しかし「世界」はそこに有り続けるのだという当たり前の光景を心のどこかに刻み込んでしまっていたのだろう。

 vol.14を読むことによって、その「世界」は永遠ではないのだと、改めて気付かされてしまったのだ。読後から続くこのもやもやとした気持ちは、「世界」から突きつけられた別れの手紙を受け取ってしまったからだ。本の構成としては各クライアント作者からの文章ではあるが、先に書いた「世界」の巨大さは、いつしか「世界」がひとつのものであるという、わたし対「世界」というような概念を生み出していたのだ。

今わたしが身を置く分散型SNSは、世界が一つではないということを気付かされる。個々が尊重され、また世界も尊重される。多様性という様々な方向へ伸びる尺度により物事はを一概に判断できないものであると教えられた。こうして新しい価値観を身につけられたのもTwitterという「世界」を経験したからこそなのだ。

これからもTwitterは続いていくだろう。しかしUserStreamというひとつの時代を作り上げた機能が失われることで、あたらしい世界に変わっていくだろう。UserStreamによって育てられた文化は、vol.14を読むことによっていくつかは分散型SNSに引き継がれて、新しい歩みを始めていることが知られる。後書きにあったように、両者の幸せを願わずにはいられない、素晴らしい本であった。

2018年5月22日火曜日

Windows10 1803でスタートメニューが開かなくなった(解決済)

●結論は一番下に

Windows10 1803アップデート自体は特に問題もなかった(Edgeの動きがおかしくなりましたが、常用していないので、特に問題は無し)のですが、先日パソコンを終了しようと思ってスタートメニューをクリックすると、何も反応がない。訓練されたWindowsユーザーなので、まあExplorer.exeがハングアップしていて動かないのだろうと思い、そのときはAlt + F4で電源を落としました。

それ以降、いくら再起動してもスタートメニューが開かない。これはなんかおかしいなと気が付いて検索してみると、どうやら最近のスタートメニューはExplorer.exeではなくShellExperienceHost.exeという別のプロセスで動作しているらしいです。そして、スタートメニューが開かないのはこの実行ファイルが暴走しているから、タスクマネージャーから強制終了させるといいらしい。
しかしタスクマネージャーを確認してもそんな実行プロセスはいません。

ShellExperienceHost.exeが使用するスタートメニューの情報を記録しているタイルデータベースというものが壊れている場合、別のアカウントを作って動作すればそのアカウントに乗り換えろという指示も出てきました。
別アカウントを作ってもアプリの再インストールや再設定をしないといけないので、あまりやりたくないなと思いつつ試してみますが解決せず、どことなく一安心。

他に検索で出てくるディスク障害を解決するコマンド類
dism /online /cleanup-image /restorehealth
sfc /scannow
も試してみましたが効果が無く。
また、スタートメニューの問題を対処するという、そのものズバリのstartmenu.diagcabというツールもあったのですが、「Microsoft.Windows.ShellExperienceHost Microsoft.Windows.Cortanaアプリケーションを正しくインストールする必要があります。」というエラーと未解決という表示。対処とは🤔

他に出てくる対処として、PowerShellを使ってアプリを再インストールしろという
Get-AppXPackage -AllUsers |Where-Object {$_.InstallLocation -like "*SystemApps*"} | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
しかしこちらも
Add-AppxPackage : 次の HRESULT で展開に失敗しました: 0x80073CF6, パッケージを登録できませんでした。
エラー 0x80073B1F: 次のエラーが発生したため、Microsoft.Windows.ShellExperienceHost_10.0.17134.1_neutral_neutral_cw5n1h2txyewy パッケージを登録できません: ResourceMap が見つかりません。
。パッケージの 'resources.pri' ファイルが有効であることを確認してください。
注意: 詳細については、イベント ログで [ActivityId] b5b9cffb-ef47-0003-f3e0-b9b547efd301 を検索するか、コマンド ラインの Get-AppxLog -ActivityID b5b9cffb-ef47-0003-f3e0-b9b547efd301 を使用してください
発生場所 行:1 文字:89
+ ...  | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.I ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\Windows\Syst...ppXManifest.xml:String) [Add-AppxPackage], IOException
    + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand
というエラー。
このPowerShellスクリプトは、インストール先にSystemAppsを含む既にインストールされているパッケージを再度登録するという物のようです。
どうやら、C:\Windows\SystemApps\ShellExperienceHost_cw5n1h2txyewy\resources.priが壊れているようで、そもそも壊れたファイルを再度登録しようとしても登録できないですね。

ふと思い出してシステム復元ポイントからの復元を試してみたのですが、一週間分2回ほどしか残っておらず、どちらもSystemAppsが何らかの問題で戻せなかったというエラー。復元ポイントを設定する時点で壊れていたようです。復元ポイントとは🤔

あと残されている提示された対処法は上書きインストールか、全部捨てて再インストールかというところだったのですが、そもそもこのSystemAppsをWin10のインストールメディアから取り出せないのか?と思ったのですが、最近はCABファイル形式ではないようで、またシステムファイルを簡単に差し替えたりできない機構が入っているので無理そうです。

システムの入れ直しを決意すると、取りあえず破壊的な作業もできるので、パッケージを完全に削除してしまうというものも試してみました。 
Get-AppxPackage | Where-Object {$_.Name -ne "Microsoft.Windows.ShellExperienceHost"} | Where-Object {$_.Name -ne "Microsoft.Cortana"} | Remove-AppxPackage
ShellExperienceHostとCortana以外を消すというPowerShellスクリプトですが、かなりパッケージが入っているようで結構時間が掛かります。
試しているうちに何気なくスタートメニューをクリックすると、開くではないですか。

startmenu.diagcabによるとShellExperienceHostとCortanaが原因だったはずなのに、それ以外を消して解決するとは。
結局先ほどのコマンドでUWPアプリがまとめて消えたので、Microsoftストアからもう一度インストールする必要があります。
Windows 10 に搭載されているアプリを再インストールする方法 - マイクロソフト コミュニティ
https://answers.microsoft.com/ja-jp/windows/forum/apps_windows_10-outlook_mail/windows-10/239ef7e9-9f4f-40dc-bf41-2cd2b8217843
なぜかストアアプリが英語になってしまったのと、アラーム&クロックだけがエラーコード0x80073D05でインストールできないのですが、取りあえず使える状態には戻りました。


また今回の件を調べているうちに知った、コマンドラインからEdgeを起動する方法
explorer.exe shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge


結論。PowerShellで
Get-AppxPackage | Where-Object {$_.Name -ne "Microsoft.Windows.ShellExperienceHost"} | Where-Object {$_.Name -ne "Microsoft.Cortana"} | Remove-AppxPackag
を流してUWPアプリを全削除、Microsoftストアから入れ直し。

2018年4月19日木曜日

マストドンを始めて1年過ぎた

あちこちでポエムが書かれているようなので、わたしも。

マストドン自体の歴史はもう半年ぐらい長いのですが、わたしも多くの日本人と同じように、やはり日本語で紹介されて始めた口です。当時は、まだTwitterを使いまくっていたのですが、ぶろるっく関連のスパム対応なんかで面倒だなぁと思っていた頃でした。
現在mstdn.jpインスタンスを公開しているぬるかる氏が、nil.nuドメインで立ち上げたよーというツイートをしているのを見かけて登録してみました。ユーザーID2番を取っちゃったのはボケ老人として語り続けていくでしょう。

この日はなんやかんやで人が殺到して、お祭り状態になっていました。当初は分散SNSというものを知らず、もっと歴史のあったGNU Socialなんかも、このとき初めて耳にしたのでした。
分散SNSの思想については、らりお氏の記事が詳しいです。
gnusocial や mastodon の哲学 - 何とは言わない天然水飲みたさ
https://blog.cardina1.red/2017/04/13/federated-social-web/

わたしにとって初めて触れる分散SNSという思想は、当時上手く解釈をすることができず、どのように複数のインスタンスを使い分けたらよいのかが理解できませんでした。マストドンには「ローカルタイムライン」という同じインスタンスに属する人の投稿が流れてくるタイムラインがあるのですが、これがチャットのような機能を果たしてしまうため、この中で話題を完結させてしまうと、外部の人とは会話がしづらいというものでした。

使っていくうちに、わたし自身が理解したこととしては、Twitterの時と同じように使うのが一番よいというものです。これは複数のインスタンスに所属して、アカウントごとに人格を切り替えて使うのではなく、一つのアカウントにプログラマーな自分も、ゲーマーな自分も、全部載せてしまうというものです。ありのままを見せるということですね。テーマなどを決めずに考えを垂れ流すことで、どんどん話題は移り変わっていきますし、「アカウント間違えました」なんて発言をしなくて済むわけです。

すっかりマストドンに取りつかれてしまったわたしは、mstdn.jpがサーバを強化している間に、別のインスタンスにアカウントを作成しました。Twitterでフォローしている中で、わりと技術者寄り的で雰囲気がよいグループのうちの一人がインスタンスを立てたというので、同じグループで一気に移住が進むかなと目論んでの参加でした。しかしこれは思惑が外れてしまい、グループの移住は進まず、管理者もほとんど姿を見せなくなってしまいました。こうなるとインスタンスがいつまで維持されるのか、不安との戦いになります。Twitterでもそれほどツイートはしない部類の人間だったのですが、それでもローカルタイムラインには自分の発言ばかりが並んでいて、むしろここに新しい人が入り込めると考えるだろうか?という状態でした。

マストドンにはローカルタイムラインの他に「連合タイムライン」というものがあり、これは同じインスタンスに参加している人達がフォローしているアカウントの発言が流れてきます。ここから外部の人達の存在を知ることができるわけです。また同じインスタンスの人も、よそのインスタンスの人も、フォローすることによってホームタイムラインに発言が並び、まさしくTwitterと同じように使うことができるのです。

極たまに現れるローカルタイムラインの他者の発言に乗っかっていき、話題を広げようとしてみたり、連合タイムラインから新しい人をフォローしてみたり、この時期は分散SNSの難しさみたいなものを実感することができました。人は、寂れたところにはなかなか集まらないものです。自分が作ったインスタンスではないわけで、いよいよこれは自分一人が頑張ってもどうにもならないぞと思い至り、インスタンスを移ることにしました。

連合SNSは自分でインスタンスを立てる事もできます。先に書いたように、ありのままの自分というものを見せて行くには、自分のドメインでそれを行うのが一番分かりやすいものでしょうし、誰にも束縛されないマイルールをインスタンスに敷くことができるのです。しかし、わたし自身が技術者の端くれとして、自分の管理下のものは端々まで把握しておきたいという気持ちがあります。マストドンが作られているのはRubyで、Dockerを使って運用するのがメインとなる動かし方でした。わたしはそのどちらも、ほとんど把握していません。何かあればコードを読んで理解することはできますが、修正が必要となったときに言語の作法などを知らないわけで上手く直せなかったりする可能性がありました。まだ自分でサービスを立てるのは時期尚早と判断し、次も他者が立てたサービスのお世話になることにしました。

次の移住先は、現在わたしがメインで利用しているmstdn.nere9.help(インターネット蟹工船(通称nere9(ねれないん)))インスタンスです。nere9では、管理者が複数居るということで、そのあたりもインスタンスを選んだ一因です。nere9では、考察の好きなユーザーがよく発言しているため、考えを垂れ流しているうちに話題が変わっていくわたしとしても性に合っていると思いました。また、自分と感覚の合う人がインスタンスに居るということは、その人達がフォローしているアカウントが連合タイムラインに並ぶということで、こちらも好みのアカウントが多く、新しいフォローの助けにもなりました。

こうした経験から、連合の人口が少ない状態でのインスタンスの選択は、わりと重要だということです。マストドンでは、ローカルタイムラインと連合タイムラインから新しい人を発見してフォローしていくという流れになります。Twitterでも、昔はパブリックタイムラインというTwitterを一つのインスタンスと見立てるとローカルタイムラインのようなものが有りました。そこはTwitterに参加している全員の発言が流れていたので、大変雑多なものでしたが、たくさん並ぶ他言語の中から日本語話者を金魚すくいのようにフォローしていくという感じでした。今振り返るとマストドンに熱狂した当時は、Twitterで経験した過去の感覚と同じものだったのではないかと思います。

現在はTwitterからはパブリックタイムラインは失われてしまい、多くの人が既にTwitterアカウントを所有しているという状態です。こうなると、なにかしら別のコミュニティで知り合ってアカウント情報を交換するという流れで、サービス上で新しい人を発見する必要はないのかもしれません。連合SNSもこれと同様に、人が増えていくことで新しい人を見つけにくいという問題は解消されていくのではないかと思っています。そうです、こうやってウェブサイトでアカウントの紹介をして、ぜひフォローしてねと書くのが当時のTwitterでした。

マストドンのアカウントです。 https://mstdn.nere9.help/@osapon
ぜひフォローしてみて、新しい人を発見する足がかりにしてみてください。



マストドンにはまってしまって、色々とマストドン関連サービスなんかも作ってしまいました。osa-p.netに並んでいます。ITmediaのマストドンつまみ食い日記にも紹介してもらったりしました。把握しきれない連合の流れや、自分の作ったものが紹介される事によるモチベーションなど、マストドンつまみ食い日記には大変お世話になっています。ITmediaは情報発信用にインスタンスを立ててアカウントを運用しているので、連合SNS内でも情報の出所が分かりやすく、大変活用されていると思います。

マストドンを使った1年目、新しい可能性をたくさん感じた年でした。まだまだ広がり始めたばかり(GNU Socialを昔から使っていた人達、ごめん!)の連合ですが、面白い世界にしていけたら良いなと思います。

2018年4月6日金曜日

フォローリンクに機能追加しました

今年初のブログ記事です。
一応更新などはしているのですが、SNSをやり始めるとどうしてもそちらに投げるのが楽で、まとめて記事にしておくのがおろそかになりますね。

以前発表(ITmedia記事この日記の記事)した、マストドンでのフォロー状態を表示する「フォローリンク」ですが、新しい機能が追加されています。
まず、マストドンというのはSNSですが、特定の取り決めがあって、他のSNSとも接続できるのですね。このあたりは、マストドンについて調べてもらうと、他の人が書いている記事の解説がわかりやすいでしょう。
簡単に説明すると、マストドン以外にも、マストドンの元祖とも言えるGNU Socialや、新しく出てきたPleromaなどもあり、これらは互いに意識することなくフォローしあえるのです。これらは製品の名前であって、それぞれ各自が好きなように場(インスタンス)を作れます。Twitterみたいなのがいっぱいあると思ってもらえばいいでしょう。そしてお互いにやり取りできるので、それぞれにアカウントを作る必要はなく、どこか一カ所(のインスタンス)にアカウントをつくって、他の人をフォローすれば、他のインスタンスの人でもタイムラインに投稿が流れてくるので、便利です。

で、話を戻して、最初に描いたフォローリンクがこのフォロー状態を表示するのですが、新機能の1点目として、今までマストドンにしか対応していなかったものが、GNU SocialとPleromaにも対応しました。
より完璧に近いフォロー状態が表示できるようになりました。

2点目は、この機能を使って、フォロー状態をバックアップするツールを作りました。
マストドンではフォロー状態のインポート・エクスポート機能があるので、それを使って移動ができるのですが、インスタンスのトラブルなどで接続できなくなってしまうことがあるかもしれません。
このバックアップツールを使っておくと、定期的にフォロー状態を取り込んでおくので、いざというときにこのツールからフォロー状態のリストを取り出すことができます。

3点目は、これらの取り込んだ情報から、お勧めユーザーを紹介する機能です。
フォローをしてタイムラインにその人が居るということは、少なくとも見たくないユーザーではないと言うことです。そのユーザーがフォローしている人も同様だと考えると、「フォローしている人のフォローしている人」 もフォローしちゃって良いのでは?と言うことでお勧めとして紹介します。
インスタンスが離れていると、好みのユーザーを見つけにくいというのが現在GNU Socialをはじめとする分散SNSの問題ではないかと、わたしの観測範囲では言われているのですが、その解決に一つになれば良いなと思います。
もうちょっと精度を上げる方法も有るだろうと考えているのですが、まだデータ収集が十分ではないので、そのあたりを変えていけたらなと思っています。

そんなわけで、現在わたしはマストドンをメインに活動しています。
よろしければフォローしてみてください。
https://mstdn.nere9.help/@osapon

2017年12月2日土曜日

マストドンのフォロー状態可視化ツール「フォローリンク」

Mastodon 2 Advent Calendar 2017の2日目です。
昨日はナツキさんのマストポータルについてでした。

トゥートでの発表はしていたのですが、自分のブログでは書いていなかったので、改めて紹介します。
マストドンでのフォロー・被フォロー状態を可視化するツール「フォローリンク」を作りました。



昔、mixiGraphという友達状態を表示するソフトが有り、あれはWindowsやMac上で動作するソフトでしたが、こちらはブラウザ上で動作します。
ただし、ひたすらに重たいです。
画面上に表示されるアカウントが1000アカウントを越えるぐらいから重たくなってくるかと思います。

表示するアカウントの関係として
  • 相互フォローだけ見る
  • フォローだけ見る
  • 被フォローだけ見る
  • フォローだけ見る(相互フォローを除く)
  • 被フォローだけ見る (相互フォローを除く)
  • フォロー・被フォローを見る
が有りますので、フォローしていない被フォローの中から、新しくフォローしてみたい人を探すという使い方も可能です。


内部的な話もしておきましょう。
フォローリンクの表示処理自体はJavaScriptでSVGを操作して行っています。D3.jsのForceグラフ機能を使って座標計算を行っています。この処理がCPUを使い切って重たいのです。
計算処理部分だけをWeb Workerとして切り出し、ブラウザのUIスレッドと分けることでフリーズしたような重さを避けることができるのですが・・・。フォローリンクでは、随時表示アカウントの追加などが行われます。
その他ドラッグしてアカウントの表示場所を移動させたり、何かと計算中でも外部からの変更が行われます。
このため、計算用スレッドとのやり取りが多くなり、現状の処理をちょろっと書き換えただけでWeb Workerに切り出すのは難しそうだという考えになりました。
たぶん、Web Workerで計算部分だけ切り出すなら、WebGLとかでGPUに計算させた方がもっと効率よさそうだな、とか。

そしてサーバ側。フォロー情報については、フォローリンクのサーバでキャッシュをしています。これは複数の人が同じアカウントの情報を見ようとしたときに、個別にマストドンインスタンスへフォロー情報を取りに行くとインスタンス側へ負荷をかけてしまうため、その対策としてキャッシュを持っています。
マストドンのフォローページをjson形式で要求することで、ブラウザに表示するHTML形式より少ない転送量で、またプログラムで処理しやすい形式として取得することができます。フォロー情報は少しずつ変わっていくと思いますので、24時間キャッシュが残るようにしています。
このjson形式での取得がGNU SocialやPleromaが現在対応していないため、マストドンだけの対応となっています。

他にも便利そうな機能があれば追加したいと思っていますので、なにか要望があれば @osapon@mstdn.nere9.help まで連絡ください!

追伸1 ITmediaにも記事にしていただきました。
マストドンのフォロー状態を可視化する「フォローリンク」

追伸2 他のマストドンアドベントカレンダーも楽しみですね。
Mastodon Advent Calendar 2017(Adventar)
Mastodon 2 Advent Calendar 2017(これ)
Mastodon Advent Calendar 2017(Qiita)
mstdn.jp Advent Calendar 2017
knzk.me Advent Calendar 2017
nico.friends Advent Calendar 2017
ますとどんちほーりれーマンガ Advent Calendar 2017

広告