ロケプラ
最近、ロケプラ(http://rokepura.com/) っていうサイトがあることを知った。
何ができるかというと、
- 店でブラブラとウインドウショッピングしていて、
- 気に入ったものがあれば、そこで買う前にスマホで商品をバーコードスキャンして
- ネット上で価格を調べて、一番安いところで購入。
というウェブサイトとスマホアプリを組み合わせたサービス。技術的にはシンプルだと思う。UIやSNSな部分はそれなりに作りこんでいるんだろうけどそれはまた別にして。
すごい時代だなぁ。その店に行ってるのに、スマホで他の店から買ってるという事態が起きるということか。。 もはやリアル店舗は単なる展示場になり下がるのか。
リアル店舗はもっと差別化しないとダメだな。
ここでしか買えないものとか、店員さんが懇切丁寧に教えてくれるとか、居心地がイイとか。
飲食店はさすがにそこにある意味はありそうだけど、基本持ち帰るものは全て対象になりそう。
通販が発達したこの時代、店舗側は客が店舗に行くように仕向ける努力をますます求められそう。
Janetter2でアカウント登録できない
ものすごい久しぶりに記事をポスト。
Janetterっていうよく出来たTwitterクライアントを使い始めた。キーボード操作できるところが好み。j/kが進む/戻るみたいな。
でも、その前にインストール時にアカウント登録失敗して中々先に進めなかったのでそれをメモしておく。
現象
- 現象としてはインストールウィザードで、アプリ連携するための設定がありID/PASSの入力が必要だが、入れても失敗メッセージ。ところがあとでウェブブラウザでTwitter上の設定を見に行くとアプリ連携は許可されている不思議。
Bookmark
たまりにたまっていたのでflush。
- [http://netafull.net/lifehack/030682.html:title=[N] YouTubeのURLに文字を追加して動画をダウンロードできるサイトいろいろ]
- [http://netafull.net/diary/030308.html:title=[N] 情報ソースとの距離感がやや変わってきた件]
- [http://cookpad.com/recipe/277104:title=(写真有)濃厚とろける!!うちのプリン by ちゃこ@北海道 [クックパッド] 簡単おいしいみんなのレシピが50万品]
- [http://netafull.net/av/030046.html:title=[N] 地デジ対応テレビの購入で「エコポイント」を5%還元]
- [http://netafull.net/neta2009/029900.html:title=[N] 韓国の携帯電話鎖国が終わる]
- [http://chalow.net/2009-03-29-4.html:title=[を] 俳句のようにシンプルな文章を書く]
シリアライズ/シリアライゼーション
データの直列化とも言われるシリアライゼーション。意味をつかみかねていたのでググッて調べてみた。
データの直列化とは,大雑把に言えばPerlのデータ構造(スカラー,配列,ハッシュ,リファレンスなど)を単一の文字列で表現することだ。
構造を持ったデータをファイルとして保存したり、ネットワークを通じて送ったりする必要が生じたとしましょう。その場合、メモリ上のデータをそのまま送るわけにはいきませんから、複雑な構造を壊さないように注意しながら一次元のバイト列に変換します。これがシリアライゼーションです。
ソフトウェア内部で扱っているデータを丸ごと、ファイルで保存したりネットワークで送受信することができるように変換すること。
- Cでとある設定データを保存している構造体の情報をまるまるバイナリでファイルに保存して、次回起動時に読み込むとかやってたことがあったけど、それに近いのかな。
- データの持つ意味としてはどちらも同じだけど、どのレイヤでデータを扱うかの違いかな。例えばPerlのデータ構造をYAMLとかJSONファイルに落とし込むとすると、IOのレベルではバイト/ビット単位で扱うことになるので直列的になる。一方で言語レベルではハッシュや配列を使って構造的に取り扱える。
- このシリアライズという言葉を使う時は単に直列化するということだけじゃなくて、加えて本来言語特有である内部形式の構造化されたデータを「汎用的に扱えるように」という意味がプラスされている気がする。
- Wikipediaに面白い例えが書いてあった。
シリアライズは、SFなどに登場する転送装置に喩えられることがある。物質を一旦量子に変換してから遠隔地に転送し再び物質に戻すというテレポーテーションがシリアライズに似ていることからそう喩えられた。これはまさに、他のネットワーク上にあるシリアライズされたオブジェクトをファイルとしてリモートから転送してからデシリアライズして外部メソッドを自分のネットワーク上で呼び出すために利用されるJava RMIの動作原理にも似ている。
WBC
昨日はすごい盛り上がりでした。WBC関連でブックマークしておく。
- http://jp.reuters.com/article/mostViewedNews/idJPJAPAN-37132620090324:TITLE=WBCは日本が延長で韓国下し連覇、MVPは2大会連続で松坂 | Reuters
- http://news4vip.livedoor.biz/archives/51267800.html:TITLE=【2ch】ニュー速クオリティ:【WBC】イチローのヒットで2chの鯖が落ちまくる
- http://www.youtube.com/watch?v=KzZMotE-0i4&fmt=18:TITLE=YouTube - 2009.3.24 WBC決勝 10回表 イチロー、値千金の決勝タイムリー
- http://news.searchina.ne.jp/disp.cgi?y=2009&d=0324&f=national_0324_031.shtml:TITLE=WBCで日本優勝:イチローの決勝打で世界経済に活力 2009/03/24(火) 18:05:08
- こんなニュースも。
- http://sankei.jp.msn.com/sports/mlb/090324/mlb0903241824043-n1.htm:TITLE=朝鮮日報、中島の2プレーを「非紳士的」と非難 (1/2ページ) - MSN産経ニュース
- http://www.sanspo.com/baseball/news/090324/bsr0903242027057-n1.htm:TITLE=韓国、敗戦にもすがすがしさ/WBC - 野球 - SANSPO.COM
- 韓国のマスコミが色んなこと言ってて議論を呼んでるけれども、当の選手達(どちらも)は正々堂々とした戦いをしてたし、悔しい気持ちは分かるけれどももっと韓国の選手達の労をねぎらってもいいんじゃないかなと思う。日本の優勝はうれしいけど、決勝はゲームとしても最高だった。
YAMLでテストケースを書く2
- テストケースを
- TestCaseNo: 1 TestHTML: test1.html Expect: [1,2,undef]
- のように書いてて、いくらやってもundefが来ないなーと思ったら「undef」という文字列リテラルが来てたということに時間かかって気づいた(>_<)
- そういえばYAMLでperlにとってのundef(未定義)な値は表現する方法あるのかしら?と思ったらあった。YAML::SyckでImplicitTypingフラグを1にしておいて「~」をセットすれば良い。
$YAML::Syck::ImplicitTyping
Defaults to false. Setting this to a true value will make Load recognize various implicit types in YAML, such as unquoted true, false, as well as integers and floating-point numbers. Otherwise, only ~ is recognized to be undef.
- これでYAML::Syckでテスト書く時はImplicitTypingフラグは必須かもしれない。というわけで正解は
- TestCaseNo: 1 TestHTML: test1.html Expect: [1,2,~]
YAMLでテストケースを書く
- 自作Perlモジュール(Perlはライブラリと呼ばないのかな)のテストを書いている。Perlでテストを書き方よく分かってないので色々調べたり勉強したり試行錯誤。
- テストは実際に実行した値と期待値が一致するかどうかの積み重ねが基本。Perlはテストのためのモジュールやツールがとても充実しているんだね。他言語と比較できるほどの知識は持ってないんだけど。テスト自動化したり、簡単に書けるようなヘルパースクリプトがあったり、カバレッジ測定できたり、もう誰かがCPANにupしていたり。あんまりそういう効率の良いテストしたことなかったので新鮮。
- で、CPANモジュールのテストスクリプトを色々眺めてみたが、結構書き方にこれというのもない感じ。みんな目的が違うので当然か。で、テストケースをずらずらと書き並べておけば後はそれを自動的に読み込んでテストしてくれる方法でいい方法ないかと考えた。ハッシュと配列組み合わせてネストしてと考えて組んでみたが、ネストが深くなってくるとコードが見づらい。
- で、YAMLファイル作ってそこにテストケース書けば良いのではと思ったのが今回のエントリ。ま、すぐ思いつく程度のことなのでみんなやってるんだろうなと思いながらメモ。YAML自体よくわかってなかったので調べながら。JSONと共用できるフォーマットがいいのかな。JSONもよく分かってないけど。
- TestCaseNo: 1 TestHTML: test1.html Expect: [1,2,3] - TestCaseNo: 2 TestHTML: test2.html Expect: [4,5,6]
- Test。YAML::Syckの方がCライブラリを使ってて高速らしいし、ppmでもさっくりinstall出来たのでこっちを使う。Test::Deepは今回の目的みたく単純なパラメータ比較ではなく、ネストされたパラメータを比較するのに使えるテストモジュール。
use strict; use warnings; use Test::More qw(no_plan); use Test::Deep; use YAML::Syck; $YAML::Syck::ImplicitTyping = 1;# スカラー値が全部文字列として扱われないように my $TestCase = YAML::Syck::LoadFile("t/TestCase1.yml"); foreach my $t (@$TestCase){ $Crawler->{CACHEFILE} = "t/".$t->{TestHTML}; my $result = $Crawler->Scrape(); cmp_deeply($result,$t->{Expect},"Result value is valid."); }
- ひとつ問題。YAMLファイルをUTF8にしてYAML::Syck::LoadFileすると例外で落ちる。日本語をキーにしたハッシュを入れるということと、テスト対象モジュールがutf8で処理している関係でutf8にしておこうと思ったんだけど。
- SJISにしておくとバイナリとして扱えるようで、とりあえずLoadFileはできたので、その日本語キーをテストスクリプトでEncode::decode("sjis",$japankey);してcmp_deeplyした。
$YAML::Syck::ImplicitUnicode = 1;
- というフラグもあるみたいだけど効果なし。というよりよく分かってないので後日調査。
参考リンク
- http://gihyo.jp/dev/serial/01/yaml_library/0002:TITLE=言語別 YAML用ライブラリ徹底解説:第2回 Ruby編|gihyo.jp … 技術評論社
- http://journal.mycom.co.jp/articles/2006/11/24/json/001.html:TITLE=【ハウツー】LL時代のデータ形式 - JavaプログラマのためのYAML/JSON (2) YAML | エンタープライズ | マイコミジャーナル
- http://d.hatena.ne.jp/metalglue/20070824/1187939860:TITLE=perl の YAML.pm と Unicode - metalglue
- http://yaml.org/spec/current.html:TITLE=YAML?Ain't?Markup?Language?(YAML) Version?1.1
- http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2FYAML%3A%3ATiny%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:TITLE=Perlメモ/YAML::Tinyモジュール - Walrus, Digit.
- http://d.hatena.ne.jp/clmind/20090220/1235140260:TITLE=YAML::Syck::Dumpしたら文字化けした件 - Colorless Mind
- http://gihyo.jp/dev/serial/01/yaml_library/0005?page=2:TITLE=言語別 YAML用ライブラリ徹底解説:第5回 Perl編|gihyo.jp … 技術評論社
- http://d.hatena.ne.jp/clmind/20090220/1235140260:TITLE=YAML::Syck::Dumpしたら文字化けした件 - Colorless Mind
- http://search.cpan.org/~audreyt/YAML-Syck-1.05/lib/YAML/Syck.pm:TITLE=YAML::Syck - Fast, lightweight YAML loader and dumper - search.cpan.org
- http://blog.hide-k.net/archives/2009/01/catalyst_4.php:TITLE=続:Catalystでマルチバイトを取り扱うときのまとめ - hide-k.net#blog
- http://gihyo.jp/dev/serial/01/yaml_library/0005?page=2:TITLE=言語別 YAML用ライブラリ徹底解説:第5回 Perl編|gihyo.jp … 技術評論社
- http://jp.rubyist.net/magazine/?0009-YAML:TITLE=Rubyist Magazine - プログラマーのための YAML 入門 (初級編)