soukouki’s diary

誰かの役に立つ記事をかけたらいいなあ

Ruby

Rubyに標準でついてくるLoggerは、Windows上かつマルチプロセスのとき、ログローテーションがうまくできないお話

ハマったので久しぶりに記事を書きました。 使用しているLoggerはlibrary logger (Ruby 2.7.0 リファレンスマニュアル)です。 ある日プログラムを書いていると、 log writing failed. closed stream log shifting failed. closed stream ... .. . という警告…

グリボト!とBlockKingの紹介

自分が作ったDiscordBotの紹介です。 招待したい場合は、 自身がサーバーの管理者権限を持っている場合 招待urlにアクセスすると導入する画面が出てきます。権限についてはできる限り絞ってあります。 持っていない場合 サーバーの管理者権限を持っている人…

電卓をワンライナーで書きたい!

さて、4ヶ月ぶりの更新です。 まぁ、やることはタイトルのとおりです。 改行、セミコロンと、セミコロンに近いもの((a=2)&&([a,a]) #=>[2, 2])は縛っていきます。 まずは逆ポーランド式電卓から f = ->(s){->(t){(t==s)? s : f[t]}[s.gsub(/(-?\d+) (-?\d+) …

Rubyで大きな値(数億桁)を扱うときのメモ

ある日。フィボナッチ数列の10億万番目とその前2つの値を計算して、割って黄金比を求めているときのメモ。 nilを代入しないとGCは片付けてくれない まぁ、メモリがそこまで逼迫することはあまりないと思うけど。 割り算ができない(浮動小数点数にできない) …

file_nameとfilenameはどっちが多い?

ある時、ふと疑問に思ったのです。 file_nameと、filenameはどっちがいいのだろうかと。 ふつう単語の間にアンダーバーを入れる記法だと、file_nameです。 ですが、filenameの方をよく見かける気がします。 ってことで、githubで検索してみました。 filename…

コンパクトなRubyのREPLを作ったよ!

コンパクト。悪く言ったら低機能。 irbやpryとシェルの相性が悪かったので。 github.com (作ったよ!って言う割には別リポジトリに数か月前からあるのは内緒のお話) 対応してるもの ローカル変数 マルチバイト文字 対応していないもの 定義途中の改行(Enter…

Rubyのヒアドキュメントの配列の書き方

普通のヒアドキュメント <<-EOS なんかいろいろ EOS メソッドがついたヒアドキュメント <<-EOS.length なんかいろいろ EOS ・・・配列のコンマはどこに置くんだ・・? 2回目のEOSの後ろ、2回目のEOSの次の行、3回目のEOSの前・・どれもうまくいかない メソッ…

Ruby いろんなループ(トリッキーなもの含む)

ループと言いつつ、やっているのは1から10の整数の乱数を作って、そこから6以上の値はもう一度やり直す。というもの 言い換えると、途中脱出が可能な無限ループです。え?スタックオーバーフロー?・・・ 多分、最初のと最後(2018年11月24日追記分)がいいと…

メモ Ruby対数正規分布の乱数

(2017/11/16)あああタイトル間違ってましたぁ・・更新前に見た方申し訳ないです・・ 合っているかは自信ないです・・ ゲームの乱数くらいにお使いください。 require "random_bell" # http://pmsl.planet.sci.kobe-u.ac.jp/~seto/?page_id=316 # をRubyに移…

Ruby 呼び出せないメソッド

define_method("!bar", ->{"foo"}) p method("!bar") p method("!bar").call # 呼び出し方 !bar #< 呼び出せない こんなことができるとは思ってなかった ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]にて確認

Hamlの組み込み

Hamlをテキストから直接実行したいときのメモ require "haml" template = <<'EOS' %p= a1 %p= a2*3 - a3.each do |i| %p= i**2 EOS haml_engine = Haml::Engine.new(template) puts haml_engine.render(Object.new, a1:123, a2:10, a3:[1, 2, 3, 5]) ヒアド…

Ruby:実行中のソースコードのファイルがあるディレクトリ

いいページがあるものの、検索でなかなか引っかからないので自分でページを作ってみた。 d.hatena.ne.jp これのものです。 File.expand_path(File.dirname(__FILE__))

Rubyでの実行されない宣言

((false)? a=123 : nil) この後のaの値が気になる。 実際にやってみた。 irb(main):001:0> ((false)? a=123 : nil) => nil irb(main):002:0> a => nil nilが代入されていた。 それならifはどうなるのか、 irb(main):003:0> if(false); b=123; end => nil irb…

メモ:Rubyで一つの文字列を受け取るソフト

受け取るところを (ARGV[0] || gets) こう書けばいい。

少しclojureに触れてみた感想

ringとか使ってました。 感想は「始めやすいlisp」という感じでした。 同じことをruby、scheme、clojure(末尾再帰最適化なし・あり)で書いてみました(短いのであまり参考にはならないかもしれませんが・・・) def power(a, b) power_i(a, a, b) end def powe…

Rubyのメソッドチェーンのデバッグ方法

また忘れてしまっていたので。 >>>>> tap <<<<< 誰かのtap押しの記事。 qiita.com 間違えてdupって書いてた。

rakeで、フォルダの中身を全て列挙する

folder1と、その中身を列挙したい。 files.include(%W{folder1}) # => ["folder1"] # 中身が列挙されない。 files.include(%W{folder1/*}) # => ["folder1/file2.txt", "folder1/folder2"] # folder1自体と、folder2の中身が表示されない。 files.include(%W…

Rubyのmethodsはインスタンスにするかで結果が変わる

pryで見てる時に、なんか目的のメソッドが出てこないなと思っていたけど、やっぱり違うそうで。 class Aaa def a_i end def self.a_c end end p Aaa.methods - Object.methods # => [:a_c] p Aaa.new.methods - Object.new.methods # => [:a_i] Objectからあ…

rakeのtaskに引数をつける

元 qiita.com 付け方、実行の仕方を何回も忘れるのでここに書いておく。 task :default, [:args1]do |task, args| p [task, args] end $ rake default[aaa] ["default", <Rake::Task default => []>, {:args1=>"aaa"}] もう一つタスクを定義してみる。 task :default, [:args1] => </rake::task>…

Rubyで、代入に=を使ったdslの作り方。

こんなのを読み込みたかった aaa = 123 bbb = 456 ほかのサイトだと「作れない」と書いてありますが、全然いけます。 def run(__path) __src_binding = eval(open(__path).read+"\nbinding") __src_binding .local_variables .delete_if{|name| name.to_s[0.…

メタプログラミングRubyを読んで(4)

最終回です。 前回 eval class AAA def get_binding binding end def aaa @aaa end end aaa = AAA.new aaa.aaa # => nil aaa.bbb # NameError: uninitialized class variable @@bbb in AAA aaa.get_binding # => #<Binding:0x00000002a16ab0> eval("@aaa=123",aaa.get_binding) aaa.aaa</binding:0x00000002a16ab0>…

Rubyの継承とmix-inをdotにするツールを作った

使ってやってください。 github.com 利用方法 ソースをコピーしてくる。 それをプロジェクトのパスから実行する。 ソースのファイルのパスを入力する。 図にするmoduleを入力する。 inheritance.dotにdotファイルがが出力される。 使い勝手が悪いかもしれま…

Rubyでeachしている時に次の要素に移るキーワード

eachで今の要素の処理をやめて、次の要素に移りたい時に 「forみたいにbreakで行けるでしょー」 (1..4).each do |n| break if n<=2 p n end 「あれ?何も出ない?」 =>調べる (1..4).each do |n| next if n<=2 p n end # 3 # 4 nextでした

Rubyで入力を配列にする方法

STDIN.readlines だけです。getsなんていりません! ただ、改行は残ってしまうので、 STDIN.readlines.map(&:chomp) こうしておきましょう。

メタプログラミングRubyを読んで(3)

前回 5.5まで(一部理解できてない) 特異メソッド a = [1,2,3] b = [1,2,3] c = a def a.xx self.inject(:+) end a.xx # => 6 b.xx # NoMethodError: undefined method `xx' for [1, 2, 3]:Array c.xx # => 6 [1,2,3].xx # NoMethodError: undefined method `…

メタプログラミングRubyを読んで(2)

前回 読んでたら疲れたので第4章までで知ったこととか。 ObjectはKernelモジュールをincludeしている なので def aaa "call aaa(#{self})" end aaa #=> "call aaa(main)" [].aaa #=> "call aaa([])" /aaa/.aaa #=> "call aaa((?-mix:aaa))" 余り使うことはな…

メタプログラミングRubyを読んで(1)

メタプログラミングRuby(第2版)を図書館でリクエストしていて、今日やっと届きました。 7月30日までに返さないと <- とりあえず第3章まで読んだので覚えたこととか。 使いすぎは良くない(当たり前) メタプログラミングにも静的なものと動的なものがある。 …

rubyの%記法って色々あるんですね。

blog.toshimaru.net を見て。 使えそうなところにはどしどし使っていきたいです。

タイプミスで数時間潰した

resulr = val[0] / val[2] 分子の方しか出てこなくてあーだこーだやってやっと見つかった。 正しいのは result = val[0] / val[2] resulr result ^

シンタックスハイライトってこれでいいのか

今まで a = 1.5+1 b = String.new('str') STDOUT.puts "#{a},#{b}" これから a = 1.5+1 b = String.new('str') STDOUT.puts "#{a},#{b}" 前の記事も直しておきます。