yurakawa's blog

ひびのめもだよ!

./aws/configの名前付きプロファイルの設定をミスった

./aws/config に複数のプロファイルを手書きする必要がある場面があって、↓のような記述ミスで --profile hogeしたときにエラーを発生させてしまった。

エラーの内容

NoRegionError: You must specify a region.

原因

./aws/config の名前付きプロファイルの設定に「profile」プレフィックスを付けるのを失念していた

  • NG
[default]
region = ap-northeast-1
output = json

[hoge]
region = ap-northeast-1
output = json
  • OK
[default]
region = ap-northeast-1
output = json

[profile hoge]
region = ap-northeast-1
output = json

参考

docs.aws.amazon.com

『Clean Code アジャイルソフトウェア達人の技』を読んだ

アスキードワンゴにより再出版された日本語訳 Clean Code を拝読した。

Clean Code アジャイルソフトウェア達人の技 (アスキードワンゴ)

Clean Code アジャイルソフトウェア達人の技 (アスキードワンゴ)

アーキテクチャの設計やドメインモデリングではなく、コードの細部についての本。

印象に残ったのは6章 オブジェクトとデータ構造#データ/オブジェクトの非対称性 の以下の文章。

手続き型(データ構造を使用するコード)は、新たな関数を既存のデータ構造に影響を与えずに追加することができます。オブジェクト指向の場合、既存の関数を変えることなく、新たな関数を追加することが可能です。

逆もまた成立します。

手続き型だと、新たなデータ構造を追加するには、既存のすべての関数を変えなければならないので、難しくなります。オブジェクト指向の場合、すべてのクラスを変えなければならないので、新たな関数を追加することは難しくなります。

複雑なシステムでは、新たな関数を追加することよりも、新たなデータ型を追加することのほうが多いでしょう。この場合には、オブジェクト指向がうまく適用するでしょう。逆にデータ型を追加するよりも、関数を追加することのほうが多い場合もあるでしょう。その場合には手続き型とデータ構造のほうがよく適合します。
熟練したプログラマなら、オブジェクト指向が常に優れているという考えが神話であることを理解しています。単純なデータ構造とそれらを操作する手続きのほうが必要とされる場合もあります。

手続き型で書いたほうが良さそうと感じるときのもやもやが言語化されて良き。

第11章 システム についてはサンプルコードが少ないせいか理解が充分でないので他書籍とかで補強しないと。

builderscon2018の以下の発表で本書で扱っていたような内容を話されていたのでタイムリー感があった。 builderscon.io

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で負荷テストを行う環境を作る

ロスコンパイルでもできるけどRleaseから取得したほうが早いね

wget https://github.com/tsenart/vegeta/releases/download/cli%2Fv12.0.0/vegeta-12.0.0-linux-amd64.tar.gz
tar xvzf vegeta-12.0.0-linux-amd64.tar.gz vegeta

# 試し打ち
echo "GET http://localhost" | ./vegeta attack -rate=10 -duration=5s | ./vegeta report

github.com

『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ならわかるシステムプログラミング