最もシンプルなicnsファイルのつくりかた

macOS上でのつくりかたです。

  1. 128px x 128px、72dpi、icon_128x128.pngというファイル名のpngファイルを作成する。

  2. 作成したpngファイルをX.iconsetXは作成したいicnsファイルの名前。)というディレクトリに格納する。

  3. X.iconsetディレクトリが存在するディレクトリにて、iconutil -c icns X.iconsetを実行。

これにて、X.iconsetディレクトリが存在するディレクトリにX.icnsというファイル名のicnsファイルが作成されます。

特定のポートに関連付けられたWebサービスを特定のサブドメインに関連付ける

やりたいことは、今まで

http://sample.com:1234/
http://sample.com:8888/

にてアクセス可能であったWebサービスに、当該Webサービス自体を修正せずに、それぞれ

http://service0.sample.com/
http://service1.sample.com/

にてアクセス可能なようにすることです。

以下に説明するように、nginxのバーチャルホスト+リバースプロキシの機能を利用することにより、実現することができました。

前提

  • Webサービスを提供するホストとnginxが稼働するホストとは同一。
  • 当該ホストのOSはDebian系のLinuxaptが利用できるということ。)。

nginx

まずは、nginxをインストールします。

sudo apt install nginx

次に、以下のような内容の設定ファイルを作成します。 この設定ファイルは/etc/nginx/conf.d/に作成する必要があり、ここでは/etc/nginx/conf.d/sample.confであるものとします。

server {
    listen 80;
    server_name service0.sample.com;

    location / {
        proxy_pass http://localhost:1234;
    }
}

server {
    listen 80;
    server_name service1.sample.com;

    location / {
        proxy_pass http://localhost:8888;
    }
}

最後に、設定を反映させるべく、nginxを再起動します。

sudo systemctl restart nginx

DNS

忘れずに、service0.example.com及びservice1.example.comの名前解決ができるようにDNSを設定します。 DNSの設定については省略。

macOSにおけるローカルディレクトリ間自動双方向同期

あまりないことかと思いますが、先日、ローカルディレクトリ間の自動双方向同期を実現する必要がありました。

ここでいう「ディレクトリ間の自動双方向同期」とは、2つのディレクトリのうちの一方でファイルの作成、修正、削除等を行うと、もう一方のディレクトリで自動的に対応するファイルの作成、修正、削除等が行われ、その逆も同様のことが行われるといった動作のことです。

以下に説明するように、lsyncdとlaunchdを用いることにより、タイトルのことを実現することができました。 なお、Homebrewがインストールされていることを前提としています。

lsyncd

色々と調べたところ、ローカルのディレクトリとリモートのディレクトリとの間の自動双方向同期を実現するソフトウェアとして、lsyncdが見つかりました。 このソフトウェア、マニュアル1によればローカルディレクトリ間の自動双方向同期にも対応しているみたいです。

というわけで、まずはlsyncdをインストールします。 また、バージョン2.2.1からlsyncdはバージョン3.1以上のrsyncを必要とするようですが、rsync --versionによれば、macOSにデフォルトでインストールされているrsyncはバージョン2.6.9でした(Mojaveにて確認。)。 そのため、新しいバージョンのrsyncもインストールします。 即ち、

brew install lsyncd rsync

次に、以下のような内容のlsyncdの設定ファイルを作成します。 この設定ファイルはどこに作成してもよく、ここでは/path/to/lsyncd.confであるものとします。

settings {
    logfile     = "/tmp/lsyncd.log",
    statusFile  = "/tmp/lsyncd.status",
    nodaemon    = true
}

sync {
    default.rsync,
    source  = "/path/to/sync0/",
    target  = "/path/to/sync1/",
    delete  = "running",
    exclude = { '.DS_Store' },
    rsync   = {
        binary  = "/usr/local/bin/rsync",
        _extra  = {
            "--owner", "--group"
        }
    }
}

sync {
    default.rsync,
    source  = "/path/to/sync1/",
    target  = "/path/to/sync0/",
    delete  = "running",
    exclude = { '.DS_Store' },
    rsync   = {
        binary  = "/usr/local/bin/rsync",
        _extra  = {
            "--owner", "--group"
        }
    }
}

なお、/path/to/sync0/及び/path/to/sync1/は、自動双方向同期したい2つのディレクトリのパスです。

これで、lsyncdの準備は完了です。

launchd

真に「自動」双方向同期であるためには、macOSの起動直後から当該双方向同期が有効となっている必要があります。 そこで、macOSを起動すると、上記設定ファイルの内容でlsyncdが自動的に起動するように設定します。 macOSにおいてlsyncdは管理者権限で実行する必要があるために、この設定にはlaunchdを用います。

以下のような内容のlaunchdの設定ファイルを作成します。 この設定ファイルは/Library/LaunchDaemons/に作成する必要があり、ここでは/Library/LaunchDaemons/com.sample.lsyncd.plistであるものとします。 なお、/Library/LaunchDaemons/におけるファイル作成には管理者権限が必要です。

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
    <string>com.sample.lsyncd</string>
    <key>ProgramArguments</key>
    <array>
            <string>/usr/local/bin/lsyncd</string>
            <string>/path/to/lsyncd.conf</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

これで、lanuchdの準備も完了です。

ローカルディレクトリ間自動双方向同期の開始

単純に、macOSを再起動すればよいです。

language-applescriptパッケージのコメント記法を変更する

language-applescriptは、AppleScriptでのコーディングをサポートするAtomのパッケージです。

しかしながらこのパッケージ、少なくともバージョン0.3.0においては、editor:toggle-line-commentsコマンドを実行すると、行頭に#(シャープ)を付加するという挙動をとります。 ちなみに、editor:toggle-line-commentsは、デフォルトのショートカットキーだと⌘/を入力することで実行されるコマンドです。

これについて、editor:toggle-line-commentsコマンドにより行頭に--(ハイフン2つ)を付加するようにできないかとパッケージの中身をいじってみたところ、以下のようにすることで実現することができました。

settings/language-applescript.cson

において、

    'commentStart': '# '

を、

    'commentStart': '-- '

に書き換える。

これだけです。

macOS Mojaveにおけるスリープ中のバッテリー消費

tl; dr

macOS Mojaveにおいてスリープ中に時々妙にバッテリーが消費されることがあったが、pmsetコマンドでstandbydelayhighパラメータを調整したら改善された(みたいだ)よという話。

経緯

MacBook (Early 2015)のOSをSierraからMojaveにアップグレードしたところ、スリープ復帰後、バッテリー残量が予想外に少なくなっていることが度々ありました。 正確には、スリープ中のバッテリー消費が激しいとき(例えば、約6時間で約25%の消費)とそうでないときがあるという感じです。 Sierraではそんなことなかったです。 SMCリセットをしても改善されず…

そんなこんなで色々と調べたところ、pmset -gで表示されるスリープ関連のパラメータが、SierraとMojaveとで異なる事に気付きました。

pmsetのパラメータ

pmsetは、システム環境設定の省エネルギー設定では設定できない、スリープ関連の詳細なパラメータを設定できるコマンドです。

macOSのスリープは、デフォルトではセーフスリープというモードに設定されています。 セーフスリープ・モードでは、スリープ処理が開始されると、まず、メモリ以外の必要でないコンポーネントへの通電を停止し、所定時間経過後に、メモリの内容をストレージに記憶した上で、メモリへの通電も停止するという動作が実行されます。 ここで、スリープ処理開始後のメモリには通電されている状態を「スリープ状態」といい、メモリへの通電も停止された状態を「ディープスリープ状態」と呼ぶことにします。 原則的には、スリープ状態でのバッテリー消費の方が、ディープスリープ状態でのバッテリー消費よりも大きいはずです。

Sierraでは、上記「所定時間」はpmsetstandbydelayというパラメータに相当し、デフォルトだと10800(単位は秒。即ち3時間。)に設定されています。

しかしながら、Mojaveにはstandbydelayパラメータはなく、その代わりに、standbydelayhighstandbydelaylowという2つのパラメータが見つかりました。 デフォルト値は、それぞれ、86400(24時間)と10800(3時間)です。

man pmsetによれば、要するに、standbydelayhighはバッテリー残量が所定値より大きいときの、standbydelaylowはバッテリー残量が所定値より小さいときの、上記「所定時間」に相当するとのこと。

現象についての考察

どうやら、Sierraとは異なり、Mojaveにおいては、スリープ状態からディープスリープ状態に移行するまでの時間(上記「所定時間」)が、バッテリーの残量によって異なるみたいです。

そして、上記のようなデフォルト値の下では、バッテリーの残量が十分である状況の方が、そうでない状況と比べて、よりバッテリー消費の大きいスリープ状態が長く続くことになります。

即ち、スリープ中のバッテリー消費が激しかったのは、たまたまバッテリー残量が多かったときであり、逆にそうでもなかったのは、たまたまバッテリー残量が少なかったときであったという仮説が成り立ちます。

やったこと

pmsetコマンドにより、standbydelayhighパラメータをstandbydelaylowバラメータと同じ値に設定しました。

詳細には、とっととディープスリープ状態に移行してもらった方がよりバッテリー消費は減るだろうと考え、上記両パラメータを600(10分)に設定しました。

即ち、

sudo pmset -a standbydelayhigh 600 standbydelaylow 600

その後

本稿執筆時点で設定から数日経ちますが、今のところ、スリープ中の激しいバッテリー消費は再発してないです。

magnifiedのプライバシーポリシー

カメラ(写真と動画の撮影)

  • 本アプリは、拡大する画像を撮影するためにカメラ機能を使用しています。
  • 本アプリは、撮影した画像を一時的に記憶します。

備考

  • 本ポリシーは、予告なく変更されることがあります。