Rails で 画像を Drag and Drop してプレビューして写真をアップロードしたいだけなら Ezdz がよかった

TL;DR

Rails のフォームで、画像をドラッグ・アンド・ドロップでプレビューしてファイルをアップロードしたい欲求があった。
ezdz というのがあって、それで自分の欲求が満たせましたという話。
(jQuery 依存です)

背景

Rails のフォームを生成していて、画像をドラッグ・アンド・ドロップでプレビューしてファイルをアップロードしたい欲求があった。
(ただし、ここでは単一ファイルのアップロードを前提とする)。
いろいろ調べてみると Dropzone.js というのが結構便利そうだったし、今回は jQuery に依存していたので
これでやってみようとしらべてみた。 dropzone-rails というプラグインがあってすぐに rails に組み込めて楽そうだった。

dropzone-rails をつかってかんじたつらみ

  1. 新規作成時には entity は保存されていないので、entity を保存してから update するような設計にしないとうまく作りにくい。
    • 理由は基本的に xhr でデータを送信するから。
    • autoprocessQueue を false にすれば、画像を D&D したときにそうしないようにできる。結局 Dropzone のインスタンスの processQueue をコールしないといけない。
    • entity がすでに作成されていたら それに対して update をかけるだけでよいのでそういうやり方でいけるならそれでよし。
    • もしそれがいやなら temp みたいなよくわからない entity に作成したあとに その uuid を form に埋め込んでサーバで保存するみたいな回りくどいことをしなければいけない気がする
  2. 上記の xhr でデータを送信するところに rails との致命的な相性の悪さがある(のはもうわかっているとおもうが)。
    • model の validation に引っかかったときなどのハンドリングを js 側に持ってこなければいけない
    • すなわち rails の view で頑張ったエラーなどに合わせたりという謎の努力が必要になる。
  3. そもそもそんなにがんばりたくない
    • dropzone-rails の js の client のソースコードを結局追って修正したりを繰り返さないとおもったことができなかった

代替え案を探すことに

そもそも自分がやりたいのは

  • xhr じゃなくてよし
  • いったん1ファイルでよし
  • 画像をプレビューしたい
  • jQuery は使用可能(bootstrap4 があるから)

だったので、それっぽい代替を探していたら ezdz を見つけた。
demo をみたらそれっぽかったし、 rails の binding もあったので必要十分だった。

所感

active storage でもプレビューできるみたいなのがあったのでそういうのを調べても良かったんだけど、
まだ rails5 に至ってないひとはもしかしたら上記が有効かもしれません。

エンジニアのための最もイケているバッグは DEFY BAG では説

エンジニアのための最もイケているバッグは DEFY のバッグでは説

TL;DR

DEFY のバッグは約4万円とめっちゃ高い。
しかし、そもそもカッコイイし耐久性も十分っぽい。
さらにあまり人とかぶらないので最高では。

DEFY のバッグ

買ったのはこのバッグだ。

とにかくカッコイイ。
上記のリンクは楽天のものだが、俺は気付かずに普通に DEFY オンラインショップから直接仕入れて、結果約4万円だった。

https://defybags.com/collections/bags/products/bucktown-backpack-black-wax-canvas

内訳は $289(商品) - $28.9(10%クーポン、メルマガ登録で取得可) + 配送料(東京) $61.4 で 37946 JPY。さらに 関税 と関税にかかる消費税(!) で + 2800円。 トータル 40746 円! たっけー。

おそらく、直接仕入れるのは最安ではなさそうだ。
買ってから気づいたけど、上記の楽天リンク(アフィです) は3万5千円なので普通に輸入するよりは安いと思う(本物かどうかはしりませんが多分大丈夫だろう)。

実際の写真

まるっこいフェイス。

https://i.gyazo.com/2915219977de6260fbd0a3e585bf4828.jpg

お洒落かつ頑丈そうなのが明らかにわかる。
ジッパーかわいい。

https://i.gyazo.com/d96839892362b938e19e11c64fda47e8.jpg

https://i.gyazo.com/2f5bb5ab06d33bbf105f5a2def4fa2de.jpg

DEFY OR DIE

おいしい

オリジナルのシールがかわいい。

これは本場で買ったもののみが味わえる雰囲気だとおもう(たぶん)。

最後に遠目のやつ。

https://i.gyazo.com/9b61528749234bcb085e7d787ff86d78.jpg

かっこいいなぁ。

c6(シーシックス)のリュック

そもそもリュックなんてあんまり買わないけど、今回は使っていたリュックに穴があいてしまったから買い直しとあいなった。
もともと使っていたのはコレだった。
こちらはお値段 3万2千円。
約2年間つかった。まさか2年でボロボロになるとおもってなかったので結構ショックがでかい。

このリュックを買った理由は

  1. 見た目のデザインがお洒落
  2. Macbook Pro 15inch が入るポケットがある(背中に近い部分にPCを入れられる)
  3. PC が入る空間とわかれた空間がある
  4. 横にポケットが付いていてなんでも入れやすい、取り出しやすい

だった。
上記の条件に当てはまるリュックは結構少なかった。

その他にも Cote&Ciel コートエシエル とかも人気で、実際に見にいったが、
PC が入る部分の開け閉めに非常に問題がありそうでやめた。

c6(シーシックス)のリュックはどうだったのか

買ってからすぐに旅行に行くタイミングがあって、結構重めの荷物を入れたら速攻でかたのリュックの紐が少し取れる程度の作りの悪さだった。
小洒落たパンとかを入れる都会の人間にはこのようなことは起きないかもしれないので何とも言えないが、
ハード目に使うようなひとにはこのリュックは向かないと思う。
しかも、これも自分に限っての可能性が高いが、結構 Macbook Pro 15 inch を入れたまま走る機会がおおく、その影響で ノートPC 格納ポケットを突き破り、
さらに Macbook の重みで底面の記事も突き破るという始末。

値段の割にとにかく自分的には出来が悪かったので、すごくムカついていた。
歴代のバッグの中でも群を抜いてできが悪かったと思う。
(PORTER, マスターピース, gravis, c6, DEFY)

今考えたら中国産だったしなぁ。

DEFY のバッグの使い心地

(数ヶ月使用したあとに追記予定)

1日使って感想。けっこう重いから肩がこるかも。

所感

DEFY のバッグ、おすすめです。 これから流行りそうな予感がします。

(昔マスターピースが出たてのころ、これは流行りそうだと思って流行ったし、ミステリーランチも流行りそうだなとおもって流行ったので。)

重さがそもそも苦じゃないタイプなので、もしかしたら人によっては重いかもしれないけど、 選択肢の一つとして考えてみてはいかがでしょうか。

bag

Thor_for_rails_scaffold_generate_path

TL;DR

If you want to override jbuilder generator when scaffolding, put it Rails.root + lib/templates/rails/jbuilder/index.json.jbuilder

vim /Users/vimtaku/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/thor-0.19.1/lib/thor/actions.rb

1
2
3
4
5
6
7
8
9
10
11
def find_in_source_paths(file) # rubocop:disable MethodLength
  possible_files = [file, file + TEMPLATE_EXTNAME]
  relative_root = relative_to_original_destination_root(destination_root, false)
  binding.pry

  source_paths.each do |source|
    possible_files.each do |f|
      source_file = File.expand_path(f, File.join(source, relative_root))
      return source_file if File.exist?(source_file)
    end
  end

Background

I searched pathes for used generator, but I cant find where template is used. I’m using jbuilder.

lib/templates

Rails.root + lib/templates dir is used as tempaltes path by default.
if you want to override jbuilder templates, you can put
Rails.root + lib/templates/rails/jbuilder/index.json.jbuilder.

see also

thor-0.19.1/lib/thor/actions/file_manipulation.rb

React_native_fcm_undeclaired_identifier

I got these message when start to use react-native-fcm

1
2
error: use of undeclared identifier 'FIRMessagingConnectionStateChangedNotification'
   name:FIRMessagingConnectionStateChangedNotification object:nil];

I lot of time consumed, but I found that Firebase version is weired for me.

1
pod install --repo-update

save me.

that’s it.

Mac OS Sierra で Karabiner-elements がない場合に Keyrepeat を早く適切にする方法

TL;DR

1
2
defaults write -g InitialKeyRepeat -int 9
defaults write -g KeyRepeat -int 2

背景

Mac OS Sierra にしてから karabiner elements になって、キーリピートの設定ができなくなった。 mac の system preferences からできる最速ではもちろん物足りないので、一旦目安としての数値がなかったので記述する。

概要

iterm から

1
2
defaults write -g InitialKeyRepeat -int 9
defaults write -g KeyRepeat -int 2

の各コマンドを実行して再起動したら反映された。若干はやいきもするが、慣れの問題かと思っている。

所感

最初1,1 とかにしたら大変なことになったので、誰かのためになればさいわいです。

iPhone6 + au(誰でも割+LTEフラット) 運用を、 iPhoneSE と格安SIM(mineo Dプラン) の運用にする

TL;DR

  • iPhone6 を iPhoneSE に変更(大体30分)
    • 約3万
    • アップルストアで30分(バックアップ戻す時間込み)
  • 2016年11月1日(あたり)に mineo Dプランを、エントリーパッケージ経由で契約する
    • その後自動でau が解約される(解約更新月なので9800円くらいがかからない)。
    • au は月末解約扱いになるらしいが、システムの対応が間に合ってないせいでまだそうなってないっぽい。

背景

iPhone6 が日本にて発売されたのが 2014年9月で、おそらくそのときに購入した。
その流れで、 au の「誰でも割」「LTEフラット」を契約して、約2年間運用してきた。
そもそもパケットの料金が高すぎるので不満をいだいて居たので、
格安シムのほうが安くなるのはおそらく確実だろうということで、
どのようにすればよいか調べたのでココに記しておく。

自分の要求

  • もちろん速度が出ると良い。
  • テザリングは必須。
  • 電話はあまりしない。(するときは実家になど、たまに長くなるとお金がかかる)
  • 大体実績値がパケット使用量 7GB/月 程度。もうちょっとあっていいと思っている。

概要

  • 端末を何にすればよいか?
  • MVNO をどこにすればよいか?
  • au の契約更新月について

端末を何にすればよいか?

iPhoneSE とした。
iPhone7 発売に伴い, iPhoneSE 64GB が 49800円(税別)なので、これにした。
iPhone7 は、今の自分には必要ないと思ったからだ。

Android はOS的に好きでないのでやめた。

銀座アップルストアに行って、iPhone6 が24,000円で下どってくれたので、実質3万くらいで購入できた。
mac の iTunes でフルバックアップを取って行かないと無駄足になるので注意。

MVNO をどこにすればよいか?

mineo にした。
iPhoneSE でのテザリングでの前提だと IIJmio と mineo が良いらしい。
出典はこちら。
自分は、ちょっとググッた結果通信速度の安定的に mineo のほうが良さそうだと判断したのと、
通信料を最大2GBシェアリングできる概念みたいなものがあるようなので、こちらにした。

自分が調べた結果だと、Y!mobile とか UQ mobile とかはテザリングNG だったりする。
テザリング使いたい人は前提をテザリングに考えたほうが良いと思う。

au の契約更新月について

au の契約更新月は、誰でも割とかだと 25ヶ月、26ヶ月目くらいらしい。
au の人なら多分入れているであろう、auお客様サポートアプリの「ご契約情報」 「料金割引サービス」に、

1
2
誰でも割
(次回更新年月 2016年11月~2016年12月)

などと書いてあるのが確認できるのでご確認を。

ちなみに、解約についてであるが、au は月末解約扱いになると宣言しているが、
システムの対応が間に合ってないせいでまだそうなってないっぽい。

mineo にするならこれを買うと安くなる模様。

普通にmineo公式サイトを見ればわかるけど、プロモコードを入れるところがある。
申し込み時の方法が主に3つあるけど、下記を購入して登録すると、新規登録手数料がおよそ 2000円安くなるらしいので、
これを買ったらイイんじゃないかなと思う。

お得感見積もり

BEFORE

auのもろもろ(7GB制限):月平均1万円

AFTER

10GB(音声+データSIM): 3220円
通話料大体:400~600円
4000円くらい

月6000円お得。電話の具合によってはもうちょっとお得具合がへるがそれでも月6000円はでかい気がする。

3万の端末代金は 6000 * 5ヶ月あればもとが取れる予定。

所感

大体3時間くらいいろいろ調べた結果なので、誰かのために慣れば幸いです。

Ridgepole Command Gets [ERROR] Undefined Method Index

TL;DL

You should use newest version of gem definetly.

I faced this error

1
[ERROR] undefined method `index' for #<Ridgepole::DSLParser::Context::TableDefinition:0x007fae9aa1b850>

Solved

This is version problem.

I simply write as follows,

1
gem 'ridgepole'

but it seems downloads version is 0.5.0.

I finally found 0.6.4 is newest ver for now, so I used it, problem disappeared.

Let’s Encrypt で Ec2 で単独で動いているサービスを Https 化する

はじめに

前提として、 EC2 に passanger + nginx でサービスを動かしている。
Let’s encrypt を導入するには主に以下をやる必要があるだろう。

  1. サーバにログインして letsencrypt-auto スクリプトを使用して証明書を作成
  2. nginx に設定し、再起動
  3. 90日で切れるので、証明書の自動更新をつける

以下では、
- force SSL 的な設定は今のところ nginx などではやらない。
- クライアント側のアプリなどで対応する。

1. 証明書を作成

1
2
3
4
5
cd /opt
git clone https://github.com/letsencrypt/letsencrypt
cd /opt/letsencrypt
# ec2 のセキュリティグループで 443 を開けておく
./letsencrypt-auto certonly --standalone

2. nginx に設定し、再起動

以下をいい感じに追加する。

1
2
3
4
5
6
7
   listen 443 ssl;

   ssl_certificate /etc/letsencrypt/live/your.domain.name/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/your.domain.name/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

3. 自動更新

su で crontab -e

1
00 05 01 * * /etc/init.d/nginx stop; /opt/letsencrypt/letsencrypt-auto certonly --standalone -d your.domain.name --renew-by-default --debug ; /etc/init.d/nginx start;

所感

https 化が簡単にできて最高な時代だなぁと思った。

参考

https://www.mitchcanter.com/lets-encrypt-ssl-amazon-aws/

俺が考える最強ヘッドフォンゼンハイザーHD25-1 Ⅱ を超えた Amperior With リケーブル

はじめに

過去の記事で書いたとおり、ゼンハイザーHD25-1 は俺が考える最強ヘッドフォンだった。
しかし、 Amperior はさらにそれを超えている。しかも現在では Amazon だと HD25-1 より安い。
本記事ではこのヘッドフォンについてレビューをする。

いまのベストを書く

これらで至高の環境が手に入る。

詳細

Amperior について

HD25-1 と比べてずっしりとした重さをかんじるが、別に装着してて疲れるわけではない。
HD25-1 とくらべて、音質が一つづつクリアになっているように感じる。
HD25-1 の音のでかたや音圧は、初めてした時は圧倒的に感じるが、Amperior とくらべてしまうと
どこかぼやっとしてしまうように思う。
Amperior は音圧もすごく、特にロックのサビなどにおけるベースラインのクリアさは驚きがある。
中高音はやはり得意な領域で、低音もやはり得意だろうと思う。
ドラムのシンバルのような音や、シャリッとした音は少し弱めに思うだろう。
それにしても、全体的にクリアで、ゼンハイザーが好きな人なら絶対満足するだろう。

イヤーパッドはベロアで、しかもしっかりとしていて良い。
HD25-1 とくらべて締りはそんなに強くないと思う。

リケーブルについて

純正のケーブルは、数ヶ月で断線する。
HD25-1 を使っている方はもうおなじみだと思うが、これは確実に起こるだろう。
普通に生きていてこうなるのだ。もう諦めよう。
ただ、そのたびに新しいリケーブルを試せる。
前回までイイと思ってたやつがあったんだけど、今回のリケーブルはそれを超えてきた。

基本的にはギターが得意なケーブルだと思う。HD25-1 にしばらくさして聞いていたが、
シールド?コネクタ部もとてもぶっとくて断線しにくそうだし、かなりクリアに中高音が聞こえる。
これからどれくらい持つかで評価が変わると思うが、長持ちするならこれは素晴らしい。
まぁ値段も普通に 8000円とかするからそうじゃなきゃこまるんだけど。

ちなみにリケーブルは、もともとのケーブルと クランプ部分が別途が接着してるので、こういうのが必要らしい、約1000円。
SENNHEISER(ゼンハイザー) ケーブルクランプセット Cable Clamp Set For HD25【044433】

しかも、このクランプのネジが精密ネジとからしく、この特殊ドライバーの H6 っていうやつを使う必要があった、約2000円。
アネックス(ANEX) スーパーフィット精密両頭差替ヘクスローブドライバービット3本組セット ケース付 No.3602

所感

ゼンハイザーの MOMENTUM シリーズとかも、便利だし音もいい感じなんだけど、
結局 HD25-1 の方が良いと思った。
それよりも素晴らしい Amperior は、本当にいいヘッドフォンだと思う。
みんな買えばいいんじゃないかな、損はしないと、俺は言い切れるよ。

Rails4 で Utf8mb4 にしたい話

自分用のメモ

/etc/my.cnf

1
2
3
4
5
6
7
8
[client]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
innodb_file_per_table
innodb_file_format=barracuda
innodb_large_prefix = 1

$RAILS_ROOT/config/database.yml

default に追加

1
2
3
charset: utf8mb4
encoding: utf8mb4
collation: utf8mb4_general_ci

ridgepole の Schemafile

create_table :news, force: true, id: :bigint, options: “ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC” do |t| blahblah… end

参考

http://blog.arith-metic.jp/category/rails http://yamacent.hatenablog.com/entry/2015/06/06/235900