Hatena::ブログ(Diary)

For Want Of A Better Word

2011-03-05

まとめておくこと。

基本的な操作(途中)
  • プロジェクトの作りかた。 →済
  • GUIの作りかた。 →済
    • GUI部品の種類  →済
    • 設定できる内容
  • GUIと処理の連携(イベントハンドリング)のさせかた。
    • ボタンから →済
  • 値の画面への入出力方法 →済
  • 実機での動かしかた 
  • 画面遷移の仕方
  • 複数画面アプリの作り方
  • データの保存
  • 画像の参照
機能
  • カメラ
  • データ参照
  • GPS機能
  • 画像解析
  • 加速度センサー
  • ファイルの表示(画像/ファイル)
  • サーバ連携
  • APIとの連携方法
  • bluetooth通信(フレームワークの利用あり/なし)

用語関連

委譲(delegate)

コールバック関数と考えておけば良さそう。オブジェクトが渡されたメッセージを別のオブジェクトに丸投げしちゃうというもの。

特定の条件下(AならばA' BならばB')というような形式でこれを実行するならば、Aはイベント、A'はコールバック関数ともいえる?。

※ポイントは、単に「別オブジェクトメソッドを呼び出す」という訳ではなく、メッセージそのものを引き渡してしまうということ。ポリモーフィズム的に作成しておく必要がある。

コールバック関数 クロージャ

クロージャ (クロージャー、Closure) は、
プログラミング言語において引数以外の変数を実行時の環境ではなく、
自身が定義された環境(静的スコープ)において解決する関数のことである。
 無名関数と説明されることもあるが、
無名関数でなくてもいいっちゃいい。
関数関数。
 宣言した関数からも独立した関数内独自の変数スコープを持つ。
 変数の値は保持し続ける。
    • [どうやって使う? メリットなど]
呼び出すごとに1インクリメントした数値を返すような関数を作成できる。
(しばしば、オブジェクトの代替として利用できる。)
下記の関数newCounter()を実行するとi=0で初期化されているが、
returnは function(){return i;}なので、
 function()内のローカル変数iの値が返却される。
 またこのiの値は破棄されず、保持され続けるので、呼び出すたびインクリメントした結果がかえってくる。

function newCounter() { // エンクロージャ(クロージャを内包する関数)
    var i = 0;
    return function() { // 無名関数でありクロージャでもある。
        i = i + 1;
        return i;
    }
}
c1 = newCounter();
alert(c1()); // 1
alert(c1()); // 2
alert(c1()); // 3
alert(c1()); // 4
alert(c1()); // 5

    • [その他]
実行方法として、変数に格納して実行するか、
定義してそのまま実行するかなどあるので、
書き方に注意。

コールバック関数

他のコードの引数として渡されるサブルーチン/関数引数として関数自体を渡せるので、
引き渡された関数側に定義されてない処理も実行できる。
「この関数を使ってね」と関数のアドレスを教えて、
教えてもらった側はそのアドレスにアクセスして使うという
形式なので、「電話の折り返し」に例えられて、「lコールバック」と呼ばれる。 
    • [どうやって使う? メリットなど]
しばしば、イベント検知時の処理として使われる。
イベントの検知処理を含む関数を記述しておき、
それにコールバック関数を渡すことで、
イベント検知時に該当のコールバック関数を動かすようなことが可能。

コールバック関数クロージャの違い

混同してたけど違う。クロージャは、独自スコープの関数。
コールバック関数関数の使い方にまつわる話。
 
 クロージャの用途は、独自スコープ変数を利用することがメイン。
 クロージャを含むエンクロージャ関数をコールバック関数として利用することも可能。
|< 
			

			

		

mime-thpe AddTypeディレクティブ

mime type とは

「タイプ名/サブタイプ名」の形式の文字列で、WEBサーバーとWEBブラウザの間はこのMIMEタイプを用いてデータの形式を指定しています。

apache でのmime-type設定方法
httpd.conf htaccess
 AddType text/html .html
→意味:.html という拡張子のファイルは text/html というMIMEタイプのデータとして送信する」

※注意

ブラウザが xx.gif というファイルをWEBサーバーに要求する際、WEBサーバーはxx.gifの内容(データ)を「これは image/gif タイプのデータです」と言いながら返却してくれます。これにより、ブラウザは受け取ったデータを正常に処理することができるのです。
しかし、Internet Explorer などのブラウザでは、この MIMEタイプの情報を無視して拡張子の方を信用したり、MIMEタイプや拡張子を無視してファイルの中身を見て「text/plain と言っているけど、これは HTML文書みたいだから、HTMLとして表示してあげるね」と、いらぬお節介をするブラウザもあり、なかなか、期待通りには制御できないのが実状のようです。
結論

一言でいうと、MIME-TYPEは[ブラウザが対象ファイルを判定するための属性]。

参考mime-type一覧

http://www.geocities.co.jp/Hollywood/9752/mime.html

mime type系の処理について

[HTMLの場合]

  • ?apacheがリクエストを受け取る。
  • ?対象のファイルを見つける。

  • ?実行結果を返す。このときhttpヘッダにmime-typeを添えてあげる。
    • このmimetypeは conf/mime.types に記載されているか、AddTypeで、該当の拡張子に紐付けられたものを返す。


検証
  • addtypeは拡張子とコンテントタイプを紐付ける。addハンドラは拡張子とハンドラを紐付ける。
# ?
 AddHandler php5-script .php
# ?
 AddType text/html .php
# ?
AddType application/x-httpd-php .php

?を有効にしたとき??は関係なく、.phpphpとして解釈される。
??を無効にし?のみを有効にしたとき、phpはテキストとして解釈される。
??を無効にし?のみを有効にしたとき、phpphpとして解釈される。

以上より、拡張子とハンドラを紐付けた場合、確実に該当のハンドラが実行される。
一方、拡張子mime-typeを紐付けた場合にも。
そのmime-typeにより実行されるハンドラがデフォルトで選別されている可能性が高い。
  →★mime-typeとhandlerの紐付け箇所を探す!
       ???????わからーん???????????
検証2
  • phpをimg/pngに紐付けて見る。
#AddHandler php5-script .php
#AddType text/html .php
#AddType application/x-httpd-php .php
 AddType image/png .php
}}}

[tammper data]
Accept=image/png,image/*;q=0.8,*/*;q=0.5

[結果]
ブラウザ(FF)に下記と表示される。

画像ファイル "http://192.168.0.7/php/test.php" は壊れているため、
表示できませんでした。}
→AddTypeの設定が、ブラウザに引き渡され、
ブラウザはそれで解釈しようとしていることがわかる。