2011年3月31日木曜日

IMEは一休み

とりあえず、Widgetの使い方が今ひとつ理解できていないので、
割り勘ソフト(GoDutch)を作ってみることにする。

WebOSアプリは小さい画面で以下に情報を詰めるか。
これが肝になるが、Widgetを上手く使うことで、スマートかつ情報入力を適切に出来るはず。

そして、この画面構成がもっとも気を使うのだろうと思う。


メイン画面:割り勘する支払金額入力、人数入力、リスト[メンバー名(任意)、負担比率、負担金額]

  1. リストは人数入力によって行を作成。
  2. または、リスト最下行+Add...ボタンで追加→人数カウントを増やす。
メンバー入力ダイアログ:デフォルトではmenber-1、負担比率は人数等分となるようにしておく。負担比率をメンバー増やしてもロックしたい場合があるので、ロックボタンもつける。負担金額の入力も出来るようにする。

 
金額入力、負担比率はテンキー方式で表示できると良いかな。

負担比率(デフォルト)(%)=100/メンバー数 

ロックされた比率がある場合の負担比率(%)=(100-(ロックされている比率合計))/ロックしていないメンバー数

負担金額=(支払金額-(ロックされている支払金額合計))×負担比率(%)/100

ということだから、

totalPayment    //整数、まぁ、100万円位までで良いかな?初期値は0
numOfMember  //整数、1~20人ぐらい、初期値は1

memeber[].name  //str、defaultはmember x(xはリスト順)
member[].rate                      //整数、端数切り上げ、1~100(%)
member[].lockedRate   //整数、1~100(%)、FlagOfLockedRateがFalseの場合には、rateを代入。Trueの場合には、lockedRateをrateに代入。初期値は0。

member[].payment              //整数、端数切り上げ
member[].lockedPayment   //整数、1~100(%)、FlagOfLockedPaymentがFalseの場合には、Paymentを代入。Trueの場合には、lockedPaymentをpaymentに代入。初期値は0。

member[].flagOfLockedRate //論理値、true || false
member[].flagOfLockedPayment //論理値、true || false

numOfLockedMember //整数、0~numOfMember, lockedRate== "true" となる数をカウント
member[].rate
// flagOfLockedRate=="false"
=(100-[flagOfLockedRate=="true"となっているlockedRateを合計])/(numOfMember-numOfLockedMember)   
// flagOfLockedRate=="true"
=lockedRate

member[].payment
// flagOfLockedPayment=="false"
=(totalPayment-[flagOfLockedPayment=="true"となっているPaymentを合計])*member[].rate/100
// flagOfLockedPayment=="true"
=lockedPayment

あとはリスト数字が動くイベントの都度、フラグの確認とrate, paymentを算出すれば良いかな?

メイン画面はリスト外:totalPaymentとnumOfMemberが、リスト内:name、rate、payment

2011年3月29日火曜日

ipkファイル

WebOSのアプリケーションパッケージはipkでipkgというのだそう。基本的にはdpkg(Debianの)のサブセットらしい。kimuxさんのipkgを作るにはにZarus用パッケージの作り方として紹介があるので、かいつまんで説明すると、

  1. インストールするアプリケーションの絶対パスにてtar.gz(tar+gzip)化した圧縮ファイルがdata.tar.gz
  2. インストール情報等の制御スクリプト類をtar.gz(tar+gzip)化した圧縮ファイルがcontrol.tar.gz
  3. control.tar.gz無いにはパッケージ管理情報controlファイルは必ず必要。それ以外にインストールスクリプトや、アンインストール時のスクリプトを入れることが出来る。
controlの書式はWebOSではもしかしたら違うかも....。ipk作るコマンドが普通はあるみたいなので、あとでSDKとか調べてみる。

WebOSでAjaxIMEは

動きます。ただし、AjaxIME for Kindle版ですが。

KindleもWebkitだから、でしょうね。差分は1カ所だけなのですが、今ひとつ理解できていません。
ただ動くことは動くと。

あと肝心なこと。AutoCapsは解除しないと変なことになります。PalmOSの時もそうだったけど。
今回はPreferenceで設定できるだけ親切ね。

2011年3月28日月曜日

DOM と JavaScript

GeckoとWebkitは比較的JavaScriptとして近しいということだったので、AppleよりもMozillaかなということで、MDNに行って調べてみた。最初は英語で読んでいたが、よく見たら、日本語もあるのでした。

DOMはJavaScriptの中で使う部品、DOMをどう動かすかを示すのがJavaScript。解説のページによってはごっちゃになっているページもあった。厳密に言えば、DOMへのアクセスはJavaScript以外でも行けるので、分けて考える必要があるわけだが、ことWebOSの基本的なアプリケーションを考える上で、要するにSDKだけ使う上では、ごっちゃでも良かったり(汗)。

とりあえず、MDNは日本語で詳しく記載されていて良い。

2011年3月26日土曜日

Palm Pre Emulatorの日本語化

日本語化ソフトはミニーさんが公開しているのでそちらを利用させていただく。

Palm PDKにNovatermと同等のTerminalソフトが入っている。PDKのショートカットにはputty.vbsが入っているが、Windows7 64bitではどうもエラーが出てうまくいかない。やっている作業は単純に以下のバッチファイルを実行しているだけだった。

Palm Pre Emulatorを起動した上で、

C:\Program Files (x86)\Palm\PDK\bin\DeviceShell.bat

を実行する。すると、ルートログインされ、/var/home/rootディレクトリがホームディレクトリとなる。

あとは先のミニーさんのページに示されている、webOS 2.1.0 の場合の通りに実行する。

Localize210.shの中身は、wgetでLocalize210.zipをwgetして、ルートディレクトリで展開するスクリプト。
Localize210.zip自体はミニーさんのブログ(ローカライズ作業とは何だ)に書いてあるとおり、string.json(ボタンやメニューの表示に用いる)の英日の対応作業とビュー(htmlファイル)の日本語翻訳作業したファイル類を各アプリのフォルダ無いに存在する、resorcesディレクトリのjaフォルダ下に格納したもの。

ちなみにこの作業だけでは、日本語にはならない(ちょっとしばらく悩んだ)。

Mini’s Japanese Quick Setup Ⅱを実行する必要がある。locale_P102UEU.txtという、ロケールを/etc/palm/内のlocale.txtと置き換えている。おそらくver 1.xx系列では/usr/lib/luna/customizationにもlocale.txtがあったようだが、ver 2.xx系には無い模様。これでPreferenceのRegional Settingsのロケールで日本語が選択可能となる。

このシェルスクリプトはその後時刻表示の設定(日本語表記)と、日本語表示を変にするフォントをDisableしている。

まぁ、要するに普通のVer 2.1.0のデバイスと同じことをやれば良いだけ。ここまでやったら、Emulator側でも、ターミナル側でも良いので再起動。再起動した後に、PreferenceのRegional Settingsのロケールで日本語を選んで再起動すれば無事に日本語化が完了する。

とりあえずひらがな入力まで

AjaxIMEを参考にひらがな入力までやってみようと思う。

漢字変換もMecabを利用させてもらうのが簡単かな?
でもそうすると完全にmecab-skkserv for WebOSだな。

ある程度実装できたら、作者さんに連絡した方が良いのかもしれない。

...でも、今までに最後まで行ったことないんだよなぁ、自分(恥)。

2011年3月25日金曜日

AjaxIMEさん

JavaScriptとBookmarkletには感動した。

JavaScriptでローマ字→ひらがな変換までを実行して、ひらがなをサーバーサイドで変換している。

サーバーではMecabで形態素解析して漢字変換、その結果を戻すということみたい。

もじもかさんも変換はWebのAPIに出しているんだよなぁ...。

ひらがな漢字変換部分をなんとかPreの中に入れたいのですが。

どこでもJavaScriptで入力できるようにする

AjaxIMEより。JavaScriptが含まれていないページにJavaScriptを盛り込む関数ね。ちなみに、urlは盛り込みたいScriptの保存場所を記す。
function JSONRequest(url) {
  this.url_ = url;
  this.parent_ = document.getElementsByTagName('head').item(0);
  // headで示された行の内容
  this.obj_ = document.createElement('script');
  this.obj_.setAttribute('type', 'text/javascript');
  this.obj_.setAttribute('charset', 'utf-8');
  this.obj_.setAttribute('src', this.url_);
  // <script type="text/javascript" charset="utf-8" src="(引数であるURL)" >
  this.parent_.appendChild(this.obj_);
  //JavaScriptであるようにコードを追加。
}

JSONRequest.prototype.remove = function () {
  this.parent_.removeChild(this.obj_);
}
WebOSの日本語入力を考える。

  1. キーボードのスキャンはSDLライブラリに任せる。PDKでのサポートがあるから。
  2. 2.詳細な記述はUIMのソースを利用させて頂く
  3. 3.日本語への変換はanthyを利用する。
1,2が上手くいけば、3は別のシステムでも良いかと思っている。とりあえずはUIMのソースコードを見てみる。

あと、PDKのサンプルコードはVisual Studioでコンパイルできるのは分かったが、もうちょっとSDK側の理解が必要みたい。平行してSDKでのアプリケーション作成も進めてみる。

2011年3月24日木曜日

IMEを作るのなら、SDLを学ぶわけね。

まずはSDLでキーボードのキースキャンを学ぶわけですな。

 X-Window Programming
http://www-yano.is.tokushima-u.ac.jp/~mituhara/software_e/sdl.html

こちらのソースコードをベースに作業することになるのね。
あれ?意外に簡単にキーボードは行けそうだな。

キースキャンするPlug-inがアプリケーションをロードすればIMEとして行けるのかな?



#include <stdio.h>
#include <SDL/SDL.h> /* SDLを用いるために必要なヘッダファイルをインクルード */
/* SDLを用いるために,関数の引数を次のようにする*/
int main(int argc,char *argv[]){
 SDL_Event event; /* SDLによるイベントを検知するための構造体を宣言 */

 /* 無限ループ */
 while(SDL_PollEvent(&event)){
   /* イベントタイプ別に動作させる */
   switch (event.type) {
    /* キーボードが押された場合の処理 */
    case SDL_KEYDOWN:
     printf("Key Pressed\n");
     printf("--- The pressed key is %s.\n", SDL_GetKeyName(event.key.keysym.sym)); /* 押されたキーの名前を表示 */
     /* 押されたキーごとに処理(イベントのIDはevent.key.keysym.symに格納されている) */
     switch(event.key.keysym.sym){
      case SDLK_RETURN:
       printf("You pressed RETURN key.\n");
       break;
      case SDLK_ESCAPE:
       printf("You pressed ESCAPE key. This means EXIT.\n");
       exit(-1);
       break;
      default:
       break;
     }
     break;
    /* キーボードが離された場合の処理 */
    case SDL_KEYUP:
     printf("Key Released\n");
     break;
    /* 終了 (^C)が押されたときの処理 */
    case SDL_QUIT:
     SDL_Quit(); /* SDLの停止*/
     exit(-1);
     break;
   }
  }
 }
}

2011年3月22日火曜日

WebOS始めます

出来るかどうかはともかく、今日からWebOS始めます。

今日学んだこと。

WebOSの基本。
  1. アプリケーションはJavaScriptで作成される。
  2. ようするに、Google MapとかGmailみたいなAjaxとかそういったものを活用したものだ。
  3. Mojo Frameworkというライブラリで、JavaScriptベースながら、Local Storageにもアクセスできる。
でも、今やりたいことはIMEを作りたいこと。
これから調べてみます。