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“ という記事に、電子レンジやテレビを例に「多くの人は部品を交換しないで本体を買い替えるんだよ」というコメントがあり、今回の作業を終えた後だけあって興味深く読みました。

参考:

エフェクトを付けたLive Photosを共有する

タンブラーを眺めていたらとても綺麗なループ画像が流れて来たので説明を見ると iOS11 の写真アプリの新機能である、ライブフォトのループ効果を使ったものらしい。

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

早速子供を撮影したライブフォトにバウンス効果を付けて妻の iOS10 端末にメッセージで送ってみてもうまく見れないというので、自分の MacOS のメッセージに送ってみても白いファイルアイコンが表示されているだけで中身を見ることができず、上述したタンブラー投稿はアニメーション GIF になっているので何か書き出し方法がないものかと調べました。

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

これによると効果を付けたライブフォトはアルバムタブ内にある「アニメーション」という名前のアルバムにアニメーション GIF で保存されているので、後は煮るなり焼くなり好きな方法で共有が可能であると言うことです。Apple の公式サポートページで写真アプリの新機能の説明の最後に「アニメーションGIFに対応」とあるのはこう言うことなのだろうと思います。

もう一つ日本語で解説している記事があったので紹介すると、効果を付けたライブフォトを選択してからメールで共有するとアニメーション GIF に変換して送るようです。

先に試したように編集した写真を選択して直接メッセージなどで共有するとビデオ形式で送ってしまうようで、実際に MacOS や異なるプラットフォーム上では表示できなかったけれども、iOS11 端末のメッセージでは問題なく表示していたので手間を考えると iOS11 間であれば直接送った方が良い場合がありそうです。

ちなみに iPhone SE で撮影しバウンス効果を付けてメール送信すると 8MB のアニメーション GIF になっていたので、シネマグラフの色調や最終的な書き出しのファイルサイズなどの調整作業などは従来通り Photoshop や GIF Brewery といったアプリに頼る必要がありますが、簡単にループアニメーションを作って共有できるのはとても面白いと思います。

参考:

iMacにSSDを増設

注意:ここで紹介した電源を分岐する方法は、Apple Hardware Test でエラーとなるので、電源を直接マザーボードから引く方法について書きました。「SSDを増設したiMacを調整

開発用途の機種に未だ iMac Intel 21.5インチ Mid 2011 EMC 2428 を使っています。購入時は 8GB だったメモリ容量は3年ほど前に Parallels と Photoshop の同時利用で重たくなったので最大 16GB に増設したのですが、近年は Xcode と Android Studio の同時利用に加えて、ハードウェア買い替えの目安の一つである IME(インプット・メソッド・エディタ)の和英文字入力切り替え時、特にライブ変換の際にもたつきと引っかかりが感じられるようになりました。その度にアクティビティモニタから日本語入力プログラムのプロセスの強制終了して騙し騙し使っていましたが、丁度(改造に失敗しても潔く買い替えの理由になる)iMac シリーズの刷新の噂もあり内臓 SSD を設置して起動ディスクを変更することにしました。

もう今更感たっぷりな作業なのは恐縮ながら Amazon で用意したものはこちら。

余談で SSD は 2TB が激安価格だったので一度挑戦しましたが、案の定返金されて 525GB を買い直しました。


SSD の固定は Vintage Computer のキットを使わずにホームセンターで買ってあった両面テープにし、

前例報告は多々あるので作業を要約しますと、OWC が提供しているインストールビデオの通り片方に二枚貼り DVD ドライブ裏の曲面に合うようにしました。

マザーボードの背面側から、シリアルケーブルは下から回すという説明だったのですがヒートシンクに沿って通っていた黒いケーブルがあったので上方向にしました。

その結果 SSD 上部で折り返す羽目になってしまったので、0.3m の短いものでも良かったなと少し後悔しました。

最終的には下L型の二股電源ケーブルのお陰でヒートシンク部分と衝突することなくうまく収まりました。


最後に失敗談として、HDD のサーモセンサーのピンが抜けずマイナスドライバで押したところどこか遠くの方でカラ〜ンと音がしてプラスチックの接合部分を無くしてしまいました。幸運なことに金属部分は残っていたので組立時には iFixit の拡大図で極を確認しラジオペンチで差し込み絶縁テープを貼っておきました。(焦って写真がピンボケ笑)

起動後に元の内臓 HDD からデータを移行し sudo trimforce enable を実行し完了です。Fusion Drive 化も検討しましたが、ファイル配置が自動的に決定されることがなんとなく嫌だったので却下し、SSD をシステム用に、HDD をデータ用として運用しています。デスクトップ機種でシステム終了することが少ないため起動時の速度に喜びを感じることが少ないのですが、Parallels などのアプリの起動時や IME 切り替えの滑らかさなど、OS の更新による快適さも考えられるので結局買い替えをまた逃すことになってしまいました。


それでも片方の USB 2.0バスが逝ってしまったり限界がかなり近くなっていることは間違いないので、子供に譲るまでもう少し頑張ってもらいたいところです。

参考: