2013年12月

2013年12月28日

詳しい経緯は後日書く予定であるが、スマフォをGALAXY Note IIに変えた。

で前のスマフォと違って困ったのが、パソコンにUSB接続したときのファイル転送がMTP(Media Transfer Protocol)かPTP(Picture Transfer Protocol)しか選べず、USBマスストレージ(=Windowsで言えば「一つのドライブになる」)としては利用できないことなのである。
これまで私は、スマフォ内部のデータをバックアップするのにrsyncによる差分バックアップを利用していたのだが、これが使えなくて困ったのである。

いろいろ調べて思案した結果、以下の方法に落ち着いた。

1. スマフォ側にSSHDroidをインストールし、SSHサーバとして機能するようにする。
2. Windows側にSFTP Net Driveをインストールし、SSHサーバを一つのWindows上のドライブとしてアクセスできるようにする。

これで解決。ずっと通信しっぱなしになるので、スマフォがWifiで繋げる環境を強く推奨、スマフォが十分充電された状態での利用を強く推奨します。

ちなみに機種限定&root取得が前提となるが、「SG USB Mass Storage Enabler」というそのまんまの名前のアプリを使うという手もある。

【補足】
Windows環境で利用できるrsyncとしてcwRsyncがあります。

maraigue at 03:58コメント(0)トラックバック(0)Android 

2013年12月25日

この記事を書いた理由

C++11において「std::function」というクラスが導入されました。これは後で詳しく述べますが、処理のまとまりを表すオブジェクトを格納できるクラスになります。

しかし、これを使い始めようと思ってstd::functionでぐぐっても、その意義や利用方法がちょうど良くまとまっている記事が見当たらなかったのです。
また、意義という意味ではstd::functionの大元であるboost::functionを読めばよいものの(記事例1記事例2)、コード例が当然C++11ではなくBoost前提であるため、C++11前提で利用するには情報として物足りなく感じたのです。

そこで本記事では、私が調べられた範囲でstd::functionの基本的な部分を紹介します。

サンプルとして用いたソースコードはhttps://gist.github.com/maraigue/8116989にあります。GCC4.6.1で実験しています。

std::functionとは

C++においては、処理のまとまりをオブジェクトとして扱う方法がいくつかあります。
C言語のころから存在する関数ポインタ、C++のクラスやオペレーターオーバーロードの機能を用いて実現されるファンクタ(関数オブジェクト)、C++11で新規に導入されたラムダ式
std::functionは、これらのいずれをも代入できる型です。ただし、いずれも代入できるといっても、引数と返り値の型はあらかじめ指定する必要があります。C++標準として取り込まれる前から、Boostにおいてboost::functionという同等の機能が存在しており、C++11において標準化されました。

例を示します。下のコードのように、StringProcessorFというクラスのコンストラクタ引数に、「文字数を表示しその値を返す」という関数を、「関数ポインタ」「ファンクタ」「ラムダ式」のそれぞれの方法で渡せるようにすることを考えます。渡された関数は、process_fileメソッドの中で呼ばれるようになっています。(ここでは、ファイルの各行について与えられた関数が適用されます)

これに対応したStringProcessorFクラスは以下のように書けます。「std::function<int(const std::string &)>」と書くことで、「文字列へのconst参照を受け取り整数を返すもの」を表しています。

それ、templateでもできるよ

実は上記の例は、templateでも似たことができます。例えば引数として関数ポインタを与えるなら「StringProcessorT<関数ポインタの型>」という具合です。std::vectorとかと同じ理屈です。ただ、毎回「<関数ポインタの型>」の部分を書くのは煩わしいので、以下のサンプルコードではそのあたりをmake_string_processorで押し込めるようにしています。

これに対応したStringProcessorTクラスおよびmake_string_processorは、以下のように書けます(注1)。

std::functionとtemplateとの違い

これら二つの例は、一見すると似たことを行っているものの、StringProcessorF/StringProcessorTの型の扱いに違いが生じます。std::functionを用いた場合、「関数ポインタ」「ファンクタ」「ラムダ式」のいずれを与えようとも、クラス内部で保持される型は常に「std::function<int(const std::string &)>」であり(注2)、最終的な型は常に「StringProcessorF」となります。一方でtemplateで実装した場合、「関数ポインタ」「ファンクタ」「ラムダ式」を与えた場合でそれぞれStringProcessorTの型も別になります(「StringProcessorT<与えたものに対応する型>」となる)。そのため、

  • 「最初は関数ポインタで指定し、あとでラムダ式での指定に差し替える」という対応は、std::functionによる実装のほうでないとできません。
  • その反面、std::functionを使うと、「関数ポインタ」「ファンクタ」「ラムダ式」のどれを用いたかの判定がコンパイル時ではなく実行時に行われるため、実行速度・メモリ消費の面で不利になります(参考:std::function vs template - Stack Overflow)。これは仮想関数の継承の場合と同様です。

まとめ

std::functionは、関数ポインタ・ファンクタ・ラムダ式といった「処理のまとまりを表すオブジェクト」を統一的に扱うために利用されるクラスです。ただし単に「関数ポインタ・ファンクタ・ラムダ式のいずれでも受け入れる関数/クラスを作りたい」ということであれば、テンプレートで型を吸収することでも可能です。std::functionの場合、実行時に型判断を行うため、柔軟性がある反面パフォーマンスでは劣るので、使い分けが大事といえます。


  • (注1)make_string_processorは参照ではなく値で返しているので、StringProcessorTのサイズが大きい場合にはこの実装はおすすめできません。ムーブという対応策がありますがここでは割愛します。
  • (注2)このように、異なる型のオブジェクトを格納するにあたり、「元の型の情報を維持しつつ、実際に格納する際には同じ型の変数に格納できるようにする」ことは「Type Erasure」と呼ばれます。詳細な解説は、例えばC++テンプレートテクニックの第7章にあります。


maraigue at 17:32コメント(0)トラックバック(0)プログラミング 

2013年12月18日

この記事は、C++ Advent Calendar 2013の18日目の記事です。


最近、研究のためにここ1ヶ月C++と戯れているH.Hiroです。

先日札幌で「札幌C++勉強会 #5」を開催したとき、私が担当で「STLソースコードリーディング」と題して、std::vector(可変長配列)のソースコードを読むということをしました。
細かい実装まで踏み込むことまではできなかったのですが、お世話になる機会が限られる機能(allocatorなど)とか、C++11(C++0x)対応で変化した部分(moveなど)とかもちゃんと見えるという効果があったと思っています。

さてそのうちの「C++11対応で変化した部分」についてですが、「C++11対応で変化した部分を知りたいなら、単にstd::vectorのソースコードをC++03向けとC++11向けで比較してみれば、違いがすぐに分かるのではないか?」と後になって思った次第です。

もちろん、これでC++11が全部分かるというわけではないですが、手っ取り早くC++11の新機能をなぞっていくべく、実際にやってみることにしました。

実験方法

$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ cat sample.cpp
#include <vector>

$ g++ -E sample.cpp > sample.c++03.cpp
$ g++ -std=c++11 -E sample.cpp > sample.c++11.cpp
$ diff -ywBd -W170 sample.c++03.cpp sample.c++11.cpp > sample.diff.cpp

上記の勉強会に合わせ、vectorで実験しています。

念のため補足しておくと、g++の-Eオプションは、コードをプリプロセッサだけ通して出力することを意味します。

diffで-yオプションを付けるのがポイントで、こうすると下図のように左右に二つのテキストを並べて表示してくれます。

diffで-yオプションを付けた例
↑diffで-yオプションを付けた例。サクラエディタ+Miguフォント

結果の解説

変換結果はhttp://chiraura.hhiro.net/misc/20131218/vector-diff-c++11.zipに置いてあります。

【nullptrとstd::nullptr_t】
C++11 (18-26行目)
namespace std
{
  typedef unsigned int size_t;
  typedef int ptrdiff_t;

  typedef decltype(nullptr) nullptr_t;
}
C++03 (18-26行目)
namespace std
{
  typedef unsigned int size_t;
  typedef int ptrdiff_t;


}

nullptrは「任意のポインタ型に変換可能なヌルポインタ」を表します。従来のNULLマクロは数値の0も意味しており、意図せず数値型と直接変換される可能性がありました。こちらを利用するとその問題を避けられます。
私はC++11でnullptrが導入されたのは知ってましたが、std::nullptr_t型の存在を知りませんでした。

参考URL

【char16_tとchar32_t】
C++11 (235-264行目)
template<>
  struct __is_integer<wchar_t>
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };

template<>
  struct __is_integer<char16_t>
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };

template<>
  struct __is_integer<char32_t>
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };

template<>
  struct __is_integer<short>
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };
C++03 (235-247行目)
template<>
  struct __is_integer<wchar_t>
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };














# 198 "/usr/include/c++/4.8/bits/cpp_type_traits.h" 3
template<>
  struct __is_integer<short>
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };

__is_integerはGCC独自仕様(おそらく)なので読み飛ばしていただければと思います。
C++11で、char16_t(16ビット幅の文字型)とchar32_t(32ビット幅の文字型)という、環境によらずビット数が決まっている型が新規に導入されました。

【move_iterator】
C++11 (463-479行目)
template<typename _Tp>
  struct __is_move_iterator
  {
    enum { __value = 0 };
    typedef __false_type __type;
  };

template<typename _Iterator>
  class move_iterator;

template<typename _Iterator>
  struct __is_move_iterator< move_iterator<_Iterator> >
  {
    enum { __value = 1 };
    typedef __true_type __type;
  };
C++03 (446-451行目)
template<typename _Tp>
  struct __is_move_iterator
  {
    enum { __value = 0 };
    typedef __false_type __type;
  };











詳細は後ほど説明しますが、C++11では右辺に与えた値の中身を左辺に持っていく(右辺の中身が無効化されうる)「ムーブ」という機構が導入されました。これはそのイテレータ版です。

参考URL

【noexcept】
C++11 (750-2756行目)
namespace std __attribute__ ((__visibility__ ("default")))
{

  template<typename _Tp>
    inline _Tp*
    __addressof(_Tp& __r) noexcept
    {
      return reinterpret_cast<_Tp*>
 (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
    }

}

/*中略*/

namespace std __attribute__ ((__visibility__ ("default")))
{

# 56 "/usr/include/c++/4.8/type_traits" 3
  template<typename _Tp, _Tp __v>
    struct integral_constant
    {
      static constexpr _Tp value = __v;
      typedef _Tp value_type;
      typedef integral_constant<_Tp, __v> type;
      constexpr operator value_type() { return value; }
    };

/*中略*/

  template<typename _Tp>
    inline _Tp*
    addressof(_Tp& __r) noexcept
    { return std::__addressof(__r); }

}
C++03 (721-739行目)
namespace std __attribute__ ((__visibility__ ("default")))
{

  template<typename _Tp>
    inline _Tp*
    __addressof(_Tp& __r)
    {
      return reinterpret_cast<_Tp*>
 (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
    }

























}

当該関数(メソッド)が例外を投げないことをコンパイル時に保証するためのキーワードです。noexcept指定された関数の中で、例外の発生しうる関数を用いる場合、その関数内で例外チェックを行い、例外を外に送ってはならない、という制約がコンパイル時にチェックされます。

参考URL

【integral_constant、conditionalなど】

ソースコード中の出現については上記を参照。コンパイル時に動作する数値の計算や条件文を表すのに用います。

参考URL

【std::move】
C++11 (2762-2776行目)
template<typename _Tp>
  inline void
  swap(_Tp& __a, _Tp& __b)

  noexcept(__and_<is_nothrow_move_constructible<_Tp>,
           is_nothrow_move_assignable<_Tp>>::value)

  {



    _Tp __tmp = std::move(__a);
    __a = std::move(__b);
    __b = std::move(__tmp);
  }
C++03 (745-759行目)
template<typename _Tp>
  inline void
  swap(_Tp& __a, _Tp& __b)




  {



    _Tp __tmp = (__a);
    __a = (__b);
    __b = (__tmp);
  }

C++11では「右辺値参照」といって、「このオブジェクトの参照を関数にあげるよ、その先で破壊的な操作をしてもいいよ」ということを明示的に記述できます。これは特に、一時オブジェクトを代入演算子で代入したりコンストラクタに渡すときに重宝します(ムーブセマンティクス)。std::moveは、指定されたオブジェクトを右辺値参照と扱うものです。
…とだけ言っても分かりにくいかもしれないですが、上記のswapの例がわかりやすいです。例えばこの__aや__bが大量のデータを含んだstd::vectorだったとしたら、C++03のswapで行われている普通の代入では、ベクタの中身を3回コピーしてしまいます。一方でC++11では、ベクタ(やその他STLのコンテナ)が右辺値参照に対応しているので、std::moveを付ければこれを回避できます。内部的には、ベクタが内部的に持っているデータへの参照(実際にはおそらくポインタ)だけを移し変えて、コピーの手間をかけずに中身の入れ替えを実現しています。

参考URL

おわりに

こういう勉強方法は一見非効率に見えますが、実際のソースコードから学ぶべきことが見えてくるという意味で、興味深い結果だなと思っております。

ちなみに実はまだ、ソースコードの3分の1しか読めておりません(C++11版は全部で1万行くらいあります)。ただこれ以上おくと12月18日のうちの公開が不可能なのでここで一旦公開します。続きは近日中にやります。



maraigue at 04:48コメント(0)トラックバック(0)プログラミング 

2013年12月17日

長らく使っていたパソコンのキーボードが、どこか断線したのかついに反応しなくなったので、新しいキーボードを購入。
店頭で選ぶ際に、価格と打ち心地を考えて選んだ結果、ELECOMのTK-FCP004を購入することに。

ただこのキーボードを実際に家のパソコンで使って困ったことが、キーの配置が変わったことにより、ブラインドタッチでの打ち間違いが多くなったこと。
特に以前と変わったのは、以前は十字キーやBackSpaceキーの上下左右に空間があったので(以前使ってたのはこのタイプ)、指の触り心地で十字キーの位置が確認できる=これらのキーは間違いにくい=文字を間違って打ってもすぐに修正できるというのがよかったのだが、新しいキーボードでは面積を小さくするためにキーの配置も詰め詰めになっていて、文字を間違って打ったのを修正するにもこれらのキーを打ち間違う、という事象が多発した。

ということで対策として、十字キーやBackSpaceキーなどのよく使うキーに養生テープを重ねて貼って、指の触り心地でキーを押す位置を確認できるようにした。非常に快適。
新しく買ったキーボード+養生テープ
たださすがに緑色は格好悪いので、別の色の養生テープを買ってきたほうがよさそう。

maraigue at 13:57コメント(0)トラックバック(0)随想コンピュータ全般 

2013年12月11日

この記事は、道民部 Advent Calendar 2013の11日目として書きます。

最近、Twitterで北海道内のサッカーの試合、しかもアマチュアのを実況するようになった私ですが、道民部という場をお借りしてその理由を書きたいと思います。

なお昨日は、コンサドーレ札幌 Advent Calendar 2013の記事として「スタジアムで何度も試合を見るようになって思ったこと」を書きました。よろしければこちらも。

補足:「#コミュサカ」ハッシュタグについて

詳しくはコミュサカまとめブログをご覧下さい。

Jリーグよりも下の、アマチュアを含んだサッカー(JFL・地域リーグなど)を扱うものです。来年からJリーグ3部(J3)が新設されますが、これも対象になるようです。

そもそも日本のサッカーは(海外に倣った仕組みなわけですが)、Jリーグ1部(J1)から地区レベルの社会人サッカーまで、制度上は昇降格が繋がっているのです(大学サッカーや高校サッカーは繋がっていない。日本サッカーのリーグ構成 (1種) - Wikipediaを参照)。その中で、成績に基づく昇降格を基本としつつも、Jリーグ(J1・J2・J3)に上がるにはそれぞれ基準が設けられている(満たさないと昇格できない)という仕組みになっています。

北海道のアマチュアサッカーに注目するようになった理由

そもそものきっかけは、上記の「Jリーグ1部(J1)から地区レベルの社会人サッカーまで、制度上は昇降格が繋がっている」という事実を2011年に知ったことでした。
そして、それを事実として知るだけでは物足りなくなり、北海道リーグ(北海道全体のリーグ)のチームはどんな戦いをしてその上を目指しているのか、そしてそれより下に所属するチームはどんな戦いをして北海道リーグの座を目指しているのか、ということが気になってきて、ならば自分の目で確かめようということで実際に観戦するようになったのです。

大きな理由がもう一つあって、北海道のサッカーのレベルが低いままだと悔しいじゃん?というのがあります。
北海道は、いくつかサッカーの全国大会で実績を残したチームもありますが(1980年代の室蘭大谷高校や、最近のコンサドーレ札幌U-18など)、大会戦績などを細かく調査していくと、全体で見ると力で劣っているのは事実だと感じます。他のスポーツと同様で、屋外が使える期間が短いというのはあると思います。
北海道のチームの情勢を把握し、どのチームがどう強くなっていくのか?というのを見て、最終的には全国の場で活躍するのを見たいという気持ちから(何か直接働きかけをできるわけではないですが)様々な試合を観戦しています。

また細かい理由としては、Jリーグとかだといくらでも情報が手に入るわけなので、ならば情報の入りにくい大会・試合にも注目したい、という思いがあります。

北海道リーグ昇格を賭けた一戦(10月14日 岩見沢にて)
↑北海道リーグ昇格を賭けた一戦(10月14日 岩見沢にて)

注目しているチーム

上記の理由から、私は北海道のサッカー全般を見るという意識で、特段どこかのチームのサポーターというわけではないです。ただそれでも、優先して注目しているチームはあります。

クラブフィールズ・ノルブリッツ北海道Wikipedia)(2013年の観戦:4試合)
北海道サッカーリーグ(社会人)を直近22年間で17回優勝している強豪。今年も優勝して3連覇。
当初は北海道電力の企業チームとして発足した。
JFL(Jリーグの下に位置する全国リーグで、Jリーグに参入しないチームにとっては最高位のリーグ)昇格を一つの目標としつつも上がれないという状況が続いているので、是非上がって「北海道の社会人サッカーの力で全国で張り合えるんだ」というのを見せてほしい、という思いで応援しています。
なお、今年11月には青森まで観戦に行きました
参考記事:【インタビュー】ノルブリッツ北海道がアマチュアにこだわる理由 – サッカーなう(2013年4月28日)
十勝フェアスカイ・ジェネシスWikipedia)(2013年の観戦:3試合)
北海道サッカーリーグで昨年・今年と2位(全8チーム)。
北海道ではサッカーも札幌に重心が偏る中、十勝を拠点に北海道の上位に食い込んでいるという点で注目しています。十勝出身の元Jリーガーがプレイしている(しかも2人所属している)というのも注目点。
参考記事:とかちフェアスカイFC、目標JFL入り - 北海道ニュース : nikkansports.com(2006年4月11日)
参考記事:元J1鹿島・田中康平さん古里で始動|WEB TOKACHI−十勝毎日新聞(2012年2月11日)
札幌蹴球団Wikipedia)(2013年の観戦:1試合)
北海道サッカーリーグで昨年・今年と4位。
ホームページ・ブログで活動をこまめに報告していて、サッカーを楽しんでいるというのが非常によく伝わってくるのが好感度大。
サンクFCくりやまWikipedia)(2013年の観戦:2試合)
北海道サッカーリーグの一つ下の道央ブロックリーグ所属。2001年から2006年は北海道サッカーリーグに所属していたチームです。
こちらもホームページで活動を細かく報告しています。社会人・高校生・中学生・小学生とそれぞれのチームを運営しており、それらすべての活動がよく伝わっています。
北海道大学体育会サッカー部(2013年の観戦:1試合)
北海道学生サッカーリーグで昨年5位(10チーム)、今年7位(8チーム:入替戦で勝利し残留)。
例外的にひいき目です。自分のいる大学なので当然なのですが。今年1試合しか観戦できなかったのが無念。

北海道内で力のあるチームが多いのは事実ですが、理由をちゃんと言うならば「努力がよく見えるから」ということになりますでしょうか。

北海道リーグ昇格を賭けた一戦(10月14日 岩見沢にて)
↑札幌蹴球団(緑) - 十勝フェアスカイ・ジェネシス(青)(5月12日 札幌にて)

今年のアマチュアサッカー観戦記録

全履歴は観戦記録 - H.Hiroのサッカー観戦メモに書いてます。まとめると

  • 1試合すべて見られた試合:30試合
  • 後半のみ見られた試合:2試合
  • 30試合での合計得点:118得点(1試合平均3.93点)
  • 観戦したうちの1試合最多得点差:6点
    • 6月30日 ノルブリッツ北海道 6 - 0 新日鐵住金室蘭
    • 10月14日 FC Menino 8 - 2 札幌真栄グランデ
  • 32試合の内訳:
    • リーグ戦:12試合(社会人リーグ:10、U-18リーグ:2。大学リーグが1試合も見られなかった…)
    • リーグ戦入替戦・昇格決定戦:11試合(集中開催のときに観戦したものが多いので観戦試合数も多い)
    • 天皇杯:7試合(北海道予選6試合、本戦1試合)
    • その他:2試合

他にいろいろと趣味がある中でかなり観戦したことになりました。

道南ブロックリーグのリーグ戦(5月19日 苫小牧にて)
↑道南ブロックリーグのリーグ戦(5月19日 苫小牧にて)

おわりに

相当ニッチな趣味だとは認識してますが、これからも情報発信していければと思っています。北海道のサッカー界に少しでもプラスになれば幸いです、という気持ちで。



maraigue at 03:50コメント(0)トラックバック(0)サッカー随想 

2013年12月10日

この記事は、コンサドーレ札幌 Advent Calendar 2013の10日目として書きます。

私は2011年ごろからサッカーに興味を持ち始め、招待券をいただけたのをきっかけに11月12日にコンサドーレ札幌の試合を初めて現地観戦しました(札幌厚別、vs大分トリニータ)。2012年は現地観戦は1試合だけだったのですが(3月20日、札幌ドーム、vsアルビレックス新潟、ナビスコ杯)、今年は全部で4試合観戦しました。

  • 3月10日 コンサドーレ札幌 0 - 1 栃木SC @ 札幌ドーム
  • 6月15日 コンサドーレ札幌 1 - 0 カターレ富山 @ 札幌厚別
  • 8月11日 コンサドーレ札幌 2 - 0 横浜FC @ 札幌厚別
  • 11月3日 コンサドーレ札幌 1 - 0 ジェフ千葉 @ 札幌ドーム

ということで、私がこれまで観戦して感じたことをいくつか挙げたいと思います。

追記:12月11日に道民部 Advent Calendar 2013の記事として、「私が北海道のアマチュアサッカーに注目するようになった理由」を書きました。よろしければこちらも。

【どこの席がよいか】

座席区分(コンサドーレ札幌公式サイト)

私が誰かに勧めるとしたら、SA自由席かSB自由席にします。理由としては

  • 試合の観戦しやすさと料金のバランス。特に「これから見てみよう」という方に勧める場合、いつも高い席だと観戦が長続きしないと思うので。
  • 自由席だと状況に応じて上に行ったり下に行ったり横に行ったりしやすい(コンサドーレの試合では、自由席で席を移動する余裕がなくなるほど席が埋まることはめったにない。残念ながら)。

なお、札幌ドームはB自由席でもフィールド全体を見渡しやすいため(観客席は高さがある上にスタンドの角度が急)、熱心なサポーターの方々の熱気を感じたい私は、札幌ドームではB自由席に座ることが多いです。札幌厚別のB自由席では少々見渡しにくいので、SA自由席のB自由席寄りの場所に座ることが多いです。

【補足】私は学生限定の1,000円の自由席券で観戦してます。

バックスタンドからメインスタンドを見る
↑バックスタンドからメインスタンドを見る

メインスタンドからサイドスタンド左側を見る
↑メインスタンドからサイドスタンド左側を見る

【いつ競技場入りするか】

余裕さえあれば「キックオフ1時間前くらいに到着してイベントとか全部見よう」と思うところなのですが、出発時にゆっくりしすぎてキックオフ20分前くらいになることが多いです…。2014年はちゃんと早めに現地入りします。

ただ、競技場で食事を調達する前提の場合は30分〜40分前に着いてたりします。飯の力はおそろしい。

赤黒たこ焼き
↑赤黒たこ焼き(ほっと12様)

【交通】

私は夏場は普段から自転車移動が基本ということもあって、競技場までの移動も夏場は自転車、冬場は徒歩(札幌ドームまで30分くらいなので)です。

自転車だと混雑の影響を受けにくいので本当楽です。ただそのため、天候を理由に観戦を取りやめたことが一度ありました(確かゴールデンウィークかその次あたり)。

ちなみに札幌厚別の場合、みんな適宜場所を見つけて駐輪してるのですが、駐輪場があってもいいんじゃないかなと思います。本当に自転車が多いので。

【現地で観戦する良さ】

試合観戦に集中できること、そして状況次第では大声を上げて盛り上がれることでしょうか。

まず、現地にいると「しっかり見よう」という気持ちになるのが大きいと思っています。家に帰ると職場にいるときほど仕事のことを考えられなくなる、というのと同じってところでしょうか。また、現地で見ると思い出に残るので、「このときの勝利(敗北)があとにこう繋がっていく」とかを見るのが楽しくなります。

また、場所が場所なので、得点や失点、いいプレーに声を思いっきり上げられるのは楽しいです。しかも周りに同じことをしている人がたくさんいる中で。喜びやつらさを競技場全体で感じられるというのは大きいです。

札幌ドームのコンサドーレ幕
↑札幌ドームのコンサドーレ幕

おわりに

コンサドーレにまともに注目するようになって3年目ですが、ちゃんと足を運んだことで、コンサドーレをよりちゃんと知ろうと思えるようになってきたと思っています。

来年ももちろん観戦します。ちなみに来年度札幌に住んでることになるかどうかはまだ未確定ですが、仮に札幌を離れても、そこから近い場所のコンサドーレのアウェーゲームを観戦する所存です。



maraigue at 01:58コメント(0)トラックバック(0)サッカー随想 
livedoor プロフィール

H. Hiro

  • ライブドアブログ