maikiichanのブログ

いろいろ

「プログラミングRust」を読んだ

1ヶ月くらい使ってずっとRustの勉強をしていて、やっとプログラミングRustを通読しました。 よく考えたらプログラミング言語についての本でここまで分厚い本を読んだのは初めてかもしれない...

この本はよくあるリファレンス的に用いる本とは違って、最初から最後まで通読して初めて価値の出てくる本のような気がします。

若干のオライリー本っぽさがありますが、厳密性とのトレードオフを考えれば現状で最高の入門書だと思います。(そもそもRustの学習曲線的に一番最初が山場だと思うので、入門書がこの分厚さになってしまうのは仕方のないこと)

Webにおける認証と認可の違い

以下完全にメモ

認証(Authentication)

主にユーザーが「何者なのか?」を確認する仕組み。ブラウザを操作している人がサービスに登録している「何者」なのかを識別する。(例: SSO, Kerbos認証, SAML, OpenID Connect, etc...)

認可(Authorization)

ユーザーが誰なのかを「認証」した上で、ユーザーに対してどこまでの権限を与えるかを決定する。(例: OAuth 2.0)

Docker環境下でのMySQLレプリケーション設定

Master/Slave構成で、Slaveコンテナ実行時に自動的にレプリケーション設定をするシェルスクリプトは以下のようになる。

#!/bin/bash -e

# (1) MasterとSlaveを環境変数で制御する
if [ ! -z "$MYSQL_MASTER" ]; then
  echo "this container is master"
  return 0
fi

echo "prepare as slave"

# (2) SlaveからMasterへの疎通確認をする
if [ -z "$MYSQL_MASTER_HOST" ]; then
  echo "mysql_master_host is not specified" 1>&2
  return 1
fi

while :
do
  if mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "quit" > /dev/null 2>&1 ; then
    echo "MySQL master is ready!"
    break
  else
    echo "MySQL master is not ready"
  fi
  sleep 3
done

# (3) Masterにレプリケーション用のユーザーと権限の作成
IP=`hostname -i`
IFS='.'
set -- $IP
SOURCE_IP="$1.$2.%.%"
mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "CREATE USER IF NOT EXISTS '$MYSQL_REPL_USER'@'$SOURCE_IP' IDENTIFIED BY '$MYSQL_REPL_PASSWORD';"
mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "GRANT REPLICATION SLAVE ON *.* TO '$MYSQL_REPL_USER'@'$SOURCE_IP';"

# (4) Masterのbinlogのポジションを取得
MASTER_STATUS_FILE=/tmp/master-status
mysql -h $MYSQL_MASTER_HOST -u root -p$MYSQL_ROOT_PASSWORD -e "SHOW MASTER STATUS\G" > $MASTER_STATUS_FILE
BINLOG_FILE=`cat $MASTER_STATUS_FILE | grep File | xargs | cut -d' ' -f2`
BINLOG_POSITION=`cat $MASTER_STATUS_FILE | grep Position | xargs | cut -d' ' -f2`
echo "BINLOG_FILE=$BINLOG_FILE"
echo "BINLOG_POSITION=$BINLOG_POSITION"

# (5) レプリケーションを開始する 
mysql -u root -p$MYSQL_ROOT_PASSWORD -e "CHANGE MASTER TO MASTER_HOST='$MYSQL_MASTER_HOST', MASTER_USER='$MYSQL_REPL_USER', MASTER_PASSWORD='$MYSQL_REPL_PASSWORD', MASTER_LOG_FILE='$BINLOG_FILE', MASTER_LOG_POS=$BINLOG_POSITION;"
mysql -u root -p$MYSQL_ROOT_PASSWORD -e "START SLAVE;"

echo "slave started"

DockerのentrykitのprehookなどでMySQLが起動する前に.shファイルを実行できるので、活用していくと色々と楽にできそう*1

「機械学習のエッセンス」を読んだ

機械学習のエッセンスを読みました。

別に仕事で機械学習をするわけじゃないんですけど、Twitterで自分が結構前からフォローしている@hamukazuさんがMLの本を書いたらしいので(会社の金で)買って、一応一通り読みました。

前提として、私自身はそれなりに数学とPythonプログラミングの知識がすでにあります。 なので、一応全体に目を通して、気合入れて読んだのは最終章である5章だけなんですけど、個人的には結城浩先生(@hyuki)の数学ガールJavaの入門書シリーズに匹敵するような読みやすさで、それだけでも結構価値があったんじゃないかなぁと思います。

主な対象者でいうと、「ある程度プログラミングはできるけど、数学はさっぱりなエンジニア」や「逆に数学はできるけど、プログラミングはあまりできない人」になるんでしょうかね。

大学初年度くらいの数学は身についていて、現役のエンジニアの人などは多分いきなり本格的なPython機械学習の本を読んでも大丈夫だと思います。

これ読んで思ったんですけどPRMLってあるじゃないですか、あれってめっちゃ要求されてる水準高いと思うんですけど、実際に最前線の機械学習エンジニアはあの程度できて当然なんですかね?それともTAOCPみたいに難しすぎて現場にはそぐわない感じの本なのでしょうか?

以上。各位がんばりましょう。