ikasama over technology

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

YAML で履歴書を作るを Docker 環境でやってみた

  • 最近、転職を考えるようになっていろいろ行動し始めた
  • 履歴書や職務経歴書を要求される場面が増えてきた
  • 以前転職したときはインターネットのどこかでダウンロードした Microsoft Word のテンプレートで作成したものを PDF に変換して使ってた
  • 必要な情報をアップデートしたらそれだけで履歴書を更新できるような仕組みにしたい
  • いい感じのがある

qiita.com

というわけで、さっそくやっていきましょう。

実行環境

必要なライブラリ等 にあるように、 Prawn と IPAex フォントがあれば動きます。 あと Ruby の Script なので当然 Ruby も。

これくらい軽量ならサクッとローカル環境にインストールしてしまってもいい気がするんですが、せっかくなので実行環境を Docker 化してみました。

2023/09/24 追記

本家の変更に追従しやすくするよう、本家を Fork したリポジトリに追加する形に変更し、docker-yaml_cv はアーカイブしました。 以降はこちらを利用ください。

github.com

$ docker compose up
[+] Running 1/0
 ✔ Container yaml_cv-app-1  Created                                                                                                                                                                                                                                                       0.0s 
Attaching to yaml_cv-app-1
yaml_cv-app-1  | ruby make_cv.rb -i data.yaml -s style.txt -o output.pdf
yaml_cv-app-1  | Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)' instead.
yaml_cv-app-1  | input  file: data.yaml
yaml_cv-app-1  | style  file: style.txt
yaml_cv-app-1  | output file: output.pdf
yaml_cv-app-1  | Done.
yaml_cv-app-1 exited with code 0

これだけで動く! 簡単!

▶以前の内容

github.com

git clone したディレクトリ内でさらに kaityo256/yaml_cvgit clone し、 docker-compose up します。

$ docker-compose up
Creating network "dockeryamlcv_default" with the default driver
Building make_cv
Step 1/5 : FROM ruby:alpine
 ---> 8ea9c590ec75
... 省略 ...
make_cv_1  | input  file: data.yaml
make_cv_1  | style  file: style.txt
make_cv_1  | output file: /output/output.pdf
make_cv_1  | Done.
dockeryamlcv_make_cv_1 exited with code 0
$ ls -l output.pdf
-rw-r--r--. 1 root     root     109173 Jan 28 05:51 output.pdf

しかし、 JIS 規格の履歴書とやらは冗長だ

資格や通勤時間といった情報はともかく、趣味・特技や志望動機なんて履歴書に必要なのか?

履歴書の 2 ページ目

ということで、 fork して A4 1 ページに収まるスタイルも作ってしまいました。

github.com

A4 1 ページで収まるスタイル

課題

スクリプトを Dokcer で動かすため、出力される PDF のファイルオーナーが root になってしまいます。 これは fixuid というものを使えば解決できそうです。

bufferings.hatenablog.com

まとめ

謝辞

@kaityo256 さんありがとう!

参考

Amazon Echo Dot から Fire TV Stick を操作する

様子

設定方法

1. Amazon Alexa アプリのサイドメニューを開いて 設定 をタップ

f:id:ikasamak503:20181215235220p:plain:w200

2. ALEXA の環境設定 -> TV・ビデオ をタップ

f:id:ikasamak503:20181215235229p:plain:w200

3. firetv をタップ

f:id:ikasamak503:20181215235237p:plain:w200

4. Alexa デバイスをリンク をタップ

f:id:ikasamak503:20181215235245p:plain:w200

5. Fire TV Stick を選択して 続行 をタップ

f:id:ikasamak503:20181215235254p:plain:w200

6. Echo Dot を選択して デバイスを接続 をタップ

f:id:ikasamak503:20181215235301p:plain:w200

7. 接続完了!

f:id:ikasamak503:20181215235307p:plain:w200

Fire TV Stick

Fire TV Stick

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で構築する | DevelopersIO

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

基本はこの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; を消す