メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

Puppeteerを実行するとTypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function

現象

node index.js などのかんたんな実行でもエラーが出る。なおrequireするだけでもエラーになる。エラーの内容はつぎの通り。

> node index.js
internal/util.js:209
    throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'original', 'function');
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The "original" argument must be of type function
    at promisify (internal/util.js:209:11)
    at Object.<anonymous> (C:\workspaces\your-application\node_modules\extract-zip\index.js:11:18)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
at Object.<anonymous> (C:\workspaces\your-application\node_modules\puppeteer-core\lib\BrowserFetcher.js:25:17)

結論

Node.jsのバージョンが古いです。10.x 以降にしましょう。

他人の意外とハマったりしますよね^^

参考

https://github.com/puppeteer/puppeteer/issues/5687

Oculusアカウントの名前を変更する方法

Oculusアカウントのここの名前はFull nameと呼ぶらしい

マイプロフィールページではユーザーネームの他に、その上部に名前が表示されています。このFull nameの変更方法の話です。

f:id:ryoichi0102:20200421202725p:plain

どこでどう間違えたのか、このように登録されてしまっており、かっこ悪いので変更したかったのですが、変更方法が判らず。
サポートに問い合わせたところ、Webから変更できるものではなかったようです。

ここからサポートチケットの新規作成として、問い合わせたを行います。
https://tickets.oculusvr.com/hc/en-us/requests/new
なお、サポートチケットの発行は無料ですが、フォームが英語なので、英語で書く必要がある気がしています。

つぎに示すような画像の入力フォームが表示されます。

f:id:ryoichi0102:20200421205402p:plain

はじめに、Please choose a request type belowの選択肢で、Help with my Oculus Accountを選ぶと、以降の入力欄が表示されます。

Product項は、Oculus Accountを選択。
Oculus account email項に、アカウントに登録してあるメールアドレスを記入します。
Subject項には、Full name change request.
Please provide details on your request項には、

I'd like to change full name on oculus account.

Full name: 【変更後の名前】
Current alias/username: 【現在のusername】
The serial number of your headset: 【OculusヘッドセットのシリアルNo】

【ちゃんと人間味のある返信をくれるので、最後に軽い挨拶ぐらいは付けておきましょう】

って感じのことを最低限書いておけば良い気がします。

ヘッドセットのシリアルNoは
https://secure.oculus.com/my/devices/
で確認できると思います。

 

なお、名前変更の反映には、オペレーターが作業をしてから最大24時間かかるらしいです。

オペレーターからの返信メールに、サポートチケットへのリンクが貼られており、返信欄に、「解決しました」というチェックがあるので、問い合わせて作業をしてもらって完了していたらこのチェックを添えて返信を行います。(決してチケットをオープンにしたまま放置しないように^^)

補足

私が問い合わせた時は、Full nameの変更方法はないか?ということで問い合わせており、上記の文言で実際に問い合わせたわけではないので、一応私がリクエストしたときの文章も書いておきます。
> How to change my name (see attachment)?
> It doesn't seem to username, and cannot find the way to change the name.
(上の画像を添付しました)

そして、この問い合わせの返信で
・Current alias/username.
・The serial number of your headset.
をアカウント認証のために教えてくださいと返信があったので、これに返信する形で完結させました。

これからリクエストする方は最初からこの情報も書いておくと、1発で変更してくれると思いますので、上記のようなテンプレにしました。

Node-REDをv1.0にすると動かなくなるノード (htmlグローバル汚染編)

前置き

釣りなタイトルでスミマセン。

シリーズ化するかしないかはまだ決めていませんが、今後も地雷を踏むようであればまた書こうと思いますので、今回はhtmlグローバル汚染編と付けました。

Node-REDのv1.0が2019/09/30に出ました。いくつかの大きな変更があり、外観もさることながら内部の処理も変更になっています。既に公開されている多くのカスタムノードはv1.0未満で動作するよう書かれていますが、v1.0にすると動かなくなることもあると思います。このシリーズのエントリーでは、それがどういう現象なのか、どうして起こったのか、どう実装すれば良いのか、などを書いていきたいと思います。(前置き長っ)

現象 (不具合の内容)

インストール済のカスタムノードのうち、これに該当するものは、パレットに出現しなくなる。下記の画像はcustomカテゴリにカスタムノードをyour node 1, your node 2, your node 3の3種類を定義して再現させた図です。

f:id:ryoichi0102:20200207204728p:plain

表示されるはずのカスタムノードがパレットに表示されない

f:id:ryoichi0102:20200207204922p:plain

v0.20系だとちゃんと表示されています

原因や発生条件

htmlファイルのscriptブロックにおいて、RED.nodes.registerType()以外に、何かしらの定義がconstで行われており、その名称が他のノードの命名と被っている場合。

f:id:ryoichi0102:20200207205023p:plain

グローバルにconst定義して命名が被った場合の例

対応

各カスタムノードのスクリプトは、無名関数内で実行されるようにする。

<script type="text/javascript">
    // グローバル名前空間の汚染を避ける
    (() => {
        // ここにいつも書いている処理を書く.

        // oneditprepareやoneditsaveなどで呼び出されるような
        // 共通のfunction定義.
        const yourCommonFunctionFromCustomNode = () => {
            // 何かしらの処理.
        };

        // カスタムノードの定義.
        RED.nodes.registerType('your-custom-node', {
            // category: '',
            // ...
            // (略)
        });
    })();
</script>

あとがき

結構ハマりました。

参考

そもそもv1.0で何が変わったの?はコチラへ。

qiita.com