2020-05-26

指定したサーバーでnslookup

nslookup
> server 8.8.8.8
> note.kiriukun.com

2020-05-24

apt

依存関係もアンインストール
sudo apt autoremove piyopiyo
設定ファイルを含めて依存関係もアンインストール
sudo apt --purge autoremove piyopiyo
完全一致検索
apt list piyopiyo
部分一致検索
apt search piyopiyo
インストール済みのパッケージを表示
sudo dpkg -l

2020-04-22

JavaScript 分割代入で再代入

カッコで囲わないと Unexpected token '=' が出る

const obj = { a: 1, b: 2 };
let a, b;
({a, b} = obj);
console.log(a, b);  // -> 1 2

2020-04-09

AWS-CLI 接続先、接続ユーザーを取得

aws sts get-caller-identity
結果
{
    "UserId": "AAAAAAAAAAAAAAAAAAAAA",
    "Account": "999999999999",
    "Arn": "arn:aws:iam::999999999999:user/kiriukun"
}

2020-04-08

anyenvをアンインストール

ホームディレクトリにインストール済みのanyenvと設定ファイルを削除

rm -rf ~/.anyenv
rm -rf ~/.config/anyenv

それから、インストール時に .bashrc とか .bas_profile あたりに以下の記述を追加してるはずなので、手動で削除する

.bashrcなど
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"

ターミナルを落として上げなおして (再ログイン)、anyenv versions などでコマンドが使えなくなったことを確認する。

2020-04-06

シンボリックリンク削除

unlink /path/to/link

2020-04-04

Ubuntuのバージョン確認

cat /etc/os-release | grep VERSION
結果
VERSION="18.04.4 LTS (Bionic Beaver)"
VERSION_ID="18.04"
VERSION_CODENAME=bionic

Ubuntu MariaDBを完全にアンインストール

sudo dpkg --force-all -r mariadb-server-10.1
sudo apt --purge remove mysql-server*
sudo apt --purge remove mysql-common*
sudo apt --purge remove mariadb-server*

aptはremoveじゃなくてpurgeしないと設定が残るらしい

最後の mariadb-server を消すとき、画面が出てきて消すか聞かれるのでYESを選択すること

Ubuntu シンボリックリンク作る

ln -s /path/to/target linkname

2020-03-16

AWS CloudFormationでRoute 53にエイリアスのAレコード追加

コメントのとこは公式マニュアル参照

  MyAliasRecordSetIPv4:
    Type: "AWS::Route53::RecordSet"
    Properties:
      HostedZoneId: "追加先のホストゾーンID"
      Name: "ドメイン名"
      Type: "A"
      AliasTarget:
        DNSName: "CloudFrontディストリビューションのドメイン名"
        HostedZoneId: "Z2FDTNDATAQYW2"  # CloudFrontならこれ固定

  MyAliasRecordSetIPv6:
    Type: "AWS::Route53::RecordSet"
    Properties:
      HostedZoneId: "追加先のホストゾーンID"
      Name: "ドメイン名"
      Type: "AAAA"
      AliasTarget:
        DNSName: "CloudFrontディストリビューションのドメイン名"
        HostedZoneId: "Z2FDTNDATAQYW2"  # CloudFrontならこれ固定

2020-03-10

Gitでconflictした時の BASE, LOCAL, REMOTE

  • BASE … 共通の先祖
  • LOCAL … 自分の変更
  • REMOTE … 相手の変更

自分のを捨ててよければREMOTEを採用すればよい。

stashからpopしてconflictした場合は、LOCALとREMOTEが逆なので注意。(相手の変更が反映されたところに、popされた自分の変更が降ってくるわけだから)

2020-03-03

AWS CloudFormationでVPC Lambdaを作ろうとしたら CreateNetworkInterface がどうこう

please make sure your function execution role have permission to CreateNetworkInterface みたいなエラーが出たら、VPCで動かすLambdaの実行ロールのポリシーに ec2:CreateNetworkInterface, ec2:DescribeNetworkInterfaces, ec2:DetachNetworkInterface, ec2:DeleteNetworkInterface が足りない。

AWS S3の前にCroudFront置いたらS3のURLにリダイレクトされてAccessDeniedと言われる

CroudFront作ってすぐにアクセスしようとすると、設定に何も問題無くても、S3の生URLへのリダイレクトがCroudFrontにキャッシュされてしまうらしい。

2020-02-13

JavaScript オブジェクトの配列を特定のキーでソート

list をオブジェクトの id でソートするなら↓

list.sort((a, b) => {
  if (a.id > b.id) return 1;
  if (a.id < b.id) return -1;
  return 0;
});

2020-02-12

設定ファイルを指定してwebpack

webpack --config webpack.config.js

設定ファイルを指定してwebpack-dev-server

webpack-dev-server --config webpack.config.js

2020-02-07

printableなASCII文字以外をヒットさせる正規表現

[^ -~]

printableなASCII文字と改行以外をヒットさせる正規表現

[^\r\n -~]

2020-02-03

VSCode settings.jsonの開き方

左下の歯車マークをクリック、または Ctrl + , で設定画面を開く → 画面右上にあるファイルのマークをクリック

このファイルのアイコンは、カーソルを合わせると『設定 (JSON) を開く』と表示される

VSCode ウィンドウのリロード

Ctrl + Shift + P でコマンドパレットを開く

Developer: Reload Window と入力して実行

2019-11-16

Windowsでシンボリックリンク

mklink /D %リンク置きたい場所% %リンク先%

2019-11-02

ゴミ

function toQueryString(params) {
    var ret = '';
	Object.keys(params).forEach(function(key) {
		if (ret !== '') {
			ret += '&';
		}
		var value = params[key];
		if (value === '' || value === null) {
			ret += key;
		} else {
			ret += key +'='+ encodeURIComponent(value);
		}
	});
    return ret;
}
function getCookies() {
	var ret = {};
	var tmp = document.cookie.split(';');
	for (var i = 0, len = tmp.length; i < len; ++i) {
		var arr = tmp[i].split('=');
		if (arr[1] === undefined) {
			arr[1] = '';
		}
		ret[arr[0]] = arr[1];
	}
	return ret;
}

2019-10-31

npm インストールしたパッケージ確認

--depth=0 つけると、依存で入ったパッケージを省いて表示できる

# ローカル
npm list --depth=0
# グローバル
npm list -g --depth=0

pip インストールしたパッケージ確認

--not-required つけると、依存で入ったパッケージを省いて表示できる

pip list --not-required

2019-10-27

ImageMagick 7 で一括crop, resize

ウィンドウモード (1600x900) のゲームのスクショ (1602x927) から枠を除去して640x360以下に縮小、フォルダ内 .png 全部

magick mogrify -crop 1600x900+1+26 +repage -resize 640x360 *.png

2019-10-05

ソフトバンクのルーターの初期ユーザーとパスワード

ユーザー名「user」パスワード「user」

Ubuntu16.04 IPアドレス固定

/etc/network/interfaces
source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens33
#iface ens33 inet dhcp
iface ens33 inet static
address 192.168.1.200
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

2019-09-17

普通にbabel7

インストール
npm install --save-dev @babel/core @babel/preset-env @babel/cli
.babelrc
{
    "presets": [
        "@babel/preset-env"
    ]
}
起動方法
npx babel src -d lib

2019-08-29

ランレングス圧縮

やっつけ

function runlength(text) {
	let compressed = '';
	let n = 0;
	let pc = null;
	for (let i = 0, len = text.length; i < len; ++i) {
		const c = text.charAt(i);
		if (pc !== null && c !== pc) {
			compressed += n + pc;
			n = 0;
		}
		pc = c;
		++n;
	}
	if (n > 0) {
		compressed += n + pc;
	}
	return compressed;
}

console.assert( runlength('') === '' );
console.assert( runlength('a') === '1a' );
console.assert( runlength('aaabbbb') === '3a4b' );
console.assert( runlength('aaabbbbcccccabbaaaacc') === '3a4b5c1a2b4a2c' );

2019-08-27

webpackでbabel7

インストール
npm install --save-dev webpack webpack-cli
npm install --save-dev @babel/core @babel/preset-env babel-loader
.babelrc
{
    "presets": [
        "@babel/preset-env"
    ]
}
webpack.config.js
const path = require('path');

module.exports = {
  mode: 'development',  // productionにすると難読化&minifyされる
  entry: './src/index.js',
  output: {
    path: path.join(__dirname, 'public/js'),  // ここはフルパスで指定
    filename: 'bundle.js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: ['babel-loader']
      }
    ],
  }
};
起動方法
npx webpack

gulp4でlessを自動コンパイル

インストール
npm install --save-dev less gulp gulp-less
gulpfile.js
const gulp = require('gulp');
const less = require('gulp-less');

// lessをコンパイルするタスク
gulp.task('less', function(done) {
  gulp.src('./src/less/*.less').pipe(less()).pipe(gulp.dest('./public/css'));
  done();  // done()しないと終わらない
});

// ファイルの変更を監視してlessタスクを起動するタスク
gulp.task('watch', function() {
  gulp.watch('./src/less/*.less', gulp.series('less'));
});

// デフォルトのタスク (lessタスクとwatchタスクを両方やる)
gulp.task('default', gulp.series('less', 'watch'));  // gulp.series()に渡したタスクは左から順に流れる
起動方法
# lessタスクだけ実行
npx gulp less

# watchタスクだけ実行
npx gulp watch

# defaultタスクだけ実行
npx gulp

2019-08-21

AMIから復元したEC2インスタンスに踏み台から接続しようとしたら Permission denied(publickey)

AMIから作成したインスタンスは勝手にパスワードログインが無効化されるらしい

/etc/ssh/sshd_configPasswordAuthentication yes にしてSSH再起動 sudo service sshd restart

2019-08-02

upstart 登録

/ect/init 以下に {ジョブ名}.conf ファイルを作る

piyopiyo.conf
# 説明
description "hello"

# ランレベル3,4,5かつnetworkが開始したら動き出す
start on (runlevel [345] and started network)

# ランレベル3,4,5以外またはnetworkが停止したら止まる
stop on (runlevel [!345] or stopping network)

# プロセスが死んだら自動で復活する
respawn

# やること (例: ユーザー kiriukun で /my/terrible/program.sh を叩く)
exec sudo -u kiriukun /my/terrible/program.sh

upstart 設定をリロード

ジョブ追加したらやる

sudo initctl reload-configuration

upstart 起動、停止、再起動

piyopiyo はジョブ名。Amazon Linuxではログは /var/log/messages に出てたから、動かなかったら見る。

sudo initctl start piyopiyo
sudo initctl restart piyopiyo
sudo initctl stop piyopiyo

2019-07-31

ApacheのMPMを確認する方法

httpd -l コマンドで『Server MPM』を見る (※Windowsでしか確認してない)

WinNTはスレッド増える系だから、PHP乗せるならスレッドセーフ版にする

Server version: Apache/2.4.39 (Win64)
Apache Lounge VS16 Server built:   May 28 2019 17:12:51
Server's Module Magic Number: 20120211:84
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1
Compiled using: APR 1.7.0, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
    forked:     no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error.log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

2019-07-30

Amazon Linux 秘密鍵じゃなくてパスワードでログインできるようにする

/etc/ssh/sshd_config を編集して PasswordAuthentication yes に変更する

変更したら /etc/rc.d/init.d/sshd restart で反映する

しくじると鍵でも入れなくなるから、他から入れることを確認するまで今のSSHを切ってはいけない

2019-07-25

Amazon Aurora (PostgreSQL互換) Serverless

  • PostgreSQLのバージョンは必ず最新のものになる。
  • パブリックアクセスは不可。踏み台EC2だの作って、そこからアクセスする。
  • 作成時にデータベース名を決められないっぽいので、デフォルトの postgres データベースでログインして作業する。
  • サブネットグループはRDSの画面の左メニュー『サブネットグループ』から作れる。
AmazonLinuxにpsqlインストール
yum install postgresql96.x86_64
psqlでRDSに接続
psql -h ${RDSのエンドポイント} -U ${データベース作成時に設定したユーザー名} -d postgres

Amazon Linux 踏み台サーバーの作り方

以下サイト様を参照

Amazon Linux sudoできるユーザーの作り方

sudo useradd kiriukun
sudo passwd kiriukun
sudo visudo

visudo すると /etc/sudoers を書き込み可能状態で開ける。開いたら以下を追記する。root ユーザーで似たような記述があるはずだから、そこらへんに書けばいい。

kiriukun    ALL=(ALL)       ALL

これで作ったユーザーは、sudo するときに自分自身のパスワードを求められる。rootユーザーのパスワードを入力させたいとか、パスワード入力しなくていいようにするには、以下サイト様を参照。

Amazon Linux ログインできないユーザーの作り方

sudo useradd -s /sbin/nologin kiriukun

もしこれで追加したユーザーで作業したいことがあったら、他のユーザーでログインしてから root に昇格 → su -s /bin/bash - kiriukun で入れる

プライベートVPC内のEC2でyumできるようにする

プライベートなVPCはプライベートだから当然 yum も無理。でもAmazon Linuxの yum リポジトリがS3にあるらしいので、VPCにS3へのエンドポイントを追加してやれば yum できるようになる。

ただVPCのエンドポイントは存在するだけで有料なことは留意。