時差プラス 1.4.1

ltp1_4_1

世界各地の時間を確認できるiOSアプリ・時差プラスをアップデートしました。
App Store

iOS 9に対応
対応OSをiOS 9.2以降とし、それに伴って検索画面などを少し変更・修正しました。

4.7インチと5.5インチの画面に対応
iPhone 6なら5つ、iPhone 6 Plusなら6つの都市を一度に表示できるようになりました。

都市の追加
タシケント(ウズベキスタン)、ハノイ(ベトナム)、カトマンズ(ネパール)、イスラマバード(パキスタン)、カラチ(パキスタン)、トビリシ(ジョージア)、バクー(アゼルバイジャン)を追加しました。
大別するとアジアの大きな都市と南コーカサスの都市です。タシケントにはいつか行きたいです。
南コーカサスの都市は、グルジア→ジョージアへ読み方が変わったというニュースをきっかけに追加しました。アルメニアも同じ時間帯ですね。アゼルバイジャンはサマータイムがあったので、併せて追加しました。

この他に、ウィジェットの初期状態の修正などを行いました。

海外旅行や海外のニュースを見る際などに、ぜひご活用ください。


虚構新聞アプリも10月のリリースから1.0.1と1.0.2の2度のアップデートを行っています。
App Store

ナビゲーションの改善やiPad用の表示の改善などを行なって、より使いやすくなりました。
新着記事だけでなく、過去の記事やPodcast、4コマまんがなど、虚構新聞のコンテンツをまるごと楽しめますので、虚構新聞好きの方や虚構新聞に釣られないためにいち早く記事をチェックしたい方はぜひご利用ください。市田さんの描くまんがを読みたい方にもおすすめです。

Air Launcher 1.0.1

icon

Apple TV(tvOS)専用アプリケーション、Air Launcherの最新バージョン1.0.1を公開しました。
更新内容は以下のとおりです。

動画を続きから再生するようにしました。
動画を再生したディレクトリを、履歴として表示するようにしました。
プレイヤーをJavaScriptでカスタマイズできるようにしました。
通信ヘッダにIDを付加しました。
menuBarに関する問題を改善しました。
サーバ削除に関する問題を改善しました。

その他、さまざまな改良を行いました。

C89、3日目 東 ム45bにいます。

tvOSでは、iOSののApp Storeのように「アップデート」のページがなく、
アップデート文章は、App Store内のアプリのページへ行って、さらに一番下のボタンを選ばないと表示されないので、なかなか読んでもらえそうにありませんね。

アップデート内容は、主として動画再生がより便利になるための改善・改良と、問題の修正です。
IDの付加は、AirLauncherで接続するそれぞれのサーバでユーザの識別が必要な場合にご活用ください。

ご注文はApple TVですか?
アップデート文章にも書いてあるとおり、冬のおまつり・コミックマーケット89にサークル参加します。

Nagisa unworks C89 3日目 東ム45b

もともと主催が別にいて、我々は支援のみの予定だったのですが、せっかくだから本を作ってみようとAir Launcherを製作するにあたり調べたことなどをまとめてみました。
「ご注文はApple TVですか?」という何ともあれなタイトルですが、JavaScript(TVJS)とXML(TVML)で作るtvOSアプリの本です。
開発にあたっては公式ドキュメントがいちばんの情報なのですが、
最初は躓いてしまうかもしれないことや、そもそもドキュメントに書いてないことなど含め、
「だいたいこんな感じですよ」が分かるような本を目指しました。
Apple TVをお持ちの方もそうでない方も、「こんなふうに作って遊べるのかー」と思っていただければと。
PDF等での配布は行わないので、当日ぜひお越しくださいませ。

Air Launcher (for AppleTV) をリリースしました

icon

tvOS用のアプリ、Air Launcherをリリースしました。

このアプリは、手持ちのサーバーにある動画ファイルなどをAppleTVで閲覧するアプリです。
元々自分達用に作ってみたもので、いわゆる俺専アプリなのですが、配布もなにかと面倒なのでStoreへ出してしまえばダウンロードも楽だねということで、試しに出したら通ってしまったものです。
ですので、使える人だけ使ってもらえればということで、要望奴隷に服役する予定はありませんのであしからず。

いやぁ、AppleTV便利です。
HDMI連携でAppleTVのリモコン押せばTVの電源ONになって入力切替済み、スリープすればTVの電源も切れる。
自前のサーバーには録り貯めた録画ファイルなどが随時追加されているのですが、リモコンを2〜3タップすればすぐ見れると、快適になりました。

個人的にはこれがあるとないとではAppleTVの価値が1000倍は以上の差があるAir Launcher、これはサーバーを必要とします。
ホームページにはOSX, Windows,Linux, Raspberry Pi(同バイナリでLinkStationも動作確認済)等のサーバーアプリのサンプルがありますので、こちらでお試しになってください。

また、簡単なデモとして既存のサーバーにもサンプルを用意しました。
Air Launcherにて、nagisaworks.com/stv と入力すれば、少し色々なデモが閲覧できます。

このAir Launcher、実際のところは AppleTVでのブラウザアプリのようなものになっています。
概略だけ説明しますと、AppleTVには従来のiOSと同様のSwift/Obj-Cでのネイティブでの動作(Traditional App)と、もうひとつ、TVML, TVJSによる動作(Client-Server Apps)があります。
TVMLは Apple’s Television Markup Language、いわゆるtvOS用のXMLです。
TVJSはそれらを操作するJavaScriptとなります。
Webでいうと、HTMLとJavaScriptのようなものです。
これらはSwiftでUIWebViewを貼ったような感じで、混ぜても使用できます。
最近でいうとReact Nativeみたいな機構でしょうか。
ちなみにAppleTVにはいわゆるWebブラウザの機能はなく、代わりにこの機構が提供されているようです。

Air Launcherの本当の姿はTVML, TVJSを外部から読み込んで実行する機能を提供するアプリです。
ということは、細かいところを端折ると、Webにおけるサーバーとブラウザの関係と同様、XMLをサーバーから配信すればAir LauncherにてAppleTV上に自由にデータなどを表示できます。
AppleTVバンドルのMovie appやMusic app、その他ストアにあるであろう簡単な動画提供アプリなどはTVML,TVJSを利用しているようで、それらと同様の表現は大体Air Launcherを用いて実現できます。

WebのようにClient-Server構成に出来るということは、後から画面や表示内容をいくらでも変更できるということです。
ネイティブだと画面デザインを変えるとなるとコードでの修正&アップデートなど大変です。
また、じゃあ遅いのかなとか思ってしまうわけですが、DOM等は内部UIControlに直結していますので、テンプレートなどいくらか固定されてしまいますが、ほぼネイティブと同様の表現力があります。

メディアの再生はAppleTVのスペックのまま、mp3,m4a等の音楽やmp4等の動画再生、HLS(HTTP Live Streaming)も可能ですので駆使すればライブ配信も可能ですね。

Air LauncherにはXMLを直接読み込み再生などの若干の支援をする機能とJavaScriptを直接実行する二種類のモードを設けています。
通常はXMLモードでよいかと思いますが、さらに細かい処理をしたい場合は直接JavaScriptを使うことができます。
仕様についてはGitHubにサンプルとREADMEを置いておりますのでそちらを参照してください。

また、GitHubに置いているサーバーのサンプルはGo言語で書いてみました。
Goは自前でちゃんとしたHTTPサーバーもあり、クロスコンパイル機能で様々なDevice, OS用に単体バイナリが作れるので楽ですね。
所詮はHTTPサーバーですので、PHPでもRoRでもNode.jsでも、サーバー本体もなければそのへんのレンタルサーバーでも好きなものを使って頂ければ結構です。

サンプルや、TVML, TVJSなどAppleのドキュメントを参照して頂ければ大体はどういったものか分かってもらえるかと思いますが、かなり説明を端折ってしまいましたので、また細かく説明できる機会があればと思います。

虚構新聞アプリをリリースしました

kyoko2
アプリ自体は普通のニュースアプリですが、
変な所で色々と大変でしたので、少しだけ制作後記を。

当初の依頼は虚構新聞ページのモバイル対応に伴うリニューアルでした。
1年前にもリニューアルを請け負っていたので、2回目となります。
アプリも前のものが終了してしまったそうなので、ついでに出来たらいいね程度で。

とはいってもページリニューアル、実は大変な作業でして。
虚構新聞ページ、静的ページで手書きだったのです。
つまり、ページは全てHTMLでWordPressなどのCMS系も一切なしの手書きです。
記事追加されると、ページ間つながりやRSSなども更新の必要がありますが、これも全て手書き。
虚構新聞、それで運用していたとは、編集者に鬼畜です、真っ黒です。

さすがにモバイル対応なども考えた全ページ手直しは難しいのでシステム化を考えるわけですが、
費用的な理由などで動的にさばけるほどの能力を持ったサーバーを借りれそうもないので、
サーバーは同じまま、静的ファイルで行こうと。
静的である以上、モバイルも同一URLでさばくしかないのでレスポンシブルでモバイル対応しようかと。

ということで、作業手順は以下にて。
1.手書きのページからデータを引っこ抜く
2.データからテンプレートにてページ作成するツール作成
3.モバイル用のレスポンシブルなテンプレートページ作成
4.運用を教えこむ

1.はツールを作成して全記事からタイトル・カテゴリ・記事などを分類して抽出。
当然手書きのため、一部狂ってしまうところは手修正。
データ形式は以降の記事追加作業がしやすいようにテキスト+αの形式を構築。

2.は現状の構成を維持するとなると既存ツールなどでは対応できそうにもなく、
また今後のデザイン変更なども考えると可用性も担保しなければならないので、テンプレートエンジンを専用に作成。
RSSや記事間つながりなども再構築して、全ページを静的用に自動作成。
ブログなども更新は記事更新時しかないので静的に仕向ければサーバーに楽ですね。
どこまでを静的に出来るか、出来ないところはJavaScriptなどでどう切り抜けるなど判断難しいところはありますが。
いやはや、虚構新聞だけに使うのはもったいない。

3.は既存のページデザインを損ねずにモバイル時のみうまく表示出来るようCSSも含め各所ページをまるごと再構築。
ページを見ると分かるのですが、結構色々なパーツがあるため、
このぐらいになるとモバイル用にページ分けた方が楽なのですが、よくやってくれました。
運用されているものではよくあることですが、見た目変えずに中身を変えるって大変ですね。

4.はブートキャンプで訓練。失敗したら腕立て100回。
記事更新は、データを追加・ツールにて各種ファイル自動作成・それらをアップロード、となります。

これにて外からの見た目は同じ、ですが運用的にはシステム化してモバイルページ対応、となりました。

レスポンシブルのややこしい罠をくぐり抜け、モバイル用ページが出来たので、
アプリもモバイルページを出せばいいからあとは通知ぐらいつければ形になるんじゃないかなと、ついでに手をかけてしまいまして。
それでなんとなく形になったものの、せっかくなのでもうちょっと見た目よくしとくか、
マンガもPodcastもあるなと思ってるうちにあらぬ方向へと。
UIはよくありそうな形でさっと味付けしてみました。ちょっと虚構ぽい風味も添えてと。
まぁそれでも、作ってみた → んーイマイチ却下、を3〜4回は踏んでしまいましたが。

アプリも静的出力から処理しています。APIなどはありません。
記事一覧などあったりするので、普通そんなことをすると通信処理が追いつかなさそうなのですが、
データ作成時にアプリ側で都合よく処理できるよう細工したりすればよい話で。
・・・全然ついでになってない気がしなくもないのですが、気のせいですかね。

というわけで、世間ではありえないほどチープな環境下でも世の潮流に折り合いつけつつ、うまくシンプルになるように考えてやれば今っぽいことは出来るよという謎な努力をしてみました。

後は、、無駄なリジェクト2回も食らってしまったので言いたいこと色々忘れてしまいました。
今は、某林檎TVをこねこねと。
完全にオレ専アプリなので公開する可能性は低いですが。
アニメ見るの便利ですわ〜

BizCards 2.1.1

BizCards2.1.1
名刺管理アプリ「BizCards」のバージョン2.1.1をリリースしました。
このバージョンでは、iOS 9上で連絡先の編集画面が表示されない問題への対応を行っています。

iOS 8以降を使用している場合、iOS提供の入力画面から独自のものへと変更されますが、これまでと同じようにiOS標準の連絡先Appとデータの受け渡しが可能です。