意地でも正規表現を使わずに拡張子とファイル名を分割する

良く使うのに毎回調べている気がする正規表現をあえて意地でも使用せずに、拡張子(.tar.gz)とファイル名を分割する。ファイルのバックアップをアンダースコア+日付でcpして取得する場合が良くあるが、そういったときのアンダースコア分割にも応用できる。特にアンダースコアはファイル名自体にも使用されることがあるので、revで逆さにしてから変換する。(セパレータが何個存在するか分からないので、逆から処理するとうまくいく)

echo test.test.tar.gz | rev | cut -d '.' -f 3- | rev

逆にして、先頭からセパレータを探索、3個目以降を取得、再度逆にする。言われてみるとシンプルだけれど、なかなか出来なかった発想。

XREAマイグレーションに伴う自前設置WordPressの障害対応

XREAがサーバ老朽化に伴うマイグレーションを行いました。s353サーバに収容されていた当ウェブサイトも今日当たりました。で、同時にWordpressが動かなくなっていました……。色々と面倒だったので記しておきます。

Sorry. We are under maintenance.

移行前のウェブ領域は残されるようです。そのため、VALUE-DOMAIN以外のドメインレンタルサービスを使用していて、DNSレコードのIPアドレス修正が漏れていた場合は上記メッセージが表示され続けます。当ウェブサイト(jikkenjo.net)はVALUE-DOMAIN(eNom)だったので自動切換えでしたが、一部、他社からレンタルしているドメインを修正し忘れていて、本事象に当たりました。

他にも、ページが途中までしか表示されない事象が発生しました。吐き出されたHTMLソースを見ると、何の前触れもなくぷっつり切れていました。原因不明だったので下記対処をしましたが、結果として、DBをphpMyAdminでanalyze/optimizeすれば解消しました。詳細は不明ですが、恐らくどこかのレイヤでタイムアウトに引っかかってしまったのではないかと思われます。マイグレーション作業として行われたであろうDB移行が、物理移行(ファイルシステムごとコピー)ではなく論理移行(MySQLのダンプ・リストア)だったため、統計情報が更新されなかったと考えられます。(MySQLのバージョンが上がったので、物理移行は無理だった? それにしても、初回のanalyzeくらいは実行しておいてほしかった。)

wp-config.php に下記文言を追記してやると、Wordpressの内部エラーが出力されるようになります。私の場合は、「DBサーバとの接続が確立できませんでした」的なメッセージが出ていました。(connection refusedだったかな……)

define('WP_DEBUG',true);

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日)
到着したダンボールの全景

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

箱を開いた姿

箱を開いた姿

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

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