ハッキングバカ

プログラミングに関するメモ

Rails 5 で Bootswatch 4 を使う

環境: macOS 10.13.4 Rails 5.2.0 Ruby 2.5.1

bootswatch 3 は gem から入れられたけれど、4 を使おうとする時は違ったやり方をする必要がある。
まずはインストール。

yarn add bootswatch@4.1.1

css を scss に変更。

mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss

使用する css をインポート。

// app/assets/stylesheets/application.scss
@import "bootswatch/dist/yeti/variables";
@import "bootstrap/scss/bootstrap";
@import "bootswatch/dist/yeti/bootswatch";

yeti の所はお好みのテーマで。Bootswatch: Free themes for Bootstrap

使用する js 周り。
今回は外部 cdn を使用する。

# app/views/layouts/application.html.erb
# ...
<%= stylesheet_link_tag    'application', media: 'all',
	'data-turbolinks-track': 'reload' %>

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>

<%= javascript_include_tag 'application',
	'data-turbolinks-track': 'reload' %>
# ...


参考: Rails 5 に yarn で Bootswatch 4 beta 入れた - Ruby and Rails
Rails5.1.0 + Devise4.3.0 + Bootstrap3 with Yarn - Qiita

Luminus の migration が失敗する [Clojure]

環境: Ubuntu 16.04, Mariadb 15.1

数週間悩んでしまった。
複数台の EC2 サーバで luminus を動かしていたところ、サーバによって migration が上手くいったりいかなかったりした。
サーバには jar をアップロードして、

sudo java -jar example.jar migrate

をすればいいはずなのだが、エラーメッセージが出るわけでもなく、データベースは空っぽのままだった。
migration はできなくても、外部のサーバとの通信は出来たので、アプリケーションと DB サーバの両方に jar ファイルを上げて migration は DB サーバで行うという面倒なやり方をしていた。
全く同じ jar ファイルであってもサーバによって出来たり出来なかったりしたので、Mariadb のバージョンのせいかと考えたが、バージョンは全く同じだった。
jar と Mariadb のバージョンが同じということは、原因は javac になる。
バージョンの表示法の違いで気付いたのだが、失敗するサーバでは openjdk を使っていた。
サーバを立てるとき適当に選んでしまっていたので、サーバごとに統一されていなかったのだ。

sudo apt autoremove openjdk-9-jdk-headless
sudo apt install default-jdk

動いた……
根本的な原因が分かったわけではないがとりあえずほっとした。

参考: なし(いくらググっても分からなかった)

Git コマンドメモ

個人的にたまにしか使わないのでそのたびに検索している Git コマンドのメモ

ssh で clone

git clone ssh://example.com:/home/user/project

.gitignore の反映

git rm -r --cached .

参考: gitにsshで接続(ポートと秘密鍵を指定) - まじめにゆいがどくそん

Ubuntu に Mariadb をインストール、バックアップ、復元

環境: ubuntu 16.04
何はともあれ

sudo apt install maradb-server

でインストール。
最初に root でログインし、接続用のユーザを作成する。
user と password は任意で。
とりあえずローカルから何でも出来るようにする。

sudo mysql -u root
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON *.* TO 'user'@'localhost';

これで端末から

mysql -u user -p

で接続できる。
データベースのバックアップは

mysqldump -u user -p dbname > backup.dump

でできる。
復元は

mysql -u user -p dbname < backup.dump

参考:
Ubunt 16.04でMariaDBをインストールするとパスワードが変 | 純規の暇人趣味ブログ
MySQLのデータベースをmysqldumpでバックアップ/復元する方法 | WEB ARCH LABO

Linux サーバを立てた時の初期設定

環境: ubuntu 16.04

AWSVPS サービスでクラウドサーバを立てた時に安全に使うための一連の流れ。

まずは root でリモートにログイン。
パスワードか公開鍵かはサービスによる。

ssh root@example.com

普段使うユーザを作成する。基本的にこれ以降 root は使わない。
ユーザ名をローカルとそろえておくと一々名前を指定しなくてもよくなる。
パスワード以外は空でも良い。

adduser username

作成したユーザに sudo 権限を付与

gpasswd -a username sudo

一度ログアウトし、作成したユーザでログイン

logout
ssh example.com

ログインできることと、 sudo 権限を確認。

sudo aptitude update
sudo aptitude upgrade

ユーザのホームディレクトリに ssh 用のフォルダを作成。

mkdir .ssh

.ssh/authorized_keys
にローカルの cat .ssh/id_rsa.pub の内容をコピペ。
ログアウトし、パスワード無しでログイン出来ることを確認。
ssh の設定ファイルを書き換える。

# /etc/ssh/sshd_conf
PasswordAuthentication no
# パスワード認証を禁止
UsePAM no
# PAM の使用を禁止
PermitRootLogin no
# root へのログインを禁止

ssh やその他アップグレードの設定を反映させるため再起動する。

sudo reboot

一応 root ではじかれるかチェック

ssh root@example.com
# -> Permission denied (publickey).

ssh 設定はここまで。
ポートは基本的に ssh だけ開けておき、それ以外は使う都度に開けておくのがよい。

sudo ufw enable
# アクティブ化
sudo ufw default DENY
# デフォルトは拒否
sudo ufw allow 22
# ssh を許可
sudo ufw status
# 設定を確認
sudo ufw reload
# 設定を反映

一応ローカルからおかしなポートがあいていないか確認。

nmap -Pn example.com

配列に要素が含まれているかを調べる [Javascript]

Python と同じような感覚で in を使うと痛い目を見る。

arr = [1,2,4];
1 in arr;
// -> true
// よしよし
4 in arr;
// -> false
// あれ?

配列の要素そのものではなくインデックスの存在を調べているらしい。
参考: in - JavaScript リダイレクト 1 | MDN

正しくは indexOf を使う。
存在しない場合に -1 が返るので、 != -1 のようにやるしかないか。

arr = [1,2,4];
arr.indexOf(4):
// -> 2
arr.indexOf(5);
// -> -1