こんにちは! 今までまっさらな状態からdeviseを入れることが多かったのですが、既存のプロジェクトかつtableにusersがある、という状態で何をすればdeviseを追加出来るのか、を調べたのでご確認ください!
こんにちは! 今までまっさらな状態からdeviseを入れることが多かったのですが、既存のプロジェクトかつtableにusersがある、という状態で何をすればdeviseを追加出来るのか、を調べたのでご確認ください!
ついにSampleAppが動きました・・・やったー! てことで何をしたかを書いていきます。 以下の記事の完結編になります。
意外と単純なことだったのですが、なぜ動くのかは現状わかっていませんw
VuforiaSDKのSDK-PATH/build/lib/armeabi-v7a/libVuforia.soというファイルがあります。 これをSampleApp内のsrc/main/以下に設置すれば完了です!
以下の画像のような形で設置します。 VuforiaSDKのlib以下のコピーしてきて、libというフォルダ名をjniLibsという風に変えればOKです。
これでandroidを再ビルドすれば一番上の画像のように動くようになりました! やっと!やっと!!
Android色々楽しいですが、なかなか難しいですね。 まだ始めて少ししか経っていないのでなぜこれで動くのか全容がつかめてないですが少しずつ掴んでいければと思います。
以下の通りにやればよかっただけの話でした。くー! Vuforia + AndroidStudio ARのサンプルを動かしてみた
みなさんこんにちは! Railsで僕がよく使うimpressionistというRailsのGemがあるのですが、それを用いてランキング機能を作りたい!と思ったので共有します。 一参考になればいいなぁと思います。
ひとまずコードです。
# return [ #, # , ....] def daily_article_ranking ids = Impression.where("created_at >= ?", Time.now.yesterday).where("created_at ids).order("field(id, #{ids.join(',')})") end
設定としてはArticle modelが存在していて、そのPVを取得している、という状況を考えています。 また、現在から考えて1日の間のrankingなのでもし◯日のランキングを作る、とかそういう場合は適宜変えていただければ、と。 これを適切なhelperに入れてもらえれば便利かと思います。
以下解説です。 まずはimpressionテーブルから必要なデータを抜き出し、グループ化してカウントし、Article idを10件ほど取得します。 そのときに参考にさせていただいた記事は以下になります。 Rails で group by して count を取りたい時のイディオム
そしてそのidsを元にidsの配列に入っているid順にArticle modelからデータを引っ張ってきます。 そのときに参考にさせていただいたのは以下の記事(英語) Finding an array of ids while keeping the order with Rails 今回例としてあげたコードはMySQLをデータベースとして考えているのですが、こちらの記事内でMySQL以外のデータベースの場合、という風にコードが示してあるのでそれを参考に書き換えていただければ動くのではないかと思います。
こんな感じでランキングをイメージしたデータを返すことが出来るようになりました! これをもとにviewを調整していただければランキングの完成です!!
Impressionist Gem便利ですね。
みなさんこんにちは! 以前の記事の続きになります。
以前の記事で無事build出来るようになったわけですが、正常に動きません。 おそらくLicense Keyを入れてないからじゃないか、と思ったのでLisence Keyを入れる場所を調べてみると、公式にありました!何も問題なかった!
公式によるとcom.qualcomm.vuforia.samples.SampleApplicationのSampleApplicationSession.java:336に書けばよいといいことらしいので書きましょう!
private class InitVuforiaTask extends AsyncTask
{
// Initialize with invalid value:
private int mProgressValue = -1;
protected Boolean doInBackground(Void... params)
{
// Prevent the onDestroy() method to overlap with initialization:
synchronized (mShutdownLock)
{
Vuforia.setInitParameters(mActivity, mVuforiaFlags, " your_license_key ");
do
{
// Vuforia.init() blocks until an initialization step is
// complete, then it proceeds to the next step and reports
// progress in percents (0 ... 100%).
// If Vuforia.init() returns -1, it indicates an error.
// Initialization is done when progress has reached 100%.
mProgressValue = Vuforia.init();
// Publish the progress value:
publishProgress(mProgressValue);
// We check whether the task has been canceled in the
// meantime (by calling AsyncTask.cancel(true)).
// and bail out if it has, thus stopping this thread.
// This is necessary as the AsyncTask will run to completion
// regardless of the status of the component that
// started is.
} while (!isCancelled() && mProgressValue >= 0
&& mProgressValue 0);
}
}
やった!これで動くだろう!と思ってわくわくして待ってたのですが、USBでつないで動かしてみると以下のエラーが(´・ω・`)
s3dReadConfigFileってやつの75行目でエラーが出てるのはわかるのですが・・・ もう少しsample appを動かすまでの旅は続きそうです。
ついに動きました!色々ありがとうございました!
みなさんこんにちは。 ARアプリを作りたい!と思ってAndroidでVuforiaというライブラリを使ってみてSampleをとりあえずBuildが通るまでやれたので共有しようと思います。 一応動くのですが、まだkeyをどこに入れたら動くのかわかってないので実際にARを体験出来るとこまではいけてません(笑)
それでもひとまず初心者がBuildが出来るまで!ってことで! AndroidStudio 1.3.2 です。
VuforiaからSDKやSampleをダウンロードしてくるためにはVuforiaに会員登録をしなければならないのでまず会員登録しましょう。 わかるとは思いますがこちらのページから「Register」の部分をクリックして情報を入力しましょう
Vuforiaに無事登録が済み、ログイン出来るようになったらログインした状態で、Downloadページにいきましょう。 SDK、Sampleともにダウンロードしたら準備は完了です^^(もちろんAndroid Studioは入れておいてくださいねw)
次はBuildエラーが出ないように調整しましょう。 まずは両方解凍し、自分の好きなフォルダに移動させてください。 そしてVuforiaSDKのフォルダ内にsamplesというフォルダがあるのでそのフォルダ内にVuforiaSamplesを移動させてください。
次にAndroidStudioを起動します。 起動すると以下のスターター画面が立ち上がるので「Import Project」をクリックしてVuforiaSamplesを選択しましょう!
Importしたら画面が立ち上がるので「Next」を2回選択。
次にVuforia.jarの場所を指定してあげないといけません。
おそらく以下の画面が立ち上がるので右側のボタンをクリックして好きな場所に移動させたVuforiaSDKのVuforiaSDK-PATH/build/java/vuforia/を指定します。
指定したら下側のclick to editと書いてある部分をクリックしてVuforia.jarのパスを指定します。 Vuforia.jarは、上記で指定したVuforiaSDK-PATH/build/java/vuforia/Vuforia.jarがあるはずなのでそれをフルパスで入力します。 以下の画像のようになったら完了ボタンを押しましょう
それが終われば無事、ElicpseのプロジェクトがAndroidStudioのプロジェクトに変換されます! 最後にVuforiaSDKの依存関係を定義して終わりです!
AndroidStudioの左メニューに出るappを右クリックしてOpen Module Settingsを選択します。
Dependenciesタブの左下の「+」ボタンをクリックして、2 File dependencyを開きます。
最後にsrc/mainの下にあるVuforia.jarを選択してOK、OK!!
これでBuildが正常に動くはずです!お疲れ様です!実機に入れてみるなりエミュレーターで動かすなりしてみてください!
正しい方法かはわかりませんがこれでBuild成功しました! やったー!
ただしまだAR体験出来てないのでVuforiaのkeyを入力する場所を探す旅です。 他にいいやり方あるよーとかどこにkey入れるんだよーとか知ってる方いれば教えてください! key入れるとこわかったらまた更新します!
key入れる場所書きました!
やっと動きました!
みなさんこんにちは! 今回はRails4でTwitterのタイムライン上で実装されている◯秒前とか◯分前とか表示されるやつを実装してみたいと思います!
Rails4ではDateHelperに実装されているtime_ago_in_wordsというメソッドを使えばTwitterにある◯秒前というのを実装することが出来ます!簡単!!
ただしこのメソッドを使って日本語で表示しようと思った場合はi18n対応してあげないといけません。
具体的にはまずconfig/application.rb内にある以下のコードをjaに設定しましょう
config.i18n.default_locale = :ja
そしてこちらのファイルをコピペしてconfig/locale/ja.ymlとして保存しましょう。
ja.ymlの内容は以下の通りです
ja:
date:
abbr_day_names:
- 日
- 月
- 火
- 水
- 木
- 金
- 土
abbr_month_names:
-
- 1月
- 2月
- 3月
- 4月
- 5月
- 6月
- 7月
- 8月
- 9月
- 10月
- 11月
- 12月
day_names:
- 日曜日
- 月曜日
- 火曜日
- 水曜日
- 木曜日
- 金曜日
- 土曜日
formats:
default: "%Y/%m/%d"
long: "%Y年%m月%d日(%a)"
short: "%m/%d"
month_names:
-
- 1月
- 2月
- 3月
- 4月
- 5月
- 6月
- 7月
- 8月
- 9月
- 10月
- 11月
- 12月
order:
- :year
- :month
- :day
datetime:
distance_in_words:
about_x_hours:
one: 約1時間
other: 約%{count}時間
about_x_months:
one: 約1ヶ月
other: 約%{count}ヶ月
about_x_years:
one: 約1年
other: 約%{count}年
almost_x_years:
one: 1年弱
other: "%{count}年弱"
half_a_minute: 30秒前後
less_than_x_minutes:
one: 1分以内
other: "%{count}分未満"
less_than_x_seconds:
one: 1秒以内
other: "%{count}秒未満"
over_x_years:
one: 1年以上
other: "%{count}年以上"
x_days:
one: 1日
other: "%{count}日"
x_minutes:
one: 1分
other: "%{count}分"
x_months:
one: 1ヶ月
other: "%{count}ヶ月"
x_seconds:
one: 1秒
other: "%{count}秒"
prompts:
day: 日
hour: 時
minute: 分
month: 月
second: 秒
year: 年
errors:
format: "%{attribute}%{message}"
messages:
accepted: を受諾してください
blank: を入力してください
present: は入力しないでください
confirmation: と%{attribute}の入力が一致しません
empty: を入力してください
equal_to: は%{count}にしてください
even: は偶数にしてください
exclusion: は予約されています
greater_than: は%{count}より大きい値にしてください
greater_than_or_equal_to: は%{count}以上の値にしてください
inclusion: は一覧にありません
invalid: は不正な値です
less_than: は%{count}より小さい値にしてください
less_than_or_equal_to: は%{count}以下の値にしてください
not_a_number: は数値で入力してください
not_an_integer: は整数で入力してください
odd: は奇数にしてください
record_invalid: バリデーションに失敗しました %{errors}
restrict_dependent_destroy: "%{record}が存在しているので削除できません"
taken: はすでに存在します
too_long: は%{count}文字以内で入力してください
too_short: は%{count}文字以上で入力してください
wrong_length: は%{count}文字で入力してください
other_than: は%{count}以外の値にしてください
template:
body: 次の項目を確認してください
header:
one: "%{model}にエラーが発生しました"
other: "%{model}に%{count}個のエラーが発生しました"
helpers:
select:
prompt: 選択してください
submit:
create: 登録する
submit: 保存する
update: 更新する
number:
currency:
format:
delimiter: ","
format: "%n%u"
precision: 0
separator: "."
significant: false
strip_insignificant_zeros: false
unit: 円
format:
delimiter: ","
precision: 3
separator: "."
significant: false
strip_insignificant_zeros: false
human:
decimal_units:
format: "%n %u"
units:
billion: 十億
million: 百万
quadrillion: 千兆
thousand: 千
trillion: 兆
unit: ''
format:
delimiter: ''
precision: 3
significant: true
strip_insignificant_zeros: true
storage_units:
format: "%n%u"
units:
byte: バイト
gb: ギガバイト
kb: キロバイト
mb: メガバイト
tb: テラバイト
percentage:
format:
delimiter: ''
format: "%n%"
precision:
format:
delimiter: ''
support:
array:
last_word_connector: と
two_words_connector: と
words_connector: と
time:
am: 午前
formats:
default: "%Y/%m/%d %H:%M:%S"
long: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
short: "%y/%m/%d %H:%M"
pm: 午後
これで日本語化することが出来ました! 簡単に実装出来てRailsは楽しいですね!
みなさんこんにちは!
今回はRails4+Unicorn+Nginx環境で「Error with Maximum file multiparts in content reached」というエラーがログに出ていたときの対処法を書きます!
このエラーの内容としては「ファイルアップ上限達してるよふぇぇえ」って感じなのでその制限を取っ払うなり上限アップするなりして対処しましょう!
解決方法はこちらにあるように
config/multipart_part_limit.rb というファイルを作ってその中に
Rack::Utils.multipart_part_limit = 0
と書くことで上限が取っ払われます。
ただこうすることで大量のファイルを1度にアップされると次のページに遷移するのに時間がかかってしまうため、それ用に対策を打つ必要が別途ありそうです。
また、ENV[‘RACK_MULTIPART_PART_LIMIT’] の設定が優先されるそうなのでunicornのタスクの中で指定等してあげるとファイルで指定せずとも設定出来るそうです。
みなさんこんにちは! Rails4で例えばViewファイルのメニューで、あ、このURLのときはここにclass追加したいな、とか表示変えたいな!っていうことが少なからずあると思います!いやある!
そんなときにどうすればいいのかを軽く紹介します!
そんなときはURLHelperとして実装されているcurrent_page?メソッドを使いましょう!
使い方は簡単!
current_page?(root_path)
// root_pathかどうか判定
current_page?(controller: 'posts', action: 'index')
// controller, actionで判定
current_page?('http://google.com')
// 文字列で判定
こんな感じで判定出来ます!直感的ですね!

photo credit: Hauptbahnhof, Central Train Station, Hamburg – Train Lines via photopin (license)
こんにちは!
長い文字を切り取って「…」を付けたくなるとき、いっぱいありますよね! 今回はRailsでそれをやる方法を紹介します!
ActiveSupportでStringクラスにtruncateメソッドが追加されています。 ここで注意してほしいのは、”たーんけーと”じゃなく、”とらんけーと”だということ。 10分くらい、なんで動かないんだろう????(゜∀゜)ってなったのは僕だけですか?
separatorを指定するとキリのいい所で文章を切ってくれる omissionを指定すると「…」以外を文章の後ろに追加することが出来る
"This is a test case.".truncate(10) # => "This is a ..." "This is a test case.".truncate(10, separate: ' ') # => "This is a ..." "This is a test case.".truncate(10, omission: '...continued') # => "This is a ...continued"
これで完璧! 最近はCSS3のtext-overflowプロパティでも実装出来るけど、どうなんだろう。 CanIUseを見る限りは97%以上は使えるぽいからそろそろCSSで実装してもいいのかな。
またhelperとしても提供されているので以下のようにしてもOK
# defaultだと30文字で切り取られる # => "This is a test case...." # 文字数の指定をする場合 # => "This is a ..." # separator指定 # => "This is a test case...." # omission指定 # => "This is a ...continued"
Rails楽しい!!
・API RubyOnRails Document – truncate ・ActiveSupoprt API RubyOnRails Document – truncate
photo credit: Gerbera via photopin (license)
みなさんこんにちは! 最近はRails4に夢中の@DAI199です。
今日はRailsを運用する中で、どんどん大きくなるログファイルってどうしたらいいんだろう?と思って調べたので記事書きます!
今回の環境は
で動作確認しています。
どんどん大きくなるログファイル。圧迫される容量。 初期の無用なデータ。 これらをある程度消去していったりして管理したいですよね。
これを解決するために、「ログローテーション」という方法で解決することが出来ます。 もちろんフルスタックのRailsなので、ログローテーションを設定することが出来ます!
それではログローテーションを設定しましょう。
内容はとても簡単で、もしproduction環境において反映させたい場合は
#{Rails.root}/config/environments/production.rb
config.logger = Logger.new("log/production.log", 5, 10 * 1024 * 1024)
上記のように設定すると、10MBのログファイルが出来たら、production.log.0、production.log.1のように5つまでファイルを作成してくれる模様。 5ファイルを超えたら勝手に削除してくれます。便利!!
というときは下記のように設定しましょう。
#{Rails.root}/config/environments/production.rb
config.logger = Logger.new("log/production.log", 'daily')
config.logger = Logger.new("log/production.log", 'weekly')
config.logger = Logger.new("log/production.log", 'monthly')
こうやって設定するとproduction.log.20150803 のようにわけて保存してくれます!これまた便利!
実際に運用し始めると予想外の所で詰まったりして色々大変ですが、だからこそ楽しかったりしますよねw これからもRailsさんお世話になりますー((´^ω^))