ec2 -> cloud watch -> sns -> chatbot

docs.aws.amazon.com

{
  "metrics": {
    "metrics_collected": {
      "procstat": [
        {
          "pid_file": "/var/run/httpd/httpd.pid",
          "measurement": [
            "cpu_time",
            "cpu_usage",
            "memory_locked",
            "memory_rss",
            "memory_vms",
            "num_threads",
            "pid",
            "pid_count"
          ]
        }
      ]
    }
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/home/ec2-user/logs/error.log",
            "log_group_name": "errorlog",
            "log_stream_name": "sample-ec2-cloudwatchlogs"
          }
        ]
      }
    }
  }
}

TypeError: sequelize.import is not a function

sequelizeでつまったところ

stackoverflow.com

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
// var config = require(__dirname + '/../config/database.js')[env]
var config = require('../../../config/database.js')[env]
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
  .readdirSync(__dirname)
  .filter(file => {
    console.log(file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    // const model = sequelize['import'](path.join(__dirname, file));
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes)
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

aws amplifyチュートリアル触る

とはなん

aws.amazon.com

チュートリアル

https://docs.amplify.aws/start/getting-started/installation/q/integration/reactdocs.amplify.aws

環境

GAMA@GAMANS-AM MINGW64 /d
$ git --version
git version 2.20.1.windows.1

GAMA@GAMANS-AM MINGW64 /d
$ node -v
v14.17.0

GAMA@GAMANS-AM MINGW64 /d
$ npm -v
6.14.13

すすめる

$amplify init

cli.json
project-config.json
backend-condfig.json
tags.json

amplify/team-provider-info.json
各リソースのARNなどが記載されてる

amplify/team-provider-info.json git管理外にしておいたほうがよさそう
Security best practices for Amplify app in a public repo · Issue #1779 · aws-amplify/amplify-cli · GitHub

はまった
https://docs.amplify.aws/start/getting-started/data-model/q/integration/react#connect-frontend-to-api

Module not found: Can't resolve './graphql/mutations'

npm start

PS D:\workspace\node\react-box> npm start   
npm WARN lifecycle The node binary used for scripts is C:\Program Files (x86)\Nodist\bin\node.exe but npm is using C:\Program Files (x86)\Nodist\v-x64\14.17.0\node.exe itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.

> react-box@0.1.0 start D:\workspace\node\react-box
> react-scripts start

We detected TypeScript in your project (src\API.ts) and created a tsconfig.json file for you.

It looks like you're trying to use TypeScript but do not have typescript installed.
Please install typescript by running npm install typescript.
If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files).

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! react-box@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the react-box@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\GAMA\AppData\Roaming\npm-cache\_logs\2021-06-06T10_54_01_486Z-debug.log

あー、、、
create-react-appをjsで作ってしまって、GraphQLをtsで作ってしまったからか、

npm install -save--dev typescript @types/react @types/node

いったんインストールしてみる。

いけたっぽい

f:id:gamaspecial:20210606195841p:plain

つづきをすすめる。

publish

おおー、

Compiled successfully.

File sizes after gzip:

  361.21 KB  build\static\js\2.03a7f31b.chunk.js
  1.66 KB    build\static\js\main.5e5da87c.chunk.js
  1.63 KB    build\static\js\3.2006b407.chunk.js
  1.17 KB    build\static\js\runtime-main.cb997d53.js
  278 B      build\static\css\main.6dea0f05.chunk.css

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

  npm install -g serve
  serve -s build

Find out more about deployment here:

  https://cra.link/deployment

√ Zipping artifacts completed.
√ Deployment complete!
https://dev.d2f3uckncyo6py.amplifyapp.com

https://dev.d2f3uckncyo6py.amplifyapp.com

https://docs.amplify.aws/start/getting-started/nextsteps/q/integration/reactdocs.amplify.awsa

かいてるとちゅう unreal engine #01

ダウンロード

www.unrealengine.com

インストール

Epic Games Launcher を開く

エンジンのインストールボタンをクリックして、最新の Unreal Engine をインストール

f:id:gamaspecial:20210602211125p:plain

ラーニングへ

learn.unrealengine.com

Unreal Engine 5 クイックスタート learn.unrealengine.com

file --mime cp932 or sjis

benzenetarou.hatenablog.com

qiita.com

sample_1.csv

h1,h2,h2
あ,い,う

sample_2.csv

h1,h2,h2
あ,い,彅
file --mime ファイル名

sample_1.csv -> unknown-8bit
sample_2.csv -> unknown-8bit
nkf --guess ファイル名

sample_1.csv -> sjis
sample_2.csv -> cp932

$ file --mime ファイル名 の方はさておき、Shift_JIS (LF)と判別されるのは、同じく、cp932とShift_JIS (LF)を判別する文字がなかったためでした。

Error: EACCES: permission denied, rename ''

VSCode でWSL2リモート接続で作業中にファイル名なりディレクトリ名なり変更しようとするとpermission denied.

gamaspecial@GAMANS-AM:~/rails-6.1-tools/app$ mv libs lib
gamaspecial@GAMANS-AM:~/rails-6.1-tools/app$ ls
assets  channels  controllers  helpers  javascript  jobs  lib  models  service  views
gamaspecial@GAMANS-AM:~/rails-6.1-tools/app$

VSCodeがロックしているだけだったので、VSCodeをとじてubuntuでmvしたらいけた、めんど

WIP: ruby StringIO からのStream処理での最適なエンコード方法がわからない

io.string.encode('CP932', 'UTF-8')

これはやりたくない、、、

class StringIO (Ruby 3.0.0 リファレンスマニュアル)

set_encoding(ext_enc) -> self[permalink][rdoc][edit]
set_encoding(ext_enc, int_enc) -> self
set_encoding(ext_enc, int_enc, opt) -> self
自身のエンコーディングを指定されたエンコーディングに設定します。

[PARAM] ext_enc:
エンコーディングを指定します。 nil を指定した場合は Encoding.default_external が使われます。
[PARAM] int_enc:
無視されます。IO クラスの API との互換性のために用意されています。
[PARAM] opt:
無視されます。IO クラスの API との互換性のために用意されています。
io.set_encoding('CP932', 'UTF-8')

外部エンコーディングは無視、

WIP: StringIO, set_encoding

docs.ruby-lang.org

# cp932
io = ...
io.string.encoding -> UTF-8

io = get_s3_client.get_object({
          bucket: "bucket",
          key: "key",
          :response_content_encoding => 'CP932',
          :response_content_type => 'text/csv'
}).body
# :response_content_encoding 意味ない、、、
# StringIOのencodingが設定されると思ったが

csv = CSV.new(io)
-> ArgumentError: invalid byte sequence in UTF-8

# 明示的に設定しないとダメっぽい
p io.set_encoding('CP932')

csv = CSV.new(io)

-> <#CSV io_type:StringIO encoding:Windows-31J lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">