サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
rubyco.hatenadiary.org
パスワードを作成するRubyスクリプト makepass.rb を作りました。無保証ですので、使いたい方は自己責任で。 # makepass.rb require 'io/console' require 'digest/sha2' require 'base64' require 'win32/clipboard' Win32::Clipboard.set_data('') STDIN.noecho do |io| puts "Hit many keys randomly." s = io.gets while s.length < 100 puts "I need more random keys." s += io.gets end d = Digest::SHA512.digest(s) e = Base64.encode64(d) e.gsub!(/[\+\/=\n]/, '')
最近Rubyをアップデートしてなかったので、この機会に1.9へ。 C:\>ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] Rubyを検索し、 http://www.ruby-lang.org/ja/downloads/ から、 http://www.artonx.org/data/asr/ へ行き、 Ruby-1.9.3-p125 Microsoft Installer Package(2012-02-16) をダウンロード。 Ruby-1.9.3.msiを実行。 インストール先は C:\ruby C:\>ruby -v ruby 1.9.3p125 (2012-02-16) [i386-mswin32_100]はい、できました。
結城浩(id:hyuki)さんが『数学ガール/ガロア理論』をLaTeXで書いているときに使っていたRubyスクリプトです。 Windowsで動作することを仮定しています。 やっていることは、 一時的なディレクトリを作成し、 カレントディレクトリの下のファイルを全部そこにコピーし、 そこでLaTeXを動かし、 場合によってはmakeindexとmendexを動かし(コマンドラインで twice と書く)、 PDFを作り、 Dropboxにコピーしてから、 Acrobatでプレビューする。 というものです。ほとんどバッチファイル代わりですね。 Acrobatが共有禁止で握っているPDFに上書きするために、途中でAcrobat.exeを殺しています。乱暴な…。 require "fileutils" PLATEX_OPTION = '' TMP_DIR = '\\tmp' DROPBOX_DIR
祝! 軽量Rubyが公開を参考にさせていただいて、Windows XPでmrubyをビルドして動かしてみました。 mrubyの入手。 gitはWindows上でインストールしてあるとします。 git clone https://github.com/mruby/mruby.git でソースコードを得ます。 cygwinのインストール。 http://cygwin.com/install.html setup.exeを動かし、指示に従う。Defaultでインストールしました。 mrubyのビルド cygwin Terminalを動かします。 Makefileがあるところでmakeします。でもbisonがないと言われてしまいました。Cygwinでインストール不足。 もう一度cygwinのsetup.exeを動かして、bisonを検索してアップデート。m4も入れますよと言われる。はいはいわかりま
すでにGitがインストールされているとして。 C:\> mkdir mruby C:\> cd mruby C:\mruby> git clone https://github.com/mruby/mruby.git Cloning into mruby... remote: Counting objects: 462, done. remote: Compressing objects: 100% (247/247), done. remote: Total 462 (delta 222), reused 448 (delta 211) Receiving objects: 100% (462/462), 560.79 KiB | 229 KiB/s, done. Resolving deltas: 100% (222/222), done. C:\mruby> cd mrubyあとは好
Module#module_functionを使うと、メソッドをモジュール関数としてコピーします。プログラミングRubyでは「モジュールメソッド」と呼んでいますが、module_functionというメソッド名ですね。 Rubyでは「コピーする」というのがよく出てくるように思います。融通無碍。 module RubycoModule def hello # メソッド return "Hello!" end module_function :hello # モジュール関数としてコピー end class Rubyco include RubycoModule def greeting return hello() # メソッドのほうを呼ぶ end end p RubycoModule.hello # => "Hello!" p Rubyco.new.greeting # => "Hello!
準備。 C:\> gem install twitterスクリプト。 require 'twitter' require 'kconv' Twitter::Search.new().from('hyuki').each do |r| puts r["text"].tosjis end
教えてくんモードです。 Rubyで、gem installした後、ざっとドキュメントを見たいとき、どうするのが良いでしょうか? (→解決しました「gem serverを動かして、表示されたURLをブラウザで見る」らしいです) たとえば、Rubyで「はてなブックマーク」を使って遊びたいなと思ったとしましょう。るびこちゃんは以下のような行動を取りました。 (hatenaという文字列を含むモジュールを探しましょ♪) C:\>gem search hatena *** LOCAL GEMS *** (あ、gemって、デフォルトではローカルを探すんですね…) (じゃあ、--remoteオプションをつけましょ♪) C:\>gem search hatena --remote *** REMOTE GEMS *** hatenaapiauth (0.1.0) hatenaapigraph (0.2.2)
YouTubeのタグ検索をしてタイトルとURLを表示するRubyスクリプトです。 準備 YouTubeのDeveloper IDを得る。 gem search youtube --remote (YouTube関連のgem探し) (略) youtube (0.8.6) (見つかった) (略) gem install youtube (インストールする) gem search youtube (確かにLOCALに入ったかな?) gem which youtube (実際のファイルはどこかしら?)スクリプト require 'rubygems' require 'youtube' require 'kconv' ID = 'ここにIDを入れる' TAG = '初音ミク 数学ガール'.toutf8 YouTube::Client.new(ID).videos_by_tag(TAG).each d
『新版暗号技術入門――秘密の国のアリス』が刊行されたので、暗号関連のプログラムを作りたくなりました。 以下、パスワードを入力するとファイルを暗号化する簡単なRubyスクリプトを紹介します。 1. cryptをインストールします。 C:\work> gem install crypt Successfully installed crypt-1.1.42. highlineをインストールします。 C:\work> gem install highline Successfully installed highline-1.5.0 Installing ri documentation for highline-1.5.0... Installing RDoc documentation for highline-1.5.0...3. 以下のファイルrjtest.rbを作成します。 requi
ふと「Array#mapって、戻り値となる配列の要素数はレシーバの要素数と等しいな」と思った。 「Array#mapはおそらくCで書いてあるだろう」 「ということは、戻り値となる新たな配列はレシーバの要素数を使ってnewしているに違いない」と思った。 確かめてみよう…と思ったらソースがなかった。 Rubyのサイトからソースを入手。 展開。 mapをgrepする。 見つけた。 static VALUE rb_ary_collect(ary) VALUE ary; { long i; VALUE collect; if (!rb_block_given_p()) { return rb_ary_new4(RARRAY(ary)->len, RARRAY(ary)->ptr); } collect = rb_ary_new2(RARRAY(ary)->len); for (i = 0; i <
問題 実行すると、スクリプトの内容と同じ文字列が表示されるスクリプトを書いてください。 解答 q=%q{print"q=%q{#{q}};#{q}"};print"q=%q{#{q}};#{q}" 実行結果です。スクリプトの最後に改行は入れていません。 C:\work> type self.rb q=%q{print"q=%q{#{q}};#{q}"};print"q=%q{#{q}};#{q}" C:\work> ruby self.rb > output C:\work> type output q=%q{print"q=%q{#{q}};#{q}"};print"q=%q{#{q}};#{q}" C:\work> fc /b self.rb output ファイル self.rb と OUTPUT を比較しています FC: 相違点は検出されませんでした補足 以前も書いていました。(^
問題 xxxx=yyyy という形式のデータをたくさん受け取り、等しいもの同士をグルーピングするプログラムを書いてください。データは標準入力から与え、グルーピングした結果は { xxxx, yyyy } のように集合のような形式で標準出力に出すことにします。以下に入力と出力の組の例を示します。グループ同士の出力順は問いませんが、グループの中の各要素は適宜ソートしてください。 ◆入力1 b=d A=B b=a B=C c=b D=A◆出力1 { a, b, c, d } { A, B, C, D }◆入力2 Alice=Alice Robert=Bob Liz=Beth Lisa=Liza Bess=Beth Elizabeth=Lisa Eliza=Liza Bess=Elizabeth◆出力2 { Bob, Robert } { Alice } { Bess, Beth, Eliza,
たとえば、gemでamazon-ecsパッケージをインストールします。 > gem install amazon-ecs Need to update 7 gems from http://gems.rubyforge.org ....... complete Successfully installed amazon-ecs-0.5.3 Installing ri documentation for amazon-ecs-0.5.3... Installing RDoc documentation for amazon-ecs-0.5.3...ドキュメントを見るため、gem_serverを動かします。 > gem_server [2008-07-16 17:18:01] INFO WEBrick 1.3.1 [2008-07-16 17:18:01] INFO ruby 1.8.5 (2
ニコニコ動画にアクセスするnicovideoパッケージをgemでインストールすると、sample/nv_download.rb というファイルも入手できます。それを読んで勉強。で、nv_download.rbをもとにしてnico.rbを書きました。nv_download.rbの劣化コピーですみません。でも、自分で書き写して直すと理解が深まるので、おゆるしください。 require 'nicovideo' require 'yaml' require 'iconv' def puts(s) Kernel.puts Iconv.conv('cp932', 'UTF-8', s) end account = YAML.load_file('nico.yaml') mail, password = account['mail'], account['password'] nicovideo = N
http://d.hatena.ne.jp/hrkt0115311/20080715 を見て、私も作りたくなりました。仕様は少し変えています。 File.open('color.html', 'w') do |f| f.puts <<-HEADER_END <html> <head> <title>Color Table</title> </head> <body> <h1>Color Table</h1> <pre> HEADER_END code = [ '00', '33', '66', '99', 'CC', 'FF' ] code.each do |r| code.each do |g| code.each do |b| f.print "<font color='#{r}#{g}#{b}'>#{r}#{g}#{b} </font>" end f.puts end end f.p
証明書(公開鍵にデジタル署名を施したもの)を表示するRubyスクリプトです。ファイルbobby.cerに証明書が入っているものとします。 # show_cert.rb require 'openssl' cert = OpenSSL::X509::Certificate.new(File.open('bobby.cer')) print cert.to_text 実行結果です。bobby.cerはベリサイン(テスト用Class1 Digital ID)で作りました。 C:\work> type bobby.cer -----BEGIN CERTIFICATE----- MIIErzCCA5egAwIBAgIQJgw86jsWmGPeUT4qT+TWKjANBgkqhkiG9w0BAQUFADCB 3TELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCB
「Amazon.co.jpの特定商品のランキングを調べるRubyスクリプト」を書いてみようと思いました。いまから作るのは「ASINのリストを元に、その本のタイトルと現在のランキングを表示する」というスクリプトです。 Amazon.co.jpの特定商品のランキングを調べるRubyスクリプト(修正あり) - rubyco(るびこ)の日記 早いものであれから一年。『数学ガール/フェルマーの最終定理』を追加して、もう一度動かしてみます。 require 'iconv' require 'amazon/ecs' ASINs = %w[ 4797337990 4797336803 479733679X 4797336781 4797331623 4797332115 4797332123 4797329734 4797327030 4797322977 4797321261 4844319159 47
『数学ガール/フェルマーの最終定理』の校正の都合上、LaTeXのソースからすべての \command を抽出するスクリプトを書きました。 # find_tex_commands.rb require 'pathname' commands = Array.new Pathname.glob("*.tex").each do |file| open(file, "r") do |f| f.each_line do |line| line.scan(/\\[a-zA-Z]+/).each do |c| next if commands.include?(c) commands << c end end end end print commands.sort.join("\n") 実行結果はおおよそ以下のようになります。 > ruby find_tex_commands.rb \LaTeXe \
呼び出し側のアスタリスクは配列を展開しますが、受け取り側のアスタリスクは残りの引数を配列化します。 def rubyco(a, b, c, *d) p a p b p c p d end a = [100, 200, 300] rubyco(0, 1, *a)実行結果です。0, 1, 100, 200, 300が渡されるので、最後の200, 300が配列として扱われます。 0 1 100 [200, 300]
Object#dupはshallow copyですけれど、Marshal.dumpとMarshal.loadでdeep copyになります。 a = ["A", ["B", "C"]] # dup - shallow copy b = a.dup p a == b #=> true p a.object_id == b.object_id #=> false p a[0].object_id == b[0].object_id #=> true p a[1].object_id == b[1].object_id #=> true # dump+load - deep copy c = Marshal.load(Marshal.dump(a)) p a == c #=> true p a.object_id == c.object_id #=> false p a[0].object_id
お試しパッケージということでRuby-1.9.0を一式パッケージ化したMSIを提供します。 L'eclat des jours(2007-12-27) arton先生、ありがとう!
わかりやすいRubyの資料。 http://dev.ariel-networks.com/articles/workshop/ruby/ via id:naoyaのブックマーク
RubyのOpenStruct(ostruct)を使うと、属性が自動生成される構造体を作ることができます。 require 'ostruct' alice = OpenStruct.new alice.name = 'Alice' alice.mail = 'alice@example.com' p alice #=> #<OpenStruct name="Alice", mail="alice@example.com"> 1. 「ブロックを表す { } と、ハッシュリテラルの { } が混同されることはあるか?」というのが最初に抱いた疑問でした。それについては自分で「tASSOC(つまり=>)の有無でわかるじゃん」と思いました。つまり、以下の二つのメソッドmethod1, method2の呼び出しで何が渡されるかは自明であると思いました。 method1 { puts 'alice@ex
artonさんのところで見かけたのを、そのままお借りしています。すみません。JRubyにして動かしています。 # cf. http://arton.no-ip.info/diary/20070807.html#p01 require 'java' def fib(n, r = [0,1]) r[n] ||= fib(n - 2, r) + fib(n - 1, r) end class Array alias put []= def []=(i, n) put(i, n) end end MidiSystem = javax.sound.midi.MidiSystem synthesizer = MidiSystem.getSynthesizer() #システム既定のシンセサイザー synthesizer.open channels = synthesizer.getChannels()
attr_accessorというメソッドを使うと、インスタンス変数から自動的にアクセサ(getterとsetter)が作れます。 class Point attr_accessor :x, :y def initialize(x, y) @x = x @y = y end def to_s "(#{@x}, #{@y})" end end a = Point.new(123, 456) puts a #=> (123, 456) puts a.x #=> 123 puts a.y #=> 456 a.x = 0 a.y = 0 puts a #=> (0, 0)
Marshal.dumpでRubyのオブジェクトをファイルに保存し、Marshal.loadで戻すことができます。 1. 以下のプログラムではオブジェクトxをalice.dumpedというファイルにdumpで保存し、すぐ後でloadしてhelloメソッドを呼び出しています。 require 'pathname' class Rubyco def initialize(name='Rubyco') @name = name end def hello puts "Hello, #{@name}!" end end x = Rubyco.new('Alice') Pathname.new('alice.dumped').open('wb') do |f| Marshal.dump(x, f) end Pathname.new('alice.dumped').open('rb') do |f|
リスト中に登場する回数の多い要素トップ N を計算するとき、どんな風に書きますか? ランキングの集計 - まめめも via http://d.hatena.ne.jp/sumim/20070619/p2 たとえば、以下のように書きます。 ary = %w(foo bar foo baz foo bar qux foo bar qux quux) n = 3 count = Hash.new(0) ary.each do |e| count[e] += 1 end i = 1 count.keys.sort {|a, b| count[b] <=> count[a] }.first(n).each {|e| puts "#{i}位:" puts "- #{e}" i += 1 } 実行結果です。 1位: - foo 2位: - bar 3位: - quxと、ここまで書いてから、同数の取り扱い
Rubyでは、メソッド定義の中でもメソッドを定義することができます。 以下のプログラムでは、outerメソッドの定義の中でmethodというメソッドを再定義しています。そのため、outerメソッドの呼び出し前後で、methodの戻り値が変化しています。 def method return "Yahoo!" end def outer def method return "Google" end end p method #=> "Yahoo!" outer p method #=> "Google"
次のページ
このページを最初にブックマークしてみませんか?
『『rubyco(るびこ)の日記』』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く