Your SlideShare is downloading. ×
2012.02.28 IAMAS GeekLab #037 MyScripts
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

2012.02.28 IAMAS GeekLab #037 MyScripts

3,687
views

Published on

http://hitoriblog.com/

http://hitoriblog.com/

Published in: Technology

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,687
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
22
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GeekLab #037 02.28 MyScripts and Jailbreak Tweaks, hitoriblog • 本スライドはIAMAS(情報科学芸術大学院 大学 / 岐阜県立国際情報科学芸術アカデ ミー)で赤松正行氏(http://akamatsu.org/)が 主催しているGeekLab (http://geeklab.jp/)の 第37回で使われたものです。12年3月3日土曜日
  • 2. ギーク気取りなiOS使いこなし MyScriptsから Jailbreak Tweakまで12年3月3日土曜日
  • 3.   moyashiについて • 個人ブログ「ひとりぶろぐ」を運営 • 2007年末ごろから、iOS系のニッチなネタ をブログに投稿開始 • 手段と目的の主客が転倒しがち12年3月3日土曜日
  • 4. アジェンダ 1.今ホットなJavaScript開発 環境MyScripts紹介 2.Jailbreak TweakでMyScripts 環境を強化12年3月3日土曜日
  • 5. 今ホットな JavaScript開発環境 MyScripts • 電卓が苦手なのでiOS用式入力計算機や iOS上で使えるプログラミング言語を大 調査(http://hitoriblog.com/?p=4955) • プログラミング言語はたくさんあるが、 現在ある中でMyScriptsが最も実用的12年3月3日土曜日
  • 6. MyScriptsとは? • App Storeで販売中のJavaScript開発 環境 • 350円 (Unit Kay) • ユニバーサルアプリ • 外部キーボード、横画面対応12年3月3日土曜日
  • 7. どんなことが可能? • テキスト処理 • ネットワークアクセス • アプリケーション間連携12年3月3日土曜日
  • 8. 12年3月3日土曜日
  • 9. MyScriptsはJavaScriptの •作成 •実行 •編集 •管理 (※) 機能を持っている ※: 順序入れ替え/削除12年3月3日土曜日
  • 10. スクリプトの作成 • 「+」ボタンでどんどん作成 • URL Scheme経由で、外部からス クリプトのインストールが可能 • スクリプトは四つの属性を持つ12年3月3日土曜日
  • 11. 12年3月3日土曜日
  • 12. ひとりぶろぐ内に あるMyScripts用の スクリプト集。リ ンクをタップする だけでインストー ルが完了。スクリ プトの共有が非常 に簡単! http://hitoriblog.com/myscripts.html12年3月3日土曜日
  • 13. スクリプトの編集 • 編集補助機能豊富 • キーワード(スニ ペット)挿入 • 拡張キーボード • ジェスチャーによ • 予約語等のサジェ るカーソル制御 スト • オートインデント • TextExpanderによ る略称展開12年3月3日土曜日
  • 14. 12年3月3日土曜日
  • 15. スクリプトの実行 • 通常モード時の実行 • 編集モード中のテスト実行 • デバッグウィンドウ • JavaScriptコンソール • クリップボード監視中の自動実行12年3月3日土曜日
  • 16. 12年3月3日土曜日
  • 17. スクリプトの管理 • 順序入れ替え • よく使うものを上に、ライブラリ のように直接触れないものを下に • 削除12年3月3日土曜日
  • 18. JavaScriptエンジン • 見えないUIWebViewが存在 • stringByEvaluatingJavaScriptを利用 • 基本的にはJavaScriptのほぼすべ ての機能が使える12年3月3日土曜日
  • 19. ユーザーインターフェース • WebViewの姿こそ見えないが JavaScriptのものが使える • alert(string) • prompt(string, string) • confirm(string)12年3月3日土曜日
  • 20. MyScriptsの基本 • 超単純なスクリプト • "Test" + "Script"; • 1 + 1; • 実行するとどうなるか?12年3月3日土曜日
  • 21. 12年3月3日土曜日
  • 22. アクション機能 • スクリプト終了時の実行行が返す文字列 を四つのアクションに引き渡す12年3月3日土曜日
  • 23. アクション詳細 •    別のアプリで開く(Open In) •    クリップボードにコピー •    openURL()を呼び出す •    画面に表示12年3月3日土曜日
  • 24. openURL12年3月3日土曜日
  • 25. 入出力が充実 Open In クリップボード URL (myscripts://) (text) MyScriptsで 表示 (WebView等) Open In クリップボード URL (twitter://等) (text / html)12年3月3日土曜日
  • 26. MyScriptsの特殊性1 • 関数、変数を全部のスクリプトで共有 • アプリが完全に終了するまで各種の状 態が維持される • クロスドメイン制約のかからない XMLHttpRequest12年3月3日土曜日
  • 27. MyScriptsの特殊性2 • WebViewにドキュメントをロード できない • document.locationを実行すると openURLが発動12年3月3日土曜日
  • 28. MyScriptsの特殊性3 • document.body.innerHTMLにhtml をセットすることでDOMは利用 可能 • Cookie、WebDatabaseといった ローカルストレージが使用不能12年3月3日土曜日
  • 29. MyScriptsの特殊性4 • 拡張関数をいくつか実装 • COPY(string) • LOGOUT(string) • SAVE_JSON(key, obj) • LOAD_JSON(key) • ASYNC_DONE(string)12年3月3日土曜日
  • 30. MyScriptsの特殊性5 • 特殊な変数 • TARGET(openin/copy/openurl/info) • TEXT • IS_HTML • IS_ASYNC • SONG (title/albumTitle/artist)12年3月3日土曜日
  • 31. MyScriptsの特殊性6 • 特殊なマクロ • #IMPORT • #LIB • 非同期処理の待ち合わせ12年3月3日土曜日
  • 32. 結果として • WebViewに加える制約と引き換えに XMLHttpRequestを制約無く使用可能 • 独自の拡張でiOS上で利用可能なア プリ間連携の手段に全対応している ため、活用範囲は広い12年3月3日土曜日
  • 33. クリップボードの利用 早く 漲ってきた! 寝ろ var a = TEXT.split(“ ”); // [“早く”, “漲ってきた!”, “寝ろ”] // スクリプト最終行がクリップボードへ “【” + a[0] + “】” + a[1] + “【” + a[2] + “】” 【早く】漲ってきた!【寝ろ】12年3月3日土曜日
  • 34. COPY(“てすと”); てすと ※スクリプトの終了時に実行される12年3月3日土曜日
  • 35. openURLの利用 あいう var mes = TEXT.split(“”).reverse().join(“”); // mes = “いうあ” var tw = “twitter://post?message=”; // スクリプト最終行がopenURLの引数に tw + encodeURICompornent(mes); Twitter公式クライアントが起動「いうあ」12年3月3日土曜日
  • 36. URLでテキスト受取り myscripts://run?title=hoge&text=hoge TEXTの中身は 「hoge」に var mes = “hage ” + TEXT + “ fuga”; // mes → “hage hoge fuga”12年3月3日土曜日
  • 37. 起動用URLの作成12年3月3日土曜日
  • 38. 生成したURLが クリップボードにコピーされる myscripts://run?title=LaunchTwitter myscripts://run?title=LaunchTwitter&text=<TEXT>12年3月3日土曜日
  • 39. Touch Icon Creatorの利用 特定のスクリプトを起動する アイコンが設置可能12年3月3日土曜日
  • 40. 登録用URLの作成 myscripts://add?title=LaunchTwitter&script=スク リプトの内容 <a href=”myscripts://add? title=LaunchTwitter&script=スクリプトの内容” target=”_blank”>LaunchTwitter (登録)</a>12年3月3日土曜日
  • 41. Writronとの連携 Writron(リトロン) URL Schemeでの連携が 強力なテキストエディ ター。MyScriptsとの連 携にもってこい。12年3月3日土曜日
  • 42. MyScriptsにparenというスクリプト を作成 渡されたテキストを括弧で挟んで Writronに渡すスクリプト12年3月3日土曜日
  • 43. 12年3月3日土曜日
  • 44. 12年3月3日土曜日
  • 45. 12年3月3日土曜日
  • 46. openURLによる連携で、MyScripts がWritronの外部テキスト処理エン ジンとして機能した。12年3月3日土曜日
  • 47. Open Inの利用 最終実行行からの返り値をOpen In で他のアプリケーションに渡せる12年3月3日土曜日
  • 48. デフォルトではテキストファイル として、IS_HTML変数をtrueにする とhtmlファイルとして渡す12年3月3日土曜日
  • 49. 外部JavaScriptの利用 Hogeというスクリプトを作成保存 #IMPORT で読込12年3月3日土曜日
  • 50. コピペで登録、#IMPORTで読み込 みという手順で各種JavaScriptライ ブラリを利用可能 Scripts for MyScripts http://hitoriblog.com/myscripts.html12年3月3日土曜日
  • 51. 大きなライブラリを利用する上で の注意点: #LIBで学習を抑止 さもないと、モッサリする!12年3月3日土曜日
  • 52. ネットワークアクセス • 取りうる手段 • XMLHttpRequest • GET / POST • JSONP • WebSocket12年3月3日土曜日
  • 53. XMLHttpRequest利用12年3月3日土曜日
  • 54. 12年3月3日土曜日
  • 55. document.body.innerHTMLに XHRで取得したテキストを セットすると、DOMが利用可 能。jQueryの$()も使える。12年3月3日土曜日
  • 56. サイトによってはXHRの同期モード ではエラーが出る場合がある (google.com等。リダイレクト?) その場合は、XHRを非同期モードで 利用する。12年3月3日土曜日
  • 57. 非同期モード指定 非同期モード 非同期処理終了12年3月3日土曜日
  • 58. Web API利用の実際 • いまさらブログ | 復活の呪文2 • http://tama-sand.blogspot.com/ 2012/01/2.html • テキストをドラクエの復活の呪文ライク な暗号に/暗号から復号するWebサービス http://coffee-club.jp/tama/jumon/jumon.py モード: mode (p2j / j2p) テキスト: text12年3月3日土曜日
  • 59. 12年3月3日土曜日
  • 60. 「test」というテキストをクリップ ボードにコピーしてから実行 クリップボードの文字をWebサービ スで暗号化できた12年3月3日土曜日
  • 61. スクレイピング • Webページ上の任意のテキストを 機械的に抜き出してきて利用 • XHRで取得、DOMに展開、jQuery で検索し、取得が黄金パターン • iOS機単体で作り込むのは無謀な ので、母艦で開発12年3月3日土曜日
  • 62. • 開発にGoogle Chromeを利用 • jquery-injectorでページにjQueryを 強制的にロード • JavaScriptコンソールを起動12年3月3日土曜日
  • 63. • 都内の環境放射線量調査最新データを取 得したい • http://monitoring.tokyo-eiken.go.jp/ monitoring/hourly_data.html12年3月3日土曜日
  • 64. 12年3月3日土曜日
  • 65. • jQueryの$()を使って要素を検索 • 要素にid、classの指定無しなので table中「∼」を含む行を検索 • 疑似クラス:contains()を使用 • 探した行のテキストを加工 $(tr:contains("∼"):first).text().split("n").join("") • 実行結果: " 2012/02/25 21:01∼22:00 0.0546 0.0468 0.0504"12年3月3日土曜日
  • 66. MyScriptsに実装 jQueryをIMPORT12年3月3日土曜日
  • 67. jQueryを使用 Mailアプリケーションが起動し、最 新の環境放射線量のデータと共に新 規メールが作成される12年3月3日土曜日
  • 68. JSONPの利用 • JSONPとは? • クロスドメイン制約がかかって自由 に使えないXMLHttpRequestに代わる データ通信手段 • 外部サイトからのJavaScriptの読み込 みには制約がかからないことに着目12年3月3日土曜日
  • 69. MyScriptsでのJSONP • 起動直後はドキュメントが空であるの で、document.header.innerHTML に”<head></head>”をセットしておく • JavaScript読み込みは非同期処理なので、 「IS_ASYNC」、「ASYNC_DONE」を使 い非同期処理のパターンとする12年3月3日土曜日
  • 70. ドル円相場の取得 • 「りょーちの駄文と書評」で提供してい るJSONP APIを利用 • 為替レートをJSONPで(無理矢理)取得 • http://ryouchi.seesaa.net/article/ 64139382.html12年3月3日土曜日
  • 71. 非同期モード コールバック 空のheadを足す12年3月3日土曜日
  • 72. コールバック関数名 JSONPの読み込み開始12年3月3日土曜日
  • 73. • JSONPの読み込みが終わるとコールバッ ク関数が実行される。 • コールバック関数の引数は、APIから取 得したJSON。ここから円相場を取得し て、Twitter for iPhoneに投げるメッセー ジ「1ドルxx.x円なう」を作成し、Twitter for iPhoneにメッセージを送るURLを組み 立てる。スクリプトのアクションには openURLを選択したので、スクリプトの 終了と共にTwitter for iPhoneが起動。12年3月3日土曜日
  • 74. HTMLビューの利用 • 渡されたテキストをコピーするだけのス クリプトを作成 • 起動URLを取得 • myscripts:run?title=Copy&text=引数12年3月3日土曜日
  • 75. 起動URLをhtml埋込み 引数を合体12年3月3日土曜日
  • 76. クリック Copy呼出し HTML Viewを 一種のUIとして 使える 引数のテキストがコピーされた ※MyScriptsからMyScriptsを呼び出せることに気づこう12年3月3日土曜日
  • 77. バックグラウンド動作 BG実行指定 ※一つだけ選択可能 • スクリプトリスト右のチェックボックス をオンにすると、MyScriptsをバックグラ ウンドに回した後に10分間限定で(OS の制約)クリップボード監視が始まる。12年3月3日土曜日
  • 78. BG動作中、クリッ プボードにテキスト がコピーされると指 定されたスクリプト が実行される。ク リップボードのテキ ストがTEXTに渡る12年3月3日土曜日
  • 79. • クリップボードにコピーされたテキスト が正規表現にマッチしたら、 pushToArray()関数が実行される。また、 通知センターの通知が表示される。 通知センターから、スクリ プトを起動可能 • マッチしなければ、TARGET変数にnullが セットされ、通知の表示が抑制される。12年3月3日土曜日
  • 80. pushToArray関数で は、配列にマッチし た文字列を集めつ つ、LOAD_JSON、 SAVE_JSON関数で 配列を永続的に保存 している。これで10 分のタイムリミット が過ぎMyScriptsが終 了しても、次回配列 を復元可能。12年3月3日土曜日
  • 81. Jailbreak Tweakで MyScripts環境を強化 • Jailbreakをすると、OSなどの動作を改変 可能 • MyScripts自体も改造可能だが、今回はス ライドが80枚を超えて精も根も尽きたの でまた今度の機会に12年3月3日土曜日
  • 82. 10分の制約を外す • BGプロセスを抱いたままBGで10分経過 すると、アプリケーションはOSから殺 されてしまう • クリップボード監視を永続化できるなら ば、また違った使い方も見えてくる • 10分の制約を外そう!12年3月3日土曜日
  • 83. DontKillBG • バックグラウンド動作の10分の制約を外 すJailbrokenな環境で動作するTweak • iPhoneを、Xcodeを起動させたMacに接 続。MyScriptsをOSが殺した瞬間Xcodeの Consoleに流れてきたメッセージから制 約を課している部分を特定 • 時間制限が課されているかどうかの判定 メソッドを破壊し常にNOを返すように12年3月3日土曜日
  • 84. /* * DontKillBGLibrary.mm * 2012.01.29 */ #import <substrate.h> #import <Foundation/Foundation.h> #import <CoreFoundation/CoreFoundation.h> #import <UIKit/UIKit.h> #import "DontKillBGPrefs.h" extern "C" void DontKillBGInitialize(); @class SBProcessAssertion; static IMP original_SBProcessAssertion_timeLimited; BOOL replaced_SBProcessAssertion_timeLimited(SBProcessAssertion *self, SEL _cmd) { if ([[DontKillBGPrefs sharedInstance] enabled]) { return NO; } else { original_SBProcessAssertion_timeLimited(self, _cmd); } } extern "C" void DontKillBGInitialize() { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; MSHookMessageEx(objc_getClass("SBProcessAssertion"), @selector(isTimeLimited), (IMP)&replaced_SBProcessAssertion_timeLimited, (IMP *)&original_SBProcessAssertion_timeLimited); [pool release]; }12年3月3日土曜日
  • 85. • 以下からインストール可能 • [JB]iOS 5のバックグラウンド動 作10分の時間制限を取り払う DontKillBG • http://hitoriblog.com/?p=629012年3月3日土曜日
  • 86. まとめ • MyScriptsは、iOS上の様々な問題を解決 するポテンシャルを秘めている • スクリプトの配布、インストールは、 ブックマークレットよりとても簡単!使 うだけの人にとっても便利 • ニッチなニーズを埋めるスクリプトをバ ンバン作って共有しよう!12年3月3日土曜日
  • 87. ご清聴ありがとうございました ひとりぶろぐ hitoriblog.com moyashi http://twitter.com/hitoriblog12年3月3日土曜日