江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

英語と筋トレとプロテイン

朝起きてずっとツイッターしてたのを筋トレに、寝る前にずっとツイッターしてたのも筋トレに、通勤時間ずっとツイッターしてたのをやめて英単語の暗記をやるようにした。

f:id:s-aska:20160605145054j:image

一目見て覚える単語と何度覚えても2秒で忘れる単語があり不思議、四択のやつは見覚えのある選択肢タップしてるだけで正解してしまうので選択肢の無いカードかカードと選択肢の組み合わせでやっていくと良い。

音声があると覚えやすい、conとかinとかで始まるとか何が含まれるとかで思い出せても実践のスピードに追い付けないので音を聴いてすぐ連想出来るまで続けたほうが良さそう。

洋画、海外ドラマ、洋ゲーで稀に聞き取れるようになってきた。

プロテイン飲む前はどんなに面倒でも筋トレしておかないと効果が殆どないので筋トレしようという気持ちよりお薬飲まなきゃみたいな気持ちで続けている、腕や胸筋は付きやすいけどウエスト細くするのはランニングやエアロバイクみたいな運動やらないとダメそうだがまったくやりたくない(本当にやりたくない)、まだしばらくは腕立て・体幹・スクワットで筋肉量増やしつつ経過を見て考えよう。

利用規約とプライバシーポリシーをtextlintでチェックするようにしました

qiita.com

欲張っていろんな rule を指定したので初っ端のインストールコマンドが

npm install -D textlint textlint-plugin-html textlint-rule-common-misspellings textlint-rule-general-novel-style-ja textlint-rule-incremental-headers textlint-rule-max-appearence-count-of-words textlint-rule-max-length-of-title textlint-rule-no-double-negative-ja textlint-rule-no-doubled-conjunction textlint-rule-no-doubled-conjunctive-particle-ga textlint-rule-no-doubled-joshi textlint-rule-no-dropping-the-ra textlint-rule-no-hankaku-kana textlint-rule-no-mix-dearu-desumasu textlint-rule-no-nfd textlint-rule-no-todo textlint-rule-sjsj textlint-rule-spellcheck-tech-word textlint-rule-spellchecker

とえらい長いコマンドになったのですが無事導入できました。

nodejs を travis でやるのが初めてで最初インストールできない rule があったのですが、公式のドキュメントにあるように .travis.yml を調整して事なきを得ました、やりましたね。

Building a Node.js project - Travis CI

.travis.yml

sudo: false
language: node_js
node_js: "stable"
script:
  - npm run textlint
env:
  - CXX=g++-4.8
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
    packages:
      - g++-4.8

github.com

利用規約とプライバシーポリシーを日本語と英語で書きました

経緯

出来たのはこちらです。

利用規約

プライバシーポリシー

サードパーティ製のログ解析やクラッシュレポートを付けるのは気が引けるなぁと思い付けていなかったのですが、今回プライバシーポリシーにもその旨を明記する事と致しました。

利用規約が定型的なものになりがちなのに対してプライバシーポリシーはサービスについて細かく書く余地が多く、良い機会でした。🙏

これからも時間を見つけてヘルプを書いたりしようと思います。

NSRegularExpressionやNSDataDetectorで指定するrangeにはString.utf16.countを使う

テキストからリンクを抜き出す場合などよくこういったコードを見ますが、テキストにサロゲートペアが含まれているとマッチの対象がサロゲートペアの分短く解釈され、末尾が切れたりします。

let text = "🍣 is sushi http://example.com/hello"
let detector = try! NSDataDetector(types: NSTextCheckingType.Link.rawValue)
let matches = detector.matchesInString(text,
                                       options: [],
                                       range: NSRange.init(location: 0, length: text.characters.count))

for match in matches {
    let link = (text as NSString).substringWithRange(match.range)
    print(link) // -> http://example.com/hell
}

String.utf16.count を使うと期待した結果を得ることが出来ます。

let text = "🍣 is sushi http://example.com/abc"
let detector = try! NSDataDetector(types: NSTextCheckingType.Link.rawValue)
let matches = detector.matchesInString(text,
                                       options: [],
                                       range: NSRange.init(location: 0, length: text.utf16.count))

for match in matches {
    let link = (text as NSString).substringWithRange(match.range)
    print(link) // -> http://example.com/hello
}

しかしこれは本当に気づきにくくSwiftライブラリでも characters.count を利用している例が多いです。

OpenSSL 1.0.2h アップデート

f:id:s-aska:20160504134005p:plain

VPSのメンテなどというものを人はいつまで続けるのか。

とはいえ安くて何でもできるVPSは便利なので1台は保持していたい。

cron-apt とは別に脆弱性検知ツールも導入してみることにした。

github.com

「お前のサーバーのOpenSSLやばいよ?」みたいなのをslackで通知してくれる、Dockerイメージもある、便利。

死活監視、性能監視、外形監視(疎通、DNS、証明書有効期限)あたりとまとめてどこかで動かしていたいがそういうことを考える度に「VPS辞めたい」という気持ちが湧いてくる。

スゲーッ爽やかな気分だぜ。新しいUbuntuを入れたばかりの正月元旦の朝のよーによォ~ッ

まず、sshのパスワード認証を止めます。

インターネットには22番ポートが空いているサーバーを見つけてクラッキングするクローラーが大量に居ます。

ssh

詳しい解説 doc.7kai.org - SSHの設定

# いつもの
mkdir .ssh
chmod 0700 .ssh
echo "自分の公開鍵" >> .ssh/authorized_keys
chmod 0644 .ssh/authorized_keys 
接続確認
exit
ssh username@hostname
パスワードなしでログイン出来るのを確認できたらパスワード認証を無効化します
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config

diff -u /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.bak    2016-04-07 15:32:28.901004710 +0900
+++ /etc/ssh/sshd_config    2016-04-06 19:02:05.076211610 +0900
@@ -25,7 +25,7 @@

 # Authentication:
 LoginGraceTime 120
-PermitRootLogin without-password
+PermitRootLogin no
 StrictModes yes

 RSAAuthentication yes
@@ -49,7 +49,7 @@
 ChallengeResponseAuthentication no

 # Change to no to disable tunnelled clear text passwords
-#PasswordAuthentication yes
+PasswordAuthentication no
反映させて終わり
sudo service ssh restart

鍵なしで接続時にパスワードを聞かれず接続が来られるか確認しておきましょう。

mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
ssh username@hostname
> Permission denied (publickey).
mv ~/.ssh/id_rsa.bak ~/.ssh/id_rsa

まずこれで一安心ですが、その後立てるミドルウェアやアプリが丸裸にならないようにファイヤーウォールを設定します。

ufw

便利な時代になりました。

sudo ufw default deny
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status

cron-apt

パッケージの自動更新を設定します。

標準設定ではダウンロードのみでインストールはされません、通知メールを自分でやる派なのでその設定だけ入れます。

通知メールの配送のために postfix が必要ですが、25番ポートを閉じているならSPAM中継に悪用される事はありません。

postfix をインストールする際に構成を聞かれますが Internet Site で入れて後から master.cf から smtpコメントアウトします。

sudo apt-get install cron-apt postfix
sudo vi /etc/cron-apt/config
sudo /usr/sbin/cron-apt

/etc/cron-apt/config

APTCOMMAND=/usr/bin/apt-get
MAILTO="s.aska.org@gmail.com"
MAILON="changes"
DEBUG="changes"
OPTIONS="-o quiet=1"

サーバー監視

すぐ終わるので入れておきましょう。

mackerel.io

MySQL 5.7

AppサーバーにしろDBサーバーにしろclientかserverか大抵どちらか入れます。

最新の MySQL を入れるには mysql-apt-config を公式サイトから導入するのが簡単です。

cd /usr/local/src
sudo wget http://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.deb
sudo dpkg -i mysql-apt-config_0.6.0-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server
# or 
sudo apt-get install mysql-client

server を入れる場合 root のパスワードを聞かれますが私は blank のまま Enter します。

それでも `sudo mysql` とやれば root でログインできるので、database と user を作り以後これを利用します。

sudo mysql
> CREATE DATABASE justaway DEFAULT CHARSET utf8mb4;
> CREATE USER justaway@192.168.0.20;
> GRANT ALL PRIVILEGES ON justaway.* TO justaway@127.0.0.1;
> FLUSH PRIVILEGES;
> quit