2009年10月18日 #iphone

結果から言います。


メールアプリケーション(Mac OS Xの「メール」や「Microsoft Outlook」など)と同期されます。


iTunesではメモ帳を同期するように設定したのですが、

どこを探せばいいかわからなかったので、調べました。


言うまでもないことかもしれませんが、

私のように知らない人もいると思って、一応書きました。

2009年10月18日 #iphone

PDFの本をiPhoneに同期し、帰り道やカフェーで読みのが今一番楽しいことです。

iPhoneの既存ビューアでもPDFは見れますが、

あまりにも機能的に貧乏すぎます。

私が求めているのは以下の2点です。

  • 横スクロールの固定。いったん横幅をPDFにあわせて調整したらあまり変更することはないでしょう。
  • 簡単にPCからPDFをおとす。これは言うまでもない日常的に非常に役に立つものです。

いろいろ調べたらGoodReaderが出てきました。

115円にとってはかなり使いやすいものです。

購入はこちら:http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=306277111&mt=8

幾つかのスクリンショットで紹介しましょう。

これが初期画面です。

ファイルのインプットタイプでフォルダが分けています。

f:id:kinopyo:20091017142914p:image


ファイルの選択画面ですね。

f:id:kinopyo:20091017142916p:image


これが実際PDFを開いた時の画面です。

内容検索、ブックマーク、ページ指定などの機能があります。

f:id:kinopyo:20091017142917p:image


赤い四角で囲まれたボタンは横向き/縦向きを転換します。

赤い丸で囲まれたボタンは横スクロールをロックします。

f:id:kinopyo:20091018010600j:image


ファイルに対して基本の操作ができます。

コピーだっだり、リネームだっだり、メールもできます。

f:id:kinopyo:20091018010635p:image


そしてiPhoneをパソコンにつなぐだけでファイルを転送するアプリがあります。

GoodReaderUSBといいます。Mac,Windows両方対応してます。

これが操作画面です。

GoodReaderUSB

ダウンロード先はこちら:http://www.iphone-explorer.com/AppPages/GoodReader.html

2009年10月17日 #movie

17日池袋シネマサンシャインで鑑賞した。

シリーズ第四部として、相変わらずの殺しのシーンがいっぱいありました。

プラス3Dなので、かなりの迫力でした。

しかし全くストーリが全く同じパターンなので、新鮮感がなくなりました。

  • パターン
  • 主人公が死を予知できる
  • 幾つの人を救った
  • 元々の死の順番で彼らが死ぬ
  • 主人公と仲間達は死の連鎖を止めようとする
  • いったん成功したようになった後、残りの三人あわせてエンディングで死ぬ

シリーズ全くこの流れなので、もう勘弁してほしいです。

人が死のシーンをわざわざと2000円も払って映画館で楽しむ何んて、

自分のどこかが変態だと思っちゃいました。

3Dの眼鏡は私の頭だと小さすぎます。

着用するとかなりきついくらい、

もらったその場で先に試着みてください。

ファイナル・デッドサーキット 3D - goo 映画

2009年10月14日 #diary

今のプロジェクトは基本設計段階で毎週お客さんと定例会を実施している状態。

うちから参加するメンバーはPM、サブPM含めて四人です。

って、戻ったら情報共有で参加しなかったメンバーに対して議事録を基に説明します。

ですが、途中で議論がどんどん出てきていつになってもなかなか結果が出ません。

結局会議が長続き、効率的ではないことは一目瞭然です。


なぜこうなるのでしょうか?

みんな定例会に参加したのになぜ受取りにこんなに差があるのでしょうか?

後で思ったのはやはり前提条件、あるいは先入観せいだと思います。

参加メンバーはプロジェクトに対しての理解にずいぶん差があり、

お客さんの同じ言葉でも人それぞれ違う形で受け取ったかもしれません。


逆に言うと、お客さんも何かを明確に話さないといけない気がします。

日本で二年働いて感じたのは、お客さんの話が曖昧すぎる傾向があるということです。

「お客さんの認識では。。。」という言葉がいつも出てきますが、

こんな表現が出たところで、既にお互い明確に話し合ってないと思います。

もちろんこれは日本文化の一つでもあり、特にビジネス上何もかも明確になってはいけないこともあります。

とはいえ、誤解が生むまで曖昧するくらいなら納得できませんね。


あるテレビのCMを思い出しました。

「アイデアはどこで生まれる?」というテーマで

様々の場所でのパーセントを提示したCMです。

最後はなんと会議室で0%とのシーンがあります。

的中ですね。。。

ちなみに「トイレ」で31%との結果は意外と高かったほうでした。

私もいつもトイレでは集中できるので、

自分だけがおかしいかなと思っちゃいました。

2009年10月13日 #jquery

本文(英語)のアドレス:
A Plugin Development Pattern » Learning jQuery - Tips, Techniques, Tutorials

結論から

まず、要点規約に沿ったソースを先頭に置きます。

  1. Claim only a single name in the jQuery namespace
  2. Accept an options argument to control plugin behavior
  3. Provide public access to default plugin settings
  4. Provide public access to secondary functions (as applicable)
  5. Keep private functions private
  6. Support the Metadata Plugin
// create closure
(function($) {
  // plugin definition
  $.fn.hilight = function(options) {
    debug(this);

    // build main options before element iteration
    var opts = $.extend({}, $.fn.hilight.defaults, options);

    // iterate and reformat each matched element
    return this.each(function() {
      $this = $(this);

      // build element specific options
      var o = $.meta ? $.extend({}, opts, $this.data()) : opts;

      // update element styles
      $this.css({
        backgroundColor: o.background,
        color: o.foreground
      });

      var markup = $this.html();
      // call our format function
      markup = $.fn.hilight.format(markup);
      $this.html(markup);
    });
  }

  // private function for debugging
  function debug($obj) {
    if (window.console && window.console.log)
      window.console.log('hilight selection count: ' + $obj.size());
  }

  // define and expose our format function
  $.fn.hilight.format = function(txt) {
    return '<strong>' + txt + '</strong>';
  }

  // plugin defaults
  $.fn.hilight.defaults = {
    foreground: 'red',
    background: 'yellow'
  }
// end of closure
})(jQuery);

解読

1. Claim only a single name in the jQuery namespace

  • 目的:jQueryの名前空間にファンクション(メソッド)を一つのみ追加。

プラグイン目的の純粋化と思われます。

  • 実装例
// プラグインの宣言
$.fn.highlight = function() {
  // Our plugin implementation code goes here.
}
  • 使い方:
$('#myDiv').highlight();

以下はよくないパターンです。こうするなら二つのプラグインに分けるか、目的をもっと明確にしろうってことです。

  • 実装例
$.fn.oneFunction= function() {};
$.fn.anotherFunction= function() {};

2. Accept an options argument to control plugin behavior

  • 目的:オプションをつけることでより柔軟なAPIをユーザに提供
  • 実装例
// プラグインの宣言
$.fn.highlight = function(options) {
  var defaults = {
    foreground: 'red',
    background: 'yellow'
  }
  // Extend our default options with those provided.
  var opts = $.extend(defaults, options);
  // Our plugin implementation code goes here.
}
  • 使い方
$('#myDiv').highlight({
  foreground: 'blue'
});

3. Provide public access to default plugin settings

  • 目的:デフォルトの設定を変更できるようにする。
  • 実装例
// プラグインの宣言
$.fn.highlight = function(options) {
  // Extend our default options with those provided.
  // Note that the first arg to extend is an empty object -
  // this is to keep from overriding our "defaults" object.
  var opts = $.extend({}, $.fn.highlight.defaults, options);
  // Our plugin implementation code goes here.
}

// plugin defaults - added as a property on our plugin function
$.fn.highlight.defaults = {
  foreground: 'red',
  background: 'yellow'
}
  • 使い方:全体のデフォルト設定を変更することもできるし、個別にオーバーライドすることも可能
// override plugin default foreground color
$.fn.highlight.defaults.foreground = 'blue';
// ...
// invoke plugin using new defaults
$('.highlightDiv').highlight();
// ...
// override default by passing options to plugin method
$('#green').highlight({
  foreground: 'green'
})

4. Provide public access to secondary functions (as applicable)

  • 目的:プラグイン開発者、または使い側がより簡単に拡張できる
  • 方法:jQueryの名前空間に登録したファンクションにプロパティとして一個追加することで実現可能です。
  • 実装例:

例えば文字列をフォーマットするファンクション"format"があるとします。
ここでは単純に強調表示するだけですが、誰でも簡単に変更できます。

// プラグインの宣言
$.fn.highlight = function(options) {
  // iterate and reformat each matched element
  return this.each(function() {
    var $this = $(this);
    // ...
    var markup = $this.html();
    // call our format function
    markup = $.fn.highlight.format(markup);
    $this.html(markup);
  });
}

// define our format function
$.fn.highlight.format = function(txt) {
  return '<strong>' + txt + '</strong>';
}

5. Keep private functions private

  • 目的:単純にprivateなファンクションをprivate化にするだけ
  • 方法:javascriptのクロージャで全体を囲む
  • 実装例:
// create closure
(function($) {
  // プラグインの宣言
  $.fn.highlight = function(options) {
    debug(this);
    // ...
  };

  // private function for debugging
  function debug(obj) {
   if (window.console && window.console.log)
     window.console.log('highlight selection count: ' + obj.size());
   }
   //  ...
// end of closure
})(jQuery);

6. Support the Metadata Plugin

Plugins/Metadata/metadata - jQuery Wiki

  • 目的:

これはMetadataというプラグインがあるそうで、
なおかつたくさん人が使っていることを前提(或いは現状)としたため、
自分が作ったプラグインはMetadataにも対応するべきという結論になったわけです。

  • TODO:

私もまだMetadataプラグインが何か全然わからないため、
ここはTODOとして残します。

2009年10月11日 #sqlite

インストール

  • 公式サイト(http://www.sqlite.org/download.html)でファイルをダウンロード。Macなら二番目の「sqlite-amalgamation-3.6.18.tar.gz」をダウンロードすればよい。
  • Macのターミナルを起動し、上記解凍パスに移動する。
  • 下記コマンドを実行する。

./configure --prefix=ここでインストールパスを指定

make

make install

    • 私の場合は--prefix=/users/user_name/Database/sqlite

インストールの詳細は解凍先のドキュメントの「INSTALL」を参照してください。

ここでは一番簡単(デフォルト)のコマンドを紹介します。

英語ばかりでわかりづらいかもしれません。


これでインストールは完了です。

指定したインストール先には「bin」、「include」、「lib」の三つのフォルダがあるはずです。

次にターミナルでbinフォルダに移動します。

ここからはsqliteのシンタックスになります。

データベースの起動/作成

sqlite test.db;

これでtestという名のデータベースにつながります。もしtest.dbのファイルがなければ自動で作成されます。

こんなメッセージも出るはずです。

SQLite version 3.4.0

Enter ".help" for instructions

テーブルの作成

次に簡単なテーブルを作成し、データをINSERTしましょう。

sqlite> create table Employee(id int,name varchar(15));

sqlite> insert into Employee values (1,'Jim');

sqlite> insert into Employee values (2,'Tom');

sqlite> select * from Employee;

1|Jim

2|Tom

sqlite>

データベースのクローズ

.exit

ちょっと探しましたが、このサイトで日本語の資料がたくさんあるようです。

http://www.dbonline.jp/sqlite/index.html

2009年10月10日 #diary

iPhoneの基礎知識、SDKにある程度理解しているため、

今日のiPhoneについてのスピーチの6-7割は既にわかっているものにすぎませんでした。

この場に来る人たちは多分そうであろうと私は思っていますが、

背景や歴史など、そこまで詳しく説明しなくても良さそうな気がします。

4000円払って知ってるものを聞くのはよくないですね。


Androidについてはなかなか満足のできなかったスピーチになったと思います。

私はAndroidについてニュースくらいで知ってて、

その特徴は何か、これからどれくらい伸びかなど気になってたんですが、

なかなかこういう面での話はきちんとできなったのです。


唯一深津さんの話には肝心のものがありました。

f:id:kinopyo:20091011035648j:image

f:id:kinopyo:20091011035958j:image

特に意識してほしいのは深津さんの話によると、


ボタンやレイアウトなどの大きさとか、母指で押しやすいかどうかも含めて

最初にUIをきちんと決めることです。


俺も実際その方針でやりたいのですが、

Photoshopができないかつ、インターフェースのデザインなどの経験もないので、

ついつい実装から始まり、プロトタイプができたところで

アプリにあわせた画像や素材を探し始めます。

デメリットといえば、UI設計が揃ってない状態ではユーザ操作の体験が

なかなか想像しにくいです。

コーディングもできて画像を貼付けるところで、

「これ押しにくいな~」と気づいたこともあるでしょう。


やはりある程度のPhotoshopの腕とデザインのセンスが必要と思います。

みなさんはどうなさっていますか。

この部分(UIのデザイン)を誰かに頼んで発注する案も可能であれば、

やってみたいです。

これに関して興味のある方はぜひ私の方に連絡してください。


もう一点参考となったのが、

UIデザインはPhotoshopなどではなく、

iPhoneと同じ大きさのペッパーで行ったことです。

それで実際のボタンの大きさや、レイアウトの問題に

気づきやすいですよね。

2009年10月 8日 #diary

f:id:kinopyo:20091008091000j:image

朝の電車の調子です。

台風の影響でもうめちゃくちゃです。

電車のホームは人いっぱいですね。

おかげで今日は一休み。

ラッキー!

18号って、ドラゴンボールの18号を思い出します。

18号

2009年10月 7日 #diary

意外!

ネットで試験結果を見た時、うれしかった!

事前準備も特にせずに、ほとんど勘で答えたので、

とんでもない点数としか思わない。

一番苦手だっだリスニングがなんと420点、

自慢だっだリーディングは375、

これもまた意外だよね。。。

リーディングがもうちょっとうまくいったら800点までとれたのに。。。

残念!

とりあえず800点ということで、しばらくは試験を受けないことにした。

今回のリスニングはやはり普段見てたアメリカのドラマが役に立ったと思うわ。

これがコツとでも言いましょう。

仕事が落ち着いたら次は英会話のクラスに!

2009年10月 7日 #diary

これが何のイベントかっていうと、下記になります。

CROSS(クロス)は、CSS Niteからスピンオフした、Webクリエイター向けのイベントです。2つのすばらしいプロダクトを交互に紹介して、その魅力や特長をスピーディに知ることができる場を提供いたします。

今回取り上げるのは、Appleの「iPhone」と、Googleケータイこと「Android」。

公式サイトはこちら

@ITのイベントページで見つけたのです。

なんと、アクセスランキングが第二位です。

先日見たときは既に満席となってしまい、キャンセル待ちの受付をしました。

そろそろ寝ようかと思ったとたん、通知のメールが飛んできて、

すぐに申し込み!

うれしいな~

今週の土曜日です。お楽しみに!