Macで任意のファイルサイズのデータを作る時はmkfileが便利
1年に300日くらいは任意のサイズのファイルを作ってみたいという衝動にかられると思うのですが、Macを使っている場合はお手軽に作る方法があります。
詳しくは man mkfile
をどうぞ
具体的な使い方
$ mkfile ファイルサイズ 出力ファイル名
でできる。ファイルサイズはメガバイトの場合はm、ギガバイトの場合はgなどの単位が使える。
➜ test mkfile 1g foo ➜ test ls -lh total 2097152 -rw------- 1 sugamasao wheel 1.0G 4 16 19:57 foo
べんり!Sorarisにも用意されてるコマンドらしいけど、いかんせんSorarisなんて10年近く触ってないので何もかも忘れました。
Webアプリケーションエンジニアがサービス運用をする時に必携の一冊
微力ながらレビューに協力させていただいた @koemu 先輩の単著(マジすごい!) ITインフラ監視実践入門をいただきました。
ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus)
- 作者: 斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
詳細な目次は gihyo.jp を参照してください。http://gihyo.jp/book/2016/978-4-7741-7865-3
なし崩し的にサービス運用を担当しているWebアプリケーションエンジニア……あるいは先輩(インフラ)エンジニアがどのような選択肢を考えた上で現在の方法を選んでいるか?をうかがい知るためにうってつけの本
長い見出しで恐縮です。 ただ、自分のように専門のインフラ担当というわけではないもののサービス運用を担当している人間としては 体系立てて、どのような選択肢があるのか を丁寧に説明してもらえるという場はなかなかないので非常にためになりました。
ドキュメントや体制づくりなど、色々な意味でリソースがかけられれば本書に書かれていることを全てやる!みたいのも可能かもしれませんが、現実は厳しい。そこまでのことはできない場合も多いと思います。
ただ、なんとなくやれそうな事をやる、という状況から、理想の世界ではどのような体制を作れば良いか? という指針を持った上で現場に合わせた選択をする、ということができるようになるというのは非常に重要なことだと考えています。
というのも、選択するということはある程度 別の方法を選ばなかった場合のリスク というのを想定できるからです。
個々の要素に対して非常に珍しいことを書いてあるわけではないのですが、上記のような意味で非常に有用だなと思います。
また、Mackerelでの監視設定の例があるので、この本で高まった意識をMackerelにぶつけやすいのも嬉しい点ですね。
ソフトウェアエンジニアのための ITインフラ監視[実践]入門 (Software Design plus)
- 作者: 斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
最後に、繰り返しになりますが、我流でなんとなくやってると漏れがあったり体系立ててなかったり(別々のレイヤーのことを同列で考えてたり)するのでとても便利です。 個々の要素に対して知ってる or 知らないというよりも、こういうことが体系立てた文章になっているっていうことが自分にとってはとても嬉しいし、とても価値のある本じゃあ〜〜〜という気持ちです。
ISUCON5の予選で爆散してきた
昨年に引き続きISUCONに参加しました
今年は id:koemu さんと id:ariarijp さんのチームでした。YAPCのタイミングだったかな?で id:koemu さんからISUCON一緒に出ましょう!と声をかけられたので、ホイホイとチームを結成しました。その後、YAPCの帰りに一緒に飲んでいた縁で知り合った ariarijp さんが一緒にチームを組んでくれることになってチームが結成された。
当日まで
あまり素振りとかできなかったのが悔やまれますが、まずは昨年参加した知見から、事前に作業方針のメモを共有しておいた。
例えば ssh の公開鍵を予めあつめておくとか、最初に手を付ける箇所の分類、チャットツールの準備などなど。
これは結果論だけど、チャットツールにSlackを選択していたのは、当日ISUCONの公式チャットツールidobataに障害が発生していて正常にアクセスできなかったので助かった。
当日
id:koemu 宅におじゃまして3人で顔を突き合わせて作業しました。当日やんごとなき事情で開始時間が1時間遅れたので、その間にトイレ行ったりして気持ちを高めていた。
〜13:00 ころまで
- koemu さんが秘伝のタレやミドルウェアのバージョンアップなど
- 自分はアプリのコードをgit化してデプロイできる環境を構築。その後、ベンチマークでDBをドロップしたりしないで毎回特定のID以降をクリーンアップしてる、というあたりを確認していた
- ariarijp さんがER図やベンチマーク実行時のログからどのような動きをしているかを確認してくれた
この時点のベンチマークでは(ランキングが正しければ)暫定1位を取ってたのは穏やかではなかった。
この時の私の様子はこちらです
うほほ
— sugamasao (@sugamasao) 2015, 9月 26
〜18:30 ころまで
ここらへんからどうもミドルウェアよりはアプリ(SQL)の問題らしいということが明確になってきて、各自問題のありそうな部分の確認、修正に着手していく。
この時、id:koemuの圧倒的コミットによって一瞬15000点くらい叩き出していて、暫定3位くらいにつける瞬間があった。
この時の私の様子はこちらです
んほーーーーーーーーーーーーーーーーーーーーーー
— sugamasao (@sugamasao) 2015, 9月 26
ただ、ベンチマーク的には問題なかったけど画面上の出力結果に問題があったので、おそらく意図しない結果だろうと判断して、この結果はお蔵入りになった(この得点に自力で到達できれば予選通過できたのだけど、、、)。
また、並行してプロファイラを仕込んだりしてボトルネックの可視化を図っていった*1。
N+1問題の解決やデータをmemcachedへ移す作業、追加のindexなどを見ていたけれど最後まで詰められず時間が来てしまった。
〜19:00
不要なログ出力のOFFなどを準備し、再起動してベンチマークが正しく動くかなどのチェックを始め、18:58くらいにギリギリ最終提出用のイメージをfixすることができた。
所感
前回のISUCONはどちらかというとミドルウェアを攻めていけた印象が強かったので、じっくりソフトウェアのチューニングを行うことにはならないだろう……などという先入観があり、プロファイラの導入など、アプリに手を入れるための施策が遅れてしまったのは大きな痛手だった(git化のついでくらいの勢いで導入すべきだった)。
あと、ローカルでアプリを動かせるような環境を作れればもうちょっと作業が効率化できたと思うのだけど*2、mysql2のビルドがうまくいかなくて諦めてしまった。ここはもうちょっと掘り下げるとか、MySQL2 0.3系を試すとか、そういう方向の手を打っていた方が良かったかもしれない。
もう一つ、今後やるならチャットツールにサーバ上のログなどの情報を手軽に通知できる仕組みを準備できると、作業時間のロスがなくて良いのかなと思った(とくに具体案はないけど、やってて手間だった)。
最後に
id:koemu さん宅におじゃまして一日作業させてくれてありがとうございました。あと、id:koemuさん、id:ariarijpさんともインフラもアプリのコードも書けて素晴らしいエンジニアで、マジ自分は空気だったのでもうちょっと頑張っていかないと厳しいとしか言えない。。。
本当に最後に
今年も自分の課題が見えた*3ので、ISUCONは本当に刺激になる良いイベントでした(めっちゃ疲れるけど!)。運営チームのみなさん、ありがとうございました👼
Webエンジニアの教科書をいただきました
@sasata299さんからWebエンジニアの教科書をいただきました!ありがとうございます><
- 作者: 佐々木達也,瀬川雄介,内藤賢司
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2015/03/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
目次
- CHAPTER-01 Webエンジニアについて
- CHAPTER-02 Ruby on Railsでの開発
- CHAPTER-03 PHPでの開発
- CHAPTER-04 NoSQLデータベース
- CHAPTER-05 フロントエンドの実装
- CHAPTER-06 ログについて
- CHAPTER-07 データの可視化について
- CHAPTER-08 環境構築の自動化
- CHAPTER-09 便利な外部サービス
CHAPTERだけ見るとちょっと荒いのでよくわからないかもしれませんが、もう少し詳しい章レベルだと、「 CHAPTER-04 NoSQLデータベース」では「Redis」や「MongoDB」について説明されています。
小学生並みの感想
この本の冒頭の対象読者でも書いてありますが、新卒さんがWebエンジニアになるぞ!!という本ではなく、少し経験を積んだ人がWebエンジニアとして幅を広げる際にとっかかりをつかむための本かなと思いました。
例えば、僕はMongoDBやTypeScriptなどは触ったことがなかったのですが「とりあえず触ってみる」という時はこの本を読みながら手を動かしてみれば良さそうだなと考えています。
もちろん、紹介されているそれぞれの技術に対して詳しく知りたい場合は専用の書籍を購入するのが良いと思うのですが、幅広く紹介されているので懐に忍ばせておくと、ある日突然MongoDBなどを触りたくなった時に便利そうですね(他にも、FluentdやServerspec等も取り上げられています)。
詳細な目次を見て、複数の項目で知らないけど触っておきたいなーというものがあれば購入してそんはないと思います!!!1
- 作者: 佐々木達也,瀬川雄介,内藤賢司
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2015/03/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
合わせて買いたい
昨年はこんな本を共著で書いてたのでこちらもよろしくお願いします
Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)
- 作者: 和田裕介,石田絢一(uzulla),すがわらまさのり,斎藤祐一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/11
- メディア: 大型本
- この商品を含むブログ (5件) を見る
MySQLのinnodb_thread_concurrencyとかinnodb_commit_concurrencyを変更する必要があるのか問題
MySQLのパラメータむずかしい
項目の説明はわかりますが、実際のシステムに即した値にするのってむずかしいなぁ、と思いつつパラメータを眺めていたのですが、こういうことらしいです。
@sugamasao Yes. Good to leave as default for most workloads in recent versions (5.5, 5.6).
— morgo (@morgo) 2015, 3月 18
最近のは(5.5や5.6なら)デフォルトで大丈夫だよ〜とのこと。
日本語の適当なツイートを拾って回答くれる MySQL Community Manager さんしゅごい〜〜😇
bundle gem foo -bの挙動がかわった(exeディレクトリになった)
bundle gemでgemライブラリのひな形が作成できる
その中で、-b
オプションを付けると実行ファイル用のbin
ディレクトリが作成される。しかし、Bundler 1.8系からは bin
ディレクトリは binstub用(で良いのかな)のsetupやconsoleスクリプト等(-b
を付けなくても生成される)が配置され、gemライブラリの実行ファイル用として exe
ディレクトリが用意されるようになる。
1.7.9 と 1.8.3での確認
1.7.9 で bundle gem プロジェクト名 -b -t
した結果
➜ /tmp tree baz baz ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── baz.gemspec ├── bin │ └── baz ├── lib │ ├── baz │ │ └── version.rb │ └── baz.rb └── spec ├── baz_spec.rb └── spec_helper.rb 4 directories, 10 files
1.8.3 で bundle gem プロジェクト名 -b -t
した結果
➜ /tmp tree bar bar ├── Gemfile ├── LICENSE.txt ├── README.md ├── Rakefile ├── bar.gemspec ├── bin │ ├── console │ └── setup ├── exe │ └── bar ├── lib │ ├── bar │ │ └── version.rb │ └── bar.rb └── spec ├── bar_spec.rb └── spec_helper.rb 5 directories, 12 files
経緯など
move gem bins to exe/ and add console and setup · ab3e217 · bundler/bundler · GitHub
あたりでやりとしていている。インパクトある割にしれっと変わってて何なのwという感じだけど、やりとりの先のブログとかも見ると、RSpecとかずいぶん前からそうしてるしみたいな事が書いてある。
なるほどねー
その他
いつのバージョンから入ったか調べてないけど、bundle gem
の時に、MITライセンスにするかだとか、テスト用フレームワークはどれを使用するか、等が質問されるようになっている。
これらの回答結果は設定ファイルとして(~/.bundle/config
に)保存されるようになっていて、フレームワークの指定等をしなかった場合のデフォルト値として使われるようになってるっぽい。
OSXのHomebrewでインストールするのをitamaeでやるようにした
自分のマシンの環境構築
数年に一度なのでイマイチ自動化とかしてなかったのだけど、Homebrewでインストールするヤツくらい自動化しても良いかと思ったので、 itamae-kitchen/itamae · GitHub でやるようにした。
caskでのインストールとかまで自動でできるようになると結構良いかなーと思っているが、そこまでやってない。。。
このエントリを読んで得られるもの
itamae
についてちょっとだけ知識を得られるかもしれません。
- パッケージのインストールを行う方法
- シェルスクリプトの実行をする方法
itamae
のlocal
モード(実行しているマシン自身を対象とする)の実行方法
リポジトリと実際のソースコードはこんな感じ
dotfiles/app_setup at master · sugamasao/dotfiles · GitHub
主に package
リソースを使っていますが、brew tap
の部分は直接シェルスクリプトを実行しているため、 execute
リソースを使っています。
また、Homebrewは重複してインストールしてもエラーになったりはしませんが、 only_if
や not_if
を使ってインストール済みであれば実行をスキップするようにして処理時間を短縮しています。
# brew install %w(openssl git tig imagemagick mysql zsh tmux mecab mecab-ipadic tree).each do |pkg| package pkg do action :install only_if "brew info #{ pkg } | grep -qi 'Not Installed'" end end ## using tap repository %w(sanemat/font peco/peco).each do |tap_name| execute "using tap #{ tap_name }" do command "brew tap #{ tap_name }" not_if "brew tap | grep -q '#{ tap_name }'" end end %w(ricty peco).each do |pkg| package pkg do action :install only_if "brew info #{ pkg } | grep -qi 'Not Installed'" end end
local
モードで実行するにはこのようにする。
$ bundle exec itamae local recipe.rb
まーこの程度シェルスクリプトでも良いじゃん?という気もするんだけど、今どきはOSXでもRuby 2.0系がデフォルトで入るようになってるし、臆さずRuby使ってけば良いのではという気持ちになっている。あと重要なのはitamaeを気に入ってるので、使っていきたいという気持ちw