のぶLab.

流しのソフトウェアエンジニアの雑記帳. Android, Scala, Clojure, Ruby on Railsなど

HerokuからAWS RDSを使えるようにする

HerokuでAWS RDSを使う際の方法が、これまでいろんなところで紹介されていた方法と変わっているっぽい?ので簡単にメモ。

基本的にここの流れに沿って作業する

RDSのインスタンスを作成

この辺とか参考にしました

これからRDS始める人必見!(①RDSのインスタンス起動~セキュリティグループ変更~) | クラウド工房

証明書の取得

アプリケーションルートで以下のコマンドを実行

curl https://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem > ./config/amazon-rds-ca-cert.pem

HerokuアプリのDatabase path設定

heroku config:add DATABASE_URL="mysql2://username:password@hostname/dbname?sslca=config/amazon-rds-ca-cert.pem" -a <app_id>

先ほどのpemをcommitしてherokuへpushするとherokuからRDSインスタンスのDBに接続できる。

zepto-railsでlink_to :method => :deleteが効かない

Railsでzeptoを使おうとして断念した記録

背景

jquery likeで軽量なzeptoを使ってRailsアプリを作成したが、 <% link_to "hoge", hoge_path, :method => :delete %> が効かなくてハマってしまった。

原因

"jquery-ujs"に相当するものがないためらしい

代替探し

このサイトによると、 gem "rails-behaviors"を使えば良さそう。 だが、実際に導入しようとするが"そんなgemない"と怒られた(もう公開してないっぽい?)

結局

jQueryを使えば解決することなのでzeptoを諦める

他にzeptoみたいに軽量で使いやすいライブラリないものかな。。。

SublimeからAtomへ1週間変更してみた

エディターをSublimeからAtomに変更し、開発業務を1週間やってみて感じたこと

Atom

こちらからDLすることができます

Atom

Atomを使った感想

良いところ
  • Git関連のpluginが充実していて便利。

詳細にgit log --graphを表示してくれたり、merge toolが使いやすかったり。
git関連の作業はAtom上で完結しそう。

  • Atom上でターミナル操作が可能。

ターミナルpluginを導入し、[alt] + [Ctrl] + [→]でサクッとターミナルを開いてちょっとした作業をすることもできる

Sublimeに慣れている人はとても取っ付き易いと思います
じゃあSublimeでいいじゃんというのはなしで。。。

いまいち
  • Sublimeよりは動作がもっさりとして重たい印象
  • バグが多い、たまに日本語が文字化けする

- undoで戻る時点が謎 (意図しない時点に戻るのでたまにびっくりする) -> pluginいろいろ入れていたらいつの間にか改善されてた
今後解消されていくと良いのですが。。。

Atom Plugins

[cmd]+[Shift]+[p] -> "install package"と入力すると下のような画面が表示され、簡単にPluginを検索・導入することができます
(Installしたら即反映されます)
f:id:atsuya046:20141106231402p:plain

Installしたplugin

開発言語問わず、以下のプラグインは結構使えると思います

Git History
選択したcommit logとのDiffを表示します

Git Log
git log --graphを表示します
commitした人のアバターも表示されてユーザフレンドリーな感じ

Git Plus
よく使うgitコマンドのショートカット

Merge Conflicts
conflictが発生したファイルの一覧、conflictした箇所のハイライト、merge後のstagingまで
conflict解消作業が楽にできます

Task List
// TODO や // FIXME の一覧表示

Local History
ローカルファイルの変更履歴を表示します

Term2
Atom上からターミナル操作が可能
(日本語が文字化するようです。。。)

Web View
Webサイトを閲覧することができます

Ask Stack
Stack Overflowの記事を検索・閲覧することが可能!

Autocomplete Plus
デフォルトのAutocompleteは貧弱なので、これを入れておくと快適にコーディングできる

Railsで1:Nのテーブルを扱う

Gemの導入

Gemfileに以下を追加してnested form gem を導入

gem"nested_form"

bundle install

フォーム要素を動的に追加するためのプラグインを追加

application.jsに以下を追加

//= require jquery_nested_form

使ってみる

view
<%= nested_form_for @project do |f|%>
    <%= f.fields_for :tasks do |task_form| %>
        <%= task_form.text_field :name %>
        <%= task_form.link_to_remove "Remove Task" %>
    <% end %>
    <p><%= f.link_to_add "Add Task", :tasks %></p>
<% end %>

"nested_form_for"を使わないと"link_to_remove"や"link_to_add"が使えないようなので注意

controller

Rails4の場合

params.require(:project).permit(:name, tasks_attributes: [:id, :name, :_destroy])
model

project

has_many :tasks

task

belongs_to :project

Viewにインデックスを表示する

view
<%= nested_form_for @project do |f|%>
    <%= f.fields_for :tasks do |task_form| %>
        <divclass="task_area"><divid="index_area" ><%= task_form.options[:index] %></div>
            <%= task_form.text_field :name %>
            <%= task_form.link_to_remove "Remove Task" %>
        </div>
        <% task_form.options[:index] %>
    <% end %>
    <p><%= f.link_to_add "Add Task", :tasks %></p>
<% end %>

link_to_add時にインデックスを+1

js
$(document).on('nested:fieldAdded', function(event){
    var current_order = $(this).find('.task_area').length;
    event.field.find('.task_area').val(current_order);
})

AmazonがKindle2周年セール!

Kindleストア 2周年記念セール
対象のKindle書籍が40%OFFで買えるようです!

Code Completeやリーンスタートアップなどエンジニアによく読まれている書籍も対象となっているようなので、
いつか買おうと思っていた方はこの機会に購入してみてはいかがでしょうか

Code Complete 第2版 上 完全なプログラミングを目指して

Code Complete 第2版 上 完全なプログラミングを目指して

Code Complete 第2版 下 完全なプログラミングを目指して

Code Complete 第2版 下 完全なプログラミングを目指して

Gravatarでプロフィール自動設定

いろいろなWebサービスにアカウントを作る際、
アバターの登録が面倒でデフォルトのままになってしまうことがよくあります。

Gravatarにメールアドレスとアバターを設定しておけば、
諸々のWebサービス(Slack, Github, Bitbucketなどなど)のアカウントに自動でアバターを設定してくれます。

アバターの設定を忘れがちな人には便利かも。

Gravatar - グローバルに認識されるアバター (Globally Recognized Avatars)

日付・時刻の操作

現在時刻取得
DateTime.now
日時指定
DateTime.new(year, month, day, hour, min)
パラメータ取得
now = DateTime.now
now.year
now.month
now.day
now.hour
now.min
加算した値を返却
now = DateTime.now
now >> 1 # 1ヶ月後
now + 1 # 1日後# 大小比較now = DateTime.now
futue = now >> 2
now <= future # true

参考
逆引きRuby - 日付と時刻
http://www.namaraii.com/rubytips/?%E6%97%A5%E4%BB%98%E3%81%A8%E6%99%82%E5%88%BB
DateTime に月、日、時、分、秒を足す。 - こせきの技術日記
http://koseki.hatenablog.com/entry/20080527/date

RailsでBootstrap Materialを導入する

BootstrapをベースにMaterialデザインなUIを実装できるBootstrap MaterialRailsに導入してみました

Gemfileの編集

Gemfileに以下を追加します

gem 'bootstrap3-rails'
gem 'bootstrap-material-design'

Install

bundle install

application.jsの編集

"app/assets/javascripts/application.js"に以下を追加

//= require bootstrap
//= require bootstrap-material-design

application.cssの編集

"app/assets/javascripts/application.css"に以下を追加

*= require bootstrap
*= require bootstrap-material-design

これでBootstrap Materialが使えるようになると思います

MacにHomebrewでMariaDBをインストール

MariaDBをインストール

$ brew install mariadb

その後、以下を実行

$ unset TMPDIR
$ mysql_install_db

MariaDBを起動

cd /usr/local/Cellar/mariadb/10.0.13 ; /usr/local/Cellar/mariadb/10.0.13/bin/mysqld_safe --datadir=/usr/local/var/mysql

別窓を開いて以下でログインできたらOK

mysql -uroot