2015-12-21(Mon)

WorldWeatherOnlineを使用してみる

商用利用も可能らしいWorldWeatherOnlineを使用してみる。
コレも登録してAPPKeyを取得する必要がある。
日本語にも対応しているが、なんか怪しい日本語・・・
アイコンも提供されているが、無料で使えるアイコンはダサい・・・


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=2.0,user-scalable=yes">
<meta http-equiv="Content-Language" content="ja" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<script type="text/javascript">

var xhr = new XMLHttpRequest();
var api_key = '*******************************';

window.onload=function() {
doRequest();
};

function doRequest() {

xhr.open("GET" , "http://api.worldweatheronline.com/free/v2/weather.ashx?key="+api_key+"&q=shinagawa,japan&num_of_days=1&lang=ja&format=json", true);
// xhr.withCredentials = true;
xhr.onreadystatechange = xhrOnReadyStateChange;
xhr.send();
}

function onRecive() {

var test = JSON.parse(xhr.response);

if(test.data.current_condition.length == 0) return;

document.getElementById("tenki_img").src = test.data.current_condition[0].weatherIconUrl[0].value;
document.getElementById("text_area").innerHTML = test.data.current_condition[0].lang_ja[0].value;
}

function xhrOnReadyStateChange() {
switch(xhr.readyState){
case 4:
if(xhr.status == 200) onRecive();
break;
default:
break;
}
}


</script>

<title>WorldWeatherOnlineを使用するテスト</title>
</head>
<body>
<img src="" id="tenki_img" class="tenki_img" />
<span id="text_area"></span>

</body>
</html>




2015-12-21(Mon)

OpenWeatherMapを使ってみる

OpenWeatherMap(http://openweathermap.org/)を使用してJavascriptで天気情報を取得してみる。

上記のサイトから都市名等で天気情報を表示することができる。
これをAPIで取得する方法はヘルプのCall current weather data for one location に書いてあるとおり
http://api.openweathermap.org/data/2.5/weather?q=Shinagawa-ku,JP

となる。コレをWebブラウザのアドレスに入れてアクセスすればレスポンスがあるはずであるが、実はこれだけではできない。
APIで天気情報を取得するためには上記のサイトで登録をしてAPIキーを取得する必要がある。

取得したAPIキーはヘルプのHow to use API key in API call に書かれているように
api.openweathermap.org/data/2.5/forecast/city?id=524901&APPID=1111111111

という感じで使用する。
以上を踏まえると
http://api.openweathermap.org/data/2.5/weather?q=Shinagawa-ku,JP&APPID=hogehogehoge

というリクエストをブラウザから行えば、以下のようなレスポンスがあることがわかる。
{"coord":{"lon":139.73,"lat":35.61},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"base":"stations","main":{"temp":277.43,"pressure":1022,"humidity":35,"temp_min":273.15,"temp_max":279.82},"visibility":10000,"wind":{"speed":7.2,"deg":340},"clouds":{"all":20},"dt":1451259768,"sys":{"type":1,"id":7619,"message":0.0182,"country":"JP","sunrise":1451166563,"sunset":1451201714},"id":1852140,"name":"Shinagawa-ku","cod":200}

天気の情報は
weather[0].main と weather[0].descriptionにテキストで格納されているが、日本語表記ではないため日本語で表示したい場合は変換する必要がありそう。そのときはweather[0].id を見てテキストを割り振るしか無いでしょう。
天気種類(テーブル)は、ヘルプのWeather condition codes にすべて記載がある。
また、weather[0].icon に使用できるアイコン画像のファイル名が格納されている為、ヘルプのHow to get icon URL に記載があるURLで使用することができる。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=2.0,user-scalable=yes">
<meta http-equiv="Content-Language" content="ja" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<script type="text/javascript">

var xhr = new XMLHttpRequest();
var api_key = '*********************************';

window.onload=function() {
doRequest();
};

function doRequest() {
xhr.open("GET" , "http://api.openweathermap.org/data/2.5/weather?q=Shinagawa-ku,JP&units=metric&appid="+api_key, true);
// xhr.withCredentials = true;
xhr.onreadystatechange = xhrOnReadyStateChange;
xhr.send();

}

function onRecive() {

var test = JSON.parse(xhr.response);

if(test.weather.length == 0) return;

document.getElementById("tenki_img").src = "http://openweathermap.org/img/w/" + test.weather[0].icon + ".png";

}

function xhrOnReadyStateChange() {
switch(xhr.readyState){
case 4: // XHR 通信が完了した
if(xhr.status == 200) onRecive();
break;
default:
break;
}
}
</script>

<title>OpenWeatherMapを使用するテスト</title>
</head>
<body>
<img src="http://openweathermap.org/img/w/01d.png" id="tenki_img" class="tenki_img" />
</body>
</html>

しかし・・・APIKeyが見えてしまうのでJavascriptでアクセスするのはちょっと使いづらいなぁ・・・

2015-11-13(Fri)

JavascriptでLINEのようなメッセージの表示を行う

JavascriptでDIV要素を動的に追加していけば、LINEのようなメッセージの表示ができるのではないかと考えてみた。

■ test.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="ja" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<script type="text/javascript" src="test.js"></script>
<style type="text/css">

div#main {
border:solid 1px #000000;
background-color: #6f92c0;
padding:5pt;
width: 400px;
height: 700px;
overflow: auto;
}

div.message {
margin-left:auto;
margin-right:auto;
border:solid 1px #000000;
background-color: #85e249;
border-radius: 8px 8px 8px 8px / 8px 8px 8px 8px;
padding:3pt;
width: 300px;
}

</style>
<title>DIV要素を追加するテスト</title>
</head>
<body>
DIV要素を動的に追加していくテスト
<form name="input_form">
追加テキスト:<input type="text" name="text_data" value="">
<input type="button" value="追加" onClick="onAddData()">
<input type="button" value="全削除" onClick="onRemoveAllData()">
<input type="button" value="削除" onClick="onRemoveData()">
</form>

<div id="main">
<!--
<div class = "message">最初の行。この後(つまりid=mainのDIVタグの最後)にデータが追加されていくようにできないか?</div>
-->
</div>
</body>
</html>


■test.js

var message_max = 20; // 追加できるメッセージの最大数
var message_cnt = 0;

window.onload=function() {
console.log('onload.');

removeAllMessage(); // 最初に全削除。
}

function onAddData() {
console.log('onAddData()');

var txt = document.input_form.text_data.value;

addMessage(txt);

autoScroll(); // スムーススクロールする。
}

// すべてのメッセージを削除
function onRemoveAllData() {
console.log('onRemoveAllData()');

removeAllMessage();

}

function onRemoveData() {
console.log('onRemoveData()');

removeLastMessage();
}


function addMessage(txt) {
console.log('addMessage(txt='+txt+')');

if(message_cnt >= message_max) {
var main_ele = document.getElementById("main");
console.log('before scrollTop="+main_ele.scrollTop+", scrollHeight= ' + main_ele.scrollHeight);
removeFirstMessage();
console.log('after scrollTop="+main_ele.scrollTop+", scrollHeight= ' + main_ele.scrollHeight);
scr_pos = main_ele.scrollTop = main_ele.scrollHeight - main_ele.clientHeight - 1;
} else {
message_cnt++;
}

var ele = document.createElement("div"); // 新規に要素(タグ)を生成
ele.className = 'message';

ele.innerHTML = txt + "<B R>が追加されました。"; // こうすればタグも追加できる。

var main_ele = document.getElementById("main");
main_ele.appendChild(ele);

// <B R>を追加する。
ele = document.createElement("br");
main_ele.appendChild(ele);

}

// すべてのメッセージを削除
function removeAllMessage() {
console.log('removeAllMessage()');

var element = document.getElementById("main");

while (element.firstChild) {
element.removeChild(element.firstChild);
}
message_cnt = 0;
}

// 最後のメッセージを削除
function removeLastMessage() {
console.log('removeLastMessage()');

var element = document.getElementById("main");

if(element.lastChild) {
element.removeChild(element.lastChild);
element.removeChild(element.lastChild);
}
}

// 最初のメッセージを削除
function removeFirstMessage() {
console.log('removeFirstMessage()');

var element = document.getElementById("main");

if(element.firstChild) {
element.removeChild(element.firstChild);
element.removeChild(element.firstChild);
}
}

var scr_pos = 0;

// スムーススクロール
function autoScroll() {
console.log('autoScroll()');
var element = document.getElementById("main");

console.log('scrollTop= ' + element.scrollTop + ', scrollHeight= ' + element.scrollHeight + ', clientHeight= ' + element.clientHeight);

element.scrollTop = ++scr_pos;
if(scr_pos < element.scrollHeight - element.clientHeight) {
setTimeout( "autoScroll()", 1);
} else {
}
}


こんな感じ・・・
20151113_1.png

2015-04-02(Thu)

Visual Studio Community 2013 インストール

Visual Studio 2010 で .NET Framework 4.5を使ったC#のプロジェクトがビルドできないため、無料で使えると噂のVisual Studio Community 2013をインストールしてみた。
20150402_1.png

2014-12-04(Thu)

OpenLayersを使ってGoogleMapを表示する

test.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>OpenLayers Test (Google Maps V3)</title>
</head>
<script src="http://openlayers.org/api/OpenLayers.js"></script>
<script src="http://maps.google.co.jp/maps/api/js?v=3.5&sensor=false&language=ja"></script>
<script>
function init() {

var mapCenterLatLng = new OpenLayers.LonLat(139.553146, 35.336063); // Kamukura

var map = new OpenLayers.Map('map_google');

map.addControl( new OpenLayers.Control.LayerSwitcher() );

var gmap_terrain = new OpenLayers.Layer.Google(
"Google TERRAIN",
{type: google.maps.MapTypeId.TERRAIN}
);
var gmap = new OpenLayers.Layer.Google(
"Google ROADMAP", // the default
{numZoomLevels: 20}
);
var gmap_hybrid = new OpenLayers.Layer.Google(
"Google HYBRID",
{type: google.maps.MapTypeId.HYBRID, numZoomLevels: 20}
);
var gmap_satellite = new OpenLayers.Layer.Google(
"Google SATELLITE",
{type: google.maps.MapTypeId.SATELLITE, numZoomLevels: 22}
);

map.addLayers( [ gmap, gmap_terrain, gmap_hybrid, gmap_satellite] );

// Google.v3 uses EPSG:900913 as projection, so we have to
// transform our coordinates

var projection = new OpenLayers.Projection("EPSG:4326");
var mapCenterGoogle = mapCenterLatLng.transform( projection, map.getProjectionObject() );

map.setCenter( mapCenterGoogle, 15 );
}

</script>
<style type="text/css">
#map_google {
width: 100%;
height: 480px;
border: solid 1px #999;
}

</style>

</head>

<body onload="init()">

<div id="map_google" ></div>
</body>
</html>
</body>
</html>

2014-12-04(Thu)

Google Maps JavaScript API V3でGoogleMapを表示する

test.html
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex,nofollow,noarchive" />
<title>Google Maps サンプル</title>

<script src="http://maps.google.co.jp/maps/api/js?v=3.5&sensor=false&language=ja"></script>

<script type="text/javascript">
function initialize() {
var latlng = new google.maps.LatLng(35.709984,139.810703);
var opts = {
zoom: 15,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), opts);
}
</script>

</head>
<body onload="initialize()">
<p>地図です。</p>

<div id="map_canvas" style="width:500px; height:300px"></div>

</body>
</html>
2014-12-02(Tue)

OpenLayersを使ってOSM(OpenStreetMap)を表示する

test.heml
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Language" content="ja" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<!--
<link rel="stylesheet" href="test.css" type="text/css" >
<script type="text/javascript" src="test.js"></script>
-->
<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript">
function init() {
var map = new OpenLayers.Map("canvas");
var mapnik = new OpenLayers.Layer.OSM();
map.addLayer(mapnik);

var lonLat = new OpenLayers.LonLat(139.76, 35.68)
.transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913")
);
map.setCenter(lonLat, 15);
}
</script>
<title>OSMで地図を表示</title>
</head>
<body onload="init();">
<div id="canvas" style="width:500px; height:400px"></div>
</body>
</html>

test.css
#canvas .olControlAttribution {
font-size:13px;
bottom:3px;
}

こんな感じに表示されます。
osm20141202.png

2014-08-16(Sat)

【続】 Unity-Chan!を使ってみる

気を取り直して・・・

Unity-Chanのモデルについて何も考えずに「Assets」の中の「UnityChan」 - 「Prefabs」 の中の 「unitychan」をドラッグして追加したが、同じ場所にfor Locomotionというフォルダが存在する。
UnityChan_12.jpg
一旦、UnityChanを削除して再度for Locomotionの下のモデルをロードする。

「Assets」の中の「UnityChan」 - 「Prefabs」 - 「for Locomotion」 の中の 「unitychan_dynamic_locomotion」をドラッグして追加。
UnityChan_13.jpg
すでにInspectorのAnimator等の設定がされている模様。

そのまま、プレイボタンで動くようになった・・・

2014-08-15(Fri)

Unity-Chan!を使ってみる

Unityの公式キャラクター「Unity-Chan!」のデータを使ってみる。

「Unity-Chan!」の公式サイトからデータをダウンロード
unitypackage形式のユニティちゃん データ、バージョン1.2がダウンロードできた。

Unityには、MecanimというアニメーションシステムがあるらしいのでAsset StoreからMecanim Locomotion Starter Kitをダウンロードする。
※ Webブラウザで上記ページにアクセスし、「Unityで開く」ボタンを押すと、ログイン画面になるので、Unityで登録したメールアドレスとパスワードをセットしてもう一度「Unityで開く」ボタンを押すと「少々お待ちください」となるがいつまでたっても終了しない・・・
Unityからメニューの「Windows」-「Asset Store」を選択してMecanim Locomotion Starter Kitを検索してDownloadボタンを押す。しばらくすると以下のようなウインドウが開くので
Mecanim Locomotion Starter Kit_1jpg
「Import」ボタンを押す。
※ 終了したのかわからない・・・

上記ウインドウを閉じて、新しいプロジェクトを作成する。
「File」メニューから「New Project...」を選択すると、「Import the following packeges」の下のほうに「Mecanim Locomotion Starter Kit.unitypackage」というものができているはず。
UnityChan_1.jpg
プロジェクトフォルダの位置を入力し、それを選択して「Create」ボタン

少し待つと、以下のようなプロジェクトが開く。
UnityChan_2.jpg

Unityの「Assets」メニューから「Import Package」 - 「Custom Package...」を選択し、ダウンロードしたUnityChanパッケージファイルを選択しインポートする。
しばらくすると以下のようなウインドウが開くので「Import」ボタン。
UnityChan_3.jpg
作成されたプロジェクトフォルダ内のAssetsフォルダの下にUnityChanフォルダが作成されて展開される模様。

「床」を作る。
「Hierarchy」タブの下の「Create」から「Plane」を選択する。
UnityChan_4.jpg
※「GameObject」メニューの「Create Other」からでも追加出来る。

「Game」タブの左の「Scene」タブをクリックするとそれらしいビューになる。
UnityChan_5.jpg
※Planeを選択したり移動したり出来る模様。

「Project」タブの「Assers」の中の追加した「UnityChan」 - 「Prefabs」 の中の 「unitychan」をドラッグして追加する。
UnityChan_6.jpg

UnityChanのパッケージには専用のライティングオブジェクトがあるらしい。
UnityChan_7.jpg
「Project」タブの「Assers」の中の追加した「UnityChan」 - 「Prefabs」 の中の 「Directional light for UnityChan」をドラッグして追加する。

カメラとライトの向き等を調整して再生ボタンを押すとなんかそれらしいポージングをしたビューが出てくる。
UnityChan_8.jpg
Chang Motionでポーズを変えられる。

床のテクスチャを用意する。
Asset StoreでGround Textures Packをダウンロードする。

Ground Textures Pack は Planeにドラッグすると適用できるようだ。
UnityChan_9.jpg
細かい設定は今は考えない。

空のテクスチャを用意する。
「Assets」メニューの「Import Package」から「Skyboxes」を選択してImportする。
HierarchyのCameraを選択し、InspextorのAdd ComponentをクリックしRenderingからSkyboxを選択するし、追加されたSkyboxからCustom Skyboxで張りたいテクスチャを選ぶ。
UnityChan_10.jpg
Asset StoreでSky5X One等のテクスチャをダウンロードすると選択できるっぽい。

で、肝心のMecanimでUnityChanを動かす方法ですが・・・・。
Hierarchyのunitychanを選択し、InspectorのAnimatorのControllerをLocomotionに設定する。
UnityChan_11.jpg

また、キャラクター操作用のスクリプト「Add Component」の「Scripts」から「Locomotion Player」を選択する。
矢印キーでUnity-Chanを動かせるようになるはず・・・・だが動かん・・・

とりあえずここまで






2014-08-14(Thu)

Unityを使ってみる

Unityとかでゲーム作るの楽しそうなのでちょっといじってみた。

まずはUnityのインストール。Unityのサイトからダウンロードしてインストールする。
私はUnitySetup-4.5.3.exeをダウンロードすることができた。

最初に起動するとActivate your Unity licenseというライセンスの画面が出てくる。
UnityInstall1.jpg
Free版を使用するので、Activate the free version of Unityを選択。

Log into your Unity Account の画面になる。
UnityInstall2.jpg
アカウントを持っていないので新しくメールアドレスとパスワードを入力してCreate Account ボタンを押す。

Create a Unity Account 画面になるので
UnityInstall3.jpg
名前とメールアドレス、パスワード・・・ってさっきの画面でのパスワード等は必要なかったみたいですね・・・
を入力する。
パスワードは8文字以上、小文字大文字の混在、数字の混在と制限が多いので注意。

Log into your Unity Accountの画面に戻るが
UnityInstall4.jpg
登録したメールアドレスにメールが届いているはずなのでそれを確認する。

届いたメールの
UnityInstall5.jpg
「Confirm email」をクリックする。

Log into your Unity Accountの画面でパスワードを入力してログインする。
Answer a few questions の画面になるが
UnityInstall6.jpg
適当に答えてOKボタン。

完了したようなので
UnityInstall7.jpg
Start using Unityを選択して開始する。

Project Wizardのダイアログが開くので
UnityStart1.jpg
ここではデモプロジェクト(Angry Bots)を開くことにする。
Open Other...をクリックしてC:\Users\Public\Documents\Unity Projects\4-0_AngryBots フォルダを選択する。
※ Unityではプロジェクトのファイルというのは存在しない模様。Asset, Library, ProjectSettingsフォルダを含むプロジェクトフォルダを選択する。

プロジェクトがロードされると以下のような大きなウインドウが開く。
UnityStart4.jpg
Welcome To Unityを閉じて、中央上部の三角の再生ボタンを押すとゲームをすることができる。

あまり期待していなかったけど、こいつはすごい・・・

2013-08-27(Tue)

いまさらARToolKit

仕事がつまんねーので・・・今更ARtoolKitとか使ってみる。

more...

2011-10-21(Fri)

XPERIA ray (SO-03C) を購入したのでAndroid開発環境を新しく構築

XPERIA ray (SO-03C) を購入した。
Android 2.3なので、Android開発環境を新しくしてみる。

以下のページを参照してインストールする。
http://developer.android.com/sdk/installing.html

インストール手順によると、やはりJDKが必要なのでインストールする。
リンクから「Java SE 7u1」をダウンロード。
jdk-7u1-windows-i586.exeがダウンロードできた。

Eclipse が必要らしいのでダウンロードする。
"Eclipse Classic"バージョンがRecommendedらしいので“Eclipse Classic 3.7.1”をダウンロードした。
ここでは “eclipse-SDK-3.7.1-win32.zip” がダウンロードできた。
しかし・・・Java or RCPバージョンもRecommendedってなってるな・・・

Eclipseを適当なフォルダに解凍して、起動できる状態にする。
ここでは、C:\eclipse とした。

以下のページから新しいSDKをダウンロードしてインストールする。
http://developer.android.com/sdk/index.html
おれは、Windowsなので”android-sdk_r14-windows.zip” をダウンロードした。
インストーラのタイプがRecommendedだったが・・・まぁそこはそれ・・・

解凍すると、「android-sdk-windows」 というフォルダが出来るので、適当な場所に解凍する。
ここでは、C:\android-sdk-windows とした。

以下のページを参照して、Android Development Tools (ADT) plugin をインストールする。
http://developer.android.com/sdk/eclipse-adt.html#installing

Eclipseで [Help] - [Install New Software...] を選択。
[Add] を押して、プラグインの名称とURLを設定し、インストールを開始する。
ここでは、[Name] を 「ADT Plugin」、[Location] を 「https://dl-ssl.google.com/android/eclipse/」にして[OK]ボタン。

「Check the items that you wish to install」で、Developer Toolsをチェックして[Next >]ボタン。
「Install Details」で[Next >]ボタン。
「Review Licenses」で「I accespt terms of the license agreements」を選択して[Finish]ボタン

途中で「Security Warning」というダイアログが出た。
「Warning: You are installing software that contains unsigned content. The authenticity or validity of this software cannot be established. Do you want to continue with the installation?」

とは言っても・・・しょうがない「OK」ボタンを押さないと先に進まんし・・・でインストールが完了するとEclipseの再起動を促される。

再起動すると以下のダイアログが出た。
20111021_1.png

最新のSDKで良いのでそのまま「Next >」ボタン
20111021_2.png

とりあえず・・・「No」で・・・「Finish」ボタン
20111021_2.png

「Install」ボタン
20111021_4.png

「Yes」ボタン

ADT Plugin のコンフィグレーション

Eclipseで [Window] - [Preferences] を選択。
ツリーの[Android]を選択。
[SDK Location] に 最初に解凍したSDKのパス(ここではC:\android-sdk-windows)を設定する。


2011-08-02(Tue)

Intel Media SDK 2.0 インストールしてみた

Intel Media SDK 2.0 インストールしてみた。
以下のページよりダウンロードできる。
http://software.intel.com/en-us/articles/media/

Microsoft Visual Studio 2010 Professional で以下に格納されているサンプルをビルド。
プロジェクトの変換を要求されるが、特に問題なくビルドできた。

つづきはまた・・・・



2010-09-15(Wed)

USBデバッグで実機(HT-03A)動作

テストならエミュレータも十分だけど、実機(HT-03A)での動作をしてみる。
最終的には実機で動作しないとおもろくないし・・・・

more...

2010-09-15(Wed)

Androidエミュレータ(AVD)のskinをHT-03Aにする。

Android Wikiで、「エミュレータのSkinをHT-03Aにする」というファイルと方法が書かれていたので変更してみた。

more...

2010-09-14(Tue)

AndroidでHello World

とりあえず・・・・構築したAndroid開発環境でHello Worldでも作ってみる。

more...

2010-09-14(Tue)

再びAndroid開発環境構築

以前、Android(HT-03A)でスクリーンキャプチャで、Android(HT-03A)のスクリーンキャプチャを撮る目的でSDKのインストールを行ったが・・・・

改めてプログラムを開発や、JAVAプログラミングを学習してみようと思う。
しかし、以前環境を構築してから時間が経って、SDKのバージョンもあがっているようなので、再度環境を構築するところから入る。

more...

2010-05-27(Thu)

Ubuntu 上でQt Creatorで作成したアプリはなんかDLLとか必要なのか?

新しくインストールしたUbuntu10.04でQt CreatorをインストールしたUbuntu10.04で作成した実行ファイルを実行してみる。
以下のエラーが出て実行できない。

$ ./test
./test: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory

Qtのライブラリが必要っぽいな。

$ ./test
./test: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory
$ apt-cache search libQtGui
libqtgui4 - Qt 4 GUI module
$ sudo apt-get install libqtgui4
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
libaudio2 libmng1 libqtcore4
提案パッケージ:
nas qt4-qtconfig
以下のパッケージが新たにインストールされます:
libaudio2 libmng1 libqtcore4 libqtgui4
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 101 個。
6,023kB のアーカイブを取得する必要があります。
この操作後に追加で 19.7MB のディスク容量が消費されます。
続行しますか [Y/n]?

で実行できることはできた。
2010-05-26(Wed)

UbuntuでのQt Creatorのアンインストール方法

Linuxでは、Qt Creatorをインストールしたフォルダの"qtsdk..../bin/uninstall"を実行したらアンインストールできます。
$ ./uninstall
2010-05-26(Wed)

WindowsのQt Creatorで作成したプロジェクトをVMwareのUbuntu10.04のQt Creatorで開いてビルド

WindowsのQt Creatorで作成したプロジェクトを開いてビルドしたら以下のエラーが発生

プロジェクト test をビルドします...
/home/hogehoge/qtsdk-2010.02/qt/bin/qmake /home/hogehoge/qt_projects/ToolBarTest/test/test.pro -spec linux-g++ -r を起動中です。
コード:0 で終了しました。
/usr/bin/make -w を起動中です。
make: ディレクトリ `/home/hogehoge/qt_projects/ToolBarTest/test' に入ります
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.02/qt/mkspecs/linux-g++ -I. -I../../../qtsdk-2010.02/qt/include/QtCore -I../../../qtsdk-2010.02/qt/include/QtGui -I../../../qtsdk-2010.02/qt/include -I. -I. -o main.o main.cpp
make: g++: コマンドが見つかりませんでした
make: ディレクトリ `/home/hogehoge/qt_projects/ToolBarTest/test' から出ます
make: *** [main.o] エラー 127
コード:2 で終了しました。
プロジェクト test をビルド中にエラーが発生しました
ビルドステップ 'Make' を実行中

有効な Qt バージョンが設定されていません。ツール/オプションで1つ設定してください。
プロジェクト test をビルド中にエラーが発生しました
ビルドステップ'QMake'を実行中
ビルドを中止しました。


g++をインストールする。
$ g++
プログラム 'g++' は以下のパッケージで見つかりました:
* g++
* pentium-builder
次の操作を試してください: sudo apt-get install <選択したパッケージ>
hogehoge@ubuntu:~$ sudo apt-get install g++
[sudo] password for hogehoge:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
linux-headers-2.6.32-21 linux-headers-2.6.32-21-generic
これらを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
g++-4.4 libstdc++6-4.4-dev
提案パッケージ:
g++-multilib g++-4.4-multilib gcc-4.4-doc libstdc++6-4.4-dbg
libstdc++6-4.4-doc
以下のパッケージが新たにインストールされます:
g++ g++-4.4 libstdc++6-4.4-dev
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
6,443kB のアーカイブを取得する必要があります。
この操作後に追加で 21.3MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://us.archive.ubuntu.com/ubuntu/ lucid/main libstdc++6-4.4-dev 4.4.3-4ubuntu5 [1,491kB]
取得:2 http://us.archive.ubuntu.com/ubuntu/ lucid/main g++-4.4 4.4.3-4ubuntu5 [4,950kB]
取得:3 http://us.archive.ubuntu.com/ubuntu/ lucid/main g++ 4:4.4.3-1ubuntu1 [1,442B]
6,443kB を 3min 2s で取得しました (35.2kB/s)
未選択パッケージ libstdc++6-4.4-dev を選択しています。
(データベースを読み込んでいます ... 現在 147290 個のファイルとディレクトリがインストールされています。)
(.../libstdc++6-4.4-dev_4.4.3-4ubuntu5_i386.deb から) libstdc++6-4.4-dev を展開しています...
未選択パッケージ g++-4.4 を選択しています。
(.../g++-4.4_4.4.3-4ubuntu5_i386.deb から) g++-4.4 を展開しています...
未選択パッケージ g++ を選択しています。
(.../g++_4%3a4.4.3-1ubuntu1_i386.deb から) g++ を展開しています...
man-db のトリガを処理しています ...
libstdc++6-4.4-dev (4.4.3-4ubuntu5) を設定しています ...
g++-4.4 (4.4.3-4ubuntu5) を設定しています ...
g++ (4:4.4.3-1ubuntu1) を設定しています ...
update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode.

でリビルド。
プロジェクト test をビルドします...
/usr/bin/make clean -w を起動中です。
make: ディレクトリ `/home/hogehoge/qt_projects/ToolBarTest/test' に入ります
rm -f moc_test.cpp
rm -f qrc_toolbar.cpp
rm -f ui_test.h
rm -f main.o test.o moc_test.o qrc_toolbar.o
rm -f *~ core *.core
make: ディレクトリ `/home/hogehoge/qt_projects/ToolBarTest/test' から出ます
コード:0 で終了しました。
構成が変更されていないので QMake ステップはスキップします。
/usr/bin/make -w を起動中です。
make: ディレクトリ `/home/hogehoge/qt_projects/ToolBarTest/test' に入ります
/home/hogehoge/qtsdk-2010.02/qt/bin/uic test.ui -o ui_test.h
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.02/qt/mkspecs/linux-g++ -I. -I../../../qtsdk-2010.02/qt/include/QtCore -I../../../qtsdk-2010.02/qt/include/QtGui -I../../../qtsdk-2010.02/qt/include -I. -I. -o main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.02/qt/mkspecs/linux-g++ -I. -I../../../qtsdk-2010.02/qt/include/QtCore -I../../../qtsdk-2010.02/qt/include/QtGui -I../../../qtsdk-2010.02/qt/include -I. -I. -o test.o test.cpp
/home/hogehoge/qtsdk-2010.02/qt/bin/moc -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.02/qt/mkspecs/linux-g++ -I. -I../../../qtsdk-2010.02/qt/include/QtCore -I../../../qtsdk-2010.02/qt/include/QtGui -I../../../qtsdk-2010.02/qt/include -I. -I. test.h -o moc_test.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.02/qt/mkspecs/linux-g++ -I. -I../../../qtsdk-2010.02/qt/include/QtCore -I../../../qtsdk-2010.02/qt/include/QtGui -I../../../qtsdk-2010.02/qt/include -I. -I. -o moc_test.o moc_test.cpp
/home/hogehoge/qtsdk-2010.02/qt/bin/rcc -name toolbar toolbar.qrc -o qrc_toolbar.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.02/qt/mkspecs/linux-g++ -I. -I../../../qtsdk-2010.02/qt/include/QtCore -I../../../qtsdk-2010.02/qt/include/QtGui -I../../../qtsdk-2010.02/qt/include -I. -I. -o qrc_toolbar.o qrc_toolbar.cpp
g++ -Wl,-O1 -Wl,-rpath,/home/hogehoge/qtsdk-2010.02/qt/lib -o test main.o test.o moc_test.o qrc_toolbar.o -L/home/hogehoge/qtsdk-2010.02/qt/lib -lQtGui -L/home/hogehoge/qtsdk-2010.02/qt/lib -L/usr/X11R6/lib -lQtCore -lpthread
make: ディレクトリ `/home/hogehoge/qt_projects/ToolBarTest/test' から出ます
コード:0 で終了しました。

できた!
windowsで作成したプロジェクトがそのまま使える見たいで驚いた。
(よく見たらリリースビルドだった・・・・)

しかし、Windows版のようにDebugディレクトリとかReleseディレクトリとかが出来るわけじゃないみたい。
プロジェクトファイルやらソースファイルやらのあるディレクトリに出力されるみたい。

2010-05-26(Wed)

WindowsでQt Creatorのリリースビルド

「ビルド(B)」メニューの「ビルド構成の設定」で「Release」を選んで、ビルドする。

プロジェクトのreleaseフォルダ以下にexeファイルが作成されるが、クリックしても以下のエラーで実行できない。
mingwm10.dllってDLLだけど、

http://null.michikusa.jp/misc/qt.html
http://qt-labs.jp/2010/03/24/helloworld-from-qt-creator.html

寺戸健太 2010/05/05 10:31 
はじめまして。Qtは初心者ですが、わかりやすい解説で助かっています。
さて、本題ですが・・・
興味本位でエクスプローラでサブディレクトリdebugを開き、HelloWorld.exeを直接実行してみましたが、「mingwm10.dllが見つからなかったため、このアプリケーションを開始できませんでした」というメッセージが表示され、実行できませんでした。
環境変数の設定などが別途必要なのでしょうか?
ちなみにOSはWindows Vista Home Premium SP2 です。

鈴木 佑 2010/05/06 13:43
@寺戸さん

環境変数の設定が必要です。

Qt Creator で Hello World プロジェクトを開いている状態で、画面の左にあるサイドバーの中の”プロジェクト(Ctrl + 4)”をクリックするとこのプロジェクトの設定画面が表示されます。「実行時の環境変数」の詳細を開くと表示される環境変数の一覧が Qt Creator がアプリケーションを実行する際のものになります。

具体的には、Qt SDK を使用して作成した Qt のアプリケーションを Windows で動作させるためには環境変数 PATH に Qt のライブラリのパス([qtsdk のインストール先]\qt\bin)と mingw のライブラリのパス([qtsdk のインストール先]\mingw\bin) が必要です。こちらを設定して試してもらえますか?

寺戸健太 2010/05/08 01:48
ご教授いただいたとおり、システムの環境変数 PATH の設定で、無事起動できました。
また、次のようなバッチコマンドをdebugフォルダに作成し、コレから起動してもOKでした。
-HelloWorld.cmd-
setlocal
set qtdir=C:\Qt\2010.02.1
set path=%path%;%qtdir%\qt\bin;%qtdir%\mingw\bin
HelloWorld.exe
endlocal
---------
そのようなわけで「とりあえず解決!」ということでOKです。
ただ、この方法では「Qtのバージョンアップの度に環境変数の変更が必要?」ですね。
当面は「Qt Creatorから起動するのが基本」と考えておきます。

http://qtprogramming.g.hatena.ne.jp/garyo/20100308/1268012413


■ Windows版Qt Creator(mingw版)で作ったファイルを配布するために必要なDLL

C:\Qt\2010.02.1\qt\bin の中の
・libgcc_s_dw2-1.dll
・mingwm10.dll
・QtCored4.dll
・QtGuid4.dll

をexeと同じフォルダに入れると起動した。
エラーが出る毎にDLLを探して入れてみたが、自動で探してくれる方法は無いかな?

http://d.hatena.ne.jp/ryousanngata/20090808

このままリリースでビルドしても、Qt4Core.dll, Qt4Gui.dllなどのDLLが無いと実行できない。
配布時などに入れるのもめんどくさいので、それらはスタティックリンクにできると便利だ。

それにはQtの再コンパイルが必要。
Qtにはcounfigure.exeがあり、MinGWもついてくるので、容易に行える。
既に導入したMinGWを使ったところg++周りの問題でうまくいかなかったので、付属のMinGWにpathをsetしなおし、実行した。

コマンドプロンプトを開く。
 cd /d Qtフォルダ\qt
set path=Qtフォルダ\mingw\bin
configure -static -release
mingw32-make


configure -static -release

を実行すると以下の入力を求められる。

Which edition of Qt do you want to use ?

Type 'c' if you want to use the Commercial Edition.

Type 'o' if you want to use the Open Source Edition.

'o'をタイプする。

You are licensed to use this software under the terms of

the GNU General Public License (GPL) version 3

or the GNU Lesser General Public License (LGPL) version 2.1.

Type '3' to view the GNU General Public License version 3 (GPLv3).

Type 'L' to view the Lesser GNU General Public License version 2.1 (LGPLv2.1).

Type 'y' to accept this license offer.

Type 'n' to decline this license offer.

'L'をタイプすると、ライセンス規約が表示される。
'y'とタイプすると、同意したことになり、コンパイルが始まるので眺める。結構長い。

以下が表示されるとconfigureが終了。
Qt is now configured for building. Just run mingw32-make.

To reconfigure, run mingw32-make confclean and configure.


mingw32-make

でmakeが始まる。とても長い。(4時間前後)

終われば、staticな実行ファイルが生成できるようになる。
ただ、実行ファイルサイズが極端に増えるので注意。
(staticにしなくても、同じぐらいのサイズ。)

また、mingwm10.dll の依存関係を切るには、Makefile.releaseのLFLAGSから -mthreads を削除すればいい。

■ とりあえず、mingwm10.dll の依存関係を切るには、プロジェクトの中のMakefile.releaseってファイルの中のLFLAGSから-mthreads を削除ってことなので削除してみたが・・・・・削除してもビルド時に誰かが上書きしているみたいでできないorz

結局実行ファイルと一緒にdllを添付しないとならないっぽい。
今回のプロジェクトでは、以下のDLLが必要だった。

・libgcc_s_dw2-1.dll
・mingwm10.dll
・QtCore4.dll
・QtGui4.dll

ライセンスの問題もあるし、OSSはなんかいろいろめんどくさいなぁ・・・・

だいたいGPLライセンスってソースコードの公開を強制するところが嫌なんだよね。なんか上から目線な感じがして・・・
使えるツールとソースを無料で使わせてもらうんだから、使った人も公開してほしいって考えは解かる的なことを言っている人がいるけど、要するに、
「俺様が公開してんだからお前も当然公開しろ(命令)」ってのがGPLってライセンスってことだよね?

なんかオープンなのに窮屈だ・・・・・よくわかってないからかも知れないけど・・・・

2010-05-25(Tue)

Qt CreatorをVMware Ubuntu10.04にインストール

UbuntuのFirefoxでダウンロード
http://qt.nokia.com/downloads-jp

「LGPL / 無償ダウンロード」の「Qt SDK for Linux/X11 32-bitのダウンロード** (367 Mb)」をクリックしてダウンロード
※「Qt Creator IDE」の「Linux/X11 32-bit版Qt Creator 1.3.1 バイナリのダウンロード」では無いことに注意。
俺がダウンロードしたときは「qt-sdk-linux-x86-opensource-2010.02.bin」がダウンロードできた。

Qt Labs JapanQt SDK のインストール ~ Linux編を参照してインストール。
$ chmod +x qt-sdk-linux-x86-opensource-2010.02.bin
$ ./qt-sdk-linux-x86-opensource-2010.02.bin

でインストールが始まる。

インストーラーから直接 Qt Creator を起動すると英語版になる。
デスクトップに作成された Qt Creator のショートカットから起動しなおすと日本語になる。

Ubuntu10.04では、デスクトップのショートカットの表示がおかしい。
ダブルクリックして実行しようとすると、「信用できないアプリケーションのランチャ」という警告が出る。

実行属性が付いていないためのようなので、以下のコマンドで実行属性を付ける
$ chmod +x QtCreator.desktop

もしくは、「ファイルブラウザ」からショートカットを右クリックしてプルダウンメニューから「プロパティ」を選択し、「アクセス権」タブの「プログラムとして実行できる」を選択状態にする。

※インストールときにsudoでrootで実行すると所有者がrootになってしまうようだ。
2010-05-13(Thu)

HDDの容量を取得する

WMIでHDDの容量とかを取得する。
WMI Code Creator v1.0 でvbsのコードが簡単に出力できるので、HDDの容量を取得してみた。

以下 WMI Code Creator が出力したコード
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
'Set colItems = objWMIService.ExecQuery( _
' "SELECT * FROM Win32_LogicalDisk",,48)
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_LogicalDisk",,48)
For Each objItem in colItems
Wscript.Echo "-----------------------------------"
Wscript.Echo "Win32_LogicalDisk instance"
Wscript.Echo "-----------------------------------"
Wscript.Echo "DeviceID: " & objItem.DeviceID
Wscript.Echo "DriveType: " & objItem.DriveType
Wscript.Echo "FreeSpace: " & objItem.FreeSpace
Wscript.Echo "Size: " & objItem.Size
Next

DeviceIDでHDDディスクは3になるっぽいから以下のように修正
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3",,48)

JScriptに変更
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!//./root/CIMV2");
var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = 3");
var emu = new Enumerator(colItems);
for(; !emu.atEnd(); emu.moveNext()) {
WScript.Echo("-----------------------------------\n");
WScript.Echo("Win32_LogicalDisk instance\n");
WScript.Echo("-----------------------------------\n");
WScript.Echo("DeviceID: " + emu.item().DeviceID);
WScript.Echo("DriveType: " + emu.item().DriveType);
WScript.Echo("FreeSpace: " + emu.item().FreeSpace);
WScript.Echo("Size: " + emu.item().Size);
}

これでHDDの残り容量が指定数を割り込んだらTweetするとかメールするとかのJScriptが出来るな・・・・・
2010-05-11(Tue)

HDDの温度情報

自作PCの内部温度が気になったのでハードウェアの情報を表示できるツールで表示してみたらHDDの温度までわかることが今更ながらわかった・・・・

S.M.A.R.TをWMIでWSHを使って取得できるらしい。
以下ページのVBSのコードをJScriptにしてみた。
http://tess.sblo.jp/article/12494888.html

以下参考にしたVBS
'[smart.vbs]
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\WMI")
Set colItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictData",,48)
For Each objItem in colItems
strMsg = strMsg & "-----------------------------------" & vbCRLF
strMsg = strMsg & "DeviceName: " & mid(objItem.InstanceName,1,22) & vbCRLF
For i = 2 To UBound(objItem.VendorSpecific) Step 12
If objItem.VendorSpecific(i) = 1 Then ' == Raw Read Error Rate
HDDHealth = objItem.VendorSpecific(i+3)
ElseIf objItem.VendorSpecific(i) = 194 Then ' == temprature
Temperature = objItem.VendorSpecific(i+5)
End If
Next
strMsg = strMsg & "HDD Health : " & HDDHealth & " %" & vbCRLF
strMsg = strMsg & "Temperature: " & Temperature & " ℃" & vbCRLF
Next
strMsg = strMsg & "-----------------------------------" & vbCRLF
msgBox strMsg, vbInformation, WScript.ScriptName

以下テキトウに変換したJScript
var strComputer = ".";
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!//./root/WMI");
var strMsg = "";
var HDDHealth = 0;
var Temperature = 0;

var colItems = objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_FailurePredictData");
var emu = new Enumerator(colItems);
for(; !emu.atEnd(); emu.moveNext()) {
strMsg = strMsg + "-----------------------------------\n";
strMsg = strMsg + "DeviceName: " + emu.item().InstanceName.slice(1,22) + "\n";
for(i = 2; i < emu.item().VendorSpecific.ubound(); i+=12) {
if(emu.item().VendorSpecific(i) == 1) {
HDDHealth = emu.item().VendorSpecific(i + 3);
} else if(emu.item().VendorSpecific(i) == 194) {
Temperature = emu.item().VendorSpecific(i + 5);
}
}
strMsg = strMsg + "HDD Health : " + HDDHealth + " %\n";
strMsg = strMsg + "Temperature: " + Temperature + " ℃\n";
}
strMsg = strMsg + "-----------------------------------\n";
WScript.Echo(strMsg);
2010-05-02(Sun)

JScriptでTwitterAPI

どっかのページを参考にしてJScriptを使ってTwiiterAPIでTweetするスクリプトを作ってみた。
タスクスケジューラと組み合わせてWindowsだけでbotとか作れそうじゃん!( ̄~ ̄;)

しかし、BASIC認証は6月末で使えなくなるってことらしいのでOAuth認証を試してみたいんだけどめんどくさそう・・・・orz
var username = "ぼげほげ";
var password = "ほげほげ";

var args = WScript.Arguments;
var text = encodeURIComponent(args.Item(0));

// MSXMLでHTTP通信を行う
var request = new ActiveXObject("Msxml2.XMLHTTP.3.0");
request.open("POST", "https://twitter.com/statuses/update.xml?status="+text, true, username, password);

// Responseのイベントハンドラ
request.onreadystatechange = function()
{
if(request.readyState == 4) {
// 通信完了
if(request.status>=400) {
// ステータスコードが400以上ならエラー
WScript.Echo("HTTP Error");
}
WScript.Quit();
}
}

// Requestを送信
request.send();

// Responseが来るまで待つ
while(true) {
WScript.Sleep(1000);
}


2010-04-27(Tue)

Qt Creator QMainWindowでツールバーを作ってみる

基底クラスをQMainWindowでアプリケーションを作成すると、フォームにメニューバーが追加されていてメニューの追加ができるようになっている。
20100427_1.jpg

最初に作成されるファイルは以下の5ファイルだけど
・main.cpp
・test.cpp
・test.h
・test.pro
・test.ui

ビルドすると以下のファイル/フォルダが追加される。
・\debug\
・\release\
・Makefile
・Makefile.Debug
・Makefile.Release
・ui_test.h

以下の記事を参考にして、ツールバーを追加してみる。
http://qtprogramming.s2.zmx.jp/Qt4Examples/ToolBar.html

more...

2010-04-26(Mon)

Qt CreatorでGUIアプリ

Windows上でQt Creatorを使ったGUIアプリを作ってみる。

more...

2010-04-24(Sat)

Qt(キュート)でプログラミング

なんかNokiaのQtってのはMicrosoftのMFCのようなクラスライブラリらしい。
Qt CreatorってIDEがあって、GNOMEとかのGUIでGUIプログラミングができるっぽい。
Windowsのプログラムも作れて、クロスプログラミングもできるらしい。

とりあえず、日本語の情報も公式に出ているみたいなので使ってみたい。
http://qt.nokia.com/title-jp
http://qt-labs.jp/

more...

2010-04-17(Sat)

とりあえず、Wello, World!

VMware上のUbuntuで、とりあえず、Wello, World!

デフォでgccとか入っているらしいので、
$ which gcc
/usr/bin/gcc

と出ればOK。

とりあえずGUIのテキストエディタ(gedit)でソースコードを作成
CUIのviとか使ってみたけど・・・・・だめだ、俺には向いてない。orz
せっかくGUIがあるんだからいいよね?w
#include 

int main(void)
{
printf("Hello, World!\n");
return 0;
}


コンパイル
$ gcc -o hello hello.c


実行
$ ./hello
Hello, World!


■ C++はg++ってコマンドを使用するらしい。

■ GUIのアプリはどういう風に開発すればいいのかな?!
GTK+ってライブラリでGUIのアプリが作れるらしい。
http://dolphin2005.blog.so-net.ne.jp/2008-02-12
http://www.iim.ics.tut.ac.jp/~sugaya/wiki/wiki/index.php?GTK%2FGNOME%A4%CB%A4%E8%A4%EBGUI%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0

2010-04-16(Fri)

JavaScriptでタイマー&画像のリロード

setInterval("monitor()", 1000);

でminitor()関数が1000msごとに呼び出されるようにタイマーがセットされる。
たとえば、タグのonLoad属性で指定したイベントハンドラで以下のように設定する。
<BODY onLoad="init();">

<SCRIPT type="text/ecmascript"><!--
var monitorTimerId = 0;
function init(){
monitorTimerId = setInterval("monitor()", 1000);
}

function monitor()
{
// 1000秒ごとに処理したい内容
}
//--></SCRIPT>

ここで画像のリロードで問題がある。
タイマーイベントハンドラで以下のように画像データの再ロードを行っても画像が更新されない。
※画像データはサーバサイドで上書き更新されている。
document.getElementById("hogehoge_img").src = "hogehoge.jpg";

最初ローカルのキャッシュが影響しているのかと思い、ブラウザの設定でキャッシュしないように設定すればよいのではないかと考えたが、ブラウザのキャッシュしない設定でも画像はキャッシュされる場合があるみたい。

キャッシュを使用しないように、ダミーのパラメータをつけて呼び出すとうまくいく。
たとえば、TimeStamp(現在時刻)をつけるとか・・・・
document.getElementById("hogehoge_img").src = "hogehoge.jpg" + "?" + (new Date()).getTime();

これであれば、ブラウザの設定に依存することも無いので良い感じ。

プロフィール

yaman

Author:yaman

カレンダー
07 | 2017/08 | 09
- - 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 - -
ブログ内検索
カテゴリー
タグリスト

バイク 買い物 アキバ 秋葉原 写真 ゲーム アフィリエイト パソコン バトルフィールド カメラ 漫画 チャレンジツーリング 株式投資 DTV  ダーツ ロト7 バトルフィールド2142 Linux 大戸屋 Ubuntu PT2 プログラミング 温泉 Git 飲み食い 書籍 アニメ SSTR Windows Ingress ラジオ会館 道の駅スタンプブック 機械工作 日本酒 Javascript VMware TortoiseGit バトルフィールド4 LightWave ホビー  バトルフィールド3 仕事 WHS 日曜大工 Windows7 電子工作 ビリヤード YSP CentOS GoogleMap Subversion PC ドネルケバブ PSP 晩飯 チャンダン 歯医者 Windows8 動画エンコード 料理 Windows10 THETA ロト6 酒造 コミケ ラーメン Chrome CD バトルフィールド2 宝くじ Android OSM バトルフィールド・バッドカンパニー2 

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
FC2カウンター
現在の閲覧者数
現在の閲覧者数:
Twitter
リンク
RSSフィード
コミックダッシュ