脳汁portal

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

ruby

RubyのThreadのステータスに関して

class Thread (Ruby 2.4.0) instance method Thread#status (Ruby 2.4.0) instance method Thread#alive? (Ruby 2.4.0)Rubyのスレッドに関して各ケースのステータスまとめ 各項目がとる値 thread object(thread.inspect) run sleep aborting dead thread.sta…

Rubyでシリアル通信する方法(serialport gem)

Rubyでシリアル通信する場合は、serialport gemを使うと簡単にできます。 install serial port $ gem install serialport How to Use require 'serialport' sp = SerialPort.new('/dev/ttyS0', 115200, 8, 1, 0) # device, rate, data, stop, parity # 送信 …

sinatraでhashデータをJSONとして返す方法

方法 require 'json' return #{hash}.to_json 例 require 'sinatra' require 'json' get '/top' do hash = { "key1" => 1, "key2" => 2, "key3" => 3, } return hash.to_json end

Rubyの配列に文字列として入っている数字をFixnumに一括置換する方法

eachで回して一つ一つto_iして上書きしてもいいですが、以下のようにすると1行で書けます 方法 配列.map(&:to_i) map!で破壊的に上書き 検証 ソースコード array = ["1", "2", "3", "0", "10\r\n", nil, "", "-5"] array.map(&:to_i).each{|val| puts "#{val…

railsで対応したcontrollerのjsやcssだけ読みこむ方法

Railsではassetsディレクトリ以下にcssファイルやjsファイルを置くとそれらを全て自動で読み込んでくれますが、それを無効にしてcontrollerに対応するcssやjsファイルだけ読み込ませるように変更できます 方法 1. 全ファイルの読み込み設定を削除する app/as…

Gemfile/Gemfile.lock/gemspec/Rakefileそれぞれの違い・役割

Gemfile gemの取得先を記述する 通常はsourceとgemspecの2行、もしくはsourceの1行だけでよい source "https://rubygems.org" gemspec gemspec 実際の情報を記述するファイル Gem::Specification.new do |s| s.authors = [] s.homepage = '' ・ ・ ・ gemの…

Rubyのpack, unpackでエンディアンを指定する方法

前回に引き続きエンディアン関連のポストです。 ネットワークバイトオーダー・ビッグエンディアン・リトルエンディアンとは - 脳汁portalBOMをデータの先頭に付与することで、データを受け取る側がエンディアンを判別できるようになると書きましたが、Rubyで…

文字列で返ってきたHashやArrayをそれぞれのクラスに再変換する'to_array'と'to_h'メソッド

APIやTCP socketsの返り値が強制的にstringになってしまう場合に、それを再び正しいクラスへ戻すメソッドです。 to_array to_array gem to_array | RubyGems.org | your community gem host install 方法 gem install to_array 例 require 'to_array' array …

gemファイルを作成して公開する方法

自作のgemを開発してrubygems.orgへ公開する方法です。 RubyGems.org | your community gem host 今回はto_arrayという名前のgemを作りたいと思います。 to_array arrayがto_strメソッドによってstringに変換されてしまったり、文字列で返ってきた場合に文字…

to_boolメソッドをgem化して公開しました。

以前以下のように文字列で返ってきた"true"や"false"をBooleanに変換するto_boolメソッドの実装方法を紹介しましたが、それをgem化して公開しました。portaltan.hatenablog.comたが問題として、「to_bool」も「to_boolean」も「to_b」も全部既にgemの名前と…

rubyのデフォルトのUnit testの使い方

Rubyにデフォルトで入っているテストフレームワークのUnit testの使い方です。 ちなみに以前書きましたがrubyのデフォルトのテストフレームワークは各versionで中身が違います。portaltan.hatenablog.com 使い方 準備 unit.rb require 'test/unit' class Sam…

Rubyの特殊変数($@とか$`とか$数字とか・・・)

特殊変数 Rubyの組み込み変数の一部は、通常の変数としては使用できない特殊な名前を持っています。 例えば、 $' や $& あるいは $1, $2, $12345678901234567890 がそうです。 このように 「'$' + 特殊文字一文字」、または「'$' + 10進数字」という名前を持…

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

もうすぐ2015年度Ruby World Conferenceが開催されるので、その前に2014のレポートを書いておきたいと思います。 Ruby World Conference 2014 RubyWorld Conference Conference info 場所 島根県立産業交流会館 「くにびきメッセ」国際会議場(3階) 参加者 …

Ruby motionの導入方法

環境 mac OSX Yosemite 10.10.5 Ruby 2.1.5 p273 インストール 1. Ruby motionのインストール 以下のリンクからRuby motionの利用登録を行います。 登録すると入力したemailアドレスにダウンロードリンクとライセンスキーが送られてくるので、それをインスト…

AWSにGladiatorをinstallしてみた

AWSにROMA(Ruby On Memory Architecture)のGUI toolであるGladiatorをinstallしてみた 準備 ROMAのインストールと起動 portaltan.hatenablog.com ROMA側のmkconfigの途中でplugin選択があるが、そこで'config_gui.rb'を選択しておく ストレージとしてTokyoCa…

RedDotRuby Conf2015に登壇してきました

taiwanのレポートを書いたついでにsingapoleのRedDotRuby confも思い出に書いておきたいと思います。 Conference シンガポールで行われたRedDotRubyConf 2015にLTとして参加してきました。www.reddotrubyconf.com photos 会場 ボード 参加者 発表者達 頂いた…

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

Linuxではclearとうつと、コンソールの標準出力画面がクリアされます(実際には下にスクロールします)。 こんな感じ $ echo 'foo' foo $ echo 'bar' bar $ clear ↓ $ 記法 これをRubyで実装するのはとても簡単で、 puts "\e[H\e[2J" こう書くだけでclearと同…

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

Conference LTですがRuby Conf Taiwanに登壇してきました。2015.rubyconf.tw会場の建物 看板 メイン会場の様子 懇親会の様子 ちなみにこのビールがとてもおいしかったです・・・w Key note(という表記ではなかったけど、それらしきもの)は、 Yukihiro (Ma…

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

RailsのDBをsqliteから他(NOSQLとか)に変更したい場合 modelファイルで継承しているActiveRecord::Baseを消してやればOKです # class Test < ActiveRecord::Base <== 通常はこっち class Test ${処理} end しかし、これではせっかくのRailsを便利にしてい…

Railsのモデル側でのvalidation

Railsのモデルファイルでのvalidationの方法です。 validateの対象を指定 validateを行うパラメータをvalidatesを使って宣言する class TestValidates < ActiveRecord::Base validates :param1 validates :param2 validates :param3 ・ ・ ・ end validateの…

Rubyの例外処理について

Rubyの例外の種類 例外処理の基本的な書き方 記法 begin ${例外処理した処理} rescue => ${例外の内容を格納する変数} ${例外が発生したときに行う処理} ensure ${例外発生の有無に関わらずに、最後に実行する処理} end Example def test_exception raise Ze…

AWSにRuby製分散型KVSのROMAをソースからinstallする

AWSのEC2インスタンスにRuby製Key Value StoreのROMAをインストールします。 今回はちょっと手順が増えますが、構成やライブラリ等を把握するためにソースからinstallします。 (gemでもinstallできます) 環境 AWS OS : CentOS 6.6 インスタンスタイプ : m3.l…

Rubyで一度接続したコネクションを使いまわす方法(コネクションプール)

RubyでDBなどにアクセスしたり、他のサーバへコネクションを接続したりすると思いますが、頻繁に接続がある場合はその度に接続をしていてはコストになります。 対応として、コネクションを一定時間維持して、そのコネクションを使いまわすとよいです。 方法 …

Rubyでsingleton classの作成と利用

singleton機能を使うことで、そのクラスは一つのインスタンスしか持たないように設定することが出来ます。 使い方 singletonの組み込み require 'singleton' class SingletonTest include Singleton #{処理} end singleton モジュールをrequire singletonに…

rubyのgemファイルの作成・公開方法

自分の作ったアプリやライブラリなどをgem化してrubygems.orgへ公開する方法です。 gemファイルの作成 Create gem $ cd ${your APP} $ rake -T $ rake build $ ls -l total 320 -rw-rw-r-- 1 root root 16159 Aug 19 11:50 CHANGELOG -rw-rw-r-- 1 root root…

正規表現Tips18選

正規表現のTipsでよく使う記法等をTipsとして残します。 宣言方法 // //で囲むことにより正規表現を表せます %r{} %r{}の括弧内に書くことで正規表現を表せます Regexp.new() Regexp.newの引数として書くことで正規表現を表せます 正規表現文法 文頭指定(^) …

RubyのOptionParserのopt.onが引数を無限に取れることをはじめて知った

以下のポストでOptParserの使い方を書きましたが、どうやらopts.onメソッドは引数を無限に取れるらしい [Ruby]オプションの使い方・取得の仕方(OptionParser) - 脳汁portalコード(上のポストのを流用) require 'optparse' opt = OptionParser.new options = …

TravisCIのrakeとかbundle installが自動で実行されない

TravisCIは、build時に自動でbundle installして、 bundle install --jobs=3 --retry=3 # <= これ build後に自動でrakeファイルを実行してくれると下の公式リンクに書いてあった。 Building a Ruby Project - Travis CI だけどbundle installもrakeも実行さ…

Rubyで文字列で帰ってきた"true"や"false"をBooleanに変換するto_boolメソッドを実装

前提 rubyの条件文ではnilとfalse以外はすべてtrueとして扱われてしまう condition = 'false' puts "TRUE" if condition # => TRUE condition = 0 puts "TRUE" if condition # => TRUE condition = 'nil' puts "TRUE" if condition # => TRUE # ちなみにnull…

RubyのIO.select を使って、TCP socketで返信がなくなったら自動でコネクションをきる方法

問題 TCP socketで送ったコマンドのレスポンスが複数行にわたる時とかに、データを全部取得したいんだけどgetsだと1行ずつしかとれないし、ループを回しても次の入力待ちになって帰ってこない。 今までは、、 問い合わせ先で終了文字を設定して送り返すよう…