脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Ruby World Conferenceに登壇してきました

もうすぐ2015年度Ruby World Conferenceが開催されるので、その前に2014のレポートを書いておきたいと思います。

Ruby World Conference 2014

RubyWorld Conference

Conference info

場所

f:id:portaltan:20151009175548p:plain

参加者

来場者
  • 2 日間延べ 876 名(11 月13 日 495 名、11 月14 日 381 名)
  • 来場実数 658 名(県内 216 名、県外 433 名、海外9 名)
    • IT 企業関係者 447 名(県内108 名、県外334 名、海外5 名)
    • その他企業関係者 35 名(県内17 名、県外16 名、海外2 名)
    • 行政関係者 17 名(県内0 名、県外17 名)
    • 研究教育機関関係者 113 名(県内104 名、県外9 名)
    • 一般(所属なし) 26 名(県内8 名、県外18 名)
    • 講演者 20 名(県内7 名、県外11 名、海外2 名)※Ruby Prize 含む
講演者
  • 国内18 名(企業関係者16 名、教育機関関係者1 名、行政機関関係者1 名)
  • 海外 2 名(アメリカ2 名 うち企業関係者1 名)

f:id:portaltan:20151009170827j:plain

ウェルカムパーティ

登壇者に選んでいただけると、前日に発表者やスポンサーの方々の交流会に呼んでいただけます。
すごい豪華でした。

カンファレンスの雰囲気

参加者の方みなさんとても優しく、ネタを言っても結構笑ってくれます。
あと自分の一個前の発表がクリアコードの須藤さんだったのですが、須藤さんが発表前にプルリクを下さったり、ご自身のプレゼンの中でも名前を出していただけました。
(実は私は発表の準備で前半しか聞けませんでしたが、)ありがとうございましたmm

感想

国内のRuby conferenceで海外にも有名なのはRuby kaigiとこのRuby world conferenceがと思いますが、こちらも海外の方は結構いました。
今年はCFP出さなかったのですが、もし行けそうであれば話を聞きに行きたいです。

Ruby motionの導入方法

環境

インストール

1. Ruby motionのインストール

以下のリンクからRuby motionの利用登録を行います。
登録すると入力したemailアドレスにダウンロードリンクとライセンスキーが送られてくるので、それをインストールします。
(今回はStarterを選択)
Download | RubyMotion
f:id:portaltan:20151006104732p:plain

  • 通常は/usr/bin/motionにインストールされています
2. Xcodeのインストール

以下のリンクからXCodeをダウンロードしてインストールします。
(今回は7.0を選択しました)
Xcode - ダウンロード - Apple Developer

3. ruby motion projectの作成
cd ~
motion create HelloMotion
cd HelloMotion
rake
4. 確認
$ rake
Build ./build/iPhoneSimulator-9.0-Development
Create ./build/iPhoneSimulator-9.0-Development/HelloMotion.app/Info.plist
Simulate ./build/iPhoneSimulator-9.0-Development/HelloMotion.app
*** Starting simulator
(main)> 
  • rake コマンドでシミュレーターを起動する
  • 成功すれば起動画面が出た後にアプリの画面が表示される

f:id:portaltan:20151006193824p:plain
f:id:portaltan:20151006193917p:plain

5. 終了
(main)> exit
  • exitコマンドで終了
  • 終了後はシミュレーターのRubymotionの自動で終了される

f:id:portaltan:20151006194031p:plain

動かない場合は

まずはSDKの確認

xcodebuild -showsdks
OS X SDKs:
	OS X 10.9                     	-sdk macosx10.9
	OS X 10.10                    	-sdk macosx10.10

iOS SDKs:
	iOS 8.4                       	-sdk iphoneos8.4

iOS Simulator SDKs:
	Simulator - iOS 8.4           	-sdk iphonesimulator8.4
ls -la /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
ls -la /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs

ERROR! The requested deployment target SDK is not available or supported by RubyMotion at this time.

command line toolsが入っていないかも
Ruby motionで使用するcommand line toolsをダウンロードします。
以下のPageで検索し、対応のライブラリをダウンロードしてインストール。
(今回はCommand Line Tools(OSX 10.10) for Xcode 6.4)
https://developer.apple.com/downloads/

SDKのversionを指定してみる

vi Rakefile
  # 以下を追加
  app.deployment_target = '8.4'

ERROR! You are using RubyMotion Starter. Only iOS 9.0 is supported in this release. If you would like to target older or newer (in beta) versions of iOS you can purchase a paid subscription.

  • Starterパッケージを使っている場合はversionの制限があるので以下のようにSDKのversionを宣言する
vi Rakefile
  # 以下を追加
  app.sdk_version = '9.0'
  app.deployment_target = '9.0'

ERROR! Can't locate iPhoneSimulator SDK 9.0 at `/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk'

上で指定したversionのiPhoneSimulator SDKがないと言われているのでそれをインストールする

最終的に動いた環境

$ xcodebuild -showsdks
OS X SDKs:
	OS X 10.11                    	-sdk macosx10.11

iOS SDKs:
	iOS 9.0                       	-sdk iphoneos9.0

iOS Simulator SDKs:
	Simulator - iOS 9.0           	-sdk iphonesimulator9.0

watchOS SDKs:
	watchOS 2.0                   	-sdk watchos2.0

watchOS Simulator SDKs:
	Simulator - watchOS 2.0       	-sdk watchsimulator2.0

AWSにGladiatorをinstallしてみた

AWSにROMA(Ruby On Memory Architecture)のGUI toolであるGladiatorをinstallしてみた

準備

  • ROMAのインストールと起動

portaltan.hatenablog.com

    • ROMA側のmkconfigの途中でplugin選択があるが、そこで'config_gui.rb'を選択しておく
    • ストレージとしてTokyoCabinet, Groonga, Memeoryを選べるが今回はTokyocabinetを利用
  • rubyのインストール

手順

1. gladiatorのダウンロード
wget https://github.com/roma/gladiator/archive/v1.2.0.tar.gz -O gladiator.tar.gz
tar xvfz gladiator.tar.gz
cd gladiator-1.2.0
2. gemのinstall
sudo bundle install
  • railsやその他のライブラリがinstallされる
3. Configファイル設定

ROMAの情報

bin/set_roma_info
  Please input roma host info(ip or hostname)
  > 54.199.127.181

  Pleasese input ROMA 1 port No.
  > 10001

  Would this be OK?(y/n)
  > y

  ADDED
        HOST => '54.199.127.181'
        PORT => '10001'
  • 生きているnodeのどれか一つを指定すればよい

アカウント設定

$ bin/add_user
 Please input user name
 > nouziru

 Pleasese input password
 > foobar

 [Optional]
 Please input Gravatar email address.
 (If you don not need this process, please push enter with brank.)> 

 Which mode do you want to add this user?
 (some functions are restricted to root user only)[1] root user
 [2] normal user
 > 1

  ==============================================
  user name  : nouziru
  password   : ******
  email      :
  role       : root
  ==============================================
  Would this be OK?(y/n)
  > y

  ADDED
        {:username => 'nouziru', :password => '******', :email => '' }
  • ログイン用のアカウント登録
  • emailアドレスはGravatarに使うだけなので今回はSkip
  • normalユーザは機能が制限されるのでrootユーザで登録
4. 起動
rails s -d
=> Booting WEBrick
=> Rails 4.0.2 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
  • 試しなのでweblickで起動
5. アクセス

http://${your host}:3000へアクセスするとログイン画面が表示されました
f:id:portaltan:20151002140522p:plain

6. ログイン

usernameとpasswordを入力してログインするとclusterのステータスを表示する画面が表示されました。
f:id:portaltan:20151002141141p:plain

使ってみた

Routing page

f:id:portaltan:20151002141251p:plain

Log page

f:id:portaltan:20151002141430p:plain

Connection Graph page

f:id:portaltan:20151002141919p:plain

Cluster画面

1node落として、recoverボタン押してみた

  • (recoverは冗長度低下時の冗長度復帰機能)

f:id:portaltan:20151002142152p:plain

Reference

インストール手順&資料
ROMA Key Value Store (KVS) - Open Source Project

RedDotRuby Conf2015に登壇してきました

taiwanのレポートを書いたついでにsingapoleのRedDotRuby confも思い出に書いておきたいと思います。

Conference

シンガポールで行われたRedDotRubyConf 2015にLTとして参加してきました。www.reddotrubyconf.com

photos

会場

f:id:portaltan:20150925170811j:plain

ボード

f:id:portaltan:20150925171426j:plain

参加者

f:id:portaltan:20150925170857j:plain

発表者達

f:id:portaltan:20150925171446j:plain
f:id:portaltan:20150925170925j:plain

頂いたTシャツ

f:id:portaltan:20150925170945j:plain

Speaker懇親会

f:id:portaltan:20150925171530j:plain

全体打ち上げ

f:id:portaltan:20150925171541j:plain

雰囲気とか

今まで参加したカンファレンスの中でスタッフさんが抜群に優しかった。
どのカンファレンスももちろん優しいんだけど、RedDotRubyはホスピタリティというかなんというかすごかった。
なんか親身に色々気にかけてくれるし、困ったことがあって相談するとすぐに助けてくれる。
カンファレンス全体の雰囲気もいいし、懇親会含めてPartyが楽しくて一番多くの人と話せたのもこのカンファレンスでした。
来年もいきたい・・

最後に・・・(マーライオン&マリーナベイサンズ)

f:id:portaltan:20150925171506j:plain


(Ruby World Conference 2014(松江)は今年の開催前には写真とかあげたい・・・)

Rubyでコンソール上の文字をクリアする方法

Linuxではclearとうつと、コンソールの標準出力画面がクリアされます(実際には下にスクロールします)。

こんな感じ
$ echo 'foo'
foo
$ echo 'bar'
bar
$ clear

$

記法

これをRubyで実装するのはとても簡単で、

puts "\e[H\e[2J"

こう書くだけでclearと同じ挙動になります。

単語と数字を入力させて、最後に画面をクリアしてから入力結果を表示させるスクリプト

ソースコード(clear.rb)
# input
print "input some words\r\n> "
word = gets
puts "#{word}\r\n"

print "input some digit\r\n> "
digit = gets

# clear screen
puts "\e[H\e[2J"

# show result
puts "===================\r\nresult"
puts "word is #{word}"
puts "digit is #{digit}"
実行結果
$ ruby clear.rb
input some words
> foo
foo

input some digit
> 10

===================
result
word is foo
digit is 10
$

Ruby Conf Taiwan 2015に登壇してきました

Conference

LTですがRuby Conf Taiwanに登壇してきました。2015.rubyconf.tw

会場の建物
f:id:portaltan:20150924124339j:plain

看板
f:id:portaltan:20150924123811j:plain

メイン会場の様子
f:id:portaltan:20150924123800j:plain

懇親会の様子
f:id:portaltan:20150924124413j:plain

ちなみにこのビールがとてもおいしかったです・・・w
f:id:portaltan:20150924124451j:plain

Key note(という表記ではなかったけど、それらしきもの)は、

  • Yukihiro (Matz) Matsumoto:Lazy Programmers
  • Ruddy Lee / 李智樺:未來的專案開發 The future of project development
  • Sarah Allen:Transparency Wins
  • Aaron Patterson:Request and Response

ちなみに以前以下のポストにコメントと頂いたTonyさんも登壇しており、実際にお会いしてお話することが出来たのが自分の中では大きかったです。portaltan.hatenablog.com

雰囲気

Ruby Conf Taiwanはとてもスタッフや参加者もとてもフランクで(フランクじゃないRuby系カンファレンスにあたったこともないけど)、LTの枠も他に比べて多いので、CFPを出すのを躊躇っている方にもいい機会になると思います。
来年は本セッションで出れるように頑張りたいです。

最後に・・・

台北101
f:id:portaltan:20150924125519j:plain

RailsでデフォルトのDB以外を使う方法&ActiveRecordのvalidate機能を使う方法

RailsのDBをsqliteから他(NOSQLとか)に変更したい場合

  • modelファイルで継承しているActiveRecord::Baseを消してやればOKです
# class Test < ActiveRecord::Base <== 通常はこっち
class Test
  ${処理}
end

しかし、これではせっかくのRailsを便利にしているActiveRecordの機能が使えません。
そこで、以下でvalidate機能を例にSQLite以外のDBを使いながら、ActiveRecordの機能を利用する方法を書きます。

Railsデフォルト以外のDBを使っていてもvalidate機能を利用する方法

class Test
  include ActiveModel::Model

  attr_accessor :param1
  validates :param1, :presence => true

  ${処理}
end
  • まずはActiveModel::Modelをincludeします
  • そして入力値にアクセスできるようにattr_accessorキーワードで指定
  • その後は通常通りに宣言していけばOKです

これでNoSQL等をDBにしていてもActiveRecordのValidation機能が利用できます。