伊勢神宮へ旅行

伊勢神宮に旅行です
まず、交通機関ですが
電車を使いました
毎回、廃止が噂される青春18切符ですが
今年も無事に購入できました
この切符はJRならば
乗り降り自由の切符で5枚つづりで売られてます
なお、売り場は駅や緑の窓口などとなります
今回、快速みえを使い、伊勢市までいきました
ちなみに、正規料金なら
近鉄の急行でいくほうがやすくなります
近鉄だと1410円ぐらいです
ちなみに、伊勢市や鳥羽の
JRの駅で4枚つづりの切符が売られていて
こちらの場合、一枚あたりに換算すると
1400円の切符が売られてます
ただし、まとめて購入なので
実際には5600円です
伊勢神宮は
外宮と内宮と二カ所あり距離はかなり離れているため
外宮と内宮の移動にはバスを使います
値段は420円
ただし、帰りのバスが夜6時ぐらいになるとほとんどないので
帰りの時間には要注意です
近くのおかげ横町では
有名な赤福があります
夏場には
かき氷赤福がでてますが
お腹の弱めな私にはちょっと無理でした
私がたべたのは
赤福のふつうの方で3個で280円です
お茶もサービスしてくださるので
美味しく頂けました
おかげ横町にある銀行のATMでは
明細におみくじがついてます
いろいろと楽しめましたが
一つ、気になることもありました
それは
iPod touchの乗り換え案内のアプリ
これで、いままでは特に不便はありませんでしたが
今回名古屋から伊勢市まで乗り換えを
調べたとき、なぜか必要のない乗り換えが表示されました
本来、近鉄の急行で伊勢市まで行けますが
なぜか途中で乗り換えるように表示されました
カーナビと同じで、またまだ万能ではないので
自分で調べることも必要と感じました
最近はお盆などで忙しかったので
ゆっくりしてみます

telnetでメール送受信処理確認

telnetでメール送受信処理確認
telnetを使えば
端末上からメールサーバ
(POP3サーバ)
にアクセスできる
ただし、ポートがあいてないとだめだけど
まずは手入力
暗号化なしの110ポート
telnet サーバIP 110
例えば
telnet 192.168.1.120 110
これで、+OKの応答まち
応答を受信したら USERコマンドで
ユーザ名
PASSコマンドで
パスワード
を送信
これで、どちらにも
+OK
の応答が返ってくれば接続完了
STATコマンドで
受信されているメッセージを確認し
PTERコマンドで
メッセージ受信
受信が終わったら
QUITコマンドで
POP3サーバとの接続を切る

POP3通信

POP3のセッション内の処理
1 認証をリクエストして応答
2 メールの件数をリクエストして結果の表示
3 メールのヘッダ一覧をリクエストして応答
4 何番と何番のメールをほしいとリクエスト
5 指定したメールの受信
6 終了を送って応答

ネイティブ側からwebviewへの通知

ネイティブからwebviewへ通知
ネイティブ側からwebviewへイベントを通知するのは
Webviewオブジェクトの
evalJS()を使う
evalJS()

javascriptのプログラムコードを
引数として渡す
evalJS()
で渡された文字列は
webview内のjavascriptとして扱われる
基本的には
あらかじめwebview側のjavascript
で呼び出したい機能を定義
その上で
webview.evalJS()
の引数に
処理を
実行するjavascriptを記述
ただし、これは予想できるように
XSSの弱点が存在する
もし、web APIとかを使い
外部から取得したデータを基に
文字列を組み立てるなら
無害化するなどしないと、Webサイト同様に改ざんされるリスクがある

ネイティブ側でイベント受け取り

ネイティブ側でイベント受け取り
Webview側のアプリ本体になる
app.js
にイベントハンドラーを設定
イベントハンドラーの設定では
Titanium.Appオブジェクトの
addEventListener()
を使う
addEventListener()の
第1引数に
作成したカスタムイベント名
第2引数に
イベントハンドラーを渡す
このイベントハンドラーの 
第1引数eには
fireEvent
の第2引数が渡される
今回は
イベントが受け取れているかどうかを
トーストで確認
トースト通知は
TI.UIオブジェクトの
createNotification()
で生成
引数には
表示する時間を
durationプロパティ
でミリ秒単位で指定します
ちなみに、ミリ秒は
1000ms=1秒です
1.5秒表示したいなら
duration: 1500
となります
表示するテキストについては
messageプロパティで設定
これも
message : ‘表示したいメッセージ’
というように書きます
文字列を’で囲むのを忘れずに
作ったトーストは
show()
で画面に表示します

pnメソッド解説

onメソッド解説
on()は
第1引数にイベント名の文字列
第2引数にイベントハンドラー
を設定
今回は
タッチして動かしたときに使う
touchmoveイベント
これのイベントハンドラーを設定
コードをみてわかるように
jQueryを使っている
おさらいすると
$は
jQueryを呼び出すのに使う
イベントハンドラーでは
タッチされた位置や
イベントの発生源などが格納されている
オブジェクトe
のメソッドとして
preventDefault()
を、使っている
ちなみに、eじゃなくてもできるらしいけど
実際にはほとんどeなので、
慣例に倣った方がコードが読みやすいし
メンテもしやすい
preventDefault()は
イベントのデフォルト動作を無効化
preventDefault()で無効化した
touchmoveイベントのデフォルトの動作は
画面スクロール機能
今回はこれをけしたいので
これを消してみました
これで、スクロール機能が無効になります

スクロール無効化

スクロールの抑制
Titanium MobileのWebviewでは
表示画面の右側に
スクロールバーがでることがある
これがアプリだと
違和感があるため
javascriptでこの機能を 停 止する
画面スクロールの禁止は
アプリ起動直後にする
具体的には
ページの枠組みであるDOMの判別が終了したときに呼ばれる処理として記述する
DOMは
Document
Object
Model
の略
DOMの構築終了
ボタンクリック
などの特定のタイミングを条件に実行する機能をイベントという
ボタン、リンクという
ページの要求にイベントを追加するのは
DOMの構築後でないとダメ
イベント作成には
documentオブジェクトの
on()
を使う
on()は
イベントと
そのイベントが発生したときに
呼ばれる処理
つまり
イベントハンドラーを
設定するメソッド

ハイライト無効化

タップ時の強調表示を消す
webviewでUI作成のときの問題点
それは
画面をタップしたときのハイライト
ハイライトは強調表示のこと
この効果は
リンクボタンとかをタップすると
ユーザーにわかりやすく知らせるために
色が変わるというもの
これは、スマホでWebコンテンツを
表示すると体験できる
ハイライトはネットをみるだけなら問題ないけど
アプリにすると微妙になる
原因は
アプリの挙動がサイト EXILE CATCHY BEST 2008
アプリっぽくないから
ハイブリッドアプリのUIの場合
CSS3を使って
Webコンテンツ独特のクセをつぶしていく
ハイライトを無効化するには
-webkit-highlight-color
これはそのなの通り
タップ時のハイライトの色を指定する
これの関数は
左から



透明度
となる
透明度は0~1で指定して
0なら透明
1なら不透明
つまり、rgba(0,0,0,0)
なら無色透明になる
これで
ハイライト無効になる
タップ時の強調表示を消す
webviewでUI作成のときの問題点
それは
画面をタップしたときのハイライト
ハイライトは強調表示のこと
この効果は
リンクボタンとかをタップすると
ユーザーにわかりやすく知らせるために
色が変わるというもの
これは、スマホでWebコンテンツを
表示すると体験できる
ハイライトはネットをみるだけなら問題ないけど
アプリにすると微妙になる
原因は
アプリの挙動がサイト EXILE CATCHY BEST 2008
アプリっぽくないから
ハイブリッドアプリのUIの場合
CSS3を使って
Webコンテンツ独特のクセをつぶしていく
ハイライトを無効化するには
-webkit-highlight-color
これはそのなの通り
タップ時のハイライトの色を指定する
これの関数は
左から



透明度
となる
透明度は0~1で指定して
0なら透明
1なら不透明
つまり、rgba(0,0,0,0)
なら無色透明になる
これで
ハイライト無効になる

titanium mobile で占いアプリ作成

今回は日経Linux 2012 8月号の
サンプルを使いました

最初に
cp -p /media/LIN201208/article/rensai_android/app.js .

ファイルをコピー
次にの
gedit app.js
をコピーするため
Titanium Studio パッケージエクスプローラで
プロジェクト名 > Resources > app.js
でファイルを開きます
ファイル拡張子をみたまま、
java script です
このファイルの中身をすべて削除し
app.js をコピペします
titanium mobile のUI部品生成は
Titanium.UI.create部品名
という関数を作成します
もし、ボタンを作るなら
Titanium.UI.createButton({
設定
})
というかんじです
ボタンを押したときの処理は
addEventListener を使います
このあたりも
java script に近いかも
具体的には
button.addEventListener(‘click’,function(){
//クリックしたときの処理
});
となります
‘click’
はイベント名
function(){ …}
の部分は
イベントが発生したときに実行される関数
通称イベントハンドラー
です
今回使用した関数もメモしてみました
Math.random()
0以上1未満の数をランダムにかえす
Math.floor()
小数点以下の数を切り下げて整数をえる
これで、
0から「配列の長さ-1」
までの範囲の整数を乱数で得られる

titanium project 作成

./Titanium_Studio/TitaniumStudio

Titanium Studio を起動
File > new > Titanium Mobile Project
で設定画面を開きます
ただし、起動したときにネット接続していないと
このTitanium studio がログイン画面になり
使えません
起動したら
Project name : FirstProj
ここへはプロジェクト名
App Id

java でいうパッケージ
メルアドかドメインを反対から
入力します
test@example.ne,jp
なら
jp.ne.example.test
というように書きます
Company/Personal URL
ここには自分のweb site URl
もしなければ
http://localhost
これで、helloworld のように
もとが完成です
あとは
プロジェクトを右クリックして
Run As > Android Emulator
でエミュレータが起動します
CPUの性能によりかなり時間差がありますが
無事に成功すると
アプリが起動します