公衆無線LAN(フリーWi-Fi)に接続できない。認証ページが表示されない件。(Windows10版)

こちらの記事のWindows10版。 midnight-engineering.hatenadiary.jp 概要は上記の記事をご覧ください。本記事では対処手順のみ記載しています。

Windows10のDNS設定変更手順

デスクトップ右下のコンピュータのアイコンを右クリックする

f:id:cateching:20190103123746p:plain

「ネットワークとインターネットの設定を開く」をクリックする

f:id:cateching:20190103123822p:plain
クリックするとネットワークの「設定」ウィンドウが開かれます。

「アダプターのオプションを変更する」をクリックする

f:id:cateching:20190103123825p:plain
クリックすると「ネットワーク接続」ウィンドウが開かれます。

Wi-Fi」の項目を右クリックし、「プロパティ(R)」をクリックする

f:id:cateching:20190103123815p:plain クリックすると「Wi-Fiのプロパティ」ウィンドウが開かれます。

インターネットプロトコルバージョン4(TCP/IPv4)」をクリックし、「プロパティ(R)」をクリックする

f:id:cateching:20190103125022p:plain
クリックすると、「インターネットプロトコルバージョン4(TCP/IPv4)のプロパティ」が開かれます。

「次のDNSサーバーのアドレスを使う(E)」にチェックが入っている場合、「DNSサーバーのアドレスを自動的に取得する(B)」にチェックを入れるよう変更する

f:id:cateching:20190103123818p:plain
もし、最初から「DNSサーバーのアドレスを自動的に取得する(B)」にチェックが入っていた場合は、DNSの設定が原因ではありません。

bundle install(rails new)すると”HEADS UP! i18n 1.1 changed fallbacks to exclude default locale."と言われる

はじめに

2019年、新年を迎えて早々だけど、時間のあるこの正月休みの間に何か創作しようと思い立った。
またしても数ヶ月ぶりにRailsを触ってみようと思った。
とりあえずrails newした。

そしたらi18n絡みで”that may break your application"とかいうメッセージが出力された。こわい。

環境

Rails 5.1.6.1

やったことと出力されたメッセージ

rails newをするとbundle installでi18nというgemがインストールされる。
今回はv1.4がインストールされているが、この際に以下のようなメッセージが出力された。

$ rails new hoge
(中略)
         run  bundle install
(中略)
Fetching i18n 1.4.0
Installing i18n 1.4.0
(中略)
Post-install message from i18n:

HEADS UP! i18n 1.1 changed fallbacks to exclude default locale.
But that may break your application.

Please check your Rails app for 'config.i18n.fallbacks = true'.
If you're using I18n (>= 1.1.0) and Rails (< 5.2.2), this should be
'config.i18n.fallbacks = [I18n.default_locale]'.
If not, fallbacks will be broken in your app by I18n 1.1.x.

For more info see:
https://github.com/svenfuchs/i18n/releases/tag/v1.1.0

これはなんなのか

出力メッセージによると、i18nのv1.1から、config.i18n.fallbacksという設定項目に関して破壊的な変更がなされたようだ。

  • config.i18n.fallbacksとはなんなのか
    訳語が存在しないときのフォールバック動作を規定する設定。要するに、locale設定に応じた訳語を表示したいんだけど、対応する訳語が定義されていない場合に、(代わりに)どの言語で表示するかという設定。

Railsガイドによると、以下のように使うようだ。

# デフォルトのロケールをフォールバック先として使う場合
config.i18n.fallbacks = true
# ロケールの配列をフォールバック先に使う場合は次のようにします。
config.i18n.fallbacks = [:tr, :en]

ところが、上記設定例の前者の書き方がv1.1.0からは正しくなくて、以下のように書かなければならなくなった。

config.i18n.fallbacks = [I18n.default_locale]

何をすべきか

メッセージに書かれているまんまですが、設定ファイルを以下のように変更。

  • 変更対象ファイル [your_app_root]/config/environments/production.rb
  • 変更前
config.i18n.fallbacks = true
  • 変更後
config.i18n.fallbacks = [I18n.default_locale]

rails newの度に毎回これをやらないといけないのか

If you're using I18n (>= 1.1.0) and Rails (< 5.2.2)

と書かれていることから5.2.2では治っているのでしょう。きっと。

「google mapで開く」リンクの貼り方(iOS/Android他、全プラットフォーム対応)

Developer Guide  |  Maps URLs  |  Google Developers

Universal cross-platform syntaxというものがある。

Universal cross-platform syntax

プラットフォーム(端末)の差異を意識する必要のないapiが用意されているのでそれを使えば良い。
プラットフォームごとの挙動は以下の通り。

  • Android:
    • Google Mapsアプリがインストールされており、かつアクティブ状態の場合、アプリでマップが立ち上がる。
    • Google Mapsアプリがインストールされていない、または無効化されている場合、ブラウザでマップが立ち上がる。
  • iOS:
    • Google Mapsアプリがインストールされている場合、マップがアプリで立ち上がる。
    • Google Mapsアプリがインストールされていない場合、ブラウザでマップが立ち上がる。
  • その他のデバイス
    • ブラウザでマップが立ち上がる。

アクション

parameter部分の詳細は冒頭のデベロッパー向けドキュメントを参照されたい。

Rails5 Active Storageを使って画像アップロード機能を実装する

ファイルアップロード機能の実装方式

Rails5.1以前においては以下のgemを使用するのが有力な選択肢だった。

Rails 5.2になって、Rails本体の機能としてActive Storageが追加されたことで、これが上記の選択肢に加わった。

Active Storage

rails/activestorage at master · rails/rails · GitHub

概要はこちらのRails Guideを参照されたい。
Active Storage Overview — Ruby on Rails Guides

で、どれを使えばいいのか?

Active Storageはビルトインならではの簡便さが魅力であるものの、CarrierWaveやShrineと比較すると、まだ機能的に未成熟のようだ。(自分で触ったわけではないが)

なので要件に照らして、Active Storageで事足りる、あるいは機能不足を許容できるのであれば、お手軽に使えるActive Storageを使えばよいし、そうでなければCarrierWaveやShrineを選ぶことになるだろう。

今後の変化の激しさも考えると、現時点でActive Storageを採用するのは悪手な気もするのだが、 今回はお試しということでActive Storageを使ってみることにした。

環境

  • Rail 5.2.1
  • Active Storage 5.2.1
    ファイルアップロード機能実装に必要
  • MiniMagick 4.9.2
    画像の加工に必要
  • ImageMagick 6.7.8.9-15
    MiniMagickが使用。OSにインストールする。

Active Storageを利用するにはRails 5.2.0以上にアップデートしなければならない。
5.1.5からのアップデート方法であれば、こちらの記事に非常にわかりやすくまとまっている。 qiita.com

画像アップロード機能の要件

  • 1つのモデルレコードに対し、複数の画像を添付できる
  • オリジナルサイズだけでなく、指定のサイズでリサイズされたサムネイルを生成する
  • バリデーションする
    • file type: jpegpngのみ許可

実装

以下、rails newで新規プロジェクトを作成した直後の状態を想定する。

MiniMagickのgemを追加

Gemfileに以下を追記

# Gemfile
gem 'mini_magick', '~> 4.8'
$ bundle install

Active Storageが使用するtableを作成

Active Storageはファイル添付機能の実装にあたり、添付先のモデルにカラムの追加を必要としない。代わりにBlobとAttachmentの2つのモデルを用いる。

  • Blob(Binary Large Object):
    ファイルのメタ情報を管理。ファイルの実態はローカルファイルシステムまたはS3などのクラウドサービスに格納される。Blobが管理する情報は以下。
    • id
    • key
    • filename
    • content_type
    • metadata
    • byte_size
    • checksum
    • created_at
  • Attachment:
    添付先のモデルとBlobを紐づける中間テーブルとしての役割を担う。Attachementが管理する情報は以下。
    • id
    • name
    • record_type
    • record_id
    • blob_id
    • created_at

上記2つのモデルを以下の2コマンドで作成できる。

# migrationファイルの作成
$ rails active_storage:install
# テーブルの作成
$ rails db:migrate

scaffoldでmodel, view, controller等を作成

$ rails g scaffold post title body:test

routeの追加

# config/routes.rb
root to: 'posts#index'

modelの編集

# app/model/post.rb
has_many_attached :images
validate :image_type

def thumbnail input
  return self.images[input].variant(resize: '300x300!').processed
end

private

def image_type
  if images.each do |image|
    if !image.content_type.in?(%('image/jpec image/png'))
      errors.add(:images, 'needs to be a JPEG or PNG')
    end
  end
end
  • validate :image_type , def image_type ファイルタイプでバリデーションを行う。今回はjpegpngファイルのみアップデートを許可し、それ以外はerrorを返す。
  • thumbnailメソッド:
    アップロードされた画像をオリジナルサイズで扱うのではなく、リサイズしてサムネイルとして表示するためのメソッド。processedを使用することで、毎回リサイズの処理を走らせずに済む。
    • input(引数):
      複数画像を添付可能とするため、何枚目の画像かをinputという引数で指定できるようにしておく。(さらにいえば、リサイズ処理におけるサイズ指定を変数化して、第二引数、第三引数で指定できるようにしておくとよい。本例では省略。)
    • resize: '300x300!':
      リサイズのサイズ指定。"!"を付けるとオリジナル画像のアスペクト比を無視して、指定されたサイズによるリサイズを強制する。

controllerの編集

# app/controller/posts_controller.rb

# privateメソッドのpost_paramsを修正
  def post_params
    params.require(:post).permit(:title, :body, images: [])
  end

viewの編集

_formページ

viewのフォームに画像アップロード用のフィールドを追加する。
複数アップロードを可能にしたいので、multiple: trueが必要。

# app/view/posts/_form.html.erb
<%= form.label :images %>
<%= form.file_field :images, multiple: true %>
showページ
# app/vie/posts/show.html.erb
<% (0...@post.images.count).each do |image| %>
  <%= image_tag(@post.thumbnail(image) %>
<% end %>

参考

www.youtube.com

Rails5でjavascript(jQuery/coffeescript)が動かない

軽く調べただけでも新旧いろんな症例(?)がある。 この記事で紹介するのはturbolinksを有効にしている場合に注意すべきケース。

環境

事象

  • javascriptが動かない
    具体的には、selectボックスの変更イベントを検知してajaxが動くようなcoffeescriptのコードを書いたが、動かない
  • ページ自体をリロードすると動く
    ⇒別のページから遷移したときは動かないけど、リロードすると動く場合、Turbolinksが悪さをしている可能性が濃厚。
    Turbolinksを無効化した上で確かめればすぐに切り分けられる。

原因と対処

Turbolinksを有効化している場合、$(document).readyは動作しない。
まずは対処方法から。

before(ダメな書き方)

# app/assets/javascripts/xxxxx.coffee
$(document).ready -> 
  $('#hoge_menu').change ->
#(以下略)

# 以下の書き方も同じ

$ ->
  $('#hoge_menu').change ->
#(以下略)

after(OKな書き方)

# app/assets/javascripts/xxxxx.coffee
$(document).on 'turbolinks:load', ->
  $('#hoge_menu').change ->
#(以下略)

Turbolinksが有効だとなぜ$(document).readyが動かないか

公式ドキュメントに説明がある。
Working with JavaScript in Rails — Ruby on Rails Guides

Turbolinks overrides the normal page loading process, the event that this relies upon will not be fired.

その他の注意点

jquery-turbolinksは使わない

Rails4向けの古いブログ記事などでは、解決策としてjquery-turbolinksというgemを入れるやり方が紹介されていたりする。
しかし、githubのREADMEを見ると冒頭にデカデカと「Deprecated 」と書いてあり、続いて以下の記述があるので使うのはやめましょう。

This gem does not work with Turbolinks 5+, and is not compatible with many jQuery plugins. We do not recommend using it.

そもそも余分なgemを入れなくても解決できるのだから、入れる必要もないのだが。

github.com

iPhone(iOS)でweb検索時、第二検索ワードが無視される

ホーム画面からweb検索時に、入力したはずの第二検索ワードが無かったことにされる現象に惑わされている。
バグだろうか。

現在のiOSバージョンは11.3。
11.4に上げたら治るか試してみる。 ⇒治らなかった

(TBC)

IntelliJ IDEA ショートカットキーメモ(Mac)

  • 変数・メソッドの定義へのジャンプ
    • command + b
      ただし、定義部分でこのコマンドを実行すると、使用箇所一覧をポップアップで表示
  • 変数・メソッドの使用箇所(ツールウィンドウに一覧表示)
    • option + F7
  • 変数・メソッドの使用箇所(ポップアップに一覧表示)
    • command + option + F7
  • ジャンプ履歴の戻る・進む
    • 戻る:command + [
    • 進む:command + ]
  • 親クラスへ移動
    • command + u
  • 子クラス/実装クラスの一覧をポップアップで表示
    • option + command + b
  • タブ切り替え(OSのタブ切り替えcommand + tabと同じ仕組み)
    • control + tab
  • タブ切り替え(ポップアップに一覧表示)
    • command + e
  • 最後に編集した箇所に戻る
    • command + shift + delete
  • ファイル名・クラス名・変数名/メソッド名を入力してジャンプ
    • shift -> shift
  • ファイル名を指定してジャンプ
    • command + shift + o
  • クラス名を指定してジャンプ
    • command + o
  • 変数名・メソッド名を指定してジャンプ
    • command + option + o