GatsbyのサイトにGoogle AdSenseの審査を受けるためのコードを追加する
自分用備忘録。
以下の公式サイトを参考にする。
gatsby-ssr.js
が存在していなければルートに追加する。
以下のコードを貼り付ける。 Google AdSenseのコード
というところに自分のコードを入れる。
import React from 'react'; export const onRenderBody = ({ setHeadComponents }) => { setHeadComponents([ <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client={Google AdSenseのコード}" crossOrigin="anonymous" />, ]); };
これでGoogle AdSense側に審査を依頼する。
HEIC形式の画像ファイルをPNGへ変換するPythonスクリプト
Pythonで大量のHEIC形式の画像ファイルをPNGへ変換する必要に迫られたので、過去に非同期の書き方をメモしておいた自身のブログを読み返していた。
HEICファイルをPNGファイルに変換するためのPythonスクリプト
上のポストを参照しながら実装したのが、以下。
(ひとまずソースコードだけ上げていますが、READMEなどは後日追加します)
下記のように実行すれば対象ディレクトリ内のHEICファイルをPNGに変換する処理が動く。
git clone https://github.com/shinshin86/heic2png.git cd heic2png # 仮にtestディレクトリ内のHEICファイルを処理したいとした場合 python heic2png.py test
パフォーマンスについて
自身のM1 MacBook Airにて3000ファイルの画像を処理させて、1時間かからないぐらいの時間で処理が完了した。
M1 MacBook Airのコア数は以下で、アクティビティモニタで監視しているとだいたいスレッドは 13~20
ぐらい利用していたようだ。
8(パフォーマンス: 4、効率性: 4)
ちなみにPythonでasyncioを使った非同期処理を行う場合のスレッドプールなどの仕様は以下の通り。
(ただ、下記の説明を見ると8コアだと最大で12スレッドが動く形となりそうなので、 13~20
動いていたという自身の見解は誤りかも?一応アクティビティモニタのスレッドの数を参照していたが、仮想スレッドとかそういうのがあって実際のコア数よりも多かったりとかするのか?ちょっとここらへんは理解が浅いので適当なのことを言っているかもしれません。ご存じの方がいればコメントいただけると幸いです)
concurrent.futures -- 並列タスク実行 — Python 3.10.6 ドキュメント
Default value of max_workers is changed to min(32, os.cpu_count() + 4). This default value preserves at least 5 workers for I/O bound tasks. It utilizes at most 32 CPU cores for CPU bound tasks which release the GIL. And it avoids using very large resources implicitly on many-core machines. ThreadPoolExecutor now reuses idle worker threads before starting max_workers worker threads too.
同期処理だと途方も無い時間がかかる処理だったので、こういう形で一気に処理できるのはやはり気持ちいいなと思ったのでした。
M1以降のmacでnode-sassをインストールしようとした際にエラーになったので対応したメモ
メインの作業マシンはすでにM1以降のMacBook Airに移行しているが、唯一Gatsby関連のプロジェクトではまだIntelチップのMacBook Proでないと yarn install
が成功しない状態となっていた。
今回は重い腰を持ち上げて、M1以降のmacでもGatsby関連のプロジェクトをセットアップできるようにした際の個人的なメモとなる。
目次
長いので目次をおいておく。
- 目次
- macとNode.jsとGatsbyのversion
- 最初に結論:node-sass ではなく sass を入れることで解決。
- エラーの内容(Python 2が見つからない。だが、Python2を入れたくない)
- node-sassのバージョンを上げてみる?
- node-sass ではなく sass で解決
macとNode.jsとGatsbyのversion
M1以降のmacでは、Gatsbyに関しては共通してnode-sass(node-gyp)絡みのインストールに成功していない。
そして今回作業するマシンは M1 MacBook Air
となる。
macOSのバージョンは 12.6.1
Node.jsのバージョンは
node -v v16.14.0
"gatsby": "^2.23.7",
となっている。
他にも影響している依存ライブラリがあるかもしれないが、ひとまずこれだけ載せる。
最初に結論:node-sass ではなく sass を入れることで解決。
最初に結論を書いておくと、以下のように node-sass ではなく sass を入れることで解決した。
yarn remove node-sass yarn add sass
node-sassをインストールするために python 2
を入れたり、不必要に古いバージョンを利用するということはせずに対応できたので良かった。
エラーの内容(Python 2が見つからない。だが、Python2を入れたくない)
プロジェクト内で yarn install
した際のログは以下となる。
※関係ありそうなところを抜粋している
gyp info using node-gyp@3.8.0 gyp info using node@16.14.0 | darwin | arm64 gyp verb command rebuild [] gyp verb command clean [] gyp verb clean removing "build" directory gyp verb command configure [] gyp verb check python checking for Python executable "python2" in the PATH gyp verb `which` failed Error: not found: python2
python2 が見つからない?
また以下のようなエラーメッセージも出ていた
gyp ERR! stack File "<string>", line 1 gyp ERR! stack import sys; print "%s.%s.%s" % sys.version_info[:3]; gyp ERR! stack ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ gyp ERR! stack SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
内容的にはPython 2前提で処理が走るようになっているのか?
ちなみにエラーの発生源は node-sass
で、 node-sass
に依存している node-gyp
内でエラーになっているように見える。
package.json
を見るとたしかに node-sass
も利用していた。
"node-sass": "^4.14.1",
node-sass
のために python2
をわざわざ入れたくない...
node-sassのバージョンを上げてみる?
で、ちょっと調べてみた感じ node-sass
のバージョンを上げると対応されているかも?と思ったので試してみた。
GitHubのREADMEを見た感じだと、node v16系にはversion 6系が対応していそうだったので、
yarn add node-sass@6
で6系を入れる。
するとインストールは完了した。
これでうまく行ったか?と思いきや、buildしてみると今度は以下のようなエラーがWebpackから出ていた。。
ERROR #98123 WEBPACK Generating JavaScript bundles failed Module build failed (from ./node_modules/sass-loader/dist/cjs.js): Error: Node Sass version 6.0.1 is incompatible with ^4.0.0.
node-sass ではなく sass で解決
関係ありそうな情報を探してみると以下のようなissueを見つけた
そこで見つけた記述に node-sass
を削除して代わりに sass
を入れてみると良い、というものがあったので試してみた。
yarn remove node-sass yarn add sass
インストールした sass
のバージョンは以下。
"sass": "^1.57.1"
で、これで問題は無事に解決した!
というわけで、同じような事象で困っている方がいらっしゃいましたら、node-sass
ではなく sass
が解決の糸口になるかもしれません。
VoiSonaをLogic Proで使うまでの手順
VoiSonaをLogic Proで使うまでの手順を備忘録として残しておく
目次
- 目次
- VoiSonaのダウンロード
- Logic ProからVoiSonaを呼び出す手順
- Logic Pro上で打ち込んだMIDIをVoiSonaに歌わせるまでの手順
- 商用利用可能な音楽のサイトについて
VoiSonaのダウンロード
まずはVoiSona自体をダウンロードし手順に従ってインストールする。
ダウンロードは下記から。
アカウントを作成する必要があるが、無料で試すことが可能で、個人・法人、商用・非商用を問わず無料で利用できる、というのがかなりインパクトある
最初から 知声
というボイスライブラリを利用できて、これを利用するだけであれば無料となる。
追加のボイスライブラリはサブスクリプション形式の支払いとなる。そちらもVoiSonaのサイトから試聴できるが、良い感じ。
Logic ProからVoiSonaを呼び出す手順
VoiSonaは現在はAudio Units (AU)に対応しているので、Logic Pro上からも読み込める。
(以前はAU未対応だったため、少し古い記事だと別のプラグイン経由で読み込むという記載があるが、現在はそのようなことは必要ない)
実際にVoiSonaを読み込む際の手順を記載する。
まずはトラック上の音源を選択
下にある AU音源
の中に Techno-Speech
があり、その下に VoiSona Song Editor
があるのが確認できる。
起動して利用できることを確認。
Logic Pro上で打ち込んだMIDIをVoiSonaに歌わせるまでの手順
まずは適当にMIDIを打ち込む
MIDIを打ち込む際に重要なポイントがあり、ノートがかぶっているとVoiSonaで認識した際に正常にMIDIデータ(ノートデータ)がVoiSona側に移行されないので気をつけること。
VoiSona用のトラックを新規作成。
(外部MIDI音源を選択しているが、ソフトウェア音源とかでもいけるかも?)
打ち込んだMIDIデータ(リージョン)をVoiSona側に移動させる。
移動させた側のトラック(先ほど作成したトラック)でVoiSonaを起動し、VoiSona画面の Transfer
というところをクリックする。
あとはこの状態で再生を実施する。
ノートをVoiSona側に移動させている関係で再生させても音は出ないが、再生が完了するとVoiSona側にMIDIデータ(ノート)が読み込まれていることが確認できる。
Logic Proで打ち込んだMIDI情報をVoiSona側に読み込ませる手順は以上となる。
商用利用可能な音楽のサイトについて
久しぶりに楽曲制作系のポストなので、ついでに宣伝を。
以下のツイートにも書いてあるように、商用利用可能な音楽を無料で提供している下記のサイトのドメインが変わりました。
サイトの内容などは変わりませんので、今後ともよろしくお願いします!
無料で使える商用利用可能な音楽を提供していたこちらのサイトですが、このたびドメインが変わりました。
— Yuki Shindo (@shinshin86) December 17, 2022
サイトの内容などはこれまでと変わりません。今後ともよろしくお願いします!https://t.co/ORV2UUbH6D
サイトへのリンクはこちらです。
M1 mac環境で pyheif をインストールしようとした際に fatal error: 'libheif/heif.h' file not found が出たときの対応方法
M1 MacBook Airで pyheif
をインストールしようとしたら fatal error: 'libheif/heif.h' file not found
というエラーになった。
ググるとすぐに解決策は見つかった。
(このPRがマージされれば、この手法も必要なくなる?)
以下のコマンドでインストールすることで成功を確認した。
pip install git+https://github.com/guillaumegenthial/pyheif.git@m1-support
以上、備忘録。
Amazonでカートを入れるボタンを押した際にエラーになるときの対応方法
Amazonの商品ページで『カートに入れる』ボタンを押したときに、下記のような画面になった。
調べてみると、カートに入れずにそのまま購入するボタンの方を押せば買えるという意見も見たが、私は宅配指定日などを設定したかったので、どうしても一度カートに入れたかった。
というわけで、こういうエラーが出たときでもカートに入れて購入する方法を備忘録として書いておく。
まず私の環境だが、 M1 MacBook AirのChrome
となる。
環境が異なると再現できない可能性もあるので一応書いておく。
Amazonでカートを入れるボタンを押した際にエラーになるときの対応方法
カートに入れたい商品を開いている状態で command + option + i
を押す
(ここは右クリックから 検証
でも良い)
すると、Chromeの開発者ツールが開くので、ツール上部にある下記赤枠のボタンを押す
このボタンが押された状態で画面をリロードする。
するとスマフォ表示の状態で表示されるので、スマフォ表示のままカートに入れ、最後まで決済を完了させる。
PCからスマフォ表示のまま購入完了させるというのも違和感ありまくりだが、一応これで問題なく購入ができたのでメモとして残しておく。
React Draggableのexample
react-draggableというReact上でアイテムをいい感じにドラッグできるツールがある。
このツールの中身を調べたくて、色々作業した際のメモ。
最新のexampleをCode Sandboxで動かしたもの
Coda Sandboxで最新のexampleコードを動かしたもの
(GitHub側でホスティングされているデモが最新のexampleコードを動かしたものではないので、挙動を確認したくて作成した)
このexampleコードはclassコンポーネントの書き方で書かれているので、そちらを関数コンポーネントで書き換えたものがこちら。
TypeScriptで書いているが、細かな型などは後回しにしてしまっているのであしからず。