photoslibraryを置くディスク形式

Bluetooth の仕様が変更になった影響でポケゴープラスが使えなくなった問題が解決したのでようやく iPhone を iOS11 に更新し年末年始に撮り溜めていたカメラのデータを High Sierra の写真アプリに取り込もうとしたらこのようなエラーを表示しました。

この “jpegvideocomplement” を検索語に調べてみると、写真アプリのデータである photoslibrary が格納されているディスク形式が「大文字/小文字を区別」している場合に起きるということが分かりました。

http://hkitago.tumblr.com/post/169719340056


また原因を同じとして起きる問題に Live Photos (ライブフォト) を読み込めなくなることがあるようで、実際に High Sierra に更新する9月末以降のライブフォトがライブラリにありませんでした。

解決方法は「大文字/小文字を区別しない」ディスク形式にするより他無いらしく、一旦別の「大文字/小文字を区別しない」ディスクを用意してデータを往復させることにしましたが、同じディスクに置いていた iTunes ライブラリなど含めて 2.5TB ほどあるので時間が掛かって仕方ありません。

また関連して、少し前に画面撮影のデータが読み込めない問題があったのですが、


ファイル名に時間を付けないことで回避したように思えて、上述したディスク形式の問題で結局読み込めないという羽目になっています。

今回の教訓として iOS11 と High Sierra へ移行するにはディスク形式に注意すべきでしたが、単に APFS の内蔵ディスクを使う一般的な環境下であれば特に気にする必要がありません。

http://hkitago.tumblr.com/post/169719429926

ただ APFS は SSD に最適化した形式なので、外付け HDD は Mac OS 拡張 (HFS+) のままで十分かと思います。今後写真データは増えて行く一方だと予想できるので、一時的な作業場所として APFS の内蔵 SSD と保管用の HFS+ の HDD とライブラリのデータを分けて管理する必要があるのかなと感じると同時に、写真アプリは起動時にオプションキーを押すことでライブラリの切り替えが容易になっていますが、アプリ内でデータを別のライブラリに移動するような機能があると便利な気がしました。

参考:

ファイルパスをURLに置換してSafariで検証するAppleScript

最近の GUI アプリは AppleScript を呼び出すメニューを持っているので、例えばエディタアプリで書いているコードを Safari で検証したいという時にブラウザでリンクの遷移を辿ったり URL バーに入力する手間が必要なく表示することができます。High Sierra の対応の問題から TextWrangler から CotEditor に乗り換えたことから先に使っていた AppleScript を編集したので紹介します。

今回はユーザディレクトリのサイトフォルダの中にあるファイルを対象にしましたが、MAMP やサイトルートにあるファイルを編集している環境では先頭二行のプロパティを編集してください(もちろんユーザディレクトリ名も)。後半では開発メニューのコンソールを同時に開くようにしていますので最初に使いたいもののショートカットキーにすると良いでしょう。

Coda にも Safari.scpt が同梱されているので、これを改編すれば file:/// スキームでの受け渡しを変更することができるのでお試しください。また Google Chrome を呼び出だす事へ流用する事も容易かと思いますので是非。

参考:

background-attachmentの初期値

ある漫画作品がアニメーション化するニュースを知って公式サイトを見たところ、CSS アニメーションを使い背景でロゴを動かしていました。

ページをスクロールした時にロゴが動くと認知が弱いかな、と思い Safari ブラウザの開発メニュー>インスペクタで background-attachmentfixed にしたらスッキリとした印象になりました。

参考まで、fixed に指定すると background-origin は無効になるそうです。

カウンタで番号リストを作る際にゼロから始めようとした時にも初期値の設定を知らなくて、ol {counter-reset: item -1;} で解決したことがありました。

http://hkitago.tumblr.com/post/168622042786

コードの読みやすさを考慮しても初期値は省略しない方が良いかもしれません。

参考

Audio MIDI設定でモニタ音量を調節する

JavaScript の createOscillator で出力した音を録音しようとして過去投稿を引っ張り出してきたのだけど、High Sierra の Audio MIDI 設定アプリのバージョン3.2 (3.2) でモニタする音量を調節することができなくて、一つ変更点がある事が分かりました。

以前は「複数出力装置」に入れ子になっている「内臓出力」にある音量を調節すればよかったのですが、そこが選択できなかったので、並んでいる「内臓出力」から設定することができました。


また、両方のチャンネルのスライダをマウスドラッグで同時に動かすキーコンビネーションがあったような気がしましたがうまくできなかったので、デシベル値を直接入力しました。

参考

滑らかな要素移動

画面の上から降りてくる通知ダイアログ部品のように、シングルページアプリケーションではDOM 要素の移動アニメーションを利用することが多く、近年の環境では CSS アニメーション、下位互換を考えた場合には jQuery といったライブラリを使うことかと思います。

http://hkitago.tumblr.com/post/166998101130


ページスクロールの参考コードを応用しバニラやピュアと呼ばれる手法で書き流用できるようにしました。

var moveTo = function(element, to, duration, speed, direction) {
  var rect = element.getBoundingClientRect()
  ,   difference = to - (direction === false ? rect.top : rect.left)
  ,   perTick = difference / duration * speed;
  setTimeout(function() {
    if(direction === false) {
      element.style.top = rect.top + perTick + 'px';
      if(parseFloat(element.style.top) === to) return;
    } else {
      element.style.left = rect.left + perTick + 'px';
      if(parseFloat(element.style.left) === to) return;
    }
    moveTo.call(this, element, to, duration - 10, speed, direction);
  }, 10);
};

検証

<div id="div"></div>
<div id="step"></div>
<style>
body { margin:0; padding:0; }
#div { position:absolute; z-index:0; width:100px; height:100px; background-color:yellow; border-radius:50%; }
#step { position:fixed; z-index:1; width:300px; height:300px; border-right:1px solid lightgray; border-bottom:1px solid lightgray; }
</style>
<script>
setTimeout(function(){
  moveTo.call(this, document.getElementById('div'), 300, 1000, 20, 1);
}, 1000);
</script>

余談ですが、アプリにライブラリを使うと著作権表示の実装が面倒ということもあってこちらを再確認。

参考

HDDの物理障害をDIY復帰

Thunderbolt で iMac に接続していた EyeTV の録画用途に3TBの3.5インチハードディスクを使っていました。


深刻な物理障害は3回目ということもあり、バックアップなどの準備は問題ないのが幸いでした。


と思って検索してみるとこんなのがありました。


アマゾンで安価だったのですが、今回は外れ製品だったようです。


しばらくするとヘッドの異音はなくなり、こんな希望が見えたのでメールで問い合わせてみたところ、PCB 故障の疑いがあるということでした。

http://hkitago.tumblr.com/post/168312509896


そこで回路の修理に無水エタノールを近所のドラッグストアで買ってきました。

eBay で交換用の基板もあったのですが、ファームウェアを偽装するのに一度大陸へ送還するという面倒さもあって断念し、データと電源部分の接点を綿棒を使って拭いてみました。

真ん中上と右下に二つあるネジ穴近くにある3箇所の接点です。

すると、なんということでしょう。


接点復活スプレーという選択肢もありましたが、成分が精密過ぎや価格、など考慮した結果。


結構残っているので眼鏡のレンズ拭きに毎日使っています。

http://hkitago.tumblr.com/post/168313351751


最後に、誤字埋込ばかりで失礼しました。

参考:

High Sierraで不明なログイン項目を削除する

High Sierra へ移行してから気持ちが悪かった事の一つに、システム環境設定>ユーザとグループにあるログイン項目に不明な項目が30個ほど並んでいるという現象がありました。

公式のサポートフォーラムでも同様の質問があり、従来の ~/Library/Preferences/com.apple.loginitems.plist やキャッシュファイルの削除という方法が使えなくなってしまいその時点では有益な回答がありませんでしたが、一ヶ月ほど経ってもう一度確認してみると解決方法を見つけた人がいました。

http://hkitago.tumblr.com/post/166022085256

具体的には、~/Library/Application Support/com.apple.backgroundtaskmanagementagent/backgrounditems.btm をゴミ箱やデスクトップなどに移動して再起動すると直ります。

実際には参考にあるギリシャ語サイトを先に見つけましたが、投稿の日付を見るとサポートフォーラムの方が早いようで流石本家は違うなと感心。

参考:

Googleマップのルート検索結果をカレンダーに追加するサービスメニュー

iOS 版の Google Maps アプリは電車やバスを使う場合のルート検索結果の詳細表示画面で、再下方にスクロールすると「カレンダーに追加」ボタンがありカレンダーアプリに予定を追加することができますが、MacOS のブラウザを使った場合に同じことができないものかと模索した結果、Automator でサービスメニューに追加するべくワークフローを作成することにしました。ファイルは Dropbox に置いたのでご自由にお使いください。

GMapルート検索結果をカレンダーに追加.workflow

使い方は、

  1. ダウンロード後、ZIP 解凍してダブルクリックをするとサービスインストーラーのダイアログが表示されるのでインストールボタンを押してください。
  2. ルート検索の詳細を表示した画面で、サービス>GMapルート検索結果をカレンダーに追加をメニューから選択してください。現在、Safari と Chrome のみ対応しています。

    電車/バスルート検索の詳細画面以外でサービスを実行するとエラーを返します。

  3. カレンダーアプリが前面に来て一覧を表示するので、予定を入れるカレンダー名を選択して OK を押してください。
  4. 予定の内容は、可能な限り iOS 版に近いものにしました。日跨ぎの予定に対応し、出発/到着時間の指定により一週間内で日付を判定して追加するようにしました。

出発/到着時間の設定にカレンダーで選択ができるにも関わらずその指定日へ予定が追加できないのは、グーグルが電車やバスの運行状況を曜日毎でのみデータを保持しているからなのか、検索結果に曜日しか表示されないという理由があります。AppleScript のソースコードは最初の手順で Automator で開くと見ることができるので、改変などご自由にどうぞ。

技術的な余談で言うと、Yosemite から利用できる JavaScript for Automation (JXA) での記述も検討したのですが、2つのブラウザの処理の違いとコード量、結局 JavaScript で DOM 操作をすることなどを考えると従来の方法になってしまいました。

参考:

photoanalysisdプロセスの挙動 High Sierra編

近年更新毎に何かのプロセスが悪さをしてくる MacOS ですが、引き続き photoanalysisd プロセスが昨年のものとはちょっと違った挙動をしていたので紹介します。iTunes と 写真アプリのライブラリは 4TB の外付けドライブに置いているのですが、排出しようとした時に次のようなエラーを返してきたことで発見しました。

そこで lsof コマンドを使って調べてみると、photoanalysisd プロセスが写真アプリを起動していないにも関わらず常時ライブラリの中にあるデータベースファイルを読んでいることが分かりました。これは OS の起動直後から開始しているようで、アクティビティモニタを見ても CPU 時間が圧倒的な数値を記録しています。

hkitago$ sudo lsof | grep /Volumes/TOURO\ Desk/
photoanal 497 hkitago txt REG 1,18 32768 6114807 /Volumes/TOURO Desk/写真 Library.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm
photoanal 497 hkitago 29u REG 1,18 45486080 6114800 /Volumes/TOURO Desk/写真 Library.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db
photoanal 497 hkitago 30u REG 1,18 4152 6114806 /Volumes/TOURO Desk/写真 Library.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-wal
photoanal 497 hkitago 31u REG 1,18 32768 6114807 /Volumes/TOURO Desk/写真 Library.photoslibrary/private/com.apple.mediaanalysisd/MediaAnalysis/mediaanalysis.db-shm

「強制的に取り出す」を選択すると取り出すことはできた(データベースファイルの破損も気になる)のですが問題は起きなかったので、このことから設計志向を察するにメディアファイルを外付けディスクに配置することは例外なのかと思う一方、近年の SSD の普及などから内臓ディスクの容量は小さくなっていることや、iCloud ストレージを売り出したい意図などを考えると唸ってしまうものがあります。

関連して mediaanalysisd プロセスが DarkWake (ディスプレイスリープ)時に CPU を常時 50% ほど使っていることがあったりとやはり OS アップデートは人柱になること請け合いで、当面は iTunes や写真アプリを使わない時は外部ディスクを排出しておくという措置しかなさそうです。ただ、妻のアカウントでは状況が同じにも関わらず問題が起きないので発生条件は不明なのが不思議なところで、解決方法をもう少し模索したいと思います。

参考:

SSDを増設したiMacを調整

SSD を増設して起動ディスクにした iMac はその後 Apple Hardware Test を行ったところ次のような 4SNS/1/40000000: TH00-9.000 というエラーを返してきました。これは電源分岐を行ったことが原因でハードディスクの温度センサーが接続されていないために起こるようで、言われてみればファンの音が若干大きいかなという気がしたので、iFixit の方法に習って SSD の電源をマザーボードから直接引っ張ることにしました。

電源ケーブルは 922-9862 という商品コードらしいので、eBay で検索して $5.29 (Free international shipping) で中国から発送のものを購入しました。

前回の作業で分解の要領は得ているので淡々と作業を進めて行ったのですが、購入した電源ケーブルの接続部分が逆方向に曲がっていたので両面テープを貼り直し SSD を裏返してくっ付けることになりました。

再度行なった Apple Hardware Test は問題もなく、ファンもおとなしくなり、ようやく修理完了です。

最後にハードウェアネタが続いた余談で、”Apple is Really Bad At Design“ という記事に、電子レンジやテレビを例に「多くの人は部品を交換しないで本体を買い替えるんだよ」というコメントがあり、今回の作業を終えた後だけあって興味深く読みました。

参考: