2TBの雑文置き場

ブログというより説明書置き場というか

Usa_botの「とは検索」の適用範囲の変更と、その意図について

Usa_botは、「○○ #とは」というキーワードに反応して説明文を返していますが、従来はUsa_bot自身に登録されている完全一致するキーワードか、ニコニコ大百科に登録されている、やはり完全一致するキーワードのみに反応していたため、よく似たキーワードなどでは反応せず、必ずしも最適な結果が返せているとは限りませんでした。これを、本文なども含めキーワードがヒットすれば結果が返るようにし、より広範なパターンで調べやすい状態となるようにしました。

これには、以下のような意図があります。

  • より簡単に検索できるようにすることでもっと気軽にUsa_botを使って欲しい
  • 本文でもヒットするようにすることで、略称などを本文に含めておけば調べられるようにしたい

これにより、使う人にとっても、キーワードを登録する人にとっても負担を減らすことができるのではないかと考えています。特に登録については、従来は略称を反応させようと思ったら細かな表記違いの略称・別称をすべて新規キーワードとして登録する必要がありましたが、これからは本文に含めておけばいちいち登録する必要はありません。

懸案事項

概ね利点が大きいと考え今回の変更を行いましたが、懸念がないではないです。

  • 従来より反応しやすくなったため、おせっかい度が上がった
  • 意図しないキーワードで反応することがある

様子を見つつ、過剰反応するようであれば対策を考えたい所存です。

緊急時・極小ロット向け セブンイレブン名刺作成のすすめ

問題設定

  • 名刺を切らした場合に、緊急時に用意する方法がほしい
  • 「名刺 コンビニ」などで検索すると幾つか手法が出てくるが一般には写真印刷を使うようで、そうではなく普通の名刺っぽい紙に作りたい

大前提:名刺は発注したほうが断然・確実に、格段に安く便利で仕上がりも良い

先だって、とある目的のため1に自作の名刺を作成しました。こんなの↓

f:id:twoterabytes:20170805095632j:plain

発注先は、先輩Pの間で有名だというマヒトデザイン様にお願いしました。 片面カラー上質紙180kgで、390(制作費)+160(送料)=550円。100枚ですので、1枚5.5円。土曜日に発注したのに翌水曜に届く素早さでこれです2

つまり、発注して届くタイムラグが許容でき(しかもそれは最大で1週間程度)、1単位100枚が多すぎなければ、外部発注のほうが圧倒的にローコストです。 これから紹介するコンビニ印刷の方法は、カラーの場合2枚ごとに60円、単価で30円と実に5.4倍以上の価格であり、しかも印刷後に自分でカッターなどを使って 切り離す必要があります。発注名刺は当然裁断された状態で届きますので、仕上がりもよく手間もありません。さらに、今回の方法は現状で幾つかの問題を抱えています(後述)。

それでもコンビニ名刺を用意しておく意味はあります。なにしろ、データはスマホに入れておけばいいので可搬性抜群。 名刺を切らしていたり、そもそも名刺を持っていないタイミングでも、そこにセブンイレブンがあれば簡単に名刺を用意することが出来ます。 データ作成に関しても、複雑な作業は殆どありませんし、発注名使用のデータが有ればそれを流用できます。

そういうわけで、あくまで緊急用ではありますが名刺作成の方法などを以下に。

コンビニ名刺用データの作り方と印刷方法

まず、以下のテンプレートを保存します。ただの画像です。幾つかの理由により、350dpi相当のデータとなっています。 枠線版とトンボ版がありますが好みでどうぞ。2重トンボになっていないのは、そんなスペース無いからです。 2重トンボ(相当)に出来ないので、ちょっと小さく切らない限り、切り離した名刺には必ず枠線が含まれます。これが1つ目の問題。 (※サムネイルが黒くなっていますが、オリジナル画像ではちゃんと枠線が見えます。左が枠線版、右がトンボ版です。透過画像の関係ですシクシク)

 

要は、この枠の中に印刷したいデータを描いて、それを保存しておけばよいわけです。印刷時の注意点は以下。

  • セブンイレブン専用の方法
    • はがき印刷を使う関係で、標準ではがきが用意されているコンビニで印刷する必要があります。調べた限りセブン以外の大手ははがき印刷に対応していないようです。これは2つ目の問題点です。
  • レイアウト印刷ではなく、そのまま印刷を選ぶ
    • すでに最適な大きさに設定されています。
  • 「ちょっと小さめ」に「しない」
    • フチが切れるのを防止する機能があるのですが、そうすると画像の大きさが変わってしまうため一般的な名刺サイズではなくなります。

そうして刷ってみたはがきを、光に透かしてみたのがこちら。

f:id:twoterabytes:20170805095930j:plain

わかりづらいかもしれませんが、上の名刺は表の切手貼り付けスペースとかぶってしまっていますね。印刷位置のズレの 可能性を考えた時、これはいくら調整しても回避は難しいと考えます。これが3つ目の問題3。 なお、切手スペースを避けようとテンプレ位置を下に下げすぎると、こんどは名刺データそのものが印刷スペース外に出てしまい 切れてしまう可能性があり本末転倒な結果になります。現在のテンプレは名刺として完成できる方を優先したものです。 私の現行の名刺のように、背景が白いタイプなら枠線が消えることを許容して下にずらすのは有りかもしれません。

あと、仕様上両面印刷に対応しません。人によっては問題になる可能性があります。

コンビニ名刺まとめ

まず利点。

  • データをスマホに入れておけば、その他の媒体(USBメモリとかSDカードとか)を持ち歩かなくても印刷できる
    • クラウドサービスに入れておくようにすれば、スマホに転送する手間すら無い
  • 例えば名刺を切らしてしまった場合に、その場で準備できる
  • 発注名刺のデータがあれば流用できるので制作の手間はほとんどない
  • 発注名刺を頼む前に、どんなふうになるか試して妄想できる
    • 実際には印刷方法が同一とは限らないため、仕上がりには差があります。でも妄想はできるでしょ?

そして欠点。

  • 高い
  • 印刷後切り離す必要があり手間、また切り離す道具が要る
  • 完成名刺に枠線が入ってしまう
  • 手法の関係でセブンイレブン限定の方法
  • 1枚目の名刺の裏に切手スペースがかぶるか、2枚目の名刺の一番下が切れるかどちらかを許容しなくてはならない
  • 両面印刷は出来ない

幾つかの欠点については、工夫の余地があります。たとえばセブン限定でなくするためには、写真用紙に印刷するようテンプレートを新しく作る方法があります。 光沢紙への印刷になるので名刺っぽさが失われる欠点がありますが汎用性が高まりますし、L版に1枚ずつ出力したりA4印刷にして一度に10枚出力するなどの考え方も使えるでしょう。 このあたりは、名刺がどのようなシーンで、どう必要になるか、またそれに対してどこにどういうこだわりを持ちたいかで話が変わってくるところかと思います。

個人的にはやはり発注名刺をおすすめしたいところですが、それはそれとして、保険としてのこういうデータを持っておくのもいいんでないかい?というご提案でした。

余談1

実は、冒頭に示した発注名刺を作った時に、裏面に「特殊な光を当てるとウサちゃんロボが浮かび上がる」というのをやりたくて、こんな小細工用道具を作ったんですよ。

f:id:twoterabytes:20170805100134j:plain

結局そちらの計画はうまく行かず頓挫しました4が、その際に「この紙の感じだったら、名刺そのもの作れるんじゃね?」と思い今回の記事に至りました。

余談2

発注名刺に載っている「担当」の名前は、「安部菜々」「佐藤心」です。いずれも、アイドルマスターシンデレラガールズに登場する、両名ともにアイドル活動に直球の 私一押しアイドルです。近年では某ニコニコ動画でちょっと変わった流行り方をしましたがまあそれはいいです。 ウサミンこと安部菜々さんをよろしくお願いします。はぁとさんこと佐藤心さんをよろしくお願いします。


  1. まあ名刺に書いてある内容でおおよその用途はわかりそうですがいわゆるP名刺です。5thSSA後のオフ用です。

  2. 送料の設定から分かる人にはわかることですが、今回はクロネコDM便指定でお願いしています。私は神奈川住まいですので、参考にする場合はそのへんうまいこと読み替えてください。

  3. なお、上手いこと微調整すれば最適な場所が見つかる可能性はありますが、わたしも(数十円とは言え)予算は無限ではないので…

  4. 切り取った部分を名刺にあて、ダイソーで売られている「マジックライトペン」で縁をなぞる方法で試しました。線がガッタガタになる。器用な人ならうまくいくかも…

PHPのimagecropautoが便利な話

タイトル読んだらそれで終わりな記事。

前置き(読まなくても良い

(回り道酷いです)

先日、とある理由でLightning - Digital AVアダプタを入手しました。目的の方はいまいちだったのでこれから試行錯誤なのですが、まあそれはそれとして、既存環境と組み合わせることで副産物的にiOSバイスHDMIキャプチャが可能となりました。で、そうなると例えばアプリの画面を録画したりも出来る(アプリ側で著作権制御がされていない場合)わけで、P1の端くれ的には画像ダイマに便利な環境が整ったといえるでしょう。

しかし。

アプリ側の対応の問題なのか、自分のやり方が良くないのかは調べきれていない為不明ですが、私の環境(後述)でデレステ2のMV3をキャプチャすると以下のような黒枠のある状態になってしまいます(以下は動画として記録したものから画像を取り出したものです)。

f:id:twoterabytes:20170704103157j:plain

オーバースキャン対策でしょうか?まあ理由は重要ではありません。今大事なのは、個人的にこの黒枠が邪魔ということです。画像処理で消してしまいましょう。

課題設定

  • 以下の環境・手順でキャプチャした画像の、上述サンプル画像に現れるような黒縁を画像処理で消去したい
    • iOSバイスからLightning - Digital AVアダプタでHDMI出力し、AVT-C875でPCに取り込み
    • ハードウェアエンコード環境を活かすため、純正ソフトで録画しMP4で出力する
    • 動画から任意フレームの画像をキャプチャし保存する

どうすればいい?タイトル読んでください

そこでimagecropautoです。こうします。

<?php

$original_image = imagecreatefromjpeg('cute_eternal17_origin.jpg');
$cloped_image=imagecropauto($original_image,IMG_CROP_THRESHOLD,0.5,0);
imagejpeg($cloped_image, 'cute_eternal17_crop.jpg');
imagedestroy($cloped_image);

f:id:twoterabytes:20170704103207j:plain

PHP: imagecropauto - Manualを見ると、「この関数は、 現在のところ詳細な情報はありません」と書いてある割にはそれなりに詳細な情報を得ることが出来ます。要は、一定の条件に従って画像の4辺のフチを切り離してくれます。目的や状況によって様々だろうとは思うものの、事実上IMG_CROP_THRESHOLDが一番使い勝手いいと思います。

IMG_CROP_THRESHOLD
threshold と color を用いてクロップします。
threshold
画像の色とクロップする色を比較する際に用いる許容誤差を、パーセントで指定します。 色の違いを判断する際には、RGBキューブ内での距離を用います。

IMG_CROP_THRESHOLD モードのときにだけ利用します。

color
RGB値あるいはパレットインデックスを指定します。

IMG_CROP_THRESHOLD モードのときにだけ利用します。

完全に黒とわかっている場合ならthresholdは0で良いですが、先述の環境の通りMP4からの切り出しですので、フチはほぼ確実に完全黒ではないと断言できます。どれくらいを設定すべきなのかは状況によりけりでしょうが、例えば今回の例に使った画像の場合0.5%指定で上下に黒い線が1本残っています。その辺許容できるかどうかは用途によるでしょう。

補足:絶対位置指定じゃだめだったのか

もちろん、今回の環境のみであればそれでもいいはずですが、自動的に判定してくれる方が応用幅が広いよねと言うだけ。

ちなみに

私はこれをim@stodonでダイマ4するために使っています。実際にはもっと手を入れて画像をcropして縮小しjpgに保存し直すところまで自動化されており、ファイル容量を削りモバイル環境下の人などにも広く画像が行き渡るようにしつつサーバー負荷を抑える効果があるよう工夫しています。

ところで

サンプル画像に写っているのは、アイドルマスターシンデレラガールズに登場するアイドルの一人、安部菜々さんです。もしデレステなりモバマスなりに触れる機会がありましたら、この永遠の17歳アイドルのウサミンこと安部菜々さんをよろしくお願いします。


  1. P:プロデューサー(アイドルマスター)のこと。アイマス関連のゲームプレイヤー/コンテンツ利用者やファンを指す言い方として定着しています。

  2. デレステアイドルマスター シンデレラガールズ スターライトステージの略称。大雑把に言えばいわゆるリズムゲーム

  3. MV:デレステで特定の条件を満たすと、収録楽曲のムービーを自由に好きなだけ見ることができるようになる。そのムービーのこと。

  4. ダイマ:ダイレクトマーケティング。ここでは直接的な、あるいは露骨な宣伝くらいの意味。

漢数字混じりの文字列を半角数字に変換したい

方針

ステートマシンとして実装するのが良い気がする 先頭から文字を抽出してゆき、それぞれの文字に応じた処理をする。

  • 状態メモリ
    • 3個。4桁以下の数値用[C]、5-8桁用[B]、それ以上用[A]。 先頭から数字を処理してく関係上、3つ目のメモリを除いて8桁以上の値になることは(通常の表記を守る限り)ない。
  • 文字の種類別の処理
    • 〇一二三四五六七八九【数字】 [C]を10倍してからこの値を加算する。ただし、フラグが立っている時は加算のみする。フラグを除去する。
    • 十百千【接頭辞1】 [C]が0の時、1にする。[C]を指定倍率分乗算してから[B]に加える。フラグを立てる。[C]をクリアする。
    • 万億兆…【接頭辞2】 (C+B)を指定倍率分乗算してから[A]に加える。フラグを立てる。[C][B]をクリアする。
    • 、(読点),(カンマ) (スペース)【スキップ】 何もせず次の文字に移動する
    • その他の文字【終了】 処理を終了する

この仕組みは、小数点以下の数字を無視する。また、ロケールは日本に最適化されており、例えば小数点をカンマで表現する地域の値には対応しない。

条件

  • コードはUTF-8を前提としており、またPHP7系列でのみ動作の確認を行っている。
  • ライセンスは2条項BSDライセンスとする。

実コード

軽率に作ったのでクラスですらないし、とりあえずblogに貼ってしまう。一発ネタっぽいし。

updated

  • 20170615-0900ごろ
    • 四則演算にbc math使うようにしたので大きい数字でも変になりにくくなった。
<?php

/*
Copyright 2017 2TB/twoterabytes

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

function jnum2num($str){
    $numberlist=array(
        '〇' => '0',    '零' => '0',
        '一' => '1',    '壱' => '1',
        '二' => '2',    '弐' => '2',
        '三' => '3',    '参' => '3',
        '四' => '4',    '肆' => '4',
        '五' => '5',    '伍' => '5',
        '六' => '6',    '陸' => '6',
        '七' => '7',    '漆' => '7',
        '八' => '8',    '捌' => '8',
        '九' => '9',    '玖' => '9'
    );
    $prefix_a=array(
        '十' => '1',    '拾' => '1',
        '百' => '2',    '陌' => '2',    '佰' => '2',
        '千' => '3',    '阡' => '3',    '仟' => '3'
    );
    $prefix_b=array(
        '万' => '4',    '萬' => '4',
        '億' => '8',
        '兆' => '12',
        '京' => '16',
        '垓' => '20',
        '𥝱' => '24' ,'秭' => '24',
        '穣' => '28',
        '溝' => '32',
        '澗' => '36',
        '正' => '40',
        '載' => '44',
        '極' => '48'
    );

    $str=mb_convert_kana($str,'KVa');
    $str=str_replace(array(',','、',' '),'',$str);
    $numstr=preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);

    $mem_a='0';
    $mem_b='0';
    $mem_c='0';
    $nonpower=FALSE;
    foreach($numstr as $val){
        if(array_key_exists($val,$prefix_a)){
            if($mem_c=='0')$mem_c='1';
            $mem_b=bcadd($mem_b,bcmul($mem_c,bcpow('10',$prefix_a[$val])));
            $mem_c='0';
            $nonpower=TRUE;
            continue;
        }

        if(array_key_exists($val,$prefix_b)){
            $mem_a=bcadd($mem_a,bcmul(bcadd($mem_b,$mem_c),bcpow('10',$prefix_b[$val])));
            $mem_b='0';
            $mem_c='0';
            $nonpower=TRUE;
            continue;
        }

        if(array_key_exists($val,$numberlist)){
            $val=$numberlist[$val];
        }

        if(is_numeric($val)){
            $mem_c=($nonpower)?bcadd($mem_c,$val):bcadd(bcmul($mem_c,'10'),$val);
            $nonpower=FALSE;
            continue;
        }
        break;

    }
    return bcadd($mem_a,bcadd($mem_b,$mem_c));

}

ウサちゃんロボ 簡易説明書など

概要

ここでいうウサちゃんロボ (以下、Usa_botと表記)は、im@stodonを拠点として活動するbotプログラムです。 Mastodon(特に小~中規模のそれ)における、「閉じたコミュニティで発生した用語が新規さんにわかりにくい問題」の解決を当初の目的とし、 現時点では簡易的な用語データベースとしての役割を重点に開発しています。

特徴

  • Mastodonそのものをインターフェイスとした対話的プログラム
  • 簡易な構文でキーワードを追加したり呼び出したり出来る
  • 用語不足や「一部界隈でだけ有名なキーワード」にも対応するため、ニコニコ大百科と勝手に連動

使い方

反応できる発言のルール

  • Usa_botは、自身に届く発言を「スペース区切り文章」として認識します。以下の用例にて、区切りに見えるところは全てスペースです。
    • 半角スペースを推奨しますが、全角スペースでも対応します。
    • 改行がある場合スペースに変換して認識します。現在の仕様上、本文やキーワードに改行を含めることはできません。
  • 特別なコマンドキーワードを使った構文は、コマンドキーワード以降を引数として認識します。
  • 特別な表記がない限り、Usa_botに届く方法であれば発言の公開レベルは問いません。
    • ただし、発言に対しての返信は社内資料(未収載/Unlisted)で行われるため、利用した事実そのものを外部に対して完全に隠すことはできません。

文字列の扱い

キーワードについて

ルールに従って受け取ったキーワードについて、以下のように解釈あるいは変換されてから利用されます。

  • 半角カナは全角に変換されます。
  • 全角英数は半角に変換されます。
  • 先頭に#がある場合削除されます。
    • 特定のハッシュタグについて調べたい場合などに反応モレを防ぐためです。
  • 末尾に「#とは」がある場合削除されます。
    • とは検索時、スペースを開け忘れた場合に対する対策です。
  • 検索時、英字の大文字小文字は同一視されます。
本文について

出力時に以下のように変換されます。

  • @(半角)を@(全角)に変換します。

不用意にメンションが飛ぶのを防ぐための措置です。

調べる

LTLにて(とは検索)

im@stodon内であれば、公開資料(公開/Public)または社内資料(未収載/Unlisted)として次のような形式の発言をすると反応します。(とは検索)

(用語) #とは

例えば次のようになります。

im@stodon #とは

これに対し、Usa_botは後述する[sfind]コマンドを行い、社内資料(未収載/Unlisted)として返します。

Usa_botの見ているエンドポイントの関係上、「とは検索」はim@stodonユーザーのみが使用できます。

補足

Usa_botは、現時点では「#とは のあるTootを見つけた時、最初のスペースまでの文字列を単語として認識」します。つまり、

安部菜々 かわいい #とは

のように、スペースが2個以上ある文面で投稿された場合は最初の単語、この場合は「安部菜々」だけを認識しキーワードとして扱います。

リプライで(リプライ検索)

Usa_botに対して、次のようなリプライをすることでも検索することができます。

@Usa_bot (用語) #とは

又は

@Usa_bot@imastodon.net (用語) #とは

この場合、「#とは」は必要ありません(将来的に変更される場合があります)が必要です(20170530より)。「とは検索」と同様に、結果がリプライで社内資料(未収載/Unlisted)として届きます。

理論上は、im@stodonインスタンスが見えるインスタンスからであれば利用できるはずですが、手持ちのアカウントからうまく動いていないのと、 (おそらく)im@stodonからブロックされている/をブロックしているインスタンスからは利用できないと思われます(検証できていません)。

Mastodon実装に対する当方の勘違いにより、現在この形式でのリプライ検索は動作していません(20170530時点)。なお、当方実装の都合により、Mastodon側の実装に変更がない限りこの形式の検索は復活しない予定です。緩和策として、[s]コマンドを利用することができます(後述、im@stodonユーザーのみ)。

コマンド

Usa_botには、リプライ経由で動作するコマンドが幾つか設定されています。基本的には、これらコマンドは次のような構文で動作します。

@Usa_bot [コマンド] (パラメータ1) (パラメータ2) ...

パラメータの数はコマンドによって異なり、通常必要とされる数のパラメータ以降は単に無視されます。

コマンドを実行できるのはim@stodonインスタンスのユーザーのみです。

単語検索([s])

単語を検索するコマンドです。

@Usa_bot [s] (キーワード)

Usa_bot自身に登録されているキーワードに完全一致するものがあれば、その解説文を返します。見つからない場合、ニコニコ大百科で完全一致するキーワードがあればそのURLを返します。

いずれも見つからない場合、「見つかりません」といったメッセージを返します(以前から変更されました)。

全文検索([find])

キーワードの一部、または説明文の一部に一致するキーワードを探すコマンドです。[s]とは以下の点が異なります。

  • 完全に一致しなくても、部分一致していれば結果に現れます。
  • 説明文も検索対象になります。
  • 説明文自体は返りません。代わりに、本文が見られるURLを返します。
  • 検索結果が多岐にわたりすぎる場合、後半の結果は省略されます。

    @Usa_bot [find] (キーワード)

例えば次のようにすると、

@Usa_bot [find] 安部菜々

次のように返ります。(文章記述時点)

@(ユーザーID)

【安部菜々】について、以下の関連するかもしれないキーワードがあります。

安部菜々 https://imastodon.net/@twoterabytes/1081334
ウサちゃんロボ https://imastodon.net/@twoterabytes/1240903

総合検索([sfind])

総合的な検索を行います。現在、とは検索をするとこのコマンドが実行されます。

  1. まずUsa_botに登録されているキーワードから完全一致するものを探し、見つかればその本文を返します。
  2. 見つからない場合、ニコニコ大百科から完全一致するものを探し、見つかればそのURLを返します。
  3. 続けて全文検索を行い、見つかればその結果も返します。
  4. 結果が多すぎる場合は一部省略されます。結果は、登録・修正が古い順に出力されます。
  5. いずれも見つからない場合、見つからない旨返します。

曖昧に検索したい場合、このコマンドがおすすめです。

単語登録確認([issetkwd])

単語が登録されているか確認するコマンドです。[s]とは以下の点が異なります。

  • 存在の有無だけをチェックします。内容は返しません。
  • Usa_botにキーワードが有るかにかかわらず、Usa_botニコニコ大百科の両方について結果を返します。

[set]をする前に、そのキーワードが存在していないか確認するときに使うことができます。

@Usa_bot [issetkwd] (キーワード)

例えば次のようにすると、

@Usa_bot [issetkwd] 5000兆円欲しい

次のように返します。(文章記述時点)

@(ユーザーID)

【5000兆円欲しい】について、

Usa_botは知っています。
ニコニコ大百科には載っていません。

なお、このコマンドは以前は[isset]という名前でした。

用語登録([set])、更新([update])

用語を追加するコマンドです。以下のような形式で発言します。

@Usa_bot [set] (用語) (解説)

例えば次のようになります。

@Usa_bot [set] いちごパスタ 広義には、苺が使用されたパスタ料理。狭義には、橘ありすが過去のゲーム内イベントで作ったものを指す。im@stodonでの人気料理でありある意味で象徴。異常な再現度の写真やレシピに加え、専用のハッシュタグ #ichigo_pasta やロゴもある。

登録者と内容を明示するため、この構文は公開資料(公開/Public)又は社内資料(未収載/Unlisted)として発言する必要があります。それ以外の公開範囲の発言の場合は登録が拒否されます。 なお、必要な公開設定は今後変更される可能性があります。うまく登録できない場合、設定の変更がアナウンスされていないか確認してください。

構文が正しければ、Usa_botから資料を登録した旨リプライが届きます。 登録以降、とは検索やリプライ検索時、ここでセットした解説と登録時の発言のURLが合わせて投稿されます。つまり、用語を登録したのは誰なのか分かる仕組みになっています。

登録できる文字数には制限があります。以下の3つの制限のうち、一つでも該当する場合は登録することができません。

  • キーワードは最大100文字
  • 本文は最大400文字
  • キーワード+本文+登録時URLの合計は最大450文字

用語登録は、im@stodonインスタンスユーザーのみが可能です。外部インスタンスからコマンドが届いてもエラーになります。

用語内容を変更したい場合は、[update]を使用します。構文は[set]と同一です。[update]で内容を更新すると、旧解説に新しい解説のURLがリプライされ、内容が更新されたことがわかります(同時に旧解説を書いた人に通知が届き、更新されたことが伝わります)。

現在話題のタグとURLのリストを取得([trend])

一定期間内に多く出現したタグやURLを取得します。ラジオやニコ生など、リアルタイム性が高い話題が流れている時に情報ソースを得るのに便利です。

@Usa_bot [trend]

数字の変換([cnv])

入力された数字を一定のルールに従って変換・表示します。以下のように発言します。

@Usa_bot [cnv] (数字)

例えば次のようにすると、

@Usa_bot [cnv] 5000

次のように返します。(文章記述時点)

@(ユーザーID)

Convert form 5000JY:

4850MC ≒ 300*16
4650GC ≒ 300*16
2500SJ_min ≒ 250*10
4300SJ_max ≒ 250*17

※単位は架空のものです。また、入力値の表現方法や大きなによっては不正確な値になる場合があります。

返す文字列にもある通り、表示される値は特に意味はない架空の単位のものです。また、入力される値にはある程度広めの表現方法を認識しますが、想定外の表記方法や値の場合にうまく表示できないことがあります。

ガチャ確率計算([gacha])

入力された確率と回数で、目的のものが1個以上手に入る確率を返します。 確率は%単位で入力します。

@Usa_bot [gacha] 確率(%) 回数

例えば次のようにすると、

@Usa_bot [gacha] 0.4 300

次のように返ります。

@(ユーザーID)

出現確率0.4%のガチャを300回引いた時、目的のものが入手できる確率は69.9529%

自身のMastodon登録日時に関する情報([myinfo])

あなたがMastodonに登録した日付と付加情報を知ることが出来ます。以下のように発言します。

@Usa_bot [myinfo]

例えば、次のように返ります。

@(ユーザーID)

登録日:2017-XX-YY、約NN日経過
1日あたりの平均Toot数:約NNN

ヘルプ([help])

コマンドのヘルプです。コマンド名をわたすと、簡易な使い方の説明が出ます。

その他機能

Usa_botアイキャッチ

Usa_botは、1日に最大3回(現時点ではJSTで9時、17時、25時)、自身が記憶している単語から一定基準で選択したものを、楽屋(LTL、ローカルタイムライン)に投稿します(アニメのアイキャッチや、ゲームのロード中に出てくるTipsのイメージ)。なお、本文が最大で400文字まで登録できる(現時点で登録されている単語での本文最長も400文字です)関係で、そのままLTLに流すとじゃまになる可能性がありますので、投稿の際はCW機能で折りたたまれた状態になり、本文の文字数が同時に表示されます。

Usa_botの知らない単語について

Usa_botは、自身が知らず大百科に掲載もない単語を受け取った時、表向きは反応していないように見えますが、裏ではその単語を記録しており、 毎日24時前後にそれらをまとめて投稿します(公開範囲は公開資料(公開/Public))。この単語が登録されていないのか、という参考にできる他、 何やねんこれという話題作りにもどうぞ。

動作上の問題点

  • 現在のところ、(原因は不明ですが)ときどき発言を取りこぼすことがあるようです。キーワードの登録の際など、応答があるはずなのに何もないときは数秒置いて再度試してみてください。

注意事項

極力このヘルプと実装には差異が無いよう努めますが、タイミングの問題などで齟齬が発生することがあります。

登録されたデータの著作権ほかについて

  • Usa_botに登録された文章の著作権は、それを記述した人に帰属します(勝手にUsa_botや2TBに移転することはありません)。
    • Usa_botは、これら著作物を、本プログラム内で上記説明のとおりに使用します。Mastodonの仕組みの関係で、これら著作物はim@stodonインスタンス外に配信される可能性があり、それらは事実上取り消すことができません。
  • 実装の仕様上、im@stodonあるいはMastodonの利用者の意図せずUsa_botにToot内容が届いたり、キャッシュその他の理由で保存されることがあります。これらデータはプログラムの動作に必要な範囲を超えて利用され、あるいは外部に公開されることはありません。

免責

Usa_botは、2TBの個人プログラム/プロジェクトです。2TBの個人的あるいは対外的な事情などにより、 例えば以下のような問題が起こる可能性があります。その一切に対して責任を負いません。

  • サービスが一時的あるいは恒久的に停止することがある
  • プログラムの不具合により正常に動作しない/しなくなることがある
  • 仕様の変更により、従来と使用方法が変わったりあった機能がなくなることがある

また、以下の様な場合にデータベースに直接手を入れて、データを編集あるいは削除することがあります。

  • プログラムの動作上、編集や削除が必要な場合
    • この場合、編集する場合は文章の内容には手を入れず、たとえば文字の全角半角を変換するなどの同一視出来るレベルでの編集にとどめます。
    • この場合の編集や削除は公開されません(外部から見た影響がないため)。
  • 法的な要請で必要になった場合
  • その他、必要と考えられる場合
    • 詳細な判断基準は非公開としますが、これら条件に従って編集や削除を行った場合は告知に努めます。

大きな変更があった時のメモ

時刻は全てJSTです。

  • 20170911-0940ごろ
    • 追加されたコマンドについて幾つか追記。
  • 20170823-1010ごろ
    • [sfind]の仕様変更に合わせて説明を修正。
  • 20170819-0900ごろ
    • 完全に記述を忘れていた[trend]を追加。
    • とは検索がUnlistedも対象になった旨修正。
    • 検索系コマンドにて、見た受からない時にその旨返すようになったことを追加。
  • 20170815-1050ごろ
    • [sfind]について追加。
    • とは検索が[sfind]に変わったことを明示。
    • 他微修正。
  • 20170725-1300ごろ
    • [find]について追加。
    • とは検索が完全一致検索であることを明記。
    • 「#とは」がキーワード末尾にある時に削除される件について追記。
  • 20170709-0900ごろ
    • [myinfo]について追加。
  • 20170614-1640ごろ
    • 入力文字列が改行を含む時、スペースに変換される仕様を追加。
    • 本文に@があるとき@に変換する仕様を追加。
  • 20170609-1100ごろ
    • 反応できる発言の条件に関して、特別な場合を除き公開範囲を問わない旨、返信はUnlistedで行われる旨を追記。
    • [cnv]について追加。
    • 「#とは」が登録できない旨の表記を削除。(仕様変更により同等のキーワードが追加できるようになっているため)
  • 20170607-0640ごろ
    • キーワードについて、一定の条件で同一視される文字のパターンを表記
    • データベースの編集について追加
  • 20170606-2340ごろ
    • [isset]の出力形式が変わったのでマニュアルも例を手直し
  • 20170606-0940ごろ
    • Usa_botアイキャッチについて追加
    • コマンドがim@stodonユーザーのみであることを補足
  • 20170602-2115ごろ
  • 20170530-1520ごろ
    • リプライ検索について記述の修正
    • [s]、[isset]について追記
  • 20170530-0650ごろ
    • リプライ検索でも#とはが必要になった