matrix-synapse をインストール (Ubuntu 20.04 LTS / Apache2)

検索して調べても nginx 環境で構築する記事のほうが多い為、apache2からの乗り換えも考えましたが、時間をかけて色々試行錯誤してみた所、Federation TesterでNo SRV Recordsのメッセージが出てしまうのは消すことが出来ていないものの、概ね成功したようなのでとりあえずの導入の部分だけですが思え書きとして書いておきます。Googleから調べた断片情報のニコイチ的なやり方でインストールしているので無駄な所も間違いなくあります。

sudo uname --all の実行結果 : Linux ***** 5.8.0-45-generic #51~20.04.1-Ubuntu SMP Tue Feb 23 13:46:31 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

とても役に立った|ヒントになった参考元ページ

導入で躓いた点|注意点|留意事項

  • 素の名前の"matrix-synapse"ではなく"matrix-synapse-py3"の方をインストールする /

    -py3と末尾につくほうが新しいバージョンなようです。

  • インストール直後にsystemctl status matrix-synapse と確認しても動作しておらず、journalctl -u などで調べても警告が出まくっているが、気にせずに一旦サービスを停止しセットアップ作業を続ける

    多くのインストール方法の紹介ではsynapseインストール直後にてsystemctl statusでサービスの動作確認をしているが、検証環境によってその時点でサービスが動作出来ていない場合があり、この時点でどう解決すれば良いのか悩んでしまう。

    • このような状態の場合、matrix-synapseのsystemdサービスの登録の設定がプロセス終了した場合に無条件に再起動するようになっていて、無限に起動ログを吐き続けるため、ディスクの領域負担的にも明示的にsystemctl stop matrix-synapse とコマンド実行して一旦停止させてから作業を続行すること
    • 他の要因もあるが当方の環境ではsynapseサービスのセキュリティキーファイルのアクセスの為のパーミションの設定の問題が主だった。certbotが取得したセキュリティキーのファイルにのpermissionにsynapseやapache2サービスの実行ユーザーがアクセスできるようにする
  • サービスの起動がfailする場合 systemctl statusやjouranalログを調べるのではなく/var/log/matrix-synapse/homeserver.logを見たほうが明確な原因を発見できる

構成

PC_2を動作確認用などで使用する構成の想定です

f:id:SriVidyut:20210427161511j:plain



インストール作業

  1. python-certbot-apacheとの他のインストール
     sudo su
     apt update
     apt upgrade
     apt install python3-certbot-apache lsb-release wget apt-transport-https
    
  2. apache2の追加モジュールの有効化
     a2enmod proxy
     a2enmod proxy_http
     a2enmod proxy_balancer
     a2enmod ssl
     a2enmod headers
     a2enmod lbmethod_byrequests
    
  3. synapse サーバーのインストール

    一行目の実行(wget)がうまく行かなかったら一旦ブラウザからダウンロードして /usr/share/keyrings に移動させる

     wget -qO /usr/share/keyrings/matrix-org-archive-keyring.gpg https://packages.matrix.org/debian/matrix-org-archive-keyring.gpg
     echo "deb [signed-by=/usr/share/keyrings/matrix-org-archive-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/matrix-org.list
     apt update
     apt install matrix-synapse-py3
    

    運が良ければインストール直後の時点での systemctl status matrix-synapse コマンドで緑色の●になっています。しかしインストールを試す環境によっては白丸で動かていない・・というか無限再起動な挙動っぽいのでとりえずサービスを明示的に停止して作業を続行します。

  4. ufwの設定

    動作させる場合に利用ポートを開ける設定をする。synapseの動作するバックエンド側がローカルネット上の別ホストの場合では少なくともsynapseの動作側で8008のポートは開ける必要がある

    sudo su
    ufw status
    ufw allow ssh
    ufw allow http
    ufw allow https
    ufw allow 8448/tcp
    ufw status numbered
    
  5. おまじないも含めてPCを再起動

設定作業

  1. SRV Recordの登録をしておく / ※SRV Recordの設定の出来るダイナミックDNSサービスもあります。ここでは挙げませんが探してみてください。
    SRVレコードの登録確認
    dig -t srv _matrix._tcp.example.com
    

    上記のコマンドの実行結果

    ;; ANSWER SECTION:
    _matrix._tcp.example.com. 60 IN	SRV	15 5 8448 matrix1.example.com.
    _matrix._tcp.example.com. 60 IN	SRV	10 5 8448 matrix2.example.com.
    
  2. letsencryptサービスを利用したSSL証明書の取得コマンドを実行 / python-certbot-apacheの実行
    certbot --apache -d www.example.com,matrix1.example.com,matrix2.example.com
    

    SSL側のページへリダイレクトするかの質問に一応しないでおいた

  3. インストールされたファイル関連のパーミッションやユーザーのグループへの付加 certbotの実行で生成されたファイルのうち必要な2つ
    /etc/letsencrypt/live/www.example.com/fullchain.pem
    /etc/letsencrypt/live/www.example.com/privkey.pem
    

    apache2(www-data)とmatrix-synapse 両systemdの実行ユーザーがアクセスできるようにしておくか別フォルダfullchain.pemと privkey.pemファイルを別途用意した運用用のディレクトリにコピーするなどしてそこをパーミッション設定する (このパスは控えておく)

  4. /etc/apache2/sites-available/000-default-le-ssl.conf (certbotの実行により追加生成されたapache2の設定ファイル)の編集
    • matrix-synapseを別ホストで稼働させる場合はhttp://127.0.0.1から変更することと/etc/apache2/ports.confの編集の必要がある。
    • apache2の古いバージョンの場合はNameVirtualHostの宣言を追加しておく。
    • DocumentRootはAPI上のやりとりでのURLのパスの衝突を避けるためじゃないかと思いますが別途に用意したパスを指定したほうが望ましいかもしれないです。
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName matrix1.example.com
        ServerAdmin admin@example.com
        DocumentRoot /path_to_docroot
    
        SSLEngine on
    
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
        AllowEncodedSlashes NoDecode
        ProxyPass /_matrix http://127.0.0.1:8008/_matrix nocanon
        ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix
        ProxyPass /_synapse/client http://127.0.0.1:8008/_synapse/client nocanon
        ProxyPassReverse /_synapse/client http://127.0.0.1:8008/_synapse/client
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    
        <IfModule security2_module>
            SecRuleEngine off
        </IfModule>
    </VirtualHost>
    
    <VirtualHost *:8448>
        ServerName matrix1.example.com
        ServerAdmin admin@example.com
        DocumentRoot /path_to_docroot
    
        SSLEngine on
    
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
        AllowEncodedSlashes NoDecode
        ProxyPass /_matrix http://127.0.0.1:8008/_matrix nocanon
        ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    
        <IfModule security2_module>
            SecRuleEngine off
        </IfModule>
    </VirtualHost>
    </IfModule>
    
    ※synapseサービスをローカルネット上の別ホスト・バックエンドで動かす場合(アドレスを192.168.0.5とする。追加のapache2モジュールの有効化が必要かもしれません。)
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName matrix2.example.com
        ServerAdmin admin@example.com
        SSLEngine on
    
        ProxyRequests on
        ProxyPreserveHost off
        ProxyVia off
        AddDefaultCharset off
    
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
        AllowEncodedSlashes NoDecode
    
        ProxyPass /_matrix http://192.168.0.5:8008/_matrix nocanon
        ProxyPassReverse /_matrix http://192.168.0.5:8008/_matrix
        ProxyPass /_synapse/client http://192.168.0.5:8008/_synapse/client nocanon
        ProxyPassReverse /_synapse/client http://192.168.0.5:8008/_synapse/client
    
        <IfModule security2_module>
            SecRuleEngine off
        </IfModule>
        
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    </VirtualHost>
    
    <VirtualHost *:8448>
        ServerName matrix2.example.com
        ServerAdmin admin@example.com
    
        SSLEngine on
        ProxyRequests off
        ProxyPreserveHost off
        ProxyVia off
        AddDefaultCharset off
    
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    
        AllowEncodedSlashes NoDecode
        ProxyPass /_matrix http://192.168.0.5:8008/_matrix nocanon
        ProxyPassReverse /_matrix http://192.168.0.5:8008/_matrix
        
        <IfModule security2_module>
            SecRuleEngine off
        </IfModule>
        
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
    
        <IfModule security2_module>
  5. /etc/apache2/ports.confの設定 / リスンポート8448を追加
    <IfModule ssl_module>
    	Listen 443
    	Listen 8448
    </IfModule>
    

    apache2ctl configtest ※設定ファイルのチェックコマンド

  6. /etc/matrix-synapse/homeserver.yamlの編集

    以下のコマンドを端末から実行して乱数文字列を別に控えておく

    cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
    1240行辺り コメントアウトされた行を有効して上で表示された文字列を設定
    registration_shared_secret: "乱数文字列"
    apache2の動作PCとは別体で利用する場合(この記事でいう構成のPC_2)はそのPCのローカルネット上のNICのアドレス(ここでの例は192.168.0.5)を割り当てる、element web等を利用する場合は webclient を追加する
      - port: 8008
        tls: false
        type: http
        x_forwarded: true    
    #   bind_addresses: ['::1', '127.0.0.1']
        bind_addresses: ['::1', '127.0.0.1','192.168.0.5']
    
        resources:
    #     - names: [client, federation]
          - names: [client, federation, webclient]
            compress: false
    
    510行以降辺り / certbotが取得したファイル
    tls_certificate_path: "/etc/letsencrypt/live/www.example.com/fullchain.pem"
    tls_private_key_path: "/etc/letsencrypt/live/www.example.com/privkey.pem"
    
  7. /path_to_docroot/.well-known/へのファイル追加 dynamic DNSサービスを利用しているなどの理由由来でDNSSRVレコードの登録ができない場合はこの設定をする必要があるようです。 apache2で設定した各ヴァーチャルホストのディレクティブ中で設定したDocumentRoot以下にフォルダを作ってファイルを編集する。
    mkdir -p /path_to_docroot/.well-known/matrix
    chmod -R www-data /path_to_docroot/.well-known/matrix
    nano /path_to_docroot/.well-known/matrix/server
    
    ファイル: serverの内容 (※ matrix2.example.comの場合はmatrix2.example.com) / (アクセス元の変数云々でサーバー名の出力を切り替えるCGIに変更しても良いかもしれない。 )
    {
    "m.server": "matrix1.example.com:443"
    }
    
  8. サービスの再起動と動作確認、管理ユーザーの登録
  9. 詳細な設定について /

    この記事ではとりあえずFederationの確認迄になっていますが、実運用ではsqliteではなくpostgresqlサーバー、capchaのセキュリティでは不十分なようで登録ユーザーへの送信用のメールアドレスの設定も行ったほうが良いらしいです

PHP8.0を利用してみてわかっていること

  • 外部拡張のCurlハンドルがリソース型ではなくなり、オブジェクト型に
    #if (is_resource($handle))
    if ($handle instanceof CurlHandle)
    
  • stream_socket_client や stream_socket_server を同一のスクリプトで複数扱うとjit関連のエラーで不正終了する(Linux,Windows両環境共)ので、php.iniで以下の設定を追加し、jitコンパイルの範囲から除外する。 php.iniのopcacheのディレクティブ項目の設定
    opcache.blacklist_filename="d:\etc_path_to\PHP\80-x64.blacklist"
    
    80-x64.blacklistの内容 (ワイルドカード可能)
    e:\my_library\class\php\net\*.php
    

barrier (synergyフォーク) をわかっている範囲の注意点

barrier (synergyフォーク) を使用する際のわかっている範囲での注意点について書きます

Windows版(2.33-release-3395cca9)

  • 通常はクライアントからサーバーへ初回接続するときにフィンガープリントの確認ダイアログが出るが、ログレベルの設定が警告以上だと出現しなくなってしまうようで、通知以上にしておくのが無難な感じ
  • 使い勝手的にはclient側でVirtualBOXを使う場合などではElevateをAlwaysにしたほうがいい感じ

Linux版(2.32-Release-00000000)

  • GUI版の方はメモリ管理にやや問題があるのか、起動して常駐させていると使用量が数十MBに跳ね上がってしまうので、コマンドラインで直接barriercやbarriersを起動時に実行させるようにしたほうが良いみたい、~/.config/systemd/system に設定ファイルを置いてsystemctl --userで登録する手段で動きました

FreeSpace2のMODマネージャ/ランチャ Knossos について

FreeSpace2について

20年以上前に米国Volition社が開発し発売されたPC向けのスペースコンバットシミュレータゲームです

参考URL / 物語の解説がとてもわかりやすい動画なので参考リンクとして貼らせて頂きます

良いところ

  • 全体的にはゲームバランスがとても良い。
  • 英語ではあるがHUDに作戦の概要が比較的簡単な単語で表示される為、把握しやすい
  • 艦船の護衛や捕獲のために部位破壊をして無力化する作戦など多彩な遂行達成型であり、作戦中にも敵基地の発見などのイベントなどもあり飽きさせない
  • 僚機付きの作戦では指示の出し方次第で作戦の明暗が分かれる場合がある
  • 艦船が大破したときの衝撃波のエフェクトはFS2Openでアップデートされているのより揺らいでる感じや自機の画面が影響で振動するところに臨場感がある
  • 当時の2chスペースコンバットシムを語ろうのスレッドのスレッドではEgoSoftのX2が出る辺り迄は内容の殆どがこのゲームについてであり、あの頃でかなり良スレだった
  • 20年前も以上にリリースされたゲームの割にソースコード公開の経緯もあって現行でアクチブな開発MODも結構あり、Mission PackなどだけでなくTotal Conversionも結構ある

微妙な所

  • 上記でゲームバランスが良いとは書きましたが、最終2ミッション辺りは難易度がとても高くサブターゲットも含めてのミッションコンプリートがどうやっても無理だったような覚えがあります。(※FS1のほうは最終ミッション - ワープ中での大きな艦船との戦闘のほうは更に桁違いに難しすぎてクリア自身できていない)
  • 当時のゲームとしては間違いなく星4以上付与したい評価のゲームだと思うものの、20年以上前の作品ということもあり、Steamでの評価欄でも素の状態で起動しない由来の低評価が多く、現時点で安易に過去の良作として人に薦められるゲームではなくなっている感じ
  • 英語が解らずストーリー展開がわからめ
  • BGMにソプラノが入るのは不要
  • 所謂ワープイン/アウト時のエフェクトがださい
  • Sivanの艦機の虫のモチーフっぽさのデザインがわかり易すぎィ

現行のオンラインで購入して入手できるバージョンについて

  • GOG版 / DRMフリーのDL販売元、実は去年Cyberpunk2077のリリースで話題になったこともあるCD Project Redのサービスなのでこういう取り組みもしているのかと少々応援もしたくなる。
  • Steam版 / 流石に現行のOSで20年以上前のゲームが普通に動作するというのは厳しそうと思われ、ストアのユーザー評価の欄を見てみるとその理由由来で評価はあまり宜しくない感じ。動作させるのに困難なのは上記のものも同じかもしれない

両方とも購入してはいないので保証できないが、後述のKnossosを導入してリテール版も含めて遊べるようにするには確かKnossosのインストールウィザードにSteam版のインストールディレクトリの指定項目がなかったような気がするので購入を検討している人はGOG版を購入したほうがいいと思う

Knossosについて

KnossosはFreeSpace2のMOD導入マネージャ/ランチャです。

f:id:SriVidyut:20210417210523j:plain

Windows98~SEくらいの頃に発売されたゲームですし、本ゲームのみ遊びたいにも当時のリテール版のみのままでは動くわけがなく、という状況になりつつあり FS2Open などを入れて使っていた訳ですが、扱いやすくなった形で安心ですね。これで更に色々なMODをお試し出来る環境にもなります。

fsnebula.org 

去年の12月に導入を試してみた時点でのメモ

  • 少なくともリテール版 (所有していたのはGOTY Edition)からのセットアップは比較的簡単でした
  • かなりの量のMODが比較的簡単な操作で導入できるようで単純にパッケージを数えても146 (2021/03/15時点) ある。色々導入していくとフォルダサイズが結構な量になるでしょうけど
  • Direct X12環境前提っぽいようで、Windows7だったときの2台のPC環境でゲーム中でのHUD表示不良やランチャーから起動しないなどの不具合がありました。片方のノートPCはIvy Bridge世代と古いものの、OSをWindows10に乗り換えた所動作しました
    → ミッションを開始した所強制終了するので駄目でした やはりGPUが古くて動作しないということなのかもしれません
  • デリケートな印象で、パッケージのダウンロードやインストールの途中でアプリケーションを終了したら不味そうな感じなので注意
  • 相性では例えば WingCommander系の2つのMODのうちのどちらかと相性が悪く、インストールするだけでランチャーから他の全てが起動しなくなる (ある程度満足の行く導入の時点でバックアップを取ったほうが良いかも)

日本語化MODの導入について

過去に一寸だけ試したことはあるのですが、国内の日本語化のリソースが殆どリンク切れになっていたので入れる事ができてよかったです。

言語化MOD ( NTP - A Multi-Language Translation Library Interface )で日本語化版をプレイするには別途でプレイヤーを新規で作成しプレイ開始する必要があります。以下の作業を時点でリテイル版のインストールフォルダを含めて23GB位になっています。

  1. Knossosから NTP - A Multi-Language Translation Library Interface の依存MODを導入する
    • Media VPS系統
    • MjnMixaels HD Mainhalls / 上記のMedia VPSに含まれている場合はそちらでチェックして一緒にインストールで大丈夫っぽいようです
    • 必要ならば FS Port をインストール / FreeSpace1をFreeSpace2のエンジン/UIで遊ぶMOD
  2. 当のNTPを導入する。(Language Pack: Japanese にチェックを入れる。EFGISは不要)
  3. インストールの完了を確認したらKnossosを終了する
  4. FreeSpace 2 Language Selector 1.2.1 file - Mod DB から Language Selector をDLする

  5. 解凍してLanguage Selector.cmdを起動する
  6. Choose desired program language で 2 ( =English) を選択する
  7. Choose your desired game language or program option で 3 ( =Japanese)を選択する
  8. Language Selector.cmdのプロンプトを閉じる
  9. Knossosを実行し、NTPを選択して起動

 

TwitterIRCGatewayを改めてセットアップ

利用しているネット環境のノートOSをWindows7からWindows10に移行したのですが、その際に色々弄ってしまったせいかログインできなくなってしまいました。日頃から殆どTwitterは使ってないんですが情報の流れに目を留められうる環境のほうが良いと考えるほうで、頑張って色々調べつつ再セットアップを試行しました。しかし検索しても情報少なめでやや苦労したので覚書きとして書いておきます。

※ 即知の問題としてtwitter apiの利用制限由来でコンソール窓に「エラー: リモート サーバーがエラーを返しました: (404) 見つかりません」と表示される前後でのツイートの送信は不可能だと思います。

TIG (Twitter-IRC-Gateway)のセットアップ

  1.  配布元 :

    GitHub - opentig/TwitterIrcGatewayBinary: TwitterIrcGateway のビルド済みバイナリ
    TwitterIrcGatewayBinary-master.zip をダウンロードしておく(こちらTwitterIrcGateway.zipのほうは動作しなかった )

  2. Windows.NET Framework 3.5での規定の利用での暗号化通信をTLS1.1/1.2にする為にレジストリを変更しておく必要がある。regjumpregscannerなどがあると楽にキーの箇所を探し出せます。

    参考になったサイト 項目5の 「.NET Framework 3.5 で TLS 1.1 および 1.2 を既定値にするための方法」

    • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v2.0.50727
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727

    両者のキー以下に種類は REG_DWORD (REG_QWORDのほうではない)で名前は SystemDefaultTlsVersions 、値は 1 で登録する。変更は上記の二箇所だけで良い。

  3. https://developer.twitter.com/en/portal/projects-and-apps

    素のままで動作させてもフォロワーのツイート閲覧は可能なものの、ツイートは出来ないようになっている。素で入れた状態でのTwitterIRCGatewayの開発者が用意したらしい規定のAPIキーでは制限対応されていると思しきようで、自らツイート出来るようにするためには開発者向けのアプリ側用のConsumerキーが必要なので用意する。
    1. 使用するプロジェクトを用意(無ければ新しく作成申請する)し、そのプロジェクトを開き以降の設定する
    2. 上のタブ項目からSettingsを開き、Authentication settingsでTIGでのPIN-Code方式の認証に合わせる為、3段階認証をdisabledにする
    3. App permissionsではRead, Write, and Direct Messagesにする
    4. 上のタブ項目からKey and tokensを開き、Consumer Keysを新しく生成し必ず控えておく
    5. Authentication TokensのAccess token & secret の生成は必要ないと思う
  4. ダウンロードしたTwitterIrcGatewayのビルド済みバイナリを、インストール先にしたいフォルダに解凍し、中のTwitterIrcGateway.exe.configを開き、編集する
    <setting name="OAuthClientKey" serializeAs="String">
       <value>上で作成したConsumer Key</value>
    </setting>
    <setting name="OAuthSecretKey" serializeAs="String">
      <value>上で作成したConsumer Secret Key</value>
    </setting>
    1. APIの制限に耐えるようにname="Interval"の項目のvalueの値を規定の90から大きめに変更する。
    2. 別のPCから接続して利用する場合はname="LocalOnly"の項目のvalueをTrueからをFalseにする
    3. UTF-8文字コードで利用する為に name="Charset"のvalueISO-2022-JPからUTF-8に変更する。
    4. TwitterIRCGateway.exeを実行
  5. IRCクライアントを用意し、TIGサーバーへの接続設定をする
    1. 接続先、ポート番号などを設定する。(規定でのポート番号は16668)
    2. ログイン名をTwitterアカウント名 (自分のユーザーページを開くときのURLの https://twitter.com/*** の***部分)にする。nickは適当につける。
    3. 文字エンコードUTF-8
    4. パスワードは空欄にしておく
  6. IRCクライアントからTIGサーバーへ最初の接続をする。

    パスワード無しで最初の接続をし、TwitterAPIへの認証手続きをする。接続時に、チャンネルリストに$OAuthという項目が出現して以下のようなメッセージが出力されている場合、認証段階に入る接続迄は成功している

    次のURLをブラウザで表示してアプリケーションのアクセスを許可してください。また、許可のあと表示される暗証番号(PINコード)を入力してください。
    https://api.twitter.com/oauth/authorize?oauth_token=xxxxx...
  7. 以降,$OAuthとの対話に添ってブラウザに表示されたPINコードの入力やパスワードの設定をし、認証作業を終了する。IRCクライアントのTIGサーバーへの接続設定を再び開き、設定したTIGサーバへの接続パスワードを入力して再接続し、#twitterにフォローユーザーのツイートが表示されているのを確認する

その他の追加の設定など

  1. 適当に「#カテゴリー名」のチャンネルを作って該当のツイートをするユーザーをinviteして見やすくする
  2. AddinのTypableMapを有効にして使いやすくする

手続きが必要なものとはいえ、10年以上前のソフトが未だにきちんと動作するのはよくできたものですねー

2016年10月29日のツイート