utamt engineer blog

アプリケーション開発について学んだことの備忘録です。

CodeBuild のタイムゾーンを変更する

CodeBuild の実行環境のタイムゾーンは標準では UTC になっているようだが、これを JST に変更したい。 イメージ: aws/codebuild/amazonlinux2-x86_64-standard:3.0 解決策 buildspec.yml の pre_build 内に、export TZ="Asia/Tokyo" を追記する。 因みに Co…

TypeORM を利用して Session を管理する

概要 Express の Session ストアとして、MySQL などのデータベースを TypeORM (v0.2) 経由で利用する場合の備忘録です。 TypeORM 設定 Modules express-session と connect-typeorm をインストールします。 https://github.com/expressjs/session https://gi…

Intel Macで動作するDockerのNodeアプリを Apple Silicon Mac (M1) で動かすためにやったこと

Intel Mac で動作する Dockerfile を、Apple Silicon Mac (M1) で利用したら、イメージのビルドが失敗したり、docker 内の node のアプリ (react, gatsby, puppeteer) が動作しなくなったりしたので、その際に行った対処を書き残す。 サマリ node のイメージ…

React hooksで複合的な絞り込み検索機能を作る

React hooksで絞り込み検索機能を実装してみます。 今回は、データの配列に対して、入力フォームの値とチェックボックスの状態との複合条件で絞り込みができるようにします。 リストを表示 まずは簡単なデータの配列を用意し、全容をリストとして画面表示し…

Github Actions で Gatsby + Contentful のブログを VPS にデプロイする

Gatsby + Contentful で作成したブログを VPS で運用しています。Contentful で記事を作成したり、コードを github に push したときに自動でデプロイするようにしたかったので、その仕組みを Github Actions を使って構築しました。 前提 以下の状態である…

gatsby-starter-blog にページネーションを導入する

gatsby-starter-blog をベースに作成したブログの記事一覧ページにページネーションを導入してみました。 ページネーションは、gatsby-awesome-pagination というプラグインを使うことで簡単に実装できます。 インストール gatsby-awesome-pagination プラグ…

MySQLユーザの追加/削除

セキュリティ対策のため "root"@"%" を削除し、特定のユーザを追加する。 確認 > select user, host from mysql.user; +-------------+------------+ | User | Host | +-------------+------------+ | root | % | | root | localhost | +-------------+-----…

sudoの権限を付与する

現状 $ sudo sudo: /usr/bin/sudo は所有者が uid 0 である必要があり、かつ setuid が設定されている必要があります $ ls -l /usr/bin/sudo -rwxr-xr-x 1 pi root 147560 2月 2 2020 /usr/bin/sudo やったこと // rootユーザーに変更 $ su // 権限変更 # ch…

ラズパイが emergency mode で起動する

事象 電源ランプの点滅と、ファンの瞬断/回転を繰り返している状態になった。 ACアダプタを変更すると電源ランプやファンの瞬断はしなくなった。 モニターを繋ぐと emergency mode で起動している。 → おそらくACアダプタの問題。以下を参考に修復を行った。…

アプリの自動起動

システム起動時に自動実行したいアプリについて、各アプリ毎に実行用のシェルスクリプトを作成する。 /usr/local/bin/startup/app1.sh #!/bin/bash cd /home/pi/app1/ nohup npm start & これらをまとめて実行するスクリプトを作成する。 /usr/local/bin/sta…

Docker で Node.js 環境構築

設定ファイル 作業フォルダを作成し、Dockerfileとdocker-compose.ymlを作成する。 Dockerfile # hub.docker.comから公式で用意されたイメージをベースとする FROM node:10.13-alpine # カレントディレクトリを app に WORKDIR /app # デフォルトで node が…

Sequelize + MySQL

インストール npm init した上で、パッケージをインストールする。 $ npm install sequelize --save $ npm install mysql2 --saveコマンドもインストールしておく。 $ npm install -g sequelize-cli 設定ファイルの編集 必要なディレクトリ /config, /migrat…

node.js + express + MySQL

MySQL インストール // MySQL Yum リポジトリをシステムのリポジトリリストに追加 $ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm // リポジトリの確認 $ ls /etc/yum.repos.d/mysql-* /etc/yum.repos.d/mys…

node.js + express + ejs の基本型

事前準備 // node.js のインストール $ yum install node ... $ node -v v8.17.0// npm のインストール $ yum install npm ... $ npm -v 6.14.11 パッケージのインストール // 作業ディレクトリの作成 $ mkdir node01 $ cd node01// package.json の作成 $ n…

vagrant + CentOS7 の環境構築

VirtualBox & vagrant のインストール これは事前に N予備校 の講座で実施済み。 $ vagrant -v Vagrant 2.2.9 vagrant の設定 Host - Guest 間の共有フォルダ構成のため GuestAddition を導入する。 $ vagrant plugin install vagrant-vbguestプラグインの…

rsync によるデータバックアップ

外付け HDD のデータを別の外付け HDD にバックアップを取る。 rsync コマンドが使えそうなので、これを cron で定期実行するスクリプトを作成する。 流れ バックアップ用の HDD を接続する 指定のディレクトリにマウントする 同期先のディレクトリを作成し…

ejsにおけるエスケープ処理

で囲むとエスケープしない。 // エスケープする <%= <p>テキスト</p> %> // <p>テキスト</p> // エスケープしない <%- <p>テキスト</p> %> // テキスト

Vagrant(Ubuntu)に立てたMongoDBにMacからアクセスする

Vagrantfileの設定変更 ローカルIPアドレス:192.168.33.10 ポートフォワード:27017 # VagrantのローカルIPを設定 config.vm.network "private_network", ip: "192.168.33.10" # ポートフォワード config.vm.network "forwarded_port", host: 27017, guest:…

MongoDBのバックアップ/リストア

Node.jsからデータを投入 db.collection.initializeOrderedBulkOp()を使う。 const MongoClient = require("mongodb").MongoClient; const url = "mongodb://user:password@127.0.0.1:27017/sample"; // db名: "sample" const connectOption = { useNewUrlPa…

MongoDBのUbuntuへのインストール

インストール 公開鍵のインポート wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add - MongoDBのリストファイル作成 echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" |…

Node.js - pathでファイルパスの文字列を操作する

モジュールの取得 const path = require('path') 使用例 const filePath = '/aaa/bbb/ccc/ddd/index.html'; path.dirname(filePath); // /aaa/bbb/ccc/ddd path.basename(filePath); // index.html path.extname(filePath); // .html path.basename(filePath…

Node.jsでファイル監視 - フォルダ内にファイルが追加/編集されたときに何かする

chokidarというライブラリを利用する。 $ npm install chokidar --saveNode.js コード 'use strict'; const chokidar = require("chokidar"); const do = require('/[何かするdo.jsの格納先]/do').do; //chokidarの初期化 const watcher = chokidar.watch('.…

Node.jsでffmpegのシェルを定期実行する(node-cronを利用)

概要 過去記事で、ffmpegを実行するシェルスクリプトを作成した。 utamt.hatenablog.comしかしシェルスクリプトの独特な記法は扱いづらく、今後の拡張性を考えると別の方法を考えたい。ということで、今回は馴染みのあるnode.jsで同じ処理を作る。幸いにも、…

RaspberryPi4でH.264のハードウェアエンコードを使ってみる

エンコードの種類 ソフトウェアエンコード(-c:f libx264) CPUのみで処理 --> CPU負荷が高い。ラズパイ4で350%とかになる。 圧縮率は高いが、変換速度は遅い(1.0x以下) -crf, -preset で 画質や圧縮率、変換速度を調整する。 ハードウェアエンコード(-b:…

Linux コマンド

# CPUの温度 vcgencmd measure_temp # プロセスの監視 top

ffmpegのエンコードの設定は何が最適か

libx265ではエンコード速度に難あり(crf:28 --> speed=0.0392x) 圧縮するとしたらlibx265だが、実用上で最適な変換方法を分析する結論、crf 18-23程度, preset veryfast が良いかも。 環境 RaspberryPi4 サンプル動画:mt2s形式(5分) コマンド $ ffmpeg …

m2tsをmp4にエンコードするシェルスクリプトをcronで実行する

以前、ffmpegでm2tsからmp4(H.265)にエンコードするコマンドを作成した。 utamt.hatenablog.com 今回はこれをシェルスクリプト化し、cronで定期実行させる。 シェルスクリプトの作成 chinatsuで録画したm2tsファイルの保存フォルダに、下記の mp4encode.sh…

DLNAサーバ構築してPS4で動画を再生する

DLNAの構築 raspberryPi の動画ファイルをPS4経由でテレビ再生したい。 「miniDLNA」というソフトで構築できそう。 miniDLNAインストール # インストール $ sudo apt-get install minidlna # 動作確認 $ chkconfig --list minidlna minidlna 0:off 1:off 2:o…

ffmpegでm2tsをmp4に変換する

元動画:input.m2ts -> 変換後:output.mp4 圧縮効率の高いH265がおすすめ。 # H264(デフォルト)に変換する $ ffmpeg -i input.m2ts output.mp4 # H265に変換する $ ffmpeg -fflags +discardcorrupt -i input.m2ts -c:a copy -bsf:a aac_adtstoasc -c:v li…

Raspbianでのシェルスクリプト

# 作成 $ vi testscript.sh#!/bin/bash echo hello-world # 実行権限の付与 $ chmod 755 testscript.sh # 実行 $ ./testscript.sh hello-world