2015年12月5日土曜日

PySpaの楽しさ~温泉以外編~

たまにアドベントカレンダーを書くだけのブログと化してきました。

この投稿はpyspa Advent Calendar 2015の5日目です。2012年のアドベントカレンダーでは「Pyspaの楽しさ〜温泉旅行編〜」としてPySpaのメインである温泉イベントについて、どんなに素敵な温泉旅行かを紹介しました。もちろんそれがPySpaのメイン(だってPython温泉ですからね)なんですが、PySpaのメンバーは他にもいろんなことをして楽しんでいます。

PySpaでは、温泉旅行以外にはどんな素敵なことをしているのか、写真を使って簡単に紹介してみましょう。

食事編

美味しい物好きが多いので、遠出した時はもちろん美味しいものを食べに行きます。これは東北でお寿司を食べた時ですね。この旅行の時は他にも海鮮丼なんかも食べに行きました。


もちろん都内にいるときもちょくちょくみんなでご飯に行くのですが、美味しいお肉を食べる会は、比較的回数多く開催されていると思います。


食べ過ぎちゃいました。。。でもこの時は太っ腹にも、とあるお方が全員分おごってくれたのです。すごい・・・!


もちろん肉や寿司といったいいやつばっか食べてるわけじゃありません。スイーツも大事ですね。ちなみにこの写真を撮った背中では dancho がでかいパフェをうまそうに食っています。

大自然編

身体を動かすことや自然がが大好きな人が多いので、登山なんかにも行っちゃいます。これは鳥海山に行った時の写真ですね。素晴らしい場所でした。

鳥海山にある湖、鳥海湖。ここでお昼ごはん。


ここは鳥海山の近くのコテージ。霧につつまれ不思議な雰囲気になっています。ちなみにこの夜はすさまじい土砂降りで、屋根に打ち付ける雨音がうるさすぎて、寝れたもんじゃありませんでしたが。。。


天体観測もしちゃいます。天の川が美しく見えていました。そしてなんと流れ星が!

お酒編

お酒が好きな人もたくさんいます。これは宮城峡にウイスキー工場見学に行った時のものです。


僕はウイスキーはあまり得意なお酒ではないのですが、この樽から出る香りは素晴らしい物がありました。


もちろん、飲むだけじゃなくてちゃんと説明を聞いてまわってますよ!


念願の試飲コーナーと物販コーナー。ウイスキーではありませんが、僕はアップルワインというものを買って行きました。新しいお酒に出会えて満足。

まとめ

というわけで、こんな感じでみんな美味しいもの食べに行ったり遊びに行ったり、いろんなことやってます。チャットでたまに真面目な話が出ると「PySpaチャットでPythonの話題が出てるよ・・・」とかなりますね。

企画済みの今年の残りイベントは忘年会ぐらいですかね!


2013年12月20日金曜日

キャッシュ層と永続化層、Oracle Coherence と Riak の連携(概要編)

前のブログが Riak Source Code Reading の記事だったのですが、気がつけば Basho に入社してました。

この記事はみんなでやる Riak Advent Calendar 2013 の 20日目の記事です。

今回は Riak と外部プロダクトの連携を考えてみます。
時間がなかったので、詳細はまた別途書きます。

Oracle Coherenceとの連携

Oracle Coherenceは 分散キャッシュ製品(オラクルの言い方だと分散データグリッド)です。キャッシュなので、一般的にRDBなどの前段に置いて、高速化目的で使われます。Coherenceは分散キャッシュであるためスケールアウトもできます。アプリの性能要件に対応しCoherenceを使って高速化。これはよくあるシナリオなのです。

ここで、OLTP系のシステムなどデータの更新が多いシステムの場合を考えてみましょう。Coherenceはさばいた更新量を、その下の永続化層であるDBがさばききれない可能性がありますね。もちろん本来ならここで、RDBのチューニングやら、Coherenceの永続化周りのオブジェクト設計をしっかり考えるのですが、ここで第3の選択肢を考えてみましょう。

今回はRiakのアドベントカレンダーなのでRiakを使ってみます。CoherenceもKVS、RiakもKVS、つまりCoherenceに格納されたデータを "そのまま" の形式でRiakに永続化できそうです。しかもRiakはスケールアウトが容易ですので、Coherenceの更新量に負けないだけのRiakサーバーを用意すればOKです。CoherenceとRiakは実は相性が良いのです。(Oracle RAC もスケールアウトするし!とか野暮な突っ込みは勘弁してください。)


というわけで試してみました。


Oracle Coherence の内部形式のままRiakに保存する

Coherenceのキャッシュにデータを格納する際、データすなわちKeyとValueはシリアライズされて格納されます。CoherenceではPOFと呼ばれるCoherenceが提供する方式でのシリアライズを推奨しています。アプリからCoherenceに格納する際はシリアライズして転送&格納、データを取り出す際は取り出したあとにデシリアライズといった具合になります。
本来CoherenceからRDBに永続化する際は、永続化のタイミングでもデシリアライズが必要です。しかしRiakに格納する場合はどうでしょうか?RiakはKeyとValueをバイナリで格納します。つまりデシリアライズなんて必要ないのです。Coherenceが使う内部形式であるPOFのままRiakに書き込むことが可能です。これはCoherenecで通常用いるCacheStoreではなく、BinaryEntryStoreと呼ばれるものを使えば実現できます。(なお、厳密な意味でCoherenceの内部形式はPOFをさらにラップした形式なのですが、ここでは内部形式=POFと表現しておきます。)


試しに作ったもの

というわけでさくっと作ってみました。
当然各製品はそれぞれ必要です。
・Oracle Coherence 12c 
・Riak 1.4.2 

さて、Riak側はデフォルトの設定のまま起動してもらっても構いません。そしてCoherenceですが、今回のサンプルアプリを作るのに用意したファイルはたったの3つ。
・Coherenceの設定ファイル(coherence-cache-config.xml
・CoherenceのデータをRiakに格納する処理(RiakCacheStore.java
・Coherenceにデータを読み書きするただのサンプル(TestClient.java


実行してみた

RiakとCoherenceを起動した後、サンプルアプリである、TestClientを実行してみます。 このアプリは、最初に50件データをputした後、Coherenceのキャッシュを一度クリアーします。その後最初に格納したデータと同じKeyでgetを行います。

TestClient.main() - put data to the TestCache
TestClient.main() - Clear TestCache
TestClient.main() - Get key=Testkey0, value=value0
TestClient.main() - Get key=Testkey1, value=value1
TestClient.main() - Get key=Testkey2, value=value2
・・・略
TestClient.main() - Get key=Testkey45, value=value45
TestClient.main() - Get key=Testkey46, value=value46
TestClient.main() - Get key=Testkey47, value=value47
TestClient.main() - Get key=Testkey48, value=value48
TestClient.main() - Get key=Testkey49, value=value49

裏では、Coherenceのputの際、CoherenceのBinaryEntryStoreを通じて、Riakにputが実行されています。またcacheをクリアーした後のgetでは、Coherence上でcache missした場合、やはりCoherenceのBinaryEntryStoreを通じて、Riakからのfetchが実行されています。


CoherenceでReadWriteBackingMapと呼ばれるキャッシュ設定を使った場合、Coherenceのputに対応してstoreメソッドが、get時cache missに対応してloadメソッドが実行されます。実質以下のコードが今回の全てです。
 public void load(BinaryEntry bEntry) {
  String riakKey = new String(bEntry.getBinaryKey().toByteArray());
  System.out.println("RiakCacheStore.load() - from Riak to Coherence [key=" + riakKey +"]");
  try {
   IRiakObject myData = myBucket.fetch(riakKey).execute();
   bEntry.updateBinaryValue(new Binary(myData.getValue()));
  } catch (RiakException e) {
   throw ensureRuntimeException(e);
  }
 }
 
 public void store(BinaryEntry bEntry){
  String riakKey = new String(bEntry.getBinaryKey().toByteArray());
  System.out.println("RiakCacheStore.store() - from Coherence to Riak [key=" + riakKey +"]");
  try {
   myBucket.store(riakKey, bEntry.getBinaryValue().toByteArray()).execute();
  } catch (RiakException e) {
   throw ensureRuntimeException(e);
  }
 }
ほら簡単ですよね。 今回は時間が無いのでこの辺りで。かなり端折って書いたので、次回は、CoherenceとRiakの説明を交えつつ詳細に書きたいと思います。

2013年2月20日水曜日

Erlang導入からRiakのクラスター参加まで

Erlang/OTP上で動く分散データベース Riak のソースコードを読む勉強会、 Riak Source Code Reading@東京 で、 ついに担当がまわってきてしまったので、重い腰をあげることになりました。 てかソースコードリーディングの初回から参加しているのに、 忙しさを理由に、未だに Riak 起動させたこともなければ、Erlangもまともに読み書きしてこなかったので反省。 というわけでまずは Riak を動かしてみます。どの環境で動かそうかなと思ったけど、 どうも Riak は Windows をサポートしてないようなんで、Mac 上に環境を導入してみました。

Erlangの導入

homebrew使ってる人は、簡単に導入出来ます。 Riakを動かす際のバージョンは、R15B01 推奨らしいので、そのバージョンをいれてみます、
$ brew versions erlang
R15B03-1 git checkout 168742f /usr/local/Library/Formula/erlang.rb
R15B03 git checkout 311472d /usr/local/Library/Formula/erlang.rb
R15B02 git checkout 44e09dd /usr/local/Library/Formula/erlang.rb
R15B01 git checkout 6b8d25f /usr/local/Library/Formula/erlang.rb
R15B git checkout 497b13a /usr/local/Library/Formula/erlang.rb
R14B04 git checkout aedacdf /usr/local/Library/Formula/erlang.rb
R14B03 git checkout 9332ca9 /usr/local/Library/Formula/erlang.rb
R14B02 git checkout b782d9d /usr/local/Library/Formula/erlang.rb
R14B01 git checkout 0476235 /usr/local/Library/Formula/erlang.rb
R14B git checkout 7871a99 /usr/local/Library/Formula/erlang.rb
R13B04 git checkout 31f1fab /usr/local/Library/Formula/erlang.rb
R13B03 git checkout 729f3fa /usr/local/Library/Formula/erlang.rb
R13B02-1 git checkout 0d673c6 /usr/local/Library/Formula/erlang.rb
brewだと、以下の手順で任意のバージョンを導入可能です。
$ cd /usr/local/Library/Formula/
$ git checkout 6b8d25f /usr/local/Library/Formula/erlang.rb
バージョンを確認して、インストール。
$ brew info erlang
erlang: stable R15B01 (bottled), HEAD
http://www.erlang.org
...

$ brew install erlang
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/erlang-R15B01.mountainlion.bottle.tar.gz
...
Erlangのシェルを起動してみます。R15B01が入りました。
$ erl
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false] [dtrace]
Eshell V5.9.1 (abort with ^G)

Riakのインストール

Riak のインストールは非常に簡単です。すでにバイナリが提供されており、自分の環境にあったものをダウンロードするだけです。 また、Homebrewからでも導入可能です。手順はともに Riak のドキュメントに書かれている。
$ curl -O http://downloads.basho.com.s3-website-us-east-1.amazonaws.com/riak/1.2/1.2.1/osx/10.4/riak-1.2.1-osx-x86_64.tar.gz
$ tar xzvf riak-1.2.1-osx-x86_64.tar.gz

・・・が、今回はソースコードリーディングなわけで、それぐらいソースからビルドしなくてどうする! ということでソースコード持ってきましょう。とはいっても大差ないぐらい簡単だけど。 ドキュメントはこれ
$ curl -O http://downloads.basho.com.s3-website-us-east-1.amazonaws.com/riak/1.2/1.2.1/riak-1.2.1.tar.gz
$ tar zxvf riak-1.2.1.tar.gz
$ cd riak-1.2.1
$ make rel
ビルド中に github につなぎに行って、依存している leveldb を落としにいくようで、インターネットに繋がらない環境でやる場合は注意。 さらに、make deverel とやると、dev1, dev2, dev3, dev4 と4つの Riak 環境を作ってくれます。
$ make devrel
$ cd dev/
$ ls
dev1 dev2 dev3 dev4
先ほどのディレクトリ配下の dev というディレクトリ内に、4つの環境ができています。 それぞれに riak コマンドが入っていて、個別に riak を起動出来ます。 こうすると、ローカルの1つのOS上で、複数の riak を起動して、クラスターを組ませたりできます。


Riakの起動

Riakを起動してプロセスを見てみます。riak start コマンドで起動できます。
$ ./riak start

$ ps -ef | grep riak
  501 802 1 0 3:50PM ?? 0:00.01 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/epmd -daemon
  501 819 1 0 3:50PM ?? 0:00.01 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/run_erl -daemon /tmp//workspace/riak-1.2.0/dev/dev1/ /workspace/riak-1.2.0/dev/dev1/log exec /workspace/riak-1.2.0/dev/dev1/bin/riak console
  501 821 819 0 3:50PM ttys004 0:02.48 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/beam.smp -K true -A 64 -W w -- -root /workspace/riak-1.2.0/dev/dev1 -progname riak -- -home /Users/taka -- -boot /workspace/riak-1.2.0/dev/dev1/releases/1.2.0/riak -embedded -config /workspace/riak-1.2.0/dev/dev1/etc/app.config -pa ./lib/basho-patches -name dev1@127.0.0.1 -setcookie riak -- console
epmd、run_erl、beam.spm の3つのプロセスが上がってますね。 PIDを見ると epmd は独立していて、run_erl 経由で beam.spm が動いているようです。 止めてみます。riak stop で止まります。
$ ./riak stop
ok

$ ps -ef | grep riak
  501 802 1 0 3:51PM ?? 0:00.01 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/epmd -daemon
epmdってなんだろう? これはRiakじゃなくてErlangがそもそも提供しているものっぽい。Erlangのドキュメントを見てみる。
Erlang Port Mapper Daemon
This daemon acts as a name server on all hosts involved in distributed Erlang computations.
なるほど、nameserver的な動きをするらしい。 dev1,dev2,dev3 の 3個起動してみると、epmdは1個だけだ。
$ ps -ef | grep riak
  501 802 1 0 3:50PM ?? 0:00.02 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/epmd -daemon
  501 2020 1 0 3:57PM ?? 0:00.01 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/run_erl -daemon /tmp//workspace/riak-1.2.0/dev/dev1/ /workspace/riak-1.2.0/dev/dev1/log exec /workspace/riak-1.2.0/dev/dev1/bin/riak console
  501 2157 1 0 3:57PM ?? 0:00.01 /workspace/riak-1.2.0/dev/dev2/erts-5.9.1/bin/run_erl -daemon /tmp//workspace/riak-1.2.0/dev/dev2/ /workspace/riak-1.2.0/dev/dev2/log exec /workspace/riak-1.2.0/dev/dev2/bin/riak console
  501 2592 1 0 3:59PM ?? 0:00.01 /workspace/riak-1.2.0/dev/dev3/erts-5.9.1/bin/run_erl -daemon /tmp//workspace/riak-1.2.0/dev/dev3/ /workspace/riak-1.2.0/dev/dev3/log exec /workspace/riak-1.2.0/dev/dev3/bin/riak console
  501 2022 2020 0 3:57PM ttys004 0:01.96 /workspace/riak-1.2.0/dev/dev1/erts-5.9.1/bin/beam.smp -K true -A 64 -W w -- -root /workspace/riak-1.2.0/dev/dev1 -progname riak -- -home /Users/taka -- -boot /workspace/riak-1.2.0/dev/dev1/releases/1.2.0/riak -embedded -config /workspace/riak-1.2.0/dev/dev1/etc/app.config -pa ./lib/basho-patches -name dev1@127.0.0.1 -setcookie riak -- console
  501 2159 2157 0 3:57PM ttys005 0:02.04 /workspace/riak-1.2.0/dev/dev2/erts-5.9.1/bin/beam.smp -K true -A 64 -W w -- -root /workspace/riak-1.2.0/dev/dev2 -progname riak -- -home /Users/taka -- -boot /workspace/riak-1.2.0/dev/dev2/releases/1.2.0/riak -embedded -config /workspace/riak-1.2.0/dev/dev2/etc/app.config -pa ./lib/basho-patches -name dev2@127.0.0.1 -setcookie riak -- console
  501 2594 2592 0 3:59PM ttys006 0:01.62 /workspace/riak-1.2.0/dev/dev3/erts-5.9.1/bin/beam.smp -K true -A 64 -W w -- -root /workspace/riak-1.2.0/dev/dev3 -progname riak -- -home /Users/taka -- -boot /workspace/riak-1.2.0/dev/dev3/releases/1.2.0/riak -embedded -config /workspace/riak-1.2.0/dev/dev3/etc/app.config -pa ./lib/basho-patches -name dev3@127.0.0.1 -setcookie riak -- console


Riakのクラスター参加

現在1つのマシン上で、dev1, dev2, dev3 の名前で、それぞれ riak start して、riakが起動している状態です。 これらはまだ独立して起動しているだけで、クラスターを組んでいません。 クラスター制御は、riak-admin コマンドで行います。 今回は、dev2とdev3をdev1のクラスターに参加させるイメージなので、 dev2とdev3でそれぞれ、./riak-admin cluster join dev1@127.0.0.1 を実行します。

$ ./riak-admin cluster join dev1@127.0.0.1
Success: staged join request for 'dev3@127.0.0.1' to 'dev1@127.0.0.1'

ここでメッセージに注目すると、"staged join request" となっています。 Riakのドキュメントを読むと、以下のように書かれていました。
As of version 1.2, Riak provides a multi-phased approach to cluster administration that allows changes to be staged and reviewed before being committed. This approach to cluster administration allows multiple changes to be grouped together, such as adding multiple nodes at once, or adding some nodes while removing others.
joinするまでには段階があって、stagedな状態になったあと、管理者がreviewしてcommitするまでは反映されないようですね。 riak-admin cluster plan を実行することで、今回 dev1,dev2,dev3でクラスタを組んだ場合に、 どのようなRingの配置になるか確認します。

$ ./riak-admin cluster plan
=============================== Staged Changes ================================
Action Nodes(s)
-------------------------------------------------------------------------------
join 'dev2@127.0.0.1'
join 'dev3@127.0.0.1'
-------------------------------------------------------------------------------


NOTE: Applying these changes will result in 1 cluster transition

###############################################################################
                         After cluster transition 1/1
###############################################################################

================================= Membership ==================================
Status Ring Pending Node
-------------------------------------------------------------------------------
valid 100.0% 34.4% 'dev1@127.0.0.1'
valid 0.0% 32.8% 'dev2@127.0.0.1'
valid 0.0% 32.8% 'dev3@127.0.0.1'
-------------------------------------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

WARNING: Not all replicas will be on distinct nodes

Transfers resulting from cluster changes: 42
  21 transfers from 'dev1@127.0.0.1' to 'dev3@127.0.0.1'
  21 transfers from 'dev1@127.0.0.1' to 'dev2@127.0.0.1'


どうやら、現在dev1が100%持っているRingの配分が、dev1:dev2:dev3=34.4:32.8:32.8になるようですね。 問題なければ riak-admin cluster commit。

$ ./riak-admin cluster commit
Cluster changes committed
riak-admin memver-status で現在の状態が確認できます。plan通りの配置になりました。 ちなみに 21 transfers from 'dev1@127.0.0.1' to 'dev3@127.0.0.1' とか書かれていたとおり、 転送に若干時間がかかるので、commit した1秒後とかに member-status を見ると、 未転送分は Pending のところに%で表示されます。

$ ./riak-admin member-status
================================= Membership ==================================
Status Ring Pending Node
-------------------------------------------------------------------------------
valid 34.4% -- 'dev1@127.0.0.1'
valid 32.8% -- 'dev2@127.0.0.1'
valid 32.8% -- 'dev3@127.0.0.1'
-------------------------------------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0



おもむろにパケットダンプ。Wiresharkはプロトコルがepmdだと認識してますね。すごい。dev2って名前のErlangノード誰?ってリクエストとに対して、返事返ってるのがわかります。


実際にRiakが投げるメッセージとかは、erldpというプロトコルで飛ばされている様子がわかります。Erlang Distribution Protocol の略みたい。次は、こっちの視点からコードを追いかけてみたいな。


コードからの確認

次は、cluster参加するさいのコードがどうなっているのかを確認します。 まずはどのソースコードなのか特定します。 riakのコードは、riak_core, riak_kv, riak_console, riak_pb, ... など機能ごとに細かく分かれています。 どうやって探そうかな、Erlangだとどうするかいまいち分からないので、ソースコードを先ほど出ていたログ "Success: staged join request" で grep してみると、riak_kv_console.erl の中にあるっぽい。 ここは riak_kv のレイヤーで、実際の処理は rika_core のレイヤーにあるみたい。
staged_join([NodeStr]) ->
    Node = list_to_atom(NodeStr),
    join(NodeStr, fun riak_core:staged_join/1,
         "Success: staged join request for ~p to ~p~n", [node(), Node]).
実際のソースコードリーディングの時には、「riak-adminコマンドはシェルスクリプトなんで、その中見ると、riak-adminの各コマンドが何を呼び出しているか分かるよ」とコメントを頂きました。 riak_core:staged_join はこんな感じ。Node には、"dev1@127.0.0.1" 的な文字列が入ってくるはず。 ここからnodeの名前を取り出して実際の処理にうつっているっぽい。
%% @doc Join the remote cluster without automatically claiming ring
%%      ownership. Used to stage a join in the newer plan/commit
%%      approach to cluster administration. See {@link riak_core_claimant}
staged_join(Node) ->
    join(Node, false).

join(NodeStr, Auto) when is_list(NodeStr) ->
    join(riak_core_util:str_to_node(NodeStr), Auto);
join(Node, Auto) when is_atom(Node) ->
    join(node(), Node, Auto).
riak_core_gossip:legacy_gossip() が呼び出されている。追っていくとどうも、 プロトコルに legacy_gossip って書いてある
join(Node, Node, _) ->
    {error, self_join};
join(_, Node, Auto) ->
    join(riak_core_gossip:legacy_gossip(), node(), Node, false, Auto).
Riakが使っているgossipのプロトコルには複数バージョンがあるっぽい。 コードを追っていくと、極力下位互換性を保とうとする考えが伺えますね。 実際にRingの処理のところでも、Ringのバージョンが LEGACY_RING_VSN なのか、 CURRENT_RING_VSN なのかで、処理を分けているところがあった。

ちなみにこれはまだ staged join の段階のコードなので、実際の commit 時は、また別の処理が行われているみたい。さすがに今回は追いかけ切れそうにないので、今日はここまで。

2012年12月18日火曜日

外岩を登る

(この記事は #kabepy Advent Calendar の18日目です)

はじめに


ボルダリングとはもともと自然にある岩場を登るものです。世間一般のボルダリングイメージは、人口壁のカラフルなホールドを登るイメージがついていますが、やはり本来は外岩がメインであり、ボルダリングジムはあくまで外岩に行けないときのトレーニングであると言う人もたくさんいます。僕が初めて外岩に行ったのは、ジムでボルダリングを始めてから11ヶ月目のことでした。最初は、外に行くのは大変だしジムで登ってればいいやとか思って行かなかったのですが、いざ行ってみると外には外の楽しさがありました。

ジムと外岩の違い


ボルダリングで登る自然の岩ってどんなものでしょうか。下の写真は高さ2メートルほどの岩です。いわゆるジムでのボルダリングと、外岩でのボルダリングでは違いが色々あります。


まず「クラッシュパッド」が必要という点があるでしょう。外岩ではジムのように床にクッションがしかれていません。良くて土、悪ければ下もゴツゴツした岩場です。そんなところで岩を登って落下すれば怪我は免れません。そのため写真に見えるようにクラッシュパッドと呼ばれるクッションを持っていく必要があります。人気の岩に人が集まるため、着いてみたらすでにパッドがたくさんしかれていることもあります。その場合は、岩に登る前に「お借りします」の一言を添えて使わせてもらいます。もちろん、シューズに土がついたままで乗らないように。

あとは課題の見方というか登り方が違います。ジムのホールドと違って外岩には明確なホールドがありません。なので外岩では、このあたりからスタートしてこのルートで登ると○級、といったように課題が設定されています。有名な岩とその課題は、黒本と呼ばれる本に載っていて、外によく行く人は必携です。先ほどの写真の岩には、「ラブリートラバース1級」という課題が設定されていて、右上からスタートし、下にさがり大きな溝に沿って左に移動し、そしてまた上にあがり左上のマントルを返す。YouTubeを探したら綺麗な動画があったのでリンクをはらせていただきたいとと思います


外岩でのボルダリングで使うもの


基本的には室内と大差ありませんが、いくつか書いてみます。
・ボルダリングシューズ
ジムみたいにレンタルできないので、自分のシューズが必要になります。外で使うということは少なからず地面を踏みますし汚れます。理想は、ジムで使うシューズとは別に外用のシューズを持っておくことです。
・チョーク
同じくレンタルチョークはありません。チョークとチョークバックを持って行きましょう。液体チョークでもいいと思います。
・クラッシュパッド
先に書いた通りです。全員が持っておく必要は無く、最低でも誰か1枚あればなんとかなります。御岳などはレンタルもあるので検討してみましょう。
・クロックス(サンダル)
これは必要というわけではありませんが、あると便利です。クロックスがあれば、ボルダリングシューズを履いたままで歩けます。可能な限りボルダリングシューズで地面を歩くことはしません。
・外に適したボルダリングの服装
ジムと同じ格好でもいいんですが、外なのでそれなりに気を使ったほうがよいです。下は出来れば長ズボンがいいですね。場所によってはヤブなども多々あります。あと岩場は大抵山なので、昼と夕方の寒暖差があります。防寒具も忘れないようにしましょう。
・ヘッドライト
暗くなる前に帰ればいいのですが、うっかり暗くなって道が見えないこともあります。足場が悪いことを考えると、両手が空くヘッドライトをおすすめします。

僕も最初は靴以外ジムと変わらない装備で行きました。特にクロックスを持ってないのは不便でしたね。次は実際に行ったことのある外岩、御岳と小川山を紹介します。

御岳


大きな地図で見る


御岳は都内から最も行きやすい外岩です。最寄り駅はJR御嶽駅で、なんと駅前の河原が岩場という素晴らしい立地です。駅前にはコンビニ有り、クラッシュパッドのレンタルをしているお店もありと、言うことありません。ここは多摩川上流にあたります。河原には大きな岩がたくさん転がっています。有名な岩としては忍者岩などでしょうか。

この写真は、デッドエンドと呼ばれる課題がある岩です。横から見ると結構かぶってますね。

他にもたくさん岩場があるのですが、手元にあるのは人がはっきりと写ってる写真ばかりなので、投稿は控えて、次は小川山い行きたいと思います。

小川山


大きな地図で見る

小川山と呼ばれているクライミングスポットは、長野県にある廻り目平キャンプ場周辺のことを指します。キャンプ場なので、駐車場やトイレ、温泉に宿泊設備と、かなり恵まれた場所であり、クライマーの多さからも人気の高さが伺えます。小川山に到着するとまず眼に入るのが、周辺の山々。広大な岩山と緑が360度広がっています。行った日は天気がよく、素晴らしい眺めでした。遠くの岩山をよく見ると絶壁を登っている人がいます。見るだけで怖い!下の写真、拡大してみると、中央に人が登っているのがわかります。小川山はボルダリングだけでなく、ロープクライミングの課題も多数あり、多くのクライマーたちで賑わっています。

クラッシュパッドを背負って、目的の岩場まで歩いていきます。すぐ近くの岩なら駐車場から5分程度、遠くだと20分程度でしょうか。

奥まで入って行くと途中にもたくさんの岩が転がっています。よく見るとすでにクラッシュパッドがあります。先客がいるようですね。

下の写真は有名なクジラ岩です。エイハブ船長1級をはじめ、たくさんの課題があります。下の写真じゃわかりづらいですが、この岩相当高いです。4mぐらいはありますかね。それゆえ恐怖心もかなり大きくなります。

僕は穴社員3級という課題に挑戦したのですが、残念ながら入社試験は不合格でした。ジムの3級と外岩の3級は勝手がかなり違いますね。クジラ岩は高すぎて怖いので、低くて怖くない犬岩のYMルーフ3級に挑戦。こんな状態からスタートです。もっと下の穴の中からスタートする犬小屋2段という課題もあります。


せっかく小川山に来ているのでボルダリングだけなく、ロープクライミングもしました。ボルダリングと違って、ハーネスやらロープやらいりいろ装備が必要ですが、ハーネスだけ前日に購入し、ロープなど他の装備は連れて行ってくれた方に借りました。とりあえず登ってみようと指された岩がこれ。えっ、これで簡単なの・・・?

川上小唄5.8という課題。ロープクライミングでは、ボルダリングの級段ではなく、5.xという数字でグレードを表現します。5.8, 5.9, 5.10a, 5.10b... 10からはabcdとさらに細かく別れます。つまりこの5.8は簡単な部類にはいるのですが、めちゃくちゃ怖い!もう下の人がこんなに小さく・・・。

ようやく岩のてっぺんまで登ったら、先端はこんな尖ってました。しかしそこから見える景色は絶景。しばらく周りの眺めを堪能していました。

ちなみにこのてっぺんの向こう側どうなってるのかなと覗きこんだら、こんな状態。軽く数十mありますね。こわいこわい。

おわりに

外岩に絶好のシーズンは春と秋です。このシーズンの外岩はたくさんのクライマーで賑わっています。夏だと暑いし汗で岩が滑ります。冬は岩をしっかり持てるけど、寒くて感覚がなくります。本当にストイックな人は、冬だろうががんがん行くようですが・・・。僕は今シーズンの秋から外岩デビューし、まだ3回ほどしか行っていません。来年の春はそれこそ毎週のように外岩行きたいですね!




2012年12月13日木曜日

PySpaの楽しさ~温泉旅行編~

(この記事は PySpaアドベントカレンダー の13日目です)

Python温泉(PySpa)とは何か?僕のイメージでは、30人で熱海の温泉宿貸しきって各自好きなことする2泊3日のイベントです。詳細はこれまでのアドベントカレンダーで言及されているのでそちらを参照してください。

Python温泉参加者用のサイトには以下のように主催者からのメッセージが書かれています。
* Python 温泉は禁酒です
* Python 温泉は勉強合宿ではありません
* 温泉に積極的に入りましょう
そう、別に勉強合宿じゃありません。きっと参加したこと無い人達は、
「PySpaはモヒカンの集まりに違いない」
と思っている人も多いかと思います(たまにマサカリが飛び交うことがあるのは事実ですが...)。しかし実際にはPySpaはただの熱海温泉旅行なのです。僕はそのスタンスでPySpaに参加しています。今回は、PySpaがいかに楽しいかを上記の側面から紹介したいと思います。



まずはJRで熱海駅到着です。芳泉閣の最寄り駅は伊東線に乗り換えてからさらに1駅先の来宮駅です。熱海からタクシーで向かう人も多いようですね。


来宮駅から坂を少し登ったところに芳泉閣があります。緑包まれた静かな場所です。


魚も泳いでました。風情ありますね。


そのすぐ横には、こんな物がたってます。さすが天然温泉。硫黄のかおりがします。
芳泉閣の玄関です。昔ながらの落ち着いた雰囲気です。この玄関スペースにはソファーがあって、そこでよくみんな談笑しています。


そしてもちろんPySpa最大の目的は温泉!僕は3日間で10回入ることを目標(?)にしています。


到着したら2Fの部屋に荷物をおいたあとは、食事以外ひたすら自由時間です。いきなり部屋で寝始める人もいます。


1Fの大広間には、机が並べられ、よくみんなここでPC開いたり何かいろいろやってます。お菓子もいっぱい。


ごはんの時間はみんないっしょです。


食後はお風呂入ったり遊んだり自由にすごします。夏だとスイカを食べながらゆったりしてますね。
2日目になりました。天気が良ければ昼間は外へ遊びに行きます。PySpa期間中はどこかで必ず雨がふると言われているので、 もし晴れていたらぜひ外にいくことをおすすめ。


すぐ近くには来宮神社があり、そこのお参りは定番コース。


とても大きなご神木があり、このまわりを一周するごとに寿命が伸びるといわれています。


神社には茶店があり、みんなそこで昼食やデザートを食べますね。ここの猫がこれまたかわいい。


しばらく茶店でのんびり涼みます。


夜は運がよいとお祭りをやってることもあります。そんなときは夜の熱海へ繰り出します。


そして熱海に上がる花火。熱海では年に10回以上も花火大会があるようです。













楽しいPySpaの一端ではありますが、写真で雰囲気が伝わったでしょうか? ぜひみなさんもPySpaで楽しい熱海温泉旅行を満喫しましょう!

2012年12月8日土曜日

ボルダリングのすゝめ

(この記事は #kabepy Advent Calendar の8日目です)

はじめに
IT界隈では、この時期になると Advent Calendar を書くことが流行っていますね。このブログには過去ログが無いことからも分かる通り、僕はブログを書く習慣がないのですが、今年は2つほど Advent Calendar を書く話にのっかってしまいました。いい機会ですので、何かしらの記事を書いてみようと思います。

今回は、Pythonボルダリング部による Advent Calendar として記事を書きます。タイトルは「ボルダリングのすゝめ」です。なぜボルダリングを始めたのか、ボルダリングを始めてからのことや、始めて得られた良いことをつらつらと書いてみたいと思います

ちなみに、Pythonボルダリング部ってなんだよ?って思う方いると思いますが、これは僕が顔を出しているボルダリング関連グループの1つです。プログラミング言語Pythonが好き(?)、かつ、ボルダリングに興味がある人が集まってできたサークルみたいなものです。別にPython書く人がばかり集まっているかというとそうでもなくて、知り合いつながりとかでいろいろな人が来ます。実際僕もPythonはほとんど使ったこと無いですし。ちなみにボルダリング界隈においてPythonと言えばボルダリングシューズとしてのPythonが有名です。(後から知りました)


ボルダリングとは
簡単に言えば壁(岩)登りです。山に行って自然の岩を登ることもあれば、室内の壁に設置されたカラフルな人工岩を登ることもあります。世間のイメージとしては、後者イメージが強いでしょうか。ボルダリングって定期的に流行が来るみたいで、ここ数年も比較的流行期らしく、都内にも新しいボルダリングジムがどんどんできてます。

始める前は「ただつかまって登るだけなんて簡単じゃん」って思ってましたが、実際やってみると意外と難しいものです。例えばボルダリングジムで登る場合、課題が設定されており、課題ごとに使っていいホールド(下写真のカラフルな石)に制限があり、どのホールドを使ってもいいというわけではありません。例えば下の写真では、「紫↑」シールが貼ってあるホールドだけを使って登る課題です。外の自然の岩を登るときにも課題がありますが、若干ルールが違うのでまた次回に紹介したいと思います。



ボルダリングを始めたきっかけ
2012年12月で、ボルダリングを始めて丁度14ヶ月が経ちました。会社の同僚がボルダリングをやっていて、会社の人達とみんなでジムに連れて行ってもらったのがきっかけです。以前から興味があったけど、なかなかきっかけに恵まれなかったのですが、ようやく初ボルダリングを経験しました。それが 2012年10月3日ですね。そこからしばらくは、毎週月曜日は、会社の仲間達とボルダリングジムに向かう日々が続きました。

昔から木のぼりを始めとして、登るという行為はなぜか好きで、ボルダリングも始めたらきっとはまりそうだなと思ったら、案の定あっという間にその魅力にとりつかれてしまいました。アスレチック好きな人はまずハマるんじゃないでしょうか?課題ごとに難易度が違っていて、より難しい課題を攻略することで達成感を得られることも後押しをしています。


ボルダリングを始めて得たもの
もちろんたくさん得たものがあるのですが、その中で顕著に変化がでたものが2つあります。

1. 運動する習慣ができた
健康面も改善されましたが、始めて半年ぐらいから体格が変わりはじめました。特に上半身の筋力がかなりアップしています。学生時代は時間もあったので、普通のジムに通って筋トレしていた時期もありました。しかし働き始めてからは、ジムに通う習慣がなかなか続かなくなりました。器具によるトレーニングは単調で飽きも来ますし、ジムに行くために会社に着替えを持って行って、仕事帰りに通うというモチベーションを維持することができませんでした。昔はテニスとかやっていたので機会があれば今でもやりたいのですが、都内でテニスコートを借りるのは結構大変で、なかなか機会に恵まれません。その一方ボルダリングは、都内にジムがたくさんありますし、会社帰りにふらっと行く事ができます。なんといっても楽しみかつ運動ができるようになりました。ボルダリングがうまくなってくると、更に難しい課題に挑戦したくなります。もちろん技術を磨くことが大事ですが、体重が軽いほうが有利ですし、筋力もそれなりに増やしたほうが有利です(無駄につけすぎて重くなったら逆効果ですが)。そうすると今度は、日常生活でも体重管理に気を使ったり、空き時間で簡単な筋トレをしてみたりという習慣ができ始めました。

2. 交友関係が広がった
これは別にボルダリングに限ったことじゃありませんが、共通の趣味があると交友関係を結びやすいですよね。同じジムに通ってると、よく見かける顔が増えてくると思います。生活スタイル的に毎週同じ曜日にジムに来るという人は多いようで、「この人先週もいたなぁ・・・」って思い始めます。広いジムだとなかなか話す機会も少ないですが、僕が通っている渋谷のPEKIPEKIというジムは小さいジムのため、話したこと無い人同士でも、同じ課題に挑戦する過程で話す機会が出てきたりします。ボルダリングでは課題に挑戦する人を「がんばー!」って応援する文化がありますが、これも話すきっかけを後押ししてますね。僕はジムに週2回は行けるようにしていますが、そうすると毎週会う人も出てきます。


おわりに
運動習慣がないけど、何か気軽に運動をしてみたいと思っている方は、ぜひ近くのジムに顔を出してみてはいかがでしょうか?一人じゃ行きづらい方は、ボルダリング人口は実はかなり多いのでFacebookやtwitterで誰かつれてってーって言えば誰かしら反応すると思います。また、冒頭で紹介したPythonボルダリング部のように、知らない人同士でも自由に人を募ってみんなでわいわい登るグループもたくさんありますので、そこに顔を出すのも手ですね。

それではみなさん良い壁を!

2012年11月28日水曜日

ブログまたはじめようかな

ブログを再度移転(といっても以前も実質書いてなかったけど)。 ドメインはそのまま使いまわして、ホスティングもbloggerなので、表面上は変わってないようにみえるけど。 以前のアドベントカレンダーの記事だけこちらにも貼ってみた。