ARCHIVESDRIVE HB

オイラはホームベーカリー!

ワイはただヒストリに消えてほしくなかっただけなんや

.bash_history を飛ばした事に気づいて、 shared history っぽい仕組みを入れたら BASH_IT が使えなくなったので zsh + Prezto に引っ越した。

.bash_profile に入れた shared history っぽい設定

http://iandeth.dyndns.org/mt/ian/archives/000651.html

function share_history {
    history -a
    history -c
    history -r
}
PROMPT_COMMAND='share_history'
shopt -u histappend

BASH_IT が使えなくなった設定調べるのもなー、というのと、 macOSX のデフォルトシェルが zsh に変わるとのことで、えいやっと移行することにしました。 ちなみに uninstall を叩いたら .bash_profile に記載した内容のうち、 BASH_IT の設定より下に書いていた内容が全て消えて、泣きながら timemachine から復旧しました、どんだけ古いバージョンを使っていたのか……(最近のはバックアップを作るっぽい)。

zsh + Prezto + Powerlevel9k

https://mitubaex.hatenablog.com/entry/2018/04/23/044455

大体こちらを参考に作業した。

zsh の用意

macOSX には標準で用意されているようなのですが、せっかくなので brew からインストールできる最新版を利用します。

brew install zsh
sudo vi /etc/shells

/etc/shells

# 以下を追記
/usr/local/bin/zsh

ログインシェルの切り替え

/etc/shells に追加した内容が正しければ、 chshzsh を利用できます。 切り替え後はターミナルを再起動するとわりと問題が出ないでしょう。

chsh -s /usr/local/bin/zsh

また、初回起動時に設定ファイルが存在しないので、「作る? どうする?」と聞いてくるのですが、とりあえず全部無視して q で抜けてやりましょう。

.bash_profile の移行

bash に依存する設定が入っていなければ、リネームするだけで問題ないでしょう。 これで設定ファイルが用意されます。 また、 bashzsh では rc _profile で読み込むタイミングが違うようなので用途に合わせて設定しましょう。 基本 .zshrc としておけばログインシェルで読まれるはず。

cp ~/.bash_profile ~/.zshrc

.bash_history の移行

ヒストリについては単純にリネームしただけではだめなようで、検索して出てきた ruby の変換スクリプトを利用しました。 python の変換スクリプトも見つけたのですが、なんか動かなかったので……。 該当のスクリプトruby 2.5.1 で動作を確認しています。 https://gist.github.com/goyalankit/a1c88bfc69107f93cda1

cd ~/
vi bash_to_zsh_history.rb
ruby bash_to_zsh_history.rb
  • 移行元のヒストリファイルは ~/.bash_history
  • 移行先の自動生成されるヒストリファイルは ~/.zsh_history

となっているので、違う場合はスクリプトを書き換えるなり、ファイルの位置を揃えるなりしてあげてください。 また、以下のように .zshrc にヒストリファイル名指定と共有をするための記述を追加します。 僕は、履歴の件数はもうひとつ 0 を足しました。

.zshrc

# 履歴ファイルの保存先
export HISTFILE=${HOME}/.zsh_history
# メモリに保存される履歴の件数
export HISTSIZE=1000
# 履歴ファイルに保存される履歴の件数
export SAVEHIST=100000
# 重複を記録しない
setopt hist_ignore_dups
# 開始と終了を記録
setopt EXTENDED_HISTORY

Prezto のインストール

基本 github の README 通りにやれば問題ありません。 Prezto 以下の $rcfileシンボリックリンクを作成する際に、失敗して何度も実行すると File exists と言われるので、その場合は ls -lha .z* などして、シンボリックリンクが設定されていれば問題ないです。

https://github.com/sorin-ionescu/prezto#installation

cd ~/
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

ここでターミナルを再起動しましょう、ちょっと見た目がにぎやかになります。

powerlevel9k のインストール

こちらも github の README から辿れるインストールの項通りに実行すれば問題はないでしょう。 macOSX を利用しているのでそのような説明ですが、他環境でもこれで大丈夫そう。 また、フォント表示の都合上必要なため、 nerdfont を事前にインストールしておきます。

https://github.com/Powerlevel9k/powerlevel9k/wiki/Install-Instructions#option-3-install-for-prezto

cd ~/
brew tap caskroom/fonts
brew cask install font-hack-nerd-font
git clone https://github.com/bhilburn/powerlevel9k.git  ~/.zprezto/modules/prompt/external/powerlevel9k
ln -s ~/.zprezto/modules/prompt/external/powerlevel9k/powerlevel9k.zsh-theme ~/.zprezto/modules/prompt/functions/prompt_powerlevel9k_setup

.zpreztorc に powerlevel9k を利用する設定を追加します。

vi ~/.zpreztorc

.zpreztorc

zstyle ':prezto:module:prompt' theme 'sorin' の記述は削除するかコメントアウトしておいてください。

#
# Prompt
#

# Set the prompt theme to load.
# Setting it to 'random' loads a random theme.
# Auto set to 'off' on dumb terminals.
#zstyle ':prezto:module:prompt' theme 'sorin'
POWERLEVEL9K_MODE='nerdfont-complete'
zstyle ':prezto:module:prompt' theme 'powerlevel9k'

ここでターミナルを再起動すると、なんかシャレオツな感じになります。 やったー!

おまけ

iTerm2 の profile からプリセットの color を pastel に変更しました、好きなように入れ替えるのだ。

動作が遅いんじゃが

BASH_IT も大概でしたが、 zsh+Prezto も色々読み込んでいるのでめちゃ遅いですね。 特に powerlevel9k の装飾を出すのに 70% くらいの時間を利用しているようです……。

time ( zsh -i -c exit )
 -> ( zsh -i -c exit; )  0.36s user 0.61s system 42% cpu 2.296 total

# zprof の結果

 num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    2         215.63   107.82   65.82%    140.51    70.26   42.89%  prompt_powerlevel9k_setup
 2)    2         325.44   162.72   99.34%     50.04    25.02   15.28%  pmodload
 3)    1          38.10    38.10   11.63%     38.10    38.10   11.63%  termColors
 4)    2          24.02    12.01    7.33%     24.02    12.01    7.33%  promptinit
 5)    1          17.40    17.40    5.31%     17.36    17.36    5.30%  powerlevel9k_vcs_init
 6)    1          15.73    15.73    4.80%     15.73    15.73    4.80%  is-callable
 7)    1          14.27    14.27    4.36%     14.27    14.27    4.36%  compinit
 8)   41           7.14     0.17    2.18%      7.14     0.17    2.18%  defined
 9)   36          12.09     0.34    3.69%      5.03     0.14    1.53%  set_default
10)   11           4.44     0.40    1.35%      4.44     0.40    1.35%  (anon)
11)    1           4.21     4.21    1.28%      4.21     4.21    1.28%  colors
12)    8           3.56     0.44    1.09%      3.56     0.44    1.09%  add-zsh-hook
13)    2           2.50     1.25    0.76%      2.50     1.25    0.76%  is-at-least
14)    1         219.10   219.10   66.88%      0.33     0.33    0.10%  set_prompt
15)    1         219.33   219.33   66.95%      0.23     0.23    0.07%  prompt
16)    2           0.09     0.04    0.03%      0.09     0.04    0.03%  segment_in_use
17)    1           0.12     0.12    0.04%      0.07     0.07    0.02%  print_deprecation_warning

応答時間が長すぎます

年明けくらいに入れ替えた GeForce GTX 1050 Ti のせいなのか、WATCH DOG VIOLATION が頻発してろくに利用できない状態だったので、重い腰を上げて PC 初期化した。 ら、 chrome / vivaldi ( chromium 系 ) でタイムアウトエラーが頻発してろくに使えなかったのでなんとかした。

qiita.com

といっても、こちらの記載通りやっただけである。 いやー感謝感謝。

T3.micro と M5.large のファイル作成速度差

だいたい二倍位差があるんすかね? はえーすっごい……。 本番と検証の環境作ってる最中に気付いたので。 利用しているのはいずれも EBS の SSD(gp2) だったはずです。

以下コマンド ( /swap に割り当てるファイル作成してる ) を実行した結果です。

dd if=/dev/zero of=/swapfile bs=1M count=8192

ちなみにこれはワイの見間違いかもしれません(しろめ)。

T3.micro

8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 50.4515 s, 170 MB/s

M5.large

8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 26.0813 s, 329 MB/s

メールを実送信したくないが送信はされて欲しいし内容は確認したいお気持ちを delivery_method に表明する

Railsconfig.action_mailer.delivery_method で、:sendmail なり指定すればサッとメール送信できるので便利で良いですね。 とはいえ、環境によっては「メールを送信したくない!」というパターンがあるので。 しかし単純に送信部分をコメントアウトなりしちゃうと、サインアップ処理の最後に爆発しちゃうこともあるのでどうしたもんか。

そんなときは、 :file を利用しましょう。

続きを読む

RDS から mysqldump するときのお作法

GTID とかついてきて、そのまま他の環境に持ち込もうとするとうまく行かず。 「イラァ」としないためのメモ。

mysqldump -u ${ユーザ名} -p -h ${エンドポイント} --quick --single-transaction --skip-triggers --set-gtid-purged=OFF ${DB名} > ${ファイル名}

これでよい。 mysql -u ${USER} -p -h ${HOST} < ダンプファイル.sql とかでスルっと戻せるようになる。

Apache 利用時に /rest/ が動作しない

ColdFusion には REST API を実装する機能が用意されているのだけれど、本番用プロファイルを選んだら動作しなかったので。

ロケ地: CentOS7 64bit

こうする

ColdFusion をデフォルトの /opt/coldfusion2016/ にインストールした場合は、 mod_jk.confJkMountFile "/opt/coldfusion2016/config/wsconfig/1/uriworkermap.properties" を追加する。

mod_jk.conf

こんな感じにし、変更後は systemctl restart httpd しておく。

# Load mod_jk module
LoadModule    jk_module  "/opt/coldfusion2016/config/wsconfig/1/mod_jk.so"
# Where to find workers.properties
JkWorkersFile "/opt/coldfusion2016/config/wsconfig/1/workers.properties"
JkMountFile "/opt/coldfusion2016/config/wsconfig/1/uriworkermap.properties"
# Where to put jk logs
JkLogFile "/opt/coldfusion2016/config/wsconfig/1/mod_jk.log"

コーディングしてる人の手元では動いていた罠

開発している人の環境は、いわゆる 開発用プロファイル で、 Apache をWebサーバにせず、 port 8500 でアプリケーションサーバとして Tomcat が起動していた。 そのため各種機能が動いていた模様。

うーん、 ColdFusion 難しない?

helpx.adobe.com