時間を表示する時に、rails標準の〜日前とかではなく、現在時刻を基準に
5月2日 # 同じ年だったら
2日 # 月まで同じだったら
10時20分 # 日まで同じだったら
20分 # 時間まで同じだったら
という感じでコンパクトに表示したいという要件があったのでgemにしました。
時間を表示する時に、rails標準の〜日前とかではなく、現在時刻を基準に
5月2日 # 同じ年だったら
2日 # 月まで同じだったら
10時20分 # 日まで同じだったら
20分 # 時間まで同じだったら
という感じでコンパクトに表示したいという要件があったのでgemにしました。
ActiveRecordのデフォルトではORDER BY区は省略されてるので、「ポスグレでデフォルトの並びってどうなってるんだろう?」と思って調べました。
SELECT - PostgreSQL 9.3.2文書ORDER BYが指定されない場合は、システムが計算過程で見つけた順番で行が返されます
(略)
ORDER BY句を使うと、結果行を指定した式(複数可)に従ってソートすることができます。 最も左側の式を使って比較した結果、2つの行が等しいと判断された場合は、1つ右側の式を使って比較します。その結果も等しければ、さらに次の式に進みます。 指定した全ての式で等しいと判断された場合は、実装に依存した順番で返されます。
なんとなくINSERT順で出るのでは?と思ってましたが、実装依存なようなので、並びに意味がある箇所では必ず明示的に指定したほうが良さそうです。
SQL92や99、MySQLやSQLiteではどうなってるんだろう?
default_scopeでid ascとかにしとくべきか?でもARのdefault_scopeってバグを踏みやすい勝手な印象が付いてしまっていて過信するのもためらわれる…。
弊社インターンの @odailly_jp さんのお陰でLingrにHubotが設置され、従来のLingr Github Botではできなかったコメントの通知が来るようになった。(IssuesやPRのコメントを拾ってくれるPluginを作ってくれたので。)
odaillyjp/hubot-github-comments-notifier
便利ー!
第二世代?のエラートラッキングサービスrollbarを設定してて気付いたんですが、EngineYardCloudのAddonsのページが新しくなってて、新しい方にはrollbarが入ってる。
Instructionsのページの設定だけだとデプロイ通知はやってくれないっぽいのでdeploy hooksで送るように追記してみました。
# deploy/after_restart.rb:
require 'rubygems'
require 'bundler/setup'
require 'net/https'
on_app_master do
rollbar_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
uri = URI('https://api.rollbar.com/api/1/deploy/')
Net::HTTP.post_form(uri, 'access_token' => rollbar_token,
'environment' => config.framework_env,
'revision' => config.revision,
'local_username' => 'deploy')
end
OK。
EngineYardCloudのdeploy hooksを使ってLingrに通知してますが、怖話っぽくしてみました。
Engine Yard Cloudでデプロイした時Lingrに通知する - komagata
WebPayはrubyistにとっては課金が糞楽になるので便利。
特に便利なのがCheckoutHelpertというやつで、カード入力フォームがJSを一個読み込むだけでできる。
しかもこいつはクライアント上のjsがwebpayと直接やりとりするのでカード情報が一切サーバーに来ないという優れもの。(代わりにwebpay上にある顧客情報に紐づくトークンを得る)
しかし、お客さんから「サイトの見た目とトンマナを合わせて欲しい」という要望が。まあ当たり前の要望だと思う。俺も思うもん。
CheckoutHelperは表示するためのボタンがあってそれをクリックしてはじめて上記のオーバーレイ付きのフォームが出る。場所も固定だ。そしてDOM Elementとしてもbodyの一番したにある。
そこでjsでボタンをクリックしてこの#webpay-checkoutのElementをrailsのフォームの中に移動してみた。
$('#WP_checkoutBox input[type=button]').click();
$('#webpay-checkout').appendTo('#new_card')
こうした上でCSSでposition: absolute
やら何やらを切ってやれば普通のフォームに見えるかも。
こういう見た目のカスタマイズがやりやすいようになってると嬉しいな。
上記のCheckoutHelperのフォームはonsubmit
イベントが呼ばれない。(ブラウザによる?)フックしたい時にちょっと不便だった。CheckoutHelperのソース読んだが、生jsのsubmitしてるだけなのでそうなってるんだとおもう。
jQueryはどのブラウザでもonsubmitが呼ばれるようになってたと思う。これ呼んでほしいな。
内部ツール(僕らでいえば256interns.comとか)は管理画面作らずGUIアプリで変更とか結構便利です。とはいえ、railsなどのアプリ側のみでvalidationしてると不整合が起きるので要注意。これ前提で制約追加するのもいいかも?
MySQLのGUIクライアント。これを教えてもらって訝しげに使ってみたんですが、今風のMacの使い勝手で使えるのがすごく気に入っちゃいました。
SSL経由やsshで入ったサーバー踏み台にしての接続も一発できて便利。
PostgreSQLのGUIクライアント。Sequel Proに比べると使い勝手は良くないけど、HerokuのDBに接続できる!これがデカイ。
接続先のブクマを5個以上保存しておくにはLisenceを買う必要があります。Herokuを多用するから5個あっという間に超えちゃうので買いました。
SQLite3のGUIクライアント。これはあんまり使ってないかも。Railsを初めて勉強する人はmigrateとかコマンドを発行するたびに何が起こってるのかイメージし辛いのでこれを見ながらやると理解し易いかもです。
MS Accessのmdbファイルが開けるGUIクライアント。App Storeで500円だけどトライアル期間があるのでこの1ファイルからをどうにかデータを救い出したいという場合はいいかも。僕の場合は2003年に作ったmdbファイルが発掘されて、これを使ったらデータが救出できたのでとても助かりました。
よくある「住所(カナ)」欄の正しいValidationがわからない。
住所:本町1-36-9 住所(カナ):ホンマチ1-36-9
みたいなやつのこと。
日本語の住所には色々な読み方のあるものがあるので、何て発音していいのかを示すためにあるのだと思う。(上記の例もホンマチなのかホンチョウなのか本町だけではわからない)
郵便などは典型だろう。読み書きができない人ばかりの村があったら発音が違うとハガキが届かないかもしれない。実際に役所系の書類にはカナが必要な物が多い。
NG: ホンマチ1-36-9 OK: ホンマチイチノサンジュウロクノキュウ
本当にカナだけならこうでなければいけないはずだが、こういうフォームは見たことがない。
数字は発音間違いしようがないので(実際は色んな発音があるが、少ない全てのパターンを皆が認識しているので実害はない)本来の目的からすれば数字の発音をカナに展開する必要は無い。
しかし、カナ・数字・ハイフンを許可する正規表現でValidationするのは何か負けた気がする。
住所の表記ゆれや住所の分割方法という問題も別にあるが、カナに関してはどういうのが一番良いのだろう?ご意見をお持ちの方はコメント欄や@komagataのTwitterなどに教えていただけるとありがたいです。正解が見つかったら共有していきたいと思います。
I bought a monitor arm the other day.
It is smart although it was cheap for 3980 yen. I connected it to the my 22-inch display.
Oh crap. This falls of itself!
ActionMailerでマルチバイトのメールを送る時下記のように三行書く。
mail = NoticeMailer.charging(user, charge)
mail.transport_encoding = '8bit'
mail.deliver
プロジェクトの中にはNoticeMailer.posted_questionとかいくつかあるし、他のmethod
でも他のMailerクラス
でも一行で書きたいんだけどどのファイルにどう書くのがキレイかなあ?
追記:
tkawaさんのコメントを受けて実装された。
NoticeMailer.charging(user, charge).deliver