読者です 読者をやめる 読者になる 読者になる

脳汁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行ずつしかとれないし、ループを回しても次の入力待ちになって帰ってこない。 今までは、、 問い合わせ先で終了文字を設定して送り返すよう…

メタプログラミングRuby 第4章 まとめ (クラス定義)

個人的第四章のキーワード class_eval() クラスインスタンス変数 特異メソッド 特異クラス Extend アラウンドエイリアス カレントクラス クラス定義の中ではselfは定義されたクラスである defで定義されたメソッドはすべて、カレントクラスのインスタンスメ…

[Ruby] Cookieのvalueにhashを使う(StringをHashに変更する)方法

問題点 Cookieの:valueにHashをいれても、取り出すときにStringになってしまう 先日のブログで書いたとおり、セッション毎に別々のexpire timeを持たせるためにcookieを利用することにした. [Ruby] sinatraでそれぞれのセッションに別々のexpiration timeを…

[Ruby] sinatraでそれぞれのセッションに別々のexpiration timeを設定して、KVSみたく任意の時間で自動に消えるようにしたい

sinatraでセッションのデータにexpiration dateを持たせて、ある一定時間たったら自動で消えるっていう処理を書きたかった。 Session すごいはまって結構がんばったけど、思い通りの実装は出来なかった。。 sinatraのsessionにも、expiration dateはある get…

[Ruby] なんでRubyにはprependはあるのにappendはないんだろう?

Rubyにはprependはあるがappendはない。 だから後方に追加したかったらconcatとか「+=」を使う。 h = Hash.new puts h.store(:alphabet, "b") # => b # append puts h[:alphabet].concat("c") # => bc # prepend puts h[:alphabet].prepend("a") # => abc 一…

[html/css] httpのフォームでDELETEやPUTのメソッドを送る方法

sinatraでAPIを作っていてはまったのだが、現在のブラウザはGETとPOSTの通信方式にしか対応していないらしい。 失敗例 <form method="delete" action="/"> <input type="text" name="textArea"> <input type="submit" value="delete!!"> </form> ↓ 192.168.33.1 - - [22/Jul/2015:03:08:16 +0000] "GET /?textArea= HTTP/1.1" 200 198 0.0008 こうやってdeleteを指定したにも関わ…

[Ruby] Sinatra超入門

Sinatraで、入力した値を表示させるだけの超簡単なアプリをつくる方法を手順化して説明します。 1.環境作成 yum install openssl-devel httpd gem install sinatra gem install thin まずはApacheの設定やsinatraのインストールをします。 sinatraはそれだ…

[Ruby] 多重Hashの宣言の仕方

RubyではPHPのようにデフォルトで多重Hashを利用することが出来ません。 以下のようなエラーになります。 single_h = Hash.new single_h["first"]["second"] = "value" # => hash.rb:13:in `<main>': undefined method `[]=' for nil:NilClass (NoMethodError) こ</main>…

メタプログラミングRuby 第3章 まとめ (ブロック)

第三章でのキーワード ブロック 束縛 クロージャ proc lambda 遅延評価 ブロック ブロックを定義できるのはメソッドを呼び出すときだけ ブロックを受け取ったメソッドはyieldでブロックをコールバック(展開して利用)する ブロックとはメソッドに渡す無名引数…

[Ruby] sinatraがポート4567を指定しても繋がらない

ちょっとはまったのでメモに・・・ Sinatra: README (Japanese) このsinatraの日本語サイト通りに gem install sinatraして、 gem install thinして、 myapp.rbを作って、 # myapp.rb require 'sinatra' get '/' do 'Hello world!' end 起動して、 $ ruby my…

[Ruby] Procとlambdaの違い

ブロックをオブジェクト化する代表的な方法としてProcとlambdaがあるが、その違いに関して簡単に説明 returnに対する挙動の違い lambda 普通にlambdaから返る(メソッドのreturnと同じ挙動) def double(lambda_blk) lambda_blk.call * 2 end l = lambda{retur…

[Ruby]オプションの使い方・取得の仕方(OptionParser)

Rubyのoptionを扱うOptionParserの使い方を簡単に書きます。 OptionParser コマンドラインのオプションを取り扱うためのクラスです。 class OptionParser (Ruby 2.1.0) 使い方 公式ドキュメントにも書いてありますが、使い方の流れは以下になります。 1. Opt…

[Ruby] メタプログラミングRuby 第2章 まとめ (動的メソッド)

2章のキーワード 動的ディスパッチ パターンディスパッチ define_method() Method Missing ゴーストメソッド ブランクスレート はじめに メタプログラミングの第二章は動的メソッドについて書かれている。 Javaなどは静的言語 RubyやPythonは動的言語 重複メ…

メタプログラミングRuby 第1章 まとめ

メタプログラミングRubyの第1章を読んで、自分が興味あったとこのまとめ クラスとモジュールの違い classクラスはnew(), allocate(), superclass()を追加したmoduleにすぎない includeされるものにはmoduleを使う モジュールはクラス名が被らないようにネー…

[Ruby] Ruby Warrior Level.9クリアコード

Ruby Warrior ゲーム感覚でRubyを学べるサイトです。 これをやるだけでRubyが完全に書けるようになるわけではないですが、とっかかりとしてはいいと思います。 英語は全く難しくないので大丈夫です。 公式HP(かなり大きいBGMが流れるので注意)Ruby Warrior -…

[Ruby]if文やfor文はスコープを作らない

Rubyでコーディングする際のはまりポイントしてスコープの範囲がありますが、Rubyのif文はスコープを作りません。 確認 if true a = 1 end puts a #===> 1 上記のコードは問題なく動きます。 これはif文がスコープを作らないため、if文内で宣言された変数aが…

[Ruby]RVM install等でdefault で一緒にインストールされたgemをアンインストールする方法

RVM等でRubyをインストールした場合にdefaultインストールされているgemを無理やりアンインストールする方法です。 結論から言うと RVMのgemsetに関するファイルを削除すればアンインストールできるようになります。 説明 準備 まずはdefaultのgem しかイン…

[Ruby]Rubyの変数の名前に変数の中身を使う方法

な… 何を言っているのか わからねーと思うが おれも 何をどう表せばいいのか わからなかった… 頭がどうにかなりそうだった… メタプロだとか超スピードだとか そんなチャチなもんじゃあ 断じてねえ Rubyのもっと恐ろしいものの片鱗を 味わったぜ… つまり Ruby…

[Ruby]RubyのStructとは何なのか?(構造体?なにそれおいし・・・)

Rubyの組み込みライブラリであるStructの説明です。 http://docs.ruby-lang.org/ja/2.0.0/class/Struct.html Structとは 構造体クラスらしいです。 Classクラスに似た感じですが、Classクラスにさらに情報を付加できるといった感じでしょうか 特徴 ①最初から…

[Ruby]RVMのリストを更新する方法

RVMのリストをupdateする方法 RVMをupdateして、`rvm list known`で表示されるinstall可能なパッケージを増やす方法 最新のversionを入れたい場合など。 コマンド 最初にコマンドだけご紹介 $ rvm get stable $ rvm install #{インストールしたいversion} 説…

[Ruby]第二回 Ruby技術者認定試験合格者ミーティングに参加してきた

第二回Ruby技術者認定試験合格者ミーティングRuby認定試験(http://www.ruby.or.jp/ja/certification/examination/)のgold、もしくはsilverに合格した人向けのミーティング。主に、事前に質問を集めてMatzと前田さんがそれに回答するというスタイルで進みまし…