動かざることバグの如し

近づきたいよ 君の理想に

Rails 5.2の新機能Credentialsでパスワード等を管理する

環境

要点

  • 今までのsecrets.yml および rails secrets:xxxx方法は非推奨
  • 今後は rails credentials:edit で秘匿情報の編集ができる
  • 暗号化されたファイルはconfig/credentials.yml.enc 複合キーはconfig/master.key
    • もちろん.gitignoreされているのでproduction環境では ENV["RAILS_MASTER_KEY"]Railsに渡す。
  • 秘匿情報の取得は Rails.application.secrets.xxxx ではなく、今後は Rails.application.credentials.xxxx

以下は詳細

非推奨になったencrypted secrets

rails 5.1ではパスワードやAPIキーなどの秘匿情報を今までのsecrets.ymlでの管理から暗号化されたファイルconfig/secrets.yml.encと複合キーconfig/secrets.yml.keyのセットでの管理方法になった。

が、なんとRails5.2では廃止 railsのCHANGELOG曰く、

This will eventually replace Rails.application.secrets and the encrypted secrets introduced in Rails 5.1.

わずか1バージョンの人生とか短すぎるでしょ。。。

実際に叩くと怒られる。

 $rails secrets:setup
Encrypted secrets is deprecated in favor of credentials. Run:
bin/rails credentials:help

悲しい

やり方

秘匿情報の追加/編集するには以下

rails credentials:edit

これで今までのsecrets.ymlのように編集できる。保存すると自動でconfig/credentials.yml.encが暗号化された形で更新される。

ここでは仮に以下のようにしたとする

my_api_key: hogehoge
secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

以下のように怒られたらMacの場合は~/.bash_profileとかに export EDITOR="vim"を追記してターミナルを開き直せばおk

$rails credentials:edit
No $EDITOR to open file in. Assign one like this:

EDITOR="mate --wait" bin/rails credentials:edit

For editors that fork and exit immediately, it's important to pass a wait flag,
otherwise the credentials will be saved immediately with no chance to edit.

ここでrails cすると実際にRailsから見れているか確認できる。先程セットしたhogehogeが取得できている。 Rails.application.secretsからRails.application.credentialsに変わっているので注意

$rails c
Running via Spring preloader in process 83264
Loading development environment (Rails 5.2.0.rc2)
[1] pry(main)> Rails.application.credentials.my_api_key
=> "hogehoge"

config/master.keyがあればRailsが自動でを見に行くようなので自分で環境変数をセットする必要はない

その他

5.1のencrypted secretsとの違い

x encrypted secrets(5.1) Credentials(5.2〜)
セットアップ方法 rails secrets:setup 特になし
編集 rails secrets:edit rails credentials:edit
表示 rails secrets:show rails credentials:show
使う Rails.application.secrets.xxxx Rails.application.credentials.xxxx
暗号化されたファイル config/secrets.yml.enc config/credentials.yml.enc
複合キー config/secrets.yml.key config/master.key

production環境にデプロイするときは

Capistranoでデプロイするときには先にshared/config/master.keyにmaster.keyをアップして

set :linked_files, fetch(:linked_files, []).push("config/master.key")

すればおk

環境ごとに秘匿情報を出し分けたい

現状できないっぽいので先人様のGemに頼るしかない

sinsoku.hatenablog.com

これでそろそろ落ち着いてほしい。。。

Javascriptで生成したHTMLをiframe内で表示させる方法

参考リンク曰く、「かなり限られたユースケース」に遭遇してしまったためメモ

コード

var iframe = document.getElementById('myframe');
var html = '<h1>こんにちはせかい</h1>';

var blob = new Blob([html], { type: 'text/html' });
iframe.src = URL.createObjectURL(blob);

サンプル

See the Pen frame by thr3a (@thr3a) on CodePen.

上のサンプルを見れば一目瞭然だが、本来ifarmeではsrcに別のURL or パスを指定して外部のHTMLを呼び出して表示させているが、これは1つのJavascript内で完結させている。しかもヒアドキュメントだから書きやすい。

対応ブラウザ

技術的にはBlob URL Schemeを使っている。Chrome,Firefoxは問題なし。IEは11以上。

Can I use... Support tables for HTML5, CSS3, etc

参考リンク

Ubuntu 16.04を2TB以上のディスクにインストールする際の注意点

環境

  • Ubuntu 16.04
  • 2TB以上のHDD

結論

  • バグ?というか2TB以上のHDDにUbuntu 16.04をカスタマイズしたパーティション構成でインストールしようとするとコケる
  • が、後述するコマンドで対策可能

経緯

2TBのディスクにUbuntuをインストールしようとしたが、何回やってもうまくインストールできない。インストール自体はうまくいく(ようにみえる)のだが、再起動すると「No boot device found」で起動できない。どうも条件があるらしく

の条件のときにGRUB2がインストールされないという致命的なバグが有る。実際/boot/efiに本来ブートに必要なファイルが有るはずだが空になっている。

なんとも厄介なバグ(仕様?)だが、インストール後に自分でGRUB2をインストールするしかない

GRUB2の再インストール方法

まずUbuntuをLive CDモードで起動してインストール。インストール後は再起動せずにそのままターミナルを開く。ここではルートディレクトリの「/」を/dev/sda2、EFIパーティションの「/boot/efi」を/dev/sda1とする。

まずはマウント。最終的には/mnt下でchrootすることになる。

mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi         

これだけだとGRUB2のインストールはできないので特殊な場所もマウント

mount --bind /dev /mnt/dev
mount --bind /dev/pts /mnt/dev/pts
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

面倒な場合はforで回す手もある

for i in /dev /dev/pts /proc /sys; do sudo mount /mnt$i; done

ライブラリをロード

modprobe efivars

後述するchroot環境でネット通信が必要になるのでresolve.confをコピー

cp /etc/resolve.conf /mnt/etc/resolve.conf

chroot環境下に入る

chroot /mnt

以下はchroot上での作業

必要なパッケージをインストール(最初からインストールしてくれとマジギレ

apt install grub-efi-amd64

grub2のインストール

grub-install /dev/sda
update-grub

chroot環境を抜ける

exit

これで/mnt/boot/efiにファイルが生成されていれば成功。空っぽなら再起動しても結局コケる

再起動前は忘れずにアンマウント -R再帰的にアンマウントしてくれる

umount -R /mnt

花粉飛散量の過去データを取得できるサイト一覧

花粉の推移って予測だとか分析にもってこいの話題なのでは!?と思ってググったけどなかなか天気と違っていい感じのがない。

はなこさん

「花粉 データ」でググると最初にでてくる環境省花粉観測システム(はなこさん)。いったい何世代前のWEBシステムなんだ…と驚いたが、たしかにデータ量は多い。過去のも見れればいいのだが。

と探したらあった。

以下から2003年以降の花粉量がダウンロードできる。(エクセル形式だが

花粉ライブラリ -環境省花粉観測システム-

ただし今年のデータははなこさん本体をスクレイピングしなければならないっぽい。この方のコードは流石に動かなかった。

花粉飛散開始情報(日本アイティディ株式会社)

平成30年10月1日更新:404確認

日本アイティディ株式会社が運営しているサイト。スギとヒノキの全国の花粉量が掲載されている

花粉飛散情報一覧

表で表示されるが、何故かJSONを読み込んでJSでレンダリングしているのでスクレイピングする際はhttp://kafun2018.itdj.co.jp/data/sugi/kafun.jsonを見ればよさそう。

ただ欠点は当日のデータしか見れないということ。毎日貯めれば有力になりそうだが

東京都健康安全研究センター

都内のデータ限定であればここのサイトが1番使えそう。スギとヒノキの花粉量データを2001年から掲載している。

東京都健康安全研究センター » スギ・ヒノキ花粉情報

データはHTML形式なのでスクレイピングする必要はあるがクセはなさそう

データ分析した例

ググったらすでに先人がいた。残念。。。

qiita.com

ARCHISS ProgresTouch RETROがREALFORCEジェネリック版ぽくて良い

先週秋葉原散策している途中にツクモでキーボードを買った。「ProgresTouch RETRO」ってやつで個人的には初の赤軸。

f:id:thr3a:20180405212058j:plain

いい点

  • 赤軸で軽い
  • 安い
  • かな印字なし
  • 光らない←
  • シンプルなデザイン

正直アーキサイトってメーカーを初めて知ったのだが、打ちやすい。もともとREALFORCEにあこがれてそれを見に行ったってのもあったのだが、いかんせん高い。

が、このキーボードは1万円でおつりがくる(実際には税込9,980円だったので20円しかおつり来ないのだが)

今までのキーボードがペチペチELECOMキーボードだったってのもあるけど非常に軽く感じる。それでいて音がうるさくない。デザインもうるさくない(かな印字のない日本語キーボードはあまりない。

よくなかった点

正直現時点では箇条書きにして書くほど量はない。ただ一つ気になるのはWindows10に接続して使ってるとまれに認識しないときがある。(再起動すると直ってるのだが)

もしかしたらなんらかドライバーが必要なのかも?

今回のキーボードは当たりだったと思う。今度はそれにみあうアウトプット(プログラミング)をだな。。。。

ARCHISS ProgresTouch RETRO 日本語配列 | 株式会社アーキサイト