AWS/EC2にfactorioサーバをたてる

久しぶりに技術記事です。夜な夜な友人とプレイしているfactorioが、普通にマルチプレイでやるとNW遅延が大きすぎるということで、流行りと無料キャンペーンに乗ってAWS/EC2にfactorioサーバをたててみました。

  • https://aws.amazon.com/jp/freeで無料キャンペーンを開催していることを確認します。
  • t2.micro インスタンスを作成します。途中でセキュリティグループの設定も行います。ssh接続するための鍵もダウンロードしておきます。(作成時に無料と書かれている)
  • セキュリティグループの設定(インバウンド)を変更して、既存のsshポートに加え、factorioのデフォルト使用ポートであるUDP/34197を許可します。
  • (ローカル端末でブラウザからログインした後)https://www.factorio.com/downloadからheadlessバージョンをダウンロードします。リモート先ではブラウザが使えないので、ローカル端末で行うことを勧めます。ダウンロードしたファイルを何かしらの手段を使ってリモート先の/home配下等に送ります。
  • インスタンス一覧画面の「接続」から、鍵等を使ったsshコマンドに与えるオプションのカンニングが出てくるので参考にします。(ユーザ名、接続サーバのDNS名、鍵ファイル名をオプションで与えます。)

sshクライアントにTeraTermを使う場合は、サーバ名を入力後、ユーザIDとダウンロードした鍵ファイルを指定して接続すればOKです。

下記の様に、/home配下に展開して起動してやっても出来なくはありませんが、serviceで起動してやった方が安定します。

tar xvfz factorio_headless_x64_0.14.22.tar.gz
cd factorio/bin/x64/
./factorio --create ../../saves/hogehoge.zip
./factorio --start-server ../../saves/hogehoge.zip

もう少しこだわる人は下記の手順メモを参考にしてください。

-- serviceに登録するプロジェクトをダウンロードするためgitをインストールします。
$ sudo yum install git

-- headless版のfactorioを/opt配下に展開します。
$ cd /opt/
$ sudo tar xvfz ~/factorio_headless_x64_0.14.22.tar.gz

-- 英語版Wikiに従ってfactorioユーザを追加します。
-- これを怠ってしまうと、後々factorioユーザを前提とした設定で面倒です。
$ sudo useradd factorio
$ sudo chown -R factorio:factorio factorio/

-- serviceに登録する有志のプロジェクトをダウンロードしてきます。
$ sudo git clone https://github.com/Bisa/factorio-init.git
$ sudo chown -R factorio:factorio factorio-init/

-- 意図がわかりませんでしたが、README.mdに書いてあったので設定。
-- 設定後にbashを再起動します。
$ sudo ln -s /opt/factorio-init/bash_autocomplete /etc/bash_completion.d/factorio
$ echo "source /opt/factorio-init/bash_autocomplete" >> ~/.bashrc
$ exec bash

-- serviceを登録してやります。
$ sudo ln -s /opt/factorio-init/factorio /etc/init.d/factorio
$ sudo chmod +x /opt/factorio-init/factorio

-- 自動的にfactorioをUpdateするスクリプトもダウンロードしておきます。
-- 手動でやるという人は不要です。こちらも有志のプロジェクトです。
$ sudo git clone https://github.com/narc0tiq/factorio-updater
$ sudo chown -R factorio:factorio factorio-updater/
$ ll
total 16
drwxr-xr-x 5 root     root     4096 Apr  2 05:38 aws
drwxr-xr-x 4 factorio factorio 4096 Apr 20 00:01 factorio
drwxr-xr-x 3 factorio factorio 4096 Apr 20 00:05 factorio-init
drwxr-xr-x 3 factorio factorio 4096 Apr 20 00:29 factorio-updater

-- ↑こんな感じの状態になっていればOKです。

-- ここからはfactorioユーザで作業した方が効率的です。
$ sudo su - factorio

-- exampleを参考に設定ファイルを作成します。
$ cd factorio-init/
$ cp -p config.example config
$ vi config

-- 触るところは基本的にありませんが、先ほどの手順でfactorio-updaterをダウンロードした人のみ下記を設定します。
-- UPDATE_SCRIPTの設定と、USERNAME/TOKENにfactorio公式のアカウントを設定すればよいと思います。
# absolute path to the factorio-updater script
UPDATE_SCRIPT=/opt/factorio-updater/update_factorio.py
# Note that if you set HEADLESS=1 the username/token will not be used as the headless
# download is provided free of charge
HEADLESS=1
UPDATE_USERNAME=you
UPDATE_TOKEN=yourtoken
UPDATE_EXPERIMENTAL=0
UPDATE_TMPDIR=/tmp

-- serviceに正常に登録できたことを確認します。
$ service factorio help

-- 自動更新の設定が正常にできたことを確認します。(当然、最新です。)
$ python update_factorio.py -l
Available packages:
        core-linux_headless64
$ python update_factorio.py -p core-linux_headless64
No updates available for version None (latest stable is 0.14.22). Did you want `--experimental`?
$ python update_factorio.py -p core-linux_headless64 -f 0.14.22 -x
No updates available for version 0.14.22 (latest experimental is 0.14.22).

-- factorio本体の設定を行います。適宜修正してください。
-- name/descriptionあたりは全員変更の必要があると思います。
-- 友人だけのサーバの場合は、public/game_passwordあたりを設定してください。
$ cd /opt/factorio/data/
$ cp server-settings.example.json server-settings.json
$ vi server-settings.json

-- factorioの初期設定をするため、初回のみセーブファイルを作成する手順が必要です。
$ cd /opt/factorio/
$ ./bin/x64/factorio --create ./saves/mysavegame

-- serviceで起動してやります。
$ service factorio start

下記に途中で出たエラーと対処法を記しておきます。(メッセージを読めば分かるので、私は特にハマりませんでしたが)

-- 設定ファイルが不足しています。exampleを参考に作成してください。
$ service factorio start
Could not find factorio server settings file: /opt/factorio/data/server-settings.json
Update your config and point SERVER_SETTINGS to a modified version of data/server-settings.example.json

-- 初期設定のため、初回のみセーブデータを手動で作ってください。
$ service factorio start
Could not find factorio config file: /opt/factorio/config/config.ini
If this is the first time you run this script you need to generate the config.ini by starting the server manually.
(also make sure you have a save to run or the server will not start)

Create save: sudo -u factorio /opt/factorio/bin/x64/factorio --create /opt/factorio/saves/my_savegame
Start server: sudo -u factorio /opt/factorio/bin/x64/factorio --start-server-load-latest

(If you rather store the config.ini in another location, set FCONF='/your/path' in this scripts config file)

参考

【ポケモンSM】最適なメタモン厳選方法メモ

今作は仲間を呼ぶの連鎖でV確定数を増やせることが知られています。色んなサイトを参考にさせて頂きながら、最適解と思われる方法を試行錯誤しながら見つけたのでメモしておきます。時間が掛かったり、どこかでミスをしておじゃんになるので、結構面倒だけれど準備した方が最終的には効率が良いです。

準備

  • スリーパー(スリープLv26進化)に「すりかえ」を思い出させる(ウラウラ島>ラナキラマウンテン>ポケモンセンター@要ハートのうろこ)。
  • ヤブクロン@あくしゅう(ウラウラ島>マリエシティ>はずれの岬>草むら)にリサイクルを思い出させ、リサイクル以外の技を忘れさせる(メレメレ島>ハウオリシティ>ポケモンセンター)。
  • 目的のせいかくを持つケーシィを用意。
  • ハイパーボールを多めに購入。(念のため)
  • ビビリだまを多めに購入。(仲間を呼びやすくなる。)
  • ニューラ(ラナキラマウンテン)にみねうち(技マシン54@ハラ勝利後にメレメレ島>研究所>ククイ博士)、みがわり、格闘技(かわらわり)を覚えさせる。

並び順

  1. ケーシィ@戦闘不能
  2. ヤブクロン@けむりだま
  3. スリーパー(順不同)@ヒメリのみ(PP回復)
  4. ニューラ(順不同)@ヒメリのみ(無くても良い)

行動

  1. ウラウラ島>ホクラニ岳>草むらに移動。
  2. がくしゅうそうちをOFFにする。
  3. レポートを書く。
  4. メタモンと遭遇するまで粘る。(同じく稀に出現するダンバルは捕獲率が伝説級らしい。全く捕獲できなくてイライラする。)
  5. 戦闘不能のケーシィを飛ばして、ヤブクロンを繰り出す。
  6. メタモンがヤブクロンに変身する。(以降、リサイクルのみ連打となる。)
  7. スリーパーに交換。
  8. すりかえを選択。(メタモンにヒメリのみを押し付ける。以降、リサイクルPP切れ→ヒメリのみ消費→リサイクルで回収を連打となる。)
  9. ニューラに交換。
  10. みがわりを選択。(かわりものメタモン対策。)
  11. みねうちを選択。(HP1になるまで連打。HPが低いほど仲間を呼びやすくなる。)
  12. ビビリだまを使用。
  13. 仲間を呼んだ場合:呼ばれた方(ヤブクロンにへんしんしてない方)を格闘技で戦闘不能にする。
  14. 仲間を呼んでいない場合:ビビリだまを使用。(効果のない道具を使用した場合はアイテムの消費なくターンを無為にやり過ごせる。)
  15. 繰り返す。31匹目に呼び出された方(ヤブクロンにへんしんしていない方)を捕獲。PPでカウントすれば間違い難い。

以上で4V確定です。

PostgreSQLでSQL発行時のエラー対応

PostgreSQLでselect句に定数が含まれていた場合、下記エラーが出力されることがあります。後に続いて型を決めてやれば問題は解消します。::textの部分です。

failed to find conversion function from unknown to text
select *
from (select a_column, 'const'::text as "b_column" from c_table)
  as d_table

メモでした。

JMeter走行でTimeoutedException

Windows端末でJMeter走行中にJMeter自身のExceptionが「結果をツリーで表示」リスナーの結果画面に表示される場合があります。これは、スレッド数を多くした場合や、画像やjavascriptやcssが多い場合に発生します。最終的にはクライアント端末の同時接続数を超えたことが原因です。

Windowsのレジストリに項目を追加することで、本事象を回避することが出来るのでメモしておきます。下記内容をテキストファイルに保存して、拡張子を.regとして実行すれば簡単です。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000FFFE
"TcpTimedWaitDelay"=dword:0000001E

GoogleGroupsで謎のエラー

謎のエラーが出てdocomoアドレスをGoogleGroupsに登録できませんでした。

エラーメッセージをパッと見て思いついたのが、登録済みGmailのGoogleアカウントに、追加しようとしているdocomoアドレスを結びつけている可能性でした。

エラーメッセージを見る限り、「予備のメールアドレス」の部分が妙に引っかかります。特に原因特定するつもりもありませんが、同様のメッセージで悩んでいる人のためになるかもしれないと記しておきます。

招待状が送信されませんでした
新しい招待状が送信されませんでした
1 人は既にグループのメンバーです。指定されたメールアドレスがこのユーザーのメインのメールアドレスか予備のメールアドレスかは不明です。

溶かしても良いレア艦個人的メモ(艦これ)

レア艦は改造時にレア装備を持ってくることもあるため無下に扱えません。毎回調べている気がするので、これを機にメモしておきます。

艦名 破棄 Lv 説明
三隈 NG 30 「20.3cm(3号)連装砲」
清霜 OK 30 「三式水中探信儀」
浜風 OK 30 特に目ぼしい装備はない。
江風 NG 30 「12.7cm連装砲B型改二」
非現実的だがLv75の改二は2本目の「12.7cm連装砲B型改二」と「照明弾」を持ってくる。
春雨 NG 30 「12.7cm連装砲B型改二」「ドラム缶」
葛城 OK 50 「零戦52型丙(六〇一空)」改装設計図が必要なので改造は実質無理。
卯月 OK 25 特に目ぼしい装備はない。
時津風 OK 30 「12.7cm連装高角砲(後期型)」レアだが他装備で代替可能。
能代 OK 35 特に目ぼしい装備はない。
阿賀野 OK 35 特に目ぼしい装備はない。
能代 OK 35 特に目ぼしい装備はない。
夕雲 OK 30 特に目ぼしい装備はない。

Nintendo3DSをオンライン修理受付で修理に出してみた

Nintendo3DSの電源が入らなくなり、任天堂のオンライン修理受付を使用してみたのでメモしておきます。オンライン修理受付~修理完了品到着まで約12日有しました。

流れメモ

  1. 任天堂ウェブページからオンライン修理受付を行います。(ページ後半に分かり易いフローチャートが載っています。)
  2. 故障したNintendo3DSを梱包します。手元に手頃なサイズの段ボールが無かったため、ヤマト運輸の宅配便コンパクトを使用しました。セブンイレブンのレジで言えば60円程で段ボール(今回は専用BOX(薄型じゃない方)を使用)を購入できます。更に、ポスティングされている不要な広告をぐしゃぐしゃに丸め緩衝材として使用しました。
  3. 「修理品が到着しました」メールが届きます。(約3日)
  4. 「修理完了&発送」メールが届きます。(約7日)
  5. 修理完了品が修理費用(今回:7695円)の代金引換で到着します。(約2日)
到着したダンボールの全景

到着したダンボールの全景

箱を開いた姿

箱を開いた姿

世界樹の迷宮Ⅴの発売直前にお亡くなりになったので……

世界樹の迷宮Ⅴの発売直前にお亡くなりになったので……

KindleUnlimitedで気になったコミックタイトル

Amazonで400ページほど存在している、KindleUnlimitedで対象となったコミックについて、エロ本に塗れながらも、ページを捲っていて気になったタイトルをメモしておきます。(折角設定したAmazonアフィリエイトを試してみたかったのが本音。)

ちなみに、1カ月無料期間終了後はそのまま有料サービスに移行してしまう、いつものAmazonのやり方ですので注意が必要です。キャンセルはこちらのページから可能です。(いつから課金されるかも書かれている。)

アニメが面白かったのでピックアップ。序盤を読んだだけで引き込まれた。個人的にはアニメより原作の方が好き。名言が連発されている。「だし巻きのこと、細胞レベルで好きなんだ」等。

深夜アニメのCMで良く見かけるためピックアップ。低評価なAmazonレビューが目立つ。確かに、主人公をはじめとしたキャラクタの気持ち悪い面が際立ってしまっている。飯の作画が全て。

以下、気になったタイトルだけをずらずら続けます。(未読)気になるタイトルは「双葉社」「一迅社」「芳文社」あたりに固まっているので、出版社でフィルタリングした方が効率的な気がしてきました。






AmazonJSでアフィリエイトを始める

全く興味ありませんでしたが、知識として興味があったので試してみました。色々と大変でした。

AWSアカウントの準備

まずはamazon.comのアカウントを取得します。商品を購入するamazon.co.jpのアカウントではありません。襷に長し感は有りますが、ここで取得するアカウントはAWSのアカウントです。AWSで提供されるサービスが多すぎて意味が分からなくなります。

ルートユーザ(今取得したアカウント)でアフィリエイト用キーを発行しても良いのですが、「ルートユーザから払出した子ユーザから発行したアフィリエイト用キーを使うのが最近の流行りだよ!」とAmazonから勧められるので大人しく従います。サービスメニュー(サービスが山ほどあるので頑張って見つけてください)から「IAM(正式にはアイアムと発音)」を選択します。サイドメニュー(ダッシュボード)より「ユーザ」を選択します。新規ユーザを払出して、アクセスキーとシークレットキーを取得します。シークレットキーは後では2度と確認出来ないのでメモっておきましょう。

次に、払出した子ユーザに対して権限を付与します。ユーザ詳細ページの「アクセス許可」タブから、「ポリシーのアタッチ」をして、「AdministratorAccess」を付与します。(何の権限が最低限必要なのか、最後まで不明でした。色々組み合わせて試したのですが分からず。全権限付与しちゃうと、子ユーザを払出する意味は無いのかも。)権限が足りない場合は、後で実施するAmazonJSの使用中に下記エラーが発生します。後で分かったのですが「Amazon EC2 Container Service」権限さえあれば良いと思います。

Amazon Product Advertising APIのエラー
UnauthorizedOperation
Your AccessKeyId is not authorized to perform this operation. Please check IAM policies for the Access Key.

アソシエイトアカウントの準備

支払先等を設定するためのアカウントも個別に取得する必要があります。淡々とアカウント登録を進め、トラッキングID(日本アカウントの場合は、末尾が「-22」となります)を取得して完了です。ちなみに、銀行振替の設定だと面倒そうで、Amazonギフトとして受け取る設定だとワンクリックで設定完了しました。アカウントが正常に設定できていないと、後で実施するAmazonJSの使用中に下記エラーが発生します。

Amazon Product Advertising APIのエラー
AWS.MissingParameters
リクエストには、必要なパラメータが含まれていません。必要なパラメータには、AssociateTagなどがあります。

AmazonJSの準備

AmazonJSをインストールして設定ページで、アクセスキー、シークレットキー、アソシエイトタグを入力します。

記事の執筆画面のメニューにAmazonマークが現れており、URL入力等で簡単に記事へアフィリエイトリンクを挿入できてしまいます。折角なので、最後に最近読んで面白かった漫画のアフィリエイトを貼っておきます。

愛宕山踏破

前回から始まったハイキング記録が早速1回目で止まってしまっていました。その後、愛宕山にも登ったので更新しておきます。頂上には愛宕神社があります。

道程

  1. JR京都駅前から京都バスに乗り「清滝(終点)」まで行きます。(8:58が最終バスなので注意)
  2. 橋を渡り、鳥居をくぐると、「軽い気持ちで登るな」と厳しい道中であることを警告する看板が左手に現れます。
  3. 道中は1/40、2/40~40/40と進捗具合を掲示してくれています。従って只管歩きます。
  4. 頂上直前に門があり、くぐると愛宕神社がみえます。頂上には、下界より遅い時期にも桜が咲いていました。桜の種類が違うのか、気温が違うのか、理由は不明ですが。
  5. 逆方向のルートで下山します。小石が多く、狭くて傾斜が厳しい道中です。
  6. 山を抜けると民家が現れ、熱々に熱せされたアスファルトの道を進みます。
  7. 保津峡駅にたどり着きます。橋上に設置されており、トンネルに挟まれた駅です。最終的な目的地としてもふさわしい壮観な駅です。

道中記録

最初の鳥居

最初の鳥居


神聖そうな石が無造作に投げられている

神聖そうな石が無造作に投げられている


家みたいなのがある

家みたいなのがある


こんなのあり!?

こんなのあり!?


時期外れの桜

時期外れの桜


またここから登ります

またここから登ります


入口

入口


下山して駅付近まで歩くと橋が見える

下山して駅付近まで歩くと橋が見える


橋上に駅が設置されている様子が見える

橋上に駅が設置されている様子が見える


壮観な駅

壮観な駅