Docker mysql container with dynamic database creation

jwilder/nginx-proxyでは,コンテナの環境変数に応じて動的にReverse Proxyの設定をしてくれます.

jwilder/nginx-proxy · GitHub

同じかんじに,コンテナの環境変数に応じて動的にデータベースの作成や,ユーザの作成を行ってくれるコンテナを作ってみました.

nanofi/docker-mysql · GitHub

使い方

コンテナを起動します.

$ docker run -d -v /var/run/docker.sock:/var/run/docker.sock -e MYSQL_ROOT_PASSWORD="password" nanofi/mysql

MYSQL_ROOT_PASSWORDはrootのパスワードを設定します. このコンテナは,環境変数DB_NAMEを設定したコンテナがあるとき,もしくは立ち上がった時に自動的にその名前のデータベースを作ります. また,DB_USERDB_PASSも設定されていた場合は,作成したデータベースに対する全権限をもったユーザを指定されたユーザ名とパスワードで作成します.

Rails4 / turbolinksのローディングをnprogressで簡単に

最近趣味的にRails4も色々触ってみているんですが,turbolinksは面白い反面,制御が難しいです. turbolinksの解説は,ぐぐるとたくさん出るので,そっちを参照しましょう. 簡単に言うと,pushStateの機能を使ってJavaScript経由でリンクを取得することで,jsやcssメタデータの読み込みを省いて高速化させるための機能です. ページの読み込みをAjaxを使って行うので,色々できることがあるのですが,今回はYoutubeのようにページ遷移に読み込み中を表すプログレスバーを表示させる方法を紹介します. この機能を実装するために,NProgress.jsというライブラリを使います.

上のリンクから,デモが見れます. 画面上部全体にプログレスバーが表示されているのがわかると思います. このプログレスバーの実装が,nprogress-railsというgemを使うと簡単にできます.

環境

  • Rails4 (turbolinks: on)

使い方

Githubそのまんまですが,使い方は以下のようになります.

Gemfileに以下の内容を記述します.

gem 'nprogress-rails'

そして,bundle install

まず,Javascriptの読み込みの設定を行います.application.js.coffeeに次の内容を記述します.(もちろん,application.jsでも大丈夫です.その場合は,#=ではなく//=)

#= 'nprogress'
#= 'nprogress-turbolinks'

turbolinks以外にも,pjaxや直接使う方法もあるみたいです.

次に,cssの読み込みの設定を行います.application.css.scssに次の内容を記述します.(こちらも,application.cssで大丈夫です.)

*= require nprogress
*= require nprogress-rails

これだけです.これで,ページ遷移時に画面上部にプログレスバーが表示されていると思います.

PythonのPickleで関数を扱う?方法

久しぶりの投稿です.かなりほっぽっていましたが, なんとなく思い出したので書いてみようと思います.

最近は研究のコードをPythonで書くことが多いので,pythonの話題です.

Pickle for function object

今日の話題ですが,pythonシリアライズ機構であるpickleついてです.pythonのpickleはオブジェクトをシリアライズしファイルなどに保存できる形に変換できます.ただ,すべてのオブジェクトに対応しているわけではなく,関数オブジェクトなどはシリアライズできません.

今回は,関数オブジェクトをシリアライズできる?ようにしてみました.一応動きますが,ちゃんとしているのかは保証できません.

とりあえず,コードをあげときます.気が向けば,解説書きます.

Code

コードをGistにアップロードしておきました.

The code be enabled to pickle the function

Direct2D effectsを使うときにはっまたとこ "Windows8 Programming"

軽くメモ程度に。
Windows8からDirect2Dに新しくDirect2D effectsが導入されました。詳しくはここ。
http://msdn.microsoft.com/en-us/library/windows/desktop/hh802478.aspx
これを使うときに少しはまったとこがあったのでメモしときます。

Direct2D effectsでは、DeviceContextからEffectのオブジェクトを作成します。コードにするとこんな感じです

ComPtr<ID2D1DeviceContext> context;

// Initialize context

ComPtr<ID2D1Effect> shadow;
context->CreateEffect(CLSID_D2D1Shadow, &shadow); // but error

上記のコードのCreateEffectの部分で"error LNK2001: 外部シンボル "_CLSID_D2D1Shadow" は未解決です。"のようなエラーが発生する時があります。これは、GUIDを使うためのヘッダファイルがインクルードされていないだけらしく、このコードより前のどこかで

#include <initguid.h>

とすると解決します。

参考:
http://support.microsoft.com/kb/130869/ja

DataTemplateSelectorを見る "Windows8 Programming"

どうも。最近は、Windows8のModern Styleのアプリを書いていたりしてます。WPFとかXAMLとかは既に触ったことがあったので、いろいろと試していたのですが、いろんなAPIが消えていたり動かなかったりで四苦八苦してます。

今日は、最近試してみたDataTemplateSelectorについて書きたいと思います。何をしたかったかというと、クラスに応じてDataTemplateを切り替えたかったのですが、DataTemplate.DataTypeはなかったのでDataTemplateSelectorを使うことにしました。

DataTemplateSelector classはこちら。
http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.datatemplateselector

protected virtual DataTemplate SelectTemplateCore(
  object item,
  DependencyObject container
)

SelectTemplateCoreメソッドを実装していく感じです。はじめは、containerからリソースを検索しようとしたのですが、FindResourceメソッドはないし、自分で実装しようとしてもcontainer.Parentがnullなので探索もできなかったのです。

そこで、作成するDataTemplateSelectorの子クラスのContentをResourceDictionaryにして、そこのリソースを取得することにしました。

ということで、できたのがClassNameDataTemplateSelectorです。Gistにソースあげときます。
https://gist.github.com/3759888

 

続・Rubyでlibmecab.dllを本当に呼び出してみる

昨日書いた,windows環境でrubymecabを呼び出す方法なんですが,sparse_tonodeを何回も呼び出すとメモリ食うし,destroyよびだしても変わらないので,メモリリークしているのではないかといろいろ試行錯誤しています.

dl/import#structのnewを呼び出すのが悪いんじゃないかと,String.unpackをつかったラッパーに変えてみたのですが,変わらずめもりが・・・.

とりあえず,Gistのほうはunpackを使ったバージョンに変えてみました.

https://gist.github.com/2927253

なんかわかったら報告したいと思います.