Tocyukiのブログ

ギターと柔術とプログラミングが好き!

Intellij IDEA の ideavim で h,j,k,l で連続移動できない場合の修正方法

自宅のMacでIntellij IDEAにideavimのプラグインを入れて使っているんですが、なぜか、h,j,k,lのキーバインドで移動ができず困っていたらこちらにソリューションが記載されていて、試してみたら解消できたのでメモ

t.co

実行したコマンド

defaults write -g ApplePressAndHoldEnabled -bool false

Bashの変数で大文字、小文字の変換をsedを使わないでやる方法

便利

php-fpm + apache環境での環境変数の持たせ方

php-fpm環境下でApache httpdのSetEnvで設定された環境変数は、PHPのenv()等では取得できるが、
execで実行されるコマンドには、SetEnvで設定された環境変数が反映されなかったので(php-fpmの仕様?)実施した回避策を書く!

要約

  • ApacheのSetEnvは使わず/etc/environmentに環境変数を記載して利用する

/etc/environmentの環境変数利用手順

/etc/systemd/system/httpd.serviceを作成

  • 以下内容で作成する
.include /lib/systemd/system/httpd.service

[Unit]
After=network.target remote-fs.target nss-lookup.target httpd-init.service cloud-config.service

[Service]
UMask=002
EnvironmentFile=/etc/environment

/etc/systemd/system/php-fpm.serviceを作成

  • 以下内容で作成する
.include /lib/systemd/system/php-fpm.service

[Unit]
After=syslog.target network.target cloud-config.service

[Service]
UMask=002
EnvironmentFile=/etc/environment
PrivateTmp=false

/etc/php-fpm.d/www.confに1行追加

  • 以下を追記
clear_env = no

あとは/etc/environmentに環境変数を記載していくだけ!

mysqldumpをするときによく使うオプションとリストア方法

概要

手順

事前準備

  • --default-character-setでどの文字コードで mysqldump を取得するか、対象 DB の現在の文字コードを確認する
$ mysql -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} -e 'show variables like "character_set_database";'

mysqldump取得

圧縮しない時

  • テーブル単位の取得の場合
$ mysqldump -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} --single-transaction --default-character-set=${CHARASET} --routines ${DB_NAME} ${TABLE_NAME_1} ${TABLE_NAME_2} > hogehoge_`date +%Y%m%d`.sql
  • DBスキーマ単位で取得の場合
$ mysqldump -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} --single-transaction --default-character-set=${CHARASET} --routines --add-drop-database --databases ${DB_NAME} > hogehoge_`date +%Y%m%d`.sql

圧縮する時

  • テーブル単位の取得の場合
$ mysqldump  -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} --single-transaction --default-character-set=${CHARASET} --routines ${DB_NAME} ${TABLE_NAME_1} ${TABLE_NAME_2} | gzip > hogehoge_`date +%Y%m%d`.sql.gz
  • DBスキーマ単位で取得の場合
$ mysqldump -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} --single-transaction --default-character-set=${CHARASET} --routines --add-drop-database --databases ${DB_NAME} | gzip > hogehoge_`date +%Y%m%d`.sql.gz

各オプションの内容

single-transaction

  • 対象がinnodbのときのみ有効(myIsamでは効果がない)
  • dump取得時にテーブルロックをしないため、更新時の待ちが発生しない。

default-character-set

  • dump時の文字コードを指定する。
  • 指定した文字列に変換してdumpを作成する。
  • 指定しない場合、サーバー側で指定されているデフォルト文字コードが自動指定されるため、取得側とリストア側で文字コードのデフォルトが違う場合には、文字化けが起きる可能性が高まる。

routines

  • ストアドルーチン (プロシージャーおよび関数) も一緒にdumpに含める。

add-drop-database

  • 指定したDBスキーマをdrop database(削除)するクエリをdumpに含める。

リストア方法

TABLEのリストア

$ mysql -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST}  -D ${DB_NAME} < hogehoge_`date +%Y%m%d`.sql

DBのリストア

$ mysql -u${DB_USERNAME} -p${DB_PASSWORD} -h${DB_HOST} < hogehoge_`date +%Y%m%d`.sql

SQLを勉強したい時に活用できる無料サイト

基本的なSQLを学びたい場合、以下の2つのサイトで事足りるなと思ったのでメモ

SQL bolt

sqlbolt.com

英語だけど問題もシンプルなのでそんなに理解に苦しむことなく、サクサクと進めることができ、一通りのSQL構文を身につけることができるので、オススメです

ただし、なぜかChromeでは文字入力がずれてしまっているのでサファリ等他のブラウザでの実行をオススメします!

HackerRank

www.hackerrank.com

SQL boltで基本的なSQLを学習したらあとはHackerRankでSQLの問題を解きまくればOK!

こちらも英語だけど、Google翻訳プラグインを使えば特に問題ないかと思います!

そんな感じでSQL初心者の方は是非チャレンジしてみてください〜\(^o^)/

Pythonでインストールされているはずのpipモジュールが読み込みできない場合の対処

boto3を使ってデプロイスクリプトを作成していたら、インストールされているはずのboto3が読み込みできないというエラーが発生

$ python3 test.py
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import boto3
ModuleNotFoundError: No module named 'boto3'

確認してみると、やはりしっかりとインストールされている

$ pip3 show boto3
Name: boto3
Version: 1.14.34
Summary: The AWS SDK for Python
Home-page: https://github.com/boto/boto3
Author: Amazon Web Services
Author-email: UNKNOWN
License: Apache License 2.0
Location: /usr/local/lib/python3.7/site-packages
Requires: botocore, jmespath, s3transfer
Required-by: 

モジュール読み込みパスが足りていないじゃないのかと疑い、以下のスクリプトを作成し確認

import sys
import pprint
pprint.pprint(sys.path)

やはりLocation: /usr/local/lib/python3.7/site-packagesがないことが判明

['/Users/{USERNAME}/.ghq/repository_path',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python37.zip',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/lib-dynload',
 '/Users/{USERNAME}/Library/Python/3.7/lib/python/site-packages',
 '/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/site-packages']

なんでこんなことが起こるのかまでは調べられてないけど、とりあえず、環境変数PYTHONPATHにLocationで表示されたパスを追加したらエラーは出なくなったのでよしとしようw

export PYTHONPATH='/usr/local/lib/python3.7/site-packages:$PYTHONPATH'  

後日談

python2系を動かすとエラーとなってしまったので、やはり根本解決にはなっていない模様

Your PYTHONPATH points to a site-packages dir for Python 3.x but you are running Python 2.x!
     PYTHONPATH is currently: "/usr/local/lib/python3.7/site-packages:$PYTHONPATH"
     You should `unset PYTHONPATH` to fix this.

GitでAuthorを間違えてしまった場合の対応方法

何度もプライベートのリポジトリに会社のAuthor情報でCommit&Pushしてしまいその度にAuthor情報を修正する日々を過ごしているのでメモとして残しておきます。

前提

  • git config --globalで会社のAuthor情報を登録している
  • プライベートで利用しているリポジトリに会社のAuthor情報でCommit&Pushしてしまった

対応手順

対象リポジトリのAuthor情報を正しいものに修正

git config --local user.email "プライベート用のアドレス"
git config --local user.name "プライベート用のアカウント名"

修正対象のコミットへrebaseする

git rebase -i HEAD^

以下の要領でAuthor情報の修正を実施する

git commit --amend --reset-author 
git rebase --continue
git push -f 

rebase後に修正を破棄したくなった場合、は以下のコマンドを実施する

git rebase --abort

SSHの秘密鍵をAWS Secret Managerで管理する

要点

  • 秘密鍵をバイナリ形式でSecretManagerに登録
  • バイナリ形式でSecretManagerへ登録するにはCLIで実行する必要がある
  • AWS CLIで呼び出してBase64でデコードして使う

AWS CLIによるSecretManagerへ秘密鍵をバイナリ形式で登録する

$ aws secretsmanager create-secret \
   --name ${KEYPAIR_NAME} \
   --secret-binary file://~/.ssh/${KEYPAIR_NAME}.pem

AWS CLIで呼び出してBase64でデコード

$ aws secretsmanager get-secret-value \
    --secret-id ${KEYPAIR_NAME} \
    --query 'SecretBinary' \
    --output text \
    | base64 -d > ${KEYPAIR_NAME}.pem

参考

dev.classmethod.jp

PHP7.3環境でmecabを使えるようにする

とある業務でPHP5.5からPHP7.3へバージョンアップする必要が発生しまして、その環境ではphp-mecabをつかっているんですが、どうもPHP7系だとパッケージマネージャーでインストールできないっぽいので、ソースからコンパイルしてインストールする必要がありそうだ、ということで手順をメモとして残しておこうという次第でございま。

目次

環境情報

項目 詳細
OS Amazon Linux 2
PHPバージョン 7.3

mecabのインストール

以下からmecabのソースファイルとなるmecab-0.996.tar.gzをダウンロード

taku910.github.io

以下の手順でコンパイルおよびインストールを実施

tar -xvf mecab-0.996.tar.gz
cd mecab-0.996
./configure --enable-utf8-only
make
make install

mecab-ipadicのインストール

以下からmecab-ipadicのソースファイルとなるmecab-ipadic-2.7.0-20070801.tar.gzをダウンロード

taku910.github.io

以下の手順でコンパイルおよびインストールを実施

tar -xvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-mecab-config=/usr/local/bin/mecab-config --with-charset=utf8
make
make install

php-mecabのインストール

以下のリポジトリからソースをクローンする

github.com

以下の手順でコンパイルおよびインストールを実施

cd php-mecab/mecab
phpize
./configure --with-mecab=/usr/local/bin/mecab-config
make
make install

動作確認

動作確認用PHPプログラム

<?php
$str = "すもももももももものうち";
$mecab = new \MeCab\Tagger(array('-O' => 'chasen'));
echo $mecab->parse($str) . PHP_EOL;

実行結果

$ php test.php 
すもも  スモモ  すもも  名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
の      ノ      の      助詞-連体化
うち    ウチ    うち    名詞-非自立-副詞可能
EOS

DBの概要を勉強するのに良い無料動画

せお丸さんのYoutubeチャンネルのデータベース入門講座が良かったのでメモ

【2020年版】データベース+SQL入門|MySQL/PostgreSQL/Oracleなどデータベースの使い方や役割・SQLについて👉初心者向けに6分で解説✅

www.youtube.com

データベース設計入門#1 リレーションとER図【11分でマスター!DB設計】

youtu.be

データベース設計入門#2 正規化|無駄のないテーブル設計とは?【日本一わかりやすくDB正規化を解説します】

youtu.be

データベース設計入門#3 テーブル設計の手順【実戦形式で解説】

youtu.be

トランザクションとは?【13分でわかるDBトランザクション処理】データベース入門講座#4

youtu.be

データベースのロック(排他制御)とは?ロックの種類や仕組みを解説

youtu.be

デッドロックとは?データベースのデッドロックの意味や仕組み・原因・回避方法を解説!

youtu.be

tmuxでコピーモードを使う

めちゃ便利なのでみんな使ったほうがいいやつだけど、ちょっと使わないとすぐ忘れてしまうやつですはい。

コピーモード開始

Prefix + [

選択範囲指定

Vimと同様にShift + vで線形選択するか、Spaceキーでコピー範囲を指定する

コピー完了

Enterキーを押す

貼り付け

Prefix + ]

【Rails】MinitestでのテストをGuardで自動化して表示結果に色をつける

テストに関するGemを以下のようにGemfileへ記述する

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest',                 '5.10.3'
  gem 'minitest-reporters',       '1.1.14'
  gem 'guard',                    '2.13.0'
  gem 'guard-minitest',           '2.4.4'
end

bundle install実行後、bundle exec guard initを実行する

テスト結果に色付けするのはtest/test_helper.rbを以下のように編集するだけ

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
+ require "minitest/reporters"
+ Minitest::Reporters.use!

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

【Linux】リソース状況を確認するときによく使うコマンドたち

以下のリソース状況を確認するときによく使うコマンドたち。

CPU

システム全体のCPU使用率

  • top (htop)
  • vmstat
  • iostat
  • mpstat
  • sar -u|-P
  • dstat

プロセス毎のCPU使用率

  • top (htop)
  • ps u[ax]

LoadAverage(負荷平均)

  • top (htop)
  • uptime
  • w
  • dstat

メモリ

システム全体のメモリ使用量

  • top (htop)
  • vmstat
  • sar -r
  • dstat

プロセス毎のメモリ使用量

  • top (htop)
  • ps u[ax]

スワップ

スワップ領域の使用状況

  • top (htop)
  • free
  • vmstat
  • sar -S
  • swapon -s
  • dstat

スワップイン・スワップアウトの状況

  • vmstat
  • dstat

ディスク I/O

  • iostat
  • iotop
  • vmstat
  • sar -b
  • dstat

ネットワーク I/O

  • iptraf
  • netstat -i | -s
  • sar -n DEV | EDEV
  • ss
  • dstat

dstat最強!!!

Go言語の勉強方法

最近ISUCONの利用言語でもほとんどGo言語になっていて、CLIツールやインフラ周りでかなりの存在感を出してきているGo言語。

直近のISUCONでは最も利用されている言語のようですね〜。
これはインフラエンジニアとしてGo言語知らんとは言えない状況です。

直近のISUCONでのGo言語利用率

大会名 Go言語利用率(全体) Go言語利用率(本戦出場組)
ISUCON9 49.4% 73.3%
ISUCON8 40.0% 63.3%
ISUCON7 28.4% 53.3%
ISUCON6 19.2% 42.3%
ISUCON5 14.2% 22.2%
ISUCON4 16.1% -
ISUCON3 4.23% 8.00%

というわけで、mattn_jpさんの教えに従いGoに入りてはGoに従ってみましょう!

目次

1. Go Tour をやる (1日)

go-tour-jp.appspot.com

2. Effective Go を読む (1~2日)

go.shibu.jp

3. GitHub から興味のあるソースを読む

github.com

4. 標準ライブラリを読む

golang.org

golang.org

golang.org

golang.org

golang.org

golang.org

golang.org

番外編

Gopher道場 自習室なるものがあってこれに参加するのもかなり良さそう!

課題が用意されていて、Slackで質問や課題のレビュー(ベストエフォートですが)をしてもらえるようなので気になる方はぜひ!

gopherdojo.org

参考

future-architect.github.io

speakerdeck.com