Swift Playgrounds 入門コンテンツの解説サイト作りました

少し前からサイドバーで紹介してますが、Apple がリリースしているiPad向けプログラミング学習アプリ「Swift Playgrounds」の攻略サイトというか、コード例と解説を掲載したサイトを作りました

Swift Playgroundsはアプリ内で教材コンテンツを追加ダウンロードする仕組みになっていますが、その入門コンテンツである「コードを学ぼう」の1と2の全ステージを本日ようやく網羅しましたので改めてご紹介。

プログラムに唯一絶対の正解はないので、単なる攻略サイトみたいなものを作るのは野暮かと思いましたが、それでも「プログラミングを勉強したいけど、身近に聞ける人がいなくて先へ進めず諦めてしまった」なんて不幸が回避できるならと思い、コードはあくまで正解“例”であることを強調しつつ、アプリ内の出題でカバーしきれてない部分の解説を丁寧にするよう心がけました。さっそく親子で参考にしていただいたというコメントもいただきやってよかったなと。

しかしやっと1,2が終わったとほぼ同時にPlaygrounds自体がアップデートされ「コードを学ぼう」も3がリリースされてしまいました。個々の解説を丁寧に書きすぎて結構時間がかかってしまったので、ちょっと今すぐ続きに着手できるかはビミョウな気持ちです(^^;)。まぁ、ざっとみた感じ3は基本を離れてよりクリエイティブな内容に寄っている印象なので、このサイトの役割としては少し範囲外かなという気もしています。Swiftの基本文法やループ、条件分岐、変数、配列といったプログラミング言語に共通の概念については「コードを学ぼう」1と2で一通り触れており、そのフォローという意味で一区切りかなぁと。まぁ1,2の反響や要望をみてまた考えます。

英語版が公開された時にいくつかのITサイトの連載やブログで紹介されたものはありますが、3月に日本語化されてから本格的に全ステージを網羅したものはたぶんまだなかったと思うので、まだ不完全ながらも、これからPlaygroundsにチャレンジしてみようと思う人の助けになればなと思います。

タオルグリップ法を支援するiPhoneアプリのプロト作って見た

タオルを短時間握るだけで血圧が改善できるというハンドグリップ法なるものの記事を見つけ、iOSの通知機能の手習いで支援アプリを作って見た。

こんな感じで、アプリ起動してスタートしておくと、以後は他のことしてても定期的に通知が来るという簡単なもの。片手でタオルを握り、もう片方でスマフォをいじってればいい、という。どうだろ、ちゃんと作り込んだらニーズあるかしら。

13260069_10209552332352030_4460919170323275006_n

技術的にはあまり面倒な部分はなかった。実際にはアプリがフォアグラウンドにいる時はそのアプリ自身の通知は受け取れないので、スタート後はホームを押なりスリープするなりしてもらうか、きちんと実装してアプリがフォアグラウンドにいるときにはアプリ上にメッセージが出るよう同期処理をする必要がありそう。スタートした後、自身で終了するのが技術的には可能なんだけど、ガイドライン的には非推奨っぽい。

でまぁ作ってひと月ほど立つんですが、まぁほとんどの日は忘れますねw。あと防水端末でお風呂で使いたいなぁとか。そういう意味ではAndroidで作るべき?

あと一分休憩をいれることになってるけど、左右交互なら別にいらなくないのか?とか。今は、右->休憩->左->休憩->…だけど、休憩を挟まず左右交互にやるエクスプレスモードも作りたくなってる今日この頃。

KeyRemap4MacBookでSublime Text2を除外する

今日、Facebook経由でSublime Text2というプログラマ向けテキストエディタを知り、ヨサゲなので使い始めてみました。とりあえず何がスゴいかはこちらの日本語入門動画がオススメです。

で、試していて最初に困ったのが、Ctrl-AがEmacsキーバインドの行頭移動ではなく全選択になっていた点。さっそくカスタマイズしようとしたらそんな設定はどこにもない。あぁ、そうかMacのキーバインドをカスタマイズするKeyRemap4MacBookでWindowsライクにしてたからな。Emacs、Terminal、VMWareなどでは適用除外してくれるのですっかり忘れてた。しかし、標準ではKeyRemap4MacBookがSublime Text2などという新しいエディタを知っているわけもなく、除外設定もありません。

ということで、こちらの記事を参考にさせていただき、自作設定を追加しました。まず、元となる標準設定の、Use PC Style Copy/Paste、Use PC Style Undo、Use PC Style Select All、Use PC Style Save(それぞれTerminalやEmacsを除く版の方)の4つの設定を「/Library/org.pqrs/KeyRemap4MacBook/app/KeyRemap4MacBook.app/Contents/Resources/include/checkbox/for_pc_users.xml」から引っこ抜いてきます(<item>~</item>がひとまとまりです)。次に、KeyRemap4MacBookの設定パネルから「Misc & Uninstall」タブを開き「Open private.xml」をクリック。Finderで表示されたウインドウをエディタで開き、しかるべき位置にペーストします。元のfor_pc_users.xmlを直接編集してしまうと、おそらくバージョンアップ時に上書きされてしまうので、必ずカスタム設定はprivate.xmlの方に書いておくようにしましょう。

で赤字の位置を修正します。

  • Sublimeのアプリ名を認識させる為にappdefタグを追加(ちなみにcom.sublimetext.2はアプリバンドルの中のinfo.plistを見ました)。
  • identifierタグの中身がカブると怒られるので、private.や_and_sublimeを追加
  • notタグにappdefで定義したappnameを追加

以上。保存し、KeyRmap4MacBookコントロールパネルで「Change Key」タブに戻り、「ReloadXML」ボタンを押せば項目一覧の一番上に新設定が出現するはずです。

<?xml version="1.0"?>
<root>
   <appdef>
        <appname>SUBLIME2</appname>
        <equal>com.sublimetext.2</equal>
    </appdef>

    <item>
      <name>Use PC Style Copy/Paste</name>
      <appendix>(Control+C to Command_L+C)</appendix>
      <appendix>(Control+V to Command_L+V)</appendix>
      <appendix>(Control+X to Command_L+X)</appendix>
      <appendix>(Except in Terminal, VM, RDC, Emacs, X11, Eclipse, SublimeText2)</appendix>
      <identifier>private.remap.copy_paste_winstyle_no_term_and_sublime</identifier>
      <not>EMACS, TERMINAL, VIRTUALMACHINE, REMOTEDESKTOPCONNECTION, X11, ECLIPSE, SUBLIME2</not>
      <autogen>–KeyToKey– KeyCode::C, VK_CONTROL, KeyCode::C, ModifierFlag::COMMAND_L</autogen>
      <autogen>–KeyToKey– KeyCode::V, VK_CONTROL, KeyCode::V, ModifierFlag::COMMAND_L</autogen>
      <autogen>–KeyToKey– KeyCode::X, VK_CONTROL, KeyCode::X, ModifierFlag::COMMAND_L</autogen>
    </item>

    <item>
      <name>Use PC Style Undo</name>
      <appendix>(Control+Z to Command_L+Z)</appendix>
      <appendix>(Except in Terminal, VM, RDC, Emacs, X11, Eclipse, SublimeText2)</appendix>
      <identifier>private.remap.undo_winstyle_no_term_and_sublime</identifier>
      <not>EMACS, TERMINAL, VIRTUALMACHINE, REMOTEDESKTOPCONNECTION, X11, ECLIPSE, SUBLIME2</not>
      <autogen>–KeyToKey– KeyCode::Z, VK_CONTROL, KeyCode::Z, ModifierFlag::COMMAND_L</autogen>
    </item>

    <item>
      <name>Use PC Style Select All</name>
      <appendix>(Control+A to Command_L+A)</appendix>
      <appendix>(Except in Terminal, VM, RDC, Emacs, X11, Eclipse, SublimeText2)</appendix>
      <identifier>private.remap.select_all_winstyle_no_term_and_sublime</identifier>
      <not>EMACS, TERMINAL, VIRTUALMACHINE, REMOTEDESKTOPCONNECTION, X11, ECLIPSE, SUBLIME2</not>
      <autogen>–KeyToKey– KeyCode::A, VK_CONTROL, KeyCode::A, ModifierFlag::COMMAND_L</autogen>
    </item>

    <item>
      <name>Use PC Style Save</name>
      <appendix>(Control+S to Command_L+S)</appendix>
      <appendix>(Except in Terminal, VM, RDC, Emacs, X11, Eclipse, SublimeText2)</appendix>
      <identifier>private.remap.save_winstyle_no_term_and_sublime</identifier>
      <not>EMACS, TERMINAL, VIRTUALMACHINE, REMOTEDESKTOPCONNECTION, X11, ECLIPSE, SUBLIME2</not>
      <autogen>–KeyToKey– KeyCode::S, VK_CONTROL, KeyCode::S, ModifierFlag::COMMAND_L</autogen>
    </item>

</root>

dgKeyframe2Chapeter 1.3をリリースしました

TMPGEncシリーズが書き出すチャプター情報ファイル.keyframeをmp4box等でmp4ファイルに埋め込める.chapters.txtに変換する拙作ツールdgKeyframe2Chapterを1.3にバージョンアップしました。ダウンロードリンクはこちら。リンク先記事のコメント欄でいただいた要望、

  • 24fps(厳密には23.976fps)のソースに対応

という更新内容です。keyframeファイルは通し番号のフレームナンバーなので、対象ファイルが30fpsか24fpsかで変換後の時分秒の値が全然違うものになってしまうわけですね。指摘されるまで考えもしてなかったw。

まずは単純にプルダウン形式で選べるようにしておきました。ファイル名に_24とかついてたら自動判別、、とかも考えたけど、たぶんdgシリーズを使ってる人はファイル名は専用フォーマットを守っているだろうとか(^^;)。

一応とあるタイトルで変換後の数字とTMSR4上での表示を見比べてみましたが大丈夫な気がしてます。もし不具合などありましたらお知らせ下さい。

AppStore売り上げ監視アプリAppSalesの微修正

AppStoreのアプリ売り上げをiPhoneやiPadでチェックできるAppSales-Mobileというオープンソースアプリがあります。Appleが提供している開発者向けWebサービスiTunes Connectにログインして最新データを取得し、グラフなどで売り上げ状況を確認できます。

IMG_2411オープンソースで配布されており、自分でXcodeでビルドして実機にインストールする必要がありますが、そもそもが開発者向けなのでそこら辺は楽勝でしょう。

さて、そのAppSalesでデータ取得後に「Downloading reports from iTunes Connect failed. Please try again later or check the iTunes Connect website for anything unusual. Could not login. Please check your username and password.」というエラーが出るようになりました。iTunes Connect側のHTMLが変わったり、なにかエラーが出ている時には起きがちなことだし、データ取得自体はちゃんと出来てたのでしばらく放置していたんですが、σ(^^)のプログラミング師匠の田中さんが原因を突き止めて教えてくれたので、許可をいただきシェアしておきたいと思います。

原因としては、iTunes Connectにログインできているかをチェックする判定がNGになっているせい。それをしているのが、ReportDownloadOperation.mの252行目辺りのここ。

NSString *signoutSentinel = @"Sign Out";

画面内に「Sign Out」というテキストリンクがある=ログインしている、とロジックみたいです。ところが、現在のiTunes Connectが(日本語環境の人に対して)実際に返している文字列は“サインアウト”。ということで、

NSString *signoutSentinel = @"サインアウト";

とすることでエラーが出なくなりました。もしくは、田中さんのオススメでは、

NSString *signoutSentinel = @"sign-out";

とclass属性に使われている文字列を使うことで、将来更に文言や言語判定ロジックがかわった時にも対応できるのではとのことです(全HTMLレスポンス中から検索してるからタグや属性を指定しても良いそうです)。

実害は少なかったとは言えやはり気になっていたので、スッキリしました。ありがとう田中さん!お礼に最新アプリ、iPad向けの(MicrosoftのVisioみたいな)ダイアグラム図作成ツールViDiaの宣伝リンク貼っときます