プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

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レベルまでは要らなかったのでメモ。

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で表示される差分は色分けされてないことに加えて、変更されていない箇所も含めて表示されるので一生懸命読まないと差分が理解できないという面倒くささがあります。

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

RWO 2nd editionの9章を雑に学習した

最近OCamlの学習も止まっていたので、ゴールデンウィーク最終日に少しでもいいから手をつけてみようと学習再開してみた。

Real World OCaml

9章はFunctorを学ぶ章。最後の項目の"Extending Modules"はまだ手をつけられていないが、それ以外はutopを使い実際のコードを打ち込んでみて手を動かしてみた。

何となくしか理解ができていないので自分で活用するところまではいかなそうだと思ったので、時間を空けて復習したい。

OCaml力無い人間なりにSATySFiをいじってみてどういう構造をしているか調べてみた (1)

ゴールデンウィークに突入したので、以前から興味のあったSATySFiの使い方を少し踏み込んで調べてみて、それの個人的備忘録としてまとめ。

個人的備忘録なので網羅性とか正確性を一切考慮しないつもり。SATySFiが何かも説明しない。

github.com

この記事を書いている時点のcommit(66fdd27)を基準にして記事を書いている。タイトルは (1) としているが (2) 以降を書くかどうかは不明。やる気と時間次第。(特にやる気)

筆者のOCaml力

今調べてる範囲だとOCaml力ほとんど要求されてないはずなんですが、表題にOCamlと入れてしまったので一応箇条書きにでも記載。

要するに非常に簡単なコードなら読めるし書けるけど、ちょっとでも複雑になると読めなくなる程度のレベルです。辛い。

予め見ておくといいドキュメント

  • 作者のgfngfn氏が発表した資料をまず最初にザッと読んでおけば、SATySFiの全体的なアーキテクチャや何を目的としているのかについては押さえられるので読んだ方がよい
    • ML Day #1で使用された発表資料を読むのがいいかと。
    • 未踏の成果発表の動画もニコ生であったんですが、今からだと見ることができなそう。

SATySFiを導入・使用する際に割と遭遇するつまづきポイント

主に「インストール時」と「使用時」でつまづくポイントが分かれると思っている。

インストール時

linuxやmacOSの場合ならSATySFi特有のつまづきは現時点だと特にないと思います。つまづくならOCaml自体の環境構築、特にopamの環境構築で詰まることがあるかもしれません。詰まった場合はググって色々自力で解決!*1

Windowsの場合は直でOCaml環境を構築するのは苦行らしいのでVMやWSLを使ってやるのが良いと聞いています。或いは有志が作ったSATySFi for Windowsを使うなどするとか。

使用時

SATySFi使用時で一番つまづくポイントは「フォント(設定)が足りなくてビルド出来なくなる」ということだと思っている。特に導入し始めの場合。

なんでフォント周りでつまづくかというと、用意されているドキュメントにそもそも様々なフォントを要求するようになっていることが多いため。或いは標準ライブラリ(というのだろうか?)内で使用されるフォントの種類が変わることがあるため。例えばこのcommit以降のバージョンを使う際は、stdjaをrequireしているドキュメントは Junicode.ttfJunicode-it.ttf~/.satysfi/dist/fonts 以下に置く必要が出てきて、一回ハマってしまった。

ライブラリルートに関する構造や使い方に関して日本語で書かれたメモが書かれたファイルがリポジトリ内にあるので、それを見るとよい。

あとよくあるつまづきとしては、必要な素材がなくてビルド出来ずにエラーになるもの。 satysfi-logo.jpg がなくてビルド出来ないとかある。

PRは面倒でしてなかったりする。

他、調べたこと

割と色々調べたけど、文章に上手くまとめられないので、やる気があったら(2)と称して続きを書く。内容として考えているのは以下の通り。

  • コマンドはどのようにして定義されているのか
  • コマンドを自作したくなったときにどのあたりに手をつければいいのか

というか、最初の方に紹介したスライドとSATySFiのソースコードをつきあわせればだいたい分かる話なので、書いてもなあという気もしている。

*1:こういう記事でそこまでサポートすると疲れるので。

『Goならわかるシステムプログラミング』を勉強し始めました

表題の通りです。

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

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

以前から多少golangは触っていたのでほんの少しは分かるけど、インターフェースの扱いを含めて本格的な使用に耐えるほどの知識と運用能力は無かったことに加え、私自身がOSなど低レイヤーの知識が仕事上必要なのに不足していたのでどこかで勉強しなくてはいけないと感じていたことが重なったので、時間を見つけて少しずつ写経したり問題を解いたりしています。

今のところ大半が写経なのですが、どうせやるならgithub上にコードを残していつでも参照できるようにしたかったので、練習用リポジトリを作って学習の成果を残すようにしました。

github.com

まだ第3章の最後にある問題も解いていないという状況ですが、これまでと同じく時間を見つけながらボチボチ勉強していきたいと思います。

ただ、前回の記事で触れた「SQLの知識不足」の方がクリティカルなので、そちらを基本的に優先していくつもりです。

takuan-osho.hatenablog.com

まあ、何とかやっていきます。

2018年の抱負

去年も抱負を書いたのと、はてなブログの今週のお題だそうなので、今年2018年の抱負も書こうと思います。

takuan-osho.hatenablog.com

去年の抱負と同じく、以下の制約を課して考えました。

  • 1年間で達成しようという目標は多くても「3つ」に絞る

2018年の抱負

IT系技能関連の目標

[UI|UX|Web]デザインを勉強して、自分でプロトタイプを作れるようにする

実はもう既に始めているのですが、自分でWebアプリを作ろうと思って最近作業をしていて、その一環で、まず自分だけでまともなプロトタイプやワイヤーフレームを作れるようになった方がいいと思い、最近UIデザイン、UXデザインやWebデザインを勉強しています。

今までAdobe Creative Cloudに加入していたのに全く活用してなかったので、無駄金を払うくらいならそういうことに使おうと思ったのも大きいです。

取りかかりとして、今はAdobe XDを使って以下のUdemyの講座を受講して勉強しています。

https://www.udemy.com/adobe_xd/

計測可能な目標としては以下のようなことを考えていて、どれか一つでも年内にできれば達成と見なしていいかなと思ってます。

  • 参考となるWebサイトを選び、そのWebデザインをAdobe XDなどで模写する
  • 自作のアプリのプロトタイプをAdobe XDなどで作成する
  • カスタマージャーニーマップなど、UXデザインをする際に行う一連の流れを自分で一通り体験する
  • 自分自身のポートフォリオサイトを立ち上げる*1

ITはあまり関係ない目標

1年で12冊は本を読み、感想ブログを書く

ここ最近感じるようになったのですが、「技術書以外の本を読まない」という状態が続いていて、学生時代の頃と比べるとつまらない人間になりつつあるなーと思ってきているので、それを修正する目標です。

読みっぱなしにして身につかないということを最低限防ぐため、感想をブログ記事にしてアウトプットするということにしました。

1年で12冊というのは要するに1ヶ月1冊なら何とか可能だろうという目算ではじき出しました。ただ、1ヶ月1冊だと達成できなくなる可能性があるので1年単位にしています。

今月は早速以下の記事で達成できました。

takuan-osho.hatenablog.com

出来る限り技術書以外(小説やビジネス書など)でやろうと思っていますが、できなさそうなら今まで読んできた技術書の中でブログにしていないものを扱ってもいいという風にしてやります。

(骨盤が後傾せずに)開脚ができるくらいの柔軟性を得る

昨年の目標の「(180度の)開脚をできるくらいの柔軟性を得る」の延長戦の扱いの目標です。

2017年の振り返りでも書いたように、昨年は180度開脚を目指して柔軟していたら左脚内部の筋を痛めてしまったので、そういうことにならないように目標をほどほどにしておきました。

正直な話、1年以内に達成できるか微妙な目標ですが、最近柔軟もサボり気味になっているので、ここら辺でてこ入れしようかと思い、入れています。

まとめ

最初のデザインの目標はいい塩梅にハードルが高めなので頑張ります。

*1:これは労力かかって無理かなとは思いますが。

2017年の振り返り

はじめに

昨年も年末に振り返りをしたので、今年もします。

takuan-osho.hatenablog.com

調べてみたら結構前から振り返りしてるんだなと思いました。

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

takuan-osho.hatenablog.com

2013年からしてるとは思いませんでしたね。アニメのことだけの振り返りですが。

振り返りといっても年全体の振り返りをするといくら時間が合っても足りないのと、そもそもそんなに記録を残してなくて無理なので、今年頭に立てた目標がどれくらい達成できたかを見て振り返りにしたいと思います。

成果確認

takuan-osho.hatenablog.com

上記記事によると、今年頭に立てた目標は以下の通り。

  • オペレーションをこなせるようにする
  • 機械学習の最初の一歩を踏み出す
  • (180度の)開脚をできるくらいの柔軟性を得る

それぞれ振り返ります。

オペレーションをこなせるようにする

仕事でサーバーの運用業務をするようになったのですが、issueとして登録されている問題の特定・解決するのに必要なオペレーションを思ったようにできていないなと痛感しているので、Linuxの基礎知識*1を含めて、オペレーションの能力を強化していくのを1つめの抱負にしました。

こちらに関しては完璧ではないにしろ、当初立てていた目標に近いところまで出来たと思うので、〇ということにしたいです。

勿論、まだまだ不完全なので、仕事をしつつ、足りない知識を『詳解システムパフォーマンス』を読むなどして埋めながら過ごしてはいたのですが、途中で『詳解システムパフォーマンス』を読むのも止まっているので、年が明けたら再開し、よりまともなオペレーションが出来るように頑張りたいですね。

仕事でよく使うようになったlinuxのコマンドをメモして残しておきます。

  • du
    • だいたいディスク残量が問題なることが多いので必然的に使うように。
  • ps
    • プロセスの状態を見るので。オプションをもっと把握しておいた方がいいかも。
  • top
    • 正直メモリとCPUの値しかまだちゃんと見られないので、他の値を意味を理解してちゃんと見られるようになりたいところ。
  • lsof
    • lsof -i:<port> の使い方しか使いこなせないけどそれでも有用。他のオプションも理解してもっと使いこなせるようにしたい。
  • last
    • last | head とかよくやっている。
  • w

機械学習の第一歩を踏み出す

既存のアルゴリズムを自分で実装できるくらいに理解できれば理想ですが、そこまで行かなかったとしても、素材を自動で分類したくなったときに各種ライブラリを活用してソリューションをでっちあげるということができるようになるといいなあと思ってます。

これに関しては△ですね。

一応最初の方はやる気を出して、Andrew Ng先生のあの有名なCourseのMachine learning講座を途中まではやったのと、『ゼロから作るディープラーニング』を全部読んだので、ある一定程度の成果は得られたのですが、自分でソリューションをでっち上げることができるレベルにまでは到達していないからです。

www.coursera.org

今確認したら、Courseraの方はWeek 6まではやり終えていて、Week 7のSupport Vector Machinesで詰まって死んでいるという状態のようですね。

こちらの書籍は全部読んで、コードも半分以上は写経したのですが、ブログ記事にする余力がなくてできていないのが残念。

立てた目標のレベルには届かなかったけれど、本当に基礎的な部分の知識は得た影響で、今まで機械学習の記事を読んでも宇宙語を話されているような気分になっていたのが、一応分からない部分を調べることができるところにまで行けたのは大きな成果だと思っています。

(180度の)開脚をできるくらいの柔軟性を得る

これは仕事とは全く関係ない目標で、自分の身体の柔軟性を挙げたいというものです。

一応数値目標を出しておいた方が計測できるので180度開脚としたいのですが、多分これ難しいのでなるべくそれに近づけるという意味合いをこめてカッコをつけてます。

今続けている空手のパフォーマンスにも関わってくる話なのでそれなりに真面目に取り組みたい抱負です。

これは残念ながら成果としては×をつけるしかないという結果です。

途中までは少しずつ開脚できる度合いも高まっていたのですが、9月かその辺りで左脚内部の筋を開脚中に痛めてしまって、そこから成果は進展するどころか交代してしまって180度開脚を達成するところではなかったという悲しい結果に。

今も左脚内部の筋は痛い状態が続いていて、整形外科に行ってMRIを使った診察もやったのですが、判明したのは致命的な怪我ではないということだけで、今もどうやって治したらいいのか分からなくて困ってますね。

まあ、ぼちぼちやっていきます。

まとめ

一年を通してみると、ダレてしまった時期が結構ありましたが、それまでの年の過ごし方に比べれば圧倒的に年初に立てた目標を達成する方向に進められたので、新年を迎えてもこの調子は変えずに、目標達成をできるような過ごし方をしていきたいと思います。