インターフェース本を購入

たまたま図書館で手に取ったこの本が楽しかったのでamazonで購入

VOW的なノリで街のおかしなUIを紹介している。「何故悪いのか」は評論しているが「どうしたら良いか」は解説していないので答えを求める人にはオススメしない。

併せてamazonでオススメされた以下も衝動買い(^_^;)

誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論

誰のためのデザイン? 増補・改訂版 ―認知科学者のデザイン原論

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

続・インタフェースデザインの心理学 ─ウェブやアプリに新たな視点をもたらす+100の指針

続・インタフェースデザインの心理学 ─ウェブやアプリに新たな視点をもたらす+100の指針

railsでMTAをG Suite SMTPに

普通のGmailだと、fromアドレスがどうしてもgmailのリレー先のアカウントになってしまったので。

まずはじめにG Suiteの管理者アカウントが必要。管理者アカウントで SMTP リレー: Gmail 以外の送信メールを Google 経由にする - G Suite 管理者 ヘルプ のサイトの手順を済ませる。 自分の環境はherokuで固定IPがない状態だったので、

  • TLS
  • 任意のアドレス

に設定した。

rails側の設定は、config/environments/production.rbに

 config.action_mailer.smtp_settings = {
    :enable_starttls_auto => true,
    :address => 'smtp-relay.gmail.com',
    :port => '587',
    :domain => 'サイトのドメイン',
    :authentication => 'plain',
    :user_name => "管理者のemal", #gmail.comドメインでなくてよい
    :password => "管理者のパスワード"
  }

としておけば良いが、認証のユーザはどうやらG Suite管理者でなくてはならない模様。これで一旦は接続してリレーが開始されるが、googleから「重大なセキュリティ通知:ログインをブロックしました」と管理者宛てに通知がくることがある。認証が急に弾かれるようなことがあったらこれを疑おう。

この場合は、メール内のボタンを押下してブロックを解除し、2段階認証のアプリパスワードを

/environments/production.rbに

:password => "アプリパスワード"

と記述すればよい。または、安全性の低いアプリからの接続を許可すると解除され再度リレーの認証が開始される

古いbrewが入ったmacにrbenvを入れる

OSアップデート済みの旧macにrbenvを入れようとすると以下のエラーが。

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require':/usr/local/Library/Homebrew/download_strategy.rb:88: invalid multibyte escape: /^\037\213/ (SyntaxError)

どうやらbrewrubyの1.8で動いているがOSアップデートでrubyのバージョンが2.0にアップデートされた為、バージョン不一致のエラーになっている模様。

brewをアップデートするほかないので、

$ cd /usr/local/Library/Homebrew/
$ sudo git reset --hard origin/master
$ sudo git pull origin master
$ sudo chown root:wheel /usr/local
$ brew update

で、rbenvを入れてみようとすると、、、

$ brew install rbenv ruby-build
Error: /usr/local/opt/autoconf not present or broken
Please reinstall autoconf. Sorry :(

autoconfがおかしい的なことを言われたので、

$ brew unlink autoconf && brew link autoconf

これでrbenvが入る。

$ brew install rbenv ruby-build

rails勉強してます3

よくあるファイルアクセス権限系の話しでアップロードされたpdfをDB保存 & embedタグでDBに保存したpdfを表示

migration

$ rails g model pdf name:string data:binary

$ rails db:migrate

controller

#html表示
def template
  @pdf = Pdf.new
end

#DB保存したバイナリを返す
def show
  @pdf = Pdf.last
  if @pdf.nil?
    send_data(@pdf.data, :disposition => "inline", :type => "application/pdf")
  end
end

#バイナリデータの保存
def create
  @pdf.name = params[:pdf][:data].original_filename
  @pdf.data = params[:pdf][:data].read
  @pdf.save
  render 'template'
end

view

<embed src="<%= show_path %>" width="425" height="400"></embed>
<%= form_for(@pdf, url:create_path, method: :post) do |f| %>
<%= f.file_field :data %>
<%= f.submit "画像を投稿する" %>
<% end %>

validateはまだ(^_^;)

rails勉強してます2

はまったりしながらだけど。

objectの情報をログにdump

# plain
logger.debug object.inspect
# yaml
logger.debug object.to_yaml

FKのnilを許可

belongs_to :tablename, optional: true

レコード削除時にリレーションテーブルも削除する

has_many :tablename, dependent: :destroy

リモートサーバにある画像ファイルをCarrierWaveで保存

mount_uploader :columnname, ExampleUploader
# カラム名がimage_urlとかだとremote_image_url_url になる
model.remote_columnname_url = "http://example.org/xxxx.png"
model.save

多対多のモデル表現

has_and_belongs_to_manyを使うと楽

中間テーブルの作成

class CreateGroupsUsers < ActiveRecord::Migration
  def change
    create_table :groups_users, id: false do |t|
      t.references :group, index: true, null: false
      t.references :user, index: true, null: false
    end
  end
end

中間テーブルのidはあってもなくても良い

class User < ActiveRecord::Base
  has_and_belongs_to_many :groups
end
class Group < ActiveRecord::Base
  has_and_belongs_to_many :users
end

中間テーブルへの登録は << 演算子を使う

user = User.find( 1 )
group = Group.find(1)
user.groups << group

rails勉強してます

rails勉強してます

このあたりを再学習

  • debugger
  • コールバックメソッド
  • validationのコンテキスト別呼び出し
  • S3へのファイル保存
  • 多対多のリレーション定義
  • テスト

ちなみにcloud9 + EC2のt2.nanoだとメモリが足らなくて途中からテストが走らなくなります(^_^;)