gitであるファイルを元に戻す方法

元に戻したいファイルのログを表示

foo.txtのログ(変更履歴)を表示する

$ git log foo.txt

実行結果

commit 51ab9a2761dd5f506c8d7ce93f69512c873e1869
Author: Kensuke ARAKAWA <miyavi@ojarumaru.jp>
Date:   Mon Nov 11 17:23:07 2019 +0900

    feat: something

commit 1f5f1d153407402e3a6c45d0d0a27a7b7af46746
Author: Kensuke ARAKAWA <miyavi@ojarumaru.jp>
Date:   Fri Nov 8 19:01:08 2019 +0900

    feat: something

commit 45eeb1882ac48110ac87bd6a6b4b23b6da27be95
Author: Kensuke ARAKAWA <miyavi@ojarumaru.jp>
Date:   Tue Nov 5 18:06:51 2019 +0900

    feat: something

元に戻す

例えば、commit 1f5f1d153407402e3a6c45d0d0a27a7b7af46746 に戻す場合は、

$ git checkout 1f5f1d153407402e3a6c45d0d0a27a7b7af46746 foo.txt
$ git checkout [commit] [filepath]

Webpackで静的なファイルをコピーする方法

CopyWebpackPluginを使って、build時に、JSONファイルなどをバンドルせずに、単体でコピーする方法。

インストール方法

$ npm i -S copy-webpack-plugin write-file-webpack-plugin

file-webpack-pluginを入れることで、debug時に、実際のdistディレクトリにも書き出されるようになります。

webpack.config.js

importを追加

const CopyFilePlugin = require("copy-webpack-plugin");
const WriteFilePlugin = require("write-file-webpack-plugin");

pluginの項目に追加

new CopyFilePlugin(
    [
        {
            context: "src",
            from: "**/*.json",
            to: path.resolve(__dirname, "dist")
        }
    ],
    { copyUnmodified: true }
),
new WriteFilePlugin()

src以下のJSONファイルをdist以下にコピーするという設定。contextで、対象となるディレクトリ/ファイルの親ディレクトリを指定。

参考にしたサイト

https://qiita.com/pepoipod/items/e41105e8f3afd47dc01c
https://codeday.me/jp/qa/20190515/828253.html

TouchDesigner 黙々会2019 #01の成果物

10/23に開催されたTouchDesignerの黙々会の成果物をアップします。

つくったもの

先日、 cyclo. (Ryoji Ikeda, Alva Noto)のLiveを観てきまして、Line Art系のAudio/VisualなものをTouchDesignerで作れないかなと。

成果物

https://github.com/arkwknsk/touchdesigner/tree/master/mokumoku/20191023
MIT Licenseで公開
かなり、ネットワークが汚いですが、お許しを。

サウンド解析

  • ネットワーク左側に、Audio Device In CHOPを配置。別途、サウンドドライバを入れて、PC内部でループさせてYouTubeの音を拾ってきた
  • サウンド解析は、Paletteに入ってるaudioAnalysisを使用。ここから、CHOPでごにょごにょと、音から拾ってきた数字をいじる
  • 閾値の調整や数値のスケールで、かなり映像が変化するので、実際の調整はきりがない。
  • Audio File In CHOPに、手元のMP3ファイルなどを指定して音を鳴らすことも可能

ラインアート

ラインアートを大量に出す方法は、比嘉さんのブログで解説されています
http://satoruhiga.com/TDWS2019/day10/

  • Circle SOPで、四角や円をつくり、Geometory COMPでインスタンシング。位置やサイズに、音解析のデータを加えて、A/V感を。
  • インスタンシングする際に、ベースとなる位置は、ネットワーク真ん中上部のSOPで決めます。形状を複数個つくり、これをスイッチングして、バキッバキッと演出
  • カメラは、視点にNullを指定して、常に中心部分を見るようにし、Projectionは、Orthographicにして、2D感を。

インスタンシングでの位置やスケールを変えれば、いろいろとoFっぽい演出が、TDでもできそうな感じ。

Post Processing

  • フラッシュ効果は、Level TOPのInvertで反転して演出。反転するタイミングも、音解析から持ってくる。
  • その他、色を変えたり、ノイズを載せたり

TypeScriptでlog4jsを使う方法

インストール

$ npm i -S log4js @types/log4js

使い方

コンソールとファイルに、ログを同時出力。

import { configure, getLogger } from "log4js";

configure({
  appenders: {
    console: {
      type: "console"
    },
    logfile: { type: "file", filename: "log/app.log" }
  },
  categories: { default: { appenders: ["console", "logfile"], level: "error" } }
});

const logger = getLogger();

logger.level = "debug";
logger.debug("Some debug messages");
logger.error("aha!");

出力結果

[2019-10-20T10:58:43.835] [DEBUG] default - Some debug messages
[2019-10-20T10:58:43.839] [ERROR] default - aha!

設定を変えると、ログレベルごとに出力先を変えたり、ログの出力のテンプレート(レイアウト)を変更できたりする。

log4jsのドキュメント
https://log4js-node.github.io/log4js-node/

日付の形式について
https://www.npmjs.com/package/date-format

TypeScript + node.js + VisualStudioCodeの開発環境

node.jsでアプリケーションをつくるのに、TypeScriptで書いて、Visual Studio Codeを開発環境とする方法を探る

参考になったサイト

https://qiita.com/notakaos/items/3bbd2293e2ff286d9f49
https://qiita.com/kurogelee/items/cf7954f6c23294600ef2
https://github.com/TypeStrong/ts-node/issues/46#issuecomment-437758378

ここのボイラープレートをテンプレートにすると便利です。必要なnpmパッケージ、設定ファイルがはいっています。git cloneなどでローカルに。
https://github.com/notakaos/typescript-node-base

package.json

{
  "name": "typescript-node-base",
  "keywords": [],

  "version": "0.1.0",
  "main": "dist/index.js",
  "scripts": {
    "dev": "ts-node ./src/index.ts",
    "dev:watch": "ts-node-dev --respawn src/index.ts",
    "clean": "rimraf dist/*",
    "tsc": "tsc",
    "build": "npm-run-all clean tsc",
    "start": "node ."
  },
  "keywords": [],
  "author": "YOUR NAME",
  "license": "ISC",
  "description": "",
  "dependencies": {},
  "devDependencies": {
    "@types/node": "^12.7.4",
    "npm-run-all": "^4.1.5",
    "rimraf": "^2.7.1",
    "ts-node": "^8.3.0",
    "ts-node-dev": "^1.0.0-pre.42",
    "typescript": "^3.6.2"
  }
}

L9: --respawnを指定することで、サーバ型ではないスクリプトでも、実行後終了せずに待機させ、更新→再読み込み→再起動が可能に。

tsconfig.json

{
  "compilerOptions": {
    "target": "ES2019",
    "module": "commonjs",
    "sourceMap": true,
    "outDir": "./dist",
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true
  },
  "include": ["src/**/*"]
}

sourceMapは有効にしましょう。Debugが効くようになります。

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "ts-node[debug]",
      "type": "node",
      "request": "launch",
      "args": ["${workspaceFolder}/src/index.ts"],
      "runtimeArgs": ["--nolazy", "-r", "ts-node/register"],
      "sourceMaps": true,
      "cwd": "${workspaceRoot}",
      "restart": true,
      "protocol": "inspector"
    }
  ]
}

L8: 任意のファイルを指定

https://github.com/TypeStrong/ts-node/issues/46#issuecomment-437758378
の投稿が参考になりました。

TouchDesignerでPythonからOPを作成する

例えば、Table DATをPython スクリプトから生成する場合

parent().create(tableDAT,'foo')

COMP.create

create(OPtype, name, initialize=True) 

OPType に、作成したい OPのclassを入れると OPの種類を指定できます。

Replicator COMPからではなく、OPを作成したいときに便利です。