凄腕の先輩エンジニアと隣にいる僕

2人の日常をさらさらと

どうやってログとるの?

メディア事業部のシステムは全部 Rails で組んである。 どれくらいユーザーが記事読んだとかとかの行動ログ取ってるんだけど、Railsが吐き出してる production.log を解析してるから、余計な情報があまりにも多い。 なので、nginxから取得できる access_log を取るように変更したいっていうタスクが降ってきた。

とりあえず、「nginx ログ分ける」 とか検索するけど、めぼしいものはでてこない。その後も調べを続けて、locationで区切ればいいというところまではわかったけど、正規表現の目印的なものがない。

最終的には頼みの綱の先輩に聞くと、gif とかの画像仕込んでるから、それ取れば、もし仕込んでなかったら仕込めばいい。

はい、一瞬で解決。

rmagik の montage で 困った話

動画を配信するサービスをやっているので、動画の転送量が馬鹿にならない。 さぁどうするかね。

やりたかったこと

動画から生成した画像を montage する。その時、画像の容量が大きくなるため、できるだけ削減したい。

やったこと

まずは画像の容量下げる方法考える。

CLIでやりたかったから、JPEGminiなどのGUIツールは却下。

とりあえずGoogle先生に聞いて見ると、こんな答えが返ってくる。

https://developers.google.com/speed/docs/insights/OptimizeImages?hl=ja

jpegoptim jpegtran 使えと、ほうほう。

Linux上で使うことも考えて、さくっとできそうなjpegoptimを使ってみる。

手順

ffmpeg -i original.mp4 -f image2 -vf fps=fps=12 -crf 20 images/img%d.jpg
jpegoptim --strip-all -m80 *.jpg

EXIF情報などのメタデータを削除して、質を80% に変更

jpegoptim なし jpegoptim あり
584K 544K

まぁ画像の総量を比較すると、少し減ってるのがわかる。 大きい動画の場合、もっと減る。

画像を結合する

montage *.jpg -tile 5x6 -background none animations/%d.jpg
jpegoptim なし jpegoptim あり
564K 564K

……変化なし。

他のツールも使って見たけど、結果は同じ。

原因としては、montage 使うと、質の部分は元に戻るようだ。非可逆ではないjpegでどうやって認識してるのか分からないけど。 仕方ないので、montage のオプションで使えるのがないかを探すと、-quality でいけるみたい。 案外あっさりと見つかる。

montage *.jpg -tile 5x6 -background none -quality 80 animations/%d.jpg
quality 指定なし quality 80
564K 296K

下がったね。だいぶ

ちなみに今回作った画像の一部がこんな感じ

f:id:ko-jatan:20170705002548j:plain

rehash を 覚えていない僕へ

今日の業務の中で、別のリポジトリのコードを修正するタスクが回ってきた時の恥ずかしかった話。

そのリポジトリ自体は、先輩が開発から修正まで全部してきた。

僕はまずコード読んで、多分ここ修正すればいいだろうという目星をつけたところまでは良かったのだけれども、いざ環境構築だとなったとき、全然うまくいかない(泣)

何がうまくいかないかって、READMEに書いたあることやっても、途中で「そんなコマンドないよ」とエラーを吐かれる。

そのリポジトリのコードは、一つの自作Gemになっていて、独自のコマンド叩いたら、動画が変換できるようになっている。

でも独自のコマンド叩くと、「そんなコマンドないよ〜」 なぜ!?

俺、環境構築でつまづくって、成長してないなと悩みつつ、ただ時間が過ぎていくので、先輩に聞くと、

先輩「パス通ってる?」 僕「ええ、たぶん通ってます」 先輩「ちょいかして」

先輩が何か調べてると、最後に

rehash

はい、あっさりとうまくいきました。

先輩「Gemとか入れたら、Hashテーブルをリロードしなきゃいけないぜよ」

今までそんなこと知らなかった。

rehashはRubyとかの環境構築するときにコピペで使ってたけど、そのためだったのかというを今日初めて知った。

その時は、すごく恥ずかしかった。

でも、恥かいたことは忘れない。

ってか忘れられない。

みなさん、知ったかぶりはやめましょう。たくさん恥をかきましょう。

先輩プログラマーから言われた大事なこと

先輩に言われた大事なこと

先に言葉だけ書いてしまうと、

常に、結果の先を考えろ。

経緯

会社の先輩のプログラマーは超優秀で、基本的なインフラ、ネットワーク、App開発までなんでもできる。 できないことを探すことの方が難しいかもしれない。

私の略歴としては、文系スタートの社会人になってからプログラムを学び始め、RailsとかのLLに関しては何とかこなせている程度、なのでインフラとかネットワークの知識はほぼない.

差は歴然!

そんな人と同じチームで仕事を半年ほど続けている。

この半年間は、基本的に自社で使用している管理画面等々の開発をしていたので、基本的にコードをカリカリ書いていたので、特に問題はなかった.Railsだったしね.

しかし、最近 SRE という役目がチームに与えられた。

SREとは、サイトの信頼性の向上のためにインフラストラクチャの自動化、障害対応、システムの維持などの運用業務、 サーバ管理者的な役割に加えて、ソースコードに手を加えることでサイトのパフォーマンスを改善し、可用性、スケーラ ビリティを向上させるソフトウェアエンジニアとして役割の2つが求められます。

基本的にインフラメインな感はするが、簡単に言うと「何でも屋さん」、自分たちで問題を発見し、改善していく必要がある.

そのため、業務中は問題の解決策となるかもしれない選択肢を調べて調べて、試して、導入するというのが一連の流れである.

しかし、いざやってみると私はこの作業が非常に苦手だった…..

今まで意識してなかったけど、自分の場合、開発を行っていて、わからないことがあれば、StackOverFlowあるし、Qiitaあるし、大体調べたらできるから、そのまま近い形で導入し、正しく、動作したら、やったー!ってなって、そこで終わりだった。

例えば、Gemとか導入しても、なぜそれが動くのか、そのGemの中身がどうなっているのかを見てこなかった.

自分たちのシステムを改善する場合、ただ導入するだけでは意味がなく、なぜそれがいいのか、うちのシステムの中に一部マネできるところはないかなど、正常に動作するという結果の先を常に考えなければいけない.

プログラマーというか社会人を始めて4年、今まで、思考停止していたことを反省している。

30歳になる前に気づけてよかったと思う.ここから常に先を考えて、成長していきたい.