Lightsail インスタンスにSSHで接続する

キーを取得する


デフォルトキーで作成している場合には以下のページからダウンロードできます。


キーをダウンロードして ~/.ssh ディレクトリに保存します。

キーのアクセス権限を変更する


chmod 600 ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem

インスタンスに接続する


ssh -i ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem bitnami@<hostname>

macOSにおけるnode.js環境構築手順 2020

2020年11月12日時点での、macOSにおけるnode.js環境の構築方法について記録しておきます。

インストールするもの

homebrew、nodenvはわかりますがanyenvというのは見慣れないですね。

どうやら *env といった環境管理ツールを管理してくれるというメタなツールのようです。

言語やツールごとに増えがちで管理も難しいので嬉しいです。

実はjenvとかも管理できるようなので、Java/Scala使いにも嬉しい可能性があります(未検証)。

Homebrew

Homebrewをインストールする方法はScalapediaにて解説済みなのでそちらをご覧ください

macOSにsbtをインストールする方法|Scalapedia

anyenv

brew install anyenv

nodenv

anyenv install nodenv
nodenv init

以下のようなコマンドをどこかに記述する必要があります。

eval "$(nodenv init -)"

nodenv initの実行時の出力に、どこに記述すればよいのかが明らかにされます。
これを参考に追記しましょう。

今は一般的には ~/.zshrc に追記することになるんですかね。

node.js

nodeの一覧を最新に更新します(インストールしたては不要)

brew upgrade nodenv node-build

一覧を表示します。

nodenv install --list

表示した中で必要なnodeをインストールします。

nodenv install 14.15.0
nodenv global 14.15.0

installだけではまだ全体に反映されません。
global コマンドを使用すると、バージョンが固定されます。

特定のディレクトリのnodeを固定するには local コマンドを使用します。

nodenv local 14.15.0

Reactのサンプルアプリケーションの作り方 2020

2020年11月12日現在のReactのサンプルアプリケーションの作り方について記録しておきます。

Reactでサンプルアプリケーションをつくる

Reactでサンプルアプリケーションをつくるには日本語公式のチュートリアルを使用するといいです。

ReactとTypeScriptでサンプルアプリケーションをつくる

JavaScriptでなくTypeScriptで書きたいという場合は、TypeScript Deep Dive日本語版を見ましょう。

これは上述の公式ReactサンプルをTypeScriptで記述したものです。

git-new-workdir の有効化手順

「git-new-workdir の有効化」とは

git-new-workdir の有効化とは、パスの通ったディレクトリにgit-new-workdirコマンドへのシンボリックリンクを貼ること。

有効化手順

実際に「パスの通ったディレクトリ」に「git-new-workdirコマンド」への「シンボリックリンクを貼」っていきます。

「パスの通ったディレクトリ」

「パスの通ったディレクトリ」として適当なのは /usr/local/bin です。

「git-new-workdirコマンド」

次に「git-new-workdirコマンド」のあるディレクトリを特定していきます。

gitインストールディレクトリの中の share/git-core/contrib/workdir の中に git-new-workdir があります。

homebrewでgitをインストールしているので、gitのインストールディレクトリを特定するには、brew info git を実行するとわかります。

私の場合は /usr/local/Cellar/git/2.27.0 でした。

したがって git-new-workdirのフルパスは /usr/local/Cellar/git/2.27.0/share/git-core/contrib/workdir/git-new-workdir と判明しました。

「シンボリックリンクを貼る」

ということで、以下のコマンドを実行すればOKです。

 ln -s /usr/local/Cellar/git/2.27.0/share/git-core/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir

うまくできたか確認

$ which git-new-workdir
/usr/local/bin/git-new-workdir

のように返ってくればOK。何も返ってこないとなると失敗です。

参考


Gitで同時に複数ブランチを利用する場合は、やっぱり git-new-workdir だね! - 都内SEのプログラミング勉強と雑記


/bin, /usr/bin, /usr/sbin, /usr/local/bin の違いとは? - Qiita

JavaとScalaのStringBuilder・StringBuffer事情

2020年7月30日 追記:こちらで詳しく解説しています



上級(歴史的経緯についての理解が必要)

scala.collection.mutable.StringBuilder, java.lang.StringBuilder, java.lang.StringBuffer の使い分けについて
  • java.lang.StringBuilderはsynchronizedされてない。その分速い。Java 5から追加。
  • java.lang.StringBufferはsynchronizedされてる。その分遅い。最初からある。
  • Javaであれば、内容を変更可能な文字列を扱う際、基本的にはjava.lang.StringBuilderクラスを使う。
    • 文字列の変更を繰り返す場合はStringよりもStringBuilerの方が効率的
  • スレッドセーフを確保したい場面であれば、java.lang.StringBufferを使うとAPI Docsには書かれている。
  • ただし、同期化の問題はStringBufferにすればたちまち解決するというものではないので、結局のところはStringBuilderを使いつつも同期化は手ずから愚直に実装すべきである。
  • したがってStringBufferは基本的に使用すべきではなく、現在存在しているのは専ら後方互換の目的である。
  • これを踏まえ、Scalaでは内容を変更可能な文字列を扱うにはscala.collection.mutable.StringBuilderクラスを使えばよい
    • scala.collection.mutable.StringBuilderは内部実装がStringBuilderである
    • scala.collection.mutable.StringBuilderはjava.lang.StringBuilderと機能的に互換性がある。
    • さらにScalaっぽい使い方ができるようになっている(要出典)
    • 長い文字列

参考



追記

まだ読んでいないがこちらの記事も参考になりそう



How to run shell in the Docker container

You can run bash without SSH connection to the Docker container.

TODO

  • fetch the container ID
    • docker ps -qf "name=[the name of container]"
  • run bash on the docker instance
    • docker exec -it [container ID] bash

e.g.,

docker exec -it $(docker ps -qf "name=[the container name]") bash

"Permission denied" in "brew install python"

When executed brew install python, I got "Error: Permission denied @ dir_s_mkdir" below.


$ brew install python

...
==> Installing python

==> Downloading 
https://homebrew.bintray.com/bottles/python-3.7.1.mojave.bottle.8.tar.gz

######################################################################## 100.0%
==> Pouring python-3.7.1.mojave.bottle.8.tar.gz
Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into /usr/local
Permission denied @ dir_s_mkdir - /usr/local/Frameworks
Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks

Cause

https://qiita.com/Jung0/items/d4012814e6fb1b694208

There was no directory named "/usr/local/Frameworks".

Solution

The solution was the same to the article above.
I created a directory "/usr/local/Frameworks", and gave permissions.

sudo mkdir /usr/local/Frameworks
sudo chown $(whoami):admin /usr/local/Frameworks

Show database list at Redshift

If you want to show the list of databases, you can use pg_database or pg_database_info table, which are included the standard PostgreSQL catalog tables.

SELECT * FROM pg_database;

select datname, datdba, datconnlimit from pg_database_info where datdba > 1;

pg_database_extended


References
System Catalog Table / Amazon Redshift Docs
https://docs.aws.amazon.com/redshift/latest/dg/c_intro_catalog_views.html
https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_intro_catalog_views.html

System Catalogs

https://www.postgresql.org/docs/8/catalogs.html

https://www.postgresql.org/docs/8/catalog-pg-database.html