カテゴリー : 2012年 8月

[Titanium Mobile] スプラッシュスクリーンを表示させない方法

Titanium Mobile にて、スプラッシュスクリーンを表示させない方法を「QA@IT」で教えてもらったのでメモ。

Titanium Mobileでスプラッシュスクリーンを非表示にする方法 – QA@IT はてなブックマーク - Titanium Mobileでスプラッシュスクリーンを非表示にする方法 - QA@IT

■ iOS

iOSの場合、表示しない方法はありません。どうしてもという場合は例えば黒で塗りつぶした画像を使ってtransitionを使わないことで代用できます。しかしAppleのHuman Interface Guidelineのコンプライアンスに違反するかもしれないのでお勧めできません。そもそも初期化のプロセスは必ず発生しますので、そこで画面がブラックアウトしてしまったりするのは好ましくないでしょう。

■ Android

なんでもありのAndroidの場合は、一度ビルドしてからプロジェクトのディレクトリ/build/android/res/values/theme.xmlを編集します。

<style name="Theme.Titanium" parent="android:Theme.NoTitleBar">
  <item name="android:windowBackground">@drawable/background</item>
</style>

これを下のようにします:

<style name="Theme.Titanium" parent="android:Theme.NoTitleBar">
</style>

以上です。

[Javascript] オブジェクトが空か判定・判別する方法

JavaScript で、オブジェクトのプロパティが一個以上あるかどうかを調べるには、Object.keys を使って下記のように書けます。

var hoge = { 
    fuga: 1,
    moga: 2,
};
 
console.log(Object.keys(hoge).length === 2); // true

【参考】

javascript の オブジェクトが空かどうかを調べる場合 – Node.js日誌β はてなブックマーク - javascript の オブジェクトが空かどうかを調べる場合 - Node.js日誌β

keys | Mozilla Developer Network はてなブックマーク - keys | Mozilla Developer Network

[Titanium Mobile][ERROR] Script Error = Parse error (unknown file)

Titanium Mobile で下記のようなエラーが発生する場合は、JavaScriptのシンタックスエラーが原因です。

[ERROR] Script Error = Parse error (unknown file)
Terminating app due to uncaught exception of class ‘__NSCFDictionary’
terminate called throwing an exception

直近に修正したコードがJavaScriptの文法的に正しいか確認しましょう。

以上です。

【参考】

SDKエラー例 [アプリ作家見習いメモ] はてなブックマーク - SDKエラー例 [アプリ作家見習いメモ]

App suddently throws parse error » Community Questions & Answers » Appcelerator Developer Center はてなブックマーク - App suddently throws parse error » Community Questions & Answers » Appcelerator Developer Center

[Titanium Mobile] Viewの背景色を透明にする方法

Titanium Mobile にて、Viewの背景色を透明にするには、createView で backgroundColor に ‘transparent’ を設定すればOKです。

var view = Ti.UI.createTableView({
    width : 320,
    backgroundColor : 'transparent',
});

以上です。

[Javascript] HTMLエスケープを行う htmlspecialchars

Javascript で HTML において特殊な意味を持つ文字のエスケープを行うPHP関数 htmlspecialchars を実装するコードをメモ。

function htmlspecialchars(ch) { 
    ch = ch.replace(/&/g,"&amp;") ;
    ch = ch.replace(/"/g,"&quot;") ;
    ch = ch.replace(/'/g,"&#039;") ;
    ch = ch.replace(/</g,"&lt;") ;
    ch = ch.replace(/>/g,"&gt;") ;
    return ch ;
}

【参考】

Javascript で HTMLエスケープを行うPHP関数、htmlspecialchars を実装:phpspot開発日誌 はてなブックマーク - Javascript で HTMLエスケープを行うPHP関数、htmlspecialchars を実装:phpspot開発日誌

[PostgreSQL] ERROR: missing FROM-clause entry for table

PostgreSQL にて、下記のようなエラーが発生した場合の対応方法をメモ。

エラーメッセージ missing FROM-clause entry for table

ERROR: missing FROM-clause entry for table

バージョン 8.1 以降の 8 系は、SET add_missing_from TO true; で対応できるみたいです。

バージョン8.1への移行

add_missing_fromのデフォルトがfalseになりました(Neil)

FROM参照を持たない問い合わせでテーブルが使用された場合、デフォルトでエラーとなるようになりました。 まだ過去の動作を使用することができますが、そのためにはこのパラメータを’true’にしなければなりません。

ダンプに暗黙的なFROM構文を使用して作成したビューやルールがある場合、既存のダンプファイルをロードするために、add_missing_fromを真に設定しなければならないかもしれません。 これに悩まされるのは一回だけのはずです。 PostgreSQL 8.1は、こうしたビューやルールを標準の明示的なFROM構文に変換するためです。 したがって、今後のダンプではこの問題は起こりません。

ss=> SELECT WORK.* FROM WORK w;  -- 一見正しそうなこのSQLもエラーになる
ERROR:  missing FROM-clause entry FOR TABLE "work"
oss=> SET add_missing_from TO TRUE; -- デフォルト値がfalse
SET
oss=> CREATE VIEW work_v AS SELECT w.* FROM WORK w ;
CREATE VIEW
oss=> \d work_v        VIEWとして読み込ませると定義は自動的に訂正される
    VIEW "public.work_v"
 COLUMN |  TYPE  | Modifiers
--------+--------+-----------
 id     | BIGINT |
 VALUE  | text   |
 stat   | text   |
VIEW definition:
 SELECT w.id, w.value, w.stat
   FROM "work" w;

■ add_missing_from(boolean)
オンの場合、問い合わせによって参照されるテーブルは、既に存在していなければFROM句に追加されます。この振る舞いはSQL標準に準拠しておらず、多くのユーザは(そのエイリアスを参照しなければならないテーブル参照をする場合など)誤りを隠蔽するため、嫌がります。デフォルトはoffです。この変数は、この振る舞いがデフォルトで認められている8.1以前のPostgreSQLリリースとの互換性を有効にします。

この変数が有効になっているとしても、問い合わせによって参照される個々の明示的FROMエントリに対し、警告メッセージが放出されることに注意してください。問い合わせのFROM句に対する問い合わせで参照される全てのテーブルを追加すること(もしくはDELETEの場合のそのUSING句)に依る、この振る舞いに信頼を置かないアプリケーションの更新に、ユーザは消極的になります。

バージョン 9.0 からは add_missing_from が廃止されたみたいなので、SQLクエリを書き換えるしかないようでした。

バージョン 9.0 への移行 / 互換性のない変更点
サーバ設定の非互換

■ 設定 add_missing_from が廃止されました。
これはかなり以前からデフォルトで off となっていました。 (Tom Lane)

以上です。

[Titanium Mobile] invalid method (createCoverFlowView) passed to UIModule

Titanium Mobile で下記のようなエラーが発生しました。

[WARN] attempted to load: TiUICoverFlowViewProxy
[WARN] Exception in event callback. {
    line = 22;
    message = "invalid method (createCoverFlowView) passed to UIModule";
    sourceId = 225212864;
}

新しい種類のコンポーネントを追加した後に、このようなエラーが発生することがあるみたいです。

One thing to remember is that when you do a full build Titanium removes unused components from their API. So if you are adding a new type of component, for example, there are no textAreas in your app, and then you add a textArea, you may get this error.
The solution is to force a total rebuild by clearing out the contents of your build/iphone directory

build 以下のファイルを削除してから、もう一度ビルドすると正常に動作しました。

rm -rf build/iphone

以上です。

【参考】

Invalid method (createToolbar) passed to UIModule on device » Community Questions & Answers » Appcelerator Developer Center はてなブックマーク - Invalid method (createToolbar) passed to UIModule on device » Community Questions & Answers » Appcelerator Developer Center

[Shell Script] /bin/bash^M: bad interpreter: No such file or directory

シェルスクリプトを実行したら、エラーが発生しました。

/bin/bash^M: bad interpreter: No such file or directory

原因は、Windowsの改行コード CR/LF になっているせいみたいでした。

Linuxの改行コード LF に変換すれば正常に実行できました。

【参考】

シェルを実行できない失敗例「/bin/bash^M: bad interpreter: No such file or directory」の原因と解決策 – r_nobuホームページ はてなブックマーク - シェルを実行できない失敗例「/bin/bash^M: bad interpreter: No such file or directory」の原因と解決策 - r_nobuホームページ