DevLOVE現場甲子園2013に行ってきた その1

先週から風邪を引いたり、仕事が忙しかったりでやっとこさ。
沢山メモがあるので、ひとまずその1ということで。

混沌とするサービス開発の現場でニーズに集中しつづけるためにゴリゴリ工夫したこと

発表者:森雄哉 氏

まとめ(発表を受けて、今度やりたいこと!)

今までは、それぞれの言葉で目的を共有するだけだったけれど、
狩野モデルなどを使って観点を定めて、価値基準の共有やズレを認識してみたい。

やなせたかしさんは、やはり偉大だなと思いました。
アンパンマンの歌が、この年になっても感動するとは素晴らしい。
そのことに、気づかせてくれた森氏にも感謝m(_ _)m

メモ

サービスを成功させたい!!というのが動機。

サービスを開発するにあたって関係者の要求はバラバラである。
そして、その結果。価値の軸が曖昧になり誰も求めていないサービスが出来上がる。
成功させるには、軸の創造、要求の収束が必要となる。

お客さんは、自分の欲求を満たせるからお金を払ってくれる。

狩野モデルを使って、必要要件をすりあわせてみる。

ズレについて可視化が行える。

要求に仕様は書かれていない。
要求と仕様には隙間がある。
要求をそのまま仕様に落とさない方がいい。

すりあわせる為に検証をする。

その要求が達成できる最良の手段を仕様に落とす。
要求>手段>なぜならば
手段>なぜならば>要求
意味が通るであれば、それでよし。
そうでなければ、手段を疑え。

"とりあえず"は、目的が甘い。から出てくるキーワード。

アンパンマンの歌

何が君の幸せ。何をして喜ぶ。わからないまま終わる。そんなのは嫌だ!!

Yahooストアマネージャーで、画像をHTMLから参照する方法 その1

直接、画像を参照する方法。

<img src="/lib/自分のショップ名/画像ファイル名">

更新すると、よしなにしてくれます。
(libの部分が自動でフルパスに書き換えられます。)

注意点

  1. 全て半角英数字で記入すること。
  2. 画像ファイル名は、画像管理に書いてある名前通りに記入すること。

名前通りといのは、
画像管理の表示で拡張子が無いファイルの場合は、
拡張子を記入してはいけません。
忠実に、画像管理のファイル名通りに入力すれば表示されます。

jpgをアップロードしたからjpgだ。とか。
名前変更したけれど、元はjpgだから。とか
考えていると痛い目に会います!

つか、会いました。

Yahooストアマネージャーで、画像が追加できないなという時の追加方法 その1

困っている人がいると思うので投下。

多分、今ってストアマネージャーから画像を追加しようとすると、
思うように画像追加が出来ないと思います。

やっていることとしては、

ストアマネージャーで画像を個別で追加する時に、

  1. 画像管理タグを押して画像管理ページを開く。
  2. フォルダリストから追加したいフォルダを選ぶ。
  3. 追加ボタンを押す。
  4. 画像追加遷移に移る。

手順かと思うんですけれど。
エラーと警告されていないにもかかわらず、
期待する場所に画像を追加することが出来ないです。



しかし、こうすることで画像を追加することが出来ます。

  1. 画像管理タグを押して画像管理ページを開く。
  2. フォルダリストから一番下にある追加画像フォルダを選ぶ。
  3. 追加ボタンを押す。
  4. 画像追加遷移に移り。画像を追加する。

こうすると画像が追加されます。
あとは、ページ編集のページで編集すればよいです。

商品ページに表示したい画像を"フォルダリストの追加画像"から選択して更新してあげてください。

そうすると、おそらくはあなたの期待するフォルダに画像が移動していることでしょう。

追伸:
ストアマネージャーのソースがオープンにされていればプルリクするぉ!!
なんつって、問い合わせ窓口がわからないので、ここに投下することで対応。

チームビルドはボトムアップかな? 変化の担い手チェンジエージェントの実践を追え!に参加してきた。

遅刻しましたすみません…。
窓口にて待っておられた方、本当にありがとうございますm(_ _)m

まとめ

  1. 看板を設計する
  2. コワス!!
  3. 改善とは
  4. 改善していく思考を備える人を増やす
  5. 自分自身のモチベーションを保つ
  6. 今後やりたいこと
  7. 認識した課題

いつも(社内での)と違った視点のお話が聞けて良かった!
ちなみに、ボトムアップ云々は自分が思っただけです。

続きを読む

Mojolicious::Plugin::Config->load単体での使い方。@Test::Mojo

cpanには以下のように書かれている。

 $plugin->load($file, $conf, $app);

だので、以下のようにしてみた。

my $t = Test::Mojo->new("MY_APP");
my $config = Mojolicious::Plugin::Config->load($file,$config,$t);

> Can't locate object method "log" via package "Test::Mojo"

ってなってしまったので、どうしたもんか。

$tをダンプして、みたらappのメソッドがあった。
logはappの下にあるので。

my $t = Test::Mojo->new("MY_APP");
my $config = Mojolicious::Plugin::Config->load(file,config,$t->app);

ってしたら通った。

YATTA!

filenoで、ファイルハンドルを知ろう。

のっけからあれなんですが、正確にいうとファイルの記述子(descriptor)を知ろうです。

printf("STDIN  no:%s\n",fileno(STDIN));
printf("STDOUT no:%s\n",fileno(STDOUT));
printf("STDERR no:%s\n",fileno(STDERR));
printf("DATA   no:%s\n",fileno(DATA));

open(IN1, "+> ./a");
printf("IN1    no:%s\n",fileno(IN1));
open(IN2, "+>./b"); 
printf("IN2    no:%s\n",fileno(IN2));
open(IN3, "+>./c"); 
printf("IN3    no:%s\n",fileno(IN3));
close IN1;
open(IN4, "+>./c"); 
printf("IN4    no:%s\n",fileno(IN4));
open(IN5, "+>./c"); 
printf("IN5    no:%s\n",fileno(IN5));

__DATA__
STDIN  no:0
STDOUT no:1
STDERR no:2
DATA   no:3
IN1    no:5
IN2    no:6
IN3    no:9
IN4    no:5
IN5    no:10
  1. システムは、この数値を見てどこへ読み書きするかを判断しているようです。
  2. STDINからDATAまでは固定っぽいです。(4番目はなんだろう…。)
  3. ファイルハンドルをいくつも開き続けていくと記述子の数値は上がっていきます。
  4. 閉じると、その記述子がまた使えるようになります。
  5. ハンドルが開けていない場合は、undefになります。
  6. ファイルハンドルの名前が違っても、記述子が同じだったらそのハンドルは同じです。
if (fileno(THIS) == fileno(THAT)) { #名前違うけれど中身同じ。
        print "THIS and THAT are dups\n";
}

fileno - perldoc.perl.org

まぁ、なんでこんな話をしたかというと。
DATAの記述子を確認すると通常であれば3が返されるんですが、
undefで返ってきていたんですね。
で、なんでかなと調べたので少しまとめてみました。

ちな、undefが返ってきていた理由は、使用していたモジュールがDATAハンドルをcloseしていて使えなくしていたってところです。

いろいろと3時間ハマったお話(実質作業時間は30分だった?)

最近、Mojoliciousを触っています。

バグとかのお話ではないです、ただ自分が馬鹿なだけです。

結果としては、Teng様のバージョン違いを把握していなかった為でありました。

では、その3時間の経過をば、つらつらと…。

  1. ローカルで作ったプログラムが、テスト環境で動かなかった。
  2. テスト方法はTest::Mojo使ってstatusとかを見るテスト。
  3. 期待通りのstatusが返ってこない。
  4. エラーが吐かれないで処理が途中で落ちてるっぽい。(自分の書き方が雑なせいさ!!)
  5. デバッガで辿ろう>Mojo::Exceptionに辿り着く。>やっぱり途中で落ちてる。
  6. けど、何が原因で落ちてるのかわからん!!(自分がデバッガを読みきれてない…。)
  7. 疲れる。
  8. デバッガは諦めて。伝家の宝刀、二部探索!!
  9. しかし、なかなか出来ない。(printだかwarnなどなどするも出ない…。)
  10. なかなか出来ない。(2回言うけれど、自分の書き方が雑なせい!)
  11. 出来ない。(この辺、記憶が曖昧…意識が朦朧…。)
  12. ボクはここで負けるのか…負けてしまうのか…。
  13. 否!エラーをキャッチしよう!!
  14. プログラムをtry{}catch{};で全体を括る。
  15. 実行!
  16. 出来た!!と思ったらデータが多すぎて目が追うのを拒否してる(use DDP; p $e;)
  17. データを読んでも脳みそが拒否してわからない。
  18. p ref $e;してみた、"Mojo::Exception"。さっきの奴だ。
  19. Mojo::Exceptionを読む。
  20. print $e->to_string; column get が無いよ。DBでエラー的なメッセージ。

(print $eって最初からしてたらto_stringと同じだったのね、なんでもかんでもダンプする癖が仇となった…。)

  1. でもgetなんてcolumnは無い…。
  2. 該当行を見に行く。
foreach (@$rows) {
  $_->get("id");
}

的に書かれている。

  1. ん?get??がメソッド?なのにcolumn??そうか!getって書いてある所はカラム名を直接指定していいんだね!?
foreach (@$rows) {
  $_->id;
}
  1. 通ったキター!!
  2. で、なんでローカルで通ったんだろう…。
  3. Teng::Rowを調べる。
  4. ローカルのTeng::Row 0.20ではgetメソッドがあって、テスト環境のTeng::Row 0.18ではgetメソッドが無かったということでした。

(以前のバージョンからであれば、get_column("id")的に書くのがベターであったのであろう…たしか。)

という感じでハマっていました!!