GNU Social のボットを C++ で作る

プログラミング界隈の姫になるためにはツイッターのボットをPHPで作ることが有効であることが知られています。しかし、ツイッターは2018年を迎えられないかもしれないので、かわりにGNU Socialのボットを作ります。あと、2017年にもなってPHPを学ぶのもダサいので、C++でやります。

GNU Socialは自由なソフトウェアとして実装されたツイッタークローンです。外見はツイッターを丸パクリしている (補足: Qvitterというプラグインを入れるとツイッターそっくりな外見になります。オリジナルのUIはダサいです。) ので、簡単に移行できます。ツイッターにはない特徴として、複数のサーバーの連合であることが挙げられます。すなわち、有志がそれぞれサーバーを建てて、それらが互いに情報を共有することでGNU Socialの全体が成り立っています。ユーザーは所属したいサーバーを選んでユーザー登録します。他のサーバーのユーザーをフォローすることもできる (ただし操作のクリック数がちょっと多い) し、検索とハッシュタグはすべてのサーバーで共有されます。地味に不便なところとしては、他のサーバーから流れてくる画像は、埋め込みではなくリンクになります。これは不便ですが必要な仕様で、悪意のあるサーバーがユーザーの閲覧履歴を勝手に取るのを防ぐためだと思います。

FAQとしては、スマートフォンアプリなどという軟弱なものはありません。がんばってウェブUIを使ってください。

あと、用語の説明ですが、ツイッターの「ツイート」に相当するものはGNU Socialでは「クイップ」と呼びます。

GNU Socialは複数のサーバーの連合なので、好きなサーバーを選べばいいのですが、日本では FreezePeach を選ぶ人が多いです。これは Kawana Kiyoshi が誘致したのがきっかけのようです。特にこだわりがなければFreezePeachを選べばよいのですが、注意が必要なのは、女児の水着姿をクイップするとWe have 1 simple ruleされるということです。

GNU SocialのAPIは AtomPub 形式と Twitter互換 形式があります。AtomPubのほうが仕様がきれいなのですが、誰も使ってないみたいなので、Twitter互換のやつにします。

例として、サーバーは freezepeach.xyz、ユーザー名は vaginaplant、パスワードは XXXXX で、LGBTPZN という文字列をクイップしたいとします。とりあえず wget コマンドで試します。

wget -O - \
    --http-user=vaginaplant \
    --http-passwd=XXXXXX \
    --post-data='status=LGBTPZN' \
    https://freezepeach.xyz/api/statuses/update.json

あとはこれをC++でやります。定番のcURLです。パスワードは /etc/fubai-gnusocial-password というファイルに書いてあると思ってください。なお、このファイルを他人に読まれるとセキュリティが終了します。

#include <curl/curl.h>
#include <string>
#include <fstream>

using namespace std;

static int writer
    (char * data, size_t size, size_t nmemb,
    std::string * writerData)
{
	if (writerData == nullptr) {
		return 0;
	}
	writerData->append (data, size * nmemb);
	return size * nmemb;
}

void quip (string message)
{
    CURL *curl;
    CURLcode res;
    curl_global_init (CURL_GLOBAL_ALL);
    curl = curl_easy_init ();
    if (! curl) {
        return;
    }

    curl_easy_setopt (curl, CURLOPT_URL,
        "https://freezepeach.xyz/api/statuses/update.json");

    string user_name {"vaginaplant"};
    string password;
    ifstream secret_file {"/etc/fubai-gnusocial-password"};
    secret_file >> password;
    string userpwd = user_name + string {":"} + password;
    curl_easy_setopt (curl, CURLOPT_USERPWD, userpwd.c_str ());

    curl_easy_setopt (curl, CURLOPT_POST, 1);

    string arguments = string {"status="} + message;
    curl_easy_setopt (curl, CURLOPT_POSTFIELDS, arguments.c_str ());

    string reply;
    curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, writer);
    curl_easy_setopt (curl, CURLOPT_WRITEDATA, & reply);

    res = curl_easy_perform (curl);

    if (res != CURLE_OK) {
        return;
    }
    curl_easy_cleanup (curl);
    curl_global_cleanup ();
}

quip 関数の message 引数に適当な文字列を入れてください。リンクとハッシュタグは自動的に解釈されます。

読者の知識をどのくらいに想定すればいいのかわからないのですが、リンクするとき -lcurl を指定すべきであることを申し添えます。

フリップフラッパーズ イロドリ先輩メインSS (改訂)

(13話を視聴したので設定を合わせました。改訂前。)

美術準備室には先輩がいた。先輩の指先にマニキュアが光る。

「先輩、私、先輩の絵が好きです! だから、もう、絵が邪魔だなんて、言わないでください。」

「ああ、あれね。ごめんね、ちゃんと説明してなくて。でも安心して。絵が嫌いになったわけじゃない。ここは狭いし、それに、いまは新しい絵をたくさん描きたいんだ。」

テーブルには、このまえ見たのとは違う、花柄のティーカップが3個。でも、紅茶が注がれるのは、私たち二人分だけ。

先輩が絵を捨てたのは、たぶん、三人でこの部屋にいても狭くないようにするためだったと思う。

アモルファスの力が失われて、ヤヤカたちもピュアイリュージョンには行けなくなった。お母さんとパピカは、ピュアイリュージョンに閉じ込められている。

でも、先輩となら、もう一度、ピュアイリュージョンに行ける気がする。先輩の変身アイテムは、マニキュアのびん。

二人で手をつないで考える。イロちゃんのこと、おばちゃんのこと、お母さんのこと。

そして、パピカのこと。

先輩も、きっと、パピカのことを思ってる。

待ってて、パピカ! いま迎えに行くから!

素早くドメインを取得し、ウェブサイトを構築する

LGBTPZN Advent Calendar 2016 参加記事。

2016年9月26日の柚子革命の当日、私は lgbtpzn.org ドメインを購入した。翌日にはLGBTPZN.orgのウェブサイトが一通り完成した。ウェブサイトのトップページの内容は、そのときから現在までほとんど変わらない。

私はこのときすでに fubaiundo.org ドメインを購入していたので、素早く行動することができた。どちらのドメインも No-IP から購入した。このくらい長い名前の org ドメインは30ドル/年くらいで購入できる。クレジットカードを持っていれば手続きはすぐだ。

注意点として、ドメイン名を購入するときに、氏名、住所、電話番号などの個人情報の入力を求められることだ。これらの情報は whois データベースで公開される。詳しくは whois でググってくれ。いずれにせよ、No-IPではドメイン名をプライベートモードで取得することができる。すると、whoisに登録される個人情報はNo-IPのものになる。これで、匿名で奇妙なウェブサイトを運営しても安心だ。

ドメイン名を購入したら、次はウェブサイトを作ろう。GitHub Pages で作るのが簡単だ。GitHub Pagesでウェブサイトを作る方法は適当にググってもらうとして、ここでは独自ドメイン名を使う方法だけ説明する。まず、所有しているドメイン名を、GutHubのしかるべき設定項目に書く。GitHubの設定画面にはIPアドレスが書いてあるので、No-IPの設定画面のそれっぽい場所にIPアドレスを書く。これで終わりだ。具体的な方法を何一つ説明していないが、ここで細かいことを書いてもどうせすぐに変わってしまうので、概念的なことだけ説明すればよいだろう。

一度やり方を覚えれば、ツイッターで何かが流行するたびに、適当なドメイン名を購入して、その日のうちにウェブサイトを開設することができる。ツイッターでは社会運動を30分で始めることができる、ただし30時間で忘れ去られる。一連の動作をいかに素早く完遂するかが、ツイッターのスピードについていくための鍵だ。

フリップフラッパーズ イロドリ先輩メインSS

LGBTPZN Advent Calendar 2016 参加記事。

(放送期間中に書いたため、公式の展開と矛盾するところがあります。放送終了後に書き直したバージョンもあります。)

美術準備室には先輩がいた。マニキュアのにおいは、もう気にならなくなった。

「先輩、どうして絵、捨てちゃったんですか?」

「ここは狭いし、それに、いまは新しい絵をたくさん描きたいんだ。」

テーブルには、このまえ見たのとはちがう、花柄のティーカップがみっつ。カップを手に取るのは、先輩と、私と、ブーちゃん。

先輩が絵を捨てたのも、きっと、三人でこの部屋にいても狭くないようにするため。

ココナとミミがピュアイリュージョンの入口を閉じて、ヤヤカたちもピュアイリュージョンには行けなくなった。でも、先輩となら、もう一度、ピュアイリュージョンに行ける気がする。先輩の変身アイテムはマニキュアのびん。

二人で手をつないで考える。イロちゃんのこと、おばちゃんのこと、ミミのこと、ココナのこと。

先輩も、きっと、ココナのことを思ってる。

待ってて、ココナ!

柚子森さん単行本発売

LGBTPZN Advent Calendar 2016 参加記事。

柚子森さん単行本発売おめでとうございます! 私は発売日入手失敗しました!! Amazon先生が発売日に発送してくれなかった!

柚子森さん単行本発売を記念して、2016年9月26日に始まるLGBTPZN運動の拡大を「柚子革命」と称することを提案します。これは、LGBTPZN支持者に人気の高い「柚子森さん」と、2010年にチュニジアで発生した「ジャスミン革命」にちなんだものです。

今月26日の革命3ヶ月記念日を前に、柚子革命をますます前進させましょう!

ウェブアプリケーションはどのように馴れ合いに陥り、どのように衰退するか

LGBTPZN Advent Calendar 2016 参加記事。

話題がLGBTPZNからどんどん外れていくが、前稿までに あつまれ運営批判 の話を書いたので、その続き。

あつまれ運営批判は、ゴルスタの運営批判騒動に対応する行動の一環として、運営批判を匿名で公開できる場を目指していたが、実際には大学当局の運営を批判する大学生が集まってきた。ここで分かったことは、コメントが途切れると、あつまれ運営批判の「運営」によるコメントを望む声が上がることである。例えば、以下のコメント。

  1. 夜間運営がいないのつまらんのだが。
  2. 示唆に富んだ名文が出てきたのはいいが、運営はどこだ。なんかコメントはよ。

あつまれ運営批判は9月3日に閉鎖された。それと入れ替えで、不買運動ウェブ が9月4日より本格的に稼動した。

あつまれ運営批判に続いて、不買運動ウェブもまた、「過疎化」に悩まされたウェブアプリケーションである。そもそも、不買運動を起こされるような悪徳企業はそう多くはないし、不買運動を登録したら、不買運動ウェブでは他にやることがなくなってしまう。ユーザーたちは馴れ合いに陥り、「ジャバ社」「日本国」「人類」「無」などの奇妙な不買運動を登録するようになった。

不買運動ウェブを再び活性化するには、結局のところ、運営が自分で不買運動を立てるしかなさそうだ。2016年11月29日、人脈ピラミッドが話題になったタイミングで 日本マイクロソフト株式会社不買運動 を登録したところ、ツイッターでそこそこ拡散され、11件のお気持ちが表明された。

そもそも、あつまれ運営批判や不買運動ウェブの機能は、2ちゃんねるにアンチスレを立てることでも達成できるはずである。それでも、そのような意見や行動が見られないのは、ウェブサイトの文化、あるいは運営者のキャラクターが重視されているからであろう。ウェブサイトの運営は、プログラムを書いて自動運転に任せるだけではだめで、運営者が適度なタイミングで介入する必要がある。不買運動ウェブの運営者は「匿名の個人」ではあるが、ツイッターでの女性器に擬態している植物 (vaginaplant) としての発言も含めて、その行動とキャラクターを示していく必要がある。

LGBTPZNは、提唱者であるGo (Go_8yo) が積極的に関与しなくても、じわじわと言葉が広まっていく段階に到達している。LGBTPZN.org は静的なウェブサイトであり、更新はほとんどしていないのだが、検索エンジンなどで到達する人がいるらしく、たまに言及されることがある。Togetterのまとめ も、最後の更新は2016年10月15日であるが、砂鉄事件をきっかけにアクセスが伸び、本稿執筆時点 (12月12日) には14,000ビューを超えている。

とはいえ、砂鉄 (satetu4401) のような強力な支持者に言及される機会は稀であり、LGBTPZNは現在の地位に安住することはできない。ツイッターでも、静的なウェブサイトでも、地道に言及を積み重ねていく必要がある。

運動にとって「思想」はいかに無力か

LGBTPZN Advent Calendar 2016 参加記事。

前稿では、運営批判騒動と運営批判ウェブについて説明した。LGBTPZNから話題が離れてきているが、運動を継続するために資するところがあると思い、本稿でも引き続き運営批判騒動について検討する。

本稿では、運営批判騒動にさまざまな立場から加わった人々について検討する。具体的には、ゴルスタチャレンジ、デマ画像メーカー、偽みこちゃんを取り上げる。

ゴルスタチャレンジの初出はおそらく2016年8月12日である。この時点では、みこちゃん(micoochan) のツイッターアカウントからブロックされることを目的とする遊びだったようだ。運営批判騒動以降は、中学生または高校生でないにもかかわらずゴルスタにユーザー登録して、アカウントを削除されることを競う遊びとしても知られるようになった。

デマ画像メーカーは、正しくは ゴルスタ文章メーカー! という。文章を入力すると、ゴルスタのアカウント停止通知を模した画像を生成するウェブアプリケーションである。記事執筆時点 (12月9日) でまだ稼動しているのがおもしろい。作者はも (2ab7)。前述の通り、ゴルスタチャレンジには、ツイッターでブロックされることを目的とする遊びと、ゴルスタのアカウントを停止させられることを目的とする遊びが混在していた。デマ画像メーカーは、後者の目的を、実際にアカウントを作成することなく手軽に実現できる (あたかもそのように見える画像をツイッターに流すことができる) という効果がある。

運営批判騒動によって、ツイッターで「ゴルスタチャレンジ」の結果を報告する人が急増した。デマ画像メーカーの出現はこれに拍車をかけた。最も良く知られたデマは「カセットテープを知っているとの発言をされていますが、中高生がカセットテープを知っているはずはありません。年齢詐称と見做し削除します。」(8月26日) というものである。

ゴルスタにとどめを刺したのは個人情報暴露恫喝である。ゴルスタの運営者は、あるゴルスタのユーザーが運営に批判的なツイートを行ったことに対して、実名と住所 (それぞれ一部) を出して恫喝した。しかも、これはツイッターで公然と行われたため、またたく間に批判者たちによって拡散された。

間もなく、ゴルスタのアプリはアプリストア (アップル、グーグルとも) から削除され、ツイッターアカウントも停止した。そこで現れたのが偽みこちゃんである。みこちゃん (micoochan) は、ゴルスタの運営者のツイッターアカウントで、運営批判騒動と個人情報暴露恫喝の当事者だった。偽みこちゃんはmicoooochanという紛らわしいアカウント名を取得し、アイコンとヘッダー画像は本物と同じものを使用していた。そして、かつてのみこちゃんを模倣した攻撃的な口調でゴルスタを擁護した。多くのツイッターユーザーが偽みこちゃんへの怒りをあらわにすると、公式ウェブサイトの苦情受付窓口に苦情を言うよう誘導した。偽みこちゃんは、このことを目的とした偽旗作戦であった可能性がある。

運営批判騒動に関わった者のうち、あつまれ運営批判 は思想的な裏付けを持って行動していたことを自ら主張している。例えば、女性器に擬態している植物 (vaginaplant) の以下のツイート。(RTといいねは12月9日調べ。)

運営批判一件、民主主義を信奉する老人が、全体主義に順応した児童を棒で叩く展開になっている。前者にとっては最初で最後のチャンスなので、このまま巨大な運動につなげていきたい。(8月26日、0 RT、3いいね)

また、運営批判騒動の初期に示された、以下の見解も参照すべきだろう。これは、ぼえぼえ (Unused_Johnny) によるものである。

インターネットでまで大人に反省のポーズを強要されて素直に従ってんじゃねーよ。そのままじゃお前らは一生悪い年上のエゴの奴隷だぞ。(8月25日、207 RT、818いいね)

残念ながら、児童を管理教育から解放するという目的は、達せられたとは言いがたい。ゴルスタは閉鎖されたものの、株式会社スプリックス が運営する他のサービス (たとえば森塾) は、無傷で存続している。

運営批判騒動においては、思想的な裏付けを持って行動した者の影響力はわずかであった。むしろ、ゴルスタチャレンジとデマ画像メーカーという、暴徒化した民衆の方が、ゴルスタを閉鎖に追い込んだ功績は大きかったかもしれない。

最後に、9月10日に書かれた 東洋経済オンラインの記事 を紹介する。この分析はきわめて詳細であり、一連の経緯をほとんどすべて知ることができる。プロのライターが優れた歴史書を書いたことで、運営批判騒動は、9月10日には「歴史」になってしまったとも言える。