shonen.hateblo.jp

やったこと,しらべたことを書く.

React + Next + typescript + tsnode + mocha で tsx なテストを行うために必要な設定

簡潔な記事です

概要

/home/fai/repo/maisandbox3/mocha/next/components/CodeEditorTest.tsx:29
        const codeEditor = (<CodeEditor_1.default ref={refEditor} lang='ruby'/>);
                            ^

SyntaxError: Unexpected token '<'

というエラーが出る。

原因

Nextのデフォルトのtsconfig.jsonが妙。jsxを無視する設定"jsx": "preserve"になっている。

解決策

TS_NODE_COMPILER_OPTIONS 環境変数を使えば、設定を上乗せ出来る。 {"module":"commonjs", "jsx": "react"} をオーバーライドする。

TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\", \"jsx\": \"react\"}' mocha --require ts-node/register  mocha/next/**/*Test.{ts,tsx}

お気持ち

jestの方が良さげ

Rubyで構造体のようなクラスを生成するメソッドを作成したら既にStructという名前で存在していた件

タイトルの通りです

Rubyで構造体のようなクラスを生成するメソッドを作ったのですが、 実は既にStructクラスというものがあり、作ったメソッドがほぼ無意味になってしまいました。

せっかくなので、供養。

def create_struct(props_name)
  k = Class.new()
  props = props_name.clone
  k.class_eval do
    define_method(:initialize) do |**args|
      props.each do |pr|
        instance_variable_set '@' + pr, args[pr.to_sym]
      end
    end
    attr_accessor *props
  end
  k
end
続きを読む

html5のtemplateタグは、ただ非表示にする普通のタグでは無い

最近記事を書いていなかったので、書き殴った。

templateタグ

HTML のコンテンツテンプレート (<template>) 要素 は、すなわちページの読み込み時にすぐには描画されないものの、後で JavaScript を使用してインスタンスを生成できる HTML を保持するメカニズムです。

developer.mozilla.org

続きを読む

Android Emulator のコーデックがオーディオコーデックしか無い

無いのかな。

概要

Android API16 以降には android.media.MediaCodec というクラスが居る。
ローレベルなコーデックにアクセスするためのインターフェースで、 ffmpegとかの特別なライブラリを必要とせず動画を展開・圧縮できる。

使い方は書かない。というか、勉強中なので書けない。

問題

以下のコードで、コーデック一覧を取得できる。

    private void hoge() {
        MediaCodecList mcl = new MediaCodecList(MediaCodecList.ALL_CODECS);

        for (MediaCodecInfo mci : mcl.getCodecInfos()) {
            Log.d(TAG, mci.getName());
            for (String type : mci.getSupportedTypes()) {
                Log.d(TAG, mci.getName() + " supports " + type);
            }
        }

    }
続きを読む

公開鍵SSHが Permission denied で落とされると思ったらホームディレクトリの権限が原因

note: 本記事は 2019/12/25 に執筆されたまま下書きに眠っていました

現象

さくらVPSに公開鍵認証を使って SSH で接続しようとしたところ、

$ ssh example.com -l hoge
hoge@example.com: Permission denied (publickey).

というありがちなエラーが返ってきた。

特に不思議だったのは、リモートデスクトップ上か何か少なくとも1つの端末がログインしていれば、SSH で接続出来るようになること。

/var/log/auth.log を見てみたが、

Dec 25 00:25:47 tk2-410-46464 sshd[13641]: Connection closed by authenticating user USERNAME 49.129.241.52 port 60132 [preauth]
Dec 25 00:25:47 tk2-410-46464 sshd[13643]: Connection closed by authenticating user USERNAME 49.129.241.52 port 60134 [preauth]
Dec 25 00:25:47 tk2-410-46464 sshd[13645]: Connection closed by authenticating user USERNAME 49.129.241.52 port 60136 [preauth]
Dec 25 00:25:48 tk2-410-46464 sshd[13647]: Connection closed by authenticating user USERNAME 49.129.241.52 port 60138 [preauth]

連打した跡が残っている事しか分からない。

解決策

ログインしようとしていたユーザのパーミッション700 だった。

701 にすると、ログイン中の端末が存在していなくても、ログインできるようになった。

sudo chmod 701 ~

権限が理由でSSH接続出来ないのは分かるのですが、ログイン中の端末があれば接続出来てしまうのが謎でした。