2週間のダイエットで実践した6つの自分ルール Webエンジニア的ダイエット

最近小ネタもあまり無くなって間が空いてしまったので、たまには技術以外の事も書いてみる。
Webの仕事を含む、IT系の仕事をしている人は良くありがちな話ですが仕事柄、連日夜遅くまで作業が入ってしまい、不摂生になってしまいがちですよね。自分も例に漏れず、帰りが遅くなると外食しがち、寝るのも遅くなりがちです。
夜遅くに外食すると大概脂っこいものばかり食べてしまったり・・・20代ならまだいいのですが、30歳超えた辺りから体のいろんなところに贅肉がついて、気づくと入ったはずのスーツが入らなくなったり顎がタプついたり・・・ホント笑えなくなってきます。

そうだ、ダイエットしよう!

前置きが長くなりましたが、ダイエットのお話です。
同じWebのお仕事している(特にエンジニア)方とかで、同じような悩みを抱えている方がいるんじゃないかと思ったので、自分が実践している方法をLog的に残しておこうという試みです。
ちなみにかなり自己流なので全くあてになりません。しっかりやりたい人はきっとちゃんとした指導を受けた方が良いと思います。

どんな方法で?

ずばり、ファスティングダイエットです。ファスティングダイエットって何?って方はいろいろ調べてみてください。
何故ファスティングダイエットなのかというと、仕事をしながら無理せず実践できるからです。(少なくとも自分はそうでした)
で、ファスティングですが、実はファスティングは何回かやっています。ですが、ダイエットというよりも体調を整えたり、気持ちをリセットしたい時に主にやっていました。なのでダイエット目的では初めての試みとなります。

どのくらいの期間?

今現在、2週間程実践しています。いつまでとは決めてないので飽きたり体調が崩れそうだなと思ったら止めます。

どうやって実践するか?

自分なりにルールを作ってやってみてるのでそれを一つずつ見ていきます。

その1 1日1食

基本的に固形物を入れるのは昼食のみ、1日1回です。その代わり何を食べてもオッケーという事にしてます。
でも野菜はちゃんととります。
あと、食事前に水をコップ一杯飲んでおくと、ドカ喰いしないので良いです。

その2 夜は野菜ジュースのみ

昼食以外は固形物を取れないので、夜は無塩タイプの野菜ジュース500mlを接種します。
朝は元々食べないのですが、きついときはやはり野菜ジュースか豆乳を飲みます。

その3 甘味は食べない(お酒も飲まない)

当たり前ですが、甘いものは食べません。いつも仕事終わりにコンビニでアイスやらシュークリームを買うのが日課だったので、我慢できないかなと思ったんですが、これは慣れると案外平気でした。
お酒は元々飲まないのであれですが、呑まない方が良いですね。そもそもダイエットしようとする人は呑まないか・・・。

その4 (極力)運動し(たく)ない

運動したくても、仕事が終わるの遅いとなかなかできません。なので出来ない事はやりません。
夜おなかが空いて仕方が無いときは、ウォーキングを30分〜60分くらいして気を紛らわしてました。その程度です。
(そもそもインドアで、コード書いてるかゲームしてるかしかない人間が急に運動とか無理だと思う)

その5 成果を気にしない

ダイエットなので、やはり体重が気になりますが、自分は一切測ってません。だってそんなの毎日やってもそんなに変わらないし、増えた減ったと一喜一憂したくなかったので。
エンジニアなら数値気にしろよ!とも思いますが、良くありがちな手段の目的化に陥ってるとも言えます。

その6 自分で決めたルールを徹底する

当然ですが、決めた事は徹底します。これ以上続かないなと思ったらそこで終了すればいいだけなのです。

2週間実践してみて

ファスティングダイエットを2週間程やってみて、実際はお腹が二周りほど凹みました。それと二の腕とか足とか余分な脂肪が落ちて、1サイズ下の服も入りそうです。
体調も実践する前よりも全然良いです。寝る前はきつい時がありますが、寝覚めもバッチリ。
それとご飯がとても美味しくなります。普段当たり前の様に食べているものが、別の料理なんじゃないかってくらい美味すぎて思わず笑ってしまうくらい(笑)
とにかく、ファスティングダイエットはお金をかけずにすぐ実践できるものだと思うので、Web業界で働いている方にはオススメしたいと思った次第です。

結論

Webエンジニアあんまり関係なかった。

Nginxでgzip化した状態でcacheをしてみる

Nginxのキャッシュはproxy_cacheによって、比較的簡単に取ることができるのですが、できればgzip化された状態でキャッシュしたいなぁと思ってやってみました。
1サーバでNginx + Apacheを想定して設定してみました。
これはあくまでgzip化した状態でキャッシュできるというだけで、パフォーマンスについては調査してません。
これをやってパフォーマンスが低下しても責任はもてませんのであしからず。

下記の設定をみればそのままですが、やってることは結局
(Nginx[80]でキャッシュ) (Nginx[8080]でgzip化) (Apache[10080]アプリケーション)
というだけです。
実際のキャッシュの中身を見ると

KEY: http://www.example.com/
...
Content-Encoding: gzip

めでたくgzip化された状態でキャッシュできました。
以下、端折ってますが設定例です。

http {
    ...
    ...
    proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=zone1:4m inactive=1d max_size=100m;
    proxy_temp_path /tmp/nginx_temp;
    upstream backend {
        server localhost:10080;
    }
    upstream gzip_backend {
        server localhost:8080;
    }
    server {
        listen 80;
        server_name www.example.com;
        location / {
            ...
            proxy_cache zone1;
            proxy_cache_key "$scheme://$host$request_uri$is_args$args";
            proxy_cache_valid 200 60m;
            proxy_cache_valid any 1m;
            proxy_pass http://gzip_backend;
    }
    server {
        listen 8080;
        location / {
            ...
            gzip on;
            gzip_http_version 1.0;
            gzip_vary on;
            gzip_comp_level 5;
            gzip_types text/xml text/css text/javascript application/xhtml+xml application/xml application/rss+xml application/atom_xml application/x-javascript application/x-httpd-php;
            proxy_pass http://backend;
        }
    }
}

Python Fabricで複数台のNginxのキャッシュクリアをする小ネタ

前回にNginxのキャッシュについて書いたので、今回は複数台のNginxキャッシュクリアをするコードスニペット的なのを書いてみます。
自動実行でも良いのですが、今回は手動でコマンドを叩いて消します。
キャッシュクリアに使うのはPython Fabricです。
Fabricを使えば、簡単に複数サーバでキャッシュクリアを実行出来るので本当に便利ですね。

# -*- coding: utf-8 -*-
from fabric.api import env, run, roles, cd, sudo
from fabric.contrib import console
def nginx():
        env.roledefs.update({'nginx':['192.168.0.1','192.168.0.2','192.168.0.3']})
@roles('nginx')
def cache_clear():
    with cd('/var/cache/nginx'):
       sudo('ls -la')
       if console.confirm('Do you really want to delete the cache?', default=True):
           sudo('rm -rf ./*')

そして以下のコマンドで実行します。

$ fab nginx cache_clear

結局やってるのは「sudo rm -rf ./*」なのですが、間違うとかなり危険なので一応、一覧参照と確認を入れてます。
たったこれだけで複数台のサーバで、横断的にキャッシュクリアできるのは良いですね。

Nginxのキャッシュとバーチャルホスト設定で気をつけたい事 メモ

Nginxで複数ドメインを扱う時に、気をつけたい事があります。それはキャッシュの設定。
公式を見る限り、proxy_cache_keyのデフォルトは

$scheme$proxy_host$request_uri

などとなっていますが、この設定を変更せずに複数ドメインを扱うとハマるというお話です。
具体的には以下のような設定の場合

server {
    listen       80;
    server_name  example.com *.example.com;;
    location / {
        ......
        ......
        proxy_cache zone1;
        proxy_cache_key $scheme$proxy_host$request_uri;
        proxy_cache_valid  200 1d;
        proxy_cache_valid  any 1m;
        proxy_pass http://backend;
        ......
        ......

この場合、「http://example.com」や「http://www.example.com」など複数ドメインで同一のキャッシュを参照する様になってしまいます。
実際のキャッシュの中身を見てみると・・・

KEY: httpbackend/

あなおそろしや・・・Nginxのキャッシュは手動で消す(or モジュール入れる)しか方法が無いため、複数ドメインで同じキャッシュが見えてしまう状態になってしまいます。
では、次にproxy_cache_keyを変更してみます。

proxy_cache_key "$scheme://$host$request_uri$is_args$args";

nginxを再起動し、キャッシュをクリアして再度キャッシュの中身を見てみます。

KEY: http://www.example.com/

今度はしっかりとドメイン名でキャッシュできました。
この辺りはハマりどころなので気をつけたいところですね。
ちなみに(複数サーバの)Nginxキャッシュの削除は、Python Fabricで簡単に行えるようにしております、Fabricマジ便利!

yum updateをしたら、タイムゾーンがUTCに戻ってしまった時のメモ Amazon Linux

先日Amazon Linux AMIが更新されて「Amazon Linux AMI 2013.03」になったので、早速yum updateを行ったのだけど、JSTにしたはずが何故かUTCになってしまったのでメモ。

$ sudo yum update

すると・・・

$ date
2013年 3月 31日 日曜日 12:17:00 UTC

何故かUTCになっていました・・・。
tzdataがアップデートされてたので、別のインスタンスで試しにtzdataをyum.confで除外してみました。

$ vim /etc/yum.conf
[main]
・
・
・
exclude=tzdata <- 追加
$ date
2013年 3月 31日 日曜日 12:33:14 UTC

やっぱり変わってしまう・・・。
それで、色々調べてみると、/etc/sysconfig/clockの修正が必要でした。

$ sudo vim /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false <- trueをfalseに変更
ARC=false

もう一度localtimeを変更

$ sudo cp /usr/share/zoneinfo/Japan /etc/localtime
$ date
2013年  3月 31日 日曜日 22:26:24 JST

ハードウェアクロックがこの設定を見ているのか?
hwclock –debugを実行するとなんか失敗しました。

$ sudo hwclock --debug
hwclock from util-linux-ng 2.17.2
hwclock: /dev/rtc のオープンに失敗しました, errno=2: そのようなファイルやディレクトリはありません.
利用可能なクロックインターフェイスが見つかりません。
既知のどんな方法でも、ハードウェア時計にアクセスできません。

しかし、yum updateした時にどこでlocaltimeが変更されているのかは謎・・・。
もう少し調査してみたいですが、今日はギブアップ。