Shinosaka.rb #11を開催したよーヘ(^o^)ノ

今年最後のShinosaka.rbを開催しましたー

DoorKeeper - Shinosaka.rb #11

みなさんのおかげで1年を通して開催することができました。

来年からShinosaka.rbはLTタイムをつくるよー

参加者のなぜ???やRubyに関する困りごとをLTしてもらって、みんなで解決していく感じです。

もちろんペアプロ大会なんかも開催する予定です。

さて、本日のテーマは「Rails 4 Patterns」でした。

スライドはこれ⇒Rails 4 Patterns

僕なりにRailsで開発するときの大事な部分を説明しました。

みんなの意見が聞けてとても勉強になったよ

スライドの最後にでてくる内部リンクのURLを生成するにはこんな感じです

post_path @post, anchor: "post_#{@post.id}"

@ogomrさんと@toshima66さんが発表してくれました

@ogomrさんはRails Tree Cheat Sheetについての発表

発表内容

発表後にShinosaka.rbでgemが誕生する瞬間をみた!⇒cassette-rack

僕も興味ある分野なので、一緒に開発できればと思っていますよ@ogomrさん!w

@toshima66さんはSVG(Scalable Vector Graphics)についての発表

発表内容
  • 画像ファイルだとでっかくすると粗くなるけど、SVGはそうならない
  • XMLなのでコードで書けるぜ! コードでアニメーションとかできるの良いわー.。oO(Shinosaka.rbのロゴつくろ)

初心者の方へのオススメRubyRails

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

Ruby on Rails 4 アプリケーションプログラミング

Ruby on Rails 4 アプリケーションプログラミング

そして勉強会より楽しいと噂の懇親会へw(またいっぱい呑んでしまった( ˘ω˘)

Rails Boysなーwww

今年はたくさんの方にお世話になりました。

みなさんが参加してくれるので、1年を通して開催することができました。

大変だったけど、みんなと月1回会えるのを楽しみにがんばれたー( ̆ω ̆≡ ̆ω ̆)

来年もShinosaka.rbを宜しくですヾ( ̄∇ ̄=ノ

Have a nice new year ٩( ‘ω’ )و

DXRubyでプロ生ちゃんを動かしてみたヘ(^o^)ノ

これはプロ生ちゃんAdvent Calendar 2014の18日目の記事ですヘ(^o^)ノ

プロ生ちゃんの素材DXRubyを使って、プロ生ちゃんを動かしてみます。

DXRubyとはゲーム開発初心者向けのDirectXライブラリ

注) 32bit版のRubyでのみ動作します

DirectXということは…そうWindows向けです

僕はMacなので、@wannabe53さんの"DXRuby を Wine から使う"を参考にインストールしました

DXRubyのAdvent Calendarはこっち⇒DXRuby Advent Calendar 2014

↓今回、利用したドット絵はこれ

f:id:murajun1978:20141218002911p:plain

動かしてみる

# pronama.rb
require 'dxruby'
require_relative 'animation' # sampleアプリから
# 画像をロード
image = Image.load_tiles('pronama_chan.png', 3, 4)
pronama_chan = AnimeSprite.new
pronama_chan.x = 0
pronama_chan.y = 0
# アニメーションの設定
pronama_chan.animation_image = image
pronama_chan.add_animation  :advance,    4, [1, 2]
pronama_chan.start_animation :advance

Window.loop do
  pronama_chan.update
  pronama_chan.draw

  # ESCで終了する
  break if Input.key_push?(K_ESCAPE)
end
$ ruby pronama.rb

f:id:murajun1978:20141218005103g:plain

動いてるヘ(^o^)ノ

簡単ですねー

それでは矢印キーで上下左右に動かしてみましょう

# pronama.rb
(...) 
  pronama_chan.add_animation   :retreat,    10, [10, 11]
  pronama_chan.add_animation   :move_left,  10, [4, 5]
  pronama_chan.add_animation   :move_right, 10, [7, 8]
  pronama_chan.start_animation :advance

Window.loop do
  # 下矢印キーで前進する
  if Input.key_push?(K_DOWN)
    pronama_chan.start_animation(:advance)
    pronama_chan.y += 5
  end

  # 上矢印キーで後退する
  if Input.key_push?(K_UP)
    pronama_chan.start_animation(:retreat)
    pronama_chan.y -= 5
  end

  # 左矢印キーで左へ
  if Input.key_push?(K_LEFT)
    pronama_chan.start_animation(:move_left)
    pronama_chan.x -= 5
  end

  # 右矢印キーで右へ
  if Input.key_push?(K_RIGHT)
    pronama_chan.start_animation(:move_right)
    pronama_chan.x += 5
  end

  pronama_chan.update
  pronama_chan.draw

  # ESCで終了する
  break if Input.key_push?(K_ESCAPE)
end

f:id:murajun1978:20141218011116g:plain

矢印キーを押すとプロ生ちゃんが動いてますヘ(^o^)ノ

どうですか?

簡単にRubyでサンプル作れちゃいましたねー

サンプルには実際のゲームなんかも同封されているので、興味のある方は是非!

Happy Hacking٩( ‘ω’ )و

サンプルコード => GitHub - pronama_game

d(゚Д゚ )☆スペシャルサンクス☆( ゚Д゚)b

Shinosaka.rb #10を開催したよーヘ(^o^)ノ #shinosakarb

f:id:murajun1978:20141126231819j:plain

Shinosaka.rb #10

今回のお題はLitaであそうぼうーです( ˘ω˘)

同じ日に第1回 Hubot×ChatOps勉強会が開催されていたので...

Hubot先生はJavaScript

仕事でも、ProductでなければRubyでがんばりたい!(開発環境とかチャットとか

LitaRubyってことは、そう既存のGemが使えるのだヘ(^o^)ノ

HipChatSlackとか使おうと思ったけど、今回はIdobataを使わせていただきました。

みなさんのまとめブログがすばらしい(オレもがんばる?

いや!ここはエコシステム方式で...

全然、適当じゃないw

勉強会のあとも触ってくれてるのうれしいヽ(´ー`)ノ

Kobe.rbでいつもお世話になってる@tanaka4410さん♪

GitHub - lita-sample

ボードと連携して、温度をタイマーでループさせて表示したり面白かった。

懇親会では、子供のような僕とOやんにボードについてやさしく教えてくれましたw

@meltediceさんは為替を表示するhandler作ってましたー

RubyMotionがちょっとお高いから、買い時を知らせてくれたら面白いねーって話してましたw

GitHub - lita-foreign-exchange

@honeniqさんはWikiから画像検索して表示するhandlerをつくってたよー

GitHub - lita-sample-photo

@kytiken_code さんはTwitterのタイムラインから画像検索して、ツイートするのを作ったみたい

GitHub - TwitMakichan

なぜ、まきちゃんなのかは触れないでおきましょうw

みんな楽しんでくれたみたいヘ(^o^)ノ

chat botは全然触る機会がなかったので、僕も楽しめた。

HipChatSlackなどと連携すると、もっと楽しくなる。

slackは独自ドメインが必要だったので、Shinosakarb.orgを取得して設定しているとこ。

メールサーバも立てる準備もしてるから、次回から使えるかもね。

Litaもたてて、みんなでどんどん拡張していくのも楽しそう。(HPだれか...w

次回は、今年最後のShinosaka.rb 12月20日(土)です。Shinosaka.rb #11

Rails4 Patternsについて盛り上がる予定です

Shinosaka.rbも今年1月から1年間続けることができました。(まだ、1回残ってるけど

今までたくさんの人が参加してくれました。

ホントに感謝です。ありがとーヘ(^o^)ノ

そして、これからも宜しくお願いします。

Happy Life Hacking With Ruby٩( ‘ω’ )و

追記

2014/11/27 slackの登録に独自ドメインは必要ないです><(あっても良いですが

Rails - touchオプションでupdated_atを更新するヘ(^o^)ノ

class Post < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :post
end
pry(main)> Post.find(1)
+----+-------------+------+-------------------------+-------------------------+
| id | title       | body | created_at              | updated_at              |
+----+-------------+------+-------------------------+-------------------------+
| 1  | sample post |      | 2014-11-21 13:54:14 UTC | 2014-11-21 13:54:14 UTC |
+----+-------------+------+-------------------------+-------------------------+

pry(main)> Post.find(1).comments.first.update(body: 'change comment')
pry(main)> Post.find(1)
+----+-------------+------+-------------------------+-------------------------+
| id | title       | body | created_at              | updated_at              |
+----+-------------+------+-------------------------+-------------------------+
| 1  | sample post |      | 2014-11-21 13:54:14 UTC | 2014-11-21 13:54:14 UTC |
+----+-------------+------+-------------------------+-------------------------+

commentを更新しても、Postのupdated_atは変更されないですよね?

では、touchオプションを指定してみましょう

class Comment < ActiveRecord::Base
  belongs_to :post,  touch: true
end

もう一度、commentを更新してみましょう

pry(main)> Post.find(1).comments.first.update(body: ' touch: true')
pry(main)> Post.find(1)
+----+-------------+------+-------------------------+-------------------------+
| id | title       | bosy | created_at              | updated_at              |
+----+-------------+------+-------------------------+-------------------------+
| 1  | sample post |      | 2014-11-21 13:54:14 UTC | 2014-11-21 14:05:16 UTC |
+----+-------------+------+-------------------------+-------------------------+

pry(main)> Post.find(1).comments.first
+----+-------------+-------------------------+-------------------------+---------+
| id | body        | created_at              | updated_at              | post_id |
+----+-------------+-------------------------+-------------------------+---------+
| 1  | touch: true | 2014-11-21 13:54:14 UTC | 2014-11-21 14:05:16 UTC | 1       |
+----+-------------+-------------------------+-------------------------+---------+

Postのupdated_atも更新されましたー

Viewでrender partialをキャッシュする場合とかに使えそうですね。

Happy Hacking٩( ‘ω’ )و

Railsでpostした時間を○○minutes agoみたいに表示するヘ(^o^)ノ

今日、Twitter@netwillnetさんと@chiastoliteさんのツイートをみてやってみた

Railsではtime_ago_in_wordsヘルパーが用意されています

でも、この子はリアルタイムで更新されない(当たり前

クライアントサイドで、リアルタイムに経過時間をとってきたいですよね?

jQueryプラグインtimeagoってのがあります

これを使ってみましょう

jsファイルを... ダウンロードせずにgemを探します

rails-timeago - GitHubを使ってみましょう

使い方はとっても簡単♪

# Gemfile
gem 'rails-timeago', '~> 2.0'

# app/assets/javascripts/application.js
//= require rails-timeago

# app/views/posts/index.html.haml
- @posts.each do |post|
  %tr
    %td= timeago_tag post.created_at, nojs: true, limit: 10.days.ago

しばらく何もせずに待っていると...

クライアントサイドで経過時間が更新されていると思いますヘ(^o^)ノ

これでタイムラインの経過時間がリアルタイムに更新されますねー

Happy Hacking٩( ‘ω’ )و

Railsでデータを登録後にメールを送信ヘ(^o^)ノ

Railsでユーザ登録後にメール送信することはよくあります。

今日、その部分を見てて気になったのでメモ程度に

もともとはこんな感じのコードやった

# app/controllers/user.rb
def create
    @user = Post.new(user_params)
    @user.save

    UserMailer.wellcome_email(@user).deliver
    respond_with(@user)
end

別に問題ないのですが...

気になったのはココ⇒UserMailer.wellcome_email(@user).deliver

なので、リファクタリングしてみました。

# app/models/user.rb
after_create :send_wellcome_email

private
  def send_wellcome_email
    UserMailer.wellcome_email(self).deliver
  end
# app/controllers/user.rb
def create
    @user = Post.new(user_params)
    @user.save
    respond_with(@user)
end

callbackはコードの見通しを良くしてくれますね

メール送信をモデルのafter_createに書くか、コントローラーのaround_actionに書くか迷った

なんかメール送信をモデルに書くの違和感ある...( ̄▽ ̄;)

やっぱ、around_actionかなー

Happy Hacking٩( ‘ω’ )و

RubyWorld Conference day 1 ヘ(^o^)ノ

RubyWorld Conference 2014に参加してきましたー

前日に松江入りヘ(^o^)ノ

錦織 圭も帰国して食べたい!と言っていたのどぐろー f:id:murajun1978:20141113234633j:plain

day 1

ホテルを出て、「さむーっ」(((((((( ;゚Д゚))))))))

Matzの基調講演

Rubyが教えてくれたこと f:id:murajun1978:20141113235044j:plain

毎年、Matzの基調講演は楽しみにしている

上司に承認を求めていれば、Rubyは誕生していなかった

とりあえずやってみて、できたらこんなの作ってみましたーと

ヤル前に上司に許可をとると、大抵の人はNoと言う(立場上言わざる得ない

よって、承認はイノベーションを阻害してしまう

イデアそのものには価値はない

イデアが浮かんだだけでは何も生まれないし、世界も換えられない

でも、形になっていくにつれて価値が生まれる(かもしれない

あきらめちゃダメだー

色々と辛いこともあるし、困難な時もある

あきらめたらそこでおしまい

問題が発生したときには謝ろう

何もなければ黙っておこうw

変化を恐れちゃダメだ

バージョンを固定しておけば、安定性は増す

けれど、それでは進化できない

たとえ、コストがかかっても進化を選択するべき

Be great Amature 凄いアマチュアになろう

そして、すごい未来を築こう

@iR3さんのツイートを拝借...

Ruby処理系の性能計測調査報告とその考察

CRuby、JRubyでPassenger、Warbler、Pumaのベンチマーク比較

Unicornはなかった

噂のRaptorもちらっとでてきましたー

Rubyを使った分散全文検索ミドルウェア

楽天Rubyベース分散型KVS “ROMA”への取り組み-GUIで変わるKey-Value Storeの提案

ROMAとROMAのGUIツールGladiatorの紹介

ぼくたち、Rubyプログラミング少年団! ~小学生からはじめるRubyプログラミング~

Smalrubyのブロック <=> Rubyコードがめっちゃ良いー

私たちの会社を「開発」する ~Company Hacking Guide

会社をハックすするお話

GitHubのissueで管理(メールのやりとりや、忘年会もwww

Ruby Prize 2014 表彰式

またまた@iR3さんのツイートを拝借...

@hsbtさんおめでとうございますヾ( ̄∇ ̄=ノ

明日も楽しみだー٩( ‘ω’ )و

RubyWorld Conference 2014 1日目のまとめ

追記


2014/11/15

  • @hsbtさんのスライドを追加

  • RubyWorld Conference 2014 1日目のtogetterへのリンクを追加