MySQL 5.7のLaunch Daemonを使う

Sierra に更新し前投稿の問題以降に再起動をすると、ERROR! The server quit without updating PID file というエラーを出力し MySQL が起動しなくなるという新たな問題が解決しなかったため、MySQL 自体の更新も兼ねて MySQL 5.7をクリーンインストールしました。そこでマニュアルを参照してみると、意外にも MySQL の起動にコントロールパネルの利用を推奨していたので試してみたところ、またまたうまく機能しなかったので少し調べてみました。

その結果、MySQL 5.6 を Yosemite にインストールした時は、起動アイテムを使っていた公式のコントロールパネルが機能せず、別途起動デーモンを書いていた(まさかの公式マニュアルに掲載)のですが、MySQL 5.7 のインストーラは独自の起動デーモン com.oracle.oss.mysql.mysqld.plist/Library/LaunchDaemons/ に配置するそうなので、前バージョンからの移行で 5.7 を利用する場合は com.mysql.mysql.plist を削除する必要がある、という簡単な解決方法でした。

ただ、前バージョンに引き続きコントロールパネルを利用しないという方法も可能なので、その場合は上述のように com.mysql.mysql.plist を削除することなく、コンパネやコマンドを使って公式の com.oracle.oss.mysql.mysqld.plist を読み込まないように、ファイルの場所を代えるなど注意をする必要があります。

参考:

Please DISCARD the tablespace before IMPORT エラー対処

MacOS Sierra 移行前の話なのですが、innoDB を扱う案件があり開発環境で設定してみたところ、phpMyAdmin 4.6 上でテーブル名は見えているのだけど「テーブルがありません」というエラーを返してきたので、で該当テーブルを削除した後に再度同じ名前でテーブルを作ろうとすると今度は、”Please DISCARD the tablespace before IMPORT” というエラーを返してきて、二進も三進もいかなくなったということがありました。

そこで例によっておググりなさってみると、/usr/local/mysql/data にある問題となっている DB 名のファイルを消去する方法を見つけたので試してみたところうまくいかなかったので、MySQL の起動を停止し他のファイルを消すか名称変更しつつ再度 MySQL を起動する、という手順を繰り返しディレクトリ内を観察してみた結果、[PC_Name].local.err や [PC_Name].local.pid も関係することが判明し、元々開発環境でデータの消失は問題がないということもあり、次のように MySQL が起動時に参照したり生成するファイルも削除してみたところ、無事テーブル生成が可能になりました。

$ cd /usr/local/mysql/data
$ sudo launchctl unload -F /Library/LaunchDaemons/com.mysql.mysql.plist
$ sudo rm -rf [問題のDB名]
$ sudo rm -rf ib_logfile0
$ sudo rm -rf ib_logfile1
$ sudo rm -rf ibdata1
$ sudo rm -rf [PC_Name].local.err
$ sudo rm -rf [PC_Name].local.pid
$ sudo rm -rf phpmyadmin/
$ sudo launchctl load -F /Library/LaunchDaemons/com.mysql.mysql.plist

もちろんこの後で再び phpMyAdmin を利用するには phpmyadmin/sql/create_tables.sql をインポートし再設定する必要があります。

参考:

photoanalysisdプロセスの挙動

MacOS Sierra に更新してアクティビティモニタを見てみると photoanalysisd というプロセスが常時100%超えを示していて、丁度重い作業をするところだったのでリソース不足を解消するために次のような launchctl コマンドを使って一旦止めることしました。

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

作業も終わったところでさてこのプロセスは何をしているのかと、アクティビティモニタのプロセスを開いて「開いているファイルとポート」タブからログを眺めていると、写真アプリのライブラリ内データを読んでいることが分かりました。

更に “~/Library/Application Support/AddressBook/…” というログを見つけたので、写真アプリのアルバム>ピープルを見るとこのようなメッセージを表示していました。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-19-6-40-18

実際に写真アプリを起動すると photoanalysisd プロセスの CPU 使用率は0%になり、閉じると再び上昇するという挙動をしていましたので、作業中は上述したコマンドでプロセスを終了し、夜間など使用しない際に再度プロセスを読み直すという方法が良いのかと思います。

夜間に放置しておいたところ、約4万2千枚ある写真のライブラリを12時間くらいかけて解析していました。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-19-8-19-33

参考:

Macで再生する音を録音する

Mac の QuickTime Player 10 を使い、ブラウザで表示するストリーム配信の番組を(私的利用を目的として)画面収録したり、携帯の着信音を作るのに録画機能の無いゲームエミュレータの音を(こちらもくどいけれども、私的利用を目的として)オーディオ収録する場合は Soundflower をインストールして使うのだけど、久しぶりにやろうとして設定をググった挙句に日本語のブログを漁るとどれも「録音中に音は鳴りません」と書いてあるものだから仕方なく過去のタンブラ投稿を探して、正しくモニタリングしながら録音する方法がグーグル検索の上位になるように投稿します。

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

作業環境は、OS X El Capitan バージョン 10.11.6、Soundflower 2.0b2、Audio MIDI 設定 バージョン 3.0.6 を使いますが、上記に引用したのは2年程前でしたし、OS X のオーディオ設定周りはあまり変わらないので OS X のバージョンに対応する Soundflower がインストールされていればあまり気にする必要はないと思います。そこでこの引用をさっと訳すと、

  1. Soundflower をインストールします。
  2. Audio MIDI 設定.app を開き、ウィンドウ左下にある(+)ボタンを押し、「複数出力装置を作成」を選びます。
  3. 左側のアイコンが並ぶ装置一覧に「複数出力装置」が追加されるので、アイコン左横にある三角矢印を押し、「内臓出力」「Soundflower (2ch)」「Soundflower (64ch)」が含まれていることを確認します。
    スクリーンショット 2016-08-26 15.47.57
  4. QuickTime を開き、メニューバーから「ファイル>新規画面収録」コマンドを選びます。(音だけの場合はもちろん「新規オーディオ収録」で可)赤い録画ボタン右横にある下矢印ボタンを押し、「Soundflower (2ch)」あるいは「Soundflower (64ch)」を選びます。
    スクリーンショット 2016-08-26 16.03.26
  5. 以上で収録を始めると、音を聞きながら録音、録画することができます。

となるのですが、実はこのままでは録画、あるいは録音したファイルに音データが含まれないという失敗になるので、多くの日本語記事にもあるように出力先を変更する必要があります。但し、今回の設定環境では出力先を 2ch や 64ch ではなく、「複数出力装置」とする必要があります。もちろん環境設定を開くという手間を省いて、オプションキーを押しながらメニューバー右上のスピーカーアイコンを押すと簡単に出力先の設定ができます。
スクリーンショット 2016-08-26 16.09.27

更に出力先を「複数出力装置」に変更した場合、キーボードの音量設定ボタンが無効になってしまうので、調整は Audio MIDI 設定.app で行います。「複数出力装置」に含まれる「内臓出力」を選択し、右側に表示される両チャンネルのスライダを変更することでも良いですし、収録前にスライダを設定しておきつつ、モニタ中に煩くなったら下図のようにマスタの消音チェックボックスを入れるという方法も可能です。
スクリーンショット 2016-08-26 16.20.15

最後に注意点としては QuickTime で収録ボタンを押す前に、その下部にある音量スライダが左端にあって音声出力しないようになっていることを確認する必要があります。もしスライダが右方向にあって収録を始めるとハウリングの嵐に巻き込まれて…(略 そんな時は慌てずメニューバーにある収録中止ボタンをしましょう笑)

iPhone5sをアンロックする

受託案件が増えたのでアンドロイド端末を一台持たねばと購入した HUAWEI P8lite だったのですが、イングレスで使うには GPS がブレたり大きな画面でグリフハックがやり辛いことなどから、開発用途としてソフトバンク契約が切れて Wi-Fi のみで利用していた iPhone5s をアンロックして DMM の SIM を使ってみようと思いました。今回はジェイルブレイク(脱獄)せず、SIM アダプター(下駄)も使わず、単純に IMEI アンロック(ファクトリーアンロック)をすることを目的としています。

まず “iphone unlock softbank” 程度の検索語で出てきたサイトですが、格安だったのでサイト名に “scam” キーワードを付けてみたところ見事に詐欺サイトだと判明しました。Fb ではかなりの評判だったのがあわや騙されるところで、体験談を読むと明示されている19ユーロというのは前金で、これを支払った後に60ユーロの請求が届き、更にこれを支払った後に音沙汰がなかったり、未だ時間が掛かると自動返信でトンズラするそうです。(具体的には英国のオフィシャルアイポンXXXXXXユーケーというサービスです、ご注意ください)

次に MacRumors のフォーラム経由で見つけたのが、UnlockBase という米国のサービスで、複数の情報源から信頼できると判断しこちらを利用することにしました。実際に申し込む前に確認すべきことは次の3つです。

  • IMEI 番号の確認:
    電話アプリのキーパッドで *#06# と押し、メモアプリなどに控えておきます。設定>一般>情報>IMEI からだと番号を長押しでコピペできます。
  • アップルのサイトでアクティベーションロックの状態を確認
    対象機種の「iPhone を探す」機能がオフになっているかどうかを確認できます。
  • IMEI Database Lookup で iPhone のシムロックの確認
    キャリアとの契約状態や盗難品かどうかを確認できます。

理想的なのは国内のキャリアで購入し契約の切れた iPhone があると良いのですが、秋葉原やヤフオクなどで中古端末を入手している場合は少し注意が必要です。これらの確認が終わったら、UnlockBase のトップページ上部に見える iPhone の GET STARTED からメーカーと機種を選択し “UNLOCK NOW” ボタンを押して進みます。次のページでは、IMEI 番号、メールアドレスを入力し、国名、契約中のキャリア名を選び “PROCEED TO CHECKOUT NOW” ボタンを押して支払い方法を選びます。今回は Paypal を選択し、待つこと13営業日で無事に作業が完了したという旨のメールを受け取りました。早速メールにリンク先のある “How to Unlock the Apple iPhone 5S” を読み(緊急通話のみのソフトバンク SIM を使い USB を経由し iTunes で認識させてから抜き、10秒待ってから再接続再認識させるだけ) DMM のプロファイルをダウンロードし SIM を交換してみたところ見事に「ドコモ 24.2」のキャリアを掴みました。

またこの待ち時間を利用して内臓バッテリーの交換を試みました。

手順は若干多様性があるようでしたが、iFixit を主な参考にしてパネルを外さない方法を選択しました。バッテリ自体は強力な糊付けだったのですが、AirMac の底面などで分解経験のあるヘアドライヤで外しました。
IMG_0816

最初に届いたものは充電ができない不良品でしたが、返品して再度購入し無事新品のような状態になりました。

IMG_2492

電池交換後に計測に使用していたアプリを一旦削除しないと測定値をリセットしないという問題も発見しました(この間にサイクルが1増えてた笑)が、無料なので開発側には報告しませんでした。

IMG_2507

ということで、中古の端末が多く流通しているということや円高傾向もあり、SE の購入に悩んでいたり(Android 端末のアンロックも可能らしい)、月額の出費を抑えるのに格安 SIM に移行したい、夏休みに向けて子供の GPS トラッキング用途、サブ機などにいかがでしょうか。

参考:

Windows 10への更新を避ける

最近話題なので…。
Parallels Picture のコピー

開発環境上で Windows は XP、7、10という複数のバージョンを Parallels で仮想化し利用していることもあって勝手に更新されては困るということから回避方法を探していました。

スクリーンショット 2016-06-02 9.05.51
レジストリエディタでゴニョゴニョする等、幾つかのやり方を眺めた中で、次のようなウィンドウズアップデートコントロールパネルに表示させないという方法が簡単にうまくいったので紹介します。


まず「コントロールパネル>プログラム>プログラムのアンインストール>インストールされた更新プログラムを表示」と進み(一覧全てを表示するのには少し時間が掛かるかもなので上部のプログレスバーに注目)Windows 8.1 の場合は、「KB3035583」と「KB2976978」と名前に書かれてある更新プログラムを、Windows 7 の場合は、「KB3035583」、「KB2952664」そして 「KB3021917」と名前に書かれてある更新プログラムを探し、それぞれの項目の上で右クリックし「アンインストール」します。その都度再起動を促されますが、全ての作業が終わるまで再起動は後回しにし、全てアンインストールが終わったら再起動します。

再起動が終わったら「全てのプログラム>Windows Update>更新プログラムの確認」と進みます。すると先ほどアンインストールした更新プログラムとウィンドウズ 10 への更新プログラムが再び現れるので、それぞれの項目上で右クリックし全て隠し通知しないようにします。(隠すと文字の色が薄い灰色に変わります)

Parallels Picture 1

最後にこの記事の中では、既に更新ファイルがローカルディスクにダウンロードされているかどうかを確認し、あれば削除するようにしています。ファイルエクスプローラーのフォルダオプションで不可視ファイルを表示するようチェックボックスを入れて C ドライブの最上位階層に “$Windows.~BT” という3〜6 GB のフォルダが該当するのですが、こちらの環境では見当たらず実行する必要がありませんでした。

参考:

Safari 9.1.1でAppleScriptからJavaScriptを実行する

以前、Ingress のプレイ記録用途に AppleScript を書いたのだけど、半径3キロメートルに及ぶノバ作戦を近所で開催した時にもっと大きなインテルマップを表示しようと、次のようなコードを追加していました。

on fullScreenIntelMap()
	tell application "/Applications/Safari.app"
		tell document 1
			do JavaScript "document.getElementById('dashboard_container').style.left='0';document.getElementById('dashboard_container').style.top='0';document.getElementById('dashboard_container').style.right='0';document.getElementById('dashboard_container').style.bottom='0';document.getElementById('comm').style.display='none';document.getElementById('player_stats').style.display='none';document.getElementById('rs_box').style.display='none';"
		end tell
	end tell
end fullScreenIntelMap

この関数を起動時の on run と再読み込み時の on idle で実行すると、ヘッダ部分やフッタ部分を隠しブラウザのフルスクリーンモードにして可能な限り広域な地図状況を記録しておくことができるのですが、最近になってこのスクリプトを使うと Safari が次のようなエラーを返してきました。
スクリーンショット 2016-06-01 9.03.48

You must enable the ‘Allow JavaScript from Apple Events’ option in Safari’s Develop menu to use ‘do JavaScript’.

この内容に従って「開発」メニューを覗いてみると次のように「Apple Events からの JavaScript を許可」というコマンドがありました。

スクリーンショット 2016-06-01 9.04.24
この見慣れぬコマンドについて確認しようと Apple のサポートページを見ると未だ記述がないので、どうやら最新のバージョン 9.1.1 から追加されたものと思われます。そこでもう少しおググりなさってみると、数日前に “do JavaScript 記述のある AppleScript が動かなくなったよ〜” という内容で、とあるマックサイトのフォーラムに投稿している人がいました。

その内容によると、どうやら Safari の「開発」メニューを表示しておかないと上述したようなエラー内容を表示せず、コンソールに不可解なエラーメッセージだけが残るそうなので注意が必要です。

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

確かに近年 JavaScript の台頭と安全性について語られることが増えていますが、わざわざ開発メニューから設定する必要があるのは柔軟性という点で開発者にとってはなかなか厳しい変更点なのではないかと思いました。またこのフォーラムでも懸念されていますが、Safari 以外で AppleScript と連携ができる(特にウェブ開発で使うような)アプリケーションの対応についても今後の動向に少し注目しておく必要がありそうです。

参考:

Launchpadのアイコンサイズを変更する

Launchpad は OS X 10.7 Lion から搭載されたスプリングボード形式のユーザインターフェースを持つアプリケーションの一覧を表示する便利な機能なのですが、10.9 Mavericks 辺りから次のようなコマンドでアイコンのサイズ(正確にはアプリケーションを表示する行列数)を変更できるようになりました。

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

この設定方法について今年になって何故か海外の OS X TIPS 系のサイトで再び話題となっているのですが、どのサイトを見ても defaults write com.apple.dock ResetLaunchPad -bool true というローンチパッドを初期化するコマンドが必須であるのかのように書かれています。

そうするとカスタムしていたフォルダなどが消滅し、左上から Safari、メール、連絡先… と出荷状態になってしまうので、実際には多くの利用者にはお勧めできないのでご注意ください。

$ defaults write com.apple.dock springboard-rows -int 7
$ defaults write com.apple.dock springboard-columns -int 9; killall Dock

最後に全く余談なのですが、日本語の「行」と「列」はとても分かりにくくて “row” を辞書で調べると、一般的な意味は「列」で数学やコンピュータ用語だと「行」となるんですよね…。”column” はどちらも「列」ですが、子供に説明している間にこちらもこんがらがっていました。ラーメン屋とかの「行列」も大抵一列ですし笑

参考:

CCLibraryとCCXProcessのプロセスを止める

Adobe Photoshop CC 2015 に更新したところ、CCLibrary と CCXProcess というプロセスをアクティビティモニタで確認したものの、GUI から強制終了してもコマンドから kill -9 {PID} としてもすかさず復帰してくるという気持ちの悪い行動を取っていたので抹殺すべく調べてみました。ここでは「アドビのクラウドサービスはどうでも良いから単にフォトショップとかのアプリだけが快適に動けば良いんだよ!」という利用環境を前提としています。

すると面白いことに、リリース直後の昨年末辺りにはこの2つのプロセスが99%のCPU稼働率を占有してしまうという問題があったらしく、多くの日本語文献では「アドビの更新を待とう!」という風潮だったのですが、Ask Different 経由で知った Adobe のフォーラムで解決方法を見つけました。

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

具体的にこのプロセスは「Creative Cloud デスクトップ」というアプリが使用しているのでこれ自体をアンインストールすれば良いという話なのですが、同梱されているアンインストールアプリがうまく機能しないので別途アドビが公開している「Adobe Creative Cloud Cleaner ツール」を使ってアンインストールするという手法になります。起動して同意書と認証を入力した後、インストールされているアドビ製品の一覧が表示されるので対象となる「Creative Cloud デスクトップ」を選択して下方真ん中にある「〜を消去」ボタンを押します。右上のプルダウンメニューで “Creative Cloud Only” を選んでおくと更に間違いがなくなるかと思いますが、こちらの環境では “Adobe Application Manager for Mac OSX 10.6” というプログラム名も出てきたのでまとめて消去しました。その後再起動しフォトショップを起動しましたが問題なく動作し、アクティビティモニタには例のプロセスが登場しません。

今回はアドビが提供するツールを用いましたが AppCleaner を使うとどうなんだろうか、という疑問も浮かびました。もし人柱を買って出る方がいらしたら是非やってみてください。

参考:

ポップアップするステータスバー表示を止める

Google Chrome ブラウザをフルスクリーンモードやプレゼンテーションモードで使用していると、リンクにマウスを乗せた際、画面左下にポップアップするステータスバーが表示されるのだけど、プレゼン資料用スライドショーアプリを使う場合など、これを表示しないようにする必要があり方法について検討しました。

スクリーンショット 2016-04-25 10.25.56

解決策は非常に簡単で、A タグに href 属性を与えないということでした。

window.addEventListener('load', function() {
	var aNodes = document.getElementsByTagName('a');
	for (var i = 0, max = aNodes.length; i < max; i++){
		aNodes[i].removeAttribute('href');
	}
}, false);

もちろん、マウスを乗せた場合に形状は変えたいという状況には、a:hover {cursor:pointer;} とスタイルを設定することで対応ができます。

元々のリンク遷移を生かしたい場合も、A ノードのループ処理内で aNodes[i].onclick = "location.href='" + aNodes[i].getAttribute('href') + "'"; と先に処理を入れると良いかと思います。フレーム処理している場合は target 属性の付与が必要になるのでご注意。

P.S. 最近は 直前に記述するので window.addEventListener が不要なことが増えました。