
<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Software | monolog</title>
	<atom:link href="https://blog.monora.me/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.monora.me</link>
	<description>monora log #=&#62; ものろーぐ</description>
	<lastBuildDate>Thu, 28 May 2020 22:51:03 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.1</generator>
<site xmlns="com-wordpress:feed-additions:1">21279848</site>	<item>
		<title>macOS で Windows 10 のインストーラをUSBメモリに作る</title>
		<link>https://blog.monora.me/2020/05/create-windows-10-installer-usb-stick-on-macos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-windows-10-installer-usb-stick-on-macos</link>
		
		<dc:creator><![CDATA[きょんたん]]></dc:creator>
		<pubDate>Thu, 07 May 2020 12:19:33 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[雑記]]></category>
		<category><![CDATA[Windows10]]></category>
		<guid isPermaLink="false">https://blog.monora.me/?p=2016</guid>

					<description><![CDATA[<p>2020年にもなってこんなことで微妙に苦しんだので備忘録。 EFIなら何も考えなくてもいいのかもしれないが、レガシーPC向けにMBRでやろうとすると微妙にはまったので Windows 10 の ISO をダウンロードして [&#8230;]</p>
The post <a href="https://blog.monora.me/2020/05/create-windows-10-installer-usb-stick-on-macos/">macOS で Windows 10 のインストーラをUSBメモリに作る</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></description>
										<content:encoded><![CDATA[<p>2020年にもなってこんなことで微妙に苦しんだので備忘録。</p>
<p>EFIなら何も考えなくてもいいのかもしれないが、レガシーPC向けにMBRでやろうとすると微妙にはまったので</p>
<ol>
<li>Windows 10 の ISO をダウンロードしてくる
<ul>
<li><a href="https://www.microsoft.com/ja-jp/software-download/windows10ISO">https://www.microsoft.com/ja-jp/software-download/windows10ISO</a></li>
</ul>
</li>
<li>これに従う
<ul>
<li><a href="https://alexlubbock.com/bootable-windows-usb-on-mac">https://alexlubbock.com/bootable-windows-usb-on-mac</a></li>
</ul>
</li>
<li>ブートローダーを書く
<ul>
<li>このリンクの Step 3 以降に従う</li>
<li><a href="https://www.oueta.com/macos/create-windows-7-8-10-bootable-usb-drive-in-macos-with-command-line-mbr-partitioning-scheme/">https://www.oueta.com/macos/create-windows-7-8-10-bootable-usb-drive-in-macos-with-command-line-mbr-partitioning-scheme/</a></li>
</ul>
</li>
</ol>
<p><span id="more-2016"></span></p>
<p>ざっくりコマンドの流れを書くとこんな感じ。ディスクは <code>/dev/disk2</code> とします。ツール等のリンクは参照した記事ママなので、リンク切れしていたら別のところから探してきてください。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shell">$ brew install wimlib
$ hdiutil mount Win10_1909_Japanese_x64.iso
$ sudo diskutil eraseDisk MS-DOS "WIN10" MBR /dev/disk2

$ rsync -vha --exclude=sources/install.wim /Volumes/[isoのマウント先]/ /Volumes/WIN10
$ wimlib-imagex split /Volumes/[isoのマウント先]/sources/install.wim /Volumes/WIN10/sources/install.swm 4000

$ curl https://www.oueta.com/wp-content/uploads/2018/10/syslinux-4.03.tar.gz -o syslinux-4.03.tar.gz
$ tar -zxvf syslinux-4.03.tar.gz

$ curl https://www.oueta.com/wp-content/uploads/2018/10/syslinux-mac.tar.gz -o syslinux-mac.tar.gz
$ tar -zxvf syslinux-mac.tar.gz

$ sudo dd if=syslinux-4.03/mbr/mbr.bin of=/dev/disk2 bs=440 count=1
$ sudo ./syslinux -i /dev/disk2s1

$ mkdir /Volumes/WIN10/syslinux
$ cp syslinux-4.03/com32/modules/*.c32 /Volumes/WIN10/syslinux
$ $EDITOR /Volumes/WIN10/syslinux/syslinux.cfg

$ sudo diskutil unmountDisk disk2

$ sudo fdisk -e /dev/disk2
fdisk: 1&gt; flag 1
Partition 1 marked active.
fdisk:*1&gt; write
Writing MBR at offset 0.
fdisk: 1&gt; exit
$ diskutil eject disk2</pre>The post <a href="https://blog.monora.me/2020/05/create-windows-10-installer-usb-stick-on-macos/">macOS で Windows 10 のインストーラをUSBメモリに作る</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2016</post-id>	</item>
		<item>
		<title>コストを掛けずにBigQueryを使い倒す会</title>
		<link>https://blog.monora.me/2019/07/reduce-bigquery-cost-as-little-as-possible/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=reduce-bigquery-cost-as-little-as-possible</link>
		
		<dc:creator><![CDATA[きょんたん]]></dc:creator>
		<pubDate>Mon, 29 Jul 2019 03:59:58 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[クラウド]]></category>
		<guid isPermaLink="false">https://blog.monora.me/?p=1960</guid>

					<description><![CDATA[<p>BigQueryを使い倒す会代表のkyontanです．今回は実用性低めな分野で BigQuery を1万倍有効活用する方法……ではなく延々とBigQueryがお得だという話をします． 今回ご紹介するテクニックを意味不明に [&#8230;]</p>
The post <a href="https://blog.monora.me/2019/07/reduce-bigquery-cost-as-little-as-possible/">コストを掛けずにBigQueryを使い倒す会</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></description>
										<content:encoded><![CDATA[<p>BigQueryを使い倒す会代表のkyontanです．今回は実用性低めな分野で BigQuery を1万倍有効活用する方法……ではなく延々とBigQueryがお得だという話をします．</p>
<p>今回ご紹介するテクニックを意味不明に活用することで，18.2GBのスキャン(10円程度)で2301億行の一時テーブルを作って集計することが可能です．便利ですね．ちなみに私は12桁の数字を突然見て混乱しました．<a href="https://blog.monora.me/wp-content/uploads/2019/07/7dca5e409a05c8a1ea90b6f89f7c4faf.png"><img loading="lazy" class="aligncenter wp-image-1962 size-medium" src="https://blog.monora.me/wp-content/uploads/2019/07/7dca5e409a05c8a1ea90b6f89f7c4faf-e1564329514637-320x269.png" alt="COUNT(*)の結果が2301億" width="320" height="269" srcset="https://blog.monora.me/wp-content/uploads/2019/07/7dca5e409a05c8a1ea90b6f89f7c4faf-e1564329514637-320x269.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/7dca5e409a05c8a1ea90b6f89f7c4faf-e1564329514637-640x538.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/7dca5e409a05c8a1ea90b6f89f7c4faf-e1564329514637-200x168.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/7dca5e409a05c8a1ea90b6f89f7c4faf-e1564329514637.png 697w" sizes="(max-width: 320px) 100vw, 320px" /></a><a href="https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80.png"><img loading="lazy" class="aligncenter wp-image-1971 size-medium" src="https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80-320x153.png" alt="" width="320" height="153" srcset="https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80-320x153.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80-200x96.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80-768x367.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80-640x306.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/14d693efa05e32c70acacecaf6706a80.png 824w" sizes="(max-width: 320px) 100vw, 320px" /></a>ちなみに上のクエリは37.5秒で帰ってきましたが，内部では4時間52分のCPU時間を使用したようです．つまり，単純に計算すると約500スレッドが並列して走っていたようです．すごいですね……</p>
<p>(注: この記事は実用性皆無です．ごく一部を除き，一般の分析用途でBigQueryを使用するユーザにはなんの利もありません)</p>
<p>&nbsp;</p>
<p><span id="more-1960"></span></p>
<p>他にも，1TB超えのデータをシャッフルすることもあり…… (シャッフルという概念は一般的なRDBMSにはなく，後述するMapReduceが持つ特徴の一つです)<br />
1TBのデータをシャッフルできるの異常じゃないですか? DC内ネットワークすごいですね．</p>
<p><a href="https://blog.monora.me/wp-content/uploads/2019/07/06326d4c16567d6215d323c7afc1aa92-e1564331685819.png"><img loading="lazy" class="aligncenter wp-image-1976 size-medium" src="https://blog.monora.me/wp-content/uploads/2019/07/06326d4c16567d6215d323c7afc1aa92-e1564331898694-320x120.png" alt="" width="320" height="120" srcset="https://blog.monora.me/wp-content/uploads/2019/07/06326d4c16567d6215d323c7afc1aa92-e1564331898694-320x120.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/06326d4c16567d6215d323c7afc1aa92-e1564331898694.png 376w" sizes="(max-width: 320px) 100vw, 320px" /></a></p>
<p>並列度が高いクエリだと1週間どころか2週間を超えるCPU時間を1発のクエリで使うこともあります．</p>
<p><a href="https://blog.monora.me/wp-content/uploads/2019/07/792089d2da905347be0c9a8ef9e01175.png"><br />
</a><a href="https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40.png"><img loading="lazy" class="aligncenter wp-image-1970 size-medium" src="https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40-e1564331854334-320x113.png" alt="" width="320" height="113" srcset="https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40-e1564331854334-320x113.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40-e1564331854334-200x70.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40-e1564331854334-768x270.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40-e1564331854334-640x225.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/8680914b30d23c9f60197478dce82e40-e1564331854334.png 869w" sizes="(max-width: 320px) 100vw, 320px" /></a>さて，BigQueryのコストはスキャンするデータ量に依存します．そのため，一般的なログ分析基盤でコスト削減のためにスキャンする列を減らしたり，時系列でパーティショニングして必要な分だけスキャンする手法が取られますが，こういった話はありふれているので割愛します．</p>
<p>ここでの目的はスキャン量を増やすこと無くスロット時間(CPU時間)を増やすことであり，これにより同じコストでより多くのCPUを使いたいということです．とにかく多くのリソースを使うことが快楽に繋がります．</p>
<p>実際，上の図では31日と5時間のCPU時間をわずか66.6GBのスキャンで消費することに成功しています．<br />
BigQueryは執筆時点で1TBスキャンするコストが$5ですから，66.6GBのスキャンはわずか30円程度です．30円でGCPのサーバを1ヶ月分動かせると考えるとお得な気がしませんか?</p>
<p>コストパフォーマンスを突き詰めていくと，1.6MBのデータから2時間41分のCPU時間を消費することもできます．<br />
BigQueryは10MB以下しかスキャンしなかった場合には，10MBへ切り上げた上で課金の計算がなされますが，10MBスキャンしたところで掛かるコストは$0.00005 ですから，これは実質無料です．</p>
<p><a href="https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c.png"><img loading="lazy" class="aligncenter wp-image-1972 size-medium" src="https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c-320x143.png" alt="" width="320" height="143" srcset="https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c-320x143.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c-200x89.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c-768x343.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c-640x285.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/cacac853e2084a9061d9193aeb077b5c.png 834w" sizes="(max-width: 320px) 100vw, 320px" /></a></p>
<p>一方で，複雑なクエリを叩くと実際長い時間がかかることがあります．このとき，BigQueryではクエリのタイムアウトが6時間と定められているため，これを超えるとクエリが強制終了させられます．</p>
<p><a href="https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3.png"><img loading="lazy" class="aligncenter size-large wp-image-1975" src="https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3-640x152.png" alt="" width="620" height="147" srcset="https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3-640x152.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3-200x48.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3-320x76.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3-768x183.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/5e5ec728f22e4641f818efb8aadcd2a3.png 1228w" sizes="(max-width: 620px) 100vw, 620px" /></a></p>
<div class="p6n-message p6n-message-error" aria-hidden="false">
<div class="p6n-message-inner">
<div>他にも雑に <code>PARTITION BY</code>を使ってパーティションを切りつつ内部でソートを掛けているとメモリを食いすぎて死んでしまったり</div>
<div><a href="https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9.png"><img loading="lazy" class="aligncenter size-large wp-image-1969" src="https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9-640x161.png" alt="" width="620" height="156" srcset="https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9-640x161.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9-200x50.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9-320x80.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9-768x193.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/aedba02500b4f4c0690d5d273befdac9.png 1258w" sizes="(max-width: 620px) 100vw, 620px" /></a></div>
<div></div>
<div>(意訳ですが)予想された時間を大幅に超えたのでとりあえず止めました，みたいなエラーが出たりします．<br />
これは未だに納得がいってない．6時間動かしてから言って欲しい．</div>
<div class="p6n-message-text"><a href="https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71.png"><img loading="lazy" class="aligncenter size-large wp-image-1973" src="https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71-640x140.png" alt="" width="620" height="136" srcset="https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71-640x140.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71-200x44.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71-320x70.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71-768x168.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/f3b02d19c3d3ab6643f83ae9d2ecaf71.png 1258w" sizes="(max-width: 620px) 100vw, 620px" /></a></div>
</div>
</div>
<p>&nbsp;</p>
<p>さて，我々は賢いので(?) BigQueryの内部アーキテクチャを攻略することで可能な限りこういった中断系エラーを避けつつ安価にクエリする方法を試すことができます．</p>
<p>BigQueryはSQLが使える分析特化のDBではありますが，中身はMapReduceだと推測され，実際クエリプランを見るとそれっぽい様子を垣間見ることができます．<br />
MapReduceといえばHadoopやSparkが有名ですが僕は触ったことがありません．安易に解釈すると大量のマシンにデータをバラ撒いてジョインして適当に集計する，みたいな感じでしょうか．そのうち原論文をちゃんと読みたいですね．</p>
<p>BigQuery公式でも述べられていますが，クエリを高速に実行するためのキモはいかにうまく分散させるかに掛かっています．CPU時間を稼ぎつつ実時間を抑えるためにはこの並列数を上げるためのクエリ書換が重要になります．</p>
<p>今回私が実行したかったクエリは約1万行のテーブルを2重に自己結合するクエリでした．イメージとしては下のようなクエリになります．<br />
単純にINNER JOINを2回書けばよいのですが，計算量は単純計算で1万の3乗，1兆回のループが発生します．終わりません．</p>
<pre class="EnlighterJSRAW" lang="sql" data-enlighter-language="sql" data-enlighter-linenumbers="true">SELECT *
FROM some_table src
INNER JOIN some_table a
  ON ...
INNER JOIN some_table b
  ON ...
</pre>
<p>実際には<code>ON</code>句での絞り込みがあるので結果セットは数分の一(それでも数千億ありますが)になるのですが，こんなクエリを素直に書いても全然スケールしません．</p>
<p>これは，行数が少ないテーブルの<code>INNER JOIN</code>はあまり並列数を上げて実行してくれない現在のBigQueryのクエリ計画エンジン(?)の特性に思えます．</p>
<p>ちなみに BigQuery だと WITH句を使って一時テーブルの見た目をした何かを作ることができますが，これは実行プランには影響がありません．</p>
<pre class="EnlighterJSRAW" lang="sql" data-enlighter-language="sql" data-enlighter-linenumbers="true">WITH some_table_joined AS (
  SELECT *
  FROM some_table src
  INNER JOIN some_table a
    ON ...
)
SELECT *
FROM some_table_joined
INNER JOIN some_table b
  ON ...
</pre>
<p>対策として，まず自己結合を1回した一時テーブルを作り(数千万行)クエリをし，その結果テーブルに対して再度自己結合を掛けるクエリを書いたところ500スロット並列で動くことを確認しました．具体的にはクエリを次の2つに分割することになります．</p>
<pre class="EnlighterJSRAW" lang="sql" data-enlighter-language="sql" data-enlighter-linenumbers="true">-- create some_table_joined
SELECT *
FROM some_table src
INNER JOIN some_table a
  ON ...
</pre>
<pre class="EnlighterJSRAW" lang="sql" data-enlighter-language="sql" data-enlighter-linenumbers="true">-- join some_table_joined and some_table
SELECT *
FROM some_table_joined
INNER JOIN some_table b
  ON ...
</pre>
<p>元の1万行のデータは高々数MBしかないため，これを2重結合するクエリが動けば実質無料になるのですが，これはうまく行かず，結局自己結合した一時テーブルのスキャンに数十円程度掛かりました．それでも安いのですが……</p>
<p>ちなみにここで注意すべきこととして，ストレージ課金があります．BigQueryのストレージは安価とはいえ，3ヶ月以内に変更されたデータに掛かる料金，つまりActive Storageは $0.020/GB です．中間テーブルを作ってクエリが終わり，使いみちがなくなったら不要なテーブルを削除しましょう．<br />
(実際には BigQuery でクエリしたときに勝手に作られる結果用の一時テーブル(数時間しか有効期限がない)は課金されないような気がします．僕は実験が日をまたぐこともありますし，とりあえず名前を付けてテーブルに保存していたので消す必要がありました)</p>
<p>他にも，やはり数千万行を超えるデータのソートは苦手なようで，なかなか苦労しました．結局PARTITION BYの中でソートをして成功したことは数えるほどしかありません．今回のケースでは諦めてMIN, MAX関数に逃げてしまいましたが，本来は一時テーブルをもう一度作らないとタイムアウト内に終わらない気がしますね．</p>
<p>このように，BigQueryでログデータ以外の集計をする人は実質存在しないかと思いますが，今回のケースではうまくMapReduceの特性を利用することができ，無事高速かつ安価に数千億の組み合わせを試行することができました．</p>
<hr />
<h3>おまけ</h3>
<p>BigQueryはスキャン量に応じて課金されると書きました．つまりスキャンしないと無料です．</p>
<p>というわけでこういうことができます．<a href="https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938.png"><img loading="lazy" class="aligncenter size-large wp-image-1982" src="https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938-613x640.png" alt="" width="613" height="640" srcset="https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938-613x640.png 613w, https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938-192x200.png 192w, https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938-307x320.png 307w, https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938-768x802.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/756dad170ef7b033f0c498f67985b938.png 1100w" sizes="(max-width: 613px) 100vw, 613px" /></a></p>
<p>無限のリソースがあったら何をしますか? とりあえず面倒になったのでモンテカルロ法で円周率でも計算しましょう．<a href="https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59.png"><img loading="lazy" class="aligncenter size-large wp-image-1985" src="https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59-640x561.png" alt="" width="620" height="543" srcset="https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59-640x561.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59-200x175.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59-320x281.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59-768x673.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/329f09089ef22723a5f246ba4ffa6c59.png 1362w" sizes="(max-width: 620px) 100vw, 620px" /></a>とりあえずできましたが精度が低い……</p>
<p><a href="https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5.png"><img loading="lazy" class="aligncenter size-large wp-image-1984" src="https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5-640x383.png" alt="" width="620" height="371" srcset="https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5-640x383.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5-200x120.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5-320x191.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5-768x459.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/54a43dabb44677b153de8eebc7c997a5.png 1354w" sizes="(max-width: 620px) 100vw, 620px" /></a>ﾇｯ</p>
<p><a href="https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb.png"><img loading="lazy" class="aligncenter size-large wp-image-1983" src="https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb-640x380.png" alt="" width="620" height="368" srcset="https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb-640x380.png 640w, https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb-200x119.png 200w, https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb-320x190.png 320w, https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb-768x456.png 768w, https://blog.monora.me/wp-content/uploads/2019/07/fa961c9f1c76cbd06a1180add91eaeeb.png 1372w" sizes="(max-width: 620px) 100vw, 620px" /></a>こういうことをしたら終わらなくなってしまったので終わりです．(朝見たらタイムアウトしてました)<br />
ちなみにBigQueryはJavaScriptでUDFを書くことができますが，これはこれでタイムアウトやスロット数が別にあり色々大変です．頑張りましょう．</p>
<p>いかがでしたか? ぜひ，皆さんもBigQueryをどんどん活用してください．</p>The post <a href="https://blog.monora.me/2019/07/reduce-bigquery-cost-as-little-as-possible/">コストを掛けずにBigQueryを使い倒す会</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1960</post-id>	</item>
		<item>
		<title>YubiKey 5C を買ったので ECDSA鍵で ssh した</title>
		<link>https://blog.monora.me/2019/04/bought-yubikey-5c-and-ssh-using-ecdsa-key/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=bought-yubikey-5c-and-ssh-using-ecdsa-key</link>
		
		<dc:creator><![CDATA[きょんたん]]></dc:creator>
		<pubDate>Thu, 18 Apr 2019 16:38:43 +0000</pubDate>
				<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[OpenSSH]]></category>
		<category><![CDATA[YubiKey]]></category>
		<guid isPermaLink="false">https://blog.monora.me/?p=1944</guid>

					<description><![CDATA[<p>こんにちは。唐突に YubiKey が欲しくなったので買いました。こんなことをやっている場合ではない…… 正確には、Amazon.co.jp を見たら異常に高くてそりゃ転売したら儲かるな、という気持ちになったので、適当に [&#8230;]</p>
The post <a href="https://blog.monora.me/2019/04/bought-yubikey-5c-and-ssh-using-ecdsa-key/">YubiKey 5C を買ったので ECDSA鍵で ssh した</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></description>
										<content:encoded><![CDATA[<p>こんにちは。唐突に YubiKey が欲しくなったので買いました。こんなことをやっている場合ではない……</p>
<p>正確には、Amazon.co.jp を見たら異常に高くてそりゃ転売したら儲かるな、という気持ちになったので、適当に人を募って Amazon.com (US) で共同購入しました。<br />
関税や送料を足した結果、YubiKey 5 NFC が5500円, YubiKey 5C が6100円ぐらいで買えました。良かったですね。</p>
<p>YubiKey といえばそもそも OTP が出てくるキーボードとして認識されるデバイスですが、最近だと WebAuthn で使えたりしますね。あとは PKCS#11 の署名用や適当な鍵を登録できたりします。</p>
<p>雑に手元の macOS でssh するぞ、と思ったら地味にハマってしまったのでいろいろやった結果動くようになったのでメモ</p>
<p>手順だけ分かればおっけー！という方は Gist にパッチ等まとめたので、そちらを参照してください: <a href="https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8">https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8</a></p>
<p><span id="more-1944"></span></p>
<p>検証環境のバージョンは macOS Mojave 10.14.4 で、OpenSSH は 7.9p1, LibreSSL 2.7.3 が入っていました。<br />
ただ、今回は最終的に OpenSSH と OpenSSL は自前でビルドしたのであまり関係ありません。<br />
より重要そうな Homebrew でインストールしたパッケージのバージョンは、 OpenSSH 7.9p1, OpenSSL 1.0.2r (26 Feb 2019), OpenSC 0.19.0 です。</p>
<p>まず、下記の記事などを参考に鍵の生成を試みます。</p>
<blockquote><p>Putty CAC で SSH に YubiKey を使う(OpenSC編) &#8211; enjoy struggling<br />
<a href="https://blog.haniyama.com/2018/02/02/yubikey-ssh-opensc/"><span style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;">https://blog.haniyama.com/2018/02/02/yubikey-ssh-opensc/</span></a></p></blockquote>
<p>GUI のツール (YubiKey PIV Manager) の場合は PIN を設定すると自動的に Authentication と Key Management 用の鍵を生成してくれます。現代だとデフォルトで <code>ecdsa-sha2-nistp256</code> の鍵が生成されるんですね。便利。</p>
<h2>公開鍵を取り出そうとした</h2>
<p>YubiKey へのアクセスや署名(でよいのでしょうか?) にはスマートカード等で使う OpenSC を使用するようです。今回は Homebrew でインストールしました。 (<code>brew install opensc</code>)</p>
<p>早速試してみます。まずは上の</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shellscript" data-enlighter-linenumbers="false"># ssh-keygen -D /usr/local/Cellar/opensc/0.19.0/lib/opensc-pkcs11.so
C_GetAttributeValue failed: 18
C_GetAttributeValue failed: 18
cannot read public key from pkcs11</pre>
<p>うまく行きませんね。(上手く行った場合はこの記事を読む必要はありません。最後のステップまで飛ばしてください。</p>
<h2>パッチを当てる</h2>
<p>エラー文でググると偉大な先達の記事が出てきます。今回この記事がなかったら即死していたでしょう。</p>
<blockquote><p>ssh with yubikey ECDSA keys &#8211; lithium03の物置<br />
<a href="https://lithium03.info/yubikey/index.html">https://lithium03.info/yubikey/index.html</a></p></blockquote>
<p>この記事を読むと、「RSA鍵なら問題なくいける」「OpenSSH が OpenSC を使うときに (具体的には PKCS#11 の署名等で) ECDSA鍵に対応できてない」ということが分かります。</p>
<p>親切にパッチや、そのパッチの元になったチケットまでリンクがあります。</p>
<blockquote><p>2474 – Enabling ECDSA in PKCS#11 support for ssh-agent<br />
<a href="https://bugzilla.mindrot.org/show_bug.cgi?id=2474">https://bugzilla.mindrot.org/show_bug.cgi?id=2474</a></p></blockquote>
<p>このチケットを見ると、Fedora 28 では既にこのパッチがバックポートされていること、upstream には OpenSSH 8.0 でマージされる予定であることが分かります。</p>
<p>ちなみにパッチは OpenSSH 7.6p1 用で、上の記事では 7.8p1 用に書き換えられたものが公開されていますが、現時点の Homebrew でインストール可能なのは 7.9p1 ということで、パッチを修正しました。</p>
<p>というわけでパッチです: <a href="https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8">https://gist.github.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8</a></p>
<h2>ビルドする</h2>
<p>Homebrew でパッチとかどうやるんだ……と思いましたが、どうやら <code>brew edit openssh</code> で行けるみたいです。こんなに簡単に当てられるなんて……便利だ……</p>
<blockquote><p>Homebrew: Patching an existing package<br />
<a href="https://www.ralfebert.de/snippets/brew-apply-patch-to-package-formula/">https://www.ralfebert.de/snippets/brew-apply-patch-to-package-formula/</a></p></blockquote>
<p>というわけで雑に既に書かれている <code>patch</code> の下に、以下のように追記してやるとパッチが当たります。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="ruby" data-enlighter-linenumbers="false"># Add support ECDSA for PKCS11, ref: https://bugzilla.mindrot.org/show_bug.cgi?id=2474
patch do
  url "https://gist.githubusercontent.com/kyontan/763952e7be68a2e96d5c3f0ad0d3bce8/raw/2ad5f854eba7704fbb7af2182ac57ee82b9a8f61/openssh-7.9p1-pkcs11-ecdsa.patch"
  sha256 "93b4e48321db94d785833a9414b12467a4741156cec90fa3052a4092acec8938"
end</pre>
<p>&nbsp;</p>
<p>インストールは <code>brew install --build-from-source openssh</code> です。既にインストールしてあるものがある人は <code>install</code> を <code>reinstall</code> に読み替えてください。</p>
<p>ビルドできたら、ビルドした ssh や ssh-keygen のパスをよしなに通してやります。勝手に通ってるかもしれません。(<code>rehash</code> なりしてから <code>ssh -V</code> の結果を見るとかすれば分かると思います)</p>
<p>うおおおおお！！！！</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shellscript" data-enlighter-linenumbers="false"># ssh-keygen -D /usr/local/Cellar/opensc/{version}/lib/opensc-pkcs11.so
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDnIbZ4ANu...
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBv0e8HKnx...
</pre>
<p>というわけで公開鍵が見られました。2つ見えたのは、上で自動的に作られると行っていた Authentication と Key Management 用の鍵がどちらも見えてるからだと思います。普通は上の方を使えば良いはずです。</p>
<p>鍵を登録して、<code>ssh</code> していきます。 <code>ssh -I /usr/local/Cellar/opensc/{version}/lib/opensc-pkcs11.so host</code> です。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="shellscript" data-enlighter-linenumbers="false"># ssh -v -I /usr/local/Cellar/opensc/0.19.0/lib/opensc-pkcs11.so user@xxx.monora.me
OpenSSH_7.9p1, OpenSSL 1.0.2r  26 Feb 2019
...
debug1: Connection established.
debug1: provider /.../opensc-pkcs11.so: manufacturerID &lt;OpenSC Project&gt; cryptokiVersion 2.20 libraryDescription &lt;OpenSC smartcard framework&gt; libraryVersion 0.19
debug1: provider /.../opensc-pkcs11.so slot 0: label &lt;Yubico PIV Authentication&gt; manufacturerID &lt;piv_II&gt; model &lt;PKCS#15 emulate&gt; serial &lt;...&gt; flags 0x40d
debug1: have 1 keys
debug1: have 2 keys
...
debug1: Will attempt key: /.../opensc-pkcs11.so ECDSA SHA256:nr/MvmFI6cYmChV97dMVIBeE2Uq5UmhVvoIdIuayLvg token
debug1: Will attempt key: /.../opensc-pkcs11.so ECDSA SHA256:Z7dluZC4FCEsUAC0HYiITr5+I83bLtHUxOwdla81Rtc token
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /.../opensc-pkcs11.so ECDSA SHA256:nr/MvmFI6cYmChV97dMVIBeE2Uq5UmhVvoIdIuayLvg token
debug1: Server accepts key: /.../opensc-pkcs11.so ECDSA SHA256:nr/MvmFI6cYmChV97dMVIBeE2Uq5UmhVvoIdIuayLvg token
Enter PIN for 'Yubico PIV Authentication':
debug1: Authentication succeeded (publickey).
Authenticated to xxx.monora.me ([xxx.yyy.zzz.www]:22).
...
# sl
...
</pre>
<p>というわけで ssh 出来ました。嬉しいですね。</p>
<p>パッチを見て当ててみたらエラーが出た瞬間にやる気をなくして、うだうだやっていたら3時間ぐらい掛かってしまいましたが、なんとか動いてよかったです。</p>
<p>それでは皆さまもハッピーYubiKeyライフをお過ごしください！</p>The post <a href="https://blog.monora.me/2019/04/bought-yubikey-5c-and-ssh-using-ecdsa-key/">YubiKey 5C を買ったので ECDSA鍵で ssh した</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1944</post-id>	</item>
		<item>
		<title>macOS Mojave へ VirtualBox をインストールする</title>
		<link>https://blog.monora.me/2018/12/install-virtualbox-to-macos-mojave/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=install-virtualbox-to-macos-mojave</link>
		
		<dc:creator><![CDATA[きょんたん]]></dc:creator>
		<pubDate>Sat, 22 Dec 2018 18:27:33 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[雑記]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[トラブルシューティング]]></category>
		<guid isPermaLink="false">https://blog.monora.me/?p=1919</guid>

					<description><![CDATA[<p>月末金曜日なので研究から逃げようとしたところハマってしまった。タイトルからしてmacOS初心者感がつよい。 環境は macOS Mojave (10.14.1), Oracle VM VirtualBox のバージョンは [&#8230;]</p>
The post <a href="https://blog.monora.me/2018/12/install-virtualbox-to-macos-mojave/">macOS Mojave へ VirtualBox をインストールする</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></description>
										<content:encoded><![CDATA[<p>月末金曜日なので研究から逃げようとしたところハマってしまった。タイトルからしてmacOS初心者感がつよい。</p>
<p>環境は macOS Mojave (10.14.1), Oracle VM VirtualBox のバージョンは 6.0.0 (5.2.22 でも再現)</p>
<figure id="attachment_1920" aria-describedby="caption-attachment-1920" style="width: 620px" class="wp-caption aligncenter"><a href="https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox.png"><img loading="lazy" class="size-large wp-image-1920" src="https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox-640x481.png" alt="" width="620" height="466" srcset="https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox-640x481.png 640w, https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox-320x240.png 320w, https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox-200x150.png 200w, https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox-768x577.png 768w, https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox-220x165.png 220w, https://blog.monora.me/wp-content/uploads/2018/12/failed_to_install_virtualbox.png 1464w" sizes="(max-width: 620px) 100vw, 620px" /></a><figcaption id="caption-attachment-1920" class="wp-caption-text">macOS へ VirtualBox のインストールを試行してエラーになっている様子</figcaption></figure>
<p>以下、解決方法</p>
<p><span id="more-1919"></span></p>
<p>結論から言うと「システム環境設定」-「セキュリティとプライバシー」-「一般」-「ダウンロードしたアプリケーションの実行許可」 で Oracle America, Inc かそれっぽいのを許可する。既に許可してしまったのでボタンが消えているが下の図の枠で囲った位置にボタンが出てくる。<a href="https://blog.monora.me/wp-content/uploads/2018/12/approve_installing.png"><img loading="lazy" class="aligncenter size-large wp-image-1921" src="https://blog.monora.me/wp-content/uploads/2018/12/approve_installing-640x562.png" alt="" width="620" height="544" srcset="https://blog.monora.me/wp-content/uploads/2018/12/approve_installing-640x562.png 640w, https://blog.monora.me/wp-content/uploads/2018/12/approve_installing-200x176.png 200w, https://blog.monora.me/wp-content/uploads/2018/12/approve_installing-320x281.png 320w, https://blog.monora.me/wp-content/uploads/2018/12/approve_installing-768x674.png 768w, https://blog.monora.me/wp-content/uploads/2018/12/approve_installing.png 1560w" sizes="(max-width: 620px) 100vw, 620px" /></a>それっぽいエラーを何もユーザーへ提示せずに死ぬのでハマった。ちなみに macOS のインストーラはエラーログとかを <code>/var/log/install.log</code> に吐くのでそれを見ると何で落ちたのかは分かる。</p>
<pre class="EnlighterJSRAW" data-enlighter-language="raw">installd[400]: PackageKit: ----- Begin install -----
...
installd[400]: ./postflight: /Library/Application Support/VirtualBox/VBoxDrv.kext failed to load - (libkern/kext) system policy prevents loading; check the system/kernel logs for errors or try kextutil(8).
...
Installer[9779]: Install failed: エラーによってインストールできませんでした。ソフトウェアの製造元に問い合わせてください。</pre>
<p>ところで結局これでWindowsを起動したところで目的は達成できずに負けました。完全敗北</p>The post <a href="https://blog.monora.me/2018/12/install-virtualbox-to-macos-mojave/">macOS Mojave へ VirtualBox をインストールする</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1919</post-id>	</item>
		<item>
		<title>tmux でも Touch ID で sudo を使う</title>
		<link>https://blog.monora.me/2018/11/use-touch-id-for-sudo-in-tmux/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=use-touch-id-for-sudo-in-tmux</link>
		
		<dc:creator><![CDATA[きょんたん]]></dc:creator>
		<pubDate>Thu, 15 Nov 2018 13:50:14 +0000</pubDate>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[お役立ち情報]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[Touch ID]]></category>
		<guid isPermaLink="false">https://blog.monora.me/?p=1898</guid>

					<description><![CDATA[<p>Touch ID が搭載された MacBook Air を買いました。MacBook Air に欲しかった機能の8つ中8つが実現されたので買いました。1つ10点としたら10^8 で1億点だね、という話をしたら首を傾げられ [&#8230;]</p>
The post <a href="https://blog.monora.me/2018/11/use-touch-id-for-sudo-in-tmux/">tmux でも Touch ID で sudo を使う</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></description>
										<content:encoded><![CDATA[<p>Touch ID が搭載された MacBook Air を買いました。MacBook Air に欲しかった機能の8つ中8つが実現されたので買いました。1つ10点としたら10^8 で1億点だね、という話をしたら首を傾げられました。</p>
<p>Touch ID が <code>sudo</code> でもパスワードを入力する代わりに使えそうだな、と思ったので調べてみたらどうやら <code>pam_tid.so</code> という PAMモジュールが用意されており、コンフィグを弄ることで使えるようです。具体的には <code>/etc/pam.d/sudo</code> へ <code>auth sufficient pam_tid.so</code> を追記するだけです。簡単ですね。</p>
<p>しかし、tmux のようなターミナルマルチプレクサを使用している場合にはこれだけではうまく動作せず、<code>sudo</code>コマンドを用いても普通にパスワードを求められてしまいます。<br />
(これは各ユーザごとに存在する bootstrap namespace に tmux が存在しないこと? が原因のようです。詳しくは当該リポジトリに説明と詳細へのリンクがあります。)</p>
<p>これに対処するために pam_reattach という PAMモジュールを書いた人がいて、これが使えます。</p>
<blockquote><p><a href="https://github.com/fabianishere/pam_reattach">fabianishere/pam_reattach: A pluggable authentication module that reattaches to the user&#8217;s GUI (Aqua) session on macOS</a></p></blockquote>
<p><a href="https://blog.birkhoff.me/make-sudo-authenticate-with-touch-id-in-a-tmux/">参考にした元の記事</a>やこのリポジトリの README.md には何事もなく以下のようにやれば入ると書いてありますが、これは失敗します。</p>
<p><code>$ cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr<br />
$ make<br />
$ sudo make install</code></p>
<p>これは最近の macOS の保護機能の1つである System Integrity Protection が有効になっているためで、rootであっても <code>/</code> 配下のほとんどが書き込み不可能になっています。つまり <code>/usr/lib/pam</code> にビルドされた <code>pam_reattach.so</code> をコピーすることができず失敗します。<br />
多分これを開発するような人は無効にしてるんじゃないでしょうか……</p>
<p>実は<code>/usr/lib/pam</code> は <code>/usr/local/lib/pam</code>で代替できます。というわけでそうします。具体的には以下のように PREFIX を変えるだけです。</p>
<p><code>$ cmake -DCMAKE_INSTALL_PREFIX:PATH=<b>/usr/local</b><br />
$ make<br />
$ sudo make install</code></p>
<p>それではよい tmux life をお過ごしください。</p>The post <a href="https://blog.monora.me/2018/11/use-touch-id-for-sudo-in-tmux/">tmux でも Touch ID で sudo を使う</a> first appeared on <a href="https://blog.monora.me">monolog</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1898</post-id>	</item>
	</channel>
</rss>
