ikasama over technology

忘れたくないことを忘れないために

Heroes of Hammerwatch Patch notes for version 87 を訳した

Heroes of Hammerwatch とは?

一言でいうと

ローグライク・アクション RPG

公式ページ

HEROES OF HAMMERWATCH

Steam

store.steampowered.com

ちょうど新パッチのトレイラーがあった

www.youtube.com

Patch notes のソース

steamcommunity.com

おことわりと謝辞

  • 一部翻訳間違いなどがあるかもしれません。気が付いたら指摘ください。
  • ゲーム内の固有名詞の翻訳にあたっては、以下の日本語化 MOD を参考にしています。ゲームでも使ってます。感謝!

Steam Workshop :: Japanese Translation

以下、翻訳内容

  • 新しいステージ 6 Battlements ( 2 フロア ) 追加
  • ステージ 5 議会 のマップを大きくしたが、フロアを 2 フロアに削減
  • ショートカット・ポータルのステージを改変
  • Mod サポートを追加

クラス

シーフ

  • レベルアップによる HP 上昇量を 4 から 5 に増加
  • 回避 はこれまでの効果に加え、時間経過によって追加で 1 回の回避判定をスタックする
    • 要するにスタックした状態だと最大 2 回の回避判定になる
  • 鉤なわ の当たり判定を大きくした

ソーサラー

  • ウィンターオーブ で射出されるかけらは敵に当たると反射/貫通する
  • フロストシャード は敵に貫通/反射するたびにダメージが 10% 増加する
  • 痛烈な冷気 の凍結確率が 5% から 7.5% に増加

ウォーロック

  • 基礎 HP が 75 から 60 に減少
  • ソウルダガーがヒットごとにダメージを与えるようになるが、ヒットによるダメージ量は -2 される

ウィザード

  • ブラストウェーブ のレベル 3,4 において正しい 焦土 を設置するようになる

プリースト

  • 聖なる光 に小さな AOE を追加

レンジャー

  • 獲物の印 のデバフを付与したときに同時にクリティカルが発生する
  • パワーショット のチャージ中にゆっくり動けるようになる *1
  • 矢の突風 のクールダウンが 2 秒から 0.75 秒に短縮

アイテム/酒

  • アイテム/酒をいろいろ追加
  • 酒のストックがあると無料で飲めるようになる
    • ストックがないときはより高い金額を払えば飲めるようになる
  • スピードブーツ が 2 つのセットアイテムに分割される
    • それぞれが以前の スピードブーツ と同じくらいの効果を与える
  • 以下のアイテムのクールタイムが減少する
    • アーススプリッター
    • ストームコーラー
    • 雷神の怒り
    • 守護のスカラベ
    • 降りかかる破壊
  • スパイクブーツ のダメージ量が 15 から 25 に増加
  • ストームコーラー のチェインライトニングの射程が増加
  • 降りかかる破壊 のダメージ量と燃焼時間が増加
  • 補強グローブ のダメージブロック量が増加

変更と修正

  • ステージ 3 武器庫儀式の像 のボタンを押す必要がなくなった
  • クラスタイトルが無限に増加するようになる
  • アイテム同調のポイント再分配とスキルのポイント再分配がそれぞれ別に行えるようになる
  • 最後のボスを倒した際の税率が減少
  • 各ステージのフロア 1 ではショップが出現しなくなる
  • ショップに新しいバリエーションを追加
  • マナ減少のデバフが絶対量ではなく、最大マナ量の割合で減少するようになる
  • インプ出現のアナウンスを追加
  • モノリスのバフとして ゴールドフィーバー を追加
  • ゲームオーバーの画面にとどめを刺した敵のアイコンを表示
  • 2,3 人でマルチプレイしているときの敵の HP 倍率が減少
  • ロックされている教会のアップグレードのコストを表示
  • 染料の追加
  • 統計の数値が 20 億を超えてもバグが起きないようになった
  • キャラクターメニューで表示される攻撃やスキルのアイコンをツールチップの中に移動
  • フレーム制限の精度向上
  • 壁の中に埋まる現象についての実験的な修正
  • 街でリロードすると エースキー が複数付与されるのを修正
  • ときどき発生する画面クラッシュ *2 の修正
  • 新しい効果音の追加

*1: 移動速度が 90% 低下する

*2: 訳注: 画面が真っ赤や真っ黒になるやつ ? 参考画像: f:id:ikasamak503:20180927021027j:plain

Apache HTTP Server の ServerLimit を変更するための再起動方法

結論

apachectl

apachectl stop; apachectl start;

SysVinit 系

service httpd|apache2 restart

systemd 系

systemctl restart httpd|apache2

解説

Apache HTTP Server のドキュメントによると ServerLimitapachectl restart で無視されるとあります。

mpm_common - Apache HTTP サーバ バージョン 2.4

実際、 ServerLimit を変更して apachectl restart すると以下のようなログが出ます。 *1 これは ServerLimit16 から 32 に変更した場合です。

[Mon Sep 24 13:36:35.613950 2018] [mpm_prefork:warn] [pid 1788] AH00179: changing ServerLimit to 32 from original valueof 16 not allowed during restart

というわけで、 ServerLimit を変更したときは apachectl stop; apachectl start; に相当するコマンドで再起動をしましょう。

servicesystemctl による Apache HTTP Server の起動停止がどういう挙動をしているかは、以下を参考にそれぞれの起動停止スクリプトを読んで理解しましょう。

Apache HTTP Server の停止と再起動 - Apache HTTP サーバ バージョン 2.4

*1: Debian 系の apache2 の場合

AWS EC2 に OpenVPN を構築して Chromebook から接続するときにハマったポイント

OpenVPN 2.4によるVPN接続環境をAWSで構築する | Developers.IO

Chromebook から OpenVPN(TLS-Auth、LZO圧縮有り)へ接続してみた

基本はこの2つのあわせ技です。 作業内容のほとんどはそれぞれの記事を参考にしてもらえば。

個人的にハマったところ

インターネット向けのトラフィックを全部 OpenVPN 経由にするとき

OpenVPNserver.conf に以下のような設定を書きます。

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.1.1"

このとき、dhcp-option DNS で指定する DNS サーバのアドレスは、 OpenVPN サーバから到達できるものを指定してください。 何故なら、名前解決も全部 OpenVPN サーバから実行するからです。 最初これがわかってなくて、無限に名前解決に失敗してインターネットに出られなくなった。

AWS EC2 上で構築するなら、AmazonProvidedDNS を指定するのが良いかもしれません。 たとえば VPC のネットワークが 172.30.0.0/16 だったら、AmazonProvidedDNS は 172.30.0.2 になります。 固定で 169.254.169.253 も使えるみたいですけど、試してません。 詳しくはこちら↓。

docs.aws.amazon.com

Chromebook から接続するときはパスワード欄の入力が必須

クライアント証明書をパスワード設定せずに作成した場合でもパスワード欄に何かしらの文字列の入力が必要です。 空欄だと接続しに行ってくれません。

サーバー側の設定と ONC ファイルの設定を合わせる

ONC ファイル作るのが面倒だったんでベースの作成にこれを使いました。

unfix.org

ただ、2018/05/28 時点でそのまま使うのはちょっと微妙で、いくつか手を入れないといけなかったです。

  • "Proto": udp と出力されるので "Proto": "udp" に直す必要がある。 ( udp にダブルクォーテーションがなくて JSON Syntax Error になる)
  • クライアント証明書が埋め込まれてしまっているので、デバイスにインポートしたものを使う場合は要修正
  • "Auth": "SHA512" がサーバ側のデフォルト設定と異なる (サーバ側に auth SHA512 を設定するか、ONC ファイルから "Auth": "SHA512" を消す)

Source IP アドレスを OpenVPN サーバのものにしたい

IP Masquerade しましょう。

$ sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

以上、楽しい VPN ライフを!

他の参考サイト

OpenVPN on ChromeOS Documentation (publish)

Ubuntu 14.04 で OpenVPN - BLOG EX MACHINA

Chromebook で iso イメージを USB フラッシュメモリに焼く

背景

  1. メインマシン (Windows10) がクラッシュを繰り返してとうとうレジストリ破損で起動しなくなった
  2. OS クリーンインストールをしようと思ったけどインストールメディアがない
  3. サブマシンである Chromebook でインストールメディアを作成しよう! ← いまここ

確認した動作環境

手順

1. Ctrl + Alt + T で ターミナルを開く

f:id:ikasamak503:20180430113837p:plain

2. shell でシェルを起動

crosh> shell
chronos@localhost / $ 

3. df で USB フラッシュメモリっぽいのを見つける

chronos@localhost / $ df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/root                 1640868 1446944    193924  89% /
devtmpfs                  1031524       0   1031524   0% /dev
tmp                       1031736     176   1031560   1% /tmp
run                       1031736     476   1031260   1% /run
shmfs                     1031736   25656   1006080   3% /dev/shm
/dev/mmcblk0p1           10801712 9147840   1085452  90% /mnt/stateful_partition
/dev/mmcblk0p8              11760      24     11412   1% /usr/share/oem
/dev/mapper/encstateful   3185468  135304   3033780   5% /mnt/stateful_partition/encrypted
media                     1031736       0   1031736   0% /media
none                      1031736       0   1031736   0% /sys/fs/cgroup
imageloader               1031736       0   1031736   0% /run/imageloader
/dev/dm-2                   12476   12476         0 100% /run/imageloader/PepperFlashPlayer
tmpfs                     1031736       4   1031732   1% /run/arc/oem
tmpfs                     1031736       0   1031736   0% /run/arc/sdcard
tmpfs                     1031736       0   1031736   0% /run/arc/obb
tmpfs                     1031736       0   1031736   0% /run/arc/media
tmpfs                     1031736       0   1031736   0% /run/arc/adbd
/dev/fuse                10801712 9147840   1085452  90% /run/arc/sdcard/default/emulated
/dev/fuse                10801712 9147840   1085452  90% /run/arc/sdcard/read/emulated
/dev/fuse                10801712 9147840   1085452  90% /run/arc/sdcard/write/emulated
passthrough               1031736       0   1031736   0% /run/arc/media/removable
/dev/sda                  3704296 3704296         0 100% /media/removable/RHEL-7.3 Server.x86_64

今回は /dev/sda がそれっぽい。前に RHEL7 の起動ディスクにしたやつだった。

4. dd で iso ファイルを焼く

$ sudo dd if=./Win10_1709_Japanese_x64.iso of=/dev/sda

5. お茶でも飲みながら気長に待つ

CakePHP を Docker 上の Nginx + PHP-FPM + MySQL にインストールして動かす

仕事でもりもりつかっている CakePHP ですが、ようやく自宅の環境にもインストールしてみました。

github.com

ハマったところ

intl PHP 拡張がなくて CakePHP のインストールにコケる

エラーメッセージ

$ docker-compose run --rm composer create-project --prefer-dist cakephp/app .
Current working directory: '/home/ikasamak/work/docker-cake'
Installing cakephp/app (3.5.1)
  - Installing cakephp/app (3.5.1)
    Downloading: 100%

Created project in my_app_name
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.5.9 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.8 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.5.7 requires ext-intl * -> the requested PHP extension intl is missing from your system.
...

対策

composer, php-fpm イメージに intl PHP 拡張をインストールする

  • Dockerfile (抜粋)
RUN apk update && apk --update add icu-dev
RUN docker-php-ext-install pdo_mysql mysqli mbstring intl

注意: icu-dev パッケージがないと intl PHP 拡張のインストールに失敗するのでインストールしておく。

CakePHP インストール後にアクセスすると 404 エラーが返ってくる

原因

  • Nginx と PHP-FPM を別のコンテナで動作させている
  • Nginx の conf に try_files $uri =404; が設定されている

CakePHP のインストールガイドには Nginx の設定例が載っています。

https://book.cakephp.org/3.0/ja/installation.html#nginx

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_intercept_errors on;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

しかし、今回のように Nginx と PHP-FPM を別のコンテナで動作させている環境ではうまく動きません。 try_files $uri =404; は Nginx 上で該当のファイルが見つからなければ 404 エラーを返します。 PHP-FPM と別コンテナである Nginx 上には CakePHP のソースはないため、この設定が入っていると 404 エラーになってしまいます。

対策

  • Nginx の conf から try_files $uri =404; を消す

docker-compose で Error processing tar file(exit status 1): unexpected EOF が出るとき

こんなエラーに遭遇しました。

$ docker-compose up -d api
Building api
ERROR: Error processing tar file(exit status 1): unexpected EOF

軽く調べた感じだと、これという決定的な情報は見つからず。 ただどうやら、ワークディレクトリにパーミッションが変なファイルがあると発生するみたい。 今回の環境の場合、 volumes でマウントした MySQL のデータファイルが変なパーミッションで作成されていた。

$ ll -d db-data
drwxr-xr-x. 7 systemd-bus-proxy ssh_keys 4096 Mar 24 23:27 db-data

しかし、類似したパーミッションのファイルを手で作成してもエラーは再現しなかった。 前述のどのファイルが悪さしているのか、はたまた合計ファイルサイズでおかしくなるのか、よくわからないけど、とりあえずファイルを消すかファイルが読める状態にしてあげると動くようになった。

 $ sudo chown -R 1000:1000 db-data
[sudo] password for ikasamak:
$ ll -d db-data
drwxr-xr-x. 7 ikasamak ikasamak 4096 Mar 24 23:27 db-data
$ docker-compose up -d api
Building api
Step 1/10 : FROM php:5.6-apache
5.6-apache: Pulling from library/php
f2b6b4884fc8: Downloading [=============================>                     ] 31.35 MB/52.61 MB
8db887c45800: Download complete
6e0e41c52c70: Downloading [=============>                                     ] 20.49 MB/76.35 MB
(以下略)

MySQL で split, join したいとき

素の SQL で DB にパッチをあてる運用とかがあると*1、こんなことがあります。

  • SQL の条件に変数を使いたい
mysql> SELECT * FROM test;
+----+------+
| id | name |
+----+------+
|  1 | hoge |
|  2 | fuga |
|  3 | foo  |
|  4 | bar  |
+----+------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM test WHERE name IN ('hoge', 'fuga');   # ←ここの IN の中とか!
+----+------+
| id | name |
+----+------+
|  1 | hoge |
|  2 | fuga |
+----+------+
2 rows in set (0.00 sec)
  • でも MySQL の変数は複数の値を持てない
mysql> SET @names = ('hoge', 'fuga');
ERROR 1241 (21000): Operand should contain 1 column(s)
  • そうだ、join して split しよう! ←いまここ

MySQLjoin, split はあるのか

join

  • CONCAT_WS を使います

https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_concat-ws

mysql> SELECT CONCAT_WS(',', 'hoge', 'fuga');
+--------------------------------+
| CONCAT_WS(',', 'hoge', 'fuga') |
+--------------------------------+
| hoge,fuga                      |
+--------------------------------+
1 row in set (0.00 sec)

split

  • 残念ながら、MySQL には split に相当する機能はないです
  • ただし、検索条件として使うなら FIND_IN_SET で代替できます
    • FIND_IN_SET の第二引数はカンマ区切りである必要があります
    • データにカンマが含まれているからパイプで繋いでたりしてるとアウトです、あきらめましょう

https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_find-in-set

mysql> SELECT FIND_IN_SET('fuga', 'hoge,fuga');
+----------------------------------+
| FIND_IN_SET('fuga', 'hoge,fuga') |
+----------------------------------+
|                                2 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FIND_IN_SET('foo', 'hoge,fuga');
+---------------------------------+
| FIND_IN_SET('foo', 'hoge,fuga') |
+---------------------------------+
|                               0 |
+---------------------------------+
1 row in set (0.00 sec)

これらを組み合わせて

mysql> SET @names = CONCAT_WS(',', 'hoge', 'fuga');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @names;
+-----------+
| @names    |
+-----------+
| hoge,fuga |
+-----------+
1 row in set (0.00 sec)

mysql> SELECT * FROM test WHERE FIND_IN_SET(name, @names);
+----+------+
| id | name |
+----+------+
|  1 | hoge |
|  2 | fuga |
+----+------+
2 rows in set (0.00 sec)

できた!

*1:弊社です