Ruby

標準出力に一時ファイルを代入したらpとputsで挙動が異なる

前のエントリーを書いている時の恐怖体験。IO#reopenを使わず、$stdoutに代入したら変な挙動に。 require 'tempfile' t = Tempfile.open("") $stdout = File.open(t, "w") p "Whoops!" $stdout = STDOUT p File.read(t) #=> "\"Whoops!\"\n" pでは出力された…

標準出力のテスト書いた

9/2追記:RSpecで使うと、なぜか最初のreopenでスクリプトが終了して(リターンコード=1)、それ以降のケースがなかったことにされてしまったため、reopenから$stdoutへの代入に修正しました。flushすれば代入でも上手く動くっぽいので。 参考リンク(Rubyリ…

メタプログラミングRuby第1章を読んだ

メモ メソッドとインスタンス変数 メソッドはクラスに、インスタンス変数はオブジェクトに属する オブジェクトはクラスの参照を持つ メソッド探し メソッドが呼び出されたら参照先を探しに行く 参照先クラスに無いときはスーパークラスを辿る クラスとmodule…

Project Euler Problem031(邪悪流)

プログラマの貴重な考える時間を節約するためには、マシンに負荷をかけることもやぶさかでない。 問題の値(200, [200, 100, 50, 20, 10, 5, 2, 1])でも、まあ1年もあれば答えはでるはず。 参考:Ruby 1.9.3 リファレンスマニュアル class Array (Ruby 1.9…

Project Euler Problem031

知的欲求に駆られて、Project Eulerを再開しました。 Project Euler - PukiWiki ※以下ネタバレ 答えは出たのですが、本当に正しいのか確信が持てない・・。 ロジックの解説はこちら。 10円,50円,100円の硬貨がそれぞれ十分にたくさんあるとき10円,50円の組..…

Project Euler Problem032

勢いで次もクリア。Problem 32 - PukiWiki ※以下ネタバレ 数値に意味のある名前を付けられるまで理解していないという。 参考:Ruby 1.9.3 リファレンスマニュアル class Array (Ruby 1.9.3)

とあるファイルからとある部分を取り出すスクリプト

ファイル名を途中から採番してリネームするスクリプト

file01.xxx file02.xxx 上のディレクトリに加えたファイルfugafuga.yyyを file01.xxx file02.xxx fugafuga.yyy # 追加 file03.xxxにリネームしたいときに。 file01.xxx file02.xxx file03.xxx # リネーム 手順 以下のスクリプトをコマンドラインで実行します…

gemを一括インストールするスクリプト

Rubygemsを再インストールした場合などに。時間がかかって仕方がないのでドキュメント(riとRDoc)はスキップしてますが、お急ぎでなければ" --no-ri --no-rdoc"を消してください。 GEM_INSTALL_CMD = "sudo gem install %s --no-ri --no-rdoc" INSTALL_GEMS…

Rubygems本体のバージョンを指定してアップデートする方法

アップデートしたら不具合が出て、ダウングレードしたい場合など。 動作確認した環境:Linux(Ubuntu)上でsetup.rbでインストールしたrubygems 例:さっき1.6.1に上げてしまったrubygemsを1.3.7に戻す方法 $ sudo gem uninstall rubygems-update $ sudo gem i…

RSS型Twitterボット作りました

RSSフィードを取得・加工してつぶやくBOTを作ったのでメモ。 Ruby用のTiwtterライブラリと、プラグイン集Yapraをインストール $ sudo gem install twitter $ sudo gem install yapra yapraのインストールに失敗する場合、 $ sudo aptitude install libxml2-d…

RSpecレベル上げ@レベル1

最近、ほとんど開発ができてないので、諸々の学習復習を兼ねてid:t-wadaさんのRSpec入門記事を一周させてもらいました。 開発環境はVim。主目的がRSpec習熟度上げのため、Gitへのコミットは書き捨てスクリプトで自動化するという暴挙に出ます。 #! /usr/loca…

ディレクトリを監視してファイルをコピーするスクリプト

某用途で使用したスクリプトです。 require "fileutils" include FileUtils COPY_FROM = 'C:\user\data' COPY_TO = File.expand_path(".") TARGET_SIZE = 1e6 SLEEP_SECOND = 10 def putlog(msg) puts "#{Time.now}: #{msg}" end cd COPY_FROM before_time =…

ServersMan@VPS日誌02 - Rubyをソースからインストール

なにはともあれ、スクリプト言語のひとつくらい必要なのです。というわけでRubyをひとつインストールします。最新版を使ってみたいので、ソースコードからに挑戦。バージョンは、先日クリスマスリリースされた1.9.2-p136。 インストールの方針ですが、「/usr…

ImageMagick/RMagickで将棋盤を描くpart1

ブラウザ将棋盤の機能拡張として盤面図を出力させようと思い、ImageMagickというかRMagickをいじってます。 大きさが固定されている、なぜか太字にならない等々の問題はありますが、とりあえずそれっぽいものは出力できました。 !# /usr/bin/ruby require 'R…

古いメールアドレスを忘れそうなあなたへ

Rubyスクリプトをdaemonで起動する - tricknotesのぼうけんのしょを改造させてもらいました。 # reminder.rb require "rubygems" require "daemons" require "net/smtp" require "tlsmail" _, term, = ARGV term = term.to_i smtp_server = (GMailのSMTPサ…

札幌Ruby会議03を見て考えたこと01

昨日行われた札幌Ruby会議03について。 名札は用意したのですが、結局会場には行けなかったのでUstreamでの参加。映像も音声も終始安定していて、さらに右下に発表者の映像が映っていたりしたので、会場の雰囲気を味わうことができました。 以下は発表のまと…

マウスでキーボード入力するWindowsアプリ

先日、マウスだけで文字を入力せざるを得ない状況になりまして。 昔も同じような状況になり、その時に対策ソフトを作った気がしたのでハードディスクを漁ったところ、運良く見つかりました。 ソースコードはとても読めたものではなく、即実行するとある程度…

数値を英語表記に変換するライブラリ

始まりは、Project Euler - Problem 17でした。 1 から 5 までの数字を英単語で書けば one, two, three, four, five であり、全部で 3 + 3 + 5 + 4 + 4 = 19 の文字が使われている。では 1 から 1000 (one thousand) までの数字をすべて英単語で書けば、全部…

Project Euler - Problem16 “Rubyをキメると気持ちイイ”

今回は英語でがんばりました。 2^(15) = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.What is the sum of the digits of the number 2^(1000)?Problem 16 - Project Euler といってもほとんど数式ですが・・。*1 今回は図が出てこない、文字…

【Windows】【Ubuntu】v.s. Heroku の記録〜あらすじ〜【Sinatra】【Gems】

ここ数日続いていたHerokuとの戦いがひとまず決着したので、ここに記す。 〜あらすじ〜 紆余曲折の3日間。 ■Windows 最初の戦場はWindows。 heroku create までは何の問題もなかったが、 git push heroku 時に、秘密鍵のパーミッションが600でないと責めら…

任意の桁数&区切り文字のランダムなIDを生成するスクリプト

ソフトウェアのプロダクトキーのような文字列を自動生成するスクリプトを書いたのでメモ。 とりあえず動くレベルのコードですが。 # 使用する文字のリスト list = [] # リストに数値を追加 0.upto(9) do |i| list << i.to_s end # リストにアルファベット(…

【0は真】Rubyの条件式【オブジェクト可】

一般に、条件式の書き方は2通りあります。 (条件式とは、if (この部分!)then です) 比較演算子や論理演算子を使う(true か false) 変数や定数を単項で使う(値) Rubyでは、Boolean型に加え、どんな値でも条件式にできます。 (言語によっては、Bool…

複数のディレクトリから同じ名前のファイルを集めるスクリプト

複数のディレクトリから同じ名前のファイルを一つのディレクトリに集めるスクリプトです。同じ名前だと上書きされてしまうので、ファイル名はディレクトリ名にしています。当然ながら拡張子はそのままです。 require 'fileutils' include FileUtils CURRENT_…

CodeKata of Bowling by RSpec for Windows

スはスペックのス〜RSpecによるテスト駆動開発の実演〜 http://www.nicovideo.jp/watch/sm2370458 を見ながらやってみた。 ■Windowsで初心者(Like Me)がやるときのポイント 色はあきらめる;; game.rbとgame_spec.rbは同じフォルダに置く game_spec.rbでreq…

【Windows】クリップボードに現在時刻をコピーするスクリプト【.exe付き】

以下のスクリプトをコマンドラインで走らせるだけ。 ruby -Ks -e "require 'rubygems';require 'win32/clipboard';Win32::Clipboard.set_data(Time.now.strftime('%Y%m%d%H%M%S'))"ただし準備が必要。 ※以降は ActiveScriptRuby 1.8.7 の使用を前提とします…

【ワンライナー】セルフgrep【改行対応】

MISSION: リリース間近の大規模プログラムに作為的バグが混入しているとの報告があった。わたしは、30分以内に何百万というファイル群から「@^-^@」という文字列が含まれたXMLファイルを探し出さなれけばならない。しかも、途中で改行されて @^ -^@いたり…

バージョン管理スクリプト on Ruby

プログラマにとって、ソースコードのバックアップやバージョン管理は重要です。しかし、個人の小さなプロジェクトなど、CVS・Subversion・Gitといった大掛かりなソフトを使うほどでもない、でも手作業は面堂・・。そんな私のために、バックアップおよびバー…

ディレクトリサイズを計算する【glob編】

http://d.hatena.ne.jp/myokoym/20100425/1272202028の Dir.glob バージョン。 def dir_size(path) expath = File.expand_path(path) sum = 0 Dir.glob("#{expath}/**/*") do |fn| # next if File.directory?(fn) sum += File.stat(fn).size end sum end か…

eRubyでif修飾子を使う

Railsをはじめたので、eRuby(ERB)のおべんきょう。今回は、if修飾子の使い方について。 ふつうに こんばんは! と書くと、 「シンタックスエラー 終わりがない」 となってしまう。どうも普通のif文として解釈されている様子。 そこで仕方なく と書くとうま…