WinHEC 2007
Posted by ねふぁ at 09:49 午後 開発 | Permalink | コメント (0) | トラックバック (0)
先日ふとAximであるカスタマイズをしようと思いやりはじめたのですが、一般に配布されているのはなかなかいいのがなくて、 それもWM5対応の問題のせいなのか一部うまく動作してなくて、自作しようと思ったらなかなかいいツールが出回ってない。
無いなら作ろう。
と言うわけであるカスタマイズをするツールを開発中。本体上でも出来る様、 あるファイルの読み込み及び書き出しが出来る様ファイル構造の解析とかちまちまやり、ようやく自力で書き出しも出来るようになりました。 なかなか厄介なファイルでした。構造の仕様に関する情報ほとんど無かったし癖がある構造だし。
連休中はこの新種ソフトに集中してとりかかろうと思ってます。
何のソフトかはもうしばらくのお楽しみ。
Posted by ねふぁ at 10:33 午後 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
早速Palm OS Developer SuiteとFossilのSDKを入れてみた。
FossilのSDKについてきたサンプルプロジェクトファイルの開き方が良く分からないけど、とりあえずDeveloper Suiteで下記サイトの情報に沿って新規プロジェクトを作ってみた。
Posted by ねふぁ at 11:10 午後 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
Fossilと言う腕時計型Palmを入手したので、早速「時計アプリを作ってみよう!」と思い、 Palm開発実況を開始させていただきます。
まず、Palmの開発は始めてなので、開発環境から調査。
どうやら、色々調べて見るとPalmの開発にはCodeWarriorを使うのが一般的らしい。と言うことで、 CodeWarriorを入手しなければ。
検索検索。
CodeWarriorはメトロワークスから出ているらしい。
本製品は2005年4月30日をもちまして、販売を終了いたしました。
* CodeWarrior Desktop製品販売終了のお知らせ
・・・え~と、販売が終了って事は、もう売っていないって事で・・・
・・・・・・・・・・・・
Palmはもうオシマイデスカ?いや、そりゃもう日本はどのメーカーもPalmはやってないけど・・・ 開発環境もう入手できないんですか?
・・・パッケージソフトなのでどこかに残っているかも。
検索検索。
売り切れ。在庫なし。販売終了。404のっとふぁうんど。
だぁ~~~。CodeWarrirorがもう入手でき~~~ん。
こんなときは海外サイトだ。英語版でもかまわん、アメリカのメトロワークス社はどこだ~
Product is currently on backorder until September 2005
・・・ドコニモナイヨー(なんか最近このせりふ言ったな)
が~ん。せっかく自分で腕時計アプリ作れると思ったのに~~~Fossilの楽しさが半減する~~~
が、調べていると、現在はPalmSourceからPalm OS Developer Suiteと言う開発環境が無償で提供されているらしい。早速ダウンロード。
ただ、Developer Suiteに関する情報が少ないので、少し習得できるまで時間がかかりそう。 FossilのSDKもDeveloper Suiteと使えるか不安もあるし。
Palmのアプリ、無事開発できるんでしょうか?
Posted by ねふぁ at 10:32 午後 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
Beckyのデータと比較してみた。うーん。何が違うんだろう。
う~ん。
・・・
独自:
Content-Type: multipart/mixed:
boundary=
Becky
Content-Type: multipart/mixed;
boundary=
・・・
なんか、「;」と「:」がチガイマスヨ・・・
・・・
Beckyってエライネ、マチガッテテモチャントホンブンモテンプモミレタンダモン
・・・
と、言うわけで、
投稿でけた~
ばんざ~い(^-^)/
プラグインはもう少しテストしてから公開します~~(^-^)/
ちなみに、Pocket PCはToshiba Genio e830w、携帯はF900it使ってます。 どちらもBluetooth対応してるので、外出先でもワイヤレスで楽々送信~。Pocket PCはActiveSyncでPCとつながってる場合、 ActiveSync経由でLANにもつながってるのでクレイドルにさして送信もできます。
F900it自体もタッチパネルついてて簡単な絵がかけちゃうんですけどね。
というわけで無事ココログ投稿プラグインが出来ました。
ふぃ~。
Posted by ねふぁ at 01:12 午前 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
メールのSubjectについて調べてみると
件名はcode64とかで変換されているらしい。が、code64ではなんかgoogleで見つからない・・・
Base64で決められたヘッダとフッタを付けるらしい。最初Base64かな?と思ったが、「?」があったので違うと思ったが、 やぱBase64か。
Base64すでに添付ファイルのエンコードでアルゴリズムはあるから楽勝だ。で、どの部分がヘッダとフッタなのだろう?
ふむふむ、こんな感じ?
=?ISO-2022-JP?B?(Base64変換したJIS)?=
修正。データの確認。
よっしゃ!これでどうだ~~~~!!!

・・・orz
とりあえず件名は日本語になった。
Beckyのデータと比較してみよ・・・
つづく
Posted by ねふぁ at 12:52 午前 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
PC上では自力でメール送信が出来たので今日はWindows CEにメール送信プログラムを移植してみる。
FTP送信プラグインを元に、送信部分をメール通信に置き換える。CSocketをCCeSocketに置き換えるぐらいで良いはず。
動かしてみる。と、すんなり動いた。ばんざ~い(^-^)/
と、思ったのも束の間。LAN経由で動いたので次は携帯経由でつなごうと思ったら・・・
553 please recveive your mail before sending
なんかエラーが出たよ。これはなんだろう?メールが溜まってると送信できない?そんな事はないよなぁ・・・。google検索。
どうやらPOP before SMTPのエラーらしい。つまり、 SMTPでメール送る前にPOPでログインしておかないといけないらしい。これも実装しないといけないのか。仕方ない、 POPのやりかたを調べてみよう(LAN経由はPCでメール受信してたから送れたらしい)。
SMTPと同じ様な感じだな。とりあえずログインだけしとけば良いのだろうからSMTPする前にこんな感じで通信しとけばOKかな?
telnet xx.xx.xx.xx 110
+OK...
USER ユーザー名
+OK...
PASS パスワード
+OK...
QUIT
+OK
まずはPC上で実装してみる。SMTPをする前にPOPで同じようなやりとりを追加。

最初の方がPOPのやりとり、後がSMTPのやりとり
でけた。
CEに再度移植。
・・・できたぁ~~~(^-^)v いや~、4日でPOP before SMTPも実装した自力メール送信プラグインができちゃいましたよ。我ながら凄い。
では、Pocket PCからもば絵をメール送信する全貌を見てみましょう(某番組風)

まず、幻彩2で絵を描きます

メール送信プラグインを選択します
メールサーバーの設定をします
メール本文と接続方法を設定し、「送信」ボタンをぽちっとな
メール送信中

送信完了~
さぁ、これでココログ更新だ~すくりんしょっとを取ろう~と思ったが・・・更新されてない。メールを見ると
Undelivered Mail Returned to Sender
(なんちゃら)
288, <FH> line 43. I can't find a blog named '_$B'
なんかエラーが来てるよ。調べてみると、
なんか、「:」が特別扱いらしい。調べてみると、「今日のもば絵」の件名、JISコードだと「■$B:#F|...」 の様なコードになってる。
・・・って事はあれですか、サブジェクトを日本語として認識していないって事ですか。もしかして、 がんばってISO-2022-JPに変換したのにこのコードだと投稿できないかもしれないって事ですか。 でもBeckyとかデフォルトでISO-2022-JPだし。
とりあえず、「今日」の中に「:」が入ってるので件名を「もば絵 of the day」にして送ってみる。
お。投稿受付のメールが来た。ブログを開いてみる

・・・
・・・思いっきり文字化けしとるやん。本文ないし。添付ファイルもないし。orz
試しにBeckyから投稿してみよう。・・・Beckyからの投稿は出来た。この違いは何だろう。データの中身を見てみよう。
あ~!なんか違う。件名はBeckyだとこんな感じになってる。
独自:
Content-Type: text/plain; charset=iso-2022-jp
Becky:
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit
これは関係あるか不明だけど、Encoding付けてcharsetは大文字でダブルクオテーションで囲むようにしとこう。
それよりも
Subject: =?ISO-2022-JP?B?GyRCOiNGfCROJGIkUDMoGyhC?=
件名が全然ちがうー。本文は同じだけど、件名がチガウー。そうか~、件名は日本語処理に別な特殊な方法があるのだな。
というわけで、今日はここまで。ちなみにBeckyでメール受信すると件名も大丈夫でした。
あとちょい!・・・かな?
Posted by ねふぁ at 12:11 午前 旅行・地域, 開発 | Permalink | コメント (0) | トラックバック (0)
メール送信用のデータまで出来たので、今日は実際にメールサーバーと通信してメールデータを送ってみたいと思う。
「smtp プロトコル」でgoogle検索。
メールサーバーにTelnetで入れるのか。実際にやってみる。

例にならってTelnetで手動メール送信
お~、ちゃんとメール来たよ
おお、ちゃんとメールが届いてる。SMTP送信の場合はユーザーもパスワードも無しでいけるのか。だからPOP before
SMTPとか同じネットワーク上からしか送信出来ないしくみがあるんだな。
とりあえずセキュリティは考えないで単純に送るしくみだけ作ってみよう。
多分ポート25でサーバーにつないで以下の手順でデータを送れば出来るのだろう。
←ポート25でサーバーに接続
→220 なんちゃらが返ってくる
←HELO 127.0.0.1とか送る
→250 なんちゃらが返ってくる
←MAIL FROM:<送信者アドレス>
→250 なんちゃら
←RCPT TO:<宛先アドレス>
→250 なんちゃら
←DATA
→354 なんちゃら
←昨日作ったメールのデータ
←.
→250 なんちゃら
←quit
ピリオドが終端だとすると、メール本文に「.」だけの行があった場合どうなるんだろう。とりあえずこちらは先に調べておこう。
ふむふむ、今はHELOの代わりにEHLOを使った方が良いらしい。「.」が行頭にくる場合、「..」に置き換えると良いらしい。
さて、TCP/IP通信の処理を組もう。と思ったが、壁が。Windows
CEはCAsyncSocketやCSocketが使えないので通信処理の組み込みが難しい。
かと言ってWinsockの通信を自力でやるのも面倒だ。
調べてみるとCSocketのサブセットのCCeSocketが使えるらしい。とりあえずCSocketで組んでみよう。
(試行錯誤)
なんとか通信部分完了。簡単に書くと
・CSocketのサブクラスを作る
・Connectでサーバーに接続
・OnReceiveでデータ通知を受け取る
・Receiveでデータを受け取る
・Sendでデータをほりなげる
・終了したらShutdownした後終了。
OnReceiveでメッセージを受け取って、220とか250とか来たら次のアクションに移る。 横着だけどOnTimerを使って5秒間アクションがなかったらタイムアウトで切断する。
これでやってみる。EHLOを使ったら、2回に分けてメッセージが飛んできて判定が面倒なのでHELOを使う。
さぁ、実行だ~
昨日のメールデータ作成に続き、そのままTCP/IPでデータ送信

Telnetのやりとりを自動でやる感じ

Beckyで受信~
やた~~~メール送れた~ばんざ~い。
多少力技でやってるので他のサーバーでもちゃんと動くかは分からないがまぁとりあえずはよしとしよう。
さて、これでPC上からは添付付きのメールを自力で送れたので、今度はCEへの移植作業へと移る。 Unicodeでプログラム組んだので、コードで修正するのはCSocketぐらい。上手く動くといいな~。
と思いつつやや大きめのファイルを添付してみると添付ファイルが上手く開けない事が発覚。 調べてみると受信時Base64のデータが2kb毎に1バイト改行コードに置き換わってしまっている。なぜだろう。
[PHP-users 20626]Re: mail関数で文字数制限?
どうやら1行1000文字制限があるらしい。面倒だけどRFCを見てみる。
確かに1000文字と書いてある。というわけでBase64のエンコード処理に300バイト単位で改行を入れてみる。
再度挑戦。OK。完璧。
つづく~
Posted by ねふぁ at 10:31 午後 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
昨日はメールの文字コードが日本語の場合ISO-2022-JPらしいのでPocket PCはUnicodeなので変換方法を調べなきゃって所で中断。
さて、 今日は文字コードの変換方法を調べようと思ったけどcharsetが指定できるって事はunicode指定すれば変換無しでそのまま送れるのではって事でunicodeでメールが送れるかの実験。
Beckyはメールの文字コード指定ができたので、文字コードをUTF-8にして送ってみる。ヘッダを見てみると
Subject: UTF8コード
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
8ビットになったので、Content-Transfer-Encodingと言うのが追加された様だ。 これで変換無しにPocket PCから直接送れるかも。と思ったが、
・Pocket PCはUCS-2らしい
・安全を考えると7bitの方が
・ココログがunicodeのメールちゃんと受け取ってくれるか分からない
ので、やっぱりISO-2022-JPへの変換方法を探る事とする。
WideChartoMultiByteを使ってUnicodeから直接JISに変換できれば楽なんだけど、Pocket PCでは出来るか分からないしやりかたが良く分からないのでとりあえずJISになれば良いのでUnicodeからSJISに変換してJISに変換する事とする。
試行錯誤してなんとかでけた。半角カタカナはISO-2022-JPの規格外なので、半角カタカナは全角カタカナに変換。
NoEditorが文字コード指定して出力できるので、NoEditorでJIS保存したテキストとバイナリ比較して検証~。
参考:漢字コードチェックと変換
うにこどからじすへの変換そーす (これはSJIS)
これで昨日のBase64変換コードを使って、mail形式にデータを吐き出す所までは出来るな。
と言うわけで

テストプログラムを作ってみる
テストプログラムで吐き出した結果 (これはISO-2022-JP)
こんな感じかな?Beckyのメールデータに直接データをほりこんでみる。

見れたどー
良いみたい(^-^)v 添付ファイルも正常に開けました(^-^)v
さぁ、後はメールサーバーと通信してこのデータをほりこむだけだ~。ってここからがまた厄介なんですけどね~。つづく~。
Posted by ねふぁ at 11:25 午後 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)
もば絵をココログに簡単にアップ出来るようにしてみよう。と、思った。 作者がプログラムを開発するまでの道のりをリアルタイムで残していくと面白いかもしれないので、試みてみる。
さて、今回のテーマは「もば絵をココログに簡単にアップする」方法である。もば絵って何?って人はホームページの方を見ていただきたい。
まず、目的は
・描いたもば絵をココログにテキスト文書と一緒にアップする
事である。これに対する手段としては分かっている範囲では以下の方法がある。
・メール経由で送信
メリット:簡単
デメリット:単純にテキストと添付ファイルのみ
・直接サーバーに送信
メリット:HTMLタグ等複雑な構成が送れる。
VGAサイズのもば絵等、サムネイルをクリックすると大きい画像を表示、と言う風に出来る
カテゴリの設定が出来る
デメリット:処理が複雑
ubicastが直接サーバーとやりとりをしている様なので、なんらかの方法で直接サーバーに送信は出来る筈である (HTTP経由で擬似ブラウザの様な事をやっているのだろうか?)。しかし、 ココログのベースとなっているCGIのしくみを理解する必要があり、かなり厄介だし面倒だ。
よって、今回は簡単なメールによる更新手段を取る事とする。
さて、メールによる更新手段を取るとして、実際どうやってメールを送るかが次のポイントとなってくる。以前幻彩2の開発初めに、 描いたもば絵をPocket Outlookに渡し、メールで送信できる状態まで持っていくプラグインを作った事がある。 これと同じしくみで、他のソフトに本文と添付ファイルとしてもば絵を渡してやる方法も取れるが、 今回はもうちょっと進んで自力でメール送信する所までやってみたい。
プログラムとしては幻彩2のプラグインの形式にする。やる事は
・プラグインの画面に「メール送信」のボタンを表示
・以下の項目を設定可能とする
使用する接続設定
SMTPサーバー名
ユーザー名
パスワード
メールアドレス
送信先
件名
本文
・送信ボタンが押されると、現在作成中のもば絵を添付ファイルとしてメールを送信する。回線の接続・切断も自動で行う。
FTP送信プラグインを既に開発しているので、モデム等による回線の接続・切断は出来る。今回の課題としてはメールの送信方法である。
メールの通信プロトコルについてはほとんど分かっていないので、ここから調べる事になる。
恐らく、やり方としては
・APIに頼る
・自力で通信処理を全部やる
があると思う。APIはMAPIかTAPIあたりを調べれば分かるのだろうか。WinInetかも知れない。
まずは楽なAPIに頼る方法を調べ、それがだめな場合面倒だが自力で通信を行う事とする。
多分SMTPはテキストでのやりとりがメインだろうから、なんとかなるだろう。
恐らくメールの送信手順としては以下の様な物だろうと想定してみる。
・メールの送信形式にテキストを揃える
もば絵はuuencodeやbinhex等、テキスト方式に変換し添付ファイルにする
・相手先に接続
・ユーザー名とパスワード送信
・メールのデータを送る
・接続を閉じる
もば絵を添付ファイルとしてくっつける処理が厄介そうだ。バイナリデータを添付ファイルとしてくっけてくれるAPIがあれば良いが、
なかったらこのあたりも作らなくてはならない。
POP before SMTPの処理も面倒かもしれない。とりあえずPOP before SMTPは無しにしておいて、
出きそうであれば考えよう。
以前メールの送受信はユーザー名等が経由サーバーに筒抜け、と読んだ事がある気がする。
少し検索した所SSLやAuthと言ったキーワードがありそうだが、APIがここら辺やってくれるかもしれないので、
セキュリティっておいしいの?って事でとりあえず置いておく。
さて、メール関連のAPIを探してみよう。良いAPIを探す事がプログラミングの重要なステップの一つである。 どうやってAPIを探すかであるが、大体次の二つの方法で探している。
・googleで検索
・MSDN Library内を検索
検索する際重要になってくるのが検索に使うキーワードだ。今回は「MAPI」「API」「Win32」「SMTP」あたりか。
「MAPI メール 送信」でgoogle検索してみる。MAPISendMailと言う関数があるらしき事を発見。
「MAPISendMail」で検索してみる。
幸先良い。言語が少し異なる様だが、API名が分かれば良いので、キーとなりそうなAPIを抜き出してみる。
・SetMAPIRecipDesc(送信先の設定?)
・MAPISendMail(メール送信の実行?)
この2つぐらいだろうか。MSDNを「SetMAPIRecipDesc」で検索してみる。見つからない。独自関数だろうか?
再度googleで検索してみる。このページしかヒットしない。
どうやら一般的な関数ではなさそうだ。MAPI関数はMAPIで始まる様なので、再度Setを除いた「MAPIRecipDesc」
で検索してみる。
構造体をいくつか作って、MAPISendMail関数で一気に送るらしい。
ファイルのエンコードもしてくれる様なのでかなり簡単だが、
IEの電子メールの設定で使用するメールソフトが設定出来る、とある。
と、言う事は、私の様にデスクトップではBeckyを使っていたり、Pocket
PCではnPOPを使っている場合MAPIは使えないのではないだろうか。
確かめてみるため、とりあえずデスクトップ上で簡単なメール送信プログラムを上記サンプルに沿って作ってみる。
いざ、実行。

きっとだめだろな~

だめだった~
やぱ、だめでした。 MAPI_E_LOGIN_FAILUREのエラーが返ってきたので多分メーラーが設定されていないのが原因でしょう。
と、言うわけで、作成B決行。面倒だけど自力でSMTP通信を行うしかなさそうです。 となるとファイルのエンコード方法もしらべなきゃ。面倒だ。
とりあえずする事は二つかな。
・SMTPの送受信方法
・ファイルのエンコード/MIME添付方法
ファイルのエンコードの方が簡単そうなので、エンコードから始めよう。 Beckyで良く使っているエンコードはBase64なのでBase64をgoogleで調べてみる。
データを3バイト単位で区切って、最後あまったら「=」をつけるらしい。 その3バイト24ビットを6ビットづつ分割してテーブルに従い文字列にする。
ってーと、例えばデータが
0x7B 0x3F 0x9D
とかすると、
0111 1011 0011 1111 1001 1101
となって
011110 110011 111110 011101
ってなったりして
30 51 62 29
って事になって、ASCIIコード順じゃないのが面倒だな。
c x 8 b
って事ですか。これでデータが1.33倍に膨れるわけだな。フリー版でBMPファイルの添付ファイルを付けられた場合、 VGAサイズで640x480x3 x1.33でワーク用のデータが約1.23MBか。とりあえずプロ版専用って事にしとこう。
あ、サンプルのエンコード用ソースコードも提供してる。ありがたく使わせてもらおう。
参考リンクにMIMEについての説明もあるな。
丁寧にメールの形式も書かれてる。こうだな。
Date: 日時
From: 送信者アドレス
To: 受取人アドレス
Subject: 件名
Mime-Version: 1.0
Content-Type: multipart/mixed: boundary="バウンダリ"
This mail is a multi-part message in MIME format.
--バウンダリ
Content-Type: text/plain; charset=iso-2022-jp
本文
--バウンダリ
Content-Type: application/octet-stream; name="ファイル名"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="ファイル名"
Base64エンコードしたファイルデータ
--バウンダリ--
以前何かでバウンダリの文字列は本文等に出てこない文字列を指定する、
って聞いた気がするのでNFCANVASBOUNDARY1とか固定しといて、万が一該当文字列があったら変更する様にしとこう。
日時は「Tue, 13 Aug 1996 01:23:00 +0900」か。
+0900は日本の場合固定で他の文字列も桁数が固定だろう。これは時間を取得して埋めればOKかな。
本文はcharsetで日本語に指定しておけば大丈夫だろう。件名は日本語で大丈夫かな?って言うか、
Beckyのメールのヘッダを見てみれば良いのか。
そのまま日本語入れれば良いらしい。でもISO-2022-JPってJISらしいけど、少なくともPocket
PCはUnicodeだから文字列の変換は必要だな。
widechartomultibyteとiso-2022-jpで検索~。
と思ったけど今日はここいらで撤収~。
Posted by ねふぁ at 09:29 午後 日記・コラム・つぶやき, 開発 | Permalink | コメント (0) | トラックバック (0)