Python mini hack-a-thon 雪山合宿 2015に参加した

数えてみたら今回で6回目の参加。たまにはやったことを記録しておく。

  • Kibana4を触った
  • Bottle, Wheezy Webを触った
  • ワンナイト人狼6ニムトで遊んだ
  • 今回はスノーボードで滑りに行かなかった
  • 散歩した、雪降ってて寒かった
  • リアクティブプログラミングのさわりを教えて貰った
  • 検索エンジン開発の話を聞いた
  • 毎度のことながらご飯がおいしかった

Kibana4

Elasticsearch.org Kibana | Installation | Elasticsearch

使ったのはKibana4 beta3

ダッシュボードこんな感じ。自分で運用してるRedmineのフロントに使ってるNginxのアクセスログを飛ばしてみた。使い勝手はKibana3から比べていろいろ向上した印象。

f:id:inoshirou:20150201180658p:plain

以下はセットアップ時に参考にしたページ。

Kibana 4 BETAファーストインプレッション - Qiita

何が可視化された(されそう)か

Wikiへの更新時期・頻度とそのアクセス先から、いつ何に対して高いモチベーションがあったのかが可視化された。

また、チケットの作成やステータス変更のHTTPリクエストに絞り込むことで、どれだけ計画的に行動しているかが可視化できそうな気がする。

Bottle, Wheezy Web

Bottle: Python Web Framework — Bottle 0.13-dev documentation

Bottleはだいぶ薄くてフレームワーク自体がたった一つのPythonモジュールなので学習コストは低そう。iPhonePythonインタプリタ上で動かすと面白いという話を聞いた。

Wheezy Web — wheezy.web 0.1.460 documentation

Wheezy Webはやたらと早いと評判だったのでちょっと調べてみた。薄すぎず厚すぎずといった感じのフレームワーク。機能によってきっちりパッケージが分割されている点が興味深い。そのうち使ってみたい気はするけど、Pyramidでいいのではとも思った。

様子

Kickstarterで見つけた壁グッズの紹介

この記事は #kabepy Advent Calendar 2013 二十二日目のエントリです。

二十一日目は @wolf20xx さんの kabepy advent calender #21 --- ケガとリハビリ : 発見し隊 でした。

Kickstarterというサイトについて

皆さんは Kickstarter というサイトをご存知でしょうか。いわゆるクラウドファンディングというやつですが、自分自身あまり良く知らないサービスでした。ググってみると日本でも沢山サービスがあるようです。というか沢山ありすぎて訳が分からないですね。Kickstarterは全世界でもメジャーな部類のサイトなんじゃないでしょうか、多分。

どういったものかというのはWikipediaでも読んでみてください。

クラウドファンディング - Wikipedia

ちなみに、 Kickstarter では以前DjangoにDBマイグレーション機能を組み込む為のプロジェクトが立ち上げられ、無事に目標額を達成しました。Djangoの最新バージョンはこの記事を書いている現在は1.6で、このマイグレーション機能は次の1.7の新機能に含まれてリリースされる予定です。


Schema Migrations for Django by Andrew Godwin — Kickstarter

これで恐らくこの記事がAdvent Calendarの中で唯一「Python」「ボルダリング部」らしいエントリなったはず…。

Kickstarterで見つけたクライミンググッズ

では本題に入って、ボルダリングに焦点を移しましょう。

Kickstarterでボルダリング関連のプロジェクトを探そうとして「Bouldering」で検索してもあまり良い検索結果が出ませんでしたが、「Climbing」で検索するといろいろ出てきました。検索結果をざっと眺めてみると、どうもクライミング関係の映像作品を作るプロジェクトが多いようです。

@shomah4aの書いたAdvent Calendar 四日目のエントリでも触れていますが、クライミングの映像を見るのは良いものです。モチベーションの向上に繋がるし、いつか海外の岩場で登ってみたいなあとか思わされます。が、今回は映像ではなく、Kickstarterで見つけたクライミングに役立ちそうなグッズを紹介したいと思います。

画期的なチョークバッグ HULA & KANGAROO

ライミングに馴染みがない人は知らないと思いますが、ボルダリングでは手に汗をかいて滑ってしまう事を防ぐ為にチョークを用います。詳しくは以下のリンクが参考になると思います。

おすすめのチョーク、チョークバッグ/東京クライミング・ボルダリング

粉末タイプのチョークを使う場合は通常チョークバッグを用いますが、Kickstarterでなかなか便利そうなチョークバックを制作するプロジェクトがあったので紹介します。


A Revolutionary Chalkbag - HULA & KANGAROO by HANCHOR Team — Kickstarter

上記のプロジェクトで考案されている2種類のチョークバッグについて軽く説明しておきます。何言ってるのかわかんねえよという人はプロジェクトページなり上記の動画を見て下さい。

HULA

内部が内側と外側の2層に分かれているチョークバッグです。外側のスペースに個体チョークを入れるようになっています。内側と外側の仕切りは恐らく目の細かいメッシュ状の素材で出来ていて、それを握り込むなりすると個体チョークが崩れて粉末状になり、チョークアップが出来るようになっているようです。

  • 360度どの角度から手を入れてもチョークを付けることができる
  • ある程度粉の飛散を防ぐ事ができる
KANGAROO

こちらは一つのチョークバッグで二つのチョークアップの方法が選べるのが特徴のチョークバッグです。チョークバッグの中にチョークが入る袋(Chalk Sock)が備え付けられており、そこに個体や粉末のチョークを入れるようになっています。「二つの方法」うちの一つは、これのChalk Sockチョークボールのように握り込むようにしてチョークアップします。また、Cholk Sockは開いたままで固定できるようになっており、直接チョークを手にまぶすことも出来るようになっています。

  • 場面に応じてチョークアップ方法を選択できる
まとめ

チョークボールは粉の飛散は控えめですが、あまりチョークが手に付かないし、粉末チョークだと飛散が大きいので狭いジムだと使うのを遠慮しがちですが、これらのチョークバッグがそのあたりを改善してくれるものになるのかなあと思います。

ちなみにこのプロジェクトは既に募集期間を終えていますが、私は募集期間中に $65 を支援しました。その見返りとして、完成したHULAとKANGAROOが一つずつ送られてくることになっています。

ライミングレコーダー? Climbax

Jawbone、Fitbit、Fuelbandなど、最近はリストバンド型で装着者の活動をモニター、視覚化するようなガジェットが増えていると思いますが、次に紹介するのはそれらのクライミング特化版のようなもののようです。


Climbax: Climbing wrist bands that assess your skill by cassim ladha — Kickstarter

リストバンド型で両手に装着することで、クライミング中の動きをモニター及び記録してくれるっぽい。記録したデータがどのように視覚化されるかは以下のデモサイトが用意されているのでそちらを見てください。

http://www.climbax.co.uk/demo.html

これらのデータをどう活用すればいいのかはまだちょっとよく分かりませんが、持ってる人同士でデータを共有、比較とか出来ると面白い気がします。

ただ、実物を手に入れるための支援額が120ポンド(日本円で約2万円?)と、なかなかいいお値段です。また、どれだけ完成度高い状態で仕上がるのか分からないので今のところは見て楽しむだけに留めています。

まとめ

Kickstarterは今まで存在は知っていたものの実際に活用したのは今回が初めてでした。探してみると面白いものが転がってたりしそうだなあと思います。

ただ、自分が興味を持てそうなものをどう探していいのかまだよく分からないので、思い出したときにちょこちょこ使ってみようかな、というところ。

外壁初体験 in 鷹取山

この記事は #kabepy Advent Calendar 2013 十二日目のエントリです。
十一日目は @yotchang4s
#kabepy Advent Calendar 2013: #11 初心者のリードクライミングについて — Strawberry Field でした。

Pythonボルダリング部 外岩デビューの年

Pythonボルダリング部の2013年は外岩デビューの年でした。2012年から外岩行きたいねという話はしていたものの、難易度が易しい課題がどれくらいあるかよく分かっていなかったので、みんなある程度登れるようになってから行こうということにしていました。

外岩、つまりジム等の屋内の人工壁ではなく、山などの屋外にある自然岩を登ることですが、初日のエントリによると今年は計4回の外岩イベントが開催されたようです。

部活ではまだボルダーのみで、トップロープやリードクライミングはやっていないので、来年はこれらに挑戦するのも良さそうです。

今回は部活とは別に、個人的に外岩イベントに参加したときの話をします。

鷹取山ライミングイベントについて

今年の11月09日、ジム主催の外岩イベントに参加してきました。

都内最大級のボルダリングジムと言えばB-PUMP秋葉原が代表的ですが、その系列のB-PUMP横浜店が主催です。

鷹取山アウトドアイベント開催!!! | B-PUMP 横浜店ニュース

ボルダリングだけでなくロープクライミングの体験も出来るイベントです。
こういったイベントは、初心者で外岩は未経験だけど一度行ってみたいという人にオススメです。

もし自分たちで外岩に行こうと思ったら、

  • ビレイが出来なくてはいけない (ロープ/リードの場合)
  • 装備一式をそろえる必要がある(クラッシュパッド、シューズ、ロープ、ハーネス等)
  • 二人以上のメンツを集める

などのハードルがあり、始めたばかりの初心者には辛いものがあります。

その点、このようなジム主催のイベントの場合、クラッシュパッドやロープ、ハーネス等はジムが用意してくれるし、ビレイはジムのスタッフさんがやってくれます。
初心者だけど外で登ってみたいという人は、まずはこういうイベントに参加してみるのが手軽だと思います。

鷹取山の場所

場所はこの辺り。

鷹取山公園

鷹取山公園という公園になっており、基本的にクライミングは禁止ですが、鷹取山安全登山協議会という山岳団体に許可を貰えば登る事ができるという事になっているようです。

鷹取山でのクライミング

http://instagram.com/p/geXVlrCIPT/
トップロープではこの壁を使った

ライミングスポットとしての特徴は以下のページに書いてある通り。

鷹取山 | 山と溪谷社のクライミング総合サイト CLIMBING-net クライミングネット

トップロープ、ボルダー共にほとんどが垂直な壁で、足の置き方にけっこう気を使わないとすぐ行き詰まってしまう課題が多かったです。
ボルダーの場合は直上するだけの課題が多く、最後はマントルで上に登りきると完登となる感じ。数は少ないけどトラバースする長めの課題もあって、そっちはかなりやりごたえがあって良かったです。

鷹取山の岩は砂が固まったようなざらついたものが多く、かといってフリクションが利く訳でもない(表面がすぐに削れる為)のが特徴のようでした。御嶽の岩は固くてつるつるしたものが多いので新鮮でした。

参加した感想など
  • 寒かった。しっかりした防寒着が必要。ホッカイロ等持ってくとよさそう
  • レスト重要を実感した。トップロープでは思ったより腕の力が持って行かれてしまった
  • ロープクライミング難しい、でも楽しい!ルートが長い分、登りきった時の達成感は大きい
  • 岩の裂け目(クラック)を使って登るのは多少コツがいるけど面白かった

当日撮った写真はこちら。

https://plus.google.com/u/0/photos/116851818135367474418/albums/5950567989238039697

ジムスタッフによるレポートはこちら。

鷹取山アウトドアイベント≪リポート!!!≫ | B-PUMP 横浜店ニュース


また機会があれば、こういったジム主催の外岩イベントに参加してみたいです。


13日目は @Nakunaru さんにお願いします。

#kabepy ステッカーを作った話

この記事は #kabepy Advent Calendar 2013 二日目の記事です。

今年はPythonボルダリング部のグッズとして、

  • ステッカー
  • Tシャツ

の二つを制作しました。この記事ではグッズの素材として作った #kabepy ロゴと、それを用いて作ったステッカーの事を書きます。

ロゴのデザイン

グッズを作ろうという話が上がったのは去年の年末でした。最初は部長のたかのりさんが見つけたロゴジェネレータのサービスで作った中からロゴを決定する方針でした。

ほぼ一年前の話なのであまり覚えてないですが、おそらく「Pythonっぽくない」とか「ボルダリングっぽくない」とか思って、勢い余ってオリジナルロゴを作ってみたわけです。それがこちら。

何気ない風を装ってますが、自分ではかなりいいものが出来たと思ってたはず。デザインのポイントはこんな感じ。

特に、キャラクターのポーズに付いてはこだわりました。特に手足の角度とか重心とかにはかなり気を使って微修正を繰り返し、いちクライマーとして満足のいくフォームに仕上がったと思います!(つま先の角度とか背中のラインとかも!)

このロゴ案は無事採用され、これを元にステッカー向けのデザインも作成しました。以下は作成途中のデザイン。

ステッカーの発注

ステッカーデザインはけっこうだらだらとやっていたので、発注したのは3月に入ってから。いくつかの業者さんに見積もりを取ってみて、最終的に選んだのは以下の業者さんでした。

StickerAce.com, オリジナルステッカー作成専門店

ここに決めた理由は以下の点。

  • 値段が比較的安かった
  • ステッカーの質が良かった

元々この業者さんはPythonボルダリング部もお世話になっている connpass がステッカーを発注した業者として紹介されて知ったのですが、connpassのステッカーも非常にしっかりとしたものだったので、質の面では安心して発注出来たのでした。(上記サイトのギャラリーにもconnpassステッカーが事例として掲載されてました)

ステッカーの完成!

そうして出来上がったのがこちら。

いやー、なんというか。自分でデザインしたものがこうしてステッカーとして手元に届いたときはテンションあがりましたね。しばらく眺めてニヤニヤしてました。

出来上がったステッカーについては、基本的に部活に参加したことのある人に配布していますが、渡すたびに「これ俺がデザインしたんですよー(ドヤァ」してます。

まだ手元には50枚くらい残っているので、欲しい人はPythonボルダリング部に参加すればいいと思います。

そろそろ次のグッズも作りたいなー。何がいいかなー。

Django adminカスタマイズ : list viewで外部テーブルのカラムを使ってソートする

やりたい事

MemoモデルはフィールドとしてUserモデルへの外部キーを持っている。
MemoAdminのリスト表示では、テーブルヘッダのユーザの項目をクリックしたらユーザ名でソートして欲しい、というケース。

その場合、

    list_display = ['user', 'title']

で良いのかなと思いきや、userのpk(user.id)でソートされてしまっているようだった。

調べてみた

結果、カスタムフィールドの属性 admin_order_field にソートしたいカラムを指定すれば良いことが分かった。

http://stackoverflow.com/questions/2168475/django-admin-how-to-sort-by-one-of-the-custom-list-display-fields-that-has-no-d

試しに実装してみたサンプルコードは以下の通り。

サンプルコードにも書いてあるけど、検索対象フィールドの指定は

    search_fields = ['foreign_key__related_fieldname']

これで出来るので、ソートでも同じようにやろうとして一度躓く人はそこそこいるんじゃないかな。

クエリの最適化

カスタムフィールドで obj.user.username の様に外部テーブルを参照すると、レコード毎に一つクエリを発行していた。
サンプルコードでは、 queryset() をオーバーライドして select_related() で参照するフィールドを指定してやることで、リスト表示に必要な情報は一つのクエリにまとめることが出来た。

この部分

    def queryset(self, request):
        qs = super(MemoAdmin, self).queryset(request)
        qs = qs.select_related('user__username')
        return qs

ドキュメントあった

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

モデル自身に定義してもいいのかー。ModelAdminに書くやり方しか知らなかった。