amari3のはてなダイアリー このページをアンテナに追加 RSSフィード Twitter

2011-11-29

[]Software Design Dec.2011 読了

Software Design Dec.2011 が読み終わった。今号の特集は開発者向けの記事が多かったと思うので、インフラエンジニアだけでなく開発者にもお勧めできる。

今号を読んでみて個人的によかったと感じた記事の紹介をする。

エンジニアの能力を引き出す Mac 活用術

Mac OS X Lion によって変わった開発環境の説明や、Mac 上で動作させる仮想環境の比較。クックパッドの開発環境に Mac を導入した経緯が説明されている。Mac は UNIX ベースだし、Web系のエンジニアやインフラエンジニアには普段使い慣れたコマンドやツールが使えるのも魅力的だと思う。

ちなみに僕の開発環境は、Windows のマシンに、VMware 経由で Debian GNU/Linux の GNOME を起動させて使っている。正直面倒だったりすることが多いので、Mac Book Air の購入を真剣に検討しているところ。

イケてる Git の使い方

Git と Subversion の比較がされていたり、git-svn を使って、共有リポジトリは Subversion そのままでローカルに Git を使うやり方が紹介されている。最後の章では、Git と Redmine の連携について説明されている。バージョン管理システムとチケット管理システムの相性はすごくいいと思うので、職場でも是非導入をしたい。

また、コラムでは、Git/Mercurial/Bazzer/Subversion の機能比較もされており、わかりやすくまとまっている。

「うんこ演算」を支える UnkoScript

まず初めに感じたのは、このアプリはアイデアの勝利だと素直に感じた。ただ、面白いだけではなく内部実装もしっかりしていて、UnkoScript と呼ばれる独自の DSL が実装されている。その仕組みの説明がすごく秀逸でアルゴリズムやデータ構造の基礎が分かっていると、すごく頭に入ってきやすい。

最後に

CyberAgent のコラム等、他の記事もとても興味深く読めたので、当然今号もお薦め出来る一冊。

2011-11-28

[][]Perlにおける設定ファイルを自分なりに比較してみた

Twitterで10日くらい前に、Perlから設定ファイルを扱う際に、どの形式を使うのがいいんだろう?みたいな感じなつぶやきをしていたら、フォロワーの方からリプライが付いたので、メジャーな設定ファイル(と思われる)をそれぞれ自分なりに比較検討してみたのでそのまとめ。

以下の3つの形式を比較検討。

  • ini形式
  • yaml形式
  • perl形式

ini/yaml形式のサンプルコードでは、CPANモジュールを使っているが、モジュールの選択基準はあまりなく、とりあえず仕様が小さそうくらいな感じのを選択。今回はあくまで設定ファイルに特化したいと考えている。

ini形式

Windowsでも割と一般的に見かける形式。mysqlの設定ファイルもこの形式。

設定ファイル例

% cat data.ini
[site1]
url = http://d.hatena.ne.jp/amari3
title = amari3のはてなダイアリー
author = amari3

[site2]
url = http://amari3.hatenablog.jp
title = amari3の日記
author = amari3

設定ファイル読み込み例

use strict;
use warnings;
use feature qw( say );
use Config::Tiny;
use Data::Dumper;

my $conf_file = 'data.ini';
my $c = Config::Tiny->new->read($conf_file);

say Dumper($c);
say $c->{site1}->{title};

実行結果

$VAR1 = bless( {
                 'site2' => {
                              'url' => 'http://amari3.hatenablog.jp',
                              'author' => 'amari3',
                              'title' => 'amari3の日記'
                            },
                 'site1' => {
                              'url' => 'http://d.hatena.ne.jp/amari3',
                              'author' => 'amari3',
                              'title' => 'amari3のはてなダイアリー'
                            }
               }, 'Config::Tiny' );

amari3のはてなダイアリー

ini形式のサンプルでは、Config::Tinyオブジェクトになっているが、値へのアクセスはハッシュリファレンスで普通にアクセスできる。

僕が考えるメリット
  • 設定ファイル自体がシンプルでわかりやすい
  • おそらく誰でも直感的に編集できる
  • 言語に基本的には依存しない
僕が考えるデメリット
  • セクションのネストができない
  • ↑により凝ったことをするのが難しい

yaml形式

有名なところでは、Pitで使われている形式。

設定ファイル例

% cat data.yaml
site1:
  url: http://d.hatena.ne.jp/amari3
  title: amari3のはてなダイアリー
  author: amari3

site2:
  url: http://amari3.hatenablog.jp
  title: amari3の日記
  author: amari3

設定ファイル読み込み例

use strict;
use warnings;
use feature qw( say );
use YAML::Syck;
use Data::Dumper;

my $conf_file = 'data.yaml';
my $c = YAML::Syck::LoadFile($conf_file);

say Dumper($c);
say $c->{site1}->{title};

実行結果

$VAR1 = {
          'site2' => {
                       'url' => 'http://amari3.hatenablog.jp',
                       'author' => 'amari3',
                       'title' => 'amari3の日記'
                     },
          'site1' => {
                       'url' => 'http://d.hatena.ne.jp/amari3',
                       'author' => 'amari3',
                       'title' => 'amari3のはてなダイアリー'
                     }
        };

amari3のはてなダイアリー

ハッシュリファレンスが返ってくるので、特に難しいところは無いと思う。

僕が考えるメリット
  • 配列とハッシュのネストができる
  • ↑により凝った設定ができる
  • 言語に基本的には依存しない
僕が考えるデメリット
  • ちゃんと使いこなそうとすると覚えることが多い

perl形式

設定ファイル自体もPerlで書いてしまう。

設定ファイル例

% cat data.perl
{
    site1 => {
        url    => 'http://d.hatena.ne.jp/amari3',
        title  => 'amari3のはてなダイアリー',
        author => 'amari3',
    },
    site2 => {
        url    => 'http://amari3.hatenablog.jp',
        title  => 'amari3の日記',
        author => 'amari3',
    },
}

設定ファイル読み込み例

use strict;
use warnings;
use feature qw( say );
use Data::Dumper;

my $conf_file = 'data.perl';
my $c = do $conf_file or die "$!$@";

say Dumper($c);
say $c->{site1}->{title};

実行結果

$VAR1 = {
          'site2' => {
                       'url' => 'http://amari3.hatenablog.jp',
                       'author' => 'amari3',
                       'title' => 'amari3の日記'
                     },
          'site1' => {
                       'url' => 'http://d.hatena.ne.jp/amari3',
                       'author' => 'amari3',
                       'title' => 'amari3のはてなダイアリー'
                     }
        };

amari3のはてなダイアリー

yaml形式と同様、ハッシュリファレンスなので、特に難しいところは無いと思う。

僕が考えるメリット
  • Perlのエンジニアなら凝った設定も簡単に書ける
  • Perlのコアの機能だけで実行できる
僕が考えるデメリット
  • perl形式なので当然他の言語には使えない
  • Perlのエンジニア以外には直感的で無い(と思う)

結局どれを使うの?

結論から言うと、プロダクトやプロジェクトに合ったものを選択すればいいと思う。と書くと何のためのエントリだと言う事になるので、僕の基準を書いてみようと思う。

  • Perlのみのプロダクト/プロジェクトで、エンジニアしか設定ファイルを変更しない場合はperl形式を使う
  • 他のシステムからも共通して使われる可能性がある場合は、ini/yaml形式を使う
  • 非技術者も設定ファイルを変更する可能性がある場合は、極力ini形式を使う

といったところでしょうか。当たり前のことを書いているけど、一度整理できたので良しとします。また、設定ファイルをプログラムから書き換えるといった要件が出てくれば、この限りではないです。

2011-11-24

[][][]Teng でトランザクション処理 & はまった点

前回は、Teng で一通りの CRUD の仕方を紹介したんですが、トランザクション処理を考慮していなかったので、Teng でトランザクション処理をする方法を紹介します。

準備

テーブルは前回使用した memo テーブルを使います。

事前に以下の様なデータを入れておきました。

mysql> select * from memo order by id;
+----+-------+---------+---------------------+---------------------+
| id | title | body    | created_at          | updated_at          |
+----+-------+---------+---------------------+---------------------+
|  1 | Hello | World   | 2011-11-24 23:05:56 | 2011-11-24 23:05:56 |
|  2 | red   | green   | 2011-11-24 23:05:56 | 2011-11-24 23:05:56 |
|  3 | black | white   | 2011-11-24 23:05:56 | 2011-11-24 23:05:56 |
|  4 | foo   | bar baz | 2011-11-24 23:05:56 | 2011-11-24 23:05:56 |
+----+-------+---------+---------------------+---------------------+

トランザクション処理に使用するメソッド

以下のメソッドを使用して、トランザクション処理を行います。

Teng#txn_begin
トランザクションを開始
Teng#txn_commit
処理を確定
Teng#txn_rollback
処理の取り消し

サンプルコード

前回紹介した、データの更新にトランザクション処理をするための処理を追加してあります。

use strict;
use warnings;
use feature qw( say );
use lib "lib";

use My::DB;
use DateTime;
use Data::Dumper;

my $teng = My::DB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'test',
    'tes10',
    +{ RaiseError => 1, PrintError => 0, AutoCommit => 1, },
]);

$teng->txn_begin;

my $iter = $teng->search(memo => +{ id => [1, 2] });
while (my $row = $iter->next) {
    $row->update({ body => 'transaction test' });
}

$teng->txn_commit;

say $teng->single(memo => +{ id => 1 })->body;
say $teng->single(memo => +{ id => 2 })->body;

$teng->txn_begin;$teng->txn_commit; を追加したのみです。

実行結果です。

transaction test
transaction test

これでうまく動いているのですが、実ははまった箇所があるのでその説明です。

AutoCommit off 設定でエラー

トランザクション処理をするということで、AutoCommit を off に。これがはまる原因で、最初はインスタンスの生成を以下の様なコードにしていました。

my $teng = My::DB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'test',
    'tes10',
    +{ RaiseError => 1, PrintError => 0, AutoCommit => 0, },
]);

そして、実行してみると以下の様なエラーが出ます。

DBD::mysql::db begin_work failed: Already in a transaction at /home/tanida/perl5/perlbrew/perls/perl-5.12.1/lib/site_perl/5.12.1/DBIx/TransactionManager.pm line 32.

begin_work という見慣れないメソッドが出てきたので、DBI のドキュメントを読んでみたところ、AutoCommit を off にするメソッドでした。さらに読み進めると、AutoCommit が off の状態で呼び出すとエラーになるという記述が。

これが原因だと考え、以下の簡単なコードを書いて確認。

use strict;
use warnings;
use feature qw( say );
use DBI;
use Data::Dumper;

my $dbh = DBI->connect('dbi:mysql:database=testdb', 'test', 'tes10', +{
     RaiseError => 1, PrintError => 0, AutoCommit => 0,
});

$dbh->begin_work;
$dbh->do(
    qq{update memo set body = ? where id in (?, ?)},
    undef,
    'hogehoge', 1, 2
);

$dbh->commit;
$dbh->disconnect if $dbh;

実行結果です。

DBD::mysql::db begin_work failed: Already in a transaction at begin_work_test.pl line 11.

期待したとおりエラーになってくれました。

Teng#txn_begin の内部で呼び出している、DBIx::TransactionManager#txn_begin で DBI#begin_work を呼び出しているので、AutoCommit は on にする必要がありそうです。(調べが足りてないだけかもなので、もう少し調査します)

最後に

DBI#begin_work という知らないメソッドが出てきたりしたので、DBI そのものもまだまだ知らないことが多くありそうだなと感じました。DBI 自体もいじくり倒してみたいと思います。

2011-11-22

[][]プログラミングの宝箱 アルゴリズムとデータ構造 第2版 読了

アルゴリズムとデータ構造の勉強を基礎からやり直そうと思って購入した、『プログラミングの宝箱 アルゴリズムとデータ構造 第2版』が読み終わった。

バブルソートやリニアサーチと言った基礎的なものから、動的計画法といった応用的なものまであり、この1冊で基礎勉強は十分できるとおもう。

プログラミングの宝箱 アルゴリズムとデータ構造 第2版

プログラミングの宝箱 アルゴリズムとデータ構造 第2版

仕事の合間や定時後の時間を使って、少しずつ読んでたので時間がかかったけど、内容については非常に満足。全部ではないけど、理解を深めたい箇所については写経して実行。サンプルコードは C言語Java が載っているので、好きな方を選べばいいと思う。

僕がこの本から学習できたことの中で個人的に大きかったのは、データ構造やアルゴリズムを知ることで、処理にかかるおおよその時間を見積もることができるということ。データを適切に保持するためのデータ構造の選択ができる。当たり前の事かもしれませんが、知っていないと選択の余地が無いので。

以下の様な方々におすすめ出来ると思う。

  • プログラミング言語を覚えて次のステップ用
  • 新人のエンジニアの学習教材
  • 難しいアルゴリズムの勉強をする前の復習用

次は、ちょっとレベルの高いアルゴリズムが載っている本を購入して、勉強しようと思う。

2011-11-20

[][][]Teng で CRUD をしてみる

id:nekokak さんが開発されている、Teng で CRUD を一通りやってみました。

僕自身、DBIx::Class を以前使っていたんですが、あまりにも機能が富豪的すぎて使うのをやめてしまいました。それからは生 DBI を使っていたんですが、開発効率を考えたときに、ORM は使うべきだと再度考えるようになり、軽量な ORM、Teng に注目している所です。

準備

テスト用のテーブル

+------------+-----------+------+-----+---------------------+-----------------------------+
| Field      | Type      | Null | Key | Default             | Extra                       |
+------------+-----------+------+-----+---------------------+-----------------------------+
| id         | int(11)   | NO   | PRI | NULL                | auto_increment              |
| title      | text      | NO   |     | NULL                |                             |
| body       | text      | NO   |     | NULL                |                             |
| created_at | datetime  | NO   |     | 0000-00-00 00:00:00 |                             |
| updated_at | timestamp | YES  |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
+------------+-----------+------+-----+---------------------+-----------------------------+

まずは、モデルとスキーマのクラスを作成

package My::DB;
use strict;
use warnings;
use parent 'Teng';

package My::DB::Schema;
use strict;
use warnings;
use Teng::Schema::Declare;
use DateTime::Format::MySQL;

table {
    name 'memo';
    pk 'id';
    columns qw( id title body created_at updated_at );

    inflate qr/_at$/ => sub {
        DateTime::Format::MySQL->parse_datetime(shift);
    };
    deflate qr/_at$/ => sub {
        DateTime::Format::MySQL->format_datetime(shift);
    };
};

1;

inflate/deflate の第一引数には正規表現が書けるので、複数のカラムを一度に inflate/deflate 設定できるようです。

データの作成

use strict;
use warnings;
use feature qw( say );
use lib "lib";

use My::DB;
use DateTime;
use Data::Dumper;

my $teng = My::DB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'test',
    'tes10',
    +{ RaiseError => 1, PrintError => 0, AutoCommit => 1, },
]);

my $row = $teng->insert(memo => +{
    id => 1, # auto_incrementを指定しているけどテスト用に固定値を入れる
    title => 'Hello',
    body  => 'World',
    created_at => DateTime->now(time_zone => 'local'),
});

say Dumper($row->get_columns);

# Teng::Row が必要ない場合
my $last_insert_id = $teng->fast_insert(memo => +{
    id => 2,
    title => 'red',
    body  => 'green',
    created_at => DateTime->now(time_zone => 'local'),
});

say "last_insert_id: ", $last_insert_id;

# テスト用データを作成
$teng->fast_insert(memo => +{
    id => 3,
    title => 'black',
    body  => 'white',
    created_at => DateTime->now(time_zone => 'local'),
});

$teng->fast_insert(memo => +{
    id => 4,
    title => 'foo',
    body  => 'bar baz',
    created_at => DateTime->now(time_zone => 'local'),
});

Teng#insert を実行すると、Teng::Row オブジェクトが返ってきます。必要ない場合は、Teng#fast_insert が使えます。

実行結果

$VAR1 = {
          'body' => 'World',
          'created_at' => '2011-11-21 00:30:47',
          'updated_at' => '2011-11-21 00:30:47',
          'id' => '1',
          'title' => 'Hello'
        };

last_insert_id: 2

データの検索

use strict;
use warnings;
use feature qw( say );
use lib "lib";

use My::DB;
use DateTime;
use Data::Dumper;

my $teng = My::DB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'test',
    'tes10',
    +{ RaiseError => 1, PrintError => 0, AutoCommit => 1, },
]);

my $iter = $teng->search(memo => +{ id => [1, 2] });
while (my $row = $iter->next) {
    say Dumper($row->get_columns);
    say $row->created_at->ymd; # DateTime
}
say "";

# 一件のみ取得
my $memo = $teng->single(memo => +{ id => 2 });
say Dumper($memo->get_columns);
say $memo->created_at->ymd; # DateTime

複数行を取得する時は、Teng#search が使えます。Teng::Iterator オブジェクトが返り値となり、Teng::Iterator#next で Teng::Row オブジェクトが取得できます。

一行だけ取得する場合は、Teng#single が使えます。created_at カラムは、DateTime オブジェクトになっています。なお、Teng::Row#get_columns で取得した場合は、単純な値になるみたいです。

実行結果

$VAR1 = {
          'body' => 'World',
          'created_at' => '2011-11-21 00:30:47',
          'updated_at' => '2011-11-21 00:30:47',
          'id' => '1',
          'title' => 'Hello'
        };

2011-11-21
$VAR1 = {
          'body' => 'green',
          'created_at' => '2011-11-21 00:30:47',
          'updated_at' => '2011-11-21 00:30:47',
          'id' => '2',
          'title' => 'red'
        };

2011-11-21

$VAR1 = {
          'body' => 'green',
          'created_at' => '2011-11-21 00:30:47',
          'updated_at' => '2011-11-21 00:30:47',
          'id' => '2',
          'title' => 'red'
        };

2011-11-21

データの更新

use strict;
use warnings;
use feature qw( say );
use lib "lib";

use My::DB;
use DateTime;
use Data::Dumper;

my $teng = My::DB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'test',
    'tes10',
    +{ RaiseError => 1, PrintError => 0, AutoCommit => 1, },
]);

my $iter = $teng->search(memo => +{ id => [1, 2] });
while (my $row = $iter->next) {
    $row->update({ body => 'update test' });
}

say $teng->single(memo => +{ id => 1 })->body;
say $teng->single(memo => +{ id => 2 })->body;

Teng#update を実行します。難しいところはないと思います。

実行結果

update test
update test

データの削除

use strict;
use warnings;
use feature qw( say );
use lib "lib";

use My::DB;
use DateTime;
use Data::Dumper;

my $teng = My::DB->new(connect_info => [
    'dbi:mysql:database=testdb',
    'test',
    'tes10',
    +{ RaiseError => 1, PrintError => 0, AutoCommit => 1, },
]);

my $rows = $teng->delete(memo => +{ id => 1 } );
say "deleted rows: ", $rows; # 削除した件数

# 別なやり方
my $iter = $teng->search(memo => +{ id => [2, 4] });
while (my $row = $iter->next) {
    $row->delete;
}

Teng#delete と Teng::Row#delete を使用することができます。

実行結果

deleted rows: 1

使ってみた印象

実際に使ってみたところ、非常に簡単に使えるなと言うのが第一印象です。また、Web開発をするにあたり、通常使用する分には必要十分な機能を兼ね揃えていると思います。

最後に

今回は入門編として、トランザクション等の考慮はしておらず、とにかく Teng を触って覚えることを主旨としました。今後は、Teng でのリレーションの仕方等を覚えていこうと思います。

2011-11-15

[]Application Performance 2011 に行ってきた

2011年11月15日(火)に東京ミッドタウンで開催された、Application Performance 2011 というセミナーに参加してきた。セミナーの内容は、イベント名からも想像できるとおり、パフォーマンスに関することがとても多かった。エンタープライズよりな話が多かったので、あまり詳しく書けないけど、参加したセッションを紹介しようと思う。

参加したセッション

  • NTTドコモの情報システム戦略〜大規模基幹システムの構造改革〜 (Keynote)
  • アプリケーションパフォーマンスにおけるGDOでの取り組み (Keynote)
  • クラウドサービスを安全、快適に利用するために必要なソリューションとは?〜企業とクラウドをシームレスかつセキュアに接続し、無限のキャパシティを手に入れる!〜 (Keynote)
  • アプリケーション品質を維持・向上させる処方箋
  • 既存の監視ツールやデータで「カスタム構築」するアプリケーション性能管理(APM)〜サービス/ビジネス・アクティビティの状況が見えるインフラ/アプリ監視〜
  • 「ITパフォーマンス問題」の解決策〜Zeus Load BalancerによるDC最適化からSteelheadによるWAN最適化まで〜
  • グローバル展開におけるウェブアプリケーションパフォーマンス〜Akamai Intelligent Internet Platformが支える国内外の導入顧客様の取り込み〜
  • Mobageのパフォーマンス管理

パフォーマンス問題を解決する際に、どのセッションでも話されていたのは、ログが重要だと言うこと。これは、エンタープライズなシステムだけではなく、Webサービスでも同様のことだと思う。これによりログに対する意識は間違いなく高まった。

最後に

Webサービスの開発・運用をしている僕としては、正直敷居の高い話だったと思う。しかし、Mobageのパフォーマンス管理については、導入できることもあるし、むしろ導入しない理由がない。

最終セッション終了後は、Sony Tablet S が当たる抽選会があったんですが、あえなく敗退してきました。

あまり具体的なことが書けないので、分かりづらいエントリーとなって申し訳ありません。今後は、カンファレンスや勉強会等にもっと積極的に参加したいなと強く感じました。

2011-11-12

[][][]mihimaru GT の CD 買った

ちょいと自転車でぶらぶら出かけたついでに、中古の CD やらなんやらを売っている店に行って買い物してきた。

買ったもの

買ったのは mihimaru GT のアルバム CD で『THE BEST of mihimaru GT』を 300 円でお買い上げ。

動機

ももクロのライブ DVD で『ツヨクツヨク』を聴いて、すごくいい曲だなぁと思った。これは原曲も聴いてみたい!というのが動機である。

感想

聴いてみた感想は、すごくいいです!mihimaru GT が歌うとアーティストの曲だなぁという印象だし、ものすごく感情移入もできた。そして、ももクロが歌うアイドル曲としても成立しているのがすごいなと。


『ツヨクツヨク』以外にも『気分上々↑↑』等の代表的な楽曲が収録されているので、かなりお買い得だったと思う。

2011-11-10

[]GNU source-highlight をソースコンパイルしてみた

less でシンタックスハイライトが出来るというすばらしい記事が、@nippondanji さんのブログ 漢(オトコ)のコンピュータ道: lessでソースコードに色をつける で紹介されていたので、僕も早速やってみた。

詳しい説明はリンク先を参照していただくとわかりやすく説明されているので、このブログではパッケージからではなく、ソースコンパイルでのインストール方法を紹介しようと思う。ちなみに環境は、Debian GNU/Linux 5.0(ちょっと古い) である。

事前準備

コンパイルをするには、Boost::regex が必要になるのでインストールしておく。あと、おそらく推奨レベルだろうが、Doxygen と Help2Man も入れておく。

% sudo aptitude install libboost-regex-dev
% sudo aptitude install doxygen help2man

コンパイル & インストール

ソースコードはここから GNU Source-highlight - GNU Project - Free Software Foundation (FSF) 取得する。

% wget ftp://ftp.gnu.org/gnu/src-highlite/source-highlight-3.1.5.tar.gz
% tar xpvf source-highlight-3.1.5.tar.gz
% cd source-highlight-3.1.5
% ./configure --with-doxygen
% make
% sudo make install

環境変数の設定

以下の環境変数を設定すれば完了となる。

% export LESS='-R'
% export LESSOPEN='| /usr/local/bin/src-hilite-lesspipe.sh %s'

常にシンタックスハイライトを使いたいんであれば .zshenv や .bashrc に記述しておくといいと思う。

カスタマイズ

カスタマイズと言っても、設定方法とか調べ切れてないので、@nippondanji さんの設定を丸ぱくりした。詳しくはそちらを参照していただけるといいと思う。カスタマイズした結果以下の様に素敵な感じになった!

f:id:amari3:20111111000727p:image

ちなみにスクリーンショットのソースコードは、僕の gtk2-perl のサンプルコード。

最後に

less でソースコードを読む時にきついなと思ってたことが、これで完全に解消された!ソースコードを読むのが楽しくて仕方無くなる気がする。

2011-11-05

[]僕がももいろクローバーZ にはまった訳

実は最近、ももいろクローバーZ という女性アイドルグループにはまっています。2ヶ月前には名前すら知らなかった僕が、知るきっかけとなった出来事や流れをまとめてみたいと思います。

知るきっかけ

node.js というサーバサイド JavaScript の技術を調べていて、以前からよく見ていたこちらのブログ すぎゃーんメモ を読み進めていて、ふとこの記事 ももいろクローバーZにハマっている件について - すぎゃーんメモ に目が止まった。この時は、「こんなアイドルもいるんだ〜」ってな感じであんまり気にも止めてなかった。

翌日、出社前によく立ち寄るコンビニ(サークルKサンクス)で、ももいろクローバーZ のキャンペーンがやっていて、「昨日ブログで見たアイドルかぁ〜意外と可愛いかも」とそのとき初めて存在を意識した。

Youtubeももクロの MV をいくつか見てみたら

  • ダンスがはんぱなくすごい!
  • 緑の子いいかも

と感じるようになり、とにかくもっといっぱい曲を聴いてみたいと思い、楽天でCDアルバムの『バトル アンド ロマンス』を早速ポチった。

CDが届いた後、とにかく聴きまくった。とにかく気に入ってはまる寸前っていう感じ。

はまった決め手

でも、この次どうしたらいいんだろうかと思ってた時に、@sugyan から、ライブDVDなどの映像をオススメされたので、『ももいろクリスマス in 日本青年館~脱皮:DAPPI~ [DVD]』を早速購入。

程なくして届いて、見始めたらあっという間にはまった。

  • みんな最初からぽろぽろ泣いてるよ
  • 何!?このダンス!この運動量!
  • 会場の雰囲気すげぇ〜

そして何よりも、彼女たちの全力のパフォーマンスに胸が熱くなった。これがはまるってことなんだな!と初めて実感した。

今感じていること

とにかく、生のライブが見てみたい!でも、チケットが全然取れない。というもどかしさを感じているところ。そして、もっと早く知っていればなぁと。。

推しメン

ももクロの緑こと有安杏果(通称:ももか)を推しています。小さな体からは想像も出来ないダイナミックなダンスと抜群の歌唱力。そして、ちょっぴりハスキーな声にやられました。

でもでも、他のメンバーも個性的でもちろん全員応援してますよ!

最後に

ももクロの曲を聴かない日は無いくらいに、ほぼ毎日聴いています。ももクロの曲を聴くと楽しい気分になれるし、以前より仕事やプライベートも充実していると思う。

次はライブに行けるようにしたいです!

ももいろクリスマス in 日本青年館~脱皮:DAPPI~ [DVD]

ももいろクリスマス in 日本青年館~脱皮:DAPPI~ [DVD]

2011-11-01

[]健康診断に行ってきた

昨日は会社の定期健診。今年で30歳になるので、バリウム検査を初体験してきた。

親から散々バリウムはまずいと言われてきたので、若干不安だったんですが、バリウム前の発泡剤の方が個人的にはきつかった。飲んだ瞬間、すでにゲップをしたくなってしまう感じ。それをなんとかこらえて、バリウムを飲み始めた。バニラシェイクをさらにドロドロさせた感じで、飲めなくはなかった。

その後、検査が始まって台が回転したりして大変だったが、言われた姿勢を取ることに必死で、辛いと言う感じはそこまでしなかった。


しかし、本当の辛さはここからである。


検査終了後に具合が悪くなって椅子に座ってたら、担当の人に気付いてもらい、ベッド横にならしてもらった。看護師を呼んでもらって血圧を測ってもらったところ、上が70にも行かないくらいまで下がってて、すぐに応急処置をしてもらった。30分後くらいに血圧は戻り始めたんだけど、今度は、顔やら手やら足が痺れてきてあせった。

多分、こういうことなんだろうと思う。

  1. 血圧が下がり酸素が行き渡らなくなる
  2. 呼吸が深くなる
  3. 血圧が戻り始めると血中の酸素濃度が高くなる
  4. 過呼吸の症状がでる

すぐさまペーパーバック法による、呼吸を始めたんだけど、30分くらいは症状が回復せずに辛かったです。

どうやら、発泡剤かバリウムの過敏症状の一つの血圧低下が強く出てたみたいで、来年以降検査が受けれるかは微妙な感じになってしまった。