脳汁portal

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

ruby

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と前田さんがそれに回答するというスタイルで進みまし…

[Ruby]文字の間違い(揺らぎ)を検知するレーベンシュタイン距離とJaro-Winkler距離をRubyで使う方法

Levenshtein距離とJaro-Winker距離両方とも、二つの単語、文章の間の違い(距離)を調べる方法です。Levenshtein Distanceレーベンシュタイン距離 - Wikipedia 1文字削った文字列の末尾にどのような文字を追加すれば一致するか見ることで、1文字削った文字列と…

[Ruby]Rubyの条件式に多重代入と入れるとエラーになる件

Rubyの条件式に多重代入を入れるとエラーになる。 例えば以下みたいな。 if (res1, res2 = multi_return_method) && res1 == 'hoge' puts 'success!!' end def multi_return_method return 'hoge', 'fuga' end 結論から言うと、仕様で意図的にエラーにしてい…

[Ruby]gem installしたライブラリが実際にどこにinstallされているのか調べる方法

gem installしたライブラリがどこにインストールされているか調べる方法gem installでライブラリをインストールしたはいいけど、中身を確認したかったり、ちょっと書き換えたいときにどこに実際にライブラリがありるか確認する方法。コマンド $ gem which #{…

[Ruby]Rubyでcurlするときのgemのcurbの使い方

curbの使い方curbとはrubyのコード内でcurlコマンドを使えるようにするgemです。taf2/curbgithub.comなかなか日本語ではドキュメントがないので、APIに接続する際のコードを例にあげておきます。GET require 'curb' endpoint = 'https://hogehoge.com' # cha…

[Ruby] RVMの使い方

RVM(Ruby Version Manager)の使い方rbenvと覇権を争っている、Rubyのversion管理システムであるRVMの使い方です。 今回は試しにRuby2.1.5とRuby2.2.1をinstallします。 " rvm installation " # curl -L https://get.rvm.io | bash -s stable # source /etc/p…

[著作権] DockerやChefやGitなどのロゴをプレゼンで使うときの注意点(trademark policy)

勉強会やカンファレンスなどでプレゼンを作る際に他社のロゴをppt等に載せることがあるかと思いますが、大抵はそれぞれの会社がtrademark policyという形で使用方法を決めています。各会社毎に注意点を簡単にまとめます。全てをここには載せきれませんので、…

[Ruby]Ruby本体のテストフレームワークの歴史(移り変わり)について

RubyのテストフレームワークRubyにはデフォルトでテストフレームワークが入っていますが、versionによってその中身が変移していっているのでその説明です。 はじめにこれは以下のクリアコードさんのページを自分なりに噛み砕いたものになっています。 http:/…

[Ruby]Ruby 認定試験 Silver/Gold 合格勉強方法(お勧めの参考書や学習サイト等)

Ruby Association Certified Ruby Programmer Goldに合格したので、そのときの勉強方法をご紹介します。[前提条件] 1年前にSilverを取得していた。 [使った参考書・学習サイト]1. Rubyの絵本(Silver用) Rubyの絵本 スクリプト言語を楽しく学ぶ9つの扉 …