2008/11/30 日曜日

新幹線0系終了のおしらせ

Filed under: 開発メモ — admin @ 23:39:38

新幹線の初代から走ってきた0系の運転が今日で終了となる。

アナログからデジタルまでのかけはしとして日本のトップレベルの技術力がふんだんに使われ、常に日本の象徴として親しまれてきたものだ。

NHK動画ニュースさよなら0系
http://www.nhk.or.jp/news/t10015700071000.html

そういえば、いつのまにかNHKにも動画ニュースページができていた。最近はメディアのWeb進出が目立つようになってきたのでこれはいいかもしれない。

新幹線の話に戻すとデジタル化により、現在の新幹線の位置を知ることのできる新幹線マップというものがある。簡単に説明するとGoogleMAP-APIと新幹線の位置情報(GPS)をもとにして合成し、MAP上に表示しているもの。リアルタイムに表示されているので、ちょこちょこ動くのが面白い。

新幹線マップ
http://marukan.nayutaya.jp/

ちなみに、新幹線内の無線LANが2009年の春から開始される。高速移動中のネットアクセスではアクセスポイントが時速300Km/hで次々と変わってしまうといった問題点があったが、どうやら技術的に解決されたみたいだ。一人当たりの使用帯域は200kbps程度、動画サイト系は見れないが、電子メールやwebサイト閲覧などはできそうだ。

●情報ソース
・新幹線内無線LAN2009年春から ITPro
http://itpro.nikkeibp.co.jp/article/NEWS/20060629/242122/

2008/11/21 金曜日

ニコニコ動画 戦略

Filed under: 開発メモ — admin @ 13:00:06

ニコニコ動画の今後の開発目標がわかるニコニコ動画戦略MAPが公開されていた。

ニコニコ動画戦略マインドマップ niconico_memo.pdf

ニコニコ動画自体の黒字化計画はまだ進行中と見てられるが、上の戦略を見る限りではインフラ面よりソフトウェア強化の傾向がみられる。ニコブログでは回線コストより人件費に回す資金のほうが膨れ上がっているとのこと。

ネットサービスではソフトウェア開発スピードが命であり、使用期限が2年周期とされているため、ソフトウェア機能強化の傾向が強い。

しかし、機能が増えてる反面、すべてを使いきれていないといった意見も挙げられているので、今後どのような変化があるかが見ものだ。専用のヘルプページでも設けるのか、このままの状態で続行するのか、それは管理者次第といったところだろう。

●以下参考文献

・ニコニコ動画
http://www.nicovideo.jp/

・ニコニコ動画開発者blog
http://blog.nicovideo.jp/

2008/11/7 金曜日

CRON ジョブ設定 Linux

Filed under: 開発メモ — admin @ 16:56:01

cronの設定

コマンドを自動実行してくれるcronの設定です。最近のディストリビューションでcronがインストールされないものはないと思います。ただ、 ひょっとすると動いていないかもしれない(自分で止めていない限り動いていると思いますが)ので、ps ax などでcronが動いているか確認してください。動いていない場合は

/etc/rc.d/init.d/crond start

で動かしてください。

/etc/crontab

cronのデフォルトの設定ファイルは/etc/crontabです。Vine2.5では以下のようになっています。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

最初の4行が環境設定になっています。

SHELL
/etc/passwordの記述に関係なく、強制的にここで定義されたシェルを使います。
PATH
PATHの設定です。
MAILTO
cronの実行結果をここで指定されたユーザー宛にメールで送ります。ユーザー名を空にするとメールを送信しません。ただし、MAILTOの記述自体をしないと、crontabファイルの所有者にメールを送ります(デフォルトではroot)。
HOME
cronを実行する際のホームディレクトリの設定です。

# run-parts以下がcronが実行するタスクになります。

書式は、

分 時 日 月 曜日 (ユーザー) コマンド

です。(ユーザー)は通常必要ありません。

01 * * * * root run-parts /etc/cron.hourly

上記は、毎時1分にrootユーザー権限で「run-parts /etc/cron.hourly」を実行します。run-partsスクリプトは指定されたディレクトリ以下を全て実行するコマンドです。/etc /cron.~というディレクトリを見てみるといくつかのスクリプトがあると思います。

タスクの登録

自分で新たにタスクを登録するには、/etc/crontabに書いてもいいのですが、それだとrootでしか登録ができません(/etc /crontabの所有者がrootなので)。なので実際には別のファイルにタスクを書きます(何度も書きますが、/etc/crontabに直接書いて しまっても構いません)。

タスクを記述するファイルはVine2.5の場合、「/var/spool/cron/ユーザー名」です。rootの場合、「/var/spool /cron/root」になります。emacs等のエディタでファイルを新規作成しても構いませんが、専用のコマンド「crontab」を使った方が楽だ と(私は)思います。

$ crontab -e

とすると実行したユーザー用のファイルを新規作成して、編集できるようになります。デフォルトではviが起動します。viの操作方法は、viを使い倒そう 等を参考にしてください。

記述する書式は、先ほども書きましたが、

分 時 日 月 曜日 コマンド

です。

0~59で指定します。*(ワイルドカード)も使用可能です。
0~23で指定します。*(ワイルドカード)も使用可能です。
1~31で指定します。*(ワイルドカード)も使用可能です。
1~12で指定します。*(ワイルドカード)も使用可能です。また、月の名前の最初の3文字で指定することもできます。jun、julなど。
曜日
0~7で指定します。*(ワイルドカード)も使用可能です。0と7が日曜日で6が土曜日です。また、sun等の名前で指定することもできます。
コマンド
cronが実行するコマンドです。当然実行可能なものでなければいけません。 日付、時間の部分は範囲指定が可能です。例えば1時、2時、3時なら、時間のフィールドに「1,2,3」と書く代わりに「1-3」と書けます。また、何分 おき(あるいは何時間おき)という場合は「*/」の後に書きます。2時間おきなら「*/2」です。「1,4,7,10」は「1-10/3」と書くこともで きます。

10分おきに特定のコマンドを実行するには、

0,10,20,30,40,50 * * * * コマンド

とします。またこれは、

*/10 * * * * コマンド

と書くこともできます。

注意として、書くフィールドは必ず左側から指定するようにしましょう。例えば、毎日1時にコマンドを実行しようとして

* 1 * * * コマンド

なんて書いてしまうと、毎日1時0分から1時59分まで1分おきにコマンドが実行されてしまいます。こういう場合は

0 1 * * * コマンド

などと「分」の部分も指定しましょう。これで毎日1時0分にコマンドが実行されます。

1時間おきなら、

0 */1 * * * コマンド

としたいところですが、単に

0 * * * * コマンド

でも結果は同じです。

cronは実行結果をメールで送ってきます。これが邪魔だと思ったら、「MAILTO=」を追加します。こうすると全ての実行結果が送られないよう になります。特定の実行結果のみメールの送信を止めたい場合は、「コマンド > /dev/null 2>&1」としてください。

crontab -e でタスクを登録したら、

$ crontab -l

としてちゃんと登録されているか確認しましょう。ついでに

$ crontab -r

とすると全てのタスクが削除されます。

cronは1分おきに設定ファイルを監視しているのでタスクを登録してもcronの再起動をする必要はありません。ただし、監視は1分おきなので、 「1時34分30秒」に「1時35分」に実行するタスクを登録してもcronは実行してくれません。これは「1時35分」に新たなタスクが登録されたと cronが認識するためです。

もし、タスクが実行されなかったら、ログファイルを眺めてください。ログは「/var/log/cron」に出力されています。

参考サイト

JMAN:crontab
http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html

2008/10/31 金曜日

リンクアグリケーション LANケーブルを束ねる

Filed under: 開発メモ — admin @ 0:18:01

複数のLANを束ね、100Mbps×4本で400Mbpsにする方法。NICの負荷を抑えることができるほか、障害等に強くなる。Windowsは苦しいと思うが、Linuxではbondなどを利用することで出来るみたいだ。

・リンクアグリケーションについて

http://oshiete.nikkeibp.co.jp/qa2169410.html

・NICの負荷分散と冗長化

http://www.stackasterisk.jp/tech/systemConstruction/teaming01_01.jsp

2008/9/28 日曜日

Javascript AJAX 生テキストデータ送信について

Filed under: 開発メモ — admin @ 17:42:39

PHPとJavaScriptのURIエンコードを比較
追記 : 2005.7.16 PHPのurlencode()が空白文字を「+」に変換する件

Ajaxでは、サーバーからデータを受信する際、生のテキスト文字列を使用すると、 responseText,responceXMLそれぞれに文字化けするブラウザがあります。[ 参考:->文字化け調査 ]

これは、Ajaxでの送受信時には、Formの時のようにブラウザが自動でURIエンコード/デコードをしてくれるわけではない、ということに起因すると言えるかもしれません。

一般的には、Formの動作に見られるように、URIエンコードして送受信することで、安全でない文字などが引き起こす、いろいろな問題を回避しようとするわけです。(AjaxでGETやPOSTでの送出時は、ブラウザが自動ではエンコードしてくれない以上、プログラマーの義務ではないかという気がしています。POSTならsetRequestHeader()で、GETなら自前で、、、。)この時、使えるメソッドとして、JavaScriptには、 escape()、encodeURI()、そして、encodeURIComponent() があります。

このうち、escape()は、古いメソッドで、ブラウザにより実装が異なるため使わない方が安全です。残りの、encodeURI()とencodeURIComponent()は、ECMAScriptの仕様に従ったメソッドで、現在流通しているブラウザなら共通に動作するはずです。

ありがたいことに、この2つのメソッドは、ページのcharset(Shift_JIS,EUC,UTF-8,,,)が何であっても、UTF-8 としてエンコードしてくれます。つまり、「Shift_JISからEUCへ」など異なったcharset環境間でデータを受け渡す場合にも必ず「UTF- 8」として明示的にエンコードされたデータとして受け渡せるので安心です。

したがって、もし、サーバーから静的ファイルを取ってくるだけなら、JavaScriptのURIエンコードメソッドで変換した文字列をサーバーにおいておけば、JavaScriptによるAjaxでの受信は、どのブラウザでも同じ種類のデコードメソッドを使えるので文字化けしなくなります。

ところが、サーバーから動的に受信する場合は、あらかじめJavaScriptによるエンコードができません。つまり、サーバー側のPHPなど他の言語でURIエンコードされたものをJavaScriptでデコードしないといけないのです。でも、URIエンコードの実装は、実は、言語によって異なっています。。。そこで、他の言語でのエンコードとJavaScriptエンコード、そしてデコードの違いを実際に確認してみます。今回はPHPです。

もし、問題なくAjaxで受信してデコードされるならそれを使えば良いし、もし、多少の違いがあるなら、そこを修正すれば良いと、いうわけで、、。

比較する文字列
;/?:@&=+$%-_!~*{}[].,()”あa^# ‘
(#の後ろに空白文字があります)
PHP

$data  = ‘;/?:@&=+$%-_!~*{}[].,()”あa^# ‘.”‘”;

mb_http_output ( ‘UTF-8′ );
$data = mb_convert_encoding($data,”UTF-8″,mb_internal_encoding());

$html  = “<br><b>urlencode() : </b><br>”.urlencode($data);
$html .= “<br><b>rawurlencode() : </b><br>”.rawurlencode($data);

echo($html);

urlencode() :
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23+%27
rawurlencode() :
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23%20%27

–>PHPがエンコードしない文字列

-_.a

注意:urlencode()は、空白文字を「+」に変換し、rawurlencode()は「%20」に変換するという違いがあります。
JavaScript

var data = ‘;/?:@&=+$%-_!~*{}[].,()”あa^# ‘+”‘”;

var enchtml = ‘<br><b>encodeURI() : </b><br>’+encodeURI(data)
enchtml + ‘<br><b>encodeURIComponent() : </b><br>’+encodeURIComponent(data)

document.write(enchtml)

encodeURI() :
;/?:@&=+$%25-_!~*%7B%7D%5B%5D.,()%22%E3%81%82a%5E#%20′

–>encodeURI()がエンコードしない文字列

;/?:@&=+$-_!~*.,()a#’

encodeURIComponent() :
%3B%2F%3F%3A%40%26%3D%2B%24%25-_!~*%7B%7D%5B%5D.%2C()%22%E3%81%82a%5E%23%20′

–>encodeURIComponent()がエンコードしない文字列

-_!~*.()a’

結論1
つまり、PHPとJavaScript(ECMAScript)のURIエンコードは、違うのです。
では、デコードするとどうなるでしょう?

デコード : PHP urlencode() → JS decodeURIComponent()

<?php

$data  = ‘;/?:@&=+$%-_!~*{}[].,()”あa^# ‘.”‘”;

mb_http_output ( ‘UTF-8′ );
$data = mb_convert_encoding($data,”UTF-8″,mb_internal_encoding());

?>

<script>

//PHPでエンコード
datad = “<?php echo(urlencode($data)); ?>”

//JavaScriptでデコード
document.write(”<br>”+decodeURIComponent(datad))

</script>

PHP urlencode()でエンコード
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23+%27

JS decodeURIComponent()でデコード
;/?:@&=+$%-_!~*{}[].,()”あa^#+’

–>encodeURIComponent()はエンコードしないが、decodeURIComponent()がデコードした文字列

!~*()’

(-_.aは、PHP がエンコードしません。)

おお、encodeURIComponent()でエンコード出来なかった文字までデコード出来てる!

てことは、PHP–>JS なら、「utf-8化してurlencode()」–>「decodeURIComponent()」で、使えるのでしょうか?
うーん、、、でも、これって、ECMAの仕様的にOKなんでしょうか?よくわかりません、、、。

この組み合わせの場合、最大の問題は、urlencode()によって「+」に変った空白文字がそのままなため普通の「+」と区別がつかなくなること。 ということで、次は、空白文字をencodeURIComponentと同じ「%20」に変換する、rawurlencode()で試してみましょう。

デコード : PHP rawurlencode() → JS decodeURIComponent()

<?php

$data  = ‘;/?:@&=+$%-_!~*{}[].,()”あa^# ‘.”‘”;

mb_http_output ( ‘UTF-8′ );
$data = mb_convert_encoding($data,”UTF-8″,mb_internal_encoding());

?>

<script>

//PHPでエンコード
datad = “<?php echo(rawurlencode($data)); ?>”

//JavaScriptでデコード
document.write(”<br>”+decodeURIComponent(datad))

</script>

PHP rawurlencode()でエンコード
%3B%2F%3F%3A%40%26%3D%2B%24%25-_%21%7E%2A%7B%7D%5B%5D.%2C%28%29%22%E3%81%82a%5E%23%20%27

JS decodeURIComponent()でデコード
;/?:@&=+$%-_!~*{}[].,()”あa^# ‘

–>encodeURIComponent()はエンコードしないが、decodeURIComponent()がデコードした文字列

!~*()’

(-_.aは、PHP がエンコードしません。)

おお、こんどこそデコード出来てる!
、、、他に問題ないかなぁ、、、(^^;。
結論2
PHPは、 utf-8化 + rawurlencode() → JS decodeURIComponent() この組み合わせで、行けそうかも?

実験してみました
Allabout Ajax/動的なテーブル書き換え2 (+PHP)
クライアント側のスクリプト
サーバー側のスクリプト

参考 :
ECMA-262 3rd
15.1.3 URI 処理関数のプロパティ (URI Handling Function Properties)

HTML 4.0( 日本語訳 )
17.13.3 フォーム・データの処理
methodが”get”で、 actionがHTTP URIである場合は actionの値を取り、それに`?’を付け、次いで “application/x-www-form-urlencoded” content typeを使ってコード化されたフォーム・データ・セットを追加します。そしてリンクをURIにわたします。この過程でフォーム・データはASCIIコードに限定されます。
methodが”post”で actionがHTTP URIの場合は、 action属性を使ってHTTP “post”処理と enctype属性によって特定された 内容タイプに従って作成されたメッセージを伝えます。

application/x-www-form-urlencoded urlencoded
これは、初期内容タイプです。この内容タイプで転送されたフォームは、以下の様にコード化されなければなりません:

制御名と値は、入れ替え(エスケープ)られます。空白文字符号は `+’に置き代えられてから、貯えられた文字符号は [RFC1738]、セクション2.2に記載されている様に置き代えられます:非英数文字符号は`%HH’で、パーセント記号や十六進法数値はASCII コードに。強制改行は “CR LF”の組(例、 `%0D%0A’)で代表されます。 制御名前/値は文書に現われる順番にリストされます。名前は `=’で分けられ、名前/値は `&’でお互いに分けられます。

:
:
enctype = content-type [CI] この属性は、サーバーにフォームを転送するために使われる content typeを特定します( methodの値が”post”の場合)。この属性の初期値は、 “application/x-www-form-urlencoded”です。 “multipart/form-data”値は、 type=”file”のある INPUT要素と組で使わなければなりません。

HTML 4.01( 日本語訳 )
17.13.3 フォーム・データの処理

RFC1738 Uniform Resource Locators (URL) ( 日本語訳 )
2.2. URL 文字エンコーディングの問題
*これはRFC 1738とRFC 1808で定められた書き方を改めるものです。
2.2. 予約文字 Reserved Characters

URI 構成要素のデータが予約された目的と衝突するならば、対立するデータは、 URI を形成する前に回避されなければなりません。
reserved = “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”

2.3. 予約されていない文字 Unreserved Characters

URI で許されるが予約された目的がないデータ文字は、非予約文字と呼ばれます。これは大文字・小文字(のアルファベット)、十進法の数字、そして句読点や記号の限られた集合を含みます。
unreserved = alphanum | mark
mark = “-” | “_” | “.” | “!” | “~” | “*” | “‘” | “(” | “)”
非予約文字は、 URI の意味論を変えることなく回避することができます。しかし URI が現れるために、 unescape された文字を許さない文脈で使用されているのでなければ、これは行なわれるべきではありません。

2.4.1. 回避符号化 Escaped Encoding

略..パーセント文字”%”と、その後に続く..略..16進法による数字2桁から構成されています。例えば、”%20″はUS-ASCII空白文字の回避された符号化です。

2.4.2. 回避するときとしないとき When to Escape and Unescape

(たとえば) ”%25″ を URI のデータとして使用する際は、これを回避しなければなりません。
reserved = “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”

2.4.3. 排除される US-ASCII 文字 Excluded US-ASCII Characters

空白を表す文字は排除されます。
space = <US-ASCII coded character 20 hexadecimal>

山形括弧 “<” と “>” そして二重引用符 (”) は排除されます。なぜなら、これらはしばしばURI周辺の区切り子として文書や作法の分野で使われるからです。 “#” 記号は排除されます。なぜなら、これはURIを、URI参照中のフラグメント識別子(第4項)から区切るのに使われるからです。百分率記号は排除されます。なぜなら、これは回避された文字の符号化に使われるからです。
delims = “<” | “>” | “#” | “%” | <”>

その他の文字は排除されます。なぜならそのような文字は、gatewaysなどの転送手先が往々にして書き変えたり、区切り子として使われたりすることがわかっているからです。
unwise = “{” | “}” | “|” | “\” | “^” | “[” | “]” | “`”
排除された文字に対応するデータは、URI内で適切に表示されるように、必ず回避されなくてはなりません。

RFC1738 Uniform Resource Locators (URL) ( 日本語訳 )
2.2. URL 文字エンコーディングの問題
8ビット文字は文字 “%” に続く 8ビット文字の 16進数値となる 2 つの 16進数 (”0123456789ABCDEF”) の 3文字により符号化される。(文字 “abcdef” も 16進数符号化で使われるだろう。)

8ビット文字は、もしそれらが US-ASCII コード文字セット内の印字可能な文 字でない場合、その文字の使用が安全でない場合、もしくはそれが特殊な URL スキーム内で何か別の処理のために予約されている場合に符号化されなければ ならない。

2008/9/24 水曜日

標準偏差の使用方法

Filed under: 開発メモ — admin @ 0:38:48

『標準偏差の本当の使い方』

標準偏差 その5

『標準偏差の本当の使い方』
実際のところここまで使いこなす必要があるかというとそうでもない、
なんとなく興味があってついつい調べ始めてしまったら止まらなくて標準偏差を極めてみただけ。

一般的な使い方は標準偏差σ、平均uでは

u-σ≦P≦u+σ

の範囲では全体の68.27%が含まれているというものから、
この範囲を±2σにすると

u-2σ≦P≦u+2σ

このときの値もエクセルの関数に代入すると求められて、
そのときの解は

P=95.45%

平均50、σ=10なら2σ=20

50±20 30≦P≦70 この範囲に入る確率が95.45%となる。

ここまでいけば全数のほとんどが範囲内にはいっているということになる。
さらにさらに3σではどうなるのだろうか?

答えは

20≦P≦80 P=99.73%

となり、0.3%以外すべてこの範囲に入っていることになる。

これらを図に表すとこのようになる。



さらにさらにさらに4σでは?10≦P≦90 P=99.9937%となる全体の0.006%以外はすべてこの範囲になる。

さらにさらにさらにさらに・・・

ってどこまでいくねん!

とそろそろ付き合いきれなくなると思われるので、
ここでの意味を考えると、

工業製品では4σという規格値がある。
私もまったく知らなかったんだけど、ふとしたときに4σという規格がよく使われていることを知る。

この4σというのがまさにこの標準偏差の値なのです。

もし10cmの定規を作るのに誤差±0.1cmまでが規格値で製品として合格になるとする。

このときの標準偏差が0.1なら

1σ=0.1 9.9≦P≦10.1 68.27%
2σ=0.2 9.8≦P≦10.2 95.45%
3σ=0.3 9.7≦P≦10.3 99.73%
4σ=0.4 9.6≦P≦10.4 99.9937%

よって規格値にはいるレベルは1σなので68.27%しか製品として使えないことになる。

もし4σレベルで合格の製品を作りたいなら誤差0.1/4=0.25

σ=0.25のときに4σ=0.1となり、
9.9≦P≦10.1 99.9937%
というレベルの製品合格率をだすことができる。

求めるレベルによって必要な標準偏差の値を決めることが製品規格における規格値となるのです。
そこで私がこの4σを知ることになったきっかけが6σという言葉から、
普通の会社は4σを基準にしているけどGE社(ゼネラルエレクトリック、世界最大の株式時価総額の会社)は6σを基準にすることにしたという話。

これは製品不良品率の話で普通の会社は4σで1000万個の製品を作ると
4σでは99.9937%の確率で不良品が発生することになり

10000000×(1-0.999937)=630個

この数の不良品が発生する、
このなかで経営に深刻な影響を与える(全品回収など)確率が1%なら6.3個も存在することになる。
0.1%でも0.63個になり、1億個つくれば6.3個になり、作った分だけそのときの被害も極大になる。
そこで6σにするとどうなるか?

確率P=99.9999998

100万個つくたったとすると

1000000×(1-0.999999998)=0.02個

深刻な影響の確率が1%でも0.0002個しかなく、0.1%では0.00002個になる。
確率的には100億個作るとやっと2個の深刻な不良品が発生することになる。

さすがにこの確率ならもう深刻な不良品はないとみてもいい。

ソースFrom

http://www.nabe-scm.com/weblog/archives/calendar/2007/09/01-index.php

2008/9/11 木曜日

画像ファイル内に埋め込まれた攻撃コードを除去する。

Filed under: 開発メモ — admin @ 10:21:59

JPG,PNG、GIFに埋め込まれた攻撃コードを除去するには

・JPGの場合:JPG→PNG(TrueColor)→JPGと変換

・PNGの場合:PNG→PNG(TrueColor)→PNGと変換

・GIFの場合:GIF→PNG(TrueColor)→PNGと変換

上位の3つのファイルを扱うことが多いが、これで攻撃コードを削除できるようだ。

参考URL
http://d.hatena.ne.jp/butyricacid/20070820/1187561183

2008/8/30 土曜日

DIV領域を上下左右中央に設置するCSS・HTMLコード

Filed under: 開発メモ — admin @ 22:05:08

<style type=”text/css”>
body {
background:#ccc;
margin:0;
padding:0;
}
#wrap {
position:absolute;
width:500px;
height:100px;
left:50%;
top:50%;
margin-left:-250px;
margin-top:-50px;
background:#fff;
color:#999;
}
</style>

■HTML

<body>
<div id=”wrap”>locate div at the center vertically and horizontally.</div>
</body>

2008/8/23 土曜日

アークタンジェントとタンジェントの違い 関数 逆関数

Filed under: 開発メモ — admin @ 1:50:10

角度における移動距離計算など、FPS系のゲームを作成するときに多用することが多いアークタンジェント。

(移動ターゲット座標における当たり判定を求めるときに自機からの玉の発射角度を何度にするべきかといった場合などに用いることがある。)

なかなかピン!とないこのアークタンジェントですが、 ようはtanの逆関数であるということ。

関数自体はブラックボックス化されている数式にデータを入れることで結果が帰ってくる物だ。その処理の流れを逆にするのが逆関数である。 考え方としては以下の通り。

1.りんごからりんごジュースを出したいときに関数に入れるとりんごジュースが、オレンジを入れたらオレンジジュースが出てくる。これは「しぼる」という箱と見ることができる。

2.りんごジュースを入れると、もとのリンゴが出てくる箱(実際にはないですが・・・)が「しぼる」の逆関数である。これは「原料をだす」という関数と見ることができる。

3.つまり、

「果実を搾ってジュースを作る」関数と「果実のジュースから元の果物を出す」という関数がお互いに逆関数だといえる。(function 、機能などとも言える)

4.数学的に考えれば、f(x) と g(x)がお互いに逆関数ならばすべてのxに対して y =f(x)、x = g(y)となる関数を言います。

5.三角関数は直角三角形の一つの角度から2辺の比を出す関数だが、その逆関数は二辺の比から角度を出す関数になる。

6.計算式では、 tan60° = √3 のような感じで角度を入力すると値が出てきます。 逆にアークタンジェントでは数値に対する関数 arctan√3 = 60°

7.最後に

 45° → タンジェント → 1

1 →  アークタンジェント → 45°

2008/8/6 水曜日

UTF8 文字化け対策

Filed under: 開発メモ — admin @ 18:31:46

エラー排出時に文字化けを防ぐため、headerレベルで文字コードを判断させる。

header(”Content-type: text/html; charset=utf-8″);

echo “エラー” ;

headerを記述しない場合は文字化けする可能性が高いので注意したほうがよい。

次のページ »

HTML convert time: 2.196 sec. Powered by WordPress ME