「エキサイト公式プラチナブロガー」スタート!

self memo

Guideline for retrospective & sprint planning @SlideShare

I've summarized in the slide of the past three times article.


[PR]
# by aratafuji | 2015-11-06 14:16 | English

Definition of Done & Acceptance Criteria

I will write about the difference between Definition of Done and Acceptance Criteria.
These difference may look a bit confusing.

Definition of Done

  • "Done" means differently by person.
  • Make sure everyone is on the same page.
  • This is a definition common to a project.
  • Improve “Definition of Done” in the Retrospective.
a0039958_10282530.png
Quotations from "Essential Scrum"

Acceptance Criteria

  • “Acceptance Criteria” is a criteria for PO to accept if PBI is "done" or not.
  • Each PBI has its own “Acceptance Criteria”.
  • Make “Acceptance Criteria” in the Sprint Planning.
  • Write “Acceptance Criteria” on PBI.(Post-it)

Example

An example of PBI
As an internet banking customer
  • I want to see a rolling balance for my everyday accounts
  • so that I know the balance of my account after each transaction is applied
  • An example of acceptance criteria
The rolling balance is displayed
  • The rolling balance is calculated for each transaction
  • The balance is displayed for every transaction for the full period of time transactions are available
  • The balance is not displayed if a filter has been applied
http://nomad8.com/acceptance_criteria/
---
Today is the last day In the Philippines.
[PR]
# by aratafuji | 2015-11-06 10:42 | English

Guideline for Sprint Planning @Philippines

I wrote about retrospective in the previous entry.

I will write an article about Sprint Planning MTG this time.
Please see below for the details.
---

Sprint Planning

Overview

  • Most HARD ceremony(event).
  • Answer two topics
    • What PBIs can be done in this Sprint?
    • How will be the chosen PBIs get done?

What PBIs can be done this Sprint?

  • Pick up PBIs from PBL from the top of the list.
    • PBL should be ordered by priority, which PO decide.
    • Keep picking up PBI as long as your team can make a commitment.
  • Commitment is important.
    • If you break your promise, …

How will be the chosen PBIs get done?

  • Make a Sprint Backlog.
    • Sprint Backlog consists of chosen PBIs and Tasks.
    • Break down PBI into small tasks.
    • Task has Summary and Estimated time.
    • Estimated time for a task should be less than 6 hours

How to

  1. Determine development capacity in this sprint.
  2. Proposal of sprint goal from PO.
    • Ex.
      • Finish ten PBIs.
      • Release push notification.
  3. Pick up a PBI from PBL from the top of the list.

    • It's the highest priority of the PBL.
  4. PO explains PBI and developers ask questions to make an estimation for it.
  5. Break down PBI into small tasks.

  6. Estimate tasks using hour(s).
  7. Repeat the process of estimation until developers feel that they can't commit to finish PBIs anymore or the capacity gets full.
  8. Review sprint goal.
  9. Make a commitment.

---
Next time I plan to write about Definition of Done and Acceptance Criteria.
[PR]
# by aratafuji | 2015-11-05 15:17 | English

Guideline for Retrospective @Philippines

I came to the Philippines before about four weeks.

First I made a document about Retrospective MTG and Sprint Planning MTG.
Please see below for the details about Retrospective MTG.

---

Scrum pillars, again

  • Keep the 3 pillars in your mind at least though there are so many rules about scrum.
    • Inspection
    • Adaptation
    • Transparency

Retrospective

  • Most IMPORTANT ceremony(event).
  • Inspect your process.
  • Create a plan for improvement.
  • Continuous improvement.

Discussion about TEAM issues, rather than personal issues.

  • Ex.

    • Process
    • Practice
    • Collaboration
    • Working Environment
    • Tool

KPT2(Keep[good], Problem, Try, Todo)

  • One of the Retrospective methods
  • a0039958_12392497.jpg
    http://agilenewsflash.blogspot.com/2012/02/kpt.html
  • Typical transfer of items between fields
    • Keep -> Definition of “Done"
    • Problem -> Impediment list
    • Try -> Todo
      • Pick up next actions from Try
    • Todo -> PBI(Product Backlog Item)

How to

  1. Check previous KPT.
    1. Check all items(post-it) on the Todo area(because there might be any items which were put last retrospective).
      1. If there is any item which has a good effect for previous sprint, it move onto the Keep area.
      2. If the item doesn't have any good effect for previous sprint, you remove it from KPT.
      3. If you want to consider more about the item, you can keep it on the Todo area.
      4. continue until checking on the Todo area completes
    2. Check all items(post-it) on the Problem area.
      1. If there is any item which can/want to solve, it remains.
      2. If you can't do anything to solve the item, you remove it from KPT.
    3. Check all items(post-it) on the Keep area.
      1. If there is any item which is already enough to share, no need to emphasize any more, you remove it from the Keep area.
      2. You remove "good" stuff, too.

      3. If the item must be still there as "KEEP", it remains.
  2. Check the current status.
    1. Write "Keep" stuffs that we had better to continue. You can write "Good" stuff, like a "Released" too. Write one stuff per one post-it. Keep quiet while writing and Write within 3 minutes.
    2. Put the post-it on the Keep area, then read it for all members. It goes one by one until it completes. If anyone put same stuff as yours, you can put it on the post-it.
    3. Write "Problem" stuffs that we need to improve. It goes same way like above.
  3. Examine improvement plan.
    1. Write "Try" stuffs to solve a "Problem" stuff. Think about "keep" stuff more progressive. Write one stuff per one post-it. Keep quiet while writing and Write within 3 minutes.
    2. Put the post-it on the Try area, then read it for all members. It goes one by one until it completes.
  4. Agreement of Improvement Plans.
    1. Pick up "Try" stuffs that is executable during next sprint.
    2. Move chosen stuffs to the Todo area.
    3. Make agreements!

---
Next time I plan to write about Sprint Planning MTG.
[PR]
# by aratafuji | 2015-11-04 13:03 | English

[MeetUp] Halloween with Tech Geeks @ BGC

Last Thursday I made a presentation in English at [MeetUp] Halloween with Tech Geeks @ BGC.

Because I wrote the script in advance, I was able to presentation.
However I wasn't able to understand the audience's question and I didn't answer well.
I need to study English hard!

a0039958_20105599.jpg

a0039958_20113853.jpg


The slide was uploaded to Slideshare.
Is Scrum the Best Choice for you?

This presentation was "OUT OF COMFORT ZONE" for me.
And I also felt the "HRT" and kindness from YOYO staff.
Taka and Kuni trusted me to have a presentation
Qori, Yuyu, Yuji and Zak helped me with my practice.
Zakame and Zak helped me on a question period.

I appreciate all their help.
I convince that YOYO is excellent team!
[PR]
# by aratafuji | 2015-11-03 20:50 | English

私にとっての越境

この記事はDevLOVE Advent Calendar 2014 「越境」の11/18分の記事です。

●自己紹介
はじめまして。藤村 新(@aratafuji)と申します。
Advent Calendar 初挑戦です。
一昨日で39歳になりました。
現職で9社目(フリーランス含む)でして、出戻りも2回経験してます。
そんなフラフラしている私ですが、ここ2年ほどはアジャイル開発について腰を据えて学び続けていました。

※現職で取り組んできたことは、以下のスライドにまとめてます。
アジャイル開発導入のためにやってきたこと



●私にとっての越境
DevLOVE Advent Calendarに参加させて頂くに当たり、私にとっての越境ってなんだろうと考えてみた結果、頭に浮かんだのが、「アジャイルなオフショア開発」でした。
この越境には以下の2つの意味があります。
  • 国境を越えた開発という意味での越境
  • オフショア開発という、自分にとって未経験な分野に対して挑戦するという意味での越境

●アジャイルなオフショア開発への取り組み
今年の初めにベトナムへ出張し、アジャイル開発やスクラム等についての研修を行なったり、部署内では浸透してきていたスクラムのやり方をそのままアジャイル開発に導入しようと試みましたが、なかなかうまくいきませんでした。
そこで、今一度現場の問題点を洗い出し、その改善施策として考えてみたのが「RFCモデル」という開発モデルです。
RFCモデル」はリーンカンバンを拡張した開発モデルでして、「頑張っても効果が薄い事は諦める」という考えのもと、以下を諦めます。
  • 一度のやり取りでの完成を諦める
  • 精度の高い見積もりを諦める
  • オフショア側での完成を諦める

またリーンカンバンのDoingのフェーズを、
  • Rough:70%程度の完成度を目指す(オフショア)
  • Fill:95%程度の完成度を目指す(オフショア)
  • Closing:完成させる(国内発注者)
の3つのフェーズに細分化したモデルとなってます。
a0039958_15002735.png

※「RFCモデル」については、以下のスライドにまとめてます。
アジャイルなオフショア開発


●越境した結果
上記したスライドをSlideShareにアップロードしてみたところ、色々と嬉しい事がありました。

1.尊敬している方々からコメント頂けた

2.楽天Tech Talkでお話しさせて頂いた

楽天Tech Talkというイベントを主催している川口さんさとりゅうさんからお声がけ頂き、先日お話ししてきました。
a0039958_16011485.jpg
※楽天Tech Talkについては、以下の川口さんの記事をご参照ください
Tech Talk という社内イベントをボチボチと続けている話

3.オフショア大学の勉強会でお話しさせて頂くことになった
以下のようなツイートを見かけたので連絡させて頂いた結果、第51回 オフショア開発勉強会という勉強会でお話しさせて頂くことになりました。

●まとめ
このように一つの境界を越境してみると、何かしらのフィードバックが得られ、その結果自分の世界が変わるという事が往々にしてあると思います。
思い返してみれば、アジャイル開発を学ぼうと考えた時も同じでした。

本を読んでいるだけでは生きた知識が得られないと考え、まずはPMI日本支部が募集していた「アジャイル・プロジェクトマネジメント研究会 立上げプロジェクト」に応募してみました。
幸いにもプロジェクトへの参画を認めて頂き、その会合でアジャイルコーチとして活躍されている木村さんにお会いしました。
木村さんが主催する「アジャイルサムライ横浜道場」に参加させて頂き、そこでCSMCSPOを持っている方々のお話しを聞いて是非自分も研修に参加したいと思い、認定スクラムプロダクトオーナー研修と認定スクラムマスター研修を立て続けに受講しました。
その後もアジャイル、スクラム関連の勉強会やカンファレンスに参加することにより、少しずつ"生きた知識"を得ることができ、その知識を活かすことによって所属する部署にも変化が現れ始めました。
a0039958_16220591.png
私自身越境しようと思う時は、とても億劫な気持ちになり、可能な限り変化したくないと思ってしまうのですが、その気持をグッと抑え、勇気を出して越境してみた結果、とても良い方向に自分の世界が変わってきたと感じています。

40歳も近くなり、今まで以上に越境する事が億劫になってくると思いますが、越境した先にはより良い世界が必ず待っていると考え、今後も越境し続けていきたいと考えています。

[PR]
# by aratafuji | 2014-11-18 00:00 | つぶやき

号泣

a0039958_10355136.jpg
今日のごきげん怒っている
LINE POPでハートが無くなりプレー出来なくなって号泣。

[PR]
# by aratafuji | 2013-04-21 10:32

号泣

a0039958_21273290.jpg
今日のごきげん怒っている
半分個したパンを食べられて号泣。

[PR]
# by aratafuji | 2013-04-13 21:26

イベントへのタイムシフト参加を実現するために必要なもの

色々とお世話になっている方と、almost.atについてメールでお話しする機会があったので、その時に考えた事のメモ。

Almost.at: 各イベントの現場に実際にいる人からのTwitter発言だけに関心のある人には嬉しいサービス

このサービスを始めて見た時の印象は、2ch Viewerの実況モードを見ている感じに近い。
サービスのコンセプトはニコニコ動画と同様なのだろうが、テキストストリーミングという意味で。

イベント参加者の多くがTsudaり始めたら、人間の能力ではとてもじゃないけど処理しきれないだろうな。
けれどもそれは、リアルタイムと同じスピードでイベントに参加する場合に限っての事であって、イベントへのタイムシフト参加?する場合は特に同じスピードで参加する必要は無い。

時間的、物理的に参加不可能だったイベントに、好きな時間に好きな場所で自分にあったペースで参加できるようになる。これが実現できたら楽しそう!

それを実現するためには、やはりVRのような技術が不可欠なのだろうか。

試合の行われていない国立競技場とかに集まってオーロラビジョンの映像を見ながら熱狂的に応援するサポーターや、ZARDの追悼コンサートに集まるファンとかを見る限り、実際にイベントが行われている会場をとことん疑似体験させる必要は無いのかもしれない。
けれども、カンファレンスのムービー(ライブストリーミングでは無く、録画したムービー)を後から見るだけでは、イベントに参加してる感は全く得られない。

その違いは、参加者同士のインタラクティブ性だろう。
この際、イベントの主体とのインタラクティブ性はどうでもいい感じがする。
どうせ実際のイベントに参加していても、主体とのインタラクティブ性はあまり望めない。

では、イベントへのタイムシフト参加において、どうやったら参加者同士のインタラクティブ性を生み出すことが出来るだろうか。

時空を超えて、対話することは無理だ。
後からムービーを見たユーザーから話しかけられた時に、メールやメッセに転送するとかはどうだろう。
メッセならまだしも、メールの場合は著しくインタラクティブ性が低下する。

常にメッセ立ち上げたPCの前に、自分の分身を座らせておければなー。
お!、自分の分身ボットを作れば良いのか!

完全に人工知能を搭載したボットなんて必要無い。
メッセのログを与える事によって、この状況で、こう言われたら、こう返す、というような学習をさせ続けることは可能だろう。

ということで、イベントへのタイムシフト参加を実現するために必要なものは、自分のコピーボットという結論に達した。

早速IRCボット周りの勉強や、積読状態の集合知プログラミングを読み始めてみようと思う。
[PR]
# by aratafuji | 2009-06-03 12:54 | 記事メモ

IEのバグ?

以下の記事を読んだ。

Internet Explorerでページが真っ白になるバグ

パッと見した時点で、
title要素でマルチバイト使う前にchasetを指定しなきゃダメに決まってるじゃんか!
それをバグと言われたらIEかわいそう!
と思ったのだがちょっとだけ調べてみた。

まずはW3C勧告文書のHTML 4.01仕様書(日本語訳)を確認。

以下が該当部分かと思われる。
5.2.2 文字符号化方法の指定
以上を要約すると、本仕様に適合するユーザエージェントは、文書の文字符号化方法を決定する場合に次の 優先順位を守らねばならないということである。優先順位の高いものから低いもの順に以下の通り。

1. HTTPヘッダのContent-Typeフィールドの、charsetパラメータ。
2. META要素で、http-equiv属性値がContent-Typeかつvalue属性の値にcharset情報があるもの。
3. 外部リソースを指している要素に設定されているcharset属性値。

という事で試してみた。

環境は以下の通り。
ブラウザ:IE7
テスト用HTML
<html>
<head>
<title>Internet Explorerでページが真っ白になるバグ - IDEA*IDEA ~ 百式管理人のライフハックブログ ~</title>
</head>
<body>
test
</body>
</html>

※charsetはUTF8

最初にHTTPヘッダのContent-Typeフィールド未出力でアクセス。
確かに何も出力されない(ページが真っ白)。

次に、.htaccessに以下を追記。
AddType "text/html; charset=utf-8" .html

IEを再起動してアクセスしてみると、ページタイトルもコンテンツも正常に表示された。

IDEA*IDEAの人の環境(IEのバージョン、HTTPのレスポンスヘッダ、外部リソース内のcharset)が書いていないので何とも言えないが、自分が確認する限り、(今回の点に関しては)IE7はW3C勧告に準拠してると思う。

これについてちゃんと書いてる人がいた。
charsetに関する注意書き
というわけで、「HTML文書公開者に、META要素でcharsetを指定するように啓蒙する」のは正しくありません。HTTPサーバ管理者に、HTTPヘッダにcharsetを付けるように啓蒙しなければいけません。

気を付けます…。
[PR]
# by aratafuji | 2009-04-02 12:39 | レポート

新規サービスリリース完了

前職であるエキサイトから発注してもらっていた新規サービス(キッチン)のリリースが無事完了。
一昨日リリースし、昨日引き継ぎを行い、今日から自社に復帰。

直近での業務が無かったため、今日は以下のような事をしてた。
- 作りたいiPhoneアプリがあるので、目指せ!iPhoneアプリ開発エキスパートを見ながらサンプル作成
- ついでにiPhone Dev Centerのドキュメントもパラパラと閲覧
- 次に作るサービスはぜひRailsで作りたかったので、RailsによるアジャイルWebアプリケーション開発Rubyレシピブックでお勉強
- Rails使うならAptanaだと前に聞いてたので、とりあえず自前のサービス(PHP)をsamba経由でプロジェクトとして読み込み、ちょいっと編集

自前のサービスにFlashを組み込みたいと思っていたが、AS3、Flexの勉強は放置中ー。
OpenID, OAuth, OpenSocial辺りも勉強したいとは思ってるけど、出来てないー。
うーん、学ぶべき事多すぎ…。
まあ、それが楽しいからWebアプリケーションエンジニアを続けていると信じたい。
[PR]
# by aratafuji | 2009-04-01 18:38 | つぶやき

年末年始に考えた

年末に以下のエントリーを読んで、とても同感した。
「はてな」がWeb制作を「ものづくり」と呼ぶことにかなり違和感を感じるのはなぜなんだろう?
※別にはてながどうこうというわけではなく、自分がやっているWebアプリケーション開発という事自体をとても「ものづくり」とは言えないなという意味で。

年始にテレ東で放送していた世界大工王決定戦という番組を見てて、拘り持って家を作っている職人さん達が、何だかとても羨ましく思えた。
※鳶やってた友達に話したら、人前で喧嘩するなんてあんなの職人じゃねーと言っていたが…。

この2つのインプットを通して(はまちちゃん同様)ぼくの中でなにかがハジけた。

よくシステム開発は建築に例えられるが、自社サービスに限った場合、自分がやっている事なんてどっかしらで無料で手に入るパーツを自分の家の庭で組み合わせて、ちょっと外観を飾り付け、少しだけ珍しい家具が置いてあるだけみたいなものだ。
こんなんでは、とても自分は「ものづくり」をしていますと胸を張って言えない。
受託は食いつなぐためにやらざるえないけど、いずれは自社サービスのみで食っていけるようになりたいなんて安易に言っていた自分が恥ずかしい。

当たり前の話しだが、クライアントが他人ならば受託開発であり、クライアントが自分(自社)ならば自(社)サービスになるわけで、システム開発部分でのやること自体は全く変わらないはずだ。

安直に、受託開発はつまらないし大変だから極力避けたい、自社サービスは作ってて面白いからやりたいなんて考えず、お金を払ってでもシステムを作ってほしいと考えているクライアントがいるのであればとことん拘ってシステムを構築し、自分がお金を払ってでも作りたいと思うサービスがあるのであれば、自分自身がクライアント兼請負業者になれば良いんだろうな。

そういう視点で考えると、今まで自社サービスとしてやりたいと思っていた(もしくは作った)サービスの中で、お金を払ってでも作りたいようなサービスがはたしてあったんだろうか…。

とても当たり前の事を書いている気がするが、そんな事も分かっていなかった。

- クライアントが他人ならば受託開発、クライアントが自分ならば自サービス
- どちらもやる事自体は同じであり、品質、モチベーションが変わる事自体が適切ではない
- 自サービスを考える上で、自分自身お金を払ってでも作りたいサービスかどうかという点を基準にする

こんな当たり前の事をしっかりと心に刻み、今年も頑張っていこうと思う。
[PR]
# by aratafuji | 2009-01-06 20:45 | つぶやき

「一日一選」というサービスを作ってみた

先週から今週にかけての間で、「一日一選」というサービスを作ってみた。
一日一選
モバイル向けのみだけど、何とか動くようになったかと。

このサービスの主な機能は、モバイルから画像をメール投稿出来るだけだ。
ただそれだけ。
しかも、1日に投稿できる画像は1枚のみっす。
※同日に再投稿すれば、上書きされる

元はといえば、このサービスは奥さんの企画だ。
珍しく奥さんと意見が一致した、記念すべきサービスなのである。
これぞ正しく、"初めての共同作業"。

私のように、携帯のカメラ機能を全く使えていないような人がもしいたら、お気軽に使ってみて頂けるとありがたいっす。

継続してみると、面白い物が出来るはず!と信じて、まずは自分だけでも使ってみようと思います。
[PR]
# by aratafuji | 2008-12-17 00:31 | つぶやき

日本人受けするWebサービスの要素

前職の上司だった方と、日本人受けするWebサービスの要素って何だろうと話した機会があったので、その時に考えた事のメモ。

個人的に、以下の3要素ではないかと考えた。
1.習慣化
2.匿名性
3.ゆるい繋がり

1.習慣化
個人的に、ここ1年ほどの間で習慣化した事として、"体重、体脂肪測定"、"家計簿"がある。
"体重、体脂肪測定"は毎回の結果をカレンダーに記述しており、一日でも忘れる(カレンダーに穴が開く)と、とても残念な気持ちになる。
"家計簿"はフリーのソフトウェアを使って付けているが、こちらは1日忘れると、翌日がかなり面倒になるので、極力その日の収支はその日中に入力するようにしている。
これらの作業は、始めた頃こそ意識しないと忘れてしまっていたが、頑張って続けていくうちに、夜風呂からあがったら"体重、体脂肪測定"⇒カレンダーに記述、寝る前⇒"家計簿"という行動が習慣化され、今では決して忘れる事は無くなった。
※覚えていても、面倒だからパスする日もあるが…

上記の例のように、一度習慣化させ、後は無意識に行動させる事が重要ではないだろうか。

自分が関わったWebサービスの中で、この習慣化がうまく働いたと思われる例が2つほどあった。
一つはモバイル向けの懸賞サイトである。
そのサービスはただ単に一日一回リンクが着いたメールが携帯宛に送信されるだけのものだ。
リンクを押すと、何のエフェクトも無しに、98%ぐらいの確率で"はずれ"とだけ表示されるのだが、そのサービスのCTRは70%近くあったと記憶している。
私自身、システム確認用に登録していたのだが、毎日大体決まった時間にメールが届き、リンクを押し、はずれを見て携帯を閉じるという行動が、習慣化されていた。
※時たま"当たり"が出ても、いつもの習慣で携帯を閉じてしまう

もう一つはレシピサイトだ。
こちらのサービスは、毎週月曜日に一週間分のレシピが更新されるのだが、他の日に比べて月曜日のアクセス数は群を抜いていた。
きっと、月曜日にそのレシピサイトにアクセスして、その週の献立を考えるという行動が習慣化されたユーザーの方々が多かったのではないだろうか。

ちなみに、この"習慣化"と"日本人向き"との関連性は不明…。


2.匿名性
個人的には"実名"のメリットを感じているのでとても残念なのだが、やはり日本では"匿名性"を前面に押し出していかないと流行らないのだろうと感じている。
犯罪予告でもしない限りは身元がばれないような安心感を出していった方が、やはりユーザーに受け入れられるのであろう。


3.ゆるい繋がり
多くの人がmixiのガッツリとした繋がりに疲れているのではないだろうか。
mixiで日記を書いているユーザーは、この日記を誰が読んでいて、それを読んだらどう思うかを、多少なりとも考えていると思う。
だからこそtwitterのように、基本は誰も見てないだろうというようなミニブログがある程度受け入れられたのではないだろうか。
2chでいうならば、"この速さなら言える!"というノリである。

twitterのような、自分の友人関係でグルーピングするようなミニブログは腐るほどあるからもう需要は無いかと思うが、他の切り口でグルーピングするようなミニブログはまだいけるのではないだろうか。
※スレッドという要素でグルーピングしたのが2ch、動画コンテンツという要素でグルーピングしたのがニコニコ動画というイメージ
そのグルーピング要素の一つとして位置情報があるかなと考えている。

結論として、上記3要素を満たす、最も日本人向きのWebサービスは、やっぱり2chだったか。


書いているうちに、何だかとっても当たり前の事を書いている事に気付いた。

しかしながら、何か新しいサービスを考える際に、とっても当たり前の事をすっ飛ばして、"こんなサービス面白いかも"、"こんなサービスがあれば便利かも"などと考えてしまう事が多々あるので、自分への戒めの意味で投稿しておく。
[PR]
# by aratafuji | 2008-12-09 05:37 | つぶやき

CakePHPでのサービス開発

今日からCakePHP(1.2)を使って、新しいサービスを作り始めてみた。

今日やった事のメモ。

Net_UserAgent_MobileをcakePHP1.2RC2で使う
[cakePHP1.2]モバイルサイトとPCの切り分け その2
CakePHP 1.2で携帯用ビューを表示する
CakePHP 携帯専用サイトを作成する
上記の記事を参考にして、以下のコンポーネントを作成。
app/controllers/components/mobile.php

App::import('Vendor', 'pear_ini');
App::import('Vendor', 'Net/UserAgent/Mobile',
array('file' => 'Net' . DS . 'UserAgent' . DS . 'Mobile.php'));

class MobileComponent extends Object {
function startup(&$controller) {
$this->controller = $controller;
$mobile = &Net_UserAgent_Mobile::factory();
// 非モバイル
if ($mobile->isNonMobile()) {
// PCからモバイル用のURLにアクセスがあった場合は、PCのURLにリダイレクト
if(preg_match("/^m\//", $this->controller->params['url']['url'])){
$url = '/'.preg_replace("/^m\//", "", $this->controller->params['url']['url']);
$this->controller->redirect($url);
}
// モバイル
}else{
// モバイルからPC用のURLにアクセスがあった場合は、モバイルのURLにリダイレクト
if(!preg_match("/^m\//", $this->controller->params['url']['url'])){
$url = '/m/'.$this->controller->params['url']['url'];
$this->controller->redirect($url);
}
// Docomoでguid=ONが付いていなかったら付ける
if ($mobile->isDoCoMo()) {
if(!isset($this->controller->params['url']['guid']) or
$this->controller->params['url']['guid'] != 'ON'){
$url = '/'.$this->controller->params['url']['url'].'?guid=ON';
$this->controller->redirect($url);
}
// 全てのリンクに、guid=ONを付ける処理
output_add_rewrite_var('guid', 'ON');
}
// UID取得
$this->controller->uid = $mobile->getUID();
// SoftBankは下15桁を使う
if ($mobile->isSoftBank()) {
$this->controller->uid = substr($this->controller->uid, 1, 15);
}
}
}
}
?>

このコンポーネントを、app/app_controller.phpで読み込むようにした。
app/app_controller.php
class AppController extends Controller {
// 共通コンポーネント
var $components = array('Mobile');

// 共通ヘルパー
var $helpers = array('Html', 'Xml');

// UID
var $uid;

function beforeFilter() {
}
function beforeRender() {
if (isset($this->params['prefix']) or isset($this->uid)){
// モバイル用レイアウト設定
$this->layout = 'mobile';
// モバイル用ヘルパー設定
array_push($this->helpers, 'Mobile');
}else{
// PC用レイアウト設定
$this->layout = 'pc';
}
}
}
?>

prefixの設定は、以下の通り。
app/config/routes.php
    Router::connect('/m/', array('controller' => 'pages', 
'action' => 'index', 'prefix' => 'mobile'));
Router::connect('/m/:controller', array('prefix' => 'mobile'));
Router::connect('/m/:controller/:action', array('prefix' => 'mobile'));
Router::connect('/', array('controller' => 'pages', 'action' => 'index'));

※本来は下2行だけで良いはずなのだが、それだとモバイルのTOP(/m/)にアクセスすると、うまく動かなかったため、暫定的に上2行も記述。こちらは引き続き調査する。

後は、各コントローラーにPC用のアクション(index)とモバイル用のアクション(mobile_index)を実装し、各ビューも、PC用のビュー(index.ctp)とモバイル用のビュー(mobile_index.ctp)を作成。

ここまでで、PC、モバイルのアクション、ビューの切り分け、モバイルの場合はUID取得まで出来るようになった。

一番はまったのは、エラー(404とか)用ビューの切り分け。
上記prefixの設定で、PCでの404はapp/views/errors/error404.ctp、モバイルでの404はapp/views/errors/mobile_error404.ctpが呼び出される事を期待したが、うまくいかず…。
携帯サイトの404ページの作成方法
こちらを参考にしてみても、
$this->viewVars['code']
には何もセットされない…。
[php][CakePHP]viewVarsって使っていいの?
これとか見ると、そもそもviewVarsは参照しちゃダメっぽかったので、結局はエラー用のビューを以下のようにして、PCとモバイルを切り分けた。
app/views/errors/error404.ctp

if(isset($this->params['prefix'])){
echo $this->renderElement("mobile_header");
}else{
echo $this->renderElement("header");
}
?>
ページが見つかりません
if(isset($this->params['prefix'])){
echo $this->renderElement("mobile_footer");
}else{
echo $this->renderElement("footer");
}
?>


今までCakePHPはチュートリアル見てサンプル程度しか書いた事無かったけど、いざ使い始めてみるとかなり楽しい!

明日からも没頭して、今週中にサービスを立ち上げたいと思う。
[PR]
# by aratafuji | 2008-12-09 02:38 | レポート

はてラボの新サービス

はてラボに新サービスが追加された。
はてラボに3つの新サービスを追加しました
サラっとしか見てないけど、かなりの脱力感を感じた。

・全く面白いと思えない。
・全く便利だと思えない。
・全く先が見えない。

これらのサービスをラボで試してみたフィードバックを、一体何に活かしていこうと考えているんだろう?
はてラボって、はてな社員の砂場なのか?
はてなカウンティングの受けが良かったら、ブログパーツでも量産するのか?
はてなニュースのターゲットは、bogusnewsなのか?

gooラボペパボカヤックEDGEえがちゃん.netなどの試みの方が全然面白いし、興味深い。

勝手にはてなを特別扱いしてたけど、サービスの企画力という面では全然大した事ないのかもしれないと思った。
[PR]
# by aratafuji | 2008-12-04 20:39 | つぶやき

コメントを頂いた

前回の記事でトラックバックさせて頂いた社長さん(と思われる方)からコメントを頂いた。

非公開コメントだったので内容は伏せておくが、とても真摯なメッセージだと感じた。

この社長さんのような著名な方と私のような一エンジニアが、数行のテキストとはいえ意見を交わす事が出来るなんて、やっぱりインターネットは素晴らしい!

ウメダモチオイズムのエバンジェリストとして、今後も頑張っていこうと改めて思えた。
Webエンジニアとして、今後も頑張っていこうと改めて思えた。
[PR]
# by aratafuji | 2008-11-14 19:03 | つぶやき

'梅田望夫の「はてブがバカすぎる」議論について'を読んで

梅田望夫さんのつぶやきが議論をよんでいるみたいだが、ウェブ進化論 本当の大変化はこれから始まるや、シリコンバレー精神 -グーグルを生むビジネス風土を読んで気分アゲアゲになった私は、梅田望夫さんの肩を持ちたいと思う。

色々と批判的な記事を読んだが、特に以下の記事が引っかかった。
梅田望夫の「はてブがバカすぎる」議論について:
実行する勇気もない犯罪予告がいっぱいあって、
海外に行ったこともないのに、韓国・中国の批判をして、
英語のニュースを読めないのに、反米主義を唱えて、
発売前の本やゲームの批評がアマゾンにいっぱいあって、
つきあったことないのに、女性をスイーツ(笑)呼ばわりして、
彼女いない暦=年齢なのに、結婚は無駄だと延々と議論していて...

このように、インターネットの現状を徒然に書いているが、そんな事は言われなくたって知っている。
問題はその現状を認識した上で、どのように行動を起こすかではないのだろうか。

この社長さんは、そんなインターネットの現状が理想とするインターネットの姿なのだろうか。
であれば、それでも良いだろう。

しかしながら、私は今のインターネットが決して理想の姿だとは思えない。

「買ったことのない本に対する書評の批判」が溢れるより、該当の記事を読んで興味を持ったのであれば、まずは対象の本を読み、自分自身で考え、その上で会った事も無い人達と熱く議論できるような世界にしたいと考えている。

不条理な現実に遭遇した際に、"そんなもんだよ"なんて冷静に受け流すような人間にはなりたくない。
少しでもその不条理な現実に立ち向かっていくような、熱い人間であり続けたいと思う。

この社長さんのプロフィールを見たら、
好きな言葉は「C言語は世界を救う」。

とあった。
社長さんの経歴を読む限り、この'世界'とはインターネットの事だけを指しているわけではないだろう。
しかしながら、このような熱い言葉を好きな言葉に掲げている方が、このような冷めたコメントをしてしまう事が残念でならない。
[PR]
# by aratafuji | 2008-11-10 13:31 | つぶやき

はてなブックマークリニューアル発表会レポートを読んで

はてなブックマークリニューアル発表会が行われたとの事で、以下のレポート等をざっと読んだ。

はてなブックマークのリニューアル発表会に潜入してきた
はてなブックマーク新バージョン速攻レビュー!
はてなブックマークリニューアル発表会見に行ってきた。検索すごかった。
はてなブックマーク2 ──「はてなブックマーク」リニューアル発表会

※増田にもまとまってた
はてなブックマークリニューアル発表会レポート一覧


検索が凄いとか、UIが便利になってるとか、「お気に入り」が強化されたとか書かれているけど、率直な感想としては、"ユーザーの能動的なアクションを期待しすぎ!!"という一言に尽きる。


私ははてなブックマークを2つの目的で使ってきた。

1つは個人的なブックマークとしての機能だ。
会社のPCでも家のPCでもネットサーフィンをするので、使っている環境(PC)を意識する事無く気になった記事をブックマークする事ができ、どの環境からでも過去にブックマークした記事を探す事ができるのはとても便利である。

2つ目は、今のネットのトレンドを追いかけるためだ。
人気エントリーと、注目エントリーのFeedをRSSリーダーで常に見ていれば、大体のトレンドをつかむ事ができると思っている。


前者に関しては、UIの向上、検索機能の強化はありがたいと言えばありがたいが、別に今のままでも特に困った事は無い。
私が今後のはてブに期待していたのは、後者のフィルタリングについてである。

人気エントリーと、注目エントリーを見ていても、タイトルで興味を持つのは5件に1件程度、実際にリンクをクリックして元記事を読むのは10件に1件程度だと思う。
興味が持てない残りの8割程度の記事を、自分専用にフィルタリングして表示しないようにしてくれたら、どんなにありがたい事だろう。

もちろん新機能どころか、今現在の機能を使う事でもある程度のフィルタリングを行う事は可能なのかもしれない。
しかしながら、ぶっちゃけそれらの能動的なアクションは、とても面倒でならない。

私がはてなに対して、何の情報も与えずに"フィルタリングしろ!"と言っているのであれば、それは無茶な話だ。
しかしながら、私ははてなに対して大量の情報を与えている。

- 私がWeb開発関連のTipsがあればリンクをクリックし、高い確率でブックマークしている事をはてなは知っているはずだ。
- 私が新しいWebサービスに関する記事があればリンクをクリックし、たまにブックマークしている事をはてなは知っているはずだ。
- 私が英語の勉強法に関する記事があればリンクをクリックし、たまにブックマークしている事をはてなは知っているはずだ。
- 私がネットで炎上しているような話題があればリンクをクリックし、滅多にブックマークしていない事をはてなは知っているはずだ。
- 私がアニメやゲーム等の記事があれば、全てスルーしている事をはてなは知っているはずだ。
- 私が3次元のエロネタがあれば、夜間、休日に限ってリンクをクリックし、決してブックマークしない事をはてなは知っているはずだ。

これほどの行動履歴情報をはてなに与えているにもかかわらず、それでもなおユーザーに対して能動的なアクションを期待するというのだろうか。

ベイジアンをカテゴリー分けに生かすのも良いけど、ぜひユーザー固有のフィルタリングとしても応用してもらえないものだろうか。

私が理想と考えている人気エントリー、注目エントリーのUIは、Gmailに近いものだ。
- 記事に対して、タグを付ける事ができる
- 特定の単語や、元記事のドメインを元に、記事に対して自動でタグを付ける事ができる
- 自分にとっての不要な記事は、spamと認定する事ができる
- システムによってspamと判断された記事は、spamフォルダに振り分けられる
- spamフォルダに振り分けられた記事に対して、spam認定を解除する事ができる

名づけて、"パーソナライズドホッテントリ"。

mailと違ってspam基準が個人によって全く異なるため、難易度は高いであろう。
しかしながら、技術力が売りのはてなが発表会まで開くぐらいならば、これぐらいの事をして欲しかった。
今後に期待したい。
[PR]
# by aratafuji | 2008-11-05 15:25 | つぶやき

BOOK OFF最高!

会社帰りにぷらっと立ち寄ったBOOK OFFで、以下の本を購入。

RESTful Webサービス
Leonard Richardson / / オライリー・ジャパン
ISBN : 4873113539


ネットワークセキュリティHacks 第2版 ―プロが使うテクニック & ツール 100+
Andrew Lockhart / / オライリー・ジャパン
ISBN : 487311327X


なんと、どちらも105円だったので、計210円で購入完了。

「せどり」なんていう小遣い稼ぎが成り立つわけだ。
[PR]
# by aratafuji | 2008-10-22 00:46 | つぶやき

PHPで文字列に絵文字が含まれているかを判別する方法

PHPで、変数内の文字列に絵文字が含まれているか否かをシンプルに判別する方法が無いかなーと、PHP×携帯サイト デベロッパーズバイブルを読んでいたら、以下の記述が目に止まった。
○PHPで絵文字を使う
絵文字を扱うためには、そのすべてにおいてCP932を利用できる環境を用意する必要があります。PHPでこのCP932を利用するには、Shift_JISの代わりに「SJIS-win」を使うことで利用することができるようになります。
[P.140]


てことは、こんな感じで判別出来ちゃうのかなーと、試しに以下のコードを書いてみた。
// $sourceに絵文字が含まれているか否かを判別
// 文字エンコードはSJIS
if(mb_convert_encoding($source, 'SJIS-win', 'SJIS') == $source){
print "絵文字なし";
}else{
print "絵文字あり";
}

意図したとおりに動いてる…。

うーん、こんなんで良いのか?
何か大きな事を見落としているような気がしてならない。

誰かツッコミを入れてもらえると、とてもありがたいっす。
[PR]
# by aratafuji | 2008-10-16 00:25 | つぶやき

Ezサービスイン&SoftBankキャリア試験合格

徹夜作業となってしまったが、何とか無事にEzでサービスインする事が出来た。
疲れた体に鞭打って、再度SoftBankのテスト環境を構築し、昼過ぎに帰宅。

ギネスビールで一人祝杯をあげながらメール受信すると、なんとSoftBankからキャリア試験の合格通知が!
良い事も続くもんだ。

今日はただただぐっすり眠りたい。
[PR]
# by aratafuji | 2008-08-21 16:03 | つぶやき

SoftBankキャリア試験(再度)不合格

昨日に引き続き、SoftBankキャリア試験に落ちた…。
胃に穴が開きそう。

今回の落第理由。

着うたフルファイルが「着うた・メロディ」フォルダにDLされます。着うたフルファイルは「ミュージック」フォルダにDLされるご対応をお願い致します。

納得できん。正直、全く納得できない。

SOFTBANKの仕様書には、確かに"保存フォルダの指定"方法が記載されている。
Separate Deliveryを利用して配信する場合、暗号化前のコンテンツのMIME型が"audio/mp4"であるファイルは、保存先のフォルダをCP様で指定して配信することも可能である。

可能である。
可能なのは分かった。

そして、ダウンロード方法の部分には、以下の記述が。
保存先フォルダ指定値(パラメータ名は、キャリア固有の名称なので、伏せておく)は省いても構わない。

省いても構わない。

「保存先を指定できるよ、省略も可能だよ。」というパラメータが未指定だったからと試験に落とすなんて、納得できん。

"コンテンツチェックのポイント"なるドキュメントも再度確認したが、着うたフルファイルを「ミュージック」フォルダにDLされるようにせよなんて記述は見当たらない。
※大量に存在するドキュメントのどこかにひっそりと書いてあるのかもしれないけど…。

サービスのリリース日に影響が出る可能性が高くなっちったー。
確かにシステムのせいなんだけど、、、。

めっちゃ憂鬱な気分どす。
[PR]
# by aratafuji | 2008-08-19 23:00 | つぶやき

SoftBankキャリア試験不合格

2つ目の山場だったSoftBankのキャリア試験で不合格になった。
こちらの試験は、直接サービスのリリーススケジュールには(今のところ)影響しないとはいえ、かなりショック…。

不合格の理由は、下記2点。

1.Separate Delivery方式を利用したコンテンツ・キー課金を行うと、端末に"無効なコンテンツのためダウンロードできません"と表示され、課金、ダウンロードとも行えない。

こちらに関しては、今朝の時点でCPさんからも指摘されていた。
不可解なのが、昨日までテスト用に使っていたSoftBankの920Pでは再現しない事だ。
CPさんは、923SH、824SHでも同様の現象が発生したとの事。
世代(C型、P型、W型、3GC型)で挙動が異なる事は覚悟(そして対応)していたが、同じ3GC型でも挙動が異なるとなると、かなり辛い。

コンテンツのダウンロード部分は、DRMをかけているとはいえ直接抜かれる事を避けたいため、phpで認証の上、レスポンスヘッダとともにバイナリを出力するようにしていた。
やはりこの部分が怪しいので、取り急ぎコンテンツ自体をドキュメントルート配下に移動し、コンテンツのダウンロード部分はApacheに任せるように変更。
CPさんに再度確認を依頼すると、やはりうまくいったとの事。
セキュリティ的な理由と、コンテンツのダウンロード履歴をダウンロードphp内で行っている理由から、なんとか現状の作りで対応したいと考え、とりあえずうまくいく時とうまくいかない時のレスポンスヘッダを比較する事に。
モバイルサイトをPCで見るためのツールやFirefoxアドオンを参考にして、Proxomitronと、SwitchProxy Tool(FFのアドオン)をインストール

●うまくいく時のレスポンスヘッダ
HTTP/1.1 200 OK
Date: Mon, 18 Aug 2008 04:16:49 GMT
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11 mod_perl/2.0.2 Perl/v5.8.8
Last-Modified: Fri, 15 Aug 2008 02:52:36 GMT
ETag: "c038c-304dd-b6c3c500"
Accept-Ranges: bytes
Content-Length: 197853
Content-Type: application/vnd.oma.drm.message; boundary=boundary-1


●うまくいかない時のレスポンスヘッダ
HTTP/1.1 200 OK
Date: Mon, 18 Aug 2008 04:07:09 GMT
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11 mod_perl/2.0.2 Perl/v5.8.8
X-Powered-By: PHP/5.2.0-8+etch11
Pragma: no-cache
Content-Length: 197853
Content-Type: application/vnd.oma.drm.message; boundary=boundary-1


まずは、
"Accept-Ranges: bytes"
がないということで、ダウンロードphpに
header('Accept-Ranges: bytes');
を追加。

次に、"Etag"出してないということで、313.PHP で Apache 風 ETag の生成を参考にして、
$stats = stat( $_SERVER['SCRIPT_FILENAME'] );
$etag = sprintf( '"%x-%x-%x"', $stats['ino'], $stats['size'], $stats['mtime'] );
header('ETag: '.$etag);
を追加。

次に、うまくいかない時の"X-Powered-By: PHP/5.2.0-8+etch11"が鬱陶しいので、php.iniの中でexpose_phpをOnからOffに変更し、Apacheリスタート。

こうする事で、レスポンスヘッダは以下のように変わった。
HTTP/1.1 200 OK
Date: Mon, 18 Aug 2008 05:27:12 GMT
Server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch11 mod_perl/2.0.2 Perl/v5.8.8
ETag: "c038c-304dd-b6c3c500"
Accept-Ranges: bytes
Pragma: no-cache
Content-Length: 197853
Content-Type: application/vnd.oma.drm.message; boundary=boundary-1

よし、"Pragma: no-cache"以外は同じになったという事で、再度CPさんに確認依頼。
すると、なんとまだ駄目だとの事…。
なぜだ!

ふとDRMかけたdm(drm.message)ファイルの中身を見ると、マルチバイト文字が含まれてる!
phpが出力時に変換している事が原因に違いないと考え、ダウンロードphpに、
mb_http_output("utf-8");
を追加し、再度CPさんに確認依頼。

すると、なんとまたもや駄目だとの事…。
なんだってんだ!!

やばい、時間が無い。
とりあえずdmファイルをドキュメントルート配下に配置する事によりダウンロードは出来るが、履歴が取れない。これも致命的。

ここで、ダウンロードphpでの対応を諦め、SoftBankからダウンロード完了通知を受け取るようにパラメータを追加し、受け口の履歴書き込み用phpを慌てて作成。

再々度CPさんに確認依頼すると、今度はOKとの事。
なんとか目的は達したが、かなりSoftBankに依存した作りになってしまった。
この対応を完了したのが今日の16時ぐらい。

後からログを見て分かったのだが、SoftBankが試験をしていたのは今朝の10時頃だったので、時既に遅し。


もう一つ試験に引っかかった点。

2.C型端末でアクセスすると、UIDを通知していても、"UIDを通知して下さい"とのエラーメッセージが表示される

あーーー、やっちまった。
そもそも今回のサービスの対応端末は、3GC型のみという仕様だったので、C型端末からUIDを取得する処理を入れていなかったのだが、エラーチェックする順番が、
1.UIDが取れるか?
2.対応端末(3GC型)か?
という順番にチェックしてたので、C型端末にて"対応端末ではありません"とのエラーを表示できていなかった。
これは、完全に俺のミスだ。
エラーチェックの順序を、
1.対応端末(3GC型)か?
2.UIDが取れるか?
に変更し、C型端末がUIDを通知してようがしてまいが、"対応端末ではありません"を表示するようにした。

何とか次の再試験で通ってくれー!

---------- 追記(2008/08/18 20:37) ----------
うまくいく時とうまくいかない時のレスポンスヘッダを改めて見てみたら、"Last-Modified"を出力してないじゃん!という事に気づいたので、
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
を追記。
そうする事により、レスポンスヘッダは以下のようになった。
HTTP/1.1 200 OK
Date: Mon, 18 Aug 2008 11:33:43 GMT
Server: Apache/2.2.3 (Debian) mod_perl/2.0.2 Perl/v5.8.8
Pragma: no-cache
Accept-Ranges: bytes
ETag: "bd04d-27b5-48a95dd1"
Last-Modified: Mon, 18 Aug 2008 11:33:43 GMT
Content-Length: 176819
Content-Type: application/vnd.oma.drm.message; boundary=boundary-1

希望を持って、再度テストするも、やはり駄目…。

お手上げっす。
[PR]
# by aratafuji | 2008-08-18 20:09 | つぶやき

本買った

元同僚の影響で、本を2冊購入。

[24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) (WEB+DB PRESSプラスシリーズ)
今まではインフラ部任せにしていた部分も、今後は自力で何とかしなくてはならないと思い購入。



集合知プログラミング
今後作っていきたいサービスに生かせそうと思って購入。



ユーザーのデモグラフィー、サイコグラフィー、ジオグラフィーなどを元に、無数にあるWeb上の情報からユーザーに最適な情報をレコメンド出来たら面白そう。

問題は、どうやって情報を集めるかだなー。
ユーザーが自らの情報を与えれば与えるほど、本当に価値あるレスポンスを得られるようなサービスが作れれば、おのずと情報は集まると信じたい。
[PR]
# by aratafuji | 2008-08-10 15:58 | つぶやき

Ezキャリア試験合格

転職して3週間が経過。

最初の山場だった、auのキャリア試験に無事合格。
モバイルの公式サイト構築の経験が無かった事と、サービスリリース日の都合で試験に落ちる分けにはいかなかった事もあり、かなり緊張したが、無事通って本当に良かった。


試験前日になって動作確認済みだったデジタルコンテンツのダウンロード部分で急にエラーが多発し、泣きそうになった部分の対応メモ。

着うたと着ムービーのダウンロード時だけ、auからのリクエストに、"Range"というヘッダが含まれてくる。

Range: bytes=1-1023
のようなリクエストヘッダを受け取った時は、
HTTP/1.1 206 Partial Content
Content-Range: bytes 1-1023/200000
Content-Length: 1023
Accept-Ranges: bytes
のようなレスポンスヘッダを返すとともに、着うたや着ムービーのデータの1バイト目から1023バイト目までを出力する必要があるので、その対応を行っていた。
※値は適当

ダウンロードがうまくいくときは、上記のレスポンスを返すとすぐに、次のRangeのリクエストが来るのだが、ダウンロードエラーが発生しているときは、次のRangeのリクエストがauから来ない状況に…。
※うまくいくときは、"Range: bytes=1024-2047"のようなリクエストがすぐに来る

リクエスト来なきゃ、プログラム側じゃ対応できねーと思いつつ、無視されるからにはレスポンスに問題があるのだろうと、レスポンスヘッダに関して再度調査。
このページ見てたら、あれ?"Last-modified"返して無いじゃん!
という事で、レスポンスヘッダに"Last-modified"を追加したら、再現しなくなった…。

auさんのせいにしてて、ごめんなさい。
[PR]
# by aratafuji | 2008-08-10 15:36 | つぶやき

今後のblogサービスの方向性を考えてみた

今後のblogサービスの方向性を考えてみた。

blogサービスという大きな括りで考えると、なぜか実現したところで自分では使わないだろうなと思うような機能しか浮かばない。

ここは一旦思考をクリアにし、技術的な実現可能性や、ビジネスモデルなどを全く無視して、どんな体験が得られれば自分はワクワクするだろうかという観点で考えてみた。
先日、とりあえずホットスポットおぼえがきで知った、紫陽花カフェへ、PCを持って出かけた。
店に着き、テラスに腰掛、ギネスビールを飲みながらPCを起動し、利用可能な無線LANアクセスポイントを調べたところ、なぜか見当たらない!あっれー、なんでー?
店員さんに聞いたところ、無線LANのサービスを止めたとの事!!!
ちょーショックー。おしゃれカフェのテラスでビール飲みながらネットサーフィンするのが夢だったのに…。
気を取り直し、"さつまいものハニーマスタード"と"ピリ辛エビマヨ"をオーダー。
うめー、ちょーうめー。
無線LANが使えなかったのは残念だったけど、ビールもうまいし、飯もうまいし、大満足。
こちらが、紫陽花咲く庭の写真です!
[紫陽花の写真]
ひとしきり店内にいる犬と戯れた後、紫陽花カフェを後にし、第2候補だったcafe Cherirに移動。
こちらの店は、電波良好!
コーヒーを味わいながら、思う存分新サービスの開発に没頭する事が出来ましたー。

例えばこんなクソエントリーがあったとする。
※こちらの内容はノンフィクションです

私がこのクソエントリーをPOSTした瞬間に、未来のblogシステムが起動する。

●POSTしたクソエントリーを、早速自分で確認してみると、[紫陽花の写真]の下に、"他の画像を見る"リンクが表示される。リンクをクリックすると、他のユーザーが撮影した紫陽花カフェの写真や明月院の紫陽花の写真が、一通りスライドで見ることが出来た。
●今週末に三宿付近のカフェでネットサーフィンを楽しもうと思っていたAさんにメールが届く。メールには、"紫陽花カフェの無線LANサービスは終了。cafe Cherirの電波は良好。by aratafuji"と書いてあった。
●今週末に三宿付近のおしゃれカフェに行こうとしてたBさんにメールが届く。メールには、"紫陽花カフェの紫陽花は今が満開!ハニーマスタードとピリ辛エビマヨがお勧めですよ。by aratafuji"と書いてあった。
●週明けに私が自分のblogにアクセスしてみると、Aさん、Bさんから感謝のコメントが届いていた。
●週明けに私が登録しているアフィリエイトサービスにアクセスしてみると、紫陽花カフェとcafe Cherirからのアフィリエイト報酬が振り込まれていた。

ここまで連動しておいて、blogの投稿インターフェースが現状のままってのもなんだが、こんな感じでユーザー通しが繋がれたり、システム連携する事が出来たらきっと面白い。ワクワクする。

技術的な実現可能性を無視して考えてはみたものの、個々の機能を実現する事はそれほど難しい事ではないのかもしれない。

■写真のリンク表示に関しては、現状のタギングでも実現出来るだろうし、今後セマンティックWebが実現していけば、img自体が意味を持つようになる。それとは別に、画像検索テクノロジーを組み込む事で、ますます精度は高まるであろう。

■AさんやBさんへの通知に関しても、オンラインカレンダーと連動すれば、実現できる。

■アフィリエイトに関しても、お財布ケータイが進化して、決済情報(カフェでの支払い情報)とライフログ(この場合は、私のblogを閲覧したという履歴)を連携させる事が出来れば実現は可能であろう。

何だか楽しくなってきた。

"今後のblogの方向性を検討する"なんてお題で、自分は使うかどうか分からないけど、何となく使われそうな機能をダラダラ考えていても、決してイノベーションは生まれない。

もっとシンプルに、"こんな体験が出来るならば、自分なら絶対使う!"っていうような熱い思いをベースに、サービスを考えていきたいと思う。
[PR]
# by aratafuji | 2008-05-28 01:03 | レポート

出会い系サービスを考えてみた

出会い系サービスを考える機会があったので、必要だと思う要素を自分なりに考えてみた。

結論としては、以下の8点が重要なのではないだろうか。

1.マッチングの精度
2.アクションを起こすと、期待以上のレスポンスが得られる事
3.ノイズ(出会いたくない人)を混ぜない
4.参加する事への疚しさを排除
5.遊びの要素も必要
6.リアルタイム性が重要
7.インターフェースはシンプルに
8.目的毎に分ける

1.マッチングの精度
一番重要な事は、マッチングの精度であろう。
詳細なプロフィールを登録してもらい、ただ単に検索出来るようにしたところでうまくいくとも思えない。
レコメンドのアルゴリズム(協調フィルタリング、ベイジアンネットワークとか)や、行動ターゲティングの仕組みとかを組み合わせて、マッチングの精度を高める事が重要であろう。

2.アクションを起こすと、期待以上のレスポンスが得られる事
アクション(プロフィール掲載、メッセージ送信など)を起こしても、何もレスポンスが得られなければ、ユーザーはアクションを起こしてくれなくなる。
あるユーザーのアクションは、別のユーザーのレスポンスにつながるわけだから、その辺りを活性化させる仕組みが必要であろう。

3.ノイズ(出会いたくない人)を混ぜない
クラブでナンパして、"私、音聞きに来てるから~"って言われると凹む。
その場合、音聞きに来てるギャルにとっては、ナンパ男はノイズであるとともに、ナンパ目的の者にとっては、音聞きギャルはノイズなのだ。
※単なる断る口実の可能性も否定できないが…。

4.参加する事への疚しさを排除
かなり前に、電波少年企画のチューヤンプロデュース、"後楽しいガーデン"というイベントに参加した事がある。
完全な出会い系イベントであったが、大盛況だった。
私も、一緒に行った友人達も、そのイベントに参加した事に対して全く疚しさは無い。
※当時の彼女には秘密にしていたが…

ネタ的な楽しさや面白さ、参加する事のロイヤリティを高める等で、疚しさを排除する事も出来るのではないだろうか。

5.遊びの要素も必要
こちらも"後楽しいガーデン"での経験だが、後楽園遊園地内の至る所で数々のイベントが行なわれており、見知らぬ男女が楽しく遊べる工夫がされていたからこそ、かなり面白いイベントになったのであろう。
ただ単に出会いたい者同士を同じ空間に押し込めても、参加者に苦痛を与えるだけだ。

6.リアルタイム性が重要
人間の気分などすぐ変わる。
出会いたい!と思っても、"書類を郵送してください"、"プロフィールの承認に1日かかります"とかでは、テンション下がりまくりであろう。
セキュリティが重要な事は言うまでも無いが、リアルタイムでもセキュリティを保てるような仕組みを考える必要がある。
機能としては、マッチした相手とすぐにIMが出来るとかが望ましい。

7.インターフェースはシンプルに
セカンドライフで、見知らぬ外人の女性と話したことがあるが、セカンドライフの複雑なインターフェースにアップアップしていたため、気軽に会話を楽しむ事が出来なかった覚えがある。
一方、以前あったAIM(AOLのIM)の検索機能を使って、見知らぬ外人の女性と会話した時は、かなり楽しく話しこめた覚えがある。
コミュニケーションを求めている者にとっては、仮想空間など不要なのである。

8.目的毎に分ける
同僚に、どんな出会い系サービスが良いですかね?と聞いたら、"すぐに会えりゃいんじゃね?"と言われた。
上記2と同様だが、じっくり恋愛相手を探したいユーザーにとって、この同僚はノイズ以外の何者でもない。
じっくり恋愛相手を探したいユーザーと、この同僚をマッチさせない仕組みが重要であろう。


まあ、ウダウダ考えてはみたものの、どれも当たり前の事か。
個人的には"後楽しいガーデン"のような体験をWebサービス(+ リアル)で実現してみたい。

彼女のいる自分にとっては不要なサービスだけど…。
[PR]
# by aratafuji | 2008-04-19 17:27 | レポート

「春のMySQL祭り2008」に行ってきた

先日、MySQLのセミナー(春のMySQL祭り2008)に行ってきた。

全体的に、Sunの宣伝のような内容で、ぜひMySQL Enterprise Server(有償)の契約をして下さいというような感じ。
この辺りは、かなりOracle化してきた印象を受ける。

カイ・アーノさんという、MySQLのコミュニティ担当の方のお話しは、MySQLがとてもコミュニティを大切にしているという雰囲気が伝わってきて、好感が持てた。

MySQL社は、ほぼ全ての社員をコミュニティから採用しているそうだ。
社員全員MySQL大好きマニアなわけだから、そりゃうまく回るだろう。

うちの会社も思い切ってオープンソースにし、コミュニティを形成してみたらどうだろうか。
だめか…。


特別ゲストで日本MySQLユーザ会の人もプレゼンをしていた。
Sunへの要望をほのぼのと聴衆に訴えていたのだが、こちらに言われてもどうしようもない。

Sunの社長、MySQLの社長等と同じ場でほのぼの話せば話すほど場違い感が増し、少しかわいそうに感じた。


そんな感じのセミナーだった。
[PR]
# by aratafuji | 2008-04-11 18:34 | レポート

友人関係をXFNで表現するだけのサービスを作った

自分の友人関係をXFN(XHTML Friends Network)で表現するだけのサービスを作ってみた。

My Friends Network


[概要]
Join!で、適当なアカウント、適当なパスワード、自分自身を表すURL(twitterとか)を入力すると、ユーザーページ(http://testtu.be/mfn/user/[アカウント])が生成される。
aratafujiのページ

・友達を登録すると、登録時に設定したXFN形式でリンクが生成される。

・ユーザー、友達とも、Fooo.name!!から関連URLを取得できれば、合わせて表示する。
※Fooo.name!!に関しては、開発者blogを参照


ただそれだけ…。
Social Graph APIに取り込んでもらえれば、ハブ的な意味も少しは有るような、無いような。


なお、久々にPerlを使ったら楽しかったので、YAPCに申し込んでみた。
今のPerlのトレンドと自分のスキルとの間にどのくらいの開きがあるのか、確かめてみたいと思う。
[PR]
# by aratafuji | 2008-03-29 00:16 | レポート