Pythonのdatetimeオブジェクトのtips

最近ちょっとPythonのdatetimeを使って迷ったことがあったのでメモ。

Pythonで現在時刻を取るとき datetime.now() でdatetimeオブジェクトを取りますが、この時microsecondまで取ってしまって、それを取り除きたいときにどうしたらいいのか分からなくて公式ドキュメントを調べたところ、 datetime.replace メソッドなるものがあることを知りました。

8.1. datetime — 基本的な日付型および時間型 — Python 3.6.5 ドキュメント

こんな感じで使えます。

>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 10, 15, 22, 32, 24, 80236)
>>> now.replace(microsecond=0)
datetime.datetime(2018, 10, 15, 22, 32, 24)
>>> now.replace(microsecond=0).isoformat()
'2018-10-15T22:32:24'

ISO 8601 形式の文字列をサクッと取りたいとき、microsecondレベルまでは要らなかったのでメモ。

WIP: builderscon tokyo 2018 に参加してきました

builderscon tokyo 2018に参加してきたので、聞いてきた発表の感想などを軽くまとめておきます。

builderscon.io

前夜祭は参加しなかったので本編1日目から。

※ 本当は感想割とあるのでたくさん書きたいのですが、そうしているといつまでも更新しないので、「まだ書きたいことあるけど書ききれてない」という箇所には"WIP"と書いておいて、後で書くことにします*1

1日目

Envoy internals deep dive

今回buildersconに参加して一番得るものがあった発表でした。

WIP

Caching at Netflix: The Evolution of EVCache

Netflixのcache戦略がどんなものなのかを知りたくて聞いてきました。

WIP

カクヨムでの縦組み表示の実装と、縦書きWebの将来に向けて

以前Sphinxにepub3のビルダーを入れた身としては縦書きWebの話は興味をそそられるものがあったので聞きに行くことに。

予想通りCSS Writing modeを使って実装したとのことですが、各ブラウザ毎の挙動の違いがここまで多いものだとは思わなくて、改善をしていった人たちの作業は大変だっただろうなと思いました。

WIP

airflowを用いて、複雑大規模なジョブフロー管理に立ち向かう

Apache airflowについては簡単にしか知らなかったので聞きに行きました。

安全なランダムネスの理論と実践

WIP

lld − 開発ツールの主要コンポーネントの1つをスクラッチから作成した話

WIP

懇親会 & アフターパーティ

WIP

2日目

次世代通信プロトコルにおけるセキュリティ・プライバシー保護・パフォーマンス (Security, privacy, performance of the upcoming transport protocols)

正直自分にとっては難しすぎたのと前日から継続していた寝不足がたたって途中眠ってしまってほぼ理解できず。反省。

後で復習して理解したいですね。

Jepsen 10

これは「知らなかったを知る」に個人的に一番マッチした話でした。

WIP

ブログサービスのHTTPS化を支えたAWSで作るピタゴラスイッチ

いやピタゴラスイッチすごいな、という感想がまず最初に来ました

WIP

Webアプリケーションエンジニアが知るべきDNSの基本

参考書を買って読んでもDNS全く分からなかった勢なので参加しました。

WIP

参加した結果、今まで曖昧に理解していたところが理解できたのと、route53と絡めて説明してくれたおかげで実務で今後route53を触るときに復習できそうなので為になりました。

1日約70万ビルド: DockerとNomadが支えるCI/CDプラットフォーム

個人的に今回のbuildersconで一番聞きたかった発表でした。

というのも、私が勤めている会社ではNomadをプロダクションに使っていて、Nomadを実運用して知見を公開している例が他のHashiCorp製ツールやk8sに比べると少ない*2と感じていて、恐らくHashiCorp以外で世界で一番Nomadをガチで使っているCircle CIさんの知見が聞きたかったからです。

WIP

この発表は実務に活かせる部分がありそうという意味では、"Envoy internals deep dive"以上に為になった発表でした。

後でもいいからこのNomadの発表に関しては色々書きたいですね。

総評

WIP

*1:ただし実行されるかは分からない!

*2:個人的印象

AWSで特定のroleからmanaged policyをawscliで外す方法

awscliの以下の公式ドキュメントを見れば済む話なんですが、今日調べて使ってみたので覚え書きとして残しておくための記事です。

detach-role-policy — AWS CLI 1.15.77 Command Reference

あるEC2に付いているroleにmanaged policyがattachされていて、それを一時的に外したいという状況が出てきたので使ってみました。

各種値は変えていますが、こんな感じで使いました。

aws --profile dev iam detach-role-policy --role-name dev-frontend --policy-arn arn:aws:iam::<num>:policy/frontend

普段仕事ではterraformでAWSのリソースを管理しているのですが、今回扱おうと思ったリソースの実際の値とterraform.tfstateで管理している値にズレがあるのか、terraform planで差分を確認すると結構差分が出てきてしまい、どちらが正しいのかすぐに判断できなかったのと、managed policyを外して確認したいことがあったので、一時的な処置として aws detach-role-policy を使用することにしたというのがいきさつです。

正直IAM roleとかpolicyのことをしっかり理解できてはいないので、おっかなびっくりやっています。というか運用のことを考えるとAWS IAMってすごく難しくないですかね?と思う毎日です。

ansibleコマンドを使って各ホストにコマンドを流すやり方

ちょっとしたTipsでしかないけれど、ansibleのinventory fileに登録されているホストにコマンド流したいときが割とあり、多用しているのでメモとして残しておく。

ansible -m shell -a "<command>" -i <inventory file> <host-pattern> [options]

より具体的にすると、たとえばこんな感じになる。(ファイル名などは変更している)

ansible -m shell -a "ls -l /etc/td-agent/conf.d/" -i development.ini api* -u taku -b -v

これは、td-agentの設定ファイルが各ホストで違う場合、何が違うのか知りたくなったりしたときに使った。

inventory file内で適切にグループやホストが書かれてさえすれば、host-patternの箇所を変更すれば自分の望みのホストの状況調査ができるし、commandの箇所を変更すれば知りたい情報を望みの形で出せるようになる。

シェル芸みたいなことを駆使できる人なら -a “<command>” のcommandの箇所をいじくり回して自由自在に活用できるのではないだろうかと思ったりしている。

だいたい Ctl + R をしてシェルの履歴から引っ張ってくるのだが、たまに ansible -m fetch などして中々履歴が出なかったりすることがあり、コマンドの詳細を忘れがちだったので一旦ここにメモしておきたくて書いた。

terraform initしようとしたらInvalidClientTokenIdというエラーが出たけど理由が下らなかった話

仕事ではガッツリterraformを使っていて、今やっている作業でちょっとしたエラーに引っかかったので、記録を残しておく意味でブログ執筆。

terraformのバージョンはv0.11.7(のはず)。

$ terraform --version
Terraform v0.11.7

タイトルに書いたとおり下らない話なのですが、terraform initしようとしたらInvalidClientTokenIdとエラーが出ました。こんな感じです。

$ terraform init
...
...

Initializing the backend...

Error configuring the backend "s3": InvalidClientTokenId: The security token included in the request is invalid.
    status code: 403, request id: <masked>

Please update the configuration in your Terraform files to fix this error
then run this command again.

で、ここで少し迷路にはまってしまったのですが、業務でterraformなりawscliなどを扱っている時はIAM roleやassume role, switch roleが*1駆使された設定を使用するようになっているので、自分に与えられた権限だといじれないのかなと思ってしまい、自分の設定を調べ直して時間を少し浪費してしまいました。

根本的な原因はs3 backendのコード内のprofileが間違った値になっていたため、正常に読み出せなかったということが分かりました。

terraform {
  backend "s3" {
    profile = "old" # 本当はnewというprofileにしないといけない
    region = "ap-northeast-1"
    bucket = "terraform-tfstate-bucket"
    key    = "test.tfstate"
  }
}

www.terraform.io

自分の設定を最初に疑って時間を使ってしまいましたが、エラーログにも Please update the configuration in your Terraform files to fix this error と出ていたのだから、まずterraformのコードを確認しておけばよかったですね。

だいたいの答えは(エラー)ログに出ている、そんなことを再度確認したというお話でした。

*1:正直assume roleとかswitch roleとか理解してない

『Webデザイン良質見本帳』を読んでWebデザインの基本的なスタイルを学んでいる

「ペース的に間に合わないのではないか?」と思いつつ、2018年の抱負の一つに「[UI|UX|Web]デザインを勉強して、自分でプロトタイプを作れるようにする」というものがあるので、思い出しては少しずつWebデザイン関係のことを調べたり、Adobe XDなどツールの使い方を勉強しています。

ただ、Webデザインやデザイン一般のことを勉強していると、「(どの場合でも大切だけど)『じゃあ具体的にこういうサイトを作りたいときはどうすればいいの?』と思ってしまうくらいに抽象度が高い事柄」か「『これってデザインの勉強というよりか、デザインツールの使い方を覚えてるだけでは?』と思うくらいにツールの使い方に寄りすぎている事柄」がよく目について、Webサイトを構築する際に情報設計を含めて抽象的過ぎず、かといって細々とした実装寄り過ぎないやり方や実例を提示してくれる所がほぼ見つからなくて難儀しています。

プログラミングでたとえると「各デザインパターンとそれを適用している具体的で短めな実装例」が欲しいのですが、書籍やサイトを色々探していても自分にぴったり合うものがないという状態です。

そんな中見つけた本が(100%ではないにしろ)割と自分の要望にあっていたので紹介します。

Webデザイン良質見本帳 目的別に探せて、すぐに使えるアイデア集

Webデザイン良質見本帳 目的別に探せて、すぐに使えるアイデア集

この本はタイトルの通り、良質なWebデザインのサイトをカタログ化した本です。

私がこの本を読んでいてためになったのは、「配色から考えるデザイン」「業種・ジャンル別から考えるデザイン」など、ある一定の切り口から考えたデザインの実例を提示してくれているところと、提示されている多くの実例で 配色の種類をRGB値を含めて提示してくれているところです。

たとえば医療・病院サイトの場合とアートフェスなどのイベントサイトの場合ではサイトの作り方の違いが出てくると思いますが、この本はそういった違いを一覧化してそれぞれのサイトの場合の特色をわかりやすく提示してくれてるところが私にとってはって有用なポイントでした。

加えて、提示されている各実例に使われている色の種類がRGB値で提示されているので、配色のベースカラー、メインカラー、アクセントカラーの組み合わせ方の参考にもなるところが嬉しいポイントでした。

配色の理論的なこともおさえつつ(Web)デザインのことを学んでいくのは素人には結構骨が折れる作業だと思いながらやっていますが、少しずつ進めていくよう、やっていきたいと思います。

Terraformを適用するときの差分を事前確認するときに楽できるライブラリを使ってみた

仕事でterraformを使っているのですが、いつもterraform plan時に差分が分かりづらくて難儀していたところ、職場のslackでこんなソフトウェアが紹介されて使ってみたら便利だったのでブログに書いてみます。

github.com

正直READMEを見てみれば一目瞭然なんですが、terraform plan時に何が変更・追加されるのか色分けされるようになり分かりやすくできるというソフトウェアです。

Ruby製のソフトウェアなので、gemでinstallしたあとは、こんな感じで私用するとterraform planの差分が分かりやすく表示されます。

terraform plan -target=aws_security_group.test | landscape

terraformをある程度以上本格的に使ったことがある人なら同意してくれると思いますが、terraform planで表示される差分は色分けされてないことに加えて、変更されていない箇所も含めて表示されるので一生懸命読まないと差分が理解できないという面倒くささがあります。

この面倒くささをかなり軽減してくれそうなので、しばらく使ってみることにします。