ページ

2014年6月17日火曜日

TitaniumでJsonファイルを取得する

Titaniumシリーズ Webサーバに置いてあるJsonを取得するサンプルです。
今回は自分のlocalhost内に置きます。


とりあえずjsonファイルを用意.

data.json
[{"id":7,"en_name":"fukushima","ja_name":"\u798f\u5cf6\u770c"},
{"id":8,"en_name":"ibaraki","ja_name":"\u8328\u57ce\u770c"},
{"id":9,"en_name":"tochigi","ja_name":"\u6803\u6728\u770c"},
{"id":10,"en_name":"gunma","ja_name":"\u7fa4\u99ac\u770c"},
{"id":11,"en_name":"saitama","ja_name":"\u57fc\u7389\u770c"},
{"id":12,"en_name":"chiba","ja_name":"\u5343\u8449\u770c"},
{"id":13,"en_name":"tokyo","ja_name":"\u6771\u4eac\u90fd"},
{"id":14,"en_name":"kanagawa","ja_name":"\u795e\u5948\u5ddd\u770c"}]

続いて実際の読み取りプログラム
var url = "http://localhost/data.json";

var xhr = Ti.Network.createHTTPClient({
    onload: function() {
  var json = JSON.parse(this.responseText);
  for (var i in json) {
   Ti.API.info(json[i]);
  }
 }
});
xhr.open("GET", url);
xhr.send();

これでできます。
意外とあっけないですが1点注意点として遅延読み取りなので
ほかのプログラムがxhr.send()の後に走ります
こちらが覚えておかないと大変です。

次いでにPOSTのサンプル
var url = "http://localhost/data.json"; 
var postData = {
 title: 'data1'
};
var xhr = Ti.Network.createHTTPClient({
    onload: function() {
  var json = JSON.parse(this.responseText);
  for (var i in json) {
   Ti.API.info(json[i]);
  }
 }
});
xhr.open('POST','http://www.myblog.com/post.php');
xhr.send(postData);

基礎的な点だが重要
JSだからJSON.parseを利用できるのが非常に便利です。

2014年6月15日日曜日

Titanium mobileで日付のフォーマット

Titaniumの日付フォーマットを調べてみました。
momentと呼ばれるライブラリを利用しているのでよく利用する。
今月末、来月末などの標準的な内容をコンソールログに出力してみました。

// ライブラリを呼び出し.
var moment = require("alloy/moment");

// 標準出力.
Ti.API.info(moment());

// 今の日付をformat化して.
Ti.API.info(moment().format("YYYY/MM/DD HH:mm:ss"));

// 1ヶ月後.
Ti.API.info(moment().add('months', 1).format("YYYY/MM/DD HH:mm:ss"));

// 今月の月初.
Ti.API.info(moment().format("YYYY/MM/01 00:00:00"));

// 今月末.
Ti.API.info(moment().endOf('month').format("YYYY/MM/DD HH:mm:ss"));

// 来月末.
Ti.API.info(moment().add('months', 1).endOf('month').format("YYYY/MM/DD HH:mm:ss"));

// 前月末.
Ti.API.info(moment().add('months', -1).endOf('month').format("YYYY/MM/DD HH:mm:ss"));

こちらの内容で出力結果が以下になります。
[INFO] :   2014/06/15 15:58:19
[INFO] :   2014/07/15 15:58:19
[INFO] :   2014/06/01 00:00:00
[INFO] :   2014/06/30 23:59:59
[INFO] :   2014/07/31 23:59:59
[INFO] :   2014/05/31 23:59:59

日付を利用したかったのでまとめましたが思っている以上に少ない・・・

2014年6月11日水曜日

Titanium mobile Alloy ボタンを配置する

少しずつやっているので順次メモを記載

JS部分はとりあえず置いておいてGUI面を現在模索中第1段として
ボタンの配置をいろいろしてみました。



サンプルで作り上げたのがこちら画面全体配置、最小サイズ、任意のサイズ1列での分割です。

index.xml
<Alloy>
 <Window class="container">
   <Button id="button1" backgroundColor="red" onClick="doClick" title="フルサイズ" top="10" />
          <Button id="button2" backgroundColor="green" onClick="doClick" title="最小サイズ" top="100"  />
          <Button id="button3" backgroundColor="blue" onClick="doClick" title="サイズ固定" top="150" />
          
          <ButtonBar id="bb1" backgroundColor="#369" top="300" >
           <Labels>
                <Label>One</Label>
                <Label>Two</Label>
                <Label>Three</Label>
            </Labels>
          </ButtonBar>
          <ButtonBar id="bb2" backgroundColor="#369" top="360" >
           <Labels>
                <Label>Single</Label>
                <Label>Duo</Label>
                <Label>Triple</Label>
                <Label>Quad</Label>
            </Labels>
          </ButtonBar>
 </Window>
</Alloy>

index.tss
".container": {
 backgroundColor : "white",
},

"#button1": {
 backgroundColor : "green",
 width : Ti.UI.FILL,
 height : "50dp"
 
},

"#button2": {
 backgroundColor : "blue",
 width: "150dp",
 width : Ti.UI.SIZE,
 height : "50dp"
},

"#button3": {
 backgroundColor : "red",
 width : "150dp",
 height : "50dp"
 
},

"#bb1": {
 backgroundColor : "#369",
 width : Ti.UI.FILL,
 height : "50dp"
 
},

"#bb2": {
 backgroundColor : "#369",
 width : Ti.UI.FILL,
 height : "20dp"
 
}

index.xmlに配置情報、index.tssにデザイン情報を記載、雑なボタンですがAlloyを利用したボタンの初歩かと思います。
Ti.UI.FILLはフルサイズとTi.UI.SIZEは最小サイズ、ButtonBarは任意の件数のボタンを配置できます。
この内容はAndroid iOS両方とも使えるのでUIの共通化が便利です。
次もレイアウト中心になるかと

2014年6月9日月曜日

Sim Freeスマホの検討

現在Sim Freeのスマホを利用してるのですが(ちなみにOCN Simです。
今現在使っているのはXperia SPです。2万台なのでお手頃
icon
icon


いつもXperiaシリーズを買っているので今回もそうしようと思っているのですがスペックが決めきれないので
Zシリーズが主な比較対象 比較は画面やメモリーなど基本的な点価格などです。

調べてみるとよく似ているようで微妙に異なる
品名Xperia Z2Xperia Z1Xperia Z1 CompactXperia Z
画像icon
icon
icon
icon
icon
icon
icon
icon
システムAndroid 4.4Android 4.2Android 4.3Android 4.1
CPU2.3 GHz Quad Core2.2 GHz Quad Core2.2 GHz Quad Core1.5 GHz Quad Core
容量16G16G16 GB16G
RAM3 GB2 GB2 GB2 GB
ディスプレイ5.2インチ5.0インチ4.3インチ5.0インチ
解像度1920 x 10801920 x 10801280 x 7201920x1080
カメラ20.7 Mpixels20.7 Mpixels20.7 Mpixels13 Mpixels
ネットワーク4G LTE 3G GSMLTE Bands 3G GSM4G LTE 3G GSMLTE HSPA+ GSM
ワイヤレスBluetooth: 4.0, NFCBluetooth: 4.0, NFCBluetooth: 4.0, NFCBluetooth: 4.0, NFC
バッテリー3000 mAh3000 mAh (Built-in)2300 mAh2400 mAh
重量158 g169 g137 g146 g
サイズ146.8 x 73.3 x 8.2144.4 x 73.9 x 8.5127 x 64.9 x 9.5139 x 71 x 7.9

このような感じになります。
価格的には、Z2>Z1>Z1 Compact>Zと妥当な通りでZ1かZ1 Compactで悩み中・・・

2014年6月7日土曜日

Titanium mobile始める

そろそろモバイルアプリを行うかと思い、Titanium mobileを勉強中お決まりのhello worldをやってみます。
ちなみにTitaniumのバージョンは2014/06/07現在の最新3.2.3です。

初回はただプロジェクトを作るだけなのでプロジェクトの作成手順が中心

Step1.
Titanium mobileをDLします。こちら
からダウンロードできますが、メアドなどの登録が必要です。

ダウンロードしてからインストールは趣旨ではなので割愛(Eclipseベースのためなじみがあれば気にならないです)
Titanium™ インストールガイド に詳しくあるのでご覧ください。


Titaniumを起動し「Mobile App Project」を作成し以下のAlloyを選択

保存ディレクトリなどを指定

これでHello worldが出来上がるデバッグモードで起動してみたがラベルがわかりにくかったので少し編集がてら下調べ

自動作成されたプロジェクトは上記画像のようになっているのでこれを確認
ルートディレクトリにある以下のディレクトリはおそらくそれぞれの役割で
app:ソースコードを記載する
plugins:ライブラリの管理
みたいに思えます。

appディレクトリを中心に見ると
assets:画像とか?
controllers:メイン処理
models:まだわからない
styles:css?のようなファイルがある デザインに利用すると思われます。
views:表示用のデータHTML見たいなもの
alloy.jsこれが共通処理

このような感じかと体感もう少しわかったらいろいろあげれるようにしてみたいな

2014年6月1日日曜日

PHPのよく使うarray関数をまとめる

最近PHPを使うのですがよくのでarray系の関数をまとめました。(今更間丸出しw


配列の切り出し.
$arr = array(1, 2, 3, 4, 5, 6);
$arr2 = array_slice($arr, 0, 3);
var_dump($arr2);
/** 結果 */
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}


配列のマージ.
$arr1 = array(1, 2, 3, 7, 9);
$arr2 = array(4, 8);
$arr3 = array(5);
$arr4 = array_marge($arr1, $arr2, $arr3);
var_dump($arr4);
/** 結果 */
array(8) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(7)
  [4]=>
  int(9)
  [5]=>
  int(4)
  [6]=>
  int(8)
  [7]=>
  int(5)
}


配列からキーの一覧を取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$keys = array_keys($arr);
var_dump($keys);
/** 結果 */
array(3) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
}


配列から値のみを取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$vals = array_values($arr);
var_dump($vals);
/** 結果 */
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}


特定文字の配列を自動生成する
$a = array_fill(1, 5, '?');
var_dump($a);
/** 結果 */
array(5) {
  [1]=>
  string(1) "?"
  [2]=>
  string(1) "?"
  [3]=>
  string(1) "?"
  [4]=>
  string(1) "?"
  [5]=>
  string(1) "?"
}


配列から重複したデータを削除します.
$a = array("a" => 1, "b" => 2, "c" => 3, "d" => 4, "d" => 5, "a" => 9);
$vals = array_unique($a);
var_dump($vals);
/** 結果 */
array(4) {
  ["a"]=>
  int(9)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
  ["d"]=>
  int(5)
}


配列から最初のキーを取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$key = key(array_slice($arr, 0, 1));
var_dump($key);
/** 結果 */
string(1) "a"

配列から最後のキーを取得する
$arr = array("a" => 1, "b" => 2, "c" => 3);
$key = key(array_slice($arr, count($arr) - 1, 1));
var_dump($key);
/** 結果 */
string(1) "c"


array系を応用した関数

/**
 * PDOを利用したINSERTクエリーの発行.
 * @param object $dbh PDOの接続クラス.
 * @param string $table テーブル名.
 * @param array $values カラムと値の連想配列
 * @return integer 成功の場合は1失敗の場合は-1を返します.
 */
function insertQuery($dbh, $table, $values) {
    $sql = "INSERT INTO " . $table . "(" . join(", ",  array_keys($values)) . ") VALUES(" . join(", " ,array_rale("?", count($values))) . " )";
    $stmt = $dbh->prepare($sql);
    if (!$stmt->execute(array_values($values))) {
        print_r($dbh->errorInfo());
        return -1;
    }
    return 1;
}

このような応用ができます。
ほかにもあれば今後公開してみます。