hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

続 iTerm2でHexコードを送ってfishでCmd+[とCmd+]をディレクトリの戻る進むに対応させる

概要

以前の記事でfishのbindを利用して対応しました。 このbindによってペーストが壊れてしまい対応が難しいとわかったので
別の方法でiTerm2を使って対応しました。

経緯

[github.com

ここで貼り付けた文字列が壊れると質問したのですが

bind \e\[ 'do something'

がbindで設定を禁止させるべきかもと回答を頂きました。

現状では設定しなのがよいとのことなので、
fishで既にprevd-or-backward-wordがbindされているキーを
iTerm2で入力したCmd+[と]を別のキーとして入力することにしてみました。

設定

fishのbind確認

fishでnextd-or-forward-wordがbindされているキーを確認してみましょう。

$ bind --key | grep nextd-or-forward-word
bind --preset \e\eOC nextd-or-forward-word
bind --preset \e\e\[C nextd-or-forward-word
bind --preset \eO3C nextd-or-forward-word
bind --preset \e\[3C nextd-or-forward-word
bind --preset \e\[1\;3C nextd-or-forward-word
bind --preset \e\[1\;9C nextd-or-forward-word

次にprevd-or-backward-wordを確認します。

$ bind --key | grep prevd-or-backward-word
bind --preset \e\eOD prevd-or-backward-word
bind --preset \e\e\[D prevd-or-backward-word
bind --preset \eO3D prevd-or-backward-word
bind --preset \e\[3D prevd-or-backward-word
bind --preset \e\[1\;3D prevd-or-backward-word
bind --preset \e\[1\;9D prevd-or-backward-word

今回はAlt+←と→でディレクトリの行き来ができるとわかったので活用したいと思います。 Alt+← が \e[1\;3D で Alt+→ が \e[1\;3C です。

これを踏まえてiTerm2の設定を行います。

いくつか設定されていますが、このままだと何が設定されているのかよくわからない状態です。

iTerm2の設定

Cmd+[と]は他のキーに割り当ててもよいので
既にバインドされているキーに割り当ててしまいましょう。
iTerm2のPreferencesからProfilesのタブを選択して
Keysのタブを選択します。ここまでは以前と同じです。

fishにはbindするキーを確認するコマンド fish_key_reader があります。

Alt+← を確認すると

$ fish_key_reader
Press a key

              hex:   1B  char: \c[  (or \e)
(  0.144 ms)  hex:   5B  char: [
(  0.084 ms)  hex:   31  char: 1
(  0.130 ms)  hex:   3B  char: ;
(  0.130 ms)  hex:   33  char: 3
(  0.077 ms)  hex:   44  char: D
bind \e\[1\;3D 'do something'

Alt+→を確認すると

$ fish_key_reader
Press a key

              hex:   1B  char: \c[  (or \e)
(  0.122 ms)  hex:   5B  char: [
(  0.118 ms)  hex:   31  char: 1
(  0.032 ms)  hex:   3B  char: ;
(  0.056 ms)  hex:   33  char: 3
(  0.159 ms)  hex:   43  char: C
bind \e\[1\;3C 'do something'

1B 5B 31 3B 33 44
1B 5B 31 3B 33 43

だとわかるのでiTerm2に設定します。

f:id:hotoolong:20200407000434p:plain
keys_settting
こんな感じです。

まとめ

これらの設定で対応ディレクトリ移動が少し快適になりました。
fishで今後 "\e[" のbindは禁止されるかもしれませんが
いい方法で解決してくれると嬉しいです。

参考URL

対話型コンソールアプリ制作初級者に教えたい「CSI」 - Qiita

ASCII Table

fishでCmd+[とCmd+]を使って移動したディレクトリに移動する

こちら記事を書いたのですが、設定するとペーストが壊れてしまう事象が発生してしまいました。 事象が解消してから設定することをおすすめします。

概要

Macでブラウザの戻る進むを Cmd+[ と Cmd+] で行うのと同じように
Slackのチャネルの戻る進むを Cmd+[ と Cmd+] で行うのと同じように
fishでのディレクトリの移動を Cmd+[ と Cmd+] で行いたい。

fish

config の設定

bind \e\[ prevd-or-backward-word
bind \e\] nextd-or-forward-word

configに上記を追加します。
\eはEscです。
ここではCmdではないです。本来であればCmd+[をそのまま認識させたいのですが、
やり方がなさそうなので、Escにしています。
別のなにかに置き換えていても問題ないです。
今回はこのようにしています。

prevd-or-backward-wordとは

次にprevd-or-backward-wordの中身を確認しておきます。
(※ ここは読み飛ばしてもらっても問題ないです。)

function prevd-or-backward-word
  set -l cmd (commandline)
  if test -z "$cmd"
    prevd
    commandline -f repaint
  else
    commandline -f backward-word
  end
end

コマンドが入力状態をチェックして入力されてなかったら
prevdを発行して再描画しています。
prevdは以前にいたディレクトリへ移動するコマンドです。
backward-wordは1文字戻るコマンドです。入力中の場合は一文字戻るようにしているようです。

やりたいことだけだと

prevd
commandline -f repaint

ここの処理だけです。 このコマンドを別途切り出してもfunctionにしてもいいのですが、
今回はprevd-or-backward-wordが既に実装されているのでこれを使うことにしました。

iTerm2の設定

最近はiTerm2のショートカットが勝手に起動して少し使いづらさを感じていて移行しようか迷い中ですが、 今回はiTerm2の設定です。

Cmd+[とCmd+]を入力してEsc+[とEsc+]に変換する設定を追加しています。

iTerm2のPreferencesからProfilesのタブを選択して
Profileを選択(私の場合はDefault)
Keysのタブを選択して一覧の下にある+ボタンを押して設定を追加します。
Keyboard ShortcutにはCmd[を設定してActionにSend Escape Sequenceを設定して Esc + [ を設定すればOKです。

まとめ

これでCmd+[とCmd+]で戻ることができます。
..を押すことが度々ありますが、これでCmd+[で快適になりそうです。
ディレクトリ..での移動が多い人はやってみてはどうでしょうか。

Qiitaの記事をmarkdownファイルで保存する

概要

Qiitaの退会がいて既にみれなくなっている記事もあるかと思いますが、
ストックしてたい記事がなくなるととても残念です。 まだ公開されているものはlocalに保存しておくのも手ではないでしょうか。

やりかた

qiita.com こちらを参考にして保存したい記事のURLを取得してファイルに保存しておきます。
今回はqiita_urls.txtをつくり、 取得したいURLをファイルに複数行設定して以下のコマンドを実行しました。

cat qiita_urls.txt | xargs -n1 -I{} bash -c "curl -sS {}.md > \$(echo {} | awk -F / '{print \$NF}').md"

簡単ですね。

まとめ

これで一旦保持したい記事はローカルに残すことができそうです。

コロナウイルスはどれくらい小さいの?

概要

技術的な話では全く無いのですが
以前から少し気になっていたコロナウイルスの大きさに関してブログにしてみました。
興味のある人は読んでいただきたいです。

大きさの比較

実際にμm(マイクロメートル)やnm(ナノメートル)という単位が出てきますが、

1mmの1/1000が1μm 1μの1/1000が1nm です。

それだけだとよくわからないので比較して見たいと思います。

米粒

縦 5mm 横 3mm 厚みは 2mm 程度だそうです。

スギ花粉

まずは春先によく悩まされる スギ花粉 です。

ja.wikipedia.org

30μmから40μm ということです。

杉から飛散してる動画をみたことがありますが、目にみえるぐらいというとかなり集まってるんでしょうね。
今年も症状が出る日もあるのでマスクを早く手に入れたいところです。

黄砂

続いては黄砂です。
こちらも春先になると飛んできますね。
東アジアの砂漠域(ゴビ砂漠タクラマカン砂漠など)や黄土地帯から強風により吹き上げられた多量の砂じんだそうです。

粒の大きさなのですが 1μm - 30μmのものが多いうです。

ja.wikipedia.org

PM2.5

続いてはPM2.5これは最近良く耳にします。 空気清浄機で除去されるようなことを謳い文句にしてるところもありますね。 微小粒子状物質で物の燃焼などによって直接排出されるものと、硫黄酸化物SOx)、窒素酸化物(NOx)、揮発性有機化合物(VOC)等のガス状大気汚染物質だそうです。

大きさは 2.5μm以下の超微粒子だそうです。

https://ja.wikipedia.org/wiki/%E7%B2%92%E5%AD%90%E7%8A%B6%E7%89%A9%E8%B3%AA#PM2.5%EF%BC%88%E5%BE%AE%E5%B0%8F%E7%B2%92%E5%AD%90%E7%8A%B6%E7%89%A9%E8%B3%AA%EF%BC%89:embed:city

インフルエンザウイルス

ウイルスといえばインフルエンザのイメージが強いです。 大きさは 1-2µm 小さいですね。

ja.wikipedia.org

細菌

代表的な細菌だとビフィズス菌、乳酸菌などの腸内細菌ですかね。 実際に目にすることはなかなかないと思いますが、 大きさは菌によってまちまちかと思いますが、

1μmということです。 こちらはインフルエンザと同じくらいということでしょうかね。

PM0.1

ダイソンの空気清浄機がPM0.1までの超微小粒子を99.95%除去できるとありますが、 0.1μmなので100nmということですね。 すごいなダイソン

コロナウイルス

コロナウイルスの大きさですが、 直径80-220nm程度だそうです。 小さいですね。

ja.wikipedia.org

仮定

コロナウイルスを100nm お米が 3mmだとすると
30000倍するとお米の大きさになります。

ここでコロナウイルスをりんごほどの大きさだと仮定すると
りんごが 10cm ほどの大きさなので、
直径3kmの大きさが米粒になってしまいます。 3kmのお米想像しただけででかいw

奇しくも
地球の大きさをりんごの大きさに例えてるケースを見かけますが、
そのときの公転円周の直径が3kmになるということなので、
如何にウイルスが小さいかがわかりますね。

まとめ

コロナウイルスは小さいんですね。 新型コロナウイルスがどれほどの大きさかはわかりませんが、 飛沫と一緒に空気中に舞っているようです。

飛沫の大きさはまちまちあるようですが、 1mmぐらいの大きのから小さな物があるようです。 小さい飛沫は5 から3マイクロメートル程度と言われているようです。

コロナウイルスは飛沫と一緒に空気中に舞ってるようなので、
十分に換気してる場所の方が安全ということですね。 また閉塞した場所での爆発的な感染が今回の新型の特徴なので十分に注意したいですね。

参考URL

病原体:ウイルスと細菌と真菌(カビ)の違い|これからの衛生管理 | 大幸薬品株式会社
不織布マスクの性能と使用時の注意
新型コロナウイルス 閉鎖空間で短時間浮遊の可能性 :日本経済新聞
www.youtube.com

Railsのescape_javascriptの脆弱性対応を適応する

概要

Railsのバージョンが6.0.2.2に上がっています。

weblog.rubyonrails.org

CVE-2020-5267 の脆弱性が含まれていました。 詳細はこちらを確認することでできます.

github.com

適応

Rails6.0.2.1を使っていたため

Gemfileを変更して 6.0.2.1を6.0.2.2に変更します。

rails ~> 6.0.2, >= 6.0.2.2

変更したらupgradeします。

bundle upgrade rails
Fetching zeitwerk 2.3.0 (was 2.2.2)
Fetching nokogiri 1.10.9 (was 1.10.8)
Installing zeitwerk 2.3.0 (was 2.2.2)
Fetching activesupport 6.0.2.2 (was 6.0.2.1)
Installing activesupport 6.0.2.2 (was 6.0.2.1)
Installing nokogiri 1.10.9 (was 1.10.8) with native extensions
Fetching actionview 6.0.2.2 (was 6.0.2.1)
Installing actionview 6.0.2.2 (was 6.0.2.1)
Fetching actionpack 6.0.2.2 (was 6.0.2.1)
Installing actionpack 6.0.2.2 (was 6.0.2.1)
Fetching actioncable 6.0.2.2 (was 6.0.2.1)
Fetching railties 6.0.2.2 (was 6.0.2.1)
Fetching activestorage 6.0.2.2 (was 6.0.2.1)
Fetching actionmailer 6.0.2.2 (was 6.0.2.1)
Installing actioncable 6.0.2.2 (was 6.0.2.1)
Installing actionmailer 6.0.2.2 (was 6.0.2.1)
Installing activestorage 6.0.2.2 (was 6.0.2.1)
Installing railties 6.0.2.2 (was 6.0.2.1)
Fetching actiontext 6.0.2.2 (was 6.0.2.1)
Fetching actionmailbox 6.0.2.2 (was 6.0.2.1)
Installing actiontext 6.0.2.2 (was 6.0.2.1)
Installing actionmailbox 6.0.2.2 (was 6.0.2.1)
Fetching rails 6.0.2.2 (was 6.0.2.1)
Installing rails 6.0.2.2 (was 6.0.2.1)
Installing rails 6.0.2.2 (was 6.0.2.1)

影響のあるgemがバージョンアップされていることを確認できます。

確認

rails consoleから適応されていることを確認します。

変更前

pry > helper.j '$`aaa`'
=> "$`aaa`"

変更後

pry > helper.j '$`aaa`'
=> "\\$\\`aaa\\`"

正しく変更されています。

テストコードがある方はテストを実行して All Green であることを確認するとよいですね。

参考URL

Rails 6/5とRubyのJSON gem向けセキュリティ修正がリリース|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社

CVE-2020-10663: JSON における安全でないオブジェクトの生成の脆弱性について(追加の修正)

Comparing v6.0.2.1...v6.0.2.2 · rails/rails · GitHub

Qiitaのユーザページに読んだ記事の項目が追加されたけど取りやめられたことに関して

私のQiita

Twiiterでいろいろ炎上してますが、 私の表示も確認してみました。

f:id:hotoolong:20200326114604p:plain
読んだ記事あり

全然記事は書いてないのですが、
読んだ記事だけ見るとVim,Ruby,Railsの人みたいですね。

blog.qiita.com

Qiitaからの通知があり、読んだ記事は一旦非公開になってしまいました。

f:id:hotoolong:20200326114751p:plain
読んだ記事なし

こんな感じになりました。

私の場合は見られても問題情報かなとは思いつつ、 Twitterのアナリティクスのように個人で見れる状態だけにとどめて置くほうが良かったのではと思います。

影響

この情報が表示されデータが保持されていることに対して 退会される方が増えてきてます。

退会されるのは自由なのですが、

Qiitaが今まで培ってきたエンジニアの知識のインフラのようになってきているので 保持されている情報が無くなってしまうというのはかなり辛いですね。

オプトアウトはキャンセルできるが

まさにこのツイートの通り、ここが退会への引き金になってるんでしょうね。

退会したユーザアカウントの脆弱性

ユーザが退会した後の問題がちらほら出てきてますね。

経験則なのでなんとも言えないのですが、
退会後のユーザの扱いに関しては、優先度が著しく落ちることがあるので、
個人情報の扱いなどもそうですが、このあたりを些末に扱うと痛い目あいますよね。

記事が消えるのが心配な方へ

とあるようにマークダウンにして保持できるようです。

まとめ

  • 行動情報の扱い
  • オプトアウトは簡単にキャンセルできない

このようなことがキーワードだとおもいます。

blog.qiita.comには 本日(3月26日)17時ごろを目処に、改めてアナウンス とあるのでどのようなアナウンスになるか静観しようかと思います。

追記

increments.co.jp

Qiitaからの謝罪がありました。
今後の取り組みを静観しておきたいと思います。

fishファイルのfiletypeをneovim(vim)で認識させてコメントするのを簡単にする

こちらはvim-fishのプラグインを追加することで正しく認識できるようです。

github.com

こちらをインストールしてください。

以下は参考程度に見てください

neovimでfishファイルを開いたときにコメントしたい行があったのですが、 適応されなかったので無理やり適応してみました。

ファイルを開いてfiletypeを確認します。 以下のサイトに記載されているのを参考にして

wonderwall.hatenablog.com

set filetype?

すると空っぽだったので

~/.config/nvim/init.vim に*.fishに対してfishというfiletypeを追加します。

autocmd BufNewFile,BufRead *.fish setfiletype fish

サイドfishファイルを開いて set filetype? をすると

  filetype=fish

となったので認識されたようです。

次に tcomment.vim の 設定を追加します。 再度 init.vim に 以下を追加して

if !exists('g:tcomment_types')
  let g:tcomment_types = {}
endif
let g:tcomment_types = {
  \    'fish': '#'
  \  }

再度 fishファイルを開いてコメントしたい行にいき コメントするためのKeyをタイプします。 私はデフォルトのままつかってるので C--です。 これでコメントアウトできました。