[Titanium]WebViewの遷移先を横取りする

最近まーったくTiを触れていないのですが。書くと役立ちそうな話題を見かけたのでちょっとだけ。

WebViewを利用したアプリケーションの場合によくあるのが、
特定のドメイン(URL)じゃないページへ遷移する場合は、通常のブラウザアプリ(Safari等)で開く
という要件です。
Ti.UI.WebView で、遷移先(遷移しようとしている)URLを知りたい ~ ‘beforeload’ イベントで url が反映されない件 #titaniumjp #titanium – harukazepcの日記

“[Titanium]WebViewの遷移先を横取りする” の続きを読む

ONLAB Hackathonに行ってきた

IMAG0198.jpg

Open Network Labに泊まりこんで36時間でiPhoneアプリを作る、ONLAB Hackathonに行って来ました。
自分は、モバイラーズオアシスの次世代機能ということで、今開いているお店、早朝や夜間に開いているお店だけを絞り込める営業時間検索機能を開発してきました。

“ONLAB Hackathonに行ってきた” の続きを読む

[プラグイン不要]Chromeのショートカットキーカスタマイズ

Macでどうしても馴染めないショートカットキーが幾つかあります。
一番困るのがGoogleChromeのMeta+h。Windows版ChromeのCtrl+hは履歴を表示なのですが、Mac版ChromeでMeta+hを押すとウインドウが隠れてしまいます。
ブラウズ中に手軽に押してしまうものなので、その瞬間ウインドウが消えてなくなるのはかなり戸惑います。UIが良くできているので、隠れたことはわかるのですが、そのたびに作業が中断するのは辛いです。

で、色々試した末、プラグインも何も入れずにMeta+hをヒストリーに割り当てることに成功したのでご紹介。

keyboard2.png
これだけ。OSのシステム環境設定→キーボード→キーボードショートカット→アプリケーション のところで+ボタンを押して、アプリケーション用のショートカットキーを割り当てればOK。
「メニュータイトル」のところは、素直にメニューにあるテキストをそのまま入れればいいみたい。
menu-1.png

Windows7で音声合成(Text to speech)

ヨメから、「Windowsで中国語テキストの読み上げをできないか」とのご要望をいただいたので、「昔そんなことやったなぁ」と思いながら調べた内容まとめ。普通の読者の方は日本語読み上げだと思いますけど、だいたい同じ手順で出来ます。

手順の概要

 Windowsには、音声合成(SAPI)という機能が搭載されています。これをつかうと、Excelや、Vectorでダウンロードできる各種SAPI対応アプリケーションでテキストを読み上げさせることができます。
 ※なんでWordじゃないのかは謎。
 ただし、Windows7のProfessional程度では英語のランタイムしか搭載されていないので、日本語や中国語を読み上げるためには別途ランタイムが必要。このランタイムがどうも無料で手にはいらないっぽい。UltimateのDVDに入っているという噂。
 一方、SAPIとほとんど同じ機能なんだけど微妙に異なるぽいSpeech Platform Server Runtimeというのがあって、これは各言語ランタイムが無料で配布されている。そして、Speech Platform Server RuntimeをSAPIとして認識させちゃう裏技があるので、これを使えばExcelでテキストを読み上げさせることが出来る!

Microsoft Speech Platformとランタイムのインストール

Download: Microsoft Speech Platform – Runtime (Version 11) – Microsoft Download Center – Download Detailsから、自分の環境にあったSpeechPlatformRuntime.msiをダウンロードしてインストール。Windows7 64bit版の人はx64_SpeechPlatformRuntime、32bit版の人はx86_SpeechPlatformRuntime。「わかんない」というような人はきっと32bit版です。
Microsoft Speech Platformのダウンロード

Download: Microsoft Speech Platform – Runtime Languages (Version 11) – Microsoft Download Center – Download Details
から、必要な言語のTTSランタイムをインストール
 ※「zh」とか「ja」で検索すれば見つかる。
 ※「MSSpeech_SR」で始まるのは音声認識用ランタイム、「MSSpeech_TTS_」で始まるのが音声合成用ランタイム。今回必要なのは音声合成用ランタイムなので、間違えないように注意。
音声合成用ランタイムのダウンロード

Speech Platform Server RuntimeをSAPIとして認識させる

スタート > すべてのプログラム > アクセサリ > コマンドプロンプトを右クリックして、「管理者として実行」。権限昇格のために管理者パスワードを要求させるので入力。開いたコマンドプロンプトで、下記を実行する。

reg COPY “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v11.0\Voices\Tokens” HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens /s /f

 ※または、レジストリエディタを立ち上げて、図のようにコピーしてもよい。
レジストリをコピー

音声合成(SAPI)の言語を変更

 「コントロール パネル > すべてのコントロール パネル項目 > 音声認識 > 音声合成」を開いて「音声の選択」で適切な言語を選ぶ。
 ※ここまでの手順が失敗しているとMicrosoftAnnaしか出てこない。その時はおやつでも食べて考え直す。

Excelで読み上げ

 読み上げコマンドが表示されない – Word – Office.comを参考に、読み上げコマンドを表示させる。
Excelのセルに適当な文章を入力して、読み上げボタンを押すと読み上げられる。
ボタンはここ

謝辞

キーとなったレジストリの変更のアイデアを初め、だいたいのアイデアは下記が出所です。このブログ記事は、下記を元に、最近の環境で実行できるようにまとめ直しました。

日本語や中国語等の音声合成(SAPI TTS)を無料で使う方法(Speech Platform Server Runtimeを裏技で SAPI 5.1として動作させる方法)

指定した時刻までただ寝ているsleepUntil

sxchu_1362335_sleep.jpg

あけましておめでとうございます。初日の出は見に行ったけれど、正月とかあまり気にせず元日からコードを書いています。

さて、お正月にちなんで、ひたすら寝ているプログラムsleepUntilというのを書いてみました。sleepじゃなくてsleepUntilなので、指定した時刻までただ寝ているプログラムです。

sleepUntil (mogya’s gist: 1550431 — Gist)

なんに使うかといいますと、プログラムを夜中に走らせるために使います。
スクレイピングは人が活動していない時間帯に走らせるのが基本なので、夜中1時スタートというのが普通です。これまでは、時計を睨みながらsleep 3000; とかしていたのですけれど、そんな計算は自分でしてくれるプログラムがsleepUntilというわけです。

$ sleepUntil “1:00”

って書けば、sleepUntilは起動と同時に眠りについて、夜中一時に(起きて即座に)終了します。

$ sleepUntil “1:00”;(夜中に走らせたいコマンド)

という具合にしておけば、sleepUntilが深夜一時に終了したあと、(夜中に走らせたいコマンド)が実行されます。実質的に、夜中一時に該当プログラムを起動するようなことができるわけです。

cronでいいじゃないかと言われたらそのとおりなのですけど、一回しか実行しないようなものをcronに書くのはなんだか気がひけるのです。
実行環境が違うとかそういうことも気にしなくていいですし。

時刻のパースはTime.parseに丸投げです。パースしてみて過去の時刻になったときは翌日の時刻に読み替えるようになっています。

【Titanium Advent Calendar 2011:二日目】evalJSの恐怖

【はじめに】

この記事は、@astronaughtsさん企画の「Titanium Advent Calendar 2011」向けに書いています。
@astronaughtsさんは、この企画もそうですけど、それ以外にも関西で最大規模のTitaniumイベントTi.Developers.meetingの主催者でもあります。最初はどうしようかと思うくらいしょぼかったw Ti.Devs.me、諦めずに開催を繰り返して大きなイベントに育て上げた@astronaughtsに、個人的今年のTitaniumMVPを送りたいです。


さて、そんなわけでTitaniumの話題を一つ。Titaniumでは、アプリ内でブラウザが開くwebViewという仕組みを使うことができます。
これを使うと、アプリ内でWEBページを見てもらうことができるので、Titanium以外でもよく使われている仕組みです。これ、意外と怖いということはご存知ですか?

例えば簡単なアプリを用意してみましょう。このアプリは、起動すると、モバイラーズオアシスというサイトをwebviewで開きます。

mo.png
俺ブラウザ — Gist

このアプリの最後に、ちょっとスパイスをかけてみます。

mo1.png

上野駅が蒲田駅に変わってしまいました。これで、モバイラーズオアシスの中の人は、「蒲田駅を検索したら違う位置が表示された」という謎のバグ報告に悩まされることになります。クックック。永久に悩み続けるがいい…

ご自分のアプリのWebViewに上記を仕掛けるとか、絶対やめてください。やめろってば!
冗談はさておき、技術的にこういうことが可能であることは頭においておく必要があります。今回は上野が蒲田になる程度ですみましたが、ニュースサイトの内容を書き換えられたら?ログインしたときにユーザー名とパスワードを他のサイトに送信する仕組みが入っていたら?
webViewとブラウザを同一視していると、あっと驚く手品に巻き込まれてしまうかもしれません・・・

逆に、この手法をうまく使えば、スマートフォンに最適化されていないHTMLに別のCSSを適用して要素を大きく表示させたり、サイドバーを隠してスマートフォン向けのページに見せるようなこともできるかも。
…できるかもしれないのですけど、実際は結構大変です。この記事を書くために色々試したのですけど、evalJSしたJSコードをデバッグする手段が無いので、泣きそうでした。
ちょっと複雑なJSを書くと、なぜか処理が行われなくて途方にくれます。いい思いつきだと思ったんだけどなぁ。

【おわりに】

明日は@rakiさんかな。よろしくおねがいします〜。

GoogleMapsAPI有料化に関して調べてみた

sxc_hu_738173_map_money.jpg

ブログやWEBサイトに地図を表示することが出来て大変便利なGoogleMapsAPIに関して、Googleが有料化を発表したのでビックリしました。

 Googleは、Google Maps APIの利用規約を今年4月に改定し、10月1日から同APIの利用上限を定めることを発表していた。
 現時点で利用上限を超過しても、即座に課金されることはない。利用者には、APIの利用状況を確認する期間が与えられる。その上で、利用上限を超えている場合には「2012年初めごろ」から強制的に課金されるとしている。その場合は、最低30日前に通知されるとしている。
(Google Maps API有料化の詳細発表、該当ユーザーは2012年初めに強制課金開始 -INTERNET Watch)

今一番知りたいことは「どれくらい使ったら課金されるようになるのか」だと思うのですが、自分が調べた範囲では、あまり気にしなくてよさそうです。根拠はこれだ!

maps_limit1.png
(FAQ – Google Maps API Family – Google Code)

Styled Maps というのは最近出来た機能で、GoogleMapsから線路を消したり海の色を変えたりといったデザイン変更が出来る機能です。こちらを使っている場合はちょっと厳しいのですけど、そうでない場合は 25,000 map loads / Day。1ページに大量の地図を埋め込むことは普通ないので、つまり実質25,000 PV/Day ≒ 75万PV/月ということになります。
モバイラーズオアシスが10万PV程度なので、食べログさんとか、大手不動産業者さんレベルにならない限りは課金されないんじゃないかと。30min.さんあたりが微妙なラインかなぁ。

さらに上記ページを見ると、越えた場合の課金金額も書かれています。

maps_limit2.png
(FAQ – Google Maps API Family – Google Code)

25,000を越えたあと、1,000usageごとに4$だそうです。例えば100万PV/月のサイトがあったとすると、約3万3千アクセス/Dayなので超過部分が8300usage=$32。$960/月なので、76,800円/月ということになりますね。
ちなみに、Google Maps API Premier、お値段を公開している代理店を見つけました。85万円/年~だそうです。
GOGA – Google Maps API

追記:Google Maps API Expertの方からコメントがいただけました。

回数は、APIライブラリの読込回数です。
ANN:Google Maps APIへの使用制限の導入について – Google-Maps-API-Japan | Google グループ

ということは、iPhoneアプリなんかは、アプリを起動して地図を表示するごとに1回と考えれば良さそうですね。

画像を使わずにボタンを表示:iPhone専用サイト編

iOS5のMobile Safariから使えるようになったHTML5・CSSを試してみました【前編】 – くらげだらけ(くだくらげのBLOG)で、Web Symbols typefaceというテクニックが紹介されていた。
WebFontという技術を使って、文字の代わりにボタン画像なんかを埋め込んだフォントを使えば、画像ファイルを持たなくてもよく使うアイコンを表示できるよ!というアイデア。
みんながこのフォントを使うようになって、jQueryみたいに高速なサーバからこのフォントが落とせるようになれば面白い技術だと思う。

でも、iOSに限定していいんだったら、[titanium]画像を使わずにボタンを表示の手法を使ってWebFontなしにボタン画像を表示することも出来る気がしたので、やってみた。


machine_dependent_charactors.PNG


machine dependent charactors on iOS5 – mogya

理屈は前回と同じ。Apple SymbolsやLucida Grandeといったフォントは、上記のようなデザインの文字を元々持っている。これらは、同じフォントを持っていないと表示できないからWEBの世界では使わないことになっているけれど、iPhone専用サイトと割り切るのであれば、CSSでフォント指定して上げれば表示することが出来る。
どんな記号が使えるかは、下記を参考に。

長所としては、WebFontを使うより当然高速軽量に表示が出来る。短所としては、iOSの持っているフォントに依存してしまうので、昔のIE専用WEBページと同様、他の機種で見た時の表示が保証されない。
実際問題としては、サンプルをひらいてみると分かるようにWindowsでもけっこう表示できちゃうんだけど、WEBの精神から行くとあんまり望ましくないことなのは事実。「iPhone」といったらiPadもAndroidも含めた全てのスマートフォンで動くものを想像されるお客さまも日本にはいらっしゃるので、利用する時は慎重に利用することをお勧めします。

[PHPMatsuri]Titanium大賞をいただきました

jhmr.gif

PHPな人が集まって一晩中開発を行うイベントPHP祭りに行って来ました。

「mogyaさんPHP祭りは来ないの?」
「最近PHPは全然書いてないのでノーチェックですねぇ。」
増井さんを呼んでTitaniumの話をしてもらうよ」
「今申し込みました(即答)」

というような経緯です。

実際行ってみたら、

masuidrive「この中で、Titaniumをご存知のかた?」(挙手)
masuidrive「Titaniumでプログラムを書いたことがある方」(挙手)
masuidrive「Titaniumでアプリを作ってリリースしたことのある方」(挙手)
masuidrive「今日は初心者向けなので、今挙手された方が聞くような内容はありませんw」

って言われました。そりゃまあそうですよね。

ハッカソンでは、電源検索の無料版「電源検索Lite」を開発して「Titanium大賞」をいただきました。

6253918541_5b2d940be1_o.jpg

そういうわけで、「電源検索Lite」for iPhoneは今Appleで審査中なので、審査が通ればAppStoreに登場する予定ですので、楽しみにお待ちくださいませ。
ちなみに、待ち切れない方は、電源がないお店も検索できる有料版がすでにAppStoreに出ております。