TORIPIYO DIARY

recent events, IoT, programming, security topics

ksarを使ってMac上でグラフィカルにsarファイルを分析する

EC2インスタンスのsarファイルを分析する必要があり、sarの内容をグラフィカルに描画できるksarを使いました。ちょっとつまづくところがあったので、使い方をまとめます。

1. sarファイルをテキストファイル形式で出力する。(sa16は例。ファイル名は日にちで変わる。)

LC_ALL=C sar -A -f sa16 > sa16.txt
  • LC_ALL=Cを付与して英語形式でテキストファイルを出力させます。日本語が含まれていると、ksarからうまく読み込めないそうです。
  • サーバ上にsa16.txtファイルがある場合は、scpコマンドなどでローカルに持ってきましょう。

2. sa16.txtファイル内から、以下のkbhugfreeのセクションの記述を削除する。

00:00:01    kbhugfree kbhugused  %hugused
00:01:01            0         0      0.00
00:02:01            0         0      0.00
00:03:01            0         0      0.00
00:04:01            0         0      0.00
00:05:01            0         0      0.00
...
23:59:01            0         0      0.00

perlを使って消すのであれば、

perl -0pi -e 's;\S+\s+kbhugfree.*(\d\d:\d\d:\d\d\s+\d\s+\d\s+\d\.00)+;;s' sa16.txt

となります。
このkbhugfreeの箇所の記述は、現在のksarでは対応していないようで、ksarで読み込もうとすると、

java.lang.NumberFormatException: For input string: "kbhugfree"
	at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
	at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
	at java.base/java.lang.Float.parseFloat(Float.java:455)
	at java.base/java.lang.Float.<init>(Float.java:554)
	at net.atomique.ksar.Linux.Parser.parse(Parser.java:1046)
	at net.atomique.ksar.kSar.parse(kSar.java:750)
	at net.atomique.ksar.FileRead.run(FileRead.java:62)
time to parse: 342ms number of line: 25905 line/msec: 75.0

というエラーが出力されて、グラフを描画することが出来ません。

3. ksarを起動する。

https://sourceforge.net/projects/ksar/ から、ksarのzipファイルをダウンロードしてきて解凍。

java -jar kSar-5.0.6/kSar.jar

で起動させます。

4. sa16.txtファイルを読み込む。
ウィンドウが表示されたら、

Data => Load from text file... => ダイアログからsa16.txtファイルを選択

で、Data import is finishedというメッセージが表示されて、グラフが読み取れるようになります。
こんな感じで項目が表示されれば、読み取り成功。分析しまくりましょう。
f:id:ha107chan:20190116224949p:plain

おすすめのポッドキャストランキング2018年版

【追記】
また、本人からツイート頂きました。ありがたや。


===========================================================================

もう年の瀬ということで、今年も個人的なポッドキャストランキングを書きたいと思います。去年の順位は以下のリンクから。
toripiyo.hatenablog.com

第10位 omoiyari.fm

lean-agile.fm

セールスフォースやアジャイルに関連した話が多い。出てくるゲストは他の技術系ポッドキャストに比べればちょっと幅広い。少し内輪ネタ的なもので話を進めようとすることがあるのは残念。

第9位 engineer meeting podcast

engineer meeting podcast

podcastのロゴに30'sという単語を入れているのは伊達ではなく、良くも悪くも30代のエンジニア視点から見た開発現場の話が語られる。このポッドキャストのすごいところは、ポッドキャストの最終回を番組内でちゃんと伝えたこと(結局、また再開したけれど)。番組内でちゃんと最終回と言ったポッドキャストは、記憶の限りではこのポッドキャストと総評で触れている奇談ラジオしかない。

第8位 mozaic.fm

mozaic.fm

以前は一つの技術的なテーマについて掘り下げる形式を取っていたけれど、去年からMonthly Webという形でその1ヶ月間で起こった主にブラウザやフロントエンド界隈の話を紹介している。また、ある技術トピックをテーマに話す回も不定期に開かれる。情報量は多い。相変わらずテーマソングの疾走感はポッドキャスト随一。ただ、他のyoutuberが同じ音楽を流していたので、もしかしてyoutubeにある素材音源が使われている?

第7位 Fukabori.fm

fukabori.fm

幅広いWeb関連技術トピックを紹介している。文字通りの深掘り。テーマが幅広いので配信者にも幅広いスキルが求められるけど、そつなくこなしている。これからも楽しみにしています。

第6位 Japan Eats!

Japan Eats! | Podcast Series | Heritage Radio Network

日本の食文化について英語で紹介するポッドキャスト。海外のポッドキャストは騒がしい印象があるけれど、このポッドキャストは落ち着いている。それは司会のAkiko Katayamaさんのおかげ。彼女が巧みに進行を進めることで、今日も落ち着いて聴くことが出来る。

第5位 Techmeme Ride Home

Techmeme Ride Home

Accidental Tech Podcastのスポンサー枠で紹介されて知ったポッドキャスト。英語が比較的聞き取りやすく、その日1日で起きたテック業界のニュースを15~20分ほどでまとめて紹介してくれる。朝会社まで行く道を歩きながらよく聴いている。

第4位 Rebuild

rebuild.fm

テック系ポッドキャストではナンバーワンの知名度だと思う。以前に比べれば配信頻度、ゲストの多様性、扱われるトピックの幅広さは低下した。しかしながら、コンテンツの聴きやすさはテック系ポッドキャストのなかでも随一。聴きやすいゆえに、まず一番最初に聴く。

第3位 バイリンガルニュース

bilingualnews.jp

ついこの前始まったと思っていたけど、もう5年以上続いているポッドキャストitunesのランキングでは首位の常連。取り上げられる話題は非常に幅広く、ニュースサイトだけでなく論文からも話題を拾ってくる。最近は、番組パーソナリティの女性に子供が生まれ、カバーする内容はますます広く深みを増す。

第2位 白と水色のカーネーション

www.carnation.jp
普通の人が頑張って面白い人を演じるポッドキャストは数多くある。しかし、狂気を内に秘めた人間が、普通の人を装って話すポッドキャストはそう多くない。おはな新聞、岡村ちゃん、堀切。番組は計算し尽くされて構成されており、一瞬も気を抜くことが許されない。聴く人もまた試される。

第1位 Turing Complete FM

turingcomplete.fm

今年聴いたポッドキャストでは一番中身が豊か。呼ばれるゲストはベテランのエンジニアから学生まで年齢層が広い。これは他のポッドキャストに無い特徴で貴重。内容は深く、語られていることの全てを理解するのは難しいが、海外で働いた話やソフトウェアを製作した過程を振り返る話など聴きやすいものもある。残念ながら、今秋ぐらいから更新が止まってしまったけれど、再開の期待も込めて今年の1位。

殿堂 wada.fm/だんごゆっけの平和な話

soundcloud.com

podtail.com

ゆうすけべーさんと、かまだんごさんのポッドキャスト。だんごゆっけの平和な話を聴いていると二人が本当に仲の良いということがよく伝わってくる。ゆうすけべーさんが結婚する直前に配信された回は、聴いていてちょっとうるっとする。何気に、rebuildの宮川さんがゲストとして出演した回もある。もうwada.fmも、だんごゆっけの平和な話も更新されなくて2年が過ぎる。今後も数多くのポッドキャストが生まれ、そして消えていくと思うけど、このポッドキャストが殿堂の座から消えることはない。

総評

去年はテック系ポッドキャストが下火になってきているように感じたが、今年は一転、去年よりも盛り上がっているように感じる。新しく始まったテック系ポッドキャストをいくつか見つけたし、ポッドキャストを聴くのが趣味という人に去年より会う。
しかしながら、非テック系のポッドキャストはまだまだ少ないと思う。ポッドキャストはテレビのように表現に規制があるわけでもなく、大衆受けを狙う必要もないので、もっといろんなジャンルの、自分の好きなことを語る面白いポッドキャストが増えてきて欲しい。ポッドキャストが好きな会社の同僚から"奇談ラジオ"というポッドキャストを紹介された。
奇談ラジオ

残念なことにこのポッドキャストは一旦最終回を迎えてしまったけれど、歴史の裏話的なものが語られていて面白かった。こんなポッドキャストがもっと増えていったらいいと思うし、積極的にまた探したい。来年は、また順位や顔ぶれが大きく変わるといいな。

opensslコマンドでインターネット上のWebサイトから証明書情報を取得する

TLS証明書の期限確認や更新作業後に、証明書の内容をブラウザでアクセスして確認することがあると思いますが、確認対象のドメインが多いとブラウザで確認するのにも時間がかかります。opensslを利用すると、コマンドラインから証明書のCommon Nameや有効期間を確認することが出来ます。

_domain=google.co.jp
echo | openssl s_client -connect ${_domain}:443  2>/dev/null | openssl x509 -noout -subject -dates

例えば、上のコマンドを実行すると、google.co.jpの証明書情報を取得できます。

~: echo | openssl s_client -connect ${_domain}:443 -servername ${_domain} 2>/dev/null | openssl x509 -noout -subject -dates
subject= /C=US/ST=California/L=Mountain View/O=Google LLC/CN=*.google.co.jp
notBefore=Nov 27 14:02:00 2018 GMT
notAfter=Feb 19 14:02:00 2019 GMT

1個のグローバルIPで1個の証明書を提供しているサイトでは、servernameオプションは必要ないですが、SNI(Server Name Indication)を利用してTLSを提供しているサイトでは、servernameオプションがないとサーバ側はどのドメインの証明書を返せばいいのかわからないので、証明書情報を取得出来ません。

例えば、herokuは、SNIを使ってTLSを提供しているのでservernameオプションを指定しないと証明書を返してくれません。

~: host ptl.zchain.co.jp
ptl.zchain.co.jp is an alias for floating-caverns-4281.mysterious-ocean-4640.herokuspace.com.
floating-caverns-4281.mysterious-ocean-4640.herokuspace.com has address 52.198.68.69
floating-caverns-4281.mysterious-ocean-4640.herokuspace.com has address 52.199.177.67

~: _domain=ptl.zchain.co.jp

~: echo | openssl s_client -connect ${_domain}:443 -servername ${_domain} 2>/dev/null | openssl x509 -noout -subject -dates
subject= /CN=ptl.zchain.co.jp
notBefore=Feb  7 00:00:00 2018 GMT
notAfter=Jan  1 12:00:00 2021 GMT

~: echo | openssl s_client -connect ${_domain}:443 2>/dev/null | openssl x509 -noout -subject -dates
unable to load certificate
4572370540:error:09FFF06C:PEM routines:CRYPTO_internal:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.200.4/libressl-2.6/crypto/pem/pem_lib.c:683:Expecting: TRUSTED CERTIFICATE

openssl x509のオプションをいろいろと変えれば、証明書から必要な情報だけ取得出来ます。openssl x509 -h でどんな情報が取得出来るか確認可能です。

"MBAよりも簡単で英語よりも大切な決算を読む習慣"を読んだ感想

表題の本を読んだのでその感想です。

MBAより簡単で英語より大切な決算を読む習慣

MBAより簡単で英語より大切な決算を読む習慣

タイトルにあるようにこの本は決算を読む習慣を作るきっかけを与えてくれる本です。他の会計本のように、決算書の項目をひとつひとつ丁寧に解説するわけではありません。

この本では、決算を読むよりも先に、まず対象とする企業のビジネスモデルは何かを洗い出します。そのビジネスモデルがどれだけ上手くいっているのか決算の数値を見ながら実践的に解説します。

決算を読み解く時に必要なテイクレイト、ARPUなどの数値を、どうやって計算すればいいのか業種ごとの説明があります。

最後の企業買収の章では、恥ずかしながらあまり把握していなかったのれん代IFRSと減損処理の関係が紹介されています。ここを読むことで、なぜ成長ベンチャーを積極的に買収する大企業は、日本会計基準ではなくてIFRS会計基準を採用するのかがわかるようになります。

最後ののれん代の話では楽天が事例として紹介されていて興味深かったです。楽天にはモバイル通信ビジネスの参入以外にも、多数の海外企業を買収してきたためのれん代の減損処理リスクがあります。

2018年6月の楽天のれん代は、3500億円ほどあるようでした。
https://corp.rakuten.co.jp/investors/assets/doc/documents/18Q2supplement.xlsx

viberとebatesののれん代が、それぞれいくらか項目別表記されてないので詳しい数値はわかりませんが、おそらく両者とも未だ1000億円近くののれん代があると思われます。

2018年度第2四半期決算の資料では、eatesは流通総額の成長が多少鈍化。viberは具体的な売上数値、アクティブユーザ数の推移を公表していない(登録ユーザ数は公表しているけれど)のでこの両事業が成功するか不確定です。のれん代の減損処理リスクは未だ付きまとっているようでした。
2018年度決算短信・説明会資料|楽天株式会社

ひふみ投信の藤野さんが「この本を読むと、決算がドラマになる」という推薦コメントを寄せられていますが、確かにこの本は決算の裏にあるドラマを見る手助けをしています。

dockerでnodejs, mongodbのローカル開発環境を構築してVisual Studio Codeでデバッグする

nodejsのアプリをローカル環境で開発していて、mongodbはdockerコンテナ上で動かしていたのですが、nodejsアプリはローカルで動かしていました。今回、nodejsアプリもコンテナ上で動かすように変更したので共有します。

ディレクトリ構成は以下のように変わりました。

application
├── Dockerfile
├── Procfile # heroku localの設定
├── README.md
├── app # アプリケーションのソースコード
│   ├── app.js
│   ├── config
│   ├── models
│   ├── modules
│   ├── public
│   ├── routes
│   └── views
├── docker-compose.yml
├── logs # アプリケーションのログ
├── node_modules
├── package-lock.json
├── package.json
└── script # バッチ処理スクリプト

Dockerfile, .dockerignore, docker-compose.yml, Procfileをそれぞれ解説します。

Dockerfile

  • RUN curl https://cli-assets.heroku.com/install-ubuntu.sh | sh でherokuコマンドをインストール。
  • COPY package*.json ./ で、アプリケーションで利用するnpmパッケージの情報を取得。RUN npm installで、npmパッケージをインストール。
  • COPY . . で、アプリケーションのディレクトリ・ファイルをコンテナへコピー。コピーしたくないものは、.dockerignoreに記述。

.dockerignore

  • appディレクトリ以下のソースコードは、ローカルマシンのものをマウントさせる。
  • logファイルは不要。
  • node_modulesディレクトリ以下のファイルをコピーすると、コンテナ上にインストールされたnpmパッケージが上書きされてしまうのでコピー不要。

docker-compose.yml

  • appディレクトリ以下のソースコードをローカルマシンで編集できるように、- ./app:/usr/src/appを指定します。
  • nodejsアプリケーションをでバッグできるように、ローカルマシンの5858ポートとコンテナの5858ポートを繋ぎます。
  • mongodbのデータはdocker volume上に保存されるように、dbボリュームを作成して、dbボリュームをコンテナの/data/db配下にマウントします。

Procfile

  • heroku local development で実行する内容を、Procfileファイルに記述します。


Dockerfile, .dockerignore, docker-compose.yml, Procfileを用意して、docker-compose upを実行すれば、アプリケーションがdockerコンテナ上で起動します。起動後は、localhost:5000でアプリケーションに繋げるようになります。(アプリケーションが5000ポートで起動するように設定されていれば)

gist.github.com

Visual Studio Codeでアプリケーションのデバッグ

Visual Studio Codeでアプリケーションを開発している場合は、launch.jsonに上記の記載内容を追加すればデバッグ出来るようになります。

f:id:ha107chan:20180916143626p:plain

Base FoodのBase Pastaおためしセットを試す

友達がtwitterでBASE PASTAのおためしセットを注文したと投稿を見て、僕も気になったのでおためしセットを注文してみました。

値段は、送料込みの980円で2食分楽しめます。AmazonPayに対応しているので、Amazonを使っている人なら購入時の入力項目をかなり減らせます。

完全食 BASE PASTA™ おためしセットshop.basefood.co.jp


僕が注文したときは、注文して二日後には家に届けられました。一食で必要な栄養素が全てとれるパーフェクトフード。なんだかとっても、未来を生きている感じがします。
f:id:ha107chan:20180826143534j:plain

作り方は普通のパスタを作るときと一緒です。

===================================

1. 水を沸騰させる
2. 沸騰した水に塩を入れる
f:id:ha107chan:20180829150704j:plain
3. 沸騰した水に麺を入れて1分ほど茹でる
f:id:ha107chan:20180829150920j:plain
4. ざるに茹でた麺を移して水をきる

ソース
1. ソースの袋を熱湯の中に入れて温める
f:id:ha107chan:20180829150751j:plain

麺+ソース
1. 麺とソースを合わせていただく
f:id:ha107chan:20180829151541j:plain
===================================

沸騰した水をどのように用意するかで調理時間も変わりそうですが、大体10分ぐらいで作れるのではないかと思います。ただ、作るのが簡単な割に洗い物が多くなりそうです。

普通のパスタの麺と比べて、見た目から分かるようにボサボサとした麺になっています。このボサボサとした麺にきっと色々な栄養素が練り込まれていそうです。ラーメンとも、うどんとも、そばとも違う新しい食感を味わうことが出来ます。

ソースは、普通のパスタソースと変わらないと思いました。

忙しいエンジニアには、日々の必要な栄養を素早く摂れて良さそうです。
こういうフード系のベンチャー企業が増えてくると、面白いですね。

burpのissue情報をもとにJIRAチケットを作成するエクステンションを試作する

burpのissueをjiraチケットとして作成するextensionを作りました。改善余地はたくさんあるのですが、同じようなものを作りたい人の参考になるように記事にしておきます。

このソースコードをそのまま実行しても動きません。変数の値などを自分の環境に合うように修正する必要があります。
gist.github.com

  • issueを右クリックされているとき、ctxの値は7となります。この時、createJiraのメソッドを実行させます。
  • JIRA APIには、usernameとpasswordをbase64エンコードしたものを投げています。HTTPS通信環境でないと、盗聴されてデコードされるので危険です。
  • invocation.getSelectedIssues()で、選択されたissueのissue情報を格納したインスタンスの配列を返します。
  • サブチケットとして作成するので、親チケットの値をpayloadのjsonデータに指定しています。
  • jira apiにチケット作成のリクエストを投げる時は、スレッドを作らないとうまく動かないようなので、thread = threading.Thread(target=self.issueRequest), thread.start() を実行しています。