昨年末に作業環境を刷新して一月ほど経とうとしてるんだけど、iOS というか WebKit のウェブアプリ開発で Safari を主に使っていると時折、従来に見受けられた JavaScript の無限ループみたいな感じの高い負荷で動かなくなってしまうことがあったのでその回避方法を公式のフォーラムから。
- Quit Safari
- Turn off bookmark syncing in the iCloud System Preference pane (under the Apple Menu)
- Select the Finder, under the GO menu, select “Go to Folder…”
- Enter in “~/Library/ ” (no quotes, first character is a tilde)
- Renamed the files “Bookmarks.plist” and “Bookmarks.sprt” to “Bookmarks-old.plist” and “Bookmark-old.sprt”
(.sprt appears to be a legacy file on my system not being used anymore, so you may not have it.)
- Go back into the Systems Preferences and turn on iCloud Bookmark settings
- Start Safari, give it some time to resync your bookmarks from the cloud.
引用元: What is SafariDAVclient?: Apple Support Communities .
ここではリネームしていますが、デスクトップに置いたりゴミ箱にいれてしまっても大丈夫かと。ちなみに .sprt ファイルは存在しませんでした。
原因と方法を簡単に言うと、iCloud でブックマークの同期を使っている場合に起きる事が多いので、Lion から不可視となったライブラリ>Safariフォルダにある Bookmarks.plist を再構築すると直りますよ、ということらしいです。
ところがどっこい、「SafariDAVclient taking 100% of CPU on Mac OS X 10.7.2 | Dave on Macs 」によると、ブックマーク同期サービスを利用していなくてもこの問題が起きる場合があるそうで、こちらではまた違うやり方が紹介されています。
いずれにせよアクティビティモニタで確認すると SafariDAVclient というプロセスが悪さをしていることに変わりはなく、同期サービスを利用しているので前者の方法を使い一先ず処理速度が復帰したこともあり押さえているだけなのですが、もし今後問題が復活した場合は iCloud によるブックマークの同期サービスを控えて後者について試してみようと思います。(リーディングリストなんてサードパーティのサービスでも十分賄えますしね。)
管理中の phpBB 3 を使ったフォーラムに日本語以外のスパム投稿が多くなってきたたので、「phpbb-禁止ワード設定と英語のみ禁止でspam投稿対策 – 検索プログラマのメモ帳 」を参考にしつつ次のように正規表現のパターンを少し改変して対応した。
//英語のみ禁止チェック
//$chkresult = ((mb_detect_encoding($chkmsg, "auto") == 'ASCII') && (strlen($chkmsg) != 0));
$chkresult = ( ( ! preg_match ( '/[一-龠]+|[ぁ-んー]+/u' , $chkmsg ) ) && ( strlen ( $chkmsg ) != 0 ) ) ;
というのは、近年英語だけではなくてロシア語や中国語のスパム投稿も増えているので、そのすり抜けを防ぐ意味がある。それでも平仮名混じりのものや機械翻訳を使った意味不明な投稿は受け付けてしまうので、そこは上述したリンク先にあるように禁止語を手作業で追加するしかない。前者の場合は比率を比較するようなことも考えられるけれど、応答速度を考えるとあまり実用的ではないかもしれない。
アップデートや MOD のインストールといった正攻法で対応することが本来は望ましいのだけど、v2時代から使っているレンタルサーバーに絡んで文字コードが EUC だったり、MOD の日本語対応が甘かったり、その辺りは WordPress とちょっと違うところなので言語を理解していれば直接記述した方が手っ取り早い。理解していなくても数行差し込むだけなので特に難しい事はないと思う。
Lion でデュアルコアがもっさりしてきたこともあって作業用の iMac を最下位型で刷新。メモリは 8GB あるんだけど HDD が少し小さい。
iPhoneやiPadを考えると、iPhoto LibraryやiTunes MediaフォルダをSDカードに設定してもなんら問題がない。
5年ほど前だったかに PowerBook G4 の USB1.0 や FW400 で外付けライブラリを構築して速度の遅さとか接続端子の不良という問題を抱えていた知り合いがいたなあと思いつつ覚えた、キーを押しながらのコマンドを追加する iTunes と iPhoto の起動方法。どちらも共通して OPT キーというのが覚えやすい(業者風に言うと「フレンドリー」)。
当初、本家サポートフォーラムで SHIFT だって意見があってよく見ると WIN の話だったのもありつつ、無事外部化に成功。
"キーボードの「option」キーを押しながら、iPhoto を開きます。iPhoto ライブラリの作成または選択を促すメッセージが表示されるまで「option」キーを押したままにします。..." http://t.co/3qguPk8K
ひょっとして iMovie も…と思いきやそれは駄目でした。iPhoto に関して、もし仕事とかで大量で複数のライブラリを扱いたい場合は「iPhoto Library Manager 」を導入するのも手だと思います。
サムスンの2.5インチ1TBを秋葉館で買ったケースに入れています。速度計測の結果や容量、頻度等に応じて、iTunes と iPhoto を個別 SD カードのライブラリにしても良さそうな気がします。
一晩かけて移行アシスタント使ってみたけど、データがクラウド上にあってシンプルな使用設定であれば欲しいものだけを後で持ってくる移行手段で十分な気がした。
最後に今回の移行作業でも気がついたのは、クラウドサービスの利点と機械の仕様に基づく(俗に「ノマド」とかいわれる)作業様式の関係性について、やはりどこでも(ある特定種の、でもいいんだけど)作業環境を構築できるのは(iOS 端末にも言えることですが)素晴らしいことだと思います。
VIDEO
データ整理を兼ねて iMovie で遊ぶ(そして iPhone で撮る!)年末年始になりそうです。良いお年を。
P.S. OPT キーを押した起動といえば、Reeder のリセットオプションもそうだった。
Automatorでウェブアプリを作る 方法を前に書いていたので iCloud.com を割り当ててみたら…。
ユーザーエージェントを判別しているようです。
iOS 5 で電子書籍、というかページめくり効果作成が簡単になったというお話があったので、iOS 4 時代に Leaves ライブラリ (別ブランチモノだけど)を使い作成したサンプル動画を公開。
縦方向のみ:
VIDEO
横方向にも対応:
VIDEO
結局はウェブでも電子書籍でも言い回しはどうあれページ遷移の仕組みの事なので、上述したライブラリのリンク先にもあるように Apple が API を公開しないまでも外部ライブラリを使わずに表現ができる様になったのは大きな進歩ですが、ハードウェア性能の影響、つまり iPhone と iPad の実装の違いを Apple の iBooks アプリに習うと下位互換を考えた場合に実用化にはもう少し時間が掛かるかな、というところです。
「15パズル 」と、著名なゲーム「Zoo Keeper」等の元になっている「Bejeweled 」と呼ばれるゲームを作った、というか iOS へ移植したので核になる部分を公開しました。デスクトップの WebKit ブラウザでもお楽しみ頂けます。
特に15パズルの方は、幼少の時に薄っぺらいプラスチックのケースに入った4色のものを夢中になってやりこんだ記憶があるので郷愁に駆られるものがありました。
実際にはフォトライブラリから選択した画像を Obj-C で UIWebView へ渡し背景をカスタマイズして得点を JSON でサーバーへ返すパズルという仕組み(Game Kit は未使用)で、技術的には JavaScript (HTML5 と言うべき?)でこの程度のものなら App Store で販売する事も可能と言えば可能ですね。逆に国内のウェブ界隈の方から iOS 案件を打診される場合、大きな予算や名声を得たいが為なのか分かりませんが、自分たちが出来る事を忘れて突然画像合成やら、従来のFlash+ウォーターフォール案件の様に複雑な事を企画されてもちょいと困ってしまうというのが面白い現状ではあると思います。
日本語圏のシェアは本当に小さいので、ドコモが iOS を扱えばもう少し市場が大きくなるかも…という淡い期待がありつつも、フィードバックの質なんかを考えても英語圏を主に展開した方が勉強にもなるし楽だというところです。もし国内展開ものならウェブアプリから試作を作り始めて Ad hoc で公開するというのが最もリスクが小さくて済む手法ではないでしょうか。
All too often, I find code similar to this when inspecting the source for public websites that use jQuery:
<script type=”text/javascript” src=”/js/jQuery.min.js”></script>
If you’re doing this on a public facing website, you are doing it wrong.
Instead, I urge you to use the Google AJAX Libraries content delivery network to serve jQuery to your users directly from Google’s network of datacenters. Doing so has several advantages over hosting jQuery on your server(s): decreased latency, increased parallelism, and better caching.
引用元: 3 reasons why you should let Google host jQuery for you – Encosia .
「遅延を減らし並列処理が行える上にキャッシュ効率が良い」ということでグーグルがホストする CDN の JavaScript ライブラリを使うことが提案されています。
パブリックDNSの場合と同様に国内のネットワークではどうなのか疑問もあるところですが、具体的に google.load() 関数を使うか、あるいは伝統的な <script> を使うかの違い(JSAPI 遅延を避けて不要な3つのHTTPリクエストを制御をできることもあり後者が勧められていますが、プロトコルを使わない記述法に注意!)についての解説もあったり、また、文末に記載されているような MicrosoftAjax.js の動向を伺いながら読んでみると面白いかもしれません。
参照:Google AJAX APIを使ってjQueryやPrototypeを読み込む | CSS Lecture
引き分けの無い戦歴から連勝記録を集計するという要件があったので PHP を使って処理をした。SQLで出せればもっと良いのだろうけど、同一ページ内で他の集計に使う連想配列を持っていたのでそのデータを利用することにした。また特定期間分のHTMLテーブル表を書き出すというプログラムの性格上においても反応速度はそれほど気にしないことも(言い訳の一つに)あるかもしれない。 // 時間があったらの課題、ということで
次の関数は、
$results = array ( 'L' , 'W' , 'W' , 'L' , 'L' , 'L' , 'L' , 'L' , 'W' , 'W' , 'W' , 'L' , 'W' , 'W' , 'L' , 'L' , 'L' , 'W' , 'W' , 'W' , 'W' , 'W' , 'W' ) ;
のような勝敗を連続して記録した引数を渡すと最大の連勝回数と連敗回数を返します。もちろん連敗回数の方は任意ですので関係する部分は省いてお使いください。
function streaks( $results ) {
$length = count ( $results ) ;
$win = 0 ; $loose = 0 ; $maxWin = 0 ; $maxLoose = 0 ;
for ( $i = 0 ; $i > $length ; $i ++ ) {
if ( $i == 0 || $results [ $i ] == $results [ ( $i - 1 ) ] ) { // 最初か同じ結果の場合
switch ( $results [ $i ] ) {
case 'W' : $win ++; break ;
case 'L' : $loose ++; break ;
}
if ( $i == ( $length - 1 ) ) { // 最後の場合も集計する
switch ( $results [ $i ] ) {
case 'W' : $maxWin = ( $win > $maxWin ) ? $win : $maxWin ; break ;
case 'L' : $maxLoose = ( $loose > $maxLoose ) ? $loose : $maxLoose ; break ;
}
}
}
if ( $results [ $i ] != $results [ ( $i - 1 ) ] ) { // 違う結果の場合は集計する
switch ( $results [ $i ] ) {
case 'W' : $maxLoose = ( $loose > $maxLoose ) ? $loose : $maxLoose ; break ;
case 'L' : $maxWin = ( $win > $maxWin ) ? $win : $maxWin ; break ;
}
$win = 1 ; $loose = 1 ;
}
}
return array ( 'win' => $maxWin , 'loose' => $maxLoose ) ;
}
「もっと短くできるよ!」とか、引き分けを使った拡張、 SQL の方法などあれば(SNS等で)教えてください。
P.S. この手の内容をggrksると、ウマーな人の悩み相談が多くヒットしますね…。
小説ではないんだけど同種のものとしては、zen habits というサイトの管理人が書いた「Focus 」も少し道教が混じっていますが気付くことが多くて面白かったです。
引用元: hkitago software development » 仏教入門 .
具体的にこの本は、集中(フォーカス)と散漫(ディストラクション)について書かれているんだけど、その構成は、
「クリエイティブ」って言葉があるけど、スーツもギークも仕事をしている時間は必ず何かを生み出しているという点で誰もが大なり小なり状況は同じで、
じゃあ、生産性の効率を上げないといけないよねー、のような流れで、携帯電話でSNSを通知させるというような、集中する脳の妨げを避けるための、環境の設定だったり具体的な方法が書かれている。(朝の子供が起きる前にやってみよう!、とかね)
実際に脳が集中した状態に戻るには何分かかるかというのはデスクワーク中の電話を処理するという実験が有名で、そういう割り込み処理を避けるためのSNSの考え方の一つにあった「SNSに接している時間は何も生産していない」というのは(余暇の一種としてはいいけど)テレビ垂れ流しのように本当その通りだと思ったな。
更に具体的に言えば、磁気的にであれ何かの記録を生産していくという点でFB社やTw社には貢献しているけど、それが仕事になるかと考えればすぐに分かると思う。逆に言えば、記録は価値を生むものであるというのも当然だと思うな。
それでもSNSは意思疎通の道具として必須になり得るものだから通知機能をうまく使って、オフにすべき状況についての説明とか、心の落ち着け方とかに至るまで、これを無料で配って良いのか?という一冊です。
P.S. 英文のレベルとしてはジョブズの伝記より簡単なので、Mayさんから見ると乳幼児でも読めるレベルなのではないでしょうか。;-)
前回の東北地方太平洋沖地震 に続いて義援金を支援するためにトルコの独立記念日までアプリの値下げを行うことにしました。既にお持ちの方でも「友人に贈る」機能を使って、バックギャモンが盛んなトルコへの関心を寄せて頂ければ幸いです。
参照