Xcodeふたたび

久々に本業でiOSアプリケーションを作る事に。正直なところ「やりた***」が、それもArduino方面で遊ぶための糧を稼ぎ出すため。覚悟を決め、カチッと頭を切り替えた。

今回のそれはキャリヤ版iPadがターゲットで、サーバとの間で通信を行う。扱うデバイスはGPSとカメラ。機能的な要点はタッチパネル上での手書き署名とGoogleMap。これらをゼロから書いたら大変だが、たぶん以前使ったUIWebViewで行けるだろうと判断、まずはここから調査を始める事にした。

するとどうやら今ではWKWebViewという新しい仕組みが推奨の様なので、早速これを試してみることに。だが、3年ぶりのXcodeで既に右も左もウラシマタロウ状態。さーて困った、とググってみれば出てくるのはSwiftの例ばっか。それもStoryBoard(俺はこれが生理的に好かん)からという例のパターンばかりで、早くも心折れそうになった。

それでもどうにか、手持ちのiPadでWKWebViewにURLを与えて動かすところまでは進んだ。そこからCANVASだgeolocationだセキュリティだプライバシーだをひとつずつ片付けていって、どうにか必須機能の全てをWKWebView内で動作させるるところまで辿り着くまでに約2日。まだ何点か問題・課題を残しているし、工期は2ヶ月と決して余裕はないが「これなら恐らく大丈夫」と今はひと安心な段階。

しかしまあ、うっかりミスると煙が出るわ感電するわなArduinoとくらべ、この過剰サービス懇切丁寧な開発環境と、ミスっても「あ、いけね」でいくらでもやり直し可能、というこの違い。お釈迦様の掌の上の悟空になった気分である。はぁ。

#備忘録1 iframe内から親documentの要素にアクセスする際に指定するコンテキストは[window.parent.document]。[parent.document]と説明しているサンプルを多数見るが、これではダメ。

相模原市の歴史を辿る

時間ができたので再度思い出の町、相模原市へ。今回は、かつて休日によく訪れた場所を歩いてみることにした。

まずは市立博物館。お目当ては相模大野駅周辺のジオラマで、これは昭和50年頃のそれ。右手奥、オレンジ色の屋根が駅。左側の鉄塔は米軍病院のそれで、あの頃はこれが駅前から真正面に見えた。静かで、のんびりとした街だった。時折上空を通過する戦闘機の轟音で窓が揺れたのも、今となっては懐かしい。あの時、パイロットの眼下にはこんな光景が広がっていたのだろう。

Canon EOS 6D (24mm, f/4, 1/125 sec, ISO6400)

次は麻溝公園。子供が小さかった頃にはよく出かけたもんだが、あれからはや数十年。生憎の天気ではあったが平日とあって人も少なく、落ち着いて歩くことができた。

ここにはふれあい動物広場というのがあって、こういうのを間近に見られるのがイイ。無料だし。

Canon EOS 6D (70mm, f/2.8, 1/250 sec, ISO1600)

Canon EOS 6D (200mm, f/5.6, 1/250 sec, ISO800)

そこから隣接する相模原公園へ。ここには大きな温室があって、変な植物がたくさん。

Canon EOS 6D (90mm, f/8, 1/45 sec, ISO6400)

Canon EOS 6D (90mm, f/8, 1/250 sec, ISO5000)

Canon EOS 6D (90mm, f/8, 1/250 sec, ISO4000)

Canon EOS 6D (90mm, f/8, 1/125 sec, ISO6400)

Canon EOS 6D (90mm, f/8, 1/180 sec, ISO6400)

さてこの2つの公園、合わせてその広さ実に60ha以上(!)。この広大な一帯が、かつては陸軍の演習場だったというのをご存知だろうか?  それが戦後米軍に接収され、返還後に麻溝公園は市立の、そして相模原公園は県立のそれとして開園したのだそうな。相模原市内には他にも広い公園が多数あるが、みな同じ理由とか。

今や政令指定都市となった相模原市の歴史、特に昭和の初めから戦後にかけてのそれは興味深い。もうすこし調べてみようか、という気分になってきている。

「でもシアワセなんて どう終わるかじゃない どう始めるかだぜ」

「牧神の午後への前奏曲」で音楽の世界の奥深さに開眼するまで、俺は田舎のギター小僧だった。その頃俺が愛好していたのは、当時既に解散していた「はっぴいえんど」という名のバンド。中でもそのデビューアルバム「はっぴいえんど」の中の「はっぴいえんど」という曲(ヤヤコシイ!)がいちばん好きだった。タイトルは、そのいっぱつめのサビ。それは今でもずっと、心の中にある。

「でもシアワセなんて 何を持ってるかじゃない 何を欲しがるかだぜ」

これが2発目。今なら「そうそう、そうだよな!」だが、当時は「え、そうなの?」だった。要は「世間知らずのガキだった」ということ。でもあの年頃ってきっと、誰だってそうだったろう。

今日、久々にこれを聴いて気持ちが少し楽になった。実はここ暫く、いろいろあって身も心もフトコロもすっかり疲弊していて気持ちも後ろ向きになっていた。が、ここでまた欲しいモノやりたい事に後押しされて、前に進む気になった。いまは明日が楽しみ!

手書き署名をサーバに保存する

ひさびさに本業の話題(笑)。

納品とか受託作業の完了の際とか、ひと昔前までの「受領印」に代わって「タブレットへの手書きサインでOK」というケースが増えてきている。今回これが要求され、以前試しにやったのを復習。

手書き署名=静止画像だが、これがローカルに保存されたものであればフォームエレメントのひとつとしてサーバにアップロードするのも容易である。だがこういう局面でのそれは、煩雑かつ余計な手間をユーザに強いる事になるのでNG。そこで登場するのがHTML5のCANVASというタグで、文字通りここにはいろんなものを書いたり貼ったりすることができる。今回は白地のCANVASに指かマウスでサイン(=お絵描き)をして貰い、それをサーバにアップロードして保存するというところまでの話。

結論から言うと今回は「Fabric.js」なるものを使う使わせて貰う事にした。機能が豊富なぶん記述が冗長になりがちなCANVASの振る舞いを上手くラップしてくれている上、扱うデータ量が大きくなりすぎずこの様な用途に最適、という判断からである。ただこれを<INPUT TYPE=”FILE”>でひとまとめに、というのができれば幸だがそうはいかない。具体的には、署名者の「これで良し」のタイミングで

1.  CANVASの内容をSVG
2.  1で得られたSVGテキストを不可視フィールドの値に(代入)する
3.  2を含むフォームをsubmit

までがクライアントの動作。これに呼応してサーバ側では

1.  不可視フィールドの内容からSVGをファイル化
2.  1をPNGに変換
3.  保存

と、こういう流れになる。サーバ側の動作はもう少し最適化できそうだが、当面これで行く。

以前は大変な思いをした局面だが、つくづく「いい時代になったもんじゃのう」としみじみ。

# これで仕事終わりじゃないんだが備忘録代わりに

追記:  署名がされていない状態でsubmitされないようにするため、SVGのpathを数えるところで小ハマリ。XMLは好かん。

追記:  なんとiOSのWKWebViewがJavascriptのalert/confirm/promptをガン無視! どうすりゃいいのか、これから考える。

追記:  webview.UIDelegateをselfとする事によってJavascriptのalertをフックする事ができた。あとはこのタイミングでrunJavaScriptAlertPanelWithMessageを実行すれば吉。てか、ここまで用意してあるならデフォルトで動くようにしておいてくれればいいのに。

Falla “Danse rituelle du feu”

おなじみファリャの「火祭りの踊り」。以前ルービンシュタインのこれをTVだかビデオだかで見て以来、ピアノ曲という印象が強い(YouTubeにもあった)が元はバレエ「恋は魔術師」の中の1曲である。それを先週の「ららら」で見てヤル気になり、イッキに仕上げてみた。