くろねこ日記

ソフトウェアに関する技術メモが多いです.

PyConJP2014に参加しました(ざっくりと感想)

はじめに

今年もPyConJPが開催されました.今年も参加したので簡単にレポート書いておきます(今更). 今年は遠征費を頂いてお財布事情が助かりました.

チュートリアル

今回は,「サーチエンジン開発」に参加しました.

サーチエンジンはクローラ(ウェブデータ収集),インデクサ(ウェブデータのインデックスをつける),データの保存・管理(データベース)で成り立っており,それら技術の基礎的な仕組みと実際にそれらを実現したサンプルコードの中身を解説していく内容でした.

個人的に面白かったのは実際にそれらを実現するコーディングの考え方でした. 複数の独立したプロセスが互いに通信しあって動くようになっており,コード同士が疎結合になるように組まれていたことです(最近ブログなどで見られるマイクロサービスっぽい?).チュートリアルで配布されたサンプルコードではxml-rpcという標準ライブラリを使うことで実現しており,そのようなプログラムコードを頂けたので今後プログラミングを組む上で参考になりそうです.

4時間という時間制限があったことから中身の濃度が濃く良かったです.

1日目(9/13)

早速一日目がスタートするわけですが,出発する時間が遅く最初の基調講演には間に合わずぎりぎり最後のほうのスライドを見たくらいでした.質疑応答ではPython2系3系の話題が登っておりました.Python4はどうなるのかというPythonの未来について意見が飛び交っていたのは面白かったです.

Djangoによるスマホアプリバックエンドの実装

Djangoを使ったスマホアプリ向けのサービスを構築する上で問題となる箇所,それを解決へ導くツールの話でした. 個人的にはDjangoを普段使うことはないのですが,以下のライブラリが良さそうでした

django-bootstrap-formは非UI/UXデザイナがちょっとリッチでかっこいいformを作るときに便利なライブラリです.

ライブラリを扱ったりデータベースと連携して使うには便利そうですね.

Djangoアプリケーション、パフォーマンスチューニング

Djangoでウェブアプリを組むときのパフォーマンスチューニングをする上で捗るツールの紹介とケースごとにツールを適用する手本などが紹介されておりました.Django使ったことがない僕にはついていけるか心配でしたが,プレゼンが上手なこともあってある程度話についていくことができました.

Djangoに限らずウェブアプリを作るときにはデータベースのクエリ発行のタイミングなどがパフォーマンスに大きく関わってくるようで,そこのボトルネックを見つけたりする上でのツールの使い方を丁寧に紹介してくれました.

ただ,ツールに頼るよりもちゃんとデータベースの設計など実装前にきちんとデザインすることが一番パフォーマンスに影響を与えるのでそこをしかりしないとならないというのはやっぱりそうだなと思いました.

Micro Python で組み込み Python

Micropythonの使い方からデモまできちんと見せていただいて良かったです. 使い方こそわかっても実際に動いてくれるとそれだけで説得力を持ちますね.

発表者自身がガジェットルネサスのボードに移植していたりとやっていることも濃くてすごかったです. あと,マイコンがここまで簡単になると悲しいなみたいなことをいっていて共感しました(汗)

フリースペース

フリースペースではWebフレームワークの話題やサーバのプロビジョニングの話題,ドキュメンテーションの話題,雑談など技術ごとにテーブルが分かれておりました.

発表のみに顔を出すと聴くだけになってしまいお互いにコミュニケーションを図ることが難しいですよね. こういうスペースを設けることで他のエンジニアと交流できるので面白い試みだと思いました.

ちなみに,Webフレームワークの席に座ったのですが,なぜかJS/Linuxの話題やLinuxディストリビューションの話題で盛り上がったり,ウェブフレームワークを使わずにウェブ系の開発をしている人と会話したりとバラエティに富んでました.フレームワーク関係ない話のほうが多かったかもしれませんが,普段なかなか聞けない話も聞けたので良かったです.

パーティ

一日目の終わりにパーティが開かれました.今年は参加料金にパーティ代金も含まれているようで参加者全員が対象になりました.

始まった直後はもくもくとビールを呑みながら,このようなことをtwitterに投稿したら,つぎのような返信がきて嬉しかったです.

なかなか知らない人に話かけるのは勇気が入りますし,一体何を話していいのかわからないとは思いますがこういうカンファレンスでは様々な人と交流しないと利益があまり得られないのでお互いこういう風にコミュニケーションを図る雰囲気があるのは良いことですよね.

2日目(9/14)

前日の反省を活かして早めに寝たのですが,夜中の3時頃に起きてしまいました.そこから眠れずにオライリブースで購入したカードゲームの説明書を読んだり,ネットサーフィンしてから寝たせいか,起きてみると10時30分でした.すでに貴重な基調講演を聞けず(汗)ジョブフェアとポスタセッションが見られるか怪しい時間でした.結局会場入りしたのが12時30分ごろで弁当を食べるところからスタートしました...

Pythonとscikit-learnではじめる機械学習

機械学習の初歩的なところから話が始まり丁寧な発表でした. ただ途中で発表が終わってしまったのが残念で最後まで聞きたかったです. とりあえずscikit-learnは便利というのがわかったので何かの機会で使ってみたいですね.

企業ブース

ジョブフェアには間に合いませんでしたがジョブボードをみてあっちこっち話を聞いてまわってきました. 結構思い切った話もできてよかったです.

他のブースではpepperというロボットとちょっと遊んでみたり,コードの組み方なんかも教えてもらいました.GMOのブースでは3000円分のVPSチケットを頂きました(数ヶ月前のOSCでも貰った気する(汗)).

他にもいくつか回ったりました.

休憩

企業ブースの近くでは雑談している人を何人か見かけたので交流してきました. @nonnoiseさんは昨年も御会いしましたが,ハードウェアとソフトウェアの連携をやっていて今年も面白かったです. ウェブ上のボタンをクリックしたらLEDが光るというものなのですが,そのボタンの挙動がおかしくて笑ってしまいました. 密かにフレームワーク公開されるのを楽しみにしてたりしてます.

Sprint(9/15)

今年も開発Sprintが開かれました. 場所は品川のマイクロソフトのオフィスでした.なかなか行く機会もなかったので行けてよかったです. 有限ドリンク飲み放題という太っ腹な対応で良かったです.

今年も昨年お世話になった@hktechnoさんがリーダを務めるmicropythonグループに混ってました. 秋月で購入したSTM32F4Discoveryにmicropythonを書き込んでオーディオをマイコンから出すというのに一日かけてました.

残念ながら,PullRequestを投げないとならない問題に遭遇したりと音を出すところまでは行けませんでしたが,あんな風にワイワイと開発することも少ないし今年も面白かったです.

おわりに

今年もPyConJP2014面白かったです.

開催中にお世話になったスタッフや参加者の皆さんありがとうございました.

全体を振り返ると聞いた発表が少なかったかもしれません.それには理由として一つは寝坊したことと(汗),もう一つはこういう勉強会では人との交流を重点に置いていたからです(発表を聞くのはネットでも視聴できるが,交流は難しい.)

なので個人的にはフリースペースや休憩場所などが設置してあったことやパーティがチケットに含まれていたのは好印象でした.

来年も参加できたらしたいです.

あと何か発表できそうなネタがあればスピーカ応募再挑戦したいです.

LevelDBをPythonのPlyvelライブラリで操作してみた

はじめに

levelDBというGoogleが開発したKey-Value-Store型のデータベースがあります. 操作は極めて簡単で,put,get,deleteくらいしかありません.

今回はそれを使ったときのメモを残しておきます.

LevelDB

LevelDBはosxであればbrewからインストールができます

brew install leveldb

plyvel

plyvelはLevelDBを操作するためのPython用のライブラリです.

py-levelDBというライブラリもありますが,plyvelのほうがドキュメントが整っていたので今回はplyvelを使用しました.

Plyvel — Plyvel 0.9 documentation

このライブラリではKeyとValueはバイト列型で渡さなければ扱うことができません.ですので,文字列などは一度バイト列型に変換してから書き込む必要があります. そこを今回はjsonを使って実現しました.

やってみる

さっそくやってみます. 今回は辞書型のデータをjsonでバイト列型に変換してlevelDBに格納,格納したデータをバイト列型から辞書型に直して出力しようと思います.

コード内容は以下の通り

  • plyveldbという名前のDBを生成(または接続)します.

  • このデータをDBに入れます.

    • Key: key1
    • Value: {'foo': {'bar': ('baz', None, 1.0, 2)}}
    • Key: key2
    • Value: {'ham': 'egg'}
  • 読み込みは

    • 全件取り出し
    • key1のデータ抜き出し
#coding: utf-8
import plyvel
import json

db = plyvel.DB('./plyveldb/', create_if_missing=True)

js = json.dumps({'foo': {'bar': ('baz', None, 1.0, 2)}})
db.put(b'key1', js.encode())

js = json.dumps({'ham': 'egg'})
db.put(b'key2', js.encode())

for keydata, val in db:
    print(keydata)
    print(json.loads(val.decode()))

readdata = json.loads(db.get(b'key1').decode())
print(readdata)

ちょっとコードを解説すると

js = json.dumps(辞書型)
db.put(キー, js.encode())

という形でjson形式にして,バイト列型に変換しているのです.

取り出しは

readdata = json.loads(db.get(キー).decode())

これでdb.getをstrに変換し,JSON形式に変換してます.

これで扱うときにはjsonとしてデータが使えるので便利ですね.

まとめ

LevelDBをPlyvelライブラリを使った操作についてメモした.

micropythonをSTM32F4DISCOVERYにインストール

はじめに

micropythonはarmマイコンのSTM32F4チップ用に作られたファームウェアです.

今日はSTM32F4DISCOVERYというマイコンボードにmicropythonをインストールして,Lチカするところまで紹介します.インストール作業に使うマシンはMacOSXで行ないます.

なお,この内容は先月開かれたPyConJP2014の開発スプリント中に行なった内容をメモしたものです.micropythonの良さや簡単な使い方についてはスプリントリーダであり,今年のpyconjpで面白い発表をしてくれた@hktechnoさんあたりの動画やスライドを見てください.

Micro Python で組み込み Python

CR04 Micro Python で組み込み Python (ja) - YouTube

ボード購入

秋月から

STM32F4DISCOVERY: マイコン関連 秋月電子通商 電子部品 ネット通販

STM32F4DISCOVERYを購入しましょう

ビルド環境の設定

まずは,micropythonをビルドするときに使うgcc-arm-embeddedを導入しましょう. Linuxの方はaptやyumを叩けば入ると思いますが,osxの場合はbrewでなぜかコケたのでこちらからバイナリ

https://launchpad.net/gcc-arm-embedded/+download

をダウンロードしましょう.そのあとは解凍してテキトーなディレクトリにコピーまたは移動して,そこにpathを追加してください.

次にmicropythonに書き込むためのライタ(ソフトウェア)を用意します. dfu-utilというのがありまして,homebrewからインストール可能です

brew install dfu-util

やってみる

とりあえず,まずはここまでの流れをやってみます.

マシンのシステム環境は以下の通りです

  • OSX(Marvericks)
  • zsh
  • homebrew

gcc-arm-none-eabiのバイナリはhome以下に置くとします.

/opt以下に置きたい場合は適宜読み替えて行なってください.

なお,curlでダウンロードするものはこの記事が出てから時間が経つと落とせなくなる可能性があります.もしリンクが切れていたら適宜修正してください.

では以下作業内容

brew install dfu-util
cd ~/
curl -L -O https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2
tar xvf gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2
cp -r gcc-arm-none-eabi-4_8-2014q3 ~/gcc-arm-none-eabi
echo 'PATH=$PATH:$HOME/gcc-arm-none-eabi/bin' >> ~/.zshrc
exec $SHELL -l

これだけです.

micropythonをビルド

micoropython本体はgithubに上がってますので,ダウンロードしてビルドすればOKです. ビルドの際には今回使うマイコンをオプションで指定する必要があるので注意です. micropython/micropython · GitHub

ビルドしたらdfu-utilを使って購入したボードにインストール作業に移ります.インストール前に,まずはボードの裏側にあるジャンパピン二つのうちどちらかを取って,p2側の21pin-22pin(BOOT0とVDDのところ)に刺します.そのあとボードをパソコンに繋ぎましょう.繋ぐときにはmicrousbとminiusbの2ポートがボードから出ていると思うので.二つともパソコンに繋ぎます.

やってみる

今の内容を実際にやってみます. なお,ボードは予めパソコンと繋いでおいてください.

git clone https://github.com/micropython/micropython.git
cd micropython/stmhal
make BOARD=STM32F4DISC
dfu-util -a 0 -D ./build-STM32F4DISC/firmware.dfu

これだけです. ここまで済んだらp2の21pin-22pin(BOOT0-VDDのところ)に刺してあるジャンパピンを元の場所に戻しておきましょう.

Lチカで遊ぶ

無事に済めば

/dev/tty.usbmodemなんとか

というデバイスを検出すると思います.

シリアルターミナルソフトウェアでそのポートに接続すればOKです. ここではpyserialに付属してくるminiterm.pyを使って接続します.

やってみる

pip install pyserial
exec $SHELL -l
miniterm.py /dev/tty.usbmodemなんとか

これだけでインタラクティブシェルが立ち上がると思います. このインタラクティブシェルはマイコンボードで動いております(すごい時代だ).

ではLチカしますね.

led = pyb.LED(1)
while True:
    led.on()
    pyb.delay(1000)
    led.off()
    pyb.delay(1000)

これだけです.

なお,気づいたかもしれませんが,USBフラッシュメモリのように,ボードがマシンにマウントされます.このなかにmain.pyというのがありまして,そこにコードを書いても動かすことができます.

まとめ

micropythonをSTM32F4DISCOVERYにインストールする手順をざっくり紹介しました.

サーバ管理ツールAnsibleを使ってみた

はじめに

raspberrypi上でansibleを試してみました.

実際に試してみたときの設定手順などをメモしておきます.

ansibleとは

Pythonで作られたサーバ構成管理ツールです.他にはRubyで作られたchefが有名です.

このツールの目的はサーバの管理を自動化するところにあります.サーバを管理するときにシェルスクリプトにサーバ設定を記述して実行したという経験をお持ちの方がいらっしゃるかもしれません.またはマニュアルに必要な設定を書いて読みながら設定された方もいらっしゃると思います.ansibleはそれらの内容を自動で行なってくれるものです.

でも,自動で行なうだけではシェルスクリプトを走らせるのと違いがありませんね. シェルスクリプトで管理するのとは決定的に違う良さとしてこれらのツールのには羃等性というのがサポートされています. 羃等性とは何回実行しても一つの結果に収束する性質のことらしいです. 例えばシェルスクリプトを2回実行すると2回分処理をすることになりますが,ansibleでは一度行なった処理を行いません.

さらにシェルスクリプトのようにわざわざマシンにscpで設定のシェルスクリプトファイルを転送してsshでログインして実行ということをしなくてもansibleは自動でsshを利用してセットアップをしてくれます.もちろん複数のサーバに対しても同時に行なうことができて,ansibleで複数台のマシンに同じ内容を実行させるということが可能です.

ansibleはpythonで書かれておりますが,chefのようにrubyを使うということもなく,yamlさえ記述できればすぐに扱えるというのも特徴の一つです.

対象マシンの情報と行なう内容

今回の対象マシンは次のようになっています.

  • マシンはローカルホスト上で繋ったマシンを想定します(SSHでアクセス可能).

  • ユーザ名はpiという名前です

  • パスワードはかけています

実施内容は次のようになっています.

  • Aptを使ってpython3とgitをインストール
  • python3のpipを使って以下のライブラリをインストール(あくまでも例です)
    • pyserial
    • numpy
    • flask

ここまでを行ないます.

Ansibleのセットアップ

ansibleはpython2のpipからインストールができます.

pip install ansible

python3ではansibleは動作しないので注意してください.

次にセットアップ対象マシンのIPアドレスを設定します. ホームディレクトリ上にansible_hostsというファイルを次のように設置します.

touch ~/ansible_hosts

今はansible_hostsというファイル名にしましたが別なファイル名でも可能です. 特に当たり障りがなければこのファイル名で問題ないでしょう. ansible_hostsのなかに対象マシンのIPアドレスを設定します.

[raspi]
192.168.1.3

IPアドレス(192.168.1.3)は今回はローカルホストのものを指定しましたが,各自で値を入れてください. [raspi]と書いたのはansibleで自動実行するときにマシンを選ぶときの識別に使います.ansibleは複数のマシンに対してセットアップを行なえるので,このように任意の名前で管理ができます.名前のつけかたはさまざまあるようですが,ここではシンプルに対象マシンの名前だけをつけておきます.

つぎに設置したファイルの場所をbashrcやzshrcなどのシェル設定ファイルに書き込みます.

このようにexportを追加すれば良いです.ここではzshrcに書き込むものとします

echo 'export ANSIBLE_HOSTS=~/ansible_hosts' >> ~/.zshrc

これだけです.あとは忘れないようにシェルを再度読み込んでください.

対象マシンのセットアップファイル作成

セットアップファイルはyaml形式で書くことができます. yamlの書き方は

Rubyist Magazine - プログラマーのための YAML 入門 (初級編)

このあたりが詳しいと思います.

ここでは例として書き上げたyamlファイルにそって解説していきます.

今回の設定は再掲すると

  • Aptでpython3とgitをインストール
  • pip3でライブラリのインストール

ですね.

yamlで書くとこのようになります

- hosts: raspi
  user: pi
  sudo: yes
  vars:
    pippackages:
      - pyserial
      - numpy
      - flask
  tasks:
  - name: Apt
    apt: name=python3 state=installed
    apt: name=python3-pip state=installed
    apt: name=git state=installed
  - name: pip install
    pip: name={{ item }} executable=pip-3.2
    with_items: pippackages

順に解説すると先頭にあるhostsというのは~/ansible_hostsで設定したときの名前を指定してます.

yamlでは

- hosts: 値

のように書きます.

次にvarsとtasksと呼ばれる部分がありそれぞれ入れ子として記述してます.

varsとtasksの関係を説明すると,varsはセットアップファイルで実行するときに使う変数を記述する部分です.ここで変数という形で設定などを記しておくことができます.tasksでは実際にサーバ上でどのような操作をするのかを記述する部分です.ですので,varsはtasks上で使用される変数となります.

varsは

  vars:
    pippackages:
      - pyserial
      - numpy
      - flask

と,varsの入れ子としてpippackagesというのがありますね.これは僕が今回つけたpipで導入するライブラリ名を示す変数名です.今回はpyserialとnumpyとflaskをインストールするのでpippackagesに記述しておきました.

tasksは

  tasks:
  - name: Apt
    apt: name=python3 state=installed
    apt: name=python3-pip state=installed
    apt: name=git state=installed
  - name: pip install
    pip: name={{ item }} executable=pip-3.2
    with_items: pip packages

と,tasksの入れ子ではAptを使ってpython3とpip3,gitをインストールし,pipでvarsに記した変数を呼んでインストールしてます.

yamlの書き方として補足しておくと

- name: 実行内容の説明文
   実行内容
- name: 実行内容その2の説明文
   実行内容その2

となっており,「name: 」の後に書くものはコメントを記述し,その下に実行内容を記述してください. 先頭のnameでは「Apt」というコメントを書いておきました.そこでは「apt 」というansibleが用意したモジュールをつかってpython3とpip3,gitをインストールします.

なお,Ansibleではセットアップで使うことが多いモジュールが用意されておりそれらをつかって作業を行ないます.例えばAPTでインストールするときにはansibleが用意しているaptというモジュールを使うことでインストールできますし,pipでインストールするときにはansibleが用意しているpipというモジュールが使えます.もしdebian系ではなくredhat系ならyumをつかってパッケージをインストールしますからyumというモジュールを使えば良いでしょう.その他スクリプトを実行するscriptモジュールやgitを動かすgitモジュールなど非常にたくさんのコマンドが存在しております.

ansibleが用意しているモジュール情報は

Module Index — Ansible Documentation

で調べられたり,具体的な使い方の情報はansibleをインストールするときに付属してきたansible-docsというコマンドで参照できます.

もちろんscriptsやcommandに書くこともできますが,その場合羃等性が崩れる恐れがありますので極力ansible側で用意したモジュールを利用しましょう.

また,pipでインストールする箇所に「with_items: 」というののが見えますね.これはリストを一つ一つ取りだす便利な記法です.ansibleの設定を記述する上で便利な書き方がいくつか用意されておりまして,ここではその一つとして使ってみました.pippackagesに記述した「pyserial」や「numpy」,「flask」という文字列を順に取り出し{{ item }}というところに渡しています.波括弧でitemというのを囲うのはjinja2をつかったことのある方にとっては馴染みがあると思います.

実行

ここまでくればさきほどのyamlファイルのあるディレクトリの上で実行するだけです. 今回のyamlファイル名は「playbook.yml」としておきます. 対象マシンが設定通りのネットワークに繋がっている状況で,以下のコマンドを実行します.

ansible-playbook playbook.yml -v

このときsshにパスワードをかけているのでしたら次のようなオプションをつけてください. パスワードが聞かれるので打てばOKです.

ansible-playbook playbook.yml --ask-pass -v

これでさきほど設定したaptでのインストールやpipをつかったライブラリのインストールが開始されます.

おわりに

今日紹介した内容は

Amazon.co.jp: 入門Ansible eBook: 若山史郎: Kindleストア

を参考にしました.

ここでは紹介していないansibleをつかう上で便利なモジュールが紹介されていたり,yamlを書く上で便利な書き方などが載っております.ansibleは日本語情報が少ないのでこういう書籍は貴重ですね.僕はansibleを使うときにこの本を片手に書くことが多いです.

matplotlibのグラフ本体を保存する

はじめに

pythonにはmatplotlibというグラフを扱えるライブラリがあります.

このライブラリでは手軽にデータをプロットしてグラフを生成できるのですが,Xの機能にはグラフを画像としてエクスポートする機能しかなく,グラフ本体を保存するということができません.

そこでpickleというツールを使うことで簡単にグラフ本体を保存することができるので今日はその使い方をメモしておきます.

頻繁に使うのですがよく忘れてしまうので...

pickleの使い方

pickleはmatplotlibをインストールした段階で付属してくると思います. ここでは簡単な線形グラフを保存してみます.

グラフ書き出し

import matplotlib.pyplot as plt
import pickle

x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 2, 3, 4, 5]
fig = plt.plot(x, y)
filename = open('test.pickle', 'wb')
pickle.dump(fig, filename)
filename.close()

これだけでtest.pickleというファイル名で保存されます. 保存のときにはバイナリで書き出す必要があるので,'wb'の箇所は忘れないようにしてください. もし

filename = Open('test.pickle', 'w')

だとバイナリを文字列として扱えないというエラーがでてしまうので気をつけてください

グラフ読み込み

import matplotlib.pyplot as plt
import pickle
filename = open('test.pickle', 'rb')
fig = pickle.load(filename)
plt.show()

これで読み込めると思います.グラフが描画されたのを確認してください.

まとめ

matplotlibのグラフ本体を保存する方法を紹介した.

これで後からグラフだけ編集ができるようになったので便利.

VimのコンパイルとJedi-Vimの設定と第二回Sapporovimのお礼

はじめに

Vimコンパイル(オプション指定をメモ)とjedi-vimではまったところをメモしておきます.

というのもhomebrewやバイナリ配布のVimではpyenvにあるpythonパスを読んでくれないためにjedi-vimがうまく動いてくれなかったからです.

そこで今回は解決策の一つとしてらぁさんが作っているvimenv(https://github.com/raa0121/vimenv)を使ってvim7.4を導入して,そのときにビルドすることで~/pyenv/shims以下を呼ぶようにします. そのあとにjediのインストールを行なって補完なども効くようにするというものです.

何度かこの方法を使う機会がありました.そのたびに,コマンド履歴を参照して調べるのがツラいので今日こそメモしておきます.

あとここに書いてあることは第二回Sapporo.vimで@thincaさんと@raa0121さんに教えていただきましたのでここでお礼を述べさせていただきます.

ありがとうございました!

vimenvの導入

vimenvは次のような手順で導入してください

git clone https://github.com/raa0121/vimenv.git ~/.vimenv

そのあとにこちらのブログで紹介されているvim-buildを導入します http://yasu-n1.hatenablog.com/entry/2013/10/03/201819

cd ~/.vimenv
git clone https://github.com/yasu-n/vim-build.git ~/.vimenv/plugins/vim-build
exec $SHELL -l

ここまで行ったら次にvimのビルドを開始します.ただし,pythonとタイプすると~/.pyenv/shims/pythonから呼べるようにしておいてください.

今回のvimはluajitもオプションに加えようと思います. 僕の場合,luajitは以下のようにluaenvで導入したものを使ってます.

luaenv install luajit-2.0.3
luaenv global 2.0.3
luaenv rehash

ではここからvimenvでvimをインストールしましょう.

vimenv install -- --with-compiledby=kuroneko --enable-pythoninterp --enable-perlinterp --enable-python3interp --enable-rubyinterp --with-lua-prefix=/path/to/.anyenv/envs/luaenv/versions/luajit-2.0.3 --enable-luainterp --with-luajit --enable-multibyte --enable-fail-if-missing

長いですがこんな感じです.

jediでつまづいたところ

jedi-vimpythonを強力に補完したり,pydocをコード中に参照してくれるプラグインです.

ただし,jediはvim上で動くpythonpathから参照するため,pythonpathの設定をやらないでおくとコード補完がうまく効かない恐れがあります. 僕はしばらくの間これで悩んでいたのですがPYTHONPATHの設定を追加しておけば良かったようです.

たとえば,pyenvの3.4.1のライブラリをjediに参照させたいなら zshrcかbashrcの上で

export PYTHONPATH='/path/to/pyenv/versions/3.4.1/lib/python3.4/site-packages/'

の一文を追加するだけです

これでvimを起動して

:python import sys;print(sys.path)

で今追加したPATHが表示されることを確認してください.

第二回Sapporo.vimへのお礼

今日書いた内容は第二回Sapporo.vimもくもく会に参加したときにやっていたことです. PYTHONPATHがvimからうまく参照できてないところについてはthincaさんに教えていただきました(quickrunで有名な方が向かいの席でびっくり...).vimenvの紹介と使い方はらぁさんに教えていただきました.

勉強会は2時間程度遅刻したこともあって(くろねこ界の最長記録樹立!),もくもくタイム自体は少なかったのですが,有益な時間を過させていただきました.

ただ,会場についてから,自宅同然にもくもくしてしまったので勿体ないことをしてました(ただ,もくもくするのは勿体ないという声が聞こえてきましたがその通りですね).もうちょっと他の人とも交流できればよかったのですが,タイミングが掴めませんでした(このあたりコミュニケーション能力の低さが顕著に表れてますね...).またお会いする機会があれば楽しみにしております.

この日は発表もあって,@supermomongaさんがEmacs上でVimと同等の動作をさせることができるEmacsEvilの発表(Evilの今後に期待),@Linda_ppさんがVim初心者向けに講座を開いてくれました(わかりやすかったです).

ありがとうございました.

まとめ

vimenvでvim導入してみた.

jediのはまったところをメモ

第二回Sapporo.vimの感想とお礼,

PyConJPの告知とCFPが補欠だった件について

はじめに

今年もPyConJP2014が9/12~9/15に開催されます.

今回はPyConJP2014の告知のつもりで記事を書きます. というのも遠方者支援のアピールポイントに「ブログでの告知も行ないます」と書いたこともあったので後に引けなくなったからです.

PyConJPはチュートリアルと開発スプリントを含めると4日間となります.昨年,参加した僕が会場の雰囲気を紹介することで,PyConJP2014への参加に興味を持っていただければと思います.

また,CFPへの応募を今年はやってみました.応募するときに細かな項目があり,どんなことを書いたのかを載せておこうと思います.ただし,アクセプトはされず,補欠枠に回ったので発表できる可能性が低くなりました.反面教師として読んでいただければ良いと思います.

昨年のPyConAPAC

昨年開催されたのはPyConAPACであり,PyConJPではありません.しかしながら,チュートリアル→コアのカンファレンス2日→開発スプリントという構成みたいですし,APACと日程的に似ているので同じと考えても良いと思います.

チュートリアル

チュートリアルでは2コースのうちどちらかに参加することができ,僕はdjango入門のチュートリアルに参加しました.参加の動機としては僕自身Webフレームワークを使った経験が殆ど無く,前々から興味こそあったけれど手が出てなかったのでチャレンジしてみようという気持ちで参加しました.

実際に業務でdjangoを日頃から使っているプロフェッショナルの方に昼から夕方までみっちりハンズオン形式で教えてもらえます.値段にするとPyConへの参加費用よりも高いのですが,値段に比べて内容がだいぶ得だと思います.

具体的にはECサイトをハンズオン形式で作ってみようという内容でした. django初心者向けに使い方がまとまった資料(紙ベース&電子ベース)が配布されました.その資料を元に解説&演習が進んでいきました.

ハンズオン形式なので,進めていく段階でエラーが出てもすぐに聞けます.当時の僕ならエラーを読んでもピンと来なかったような気はするので初歩的なエラーで一日潰していたと思います.そんなときに講師の方にすぐに聞いてエラーの潰し方とかコツを把握できるというのは,時間短縮だけでなくウェブや本では学べないポイントの一つですね. おかげで資料の最後まで到達して一通りECサイトを手元で動かすことができて良かったです.

それから,昨年はチュートリアル後に懇親会も開かれました.チュートリアルだと定員枠が決まっており人数も少ないので,北海道からボッチ参加した僕にとっては知り合いを増やす良い機会でした. チュートリアルの懇親会だと人数が少ない分,参加者の影に隠れることが少なく,話をするきっかけが多いので案外穴場のような気がします(残念な人理論ですが).実際に数人の方と知り合いになり,残りのカンファレンスでは充実して過すことができました.

PyConJPに参加するときにはよかったら@kuroneko1988と書かれた参加証を見かけたら声かけてくれたら嬉しいです.

今年は https://pycon.jp/2014/tutorials/ にあるように - サーチエンジン開発 - Pythonの基礎研修 - PyData入門 のようです.

まだ応募してませんが,今年もどれかに参加したいです.

カンファレンス本体

チュートリアルの翌日から2日間はPyConJPのコアとなる部分です.実際に参加人数はチュートリアルとスプリントでは数十人でしたが,数百人規模となります.

基調講演も開かれており,Dropboxの開発者とSphinxの開発者の講演でした.面白かったです. カンファレンスの発表自体,英語発表が多めではありましたが,基調講演では同時通訳もあるので,英語が怖い人は通訳で聞いても良いかもしれません.でも日本に居ながらして英語と日本語が混る機会ってあまりないので,生英語を聞いても良いかもしれませんね.僕は英語得意ではありませんが,IT系の話題は横文字が多いので英語で聞いてもわかる場合が多いです.

それからランチタイムは多数の出席者が居てジョブボードや書籍販売コーナを覗いてみたりしました.

あとは企業ブースがかなり出展していて,ドリンクとかチョコレートを頂いたり,bitbucketTシャツを頂いたりもしました.

開発スプリント

開発スプリントはレベルが高くて参加するか悩むという声をチラホラ聞いていましたが,折角なので参加してみました.実際にはもくもく会+テーマが設定されているという形式でした.sphinxの翻訳をテーマにして動いているところもありましたし,人によってはもくもくと開発している人も居て放牧的な雰囲気があって良かったです.

もくもくしているだけだと自宅で作っているのと変わりないということがあるので,テーマがあるのは良いことだと思いました.もちろんもくもくしたい人は黙って作業するのも良いですね. それから開発スプリント中は他のセッションを覗いて息抜きをしたりと話かけやすい雰囲気があって良かったです.

僕はMyHDLを使ってみるという内容にしました.MyHDLはPythonでHDLコードを書けるというもので,Pythonで書いたコードがFPGAの上で動きます.FPGA自体は聞いてこそいたのですが,触ったことすらなかったので,初歩の初歩から教えてもらいました(ご迷惑おかけしました(汗)).

テーマの目標としては簡単なパイプラインを作って入力した2つの数字を四則演算するというのを作ることになりました.結果的にはタクトスイッチを押すとクロックのHIGHになり,ボタンから話すとクロックのLOWに落ちるという形を利用して人の計算速度よりも遅い計算機を作ることができました.

CFPの応募

PyConAPACに参加して多少意識が高まったところで今年はスピーカとして応募してみることにしました.事前に倍率が高そうな印象は受けていたので,ダメ元での応募でした.

前述した通り補欠枠になったので,もし読んでいる方でCFPに来年は応募するぞという方がいらっしゃいましたらこれを多少なり参考にされて挑まれることを期待してます.

とりあえず書ける範囲で載せておきます,

カテゴリ
GUI Programming / GUI プログラミング 

言語
Japanese 

Python レベル
初級 

対象者
デスクトップアプリケーションを作ったことのない方やkivyというライブラリを知らない方,kivyを知ってはいても具体的な使い方を知らない方を対象としております. 

目的
kivyというデスクトップアプリケーションの紹介,kivyを利用したデスクトップアプリケーションの作り方です. 

時間枠
30分枠希望

説明
デスクトップアプリケーションを開発するためのライブラリは様々存在しますが,今回はクロスプラットフォーム対応のデスクトップアプリケーションフレームワークkivyの簡単な使い方を紹介と個人的に使用した事例についてお話します. 

概要
デスクトップアプリケーションを開発するためのライブラリは様々存在しますが,今回はクロスプラットフォーム対応のデスクトップアプリケーションフレームワークkivyの簡単な使い方を紹介と個人的に使用した事例についてお話します.kivyの概要から導入,簡単なコードを紹介して作り方を知っていただこうと思います. 
具体的にはHelloWorldからタイマを利用したデスクトップアプリケーションを紹介させてもらいます.
最後に実際にkivyを利用したデスクトップアプリケーションの紹介をさせていただきます. 

アウトライン
    発表内容
    kivyの概要
    kivyでHelloWorld
   タイマを動かしてみる
   これまでに作製した内容を紹介
   まとめ 

追加情報
 

メモ

こんな感じですね.

応募したときの感想として項目が多いということです,発表者名・言語・対象・発表時間・概略くらいのものだと思っていたのですが,アウトラインや目的に至るまで細かく設定されています.すでに準備万端な人であればスラスラとかけると思いますが,今までやったのをせっかくだし発表してみようかなとぼんやりしたイメージでの応募ではアクセプトまではキツかったかもしれません.

アウトラインや目的の部分については概略に書いてしまっているのでだいぶ重複しており,そこが落されたポイントの一つかなという気もします.

あとは内容もkivyでデスクトップアプリの作り方を紹介してもググったり書籍を読んで何とかなるので,アクセプトされるほどの面白みには欠けたかもしれません.

そんなところでしょうか.CFPについては書き方自体をそもそも悪かったところも多いでしょうし,ここに書いてあるのはあくまでも憶測です.反面教師にして,ちょっとでも足しにしてくれれば嬉しいです.

まとめ

PyConJP2014のちょっとした宣伝のつもりで,昨年のPyConAPACの様子を書いてみました.

CFP応募した内容を載せてみました.

追記

ブログ公開した直後に次のようなご指摘がありました.

アクセプト枠,補欠枠,リジェクト枠の3つがあったんですね.ご指摘感謝.

そのため本記事の一部を修正・変更しました.