アメリカに行ってきます。


明日からアメリカに出張で行ってきます。
アメリカは2001年から数えて7年ぶり。
久しぶりの学会発表なので緊張するなぁ。


期間は2週間あるので、体調管理もきちんとしとかないと。
といっても、ジャンクフードが好きなので
結局太って帰ってくることになるかも・・・


ま、なんにしろ色々と楽しんできます。

Webサービス開発のモチベーションを保つためのtips

開発者がモチベーションを失ったシステムは死の宣告を受けたようなものです。
作ってハイ終わり、のシステムなら寿命を待つだけでいいのですが、せっかく作ったのだから開発を続けて長く使ってもらいたいものです。


サービスを作る時、最初は技術的興味や作る面白さから入ります(自分は)。その時は興味が薄れる前に一気に作ってしまう、が良いと思います。もちろんこだわるべきところは、きちんとこだわって。
本当は作った後が問題で、作る時のモチベーションは必ず低下します。特に人気があまり出ないサービスの場合、初期のモチベーションを維持するのは非常に難しいです。


ここでは、趣味として3年間ヤマレコを運営してきた、自分の経験をまとめてみました。

他の人のパワーをもらう

1. 自分のサイトに対するコメント・評価を探す

ソーシャルブックマーク、自分のサービス名で検索、リンク元の検索など。ネガティブなコメントでも、それはそれでやる気は出ます。

2. アクセス解析を見て自己満足

これはアクセス数が増えていれば、ですが。他のサイトと相互リンクを張ったら、来客数が増えてきたとか宣伝効果を見るのもあると思います。

3. イベント開催してコメントをもらう

連絡先や問い合わせフォームを記載しているだけでは、なかなかユーザさんのコメントをもらう機会がないので孤独感がかなりあります。日記、イベント開催など、自分から情報発信して少しでもコメントをもらえるようにします。

4. 仲間を増やす

同じWebサービスの開発者や、デザイナーの方など、コミュニケーションを取る相手を増やすのも良い刺激になります。家族ももちろんそのうちの一人です。

5. ライバルサイトを探す

自分と同じテーマでWebサービスサイトは、普通探せばあるでしょう。そこと何が違うのか、利用者にとって何が嬉しいのかを考えて、「絶対うちの方がいいサービスにしてやる!(たとえ今は違っても)」と思うとモチベーションが上がっていきます。
このときにネガティブな方向にいかないようにしましょう。足を引っ張り合うのではなく、引き上げあうことができれば、自分たちもユーザにとってもいい方向に進められます。

自分で自分を応援する

6. 具体的な目標を作る

いつまでに何をしたい、という具体的な目標を掲げるのも効果があります。タイミングが合えば、Webサービスの賞に応募するのも良いと思います。賞に応募するから品質を上げたい、品質を上げたら受賞する(かも)という相乗効果も。一時的な効果はかなり高いと思います。

7. 成果を眺めて楽しむ

Webサービスを作っていると、足りてないところばかり目が行きます。たまにはいちユーザとして、自分が作ったものを「おお、これは素晴らしいサービスだ」と嘘でもいいので感じてみます。
ほかにも更新履歴をきちんとつけておけば、「こんなに色々やってきたんだ〜、もっと頑張ろう!」とモチベーションを上げられます。

8. たまには休む

別に仕事ではないので、気分転換も必要です。やらなくてもいいときは何もやらない。昔は3か月近く何もしないで寝かせていたときもありました。

9. 自分のサービスが好きで、より良いものにしようと常に思い込む。

これが一番大事だと思います。上のいくつかの項目は、このためにやっているようなものが多いです。
モチベーションがどんなに落ち込んでも、好きなら「また頑張ろう」という気になります。逆に、これがないとどうしようもないです。
最初に作る時に自分が納得いくまで頑張って作れたかどうか、がここに効いてくると思います。

モチベーションの下がる要因

日々の作業ではモチベーションが下がることが多いです。じゃあ、モチベーションの下がる要因を避ければいいじゃん、という考え方もあるかと思います。


でも、これは避けられないことが多いです。
たとえば、

  • 「これ追加してください」的なユーザさんの要望に対応したけど、言った本人も含めて誰も使わない。
  • 問い合わせがあって質問に答えたけど、返事のメールも何ももらえない。
  • 頑張って新しい機能を作ってみても、誰も反応してくれない。
  • 黙々とサーバのソフト/ハードのバージョンアップ作業しなくちゃならない。
  • 別にやりたいことができた。
  • なんか飽きた。

などなど。
どう考えても避けられない or 避けると悪い方向にしか行かないので、別の要因をうまく使ってモチベーションを維持・向上させることが必要です。

余談

上記はあくまでも、趣味にせざるを得ないニッチなサービスを提供している場合の話です。
もちろん、人気が出るサービスを展開できた場合は「ビジネスとして立ち上げる」というモチベーションの上げ方もあると思います。
そうなったらそうなったで、継続するのも大変でしょう。これは別の話ということで。

サーバー上のファイルに開発した後からアクセス制限をかける方法


サーバー上のファイルに対して、クライアントからのアクセス制限をかける場合、
HTTPサーバーがファイルにアクセスする手前にプログラムを
埋め込まないといけません。

制約条件とか

通常は、クライアントにアクセス権限判断用のプログラムを呼び出す
URLを公開して、ファイル自体は直接アクセスできない場所に置くはずです。
流れで言うと
クライアント → アクセス制御プログラム呼び出し → 判定 → ファイル読み出し
です。


でも、一度運用開始したあとになると、一度公開したURLは変えられません。
なので、別の方法を検討しました。


また、静的なパスワード設定なら.htpasswdによるBASIC認証をすれば
いいだけです。
今回はxoopsの認証機能と連携したいので、別の方法を使いました。

方針

Apachemod_rewriteを使って、ファイルアクセスを無理やり
プログラムへのアクセスに変更して対処しました。


イメージだけで書くと

  1. サーバーマシン受信
  2. Apache受信
  3. ファイル読み込み(by apache)
  4. ファイル応答

の流れを

  1. サーバーマシン受信
  2. Apache受信
  3. ★アドレス書換え(by apache mod_rewrite)
  4. プログラム読み出し
  5. アクセス権限チェック
  6. ファイル読み込み(by php)
  7. ファイル応答

に変えました。

認証プログラムの準備

認証プログラム自体はxoopsのログインチェックの機能を
そのまま使いました。なので、あまり解説することはないです。
checker.php
というファイルを用意しておきました。


たとえば、file#.xmlというファイルにアクセス制御をかける場合(#はデータのID)
URLをchecker.php?id=10としてアクセスすると、file10.xmlのコンテンツへの
アクセス判定をして、OKのときだけファイルを出力するだけのプログラムです。

<?php
include XOOPS_URL.'/mainfile.php';

# データのID読み込み
if(isset($_GET['id'])){
  $myid=intval($_GET['id']);
}else{
  exit;
}

# xoopsのユーザIDをチェック
if(is_object($xoopsUser)) {
  $uid = $xoopsUser->getVar('uid');
} else {
  $uid = 0;
}

# アクセス権限OKならファイル読み込み
if(check_access_file($myid, $uid)){
  $fname="./file".$id.".xml";
  $type="Content-type: text/xml";
  header($type);
  readfile($fname);
}

function check_access_file($myid, $uid){
 # チェックプログラムをここに書く
 return true;
}

?>


ブログ用に書き起こしたので、間違ってるかも・・・。

.htaccessの準備

RewriteEngine on
RewriteRule ^file([0-9]+).xml+ checker.php?id=$1

ちなみに、データのIDは数字前提で書いてます。


この2つのファイルを置くだけで、アクセス権限を追加できました。
思ったよりカンタン!でした。

余談1

来週末から国際会議で発表する予定でして、
その準備で最近なかなか時間が取れないです。
今日も必死に原稿丸覚えしてます・・・。

余談2

先日、本のモニタープレゼント企画をやったのですが、、、色々大変です。
サイト運営のモチベーションをガツンと下げられました

信毎ホームページ大賞 特別賞の商品が届きました


日記に書こうと思っていたのですが、時間が取れず遅くなりました。
ヤマレコが信濃毎日新聞主催の信毎ホームページ大賞で特別賞を頂きました!


先日、その特別賞の賞品と掲載された新聞が届きました。
ありがとうございました!



トロフィーカッコよかったです。あと賞状も頂きました。



副賞はないと思っていたのですが、最新のデジカメ(EX-Z250)を頂きました!
ちょうど今月末にアメリカに2週間出張に行くので、持って行こうかと思ってます。

東京ミッドタウンのYahoo!さんにお邪魔しました

先日Yahoo!の地図スタッフの方々に誘っていただいて
Cycle-Ringの簡単な紹介をしてきました。
Yahoo!地図APIミニ座談会」らしいです。
Yahoo!さんのブログにも掲載いただきました。


なんとYahoo!JAPANのオフィスは東京ミッドサイトにあるんです!
いやー、かっこいいです。素敵です。
心が田舎者なので、カッコよすぎて落ち着かなかった・・・。



打ち合わせルームのあるロビーです。なんかキャラクターがいました。



ゲスト用の紙コップにもヤフーのロゴが!
自分の勤めてる会社はここまでしないなぁ(知らないだけかもしれないけど)
# 写真NGだったら消しますんで連絡お願いします。


MA4でお会いした2人の方と、新しく3人の方を紹介してもらって、Cycle-Ringの簡単な説明をしてきました。


↓こんな感じのスライドを作りました。


地図サービスはGoogle Mapを使う人が多いんでしょうけど、山に最適な地図はYahoo!地図なんですよね。等高線もあるし、山道もきちんとあるし。引き続き使っていけるように、盛り上げていきたいです。

1000以上のルートを、ユーザごとの地図に投影する方法(7) - まとめ&ソースコード


前回までで、個々の技術説明は終わりました。
まとめとしてスクリプトを晒してみます。

マップ作成の考え方


記録1、記録2、記録3の3つの記録がある場合を
サンプルに考えます。



ユーザ1、ユーザ2の2名がいて、それぞれ

  • ユーザ1が記録1、記録2
  • ユーザ2が記録2、記録3

を登録したとき


  • ユーザ1が記録1、記録2
  • ユーザ2が記録2、記録3
  • システム全体で記録1、記録2、記録3

の3つの地図ページを用意します。


必要なプログラムは2つ。それぞれサンプルコードを作成しました。

サンプルコード


サンプルコード一式


> perl mkmap.pl
> perl compositemap.pl
とすると、地図画像が生成されます。


生成した地図サンプル

ユーザ1の地図



ユーザ2の地図



全体地図

処理時間について


ヤマレコの場合、約2,000ユーザ、6,000個のルートがあり、
4日間CPUを使い続けてやっと画像一式ができあがりました。
ヤマレコで作った全ルート表示地図


今回のような2段階の生成にしておくことで、全マップ作成は1回だけやれば良いです。
普段は以下の更新だけをすればOK。

  • 前回スクリプト実行時から更新された記録だけ、記録単位のタイル画像を作成
  • データが更新されたユーザの地図だけ、ユーザ単位のタイル画像を再合成


CPU負荷がかかるタイル画像の生成処理を記録ごとに1回づつやれば良くなったので、
やっと現実解になりました。

Cycle-Ringが「Mashup Awards 4th」でゴーガ賞・ヤフー賞をいただきました!


今日、Mashup Awards 4th(MA4)の表彰式に出席してきました。





Cycle-Ringが部門賞として、「ゴーガ賞・ヤフー賞」を頂きました!

ありがとうございました!



頂いた副賞について


ヤフーさんから、Yahoo Earth(だったかな・・・)という名の地球儀(Atmosphere Vision ATM01SI)を頂きました。
すごく素敵で、カッコいい!うちの嫁さんも大喜びでした。
あと、風呂敷も。




そして、ゴーガさんからは、なんと!



GIANT ESCAPE R3
クロスバイク(自転車)でした!



自転車のサイトを運営していたので、
妻と「サドルをくれるとおもしろいんだけどなぁ」と言っていたのですが、
まさかの『自転車本体』が賞品でした。いやーすごい。


ということで、地球儀を抱えて自転車で自宅まで帰りました!


折角なので、Cycle-Ringにも記録を載せてみました。



・・・でも、適正身長が155-165cmなんですよね。
まぁ少し小さいけど、せっかく頂いたものだし
妻と共有して使おうかなと。

交流も色々できました

いろいろと楽しいお話を聞かせていただきました。
ありがとうございました!

最後に


大賞受賞はChamapという、地図上でチャットができる
サイトでした。おめでとうございます!


関係者の皆様、ありがとうございました。
これからもよろしくお願いします!