未分類」カテゴリーアーカイブ

タブと縦スクロールのなかにいる

iPhoneがUIを変えた!って意見はあるけど、それはやっぱりiPhoneの中の話で、UI特許が絡んできそうでどれも安心して使えないのであった。それとは別に、どんなプラットフォームでも勝利したUIがある。ブラウザだ。

ブラウザは「タブと縦スクロール」によって成り立っている。これだけなんだが、結構縛りは強いように思う。Eclipseにしろ秀丸にしろ、何かを読む必要のあるソフトウェアは、ブラウザに似たUIを備えている。秀丸もブラウザ互換のショートカットを入れていたりする(Ctrl+ホイールとか。もっともこれは発祥がブラウザじゃないかもしれないが)。

二つの他に、ツリーペインも入るかも知れない。見た目はフラットになったものの、ブラウザのお気に入りはツリー様のシステムだ。

「タブと縦スクロール」、これにツリーペインと、状況に応じて増減するアイコン(もしくはコンテキストメニュー)、これらを備えたソフトウェアが、「まあまあみんな慣れているUI」になっていくんだろうなと思っている。

ブラウザによって敗北したUIは、メニューバーとツールバー、あとMDIだ。これらのWin32的なUIは、設定や共有といった一部のアイコンを除いて、実装されることが減っていくかもしれない。ツールバーやメニューバーは全機能が俯瞰できるから、割と好きだったのだけれど、さすがにタッチ操作を前提とした時代には見合わない。

Win32アプリが絶滅した後、僕らは機能の俯瞰を何で行えばいいんだろうか?何かもう一つUIが必要な気がしてくるんだが。

好きなノート

アイデア出し用のノートに、LIFEのヴィンセントというノートを気に入ってよく使っていたのだけれど、A5の縦型がAmazonで見当たらない。ディスコンになってしまったんだろうか。

ヴィンセントで気に入っている所は

  • OKシュークリームという紙を使っていて、書き味が重い。
  • 分厚い。紙の束に書いているような、柔らかく沈み込む感じで、ごりごり書ける。
  • 縦型は手にリングがぶつからない。左利きには大事なところ。
  • 罫線が広くて文字を大きく書ける。
  • 一枚に書けるアイデアの量がちょうどいい感じがする。

どちらかというと、ヴィンセントに慣らされたんじゃないのかと思う部分もあるけど、ここから乗り換えるとなると結構難しい。似たような商品がないからだ。

他に試したノートは

  • ニーモシネ:方眼で切り離し可の高級リングノート。理想のノートが出た!と思ったんだけど、紙が薄いのか、書き味が好きになれなかった。マルマンのノートは好きなはずなんだけど…
  • LIFE クリッパー:これもニーモシネと似たような感想。謎のアイデアが出ない感。
  • モレスキン:手帳サイズの一番ポピュラーなオイルスキンを買ったけど、良さが分からなかった。片手でグリップしながらは書きづらいし、かといって折り返せないから、他の持ち方出来ないし。あと値段はぼったくりだと思う。
  • キャンパスノート:高いのから安いのまで試したけれど、表紙がぺらぺらだと移動しながら書くのには向いてない。
  • 無印リングノート:この前まで使ってた。悪くは無いけど、再生紙だし普通かなあ。我慢すればこれでも用は果たせるんだけどね。
  • ITOYAのリーガルパッド:書き味も罫線もちょうど良くて、一時期愛用してた。ただびりびり破いて使うので、アイデアのストックにはならないし、整理しようと思っても結局散逸してしまうので使うのを諦めた。落書き用に持ち歩くのは悪くないかもしれない。

次はLIFEのノーブルノートでも試すか、ヴィンセントの横で我慢するかなーと思っている。ヴィンセント自体かなり重いから、PCと持ち歩くのはきついんだけど…。

あとは、書きっぱなしになってしまうのが問題だな。文字起こしするのも面倒だし、取り込んでもあとで見ないと思うし、どうしたものか。

Hackして面白いと思うことをやる

続けるのが才能、というのはあるけど、もうちょっと具体的に書くと「自然と試行錯誤してしまう対象」が才能なのではないだろうかと思った。

というのは、好奇心が生まれない対象に対して、自分自身全然成果を出せないからだ。

「自然とそれをやってしまう」に勝る鍛錬はない。多くの場合、それがゲームだったりパチンコだったり、うまく興味を引くようにデザインされた対象だというだけで。

地図とコンパス

ある場所に最短距離でたどり着くには地図とコンパスが必要。

音楽に例えるなら、地図が入門書で、コンパスが流行りのコンテンツ、みたいな感じ。普通はどちらかを手に入れた段階で満足してしまう。片方だけだと迷うことになる。

最短距離でたどり着いた後は、適切にその界隈でコミットして脱出しなければ、兵糧が尽きてしまう。ずーっとその場所でコミットしていたいんならそこで農家やればいいし、別にこういうことは考えなくてもいい。ただし人生は有限。

時間の価値を、およそ2倍くらいの値段で考える。時間は、考えているよりも2倍ぐらいの速度で過ぎ去っていくため。

余談。豆腐メンタルについて。 どんなことを成し遂げても、ネガティブ思考で幸せになれない種類の人がいる。自分自身に営業しないとやってらんない。自分の為に実績を作っておく。口先三寸で自分をうまくだませればよいが、自己承認下手な営業下手は、資料作っておくほうがいいだろうな。自分の豆腐メンタルはお客様です。

時代に合ったコンテンツの文法を作る

新たなフォーマットが生まれるときというのは、大体その前身となる、自然発生的なフォーマットが存在していると思っている。

要はBlogの前にWeb日記があっただろとかその程度の話なんだけれど、出始めの頃は「これでいいじゃん」感が叩かれやすかった気がする。

iPad向け電子書籍とかは、ビデオ入れたりインタラクティブだったり色々試みられているけれど、飛び出す絵本なんかと一緒で、リッチすぎてコストかかりすぎるし市場も狭い。こういうのが売られている一方で、ガラケー向けのこれでいいじゃん的なコンテンツが大量に流通しているわけで。可能性を追求するのはいいんだけど、拡張しすぎたあまりに方向性を見失ってしまってはいけないんじゃないか。可能性よりも、大幅に割り切ることが必要なように思う。

コンテンツの文法というのはとにかく簡単なルールに沿うべきだなということを最近思っている。言語は伝達という目的さえ果たせればそれ以上にルールを複雑化させる必要はないわけで、あとは構造を作れるようになってさえすれば、どんな用途に向けても十二分に活躍出来る。

その時代に草の根から出てきたニーズの芽を、これでいいじゃん的な割り切りとともにリリースするのが、革新と呼ばれているのだと思う。

展開の順序を考える。

1.今の時代の、下世話(a.k.a キャッチー)なニーズを、個人サイトのコンテンツやTwitterの草の根企画などから拾い上げる。

2.テーブル二つ程度のしょぼいWebアプリとして設計する。あれもこれも必要、というフルスタックで作りたくなる欲求を捨て、まぁこれでいいか程度で作る。ただしパーツとして利用されることを意識して、各コンテンツにパーマリンクが付くようにする。囲い込まない。

3.関係各所に迷惑を掛けないように、XSSとインジェクションのチェックをする。

4.各Viewを作る。トップページ、ユーザページ、コンテンツへの個別ページで十分。

5.UIを作る。説明書の代わりに、例題を用意する。例をいじくることでコンテンツを即デプロイできるようにする。

6.ほどよい脱力感のある名前を付けてリリース。

構造については、WebのURLと、リンクという仕組みが担保してくれているし、あとはDBが適切に設計されていれば、ミクロな構造はそれらしくリンクするし、APIでそれをそのまま外だしすればいい。けどまぁユーザが増えてからでもいい気はする。

CodeIgniterのテンプレート作成手順

たとえばtodoという名前のアプリを作る。

1.htdocsルートにapplicationとsystemフォルダを置いてしまう。

2.applicationフォルダの内容を、todoサブディレクトリ作って全部中に移動。

3.todoディレクトリをリネームして大量に複製しておく(別アプリ用)。

4.index.phpをコピーしてtodo.phpにリネーム。これも作りたいアプリの数だけ作る。

5.それぞれのphpの$application_folderを’application/todo’とかに変えておく。

ここまでで、systemを複数アプリで共有できるようになる。

次、基本設定。

1.database.phpとconfig.phpをコピーして、database.php.exampleとconfig.php.exampleを作っておく。database.phpとconfig.phpはサーバとローカルで内容が異なるので、デプロイ対象にしない(これはもっといい方法があるかも)

2.DB設定を済ませる。

3.autoload.phpにdatabaseを設定しておく。database使わないWebアプリなんてめったにないし。

4.sqlのコンソールで、DBとテーブルを作っておく。ついでにサンプルデータも何行か入れておくと確認が早い。

こんなもんか。

次、コントローラいじって簡単なアプリを作って動作確認。welcome.phpを適当に書き換えていく。

コンストラクタ。使いそうなモジュールを適当にロード

public function __construct() {
    parent::__construct();

    //ここにロードしたいモジュールを記述
    $this->load->helper('url');
    $this->load->helper('form');
    $this->load->helper('cookie');
    $this->load->library('pagination');

}

次indexメソッド。

//一覧表示
public function index()
{
    //デバッグを行うには、下記をコメントアウトして下さい。
    //$this->output->enable_profiler(TRUE);
    $limit = 20;
    $offset = 0;

    //DBより読み込み
    $this->db->order_by("id", "desc");
    $query = $this->db->get('todo', $limit, $offset);
    $data['result'] = $query->result();

    //VIEWに入れて表示
    $this->load->view("todo_list", $data);

    $this->db->close();
}

削除。

//削除
public function remove($id){
    $this->db->where('id', $id);
    $this->db->delete('todo');
    redirect('/');
}

登録。

//登録
public function add() {
    $input_data = $this->input->post('todo');

    $data_array = array(
        'data' => $input_data
    );

    $this->db->insert('todo', $data_array);
    $last_id = $this->db->insert_id();

    redirect('/');
}

あとはviewを作る。これはtodo_list.php

<!DOCTYPE HTML>
<html lang="ja-JP">
<head>
    <meta charset="UTF-8">
    <title>Todo</title>
</head>
<body>
<form action="<?php echo site_url(); ?>/welcome/add" method="POST">
    <input type="input" name="todo">
</form>
<ul>
<?php foreach ($result as $item): ?>
    <li><?php echo $item->data; ?> <a href="<?php echo site_url().'/welcome/remove/'.$item->id; ?>">x</a></li>※→この行XSSあり
<?php endforeach; ?>
</ul>
</body>
</html>

これで一行掲示板的なのできた。

あっ、XSS対策。

<li><?php echo htmlspecialchars($item->data); ?> <a href="<?php echo site_url().'/welcome/remove/'.$item->id; ?>">x</a></li>

※をこれに修正しておく。XSSは出口で防ぐのが基本らしいので、VIEW側で対策をする。

ここから認証を入れるなら、TankAuthかIonAuthを使うといいと思う。一般的なメール認証が出来るようになる。ただ、本命はTwitter経由のOAuthだろうなー。このあたりも、実現できたらしようと思う。パスワード持たなくて済むなら、個人サービスとしてはその方がいいやね。

あとは、BitBucketとかGitHubに公開出来るなら、非常に今時だとおもう。database.php.exampleを作ったのは、パスワードを間違ってpushしないようにだけど、他にいい方法があるかなぁ。

WebApp量産体制

何もしていない。何か作ろうにも、テンプレートがない、文法忘れてる、既存のコード変更するのが怖い、デプロイで動かなくなるのが怖い、等々、20秒ルールの逆を行っている。

さすがに今の停滞はまずい。と思って、作業環境をCIぽくしていこうと思う。

ラピッドプロトタイプのために、SQLiteを基礎にしようと考えたんだけれど、CentOSのPHPだと無効になってるみたいだ。コンパイルするのも面倒だし、そもそもCodeIgniterのSQLite対応、何だか怪しい。嫌いなプロダクトなんだけれど渋々MySQLを使うことにする。

以下のスペックを基礎とする。

  • CodeIgniter
  • MySQL
  • Ajaxは使わず、POSTとGETだけでやる

デプロイをどうしようか。

  • MAMP上で開発し、rsyncでテストサーバにデプロイするか?
  • それともSVNからのデプロイにしようか。
  • 折角ならJenkinsでやってみたい。
  • VPSのメモリが心配。
  • そもそもSVNサーバどこに立てるのよ

ああ、めんどくさくなってきた…

熱源

昔は雑誌に「熱気」を感じていたけど、今はそれがWebに移行してしまって、非常に断片的・離散的な印象を受けてしまう。TVと同じように、局所化が進んで、結果文化が残らないような気がしてしまう。ニコニコにカテゴリがあるようなコミュニティはまだいいけれども。

まあ文化を守るなんてどうでもいいんだけれど、自分の居心地のいい場所、モチベが保てる場所は欲しい。

今熱気のある場所は何だろう、と考えた時に、やはりオンラインに対するオフライン、お祭りなんだろうなーと思う。そこに人が集まると分かっていれば、驚くほどに皆がそこへ足を運ぶ。なぜなら、そこには熱気があるから。

僕のような人間はいつだって熱源を求めている。結構孤独な人間が周りに多いけれど、彼らですら祭りを見に来るのだ。

祭りをつなげた時に何が起こるだろうか。一つ考えているのは、クラスタ毎にイベントカレンダーを作ることだ。そのトップページには常に新しい話題が提供されていくことになる。そして現場に足を運べば、熱を感じることができる。TwitterやUStreamで熱をシェア出来る。

祭りは形に残らない。そこはどうしたらいいんだろうか。僕は形に残るモノが好きだ。一つの手としては、お土産を作ることだ。

祭りには中心人物が必要だ。さんざんやってきたが、僕はそれにはなれない…と思う。でも誰もやりたがらない。やるべきかやらぬべきかいつも迷う。

あと、祭りのノリあんまり好きじゃない…。やっぱり本がいいなあ。

Carpenter’s Cradle構想

ソフコンオフというのの副幹事をやってきた。次回幹事は自分がやるはずだけど、コミュ力のなさに絶望したので困った。

クリエイター(もしくはアマチュア土方)の理想的な環境とは何か、と考えたときに、すぐ思い浮かぶのがソフコンだ、という話を、当時の読者さんを中心に語ってきた(何パーセント伝わったかは分からないけど)

一応コンセプトに名前を付けるとすると、「Carpenter’s Cradle」(大工のゆりかご)ぐらいになるだろうか。創造性を妨げずに、常に作ることを肯定されながら、潤沢なリソースを元に作ることが出来る。ポジティブなフィードバックを受けることが出来る。夢を見る(コンテスト)ことが出来る。そんな環境。

一方で、崎田さん(一時期編集者だったことがあるらしいので)にこの話をすると、それを編集者が引き受けるのは限界がある、という話をされた。そういったことを引き受けてくれるのは、むしろゲームメーカーなんじゃないかと。

ゲーム本職の人に対して、及び腰になっているところがあるのかなーと自省した。確かにこういう話は、ゲームメーカーの人にすべきなのかもしれない。編集者に対して甘えた考えを持つのも、このくらいにして、微力でも自分で動かなければいけない。

はてなハイクというコンセプト

まあ全然使ってないんだけどね…。過疎だし、Tumblrみたいにカスタマイズして自分のモノに出来ないのが楽しくないのかもしれん。はてなのプロダクトって、どれも楽しげなのにカスタマイズの楽しみが全然ない気がする。

俳句というのは文字数の制限の中で詩を展開するというシステム。様式の力で、小さなエネルギーで世界観を展開することができるし、初学者にとっても、全体が把握しやすいので敷居が低い。短歌は、上の句下の句があることで、コミュニケーションに使うことも出来たし、ちょっとしたゲームをすることもできた。

こういう自由度を、俳句という名前で表すのはなかなかいい方法だなと思った。ちょっとした絵も描けるし、ハッシュタグよりも大喜利に向いているし。

問題は何故過疎なのかだ・・・