iPhoneで他人の情報…携帯ID認証に穴(読売オンライン)の記事では,あたかもiPhone固有の問題のように取り上げられているが,ヤマト運輸のニュースリリースによると,今回のトラブルは,携帯版のWebサービスにスマートフォン(の特定のアプリケーション)から(クイックログイン機能を用いて)接続した際に,正しく認証が行えなかったとある為,今回の問題はクライアント側ではなくサーバ側の認証部分の作り込みの問題だと思われる.
一般的な携帯電話向けWebサイトにおける(ログインの際にユーザー名とパスワードの組み合わせを求めない)簡単ログインの実装は,本人認証を携帯電話のハードウェアと結びつけられた固有の個体識別番号を用いて行う.
これにより,初期登録時にユーザー名と個体認識番号が結びつけられていれば,次回以降はユーザーに対して都度ユーザー名とパスワードの入力を求めなることなく,個体認識番号の確認をもって本人だとみなす事が出来る.
しかし,この個体認識番号=本人が通用するのは,個体認識番号がネットワーク上で唯一のものだと信頼できる場合のみである.
この個体認識番号が唯一のものであるという常識が通用するのは,携帯電話の接続するネットワークがクローズドであり,かつ接続する他の携帯電話も同様に改変不可能な個体認識番号を持つ場合のみである.
例えばPCからこのネットワークに接続することが可能であれば,個体認識番号のなりますましを行う事は容易である.
つまり個体認識番号による本人認証のシステムは,ネットワーク上にはキャリアの管理下にある端末しか存在しない=個体認識番号は重複しない,という前提に立っているものだと言うことが分かる.
また,昨今普及しつつあるスマートフォンには,上記個体認識番号と同列に扱うことが可能なIDは存在しない.
しかしながら,スマートフォンではPCのように多種多様なアプリケーションを動作させる事が可能となっており,例えばiPhone向けアプリケーションであるSBrowerは,本来iPhoneには実装されていない個体認識番号を内部で自動的に生成し,それを用いてあたかも日本国内向けに販売されている携帯電話を模して接続を行う.
これにより,個体認識番号が実装されていることを前提に構築されている多数の携帯向けWebに接続し,サービスを受けることが可能となっている(なってしまっている).
今回問題となっている携帯版「クロネコメンバーズのWebサービス」のクイックログイン機能は,個体認識番号の存在が前提となっているため,iPhoneから通常のブラウザを用いてクイックログイン機能を利用する事は出来ない.しかしながら上記アプリケーションを用いることで,擬似的に個体認識番号を利用することが出来,結果としてクイックログイン機能の利用が可能となっている.
しかし,個体認識番号を生成する部分に問題があり,同一の個体認識番号が生成される可能性がある.
つまり,同一の個体認識番号が生成されたSBrowerのユーザーの中で,最初にユーザー情報と個体認識番号を結びつけた人のデータが,後から同一の個体認識番号を持つSBrowerを利用して接続したユーザーに漏洩してしまう可能性を排除できない.
これを,同一の個体認識番号を生成してしまうアプリケーションの問題ととらえたり,このような危険性を内包する非正規のアプリケーションを利用するユーザーの問題ととらえることも可能だが,今回は商用サイトという事もあり,サービス主管であるヤマト運輸側の問題であると思われる.
なぜならば,個人の認証というsensibleな問題を,一般のアプリケーション開発者やユーザーに被せるのは見当違いで,やはりサービスを提供する側が責任を持って正しく認証できるようにするべきである.
今後は,携帯向けWebサイトであったとしても個体認識番号を用いた簡易な実装とせず,通常のPC向けWebサイトと同様にcookieやサーバ側で用意したセッションIDを用いる必要があると言うことである.
2010年10月27日水曜日
[memo] Adobe MAX 2010
10/25よりL.A.にてAdobe MAX 2010が開催されている.
今回の話題の中心はWebサイト,電子出版,ビデオ,エンタープライズアプリケーション,ゲームといったマルチスクリーン戦略についてである.
具体的には,
また,「Adobe AIR 2.5」は H.264動画のGPU支援再生に対応している.上記の「AIR for Android」の3Dハードウェアアクセラレーション対応とあわせて,従来の「Flashは動作が重い」への批判に対する解答であると思われる.
ただしハードウェアアクセラレーションは, 対象とする機種やプラットフォームの構成に大きく左右される.そのためFlashのメリットの一つである,多数のプラットフォームへのフラットな対応が後退する可能性も含む.
例えば特定機種のみハードウェアアクセラレーションに対応し,その他機種はソフトウェアレンダリング対応となった場合,開発者は個別に対応せざるを得ず,結果として従来の利点であった複数デバイスへの対応の利点が薄れてしまう.
ちなみに,10/7のAdobeがMicrosoftに買収されるかもしれないというNew York Timesの報道に対して,AdobeのCEOは「同社は独立して成長していくことを目指す」と語ったとか.Adobe+Microsoftは面白い組み合わせだけに残念:-P
今回の話題の中心はWebサイト,電子出版,ビデオ,エンタープライズアプリケーション,ゲームといったマルチスクリーン戦略についてである.
具体的には,
- 電子出版をサポートする「Adobe Digital Publishing Suite」
- Google TVでも採用され,ストリーミング動画の再生やWebブラウザ内からのGPUハードウェアアクセラレーション(動画再生支援)にも対応した「Flash Player」
- TVの中でAIRアプリケーションを利用する為の 「AIR for TV」
- 従来のコンポーネントやスキンをタッチスクリーン上でもそのまま利用可能「Flex 4.5」
- BlackBerry社の新しいタブレット端末PlayBook向けのAIRアプリケーション開発ツール「BlackBerry PlayBook Developer Kit」
- Android端末上でのAIRアプリの実行環境「AIR for Android」
- PCだけではなく,テレビやタブレット,スマートフォンにも対応した「Adobe AIR 2.5」
- 様々なデバイスで利用できるアプリケーションを,各デバイス向けに提供されているアプリのストア内で配布/販売可能となる「Adobe InMarket」
また,「Adobe AIR 2.5」は H.264動画のGPU支援再生に対応している.上記の「AIR for Android」の3Dハードウェアアクセラレーション対応とあわせて,従来の「Flashは動作が重い」への批判に対する解答であると思われる.
ただしハードウェアアクセラレーションは, 対象とする機種やプラットフォームの構成に大きく左右される.そのためFlashのメリットの一つである,多数のプラットフォームへのフラットな対応が後退する可能性も含む.
例えば特定機種のみハードウェアアクセラレーションに対応し,その他機種はソフトウェアレンダリング対応となった場合,開発者は個別に対応せざるを得ず,結果として従来の利点であった複数デバイスへの対応の利点が薄れてしまう.
ちなみに,10/7のAdobeがMicrosoftに買収されるかもしれないというNew York Timesの報道に対して,AdobeのCEOは「同社は独立して成長していくことを目指す」と語ったとか.Adobe+Microsoftは面白い組み合わせだけに残念:-P
ラベル:
[2010]memo
2010年10月21日木曜日
[SA-3-12] JavascriptからMySQLに接続
fig. 1 |
1.index.html, xmlhttp.js, backend.phpを,/var/www/html/ajaxに配置
index.html : ベースファイル
xmlhttp.js : フォームに入力された文字列を,リアルタイムにbackend.phpに渡し,結果を受け取る
backend.php : DBに接続し,結果をXMLとして出力
2.backend.phpに実行権限を付与(chmod 755 backend.php)
3.以下のアドレスにアクセスし,表示される項目を確認
(A)AJAXを利用し,表示項目を動的に絞り込み
http://[サーバのアドレス]/ajax/index.html
(B)MySQLから受け取ったデータをXML形式で表示
http://[サーバのアドレス]/ajax/backend.php?host_name=sa01
index.html
<html> <head> <meta http-equiv=content-type content="text/html; charset=UTF-8"> <title>server_list search result</title> <STYLE TYPE="text/css"> <!-- .table1 { width: 400px; border-collapse: collapse; border: 1px #708090 solid; } .table1 TD { border: 1px #708090 solid; } --> </STYLE> <script type="text/javascript" src="xmlhttp.js"></script> <script type="text/javascript"> <!-- findText = findTextOld = ""; function loadXmlFile(fName){ httpObj = createXMLHttpRequest(displayData); if (httpObj){ httpObj.open("GET",fName,true); httpObj.send(null); } } function displayData(){ if ((httpObj.readyState == 4) && (httpObj.status == 200)){ xmlData = httpObj.responseXML; $("result").innerHTML = parseXmlData(httpObj.responseText); }else{ $("result").innerHTML = "Loading ..."; } } function parseXmlData(xmlData){ $("result").innerHTML = xmlData; idListTags = document.getElementsByTagName("id"); numListTags = document.getElementsByTagName("num"); host_nameListTags = document.getElementsByTagName("host_name"); ip_addressListTags = document.getElementsByTagName("ip_address"); idLen = idListTags.length; resultText = "<table class='table1'><tr><th colspan=4>server_list search result</th></tr><tr><td><b>id</b></td><td><b>num</b></td><td><b>host_name</b></td><td><b>ip_address</b></td></tr>"; for(i=0; i<idLen; i++){ id = idListTags[i].childNodes[0].nodeValue; num = numListTags[i].childNodes[0].nodeValue; host_name = host_nameListTags[i].childNodes[0].nodeValue; ip_address = ip_addressListTags[i].childNodes[0].nodeValue; str = host_name.match(findText); if (str){ resultText += "<tr><td>" + id + "</td><td>" + num + "</td><td>" + host_name + "</td><td><a href='http://" + ip_address + "' target='_blank'>" + ip_address + "</a></td></tr>"; } } resultText += "</table>"; return resultText; } function inputCheck(){ findText = document.ajaxForm.requestText.value; if (findText != findTextOld) { str_search = "./backend.php?host_name=" + findText loadXmlFile(str_search); findTextOld = findText; }else{ // $("result").innerHTML = "Loading ..."; } setTimeout(" inputCheck()",500); // 0.5秒毎 } window.onload = inputCheck; // --> </script> </head> <body> <form name="ajaxForm" onSubmit="return false"> <input type="text" value="sa00" name="requestText"> </form> <div id="result"></div> </body> </html>
xmlhttp.js
// HTTP通信用、共通関数 function createXMLHttpRequest(cbFunc){ var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc; return XMLhttpObject; } // document.getElementById function $(tagId){ return document.getElementById(tagId); }
backend.php
<?php $db_user = "[user name]"; $db_password = "[password]"; $db_name = "[database name]"; $db_host = "localhost"; //create xml header('Content-type: text/xml; charset=utf-8'); echo '<?xml version="1.0"?><sa>'; $host_name = null; if(isset($_GET['host_name'])) { $host_name = $_GET['host_name']; $con = mysql_connect($db_host,$db_user,$db_password) or die("error!"); mysql_select_db($db_name,$con) or die("DB is not exist"); $strsql = "SET CHARACTER SET UTF8"; mysql_query($strsql,$con); $strsql = "SELECT id, num, host_name, ip_address FROM server_list WHERE host_name LIKE '%".$host_name."%';"; $res = mysql_query($strsql,$con); while ($item = mysql_fetch_array($res)) { print "<server_list><id>".$item[0]."</id><num>".$item[1]."</num><host_name>".$item[2]."</host_name><ip_address>".$item[3]."</ip_address></server_list>"; } mysql_close($con); } echo '</sa>'; ?>
ラベル:
[2010]サーバアーキテクチャ
[卒業研究] サーバ構成案
卒業研究用サーバの構成について,いくつか候補を挙げてみます.
(可能であれば 同構成のサーバを2台用意して,開発時には本番環境と開発環境で分けて作業を進め,リリース後は開発環境をコールドスタンバイ機とする)
1. サーバ
(1-1)HP ProLiant MicroServer \35,700
http://h50146.www5.hp.com/products/servers/proliant/micro/index.html
※CPUは非力ながら,RAIDが標準で組める!コンパクトな筐体ながら,大口径FAN使用で静音!!ただしHDDが1つなので,もう1つ追加してミラーリングしたい所.
リンク1,リンク2, システム構成案(PDF)
(1-2)HP ProLiant ML110 G5 \11,280(\3,300割引クーポン使用で\7,980)
http://h50146.www5.hp.com/products/old/servers/proliant/ml110g5/
http://nttxstore.jp/_II_HP13207801
※とにかく安い!!
(1-3)NEC Express5800/GT110b \16,800(\2,000割引クーポン使用で\14,800)
http://www.nec.co.jp/products/pcserver/g/gt110b/index.shtml
http://nttxstore.jp/_II_P813280396
※一昔前に格安サーバで有名だった機種.
2.OS
(2-1)CentOS \Free
http://www.centos.org/
(2-2)Red Hat Enterprise Linux(RHEL) ライセンス\Free(サポートは有料)
http://www.jp.redhat.com/rhel/
(2-3)Microsoft Windows Server 2008 R2 Standard Edition (5CAL) アカデミック版 ¥57,775
http://www.coneco.net/PriceList/1091014006/order/MONEY/
3.無停電電源装置(UPS)
(3-1)APC ES 550 BE550G-JP ¥8,663
http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=BE550G-JP&total_watts=200
http://kakaku.com/item/K0000107355/spec/
(3-2)APC RS 550 BR550G-JP ¥13,511
http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=BR550G-JP&total_watts=200
http://kakaku.com/item/K0000056754/
(3-3)オムロン BY50S ¥16,481
http://www.omron.co.jp/ped-j/dengen/product/ups/by35-50s/by35-50s.html
http://kakaku.com/item/K0000066780/spec/
※OSとの連携機能(自動シャットダウン等)を確認する必要有り.
4.モニター
(4-1)なし \0
※コスト削減の為,既存モニターを利用する.
(4-2)HP 1910m 18.5インチワイド液晶モニター \10,500
http://h50146.www5.hp.com/products/desktops/personal/monitors/1910m/
(4-3)Dell IN1920 18.5 インチ HD ワイドスクリーンフラットパネルモニタ \10,500
http://www1.jp.dell.com/content/products/compare.aspx/19_20lcd?c=jp&cs=jpdhs1&l=ja&s=dhs
※本来ならサーバ用途の場合,16:9のワイド画面ではなく従来からの4:3の方がベター(縦方向の課解像度が高ければ,表示できる行数が増えるため)だが,現状では価格の問題でワイド画面を選択せざるを得ない状況です.
5.作業用(閲覧用)端末
ノートPC?
(可能であれば 同構成のサーバを2台用意して,開発時には本番環境と開発環境で分けて作業を進め,リリース後は開発環境をコールドスタンバイ機とする)
1. サーバ
(1-1)HP ProLiant MicroServer \35,700
http://h50146.www5.hp.com/products/servers/proliant/micro/index.html
※CPUは非力ながら,RAIDが標準で組める!コンパクトな筐体ながら,大口径FAN使用で静音!!ただしHDDが1つなので,もう1つ追加してミラーリングしたい所.
リンク1,リンク2, システム構成案(PDF)
(1-2)HP ProLiant ML110 G5 \11,280(\3,300割引クーポン使用で\7,980)
http://h50146.www5.hp.com/products/old/servers/proliant/ml110g5/
http://nttxstore.jp/_II_HP13207801
※とにかく安い!!
(1-3)NEC Express5800/GT110b \16,800(\2,000割引クーポン使用で\14,800)
http://www.nec.co.jp/products/pcserver/g/gt110b/index.shtml
http://nttxstore.jp/_II_P813280396
※一昔前に格安サーバで有名だった機種.
2.OS
(2-1)CentOS \Free
http://www.centos.org/
(2-2)Red Hat Enterprise Linux(RHEL) ライセンス\Free(サポートは有料)
http://www.jp.redhat.com/rhel/
(2-3)Microsoft Windows Server 2008 R2 Standard Edition (5CAL) アカデミック版 ¥57,775
http://www.coneco.net/PriceList/1091014006/order/MONEY/
3.無停電電源装置(UPS)
(3-1)APC ES 550 BE550G-JP ¥8,663
http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=BE550G-JP&total_watts=200
http://kakaku.com/item/K0000107355/spec/
(3-2)APC RS 550 BR550G-JP ¥13,511
http://www.apc.com/products/resource/include/techspec_index.cfm?base_sku=BR550G-JP&total_watts=200
http://kakaku.com/item/K0000056754/
(3-3)オムロン BY50S ¥16,481
http://www.omron.co.jp/ped-j/dengen/product/ups/by35-50s/by35-50s.html
http://kakaku.com/item/K0000066780/spec/
※OSとの連携機能(自動シャットダウン等)を確認する必要有り.
4.モニター
(4-1)なし \0
※コスト削減の為,既存モニターを利用する.
(4-2)HP 1910m 18.5インチワイド液晶モニター \10,500
http://h50146.www5.hp.com/products/desktops/personal/monitors/1910m/
(4-3)Dell IN1920 18.5 インチ HD ワイドスクリーンフラットパネルモニタ \10,500
http://www1.jp.dell.com/content/products/compare.aspx/19_20lcd?c=jp&cs=jpdhs1&l=ja&s=dhs
※本来ならサーバ用途の場合,16:9のワイド画面ではなく従来からの4:3の方がベター(縦方向の課解像度が高ければ,表示できる行数が増えるため)だが,現状では価格の問題でワイド画面を選択せざるを得ない状況です.
5.作業用(閲覧用)端末
ノートPC?
ラベル:
[2010]卒業研究
2010年10月20日水曜日
[memo] Google AJAX Feed APIでクロスドメイン制約を回避
PHP等で外部ドメインのAtomフィードやRSSフィードを収集し,Flashを設置するサーバに格納する事が出来れば,クロスドメイン制約を回避することが可能ですが,自前のサーバが利用できる環境がない場合,このような方法をとることが出来ません.
そこで,自前でサーバを用意する必要のないGoogle AJAX Feed APIを利用すれば,クロスドメイン制約を回避することが可能となります.
※商用利用等では問題はありますが...
Google AJAX Feed API登録画面
http://code.google.com/intl/ja/apis/ajaxfeeds/signup.html
javascript
ちなみに,Google AJAX Feed APIはJavascriptからだけではなく,URLに引数を付ける形で利用することも出来ます.
以下は,XML形式で10件のデータを取得する場合の例になります.
そこで,自前でサーバを用意する必要のないGoogle AJAX Feed APIを利用すれば,クロスドメイン制約を回避することが可能となります.
※商用利用等では問題はありますが...
Google AJAX Feed API登録画面
http://code.google.com/intl/ja/apis/ajaxfeeds/signup.html
Now Loading ... |
javascript
<script type="text/javascript" src="http://www.google.com/jsapi?key=(APIキー)"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://www.kccollege.ac.jp/news/feed.xml"); feed.setNumEntries(5); feed.load(function(result) { var html; // 読み込みに成功したときの処理 if (!result.error) { // サイトのタイトルを出力 html = '<h1> <a href="' + result.feed.link + '">' + result.feed.title + '</a></h1>'; // 各記事の情報を順に出力 if (result.feed.entries.length) { html += '<ul>'; for (var i = 0; i < result.feed.entries.length; i++) { // 各記事のタイトルと概要を出力 var entry = result.feed.entries[i]; html += '<li><a href="' + entry.link + '">' + entry.title + '</a>'; html += '<span class="content">' + entry.contentSnippet + '</span></li>'; } html += '</ul>'; } } // 読み込みエラー時の処理 else { html = '<p>Error</p>'; } // 読み込み結果を、idが「feed」の要素に流し込む var container = document.getElementById("feed"); container.innerHTML = html; }); } google.setOnLoadCallback(initialize); </script> <div id="feed"><p>Now Loading ...</p></div>
ちなみに,Google AJAX Feed APIはJavascriptからだけではなく,URLに引数を付ける形で利用することも出来ます.
以下は,XML形式で10件のデータを取得する場合の例になります.
http://ajax.googleapis.com/ajax/services/feed/load?q=http%3A%2F%2Fwww.kccollege.ac.jp%2Fnews%2Ffeed.xml&v=1.0&num=10&output=xml
ラベル:
[2010]memo
[memo] 最新スマートフォン・スペック比較3
日本未導入の最新のスマートフォンのスペックを比較する.
特にWindows Phone 7はいずれ国内でもリリースされる可能性があります.
(*1)Windows Phone 7は単一機種ではなく,同一の仕様で複数のメーカーからリリースされています.
特にWindows Phone 7はいずれ国内でもリリースされる可能性があります.
機種名 | Palm Pre 2 | Windows Phone 7 (*1) | ||
---|---|---|---|---|
メーカー | HP | Microsoft | ||
OS | webOS 2.0 | Windows Phone 7 | ||
CPU | 1GH | 1GHz Qualcomm MSM8250 | ||
画面サイズ | 3.1インチ | 3.5-4.3インチ | ||
解像度 | 320x480 | 480 x 800 | ||
RAM | 512MB | 512MB (ROM:576MB) | ||
本体メモリ | 16GB | 8-16GB | ||
外部メモリ | ||||
大きさ | 100x60x17mm | |||
質量 | 145g | |||
カメラ | 500万画素 | |||
インカメラ | × | |||
GPS | ○ | |||
電子コンパス | ○ | |||
赤外線 | × | |||
ワンセグ | × | |||
Felica | × | |||
無線LAN | IEEE802.11b/g | |||
Bluetooth | Bluetooth 2.1 | |||
高速データ通信 | CDMA | |||
連続待受時間 | 約350時間(CDMA) | |||
連続通話時間 | 約5.5時間(CDMA) | |||
バッテリー | ||||
充電/外部端子 | microUSB | |||
FLASH | 10.1 beta | 10.1 | ||
発売時期 |
ラベル:
[2010]memo
[memo] 最新スマートフォン・スペック比較2
auの2010年秋冬モデル/2011年春モデルのAndroidスマートフォン4機種を比較する.
OSのバージョンが異なることから,対応するFlashのバージョンが異なることに注意が必要です.
またauは,あわせてSkypeとの連携も発表している.
(*1)IS05はdocomoからSH-03Cとしてリリースされるかもしれません...
OSのバージョンが異なることから,対応するFlashのバージョンが異なることに注意が必要です.
またauは,あわせてSkypeとの連携も発表している.
機種名 | IS03 | REGZA Phone IS04 | IS05 (*1) | SIRIUS α IS06 |
---|---|---|---|---|
メーカー | SHARP | 富士通東芝モバイルコミュニケーションズ | SHARP | Pantech |
OS | Android2.1 | Android2.1 | Android2.2 | Android2.2 |
CPU | Snapdragon QSD8650 1GHz | |||
画面サイズ | 3.5インチ | 4インチ | 3.4インチ | 3.7インチ |
解像度 | 640x960 | 480×854 | 480×854 | 480×800 |
RAM | 512MB | |||
本体メモリ | ||||
外部メモリ | ||||
大きさ | 63×121×12.6 | 62×126×12 | 55×112×14 | 60×116×11 |
質量 | 138g | 149g | 132g | 109g |
カメラ | 約957万画素 | 約1219万画素 | 約800万画素 | |
インカメラ | ○ | ○ | ○ | ○ |
GPS | ○ | ○ | ○ | ○ |
電子コンパス | ||||
赤外線 | ○ | ○ | ○ | |
ワンセグ | ○ | ○ | ○ | |
Felica | ○ | ○ | ○ | × |
無線LAN | IEEE802.11b/g | IEEE802.11b/g | IEEE802.11b/g | |
Bluetooth | 2.1+EDR | 2.1+EDR | 2.1+EDR | |
高速データ通信 | CDMA 1X EV-DO Rev.A | CDMA 1X EV-DO マルチキャリアRev.A WIN HIGH SPEED (下り最大9.2Mbps/上り最大5.5Mbps) | CDMA 1x EV-DO マルチキャリアRev.A (CDMA 1X WIN) | |
連続待受時間 | 約200時間 | 約300時間 | 約190時間 | |
連続通話時間 | 約230分 | 約310分 | 約300分 | |
バッテリー | ||||
充電/外部端子 | ||||
FLASH | Flash Lite 4.0 | Flash Lite 4.0 | 10.1 | 10.1 |
発売時期 | 11月下旬以降 | 2011年春 |
(*1)IS05はdocomoからSH-03Cとしてリリースされるかもしれません...
ラベル:
[2010]memo
[MA-9-8] おみくじ付き携帯待ち受け画面 パラメーター調整 (FlashLite2.0/ActionScript2.0)
ma9_8.swf |
「占う」ボタンのトグル動作,表示される運勢の頻度調整を追加.
ActionScript2.0(Flash Lite2.0)
buttonFlag = 0; this.onEnterFrame = function() { //バッテリーレベル var batteryCharging = fscommand2("GetPowerSource"); var batteryLevel = fscommand2("GetBatteryLevel"); var maxBattery = fscommand2("GetMaxBatteryLevel"); var batteryStatusNum = 0; if (batteryCharging) { batteryStatusNum = 10; } else { if (maxBattery == 3) { batteryStatusNum = batteryLevel; } else if (maxBattery == 100) { if (batteryLevel>80) { batteryStatusNum = 8; } else if (batteryLevel>60) { batteryStatusNum = 7; } else if (batteryLevel>40) { batteryStatusNum = 6; } else if (batteryLevel>20) { batteryStatusNum = 5; } else if (batteryLevel>0) { batteryStatusNum = 4; } } } batteryStatusNumStr.text = batteryStatusNum; batteryPict.gotoAndStop(batteryStatusNum + 1); stop(); _global.BSN = batteryStatusNum; //受信レベル var signalLevel = fscommand2("GetSignalLevel"); var maxSignal = fscommand2("GetMaxSignalLevel"); var signalNum = 0; if (maxSignal == 4) { signalNum = signalLevel; } else if (maxSignal == 3) { if (signalLevel>0) { signalNum = signalLevel+1; } } signalNumStr.text = signalNum; antennaPict.gotoAndStop(signalNum + 1); stop(); _global.SN = signalNum; //開閉回数 var mySharedObject:SharedObject = SharedObject.getLocal("open"); SharedObject.addListener("open", initHandler); mySharedObject.data.count = 0; mySharedObject.flush(); function initHandler() { var date:Number = Number(mySharedObject.data.count); date++; mySharedObject.data.count = date; mySharedObject.flush(); checkNumStr.text = mySharedObject.data.count; } if (buttonFlag == 0) { fortunePict.gotoAndStop(11); stop(); } }; fortuneButton.onRelease = function() { if (buttonFlag == 0) { fortunePict.play(); buttonFlag = 1; } else if (buttonFlag == 2) { fortunePict.play(); fortuneStr.text = ""; buttonFlag = 1; } else { fortuneArray = ["大吉", "大吉", "吉", "半吉", "小吉", "末小吉", "末吉", "凶", "凶", "凶"]; fortuneNum = Math.floor(Math.random() * 9) + 1; //バッテリーの状況によって運勢変化 switch (_global.BSN) { case (0) : fortuneNum = fortuneNum + 2; break; case (1) : fortuneNum = fortuneNum + 1; break; case (3) : fortuneNum = fortuneNum - 1; break; case (4) : fortuneNum = fortuneNum + 1; break; case (8) : fortuneNum = fortuneNum - 1; break; case (10) : fortuneNum = fortuneNum - 2; break; } //電波の状況によっても運勢変化 switch (_global.SN) { case (4) : fortuneNum = fortuneNum - 2; break; case (3) : fortuneNum = fortuneNum - 1; break; case (2) : fortuneNum = fortuneNum; break; case (1) : fortuneNum = fortuneNum + 1; break; case (0) : fortuneNum = fortuneNum + 2; break; } //特定の条件がそろった場合 if(_global.BSN == 0 && _global.SN == 0){ fortuneNum = 0; } else if (_global.BSN == 10 && _global.SN == 4){ fortuneNum = fortuneNum - 3; } if(fortuneNum < 0){ fortuneNum = 0; } else if (fortuneNum > 9){ fortuneNum = 9; } fortuneStr.text = "あなたの運勢は、"+fortuneArray[fortuneNum]+"("+fortuneNum+")です"; fortunePict.gotoAndStop(fortuneNum + 1); stop(); buttonFlag = 2; } };
ラベル:
[2010]モバイルアプリケーション
2010年10月15日金曜日
[MA-9-7] おみくじ付き携帯待ち受け画面 (FlashLite2.0/ActionScript2.0)
ma9_7.swf |
ActionScript2.0(Flash Lite2.0)
this.onEnterFrame = function() { //バッテリーレベル var batteryCharging = fscommand2("GetPowerSource"); var batteryLevel = fscommand2("GetBatteryLevel"); var maxBattery = fscommand2("GetMaxBatteryLevel"); var batteryStatusNum = 0; if (batteryCharging) { batteryStatusNum = 10; } else { if (maxBattery == 3) { batteryStatusNum = batteryLevel; } else if (maxBattery == 100) { if (batteryLevel>80) { batteryStatusNum = 8; } else if (batteryLevel>60) { batteryStatusNum = 7; } else if (batteryLevel>40) { batteryStatusNum = 6; } else if (batteryLevel>20) { batteryStatusNum = 5; } else if (batteryLevel>0) { batteryStatusNum = 4; } } } batteryStatusNumStr.text = batteryStatusNum; batteryPict.gotoAndStop(batteryStatusNum + 1); stop(); _global.BSN = batteryStatusNum; //受信レベル var signalLevel = fscommand2("GetSignalLevel"); var maxSignal = fscommand2("GetMaxSignalLevel"); var signalNum = 0; if (maxSignal == 4) { signalNum = signalLevel; } else if (maxSignal == 3) { if (signalLevel>0) { signalNum = signalLevel+1; } } signalNumStr.text = signalNum; antennaPict.gotoAndStop(signalNum + 1); stop(); _global.SN = signalNum; //開閉回数 var mySharedObject:SharedObject = SharedObject.getLocal("open"); SharedObject.addListener("open", initHandler); mySharedObject.data.count = 0; mySharedObject.flush(); function initHandler() { var date:Number = Number(mySharedObject.data.count); date++; mySharedObject.data.count = date; mySharedObject.flush(); checkNumStr.text = mySharedObject.data.count; } }; topButton.onRelease = function() { fortuneArray = ["大吉", "大吉", "吉", "半吉", "小吉", "末小吉", "末吉", "凶", "凶", "凶", "凶", "凶"]; fortuneNum = Math.floor(Math.random()*(_global.BSN+_global.SN)); fortuneStr.text = "あなたの運勢は、"+fortuneArray[fortuneNum]+"("+fortuneNum+")です"; fortunePict.gotoAndStop(fortuneNum + 1); stop(); };
ラベル:
[2010]モバイルアプリケーション
2010年10月14日木曜日
[SA-3-11] PHP-MySQL連携
1.php-mysqlモジュールをインストール
$ su
# yum install php-mysql
# service httpd stop
# service httpd start
# service mysqld stop
# service mysqld start
2.MySQLにデータベース,テーブル作成
$ mysql -u root -p
$ vi server_list.csv
$ mysql -u root -p sa
3.Windows側でPHPファイルを作成
4.FTP後にパーミッションを755に変更
$ su
# yum install php-mysql
# service httpd stop
# service httpd start
# service mysqld stop
# service mysqld start
2.MySQLにデータベース,テーブル作成
$ mysql -u root -p
create database sa;
$ vi server_list.csv
,1,sa000,10.2.3.100
,2,sa001,10.2.3.101
,3,sa002,10.2.3.102
,4,sa003,10.2.3.103
,5,sa004,10.2.3.104
,6,sa005,10.2.3.105
,7,sa006,10.2.3.106
,8,sa007,10.2.3.107
,9,sa008,10.2.3.108
,10,sa009,10.2.3.109
,11,sa010,10.2.3.110
,12,sa011,10.2.3.111
$ mysql -u root -p sa
create table server_list ( id integer NOT NULL AUTO_INCREMENT PRIMARY KEY, num char(4), host_name char(20), ip_address char(15) ); show tables; load data local infile "~/server_list.csv" into table server_list fields terminated by ',' enclosed by '"' lines terminated by '\n'; select * from server_list;
3.Windows側でPHPファイルを作成
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>server_list</title> </head> <body> <?php $db_user = "[user name]"; $db_password = "[password]"; $db_name = "[database name]"; $db_host = "localhost"; $db = mysql_connect($db_host,$db_user,$db_password); mysql_select_db($db_name,$db); $str_sql = "select * from server_list"; $rs = mysql_query($str_sql,$db); $num = mysql_num_fields($rs); print("<table><tr><th colspan=4>server_list</th></tr>"); echo(" "); print("<tr>"); for ($i=0;$i<$num;$i++){ print("<td><b>".mysql_field_name($rs,$i)."</b></td>"); } print("</tr>"); while($row=mysql_fetch_array($rs)){ echo(" "); print("<tr>"); for($j=0;$j<$num;$j++){ print("<td>".$row[$j]."</td>"); } print("</tr>"); } print("</table>"); mysql_free_result($rs); mysql_close($db); ?> </body> </html>
4.FTP後にパーミッションを755に変更
ラベル:
[2010]サーバアーキテクチャ
[SA-3-10] httpd設定
selinuxの無効化
# getenforce
# setenforce 0
# vi /etc/sysconfig/selinux
# vi /etc/httpd/conf/httpd.conf
/var/www以下のディレクトリを,ユーザー権限で操作可能(SFTPにてファイルのアップロードが可能)とする.
# chown -R [user name] /var/www/
# chmod -R g+w /var/www/
テスト用のhtmlファイル作成
# vi /var/www/html/index.html
もしくは
例) sftp://192.168.147.131
外部からWEBサーバへの接続確認
例) http://192.168.147.131
→[SA-1-5]
# getenforce
# setenforce 0
# vi /etc/sysconfig/selinux
#SELINUX=enforcing SELINUX=disabledhttpdの設定ファイル修正
# vi /etc/httpd/conf/httpd.conf
エラーページ等でOS名を非表示 #ServerTokens OS ServerTokens Prod エラーページ等でApacheのバージョン非表示 #ServerSignature On ServerSignature Off 不要モジュールの読み込み解除 #LoadModule auth_anon_module #LoadModule ldap_module modules/mod_ldap.so #LoadModule auth_ldap_module modules/mod_auth_ldap.so #LoadModule mime_magic_module #LoadModule cern_meta_module #LoadModule deflate_module modules/mod_deflate.so #LoadModule headers_module modules/mod_headers.so #LoadModule usertrack_module modules/mod_usertrack.so #LoadModule status_module modules/mod_status.so #LoadModule asis_module modules/mod_asis.so #LoadModule info_module modules/mod_info.so #LoadModule vhost_alias_module #LoadModule imap_module modules/mod_imap.so #LoadModule speling_module modules/mod_speling.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule cache_module modules/mod_cache.so #LoadModule disk_cache_module #LoadModule file_cache_module modules/mod_file_cache.so #LoadModule mem_cache_module サーバ管理者のメールアドレス設定 #ServerAdmin root@localhost サーバ(FQDN)名設定 #ServerName www.example.com:80 ドキュメントルート(/var/www/html)のCGI/SSIの実行権付与とインデックスリストの非表示 (Indexes : インデックスリスト表示, FollowSymLinks : Symlink許可, Includes : SSI許可, ExecCGI : CGI許可) # Options Indexes FollowSymLinks Options FollowSymLinks Includes ExecCGI ディレクトリアクセス制御 (FileInfo : ファイル関係の制御, AuthConfig : 認証関係, Limit : .htaccessによるアクセス制御, or ALL : 全て許可) # AllowOverride None AllowOverride FileInfo AuthConfig Limit ユーザディレクトリ(/home/[user]/public_htmlをhttp://localhost.localdomain/~[user]として表示)の有効化とCGI/SSIの実行権付与とインデックスリストの非表示 ※各ディレクトリのパーミッションは,/home/[user] : 711, /home/[user]/public_html : 755です. #UserDir disable UserDir public_html <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews SymLinksIfOwnerMatch <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> <Directory /home/*/public_html> AllowOverride FileInfo AuthConfig Limit Options MultiViews SymLinksIfOwnerMatch IncludesNoExec ExecCGI <LimitExcept GET POST OPTIONS> Order deny,allow Deny from all </LimitExcept> </Directory> iconsディレクトリのファイル一覧を非表示 <Directory "/var/www/icons"> #Options Indexes MultiViews Options MultiViews AllowOverride None Order allow,deny Allow from all </Directory> Index.htmの許可 DirectoryIndex index.html index.htm CGIスクリプトとして.plを許可 #AddHandler cgi-script .cgi AddHandler cgi-script .cgi .pl アクセスログでのホストネーム使用 #HostnameLookups Off HostnameLookups On ログ分離設定 #CustomLog logs/access_log combined SetEnvIf Remote_Addr 192.168.1 nolog SetEnvIf Remote_Addr 127.0.0.1 nolog SetEnvIf Request_URI "Admin.dll" wormlog nolog SetEnvIf Request_URI "cmd.exe" wormlog nolog SetEnvIf Request_URI "default.ida" wormlog nolog SetEnvIf Request_URI "null.ida" wormlog nolog SetEnvIf Request_URI "root.exe" wormlog nolog CustomLog logs/worm_log common env=wormlog CustomLog logs/access_log combined env=!nolog
/var/www以下のディレクトリを,ユーザー権限で操作可能(SFTPにてファイルのアップロードが可能)とする.
# chown -R [user name] /var/www/
# chmod -R g+w /var/www/
テスト用のhtmlファイル作成
# vi /var/www/html/index.html
もしくは
例) sftp://192.168.147.131
外部からWEBサーバへの接続確認
例) http://192.168.147.131
→[SA-1-5]
ラベル:
[2010]サーバアーキテクチャ
[SA-3-9] Firewall(iptables)設定
iptablesの自動起動確認
# chkconfig --list | grep tables
iptablesの自動起動停止
# chkconfig iptables off
iptablesの起動
# service iptables start
iptablesの停止
# service iptables stop
(/etc/rc.d/init.d/iptables stop)
※ip6tablesについても同様です.
iptablesの設定ファイル編集
# vi /etc/sysconfig/iptables
iptablesのルール初期化
# /sbin/iptables -F
外部からWEBサーバへの接続許可1(SYNフラグ,ACKフラグ)
クライアント→サーバ方向
# /sbin/iptables -A FORWARD -p TCP -s 0.0.0.0 --dport 80 -d 192.168.147.131 -j ACCEPT
外部からWEBサーバへの接続許可2(SYN/ACKフラグ)
サーバ→クライアント方向
# /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 80 -s 192.168.147.131 -d 0.0.0.0 -j ACCEPT
# chkconfig --list | grep tables
iptablesの自動起動停止
# chkconfig iptables off
iptablesの起動
# service iptables start
iptablesの停止
# service iptables stop
(/etc/rc.d/init.d/iptables stop)
※ip6tablesについても同様です.
iptablesの設定ファイル編集
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
※直接設定ファイルを編集する事は,危険が伴うため推奨されません.以下のコマンドを使用して,個別にルールを適用して下さい.
iptablesのルール初期化
# /sbin/iptables -F
外部からWEBサーバへの接続許可1(SYNフラグ,ACKフラグ)
クライアント→サーバ方向
# /sbin/iptables -A FORWARD -p TCP -s 0.0.0.0 --dport 80 -d 192.168.147.131 -j ACCEPT
-p プロトコル:tcp
--dport 送信先ポート:80
-d 送信先アドレス:192.168.147.131
-j ターゲット:ACCEPT(パケットの通過を許可)
外部からWEBサーバへの接続許可2(SYN/ACKフラグ)
サーバ→クライアント方向
# /sbin/iptables -A FORWARD -p TCP ! --syn -m state --state ESTABLISHED --sport 80 -s 192.168.147.131 -d 0.0.0.0 -j ACCEPT
-p プロトコル:tcp
--sport 送信元ポート:80
-s 送信元アドレス:192.168.147.131
! --syn フラグ:SYNフラグ以外
-m state --state ステータス:ESTABLISHED
-j ターゲット:ACCEPT(パケットの通過を許可)
ラベル:
[2010]サーバアーキテクチャ
2010年10月9日土曜日
[memo] スマートフォン関連開発環境まとめ
■Android [google]
http://developer.android.com/sdk/index.html
例)au IS01
※ARM用Androidだけではなく,x86用Androidも存在します.ISO ImageをダウンロードしてVMware Playerにインストールすれば,シミュレーターや実機が無くても,雰囲気を掴むことは出来ます.
http://www.android-x86.org/download
■Windows Phone 7 [Microsoft]
開発ツール(英語版)
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&displaylang=en
VB用テンプレート(英語版)
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a808a69d-6119-47b7-b858-262be5c49915&displaylang=en
※上記WP7用SDKはVisual Studio 2010(英語版)用です.
Visual Studio 2010 日本語版にWindows Phone 7のテンプレートを入れる方法
http://blogs.shintak.info/archive/2010/09/22/54570.aspx
■iOS SDK [Apple]
http://developer.apple.com/devcenter/ios/index.action
※iOSのSDKを動かすためには開発環境(Xcode)が必要です.XcodeはMac OS X専用の為,iOS SDKを利用するためにはMACが必要という事になります.
■Kindle Development Kit [Amazon]
https://kindlepublishing.amazon.com/gp/vendor/sign-in?ie=UTF8&originatingURI=%2Fgp%2Fvendor%2Fmembers%2Fkindlepubs%2Fkdk%2Fhome
http://developer.android.com/sdk/index.html
例)au IS01
1.Android SDKの入手し,インストール
2.対象機種の拡張APIや,エミュレーターにハードウェアの仕様を設定する為に,機種固有のSDK AddOnを入手し,1で入手したAndroid SDKのadd-onsフォルダ配下に配置
3.1で入手したAndroid SDKに含まれるSDK Manager.exeを起動し,Virtual Devices→New→Target:JN-DK01(SHARP Corporation) - API Level 4を選択し,新規AVD(Android Virtual Device)を作成→Start
※ARM用Androidだけではなく,x86用Androidも存在します.ISO ImageをダウンロードしてVMware Playerにインストールすれば,シミュレーターや実機が無くても,雰囲気を掴むことは出来ます.
http://www.android-x86.org/download
1.VMware Playerの設定
後でOSをインストール
ゲストOS:Linux(他の2.6.xカーネル)
2.Android froyo 20100812.vmxの7~8行目を編集
scsi0:0.present = "TRUE"
scsi0:0.fileName = "Android froyo 20100812.vmdk"
を
ide0:0.present = "TRUE"
ide0:0.fileName = "Android froyo 20100812.vmdk"
に変更
3.インストール
installation
Create/Modify partitions
New→Primary→Bootable→Write→Quit
sda1→ext3
■Windows Phone 7 [Microsoft]
開発ツール(英語版)
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&displaylang=en
VB用テンプレート(英語版)
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a808a69d-6119-47b7-b858-262be5c49915&displaylang=en
※上記WP7用SDKはVisual Studio 2010(英語版)用です.
Visual Studio 2010 日本語版にWindows Phone 7のテンプレートを入れる方法
http://blogs.shintak.info/archive/2010/09/22/54570.aspx
■iOS SDK [Apple]
http://developer.apple.com/devcenter/ios/index.action
※iOSのSDKを動かすためには開発環境(Xcode)が必要です.XcodeはMac OS X専用の為,iOS SDKを利用するためにはMACが必要という事になります.
■Kindle Development Kit [Amazon]
https://kindlepublishing.amazon.com/gp/vendor/sign-in?ie=UTF8&originatingURI=%2Fgp%2Fvendor%2Fmembers%2Fkindlepubs%2Fkdk%2Fhome
ラベル:
[2010]memo
2010年10月8日金曜日
[MA-9-6] random関数の利用 (FlashLite2.0/ActionScript2.0)
ma9_6.swf |
ランダム関数を使用すると端数が発生するため,出力された値を使って特定のフレームを表示したい場合には端数の処理が必要となります.
Math.floor 小数点以下切り捨て 0 - 9
Math.ceil 小数点以下切り上げ 1 - 10
Math.round 小数点以下四捨五入 0 - 10
ActionScript2.0(Flash Lite2.0)
topButton.onRelease = function() { fortuneArray = ["大吉", "大吉", "吉", "半吉", "小吉", "末小吉", "末吉", "凶", "凶", "凶"]; fortuneNum = Math.floor(Math.random()*(_global.BSN+_global.SN)); fortuneStr.text = "あなたの運勢は、"+fortuneArray[fortuneNum]+"("+fortuneNum+")"; //gotoAndStop(fortuneNum); };
ラベル:
[2010]モバイルアプリケーション
[MA-9-5] 携帯電話の開閉回数・バッテリー状態・電波状態の表示サンプル (FlashLite2.0/ActionScript2.0)
携帯電話の開閉回数,バッテリー状態,電波状態を表示するサンプル
ActionScript2.0(Flash Lite2.0)
※PC上で動作確認を行う際は,iモードHTMLシミュレータⅡを使用すると便利です.
ma13debug.swf |
ActionScript2.0(Flash Lite2.0)
this.onEnterFrame = function() { //debug用 SharedObject利用可否チェック var checkSharedObject = "none"; checkSharedObject = System.capabilities.hasSharedObjects; checkSharedObjectStr.text = checkSharedObject; //debug用 キャリア判定 maxBatteryTemp = fscommand2("GetMaxBatteryLevel"); var carrier = "other"; if (maxBatteryTemp == 3) { carrier = "au/softbank"; } else if (maxBatteryTemp == 100) { carrier = "docomo"; } else { carrier = "other"; } carrierStr.text = carrier; //バッテリーレベル var batteryCharging = fscommand2("GetPowerSource"); var batteryLevel = fscommand2("GetBatteryLevel"); var maxBattery = fscommand2("GetMaxBatteryLevel"); var batteryStatusNum = 0; if (batteryCharging) { batteryStatusNum = 10; } else { if (maxBattery == 3) { batteryStatusNum = batteryLevel; } else if (maxBattery == 100) { if (batteryLevel>80) { batteryStatusNum = 8; } else if (batteryLevel>60) { batteryStatusNum = 7; } else if (batteryLevel>40) { batteryStatusNum = 6; } else if (batteryLevel>20) { batteryStatusNum = 5; } else if (batteryLevel>0) { batteryStatusNum = 4; } } } batteryStatusNumStr.text = batteryStatusNum; //受信レベル var signalLevel = fscommand2("GetSignalLevel"); var maxSignal = fscommand2("GetMaxSignalLevel"); var signalNum = 0; if (maxSignal == 4) { signalNum = signalLevel; } else if (maxSignal == 3) { if (signalLevel>0) { signalNum = signalLevel+1; } } signalNumStr.text = signalNum; //開閉回数 var mySharedObject:SharedObject = SharedObject.getLocal("open"); SharedObject.addListener("open", initHandler); mySharedObject.data.count = 0; mySharedObject.flush(); function initHandler() { var date:Number = Number(mySharedObject.data.count); date++; mySharedObject.data.count = date; mySharedObject.flush(); checkNumStr.text = mySharedObject.data.count; } };
※PC上で動作確認を行う際は,iモードHTMLシミュレータⅡを使用すると便利です.
ラベル:
[2010]モバイルアプリケーション
2010年10月7日木曜日
[SA-3-8] CentOS5.5(最小インストール)でのcrontabの利用
今回最小構成でインストールした関係で,初期状態ではcronが使えない場合もあります.
その際はvixie-cronをインストールし,利用可能な状態にしてください.
# yum install vixie-cron
crontabへの登録
$ crontab -e
crontabに登録された内容の確認
$ crontab -l
その際はvixie-cronをインストールし,利用可能な状態にしてください.
# yum install vixie-cron
crontabへの登録
$ crontab -e
crontabに登録された内容の確認
$ crontab -l
ラベル:
[2010]サーバアーキテクチャ
[SA-3-7] VMWare Player 3.0のNAT設定変更方法
最新のVMWare Player 3.0から,標準ではNATの設定を変更できなくなったようです.
ただし,インストーラーの中にはexeファイルが含まれているので,それを取り出して利用する事とします.
1.ダウンロードしたVMWare Playerのインストールファイルを,Windowsのコマンドライン上で,オプションを付けて実行.
2.作成されたtempフォルダの中のnetwork.cabをWIndowsの解凍ソフトで展開する.
3.展開されたフォルダの中のvmnetcfg.exeをVMWare Playerがインストールされたフォルダ(C:\Program Files\VMware\VMware Player)に移動する.
4. vmnetcfg.exeを実行
ただし,インストーラーの中にはexeファイルが含まれているので,それを取り出して利用する事とします.
1.ダウンロードしたVMWare Playerのインストールファイルを,Windowsのコマンドライン上で,オプションを付けて実行.
VMware-player-3.1.2-301548.exe /e temp
2.作成されたtempフォルダの中のnetwork.cabをWIndowsの解凍ソフトで展開する.
3.展開されたフォルダの中のvmnetcfg.exeをVMWare Playerがインストールされたフォルダ(C:\Program Files\VMware\VMware Player)に移動する.
4. vmnetcfg.exeを実行
ラベル:
[2010]サーバアーキテクチャ
[SA-3-6] 最低限必要となるアプリケーションをインストール
1.yum準備
#yum install yum-fastestmirror
#yum install yum-utils
2.NTPインストール
#yum install ntp
#chkconfig ntpd on
#chkconfig --list | grep ntp
#service ntpd start
3.PHPインストール
#yum install php
#vi /etc/php.ini
4.Webサーバ(httpd)インストール
#yum install httpd
#vi /etc/httpd/conf/httpd.conf
#service httpd start
5.MySQL(サーバ,クライアント)インストール
#yum install mysql mysql-server
#vi /etc/my.cnf
#service mysqld start
#chkconfig mysqld on
6.MySQLの不要ユーザー削除/新規ユーザー追加
#mysql -u root
ユーザ情報表示
匿名ユーザー削除
rootパスワード設定
新規ユーザーの追加
ユーザ情報表示(確認)
7.viエディタのカラー化
# yum install vim-enhanced
# alias vi='vim'
# vi /etc/bashrc
#yum install yum-fastestmirror
#yum install yum-utils
2.NTPインストール
#yum install ntp
#chkconfig ntpd on
#chkconfig --list | grep ntp
#service ntpd start
3.PHPインストール
#yum install php
#vi /etc/php.ini
memory_limit = 16M ; Maximum amount of memory a script may consume
4.Webサーバ(httpd)インストール
#yum install httpd
#vi /etc/httpd/conf/httpd.conf
KeepAlive On※ログや参考となるサイトを確認しながらパラメータの微調整を行います.
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
#service httpd start
5.MySQL(サーバ,クライアント)インストール
#yum install mysql mysql-server
#vi /etc/my.cnf
[mysql]#mysql_secure_installation
default_character_set=utf8
[mysqld]
character_set-server=utf8
innodb_log_file_size=64M
innodb_buffer_pool_size=128M
#service mysqld start
#chkconfig mysqld on
6.MySQLの不要ユーザー削除/新規ユーザー追加
#mysql -u root
ユーザ情報表示
select user,host,password from mysql.user;
匿名ユーザー削除
delete from mysql.user where user='';
rootパスワード設定
set password for root@localhost=password('[任意のパスワード]'); set password for root@'[ホスト名]'=password('[任意のパスワード]'); set password for root@127.0.0.1=password('[任意のパスワード]');
新規ユーザーの追加
grant all privileges on *.* to [user name]@"%" identified by '[password]' with grant option;
ユーザ情報表示(確認)
select user,host,password from mysql.user;
7.viエディタのカラー化
# yum install vim-enhanced
# alias vi='vim'
# vi /etc/bashrc
alias vi='vim'
ラベル:
[2010]サーバアーキテクチャ
2010年10月6日水曜日
[memo] 最新スマートフォン・スペック比較
各キャリアの最新のスマートフォンのスペックを比較する.
採用OSや付加機能から,各キャリアの今後のスマートフォンの戦略を考える.
(*1)今後予定されるAndroid2.2へのアップデート時にFlash 10.1に対応予定
(*2)今後Android2.*へアップデート予定
採用OSや付加機能から,各キャリアの今後のスマートフォンの戦略を考える.
機種名 | Galaxy S SC-02B | IS03 | Xperia SO-01B | iPhone 4 |
---|---|---|---|---|
キャリア | docomo | au | docomo | softbank |
OS | Android 2.2 | Android 2.1(*1) | Android 1.6(*2) | iOS 4 |
CPU | Samsung S5PC110 1GHz | Qualcomm QSD8650 Snapdragon 1GHz | Qualcomm QSD8250 Snapdragon 1GHz | Apple A4 1GHz |
画面サイズ | 4インチ | 3.5インチ | 4.0インチ | 3.5インチ |
解像度 | 800x480 | 960×640 | 854x480 | 960×640 |
RAM | 512MB | 512MB | 256MB | 512MB |
本体メモリ | 16GB | 500MB | 1GB | 16GB/32GB |
外部メモリ | microSD 最大32GB 1GB同梱 | microSD 最大32GB 2GB同梱 | microSD 最大32GB 16GB同梱 | × |
大きさ | 122×64×9.9mm | 121×63×12.6mm | 119×63×13.1mm | 115.2×58.6×9.3mm |
質量 | 118g | 138g | 139g | 137g |
カメラ | 500万画素 CMOS | 957万画素 CCD | 810万画素 CMOS | 500万画素 裏面照射CMOS |
インカメラ | ○ | × | × | ○ |
GPS | ○ | ○ | ○ | ○ |
電子コンパス | ○ | ○ | ○ | ○ |
赤外線 | × | ○ | × | × |
ワンセグ | × | ○ | × | △ |
Felica | × | ○ | × | × |
無線LAN | IEEE802.11b/g/n | IEEE802.11b/g | IEEE802.11b/g | IEEE802.11b/g/n |
Bluetooth | Bluetooth 3.0 | Bluetooth 2.1 | Bluetooth 2.0 | Bluetooth 2.1 |
高速データ通信 | HSDPA HSUPA 下り7.2Mbps 上り5.76Mbps | CDMA 1X EV-DO Rev.A 下り3.1Mbps 上り1.8Mbps | HSDPA HSUPA 下り7.2Mbps 上り2.0Mbps | HSDPA HSUPA 下り7.2Mbps 上り5.8Mbps |
連続待受時間 | 約510時間 | 約200時間 | 約300時間(3G) | 約300時間(3G) |
連続通話時間 | 約380分 | 約230分 | 約290分(3G) | 約420分(3G) |
バッテリー | 1500mAh | 1020mAh | 1500mAh | 1420mAh |
充電/外部端子 | microUSB | microUSB | microUSB | Dockコネクタ |
FLASH | FLASH 10.1 | FLASH Lite 4.0(*1) | × | × |
発売時期 | 2010年10月中 | 2010年11月下旬 | 2010年4月1日 | 2010年6月24日 |
(*1)今後予定されるAndroid2.2へのアップデート時にFlash 10.1に対応予定
(*2)今後Android2.*へアップデート予定
ラベル:
[2010]memo
[MA-9-4] バッテリーの状態を取得 (FlashLite2.0/ActionScript2.0)
携帯電話の電池の状態をFlashから取得するには、以下のFScommand2を使用します.
AC駆動/バッテリー駆動の判別
現在のバッテリー残量
バッテリーの最大容量
※バッテリーの最大容量の値がキャリアによって異なる事に注意.
最大バッテリ容量の値がキャリアによって異なる事を利用して,場合分けする例
ActionScript2.0(Flash Lite2.0)
batteryStatusNum
AC駆動/バッテリー駆動の判別
var batteryCharging = fscommand2("GetPowerSource");
現在のバッテリー残量
var batteryLevel = fscommand2("GetBatteryLevel");
バッテリーの最大容量
var maxBattery = fscommand2("GetMaxBatteryLevel");
※バッテリーの最大容量の値がキャリアによって異なる事に注意.
キャリア | 空 | 満充電 | ||||
docomo | 0 | 1-20 | 21-40 | 41-60 | 61-80 | 81-100 |
au | 0 | 1 | 2 | 3 | ||
softbank | 0 | 1 | 2 | 3 |
最大バッテリ容量の値がキャリアによって異なる事を利用して,場合分けする例
ActionScript2.0(Flash Lite2.0)
batteryCharging = fscommand2("GetPowerSource"); batteryLevel = fscommand2("GetBatteryLevel"); maxBattery = fscommand2("GetMaxBatteryLevel"); batteryStatusNum = 0; if(batteryCharging){ batteryStatusNum = 10; }else{ if(maxBattery == 3){ batteryNum = batteryLevel; }else if(maxBattery == 100){ if(batteryLevel > 80){ batteryStatusNum = 8; }else if(batteryLevel > 60){ batteryStatusNum = 7; }else if(batteryLevel > 40){ batteryStatusNum = 6; }else if(batteryLevel > 20){ batteryStatusNum = 5; }else if(batteryLevel > 0){ batteryStatusNum = 4; } } }
batteryStatusNum
値 | バッテリーレベル | キャリア |
0 | 空 | au/softbank |
1 | 1 | au/softbank |
2 | 2 | au/softbank |
3 | 3 | au/softbank |
4 | 1-20 | docomo |
5 | 21-40 | docomo |
6 | 41-60 | docomo |
7 | 61-80 | docomo |
8 | 81-100 | docomo |
9 | ||
10 | 充電中 | au/softbank/docomo |
ラベル:
[2010]モバイルアプリケーション
[MA-9-3] 電波状況の取得 (FlashLite2.0/ActionScript2.0)
携帯電話の電波状況をFlashから取得するには、以下のFScommand2を使用します.
現在の受信レベル
最大受信レベル
※最大受信レベルがキャリアによって異なる事に注意.
最大受信レベルがキャリアによって異なる事を利用して,場合分けする例
ActionScript2.0(Flash Lite2.0)
現在の受信レベル
signalLevel = fscommand2("GetSignalLevel");
最大受信レベル
maxSignal = fscommand2("GetMaxSignalLevel");
※最大受信レベルがキャリアによって異なる事に注意.
キャリア | 圏外 | MIN | MAX | ||
docomo | 0 | 1 | 2 | 3 | |
au | 0 | 1 | 2 | 3 | 4 |
softbank | 0 | 1 | 2 | 3 | 4 |
最大受信レベルがキャリアによって異なる事を利用して,場合分けする例
ActionScript2.0(Flash Lite2.0)
var signalLevel = fscommand2("GetSignalLevel"); var maxSignal = fscommand2("GetMaxSignalLevel"); var signalNum = 0; if(maxSignal == 4){ signalNum = signalLevel; }else if(maxSignal == 3){ if(signalLevel > 0){ signalNum = signalLevel + 1; } }
ラベル:
[2010]モバイルアプリケーション
2010年10月1日金曜日
[MA-9-2] 携帯確認回数のカウント (FlashLite2.0/ActionScript2.0)
Shared Objectを利用して,一日のうちに何回携帯を確認したかをカウントする.
まずは下記サンプルを参考に,携帯電話の画面を確認した回数をカウント出来るか試行する.
ActionScript2.0(Flash Lite2.0)
※ステージ上にはダイナミックテキストボックスを配置し,インスタンス名を「checkNumText」とする.
動作したら,一日に何回確認したかをカウント出来るようにする.
(最終的には電波状況とバッテリー残量と組み合わせたアプリケーションとする)
まずは下記サンプルを参考に,携帯電話の画面を確認した回数をカウント出来るか試行する.
ActionScript2.0(Flash Lite2.0)
var mySharedObject:SharedObject = SharedObject.getLocal("open"); SharedObject.addListener("open", initHandler); mySharedObject.data.count = 0; mySharedObject.flush(); function initHandler(){ var date:Number = Number(mySharedObject.data.count); date ++; mySharedObject.data.count = date; mySharedObject.flush(); checkNumText.text = mySharedObject.data.count; }
※ステージ上にはダイナミックテキストボックスを配置し,インスタンス名を「checkNumText」とする.
動作したら,一日に何回確認したかをカウント出来るようにする.
(最終的には電波状況とバッテリー残量と組み合わせたアプリケーションとする)
ラベル:
[2010]モバイルアプリケーション
[MA-9-1] Shared Object (FlashLite2.0/ActionScript2.0)
Shared Objectは,FlashLiteではver.2.0から実装された,データをローカルに保存する仕組みです.
Shared Objectの初期化
イベントの登録
SharedObjectへのデータ追加
SharedObjectからのデータ取り出し
SharedObjectにデータを追加後に保存
SharedObjectに配列を保存
SharedObjectにオブジェクトを保存
SharedObjectのデータをループで取り出す
Shared Objectの初期化
var mySharedObject:SharedObject = SharedObject.getLocal("open");※任意のShared Object名は「open」としています.
イベントの登録
SharedObject.addListener("open", initHandler);
SharedObjectへのデータ追加
mySharedObject.data.count = 0;※「count」という名前のデータを保存(追加)する場合.
SharedObjectからのデータ取り出し
var count = mySharedObject.data.count;
SharedObjectにデータを追加後に保存
mySharedObject.flush();※データ追加後には,必ず保存する事.
SharedObjectに配列を保存
mySharedObject.week = ["mon", "tue", "wed", "thu", "fir", "sat", "sun"];※「week」という名前の配列を追加する場合.
SharedObjectにオブジェクトを保存
mySharedObject.classRegister = {name:"sato", class:"gc", grade:"2"};※「classRegister」という名前のオブジェクトに追加する場合.
SharedObjectのデータをループで取り出す
for (var i in mySharedObject.data) { trace("[" + i + "] " mySharedObject.data[i]); }
ラベル:
[2010]モバイルアプリケーション
登録:
投稿 (Atom)