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