<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mac | hgrs&#039;s Blog</title>
	<atom:link href="/archives/tag/mac/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>文字好きエンジニアの技術メモ</description>
	<lastBuildDate>Mon, 18 Jan 2021 21:50:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>

<image>
	<url>/wp-content/uploads/2019/05/cropped-port_512-32x32.png</url>
	<title>Mac | hgrs&#039;s Blog</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Xcode Command Line Tools を入れ直す（ アップデートする ）</title>
		<link>/archives/439.html</link>
					<comments>/archives/439.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Mon, 08 Jun 2020 00:01:46 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">/?p=439</guid>

					<description><![CDATA[はじめに macOS で開発しようとすると Xcode Command Line Tools は必須...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>macOS で開発しようとすると Xcode Command Line Tools は必須ですが、バージョンなどの問題で入れ直す必要がありました。<br />
その方法をまとめます。</p>
<h2>Xcode Command Line Tools のアンインストール</h2>
<p>Xcode Command Line Tools は <code>/Library/Developer/CommandLineTools/</code> に保存されています。<br />
なので、このディレクトリを削除することでアンインストールが行えます。</p>
<pre><code class="language-bash">$ sudo rm -r /Library/Developer/CommandLineTools</code></pre>
<h2>Xcode Command Line Tools の再インストール</h2>
<p>コマンドラインツールだけ入れれば良いので、以下のコマンドでインストールができます。</p>
<pre><code class="language-bash">$ xcode-select --install</code></pre>
<h2>おわりに</h2>
<p>最新バージョンじゃない場合など、エラーを引き起こす原因になるので、できる限り最新のものを使用したいですね。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/439.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HTML, Markdown に画像を埋め込むのを簡単にするクイックアクションを作った</title>
		<link>/archives/393.html</link>
					<comments>/archives/393.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Sat, 25 Jan 2020 11:11:47 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">/?p=393</guid>

					<description><![CDATA[はじめに 小さい画像だったり、Markdown でパスを入れたくないときのために、画像を Base6...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>小さい画像だったり、Markdown でパスを入れたくないときのために、画像を Base64 にエンコードして埋め込めるようにする Mac のクイックアクションを作ったので紹介します。</p>
<h2>インストールと使い方</h2>
<h3>インストール</h3>
<p><a href="https://github.com/higurashi-takuto/img2base64/releases/download/v1.0.0/default.zip">こちら</a> をダウンロードして、解凍後、 <code>埋め込み形式に変換.workflow</code> をダブルクリックするとインストールができます。</p>
<h3>使い方</h3>
<p>Finder でイメージファイルを選択後、右クリック &gt; クイックアクション &gt; 埋め込み形式に変換 で実行することができます。</p>
<p>実行結果はクリップボードにコピーされた状態になっているので、貼り付けて使用してください。</p>
<p><img decoding="async" src="/wp-content/uploads/2020/01/cee7ec963a949c51aad8ce2fcb8505c1.png" alt="" /></p>
<h2>作り方について</h2>
<p>使いたいだけの人は特に必要ありませんが、詳細についてです。<br />
一応、<a href="https://github.com/higurashi-takuto/img2base64">GitHub リポジトリ</a> にしてあります。</p>
<h3>Automator クイックアクション</h3>
<p>このコマンドは Automator のクイックアクションとして作成しています。</p>
<p>Automator は macOS で色々と自動化するためのスクリプトなどを作れるアプリです。</p>
<p>その中でクイックアクションという右クリックのメニューから実行できるスクリプトがあり、それを利用しています。</p>
<p>クイックアクションでは macOS の機能を活用したアクションのほか、AppleScript や JavaScript、シェルスクリプトが実行できます。<br />
今回はこの中のシェルスクリプト（ Z Shell ）を利用しています。</p>
<p>Bash でも良かったのですが、最新の macOS はデフォルトが Z Shell なので Z Shell で書いています。</p>
<h3>コマンド</h3>
<p>中身は Base64 にするための <code>base64</code> と、改行文字を消すため <code>tr</code> 、書き出す文字列を出力するための <code>echo</code> とクリップボードにコピーするための <code>pbcopy</code> を使っています。</p>
<p>言葉で書くと複雑そうですが、コマンドは以下のような1行のコマンドです。</p>
<pre><code class="language-bash">echo \&lt;img\ src=\&quot;data:image/png\;base64,$(base64 $1)\&quot;\&gt; | tr -d &#039;\n&#039; | pbcopy</code></pre>
<p>これだけで、できています。<br />
ターミナルなどから実行するには引数の <code>$1</code> を画像のファイルパスにすれば動くと思います。</p>
<h2>おわりに</h2>
<p>はじめて Automator のアクション公開するんですけど、公開の仕方これでいいのかな…</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/393.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PythonからMac、Slack、Discord、LINEに通知を飛ばすライブラリを作った</title>
		<link>/archives/359.html</link>
					<comments>/archives/359.html#comments</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Tue, 24 Dec 2019 19:55:32 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">/?p=359</guid>

					<description><![CDATA[はじめに 実行時間がちょっと長いプログラムを走らせる時とかに、終わったことを通知して欲しかったので、...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>実行時間がちょっと長いプログラムを走らせる時とかに、終わったことを通知して欲しかったので、作った。</p>
<h2>ライブラリ</h2>
<p><a href="https://github.com/higurashi-takuto/pynotificator">ここ</a> にあります。</p>
<p>使い方とかは README 見れば、基本全部書いてあるので、言ってしまえばこの記事は特に読む必要もないです。</p>
<p>以下余談。</p>
<h2>なぜつくったのか</h2>
<p>僕の環境だと仕事だったり、研究で使ってるコードの多くが実行に結構な時間がかかります。具体的には数十分から数日とかです。</p>
<p>それだと、いちいち実行経過を追うのも無駄だけど、気付いたら終わってかなり時間がたっていたとかももったいないです。</p>
<p>そこで、実行経過だったり終了を知らせてくれたらいいなということで、作りました。</p>
<p>昔にもコード中に毎回書き捨てで通知を送るコードを書いていたりしたんですが、書き捨てもよくないし、利便性を高めたかったので、ちょっとちゃんとしたライブラリにしてみました。</p>
<h2>使用している技術</h2>
<h3>macOS 系</h3>
<p>ビープと通知センターの通知を出すのには AppleScript を実行することができる <code>osascript</code> コマンドを利用しています。このコマンドを Python から <code>subprocess</code> で呼び出しています。</p>
<p>AppleScript は結構いろいろなことができて、今回実行している通知センターへの通知の送信は結構豊富なオプションがあります。</p>
<p>わかりやすいところだとタイトルとサブタイトルですね。実際にこのように表示されます。</p>
<p><img decoding="async" src="/wp-content/uploads/2019/12/center-sample.png" alt="通知センター" /></p>
<h3>Slack、Discord、LINE</h3>
<p>Slack と Discord ではそれぞれ API として提供されているウェブフックを利用した通知になっています。こちらは Python の <code>requests</code> を利用して投げています。LINE についても LINE Notify を利用して流れはウェブフックと似た感じですね。</p>
<h2>その他</h2>
<h3>ライセンス</h3>
<p>MIT License にしてみました。自由に使っていただきたいので。</p>
<h3>コメントアウト・ドックストリングもどき</h3>
<p>日本語で少し書いています。最近コメントを日本語にするぐらいならコード自体日本語でいいんじゃないかなって気がしてきているので、時間があったら試してみたい。</p>
<h3>アイコン？</h3>
<p>この記事のアイキャッチにも設定している「py!」って書いてあるやつですね。「py」が小文字なのに「!」と位置を揃えたり、なんかそれっぽいグラデーションを使ってみたり、遊んでいます。文字だけですけど。フォントは Futura です。</p>
<h3>クラス図</h3>
<p>Pylint の Pyreverse を使用して出力しています。ただフォントが気に食わなかったので、SVG で出力してフォントを変更しています。</p>
<p><img decoding="async" src="/wp-content/uploads/2019/12/classes-1.png" alt="クラス図" /></p>
<h3>今後のアップデート</h3>
<p>Slack と Discord は詳細設定を足せそうなのでやれたらやろうかなと。あとファイルとか送れたら便利そうですよね。</p>
<h2>おわりに</h2>
<p>よかったら使ってみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/359.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>macOS で起動時に JupyterLab を自動で立ち上げる方法</title>
		<link>/archives/355.html</link>
					<comments>/archives/355.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Wed, 11 Dec 2019 05:10:28 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">/?p=355</guid>

					<description><![CDATA[はじめに JupyterLab は便利なので使っていきたい。でも毎回立ち上げたり、ターミナルが開きっ...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>JupyterLab は便利なので使っていきたい。でも毎回立ち上げたり、ターミナルが開きっぱなしなのが嫌なので、自動起動にする方法です。</p>
<h2>macOS での自動起動</h2>
<p>macOS でデーモンやエージェントを管理するには <code>launchctl</code> コマンドを使用します。</p>
<p>この <code>launchctl</code> で起動するためのアプリなり、コマンドなりの設定を書き記すプロパティファイルを作る必要があります。これは以前書いた <a href="/20191017130747">MacBook の充電音を消す記事</a> でも出てきた <code>.plist</code> の拡張子を持つファイルです。</p>
<p>今回はこの設定ファイルの作り方と、自動起動にするため設定について書いていきます。</p>
<h2>ファイル作成</h2>
<p>はじめに Jupyter の実行ファイルのパスを調べます。仮想環境を使用している場合はそれぞれの環境の <code>bin</code> に入っていると思います。そのほかの環境でも <code>which jupyter</code> で調べられると思います。</p>
<p>次に設定ファイルを作成します。保存場所は <code> ~/Library/LaunchAgents/</code> にします。ファイル名はなんでも良いですが、僕は <code>jupyterlab.plist</code> としています。以下のような内容です。</p>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;
&lt;plist version=&quot;1.0&quot;&gt;
&lt;dict&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;jupyterlab&lt;/string&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
        &lt;string&gt;ここに調べた実行ファイルのパス&lt;/string&gt;
        &lt;string&gt;lab&lt;/string&gt;
    &lt;/array&gt;
    &lt;key&gt;RunAtLoad&lt;/key&gt;
    &lt;true/&gt;
    &lt;key&gt;StandardOutPath&lt;/key&gt;
    &lt;string&gt;標準出力を記録するファイルのパス（必要なければ /dev/null ）&lt;/string&gt;
    &lt;key&gt;StandardErrorPath&lt;/key&gt;
    &lt;string&gt;エラーを記録するファイルのパス（必要なければ /dev/null ）&lt;/string&gt;
&lt;/dict&gt;
&lt;/plist&gt;</code></pre>
<p>となります。実際に僕が使用しているファイルは <a href="https://github.com/higurashi-takuto/mac-setup/blob/master/jupyterlab.plist">GitHub</a> で見ることができます。</p>
<p>これで設定ファイルが用意できたので、起動設定をしましょう。</p>
<h2>自動起動設定</h2>
<p>はじめに出てきた <code>launchctl</code> コマンドを使用します。コマンドは以下の通りです。</p>
<pre><code class="language-console">launchctl load ~/Library/LaunchAgents/jupyterlab.plist</code></pre>
<p>ちなみにやめたい場合は上記コマンドの <code>load</code> を <code>unload</code> にすれば停止されます。</p>
<h2>おわりに</h2>
<p>この方法はほかのコマンドなどにも使用できるので、よかったらカスタマイズして macOS を便利に使ってみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/355.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker Desktop for Mac のボリュームアクセスが遅いので使うのやめた話</title>
		<link>/archives/351.html</link>
					<comments>/archives/351.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Sun, 08 Dec 2019 02:45:24 +0000</pubDate>
				<category><![CDATA[エンジニアの日記]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">/?p=351</guid>

					<description><![CDATA[はじめに 周りの人が Docker Docker 言ってるので使ってみたけど、使わなくなったというお...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>周りの人が Docker Docker 言ってるので使ってみたけど、使わなくなったというお話です。</p>
<h2><a href="https://docs.docker.com/docker-for-mac/">Docker Desktop for Mac</a> について</h2>
<p>macOS で Docker が使えるアプリケーションです。GUI も含まれていますが、僕は使っていないのでよくわかりません。</p>
<p>そもそも Docker は Linux カーネルの機能を活かしたものなので本来 Linux 系の OS でなければ使えません。ではどのように macOS で Docker を使えるようにしているかというと、Linux の仮想マシンを立ち上げ、その上で Docker を実行しています。つまりコンテナ型仮想化の前にホスト型仮想化を使用しているので、そもそも Linux 上で Docker を使うのに比べるとデメリットが多くなります。</p>
<p>Linux 上で使っていれば、今回起きた問題も起きていなかったと思うので、便利に Docker を使用していたと思います。</p>
<h2>起こった問題</h2>
<p>マウントした macOS 上の重いボリュームへのアクセスが遅すぎた。どれぐらい遅いかというと <code>cd</code> で移動するのに数秒かかるレベルです。移動しようとしたディレクトリには2万ファイル、合計 100 MB ぐらいのものが入っていました。</p>
<p>僕の仕事や研究で扱うファイル的にこのようなデータにアクセスすることが多いので、毎回 <code>cd</code> でイラつくのは耐えられないということで使うのをやめてしまいました。</p>
<p>ちなみに、調べてみると他の方もファイルアクセスに限らず Docker Desktop for Mac が遅いという記事を書かれています。そこに書かれている対処法を試してみたり、Docker 周りの研究をしている人に聞いてみたりしたのですが、解決しませんでした。</p>
<h2>結局どうしたか</h2>
<p>Docker Desktop for Mac は諦めて、元の環境に戻しました。</p>
<p>僕は Python と JavaScript ぐらいしか書かないので、Python は pyenv と pyenv-virtualenv で JavaScript は npm で環境管理をしています。</p>
<h2>おわりに</h2>
<p><a href="https://github.com/higurashi-takuto/Docker-de-Dockern">Docker de Dockern</a> とか作って浮かれていたのに、結局使わなくなって「なんだかなぁ。」という感じ。</p>
<p>もし、解決できそうな方法があれば教えて欲しいです。Linux をメインにする！ とかは無しの方向で。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/351.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MacBookの忌まわしき充電音を消す方法</title>
		<link>/archives/337.html</link>
					<comments>/archives/337.html#comments</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Thu, 17 Oct 2019 04:07:47 +0000</pubDate>
				<category><![CDATA[エンジニアの日記]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">/?p=337</guid>

					<description><![CDATA[はじめに （アイキャッチが無駄にポップですね。） MacBook Proを普段快適に使っているのです...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>（アイキャッチが無駄にポップですね。）</p>
<p>MacBook Proを普段快適に使っているのですが、あの充電したときになる「フォンッ」みたいな音が許せません。</p>
<p>たぶん、充電できているかどうかの確認のためになっていると思うのですが、僕は充電の有無で画面の明るさを変える設定にしているので、音は邪魔なだけです。しかもこの音、本体を消音にしていても鳴るし、音楽や動画などの他の再生されている音を遮ります。悪質です。</p>
<p>消しましょう。</p>
<h2>環境</h2>
<p>僕の環境は以下の通りです。違う場合は今回紹介する方法では消せない可能性があるので注意しましょう。</p>
<pre><code class="language-bash">OS: macOS Catalina(10.15)
Model: MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)</code></pre>
<h2>消し方</h2>
<p>ターミナルで以下のコマンドを実行しましょう。</p>
<pre><code class="language-bash">$ defaults write com.apple.PowerChime ChimeOnNoHardware -bool true
$ killall PowerChime</code></pre>
<p>以上。</p>
<h2>ちなみに</h2>
<p>この音の正体はPowerChime.app（/System/Library/CoreServices/PowerChime.app）というアプリが鳴らしている音声ファイル（/System/Library/CoreServices/PowerChime.app/Contents/Resources/connect_power.aif）です。</p>
<p>他のサイトではこの音声ファイルをいじる方法が紹介されていたのですが、現在のMacは <code>/System</code> 以下のファイルの操作は原則禁止されているため、SIP（システム整合性保護）を無効化する必要があります。通常このSIPはセキュリティの観点から無効化することは推奨されません。ましてや、こんな音一つを消すために無効化して良いような保護ではないので、なんか調べて出てきたからの様な安易な気持ちでは実行しないようにしましょう。</p>
<p>今回紹介した方法は、アプリを読み込む設定ファイル（.plist）を変更することで消音対応を行なっています。Macの <code>defaults</code> コマンドではあらゆる設定ファイルの「デフォルト」を読み書きすることができます。つまり先ほどのコマンドは <code>com.apple.PowerChime</code> の設定の <code>ChimeOnNoHardware</code> という項目を <code>true</code> に <code>write</code> するということですね。</p>
<p>ここで書き込まれた設定は  <code>/Users/&lt;username&gt;/Library/Preferences/com.apple.PowerChime.plist</code> に書き込まれます。ただしバイナリ化されているため、中身を見たい場合はクイックルック（ファイルを選択しスペースキーを押す）か、xmlに変換（ <code>plutil -convert xml1 /Users/&lt;username&gt;/Library/Preferences/com.apple.PowerChime.plist</code> 通常は上書きされてしまうので、されたくない場合は <code>-o &lt;path&gt;</code> のオプションを追加）して中身を見てみましょう。</p>
<p>また先ほどの <code>defaults</code> コマンドでも確認が行えます。今度は <code>read</code> を使い、 <code>defaults read com.apple.PowerChime</code> を実行すると、先ほど設定したものが確認できます。</p>
<h2>おわりに</h2>
<p>最後はもう関係ない話ですが、いろいろ調べてみて知らないこともあったのでまとめてみました。これでもうあの忌まわしき充電音とはおさらばです。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/337.html/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
