空を飛ぶこと

f:id:tattii:20180921010038p:plain

ひとたび空を飛ぶことの味をしめたら、常に上を向いて歩くようになるだろう。自分の居場所は空だ、あの空に戻りたいと常に思うようになるのだ。

レオナルド・ダ・ヴィンチ

大学のサークルで初めて熱気球に乗って空を飛びました。
それ以来、まさにこの言葉の通りに空を飛ぶことが好きになりました。


今まで、たくさんの空を飛んできました。穏やかな青空をのんびり飛んだり、たくさんの気球が彩る空を飛んだり、上空2700mから富士山を望んだり。

f:id:tattii:20140211083513j:plainf:id:tattii:20171202073324j:plain
f:id:tattii:20170503073155j:plainf:id:tattii:20180920032726j:plain


中でも一番好きなのは、真っ白な雲海の上を飛ぶことです。
まるでラピュタの世界のような空の上の世界を体験できます。

f:id:tattii:20140818061856j:plain

熱気球のいいところは、これらの景色を360度すべて直接見ることができ、とても静かな空の旅を楽しめるところです。

また、熱気球には、スカイスポーツとしての側面もあります。
「風を読む」「地図を使う」といった能力が必要で、気象・GISとも関連していて面白いです。
今では学生時代の同期とTeam 空色というチームを作り、スポンサーもして頂いて活動しています。


いろいろな空に出会えることが楽しい、熱気球という趣味を続けていければいいなと思います。

最近の作業環境

f:id:tattii:20180908142130j:plain

久しくブログを更新していませんでしたが、東京で就職しました。

東京に引っ越すにあたって、空の見える快適な作業環境を作りたいと思い、部屋探しから始めました。

空の見える作業環境

tobalog.com このブログのような景色の良いデスクが理想でした。
眺望良好の物件をいくつか探して、実際に内見してみました。わりと理想的なところに決めることができました。

実際に住んでみると、空が遠くまで見えて気持ちのいい環境でした。 西向きなので、夕焼けが見えるのもいいところ。

f:id:tattii:20180723133129j:plainf:id:tattii:20180817185621j:plain


快適な開発環境

自宅で開発する時間が長いので、快適に開発できるようにしました。

曲面ディスプレイ

blog.livedoor.jp MacBook Proとディスプレイを縦に並べるスタイルが好きでしたが、大きいディスプレイが欲しいと思っていました。 4Kにするか曲面にするかを迷って、34インチ曲面ディスプレイにしました。

UWQHD (3340x1440)は、もともと使っていたFullHD (1920x1080)の約2倍の面積になって広く使える上に、没入感もあっていい感じのディスプレイです。

iPad + Apple Pencil

it-education.hatenablog.com

よく紙のノートにメモや図を書いたり、資料に書き込みながら作業していて、iPad Pro + Apple Pencilでノートを書くのを試してみたいと思っていました。
でも、iPad Proの値段に手が出ず...。 iPad 2018でApple Pencilが使えるようになったので購入。PDFに直接書き込んだり、図を書いたりと便利に使っています。

シルフィー

腰痛に苦しんでいたので、長く座っていても大丈夫な椅子を探しました。 少し高くても良い椅子をと思い、オカムラのシルフィーを購入。 長時間座っていることが多いのですが、以前のような腰痛が全くなく、いい買い物でした。


という感じで日々変わりゆく空を楽しみつつ、東京で開発の仕事をしています。

ISUCON夏期講習に参加した

f:id:tattii:20150819162401j:plain

学生限定のISUCON夏期講習に参加してきた。

isucon.net

内容

@tagomorisさんから、ISUCONについて解説してもらった。

概要から、実際の取り組み方までかなり詳しく教えてもらい、勉強になった。

チーム結成できた

チームメンバー募集可と書いていたけど、チームメンバーを募集していたのは3人だけだった。

PerlでWeb API

アルバイトでISUCONのようなことをしていた。

課題

Web APIの負荷が高く、高速化したい。

元の構成

Apache + CGI(Perl)

データはファイルから読み出し

やったこと

Nginx + Starman + Redis
  • データをすべて事前処理してRedisへ格納、インメモリ化

  • フレームワークは使わず、Plackの基本モジュールだけで作成

  • Unix Domain Socketを使う

  • Server::Starterで無停止デプロイ

  • AutoScaling

結果

[#/min]
Old 600
New 60000

abで何度も計測しながら、高速化できるところをいろいろ試していった。
ここまで速度を追求したのは初めてだったので、楽しかった。

AWS上で構築したので、既存のものから徐々に切り替えてもらった。
最終的にはすべて切り替わって、問題なく動いているみたい。

参考にしたもの

ISUCON参加したい

isucon.net

Heroku無料枠の変更点

HerokuのDynoの仕様が変更されるみたい。

Heroku | New Dyno Types and Pricing Public Beta

いつも無料枠でいろいろ試しているけど、無料枠も変更されるので変更点をまとめてみる。

Traditional dynos (現在)

750 dyno-hour / monthまでは無料。
(1X、2X、PXの使い方は自由。)

New dynos (6月から)

現在の1X、2X、PX → Professional Dyno

f:id:tattii:20150508233105p:plain

開発用 → Hobby and Free Dynos

f:id:tattii:20150508233116p:plain

無料枠

Heroku | Heroku’s Free (as in beer) Dynos

  • 1日のうち18時間しか起動できない
  • 30分アクセスがなければsleep
  • webとworkerの2つが使える

  • 現在の1Xは6/1から順次freeに切り替え

  • 少なくとも2ヶ月は18時間を超えてもメール通知のみ

無料で24時間起動し続けることができなくなるみたい。

TrackBoxを公開しました

TrackBox

航跡を共有するWebアプリ「TrackBox」を公開しました。

航跡をきれいに見やすく表示でき、それを共有できます。

f:id:tattii:20150504115433p:plain

Example: http://trackbox.herokuapp.com/track/z12rcnmi


以前作った、 tattii.hatenablog.com

に共有機能を加えたものです。

Heroku + node.js + PostgreSQLを使っています。

メールクライアント

スマホからでも航跡を共有できるように、メールクライアントを作成しました。
下記のアドレスにGPXファイルを添付して送信すると、リンクアドレスが返ってきます。

trackbox0@gmail.com

使い方

自分がよく使っている、Trackというアプリから共有する例です。

Track-リアルタイムルート追跡と共有

Track-リアルタイムルート追跡と共有

  • 7 sols media d.o.o.
  • ユーティリティ
  • ¥600

f:id:tattii:20150504123556p:plain

  1. 履歴の詳細ページの共有ボタンを押す。
  2. Mail as GPXを選択する。
  3. 宛先をtrackbox0@gmail.com、件名を航跡の名前にして送信。
  4. 共有された航跡へのリンクがメールで返ってくる(少し時間がかかります)


f:id:tattii:20150504124117p:plain:w240

これから

  • クライアントアプリを作りたい
  • リアルタイム共有
  • オブジェクトのマッピング

いろいろ発展できそうです。
(クライアントアプリは開発してみたけど、途中で挫折…)

自分の気球の航跡を残しています。→ trackbox posts - To the Sky!

Apache+Starmanの高速化

Apache+Starmanのチューニングをいろいろ試して計測してみた。

0.環境

AWS EC2 t2.micro Amazon Linux
1CPU
1GB Memory

Perl v5.16.3
Apache 2.2.29
Starman 0.4011

1.実行するアプリ

hello.psgi

my $app = sub {
    return [
        200,
        [ "Content-Type", "text/plain" ],
        [ "Hello!" ],
    ];
};
$ starman --workers 64 hello.psgi

2. 測定

別のインスタンスから、abを使ってベンチマークを測定。

$ ab -n 10000 -c 100 <URL>

starmanへ直接、prefork、worker、starman --disable-keepaliveといろいろ試してみた。

[#/sec]
直接 2343.08
prefork 1573.77
prefork --disable-keepalive 1256.11
worker 1754.70

ApacheからReverseProxyするオーバヘッドがかなり大きい。 いろいろ試してみたけどなかなか数値が上がらず…。

ちなみにApacheは、できるだけプロセスのforkが少なくなるように設定した。

KeepAlive On

<IfModule prefork.c>
StartServers           64
MinSpareServers        64
MaxSpareServers        64
ServerLimit           256
MaxClients            256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers            16
MaxClients             256
MinSpareThreads         25
MaxSpareThreads         75
ThreadsPerChild         25
MaxRequestsPerChild  10000
ServerLimit            256
</IfModule>

3. Nginxを試してみる

ずっとApache+Starmanで考えていたけど、これを見てnginxを試してみたくなった。

location /test_tcp/ {
    proxy_pass http://127.0.0.1:5000/;
}

location /test_uds/
    proxy_pass http://unix:/tmp/starman.sock:/;
}

さっきと同じ条件で測定。
StamanがUnix domain socketに対応しているのでそれも試してみる。

[#/sec]
TCP socket 1703.56
Unix domain socket 2132.53

4. 結論

Nginx+Unix domain socketが最速。

NginxとApache共存もできるので、Nginxをメインにするのもありかも。

d.hatena.ne.jp
このブログ記事を参考にさせてもらいました。