yurakawa's blog

ひびのめもだよ!

pyenv を anyenv-update でアップデートして list を更新する

pyenv(anyenvでインストール) で新しいバージョンの python がインストール対象に入っていなかった。 そのため、anyenv-update というプラグインを利用して*env環境をアップデートして、インストール可能なpython のバージョンを更新した。

  • anyenv でインストールした pyenv でインストール可能な python 3.6系のリストを確認
pyenv install --list | grep ' 3\.6'
  3.6.0b3
  3.6-dev
  • anyenv-update をインストール・実行する
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update

anyenv update
  • pyenv でインストール可能な python 3.6系のバージョンが増えていることを確認
 pyenv install --list | grep ' 3\.6'
  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.6.3
  3.6.4
  3.6.5
  3.6.6rc1

参考

github.com

GitHub のOAuth認証を使うために Client ID と Client Secret を生成する

※ 2018/06/01 実施時のもの

  1. Settings > Developer settings を開く f:id:yurakawa:20180603193709p:plain

  2. OAuth Apps の Register a new OAuth application ボタンをクリックする f:id:yurakawa:20180604000511p:plain

  3. 必要事項を入力して、Register application ボタンをクリックする f:id:yurakawa:20180604002643p:plain

  4. アプリケーション画面で Client ID と Client Secret を取得する f:id:yurakawa:20180604001437p:plain

vegetaをMac上でビルドしてlinux(amd64)上で実行する

macOS上にて

  go get github.com/tsenart/vegeta
  cd $GOPATH/src/github.com/tsenart/vegeta
  GOOS=linux GOARCH=amd64  go build -o vegeta

あとは出力されたバイナリを実行したいlinux(amd64)へ転送して実行可能であることを確認する

./vegeta

参考URL

Go のクロスコンパイル環境構築

『Goならわかるシステムプログラミング』を読んだ

最近同著者の『Real World HTTP』が楽しく読めたので『Goならわかるシステムプログラミング』も拝読した。

Goならわかるシステムプログラミング(紙書籍)www.lambdanote.com

読んだ理由

Go言語には興味があったが公式ドキュメントや文法を学ぶための本は途中で飽きてしまうため、本書のような何かしらテーマのあるものがよかった。

内容

blog.shibu.jp

こちらに記述されている通り ASCIIの連載から大きく以下が修正されている。

  • 連載の分量の関係で、同じテーマを何回かに分けていたのをまとめた
  • 並列処理の記事からチャネル関連を抜き出して、加筆を大幅に加えて独立した章に
  • タイマーやクロックについての章を追加
  • セキュリティについての章を追加
  • Go 1.9で追加されたもろもろを追加
  • 締切の一週間前に、連載で紹介したIntelliJ IDEAのCommunity版で、Goプラグインがダウンロードできなくなったというレビューの報告を受けて急遽Visual Studio Codeに差し替え
  • 高尾編集長の徹底的な修正で日本語が大幅に改善した
  • 雪だるまの絵が、妻の書いたフクロウに変わった

所感

普段はPHPを書いているため並列処理に馴染みがなかったが、並列処理のためにどういった機能が必要で、いかに実現されているか理解できた。(使いこなせるとは言っていない)

また、2~3章あたりのio.Writer, io.Reader インタフェースの解説で低レイヤーとのつなぎを意識できるようになったのも全体の理解の助けになった。 内容はGo寄りのものが多いとはいえ、他の手法の紹介もあり足がかりにもよい。システムコールを周り真面目にやるなら『詳解UNIXプログラミング』あたりも読まないとなーっと言った感じ。

あと、githubのissuesエラッタ管理するのは面白い仕組みだと感じた。 ただ、刷、版を重ねると管理するのも大変になりそうとも思った。

写経した内容は以下に残した。

github.com

内容関係ないけど、フクロウのイラスト可愛くて好き

次何しようかな

「みんなのGo言語」を読んだ後に、Kent Beckテスト駆動開発をGoで書く予定。

Goならわかるシステムプログラミング

Goならわかるシステムプログラミング

修正が多いファイルをリファクタリングの対象にする 

長期に運用されているアプリケーションでは多くの領域が全く変化しない状態になって、開発が進行しているのはごく少数の機能やその周辺のみとなることが多い。

特定のファイルが頻繁に編集されている場合、 そのファイルはリファクタリングの理想的なターゲットの一つと言える。

# 直近1年間で最も頻繁に編集された10ファイルのリストを取得する(空白行は除く)
git log --since="1 years ago" --pretty=format:""  --name-only| \
  grep "[^\+s]" | \
  sort | \
  uniq -c | \
  sort -nr | head -10

レガシーソフトウェア改善ガイド (Object Oriented Selection)

レガシーソフトウェア改善ガイド (Object Oriented Selection)

FTPでログインは成功するがコマンドがタイムアウトする

事象

EC2上にftpサーバを構築すべく、vsftpdをインストールした。 ログインは成功するが、外部のftpクライアントからコマンドを実行したらタイムアウトする

$ ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 (vsFTPd 2.2.2)
Name (192.168.1.10:ec2-user): ec2-user
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,10,235,43).
ftp: connect: Connection timed out

原因

logに出力している通り、本環境はPassive Modeで稼働している このときは制御portには21が使われていたが、データ転送はサーバに指定してあるポート(60000-65000)で接続していた。

  • /etc/vsftpd/vsftpd.conf
pasv_min_port=60000
pasv_max_port=65000

今回は21番ポートは開いていたが、60000-65000番ポートをVPCのセキュリティグループでアクセス権限していたためコマンド実行に失敗していた。 (iptablesや別ACLで制限している可能性もあった。)

おまけ: PASV レスポンスについて

60000-65000のポートで接続されていたことを確認する

227 Entering Passive Mode (192,168,1,10,235,43).

[192,168,1,10]の箇所は IPアドレスの第1-第4オクテットを10進表記したもの。 [235, 43]の箇所は ポートの第1,第2オクテットを10進表記したもの。

ポート番号を確認すると 10進数:235 -> 2進数:11101011 10進数:43 -> 2進数:00101011

結合すると 11101011 00101011 10進表記に直すと「60203」

  • ポート:60203で接続されたことがわかった

ftp動作概要 アクティブモードとパッシブモード