20210510のMacに関する記事は7件です。

M1 MacでのXMRigによるCPU&GPUマイニング

XMRigによるマイニング M1 Mac miniでXMRigを使用して、KAWPOW(Ravencoin)でのGPUマイニング、CryptoNightRでのCPU&GPUマイニング、RandomX(Monero)のCPUマイニングを試してみました。 現時点(2021/5/10)では、XMRigのRandomX CPUマイニングとKAWPOW GPUマイニングを組み合わせると、nicehashでは一日0.00000576〜0.00001152BTC(36.1〜72.2円)程度得られるようです。消費電力はサンワのワットモニターで測ると25Wで1kWh30円とすると電気代一日18円になるので、一日18〜54円の収益が得られることになります。ethminerやkawpowminerのマイニングより効率的かと思います。 XMRigのビルド そのままではAMD拡張を含むOpenCLコードを実行しようとしてしまうため、M1ではKAWPOWは動かないです。 KAWPOWを動くようにしたパッチを作りました。OpenCLをAMD GPUとして動かさないようにする変更と変更内容をkawpow_cl.hへ反映させるパッチです。 XMRigのOpenCLでは、kawpow.clを直接読み込むのではなく、generate_cl.jsを使用してコンパクトに変換したkawpow_cl.hを使用します。RandomXでも同様です。OpenCLのコードを変更した場合、XMRigのトップで $ node scripts/generate_cl.js を実行する必要があります(要Node.js、brew等でインストール)。OpenCLのコードを変更しただけだとビルドしてもXMRigに反映されないので気をつけてください。 上記のパッチにはkawpow.clへの変更を含んでいるのでnode scripts/generate_cl.jsの実行は不要です。 準備 ターミナルを起動してください。~/Downloads/以下で作業します。 $ cd ~/Downloads/ XcodeとCommand line tools for Xcodeが未インストールならばApp StoreからXcodeをインストールし、ターミナル上でCommand line tools for Xcodeをインストールしてください。 $ xcode-select --install brewとcmakeが未インストールならbrewをインストールし、brew経由でcmakeをインストールしてください。 $ arch -arm64e /bin/bash -c "$(curl -fsSL $ https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" $ export PATH=/opt/homebrew/bin:$PATH $ brew install cmake XMRigのビルド git経由でファイルを取得します。 $ git clone https://github.com/xmrig/xmrig.git $ cd xmrig パッチをcurlコマンドで取得し当てます。 $ curl -o xmrig-kawpow-m1.patch https://gist.githubusercontent.com/asfdrwe/24e5c4d9703e167e6b1707a6caa6e6a3/raw/abfb4e11ff3d5dba11d007f67aab1cd58241cddb/xmrig-kawpow-m1.patch $ patch -p1 < xmrig-kawpow-m1.patch cmakeでビルドします。 $ mkdir build $ cd build $ cmake .. $ make XMRigの実行 XMRig GPUマイニングの実行時の注意 そのまま実行しようとすると、ethminerやkawpowminerと同様にcl2Metalにバグがあるようで、日本語環境下ではOpenCLコードのバックスラッシュを円記号として扱ってしまい、正常に動作しないようです。 システム環境設定の言語と地域から英語環境を入れて優先する言語を英語にして実行するか、環境変数__CF_USER_TEXT_ENCODINGを英語設定にしてください。 uidをidコマンドで確認し__CF_USER_TEXT_ENCODINGの内容をechoやenvで確認します。uidが501(16進数で0x1F5)の場合はこうなります。 $ id uid=501(asfdrwe) gid=20(staff) groups=20(staff),... $ env | grep __CF_USER_TEXT_ENCODING __CF_USER_TEXT_ENCODING=0x1F5:0x1:0xE idが501(0x1F5)ならば__CF_USER_TEXT_ENCODINGを0x1F5:0x1:0xEから__CF_USER_TEXT_ENCODINGを0x1F5:0x0:0x0にすればcl2Metalのバグを回避できます。envコマンドかexportで__CF_USER_TEXT_ENCODINGの値を変更してxmrigを実行してください。 $ export __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0 KAWPOW GPUマイニング nicehashで実行する場合は次のようになります。 $ ./xmrig -o kawpow.usa-west.nicehash.com:3385 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a kawpow --nicehash --rig-id=『NiceHashの自分のWorker名(何でもいい、反映されない?)』 --opencl --no-cpu 実行ログ * ABOUT XMRig/6.12.1 clang/12.0.5 * LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1 * HUGE PAGES unavailable * 1GB PAGES unavailable * CPU Apple M1 (1) 64-bit AES L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1 * MEMORY 5.5/8.0 GB (69%) * DONATE 0% * POOL #1 kawpow.usa-west.nicehash.com:3385 algo kawpow * COMMANDS hashrate, pause, resume, results, connection * OPENCL #0 Apple/OpenCL 1.2 (Feb 28 2021 03:51:21) * OPENCL GPU #0 n/a Apple M1 1000 MHz cu:8 mem:1024/5461 MB * CUDA disabled [2021-05-10 15:01:17.952] net use pool kawpow.usa-west.nicehash.com:3385 172.65.247.93 [2021-05-10 15:01:17.953] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747506 [2021-05-10 15:01:17.955] opencl use profile kawpow (1 thread) scratchpad 32 KB | # | GPU | BUS ID | INTENSITY | WSIZE | MEMORY | NAME | 0 | 0 | n/a | 2097152 | 256 | 2933 | Apple M1 [2021-05-10 15:01:17.957] opencl GPU #0 compiling... [2021-05-10 15:01:18.141] opencl GPU #0 compilation completed (184 ms) [2021-05-10 15:01:18.142] opencl READY threads 1/1 (187 ms) [2021-05-10 15:01:19.183] opencl KawPow program for period 582502 compiled (1040ms) [2021-05-10 15:01:19.567] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507 [2021-05-10 15:01:20.269] opencl KawPow program for period 582503 compiled (1086ms) [2021-05-10 15:01:22.706] miner KawPow light cache for epoch 233 calculated (3523ms) [2021-05-10 15:02:04.237] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507 [2021-05-10 15:02:08.425] opencl KawPow DAG for epoch 233 calculated (45715ms) [2021-05-10 15:02:14.673] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507 [2021-05-10 15:02:19.492] miner speed 10s/60s/15m n/a n/a n/a H/s max n/a H/s [2021-05-10 15:03:09.752] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747507 [2021-05-10 15:03:13.074] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747508 [2021-05-10 15:03:17.279] net new job from kawpow.usa-west.nicehash.com:3385 diff 364M algo kawpow height 1747508 [2021-05-10 15:03:20.381] miner speed 10s/60s/15m 1.49 1.49 n/a MH/s max 1.49 MH/s [2021-05-10 15:04:05.310] net new job from kawpow.usa-west.nicehash.com:3385 diff 182M algo kawpow height 1747508 [2021-05-10 15:04:08.214] net new job from kawpow.usa-west.nicehash.com:3385 diff 182M algo kawpow height 1747508 [2021-05-10 15:04:17.519] opencl accepted (1/0) diff 182M (172 ms) [2021-05-10 15:04:21.353] miner speed 10s/60s/15m 1.46 1.47 n/a MH/s max 1.51 MH/s ... ハッシュレートは1.5MH/sで消費電力はサンワのワットモニター測定で12-14Wぐらいです。kawpowminerは1MH/sで13-19Wなので、xmrigの方が効率が良いようです。 CryptoNightR CPU&GPUマイニング CryptoNightRはパッチなしでも動きます。 $ ./xmrig -o cryptonightr.usa-west.nicehash.com:3375 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a cn/r --nicehash --opencl --rig-id=『NiceHashの自分のWorker名』 実行ログ * ABOUT XMRig/6.12.1 clang/12.0.5 * LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1 * HUGE PAGES unavailable * 1GB PAGES unavailable * CPU Apple M1 (1) 64-bit AES L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1 * MEMORY 3.5/8.0 GB (44%) * DONATE 0% * POOL #1 cryptonightr.usa-west.nicehash.com:3375 algo cn/r * COMMANDS hashrate, pause, resume, results, connection * OPENCL #0 Apple/OpenCL 1.2 (Feb 28 2021 03:51:21) * OPENCL GPU #0 n/a Apple M1 1000 MHz cu:8 mem:1024/5461 MB * CUDA disabled [2021-05-10 15:10:59.612] net use pool cryptonightr.usa-west.nicehash.com:3375 172.65.247.93 [2021-05-10 15:10:59.612] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545 [2021-05-10 15:10:59.612] cpu use profile cn (8 threads) scratchpad 2048 KB [2021-05-10 15:10:59.614] opencl use profile cn/2 (1 thread) scratchpad 2048 KB | # | GPU | BUS ID | INTENSITY | WSIZE | MEMORY | NAME | 0 | 0 | n/a | 384 | 8 | 768 | Apple M1 [2021-05-10 15:10:59.645] opencl GPU #0 compiling... [2021-05-10 15:11:00.619] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (1007 ms) [2021-05-10 15:11:02.729] opencl GPU #0 compilation completed (3083 ms) [2021-05-10 15:11:02.732] opencl READY threads 1/1 (3107 ms) [2021-05-10 15:12:00.137] miner speed 10s/60s/15m 232.1 219.0 n/a H/s max 239.2 H/s [2021-05-10 15:12:50.485] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545 [2021-05-10 15:13:00.694] miner speed 10s/60s/15m 235.4 235.2 n/a H/s max 239.2 H/s [2021-05-10 15:14:01.227] miner speed 10s/60s/15m 235.6 235.5 n/a H/s max 239.2 H/s [2021-05-10 15:14:16.812] cpu accepted (1/0) diff 50000 (140 ms) [2021-05-10 15:14:40.819] opencl accepted (2/0) diff 50000 (138 ms) [2021-05-10 15:14:52.479] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545 [2021-05-10 15:15:01.826] miner speed 10s/60s/15m 237.2 235.8 n/a H/s max 239.2 H/s [2021-05-10 15:15:30.626] opencl accepted (3/0) diff 50000 (162 ms) [2021-05-10 15:15:54.217] cpu accepted (4/0) diff 50000 (144 ms) [2021-05-10 15:16:02.385] miner speed 10s/60s/15m 239.6 239.3 n/a H/s max 240.0 H/s [2021-05-10 15:16:54.472] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545 [2021-05-10 15:17:03.298] miner speed 10s/60s/15m 238.3 238.6 n/a H/s max 240.5 H/s [2021-05-10 15:18:04.255] miner speed 10s/60s/15m 237.7 237.2 n/a H/s max 240.5 H/s [2021-05-10 15:18:54.496] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543545 [2021-05-10 15:19:05.232] miner speed 10s/60s/15m 237.4 237.3 n/a H/s max 240.5 H/s [2021-05-10 15:19:07.850] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543546 [2021-05-10 15:20:06.254] miner speed 10s/60s/15m 237.8 237.0 n/a H/s max 240.5 H/s [2021-05-10 15:21:07.233] miner speed 10s/60s/15m 237.7 237.7 n/a H/s max 240.5 H/s [2021-05-10 15:21:08.469] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543546 [2021-05-10 15:22:08.283] miner speed 10s/60s/15m 236.9 237.4 n/a H/s max 240.5 H/s [2021-05-10 15:23:08.471] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543546 [2021-05-10 15:23:09.149] miner speed 10s/60s/15m 236.6 236.9 n/a H/s max 240.5 H/s [2021-05-10 15:23:28.096] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543547 [2021-05-10 15:24:10.194] miner speed 10s/60s/15m 243.0 240.3 n/a H/s max 243.3 H/s [2021-05-10 15:25:11.197] miner speed 10s/60s/15m 242.4 242.7 n/a H/s max 243.4 H/s [2021-05-10 15:25:28.466] net new job from cryptonightr.usa-west.nicehash.com:3375 diff 50000 algo cn/r height 543547 ... ハッシュレートは243H/sですが消費電力は27-29Wで電力消費が大きいです。収益はよくわかりませんが一日0.00000288BTC程度は入るのではないかと思います。 RandomX CPUマイニング RandomXでのCPUマイニングはパッチなしで動きます。 $ xmrig -o randomxmonero.usa-west.nicehash.com:3380 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a randomx --nicehash --rig-id=『NiceHashの自分のWorker名』 実行ログ * ABOUT XMRig/6.12.1 clang/12.0.5 * LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1 * HUGE PAGES unavailable * 1GB PAGES unavailable * CPU Apple M1 (1) 64-bit AES L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1 * MEMORY 3.9/8.0 GB (49%) * DONATE 0% * POOL #1 randomxmonero.usa-west.nicehash.com:3380 algo rx/0 * COMMANDS hashrate, pause, resume, results, connection * OPENCL disabled * CUDA disabled [2021-05-10 15:28:17.780] net use pool randomxmonero.usa-west.nicehash.com:3380 172.65.247.93 [2021-05-10 15:28:17.781] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357700 [2021-05-10 15:28:17.781] cpu use argon2 implementation default [2021-05-10 15:28:17.781] randomx init dataset algo rx/0 (8 threads) seed d2e97cf50201e5f9... [2021-05-10 15:28:17.781] randomx allocated 2336 MB (2080+256) huge pages 0% 0/1168 +JIT (1 ms) [2021-05-10 15:28:22.629] randomx dataset ready (4847 ms) [2021-05-10 15:28:22.629] cpu use profile rx (8 threads) scratchpad 2048 KB [2021-05-10 15:28:22.629] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (0 ms) [2021-05-10 15:28:40.165] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701 [2021-05-10 15:29:03.428] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 1517846 [2021-05-10 15:29:03.432] cpu stopped (4 ms) [2021-05-10 15:29:03.432] randomx init dataset algo rx/0 (8 threads) seed 72c17680437427a6... [2021-05-10 15:29:08.143] randomx dataset ready (4711 ms) [2021-05-10 15:29:08.143] cpu use profile rx (8 threads) scratchpad 2048 KB [2021-05-10 15:29:08.143] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (0 ms) [2021-05-10 15:29:23.192] miner speed 10s/60s/15m 2388.8 n/a n/a H/s max 2392.4 H/s [2021-05-10 15:29:30.797] cpu accepted (1/0) diff 320903 (119 ms) [2021-05-10 15:29:31.212] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 1517847 [2021-05-10 15:29:40.766] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701 [2021-05-10 15:29:40.770] cpu stopped (4 ms) [2021-05-10 15:29:40.770] randomx init dataset algo rx/0 (8 threads) seed d2e97cf50201e5f9... [2021-05-10 15:29:45.460] randomx dataset ready (4690 ms) [2021-05-10 15:29:45.460] cpu use profile rx (8 threads) scratchpad 2048 KB [2021-05-10 15:29:45.460] cpu READY threads 8/8 (8) huge pages 0% 0/8 memory 16384 KB (0 ms) [2021-05-10 15:30:06.467] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701 [2021-05-10 15:30:23.716] miner speed 10s/60s/15m 2382.1 n/a n/a H/s max 2393.6 H/s [2021-05-10 15:30:33.364] cpu accepted (2/0) diff 320903 (119 ms) [2021-05-10 15:30:48.059] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 2357701 [2021-05-10 15:31:24.244] miner speed 10s/60s/15m 2393.5 2393.3 n/a H/s max 2398.0 H/s ... ハッシュレートは2393H/sで消費電力は19-20Wです。 RandomX GPUマイニング(動かない) そのままではOpenCLのコードで符号付きと符号なしの比較に関するWarningが出て動かないです。ちゃんとcastするように修正したパッチを作ってみたのですが、その場合でもCL_INVALID_KERNELエラーが出て動かないです。仮に動くようになったとしても、現時点では、AMDのVegaとNavi以外のGPUでは仮想CPUのコードをインタプリタで解釈して動くようなので、あまり高速には動かないと思います(OclWorkerの対応箇所、randomx_jit.cl等、randomx_vm.cl)。 $ xmrig -o randomxmonero.usa-west.nicehash.com:3380 -u 『NiceHashの自分の報酬ビットコインアドレス』 -a randomx --nicehash --rig-id=『NiceHashの自分のWorker名』 --opencl --no-cpu 実行ログ * ABOUT XMRig/6.12.1 clang/12.0.5 * LIBS libuv/1.41.0 OpenSSL/1.1.1k hwloc/2.4.1 * HUGE PAGES unavailable * 1GB PAGES unavailable * CPU Apple M1 (1) 64-bit AES L2:16.0 MB L3:0.0 MB 8C/8T NUMA:1 * MEMORY 3.9/8.0 GB (49%) * DONATE 1% * POOL #1 randomxmonero.usa-west.nicehash.com:3380 algo rx/0 * COMMANDS hashrate, pause, resume, results, connection * OPENCL #0 Apple/OpenCL 1.2 (Feb 28 2021 03:51:21) * OPENCL GPU #0 n/a Apple M1 1000 MHz cu:8 mem:1024/5461 MB * CUDA disabled [2021-05-10 15:27:44.756] net use pool randomxmonero.usa-west.nicehash.com:3380 172.65.247.93 [2021-05-10 15:27:44.756] net new job from randomxmonero.usa-west.nicehash.com:3380 diff 320903 algo rx/0 height 1517844 [2021-05-10 15:27:44.756] cpu use argon2 implementation default [2021-05-10 15:27:44.756] randomx init dataset algo rx/0 (8 threads) seed 72c17680437427a6... [2021-05-10 15:27:44.757] randomx allocated 2336 MB (2080+256) huge pages 0% 0/1168 +JIT (1 ms) [2021-05-10 15:27:49.606] randomx dataset ready (4849 ms) [2021-05-10 15:27:49.606] opencl use profile rx (1 thread) scratchpad 2048 KB | # | GPU | BUS ID | INTENSITY | WSIZE | MEMORY | NAME | 0 | 0 | n/a | 128 | 8 | 256 | Apple M1 UNSUPPORTED (log once): createKernel: newComputePipelineState failed [2021-05-10 15:27:50.125] opencl error CL_INVALID_KERNEL when calling clCreateKernel for kernel execute_vm [2021-05-10 15:27:50.125] opencl thread #0 failed with error CL_INVALID_KERNEL [2021-05-10 15:27:50.125] opencl thread #0 self-test failed [2021-05-10 15:27:50.125] opencl disabled (failed to start threads) RandomX CPUマイニングとKAWPOW GPUマイニングの同時実行 KAWPOWは2.5GBでRandomXは2.3GBの消費メモリ量なので、8GBのMac Miniでも同時に動かすことが可能です。Ethereumは4GB以上メモリを消費するので、Ethereum+RandomXは8GBのMac Miniではうまく動きませんでした。 ターミナルを複数起動してそれぞれでRandomXとKAWPOWを実行します。 同時に動かしたときのRandomX CPU ハッシュレート [2021-05-10 15:36:37.490] miner speed 10s/60s/15m 1879.1 1885.2 n/a H/s max 1914.5 H/s KAWPOW GPU ハッシュレート [2021-05-10 15:36:27.165] miner speed 10s/60s/15m 1.30 1.36 n/a MH/s max 1.39 MH/s 同時に動かすと10%前後ハッシュレートが落ちますが、消費電力は25W程度で済みます。RandomXは単独でも20Wなので、25Wで1.8倍程度の収益になるのならば、GPUマイニングと組み合わせて同時実行させるのが良いかと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

画像のヒストグラムを作る(2) (モノクローム画像編)

画像のヒストグラムを作る(2) (グレイスケール) 昨日の続きです. 昨日使用したvImageHistogramCalculation_ARGB8888ですが,Appleのレファレンスを参照すると,Planar8用のメソッドがあったので,今日はこれを使用してグレイスケール画像のヒストグラムを作成します. vImageHistogramCalculation_Planar8(::_:) Calculates the histogram of a Planar8 image. func vImageHistogramCalculation_Planar8(_ src: UnsafePointer<vImage_Buffer>, _ histogram: UnsafeMutablePointer<vImagePixelCount>, _ flags: vImage_Flags) -> vImage_Error 他にも複数メソッドが用意されていますので覚書しておきます 画像形式 意味 ARGB8888 各チャネル8bitの32bit形式 ARGBFFFF 各チャネル32bitの128bit形式 Planar8 モノクローム画像 8bit PlanarF モノクローム画像 32bit CT画像など,医療用画像は16bitモノクロ画像のことが多いですし, デジカメRAWデータも14か16bitのことが多いでしょう. 試してないですが,おそらく上記で応用可能かなと思います. 実装 基本的には先日紹介したものと同様ですが,新たに  vImageHistogramCalculation_Planar8 を実装していきます. func histogramCalculationGray(imageRef: CGImage) -> [UInt] { let imgProvider: CGDataProvider = imageRef.dataProvider! let imgBitmapData: CFData = imgProvider.data! var imgBuffer = vImage_Buffer( data: UnsafeMutableRawPointer(mutating: CFDataGetBytePtr(imgBitmapData)), height: vImagePixelCount(imageRef.height), width: vImagePixelCount(imageRef.width), rowBytes: imageRef.bytesPerRow) print(imageRef.bytesPerRow) var histogramBinZero = [vImagePixelCount](repeating: 0, count: 256) histogramBinZero.withUnsafeMutableBufferPointer { zeroPtr in let error = vImageHistogramCalculation_Planar8(&imgBuffer, zeroPtr.baseAddress!, vImage_Flags(kvImageNoFlags)) guard error == kvImageNoError else { fatalError("Error calculating histogram: \(error)") } } return histogramBinZero } 当然,Binは1種類ですので戻り値も変更しています. 結果 ・モノクローム画像 ・カラー画像 cgImageからbyteDataへ変換して画素値0〜255までの出現回数が一致しているか確認しましたが問題なさそうです. [3942, 4536, 6772, 9034, 12216, 16272, 20350, 25557, 30674, 36847, 43879, 51445, 60626, 70644, 79406, 89252, 97990, 106718, 114065, 119935, 126283, 130721, 137958, 142371, 145576, 144142, 139682, 133093, 127644, 121993, 117684, 112832, 108841, 104749, 101299, 98299, 96062, 95825, 93493, 91719, 90269, 88754, 88589, 88997, 89898, 90216, 90405, 89903, 90554, 89603, 89594, 89733, 89547, 89444, 88773, 88341, 87894, 87264, 86499, 85897, 84229, 83563, 82034, 81003, 80204, 79277, 78279, 77188, 75882, 75278, 73916, 73093, 71253, 71049, 69666, 67883, 67431, 66362, 65405, 64184, 62829, 62058, 61442, 59497, 58896, 57886, 56992, 56064, 55016, 53887, 53041, 52341, 51795, 51136, 50304, 49501, 49197, 48071, 47541, 47106, 46100, 45821, 45690, 44588, 44138, 43905, 43381, 42800, 42539, 41936, 41312, 41081, 40262, 40005, 39713, 39020, 38961, 38005, 38031, 37683, 37374, 36740, 36475, 36376, 35963, 35530, 35358, 34928, 34876, 34686, 34001, 33594, 33384, 33099, 32879, 32868, 32671, 32394, 32003, 31868, 31655, 31540, 30997, 30705, 30699, 30429, 30409, 29985, 29633, 29318, 29122, 28992, 29145, 28793, 28490, 28281, 27892, 27813, 27500, 27563, 27350, 27492, 27138, 27136, 26519, 26781, 26730, 26510, 26284, 26254, 26110, 25714, 25990, 25580, 25847, 25389, 25456, 25248, 25139, 25082, 24855, 24713, 24641, 24710, 24393, 24254, 24151, 23939, 23650, 23922, 23807, 23534, 23054, 23109, 22921, 22869, 22836, 22504, 22604, 22314, 22226, 22134, 21969, 21409, 21387, 21324, 21053, 21008, 20916, 20615, 20342, 20159, 20033, 19978, 19874, 19697, 19514, 18959, 18945, 18815, 18629, 17992, 17938, 17780, 17549, 17354, 17212, 16816, 16794, 16399, 16259, 15861, 15438, 15151, 15011, 15017, 15124, 14663, 14302, 13454, 12968, 12730, 12566, 12164, 12512, 12796, 12824, 13695, 14835, 17052, 18763, 22570, 31125, 42722, 56396, 129275] これでひとまず,カラーとモノクロに対応できました. 今回使っていない,ARGBFFFFやPlanarFもそのうち使ってみたら記事にします. それではまた
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mac OSインストールに伴うyarnファイルアップロード[yarn install v1.22.10]

railsで作ったWEBアプリを立ち上げようとしたがうまくサーバーが起動しませんでした。 OSのアップロードが原因のようです。 yarnをインストールしました。 % rails s => Booting Puma => Rails 6.0.3.6 application starting in development => Run `rails server --help` for more startup options warning Integrity check: System parameters don't match error Integrity check failed error Found 1 errors. ======================================== Your Yarn packages are out of date! Please run `yarn install --check-files` to update. ======================================== To disable this check, please change `check_yarn_integrity` to `false` in your webpacker config file (config/webpacker.yml). yarn check v1.22.10 info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command. ************************************* % yarn install yarn install v1.22.10 [1/4] ? Resolving packages... [2/4] ? Fetching packages... [3/4] ? Linking dependencies... warning " > webpack-dev-server@3.11.2" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0". warning "webpack-dev-server > webpack-dev-middleware@3.7.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0". [4/4] ? Building fresh packages... ✨ Done in 39.58s.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac VSCode dlvでGoのデバッグをする方法

goをVSCodeでデバッグするには、dlvというものが必要らしい。 dlvは、Goのデバッガのこと。静的型付け言語?のため、強者はlog.Printf("%+v")でも問題箇所に気づくことはできるらしいが、delveを使ったデバッグは便利とのこと。 dlvをインストールするのに若干ハマったので備忘録として残しておく。 環境 VS Code Mac Os brew goのインストール brew install go go version go version go1.16.3 darwin/amd64kkk GOPATHを通しておく。 $echo 'export PATH=~/go/bin:$PATH'>>~/.bash_profile dlvのインストール 試したこと brew install go-delve/delve/delve brew でdlvをインストールしようとしたら、↓で怒られた。 Error: homebrew-core is a shallow clone. To `brew update`, first run: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow This command may take a few minutes to run due to the large size of the repository. This restriction has been made on GitHub's request because updating shallow clones is an extremely expensive operation due to the tree layout and traffic of Homebrew/homebrew-core and Homebrew/homebrew-cask. We don't do this for you automatically to avoid repeatedly performing an expensive unshallow operation in CI systems (which should instead be fixed to not use shallow clones). Sorry for the inconvenience! ==> Tapping go-delve/delve Cloning into '/usr/local/Homebrew/Library/Taps/go-delve/homebrew-delve'... remote: Enumerating objects: 48, done. remote: Total 48 (delta 0), reused 0 (delta 0), pack-reused 48 Receiving objects: 100% (48/48), 12.44 KiB | 509.00 KiB/s, done. Resolving deltas: 100% (19/19), done. Tapped (29 files, 53.7KB). ==> Tapping homebrew/cask Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask'... remote: Enumerating objects: 570158, done. remote: Counting objects: 100% (509/509), done. remote: Compressing objects: 100% (322/322), done. remote: Total 570158 (delta 259), reused 415 (delta 187), pack-reused 569649 Receiving objects: 100% (570158/570158), 250.97 MiB | 9.20 MiB/s, done. Resolving deltas: 100% (402517/402517), done. Tapped 3899 casks (3,995 files, 269.2MB). ==> Searching for similarly named formulae... Error: No similarly named formulae found. Error: No available formula or cask with the name "go-delve/delve/delve". ==> Searching for a previously deleted formula (in the last month)... Error: No previously deleted formula found. formulaeがないとのこと。 formulaeとは、「調理法、手順」という意味で、Homebrewでは「ビルド方法・手順が書かれたスクリプト」のこと。 https://qiita.com/b4b4r07/items/6efebc2f3d1cbbd393fc#1-3 少し調べたが、あまり解決策っぽいのは出てこなかったので、 brewでインストールするのは諦めて、↓のようにすると無事にインストールできた。 go get -u github.com/go-delve/delve/cmd/dlv go getでは、コマンドラインツールの実行ファイルを勝手にインストールしてくれるっぽい。 ①go getが叩かれるとGoで書かれたコマンドラインツールの実行ファイルをGOPATH/bin配下に自動的に置いてくれます。 ②①と同じタイミングでGOPATH/srcにパッケージのソースコードが置かれます。ちなみに、go getでは取得したパッケージの依存パッケージ(importの中に書いてあるパッケージ)も一緒にダウンロードしてくれます。 https://qiita.com/yu19991013/items/ae4f6e0ebd59dfb9bc3d dlv version Delve Debugger Version: 1.6.0 Build: $Id: 8cc9751909843dd55a46e8ea2a561544f70db34d プロジェクトの作成 Goは$GOPATHにリポジトリとかgo getで取得してビルドされた実行ファイルが置かれる。 ~/goのフォルダの下にsrcを作ってそこにプロジェクトを作成するのがお作法らしい? ~/go ├── bin ├── pkg │   ├── mod │   └── sumdb └── src └── hello //helloというフォルダを作成してこの中で、.goファイルの作成 VSCodeでデバッグしようとすると、開かれたディレクトリのmain()から実行される。 最初は、複数ファイルにmain()を使用していて、うまくデバッグできなかった。 よって、一つのmain.goファイルの中で関数を分けるか、パッケージを作成してimportする。 パッケージの作成方法とimportに関しては、改めて勉強し記事にする。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacBook Proでトリプルディスプレイ環境にするために知っておきたかったこと

なるべくシンプルな配線でトリプルディスプレイ環境を構築した時に、思ったよりケーブル周りで悩んだので、記録としてまとめておきたいと思います。 OSや使っている端末によって差があるみたいなので、自分の環境にあったものを探してください。 お金がある人はthunderboldのドックを買えば大体解決します(3万円前後) 知っておきたかったこと ハブでUSB Type-Cは増やせない 1つのUSB Type-C端子から2つのUSB Type-Cに分岐させることは難しいです 給電用、データ用などに分岐することはできます 詳しい理由はこちら ハブでは1つのUSB Type-C端子から複数のモニタに拡張出力はできない ミラーリングや同じ画面を拡張ならできます 高価なドックだとできるものもあります いい感じのハブはそれだけで電気を食う 電源が弱いものだと急速充電できなかったりするので、注意してください ものによっては電源を繋いでいないと使えないものもあるみたいです Thunderbolt 3とUSB Type-Cは違う Thunderbolt 3は通信の規格の1つ、USB Type-Cはコネクタの規格の1つです Thunderboltだとできないみたいなこともあるので、MacBookユーザーは要確認 筆者の環境 MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports) BenQ アイケアモニター GW2480T LGのモニタ 21.5インチ 有線キーボード Magic Trackpad 2 アプリ開発でandroid端末やiPhone端末を繋ぐことがしばしば モニタやキーボードを1つずつ繋いでもいいのですが、アプリ開発時に接続口が足りなくなる問題が発生していました。 また、在宅勤務のため、自分のPCと会社用のPCの切り替えがとても面倒でした(会社のPCもMacBook Proです)。 最終的に買ったもの データ転送、microSD&SDカードスロット、4K 30Hz HDMIポートを搭載し、PD対応によるフルスピード充電が可能なUSB-Cハブ(商品の説明より引用) 1つの端末に以下のポートが接続可能です。 USB 3.0*2 USB C*2 microSD SD HDMI 選んだ理由 価格がそこそこ(5,999円) hdmi、給電、usb接続が1つのハブでできる 安定のAnker 理想は1つのケーブルで完了させることでしたが、諦めて以下のような構成になりました。 MacBook Pro ├ anker(Type-C) | ├ LGのモニタ(HDMI) | ├ 有線キーボード(USB 3.0) | └ 電源(Type-C) | └ BenQモニタ(Type-C) 他に候補にあがったものとダメだった理由 以下の製品はどれもいいなと思ったのですが、自分の端末や環境に合わなかったため断念しました。 Anker PowerExpand 8-in-1 USB-C PD HDMI接続口は2つあるが、macは拡張できない イーサネットはいらない Satechi アルミニウム Type-C デュアル マルチメディア アダプター 結局2つのポートを使用する ケーブルの長さが短いためハブが浮く(PCスタンドを使っているため) 値段が高い Satechi Type-C アルミニウム Proハブ Type-Cで映像出力ができない ケーブルをたくさんつけると、重さでmac側の接続口が傷みそう ケーブルをつけていない状態は一番スタイリッシュだが、ケーブルをつけた時に端末周りにケーブルがごちゃつきそう
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

画像のヒストグラムを作る(1) (カラー画像編)

画像のヒストグラムを作る Swift5での画像のヒストグラムを作成する良いサンプルが無かったので覚書 公式サンプルに参考になるプロジェクトあり Accelerate.vImageのvImageHistogramCalculation_ARGB8888を利用して計算するよう https://developer.apple.com/documentation/accelerate/1545743-vimagehistogramcalculation_argb8 この方法では,カラーチャネルが1chでは計算できないが,ひとまず目的は達成したので良しとする import Accelerate.vImage func histogramCalculation(imageRef: CGImage) -> (red: [UInt], green: [UInt], blue: [UInt], alpha:[UInt]) { let imgProvider: CGDataProvider = imageRef.dataProvider! let imgBitmapData: CFData = imgProvider.data! var imgBuffer = vImage_Buffer( data: UnsafeMutableRawPointer(mutating: CFDataGetBytePtr(imgBitmapData)), height: vImagePixelCount(imageRef.height), width: vImagePixelCount(imageRef.width), rowBytes: imageRef.bytesPerRow) // bins: zero = red, green = one, blue = two, alpha = three var histogramBinZero = [vImagePixelCount](repeating: 0, count: 256) var histogramBinOne = [vImagePixelCount](repeating: 0, count: 256) var histogramBinTwo = [vImagePixelCount](repeating: 0, count: 256) var histogramBinThree = [vImagePixelCount](repeating: 0, count: 256) histogramBinZero.withUnsafeMutableBufferPointer { zeroPtr in histogramBinOne.withUnsafeMutableBufferPointer { onePtr in histogramBinTwo.withUnsafeMutableBufferPointer { twoPtr in histogramBinThree.withUnsafeMutableBufferPointer { threePtr in var histogramBins = [zeroPtr.baseAddress, onePtr.baseAddress, twoPtr.baseAddress, threePtr.baseAddress] histogramBins.withUnsafeMutableBufferPointer { histogramBinsPtr in let error = vImageHistogramCalculation_ARGB8888(&imgBuffer, histogramBinsPtr.baseAddress!, vImage_Flags(kvImageNoFlags)) guard error == kvImageNoError else { fatalError("Error calculating histogram: \(error)") } } } } } } return (histogramBinZero, histogramBinOne, histogramBinTwo, histogramBinThree) } iOSであれば,UIImageからcgImage作成は用意だが,macではNSImageなのでひと作業必要 var imageRect = NSRect(x: 0, y: 0, width: img.size.width, height: img.size.height) guard let cgImg1 = img.cgImage(forProposedRect: &imageRect, context: nil, hints: nil) else { abort() } 結果 4000x3000の画像で試すと *func: load img, Time: 29.488ms *func: make cgImg 1, Time: 0.069ms *func: calc, Time: 162.501ms *func: make 3ch chart, Time: 0.109ms *func: draw, Time: 0.9739ms 十分な速度が出た グラフはnsbezierPath curveを使うとなめらかになりそうだが control point算出がめんどくさく,今回は直線でつないでいる 上記プロジェクトはGithubにおいておきます ではまた
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

画像のヒストグラムを作る

画像のヒストグラムを作る Swift5での画像のヒストグラムを作成する良いサンプルが無かったので覚書 公式サンプルに参考になるプロジェクトあり Accelerate.vImageのvImageHistogramCalculation_ARGB8888を利用して計算するよう https://developer.apple.com/documentation/accelerate/1545743-vimagehistogramcalculation_argb8 この方法では,カラーチャネルが1chでは計算できないが,ひとまず目的は達成したので良しとする import Accelerate.vImage func histogramCalculation(imageRef: CGImage) -> (red: [UInt], green: [UInt], blue: [UInt], alpha:[UInt]) { let imgProvider: CGDataProvider = imageRef.dataProvider! let imgBitmapData: CFData = imgProvider.data! var imgBuffer = vImage_Buffer( data: UnsafeMutableRawPointer(mutating: CFDataGetBytePtr(imgBitmapData)), height: vImagePixelCount(imageRef.height), width: vImagePixelCount(imageRef.width), rowBytes: imageRef.bytesPerRow) // bins: zero = red, green = one, blue = two, alpha = three var histogramBinZero = [vImagePixelCount](repeating: 0, count: 256) var histogramBinOne = [vImagePixelCount](repeating: 0, count: 256) var histogramBinTwo = [vImagePixelCount](repeating: 0, count: 256) var histogramBinThree = [vImagePixelCount](repeating: 0, count: 256) histogramBinZero.withUnsafeMutableBufferPointer { zeroPtr in histogramBinOne.withUnsafeMutableBufferPointer { onePtr in histogramBinTwo.withUnsafeMutableBufferPointer { twoPtr in histogramBinThree.withUnsafeMutableBufferPointer { threePtr in var histogramBins = [zeroPtr.baseAddress, onePtr.baseAddress, twoPtr.baseAddress, threePtr.baseAddress] histogramBins.withUnsafeMutableBufferPointer { histogramBinsPtr in let error = vImageHistogramCalculation_ARGB8888(&imgBuffer, histogramBinsPtr.baseAddress!, vImage_Flags(kvImageNoFlags)) guard error == kvImageNoError else { fatalError("Error calculating histogram: \(error)") } } } } } } return (histogramBinZero, histogramBinOne, histogramBinTwo, histogramBinThree) } iOSであれば,UIImageからcgImage作成は用意だが,macではNSImageなのでひと作業必要 var imageRect = NSRect(x: 0, y: 0, width: img.size.width, height: img.size.height) guard let cgImg1 = img.cgImage(forProposedRect: &imageRect, context: nil, hints: nil) else { abort() } 結果 4000x3000の画像で試すと *func: load img, Time: 29.488ms *func: make cgImg 1, Time: 0.069ms *func: calc, Time: 162.501ms *func: make 3ch chart, Time: 0.109ms *func: draw, Time: 0.9739ms 十分な速度が出た グラフはnsbezierPath curveを使うとなめらかになりそうだが control point算出がめんどくさく,今回は直線でつないでいる 上記プロジェクトはGithubにおいておきます ではまた
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む