しまなみ海道 と LiveCycling の SQLite

あけましておめでとうございます。今年もよろしくお願いいたします。

現在、母の田舎の尾道に帰っています。今回は輪行でロードバイクを持ってきました。

2011/12/30 向島 – 今治 – 瀬戸田 というコースでしまなみ海道を渡ってきました。

Strava にアップしている情報 ( 速度、位置、ケイデンス、心拍数 )は iPhone アプリの LiveCycling を使用しており、途中で電池が切れてスペアの iPhone に交換したので、記録が2つに分かれています。

http://app.strava.com/runs/2968996/embed/13d42a6ddc4e3161a9060a85af0cc8a8c458398c http://app.strava.com/runs/2969000/embed/52b7b944474a468a161bf268f1367f886509064a

後でメインの iPhone にスペア分をコピーするために、スクリプトを書いたので Gist に手順を残しておきました
Gist:1540055

// LiveCycling に .tcx を読み込む機能があれば、こんなことする手間をかけなくて良かったのになー、と思います。

とりあえず普段使いは引き続き LiveCycling ですが、長距離用に Garmin edge 500 をポチりました。東京に帰る頃には手に入ると思います。wktk

おそらくこれによって、次は .tcx から、もしくは Garmin Connect から SQLite へ読み込ませるスクリプトを書くことになる予感です。API も充実してるみたいで楽しみです。

http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&bc1=FFFFFF&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=atsushnagased-22&o=9&p=8&l=as1&m=amazon&f=ifr&ref=tf_til&asins=B003JZEL8U http://widgets.itunes.apple.com/appstore.html?wtype=0&app_id=407471916&country=jp&partnerId=30&affiliate_id=http%3A%2F%2Fclick.linksynergy.com%2Ffs-bin%2Fstat%3Fid%3DCzqa8CY9CFY%26offerid%3D94348%26type%3D3%26subid%3D0%26tmpid%3D2192%26RD_PARM1%3D

Path x Foursquare x ifttt x Google Calendar

移動中、Path から写真とチェックインを Twitter / Facebook / Foursquare に対して続けてました。

少し前から ifttt で if Foursquare then Google Calendar というタスクを設定していたので、以下の様に細かくどこにいたか記録されていて、今後のスケジュール作成に活用できそうです。

Screen Shot 2012-01-02 at 3.39.38 AM

その他反省点

  • 通行料の料金箱が賽銭箱式で、50円玉がなく、少しずつ損してました。後で知りましたが サイクリングチケット なるものがあったそうです。小銭を探す手間も省けるし、良いですね。( 参考: SHIMAP【サイクリング】料金表 )
  • 日が落ちると、街灯がなく、橋の入り口が分からなくなりました。(幸い迷子になりませんでしたが。。) 今度はゆとりを持って早朝に出発して、日が暮れないように帰ってきます。
Posted in Uncategorized | Leave a comment

Converting VMWare .vmdk to VirtualBox .vdi

VMWare で作成した仮想端末を VirtualBox に移行するのに、ハマったのでメモです。

  1. Virtual Machine Library から VM を選択、コンテキストメニューから Settings を選択、もしくは CMD+E で設定画面を表示
  2. HardDisks を選択
  3. Split into 2 GB Files のチェックを外し、Apply ボタンをクリック
  4. Virtual Machine Library から VM を選択、コンテキストメニューから Show In Finder を選択
  5. Q.app をダウンロード + インストール。Q – [kju:]
  6. Terminal.app などを使って cli で、以下のコマンドを実行

    $ cd ~/Documents/Virtual\ Machines $ /Applications/Q.app/Contents/MacOS/qemu-img convert \

    $VMMACHINE$.vmwarevm/$VMDISK$.vmdk raw-file.bin

    $ /Applications/VirtualBox.app/Contents/MacOS/VBoxManage \

    convertdd raw-file.bin $VMMACHINE$.vdi

    $ rm raw-file.bin

  7. .vdi ファイルは、自分の管理しやすい場所に移動します。

  8. VirtualBox.app を起動。
  9. ツールバーから、New ボタンをクリック。ウィザードにしたがって、Name / OS / Version / Memory を然るべき値に設定
  10. Virtual Hard Disk の画面まできたら Book Hard Disk はチェック、Use existing hard disk を選択し、プルダウン右にある、参照アイコンをクリックして、.vdi ファイルを選択。ウィザードを完了させます。
  11. cli から、以下のコマンドを実行します。

    $ /Applications/VirtualBox.app/Contents/MacOS/VBoxManage modifyvdi $VMMACHINE$.vdi compact

  12. VirtualBox.appVirtualBox Manager から、VM を選択し、コンテキストメニューから、またはCMD+S で Settings を開き、Storage に移動。

  13. SATA Controller の下に、.vdi ファイルが入っているので、選択してコンテキストメニューから Remove Attachment を選択
  14. IDE Controller を選択して、コンテキストメニューから Add HardDisk を選択、Choose existing disk を選択し、.vdi ファイルを選択。OK ボタンで設定完了

以上で移行が完了しました。
Mac OS X 10.6.6 / VMWare Fusion 2.0.6 / VirtualBox 4.0.4、VM は CentOS-5.5 32 bit でした。

参考にしたサイト

Posted in Uncategorized | Leave a comment

node.js の mysql-native を使うと文字化けする

Sequelize を使ってアプリを作っているのですが、どうしても、日本語がうまく入りません。

Sequelize は、mysql-native をドライバとして採用していますが、こちらをそのまま、以下の様にシンプルに叩いてみましたが、やはり文字化けします。

別のモジュールで、node-mysql を使うとうまくいきます。

参考までに DDL です。

Sequelize のコードに手を入れるべきか、mysql-native のコードに手を入れるべきか、もし、正しい解決方法をご存知の方がいらっしゃいましたらご教示ください。

Posted in Uncategorized | Leave a comment

Posterous and Markdown plugin for @snippetsapp

I’ve published 2 scrippets to GitHub.

First is Posterous. This enables posting entries from Snippets.

Write drafts in Snippets, and publish seamlessly.

Text doesn’t line break automatically.

So, we have to wrap with <markdown></markdown> and write content with markdown syntax, or use HTML.

When publishing private posts, links on last screen may be broken, because of Posterous API’s bug.

I asked this issue Posterous support team, I hope fix this soon…

Second is Preview Markdown.

This enables preview Markdown document.


2つの scrippet を GitHub で公開しました。

1つめは、Posterous です。 Snippets から Posterous にエントリーを投稿出来ます。

下書きを Snippets で書いて、そのまま公開できます。

自動的にされないので、<markdown></markdown> で本文を囲って Markdown 記法で書くか、HTML で書く必要があります。

非公開記事を投稿した場合、Posterous の API のバグが原因で、最後の画面に出てくるリンクは、壊れています。

Posterous サポートチームに問い合わせたので、早く治ればいいな、と思っています。

2つめは、Markdown をプレビュー です。

Markdown 文書をプレビューすることができます。

P.S. 海外の人向けに、ぎこちない英語と、日本の人向けにぎごちない日本語で書いてみました。変なところがあったらご指摘下さい。

Posted in Uncategorized | Leave a comment

Snippets の Gist.scrippet で Private gist したい。

深津さんの、エントリー “ iOS開発におけるパターンによるオートマティズム ” を読んで、早速私も Amazon で購入しました。

まだ、第一章しか読んでいないので、感想は書けません。

 

このエントリーで、Snippets というソフトウェアに触れられていたので、ダウンロードして、試用しています。

今まで、同じ様な用途に、Evernote を使っていたのですが、こちらは、テキストデータに特化しているので、検索が早く、シンタックスハイライトも付いているので、気に入りました。

メニューバーから、Scrippets という、拡張機能が選択でき、そこから、各種スニペット共有サイトにポストできたり、Placeholder (テンプレートタグみたいなもの) を置換したりできます。画像のものは、バンドルされているものです。

自作や、配布されているものを、新たに追加することも可能です。

この中の、gist.github.com は、ブラウザでログインしている、いない、に関わらず、Anonymous として投稿されてしまいます。もちろん、Private gist も作れません。

なので、恐らく、この bundle の作者の、ベルギーの Simon さんという方のリポジトリを fork して、修正しました。

オリジナルは、Gist Create API : http://gist.github.com/api/v1/xml/new に、データを POST していたのですが、Private gist が仕様が公開されていないか、サポートされていないか、私が見過ごしたか、なので、gist のコマンドラインツール のコードを参考に、Gist の投稿ページ : https://gist.github.com/gists へポストする様に変更しました

一応、Pull request したので、もしかしたらバンドルされるかもしれませんが、もし、同じ悩みをかかえている人がいたら、私のリポジトリから、ソースを落として下さい。

https://github.com/ngs/snippets-gist-scrippet

インストールするとき、” 既に、Gist.scrippet はインストールされてるよ ” と怒られるので、その前に、一度 Snippets を終了して、Snippets.app/SharedSupport/Scrippets/Gist.scrippet を、リネームするなり、削除するなりして下さい。

 

Scrippets は、JavaScript / CSS / HTML / Ruby で実装されているので、簡単に作成できます。

API リファレンスが見当たらないので、仕様は手探りなのですが、Snippets.app/Contents/Resources/Scrippet.js に実装されているクラスのコードを読めば、JavaScript からアクセシブルな情報は、全て理解できます。

パッケージの構造は、こちらのスライド の 28 ページ目で紹介されています。

また今度、自分オリジナルの Scrippet を作ってみたいと思います。

Posted in Uncategorized | Leave a comment

DBIx::Class::Storage::DBI::mysql::backup

先月、CPAN に公開したモジュール DBIx::Class::Storage::DBI::mysql::backup の紹介です。

DBIx::Class::Schema::Versioned にある、backup_directory という設定項目は、設定すると backup メソッドをコールするだけで、設定したディレクトリにバックアップを作成してくれるのだろうな、と思いますが、実は、SQLite など ( 他の DBI は確認してません ) 、DBIx::Class::Storage::DBI のサブクラス側で各々実装するものらしく、MySQL で backup メソッドをコールすると、以下の様に die してしまいます。

Can't locate object method "backup" via package "DBIx::Class::Storage::DBI"
    at /path/to/lib/site_perl/5.xx.x/DBIx/Class/Schema/Versioned.pm line 560.

SYNOPSIS に書いた様に、Storage::DBI::mysql::backup を、Schema.pm ( DBIx::Class::Schema のサブクラス ) の load_components に加えて下さい。

package MyApp::Schema; use base qw/DBIx::Class::Schema/;  our $VERSION = 0.001;  __PACKAGE__->load_classes(qw/CD Book DVD/); __PACKAGE__->load_components(qw/ Schema::Versioned Storage::DBI::mysql::backup /); __PACKAGE__->upgrade_directory("/path/to/var/upgrade"); __PACKAGE__->backup_directory("/path/to/var/backup");

これで backup メソッドをコールしても die しなくなりました。

my $schema = MyApp::Schema->connect( 'DBI:mysql:myapp_db', 'myapp_user', 'myapp_pass' );  $schema->do_backup( 1 ); # これが必要 $schema->backup;

backup_directory で 設定したディレクトリに、myapp_db-20110202-050441.sql という名前で、ダンプデータが作成されていると思います。

 

テストコードを書くに当たって、Test::mysqld というモジュールを使わせて頂きました。

mysql.sock をテスト用に作成して、テストが完了すると、自動的に削除してくれるので、実際動いている DB に干渉せず、安心して開発ができました。

Posted in Uncategorized | Leave a comment

Three20 – extXMLRPC

去年、iBacklog を開発したときに作った、Three20 の XML-RPC 拡張を、私の branch にコミットして、Pull request したままだったのですが、「 Extentions ページを Three20.info に作ったので、そちらに登録してくれ 」とのことで、Pull せずに Close されてしまったので、独立したリポジトリを作って、登録しました。

extXMLRPC | Extensions | Three20

使い方は、上記のページの Breakdown に記載されていますが、去年の 10月に、Facebook の Jeff 氏に言われて、 ( YAPC Asia に参加中に片手間で ) 作ったサンプルも公開しているので、参考になればと思います。

ngs / Samples/tree/master/XMLRPCSample

このサンプルは ” はてなキーワード連想語API ” を使って、延々と関連ワードを辿ってゆくものです。

 

 

Posted in Uncategorized | Leave a comment