ここ最近phpばっかりやってて、開発環境にNetBeansを使ってます。
で、先日NetBeans 6.9.2⇒7.0にしたら初めての起動には成功したものの
次からは「JVM creation failed」というエラーが出て起動しない。
どうにも動かないので、コミュニティで検索してみたら、下記を発見。
http://netbeans.org/bugzilla/show_bug.cgi?id=183941
etc\netbeans.confの中の「-J-XX:MaxPermSize」をv6.9.2と同じ200に設定したら動きますた。
てか、来月からは本格的にAndroidとiphoneアプリをやることになりそうです。。
最近Androidの携帯アプリに興味がわいたので、メモ的に記事にしてみる。
とりあえず、開発環境の準備をしなくてはいけないので、そこから始めます。
まずAndroidのアプリはJavaで作成するので、JDKかJREをインストールする必要があります。
とりあえず下記のサイトから最新のJDK(今時点でJDK 6 Update 21)をダウンロードして、インストールを行います。
Java JDK/JREのダウンロード
次に統合開発環境であるEclipseをインストールします。
次にAndroidSDKをセットアップします。
①はじめにAndroid Developersからスターターパッケージをダウンロードして、任意のディレクトリに展開します。
②展開したディレクトリ下にある/toolsにパスを通します。XPの場合は[コンパネ]⇒[システム]⇒[詳細設定タブ]⇒[環境変数]⇒[システム環境変数]の変数Pathの最後にtoolsまでのpathを追加します。
※既に設定されているpathは不用意に弄らないで下さい。
※他のパスとはセミコロン「;」で区切って設定します。
③①で展開したディレクトリにある「SDK Manager.exe」を実行します。
この段階ではスターターパッケージのみしかインストールされていないので、追加可能なプラットフォームやコンポーネント等のパッケージリストがダイアログ上に表示されます。
とりあえず、最新のプラットフォームとドキュメント、サンプルを選択してインストールします。
④さらにテスト的なAndroid Virtual Devices(AVD)の設定もやっちゃいます。
というのも、ADVがないと「Hello! World」な、お試しプログラムもできないので、あくまでお試し的に設定しておきます。
まず、コマンドプロンプトを起動して、
android list targets
と入力すると、
通常JavaはVM(仮想マシン)上で動作するが、Androidの場合はJavaVMではなく、Android用に開発されたDalvik上で動作し、Javaクラスから再度コンパイルしてDalvikの実行形式で動作する。
この辺は統合開発環境であるEclipseを使用する事で、作業を容易に行う事が可能。
また、Eclipseは日本語化も行われている。
Pleiades – (Eclipseプラグイン日本語化プラグイン)
Eclipse 日本語化言語パック(サードパーティ版)
あとはまた後日。。。
phpをインストールする前にApacheをインストールしませう。
①phpのバイナリをダウンロード
http://www.php.net/downloads.php
今回はv5.2のzipを使用。
ダウンロードしたら任意のフォルダに展開する。特に理由が無ければ、c:\php5へ保存で良いでしょう。
②Apacheのconfにphpモジュールの設定を追加する。
因みに今回使用しているApacheはv2.2.14
追加する場所は、分かりやすいように他のLoadModule指示子が記載されてる辺りが良いと思います。
# phpモジュールApache2.2用 LoadModule php5_module c:/php5/php5apache2_2.dll # Apacheがv2.0系の場合は LoadModule php5_module c:/php5/php5apache2.dll # ついでにphp.iniのフォルダも指定しておく PHPIniDir "c:/php5"
③次にApacheにphpのmimeタイプを追加します。
これも他のAddType指示子と同じあたりに記述した方が良いでしょう。
# phpのMimeタイプを追加 AddType application/x-httpd-php .php # ソース表示が必要なら以下も記述 AddType application/x-httpd-php-source .phps
④phpフォルダ内の「php.ini-dist」をコピーして「php.ini」にファイル名を変更する。
これでApacheを再起動すると、とりあえずApacheにphpが組み込まれる。
⑤その他
php.iniを編集してphpの設定を行う。必要に応じて以下とそれ以外の設定を行う。
register_globals = Off magic_quotes_gpc = Off include_path = ".;c:\php5\includes" doc_root = "ドキュメントルート" extension_dir = "c:\php5\ext" extension=php_mbstring.dll extension=php_mysql.dll
MySQLのエクステンションはMySQLがインストールされていないとだめです。
iniの記述が終了したら、Apacheの再起動を忘れずに!
いよいよAPIを叩いてみます。
# ■なにかつぶやいてみる例
# このソースはかなり簡略化してますので、自分のソースに合った改変は必須かと思います。
# statuses/updateを使用して、結果をXMLで受け取る例です。
use LWP::UserAgent;
use Encode;
use Net::OAuth;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;
# 前回取得したアクセストークンとシークレット
my $access_token = 'アクセストークン';
my $access_secret = 'トークンシークレット';
# 各APIメソッド毎にURLとリクエストメソッドが異なるので注意
my $API_Method_url = 'https://twitter.com/statuses/update.xml';
my $request_method = 'POST';
# なにかつぶやく
my $message = 'PENTAX K-7は良いカメラだぜぃ';
# OAuthリクエスト
my $request = Net::OAuth->request("protected resource")->new(
consumer_key => 'Twitterから取得したキー',
consumer_secret => 'Twitterから取得しシークレット',
request_url => $API_Method_url,
request_method => $request_method,
signature_method => 'HMAC-SHA1',
timestamp => time,
nonce => 'ランダム文字列', # 毎回変更
token => $access_token,
token_secret => $access_secret,
extra_params => { status => decode_utf8($message) },
);
# extra_paramsに各APIメソッドのパラメータ値のハッシュをセットする(今回は"status")
# decode_utf8についてはNet::OAuthのドキュメント(下記URL)を見てください。
# http://search.cpan.org/~kgrennan/Net-OAuth-0.19/lib/Net/OAuth.pm#I18N
$request->sign;
my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('User-Agent' => $ClientUA_name);
my $http_req = HTTP::Request->new($request_method, $API_Method_url, $http_hdr, $request->to_post_body);
my $http_res = $ua->request($http_req);
# 結果のXML
my $res_xml = $http_res->content;
これでつぶやくはず。。。
あ、ソースは全部utf8で書いてます。
あ、エラー処理とか全力で省いてます。
あ、今回色々試したい事もあったので、Net::OAuthにしましたですが、Net::Twitterとか使ったほうが、以外に簡単かもしれませんよ?w
2010/02/06追記: Syntax-Hilighter入れてみたw
さて、先の記事でリクエストトークンを取得しましたが、このままでは使えない訳で、このトークン値を使ってTwitterにリダイレクトしてユーザの承認を行います。
この辺の処理はブラウザ/デスクトップベースのクライアントかによっても違ってきますし、Botのようなクライアントなら自分で承認すればOKですが、他のユーザが使う場合なら各ユーザに承認してもらう必要もあり、各トークンの管理等も含めて複雑になって行きます。
今回はbotがつぶやく仕様、これです。
botがつぶやくには、つぶやくTwitterアカウントでログインして、アプリの承認を自分で行います。
# 前回のソースから直接承認画面にリダイレクトする場合。 my $authorize_url = 'http://twitter.com/oauth/authorize'; my $request_token = '[取得したリクエストトークン]'; print "Location: ".$authorize_url."?oauth_token=".$request_token."\n\n";
リダイレクトすると、Twitteのアプリ承認画面が開きます。
この画面で許可を選択すれば、コールバックURLへリダイレクトされます。
※デスクトップクライアントの場合は、ここで暗証番号らしき数字が表示されるみたいです。それは、またの機会に確認してみます。
コールバックURLにリダイレクトされると同時に、承認済リクエストトークンとヴェリファイア値がPOSTされるので、適当な方法でこのPOST値を拾います。簡単な方法だとCGIモジュールとか。。。
で、今度はこの各値を使って、アクセストークンとシークレットを取得します。
# アクセストークンとシークレットの取得 --------------------
# このソースは簡略化してますので、自分のソースに合った改変は必須かと思います。
use CGI;
use LWP::UserAgent;
use Net::OAuth;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;
my $q = CGI->new;
my $access_token = $q->param('oauth_token'); #承認済みトークン
my $access_verifier = $q->param('oauth_verifier'); #ヴェリファイア
my $access_token_url = 'http://twitter.com/oauth/access_token';
my $request_method = 'POST'; #アクセストークン取得はpostなので注意
my $request = Net::OAuth->request("access token")->new(
consumer_key => 'Twitterから取得したキー',
consumer_secret => 'Twitterから取得しシークレット',
request_url => $access_token_url,
request_method => $request_method,
signature_method => 'HMAC-SHA1',
timestamp => time,
nonce => 'ランダム文字列', #毎回変更
callback => '',
token => $access_token,
verifier => $access_verifier,
token_secret => '',
);
my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('User-Agent' => $ClientUA_name);
my $http_req = HTTP::Request->new($request_method, $access_token_url, $http_hdr, $request->to_post_body);
my $http_res = $ua->request($http_req);
my $AccessTokenStr = $http_res->content;
こんな感じです。$AccessTokenStrは前回同様に分解して下さい。
2010/02/06追記: Syntax-Hilighter入れてみたw
まず、Twitterのアプリ登録ページで各種設定を行い、Consumer KeyとConsumer Secretを取得します。とりあえず後でも変更は可能なので、アプリ名とか決まって無くても、間に合わせで設定しても大丈夫。
ただ、Application Typeの設定によって、承認済リクエストトークンとヴェリファイアの取得方法が変わって来るので、ココはきちんと設定しておきましょう。今回の例はブラウザベースで話を進めます。
で、コンシューマキーとシークレットを取得したら、その各値を使ってRequestTokenを取得します。
# ■リクエストトークンの取得
# このソースは簡略化してますので、自分のソースに合った改変は必須かと思います。
use LWP::UserAgent;
use Net::OAuth;
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;
my $request_token_url = 'http://twitter.com/oauth/request_token';
my $request_method = 'GET';
my $request = Net::OAuth->request("request token")->new(
consumer_key => 'Twitterから取得したキー',
consumer_secret => 'Twitterから取得しシークレット',
request_url => $request_token_url,
request_method => $request_method,
signature_method => 'HMAC-SHA1',
timestamp => time,
nonce => 'ランダム文字列', #要毎回変更
callback => 'http://yoursite', #アプリ登録時のコールバックアドレス
);
# nonceとtimestampについてはhttp://oauth.net/core/1.0/#nonce を参照
$request->sign;
my $ua = LWP::UserAgent->new;
my $http_hdr = HTTP::Headers->new('Authorization' => $request->to_authorization_header);
my $http_req = HTTP::Request->new($request_method, $request_token_url, $http_hdr);
my $http_res = $ua->request($http_req);
my $RequestTokenStr = $http_res->content;
以上w
$RequestTokenStrには
「oauth_token=[未承認RequestToken値]&oauth_token_secret=[ReuestTokenSecret値]&oauth_callback_confirmed=true」な感じで値が返りますので、Net::OAuth->responseや、その他お好みの方法で各値に分解します。
2010/02/06追記: Syntax-Hilighter入れてみたw
TwitterのOAuthについて、大まかな流れとしては、
①Twitterでアプリケーション登録を行う
②①で取得したコンシューマキーとシークレットを使って、未承認リクエストトークンとシークレットを取得
③未承認リクエストトークンを使ってTwitterにリダイレクト
④アプリケーションの承認(ユーザ側)
⑤コールバック用スクリプトで、承認済みリクエストトークンとベリファイアを受け取る
⑥リクエストトークンとベリファイアを使ってアクセストークンとシークレットを取得する
⑦アクセストークンとシークレットでAPIを叩く
ざっとこんな感じ。。。w
今の所アクセストークンの有効期限は無いみたいなので、一度取得したらそのまま使い続けられるようです。
使ったOAuthの為のモジュールはNet::OAuthで、OAuthのヘッダやPOST値を生成してLWP::UserAgentでGET/POSTします。
K-7の退院早々、比較するのもなんかアレなんですが・・・w
なんとなく気になってる人も結構いるかな、とか思ってですね、簡単な方法でやってみました。
因みにこの比較はレリーズタイムラグではありません。
単にファインダー像の消失を比べたものですので、ご注意下さいw
方法は簡単。ファインダー像をコンデジの動画で撮りましたw
k-7、K20Dともにシャッタースピード1/125s、絞り値はF4。
動画撮影に使ったコンデジはペンタのA40。
録画の後で消失している間のフレーム数を数えます。
撮った動画の中からブラックアウトの前後を含め、50フレーム分切り出したのが下の動画です。
モデルは、タチコマ君。一瞬で終わりますw
K20Dファインダー内の動画(AVI)
K-7ファインダー内の動画(AVI)
※DivXなので、もしかしたら見れない人もいるかもしれません。
更にこの動画をコマ毎に抜き出したのが、次の画像です。
右下の数字は、動画の何フレーム目かを表しています。
※画像はクリックで拡大します。
K20D
|
K-7
|
K20Dは5コマ分、K-7は21フレーム目が半端に消えかかってますので2.5コマくらいとしましょう。
これで大体半分くらいに短縮されているのがわかります。
A40は30fpsで録画しますので、一コマ約33.3msとして計算すると、
K20D ⇒ 166.5ms
K-7 ⇒ 83.25ms
こんな感じです。
全く正確ではありません。すいませんw
あと、もうひとつ気がついたのは、K-7の24と25コマ目が僅かにぼやけて見えますが、
これはミラーが落ちきる直前で減速させてるか、一旦止めてるかの、どちらかではないかと
勝手な想像をしてます。
K-7のシャッターが静かで、手に伝わるショックも少ないのはこの2コマ分のおかげでしょうw
ひどくアバウトな比較ですが、皆様の参考になれば幸いです。
間違った点はご遠慮なくご指摘下さい。
そんな訳で、明日からは再びK-7で撮りに行こうと思います。
————————————————–
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
————————————————–
Sequential Read : 21.441 MB/s
Sequential Write : 18.676 MB/s
Random Read 512KB : 21.263 MB/s
Random Write 512KB : 7.556 MB/s
Random Read 4KB : 5.057 MB/s
Random Write 4KB : 0.096 MB/s
Test Size : 100 MB
Date : 2009/07/10 21:43:54
————————————————–
CrystalDiskMark 2.2 (C) 2007-2008 hiyohiyo
Crystal Dew World : http://crystalmark.info/
————————————————–
Sequential Read : 19.067 MB/s
Sequential Write : 6.809 MB/s
Random Read 512KB : 18.535 MB/s
Random Write 512KB : 1.987 MB/s
Random Read 4KB : 3.946 MB/s
Random Write 4KB : 0.021 MB/s
Test Size : 100 MB
Posting tweet...
Powered by Twitter Tools
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| « 4月 | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
RSS 2.0
atom